yuxingxing 2 years ago
parent
commit
54311e2a52
100 changed files with 28572 additions and 4299 deletions
  1. 1 1
      .gitignore
  2. 400 7
      App.vue
  3. 28 0
      androidPrivacy.json
  4. 308 0
      api/activity.js
  5. 178 0
      api/admin.js
  6. 441 0
      api/api.js
  7. 162 0
      api/kefu.js
  8. 43 0
      api/lottery.js
  9. 369 0
      api/order.js
  10. 18 0
      api/points_mall.js
  11. 193 0
      api/public.js
  12. 277 0
      api/store.js
  13. 672 0
      api/user.js
  14. 248 0
      components/Authorize.vue
  15. 57 0
      components/Loading/index.vue
  16. 186 0
      components/addressWindow/index.vue
  17. 209 0
      components/cartList/index.vue
  18. 128 0
      components/countDown/index.vue
  19. 269 0
      components/couponListWindow/index.vue
  20. 243 0
      components/couponWindow/index.vue
  21. 143 0
      components/cusPreviewImg/index.vue
  22. 189 0
      components/d_goodList/index.vue
  23. 42 0
      components/emptyPage.vue
  24. 231 0
      components/goodClass/index.vue
  25. 165 0
      components/goodList/index.vue
  26. 152 0
      components/guide/index.vue
  27. 129 0
      components/home/index.vue
  28. 196 0
      components/homeList/index.vue
  29. 185 0
      components/indexGoods/index.vue
  30. 814 0
      components/jyf-parser/jyf-parser.vue
  31. 102 0
      components/jyf-parser/libs/CssHandler.js
  32. 577 0
      components/jyf-parser/libs/MpHtmlParser.js
  33. 80 0
      components/jyf-parser/libs/config.js
  34. 35 0
      components/jyf-parser/libs/handler.sjs
  35. 44 0
      components/jyf-parser/libs/handler.wxs
  36. 476 0
      components/jyf-parser/libs/trees.vue
  37. 83 0
      components/kefuIcon/index.vue
  38. 301 0
      components/menuIcon.vue
  39. 350 0
      components/orderGoods/index.vue
  40. 212 0
      components/pageFooter/index.vue
  41. 33 0
      components/pageLoading.vue
  42. 103 0
      components/parabolaBall/ParabolaBall.vue
  43. 498 0
      components/payment/index.vue
  44. 181 0
      components/productConSwiper/index.vue
  45. 404 0
      components/productWindow/index.vue
  46. 110 0
      components/promotionGood/index.vue
  47. 118 0
      components/recommend/index.vue
  48. 148 0
      components/shareRedPackets/index.vue
  49. 0 1008
      components/shopro-auth-modal/shopro-auth-modal.vue
  50. 0 123
      components/shopro-canvas/shopro-canvas.vue
  51. 0 176
      components/shopro-coupon/shopro-coupon.vue
  52. 0 77
      components/shopro-empty/shopro-empty.vue
  53. 0 184
      components/shopro-float-btn/shopro-float-btn.vue
  54. 0 348
      components/shopro-goods-card/shopro-goods-card.vue
  55. 0 361
      components/shopro-live-card/shopro-live-card.vue
  56. 0 130
      components/shopro-mini-card/shopro-mini-card.vue
  57. 0 130
      components/shopro-navbar/shopro-navbar.vue
  58. 0 71
      components/shopro-notice-modal/shopro-notice-modal.vue
  59. 0 571
      components/shopro-share/shopro-share.vue
  60. 0 589
      components/shopro-sku/shopro-sku.vue
  61. 0 142
      components/shopro-tabbar/shopro-tabbar.vue
  62. 190 0
      components/skeleton/index.vue
  63. 52 0
      components/swipers/index.vue
  64. 185 0
      components/tabNav.vue
  65. 324 0
      components/tuiDrawer/index.vue
  66. 430 0
      components/update/app-update.vue
  67. BIN
      components/update/images/close.png
  68. BIN
      components/update/images/img.png
  69. BIN
      components/update/images/round.png
  70. BIN
      components/update/images/update-img.png
  71. 147 0
      components/userEvaluation/index.vue
  72. 1201 0
      components/zb-code/qrcode.js
  73. 210 0
      components/zb-code/zb-code.vue
  74. 33 0
      config/app.js
  75. 42 0
      config/cache.js
  76. 18 0
      config/socket.js
  77. 0 9
      env.js
  78. 1181 0
      lang/en_us.json
  79. 1181 0
      lang/fr_fr.json
  80. 1181 0
      lang/it_it.json
  81. 1181 0
      lang/ja_jp.json
  82. 1181 0
      lang/ko_kr.json
  83. 1181 0
      lang/mn_mn.json
  84. 1181 0
      lang/th_th.json
  85. 1181 0
      lang/vi_vn.json
  86. 1181 0
      lang/zh_cn.json
  87. 1181 0
      lang/zh_ft.json
  88. 79 0
      libs/chat.js
  89. 142 0
      libs/login.js
  90. 99 0
      libs/new_chat.js
  91. 42 0
      libs/order.js
  92. 220 0
      libs/routine.js
  93. 339 0
      libs/wechat.js
  94. 88 31
      main.js
  95. 95 101
      manifest.json
  96. 37 0
      mixins/SendVerifyCode.js
  97. 26 0
      mixins/color.js
  98. 220 0
      mixins/sharePoster.js
  99. 1991 218
      package-lock.json
  100. 21 22
      package.json

+ 1 - 1
.gitignore

@@ -1,2 +1,2 @@
 node_modules
-/unpackage
+/unpackage/**

+ 400 - 7
App.vue

@@ -1,15 +1,408 @@
-
+<style lang="scss">
+	@import "@/uni_modules/uview-ui/index.scss";
+</style>
 <script>
 	import {
-		init
-	} from "@/shopro";
+		checkLogin
+	} from './libs/login';
+	import {
+		HTTP_REQUEST_URL
+	} from './config/app';
+	import {
+		getShopConfig,
+		silenceAuth
+	} from '@/api/public';
+	import Auth from '@/libs/wechat.js';
+	import Routine from './libs/routine.js';
+	import {
+		silenceBindingSpread
+	} from "@/utils";
+	import {
+		getCartCounts,
+	} from '@/api/order.js';
+	import {
+		colorChange,
+		getCrmebCopyRight
+	} from '@/api/api.js';
+	import {
+		mapGetters
+	} from "vuex"
+	import colors from '@/mixins/color.js';
+	let green =
+		'--view-theme: rgba(66,202,77,1);--view-theme-16: #42CA4D;--view-priceColor:#FF7600;--view-minorColor:rgba(108, 198, 94, 0.5);--view-minorColorT:rgba(66, 202, 77, 0.1);--view-bntColor:#FE960F;--view-op-ten: rgba(66,202,77, 0.1);--view-main-start:#70E038; --view-main-over:#42CA4D;--view-op-point-four: rgba(66,202,77, 0.04);'
+	let red =
+		'--view-theme: rgba(233,51,35,1);--view-theme-16: #e93323;--view-priceColor:#e93323;--view-minorColor:rgba(233, 51, 35, 0.5);--view-minorColorT:rgba(233, 51, 35, 0.1);--view-bntColor:#FE960F;--view-op-ten: rgba(233,51,35, 0.1);--view-main-start:#FF6151; --view-main-over:#e93323;--view-op-point-four: rgba(233,51,35, 0.04);'
+	let blue =
+		'--view-theme: rgba(29,176,252,1);--view-theme-16:#1db0fc;--view-priceColor:#FD502F;--view-minorColor:rgba(58, 139, 236, 0.5);--view-minorColorT:rgba(9, 139, 243, 0.1);--view-bntColor:#22CAFD;--view-op-ten: rgba(29,176,252, 0.1);--view-main-start:#40D1F4; --view-main-over:#1DB0FC;--view-op-point-four: rgba(29,176,252, 0.04);'
+	let pink =
+		'--view-theme: rgba(255,68,143,1);--view-theme-16:#ff448f;--view-priceColor:#FF448F;--view-minorColor:rgba(255, 68, 143, 0.5);--view-minorColorT:rgba(255, 68, 143, 0.1);--view-bntColor:#282828;--view-op-ten: rgba(255,68,143, 0.1);--view-main-start:#FF67AD; --view-main-over:#FF448F;--view-op-point-four: rgba(255,68,143, 0.04);'
+	let orange =
+		'--view-theme: rgba(254,92,45,1); --view-theme-16:#FE5C2D;--view-priceColor:#FE5C2D;--view-minorColor:rgba(254, 92, 45, 0.5);--view-minorColorT:rgba(254, 92, 45, 0.1);--view-bntColor:#FDB000;--view-op-ten: rgba(254,92,45, 0.1);--view-main-start:#FF9445; --view-main-over:#FE5C2D;--view-op-point-four: rgba(254,92,45, 0.04);'
+
 	export default {
-		onLaunch(options) {
-			init(options);
+		globalData: {
+			spid: 0,
+			code: 0,
+			isLogin: false,
+			userInfo: {},
+			MyMenus: [],
+			globalData: false,
+			isIframe: false,
+			tabbarShow: true,
+			windowHeight: 0,
+			locale: ''
+		},
+		mixins: [colors],
+		computed: mapGetters(['isLogin', 'cartNum']),
+		watch: {
+			isLogin: {
+				deep: true, //深度监听设置为 true
+				handler: function(newV, oldV) {
+					if (newV) {
+						// this.getCartNum()
+					} else {
+						this.$store.commit('indexData/setCartNum', '')
+					}
+				}
+			},
+			cartNum(newCart, b) {
+				this.$store.commit('indexData/setCartNum', newCart + '')
+				if (newCart > 0) {
+					uni.setTabBarBadge({
+						index: Number(uni.getStorageSync('FOOTER_ADDCART')) || 2,
+						text: newCart + ''
+					})
+				} else {
+					uni.hideTabBarRedDot({
+						index: Number(uni.getStorageSync('FOOTER_ADDCART')) || 2
+					})
+				}
+			}
+		},
+		async onLaunch(option) {
+			let that = this;
+			colorChange('color_change').then(res => {
+				uni.setStorageSync('is_diy', res.data.is_diy)
+				uni.$emit('is_diy', res.data.is_diy)
+				switch (res.data.status) {
+					case 1:
+						uni.setStorageSync('viewColor', blue)
+						uni.$emit('ok', blue, res.data.status)
+						break;
+					case 2:
+						uni.setStorageSync('viewColor', green)
+						uni.$emit('ok', green, res.data.status)
+						break;
+					case 3:
+						uni.setStorageSync('viewColor', red)
+						uni.$emit('ok', red, res.data.status)
+						break;
+					case 4:
+						uni.setStorageSync('viewColor', pink)
+						uni.$emit('ok', pink, res.data.status)
+						break;
+					case 5:
+						uni.setStorageSync('viewColor', orange)
+						uni.$emit('ok', orange, res.data.status)
+						break;
+					default:
+						uni.setStorageSync('viewColor', red)
+						uni.$emit('ok', red, res.data.status)
+						break
+				}
+			});
+			if (option.query.spread) {
+				that.$Cache.set('spread', option.query.spread);
+				that.globalData.spid = option.query.spread;
+				that.globalData.pid = option.query.spread;
+				silenceBindingSpread()
+			}
+			if (option.query.spid) {
+				that.$Cache.set('spread', option.query.spid);
+				that.globalData.spid = option.query.spid;
+				that.globalData.pid = option.query.spid;
+				// silenceBindingSpread()
+			}
+			// #ifdef APP-PLUS || H5
+			uni.getSystemInfo({
+				success: function(res) {
+					// 首页没有title获取的整个页面的高度,里面的页面有原生标题要减掉就是视口的高度
+					// 状态栏是动态的可以拿到 标题栏是固定写死的是44px
+					let height = res.windowHeight - res.statusBarHeight - 44
+					// #ifdef H5 || APP-PLUS
+					that.globalData.windowHeight = res.windowHeight + 'px'
+					// #endif
+					// // #ifdef APP-PLUS
+					// that.globalData.windowHeight = height + 'px'
+					// // #endif
+
+				}
+			});
+			// #endif	
+			// #ifdef MP
+			if (HTTP_REQUEST_URL == '') {
+				console.error(
+					"请配置根目录下的config.js文件中的 'HTTP_REQUEST_URL'\n\n请修改开发者工具中【详情】->【AppID】改为自己的Appid\n\n请前往后台【小程序】->【小程序配置】填写自己的 appId and AppSecret"
+				);
+				return false;
+			}
+			if (option.query.hasOwnProperty('scene')) {
+
+				switch (option.scene) {
+					//扫描小程序码
+					case 1047:
+						let val = that.$util.getUrlParams(decodeURIComponent(option.query.scene));
+						that.globalData.code = val.pid === undefined ? val : val.pid;
+						break;
+						//长按图片识别小程序码
+					case 1048:
+						that.globalData.code = option.query.scene;
+						break;
+						//手机相册选取小程序码
+					case 1049:
+						that.globalData.code = option.query.scene;
+						break;
+						//直接进入小程序
+					case 1001:
+						that.globalData.spid = option.query.scene;
+						break;
+				}
+			}
+			const updateManager = wx.getUpdateManager();
+
+			updateManager.onCheckForUpdate(function(res) {
+				// 请求完新版本信息的回调
+			});
+
+			updateManager.onUpdateReady(function() {
+				wx.showModal({
+					title: '更新提示',
+					content: '新版本已经准备好,是否重启应用?',
+					success: function(res) {
+						if (res.confirm) {
+							// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
+							updateManager.applyUpdate();
+						}
+					}
+				});
+			});
+
+			updateManager.onUpdateFailed(function() {
+				return that.Tips({
+					title: '新版本下载失败'
+				});
+			});
+			// #endif
+			// getShopConfig().then(res => {
+			// 	this.$store.commit('SETPHONESTATUS', res.data.status);
+			// });
+			// 获取导航高度;
+			uni.getSystemInfo({
+				success: function(res) {
+					that.globalData.navHeight = res.statusBarHeight * (750 / res.windowWidth) + 91;
+				}
+			});
+			// #ifdef MP
+			let menuButtonInfo = uni.getMenuButtonBoundingClientRect();
+			that.globalData.navH = menuButtonInfo.top * 2 + menuButtonInfo.height / 2;
+			// #endif
+
+			// #ifdef H5
+			uni.getSystemInfo({
+				success(e) {
+					/* 窗口宽度大于420px且不在PC页面且不在移动设备时跳转至 PC.html 页面 */
+					if (e.windowWidth > 420 && !window.top.isPC && !/iOS|Android/i.test(e.system)) {
+						window.location.pathname = '/static/html/pc.html';
+					}
+				}
+			});
+			if (option.query.hasOwnProperty('type') && option.query.type == "iframeWindow") {
+				this.globalData.isIframe = true;
+			} else {
+				this.globalData.isIframe = false;
+			}
+
+			//公众号静默授权
+			// if (window.location.pathname !== '/' && option.query.scope === 'snsapi_base') {
+			// 	let snsapiBase = 'snsapi_base';
+			// 	let urlData = location.pathname + location.search;
+			// 	// if (!that.$store.getters.isLogin && uni.getStorageSync('authIng')) {
+			// 	// 	uni.setStorageSync('authIng', false)
+			// 	// }
+			// 	if (!that.$store.getters.isLogin && Auth.isWeixin()) {
+			// 		let code,
+			// 			state,
+			// 			scope = ''
+
+			// 		if (option.query.code instanceof Array) {
+			// 			code = option.query.code[option.query.code.length - 1]
+			// 		} else {
+			// 			code = option.query.code
+			// 		}
+
+
+			// 		if (code && code != uni.getStorageSync('snsapiCode') && location.pathname.indexOf(
+			// 				'/pages/users/wechat_login/index') === -1) {
+			// 			// 存储静默授权code
+			// 			uni.setStorageSync('snsapiCode', code);
+			// 			let spread = that.globalData.spid ? that.globalData.spid : '';
+			// 			uni.setStorageSync('authIng', true)
+			// 			silenceAuth({
+			// 					code: code,
+			// 					spread: that.$Cache.get('spread'),
+			// 					spid: that.globalData.code
+			// 				})
+			// 				.then(res => {
+			// 					uni.setStorageSync('authIng', false)
+			// 					uni.setStorageSync('snRouter', decodeURIComponent(decodeURIComponent(option.query
+			// 						.back_url)));
+			// 					if (res.data.key !== undefined && res.data.key) {
+			// 						this.$Cache.set('snsapiKey', res.data.key);
+			// 					} else {
+
+			// 						let time = res.data.expires_time - this.$Cache.time();
+			// 						this.$store.commit('LOGIN', {
+			// 							token: res.data.token,
+			// 							time: time
+			// 						});
+			// 						this.$Cache.set('WX_AUTH', code);
+			// 						this.$store.commit('SETUID', res.data.userInfo.uid);
+			// 						this.$store.commit('UPDATE_USERINFO', res.data.userInfo);
+
+			// 						if (option.query.back_url) {
+			// 							location.replace(decodeURIComponent(decodeURIComponent(option.query
+			// 								.back_url)));
+			// 						}
+			// 					}
+			// 				})
+			// 				.catch(error => {
+			// 					uni.setStorageSync('authIng', false)
+			// 					let url = ''
+			// 					if (option.query.back_url instanceof Array) {
+			// 						url = option.query.back_url[option.query.back_url.length - 1]
+			// 					} else {
+			// 						url = option.query.back_url
+			// 					}
+			// 					if (!that.$Cache.has('snsapiKey')) {
+			// 						if (location.pathname.indexOf('/pages/users/wechat_login/index') === -1) {
+			// 							Auth.oAuth(snsapiBase, url);
+			// 						}
+			// 					}
+			// 				});
+			// 		} else {
+			// 			if (!this.$Cache.has('snsapiKey')) {
+			// 				if (location.pathname.indexOf('/pages/users/wechat_login/index') === -1) {
+			// 					Auth.oAuth(snsapiBase, urlData);
+			// 				}
+			// 			}
+			// 		}
+			// 	} else {
+			// 		if (option.query.back_url) {
+			// 			location.replace(uni.getStorageSync('snRouter'));
+			// 		}
+			// 	}
+			// }
+			// #endif
+			// #ifdef MP
+			// 小程序静默授权
+			// if (!this.$store.getters.isLogin) {
+			// 	Routine.getCode()
+			// 		.then(code => {
+			// 			this.silenceAuth(code);
+			// 		})
+			// 		.catch(res => {
+			// 			uni.hideLoading();
+			// 		});
+			// }
+			// #endif
+			// #ifdef H5
+			// 添加crmeb chat 统计
+			var __s = document.createElement('script');
+			__s.src = `${HTTP_REQUEST_URL}/api/get_script`;
+			document.head.appendChild(__s);
+			// #endif
+			getCrmebCopyRight().then(res => {
+				uni.setStorageSync('copyRight', res.data)
+			})
+		},
+		methods: {
+			// 小程序静默授权
+			// silenceAuth(code) {
+			// 	let that = this;
+			// 	let spread = that.globalData.spid ? that.globalData.spid : '';
+			// 	silenceAuth({
+			// 			code: code,
+			// 			spread_spid: spread,
+			// 			spread_code: that.globalData.code
+			// 		})
+			// 		.then(res => {
+			// 			if (res.data.token !== undefined && res.data.token) {
+			// 				uni.hideLoading();
+			// 				let time = res.data.expires_time - this.$Cache.time();
+			// 				that.$store.commit('LOGIN', {
+			// 					token: res.data.token,
+			// 					time: time
+			// 				});
+			// 				that.$store.commit('SETUID', res.data.userInfo.uid);
+			// 				that.$store.commit('UPDATE_USERINFO', res.data.userInfo);
+			// 			}
+			// 		})
+			// 		.catch(res => {});
+			// },
+		},
+		onHide: function() {
+
 		}
 	};
 </script>
 
-<style lang="scss">
-	@import 'static/style/index.scss';
+<style>
+	@import url('@/plugin/emoji-awesome/css/tuoluojiang.css');
+	@import url('@/plugin/animate/animate.min.css');
+	@import 'static/css/base.css';
+	@import 'static/iconfont/iconfont.css';
+	@import 'static/css/guildford.css';
+	@import 'static/css/style.scss';
+
+	view {
+		box-sizing: border-box;
+	}
+
+	page {
+		font-family: PingFang SC;
+	}
+
+	.bg-color-red {
+		background-color: var(--view-theme) !important;
+	}
+
+	.syspadding {
+		padding-top: var(--status-bar-height);
+	}
+
+	.flex {
+		display: flex;
+	}
+
+	.uni-scroll-view::-webkit-scrollbar {
+		/* 隐藏滚动条,但依旧具备可以滚动的功能 */
+		display: none;
+	}
+
+	::-webkit-scrollbar {
+		width: 0;
+		height: 0;
+		color: transparent;
+	}
+
+	.uni-system-open-location .map-content.fix-position {
+		height: 100vh;
+		top: 0;
+		bottom: 0;
+	}
+
+	.open-location {
+		width: 100%;
+		height: 100vh;
+	}
 </style>

+ 28 - 0
androidPrivacy.json

@@ -0,0 +1,28 @@
+{
+    "version" : "1",
+    "prompt" : "template",
+    "title" : "用户协议与隐私政策",
+    "message" : "\t请务必审慎阅读、充分理解“用户协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。<br/>
+ 你可以阅读 <a href=\"pages/columnGoods/static/yhxy.html\">《用户协议》</a>与 <a href=\"pages/columnGoods/static/yszc.html\">《隐私政策》</a>了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。",
+    "buttonAccept" : "同意并接受",
+    "buttonRefuse" : "暂不同意",
+    "second" : {
+        "title" : "确认提示",
+        "message" : "进入应用前,你需先同意<a href=\"pages/columnGoods/static/yhxy.html\">《用户协议》</a>与<a href=\"pages/columnGoods/static/yszc.html\">《隐私政策》</a>,否则将退出应用。",
+        "buttonAccept" : "同意并继续",
+        "buttonRefuse" : "退出应用"
+    },
+    "styles" : {
+        "backgroundColor" : "#fff",
+        "borderRadius" : "5px",
+        "title" : {
+            "color" : "#000"
+        },
+        "buttonAccept" : {
+            "color" : "#fff"
+        },
+        "buttonRefuse" : {
+            "color" : "#ccc"
+        }
+    }
+}

+ 308 - 0
api/activity.js

@@ -0,0 +1,308 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from "@/utils/request.js";
+/**
+ * 
+ * 所有活动接口 包括:拼团,砍价,秒杀
+ * 
+ */
+
+/**
+ * 拼团列表
+ * 
+ */
+export function getCombinationList(data) {
+	return request.get('combination/list', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 拼团详情
+ * 
+ */
+export function getCombinationDetail(id) {
+	return request.get('combination/detail/' + id);
+}
+
+/**
+ * 拼团 开团
+ */
+export function getCombinationPink(id) {
+	return request.get("combination/pink/" + id);
+}
+
+/**
+ * 拼团 取消开团
+ */
+export function postCombinationRemove(data) {
+	return request.post("combination/remove", data);
+}
+
+/**
+ * 砍价列表
+ */
+export function getBargainList(data) {
+	return request.get("bargain/list", data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 拼团轮播
+ * 
+ */
+export function getCombinationBannerList(data) {
+	return request.get('combination/banner_list', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 拼团人数
+ * 
+ */
+export function getPink(data) {
+	return request.get('pink', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 
+ * 砍价列表(已参与)
+ * @param object data
+ */
+export function getBargainUserList(data) {
+	return request.get('bargain/user/list', data);
+}
+
+
+/**
+ * 砍价产品详情
+ */
+export function getBargainDetail(id, uid) {
+	return request.get(`bargain/detail/${id}?bargainUid=${uid}`);
+}
+
+/**
+ * 砍价 开启砍价用户信息
+ */
+export function postBargainStartUser(data) {
+	return request.post("bargain/start/user", data);
+}
+
+/**
+ * 砍价开启
+ */
+export function postBargainStart(bargainId) {
+	return request.post("bargain/start", {
+		bargainId: bargainId
+	});
+}
+
+/**
+ * 砍价 帮助好友砍价
+ */
+export function postBargainHelp(data) {
+	return request.post("bargain/help", data);
+}
+
+/**
+ * 砍价 砍掉金额
+ */
+export function postBargainHelpPrice(data) {
+	return request.post("bargain/help/price", data);
+}
+
+/**
+ * 砍价 砍价帮
+ */
+export function postBargainHelpList(data) {
+	return request.post("bargain/help/list", data);
+}
+
+/**
+ * 砍价 砍价帮总人数、剩余金额、进度条、已经砍掉的价格
+ */
+export function postBargainHelpCount(data) {
+	return request.post("bargain/help/count", data);
+}
+
+/**
+ * 砍价 观看/分享/参与次数
+ */
+export function postBargainShare(bargainId) {
+	return request.post("bargain/share", {
+		bargainId: bargainId
+	});
+}
+
+/**
+ * 秒杀产品时间区间
+ * 
+ */
+export function getSeckillIndexTime() {
+	return request.get('seckill/index', {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 秒杀产品列表
+ * @param int time
+ * @param object data
+ */
+export function getSeckillList(time, data) {
+	return request.get('seckill/list/' + time, data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 秒杀产品详情
+ * @param int id
+ */
+export function getSeckillDetail(id, data) {
+	return request.get('seckill/detail/' + id, data);
+}
+
+/**
+ * 砍价海报
+ * @param object data
+ * 
+ */
+export function getBargainPoster(data) {
+	return request.post('bargain/poster', data)
+}
+
+/**
+ * 拼团海报
+ * @param object data
+ * 
+ */
+export function getCombinationPoster(data) {
+	return request.post('combination/poster', data)
+}
+
+/**
+ * 砍价取消
+ */
+export function getBargainUserCancel(data) {
+	return request.post("bargain/user/cancel", data);
+}
+
+/**
+ * 获取秒杀小程序二维码
+ */
+export function seckillCode(id, data) {
+	return request.get("seckill/code/" + id, data);
+}
+
+/**
+ * 获取拼团小程序二维码
+ */
+export function scombinationCode(id) {
+	return request.get("combination/code/" + id);
+}
+
+/**
+ * 获取砍价海报详细信息
+ */
+export function getCombinationPosterData(id) {
+	return request.get("combination/poster_info/" + id);
+}
+
+
+/**
+ * 获取砍价海报详细信息
+ */
+export function getBargainPosterData(id) {
+	return request.get("bargain/poster_info/" + id);
+}
+
+/**
+ * 获取积分订单详细信息
+ */
+export function integralOrderConfirm(data) {
+	return request.post('store_integral/order/confirm', data);
+}
+
+/**
+ * 获取积分订单创建
+ */
+export function integralOrderCreate(data) {
+	return request.post('store_integral/order/create', data);
+}
+/**
+ * 获取积分订单详情
+ * @param string cartId
+ */
+export function integralOrderDetails(order) {
+	return request.get(`store_integral/order/detail/${order}`);
+}
+
+/**
+ * 积分产品详情
+ * @param int id
+ * 
+ */
+export function getIntegralProductDetail(id) {
+	return request.get('store_integral/detail/' + id, {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 积分商城商品列表
+ * @param object data
+ */
+export function getStoreIntegralList(data) {
+	return request.get('store_integral/list', data, );
+}
+
+/**
+ * 积分兑换列表
+ * @param object data
+ */
+export function getIntegralOrderList(data) {
+	return request.get('store_integral/order/list', data);
+}
+
+/**
+ * 积分兑换详情
+ */
+export function getLogisticsDetails(orderId) {
+	return request.get(`store_integral/order/express/${orderId}`);
+}
+
+/**
+ * 积分兑换订单确认收货
+ * @param object data
+ */
+export function orderTake(data) {
+	return request.post(`store_integral/order/take`, data);
+}
+
+/**
+ * 积分兑换订单删除
+ * @param object data
+ */
+export function orderDel(data) {
+	return request.post(`store_integral/order/del`, data);
+}
+
+/**
+ * 预售商品列表
+ */
+export function getPresellList(data) {
+	return request.get("advance/list", data);
+}

+ 178 - 0
api/admin.js

@@ -0,0 +1,178 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+
+import request from "@/utils/request.js";
+
+/**
+ * 统计数据
+ */
+export function getStatisticsInfo() {
+	return request.get("admin/order/statistics", {}, {
+		login: true
+	});
+}
+/**
+ * 订单月统计
+ */
+export function getStatisticsMonth(where) {
+	return request.get("admin/order/data", where, {
+		login: true
+	});
+}
+/**
+ * 订单月统计
+ */
+export function getAdminOrderList(where) {
+	return request.get("admin/order/list", where, {
+		login: true
+	});
+}
+/**
+ * 订单改价
+ */
+export function setAdminOrderPrice(data) {
+	return request.post("admin/order/price", data, {
+		login: true
+	});
+}
+/**
+ * 订单备注
+ */
+export function setAdminOrderRemark(data) {
+	return request.post("admin/order/remark", data, {
+		login: true
+	});
+}
+/**
+ * 订单详情
+ */
+export function getAdminOrderDetail(orderId) {
+	return request.get("admin/order/detail/" + orderId, {}, {
+		login: true
+	});
+}
+
+/**
+ * 退款订单详情
+ */
+export function getAdminRefundOrderDetail(orderId) {
+	return request.get("admin/refund_order/detail/" + orderId, {}, {
+		login: true
+	});
+}
+
+/**
+ * 订单发货信息获取
+ */
+export function getAdminOrderDelivery(orderId) {
+	return request.get(
+		"admin/order/delivery/gain/" + orderId, {}, {
+			login: true
+		}
+	);
+}
+
+/**
+ * 订单发货保存
+ */
+export function setAdminOrderDelivery(id, data) {
+	return request.post("admin/order/delivery/keep/" + id, data, {
+		login: true
+	});
+}
+/**
+ * 订单统计图
+ */
+export function getStatisticsTime(data) {
+	return request.get("admin/order/time", data, {
+		login: true
+	});
+}
+/**
+ * 线下付款订单确认付款
+ */
+export function setOfflinePay(data) {
+	return request.post("admin/order/offline", data, {
+		login: true
+	});
+}
+/**
+ * 订单确认退款
+ */
+export function setOrderRefund(data) {
+	return request.post("admin/order/refund", data, {
+		login: true
+	});
+}
+
+/**
+ * 获取快递公司
+ * @returns {*}
+ */
+export function getLogistics(data) {
+	return request.get("logistics", data, {
+		login: false
+	});
+}
+
+/**
+ * 订单核销
+ * @returns {*}
+ */
+export function orderVerific(verify_code, is_confirm) {
+	return request.post("order/order_verific", {
+		verify_code,
+		is_confirm
+	});
+}
+
+/**
+ * 获取物流公司模板
+ * @returns {*}
+ */
+export function orderExportTemp(data) {
+	return request.get("admin/order/export_temp", data);
+}
+
+/**
+ * 获取订单打印默认配置
+ * @returns {*}
+ */
+export function orderDeliveryInfo() {
+	return request.get("admin/order/delivery_info");
+}
+
+/**
+ * 配送员列表
+ * @returns {*}
+ */
+export function orderOrderDelivery() {
+	return request.get("admin/order/delivery");
+}
+
+/**
+ * 退款列表
+ * @returns {*}
+ */
+export function orderRefund_order(where) {
+	return request.get("admin/refund_order/list", where, {
+		login: true
+	});
+}
+
+/**
+ * 订单备注(退款)
+ */
+export function setAdminRefundRemark(data) {
+	return request.post("admin/refund_order/remark", data, {
+		login: true
+	});
+}

+ 441 - 0
api/api.js

@@ -0,0 +1,441 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from "@/utils/request.js";
+/**
+ * 公共接口 ,优惠券接口 , 行业此讯 , 手机号码注册
+ * 
+ */
+
+/**
+ * 获取主页数据 无需授权
+ * 
+ */
+export function getIndexData() {
+	return request.get("v2/index", {}, {
+		noAuth: true
+	});
+}
+/**
+ * 获取服务器类型
+ * 
+ */
+export function getServerType() {
+	return request.get("v2/site_serve", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取登录授权login
+ * 
+ */
+export function getLogo() {
+	return request.get('wechat/get_logo', {}, {
+		noAuth: true
+	});
+}
+
+
+/**
+ * 保存form_id
+ * @param string formId 
+ */
+export function setFormId(formId) {
+	return request.post("wechat/set_form_id", {
+		formId: formId
+	});
+}
+
+/**
+ * 领取优惠卷
+ * @param int couponId
+ * 
+ */
+export function setCouponReceive(couponId) {
+	return request.post('coupon/receive', {
+		couponId: couponId
+	});
+}
+/**
+ * 优惠券列表
+ * @param object data
+ */
+export function getCoupons(data) {
+	return request.get('v2/coupons', data, {
+		noAuth: true
+	})
+}
+/**
+ * 首页优惠券列表组件数据
+ * @param object data
+ */
+export function getCouponsIndex(data) {
+	return request.get('coupons', data, {
+		noAuth: true
+	})
+}
+
+/**
+ * 我的优惠券
+ * @param int types 0全部  1未使用 2已使用
+ */
+export function getUserCoupons(types, data) {
+	return request.get('coupons/user/' + types, data)
+}
+
+/**
+ * 首页新人优惠券
+ * 
+ */
+export function getNewCoupon() {
+	return request.get('v2/new_coupon')
+}
+
+/**
+ * 文章分类列表
+ * 
+ */
+export function getArticleCategoryList() {
+	return request.get('article/category/list', {}, {
+		noAuth: true
+	})
+}
+
+/**
+ * 文章列表
+ * @param int cid
+ * 
+ */
+export function getArticleList(cid, data) {
+	return request.get('article/list/' + cid, data, {
+		noAuth: true
+	})
+}
+
+/**
+ * 文章 热门列表
+ * 
+ */
+export function getArticleHotList() {
+	return request.get('article/hot/list', {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 文章 轮播列表
+ * 
+ */
+export function getArticleBannerList() {
+	return request.get('article/banner/list', {}, {
+		noAuth: true
+	})
+}
+
+/**
+ * 文章详情
+ * @param int id 
+ * 
+ */
+export function getArticleDetails(id) {
+	return request.get('article/details/' + id, {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 手机号+验证码登录接口
+ * @param object data
+ */
+export function loginMobile(data) {
+	return request.post('login/mobile', data, {
+		noAuth: true
+	})
+}
+
+/**
+ * 获取短信KEY
+ * @param object phone
+ */
+export function verifyCode() {
+	return request.get('verify_code', {}, {
+		noAuth: true
+	})
+}
+
+/**
+ * 验证码发送
+ * @param object phone
+ */
+export function registerVerify(phone, reset, key, code) {
+	return request.post('register/verify', {
+		phone: phone,
+		type: reset === undefined ? 'reset' : reset,
+		key: key,
+		code: code
+	}, {
+		noAuth: true
+	})
+}
+
+/**
+ * 手机号注册
+ * @param object data
+ * 
+ */
+export function phoneRegister(data) {
+	return request.post('register', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 手机号修改密码
+ * @param object data
+ * 
+ */
+export function phoneRegisterReset(data) {
+	return request.post('register/reset', data, {
+		noAuth: true
+	})
+}
+
+/**
+ * 手机号+密码登录
+ * @param object data
+ * 
+ */
+export function phoneLogin(data) {
+	return request.post('login', data, {
+		noAuth: true
+	})
+}
+
+/**
+ * 切换H5登录
+ * @param object data
+ */
+// #ifdef MP
+export function switchH5Login() {
+	return request.post('switch_h5', {
+		'from': 'routine'
+	});
+}
+// #endif
+
+/*
+ * h5切换公众号登陆
+ * */
+// #ifdef H5
+export function switchH5Login() {
+	return request.post("switch_h5", {
+		'from': "wechat"
+	});
+}
+// #endif
+
+/**
+ * 绑定手机号
+ * 
+ */
+export function bindingPhone(data) {
+	return request.post('binding', data, {
+		noAuth: true
+	});
+}
+
+
+
+/**
+ * 绑定手机号
+ * 
+ */
+export function bindingUserPhone(data) {
+	return request.post('user/binding', data);
+}
+
+/**
+ * 退出登錄
+ * 
+ */
+export function logout() {
+	return request.get('logout');
+}
+
+/**
+ * 获取订阅消息id
+ */
+export function getTempIds() {
+	return request.get('wechat/temp_ids', {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 首页拼团数据
+ */
+export function pink() {
+	return request.get('pink', {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取城市信息
+ */
+export function getCity() {
+	return request.get('city_list', {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取列表
+ */
+export function getLiveList(page, limit) {
+	return request.get('wechat/live', {
+		page,
+		limit
+	}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取首页DIY;
+ */
+export function getDiy(id) {
+	return request.get(`v2/diy/get_diy/default${id ? '?id='+id:''}`, {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 一键换色;
+ */
+export function colorChange(name) {
+	return request.get('v2/diy/color_change/' + name, {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取公众号关注
+ * @returns {*}
+ */
+export function follow() {
+	return request.get("wechat/follow", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 更换手机号码
+ * @returns {*}
+ */
+export function updatePhone(data) {
+	return request.post("user/updatePhone", data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 首页优惠券弹窗
+ * @returns {*}
+ */
+export function getCouponV2() {
+	return request.get("v2/get_today_coupon", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 新用户优惠券弹窗
+ * @returns {*}
+ */
+export function getCouponNewUser() {
+	return request.get("v2/new_coupon", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 首页快速选择数据
+ * @param {Object} data
+ */
+export function category(data) {
+	return request.get("category", data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 个人搜索历史
+ * @param {Object} data
+ */
+export function searchList(data) {
+	return request.get('v2/user/search_list', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 删除搜索历史
+ */
+export function clearSearch() {
+	return request.get('v2/user/clean_search');
+}
+/**
+ * 获取网站基础配置
+ */
+export function siteConfig(data) {
+	return request.get('site_config', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * App微信登录
+ * @returns {*}
+ */
+export function wechatAppAuth(data) {
+	return request.post("wechat/app_auth", data, {
+		noAuth: true
+	});
+}
+/**
+ * 获取客服类型
+ * @returns {*}
+ */
+export function getCustomerType(data) {
+	return request.get("get_customer_type", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取开屏广告
+ * @returns {*}
+ */
+export function getOpenAdv(data) {
+	return request.get("get_open_adv", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取版权信息
+ */
+export function getCrmebCopyRight() {
+	return request.get('copyright', {}, {
+		noAuth: true
+	})
+}

+ 162 - 0
api/kefu.js

@@ -0,0 +1,162 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from "@/utils/request.js";
+
+/**
+ * 客服登录
+ * @param data object 用户账号密码
+ */
+export function kefuLogin(data) {
+	return request.post("login", data, {
+		noAuth: true,
+		kefu: true
+	});
+}
+
+/**
+ * 获取左侧客服聊天用户列表
+ * @constructor
+ */
+export function record(data) {
+	return request.get("user/record", data, {
+		noAuth: true,
+		kefu: true
+	});
+}
+
+/**
+ * 客服话术
+ * @constructor
+ */
+export function speeChcraft(data) {
+	return request.get("service/speechcraft", data, {
+		noAuth: true,
+		kefu: true
+	});
+}
+
+/**
+ * 客服转接列表
+ * @constructor
+ */
+export function transferList(data) {
+	return request.get("service/transfer_list", data, {
+		noAuth: true,
+		kefu: true
+	});
+}
+
+/**
+ * 商品购买记录
+ * @constructor
+ */
+export function productCart(id, data) {
+	return request.get("product/cart/" + id, data, {
+		noAuth: true,
+		kefu: true
+	});
+}
+
+/**
+ * 热销商品
+ * @constructor
+ */
+export function productHot(id, data) {
+	return request.get("product/hot/" + id, data, {
+		noAuth: true,
+		kefu: true
+	});
+}
+
+/**
+ * 商品足记
+ * @constructor
+ */
+export function productVisit(id, data) {
+	return request.get("product/visit/" + id, data, {
+		noAuth: true,
+		kefu: true
+	});
+}
+
+/**
+ * 客服用户聊天列表
+ * @constructor
+ */
+export function serviceList(data) {
+	return request.get("service/list", data, {
+		noAuth: true,
+		kefu: true
+	});
+}
+
+/**
+ * 客服转接
+ * @constructor
+ */
+export function serviceTransfer(data) {
+	return request.post("service/transfer", data, {
+		noAuth: true,
+		kefu: true
+	});
+}
+
+/**
+ * 客服详细信息
+ * @constructor
+ */
+export function serviceInfo(data) {
+	return request.get("service/info", data, {
+		noAuth: true,
+		kefu: true
+	});
+}
+
+/**
+ * 客服反馈头部信息
+ * @constructor
+ */
+export function serviceFeedBack() {
+	return request.get("user/service/feedback");
+}
+
+/**
+ * 客服反馈
+ * @constructor
+ */
+export function feedBackPost(data) {
+	return request.post("user/service/feedback", data);
+}
+
+/**
+ * 检测登录code
+ * @constructor
+ */
+export function codeStauts(data) {
+	return request.get("user/code", data);
+}
+/**
+ * 获取客服端口
+ * @constructor
+ */
+export function getWorkermanUrl(data) {
+	return request.get('get_workerman_url', {}, {
+		noAuth: true
+	})
+}
+
+/**
+ * 客服扫码登录code
+ * @constructor
+ */
+export function kefuScanLogin(data) {
+	return request.post("user/code", data);
+}

+ 43 - 0
api/lottery.js

@@ -0,0 +1,43 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from "@/utils/request.js";
+
+/**
+ * 获取抽奖详情信息
+ * 
+ */
+export function getLotteryData(type) {
+	return request.get(`v2/lottery/info/${type}`);
+}
+
+/**
+ * 参与抽奖
+ * 
+ */
+export function startLottery(data) {
+	return request.post(`v2/lottery`, data);
+}
+
+/**
+ * 领奖
+ * 
+ */
+export function receiveLottery(data) {
+	return request.post(`v2/lottery/receive`, data);
+}
+
+/**
+ * 获取中奖记录
+ * 
+ */
+export function getLotteryList(data) {
+	return request.get(`v2/lottery/record`, data);
+}

+ 369 - 0
api/order.js

@@ -0,0 +1,369 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from "@/utils/request.js";
+
+/**
+ * 获取购物车列表
+ * @param numType boolean true 购物车数量,false=购物车产品数量
+ */
+export function getCartCounts(numType) {
+	return request.get("cart/count", {
+		numType: numType === undefined ? 0 : numType
+	});
+}
+/**
+ * 获取购物车列表
+ * 
+ */
+export function getCartList(data) {
+	return request.get("cart/list", data);
+}
+
+/**
+ * 修改购物车
+ * 
+ */
+export function getResetCart(data) {
+	return request.post("v2/reset_cart", data);
+}
+
+/**
+ * 修改购物车数量
+ * @param int cartId  购物车id
+ * @param int number 修改数量
+ */
+export function changeCartNum(cartId, number) {
+	return request.post("cart/num", {
+		id: cartId,
+		number: number
+	});
+}
+/**
+ * 清除购物车
+ * @param object ids join(',') 切割成字符串
+ */
+export function cartDel(ids) {
+	if (typeof ids === 'object')
+		ids = ids.join(',');
+	return request.post('cart/del', {
+		ids: ids
+	});
+}
+/**
+ * 订单列表
+ * @param object data
+ */
+export function getOrderList(data) {
+	return request.get('order/list', data);
+}
+
+/**
+ * 订单产品信息
+ * @param string unique 
+ */
+export function orderProduct(unique) {
+	return request.post('order/product', {
+		unique: unique
+	});
+}
+
+/**
+ * 订单评价
+ * @param object data
+ * 
+ */
+export function orderComment(data) {
+	return request.post('order/comment', data);
+}
+
+/**
+ * 订单支付
+ * @param object data
+ */
+export function orderPay(data) {
+	return request.post('order/pay', data);
+}
+
+/**
+ * 删除已退款和拒绝退款的订单
+ * @param string uni
+ * 
+ */
+export function refundOrderDel(uni) {
+	return request.get('order/refund/del/' + uni, {});
+}
+
+/**
+ * 订单统计数据
+ */
+export function orderData() {
+	return request.get('order/data')
+}
+
+/**
+ * 订单取消
+ * @param string id
+ * 
+ */
+export function orderCancel(id) {
+	return request.post('order/cancel', {
+		id: id
+	});
+}
+
+/**
+ * 删除已完成订单
+ * @param string uni
+ * 
+ */
+export function orderDel(uni) {
+	return request.post('order/del', {
+		uni: uni
+	});
+}
+
+/**
+ * 订单详情
+ * @param string uni 
+ */
+export function getOrderDetail(uni, cart_id) {
+	return request.get('order/detail/' + uni + `${cart_id ? `/${cart_id}`:''}`);
+}
+/**
+ * 退款订单详情
+ * @param string uni 
+ */
+export function getRefundOrderDetail(uni, cart_id) {
+	return request.get('order/refund_detail/' + uni + `${cart_id ? `/${cart_id}`:''}`);
+}
+
+/**
+ * 再次下单
+ * @param string uni
+ * 
+ */
+export function orderAgain(uni) {
+	return request.post('order/again', {
+		uni: uni
+	});
+}
+
+/**
+ * 订单收货
+ * @param string uni
+ * 
+ */
+export function orderTake(uni) {
+	return request.post('order/take', {
+		uni: uni
+	});
+}
+
+/**
+ * 订单查询物流信息
+ * @returns {*}
+ */
+export function express(uni, type) {
+	return request.get("order/express/" + uni + `${type?'/refund':''}`);
+}
+
+/**
+ * 获取退款理由
+ * 
+ */
+export function ordeRefundReason() {
+	return request.get('order/refund/reason');
+}
+
+/**
+ * 订单退款审核
+ * @param object data
+ */
+export function orderRefundVerify(data) {
+	return request.post('order/refund/verify', data);
+}
+
+/**
+ * 订单确认获取订单详细信息
+ * @param string cartId
+ */
+export function orderConfirm(cartId, news, addressId, shipping_type) {
+	return request.post('order/confirm', {
+		cartId,
+		'new': news,
+		addressId,
+		shipping_type
+	});
+}
+
+/**
+ * 获取确认订单页面是否展示快递配送和到店自提
+ * @param string cartId
+ */
+export function checkShipping(cartId, news) {
+	return request.post('order/check_shipping', {
+		cartId,
+		'new': news
+	});
+}
+
+/**
+ * 获取当前金额能使用的优惠卷
+ * @param string price
+ * 
+ */
+export function getCouponsOrderPrice(price, data) {
+	return request.get('coupons/order/' + price, data)
+}
+
+/**
+ * 订单创建
+ * @param string key
+ * @param object data
+ * 
+ */
+export function orderCreate(key, data) {
+	return request.post('order/create/' + key, data);
+}
+
+/**
+ * 计算订单金额
+ * @param key
+ * @param data
+ * @returns {*}
+ */
+export function postOrderComputed(key, data) {
+	return request.post("order/computed/" + key, data);
+}
+
+/**
+ * 订单优惠券
+ * @param key
+ * @param data
+ * @returns {*}
+ */
+export function orderCoupon(orderId) {
+	return request.post("v2/order/product_coupon/" + orderId);
+}
+
+/**
+ * 计算会员线下付款金额
+ * @param {Object} data
+ */
+export function offlineCheckPrice(data) {
+	return request.post("order/offline/check/price", data);
+}
+
+/**
+ * 线下扫码付款
+ * @param {Object} data
+ */
+export function offlineCreate(data) {
+	return request.post("order/offline/create", data);
+}
+
+/**
+ * 支付方式开关
+ */
+export function orderOfflinePayType() {
+	return request.get('order/offline/pay/type');
+}
+
+/**
+ * 开票记录
+ */
+export function orderInvoiceList(data) {
+	return request.get('v2/order/invoice_list', data);
+}
+
+/**
+ * 开票订单详情
+ * @param {Object} id
+ */
+export function orderInvoiceDetail(id) {
+	return request.get(`v2/order/invoice_detail/${id}`);
+}
+
+
+/**
+ * 支付宝支付
+ * @param {Object} key
+ * @param {Object} quitUrl
+ */
+export function aliPay(key, quitUrl) {
+	return request.get('ali_pay', {
+		key,
+		quitUrl
+	}, {
+		noAuth: true
+	});
+}
+
+
+/**
+ * 退货物流单号提交
+ * @param {Object} data
+ */
+export function refundExpress(data) {
+	return request.post("order/refund/express", data);
+}
+
+/**
+ * 分类购物车列表
+ */
+export function vcartList() {
+	return request.get("v2/cart_list");
+}
+
+/**
+ * 退款商品列表
+ */
+export function refundGoodsList(orderId) {
+	return request.get(`order/refund/cart_info/${orderId}`);
+}
+
+/**
+ * 申请退款商品列表
+ */
+export function postRefundGoods(data) {
+	return request.post(`order/refund/cart_info`, data);
+}
+
+/**
+ * 退款商品提交
+ */
+export function returnGoodsSubmit(id, data) {
+	return request.post(`order/refund/apply/${id}`, data);
+}
+
+/**
+ * 新订单列表 2.1版本
+ * @param object data
+ */
+export function getNewOrderList(data) {
+	return request.get('order/refund/list', data);
+}
+
+/**
+ * 退款订单详情
+ * @param string uni 
+ */
+export function refundOrderDetail(uni) {
+	return request.get('order/refund/detail/' + uni);
+}
+
+/**
+ * 放弃申请退款
+ * @param string uni 
+ */
+export function cancelRefundOrder(uni) {
+	return request.post('order/refund/cancel/' + uni);
+}

+ 18 - 0
api/points_mall.js

@@ -0,0 +1,18 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from "@/utils/request.js";
+
+/**
+ * 积分商城
+ */
+export function getStoreIntegral(data) {
+	return request.get("store_integral/index", data);
+}

+ 193 - 0
api/public.js

@@ -0,0 +1,193 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from "@/utils/request.js";
+import wechat from "@/libs/wechat.js";
+
+/**
+ * 获取微信sdk配置
+ * @returns {*}
+ */
+export function getWechatConfig() {
+	return request.get(
+		"wechat/config", {
+			url: wechat.signLink()
+		}, {
+			noAuth: true
+		}
+	);
+}
+
+/**
+ * 获取微信sdk配置
+ * @returns {*}
+ */
+export function wechatAuth(code, spread, login_type) {
+	return request.get(
+		"wechat/auth", {
+			code,
+			spread,
+			login_type
+		}, {
+			noAuth: true
+		}
+	);
+}
+
+/**
+ * 获取登录授权login
+ * 
+ */
+export function getLogo() {
+	return request.get('wechat/get_logo', {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 小程序用户登录
+ * @param data object 小程序用户登陆信息
+ */
+export function login(data) {
+	return request.post("wechat/mp_auth", data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 静默授权
+ * @param {Object} data
+ */
+export function silenceAuth(data) {
+	//#ifdef MP
+	return request.get("v2/wechat/silence_auth", data, {
+		noAuth: true
+	});
+	//#endif
+	//#ifdef H5
+	return request.get("v2/wechat/wx_silence_auth", data, {
+		noAuth: true
+	});
+	//#endif
+}
+
+/**
+ * 分享
+ * @returns {*}
+ */
+export function getShare() {
+	return request.get("share", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取关注海报
+ * @returns {*}
+ */
+export function follow() {
+	return request.get("wechat/follow", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取图片base64
+ * @retins {*}
+ * */
+export function imageBase64(image, code) {
+	return request.post(
+		"image_base64", {
+			image: image,
+			code: code
+		}, {
+			noAuth: true
+		}
+	);
+}
+
+/**
+ * 自动复制口令功能
+ * @returns {*}
+ */
+export function copyWords() {
+	return request.get("copy_words", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取商城是否强制绑定手机号
+ */
+export function getShopConfig() {
+	return request.get('v2/bind_status', {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 小程序绑定手机号
+ * @param {Object} data
+ */
+export function getUserPhone(data) {
+	return request.post('v2/auth_bindind_phone', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 小程序用户登录
+ * @param data object 小程序用户登陆信息
+ */
+export function routineLogin(data) {
+	return request.get("v2/wechat/routine_auth", data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取微信sdk配置
+ * @returns {*}
+ */
+export function wechatAuthV2(code, spread) {
+	return request.get(
+		"v2/wechat/auth", {
+			code,
+			spread
+		}, {
+			noAuth: true
+		}
+	);
+}
+
+/**
+ * 获取组件底部菜单
+ * @param data object 获取组件底部菜单
+ */
+export function getNavigation(data) {
+	return request.get("navigation", data, {
+		noAuth: true
+	});
+}
+export function getSubscribe() {
+	return request.get("subscribe", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取版本信息
+ * @param 系统类型
+ */
+export function getUpdateInfo(type) {
+	return request.get("get_new_app/" + type, {}, {
+		noAuth: true
+	});
+}

+ 277 - 0
api/store.js

@@ -0,0 +1,277 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from "@/utils/request.js";
+
+/**
+ * 获取产品详情
+ * @param int id
+ * 
+ */
+export function getProductDetail(id) {
+	return request.get('product/detail/' + id, {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 产品分享二维码 推广员
+ * @param int id
+ */
+// #ifdef H5  || APP-PLUS
+export function getProductCode(id) {
+	return request.get('product/code/' + id, {});
+}
+// #endif
+// #ifdef MP
+export function getProductCode(id) {
+	return request.get('product/code/' + id, {
+		user_type: 'routine'
+	});
+}
+// #endif
+
+/**
+ * 添加收藏
+ * @param int id
+ * @param string category product=普通产品,product_seckill=秒杀产品
+ */
+export function collectAdd(id, category) {
+	return request.post('collect/add', {
+		id: id,
+		'product': category === undefined ? 'product' : category
+	});
+}
+
+/**
+ * 删除收藏产品
+ * @param int id
+ * @param string category product=普通产品,product_seckill=秒杀产品
+ */
+export function collectDel(id, category) {
+	return request.post('collect/del', {
+		id: id,
+		category: category === undefined ? 'product' : category
+	});
+}
+
+/**
+ * 购车添加
+ * 
+ */
+export function postCartAdd(data) {
+	return request.post('cart/add', data);
+}
+
+/**
+ * 获取分类列表
+ * 
+ */
+export function getCategoryList() {
+	return request.get('category', {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取产品列表
+ * @param object data
+ */
+export function getProductslist(data) {
+	return request.get('products', data, {
+		noAuth: true
+	});
+}
+
+
+
+/**
+ * 获取推荐产品
+ * 
+ */
+export function getProductHot(page, limit) {
+	return request.get("product/hot", {
+		page: page === undefined ? 1 : page,
+		limit: limit === undefined ? 4 : limit
+	}, {
+		noAuth: true
+	});
+}
+/**
+ * 批量收藏
+ * 
+ * @param object id  产品编号 join(',') 切割成字符串
+ * @param string category 
+ */
+export function collectAll(id, category) {
+	return request.post('collect/all', {
+		id: id,
+		category: category === undefined ? 'product' : category
+	});
+}
+
+/**
+ * 首页产品的轮播图和产品信息
+ * @param int type 
+ * 
+ */
+export function getGroomList(type, data) {
+	return request.get('groom/list/' + type, data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取收藏列表
+ * @param object data
+ */
+export function getCollectUserList(data) {
+	return request.get('collect/user', data)
+}
+
+/**
+ * 获取产品评论
+ * @param int id
+ * @param object data
+ * 
+ */
+export function getReplyList(id, data) {
+	return request.get('reply/list/' + id, data)
+}
+
+/**
+ * 产品评价数量和好评度
+ * @param int id
+ */
+export function getReplyConfig(id) {
+	return request.get('reply/config/' + id);
+}
+
+/**
+ * 获取搜索关键字获取
+ * 
+ */
+export function getSearchKeyword() {
+	return request.get('search/keyword', {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 门店列表
+ * @returns {*}
+ */
+export function storeListApi(data) {
+	return request.get("store_list", data);
+}
+
+/**
+ * 套餐列表
+ * @param int id
+ * 
+ */
+export function storeDiscountsList(id) {
+	return request.get('store_discounts/list/' + id, {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 购车添加、减少、修改
+ * 
+ */
+export function postCartNum(data) {
+	return request.post('v2/set_cart_num', data);
+}
+/**
+ * 代理商申请
+ * 
+ */
+export function create(data) {
+	return request.post(`agent/apply/${data.id}`, data);
+}
+
+/**
+ * 代理商规则
+ * @param object data
+ */
+export function getAgentAgreement(data) {
+	return request.get('agent/get_agent_agreement', {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * h5用户发送验证码
+ * @param data object 用户手机号
+ */
+export function registerVerify(data) {
+	return request.post("register/verify", data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 验证码key
+ */
+export function getCodeApi() {
+	return request.get("verify_code", {}, {
+		noAuth: true
+	});
+}
+/**
+ * 获取代理商表单信息
+ */
+export function getGoodsDetails() {
+	return request.get("agent/apply/info", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取首页的属性
+ * @returns {*}
+ */
+export function getAttr(id, type) {
+	return request.get("v2/get_attr/" + id + "/" + type);
+}
+/**
+ * 获取首页商品列表(所有活动的)
+ * @param object data
+ */
+export function getHomeProducts(data) {
+	return request.get('home/products', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 预售详情
+ * @returns {*}
+ */
+export function getPresellProductDetail(id) {
+	return request.get("advance/detail/" + id);
+}
+
+/**
+ * 获取浏览记录列表
+ * @param object data
+ */
+export function getVisitList(data) {
+	return request.get('user/visit_list', data)
+}
+
+/**
+ * 获取浏览记录列表-删除 
+ * @param object data
+ */
+export function deleteVisitList(data) {
+	return request.delete('user/visit', data)
+}

+ 672 - 0
api/user.js

@@ -0,0 +1,672 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from "@/utils/request.js";
+
+/**
+ * 获取用户信息
+ * 
+ */
+export function getUserInfo() {
+	return request.get('user');
+}
+
+/**
+ * 设置用户分享
+ * 
+ */
+export function userShare() {
+	return request.post('user/share');
+}
+
+/**
+ * h5用户登录
+ * @param data object 用户账号密码
+ */
+export function loginH5(data) {
+	return request.post("login", data, {
+		noAuth: true
+	});
+}
+
+/**
+ * h5用户手机号登录
+ * @param data object 用户手机号 也只能
+ */
+export function loginMobile(data) {
+	return request.post("login/mobile", data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 验证码key
+ */
+export function getCodeApi() {
+	return request.get("verify_code", {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * h5用户发送验证码
+ * @param data object 用户手机号
+ */
+export function registerVerify(data) {
+	return request.post("register/verify", data, {
+		noAuth: true
+	});
+}
+
+/**
+ * h5用户手机号注册
+ * @param data object 用户手机号 验证码 密码
+ */
+export function register(data) {
+	return request.post("register", data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 用户手机号修改密码
+ * @param data object 用户手机号 验证码 密码
+ */
+export function registerReset(data) {
+	return request.post("register/reset", data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取用户中心菜单
+ *
+ */
+export function getMenuList() {
+	return request.get("menu/user", {}, {
+		noAuth: true
+	});
+}
+
+/*
+ * 签到用户信息
+ * */
+export function postSignUser(sign) {
+	return request.post("sign/user", sign);
+}
+
+/**
+ * 获取签到配置
+ * 
+ */
+export function getSignConfig() {
+	return request.get('sign/config')
+}
+
+/**
+ * 获取签到列表
+ * @param object data
+ */
+export function getSignList(data) {
+	return request.get('sign/list', data);
+}
+
+/**
+ * 用户签到
+ */
+export function setSignIntegral() {
+	return request.post('sign/integral')
+}
+
+/**
+ * 签到列表(年月)
+ * @param object data
+ * 
+ */
+export function getSignMonthList(data) {
+	return request.get('sign/month', data)
+}
+
+/**
+ * 活动状态
+ * 
+ */
+export function userActivity() {
+	return request.get('user/activity');
+}
+
+/*
+ * 资金明细(types|0=全部,1=消费,2=充值,3=返佣,4=提现)
+ * */
+export function getCommissionInfo(q, types) {
+	return request.get("spread/commission/" + types, q);
+}
+
+/*
+ * 积分记录
+ * */
+export function getIntegralList(q) {
+	return request.get("integral/list", q);
+}
+
+/**
+ * 获取分销海报图片
+ * 
+ */
+export function spreadBanner() {
+	//#ifdef H5 || APP-PLUS
+	return request.get('spread/banner', {
+		type: 2
+	});
+	//#endif
+	//#ifdef MP
+	return request.get('spread/banner', {
+		type: 1
+	});
+	//#endif
+
+}
+
+/**
+ *
+ * 获取推广用户一级和二级
+ * @param object data
+ */
+export function spreadPeople(data) {
+	return request.post('spread/people', data);
+}
+
+/**
+ * 
+ * 推广佣金/提现总和
+ * @param int type
+ */
+export function spreadCount(type) {
+	return request.get('spread/count/' + type);
+}
+
+/*
+ * 推广数据
+ * */
+export function getSpreadInfo() {
+	return request.get("commission");
+}
+
+
+/**
+ * 
+ * 推广订单
+ * @param object data
+ */
+export function spreadOrder(data) {
+	return request.post('spread/order', data);
+}
+
+/**
+ * 
+ * 事业部/推广订单
+ * @param object data
+ */
+export function divisionOrder(data) {
+	return request.post('division/order', data);
+}
+
+/*
+ * 获取推广人排行
+ * */
+export function getRankList(q) {
+	return request.get("rank", q);
+}
+
+/*
+ * 获取佣金排名
+ * */
+export function getBrokerageRank(q) {
+	return request.get("brokerage_rank", q);
+}
+
+/**
+ * 提现申请
+ * @param object data
+ */
+export function extractCash(data) {
+	return request.post('extract/cash', data)
+}
+
+/**
+ * 提现银行/提现最低金额
+ * 
+ */
+export function extractBank() {
+	return request.get('extract/bank');
+}
+
+/**
+ * 会员等级列表
+ * 
+ */
+export function userLevelGrade() {
+	return request.get('user/level/grade');
+}
+
+/**
+ * 获取某个等级任务
+ * @param int id 任务id
+ */
+export function userLevelTask(id) {
+	return request.get('user/level/task/' + id);
+}
+
+
+/**
+ * 检查用户是否可以成为会员
+ * 
+ */
+export function userLevelDetection() {
+	return request.get('user/level/detection');
+}
+
+/**
+ * 
+ * 地址列表
+ * @param object data
+ */
+export function getAddressList(data) {
+	return request.get('address/list', data);
+}
+
+/**
+ * 设置默认地址
+ * @param int id
+ */
+export function setAddressDefault(id) {
+	return request.post('address/default/set', {
+		id: id
+	})
+}
+
+/**
+ * 修改 添加地址
+ * @param object data
+ */
+export function editAddress(data) {
+	return request.post('address/edit', data);
+}
+
+/**
+ * 删除地址
+ * @param int id
+ * 
+ */
+export function delAddress(id) {
+	return request.post('address/del', {
+		id: id
+	})
+}
+
+/**
+ * 获取单个地址
+ * @param int id 
+ */
+export function getAddressDetail(id) {
+	return request.get('address/detail/' + id);
+}
+
+/**
+ * 修改用户信息
+ * @param object
+ */
+export function userEdit(data) {
+	return request.post('user/edit', data);
+}
+
+/*
+ * 退出登录
+ * */
+export function getLogout() {
+	return request.get("logout");
+}
+/**
+ * 小程序充值
+ * 
+ */
+export function rechargeRoutine(data) {
+	return request.post('recharge/routine', data)
+}
+/*
+ * 公众号充值
+ * */
+export function rechargeWechat(data) {
+	return request.post("recharge/wechat", data);
+}
+/**
+ * 获取默认地址
+ * 
+ */
+export function getAddressDefault() {
+	return request.get('address/default');
+}
+
+/**
+ * 充值金额选择
+ */
+export function getRechargeApi() {
+	return request.get("recharge/index");
+}
+
+/**
+ * 登陆记录
+ */
+export function setVisit(data) {
+	return request.post('user/set_visit', {
+		...data
+	}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 客服列表
+ */
+export function serviceList() {
+	return request.get("user/service/list");
+}
+/**
+ * 客服详情
+ */
+export function getChatRecord(data) {
+	return request.get("v2/user/service/record", data);
+}
+
+/**
+ * 静默绑定推广人
+ * @param {Object} puid
+ */
+export function spread(puid) {
+	return request.post("user/spread", puid);
+}
+
+/**
+ * 会员详情
+ */
+export function getlevelInfo() {
+	return request.get("user/level/info");
+}
+
+/**
+ * 会员经验列表
+ */
+export function getlevelExpList(data) {
+	return request.get("user/level/expList", data);
+}
+
+/**
+ * 修改用户信息
+ * @param {Object} data
+ */
+export function updateUserInfo(data) {
+	return request.post('v2/user/user_update', data);
+}
+
+/**
+ * 微信直接手机号登录
+ */
+export function phoneWxSilenceAuth(data) {
+	return request.post('v2/phone_wx_silence_auth', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 小程序直接手机号登录
+ */
+export function phoneSilenceAuth(data) {
+	return request.post('v2/phone_silence_auth', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 用户发票列表
+ * @param {Object} data
+ */
+export function invoiceList(data) {
+	return request.get('v2/invoice', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 用户添加|修改发票
+ * @param {Object} data
+ */
+export function invoiceSave(data) {
+	return request.post('v2/invoice/save', data, {
+		noAuth: true
+	});
+}
+
+/**
+ * 用户删除发票
+ * @param {Object} data
+ */
+export function invoiceDelete(id) {
+	return request.get('v2/invoice/del/' + id);
+}
+
+/**
+ * 获取用户默认发票
+ * @param {Object} type
+ */
+export function invoiceDefault(type) {
+	return request.get('v2/invoice/get_default/' + type);
+}
+
+/**
+ * 用户单个发票详情
+ * @param {Object} id
+ */
+export function invoiceDetail(id) {
+	return request.get('v2/invoice/detail/' + id);
+}
+
+/**
+ * 订单申请开票
+ * @param {Object} id
+ */
+export function invoiceOrder(data) {
+	return request.post('v2/order/make_up_invoice', data);
+}
+
+/**
+ * 订单详情中申请开票
+ * @param {Object} id
+ */
+export function makeUpinvoice(data) {
+	return request.post('v2/order/make_up_invoice', data);
+}
+
+/**
+ * 会员卡主界面
+ */
+export function memberCard() {
+	return request.get('user/member/card/index');
+}
+
+/**
+ * 卡密领取会员卡
+ * @param {Object} data
+ */
+export function memberCardDraw(data) {
+	return request.post('user/member/card/draw', data);
+}
+
+/**
+ * 购买会员卡
+ * @param {Object} data
+ */
+export function memberCardCreate(data) {
+	return request.post('user/member/card/create', data);
+}
+
+/**
+ * 会员优惠券
+ */
+export function memberCouponsList() {
+	return request.get('user/member/coupons/list');
+}
+
+/**
+ * svip推荐商品
+ * @param {Object} id
+ */
+export function groomList(id, data) {
+	return request.get(`groom/list/${id}`, data);
+}
+
+/**
+ * 付费会员结束
+ * @param {Object} data
+ */
+export function memberOverdueTime(data) {
+	return request.get('user/member/overdue/time', data);
+}
+
+/**
+ * 新版分享海报信息获取
+ * 
+ */
+export function spreadMsg() {
+	return request.get('user/spread_info');
+}
+
+
+/**
+ * 图片链接转base64
+ * 
+ */
+export function imgToBase(data) {
+	return request.post('image_base64', data);
+}
+
+/**
+ * 获取小程序二维码
+ * 
+ */
+export function routineCode(data) {
+	return request.get('user/routine_code', data);
+}
+
+/**
+ * 消息中心
+ */
+export function serviceRecord(data) {
+	return request.get('user/record', data);
+}
+
+/**
+ * 消息中心-站内信列表
+ */
+export function messageSystem(data) {
+	return request.get('user/message_system/list', data);
+}
+
+/**
+ * 消息中心-站内信列表详情
+ */
+export function getMsgDetails(id) {
+	return request.get('user/message_system/detail/' + id);
+}
+
+/**
+ * 消息中心-消息已读/删除
+ */
+export function msgLookDel(data) {
+	return request.get('user/message_system/edit_message', data);
+}
+
+/**
+ * 苹果账号登录
+ * @param {Object} data
+ */
+export function appleLogin(data) {
+	return request.post('apple_login', data, {
+		noAuth: true
+	});
+}
+
+/*
+ * 获取隐私协议
+ * */
+export function getUserAgreement(type) {
+	return request.get(`get_agreement/${type}`, {}, {
+		noAuth: true
+	});
+}
+
+/**
+ * 获取分销等级列表
+ * @param int id 任务id
+ */
+export function agentLevelList() {
+	return request.get('v2/agent/level_list');
+}
+
+/**
+ * 获取分销任务列表
+ * @param int id 任务id
+ */
+export function agentLevelTaskList(id) {
+	return request.get('v2/agent/level_task_list?id=' + id);
+}
+
+/**
+ * 获取代付详情
+ * @param int id 任务id
+ */
+export function friendDetail(id) {
+	return request.get('order/friend_detail?order_id=' + id);
+}
+
+/**
+ * 员工列表
+ * @param object data
+ * 
+ */
+export function clerkPeople(data) {
+	return request.get('agent/get_staff_list', data)
+}
+
+/**
+ * 
+ * 员工比例
+ * @param object data
+ */
+export function setClerkPercent(data) {
+	return request.post('agent/set_staff_percent', data);
+}
+
+/**
+ * 
+ * 删除员工
+ * @param object data
+ */
+export function delClerkPercent(id) {
+	return request.get(`agent/del_staff/${id}`);
+}
+
+/**
+ * 注销用户
+ * @param int id
+ * 
+ */
+export function cancelUser() {
+	return request.get('user_cancel');
+}

+ 248 - 0
components/Authorize.vue

@@ -0,0 +1,248 @@
+<template>
+	<view>
+		<view class="Popup" v-if="isShowAuth">
+			<image :src="logoUrl"></image>
+			<view class="title">授权提醒</view>
+			<view class="tip">请授权头像等信息,以便为您提供更好的服务</view>
+			<view class="bottom flex">
+				<view class="item" @click="close">随便逛逛</view>
+				<!-- #ifdef APP-PLUS -->
+				<button class="item grant" @click="setUserInfo">去授权</button>
+				<!-- #endif -->
+				<!-- #ifdef MP -->
+				<button class="item grant" type="primary" open-type="getPhoneNumber" lang="zh_CN" @getphonenumber="setUserInfo">去授权</button>
+				<!-- #endif -->
+			</view>
+		</view>
+		<view class="mask" v-if="isShowAuth" @click="close"></view>
+	</view>
+</template>
+
+<script>
+const app = getApp();
+import Cache from '../utils/cache';
+import { getLogo, silenceAuth, getUserPhone } from '../api/public';
+import { LOGO_URL, EXPIRES_TIME, USER_INFO, STATE_R_KEY } from '../config/cache';
+import { mapGetters } from 'vuex';
+import Routine from '../libs/routine';
+import store from '../store';
+
+export default {
+	name: 'Authorize',
+	props: {
+		isAuto: {
+			type: Boolean,
+			default: true
+		},
+		isGoIndex: {
+			type: Boolean,
+			default: true
+		},
+		isShowAuth: {
+			type: Boolean,
+			default: false
+		}
+	},
+	data() {
+		return {
+			logoUrl: '',
+			authKey: ''
+		};
+	},
+	computed: mapGetters(['isLogin', 'userInfo']),
+	watch: {
+		isLogin(n) {
+			n === true && this.$emit('onLoadFun', this.userInfo);
+		}
+	},
+	mounted() {
+		this.getLogoUrl();
+		let that = this;
+		if (!this.isLogin && !Cache.has(STATE_R_KEY)) {
+			wx.login({
+				success(res) {
+					Cache.set(STATE_R_KEY, res.code, 10800);
+					let spread = app.globalData.spid ? app.globalData.spid : '';
+					// silenceAuth({ code: res.code, spread: spread, spid: app.globalData.code })
+					// 	.then(res => {
+					// 		if (res.data.key !== undefined && res.data.key) {
+					// 			that.authKey = res.data.key;
+					// 		} else {
+					// 			app.globalData.code = 0;
+					// 			let time = res.data.expires_time - Cache.time();
+					// 			// store.commit('UPDATE_USERINFO', res.data.userInfo);
+					// 			store.commit('LOGIN', { token: res.data.token, time: time });
+					// 			// store.commit('SETUID', res.data.userInfo.uid);
+					// 			// Cache.set(EXPIRES_TIME,res.data.expires_time,time);
+					// 			// Cache.set(USER_INFO,res.data.userInfo,time);
+					// 		}
+					// 	})
+					// 	.catch(res => {
+					// 	});
+				}
+			});
+		} else {
+			this.setAuthStatus();
+		}
+	},
+	methods: {
+		setAuthStatus() {
+			Routine.authorize()
+				.then(res => {
+					if (res.islogin === false) this.setUserInfo();
+					else this.$emit('onLoadFun', this.userInfo);
+				})
+				.catch(res => {
+					if (this.isAuto) this.$emit('authColse', true);
+				});
+		},
+		getUserInfo(code) {
+			Routine.getUserInfo()
+				.then(res => {
+					let userInfo = res.userInfo;
+					userInfo.code = code;
+					userInfo.spread_spid = app.globalData.spid; //获取推广人ID
+					userInfo.spread_code = app.globalData.code; //获取推广人分享二维码ID
+					Routine.authUserInfo(userInfo)
+						.then(res => {
+							uni.hideLoading();
+							this.$emit('authColse', false);
+							this.$emit('onLoadFun', this.userInfo);
+						})
+						.catch(res => {
+							uni.hideLoading();
+							uni.showToast({
+								title: res.msg,
+								icon: 'none',
+								duration: 2000
+							});
+						});
+				})
+				.catch(res => {
+					uni.hideLoading();
+				});
+		},
+		getUserPhoneNumber(encryptedData, iv, code) {
+			getUserPhone({
+				encryptedData: encryptedData,
+				iv: iv,
+				code: code,
+				spid: app.globalData.spid,
+				spread: app.globalData.code
+			})
+				.then(res => {
+					let time = res.data.expires_time - this.$Cache.time();
+					this.$store.commit('LOGIN', {
+						token: res.data.token,
+						time: time
+					});
+					this.$emit('authColse', false);
+					this.$emit('onLoadFun', res.data.userInfo);
+					uni.hideLoading();
+				})
+				.catch(res => {
+					uni.hideLoading();
+				});
+		},
+		setUserInfo(e) {
+			uni.showLoading({ title: '正在登录中' });
+			Routine.getCode()
+				.then(code => {
+					this.getUserPhoneNumber(e.detail.encryptedData, e.detail.iv, code);
+				})
+				.catch(res => {
+					uni.hideLoading();
+				});
+		},
+		getLogoUrl() {
+			let that = this;
+			if (Cache.has(LOGO_URL)) {
+				this.logoUrl = Cache.get(LOGO_URL);
+				return;
+			}
+			getLogo().then(res => {
+				that.logoUrl = res.data.logo_url;
+				Cache.set(LOGO_URL, that.logoUrl);
+			});
+		},
+		close() {
+			let pages = getCurrentPages(),
+				currPage = pages[pages.length - 1];
+			if (this.isGoIndex) {
+				uni.navigateTo({ url: '/pages/index/index' });
+			} else {
+				this.$emit('authColse', false);
+			}
+			// if (currPage && currPage.isShowAuth != undefined){
+			// 	currPage.isShowAuth = true;
+			// }
+		}
+	}
+};
+</script>
+
+<style scoped lang="scss">
+.Popup {
+	width: 500rpx;
+	background-color: #fff;
+	position: fixed;
+	top: 50%;
+	left: 50%;
+	margin-left: -250rpx;
+	transform: translateY(-50%);
+	z-index: 320;
+}
+.Popup image {
+	width: 150rpx;
+	height: 150rpx;
+	margin: -67rpx auto 0 auto;
+	display: block;
+	border: 8rpx solid #fff;
+	border-radius: 50%;
+}
+.Popup .title {
+	font-size: 28rpx;
+	color: #000;
+	text-align: center;
+	margin-top: 30rpx;
+}
+.Popup .tip {
+	font-size: 22rpx;
+	color: #555;
+	padding: 0 24rpx;
+	margin-top: 25rpx;
+}
+.Popup .bottom .item {
+	width: 50%;
+	height: 80rpx;
+	background-color: #eeeeee;
+	text-align: center;
+	line-height: 80rpx;
+	font-size: 24rpx;
+	color: #666;
+	margin-top: 54rpx;
+}
+.Popup .bottom .item.on {
+	width: 100%;
+}
+.flex {
+	display: flex;
+}
+.Popup .bottom .item.grant {
+	font-size: 28rpx;
+	color: #fff;
+	font-weight: bold;
+	background-color: var(--view-theme);
+	border-radius: 0;
+	padding: 0;
+}
+.mask {
+	position: fixed;
+	top: 0;
+	right: 0;
+	left: 0;
+	bottom: 0;
+	background-color: rgba(0, 0, 0, 0.65);
+	z-index: 310;
+}
+</style>

+ 57 - 0
components/Loading/index.vue

@@ -0,0 +1,57 @@
+<template>
+	<view>
+		<view class="Loads acea-row row-center-wrapper" v-if="loading && !loaded" style="margin-top: .2rem;">
+			<view v-if="loading">
+				<view class="iconfont icon-jiazai loading acea-row row-center-wrapper"></view>
+				{{$t(`正在加载中`)}}
+			</view>
+			<view v-else>
+				{{$t(`上拉加载更多`)}}
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "Loading",
+		props: {
+			loaded: {
+				type: Boolean,
+				default: false
+			},
+			loading: {
+				type: Boolean,
+				default: false
+			}
+		}
+	};
+</script>
+<style>
+	.Loads {
+	  height: 80upx;
+	  font-size: 25upx;
+	  color: #000;
+	}
+	.Loads .iconfont {
+	  font-size: 30upx;
+	  margin-right: 10upx;
+	  height: 32upx;
+	  line-height: 32upx;
+	}
+	/*加载动画*/
+	@keyframes load {
+	  from {
+	    transform: rotate(0deg);
+	  }
+	  to {
+	    transform: rotate(360deg);
+	  }
+	}
+	.loadingpic {
+	  animation: load 3s linear 1s infinite;
+	}
+	.loading {
+	  animation: load linear 1s infinite;
+	}
+</style>

+ 186 - 0
components/addressWindow/index.vue

@@ -0,0 +1,186 @@
+<template>
+	<view>
+		<view class="address-window" :class="address.address==true?'on':''">
+			<view class='title'>{{$t(`选择地址`)}}<text class='iconfont icon-guanbi' @tap='close'></text></view>
+			<view class='list'>
+				<view class='item acea-row row-between-wrapper' :class='active==index?"font-num":""' v-for="(item,index) in addressList"
+				 @tap='tapAddress(index,item.id)' :key='index'>
+					<text class='iconfont icon-ditu' :class='active==index?"font-num":""'></text>
+					<view class='address'>
+						<view class='name' :class='active==index?"font-num":""'>{{item.real_name}}<text class='phone'>{{item.phone}}</text></view>
+						<view class='line1'>{{item.province}}{{item.city}}{{item.district}}{{item.detail}}</view>
+					</view>
+					<text class='iconfont icon-complete' :class='active==index?"font-num":""'></text>
+				</view>
+			</view>
+			<!-- 无地址 -->
+			<view class='pictrue' v-if="!is_loading && !addressList.length">
+				<image :src="imgHost + '/statics/images/noAddress.png'"></image>
+			</view>
+			<view class='addressBnt bg-color' @tap='goAddressPages'>{{$t(`选择其它地址`)}}</view>
+		</view>
+		<view class='mask' catchtouchmove="true" :hidden='address.address==false' @tap='close'></view>
+	</view>
+</template>
+
+<script>
+	import {
+		getAddressList
+	} from '@/api/user.js';
+	import {HTTP_REQUEST_URL} from '@/config/app';
+	export default {
+		props: {
+			pagesUrl: {
+				type: String,
+				default: '',
+			},
+			address: {
+				type: Object,
+				default: function() {
+					return {
+						address: true,
+						addressId: 0,
+					};
+				}
+			},
+			isLog: {
+				type: Boolean,
+				default: false,
+			},
+		},
+		data() {
+			return {
+				imgHost:HTTP_REQUEST_URL,
+				active: 0,
+				//地址列表
+				addressList: [],
+				is_loading: true
+			};
+		},
+
+		methods: {
+			tapAddress: function(e, addressid) {
+				this.active = e;
+				this.$emit('OnChangeAddress', addressid);
+			},
+			close: function() {
+				this.$emit('changeClose');
+				this.$emit('changeTextareaStatus');
+			},
+			goAddressPages: function() {
+				this.$emit('changeClose');
+				this.$emit('changeTextareaStatus');
+				uni.navigateTo({
+					url: this.pagesUrl
+				});
+			},
+			getAddressList: function() {
+				let that = this;
+				getAddressList({
+					page: 1,
+					limit: 5
+				}).then(res => {
+					let addressList = res.data;
+					//处理默认选中项
+					for (let i = 0, leng = addressList.length; i < leng; i++) {
+						if (addressList[i].id == that.address.addressId) {
+							that.active = i;
+						}
+					}
+					that.$set(that, 'addressList', addressList);
+					that.is_loading = false;
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.address-window {
+		background-color: #fff;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		width: 100%;
+		z-index: 1000;
+		transform: translate3d(0, 100%, 0);
+		transition: all .3s cubic-bezier(.25, .5, .5, .9);
+	}
+
+	.address-window.on {
+		transform: translate3d(0, 0, 0);
+	}
+
+	.address-window .title {
+		font-size: 32rpx;
+		font-weight: bold;
+		text-align: center;
+		height: 123rpx;
+		line-height: 123rpx;
+		position: relative;
+	}
+
+	.address-window .title .iconfont {
+		position: absolute;
+		right: 30rpx;
+		color: #8a8a8a;
+		font-size: 35rpx;
+	}
+
+	.address-window .list .item {
+		margin-left: 30rpx;
+		padding-right: 30rpx;
+		border-bottom: 1px solid #eee;
+		height: 129rpx;
+		font-size: 25rpx;
+		color: #333;
+	}
+
+	.address-window .list .item .iconfont {
+		font-size: 37rpx;
+		color: #2c2c2c;
+	}
+
+	.address-window .list .item .iconfont.icon-complete {
+		font-size: 30rpx;
+		color: #fff;
+	}
+
+	.address-window .list .item .address {
+		width: 560rpx;
+	}
+
+	.address-window .list .item .address .name {
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #282828;
+		margin-bottom: 4rpx;
+	}
+
+	.address-window .list .item .address .name .phone {
+		margin-left: 18rpx;
+	}
+
+	.address-window .addressBnt {
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #fff;
+		width: 690rpx;
+		height: 86rpx;
+		border-radius: 43rpx;
+		text-align: center;
+		line-height: 86rpx;
+		margin: 85rpx auto;
+	}
+
+	.address-window .pictrue {
+		width: 414rpx;
+		height: 336rpx;
+		margin: 0 auto;
+	}
+
+	.address-window .pictrue image {
+		width: 100%;
+		height: 100%;
+	}
+</style>

+ 209 - 0
components/cartList/index.vue

@@ -0,0 +1,209 @@
+<template>
+	<view>
+		<view class="cartList" :class="cartData.iScart?'on':''">
+			<view class="title acea-row row-between-wrapper">
+				<view class="name">{{$t(`已选商品`)}}</view>
+				<view class="del acea-row row-middle" @click="subDel"><view class="iconfont icon-shanchu1"></view>{{$t(`清空`)}}</view>
+			</view>
+			<view class="list">
+				<view class="item acea-row row-between-wrapper" v-for="(item,index) in cartData.cartList" :key="index">
+					<view class="pictrue">
+						<image v-if="item.productInfo.attrInfo" :src='item.productInfo.attrInfo.image'></image>
+						<image v-else :src='item.productInfo.image'></image>
+						<view class="mantle" v-if="!item.status || !item.attrStatus"></view>
+					</view>
+					<view class="txtPic">
+						<view class="name line2" :class="(item.attrStatus && item.status)?'':'on'">{{item.productInfo.store_name}}</view>
+						<view v-if="item.attrStatus && item.status">
+							<view class="info" v-if="item.productInfo.attrInfo">{{item.productInfo.attrInfo.suk}}</view>
+							<view class="bottom acea-row row-between-wrapper">
+								<view class="money">{{$t(`¥`)}}<text class="num">{{item.truePrice}}</text></view>
+								<view class="cartNum acea-row row-middle">
+									<view class="reduce iconfont icon-jianhao1" @click="leaveCart(index)"></view>
+									<view class="num">{{item.cart_num}}</view>
+									<view class="plus iconfont icon-jiahao1" @click="joinCart(index)"></view>
+								</view>
+							</view>
+						</view>
+						<view class="noBnt" v-else-if="!item.attrStatus">{{$t(`已售罄`)}}</view>
+						<view class="noBnt" v-else-if="!item.status">{{$t(`已下架`)}}</view>
+						<view class="delTxt acea-row row-right" v-if="!item.status || !item.attrStatus"><text @click="oneDel(item.id,index)">{{$t(`删除`)}}</text></view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="mask" v-if="cartData.iScart" @click="closeList"></view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props:{
+			cartData: {
+				type: Object,
+				default: () => {}
+			}
+		},
+		data() {
+			return {};
+		},
+		mounted(){
+		},
+		methods: {
+			closeList(){
+				this.$emit('closeList', false);
+			},
+			leaveCart(index){
+				this.$emit('ChangeCartNumDan', false,index);
+			},
+			joinCart(index){
+				this.$emit('ChangeCartNumDan', true,index);
+			},
+			subDel(){
+				this.$emit('ChangeSubDel');
+			},
+			oneDel(id,index){
+				this.$emit('ChangeOneDel',id,index);
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.mask{
+		z-index: 99;
+	}
+	.cartList{
+		position: fixed;
+		left:0;
+		bottom: 0;
+		width: 100%;
+		background-color: #fff;
+		z-index:100;
+		padding: 0 30rpx 100rpx 30rpx;
+		box-sizing: border-box;
+		border-radius:16rpx 16rpx 0 0;
+		transform: translate3d(0, 100%, 0);
+		transition: all .3s cubic-bezier(.25, .5, .5, .9);
+		&.on{
+			transform: translate3d(0, 0, 0);
+		}
+		.title{
+			height: 108rpx;
+			.name{
+				font-size:28rpx;
+				color: #282828;
+				font-weight:bold;
+			}
+			.del{
+				font-size: 26rpx;
+				color: var(--view-theme);
+				.iconfont{
+					margin-right: 5rpx;
+					font-size: 34rpx;
+				}
+			}
+		}
+		.list{
+			max-height: 720rpx;
+			overflow-x: hidden;
+			overflow-y: auto;
+			.item{
+				margin-bottom: 40rpx;
+				.pictrue{
+					width: 176rpx;
+					height: 176rpx;
+					border-radius: 16rpx;
+					position: relative;
+					image{
+						width: 100%;
+						height: 100%;
+						border-radius: 16rpx;
+					}
+					.mantle{
+						position: absolute;
+						top:0;
+						left:0;
+						width: 100%;
+						height: 100%;
+						background:rgba(255,255,255,0.65);
+						border-radius:16rpx;
+					}
+				}
+				.txtPic{
+					width: 486rpx;
+					.name{
+						font-size:28rpx;
+						color: #282828;
+						&.on{
+							color: #A3A3A3;
+						}
+					}
+					.noBnt{
+						width:126rpx;
+						height:44rpx;
+						background:rgba(242,242,242,1);
+						border-radius:22rpx;
+						text-align: center;
+						line-height: 44rpx;
+						font-size: 24rpx;
+						color: #A3A3A3;
+						margin-top: 10rpx;
+					}
+					.delTxt{
+						margin-top: 48rpx;
+						font-size: 24rpx;
+						color: #E93323;
+						text{
+							width: 70rpx;
+							height: 50rpx;
+							text-align: center;
+							line-height: 50rpx;
+						}
+					}
+					.info{
+						font-size: 23rpx;
+						color: #989898;
+						margin-top: 5rpx;
+					}
+					.bottom{
+						margin-top: 11rpx;
+						.money{
+							font-weight:bold;
+							font-size: 26rpx;
+							color: var(--view-priceColor);
+							.num{
+								font-size: 34rpx;
+							}
+						}
+						.cartNum{
+							font-weight:bold;
+						    .num{
+								font-size: 34rpx;
+								color: #282828;
+								width: 120rpx;
+								text-align: center;
+							}
+							.reduce{
+								color: #282828;
+								font-size: 24rpx;
+								width: 60rpx;
+								height: 60rpx;
+								text-align: center;
+								line-height: 60rpx;
+							}
+							.plus{
+								color: #282828;
+								font-size: 24rpx;
+								width: 60rpx;
+								height: 60rpx;
+								text-align: center;
+								line-height: 60rpx;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 128 - 0
components/countDown/index.vue

@@ -0,0 +1,128 @@
+<template>
+	<view class="time" :style="justifyLeft">
+		<text class="red" v-if="tipText">{{ tipText }}</text>
+		<text class="styleAll" :style="'background-color:'+ bgColor +';color:'+ colors +';'" v-if="isDay === true">{{ day }}</text>
+		<text class="timeTxt red" v-if="dayText">{{ dayText }}</text>
+		<text class="styleAll" :style="'background-color:'+ bgColor +';color:'+ colors +';'">{{ hour }}</text>
+		<text class="timeTxt red" v-if="hourText">{{ hourText }}</text>
+		<text class="styleAll" :style="'background-color:'+ bgColor +';color:'+ colors +';'">{{ minute }}</text>
+		<text class="timeTxt red" v-if="minuteText">{{ minuteText }}</text>
+		<text class="styleAll" :style="'background-color:'+ bgColor +';color:'+ colors +';'">{{ second }}</text>
+		<text class="timeTxt red" v-if="secondText">{{ secondText }}</text>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "countDown",
+		props: {
+			justifyLeft: {
+				type: String,
+				default: ""
+			},
+			//距离开始提示文字
+			tipText: {
+				type: String,
+				default: "倒计时"
+			},
+			dayText: {
+				type: String,
+				default: "天"
+			},
+			hourText: {
+				type: String,
+				default: "时"
+			},
+			minuteText: {
+				type: String,
+				default: "分"
+			},
+			secondText: {
+				type: String,
+				default: "秒"
+			},
+			datatime: {
+				type: Number,
+				default: 0
+			},
+			isDay: {
+				type: Boolean,
+				default: true
+			},
+			bgColor:{
+				type: String,
+				default: ""
+			},
+			colors:{
+				type: String,
+				default: ""
+			}
+		},
+		data: function() {
+			return {
+				day: "00",
+				hour: "00",
+				minute: "00",
+				second: "00"
+			};
+		},
+		created: function() {
+			this.show_time();
+		},
+		mounted: function() {},
+		methods: {
+			show_time: function() {
+				let that = this;
+
+				function runTime() {
+					//时间函数
+					let intDiff = that.datatime - Date.parse(new Date()) / 1000; //获取数据中的时间戳的时间差;
+					let day = 0,
+						hour = 0,
+						minute = 0,
+						second = 0;
+					if (intDiff > 0) {
+						//转换时间
+						if (that.isDay === true) {
+							day = Math.floor(intDiff / (60 * 60 * 24));
+						} else {
+							day = 0;
+						}
+						hour = Math.floor(intDiff / (60 * 60)) - day * 24;
+						minute = Math.floor(intDiff / 60) - day * 24 * 60 - hour * 60;
+						second =
+							Math.floor(intDiff) -
+							day * 24 * 60 * 60 -
+							hour * 60 * 60 -
+							minute * 60;
+						if (hour <= 9) hour = "0" + hour;
+						if (minute <= 9) minute = "0" + minute;
+						if (second <= 9) second = "0" + second;
+						that.day = day;
+						that.hour = hour;
+						that.minute = minute;
+						that.second = second;
+					} else {
+						that.day = "00";
+						that.hour = "00";
+						that.minute = "00";
+						that.second = "00";
+					}
+				}
+				runTime();
+				setInterval(runTime, 1000);
+			}
+		}
+	};
+</script>
+
+<style>
+	.time{
+		display: flex;
+		justify-content: center;
+	} 
+	.red{
+		color: var(--view-theme);
+		margin: 0 4rpx;
+	}
+</style>

+ 269 - 0
components/couponListWindow/index.vue

@@ -0,0 +1,269 @@
+<template>
+	<view>
+		<view class='coupon-list-window' :class='coupon.coupon==true?"on":""'>
+			<view v-if="coupon.count" class="nav acea-row row-around">
+				<view v-if="coupon.count[2]" :class="['acea-row', 'row-middle', coupon.type === 2 ? 'on' : '']" @click="setType(2)">{{$t(`商品券`)}}</view>
+				<view v-if="coupon.count[1]" :class="['acea-row', 'row-middle', coupon.type === 1 ? 'on' : '']" @click="setType(1)">{{$t(`品类券`)}}</view>
+				<view v-if="coupon.count[0]" :class="['acea-row', 'row-middle', coupon.type === 0 ? 'on' : '']" @click="setType(0)">{{$t(`通用券`)}}</view>
+			</view>
+			<view class='title' v-else>{{$t(`优惠券`)}}<text class='iconfont icon-guanbi' @click='close'></text></view>
+			<view v-if="coupon.count" class="occupy"></view>
+			<view class='coupon-list' v-if="coupon.list.length">
+				<view class='item acea-row row-center-wrapper' v-for="(item,index) in coupon.list" @click="getCouponUser(index,item.id)"
+				 :key='index' :class="{svip: item.receive_type === 4}">
+				  <view class="moneyCon acea-row row-center-wrapper">
+						<view class='money acea-row row-column row-center-wrapper' :class='item.is_use && coupon.count?"moneyGray":""'>
+							<view>{{$t(`¥`)}}<text class='num'>{{item.coupon_price}}</text></view>
+							<view class="pic-num" v-if="item.use_min_price > 0">{{$t(`满`)}}{{item.use_min_price}}{{$t(`元可用`)}}</view>
+							<view class="pic-num" v-else>{{$t(`无门槛券`)}}</view>
+						</view>
+					</view>
+					<view class='text'>
+						<view class='condition line2' :class="coupon.count?'':'order'">
+							<span class='line-title' :class='item.is_use && coupon.count?"gray":""' v-if='item.type===0'>{{$t(`通用券`)}}</span>
+							<span class='line-title' :class='item.is_use && coupon.count?"gray":""' v-else-if='item.type===1'>{{$t(`品类券`)}}</span>
+							<span class='line-title' :class='item.is_use && coupon.count?"gray":""' v-else>{{$t(`商品券`)}}</span>
+							<image src='../../static/images/fvip.png' class="pic" v-if="item.receive_type===4"></image>
+							<span class='name'>{{item.title}}</span>
+						</view>
+						<view class='data acea-row row-between-wrapper'>
+							<view v-if="item.coupon_time">{{$t(`领取后`)}}{{item.coupon_time}}{{$t(`天内可用`)}}</view>
+							<view v-else>{{ item.start_time ? item.start_time + "-" : ""}}{{ item.end_time }}</view>
+							<view v-if="coupon.count">
+								<view class='bnt gray' v-if="item.is_use">{{item.use_title || $t(`已领取`)}}</view>
+								<view class='bnt bg-color' v-else>{{coupon.statusTile || $t(`立即领取`)}}</view>
+							</view>
+							<view v-else class="orderCou">
+								<view class="iconfont icon-xuanzhong11" :class="item.receive_type === 4?'svip':'font-num'" v-if="item.is_use"></view>
+								<view class="iconfont icon-weixuan" v-else></view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 无优惠券 -->
+			<view class='pictrue' v-else>
+				<image :src="imgHost + '/statics/images/noCoupon.png'"></image>
+			</view>
+		</view>
+		<view class='mask' catchtouchmove="true" :hidden='coupon.coupon==false' @click='close'></view>
+	</view>
+</template>
+
+<script>
+	import {
+		setCouponReceive
+	} from '@/api/api.js';
+	import {HTTP_REQUEST_URL} from '@/config/app';
+	export default {
+		props: {
+			//打开状态 0=领取优惠券,1=使用优惠券
+			openType: {
+				type: Number,
+				default: 0,
+			},
+			coupon: {
+				type: Object,
+				default: function() {
+					return {};
+				}
+			}
+		},
+		data() {
+			return {
+				imgHost:HTTP_REQUEST_URL,
+				type: 0
+			};
+		},
+		methods: {
+			close: function() {
+				this.$emit('ChangCouponsClone');
+				this.type = 0;
+			},
+			getCouponUser: function(index, id) {
+				let that = this;
+				let list = that.coupon.list;
+				if (list[index].is_use == true && this.openType == 0) return true;
+				switch (this.openType) {
+					case 0:
+						//领取优惠券
+						setCouponReceive(id).then(res => {
+							that.$emit('ChangCouponsUseState', index);
+							that.$util.Tips({
+								title: "领取成功"
+							});
+							// that.$emit('ChangCoupons', list[index]);
+						}).catch(err => {
+							uni.showToast({
+								title: err,
+								icon: 'none'
+							});
+						})
+						break;
+					case 1:
+						that.$emit('ChangCoupons', index);
+						break;
+				}
+			},
+			setType: function(type) {
+				this.type = type;
+				this.$emit('tabCouponType', type);
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.orderCou{
+		position: absolute;
+		right: 20rpx;
+		top:50%;
+		margin-top: -20rpx;
+	}
+	.orderCou .iconfont{
+		font-size: 40rpx;
+	}
+	.orderCou .svip{
+		color:#EDBB75;
+	}
+	.coupon-list .item .text{
+		position: relative;
+	}
+	.coupon-list .item .text .condition.order{
+		width: 350rpx;
+	}
+	.coupon-list-window .coupon-list .text .condition .pic {
+		width: 30rpx;
+		height: 30rpx;
+		margin-right: 10rpx;
+		vertical-align: middle;
+	}
+
+	.coupon-list-window .coupon-list .text .condition .name {
+		vertical-align: middle;
+		font-size: 26rpx;
+		font-weight: 500;
+	}
+
+	.coupon-list-window {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		width: 100%;
+		background-color: #FFFFFF;
+		border-radius: 16rpx 16rpx 0 0;
+		z-index: 999;
+		transform: translate3d(0, 100%, 0);
+		transition: all .3s cubic-bezier(.25, .5, .5, .9);
+	}
+
+	.coupon-list-window.on {
+		transform: translate3d(0, 0, 0);
+	}
+
+	.coupon-list-window .title {
+		height: 124rpx;
+		width: 100%;
+		text-align: center;
+		line-height: 124rpx;
+		font-size: 32rpx;
+		font-weight: bold;
+		position: relative;
+	}
+
+	.coupon-list-window .title .iconfont {
+		position: absolute;
+		right: 30rpx;
+		top: 50%;
+		transform: translateY(-50%);
+		font-size: 35rpx;
+		color: #8a8a8a;
+		font-weight: normal;
+	}
+
+	.coupon-list-window .coupon-list {
+		margin: 0 0 50rpx 0;
+		height: 721rpx;
+		padding-top: 28rpx;
+		overflow: auto;
+	}
+
+	.coupon-list-window .pictrue {
+		width: 414rpx;
+		height: 336rpx;
+		margin: 192rpx auto 243rpx auto;
+	}
+
+	.coupon-list-window .pictrue image {
+		width: 100%;
+		height: 100%;
+	}
+
+	.pic-num {
+		color: #fff;
+		font-size: 24rpx;
+	}
+
+	.line-title {
+		width: 70rpx;
+		height: 32rpx !important;
+		padding: 0 10rpx;
+		line-height: 30rpx;
+		text-align: center;
+		background: var(--view-minorColorT);
+		border: 1px solid var(--view-theme);
+		opacity: 1;
+		border-radius: 20rpx;
+		font-size: 18rpx;
+		color: var(--view-theme);
+		margin-right: 12rpx;
+		box-sizing: border-box;
+	}
+
+	.line-title.gray {
+		border-color: #C1C1C1!important;
+		color: #C1C1C1!important;
+		background-color: #F7F7F7!important;
+	}
+
+	.nav {
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 106rpx;
+		border-bottom: 2rpx solid #F5F5F5;
+		border-top-left-radius: 16rpx;
+		border-top-right-radius: 16rpx;
+		background-color: #FFFFFF;
+		font-size: 30rpx;
+		color: #999999;
+	}
+
+	.nav .acea-row {
+		border-top: 5rpx solid transparent;
+		border-bottom: 5rpx solid transparent;
+	}
+
+	.nav .acea-row.on {
+		border-bottom-color: var(--view-theme);
+		color: #282828;
+	}
+
+	.nav .acea-row:only-child {
+		border-bottom-color: transparent;
+	}
+
+	.occupy {
+		height: 106rpx;
+	}
+
+	.coupon-list .item {
+		margin-bottom: 18rpx;
+		box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.06);
+	}
+
+	.coupon-list .item .money {
+		font-weight: normal;
+	}
+</style>

+ 243 - 0
components/couponWindow/index.vue

@@ -0,0 +1,243 @@
+<template>
+	<view :style="colorStyle">
+		<view class='coupon-window' :class='window==true?"on":""'>
+			<image class="co-bag" :src="imgHost + '/statics/images/co-bag.png'" mode=""></image>
+			<view class='couponWinList'>
+				<view class='item acea-row row-between-wrapper' v-for="(item,index) in couponList" :key="index">
+					<view class='money font-color'>{{$t(`¥`)}}<text class='num'>{{item.coupon_price}}</text></view>
+					<view class='text'>
+						<view class='name'>{{$t(`购物满`)}}{{item.use_min_price}}{{$t(`减`)}}{{item.coupon_price}}</view>
+						<view v-if="item.coupon_time">{{$t(`领取后`)}}{{item.coupon_time}}{{$t(`天内可用`)}}</view>
+						<view v-else>
+							{{item.start_time ? item.start_time+'-' : ''}}{{item.end_time === 0 ? $t(`不限时`) : item.end_time}}
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class='lid'>
+				<navigator hover-class='none' url='/pages/users/user_get_coupon/index' class='bnt'>{{$t(`立即领取`)}}</navigator>
+				<view class='iconfont icon-guanbi3' @click="close"></view>
+			</view>
+		</view>
+		<view class='mask' catchtouchmove="true" :hidden="window==false"></view>
+	</view>
+</template>
+
+<script>
+	import colors from "@/mixins/color";
+	import {HTTP_REQUEST_URL} from '@/config/app';
+	export default {
+		props: {
+			window: {
+				type: Boolean | String | Number,
+				default: false,
+			},
+			couponList: {
+				type: Array,
+				default: function() {
+					return []
+				},
+			},
+			couponImage: {
+				type: String,
+				default: '',
+			},
+		},
+		mixins: [colors],
+		data() {
+			return {
+				imgHost:HTTP_REQUEST_URL
+			};
+		},
+		methods: {
+			close: function() {
+				this.$emit('onColse');
+			}
+		}
+	}
+</script>
+
+
+<style scoped lang="scss">
+	.mask {
+		z-index: 9999;
+	}
+
+	.coupon-window {
+		width: 572rpx;
+		height: 760rpx;
+		position: fixed;
+		top: 20%;
+		z-index: 10000;
+		left: 50%;
+		margin-left: -286rpx;
+		transform: translate3d(0, -200%, 0);
+		transition: all .3s cubic-bezier(.25, .5, .5, .9);
+		border-radius: 30rpx 30rpx 0 0;
+		overflow-x: hidden;
+	}
+
+	.co-bag {
+		width: 100%;
+		height: 250rpx;
+		z-index: 33333;
+		top: -40rpx;
+		position: absolute;
+	}
+
+	.coupon-window:after {
+		width: 900rpx;
+		height: 650rpx;
+		position: absolute;
+		top: 0%;
+		left: 50%;
+		z-index: 11111;
+		margin-left: -450rpx;
+		content: '';
+		border-radius: 50% 50% 0 0;
+		background: var(--view-theme);
+	}
+
+	.coupon-window.on {
+		transform: translate3d(0, 0, 0);
+	}
+
+	.coupon-window .couponWinList {
+		width: 480rpx;
+		margin: 157rpx 0 0 50rpx;
+		height: 340rpx;
+		overflow-y: scroll;
+	}
+
+	.coupon-window .couponWinList .item {
+		width: 100%;
+		height: 120rpx;
+		background-color: #fff;
+		position: relative;
+		margin-bottom: 17rpx;
+		position: relative;
+		z-index: 99999;
+	}
+
+	.coupon-window .couponWinList .item .left {
+		border-right: 1px dashed #ccc;
+	}
+
+	.coupon-window .couponWinList .label {
+		width: 28rpx;
+		height: 64rpx;
+		display: block;
+		position: absolute;
+		top: 0;
+		right: 12rpx;
+	}
+
+	.coupon-window .couponWinList .item::after {
+		content: '';
+		position: absolute;
+		width: 18rpx;
+		height: 18rpx;
+		border-radius: 50%;
+		background-color: var(--view-theme);
+		left: 25.5%;
+		bottom: 0;
+		margin-bottom: -9rpx;
+	}
+
+	.coupon-window .couponWinList .item::before {
+		content: '';
+		position: absolute;
+		width: 18rpx;
+		height: 18rpx;
+		border-radius: 50%;
+		background-color: var(--view-theme);
+		left: 25.5%;
+		top: 0;
+		margin-top: -9rpx;
+	}
+
+	.coupon-window .couponWinList .item .money {
+		width: 130rpx;
+		text-align: center;
+		font-size: 26rpx;
+		font-weight: bold;
+	}
+
+	.coupon-window .couponWinList .item .min_money {
+		color: #ccc;
+		font-size: 18rpx;
+		text-align: center;
+	}
+
+	.coupon-window .couponWinList .item .money .num {
+		font-size: 40rpx;
+	}
+
+	.coupon-window .couponWinList .item .text {
+		width: 349rpx;
+		font-size: 22rpx;
+		color: #ccc;
+		padding: 0 29rpx;
+		box-sizing: border-box;
+	}
+
+	.coupon-window .couponWinList .item .text .image {
+		width: 32rpx;
+		height: 32rpx;
+		display: inline-block;
+		vertical-align: bottom;
+		margin-right: 10rpx;
+	}
+
+	.coupon-window .couponWinList .item .text .name {
+		font-size: 26rpx;
+		color: var(--view-priceColor);
+		font-weight: bold;
+		margin-bottom: 9rpx;
+		width: 250rpx;
+	}
+
+	.coupon-window .lid {
+		background: rgba(255, 255, 255, 0.2);
+		width: 582rpx;
+		height: 224rpx;
+		position: fixed;
+		z-index: 22222;
+		left: 50%;
+		top: 0%;
+		margin: 424rpx 0 0 -296rpx;
+	}
+
+	.coupon-window .lid:after {
+		width: 920rpx;
+		height: 280rpx;
+		position: absolute;
+		top: -100%;
+		left: 50%;
+		z-index: 22222;
+		margin-left: -460rpx;
+		content: '';
+		border-radius: 0 0 50% 50%;
+		background: var(--view-theme);
+	}
+
+	.coupon-window .lid .bnt {
+		font-size: 29rpx;
+		width: 440rpx;
+		height: 80rpx;
+		border-radius: 40rpx;
+		background: linear-gradient(90deg, #FFCA52 0%, #FE960F 100%);
+		text-align: center;
+		line-height: 80rpx;
+		font-weight: bold;
+		margin: 98rpx auto 0 auto;
+		color: #fff;
+	}
+
+	.coupon-window .lid .iconfont {
+		color: #fff;
+		font-size: 60rpx;
+		text-align: center;
+		margin-top: 87rpx;
+	}
+</style>

+ 143 - 0
components/cusPreviewImg/index.vue

@@ -0,0 +1,143 @@
+<template>
+	<view class="previewImg" v-if="showBox" @touchmove.stop.prevent>
+		<view class="mask" @click="close">
+			<swiper @change="changeSwiper" class="mask-swiper" :current="currentIndex" :circular="circular" :duration="duration">
+				<swiper-item v-for="(src, i) in list" :key="i" class="flex flex-column justify-center align-center">
+					<image class="mask-swiper-img" :src="src.image" mode="widthFix" />
+					<view class="mask_sku">
+						<text class="sku_name">{{src.suk}}</text>
+						<text class="sku_price">{{$t(`¥`)}}{{src.price}}</text>
+					</view>
+				</swiper-item>
+			</swiper>
+		</view>
+		<view class="pagebox" v-if="list.length>0">{{ Number(currentIndex) + 1 }} / {{ list.length }}</view>
+		<!-- #ifndef MP -->
+		<!-- <text class="iconfont icon-fenxiang share_btn" @click="shareFriend()"></text> -->
+		<!-- #endif -->
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'cusPreviewImg',
+		props: {
+			list: {
+				type: Array,
+				required: true,
+				default: () => {
+					return [];
+				}
+			},
+			circular: {
+				type: Boolean,
+				default: true
+			},
+			duration: {
+				type: Number,
+				default: 500
+			}
+		},
+		data() {
+			return {
+				currentIndex: 0,
+				showBox: false
+			};
+		},
+		watch: {
+			list(val) {
+				// console.log('图片预览', val)
+			}
+		},
+		methods: {
+			// 左右切换
+			changeSwiper(e) {
+				this.currentIndex = e.target.current;
+				this.$emit('changeSwitch',e.target.current)
+			},
+			open(current) {
+				if (!current || !this.list.length) return;
+				this.currentIndex = this.list.map((item)=>item.suk).indexOf(current);
+				this.showBox = true;
+			},
+			close() {
+				this.showBox = false;
+			},
+			shareFriend(){
+				this.$emit('shareFriend')
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+@mixin full {
+	width: 100%;
+	height: 100%;
+}
+
+.previewImg {
+	position: fixed;
+	top: 0;
+	left: 0;
+	z-index: 300;
+	@include full;
+	.mask {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		background-color: #000;
+		opacity: 1;
+		z-index: 8;
+		@include full;
+		&-swiper {
+			@include full;
+			&-img {
+				width: 100%;
+			}
+		}
+	}
+	.pagebox{
+		position: absolute;
+		width: 100%;
+		bottom: 20rpx;
+		z-index: 300;
+		color: #fff;
+		text-align: center;
+	}
+}
+.mask_sku{
+	color: #fff;
+	max-width: 80%;
+	z-index: 300;
+	text-align: center;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	margin-top: 30rpx;
+	.sku_name{
+		font-size: 12px;
+		border: 1px solid #fff;
+		padding: 10rpx 30rpx 10rpx;
+		border-radius: 40px;
+		box-sizing: border-box;
+	}
+	.sku_price{
+		padding-top: 10px;
+	}
+}
+.font12{
+	font-size: 24rpx;
+}
+.share_btn{
+	position: absolute;
+	top:70rpx;
+	right:50rpx;
+	font-size: 40rpx;
+	color:#fff;
+	z-index: 300;
+}
+.flex-column{flex-direction: column;}
+.justify-center {justify-content: center;}
+.align-center {align-items: center;}
+</style>

+ 189 - 0
components/d_goodList/index.vue

@@ -0,0 +1,189 @@
+<template>
+	<view class="goodsList">
+		<view class="item" v-for="(item,index) in tempArr" :key='index' @click="goDetail(item)">
+			<view class="pictrue">
+				<span class="pictrue_log pictrue_log_class" v-if="item.activity && item.activity.type === '1'">{{$t(`秒杀`)}}</span>
+				<span class="pictrue_log pictrue_log_class" v-if="item.activity && item.activity.type === '2'">{{$t(`砍价`)}}</span>
+				<span class="pictrue_log pictrue_log_class" v-if="item.activity && item.activity.type === '3'">{{$t(`拼团`)}}</span>
+				<image :src="item.recommend_image" mode="" v-if="item.recommend_image"></image>
+				<image :src="item.image" mode="" v-else></image>
+			</view>
+			<view class="text line2">{{item.store_name}}</view>
+			<view class="bottom acea-row row-between-wrapper">
+				<view class="sales acea-row row-middle">
+					<view class="money font-color"><text>{{$t(`¥`)}}</text>{{item.price}}</view>
+					<view>{{$t(`已售`)}}{{item.sales}}</view>
+				</view>
+				<view v-if="item.stock>0">
+					<view class="bnt"
+						v-if="(item.activity && (item.activity.type === '1' || item.activity.type === '2' || item.activity.type === '3') || item.is_virtual) || !item.cart_button">
+						{{$t(`立即购买`)}}</view>
+					<view v-else>
+						<!-- 多规格 -->
+						<view class="bnt" @click.stop="goCartDuo(item)" v-if="item.spec_type">
+							{{$t(`加入购物车`)}}
+							<view class="num" v-if="isLogin && item.cart_num">{{item.cart_num}}</view>
+						</view>
+						<!-- 单规格 -->
+						<view class="bnt" v-if="!item.spec_type && !item.cart_num" @click.stop="goCartDan(item,index)">
+							{{$t(`加入购物车`)}}</view>
+						<view class="cart acea-row row-middle" v-if="!item.spec_type && item.cart_num">
+							<view class="pictrue iconfont icon-jianhao" @click.stop="CartNumDes(index,item)"></view>
+							<view class="num">{{item.cart_num}}</view>
+							<view class="pictrue iconfont icon-jiahao" @click.stop="CartNumAdd(index,item)"></view>
+						</view>
+					</view>
+				</view>
+				<view class="bnt end" v-else>{{$t(`已售罄`)}}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'd_goodList',
+		props: {
+			dataConfig: {
+				type: Object,
+				default: () => {}
+			},
+			tempArr: {
+				type: Array,
+				default: []
+			},
+			isLogin: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				addIng: false
+			};
+		},
+		created() {},
+		mounted() {},
+		methods: {
+			goDetail(item) {
+				this.$emit('detail', item);
+			},
+			goCartDuo(item) {
+				this.$emit('gocartduo', item);
+			},
+			goCartDan(item, index) {
+				this.$emit('gocartdan', item, index);
+			},
+			CartNumDes(index, item) {
+				if (this.addIng) return
+				this.addIng = true
+				this.$emit('ChangeCartNumDan', false, index, item);
+			},
+			CartNumAdd(index, item) {
+				if (this.addIng) return
+				this.addIng = true
+				this.$emit('ChangeCartNumDan', true, index, item);
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.goodsList {
+		padding: 0 30rpx;
+
+		.item {
+			width: 100%;
+			box-sizing: border-box;
+			margin-bottom: 63rpx;
+
+			.pictrue {
+				width: 100%;
+				height: 290rpx;
+				border-radius: 16rpx;
+				position: relative;
+
+				image {
+					width: 100%;
+					height: 100%;
+					border-radius: 10rpx;
+				}
+			}
+
+			.text {
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #282828;
+				margin: 20rpx 0;
+			}
+
+			.bottom {
+				.sales {
+					font-size: 22rpx;
+					color: #8E8E8E;
+
+					.money {
+						font-size: 42rpx;
+						font-weight: bold;
+						margin-right: 18rpx;
+
+						text {
+							font-size: 28rpx;
+						}
+					}
+				}
+
+				.cart {
+					height: 56rpx;
+
+					.pictrue {
+						color: var(--view-theme);
+						font-size: 46rpx;
+						width: 50rpx;
+						height: 50rpx;
+						text-align: center;
+						line-height: 50rpx;
+					}
+
+					.num {
+						font-size: 30rpx;
+						color: #282828;
+						font-weight: bold;
+						width: 80rpx;
+						text-align: center;
+					}
+				}
+
+				.bnt {
+					padding: 0 30rpx;
+					height: 56rpx;
+					line-height: 56rpx;
+					background: var(--view-theme);
+					border-radius: 42rpx;
+					font-size: 26rpx;
+					color: #fff;
+					position: relative;
+
+					&.end {
+						background: rgba(203, 203, 203, 1);
+					}
+
+					.num {
+						background-color: var(--view-priceColor);
+						min-width: 12rpx;
+						color: #fff;
+						border-radius: 15px;
+						position: absolute;
+						right: -14rpx;
+						top: -15rpx;
+						font-size: 22rpx;
+						padding: 0 10rpx;
+						height: 34rpx;
+						line-height: 34rpx;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 42 - 0
components/emptyPage.vue

@@ -0,0 +1,42 @@
+<template>
+	<view class="empty-box">
+		<image :src="imgHost + '/statics/images/empty-box.png'"></image>
+		<view class="txt">{{title || $t(`暂无记录`)}}</view>
+	</view>
+</template>
+
+<script>
+	import {HTTP_REQUEST_URL} from '@/config/app';
+	export default{
+		props: {
+			title: {
+				type: String,
+				default: '',
+			},
+		},
+		data(){
+			return{
+				imgHost:HTTP_REQUEST_URL
+			}
+		}
+	}
+	
+</script>
+
+<style lang="scss">
+	.empty-box{
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		margin-top: 200rpx;
+		image{
+			width: 414rpx;
+			height: 240rpx;
+		}
+		.txt{
+			font-size: 26rpx;
+			color: #999;
+		}
+	}
+</style>

+ 231 - 0
components/goodClass/index.vue

@@ -0,0 +1,231 @@
+<template>
+	<view class="goodsList">
+		<view class="item acea-row row-between-wrapper" v-for="(item,index) in tempArr" :key='index'
+			@click="goDetail(item)">
+			<view class="pictrue">
+				<span class="pictrue_log pictrue_log_class" v-if="item.activity && item.activity.type === '1'">{{$t(`秒杀`)}}</span>
+				<span class="pictrue_log pictrue_log_class" v-if="item.activity && item.activity.type === '2'">{{$t(`砍价`)}}</span>
+				<span class="pictrue_log pictrue_log_class" v-if="item.activity && item.activity.type === '3'">{{$t(`拼团`)}}</span>
+				<image :src="item.image" mode=""></image>
+			</view>
+			<view class="pictxt">
+				<view class="text line2">{{item.store_name}}</view>
+				<view class="bottom acea-row row-between-wrapper">
+					<view class="money font-color">
+						<text class="sign">{{$t(`¥`)}}</text>{{item.price}}
+						<!-- <span class="vip" v-if="item.vip_price">
+							<image src="../../static/images/vip01.png"></image>
+							¥{{item.vip_price}}
+						</span>
+						<text class="y_money" v-else>¥{{item.ot_price}}</text> -->
+					</view>
+					<view v-if="item.stock>0">
+						<view class="iconfont icon-gouwuche6 acea-row row-center-wrapper"
+							v-if="item.activity && (item.activity.type === '1' || item.activity.type === '2' || item.activity.type === '3')">
+						</view>
+						<view v-else>
+							<!-- 多规格 -->
+							<view class="bnt acea-row row-center-wrapper" @click.stop="goCartDuo(item)"
+								v-if="item.spec_type">
+								{{$t(`选规格`)}}
+								<text class="num" v-if="isLogin && item.cart_num">{{item.cart_num}}</text>
+							</view>
+							<!-- 单规格 -->
+							<view class="iconfont icon-gouwuche6 acea-row row-center-wrapper"
+								v-if="!item.spec_type && !item.cart_num" @click.stop="goCartDan(item,index)"></view>
+							<view class="cart acea-row row-middle" v-if="!item.spec_type && item.cart_num">
+								<view class="pictrue iconfont icon-jianhao acea-row row-center-wrapper"
+									@click.stop="CartNumDes(index,item)"></view>
+								<view class="num">{{item.cart_num}}</view>
+								<view class="pictrue iconfont icon-jiahao acea-row row-center-wrapper"
+									@click.stop="CartNumAdd(index,item)"></view>
+							</view>
+						</view>
+					</view>
+					<view class="bnt acea-row row-center-wrapper end" v-else>{{$t(`已售罄`)}}</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'd_goodList',
+		props: {
+			dataConfig: {
+				type: Object,
+				default: () => {}
+			},
+			tempArr: {
+				type: Array,
+				default: []
+			},
+			isLogin: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				addIng: false
+			};
+		},
+		created() {},
+		mounted() {},
+		methods: {
+			goDetail(item) {
+				this.$emit('detail', item);
+			},
+			goCartDuo(item) {
+				this.$emit('gocartduo', item);
+			},
+			goCartDan(item, index) {
+				this.$emit('gocartdan', item, index);
+			},
+			CartNumDes(index, item) {
+				if (this.addIng) return
+				this.addIng = true
+				this.$emit('ChangeCartNumDan', false, index, item);
+			},
+			CartNumAdd(index, item) {
+				console.log('2')
+				if (this.addIng) return
+				this.addIng = true
+				this.$emit('ChangeCartNumDan', true, index, item);
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.goodsList {
+		padding: 0 30rpx;
+
+		.item {
+			width: 100%;
+			box-sizing: border-box;
+			margin-bottom: 63rpx;
+
+			.pictrue {
+				width: 140rpx;
+				height: 140rpx;
+				border-radius: 10rpx;
+				position: relative;
+				border-radius: 22rpx;
+
+				image {
+					width: 100%;
+					height: 100%;
+					border-radius: 22rpx;
+				}
+			}
+
+			.pictxt {
+				width: 372rpx;
+
+				.text {
+					font-size: 26rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+				.bottom {
+					margin-top: 22rpx;
+
+					.money {
+						font-size: 34rpx;
+						font-weight: 800;
+
+						.sign {
+							font-size: 24rpx;
+						}
+
+						.y_money {
+							font-size: 20rpx;
+							color: #999999;
+							margin-left: 14rpx;
+							font-weight: normal;
+							text-decoration: line-through;
+						}
+
+						.vip {
+							font-size: 22rpx;
+							color: #333333;
+							font-weight: normal;
+							margin-left: 14rpx;
+
+							image {
+								width: 38rpx;
+								height: 18rpx;
+								margin-right: 6rpx;
+							}
+						}
+					}
+
+					.cart {
+						height: 46rpx;
+
+						.pictrue {
+							color: var(--view-theme);
+							font-size: 46rpx;
+							width: 46rpx;
+							height: 46rpx;
+							text-align: center;
+							line-height: 46rpx;
+
+							&.icon-jiahao {
+								color: var(--view-theme);
+							}
+						}
+
+						.num {
+							font-size: 30rpx;
+							color: #333333;
+							font-weight: bold;
+							width: 60rpx;
+							text-align: center;
+						}
+					}
+
+					.icon-gouwuche6 {
+						width: 46rpx;
+						height: 46rpx;
+						background-color: var(--view-theme);
+						border-radius: 50%;
+						color: #fff;
+						font-size: 30rpx;
+					}
+
+					.bnt {
+						padding: 0 20rpx;
+						height: 45rpx;
+						background: var(--view-theme);
+						border-radius: 23rpx;
+						font-size: 22rpx;
+						color: #fff;
+						position: relative;
+
+						&.end {
+							background: #cccccc;
+						}
+
+						.num {
+							min-width: 14rpx;
+							background-color: #fff;
+							color: var(--view-theme);
+							border-radius: 15px;
+							position: absolute;
+							right: -13rpx;
+							top: -11rpx;
+							font-size: 16rpx;
+							padding: 0 10rpx;
+							border: 1px solid var(--view-theme);
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 165 - 0
components/goodList/index.vue

@@ -0,0 +1,165 @@
+<template>
+	<view class='goodList'>
+		<scroll-view scroll-y="true" scroll-with-animation='true' style="height: 100%;">
+
+			<block v-for="(item,index) in bastList" :key="index">
+				<view @click="goDetail(item)" class='item acea-row row-between-wrapper' hover-class="none">
+					<view class='pictrue'>
+						<image :src='item.image'></image>
+						<span class="pictrue_log pictrue_log_class"
+							v-if="item.activity && item.activity.type === '1'">{{$t(`秒杀`)}}</span>
+						<span class="pictrue_log pictrue_log_class"
+							v-if="item.activity && item.activity.type === '2'">{{$t(`砍价`)}}</span>
+						<span class="pictrue_log pictrue_log_class"
+							v-if="item.activity && item.activity.type === '3'">{{$t(`拼团`)}}</span>
+					</view>
+					<view class='underline'>
+						<view class='text'>
+							<view class='line1'>{{item.store_name}}</view>
+							<view class='money font-color'>{{$t(`¥`)}}<text class='num'>{{item.price}}</text></view>
+							<view class='vip-money acea-row row-middle'
+								v-if="item.is_vip && item.vip_price && item.vip_price > 0">{{$t(`¥`)}}{{item.vip_price || 0}}
+								<image src='../../static/images/vip.png'></image><text
+									class='num'>{{$t(`已售`)}} {{item.sales}}{{$t(item.unit_name)}}</text>
+							</view>
+							<view class='vip-money acea-row row-middle' v-else><text
+									class='num'>{{$t(`已售`)}} {{item.sales}}{{$t(item.unit_name)}}</text></view>
+						</view>
+					</view>
+					<!-- <view class='iconfont icon-gouwuche cart-color acea-row row-center-wrapper'></view> -->
+				</view>
+			</block>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapGetters
+	} from "vuex";
+	import {
+		goShopDetail,
+		goPage
+	} from '@/libs/order.js'
+	export default {
+		computed: mapGetters(['uid']),
+		props: {
+			status: {
+				type: Number,
+				default: 0,
+			},
+			bastList: {
+				type: Array,
+				default: function() {
+					return [];
+				}
+			}
+		},
+		data() {
+			return {
+
+			};
+		},
+		methods: {
+			goDetail(item) {
+				goPage().then(res => {
+					goShopDetail(item, this.uid).then(res => {
+						uni.navigateTo({
+							url: `/pages/goods_details/index?id=${item.id}`
+						})
+					})
+				})
+
+			}
+
+		}
+	}
+</script>
+
+<style scoped lang='scss'>
+	.goodList .item {
+		position: relative;
+		padding-left: 30rpx;
+	}
+
+	.goodList .item .pictrue {
+		width: 180rpx;
+		height: 180rpx;
+		position: relative;
+	}
+
+	.goodList .item .pictrue image {
+		width: 100%;
+		height: 100%;
+		border-radius: 20rpx;
+	}
+
+	.goodList .item .pictrue .numPic {
+		position: absolute;
+		left: 7rpx;
+		top: 7rpx;
+		width: 40rpx;
+		height: 40rpx;
+		border-radius: 50%;
+	}
+
+	.goodList .item .underline {
+		padding: 30rpx 30rpx 30rpx 0;
+		border-bottom: 1px solid #f5f5f5;
+	}
+
+	.goodList .item:nth-last-child(1) .underline {
+		border-bottom: 0;
+	}
+
+	.goodList .item .text {
+		font-size: 30rpx;
+		color: #222;
+		width: 489rpx;
+	}
+
+	.goodList .item .text .money {
+		font-size: 26rpx;
+		font-weight: bold;
+		margin-top: 50rpx;
+	}
+
+	.goodList .item .text .money .num {
+		font-size: 34rpx;
+	}
+
+	.goodList .item .text .vip-money {
+		font-size: 24rpx;
+		color: #282828;
+		font-weight: bold;
+		margin-top: 15rpx;
+	}
+
+	.goodList .item .text .vip-money image {
+		width: 66rpx;
+		height: 25rpx;
+		margin-right: 8rpx;
+		margin-left: 8rpx;
+	}
+
+	.goodList .item .text .vip-money .num {
+		font-size: 22rpx;
+		color: #aaa;
+		font-weight: normal;
+		margin-top: -2rpx;
+
+		~.num {
+			margin-left: 22rpx;
+		}
+	}
+
+	.goodList .item .iconfont {
+		position: absolute;
+		right: 30rpx;
+		width: 50rpx;
+		height: 50rpx;
+		border-radius: 50%;
+		font-size: 30rpx;
+		bottom: 38rpx;
+	}
+</style>

+ 152 - 0
components/guide/index.vue

@@ -0,0 +1,152 @@
+<template>
+	<view class="content">
+		<swiper class="swiper" :autoplay="autoplay" indicator-dots="true" indicator-color="rgba(255,255,255,0.6)" :duration="duration"
+			v-if="advData.type == 'pic' && advData.value.length">
+			<swiper-item v-for="(item,index) in advData.value" :key="index" @click="jump(item.link)">
+				<view class="swiper-item">
+					<view class="swiper-item-img">
+						<image :src="item.img" mode="scaleToFill"></image>
+					</view>
+				</view>
+			</swiper-item>
+		</swiper>
+		<view class="video-box" v-else-if="advData.type == 'video' && advData.video_link">
+			<video class="vid" :src="advData.video_link" :autoplay="true" :loop="true" :muted="true"
+				:controls="false"></video>
+		</view>
+		<view class="jump-over" @click.stop="launchFlag()">{{$t(`跳过`)}}<text v-if="closeType == 1">{{times}}</text></view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				autoplay: false,
+				duration: 500,
+				jumpover: this.$t(`跳过`),
+				experience: this.$t(`立即体验`),
+				timecount: undefined,
+				times: 0
+			}
+		},
+		props: {
+			advData: {
+				type: Object,
+				default: () => {}
+			},
+			// 1 倒计时 2 手动关闭(预留)
+			closeType: {
+				type: Number,
+				default: 1
+			},
+		},
+		mounted() {
+			this.timer()
+		},
+		methods: {
+			timer() {
+				this.times = this.advData.time
+				let t = this.advData.time || 5
+				this.timecount = setInterval(() => {
+					t--
+					this.times = t
+					if (t <= 0) {
+						clearInterval(this.timecount)
+						this.launchFlag()
+					}
+				}, 1000)
+			},
+			launchFlag() {
+				clearInterval(this.timecount)
+				uni.switchTab({
+					url: '/pages/index/index'
+				});
+			},
+			jump(url) {
+				if (url) {
+					if (url.indexOf("http") != -1) {
+						uni.navigateTo({
+							url: `/pages/annex/web_view/index?url=${url}`
+						});
+					} else {
+						uni.navigateTo({
+							url: url,
+							fail: () => {
+								uni.switchTab({
+									url
+								})
+							}
+						})
+					}
+					clearInterval(this.timecount)
+				}
+
+			},
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	page,
+	.content {
+		width: 100%;
+		height: 100%;
+		background-size: 100% auto;
+		padding: 0;
+	}
+
+	.swiper {
+		width: 100%;
+		height: 100vh;
+		background: #FFFFFF;
+	}
+
+	.swiper-item {
+		width: 100%;
+		height: 100%;
+		text-align: center;
+		position: relative;
+		display: flex;
+		/* justify-content: center; */
+		align-items: flex-end;
+		flex-direction: column-reverse
+	}
+
+	.swiper-item-img {
+		width: 100%;
+		height: 100vh;
+		margin: 0 auto;
+	}
+
+	.swiper-item-img image {
+		width: 100%;
+		height: 100%;
+	}
+
+	.jump-over {
+		position: absolute;
+		height: 45rpx;
+		line-height: 45rpx;
+		padding: 0 15rpx;
+		border-radius: 30rpx;
+		font-size: 24rpx;
+		color: #b09e9a;
+		border: 1px solid #b09e9a;
+		z-index: 999;
+	}
+
+	.jump-over {
+		right: 30rpx;
+		top: 80rpx;
+	}
+
+	.video-box {
+		width: 100vw;
+		height: 100vh;
+
+		.vid {
+			width: 100%;
+			height: 100%;
+		}
+	}
+</style>

+ 129 - 0
components/home/index.vue

@@ -0,0 +1,129 @@
+<template>
+	<view :style="colorStyle">
+		<view style="touch-action: none;">
+			<view class="home" style="position:fixed;" :style="{ top: top + 'px'}" id="right-nav"
+				@touchmove.stop.prevent="setTouchMove">
+				<view class="homeCon bg-color" :class="homeActive === true ? 'on' : ''" v-if="homeActive">
+					<navigator hover-class='none' open-type="switchTab" url='/pages/index/index'
+						class='iconfont icon-shouye-xianxing'>
+					</navigator>
+					<navigator hover-class='none' open-type="switchTab" url='/pages/order_addcart/order_addcart'
+						class='iconfont icon-caigou-xianxing'></navigator>
+					<navigator hover-class='none' open-type="switchTab" url='/pages/user/index'
+						class='iconfont icon-yonghu1'></navigator>
+				</view>
+				<view @click="open" class="pictrueBox">
+					<view class="pictrue">
+						<image :src="
+						  homeActive === true
+						    ? imgHost + '/statics/images/close.gif'
+						    : imgHost + '/statics/images/open.gif'
+						" class="image" />
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	import {
+		mapGetters
+	} from "vuex";
+	import colors from '@/mixins/color.js';
+	import {HTTP_REQUEST_URL} from '@/config/app';
+	export default {
+		name: "Home",
+		props: {},
+		mixins:[colors],
+		data: function() {
+			return {
+				top: "545",
+				imgHost:HTTP_REQUEST_URL
+			};
+		},
+		computed: mapGetters(["homeActive"]),
+		methods: {
+			setTouchMove(e) {
+				var that = this;
+				if (e.touches[0].clientY < 545 && e.touches[0].clientY > 66) {
+					that.top = e.touches[0].clientY
+					// that.setData({
+					// 	top: e.touches[0].clientY
+					// })
+				}
+			},
+			open: function() {
+				this.homeActive ?
+					this.$store.commit("CLOSE_HOME") :
+					this.$store.commit("OPEN_HOME");
+			}
+		},
+		created() {},
+		beforeDestroy() {
+			this.$store.commit("CLOSE_HOME")
+		}
+	};
+</script>
+
+<style scoped>
+	.pictrueBox {
+		width: 130rpx;
+		height: 120rpx;
+	}
+
+	/*返回主页按钮*/
+	.home {
+		position: fixed;
+		color: white;
+		text-align: center;
+		z-index: 999;
+		right: 15rpx;
+		display: flex;
+	}
+
+	.home .homeCon {
+		border-radius: 50rpx;
+		opacity: 0;
+		height: 0;
+		color: var(--view-theme);
+		width: 0;
+	}
+
+	.home .homeCon.on {
+		opacity: 1;
+		animation: bounceInRight 0.5s cubic-bezier(0.215, 0.610, 0.355, 1.000);
+		width: 300rpx;
+		height: 86rpx;
+		margin-bottom: 20rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		background: var(--view-theme) !important;
+	}
+
+	.home .homeCon .iconfont {
+		font-size: 48rpx;
+		color: #fff;
+		display: inline-block;
+		margin: 0 auto;
+	}
+
+	.home .pictrue {
+		width: 86rpx;
+		height: 86rpx;
+		border-radius: 50%;
+		margin: 0 auto;
+		background-color: var(--view-theme);
+	}
+
+	.home .pictrue .image {
+		width: 100%;
+		height: 100%;
+		border-radius: 50%;
+		transform: rotate(90deg);
+		ms-transform: rotate(90deg);
+		moz-transform: rotate(90deg);
+		webkit-transform: rotate(90deg);
+		o-transform: rotate(90deg);
+	}
+</style>

+ 196 - 0
components/homeList/index.vue

@@ -0,0 +1,196 @@
+<template>
+	<!-- #ifdef APP-PLUS -->
+	<view class="animated dialog_nav" :style="{ top: (navH+65) + 'rpx', marginTop: sysHeight}"
+		:class="[goodList?'dialogIndex':'',currentPage?'':'']" v-show="currentPage">
+		<!-- #endif -->
+		<!-- #ifndef APP-PLUS -->
+		<view class="animated dialog_nav" :style="{ top: (navH+15) + 'rpx' }"
+			:class="[goodList?'dialogIndex':'',goodsShow?'dialogGoods':'',currentPage?'':'']" v-show="currentPage">
+			<!-- #endif -->
+			<view class="dialog_nav_item" :class="item.after" v-for="(item,index) in selectNavList" :key="index"
+				@click="linkPage(item.url)">
+				<text class="iconfont" :class="item.icon"></text>
+				<text class="pl-20">{{item.name}}</text>
+			</view>
+		</view>
+</template>
+<script>
+	export default {
+		name: "homeIdex",
+		props: {
+			navH: {
+				type: String | Number,
+				default: ""
+			},
+			returnShow: {
+				type: Boolean,
+				default: true
+			},
+			goodList: {
+				type: Boolean,
+				default: false
+			},
+			currentPage: {
+				type: Boolean,
+				default: false
+			},
+			goodsShow: {
+				type: Boolean,
+				default: false
+			},
+			sysHeight: {
+				type: String | Number,
+				default: ""
+			}
+		},
+		data: function() {
+			return {
+				selectNavList: [{
+						name: this.$t(`首页`),
+						icon: 'icon-shouye8',
+						url: '/pages/index/index',
+						after: 'dialog_after'
+					},
+					{
+						name: this.$t(`搜索`),
+						icon: 'icon-sousuo6',
+						url: '/pages/goods/goods_search/index',
+						after: 'dialog_after'
+					},
+					{
+						name: this.$t(`购物车`),
+						icon: 'icon-gouwuche7',
+						url: '/pages/order_addcart/order_addcart',
+						after: 'dialog_after'
+					},
+					{
+						name: this.$t(`我的收藏`),
+						icon: 'icon-shoucang3',
+						url: '/pages/users/user_goods_collection/index',
+						after: 'dialog_after'
+					},
+					{
+						name: this.$t(`个人中心`),
+						icon: 'icon-gerenzhongxin1',
+						url: '/pages/user/index'
+					},
+				]
+			};
+		},
+		methods: {
+			linkPage(url) {
+				if (['/pages/goods_cate/goods_cate', '/pages/order_addcart/order_addcart', '/pages/user/index',
+						'/pages/index/index'
+					]
+					.indexOf(url) == -1) {
+					uni.navigateTo({
+						url: url
+					})
+				} else {
+					uni.switchTab({
+						url: url
+					})
+				}
+			}
+		},
+		created() {},
+		beforeDestroy() {}
+	};
+</script>
+
+<style scoped lang="scss">
+	.dialog_nav {
+		position: absolute;
+		/* #ifdef MP */
+		left: 14rpx;
+		/* #endif */
+		/* #ifndef MP */
+		right: 14rpx;
+		/* #endif */
+		width: 240rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 0px 16rpx rgba(0, 0, 0, 0.08);
+		z-index: 310;
+		border-radius: 14rpx;
+
+		&::before {
+			content: "";
+			width: 0;
+			height: 0;
+			border-left: 15rpx solid transparent;
+			border-right: 15rpx solid transparent;
+			border-bottom: 30rpx solid #fff;
+			position: absolute;
+			top: -20rpx;
+			/* #ifdef APP-PLUS || H5 */
+			right: 32rpx;
+			/* #endif */
+			/* #ifdef MP */
+			left: 80rpx;
+			/* #endif */
+			border-bottom-color: #f2f2f2;
+		}
+
+		&::after {
+			content: "";
+			width: 0;
+			height: 0;
+			border-left: 15rpx solid transparent;
+			border-right: 15rpx solid transparent;
+			border-bottom: 30rpx solid #fff;
+			position: absolute;
+			top: -20rpx;
+			/* #ifdef APP-PLUS || H5 */
+			right: 32rpx;
+			/* #endif */
+			/* #ifdef MP */
+			left: 80rpx;
+			/* #endif */
+
+		}
+
+		&.dialogIndex {
+			left: 14rpx;
+
+			&::before {
+				left: -160rpx !important;
+			}
+		}
+
+		&.dialogGoods {
+			&::before {
+				left: -170rpx;
+			}
+		}
+	}
+
+	.dialog_nav_item {
+		width: 100%;
+		height: 84rpx;
+		line-height: 84rpx;
+		padding: 0 20rpx 0;
+		box-sizing: border-box;
+		border-bottom: #eee;
+		font-size: 28rpx;
+		color: #333;
+		position: relative;
+		display: flex;
+
+		.iconfont {
+			font-size: 32rpx;
+			margin-right: 26rpx;
+		}
+	}
+
+	.dialog_after {
+		::after {
+			content: '';
+			position: absolute;
+			width: 90px;
+			height: 1px;
+			background-color: #EEEEEE;
+			bottom: 0;
+			right: 0;
+		}
+	}
+</style>

+ 185 - 0
components/indexGoods/index.vue

@@ -0,0 +1,185 @@
+<template>
+	<view>
+		<view class="list">
+			<view class="product-box">
+				<view class="product-list" v-for="(item, i1) in tmp_data" :key="i1" @click="goGoodsDetail(item)">
+					<view class="product-item">
+						<image :src="item.image" mode="scaleToFill" fade-show style="width: 100%;"></image>
+						<view class="info">
+							<view class="title line2">
+								<text class="tag" v-if="item.activity && item.activity.type === '1'">{{$t(`秒杀`)}}</text>
+								<text class="tag" v-if="item.activity && item.activity.type === '2'">{{$t(`砍价`)}}</text>
+								<text class="tag" v-if="item.activity && item.activity.type === '3'">{{$t(`拼团`)}}</text>
+								<text class="tag" v-if="item.checkCoupon">{{$t(`券`)}}</text>
+								{{ item.store_name }}
+							</view>
+
+							<view class="price-box">
+								<view>
+									<text>{{$t(`¥`)}}</text>
+									{{ item.price }}
+								</view>
+								<view class="sales">
+									{{$t(`已售`)}} {{item.sales}}
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		goShopDetail,
+		goPage
+	} from '@/libs/order.js'
+	export default {
+		name: 'goodsWaterfall',
+		props: {
+			dataLists: {
+				default: []
+			}
+		},
+		data() {
+			return {
+				lists: [],
+				showLoad: false,
+				tmp_data: []
+			};
+		},
+		methods: {
+			goGoodsDetail(item) {
+				goPage().then(res => {
+					goShopDetail(item, this.uid).then(res => {
+						uni.navigateTo({
+							url: `/pages/goods_details/index?id=${item.id}`
+						})
+					})
+				})
+			},
+		},
+		mounted() {
+			const that = this
+			that.tmp_data = that.dataLists
+			// that.showLoadFlag()
+		},
+		watch: {
+			dataLists() {
+				this.loaded = []
+				this.loadErr = []
+				this.tmp_data = this.dataLists
+			},
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	.list {
+		display: flex;
+		margin: 0 30rpx;
+	}
+
+	.product-box {
+		display: flex;
+		flex: 1;
+		flex-wrap: wrap;
+		width: 100%;
+	}
+
+	.flow_item {
+		margin: 15upx;
+		border-radius: 20upx;
+		background: #f4f4f4;
+		overflow: hidden;
+	}
+
+	.flow_item_con {
+		padding: 10upx 20upx 20upx;
+	}
+
+	.flow_item_title {
+		position: relative;
+		font-size: 32upx;
+		font-weight: 700;
+		margin-bottom: 5upx;
+	}
+
+	.flow_item_des {
+		font-size: 24upx;
+	}
+
+	.pl10 {
+		padding-left: 10rpx;
+	}
+
+	.product-list {
+		display: flex;
+		width: calc(50% - 16rpx);
+		margin: 2rpx 8rpx;
+
+		.product-item {
+			position: relative;
+			width: 100%;
+			background: #fff;
+			border-radius: 10rpx;
+			margin-bottom: 8rpx;
+			display: flex;
+			flex-direction: column;
+			justify-content: space-between;
+
+			image {
+				width: 100%;
+				height: 330rpx;
+				border-radius: 10rpx 10rpx 0 0;
+			}
+
+			.info {
+				flex: 1;
+				padding: 14rpx 16rpx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+
+				.title {
+					font-size: 28rpx;
+					height: 76rpx;
+				}
+
+				.tag {
+					border-radius: 4rpx;
+					border: 1px solid var(--view-theme);
+					color: var(--view-theme);
+					font-size: 20rpx;
+					padding: 0rpx 4rpx;
+					margin: 10rpx 0;
+					margin-right: 10rpx;
+					width: max-content;
+				}
+
+				.price-box {
+					font-size: 34rpx;
+					font-weight: 700;
+					margin-top: 8px;
+					color: var(--view-priceColor);
+					display: flex;
+					justify-content: space-between;
+					// align-items: flex-end;
+					align-items: center;
+
+					text {
+						font-size: 28rpx;
+					}
+
+					.sales {
+						color: #999999;
+						font-size: 24rpx;
+						font-weight: 400;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 814 - 0
components/jyf-parser/jyf-parser.vue

@@ -0,0 +1,814 @@
+<!--
+  parser 主模块组件
+  github:https://github.com/jin-yufeng/Parser 
+  docs:https://jin-yufeng.github.io/Parser
+  插件市场:https://ext.dcloud.net.cn/plugin?id=805
+  author:JinYufeng
+  update:2020/04/14
+-->
+<template>
+	<view>
+		<slot v-if="!nodes.length" />
+		<!--#ifdef APP-PLUS-NVUE-->
+		<web-view id="top" ref="web" :src="src" :style="'margin-top:-2px;height:'+height+'px'" @onPostMessage="_message" />
+		<!--#endif-->
+		<!--#ifndef APP-PLUS-NVUE-->
+		<view id="top" :style="showAm+(selectable?';user-select:text;-webkit-user-select:text':'')" :animation="scaleAm" @tap="_tap"
+		 @touchstart="_touchstart" @touchmove="_touchmove">
+			<!--#ifdef H5-->
+			<div :id="'rtf'+uid"></div>
+			<!--#endif-->
+			<!--#ifndef H5-->
+			<trees :nodes="nodes" :lazy-load="lazyLoad" :loadVideo="loadVideo" />
+			<image v-for="(item, index) in imgs" v-bind:key="index" :id="index" :src="item" hidden @load="_load" />
+			<!--#endif-->
+		</view>
+		<!--#endif-->
+	</view>
+</template>
+
+<script>
+	// #ifndef H5 || APP-PLUS-NVUE
+	import trees from './libs/trees';
+	var cache = {},
+		// #ifdef MP-WEIXIN || MP-TOUTIAO
+		fs = uni.getFileSystemManager ? uni.getFileSystemManager() : null,
+		// #endif
+		Parser = require('./libs/MpHtmlParser.js');
+	var document; // document 补丁包 https://jin-yufeng.github.io/Parser/#/instructions?id=document
+	// 计算 cache 的 key
+	function hash(str) {
+		for (var i = str.length, val = 5381; i--;)
+			val += (val << 5) + str.charCodeAt(i);
+		return val;
+	}
+	// #endif
+	// #ifdef H5 || APP-PLUS-NVUE
+	var rpx = uni.getSystemInfoSync().screenWidth / 750,
+		cfg = require('./libs/config.js');
+	// #endif
+	// #ifdef APP-PLUS-NVUE
+	var dom = weex.requireModule('dom');
+	// #endif
+	export default {
+		name: 'parser',
+		data() {
+			return {
+				// #ifdef APP-PLUS
+				loadVideo: false,
+				// #endif
+				// #ifdef H5
+				uid: this._uid,
+				// #endif
+				// #ifdef APP-PLUS-NVUE
+				src: '',
+				height: 1,
+				// #endif
+				// #ifndef APP-PLUS-NVUE
+				scaleAm: '',
+				showAm: '',
+				imgs: [],
+				// #endif
+				nodes: []
+			}
+		},
+		// #ifndef H5 || APP-PLUS-NVUE
+		components: {
+			trees
+		},
+		// #endif
+		props: {
+			'html': null,
+			// #ifndef MP-ALIPAY
+			'autopause': {
+				type: Boolean,
+				default: true
+			},
+			// #endif
+			'autosetTitle': {
+				type: Boolean,
+				default: true
+			},
+			// #ifndef H5 || APP-PLUS-NVUE
+			'compress': Number,
+			'useCache': Boolean,
+			'xml': Boolean,
+			// #endif
+			'domain': String,
+			// #ifndef MP-BAIDU || MP-ALIPAY || APP-PLUS
+			'gestureZoom': Boolean,
+			// #endif
+			// #ifdef MP-WEIXIN || MP-QQ || H5 || APP-PLUS
+			'lazyLoad': Boolean,
+			// #endif
+			'selectable': Boolean,
+			'tagStyle': Object,
+			'showWithAnimation': Boolean,
+			'useAnchor': Boolean
+		},
+		watch: {
+			html(html) {
+				this.setContent(html);
+			}
+		},
+		mounted() {
+			// 图片数组
+			this.imgList = [];
+			this.imgList.each = function(f) {
+				for (var i = 0, len = this.length; i < len; i++)
+					this.setItem(i, f(this[i], i, this));
+			}
+			this.imgList.setItem = function(i, src) {
+				if (i == void 0 || !src) return;
+				// #ifndef MP-ALIPAY || APP-PLUS
+				// 去重
+				if (src.indexOf('http') == 0 && this.includes(src)) {
+					var newSrc = '';
+					for (var j = 0, c; c = src[j]; j++) {
+						if (c == '/' && src[j - 1] != '/' && src[j + 1] != '/') break;
+						newSrc += Math.random() > 0.5 ? c.toUpperCase() : c;
+					}
+					newSrc += src.substr(j);
+					return this[i] = newSrc;
+				}
+				// #endif
+				this[i] = src;
+				// 暂存 data src
+				if (src.includes('data:image')) {
+					var filePath, info = src.match(/data:image\/(\S+?);(\S+?),(.+)/);
+					if (!info) return;
+					// #ifdef MP-WEIXIN || MP-TOUTIAO
+					filePath = `${wx.env.USER_DATA_PATH}/${Date.now()}.${info[1]}`;
+					fs && fs.writeFile({
+						filePath,
+						data: info[3],
+						encoding: info[2],
+						success: () => this[i] = filePath
+					})
+					// #endif
+					// #ifdef APP-PLUS
+					filePath = `_doc/parser_tmp/${Date.now()}.${info[1]}`;
+					var bitmap = new plus.nativeObj.Bitmap();
+					bitmap.loadBase64Data(src, () => {
+						bitmap.save(filePath, {}, () => {
+							bitmap.clear()
+							this[i] = filePath;
+						})
+					})
+					// #endif
+				}
+			}
+			if (this.html) this.setContent(this.html);
+		},
+		beforeDestroy() {
+			// #ifdef H5
+			if (this._observer) this._observer.disconnect();
+			// #endif
+			this.imgList.each(src => {
+				// #ifdef APP-PLUS
+				if (src && src.includes('_doc')) {
+					plus.io.resolveLocalFileSystemURL(src, entry => {
+						entry.remove();
+					});
+				}
+				// #endif
+				// #ifdef MP-WEIXIN || MP-TOUTIAO
+				if (src && src.includes(uni.env.USER_DATA_PATH))
+					fs && fs.unlink({
+						filePath: src
+					})
+				// #endif
+			})
+			clearInterval(this._timer);
+		},
+		methods: {
+			// #ifdef H5 || APP-PLUS-NVUE
+			_Dom2Str(nodes) {
+				var str = '';
+				for (var node of nodes) {
+					if (node.type == 'text')
+						str += node.text;
+					else {
+						str += ('<' + node.name);
+						for (var attr in node.attrs || {})
+							str += (' ' + attr + '="' + node.attrs[attr] + '"');
+						if (!node.children || !node.children.length) str += '>';
+						else str += ('>' + this._Dom2Str(node.children) + '</' + node.name + '>');
+					}
+				}
+				return str;
+			},
+			_handleHtml(html, append) {
+				if (typeof html != 'string') html = this._Dom2Str(html.nodes || html);
+				// 处理 rpx
+				if (html.includes('rpx'))
+					html = html.replace(/[0-9.]+\s*rpx/g, $ => parseFloat($) * rpx + 'px');
+				if (!append) {
+					// 处理 tag-style 和 userAgentStyles
+					var style = '<style>@keyframes show{0%{opacity:0}100%{opacity:1}}';
+					for (var item in cfg.userAgentStyles)
+						style += `${item}{${cfg.userAgentStyles[item]}}`;
+					for (item in this.tagStyle)
+						style += `${item}{${this.tagStyle[item]}}`;
+					style += '</style>';
+					html = style + html;
+				}
+				return html;
+			},
+			// #endif
+			setContent(html, append) {
+				// #ifdef APP-PLUS-NVUE
+				if (!html) {
+					this.src = '';
+					this.height = 1;
+					return;
+				}
+				if (append) return;
+				plus.io.resolveLocalFileSystemURL('_doc', entry => {
+					entry.getDirectory('parser_tmp', {
+						create: true
+					}, entry => {
+						var fileName = Date.now() + '.html';
+						entry.getFile(fileName, {
+							create: true
+						}, entry => {
+							entry.createWriter(writer => {
+								writer.onwriteend = () => {
+									this.nodes = [1];
+									this.src = '_doc/parser_tmp/' + fileName;
+									this.$nextTick(function() {
+										entry.remove();
+									})
+								}
+								html =
+									'<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1' +
+									(this.selectable ? '' : ',user-scalable=no') +
+									'"><script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></' +
+									'script><base href="' + this.domain + '">' + this._handleHtml(html) +
+									'<script>"use strict";function post(t){uni.postMessage({data:t})}' +
+									(this.showWithAnimation ? 'document.body.style.animation="show .5s",' : '') +
+									'document.addEventListener("UniAppJSBridgeReady",function(){post({action:"load",text:document.body.innerText});var t=document.getElementsByTagName("title");t.length&&post({action:"getTitle",title:t[0].innerText});for(var e,o=document.getElementsByTagName("img"),n=[],i=0,r=0;e=o[i];i++)e.onerror=function(){post({action:"error",source:"img",target:this})},e.hasAttribute("ignore")||"A"==e.parentElement.nodeName||(e.i=r++,n.push(e.src),e.onclick=function(){post({action:"preview",img:{i:this.i,src:this.src}})});post({action:"getImgList",imgList:n});for(var a,s=document.getElementsByTagName("a"),c=0;a=s[c];c++)a.onclick=function(){var t,e=this.getAttribute("href");if("#"==e[0]){var r=document.getElementById(e.substr(1));r&&(t=r.offsetTop)}return post({action:"linkpress",href:e,offset:t}),!1};;for(var u,m=document.getElementsByTagName("video"),d=0;u=m[d];d++)u.style.maxWidth="100%",u.onerror=function(){post({action:"error",source:"video",target:this})}' +
+									(this.autopause ? ',u.onplay=function(){for(var t,e=0;t=m[e];e++)t!=this&&t.pause()}' : '') +
+									';for(var g,l=document.getElementsByTagName("audio"),p=0;g=l[p];p++)g.onerror=function(){post({action:"error",source:"audio",target:this})};window.onload=function(){post({action:"ready",height:document.body.scrollHeight})}});</' +
+									'script>';
+								writer.write(html);
+							});
+						})
+					})
+				})
+				// #endif
+				// #ifdef H5
+				if (!html) {
+					if (this.rtf && !append) this.rtf.parentNode.removeChild(this.rtf);
+					return;
+				}
+				var div = document.createElement('div');
+				if (!append) {
+					if (this.rtf) this.rtf.parentNode.removeChild(this.rtf);
+					this.rtf = div;
+				} else {
+					if (!this.rtf) this.rtf = div;
+					else this.rtf.appendChild(div);
+				}
+				div.innerHTML = this._handleHtml(html, append);
+				for (var styles = this.rtf.getElementsByTagName('style'), i = 0, style; style = styles[i++];) {
+					style.innerHTML = style.innerHTML.replace(/body/g, '#rtf' + this._uid);
+					style.setAttribute('scoped', 'true');
+				}
+				// 懒加载
+				if (!this._observer && this.lazyLoad && IntersectionObserver) {
+					this._observer = new IntersectionObserver(changes => {
+						for (let item, i = 0; item = changes[i++];) {
+							if (item.isIntersecting) {
+								item.target.src = item.target.getAttribute('data-src');
+								item.target.removeAttribute('data-src');
+								this._observer.unobserve(item.target);
+							}
+						}
+					}, {
+						rootMargin: '900px 0px 900px 0px'
+					})
+				}
+				var _ts = this;
+				// 获取标题
+				var title = this.rtf.getElementsByTagName('title');
+				if (title.length && this.autosetTitle)
+					uni.setNavigationBarTitle({
+						title: title[0].innerText
+					})
+				// 图片处理
+				this.imgList.length = 0;
+				var imgs = this.rtf.getElementsByTagName('img');
+				for (let i = 0, j = 0, img; img = imgs[i]; i++) {
+					img.style.maxWidth = '100%';
+					var src = img.getAttribute('src');
+					if (this.domain && src) {
+						if (src[0] == '/') {
+							if (src[1] == '/')
+								img.src = (this.domain.includes('://') ? this.domain.split('://')[0] : '') + ':' + src;
+							else img.src = this.domain + src;
+						} else if (!src.includes('://')) img.src = this.domain + '/' + src;
+					}
+					if (!img.hasAttribute('ignore') && img.parentElement.nodeName != 'A') {
+						img.i = j++;
+						_ts.imgList.push(img.src || img.getAttribute('data-src'));
+						img.onclick = function() {
+							var preview = true;
+							this.ignore = () => preview = false;
+							_ts.$emit('imgtap', this);
+							if (preview) {
+								uni.previewImage({
+									current: this.i,
+									urls: _ts.imgList
+								});
+							}
+						}
+					}
+					img.onerror = function() {
+						_ts.$emit('error', {
+							source: 'img',
+							target: this
+						});
+					}
+					if (_ts.lazyLoad && this._observer && img.src && img.i != 0) {
+						img.setAttribute('data-src', img.src);
+						img.removeAttribute('src');
+						this._observer.observe(img);
+					}
+				}
+				// 链接处理
+				var links = this.rtf.getElementsByTagName('a');
+				for (var link of links) {
+					link.onclick = function() {
+						var jump = true,
+							href = this.getAttribute('href');
+						_ts.$emit('linkpress', {
+							href,
+							ignore: () => jump = false
+						});
+						if (jump && href) {
+							if (href[0] == '#') {
+								if (_ts.useAnchor) {
+									_ts.navigateTo({
+										id: href.substr(1)
+									})
+								}
+							} else if (href.indexOf('http') == 0 || href.indexOf('//') == 0)
+								return true;
+							else {
+								uni.navigateTo({
+									url: href
+								})
+							}
+						}
+						return false;
+					}
+				}
+				// 视频处理
+				var videos = this.rtf.getElementsByTagName('video');
+				_ts.videoContexts = videos;
+				for (let video, i = 0; video = videos[i++];) {
+					video.style.maxWidth = '100%';
+					video.onerror = function() {
+						_ts.$emit('error', {
+							source: 'video',
+							target: this
+						});
+					}
+					video.onplay = function() {
+						if (_ts.autopause)
+							for (let item, i = 0; item = _ts.videoContexts[i++];)
+								if (item != this) item.pause();
+					}
+				}
+				// 音频处理
+				var audios = this.rtf.getElementsByTagName('audios');
+				for (var audio of audios)
+					audio.onerror = function() {
+						_ts.$emit('error', {
+							source: 'audio',
+							target: this
+						});
+					}
+				this.document = this.rtf;
+				if (!append) document.getElementById('rtf' + this._uid).appendChild(this.rtf);
+				this.$nextTick(() => {
+					this.nodes = [1];
+					this.$emit('load');
+				})
+				setTimeout(() => this.showAm = '', 500);
+				// #endif
+				// #ifndef H5 || APP-PLUS-NVUE
+				var nodes;
+				if (!html)
+					return this.nodes = [];
+				else if (typeof html == 'string') {
+					let parser = new Parser(html, this);
+					// 缓存读取
+					if (this.useCache) {
+						var hashVal = hash(html);
+						if (cache[hashVal])
+							nodes = cache[hashVal];
+						else {
+							nodes = parser.parse();
+							cache[hashVal] = nodes;
+						}
+					} else nodes = parser.parse();
+					this.$emit('parse', nodes);
+				} else if (Object.prototype.toString.call(html) == '[object Array]') {
+					// 非本插件产生的 array 需要进行一些转换
+					if (html.length && html[0].PoweredBy != 'Parser') {
+						let parser = new Parser(html, this);
+						(function f(ns) {
+							for (var i = 0, n; n = ns[i]; i++) {
+								if (n.type == 'text') continue;
+								n.attrs = n.attrs || {};
+								for (var item in n.attrs)
+									if (typeof n.attrs[item] != 'string') n.attrs[item] = n.attrs[item].toString();
+								parser.matchAttr(n, parser);
+								if (n.children && n.children.length) {
+									parser.STACK.push(n);
+									f(n.children);
+									parser.popNode(parser.STACK.pop());
+								} else n.children = void 0;
+							}
+						})(html);
+					}
+					nodes = html;
+				} else if (typeof html == 'object' && html.nodes) {
+					nodes = html.nodes;
+					console.warn('错误的 html 类型:object 类型已废弃');
+				} else
+					return console.warn('错误的 html 类型:' + typeof html);
+				// #ifdef APP-PLUS
+				this.loadVideo = false;
+				// #endif
+				if (document) this.document = new document(this.nodes, 'nodes', this);
+				if (append) this.nodes = this.nodes.concat(nodes);
+				else this.nodes = nodes;
+				if (nodes.length && nodes[0].title && this.autosetTitle)
+					uni.setNavigationBarTitle({
+						title: nodes[0].title
+					})
+				this.$nextTick(() => {
+					this.imgList.length = 0;
+					this.videoContexts = [];
+					// #ifdef MP-TOUTIAO
+					setTimeout(() => {
+						// #endif
+						var f = (cs) => {
+							for (let i = 0, c; c = cs[i++];) {
+								if (c.$options.name == 'trees') {
+									for (var j = c.nodes.length, item; item = c.nodes[--j];) {
+										if (item.c) continue;
+										if (item.name == 'img') {
+											this.imgList.setItem(item.attrs.i, item.attrs.src);
+											// #ifndef MP-ALIPAY
+											if (!c.observer && !c.imgLoad && item.attrs.i != '0') {
+												if (this.lazyLoad && uni.createIntersectionObserver) {
+													c.observer = uni.createIntersectionObserver(c);
+													c.observer.relativeToViewport({
+														top: 900,
+														bottom: 900
+													}).observe('._img', () => {
+														c.imgLoad = true;
+														c.observer.disconnect();
+													})
+												} else
+													c.imgLoad = true;
+											}
+											// #endif
+										}
+										// #ifndef MP-ALIPAY
+										else if (item.name == 'video') {
+											var ctx = uni.createVideoContext(item.attrs.id, c);
+											ctx.id = item.attrs.id;
+											this.videoContexts.push(ctx);
+										}
+										// #endif
+										// #ifdef MP-BAIDU || MP-ALIPAY || APP-PLUS
+										if (item.attrs && item.attrs.id) {
+											this.anchors = this.anchors || [];
+											this.anchors.push({
+												id: item.attrs.id,
+												node: c
+											})
+										}
+										// #endif
+									}
+								}
+								if (c.$children.length)
+									f(c.$children)
+							}
+						}
+						f(this.$children);
+						// #ifdef MP-TOUTIAO
+					}, 200)
+					this.$emit('load');
+					// #endif
+					// #ifdef APP-PLUS
+					setTimeout(() => {
+						this.loadVideo = true;
+					}, 3000);
+					// #endif
+				})
+				// #endif
+				// #ifndef APP-PLUS-NVUE
+				var height;
+				clearInterval(this._timer);
+				this._timer = setInterval(() => {
+					// #ifdef H5
+					var res = [this.rtf.getBoundingClientRect()];
+					// #endif
+					// #ifndef H5
+					// #ifdef APP-PLUS
+					uni.createSelectorQuery().in(this)
+					// #endif
+					// #ifndef APP-PLUS
+					this.createSelectorQuery()
+						// #endif
+						.select('#top').boundingClientRect().exec(res => {
+							// #endif
+							this.width = res[0].width;
+							if (res[0].height == height) {
+								this.$emit('ready', res[0])
+								clearInterval(this._timer);
+							}
+							height = res[0].height;
+							// #ifndef H5
+						});
+					// #endif
+				}, 350)
+				if (this.showWithAnimation && !append) this.showAm = 'animation:show .5s';
+				// #endif
+			},
+			getText(ns = this.nodes) {
+				// #ifdef APP-PLUS-NVUE
+				return this._text;
+				// #endif
+				// #ifdef H5
+				return this.rtf.innerText;
+				// #endif
+				// #ifndef H5 || APP-PLUS-NVUE
+				var txt = '';
+				for (var i = 0, n; n = ns[i++];) {
+					if (n.type == 'text') txt += n.text.replace(/&nbsp;/g, '\u00A0').replace(/&lt;/g, '<').replace(/&gt;/g, '>')
+						.replace(/&amp;/g, '&');
+					else if (n.type == 'br') txt += '\n';
+					else {
+						// 块级标签前后加换行
+						var block = n.name == 'p' || n.name == 'div' || n.name == 'tr' || n.name == 'li' || (n.name[0] == 'h' && n.name[1] >
+							'0' && n.name[1] < '7');
+						if (block && txt && txt[txt.length - 1] != '\n') txt += '\n';
+						if (n.children) txt += this.getText(n.children);
+						if (block && txt[txt.length - 1] != '\n') txt += '\n';
+						else if (n.name == 'td' || n.name == 'th') txt += '\t';
+					}
+				}
+				return txt;
+				// #endif
+			},
+			navigateTo(obj) {
+				if (!this.useAnchor)
+					return obj.fail && obj.fail({
+						errMsg: 'Anchor is disabled'
+					})
+				// #ifdef APP-PLUS-NVUE
+				if (!obj.id)
+					dom.scrollToElement(this.$refs.web);
+				else
+					this.$refs.web.evalJs('var pos=document.getElementById("' + obj.id +
+						'");if(pos)post({action:"linkpress",href:"#",offset:pos.offsetTop})');
+				return obj.success && obj.success({
+					errMsg: 'pageScrollTo:ok'
+				});
+				// #endif
+				// #ifdef H5
+				if (!obj.id) {
+					window.scrollTo(0, this.rtf.offsetTop);
+					return obj.success && obj.success({
+						errMsg: 'pageScrollTo:ok'
+					});
+				}
+				var target = document.getElementById(obj.id);
+				if (!target) return obj.fail && obj.fail({
+					errMsg: 'Label not found'
+				});
+				obj.scrollTop = this.rtf.offsetTop + target.offsetTop;
+				uni.pageScrollTo(obj);
+				// #endif
+				// #ifndef H5
+				var Scroll = (selector, component) => {
+					uni.createSelectorQuery().in(component ? component : this).select(selector).boundingClientRect().selectViewport()
+						.scrollOffset()
+						.exec(res => {
+							if (!res || !res[0])
+								return obj.fail && obj.fail({
+									errMsg: 'Label not found'
+								});
+							obj.scrollTop = res[1].scrollTop + res[0].top;
+							uni.pageScrollTo(obj);
+						})
+				}
+				if (!obj.id) Scroll('#top');
+				else {
+					// #ifndef MP-BAIDU || MP-ALIPAY || APP-PLUS
+					Scroll('#top >>> #' + obj.id + ', #top >>> .' + obj.id);
+					// #endif
+					// #ifdef MP-BAIDU || MP-ALIPAY || APP-PLUS
+					for (var anchor of this.anchors)
+						if (anchor.id == obj.id)
+							Scroll('#' + obj.id + ', .' + obj.id, anchor.node);
+					// #endif
+				}
+				// #endif
+			},
+			getVideoContext(id) {
+				// #ifndef APP-PLUS-NVUE
+				if (!id) return this.videoContexts;
+				else
+					for (var i = this.videoContexts.length; i--;)
+						if (this.videoContexts[i].id == id) return this.videoContexts[i];
+				// #endif
+			},
+			// 预加载
+			preLoad(html, num) {
+				// #ifdef H5 || APP-PLUS-NVUE
+				if (html.constructor == Array)
+					html = this._Dom2Str(html);
+				var script = "var contain=document.createElement('div');contain.innerHTML='" + html.replace(/'/g, "\\'") +
+					"';for(var imgs=contain.querySelectorAll('img'),i=imgs.length-1;i>=" + num +
+					";i--)imgs[i].removeAttribute('src');";
+				// #endif
+				// #ifdef APP-PLUS-NVUE
+				this.$refs.web.evalJs(script);
+				// #endif
+				// #ifdef H5
+				eval(script);
+				// #endif
+				// #ifndef H5 || APP-PLUS-NVUE
+				if (typeof html == 'string') {
+					var id = hash(html);
+					html = new Parser(html, this).parse();
+					cache[id] = html;
+				}
+				var wait = [];
+				(function f(ns) {
+					for (var i = 0, n; n = ns[i++];) {
+						if (n.name == 'img' && n.attrs.src && !wait.includes(n.attrs.src))
+							wait.push(n.attrs.src);
+						f(n.children || []);
+					}
+				})(html);
+				if (num) wait = wait.slice(0, num);
+				this._wait = (this._wait || []).concat(wait);
+				if (!this.imgs) this.imgs = this._wait.splice(0, 15);
+				else if (this.imgs.length < 15)
+					this.imgs = this.imgs.concat(this._wait.splice(0, 15 - this.imgs.length));
+				// #endif
+			},
+			// #ifdef APP-PLUS-NVUE
+			_message(e) {
+				// 接收 web-view 消息
+				var data = e.detail.data[0];
+				if (data.action == 'load') {
+					this.$emit('load');
+					this._text = data.text;
+				} else if (data.action == 'getTitle') {
+					if (this.autosetTitle)
+						uni.setNavigationBarTitle({
+							title: data.title
+						})
+				} else if (data.action == 'getImgList') {
+					this.imgList.length = 0;
+					for (var i = data.imgList.length; i--;)
+						this.imgList.setItem(i, data.imgList[i]);
+				} else if (data.action == 'preview') {
+					var preview = true;
+					data.img.ignore = () => preview = false;
+					this.$emit('imgtap', data.img);
+					if (preview)
+						uni.previewImage({
+							current: data.img.i,
+							urls: this.imgList
+						})
+				} else if (data.action == 'linkpress') {
+					var jump = true,
+						href = data.href;
+					this.$emit('linkpress', {
+						href,
+						ignore: () => jump = false
+					})
+					if (jump && href) {
+						if (href[0] == '#') {
+							if (this.useAnchor)
+								dom.scrollToElement(this.$refs.web, {
+									offset: data.offset
+								})
+						} else if (href.includes('://'))
+							plus.runtime.openWeb(href);
+						else
+							uni.navigateTo({
+								url: href
+							})
+					}
+				} else if (data.action == 'error')
+					this.$emit('error', {
+						source: data.source,
+						target: data.target
+					})
+				else if (data.action == 'ready') {
+					this.height = data.height;
+					this.$nextTick(() => {
+						uni.createSelectorQuery().in(this).select('#top').boundingClientRect().exec(res => {
+							this.rect = res[0];
+							this.$emit('ready', res[0]);
+						})
+					})
+				}
+			},
+			// #endif
+			// #ifndef APP-PLUS-NVUE
+			// #ifndef H5
+			_load(e) {
+				if (this._wait.length)
+					this.$set(this.imgs, e.target.id, this._wait.shift());
+			},
+			// #endif
+			_tap(e) {
+				// #ifndef MP-BAIDU || MP-ALIPAY || APP-PLUS
+				if (this.gestureZoom && e.timeStamp - this._lastT < 300) {
+					var initY = e.touches[0].pageY - e.currentTarget.offsetTop;
+					if (this._zoom) {
+						this._scaleAm.translateX(0).scale(1).step();
+						uni.pageScrollTo({
+							scrollTop: (initY + this._initY) / 2 - e.touches[0].clientY,
+							duration: 400
+						})
+					} else {
+						var initX = e.touches[0].pageX - e.currentTarget.offsetLeft;
+						this._initY = initY;
+						this._scaleAm = uni.createAnimation({
+							transformOrigin: `${initX}px ${this._initY}px 0`,
+							timingFunction: 'ease-in-out'
+						});
+						// #ifdef MP-TOUTIAO
+						this._scaleAm.opacity(1);
+						// #endif
+						this._scaleAm.scale(2).step();
+						this._tMax = initX / 2;
+						this._tMin = (initX - this.width) / 2;
+						this._tX = 0;
+					}
+					this._zoom = !this._zoom;
+					this.scaleAm = this._scaleAm.export();
+				}
+				this._lastT = e.timeStamp;
+				// #endif
+			},
+			_touchstart(e) {
+				// #ifndef MP-BAIDU || MP-ALIPAY || APP-PLUS
+				if (e.touches.length == 1)
+					this._initX = this._lastX = e.touches[0].pageX;
+				// #endif
+			},
+			_touchmove(e) {
+				// #ifndef MP-BAIDU || MP-ALIPAY || APP-PLUS
+				var diff = e.touches[0].pageX - this._lastX;
+				if (this._zoom && e.touches.length == 1 && Math.abs(diff) > 20) {
+					this._lastX = e.touches[0].pageX;
+					if ((this._tX <= this._tMin && diff < 0) || (this._tX >= this._tMax && diff > 0))
+						return;
+					this._tX += (diff * Math.abs(this._lastX - this._initX) * 0.05);
+					if (this._tX < this._tMin) this._tX = this._tMin;
+					if (this._tX > this._tMax) this._tX = this._tMax;
+					this._scaleAm.translateX(this._tX).step();
+					this.scaleAm = this._scaleAm.export();
+				}
+				// #endif
+			}
+			// #endif
+		}
+	}
+</script>
+
+<style>
+	@keyframes show {
+		0% {
+			opacity: 0
+		}
+
+		100% {
+			opacity: 1;
+		}
+	}
+
+	/* #ifdef MP-WEIXIN */
+	:host {
+		display: block;
+		overflow: scroll;
+		-webkit-overflow-scrolling: touch;
+	}
+
+	/* #endif */
+</style>

+ 102 - 0
components/jyf-parser/libs/CssHandler.js

@@ -0,0 +1,102 @@
+/*
+  解析和匹配 Css 的选择器
+  github:https://github.com/jin-yufeng/Parser
+  docs:https://jin-yufeng.github.io/Parser
+  author:JinYufeng
+  update:2020/03/15
+*/
+var cfg = require('./config.js');
+class CssHandler {
+	constructor(tagStyle) {
+		var styles = Object.assign({}, cfg.userAgentStyles);
+		for (var item in tagStyle)
+			styles[item] = (styles[item] ? styles[item] + ';' : '') + tagStyle[item];
+		this.styles = styles;
+	}
+	getStyle = data => this.styles = new CssParser(data, this.styles).parse();
+	match(name, attrs) {
+		var tmp, matched = (tmp = this.styles[name]) ? tmp + ';' : '';
+		if (attrs.class) {
+			var items = attrs.class.split(' ');
+			for (var i = 0, item; item = items[i]; i++)
+				if (tmp = this.styles['.' + item])
+					matched += tmp + ';';
+		}
+		if (tmp = this.styles['#' + attrs.id])
+			matched += tmp + ';';
+		return matched;
+	}
+}
+module.exports = CssHandler;
+class CssParser {
+	constructor(data, init) {
+		this.data = data;
+		this.floor = 0;
+		this.i = 0;
+		this.list = [];
+		this.res = init;
+		this.state = this.Space;
+	}
+	parse() {
+		for (var c; c = this.data[this.i]; this.i++)
+			this.state(c);
+		return this.res;
+	}
+	section = () => this.data.substring(this.start, this.i);
+	isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+	// 状态机
+	Space(c) {
+		if (c == '.' || c == '#' || this.isLetter(c)) {
+			this.start = this.i;
+			this.state = this.Name;
+		} else if (c == '/' && this.data[this.i + 1] == '*')
+			this.Comment();
+		else if (!cfg.blankChar[c] && c != ';')
+			this.state = this.Ignore;
+	}
+	Comment() {
+		this.i = this.data.indexOf('*/', this.i) + 1;
+		if (!this.i) this.i = this.data.length;
+		this.state = this.Space;
+	}
+	Ignore(c) {
+		if (c == '{') this.floor++;
+		else if (c == '}' && !--this.floor) this.state = this.Space;
+	}
+	Name(c) {
+		if (cfg.blankChar[c]) {
+			this.list.push(this.section());
+			this.state = this.NameSpace;
+		} else if (c == '{') {
+			this.list.push(this.section());
+			this.Content();
+		} else if (c == ',') {
+			this.list.push(this.section());
+			this.Comma();
+		} else if (!this.isLetter(c) && (c < '0' || c > '9') && c != '-' && c != '_')
+			this.state = this.Ignore;
+	}
+	NameSpace(c) {
+		if (c == '{') this.Content();
+		else if (c == ',') this.Comma();
+		else if (!cfg.blankChar[c]) this.state = this.Ignore;
+	}
+	Comma() {
+		while (cfg.blankChar[this.data[++this.i]]);
+		if (this.data[this.i] == '{') this.Content();
+		else {
+			this.start = this.i--;
+			this.state = this.Name;
+		}
+	}
+	Content() {
+		this.start = ++this.i;
+		if ((this.i = this.data.indexOf('}', this.i)) == -1) this.i = this.data.length;
+		var content = this.section();
+		for (var i = 0, item; item = this.list[i++];)
+			if (this.res[item]) this.res[item] += ';' + content;
+			else this.res[item] = content;
+		this.list = [];
+		this.state = this.Space;
+	}
+}

+ 577 - 0
components/jyf-parser/libs/MpHtmlParser.js

@@ -0,0 +1,577 @@
+/*
+  将 html 解析为适用于小程序 rich-text 的 DOM 结构
+  github:https://github.com/jin-yufeng/Parser
+  docs:https://jin-yufeng.github.io/Parser
+  author:JinYufeng
+  update:2020/04/13
+*/
+var cfg = require('./config.js'),
+	blankChar = cfg.blankChar,
+	CssHandler = require('./CssHandler.js'),
+	{
+		screenWidth,
+		system
+	} = wx.getSystemInfoSync();
+// #ifdef MP-BAIDU || MP-ALIPAY || MP-TOUTIAO
+var entities = {
+	lt: '<',
+	gt: '>',
+	amp: '&',
+	quot: '"',
+	apos: "'",
+	nbsp: '\xA0',
+	ensp: '\u2002',
+	emsp: '\u2003',
+	ndash: '–',
+	mdash: '—',
+	middot: '·',
+	lsquo: '‘',
+	rsquo: '’',
+	ldquo: '“',
+	rdquo: '”',
+	bull: '•',
+	hellip: '…',
+	permil: '‰',
+	copy: '©',
+	reg: '®',
+	trade: '™',
+	times: '×',
+	divide: '÷',
+	cent: '¢',
+	pound: '£',
+	yen: '¥',
+	euro: '€',
+	sect: '§'
+};
+// #endif
+var emoji; // emoji 补丁包 https://jin-yufeng.github.io/Parser/#/instructions?id=emoji
+class MpHtmlParser {
+	constructor(data, options = {}) {
+		this.attrs = {};
+		this.compress = options.compress;
+		this.CssHandler = new CssHandler(options.tagStyle, screenWidth);
+		this.data = data;
+		this.domain = options.domain;
+		this.DOM = [];
+		this.i = this.start = this.audioNum = this.imgNum = this.videoNum = 0;
+		this.protocol = this.domain && this.domain.includes('://') ? this.domain.split('://')[0] : '';
+		this.state = this.Text;
+		this.STACK = [];
+		this.useAnchor = options.useAnchor;
+		this.xml = options.xml;
+	}
+	parse() {
+		if (emoji) this.data = emoji.parseEmoji(this.data);
+		for (var c; c = this.data[this.i]; this.i++)
+			this.state(c);
+		if (this.state == this.Text) this.setText();
+		while (this.STACK.length) this.popNode(this.STACK.pop());
+		// #ifdef MP-BAIDU || MP-TOUTIAO
+		// 将顶层标签的一些样式提取出来给 rich-text
+		(function f(ns) {
+			for (var i = ns.length, n; n = ns[--i];) {
+				if (n.type == 'text') continue;
+				if (!n.c) {
+					var style = n.attrs.style;
+					if (style) {
+						var j, k, res;
+						if ((j = style.indexOf('display')) != -1)
+							res = style.substring(j, (k = style.indexOf(';', j)) == -1 ? style.length : k);
+						if ((j = style.indexOf('float')) != -1)
+							res += ';' + style.substring(j, (k = style.indexOf(';', j)) == -1 ? style.length : k);
+						n.attrs.contain = res;
+					}
+				} else f(n.children);
+			}
+		})(this.DOM);
+		// #endif
+		if (this.DOM.length) {
+			this.DOM[0].PoweredBy = 'Parser';
+			if (this.title) this.DOM[0].title = this.title;
+		}
+		return this.DOM;
+	}
+	// 设置属性
+	setAttr() {
+		var name = this.getName(this.attrName);
+		if (cfg.trustAttrs[name]) {
+			if (!this.attrVal) {
+				if (cfg.boolAttrs[name]) this.attrs[name] = 'T';
+			} else if (name == 'src') this.attrs[name] = this.getUrl(this.attrVal.replace(/&amp;/g, '&'));
+			else this.attrs[name] = this.attrVal;
+		}
+		this.attrVal = '';
+		while (blankChar[this.data[this.i]]) this.i++;
+		if (this.isClose()) this.setNode();
+		else {
+			this.start = this.i;
+			this.state = this.AttrName;
+		}
+	}
+	// 设置文本节点
+	setText() {
+		var back, text = this.section();
+		if (!text) return;
+		text = (cfg.onText && cfg.onText(text, () => back = true)) || text;
+		if (back) {
+			this.data = this.data.substr(0, this.start) + text + this.data.substr(this.i);
+			let j = this.start + text.length;
+			for (this.i = this.start; this.i < j; this.i++) this.state(this.data[this.i]);
+			return;
+		}
+		if (!this.pre) {
+			// 合并空白符
+			var tmp = [];
+			for (let i = text.length, c; c = text[--i];)
+				if (!blankChar[c] || (!blankChar[tmp[0]] && (c = ' '))) tmp.unshift(c);
+			text = tmp.join('');
+			if (text == ' ') return;
+		}
+		// 处理实体
+		var siblings = this.siblings(),
+			i = -1,
+			j, en;
+		while (1) {
+			if ((i = text.indexOf('&', i + 1)) == -1) break;
+			if ((j = text.indexOf(';', i + 2)) == -1) break;
+			if (text[i + 1] == '#') {
+				en = parseInt((text[i + 2] == 'x' ? '0' : '') + text.substring(i + 2, j));
+				if (!isNaN(en)) text = text.substr(0, i) + String.fromCharCode(en) + text.substring(j + 1);
+			} else {
+				en = text.substring(i + 1, j);
+				// #ifdef MP-WEIXIN || MP-QQ || APP-PLUS
+				if (en == 'nbsp') text = text.substr(0, i) + '\xA0' + text.substr(j + 1); // 解决 &nbsp; 失效
+				else if (en != 'lt' && en != 'gt' && en != 'amp' && en != 'ensp' && en != 'emsp' && en != 'quot' && en != 'apos') {
+					i && siblings.push({
+						type: 'text',
+						text: text.substr(0, i)
+					})
+					siblings.push({
+						type: 'text',
+						text: `&${en};`,
+						en: 1
+					})
+					text = text.substr(j + 1);
+					i = -1;
+				}
+				// #endif
+				// #ifdef MP-BAIDU || MP-ALIPAY || MP-TOUTIAO
+				if (entities[en]) text = text.substr(0, i) + entities[en] + text.substr(j + 1);
+				// #endif
+			}
+		}
+		text && siblings.push({
+			type: 'text',
+			text
+		})
+	}
+	// 设置元素节点
+	setNode() {
+		var node = {
+				name: this.tagName.toLowerCase(),
+				attrs: this.attrs
+			},
+			close = cfg.selfClosingTags[node.name] || (this.xml && this.data[this.i] == '/');
+		this.attrs = {};
+		if (!cfg.ignoreTags[node.name]) {
+			this.matchAttr(node);
+			if (!close) {
+				node.children = [];
+				if (node.name == 'pre' && cfg.highlight) {
+					this.remove(node);
+					this.pre = node.pre = true;
+				}
+				this.siblings().push(node);
+				this.STACK.push(node);
+			} else if (!cfg.filter || cfg.filter(node, this) != false)
+				this.siblings().push(node);
+		} else {
+			if (!close) this.remove(node);
+			else if (node.name == 'source') {
+				var parent = this.STACK[this.STACK.length - 1],
+					attrs = node.attrs;
+				if (parent && attrs.src)
+					if (parent.name == 'video' || parent.name == 'audio')
+						parent.attrs.source.push(attrs.src);
+					else {
+						var i, media = attrs.media;
+						if (parent.name == 'picture' && !parent.attrs.src && !(attrs.src.indexOf('.webp') && system.includes('iOS')) &&
+							(!media || (media.includes('px') &&
+								(((i = media.indexOf('min-width')) != -1 && (i = media.indexOf(':', i + 8)) != -1 && screenWidth > parseInt(
+										media.substr(i + 1))) ||
+									((i = media.indexOf('max-width')) != -1 && (i = media.indexOf(':', i + 8)) != -1 && screenWidth < parseInt(
+										media.substr(i + 1)))))))
+							parent.attrs.src = attrs.src;
+					}
+			} else if (node.name == 'base' && !this.domain) this.domain = node.attrs.href;
+		}
+		if (this.data[this.i] == '/') this.i++;
+		this.start = this.i + 1;
+		this.state = this.Text;
+	}
+	// 移除标签
+	remove(node) {
+		var name = node.name,
+			j = this.i;
+		while (1) {
+			if ((this.i = this.data.indexOf('</', this.i + 1)) == -1) {
+				if (name == 'pre' || name == 'svg') this.i = j;
+				else this.i = this.data.length;
+				return;
+			}
+			this.start = (this.i += 2);
+			while (!blankChar[this.data[this.i]] && !this.isClose()) this.i++;
+			if (this.getName(this.section()) == name) {
+				// 代码块高亮
+				if (name == 'pre') {
+					this.data = this.data.substr(0, j + 1) + cfg.highlight(this.data.substring(j + 1, this.i - 5), node.attrs) +
+						this.data.substr(this.i - 5);
+					return this.i = j;
+				} else if (name == 'style')
+					this.CssHandler.getStyle(this.data.substring(j + 1, this.i - 7));
+				else if (name == 'title')
+					this.title = this.data.substring(j + 1, this.i - 7);
+				if ((this.i = this.data.indexOf('>', this.i)) == -1) this.i = this.data.length;
+				// 处理 svg
+				if (name == 'svg') {
+					var src = this.data.substring(j, this.i + 1);
+					if (!node.attrs.xmlns) src = ' xmlns="http://www.w3.org/2000/svg"' + src;
+					var i = j;
+					while (this.data[j] != '<') j--;
+					src = this.data.substring(j, i) + src;
+					var parent = this.STACK[this.STACK.length - 1];
+					if (node.attrs.width == '100%' && parent && (parent.attrs.style || '').includes('inline'))
+						parent.attrs.style = 'width:300px;max-width:100%;' + parent.attrs.style;
+					this.siblings().push({
+						name: 'img',
+						attrs: {
+							src: 'data:image/svg+xml;utf8,' + src.replace(/#/g, '%23'),
+							ignore: 'T'
+						}
+					})
+				}
+				return;
+			}
+		}
+	}
+	// 处理属性
+	matchAttr(node) {
+		var attrs = node.attrs,
+			style = this.CssHandler.match(node.name, attrs, node) + (attrs.style || ''),
+			styleObj = {};
+		if (attrs.id) {
+			if (this.compress & 1) attrs.id = void 0;
+			else if (this.useAnchor) this.bubble();
+		}
+		if ((this.compress & 2) && attrs.class) attrs.class = void 0;
+		switch (node.name) {
+			case 'img':
+				if (attrs['data-src']) {
+					attrs.src = attrs.src || attrs['data-src'];
+					attrs['data-src'] = void 0;
+				}
+				if (attrs.src && !attrs.ignore) {
+					if (this.bubble()) attrs.i = (this.imgNum++).toString();
+					else attrs.ignore = 'T';
+				}
+				break;
+			case 'a':
+			case 'ad':
+			// #ifdef APP-PLUS
+			case 'iframe':
+			case 'embed':
+			// #endif
+				this.bubble();
+				break;
+			case 'font':
+				if (attrs.color) {
+					styleObj['color'] = attrs.color;
+					attrs.color = void 0;
+				}
+				if (attrs.face) {
+					styleObj['font-family'] = attrs.face;
+					attrs.face = void 0;
+				}
+				if (attrs.size) {
+					var size = parseInt(attrs.size);
+					if (size < 1) size = 1;
+					else if (size > 7) size = 7;
+					var map = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'];
+					styleObj['font-size'] = map[size - 1];
+					attrs.size = void 0;
+				}
+				break;
+			case 'video':
+			case 'audio':
+				if (!attrs.id) attrs.id = node.name + (++this[`${node.name}Num`]);
+				else this[`${node.name}Num`]++;
+				if (node.name == 'video') {
+					if (attrs.width) {
+						style = `width:${parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px')};${style}`;
+						attrs.width = void 0;
+					}
+					if (attrs.height) {
+						style = `height:${parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px')};${style}`;
+						attrs.height = void 0;
+					}
+					if (this.videoNum > 3) node.lazyLoad = true;
+				}
+				attrs.source = [];
+				if (attrs.src) attrs.source.push(attrs.src);
+				if (!attrs.controls && !attrs.autoplay)
+					console.warn(`存在没有 controls 属性的 ${node.name} 标签,可能导致无法播放`, node);
+				this.bubble();
+				break;
+			case 'td':
+			case 'th':
+				if (attrs.colspan || attrs.rowspan)
+					for (var k = this.STACK.length, item; item = this.STACK[--k];)
+						if (item.name == 'table') {
+							item.c = void 0;
+							break;
+						}
+		}
+		if (attrs.align) {
+			styleObj['text-align'] = attrs.align;
+			attrs.align = void 0;
+		}
+		// 压缩 style
+		var styles = style.replace(/&quot;/g, '"').replace(/&amp;/g, '&').split(';');
+		style = '';
+		for (var i = 0, len = styles.length; i < len; i++) {
+			var info = styles[i].split(':');
+			if (info.length < 2) continue;
+			let key = info[0].trim().toLowerCase(),
+				value = info.slice(1).join(':').trim();
+			if (value.includes('-webkit') || value.includes('-moz') || value.includes('-ms') || value.includes('-o') || value
+				.includes(
+					'safe'))
+				style += `;${key}:${value}`;
+			else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import'))
+				styleObj[key] = value;
+		}
+		if (node.name == 'img' && parseInt(styleObj.width || attrs.width) > screenWidth)
+			styleObj.height = 'auto';
+		for (var key in styleObj) {
+			var value = styleObj[key];
+			if (key.includes('flex') || key == 'order' || key == 'self-align') node.c = 1;
+			// 填充链接
+			if (value.includes('url')) {
+				var j = value.indexOf('(');
+				if (j++ != -1) {
+					while (value[j] == '"' || value[j] == "'" || blankChar[value[j]]) j++;
+					value = value.substr(0, j) + this.getUrl(value.substr(j));
+				}
+			}
+			// 转换 rpx
+			else if (value.includes('rpx'))
+				value = value.replace(/[0-9.]+\s*rpx/g, $ => parseFloat($) * screenWidth / 750 + 'px');
+			else if (key == 'white-space' && value.includes('pre'))
+				this.pre = node.pre = true;
+			style += `;${key}:${value}`;
+		}
+		style = style.substr(1);
+		if (style) attrs.style = style;
+	}
+	// 节点出栈处理
+	popNode(node) {
+		// 空白符处理
+		if (node.pre) {
+			node.pre = this.pre = void 0;
+			for (let i = this.STACK.length; i--;)
+				if (this.STACK[i].pre)
+					this.pre = true;
+		}
+		if (node.name == 'head' || (cfg.filter && cfg.filter(node, this) == false))
+			return this.siblings().pop();
+		var attrs = node.attrs;
+		// 替换一些标签名
+		if (node.name == 'picture') {
+			node.name = 'img';
+			if (!attrs.src && (node.children[0] || '').name == 'img')
+				attrs.src = node.children[0].attrs.src;
+			if (attrs.src && !attrs.ignore)
+				attrs.i = (this.imgNum++).toString();
+			return node.children = void 0;
+		}
+		if (cfg.blockTags[node.name]) node.name = 'div';
+		else if (!cfg.trustTags[node.name]) node.name = 'span';
+		// 处理列表
+		if (node.c) {
+			if (node.name == 'ul') {
+				var floor = 1;
+				for (let i = this.STACK.length; i--;)
+					if (this.STACK[i].name == 'ul') floor++;
+				if (floor != 1)
+					for (let i = node.children.length; i--;)
+						node.children[i].floor = floor;
+			} else if (node.name == 'ol') {
+				for (let i = 0, num = 1, child; child = node.children[i++];)
+					if (child.name == 'li') {
+						child.type = 'ol';
+						child.num = ((num, type) => {
+							if (type == 'a') return String.fromCharCode(97 + (num - 1) % 26);
+							if (type == 'A') return String.fromCharCode(65 + (num - 1) % 26);
+							if (type == 'i' || type == 'I') {
+								num = (num - 1) % 99 + 1;
+								var one = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'],
+									ten = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'],
+									res = (ten[Math.floor(num / 10) - 1] || '') + (one[num % 10 - 1] || '');
+								if (type == 'i') return res.toLowerCase();
+								return res;
+							}
+							return num;
+						})(num++, attrs.type) + '.';
+					}
+			}
+		}
+		// 处理表格的边框
+		if (node.name == 'table') {
+			var padding = attrs.cellpadding,
+				spacing = attrs.cellspacing,
+				border = attrs.border;
+			if (node.c) {
+				this.bubble();
+				if (!padding) padding = 2;
+				if (!spacing) spacing = 2;
+			}
+			if (border) attrs.style = `border:${border}px solid gray;${attrs.style || ''}`;
+			if (spacing) attrs.style = `border-spacing:${spacing}px;${attrs.style || ''}`;
+			if (border || padding)
+				(function f(ns) {
+					for (var i = 0, n; n = ns[i]; i++) {
+						if (n.name == 'th' || n.name == 'td') {
+							if (border) n.attrs.style = `border:${border}px solid gray;${n.attrs.style}`;
+							if (padding) n.attrs.style = `padding:${padding}px;${n.attrs.style}`;
+						} else f(n.children || []);
+					}
+				})(node.children)
+		}
+		this.CssHandler.pop && this.CssHandler.pop(node);
+		// 自动压缩
+		if (node.name == 'div' && !Object.keys(attrs).length) {
+			var siblings = this.siblings();
+			if (node.children.length == 1 && node.children[0].name == 'div')
+				siblings[siblings.length - 1] = node.children[0];
+		}
+	}
+	// 工具函数
+	bubble() {
+		for (var i = this.STACK.length, item; item = this.STACK[--i];) {
+			if (cfg.richOnlyTags[item.name]) {
+				if (item.name == 'table' && !Object.hasOwnProperty.call(item, 'c')) item.c = 1;
+				return false;
+			}
+			item.c = 1;
+		}
+		return true;
+	}
+	getName = val => this.xml ? val : val.toLowerCase();
+	getUrl(url) {
+		if (url[0] == '/') {
+			if (url[1] == '/') url = this.protocol + ':' + url;
+			else if (this.domain) url = this.domain + url;
+		} else if (this.domain && url.indexOf('data:') != 0 && !url.includes('://'))
+			url = this.domain + '/' + url;
+		return url;
+	}
+	isClose = () => this.data[this.i] == '>' || (this.data[this.i] == '/' && this.data[this.i + 1] == '>');
+	section = () => this.data.substring(this.start, this.i);
+	siblings = () => this.STACK.length ? this.STACK[this.STACK.length - 1].children : this.DOM;
+	// 状态机
+	Text(c) {
+		if (c == '<') {
+			var next = this.data[this.i + 1],
+				isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+			if (isLetter(next)) {
+				this.setText();
+				this.start = this.i + 1;
+				this.state = this.TagName;
+			} else if (next == '/') {
+				this.setText();
+				if (isLetter(this.data[++this.i + 1])) {
+					this.start = this.i + 1;
+					this.state = this.EndTag;
+				} else
+					this.Comment();
+			} else if (next == '!') {
+				this.setText();
+				this.Comment();
+			}
+		}
+	}
+	Comment() {
+		var key;
+		if (this.data.substring(this.i + 2, this.i + 4) == '--') key = '-->';
+		else if (this.data.substring(this.i + 2, this.i + 9) == '[CDATA[') key = ']]>';
+		else key = '>';
+		if ((this.i = this.data.indexOf(key, this.i + 2)) == -1) this.i = this.data.length;
+		else this.i += key.length - 1;
+		this.start = this.i + 1;
+		this.state = this.Text;
+	}
+	TagName(c) {
+		if (blankChar[c]) {
+			this.tagName = this.section();
+			while (blankChar[this.data[this.i]]) this.i++;
+			if (this.isClose()) this.setNode();
+			else {
+				this.start = this.i;
+				this.state = this.AttrName;
+			}
+		} else if (this.isClose()) {
+			this.tagName = this.section();
+			this.setNode();
+		}
+	}
+	AttrName(c) {
+		var blank = blankChar[c];
+		if (blank) {
+			this.attrName = this.section();
+			c = this.data[this.i];
+		}
+		if (c == '=') {
+			if (!blank) this.attrName = this.section();
+			while (blankChar[this.data[++this.i]]);
+			this.start = this.i--;
+			this.state = this.AttrValue;
+		} else if (blank) this.setAttr();
+		else if (this.isClose()) {
+			this.attrName = this.section();
+			this.setAttr();
+		}
+	}
+	AttrValue(c) {
+		if (c == '"' || c == "'") {
+			this.start++;
+			if ((this.i = this.data.indexOf(c, this.i + 1)) == -1) return this.i = this.data.length;
+			this.attrVal = this.section();
+			this.i++;
+		} else {
+			for (; !blankChar[this.data[this.i]] && !this.isClose(); this.i++);
+			this.attrVal = this.section();
+		}
+		this.setAttr();
+	}
+	EndTag(c) {
+		if (blankChar[c] || c == '>' || c == '/') {
+			var name = this.getName(this.section());
+			for (var i = this.STACK.length; i--;)
+				if (this.STACK[i].name == name) break;
+			if (i != -1) {
+				var node;
+				while ((node = this.STACK.pop()).name != name);
+				this.popNode(node);
+			} else if (name == 'p' || name == 'br')
+				this.siblings().push({
+					name,
+					attrs: {}
+				});
+			this.i = this.data.indexOf('>', this.i);
+			this.start = this.i + 1;
+			if (this.i == -1) this.i = this.data.length;
+			else this.state = this.Text;
+		}
+	}
+}
+module.exports = MpHtmlParser;

+ 80 - 0
components/jyf-parser/libs/config.js

@@ -0,0 +1,80 @@
+/* 配置文件 */
+// #ifdef MP-WEIXIN
+const canIUse = wx.canIUse('editor'); // 高基础库标识,用于兼容
+// #endif
+module.exports = {
+	// 过滤器函数
+	filter: null,
+	// 代码高亮函数
+	highlight: null,
+	// 文本处理函数
+	onText: null,
+	blankChar: makeMap(' ,\xA0,\t,\r,\n,\f'),
+	// 块级标签,将被转为 div
+	blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,section' + (
+		// #ifdef MP-WEIXIN
+		canIUse ? '' :
+		// #endif
+		',pre')),
+	// 将被移除的标签
+	ignoreTags: makeMap(
+		'area,base,basefont,canvas,command,frame,input,isindex,keygen,link,map,meta,param,script,source,style,svg,textarea,title,track,use,wbr'
+		// #ifdef MP-WEIXIN
+		+ (canIUse ? ',rp' : '')
+		// #endif
+		// #ifndef APP-PLUS
+		+ ',embed,iframe'
+		// #endif
+	),
+	// 只能被 rich-text 显示的标签
+	richOnlyTags: makeMap('a,colgroup,fieldset,legend,picture,table'
+		// #ifdef MP-WEIXIN
+		+ (canIUse ? ',bdi,bdo,caption,rt,ruby' : '')
+		// #endif
+	),
+	// 自闭合的标签
+	selfClosingTags: makeMap(
+		'area,base,basefont,br,col,circle,ellipse,embed,frame,hr,img,input,isindex,keygen,line,link,meta,param,path,polygon,rect,source,track,use,wbr'
+	),
+	// 信任的属性
+	trustAttrs: makeMap(
+		'align,alt,app-id,author,autoplay,border,cellpadding,cellspacing,class,color,colspan,controls,data-src,dir,face,height,href,id,ignore,loop,media,muted,name,path,poster,rowspan,size,span,src,start,style,type,unit-id,width,xmlns'
+	),
+	// bool 型的属性
+	boolAttrs: makeMap('autoplay,controls,ignore,loop,muted'),
+	// 信任的标签
+	trustTags: makeMap(
+		'a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'
+		// #ifdef MP-WEIXIN
+		+ (canIUse ? ',bdi,bdo,caption,pre,rt,ruby' : '')
+		// #endif
+		// #ifdef APP-PLUS
+		+ ',embed,iframe'
+		// #endif
+	),
+	// 默认的标签样式
+	userAgentStyles: {
+		address: 'font-style:italic',
+		big: 'display:inline;font-size:1.2em',
+		blockquote: 'background-color:#f6f6f6;border-left:3px solid #dbdbdb;color:#6c6c6c;padding:5px 0 5px 10px',
+		caption: 'display:table-caption;text-align:center',
+		center: 'text-align:center',
+		cite: 'font-style:italic',
+		dd: 'margin-left:40px',
+		img: 'max-width:100%',
+		mark: 'background-color:yellow',
+		picture: 'max-width:100%',
+		pre: 'font-family:monospace;white-space:pre;overflow:scroll',
+		s: 'text-decoration:line-through',
+		small: 'display:inline;font-size:0.8em',
+		u: 'text-decoration:underline'
+	}
+}
+
+function makeMap(maprichee55text9oppplugin) {
+	var map = {},
+		list = maprichee55text9oppplugin.split(',');
+	for (var i = list.length; i--;)
+		map[list[i]] = true;
+	return map;
+}

+ 35 - 0
components/jyf-parser/libs/handler.sjs

@@ -0,0 +1,35 @@
+var inlineTags = {
+	abbr: 1,
+	b: 1,
+	big: 1,
+	code: 1,
+	del: 1,
+	em: 1,
+	i: 1,
+	ins: 1,
+	label: 1,
+	q: 1,
+	small: 1,
+	span: 1,
+	strong: 1
+}
+export default {
+	// 从顶层标签的样式中取出一些给 rich-text
+	getStyle: function(style) {
+		if (style) {
+			var i, j, res = '';
+			if ((i = style.indexOf('display')) != -1)
+				res = style.substring(i, (j = style.indexOf(';', i)) == -1 ? style.length : j);
+			if ((i = style.indexOf('float')) != -1)
+				res += ';' + style.substring(i, (j = style.indexOf(';', i)) == -1 ? style.length : j);
+			return res;
+		}
+	},
+	getNode: function(item) {
+		return [item];
+	},
+	// 是否通过 rich-text 显示
+	useRichText: function(item) {
+		return !item.c && !inlineTags[item.name] && (item.attrs.style || '').indexOf('display:inline') == -1;
+	}
+}

+ 44 - 0
components/jyf-parser/libs/handler.wxs

@@ -0,0 +1,44 @@
+var inlineTags = {
+	abbr: 1,
+	b: 1,
+	big: 1,
+	code: 1,
+	del: 1,
+	em: 1,
+	i: 1,
+	ins: 1,
+	label: 1,
+	q: 1,
+	small: 1,
+	span: 1,
+	strong: 1
+}
+module.exports = {
+	// 从顶层标签的样式中取出一些给 rich-text
+	getStyle: function(style) {
+		if (style) {
+			var i, j, res = '';
+			if ((i = style.indexOf('display')) != -1)
+				res = style.substring(i, (j = style.indexOf(';', i)) == -1 ? style.length : j);
+			if ((i = style.indexOf('float')) != -1)
+				res += ';' + style.substring(i, (j = style.indexOf(';', i)) == -1 ? style.length : j);
+			return res;
+		}
+	},
+	// 处理懒加载
+	getNode: function(item, imgLoad) {
+		if (!imgLoad && item.attrs.i != '0') {
+			var img = {
+				name: 'img',
+				attrs: JSON.parse(JSON.stringify(item.attrs))
+			}
+			delete img.attrs.src;
+			img.attrs.style += ';width:20px;height:20px';
+			return [img];
+		} else return [item];
+	},
+	// 是否通过 rich-text 显示
+	useRichText: function(item) {
+		return !item.c && !inlineTags[item.name] && (item.attrs.style || '').indexOf('display:inline') == -1;
+	}
+}

+ 476 - 0
components/jyf-parser/libs/trees.vue

@@ -0,0 +1,476 @@
+<!--
+  trees 递归显示组件
+  github:https://github.com/jin-yufeng/Parser 
+  docs:https://jin-yufeng.github.io/Parser
+  插件市场:https://ext.dcloud.net.cn/plugin?id=805
+  author:JinYufeng
+  update:2020/04/13
+-->
+<template>
+	<view class="interlayer">
+		<block v-for="(n, index) in nodes" v-bind:key="index">
+			<!--图片-->
+			<!--#ifdef MP-WEIXIN || MP-QQ || MP-ALIPAY || APP-PLUS-->
+			<rich-text v-if="n.name=='img'" :id="n.attrs.id" class="_img" :style="''+handler.getStyle(n.attrs.style)" :nodes="handler.getNode(n,!lazyLoad||imgLoad)"
+			 :data-attrs="n.attrs" @tap="imgtap" @longpress="imglongtap" />
+			<!--#endif-->
+			<!--#ifdef MP-BAIDU || MP-TOUTIAO-->
+			<rich-text v-if="n.name=='img'" :id="n.attrs.id" class="_img" :style="n.attrs.contain" :nodes='[n]' :data-attrs="n.attrs"
+			 @tap="imgtap" @longpress="imglongtap" />
+			<!--#endif-->
+			<!--文本-->
+			<!--#ifdef MP-WEIXIN || MP-QQ || APP-PLUS-->
+			<rich-text v-else-if="n.decode" class="_entity" :nodes="[n]"></rich-text>
+			<!--#endif-->
+			<text v-else-if="n.type=='text'" decode>{{n.text}}</text>
+			<text v-else-if="n.name=='br'">\n</text>
+			<!--视频-->
+			<view v-else-if="n.name=='video'">
+				<view v-if="(!loadVideo||n.lazyLoad)&&!(controls[n.attrs.id]&&controls[n.attrs.id].play)" :id="n.attrs.id" :class="'_video '+(n.attrs.class||'')"
+				 :style="n.attrs.style" @tap="_loadVideo" />
+				<video v-else :id="n.attrs.id" :class="n.attrs.class" :style="n.attrs.style" :autoplay="n.attrs.autoplay||(controls[n.attrs.id]&&controls[n.attrs.id].play)"
+				 :controls="n.attrs.controls" :loop="n.attrs.loop" :muted="n.attrs.muted" :poster="n.attrs.poster" :src="n.attrs.source[(controls[n.attrs.id]&&controls[n.attrs.id].index)||0]"
+				 :unit-id="n.attrs['unit-id']" :data-id="n.attrs.id" data-from="video" data-source="source" @error="error" @play="play" />
+			</view>
+			<!--音频-->
+			<audio v-else-if="n.name=='audio'" :class="n.attrs.class" :style="n.attrs.style" :author="n.attrs.author" :autoplay="n.attrs.autoplay"
+			 :controls="n.attrs.controls" :loop="n.attrs.loop" :name="n.attrs.name" :poster="n.attrs.poster" :src="n.attrs.source[(controls[n.attrs.id]&&controls[n.attrs.id].index)||0]"
+			 :data-id="n.attrs.id" data-from="audio" data-source="source" @error="error" @play="play" />
+			<!--链接-->
+			<view v-else-if="n.name=='a'" :class="'_a '+(n.attrs.class||'')" hover-class="_hover" :style="n.attrs.style"
+			 :data-attrs="n.attrs" @tap="linkpress">
+				<trees class="_span" :nodes="n.children" />
+			</view>
+			<!--广告(按需打开注释)-->
+			<!--#ifdef MP-WEIXIN || MP-QQ || MP-TOUTIAO-->
+			<!--<ad v-else-if="n.name=='ad'" :class="n.attrs.class" :style="n.attrs.style" :unit-id="n.attrs['unit-id']"
+			 data-from="ad" @error="error" />-->
+			<!--#endif-->
+			<!--#ifdef MP-BAIDU-->
+			<!--<ad v-else-if="n.name=='ad'" :class="n.attrs.class" :style="n.attrs.style" :appid="n.attrs.appid"
+			 :apid="n.attrs.apid" :type="n.attrs.type" data-from="ad" @error="error" />-->
+			<!--#endif-->
+			<!--#ifdef APP-PLUS-->
+			<!--<ad v-else-if="n.name=='ad'" :class="n.attrs.class" :style="n.attrs.style" :adpid="n.attrs.adpid"
+			 data-from="ad" @error="error" />-->
+			<!--#endif-->
+			<!--列表-->
+			<view v-else-if="n.name=='li'" :id="n.attrs.id" :class="n.attrs.class" :style="(n.attrs.style||'')+';display:flex'">
+				<view v-if="n.type=='ol'" class="_ol-bef">{{n.num}}</view>
+				<view v-else class="_ul-bef">
+					<view v-if="n.floor%3==0" class="_ul-p1">█</view>
+					<view v-else-if="n.floor%3==2" class="_ul-p2" />
+					<view v-else class="_ul-p1" style="border-radius:50%">█</view>
+				</view>
+				<!--#ifdef MP-ALIPAY-->
+				<view class="_li">
+					<trees :nodes="n.children" />
+				</view>
+				<!--#endif-->
+				<!--#ifndef MP-ALIPAY-->
+				<trees class="_li" :nodes="n.children" :lazyLoad="lazyLoad" :loadVideo="loadVideo" />
+				<!--#endif-->
+			</view>
+			<!--表格-->
+			<view v-else-if="n.name=='table'&&n.c" :id="n.attrs.id" :class="n.attrs.class" :style="(n.attrs.style||'')+';display:table'">
+				<view v-for="(tbody, i) in n.children" v-bind:key="i" :class="tbody.attrs.class" :style="(tbody.attrs.style||'')+(tbody.name[0]=='t'?';display:table-'+(tbody.name=='tr'?'row':'row-group'):'')">
+					<view v-for="(tr, j) in tbody.children" v-bind:key="j" :class="tr.attrs.class" :style="(tr.attrs.style||'')+(tr.name[0]=='t'?';display:table-'+(tr.name=='tr'?'row':'cell'):'')">
+						<trees v-if="tr.name=='td'" :nodes="tr.children" :lazyLoad="lazyLoad" :loadVideo="loadVideo" />
+						<block v-else>
+							<!--#ifdef MP-ALIPAY-->
+							<view v-for="(td, k) in tr.children" v-bind:key="k" :class="td.attrs.class" :style="(td.attrs.style||'')+(td.name[0]=='t'?';display:table-'+(td.name=='tr'?'row':'cell'):'')">
+								<trees :nodes="td.children" />
+							</view>
+							<!--#endif-->
+							<!--#ifndef MP-ALIPAY-->
+							<trees v-for="(td, k) in tr.children" v-bind:key="k" :class="td.attrs.class" :style="(td.attrs.style||'')+(td.name[0]=='t'?';display:table-'+(td.name=='tr'?'row':'cell'):'')"
+							 :nodes="td.children" :lazyLoad="lazyLoad" :loadVideo="loadVideo" />
+							<!--#endif-->
+						</block>
+					</view>
+				</view>
+			</view>
+			<!--#ifdef APP-PLUS-->
+			<iframe v-else-if="n.name=='iframe'" :style="n.attrs.style" :allowfullscreen="n.attrs.allowfullscreen" :frameborder="n.attrs.frameborder"
+			 :width="n.attrs.width" :height="n.attrs.height" :src="n.attrs.src" />
+			<embed v-else-if="n.name=='embed'" :style="n.attrs.style" :width="n.attrs.width" :height="n.attrs.height" :src="n.attrs.src" />
+			<!--#endif-->
+			<!--富文本-->
+			<!--#ifdef MP-WEIXIN || MP-QQ || MP-ALIPAY || APP-PLUS-->
+			<rich-text v-else-if="handler.useRichText(n)" :id="n.attrs.id" :class="'_p __'+n.name" :nodes="[n]" />
+			<!--#endif-->
+			<!--#ifdef MP-BAIDU || MP-TOUTIAO-->
+			<rich-text v-else-if="!(n.c||n.continue)" :id="n.attrs.id" :class="_p" :style="n.attrs.contain" :nodes="[n]" />
+			<!--#endif-->
+			<!--#ifdef MP-ALIPAY-->
+			<view v-else :id="n.attrs.id" :class="'_'+n.name+' '+(n.attrs.class||'')" :style="n.attrs.style">
+				<trees :nodes="n.children" />
+			</view>
+			<!--#endif-->
+			<!--#ifndef MP-ALIPAY-->
+			<trees v-else :class="(n.attrs.id||'')+' _'+n.name+' '+(n.attrs.class||'')" :style="n.attrs.style" :nodes="n.children"
+			 :lazyLoad="lazyLoad" :loadVideo="loadVideo" />
+			<!--#endif-->
+		</block>
+	</view>
+</template>
+<script module="handler" lang="wxs" src="./handler.wxs"></script>
+<script module="handler" lang="sjs" src="./handler.sjs"></script>
+<script>
+	global.Parser = {};
+	import trees from './trees'
+	export default {
+		components: {
+			trees
+		},
+		name: 'trees',
+		data() {
+			return {
+				controls: {},
+				// #ifdef MP-WEIXIN || MP-QQ || APP-PLUS
+				imgLoad: false,
+				// #endif
+				// #ifndef APP-PLUS
+				loadVideo: true
+				// #endif
+			}
+		},
+		props: {
+			nodes: Array,
+			// #ifdef MP-WEIXIN || MP-QQ || H5 || APP-PLUS
+			lazyLoad: Boolean,
+			// #endif
+			// #ifdef APP-PLUS
+			loadVideo: Boolean
+			// #endif
+		},
+		mounted() {
+			// 获取顶层组件
+			this.top = this.$parent;
+			while (this.top.$options.name != 'parser') {
+				if (this.top.top) {
+					this.top = this.top.top;
+					break;
+				}
+				this.top = this.top.$parent;
+			}
+		},
+		// #ifdef MP-WEIXIN || MP-QQ || APP-PLUS
+		beforeDestroy() {
+			if (this.observer)
+				this.observer.disconnect();
+		},
+		// #endif
+		methods: {
+			// #ifndef MP-ALIPAY
+			play(e) {
+				if (this.top.videoContexts.length > 1 && this.top.autopause)
+					for (var i = this.top.videoContexts.length; i--;)
+						if (this.top.videoContexts[i].id != e.currentTarget.dataset.id)
+							this.top.videoContexts[i].pause();
+			},
+			// #endif
+			imgtap(e) {
+				var attrs = e.currentTarget.dataset.attrs;
+				if (!attrs.ignore) {
+					var preview = true, data = {
+						id: e.target.id,
+						src: attrs.src,
+						ignore: () => preview = false
+					};
+					global.Parser.onImgtap && global.Parser.onImgtap(data);
+					this.top.$emit('imgtap', data);
+					if (preview) {
+						var urls = this.top.imgList,
+							current = urls[attrs.i] ? parseInt(attrs.i) : (urls = [attrs.src], 0);
+						uni.previewImage({
+							current,
+							urls
+						})
+					}
+				}
+			},
+			imglongtap(e) {
+				var attrs = e.item.dataset.attrs;
+				if (!attrs.ignore)
+					this.top.$emit('imglongtap', {
+						id: e.target.id,
+						src: attrs.src
+					})
+			},
+			linkpress(e) {
+				var jump = true,
+					attrs = e.currentTarget.dataset.attrs;
+				attrs.ignore = () => jump = false;
+				global.Parser.onLinkpress && global.Parser.onLinkpress(attrs);
+				this.top.$emit('linkpress', attrs);
+				if (jump) {
+					// #ifdef MP
+					if (attrs['app-id']) {
+						return uni.navigateToMiniProgram({
+							appId: attrs['app-id'],
+							path: attrs.path
+						})
+					}
+					// #endif
+					if (attrs.href) {
+						if (attrs.href[0] == '#') {
+							if (this.top.useAnchor)
+								this.top.navigateTo({
+									id: attrs.href.substring(1)
+								})
+						} else if (attrs.href.indexOf('http') == 0 || attrs.href.indexOf('//') == 0) {
+							// #ifdef APP-PLUS
+							plus.runtime.openWeb(attrs.href);
+							// #endif
+							// #ifndef APP-PLUS
+							uni.setClipboardData({
+								data: attrs.href,
+								success: () =>
+									uni.showToast({
+										title: '链接已复制'
+									})
+							})
+							// #endif
+						} else
+							uni.navigateTo({
+								url: attrs.href
+							})
+					}
+				}
+			},
+			error(e) {
+				var context, target = e.currentTarget,
+					source = target.dataset.from;
+				if (source == 'video' || source == 'audio') {
+					// 加载其他 source
+					var index = this.controls[target.id] ? this.controls[target.id].index + 1 : 1;
+					if (index < target.dataset.source.length)
+						this.$set(this.controls, target.id + '.index', index);
+					if (source == 'video') context = uni.createVideoContext(target.id, this);
+				}
+				this.top && this.top.$emit('error', {
+					source,
+					target,
+					errMsg: e.detail.errMsg,
+					errCode: e.detail.errCode,
+					context
+				});
+			},
+			_loadVideo(e) {
+				this.$set(this.controls, e.currentTarget.id, {
+					play: true,
+					index: 0
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+	/* 在这里引入自定义样式 */
+
+	/* 链接和图片效果 */
+	._a {
+		display: inline;
+		color: #366092;
+		word-break: break-all;
+		padding: 1.5px 0 1.5px 0;
+	}
+
+	._hover {
+		opacity: 0.7;
+		text-decoration: underline;
+	}
+
+	._img {
+		display: inline-block;
+		text-indent: 0;
+	}
+
+	/* #ifdef MP-WEIXIN */
+	:host {
+		display: inline;
+	}
+
+	/* #endif */
+
+	/* #ifdef MP */
+	.interlayer {
+		align-content: inherit;
+		align-items: inherit;
+		display: inherit;
+		flex-direction: inherit;
+		flex-wrap: inherit;
+		justify-content: inherit;
+		width: 100%;
+		white-space: inherit;
+	}
+
+	/* #endif */
+
+	._b,
+	._strong {
+		font-weight: bold;
+	}
+
+	._blockquote,
+	._div,
+	._p,
+	._ol,
+	._ul,
+	._li {
+		display: block;
+	}
+
+	._code {
+		font-family: monospace;
+	}
+
+	._del {
+		text-decoration: line-through;
+	}
+
+	._em,
+	._i {
+		font-style: italic;
+	}
+
+	._h1 {
+		font-size: 2em;
+	}
+
+	._h2 {
+		font-size: 1.5em;
+	}
+
+	._h3 {
+		font-size: 1.17em;
+	}
+
+	._h5 {
+		font-size: 0.83em;
+	}
+
+	._h6 {
+		font-size: 0.67em;
+	}
+
+	._h1,
+	._h2,
+	._h3,
+	._h4,
+	._h5,
+	._h6 {
+		display: block;
+		font-weight: bold;
+	}
+
+	._ins {
+		text-decoration: underline;
+	}
+
+	._li {
+		flex: 1;
+		width: 0;
+	}
+
+	._ol-bef {
+		margin-right: 5px;
+		text-align: right;
+		width: 36px;
+	}
+
+	._ul-bef {
+		line-height: normal;
+		margin: 0 12px 0 23px;
+	}
+
+	._ol-bef,
+	._ul_bef {
+		flex: none;
+		user-select: none;
+	}
+
+	._ul-p1 {
+		display: inline-block;
+		height: 0.3em;
+		line-height: 0.3em;
+		overflow: hidden;
+		width: 0.3em;
+	}
+
+	._ul-p2 {
+		border: 0.05em solid black;
+		border-radius: 50%;
+		display: inline-block;
+		height: 0.23em;
+		width: 0.23em;
+	}
+
+	._q::before {
+		content: '"';
+	}
+
+	._q::after {
+		content: '"';
+	}
+
+	._sub {
+		font-size: smaller;
+		vertical-align: sub;
+	}
+
+	._sup {
+		font-size: smaller;
+		vertical-align: super;
+	}
+
+	/* #ifndef MP-WEIXIN */
+	._abbr,
+	._b,
+	._code,
+	._del,
+	._em,
+	._i,
+	._ins,
+	._label,
+	._q,
+	._span,
+	._strong,
+	._sub,
+	._sup {
+		display: inline;
+	}
+
+	/* #endif */
+
+	/* #ifdef MP-WEIXIN || MP-QQ || MP-ALIPAY */
+	.__bdo,
+	.__bdi,
+	.__ruby,
+	.__rt,
+	._entity {
+		display: inline-block;
+	}
+
+	/* #endif */
+	._video {
+		background-color: black;
+		display: inline-block;
+		height: 225px;
+		position: relative;
+		width: 300px;
+	}
+
+	._video::after {
+		border-color: transparent transparent transparent white;
+		border-style: solid;
+		border-width: 15px 0 15px 30px;
+		content: '';
+		left: 50%;
+		margin: -15px 0 0 -15px;
+		position: absolute;
+		top: 50%;
+	}
+</style>

+ 83 - 0
components/kefuIcon/index.vue

@@ -0,0 +1,83 @@
+<template>
+	<!-- #ifdef APP-PLUS || H5 -->
+	<text class="acea-row row-center-wrapper cartf iconfont icon-kefu3" :style="{ top: top + 'px'}" @click="goCustomer"
+		@touchmove.stop.prevent="setTouchMove"></text>
+	<!-- #endif -->
+	<!-- #ifdef MP -->
+	<view v-if="routineContact == 0" class="acea-row row-center-wrapper cartf iconfont icon-kefu3"
+		:style="{ top: top + 'px'}" @touchmove.stop.prevent="setTouchMove" @click="goCustomer"></view>
+	<button class="acea-row row-center-wrapper cartf iconfont icon-kefu3" open-type='contact'
+		:style="{ top: top + 'px'}" @touchmove.stop.prevent="setTouchMove"
+		v-else-if="routineContact==1 && !goodsCon"></button>
+	<button class="acea-row row-center-wrapper cartf iconfont icon-kefu3" open-type='contact'
+		:send-message-title="storeInfo.store_name" :send-message-img="storeInfo.image"
+		:send-message-path="`/pages/goods_details/index?id=${storeInfo.id}`" show-message-card
+		:style="{ top: top + 'px'}" @touchmove.stop.prevent="setTouchMove"
+		v-else-if="routineContact==1 && goodsCon"></button>
+	<!-- #endif -->
+</template>
+
+<script>
+	import {
+		getCustomer
+	} from '@/utils/index.js'
+	let app = getApp();
+	export default {
+		name: "kefuIcon",
+		props: {
+			ids: {
+				type: Number,
+				default: 0
+			},
+			routineContact: {
+				type: Number,
+				default: 0
+			},
+			storeInfo: {
+				type: Object,
+				default: () => {}
+			},
+			goodsCon: {
+				type: Number,
+				default: 0
+			}
+		},
+		data: function() {
+			return {
+				top: "480"
+			};
+		},
+		mounted() {
+			// #ifdef H5
+			this.top = parseFloat(window.innerHeight) - 200
+			// #endif
+		},
+		methods: {
+			goCustomer() {
+				getCustomer(`/pages/extension/customer_list/chat?productId=${this.ids}`)
+			},
+			setTouchMove(e) {
+				let that = this;
+				if (e.touches[0].clientY < 480 && e.touches[0].clientY > 66) {
+					that.top = e.touches[0].clientY
+				}
+			}
+		},
+		created() {}
+	};
+</script>
+
+<style lang="scss">
+	.cartf {
+		width: 96rpx;
+		height: 96rpx;
+		background: #FFFFFF;
+		box-shadow: 0 3rpx 16rpx rgba(0, 0, 0, 0.08);
+		border-radius: 50%;
+		font-size: 47rpx;
+		color: #666;
+		position: fixed;
+		right: 15rpx;
+		z-index: 9;
+	}
+</style>

+ 301 - 0
components/menuIcon.vue

@@ -0,0 +1,301 @@
+<template>
+	<view>
+		<view id="home" class="home acea-row row-center-wrapper"
+			:class="[returnShow ? 'p10':'p20', text_opacity >= 1 ? 'opacity':'']" :style="{ marginTop: menuButton.top +'px', width: menuButton.width + 'px'}">
+			<view v-if="returnShow" class="iconfont icon-xiangzuo" :class="text_opacity >= 1 ? 'opacity':''"
+				@tap="returns">
+			</view>
+
+			<view class="line" v-if="returnShow"></view>
+			<view class="animation-box">
+				<transition name="fade">
+					<view v-if="!Active" class="iconfont icon-gengduo4" :class="text_opacity >= 1 ? 'opacity':''"
+						@click="open">
+					</view>
+					<!-- 	<view v-if="Active" class="iconfont icon-guanbi5" @click="open">
+					</view> -->
+				</transition>
+				<transition name="fade" mode="out-in">
+					<!-- 	<view v-if="!Active" class="iconfont icon-gengduo4" @click="open">
+					</view> -->
+					<view v-if="Active" class="iconfont icon-guanbi5" :class="text_opacity >= 1 ? 'opacity':''"
+						@click="open">
+					</view>
+				</transition>
+			</view>
+			<view class="homeCon bg-color" :class="Active === true ? 'active' : ''" v-if="Active" @click="open">
+				<view class="homeCon-box" v-for="(item,index) in iconList" :key="index"
+					@click="jumpUrl(item.path,item.jumpType)">
+					<text class='iconfont' :class="item.iconName">
+					</text>
+					<text class="text">{{item.name}}</text>
+				</view>
+
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "menuIcon",
+		data() {
+			return {
+				Active: false,
+				returnShow: true, //判断顶部返回是否出现
+				homeTop: 20,
+				text_opacity: 0,
+				menuButton:{},
+				iconList: [{
+						name: this.$t(`首页`),
+						iconName: "icon-shouye8",
+						path: '/pages/index/index',
+						jumpType: 1
+					},
+					{
+						name: this.$t(`购物车`),
+						iconName: "icon-gouwuche7",
+						path: '/pages/order_addcart/order_addcart',
+						jumpType: 1
+					},
+					{
+						name: this.$t(`搜索`),
+						iconName: "icon-sousuo6",
+						path: '/pages/goods/goods_search/index',
+						jumpType: 0
+					},
+					{
+						name: this.$t(`我的收藏`),
+						iconName: "icon-shoucang3",
+						path: '/pages/users/user_goods_collection/index',
+						jumpType: 0
+					},
+					{
+						name: this.$t(`个人中心`),
+						iconName: "icon-yonghu1",
+						path: '/pages/user/index',
+						jumpType: 1
+					}
+				]
+			};
+		},
+		props: {
+			showMenuIcon: {
+				type: Boolean,
+				default: false
+			},
+			opacity: {
+				type: Number,
+				default: 1
+			}
+		},
+		watch: {
+			showMenuIcon(e) {
+				this.Active = e
+			},
+			opacity(e) {
+				this.text_opacity = e
+			}
+		},
+		mounted() {
+			var pages = getCurrentPages();
+			this.returnShow = pages.length === 1 ? false : true;
+			this.$nextTick(() => {
+				// #ifdef MP
+				this.menuButton = uni.getMenuButtonBoundingClientRect();
+				const query = uni.createSelectorQuery().in(this);
+				console.log(this.menuButton)
+				query
+					.select('#home')
+					.boundingClientRect(data => {
+						this.homeTop = this.menuButton.top * 2 + this.menuButton.height - data.height + 2;
+					})
+					.exec();
+				// #endif
+			});
+		},
+		methods: {
+			open() {
+				this.Active = !this.Active
+				if (this.Active) this.$emit('open', true)
+			},
+			// 后退
+			returns() {
+				uni.navigateBack();
+			},
+			jumpUrl(url, type) {
+				(type === 1 ? uni.switchTab : uni.navigateTo)({url})
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.home {
+		/* #ifdef H5 */
+		top: 20rpx !important;
+		/* #endif */
+	}
+
+	.home.opacity {
+		background: rgba(255, 255, 255, 1);
+		border: 1px solid #d7d7d7;
+	}
+
+	.home {
+		color: #333;
+		position: fixed;
+		// width: 130rpx;
+		// padding: 0 20rpx;
+		height: 62rpx;
+		z-index: 99;
+		left: 33rpx;
+		border: 1px solid #d7d7d7;
+		background: rgba(255, 255, 255, 0.8);
+		border-radius: 30rpx;
+		display: flex;
+		align-items: center;
+		justify-content: space-around;
+		.opacity {
+			color: #000;
+		}
+
+		.icon-gengduo4,
+		.icon-guanbi5 {
+			position: absolute;
+			width: 40rpx;
+			font-weight: bold;
+		}
+			
+		.icon-xiangzuo{
+			font-weight: bold;
+			line-height: 28rpx;
+		}
+		.icon-gengduo4 {
+			font-size: 28rpx;
+			text-align: center;
+		}
+	}
+
+	.home .animation-box {
+		position: relative;
+		width: 40rpx;
+		height: 28rpx;
+	}
+
+	.icon-guanbi5 {
+		font-size: 28rpx;
+		text-align: center;
+	}
+
+	.home .homeCon {
+		display: flex;
+		flex-direction: column;
+		font-size: 26rpx;
+		padding: 4rpx;
+		opacity: 0;
+		border: 1px solid #f2f2f2;
+
+		&::before {
+			content: "";
+			width: 0;
+			height: 0;
+			border-left: 15rpx solid transparent;
+			border-right: 15rpx solid transparent;
+			border-bottom: 17rpx solid #fff;
+			position: absolute;
+			top: -15rpx;
+			right: 66rpx;
+			border-bottom-color: #f2f2f2;
+		}
+
+		&::after {
+			content: "";
+			width: 0;
+			height: 0;
+			border-left: 15rpx solid transparent;
+			border-right: 15rpx solid transparent;
+			border-bottom: 17rpx solid #fff;
+			position: absolute;
+			top: -13rpx;
+			right: 66rpx;
+		}
+
+		.homeCon-box {
+			display: flex;
+			align-items: center;
+			flex-wrap: nowrap;
+			width: 100%;
+			padding: 15rpx 20rpx;
+
+			.text {
+				display: flex;
+				flex-wrap: nowrap;
+			}
+		}
+
+		.iconfont {
+			display: flex;
+			align-items: center;
+			padding: 5rpx 3rpx;
+			margin-right: 5rpx;
+		}
+
+		.homeCon-box:nth-child(even) {
+			border-top: 1px solid #f2f2f2;
+			border-bottom: 1px solid #f2f2f2;
+		}
+	}
+
+	.home .homeCon.active {
+		position: absolute;
+		opacity: 1;
+		top: 75rpx;
+		animation: bounceInLeft 0.5s cubic-bezier(0.215, 0.310, 0.655, 1.000);
+		width: max-content;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		border-radius: 10rpx;
+		color: #333;
+		background: #fff !important;
+		box-shadow: $uni-index-box-shadow;
+	}
+
+	.home .line {
+		width: 2rpx;
+		height: 26rpx;
+		margin: 0 18rpx 0 16rpx;
+		background: rgba(255, 255, 255, 1);
+	}
+
+	.home .line.opacity {
+		color: #050505;
+		background-color: #050505;
+	}
+
+	.home .icon-xiangzuo {
+		font-size: 28rpx;
+	}
+
+	.fade-enter-active,
+	.fade-leave-active {
+		transition: opacity .3s;
+	}
+
+	.fade-enter,
+	.fade-leave-to
+
+	/* .fade-leave-active below version 2.1.8 */
+		{
+		opacity: 0;
+	}
+
+	.p10 {
+		padding: 0 25rpx;
+	}
+
+	.p20 {
+		padding: 0 40rpx;
+	}
+</style>

+ 350 - 0
components/orderGoods/index.vue

@@ -0,0 +1,350 @@
+<template>
+	<view class="orderGoods">
+		<view class='total' v-if="is_behalf"><text>
+				{{$t(`代付金额`)}}:
+				<text class="pay-price">¥{{pay_price}}</text>
+			</text>
+		</view>
+		<view class='total' v-else-if="!split && !is_behalf">{{$t(`共`)}}{{totalNmu}}{{$t(`件商品`)}}</view>
+		<view class='total' v-else-if="split">
+			<text>{{$t(`订单包裹`)}} {{index + 1}}</text>
+			<view class="rig-btn" v-if="status_type === -1">
+				<view class="refund">{{$t(`申请退款中`)}}</view>
+			</view>
+			<view class="rig-btn" v-else-if="status_type === -2">
+				<view class="refund">{{$t(`已退款`)}}</view>
+			</view>
+			<view class="rig-btn" v-else-if="status_type === 4">
+				<view class="done">{{$t(`已完成`)}}</view>
+			</view>
+		</view>
+
+		<view class='goodWrapper'>
+			<view class='' :class="{op:!item.is_valid}" v-for="(item,index) in cartInfo" :key="index"
+				@click="jumpCon(item.product_id)">
+				<view class="item acea-row row-between-wrapper">
+					<view class='pictrue' :class="{gray:!item.is_valid}">
+						<image :src='item.productInfo.attrInfo.image' v-if="item.productInfo.attrInfo"></image>
+						<image :src='item.productInfo.image' v-else></image>
+					</view>
+					<view class='text'>
+						<view class='acea-row row-between-wrapper'>
+							<view class='name line1'>{{item.productInfo.store_name}}</view>
+							<view class='num'>x {{item.cart_num}}</view>
+						</view>
+						<view class='attr line1' v-if="item.productInfo.attrInfo">{{item.productInfo.attrInfo.suk}}
+						</view>
+						<view class='money font-color pic' v-if="item.productInfo.attrInfo">
+							<text :class="{gray:!item.is_valid}">
+								{{$t(`¥`)}}{{item.productInfo.attrInfo.price}}
+							</text>
+							<view class="refund" v-if="item.refund_num && statusType !=-2">{{item.refund_num}}{{$t(`件退款中`)}}
+							</view>
+							<text class="valid" v-if="!item.is_valid && shipping_type === 0">{{$t(`不支持配送`)}}</text>
+							<text class="valid" v-if="!item.productInfo.store_mention && shipping_type === 1">{{$t(`不支持自提`)}}</text>
+						</view>
+						<view class='money font-color pic' v-else>
+							<text :class="{gray:!item.is_valid}">{{$t(`¥`)}}{{item.productInfo.price}}</text>
+							<text class="valid" v-if="!item.is_valid && shipping_type === 0">{{$t(`仅支持到店`)}}</text>
+							<text class="valid" v-if="!item.productInfo.store_mention && shipping_type === 1">{{$t(`仅支持配送`)}}</text>
+						</view>
+						<view class='evaluate' v-else-if="item.is_reply==1">{{$t(`已评价`)}}</view>
+					</view>
+				</view>
+				<view class="botton-btn">
+					<view class='logistics' v-if="item.is_reply==0 && evaluate==3 && pid != -1 && isShow"
+						@click.stop="evaluateTap(item.unique,orderId)">
+						{{$t(`评价`)}}</view>
+					<view class='logistics'
+						v-if="paid === 1 && refund_status === 0 && item.refund_num !=item.cart_num && !is_confirm && isShow"
+						@click.stop="openSubcribe(item)">
+						{{$t(`申请退款`)}}</view>
+					<view class="rig-btn" v-if="status_type === 2 && index === cartInfo.length - 1 || !split">
+						<view v-if="delivery_type === 'express'" class="logistics" @click.stop="logistics(orderId)">{{$t(`查看物流`)}}
+						</view>
+						<view class="logistics sure" v-if="status_type === 2" @click.stop="confirmOrder(orderId)">{{$t(`确认收货`)}}
+						</view>
+					</view>
+				</view>
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			// 订单状态
+			statusType: {
+				type: Number,
+				default: 0,
+			},
+			evaluate: {
+				type: Number,
+				default: 0,
+			},
+			oid: {
+				type: Number,
+				default: 0,
+			},
+			// 1已支付 0未支付
+			paid: {
+				type: Number,
+				default: 0,
+			},
+			cartInfo: {
+				type: Array,
+				default: function() {
+					return [];
+				}
+			},
+			orderId: {
+				type: String,
+				default: '',
+			},
+			shipping_type: {
+				type: Number,
+				default: -1,
+			},
+			delivery_type: {
+				type: String,
+				default: '',
+			},
+			pay_price: {
+				type: String,
+				default: '',
+			},
+			jump: {
+				type: Boolean,
+				default: false,
+			},
+			is_confirm: {
+				type: Boolean,
+				default: false,
+			},
+			// is_behalf 是否是代付列表
+			is_behalf: {
+				type: Boolean,
+				default: false,
+			},
+			split: {
+				type: Boolean,
+				default: false,
+			},
+			jumpDetail: {
+				type: Boolean,
+				default: false,
+			},
+			index: {
+				type: Number,
+				default: 0,
+			},
+			pid: {
+				type: Number,
+				default: 0,
+			},
+			refund_status: {
+				type: Number,
+				default: 0,
+			},
+			status_type: {
+				type: Number,
+				default: 0,
+			},
+			isShow: {
+				type: Boolean,
+				default: true,
+			},
+		},
+		data() {
+			return {
+				totalNmu: 0,
+				operationModel: false,
+				status: "",
+			};
+		},
+		watch: {
+			cartInfo: function(nVal, oVal) {
+				let num = 0
+				nVal.forEach((item, index) => {
+					num += item.cart_num
+				})
+				console.log(num)
+				this.totalNmu = num
+			}
+		},
+		mounted() {
+			let num = 0
+			this.$nextTick(() => {
+				this.cartInfo.forEach((item, index) => {
+					num += item.cart_num
+				})
+				console.log(num)
+				this.$set(this, 'totalNmu', num)
+			})
+
+		},
+		methods: {
+			evaluateTap: function(unique, orderId) {
+				uni.navigateTo({
+					url: "/pages/goods/goods_comment_con/index?unique=" + unique + "&uni=" + orderId
+				})
+			},
+			jumpCon(id) {
+				if (this.jump) {
+					uni.navigateTo({
+						url: `/pages/goods_details/index?id=${id}`
+					})
+				} else if (this.jumpDetail) {
+					uni.navigateTo({
+						url: `/pages/goods/order_details/index?order_id=${this.orderId}`
+					})
+				}
+			},
+			logistics(order_id) {
+				uni.navigateTo({
+					url: '/pages/goods/goods_logistics/index?orderId=' + order_id
+				})
+			},
+			confirmOrder(orderId) {
+				this.$emit('confirmOrder', orderId)
+			},
+			changeOperation() {
+				this.operationModel = !this.operationModel
+			},
+			openSubcribe(item) {
+				let cartList = [];
+				cartList.push({
+					cart_id: item.id,
+					cart_num: item.surplus_refund_num
+				})
+				let obj = JSON.stringify(cartList);
+				this.$emit('openSubcribe',
+					`/pages/goods/goods_return/index?orderId=${this.orderId}&id=${this.oid}&cartIds=${obj}`)
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.fontcolor {
+		color: #e93323;
+	}
+
+	.orderGoods {
+		background-color: #fff;
+	}
+
+	.orderGoods .total {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		width: 100%;
+		// height: 86rpx;
+		padding: 0 30rpx;
+		border-bottom: 2rpx solid #f0f0f0;
+		font-size: 30rpx;
+		color: #282828;
+		line-height: 86rpx;
+		box-sizing: border-box;
+
+
+	}
+
+	.botton-btn {
+		display: flex;
+		align-items: right;
+		justify-content: flex-end;
+		padding: 0rpx 20rpx 20rpx 20rpx;
+	}
+
+	.rig-btn {
+		display: flex;
+		align-items: center;
+
+		.refund {
+			font-size: 26rpx;
+			color: #e93323;
+		}
+
+		.done {
+			font-size: 26rpx;
+			color: #F19D2F;
+		}
+	}
+
+	.logistics {
+		// height: 46rpx;
+		line-height: 30rpx;
+		color: #666666;
+		font-size: 20rpx;
+		border: 1px solid #CCCCCC;
+		border-radius: 30rpx;
+		padding: 8rpx 22rpx;
+		margin-left: 10rpx;
+	}
+
+	.sure {
+		color: #e93323;
+		border: 1px solid #e93323;
+	}
+
+	.more-operation {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		padding: 10rpx 0;
+		color: #bbb;
+	}
+
+	.b-top {
+		margin-left: 30rpx;
+		margin-right: 30rpx;
+		border-top: 1px solid #f0f0f0
+	}
+
+	.fade-enter-active,
+	.fade-leave-active {
+		transition: all 0.1s;
+	}
+
+	.fade-enter,
+	.fade-leave-to
+
+	/* .fade-leave-active below version 2.1.8 */
+		{
+		opacity: 0;
+		transform: translateY(-10px);
+	}
+
+	.op {
+		opacity: 0.5;
+		
+	}
+	
+	.gray {
+		filter: grayscale(100%);
+		filter: gray;
+	}
+
+	.pic {
+		display: flex;
+		justify-content: space-between;
+	}
+
+	.valid {
+		margin-left: 20rpx;
+		font-size: 24rpx;
+	}
+
+	.pay-price {
+		color: #E93323;
+	}
+
+	.refund {
+		text-align: right;
+		font-size: 26rpx;
+		color: var(--view-theme);
+	}
+</style>

+ 212 - 0
components/pageFooter/index.vue

@@ -0,0 +1,212 @@
+<template>
+	<view>
+		<view :style="{height:footHeight+'px'}"></view>
+		<view v-if="newData.bgColor">
+			<view class="page-footer" id="target" :style="{'background-color':newData.bgColor.color[0].item}">
+				<view class="foot-item" v-for="(item,index) in newData.menuList" :key="index" @click="goRouter(item)">
+					<block v-if="item.link == activeRouter">
+						<image :src="item.imgList[0]"></image>
+						<view class="txt" :style="{color:newData.activeTxtColor.color[0].item}">{{item.name}}</view>
+					</block>
+					<block v-else>
+						<image :src="item.imgList[1]"></image>
+						<view class="txt" :style="{color:newData.txtColor.color[0].item}">{{item.name}}</view>
+					</block>
+					<div class="count-num"
+						v-if="item.link === '/pages/order_addcart/order_addcart' && $store.state.indexData.cartNum && $store.state.indexData.cartNum>0">
+						{{$store.state.indexData.cartNum}}
+					</div>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapGetters
+	} from "vuex"
+	import {
+		getNavigation
+	} from '@/api/public.js'
+	import {
+		getCartCounts,
+	} from '@/api/order.js';
+	export default {
+		name: 'pageFooter',
+		props: {
+			noTop: {
+				type: Boolean,
+				default: true
+			},
+			status: {
+				type: Number | String,
+				default: 1
+			},
+			countNum: {
+				type: Number | String,
+				default: 0
+			},
+		},
+		computed: {
+			...mapState({
+				configData: state => state.app.pageFooter
+			})
+		},
+		computed: mapGetters(['isLogin', 'cartNum']),
+		watch: {
+			configData: {
+				handler(nVal, oVal) {
+					let self = this
+					const query = uni.createSelectorQuery().in(this);
+					this.newData = nVal
+					this.$nextTick(() => {
+						query.select('#target').boundingClientRect(data => {
+							uni.$emit('footHeight', data.height)
+							if (data) {
+								self.footHeight = data.height + 50
+							}
+						}).exec();
+					})
+				},
+				deep: true
+			},
+			cartNum(a, b) {
+				this.$store.commit('indexData/setCartNum', a + '')
+				if (a > 0) {
+					uni.setTabBarBadge({
+						index: Number(uni.getStorageSync('FOOTER_ADDCART')),
+						text: a + ''
+					})
+				} else {
+					wx.hideTabBarRedDot({
+						index: Number(uni.getStorageSync('FOOTER_ADDCART'))
+					})
+				}
+			}
+		},
+		created() {
+			let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
+			let curRoute = routes[routes.length - 1].route //获取当前页面路由
+			this.activeRouter = '/' + curRoute
+		},
+		onShow() {
+			getNavigation().then(res => {
+				uni.setStorageSync('pageFoot', res.data)
+				this.$store.commit('FOOT_UPLOAD', res.data)
+				this.newData = res.data
+				if (this.newData.status && this.newData.status.status) {
+					// uni.hideTabBar()
+				} else {
+					uni.showTabBar()
+				}
+			})
+		},
+		mounted() {
+			let that = this
+			this.newData = this.$store.state.app.pageFooter
+			if (this.newData.status && this.newData.status.status) {
+				uni.hideTabBar()
+			} else {
+				uni.showTabBar()
+			}
+			console.log(this.newData)
+			if (this.isLogin) {
+				this.getCartNum()
+			}
+		},
+		data() {
+			return {
+				newData: {},
+				activeRouter: '/',
+				footHeight: 0
+			}
+		},
+		methods: {
+			goRouter(item) {
+				var pages = getCurrentPages();
+				if (pages.length) {
+					var page = (pages[pages.length - 1]).$page.fullPath;
+				} else {
+					page = ''
+				}
+				if (item.link == page) return
+				uni.switchTab({
+					url: item.link,
+					fail(err) {
+						uni.redirectTo({
+							url: item.link
+						})
+					}
+				})
+			},
+			getCartNum: function() {
+				let that = this;
+				getCartCounts().then(res => {
+					that.cartCount = res.data.count;
+					this.$store.commit('indexData/setCartNum', res.data.count > 99 ? '...' : res.data.count)
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.page-footer {
+		position: fixed;
+		bottom: 0;
+		z-index: 30;
+		display: flex;
+		align-items: center;
+		justify-content: space-around;
+		width: 100%;
+		height: calc(98rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
+		height: calc(98rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
+		box-sizing: border-box;
+		border-top: solid 1rpx #F3F3F3;
+		background-color: #fff;
+		box-shadow: 0px 0px 17rpx 1rpx rgba(206, 206, 206, 0.32);
+		padding-bottom: constant(safe-area-inset-bottom); ///兼容 IOS<11.2/
+		padding-bottom: env(safe-area-inset-bottom); ///兼容 IOS>11.2/
+
+		.foot-item {
+			display: flex;
+			width: max-content;
+			align-items: center;
+			justify-content: center;
+			flex-direction: column;
+			position: relative;
+
+			.count-num {
+				position: absolute;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				width: 40rpx;
+				height: 40rpx;
+				top: 0rpx;
+				right: -15rpx;
+				color: #fff;
+				font-size: 20rpx;
+				background-color: #FD502F;
+				border-radius: 50%;
+				padding: 4rpx;
+			}
+		}
+
+		.foot-item image {
+			height: 50rpx;
+			width: 50rpx;
+			text-align: center;
+			margin: 0 auto;
+		}
+
+		.foot-item .txt {
+			font-size: 24rpx;
+
+
+			&.active {}
+		}
+	}
+</style>

+ 33 - 0
components/pageLoading.vue

@@ -0,0 +1,33 @@
+<template>
+	<view class="load" v-if="status">
+		{{$t(`正在加载中`)}}
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return {
+				status:false
+			}
+		},
+		mounted() {
+			this.status = uni.getStorageSync('loadStatus')
+			uni.$once('loadClose',()=>{
+				this.status = false
+			})
+		}
+	}
+</script>
+
+<style lang="scss">
+.load{
+	z-index: 99999;
+	position: fixed;
+	left: 0;
+	top: 0;
+	width: 100%;
+	height: 100%;
+	background-color: #fff;
+}
+</style>

+ 103 - 0
components/parabolaBall/ParabolaBall.vue

@@ -0,0 +1,103 @@
+<template>
+	<view>
+		<view v-for="(item, index) in dots" :key="index" :style="{
+			position: 'fixed',
+			borderRadius: '50%',
+			left: item.left + 'px',
+			top: item.top + 'px',
+			display: item.show ? '' : 'none',
+			width: size + 'px',
+			height: size + 'px',
+			background: color,
+			zIndex: zIndex
+		}">
+			<image :src="item.src" mode="aspectFill" style="width: 100%;height: 100%;border-radius:inherit"
+				v-if="item.src"></image>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			size: { // 尺寸:单位px
+				type: Number,
+				default: 20
+			},
+			color: {
+				type: String,
+				default: '#f5222d'
+			},
+			zIndex: {
+				type: Number,
+				default: 999
+			},
+			duration: {
+				type: Number,
+				default: 500
+			}
+		},
+		data() {
+			return {
+				dots: [
+					/* { src: '', left: 0, top: 0, show: false } */
+				]
+			};
+		},
+		methods: {
+			showBall({
+				start,
+				end,
+				src
+			}) {
+				return new Promise(resolve => {
+					let ball = this.dots.find(v => !v.show)
+					if (!ball) {
+						ball = {
+							src: '',
+							left: 0,
+							top: 0,
+							show: false
+						}
+						this.dots.push(ball)
+					}
+					let t = this.duration,
+						starX = start.x - this.size / 2,
+						starY = start.y - this.size / 2,
+						endX = 50 - this.size / 2,
+						endY = 640 - this.size / 2,
+
+						starT = Date.now()
+					let Sx = endX - starX,
+						Sy = endY - starY,
+						Ax = -(2 * Sx / (t * t)) / 5, // 加速度
+						Ay = Math.abs(Ax),
+						Vox = Sx / t - (Ax * t) / 2, // 初速度
+						Voy = Sy / t - (Ay * t) / 2
+
+
+					const run = () => {
+						const To = Date.now() - starT
+						const x = starX + (Vox * To + Ax * To * To / 2),
+							y = starY + (Voy * To + Ay * To * To / 2)
+						ball.left = x
+						ball.top = y
+						if (To < t) {
+							setTimeout(run)
+						} else {
+							ball.show = false
+							resolve()
+						}
+					}
+					ball.src = src
+					ball.show = true
+					run()
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 498 - 0
components/payment/index.vue

@@ -0,0 +1,498 @@
+<template>
+	<view :style="colorStyle">
+		<view class="payment" :class="pay_close ? 'on' : ''">
+			<view class="title acea-row row-center-wrapper">
+				{{$t(`选择付款方式`)}}<text class="iconfont icon-guanbi" @click='close'></text>
+			</view>
+			<view class="item acea-row row-between-wrapper" v-for="(item,index) in payMode" :key="index"
+				v-if='item.payStatus' @click="payType(item.number || 0 , item.value,index)">
+				<view class="left acea-row row-between-wrapper">
+					<view class="iconfont" :class="item.icon"></view>
+					<view class="text">
+						<view class="name">{{item.name}}</view>
+						<view class="info" v-if="item.value == 'yue'">
+							{{item.title}} <span class="money">{{$t(`¥`)}}{{ item.number }}</span>
+						</view>
+						<view class="info" v-else>{{item.title}}</view>
+					</view>
+				</view>
+				<view class="iconfont" :class="active==index?'icon-xuanzhong11 font-num':'icon-weixuan'"></view>
+			</view>
+			<view class="payMoney">{{$t(`支付`)}}<span class="font-color">{{$t(`¥`)}}<span class="money">{{totalPrice}}</span></span></view>
+			<view class="button bg-color acea-row row-center-wrapper" @click='goPay(number, paytype)'>{{$t(`去付款`)}}</view>
+		</view>
+		<view class="mask" @click='close' v-if="pay_close"></view>
+		<view v-show="false" v-html="formContent"></view>
+	</view>
+</template>
+
+<script>
+	import {
+		orderPay
+	} from '@/api/order.js';
+	import colors from '@/mixins/color.js';
+	export default {
+		props: {
+			payMode: {
+				type: Array,
+				default: function() {
+					return [];
+				}
+			},
+			pay_close: {
+				type: Boolean,
+				default: false,
+			},
+			order_id: {
+				type: String,
+				default: ''
+			},
+			totalPrice: {
+				type: String,
+				default: '0'
+			},
+			isCall: {
+				type: Boolean,
+				default: false
+			},
+			friendPay: {
+				type: Boolean,
+				default: false
+			}
+		},
+		mixins: [colors],
+		data() {
+			return {
+				formContent: '',
+				active: 0,
+				paytype: '',
+				number: 0
+			};
+		},
+		watch: {
+			payMode: {
+				handler(newV, oldValue) {
+					let newPayList = [];
+					newV.forEach((item, index) => {
+						if (item.payStatus) {
+							item.index = index;
+							newPayList.push(item)
+						}
+					});
+					this.active = newPayList[0].index;
+					this.paytype = newPayList[0].value;
+					this.number = newPayList[0].number || 0;
+				},
+				immediate: true,
+				deep: true
+			}
+		},
+		methods: {
+			payType(number, paytype, index) {
+				this.active = index;
+				this.paytype = paytype;
+				this.number = number;
+				this.$emit('changePayType', paytype)
+			},
+			close: function() {
+				this.$emit('onChangeFun', {
+					action: 'payClose'
+				});
+			},
+			goPay: function(number, paytype) {
+				if (this.isCall) {
+					return this.$emit('onChangeFun', {
+						action: 'payCheck',
+						value: paytype
+					});
+				}
+				let that = this;
+				if (!that.order_id) return that.$util.Tips({
+					title: that.$t(`请选择要支付的订单`)
+				});
+				if (paytype == 'yue' && parseFloat(number) < parseFloat(that.totalPrice)) return that.$util.Tips({
+					title: that.$t(`余额不足`)
+				});
+				uni.showLoading({
+					title: that.$t(`支付中`)
+				});
+				if (paytype == 'friend' && that.order_id) {
+					return uni.navigateTo({
+						url: '/pages/users/payment_on_behalf/index?order_id=' + that.order_id + '&spread=' +
+							this.$store.state.app.uid,
+						success: res => {},
+						fail: () => {},
+						complete: () => {}
+					});
+				}
+				orderPay({
+					uni: that.order_id,
+					paytype: paytype,
+					type: that.friendPay ? 1 : 0,
+					// #ifdef MP 
+					'from': 'routine',
+					// #endif
+					// #ifdef H5
+					'from': this.$wechat.isWeixin() ? 'weixin' : 'weixinh5',
+					// #endif
+					// #ifdef H5
+					quitUrl: location.port ? location.protocol + '//' + location.hostname + ':' + location
+						.port +
+						'/pages/goods/order_details/index?order_id=' + this.order_id : location.protocol +
+						'//' + location.hostname +
+						'/pages/goods/order_details/index?order_id=' + this.order_id
+					// #endif
+					// #ifdef APP-PLUS
+					quitUrl: '/pages/goods/order_details/index?order_id=' + this.order_id
+					// #endif
+				}).then(res => {
+					let jsConfig = res.data.result.jsConfig;
+					switch (paytype) {
+						case 'weixin':
+							if (res.data.result === undefined) return that.$util.Tips({
+								title: that.$t(`缺少支付参数`)
+							});
+
+							// #ifdef MP
+							let mp_pay_name=''
+							if(uni.requestOrderPayment){
+								mp_pay_name='requestOrderPayment'
+							}else{
+								mp_pay_name='requestPayment'
+							}
+							uni[mp_pay_name]({
+								timeStamp: jsConfig.timestamp,
+								nonceStr: jsConfig.nonceStr,
+								package: jsConfig.package,
+								signType: jsConfig.signType,
+								paySign: jsConfig.paySign,
+								success: function(res) {
+									uni.hideLoading();
+									return that.$util.Tips({
+										title: res.msg,
+										icon: 'success'
+									}, () => {
+										that.$emit('onChangeFun', {
+											action: 'pay_complete'
+										});
+									});
+								},
+								fail: function(e) {
+									uni.hideLoading();
+									return that.$util.Tips({
+										title: that.$t(`取消支付`)
+									}, () => {
+										that.$emit('onChangeFun', {
+											action: 'pay_fail'
+										});
+									});
+								},
+								complete: function(e) {
+									uni.hideLoading();
+									if (e.errMsg == 'requestPayment:cancel' || e.errMsg == 'requestOrderPayment:cancel') return that.$util
+										.Tips({
+											title: that.$t(`取消支付`)
+										}, () => {
+											that.$emit('onChangeFun', {
+												action: 'pay_fail'
+											});
+										});
+								},
+							});
+							// #endif
+							// #ifdef H5
+							let data = res.data;
+							if (data.status == "WECHAT_H5_PAY") {
+								uni.hideLoading();
+								location.replace(data.result.jsConfig.mweb_url);
+								return that.$util.Tips({
+									title: that.$t(`支付成功`),
+									icon: 'success'
+								}, () => {
+									that.$emit('onChangeFun', {
+										action: 'pay_complete'
+									});
+								});
+							} else {
+								that.$wechat.pay(data.result.jsConfig)
+									.then(() => {
+										return that.$util.Tips({
+											title: that.$t(`支付成功`),
+											icon: 'success'
+										}, () => {
+											that.$emit('onChangeFun', {
+												action: 'pay_complete'
+											});
+										});
+									})
+									.catch(()=> {
+										return that.$util.Tips({
+											title: that.$t(`支付失败`),
+										}, () => {
+											that.$emit('onChangeFun', {
+												action: 'pay_fail'
+											});
+										});
+									});
+							}
+							// #endif
+							// #ifdef APP-PLUS
+							uni.requestPayment({
+								provider: 'wxpay',
+								orderInfo: jsConfig,
+								success: (e) => {
+									let url = '/pages/goods/order_pay_status/index?order_id=' + orderId +
+										'&msg=支付成功';
+									uni.showToast({
+										title: that.$t(`支付成功`)
+									})
+									setTimeout(res => {
+										that.$emit('onChangeFun', {
+											action: 'pay_complete'
+										});
+									}, 2000)
+								},
+								fail: (e) => {
+									uni.showModal({
+										content: that.$t(`支付失败`),
+										showCancel: false,
+										success: function(res) {
+											if (res.confirm) {
+												that.$emit('onChangeFun', {
+													action: 'pay_fail'
+												});
+											} else if (res.cancel) {}
+										}
+									})
+								},
+								complete: () => {
+									uni.hideLoading();
+								},
+							});
+							// #endif
+							break;
+						case 'yue':
+							uni.hideLoading();
+							return that.$util.Tips({
+								title: res.msg,
+								icon: 'success'
+							}, () => {
+								that.$emit('onChangeFun', {
+									action: 'pay_complete'
+								});
+							});
+							break;
+						case 'offline':
+							uni.hideLoading();
+							return that.$util.Tips({
+								title: res.msg,
+								icon: 'success'
+							}, () => {
+								that.$emit('onChangeFun', {
+									action: 'pay_complete'
+								});
+							});
+							break;
+						case 'friend':
+							uni.hideLoading();
+							return that.$util.Tips({
+								title: res.msg,
+								icon: 'success'
+							}, () => {
+								that.$emit('onChangeFun', {
+									action: 'pay_complete'
+								});
+							});
+							break;
+						case 'alipay':
+							uni.hideLoading();
+							//#ifdef H5
+							if (this.$wechat.isWeixin()) {
+								uni.redirectTo({
+									url: `/pages/users/alipay_invoke/index?id=${res.data.result.order_id}&pay_key=${res.data.result.pay_key}`
+								});
+							} else {
+								uni.hideLoading();
+								that.formContent = res.data.result.jsConfig;
+								that.$nextTick(() => {
+									document.getElementById('alipaysubmit').submit();
+								});
+							}
+							//#endif
+							// #ifdef MP
+							uni.navigateTo({
+								url: `/pages/users/alipay_invoke/index?id=${res.data.result.order_id}&link=${res.data.result.jsConfig.qrCode}`
+							});
+							// #endif
+							// #ifdef APP-PLUS
+							uni.requestPayment({
+								provider: 'alipay',
+								orderInfo: jsConfig,
+								success: (e) => {
+									uni.showToast({
+										title: that.$t(`支付成功`)
+									})
+									setTimeout(res => {
+										that.$emit('onChangeFun', {
+											action: 'pay_complete'
+										});
+									}, 2000)
+
+								},
+								fail: (e) => {
+									uni.showModal({
+										content: that.$t(`支付失败`),
+										showCancel: false,
+										success: function(res) {
+											if (res.confirm) {
+												that.$emit('onChangeFun', {
+													action: 'pay_fail'
+												});
+											} else if (res.cancel) {}
+										}
+									})
+								},
+								complete: () => {
+									uni.hideLoading();
+								},
+							});
+							// #endif
+							break;
+					}
+				}).catch(err => {
+					uni.hideLoading();
+					return that.$util.Tips({
+						title: err
+					}, () => {
+						that.$emit('onChangeFun', {
+							action: 'pay_fail'
+						});
+					});
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.bgcolor {
+		background-color: var(--view-theme)
+	}
+
+	.payment {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		width: 100%;
+		border-radius: 16rpx 16rpx 0 0;
+		background-color: #fff;
+		padding-bottom: 60rpx;
+		z-index: 999;
+		transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);
+		transform: translate3d(0, 100%, 0);
+
+		.payMoney {
+			font-size: 28rpx;
+			color: #333333;
+			text-align: center;
+			margin-top: 50rpx;
+
+			.font-color {
+				margin-left: 10rpx;
+
+				.money {
+					font-size: 40rpx;
+				}
+			}
+		}
+
+		.button {
+			width: 690rpx;
+			height: 90rpx;
+			border-radius: 45rpx;
+			color: #FFFFFF;
+			margin: 20rpx auto 0 auto;
+		}
+	}
+
+	.payment.on {
+		transform: translate3d(0, 0, 0);
+	}
+
+	.payment .title {
+		text-align: center;
+		height: 123rpx;
+		font-size: 32rpx;
+		color: #282828;
+		font-weight: bold;
+		padding-right: 30rpx;
+		margin-left: 30rpx;
+		position: relative;
+		border-bottom: 1rpx solid #eee;
+	}
+
+	.payment .title .iconfont {
+		position: absolute;
+		right: 30rpx;
+		top: 50%;
+		transform: translateY(-50%);
+		font-size: 38rpx;
+		color: #8a8a8a;
+		font-weight: normal;
+	}
+
+	.payment .item {
+		border-bottom: 1rpx solid #eee;
+		height: 130rpx;
+		margin-left: 30rpx;
+		padding-right: 30rpx;
+	}
+
+	.payment .item .left {
+		width: 610rpx;
+	}
+
+	.payment .item .left .text {
+		width: 540rpx;
+	}
+
+	.payment .item .left .text .name {
+		font-size: 32rpx;
+		color: #282828;
+	}
+
+	.payment .item .left .text .info {
+		font-size: 24rpx;
+		color: #999;
+	}
+
+	.payment .item .left .text .info .money {
+		color: #ff9900;
+	}
+
+	.payment .item .left .iconfont {
+		font-size: 45rpx;
+		color: #09bb07;
+	}
+
+	.payment .item .left .iconfont.icon-zhifubao {
+		color: #00aaea;
+	}
+
+	.payment .item .left .iconfont.icon-yuezhifu {
+		color: #ff9900;
+	}
+
+	.payment .item .left .iconfont.icon-yuezhifu1 {
+		color: #eb6623;
+	}
+
+	.payment .item .iconfont {
+		font-size: 40rpx;
+		color: #ccc;
+	}
+
+	.icon-haoyoudaizhifu {
+		color: #F34C3E !important;
+	}
+</style>

+ 181 - 0
components/productConSwiper/index.vue

@@ -0,0 +1,181 @@
+<template>
+	<view class='product-bg'>
+		<swiper :indicator-dots="indicatorDots" indicator-active-color="var(--view-theme)" :autoplay="autoplay" :circular="circular"
+		 :interval="interval" :duration="duration" @change="change" v-if="isPlay">
+		 <!-- #ifndef APP-PLUS -->
+			<swiper-item v-if="videoline">
+				<view class="item">
+					<view v-show="!controls" style="width:100%;height:100% ">
+						<video id="myVideo" :src='videoline' objectFit="contain" controls style="width:100%;height:100% "
+						 show-center-play-btn show-mute-btn="true" auto-pause-if-navigate :custom-cache="false" :enable-progress-gesture="false" :poster="imgUrls[0]" @pause="videoPause"></video>
+					</view>
+					<view class="poster" v-show="controls">
+						<image class="image" :src="imgUrls[0]"></image>
+					</view>
+					<view class="stop" v-show="controls" @tap="bindPause">
+						<image class="image" src="../../static/images/stop.png"></image>
+					</view>
+				</view>
+			</swiper-item>
+			<!-- #endif -->
+			<!-- #ifdef APP-PLUS -->
+			<swiper-item v-if="videoline">
+				<view class="item">
+					<view class="poster" v-show="controls">
+						<image class="image" :src="imgUrls[0]"></image>
+					</view>
+					<view class="stop" v-show="controls" @tap="bindPause">
+						<image class="image" src="../../static/images/stop.png"></image>
+					</view>
+				</view>
+			</swiper-item>
+			<!-- #endif -->
+			<block v-for="(item,index) in imgUrls" :key='index'>
+				<swiper-item v-if="videoline?index>=1:index>=0">
+					<image :src="item" class="slide-image" />
+				</swiper-item>
+			</block>
+		</swiper>
+		<!-- #ifdef APP-PLUS -->
+		<view v-if="!isPlay" style="width: 100%; height: 750rpx;">
+			<video id="myVideo" :src='videoline' objectFit="cover" controls style="width:100%;height:100% "
+			 show-center-play-btn show-mute-btn="true" autoplay="true" auto-pause-if-navigate :custom-cache="false" :enable-progress-gesture="false" :poster="imgUrls[0]" @pause="videoPause"></video>
+		</view>
+		<!-- #endif -->
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			imgUrls: {
+				type: Array,
+				default: function() {
+					return [];
+				}
+			},
+			videoline: {
+				type: String,
+				value: ""
+			}
+		},
+		data() {
+			return {
+				indicatorDots: true,
+				circular: true,
+				autoplay: true,
+				interval: 3000,
+				duration: 500,
+				currents: "1",
+				controls: true,
+				isPlay:true,
+				videoContext:''
+			};
+		},
+		mounted() {
+			if(this.videoline){
+				this.imgUrls.shift()
+			}
+			// #ifndef APP-PLUS
+			this.videoContext = uni.createVideoContext('myVideo', this);
+			// #endif
+		},
+		methods: {
+			videoPause(e){
+				// #ifdef APP-PLUS
+				this.isPlay= true
+				this.autoplay = true
+				// #endif
+			},
+			bindPause: function() {
+				
+				// #ifndef APP-PLUS
+				this.videoContext.play();
+				this.$set(this, 'controls', false)
+				this.autoplay = false
+				// #endif
+				// #ifdef APP-PLUS
+				this.isPlay= false
+				this.videoContext = uni.createVideoContext('myVideo', this);
+				this.videoContext.play();
+				// #endif
+			},
+			change: function(e) {
+				this.$set(this, 'currents', e.detail.current + 1);
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.product-bg {
+		width: 100%;
+		height: 750rpx;
+		position: relative;
+	}
+
+	.product-bg swiper {
+		width: 100%;
+		height: 100%;
+		position: relative;
+	}
+
+	.product-bg .slide-image {
+		width: 100%;
+		height: 100%;
+	}
+
+	.product-bg .pages {
+		position: absolute;
+		background-color: #fff;
+		height: 34rpx;
+		padding: 0 10rpx;
+		border-radius: 3rpx;
+		right: 30rpx;
+		bottom: 30rpx;
+		line-height: 34rpx;
+		font-size: 24rpx;
+		color: #050505;
+	}
+
+	#myVideo {
+		width: 100%;
+		height: 100%
+	}
+
+	.product-bg .item {
+		position: relative;
+		width: 100%;
+		height: 100%;
+	}
+
+	.product-bg .item .poster {
+		position: absolute;
+		top: 0;
+		left: 0;
+		height: 750rpx;
+		width: 100%;
+		z-index: 9;
+	}
+
+	.product-bg .item .poster .image {
+		width: 100%;
+		height: 100%;
+	}
+
+	.product-bg .item .stop {
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		width: 136rpx;
+		height: 136rpx;
+		margin-top: -68rpx;
+		margin-left: -68rpx;
+		z-index: 9;
+	}
+
+	.product-bg .item .stop .image {
+		width: 100%;
+		height: 100%;
+	}
+</style>

+ 404 - 0
components/productWindow/index.vue

@@ -0,0 +1,404 @@
+<template>
+	<view :style="colorStyle">
+		<view class="product-window"
+			:class="(attr.cartAttr === true ? 'on' : '') + ' ' + (iSbnt?'join':'') + ' ' + (iScart?'joinCart':'')">
+			<view class="textpic acea-row row-between-wrapper">
+				<view class="pictrue" @click="showImg()">
+					<image :src="attr.productSelect.image" ></image>
+				</view>
+				<view class="text">
+					<view class="line1">
+						{{ attr.productSelect.store_name }}
+					</view>
+					<view class="money font-color">
+						<view class="acea-row row-middle">
+							{{$t(`¥`)}}<text class="num">{{ attr.productSelect.price }}</text>
+							<text class='vip-money'
+								v-if="is_vip>0 && attr.productSelect.vip_price">{{$t(`¥`)}}{{attr.productSelect.vip_price}}</text>
+							<view class="vipImg" v-if="is_vip>0 && attr.productSelect.vip_price">
+								<image src="../../static/images/svip.gif"></image>
+							</view>
+						</view>
+						<text class="stock" v-if='isShow'>{{$t(`库存`)}}: {{ attr.productSelect.stock }}</text>
+						<text class='stock' v-if="limitNum">{{type ? $t(`库存`) : $t(`限量`)}}: {{attr.productSelect.quota}}</text>
+					</view>
+				</view>
+				<view class="iconfont icon-guanbi" @click="closeAttr"></view>
+			</view>
+			<view class="rollTop">
+				<view class="productWinList">
+					<view class="item" v-for="(item, indexw) in attr.productAttr" :key="indexw">
+						<view class="title">{{ item.attr_name }}</view>
+						<view class="listn acea-row row-middle">
+							<view class="itemn" :class="item.index === itemn.attr ? 'on' : ''"
+								v-for="(itemn, indexn) in item.attr_value" @click="tapAttr(indexw, indexn)"
+								:key="indexn">
+								{{ itemn.attr }}
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="cart acea-row row-between-wrapper" v-if="!is_virtual">
+					<view class="title">{{$t(`数量`)}}</view>
+					<view class="carnum acea-row row-left">
+						<view class="item reduce acea-row row-center-wrapper"
+							:class="attr.productSelect.cart_num <= 1 ? 'on' : ''"
+							v-if="attr.productSelect.cart_num <= 1">
+							<text class="iconfont icon-shangpinshuliang-jian"></text>
+						</view>
+						<view class="item reduce acea-row row-center-wrapper"
+							:class="attr.productSelect.cart_num <= 1 ? 'on' : ''" @click="CartNumDes" v-else>
+							<text class="iconfont icon-shangpinshuliang-jian"></text>
+						</view>
+						<view class='item num acea-row row-middle'>
+							<input type="number" v-model="attr.productSelect.cart_num"
+								data-name="productSelect.cart_num"
+								@input="bindCode(attr.productSelect.cart_num)"></input>
+						</view>
+						<view v-if="iSplus" class="item plus acea-row row-center-wrapper" :class="
+				      attr.productSelect.cart_num >= attr.productSelect.stock
+				        ? 'on'
+				        : ''
+				    " @click="CartNumAdd">
+							<text class="iconfont icon-shangpinshuliang-jia"></text>
+						</view>
+						<view v-else class='item plus'
+							:class='(attr.productSelect.cart_num >= attr.productSelect.quota) || (attr.productSelect.cart_num >= attr.productSelect.product_stock) || (attr.productSelect.cart_num >= attr.productSelect.num) || (type=="seckill" && attr.productSelect.cart_num >= attr.productSelect.once_num)? "on":""'
+							@click='CartNumAdd'>+</view>
+					</view>
+				</view>
+			</view>
+			<view class="joinBnt bg-color"
+				v-if="iSbnt && attr.productSelect.product_stock>0 &&attr.productSelect.quota>0" @click="goCat">{{$t(`我要参团`)}}
+			</view>
+			<view class="joinBnt on"
+				v-else-if="(iSbnt && attr.productSelect.quota<=0)||(iSbnt &&attr.productSelect.product_stock<=0)">{{$t(`已售罄`)}}
+			</view>
+			<view class="joinBnt bg-color" v-if="iScart && attr.productSelect.stock" @click="goCat">{{$t(`确定`)}}</view>
+			<view class="joinBnt on" v-else-if="iScart && !attr.productSelect.stock">{{$t(`已售罄`)}}</view>
+		</view>
+		<view class="mask" @touchmove.prevent :hidden="attr.cartAttr === false" @click="closeAttr"></view>
+	</view>
+</template>
+
+<script>
+	import colors from "@/mixins/color";
+	export default {
+		mixins: [colors],
+		props: {
+			attr: {
+				type: Object,
+				default: () => {}
+			},
+			limitNum: {
+				type: Number,
+				value: 0
+			},
+			isShow: {
+				type: Number,
+				value: 0
+			},
+			iSbnt: {
+				type: Number,
+				value: 0
+			},
+			iSplus: {
+				type: Number,
+				value: 0
+			},
+			iScart: {
+				type: Number,
+				value: 0
+			},
+			is_vip: {
+				type: Number,
+				value: 0
+			},
+			is_virtual: {
+				type: Number,
+				value: 0
+			},
+			type: {
+				type: String,
+				default: ''
+			},
+		},
+		data() {
+			return {};
+		},
+		mounted() {
+			
+		},
+		methods: {
+			getpreviewImage: function() {
+				uni.previewImage({
+					urls: this.attr.productSelect.image.split(','),
+					current: this.attr.productSelect.image
+				});
+			},
+			goCat: function() {
+				this.$emit('goCat');
+			},
+			/**
+			 * 购物车手动输入数量
+			 * 
+			 */
+			bindCode: function(e) {
+				this.$emit('iptCartNum', this.attr.productSelect.cart_num);
+			},
+			closeAttr: function() {
+				this.$emit('myevent');
+			},
+			CartNumDes: function() {
+				this.$emit('ChangeCartNum', false);
+			},
+			CartNumAdd: function() {
+				this.$emit('ChangeCartNum', true);
+			},
+			tapAttr: function(indexw, indexn) {
+				
+				let that = this;
+				that.$emit("attrVal", {
+					indexw: indexw,
+					indexn: indexn
+				});
+				this.$set(this.attr.productAttr[indexw], 'index', this.attr.productAttr[indexw].attr_values[indexn]);
+				let value = that
+					.getCheckedValue()
+					.join(",");
+				that.$emit("ChangeAttr", value);
+				if(this.limitNum == 1){
+					if(this.attr.productSelect.quota>0){
+						this.attr.productSelect.cart_num = 1
+					}else{
+						this.attr.productSelect.cart_num = 0
+					}
+				}
+
+			},
+			//获取被选中属性;
+			getCheckedValue: function() {
+				let productAttr = this.attr.productAttr;
+				let value = [];
+				for (let i = 0; i < productAttr.length; i++) {
+					for (let j = 0; j < productAttr[i].attr_values.length; j++) {
+						if (productAttr[i].index === productAttr[i].attr_values[j]) {
+							value.push(productAttr[i].attr_values[j]);
+						}
+					}
+				}
+				return value;
+			},
+			showImg() {
+				this.$emit('getImg');
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.vip-money {
+		color: #282828;
+		font-size: 28rpx;
+		font-weight: 700;
+		margin-left: 6rpx;
+	}
+
+	.vipImg {
+		width: 68rpx;
+		height: 27rpx;
+
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	.product-window {
+		position: fixed;
+		bottom: 0;
+		width: 100%;
+		left: 0;
+		background-color: #fff;
+		z-index: 100;
+		border-radius: 16rpx 16rpx 0 0;
+		transform: translate3d(0, 100%, 0);
+		transition: all .3s cubic-bezier(.25, .5, .5, .9);
+		padding-bottom: 140rpx;
+		padding-bottom: calc(140rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
+		padding-bottom: calc(140rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
+	}
+
+	.product-window.on {
+		transform: translate3d(0, 0, 0);
+	}
+
+	.product-window.join {
+		padding-bottom: 30rpx;
+	}
+
+	.product-window.joinCart {
+		padding-bottom: 30rpx;
+		z-index: 10000;
+	}
+
+	.product-window .textpic {
+		padding: 0 130rpx 0 30rpx;
+		margin-top: 29rpx;
+		position: relative;
+	}
+
+	.product-window .textpic .pictrue {
+		width: 150rpx;
+		height: 150rpx;
+	}
+
+	.product-window .textpic .pictrue image {
+		width: 100%;
+		height: 100%;
+		border-radius: 10rpx;
+	}
+
+	.product-window .textpic .text {
+		width: 410rpx;
+		font-size: 32rpx;
+		color: #202020;
+	}
+
+	.product-window .textpic .text .money {
+		font-size: 24rpx;
+		margin-top: 40rpx;
+	}
+
+	.product-window .textpic .text .money .num {
+		font-size: 36rpx;
+	}
+
+	.product-window .textpic .text .money .stock {
+		color: #999;
+		margin-left: 6rpx;
+	}
+
+	.product-window .textpic .iconfont {
+		position: absolute;
+		right: 30rpx;
+		top: -5rpx;
+		font-size: 35rpx;
+		color: #8a8a8a;
+	}
+
+	.product-window .rollTop {
+		max-height: 500rpx;
+		overflow: auto;
+		margin-top: 36rpx;
+	}
+
+	.product-window .productWinList .item~.item {
+		margin-top: 36rpx;
+	}
+
+	.product-window .productWinList .item .title {
+		font-size: 30rpx;
+		color: #999;
+		padding: 0 30rpx;
+	}
+
+	.product-window .productWinList .item .listn {
+		padding: 0 30rpx 0 16rpx;
+	}
+
+	.product-window .productWinList .item .listn .itemn {
+		border: 1px solid #F2F2F2;
+		font-size: 26rpx;
+		color: #282828;
+		padding: 7rpx 33rpx;
+		border-radius: 25rpx;
+		margin: 20rpx 0 0 14rpx;
+		background-color: #F2F2F2;
+	}
+
+	.product-window .productWinList .item .listn .itemn.on {
+		color: var(--view-theme);
+		background: var(--view-minorColorT);
+		border-color: var(--view-theme);
+	}
+
+	.product-window .productWinList .item .listn .itemn.limit {
+		color: #999;
+		text-decoration: line-through;
+	}
+
+	.product-window .cart {
+		margin-top: 36rpx;
+		padding: 0 30rpx;
+	}
+
+	.product-window .cart .title {
+		font-size: 30rpx;
+		color: #999;
+	}
+
+	.product-window .cart .carnum {
+		height: 54rpx;
+		margin-top: 24rpx;
+	}
+
+	.product-window .cart .carnum .iconfont {
+		font-size: 25rpx;
+	}
+
+	.product-window .cart .carnum view {
+		// border: 1px solid #a4a4a4;
+		width: 84rpx;
+		text-align: center;
+		height: 100%;
+		line-height: 54rpx;
+		color: #282828;
+		font-size: 45rpx;
+	}
+
+	.product-window .cart .carnum .reduce {
+		border-right: 0;
+		border-radius: 6rpx 0 0 6rpx;
+		line-height: 48rpx;
+		font-size: 60rpx;
+	}
+
+	.product-window .cart .carnum .reduce.on {
+		// border-color: #e3e3e3;
+		color: #DEDEDE;
+	}
+
+	.product-window .cart .carnum .plus {
+		border-left: 0;
+		border-radius: 0 6rpx 6rpx 0;
+		line-height: 46rpx;
+	}
+
+	.product-window .cart .carnum .plus.on {
+		// border-color: #e3e3e3;
+		color: #dedede;
+	}
+
+	.product-window .cart .carnum .num {
+		background: rgba(242, 242, 242, 1);
+		color: #282828;
+		font-size: 28rpx;
+	}
+
+	.product-window .joinBnt {
+		font-size: 30rpx;
+		width: 620rpx;
+		height: 86rpx;
+		border-radius: 50rpx;
+		text-align: center;
+		line-height: 86rpx;
+		color: #fff;
+		margin: 21rpx auto 0 auto;
+	}
+
+	.product-window .joinBnt.on {
+		background-color: #bbb;
+		color: #fff;
+	}
+</style>

+ 110 - 0
components/promotionGood/index.vue

@@ -0,0 +1,110 @@
+<template>
+	<view class='promotionGood' :style="colorStyle">
+		<block v-for="(item,index) in benefit" :key="index">
+			<view class='item' @tap="goDetail(item)" hover-class="none">
+				<view class='pictrue'>
+					<image :src='item.image'></image>
+				</view>
+				<view class='money'>
+					<text class="rmb">{{$t(`¥`)}} </text><text class="price"> {{item.price}}</text>
+					<!-- <text class="ot-price">{{item.ot_price}}</text> -->
+				</view>
+			</view>
+		</block>
+	</view>
+</template>
+<script>
+	import {
+		mapGetters
+	} from "vuex";
+	import {
+		goPage,
+		goShopDetail
+	} from '@/libs/order.js'
+	import colors from "@/mixins/color";
+	export default {
+		computed: mapGetters(['uid']),
+		mixins: [colors],
+		props: {
+			benefit: {
+				type: Array,
+				default: function() {
+					return [];
+				}
+			}
+		},
+		data() {
+			return {
+
+			};
+		},
+		methods: {
+			goDetail(item) {
+				goPage().then(res => {
+					goShopDetail(item, this.uid).then(res => {
+						uni.navigateTo({
+							url: `/pages/goods_details/index?id=${item.id}`
+						})
+					})
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang='scss'>
+	.promotionGood {
+		padding: 0 30rpx;
+		display: flex;
+		flex-wrap: wrap;
+		padding: 15rpx 24rpx;
+
+		.item {
+			width: 215rpx;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			padding: 9rpx;
+
+			.pictrue {
+				height: 198rpx;
+				border-radius: 12rpx;
+
+				image {
+					width: 100%;
+					height: 100%;
+					border-radius: 12rpx;
+				}
+
+			}
+
+			.money {
+				font-size: 30rpx;
+				color: var(--view-priceColor);
+				margin-top: 10rpx;
+				overflow: hidden; //超出的文本隐藏
+				text-overflow: ellipsis; //溢出用省略号显示
+				white-space: nowrap; //溢出不换行
+				margin: 0 auto;
+
+				.rmb {
+					font-weight: bold;
+					color: var(--view-priceColor);
+					font-size: 20rpx;
+					margin-right: 2rpx;
+				}
+
+				.price {
+					font-weight: bold;
+				}
+
+				.ot-price {
+					color: #999;
+					text-decoration: line-through;
+					font-size: 20rpx;
+					margin-left: 4rpx;
+				}
+			}
+		}
+	}
+</style>

+ 118 - 0
components/recommend/index.vue

@@ -0,0 +1,118 @@
+<template>
+	<view class='recommend' :style="colorStyle">
+		<view class='title acea-row row-center-wrapper'>
+			<text class='iconfont icon-zhuangshixian'></text>
+			<text class='name'>{{$t(`热门推荐`)}}</text>
+			<text class='iconfont icon-zhuangshixian lefticon'></text>
+		</view>
+		<view class='recommendList acea-row row-between-wrapper'>
+			<view class='item' v-for="(item,index) in hostProduct" :key="index" hover-class='none' @tap="goDetail(item)">
+				<view class='pictrue'>
+					<image :src='item.image'></image>
+					<span class="pictrue_log_big pictrue_log_class" v-if="item.activity && item.activity.type === '1'">{{$t(`秒杀`)}}</span>
+					<span class="pictrue_log_big pictrue_log_class" v-if="item.activity && item.activity.type === '2'">{{$t(`砍价`)}}</span>
+					<span class="pictrue_log_big pictrue_log_class" v-if="item.activity && item.activity.type === '3'">{{$t(`拼团`)}}</span>
+				</view>
+				<view class='name line1'>{{item.store_name}}</view>
+				<view class='money font-color'>{{$t(`¥`)}}<text class='num'>{{item.price}}</text></view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {mapGetters} from "vuex";
+	import { goShopDetail } from '@/libs/order.js'
+	import colors from "@/mixins/color";
+	export default {
+	computed: mapGetters(['uid']),
+		props: {
+			hostProduct: {
+				type: Array,
+				default: function() {
+					return [];
+				}
+			}
+		},
+		mixins: [colors],
+		data() {
+			return {
+
+			};
+		},
+		methods: {
+			goDetail(item){
+				goShopDetail(item,this.uid).then(res=>{
+					uni.navigateTo({
+						url:`/pages/goods_details/index?id=${item.id}`
+					})
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.recommend {
+		background-color: #fff;
+	}
+
+	.recommend .title {
+		height: 135rpx;
+		font-size: 28rpx;
+		color: #282828;
+	}
+
+	.recommend .title .name {
+		margin: 0 28rpx;
+	}
+
+	.recommend .title .iconfont {
+		font-size: 170rpx;
+		color: #454545;
+	}
+
+	.recommend .title .iconfont.lefticon {
+		transform: rotate(180deg);
+	}
+
+	.recommend .recommendList {
+		padding: 0 30rpx;
+	}
+
+	.recommend .recommendList .item {
+		width: 335rpx;
+		margin-bottom: 30rpx;
+		border-radius: 20rpx 20rpx 0 0;
+		box-shadow: 0rpx 3rpx 10rpx 2rpx rgba(0, 0, 0, 0.03);;
+	}
+
+	.recommend .recommendList .item .pictrue {
+		position: relative;
+		width: 100%;
+		height: 335rpx;
+	}
+
+	.recommend .recommendList .item .pictrue image {
+		width: 100%;
+		height: 100%;
+		border-radius: 20rpx;
+	}
+
+	.recommend .recommendList .item .name {
+		font-size: 28rpx;
+		color: #282828;
+		margin-top: 20rpx;
+		padding: 0 10rpx;
+	}
+
+	.recommend .recommendList .item .money {
+		font-size: 20rpx;
+		margin-top: 8rpx;
+		padding: 0 10rpx 10rpx 10rpx;
+	}
+
+	.recommend .recommendList .item .money .num {
+		font-size: 28rpx;
+	}
+</style>

+ 148 - 0
components/shareRedPackets/index.vue

@@ -0,0 +1,148 @@
+<template>
+	<view v-if="sharePacket.isState" class='sharing-packets' :class='sharePacket.isState && showAnimate ? "":"right"'>
+		<view class='sharing-con' @click='goShare'>
+			<image :src="imgHost + '/statics/images/red-packets.png'" />
+			<view class='text font-color'>
+				<view>{{$t(`最高返佣`)}}</view>
+				<view class='money'><text class='label'>{{$t(`¥`)}}</text>{{sharePacket.priceName}}</view>
+				<view class='tip'>{{$t(`推广享佣金`)}}</view>
+				<view class='shareBut'>{{$t(`立即分享`)}}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {HTTP_REQUEST_URL} from '@/config/app';
+	export default {
+
+		props: {
+			sharePacket: {
+				type: Object,
+				default: function() {
+					return {
+						isState: true,
+						priceName: ''
+					}
+				}
+			},
+			showAnimate: {
+				type: Boolean,
+				default: true
+			},
+		},
+		watch: {
+			showAnimate(nVal, oVal) {
+				setTimeout(res => {
+					this.isAnimate = nVal
+				}, 1000)
+			}
+		},
+		data() {
+			return {
+				imgHost:HTTP_REQUEST_URL,
+				isAnimate: true
+			};
+		},
+
+		methods: {
+			closeShare: function() {
+				this.$emit('closeChange');
+			},
+			goShare: function() {
+				console.log(this.isAnimate)
+				if (this.isAnimate) {
+					this.$emit('listenerActionSheet');
+				} else {
+					this.isAnimate = true
+					this.$emit('boxStatus', true);
+				}
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.sharing-packets {
+		position: fixed;
+		left: 30rpx;
+		bottom: 200rpx;
+		z-index: 5;
+		transition: all 0.3s ease-in-out 0s;
+		opacity: 1;
+		transform: scale(1);
+
+		&.right {
+			left: -170rpx;
+		}
+	}
+
+	// .sharing-packets.on {
+	// 	transform: scale(0);
+	// 	opacity: 0;
+	// }
+
+	.sharing-packets .iconfont {
+		width: 44rpx;
+		height: 44rpx;
+		border-radius: 50%;
+		text-align: center;
+		line-height: 44rpx;
+		background-color: #999;
+		font-size: 20rpx;
+		color: #fff;
+		margin: 0 auto;
+		box-sizing: border-box;
+		padding-left: 1px;
+	}
+
+	.sharing-packets .line {
+		width: 2rpx;
+		height: 40rpx;
+		background-color: #999;
+		margin: 0 auto;
+	}
+
+	.sharing-packets .sharing-con {
+		width: 187rpx;
+		height: 210rpx;
+		position: relative;
+	}
+
+	.sharing-packets .sharing-con image {
+		width: 100%;
+		height: 100%;
+	}
+
+	.sharing-packets .sharing-con .text {
+		position: absolute;
+		top: 30rpx;
+		font-size: 20rpx;
+		width: 100%;
+		text-align: center;
+	}
+
+	.sharing-packets .sharing-con .text .money {
+		font-size: 32rpx;
+		font-weight: bold;
+		margin-top: 5rpx;
+	}
+
+	.sharing-packets .sharing-con .text .money .label {
+		font-size: 20rpx;
+	}
+
+	.sharing-packets .sharing-con .text .tip {
+		font-size: 18rpx;
+		color: #999;
+		margin-top: 5rpx;
+	}
+
+	.sharing-packets .sharing-con .text .shareBut {
+		font-size: 22rpx;
+		color: #fff;
+		margin-top: 14rpx;
+		height: 50rpx;
+		line-height: 50rpx;
+	}
+</style>

+ 0 - 1008
components/shopro-auth-modal/shopro-auth-modal.vue

@@ -1,1008 +0,0 @@
-<template>
-	<view class="cu-modal bottom-modal" :class="{ show: showAuth }" @tap="closeAuthModal" style="z-index: 10080;">
-		<view class="login-wrap cu-dialog form-wrap  safe-area-inset-bottom" @tap.stop style="border-radius: 20rpx 20rpx 0 0;">
-			<!-- 1.账号密码登录 -->
-			<view v-if="authType === 'accountLogin'">
-				<!-- 标题 -->
-				<view class="head-box u-m-b-60 u-flex-col ">
-					<view class="u-flex u-m-b-20">
-						<view class="head-title u-m-r-40 head-title-animation">账号登录</view>
-						<view class="head-title-active head-title-line" @tap="showAuthModal('smsLogin')">短信登录</view>
-					</view>
-					<view class="head-subtitle">如果未设置过密码,请点击忘记密码</view>
-				</view>
-				<view class="form-item  u-border-bottom ">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">账号</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							placeholder="请输入账号"
-							@blur="checkValue($event, 'account')"
-							@input="checkValue($event, 'account')"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['accountLogin'].data.account"
-							type="text"
-						></u-input>
-						<button class="u-reset-button forgot-btn" @tap="showAuthModal('forgotPwd')">忘记密码</button>
-					</view>
-					<view class="message-error">{{ form['accountLogin'].error.account || '' }}</view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">密码</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							placeholder="请输入密码"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['accountLogin'].data.password"
-							type="password"
-							@blur="checkValue($event, 'password')"
-							@input="checkValue($event, 'password')"
-						></u-input>
-						<button class="u-reset-button login-btn-start" @tap="accountLoginSubmit">登录</button>
-					</view>
-					<view class="message-error">{{ form['accountLogin'].error.password || '' }}</view>
-				</view>
-				<button class="u-reset-button type-btn" @tap="showAuthModal('register')">立即注册</button>
-			</view>
-
-			<!-- 2.短信登录 -->
-			<view v-if="authType === 'smsLogin'">
-				<view class="head-box u-m-b-60">
-					<view class="u-flex u-m-b-20">
-						<view class="head-title-active u-m-r-40" @tap="showAuthModal('accountLogin')">账号登录</view>
-						<view class="head-title head-title-line head-title-animation">短信登录</view>
-					</view>
-					<view class="head-subtitle">未注册手机号请先点击下方立即注册</view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">手机号</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							placeholder="请输入手机号"
-							@blur="checkValue($event, 'mobile')"
-							@input="mobileInput($event, 'mobile')"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['smsLogin'].data.mobile"
-							type="number"
-						></u-input>
-						<button
-							class="u-reset-button code-btn code-btn-start"
-							:disabled="!form['smsLogin'].data.isMobileEnd"
-							:class="{ 'code-btn-end': form['smsLogin'].data.isMobileEnd }"
-							@tap="getSmsCode('mobilelogin')"
-						>
-							{{ codeText }}
-						</button>
-					</view>
-					<view class="message-error">{{ form['smsLogin'].error.mobile || '' }}</view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">验证码</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							@blur="checkValue($event, 'code')"
-							@input="checkValue($event, 'code')"
-							placeholder="请输入验证码"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['smsLogin'].data.code"
-							type="number"
-						></u-input>
-						<button class="u-reset-button login-btn-start" @tap="smsLoginSubmit">登录</button>
-					</view>
-					<view class="message-error">{{ form['smsLogin'].error.code || '' }}</view>
-				</view>
-				<button class="u-reset-button type-btn" @tap="showAuthModal('register')">立即注册</button>
-			</view>
-
-			<!-- 3.注册 -->
-			<view v-if="authType === 'register'">
-				<view class="head-box u-m-b-60">
-					<view class="head-title u-m-b-20">注册</view>
-					<view class="head-subtitle">请使用本人手机号完成注册</view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">手机号</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							placeholder="请输入手机号"
-							@blur="checkValue($event, 'mobile')"
-							@input="mobileInput($event, 'mobile')"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['register'].data.mobile"
-							type="number"
-						></u-input>
-						<button
-							class="u-reset-button code-btn code-btn-start"
-							:disabled="!form['register'].data.isMobileEnd"
-							:class="{ 'code-btn-end': form['register'].data.isMobileEnd }"
-							@tap="getSmsCode('register')"
-						>
-							{{ codeText }}
-						</button>
-					</view>
-					<view class="message-error">{{ form['register'].error.mobile || '' }}</view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">密码</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							@blur="checkValue($event, 'password')"
-							@input="checkValue($event, 'password')"
-							placeholder="请输入密码"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['register'].data.password"
-							type="password"
-						></u-input>
-					</view>
-					<view class="message-error">{{ form['register'].error.password || '' }}</view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">验证码</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							@blur="checkValue($event, 'code')"
-							@input="checkValue($event, 'code')"
-							placeholder="请输入验证码"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['register'].data.code"
-							type="number"
-						></u-input>
-						<button class="u-reset-button login-btn-start" @tap="registerSubmit">注册</button>
-					</view>
-					<view class="message-error">{{ form['register'].error.code || '' }}</view>
-				</view>
-				<button v-if="!isLogin" class="u-reset-button type-btn" @tap="showAuthModal('accountLogin')">返回登录</button>
-			</view>
-
-			<!-- 4.忘记密码 -->
-			<view v-if="authType === 'forgotPwd'">
-				<view class="head-box u-m-b-60">
-					<view class="head-title u-m-b-20">忘记密码</view>
-					<view class="head-subtitle">为了您的账号安全,修改密码前请先进行安全验证</view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">手机号</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							@blur="checkValue($event, 'mobile')"
-							@input="mobileInput($event, 'mobile')"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['forgotPwd'].data.mobile"
-							type="number"
-						></u-input>
-						<button
-							class="u-reset-button code-btn code-btn-start"
-							:disabled="!form['forgotPwd'].data.isMobileEnd"
-							:class="{ 'code-btn-end': form['forgotPwd'].data.isMobileEnd }"
-							@tap="getSmsCode('resetpwd')"
-						>
-							{{ codeText }}
-						</button>
-					</view>
-					<view class="message-error">{{ form['forgotPwd'].error.mobile || '' }}</view>
-				</view>
-
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">验证码</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							@blur="checkValue($event, 'code')"
-							@input="checkValue($event, 'code')"
-							placeholder="请输入验证码"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['forgotPwd'].data.code"
-							type="number"
-						></u-input>
-					</view>
-					<view class="message-error">{{ form['forgotPwd'].error.code || '' }}</view>
-				</view>
-
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">密码</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							@blur="checkValue($event, 'password')"
-							@input="checkValue($event, 'password')"
-							placeholder="请输入密码"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['forgotPwd'].data.password"
-							type="password"
-						></u-input>
-						<button class="u-reset-button login-btn-start" @tap="forgotPwdSubmit">确认</button>
-					</view>
-					<view class="message-error">{{ form['forgotPwd'].error.password || '' }}</view>
-				</view>
-				<button v-if="!isLogin" class="u-reset-button type-btn" @tap="showAuthModal('accountLogin')">返回登录</button>
-			</view>
-
-			<!-- 5.绑定手机号 -->
-			<view v-if="authType === 'bindMobile'">
-				<view class="head-box u-m-b-60">
-					<view class="head-title u-m-b-20">绑定手机号</view>
-					<view class="head-subtitle">为了您的账号安全,请绑定手机号</view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">手机号</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							@blur="checkValue($event, 'mobile')"
-							@input="mobileInput($event, 'mobile')"
-							placeholder="请输入手机号"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['bindMobile'].data.mobile"
-							type="number"
-						></u-input>
-						<button
-							class="u-reset-button code-btn code-btn-start"
-							:disabled="!form['bindMobile'].data.isMobileEnd"
-							:class="{ 'code-btn-end': form['bindMobile'].data.isMobileEnd }"
-							@tap="getSmsCode('changemobile')"
-						>
-							{{ codeText }}
-						</button>
-					</view>
-					<view class="message-error">{{ form['bindMobile'].error.mobile || '' }}</view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">验证码</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							@blur="checkValue($event, 'code')"
-							@input="checkValue($event, 'code')"
-							placeholder="请输入验证码"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['bindMobile'].data.code"
-							type="number"
-						></u-input>
-						<button class="u-reset-button login-btn-start" @tap="bindMobileSubmit">立即绑定</button>
-					</view>
-					<view class="message-error">{{ form['bindMobile'].error.code || '' }}</view>
-				</view>
-			</view>
-
-			<!-- 6.修改密码 -->
-			<view v-if="authType === 'changePwd'">
-				<view class="head-box u-m-b-60">
-					<view class="head-title u-m-b-20">修改密码</view>
-					<view class="head-subtitle"></view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">旧密码</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							@blur="checkValue($event, 'oldPassword')"
-							@input="checkValue($event, 'oldPassword')"
-							placeholder="请输入旧密码"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['changePwd'].data.oldPassword"
-							type="password"
-						></u-input>
-					</view>
-					<view class="message-error">{{ form['changePwd'].error.oldPassword || '' }}</view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">新密码</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							@blur="checkValue($event, 'newPassword')"
-							@input="checkValue($event, 'newPassword')"
-							placeholder="请输入新密码"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['changePwd'].data.newPassword"
-							type="password"
-						></u-input>
-					</view>
-					<view class="message-error">{{ form['changePwd'].error.newPassword || '' }}</view>
-				</view>
-				<view class="form-item u-border-bottom">
-					<view class="item-content u-flex u-col-center">
-						<view class="item-title">确认密码</view>
-						<u-input
-							class="u-m-r-10 u-flex-1"
-							@blur="checkValue($event, 'reNewPassword')"
-							@input="checkValue($event, 'reNewPassword')"
-							placeholder="再次输入新密码"
-							:placeholderStyle="placeholderStyle"
-							v-model="form['changePwd'].data.reNewPassword"
-							type="password"
-						></u-input>
-					</view>
-					<view class="message-error">{{ form['changePwd'].error.reNewPassword || '' }}</view>
-				</view>
-				<view class="editPwd-btn-box u-m-t-80">
-					<button class="u-reset-button save-btn" @tap="changePwdSubmit">保存</button>
-					<button class="u-reset-button forgot-btn" @tap="showAuthModal('forgotPwd')">忘记密码</button>
-				</view>
-			</view>
-
-			<!-- 第三方登录 -->
-			<view v-if="authType === 'accountLogin' || authType === 'smsLogin'" class="auto-login-box u-flex u-row-center u-col-center">
-				<!-- 微信 -->
-				<image
-					v-if="['App', 'wxOfficialAccount', 'wxMiniProgram'].includes(platform)"
-					class="auto-login-img"
-					@tap="thirdLogin('wechat')"
-					:src="$IMG_URL + '/imgs/auto_login_wx.png'"
-				></image>
-				<!-- 支付宝 -->
-				<!-- <image
-					v-if="['App', 'alipayMiniProgram', 'H5'].includes(platform)"
-					class="auto-login-img"
-					@tap="thirdLogin('alipay')"
-					:src="$IMG_URL + '/imgs/auto_login_ali.png'"
-					mode=""
-				></image> -->
-				<!-- 苹果 -->
-				<!-- #ifdef APP-PLUS -->
-				<image v-if="device === 'ios'" class="auto-login-img" @tap="thirdLogin('apple')" :src="$IMG_URL + '/imgs/auto_login_iphone.png'"></image>
-				<!-- #endif -->
-			</view>
-
-			<!-- 协议 -->
-			<view v-if="['accountLogin', 'smsLogin', 'register'].includes(authType)" class="agreement-box u-flex u-row-center">
-				<u-checkbox v-model="protocol" shape="circle" active-color="#E9B461">
-					<view class="agreement-text tcp-text u-flex u-col-center">
-						我已阅读并遵守
-						<view class="tcp-text u-flex u-col-center">
-							<view @tap.stop="$Router.push({ path: '/pages/public/richtext', query: { id: initShop.user_protocol || 0 } })">《用户协议》</view>
-							与
-							<view @tap.stop="$Router.push({ path: '/pages/public/richtext', query: { id: initShop.privacy_protocol || 0 } })">《隐私协议》</view>
-						</view>
-					</view>
-				</u-checkbox>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-/**
- * 登录提示页
- */
-import FormValidate from '@/shopro/validate/form';
-import schema from '@/uview-ui/libs/util/async-validator';
-import wechat from '@/shopro/wechat/wechat';
-import { mapMutations, mapActions, mapState, mapGetters } from 'vuex';
-// #ifdef APP-PLUS
-import apple from '@/shopro/apple';
-// #endif
-
-export default {
-	name: 'shoproAuthModal',
-	data() {
-		return {
-			platform: this.$platform.get(),
-			device: this.$platform.device(),
-			form: {
-				// 1.账号密码登录
-				accountLogin: {
-					data: {
-						account: '', // 账号
-						password: '' // 密码
-					},
-					rules: {
-						account: FormValidate.account,
-						password: FormValidate.password
-					},
-					error: {
-						account: '',
-						password: ''
-					}
-				},
-
-				// 2.短信登录
-				smsLogin: {
-					data: {
-						mobile: '', // 手机号
-						code: '', // 验证码
-						isMobileEnd: false // 手机号输入完毕
-					},
-					rules: {
-						code: FormValidate.code,
-						mobile: FormValidate.mobile
-					},
-					error: {
-						mobile: '', // 手机号
-						code: '' // 验证码
-					}
-				},
-				// 3.注册
-				register: {
-					data: {
-						mobile: '', // 手机号
-						code: '', // 验证码
-						password: '', // 密码
-						isMobileEnd: false // 手机号输入完毕
-					},
-					rules: {
-						code: FormValidate.code,
-						mobile: FormValidate.mobile,
-						password: FormValidate.password
-					},
-					error: {
-						mobile: '', // 手机号
-						code: '', // 验证码
-						password: '' // 密码
-					}
-				},
-
-				// 4.忘记密码
-				forgotPwd: {
-					data: {
-						mobile: '', //手机号
-						code: '', //验证码
-						password: '', //密码
-						isMobileEnd: false // 手机号输入完毕
-					},
-					rules: {
-						mobile: FormValidate.mobile,
-						code: FormValidate.code,
-						password: FormValidate.password
-					},
-					error: {
-						mobile: '', //手机号
-						code: '', //验证码
-						password: '' //密码
-					}
-				},
-				// 5.绑定手机号
-				bindMobile: {
-					data: {
-						mobile: '', //手机号
-						code: '', //验证码
-						isMobileEnd: false // 手机号输入完毕
-					},
-					rules: {
-						code: FormValidate.code,
-						mobile: FormValidate.mobile
-					},
-					error: {
-						mobile: '', //手机号
-						code: '' //验证码
-					}
-				},
-				// 6.修改密码
-				changePwd: {
-					data: {
-						oldPassword: '', //旧密码
-						newPassword: '', //新密码
-						reNewPassword: '' //确认密码
-					},
-					rules: {
-						oldPassword: FormValidate.password,
-						newPassword: FormValidate.password,
-						reNewPassword: [
-							{
-								required: true,
-								message: '请重新输入密码',
-								trigger: ['change', 'blur']
-							},
-							{
-								validator: (rule, value, callback) => {
-									return value === this.form.changePwd.data.newPassword;
-								},
-								message: '两次输入的密码不一致',
-								trigger: ['change', 'blur']
-							}
-						]
-					},
-					error: {
-						oldPassword: '', //旧密码
-						newPassword: '', //新密码
-						reNewPassword: '' //确认密码
-					}
-				}
-			},
-			codeText: '获取验证码',
-			disabledCode: false,
-			protocol: false, //是否同意隐私协议
-			placeholderStyle: 'font-size: 30rpx; font-weight: 500;color:#C2C7CF;'
-		};
-	},
-
-	computed: {
-		...mapGetters(['initShop', 'isLogin', 'authType']),
-		showAuth: {
-			get() {
-				return !!this.authType;
-			},
-			set(value) {
-				value ? uni.hideTabBar() : uni.showTabBar();
-			}
-		}
-	},
-	mounted() {},
-	methods: {
-		...mapActions(['getUserInfo', 'showAuthModal']),
-
-		// 检测
-		checkValue(e, key) {
-			this.validation(key);
-		},
-
-		// 校验数据
-		validation(key, callback = () => {}) {
-			let that = this;
-			//拿到需要校验的数据
-			let fieldValue = this.form[this.authType].data[key];
-			//拿到需要检验的规则
-			let rules = this.form[this.authType].rules[key];
-			// 判空
-			if (!rules || rules.length === 0) {
-				return callback('');
-			}
-			// 设置当前的装填,标识为校验中
-			let validateState = 'validating';
-			// 调用async-validator的方法
-			let validator = new schema({
-				[key]: rules
-			});
-			// 校验
-			validator.validate(
-				{
-					[key]: fieldValue
-				},
-				{
-					firstFields: true
-				},
-				(errors, fields) => {
-					// 记录状态和报错信息
-					validateState = !errors ? 'success' : 'error';
-					let validateMessage = errors ? errors[0].message : '';
-					that.form[that.authType].error[key] = validateMessage;
-					callback(validateMessage);
-				}
-			);
-		},
-
-		// 校验全部数据
-		validateAll(callback) {
-			let that = this;
-			return new Promise(resolve => {
-				// 对当前所有表单检验
-				let valid = true; // 默认通过
-				let count = 0; // 用于标记是否检查完毕
-				let errorArr = []; // 存放错误信息
-				let curFormData = that.form[that.authType].data;
-				Object.keys(curFormData).map(field => {
-					that.validation(field, error => {
-						// 如果回调有error
-						if (error) {
-							valid = false;
-							errorArr.push(error);
-						}
-						if (++count === Object.keys(curFormData).length) {
-							resolve(valid);
-							if (errorArr.length) {
-								this.$u.toast(errorArr[0]);
-							}
-							if (typeof callback == 'function') callback(valid);
-						}
-					});
-				});
-			});
-		},
-
-		// 手机号是否输入完毕
-		mobileInput(e, key) {
-			this.form[this.authType].data.isMobileEnd = this.$u.test.mobile(this.form[this.authType].data.mobile);
-			this.validation(key);
-		},
-
-		closeAuthModal() {
-			this.$store.dispatch('showAuthModal', '');
-		},
-
-		// 获取短信验证码
-		getSmsCode(type) {
-			const that = this;
-			if (that.form[this.authType].data.isMobileEnd && !that.disabledCode) {
-				that.$http(
-					'common.smsSend',
-					{
-						mobile: that.form[this.authType].data.mobile,
-						event: type
-					},
-					'获取验证码中...'
-				).then(res => {
-					if (res.code === 1) {
-						that.codeChange();
-						that.$u.toast('验证码已发送,请注意查收短信');
-					} else {
-						that.$u.toast(res.msg);
-					}
-				});
-			} else {
-				that.$u.toast('请稍后再试');
-			}
-		},
-
-		// 倒计时
-		codeChange() {
-			if (this.disabledCode) return;
-			this.disabledCode = true;
-			let n = 10;
-			this.codeText = n + 's';
-			const run = setInterval(() => {
-				n -= 1;
-				if (n < 0) {
-					clearInterval(run);
-				}
-				this.codeText = n + 's';
-				if (this.codeText < 0 + 's') {
-					this.disabledCode = false;
-					this.codeText = '重新获取';
-				}
-			}, 1000);
-		},
-
-		// 规则校验
-		validateSubmit() {
-			if (['accountLogin', 'smsLogin', 'register'].includes(this.authType) && !this.protocol) {
-				this.$u.toast('请同意用户协议');
-				return false;
-			}
-			return this.validateAll();
-		},
-
-		// 第三方登录
-		async thirdLogin(provider) {
-			if (!this.protocol) {
-				this.$u.toast('请同意用户协议');
-				return false;
-			}
-			const that = this;
-			let token = '';
-			switch (provider) {
-				case 'wechat':
-					token = await wechat.login();
-					break;
-				case 'alipay':
-					break;
-				case 'apple':
-					token = await apple.appleIdOauth();
-					break;
-				default:
-					break;
-			}
-			if (token) {
-				that.closeAuthModal();
-				that.getUserInfo(token);
-			}
-		},
-
-		// 1.账号登录
-		async accountLoginSubmit() {
-			let that = this;
-			(await that.validateSubmit()) &&
-				that
-					.$http(
-						'user.accountLogin',
-						{
-							account: that.form['accountLogin'].data.account,
-							password: that.form['accountLogin'].data.password
-						},
-						'登录中...'
-					)
-					.then(res => {
-						if (res.code === 1) {
-							that.closeAuthModal();
-							that.getUserInfo(res.data.token);
-							that.$u.toast(res.msg);
-						}
-					});
-		},
-
-		// 2.短信登录
-		async smsLoginSubmit() {
-			let that = this;
-			(await that.validateSubmit()) &&
-				that
-					.$http(
-						'user.smsLogin',
-						{
-							mobile: that.form['smsLogin'].data.mobile,
-							code: that.form['smsLogin'].data.code
-						},
-						'登录中...'
-					)
-					.then(res => {
-						if (res.code === 1) {
-							that.closeAuthModal();
-							that.getUserInfo(res.data.token);
-							that.$u.toast(res.msg);
-						}
-					});
-		},
-
-		// 3.注册
-		async registerSubmit() {
-			let that = this;
-			(await that.validateSubmit()) &&
-				that
-					.$http(
-						'user.register',
-						{
-							mobile: that.form['register'].data.mobile,
-							code: that.form['register'].data.code,
-							password: that.form['register'].data.password
-						},
-						'注册中...'
-					)
-					.then(res => {
-						if (res.code === 1) {
-							that.$u.toast(res.msg);
-							that.closeAuthModal();
-							that.getUserInfo(res.data.token);
-						}
-					});
-		},
-
-		// 4.忘记密码
-		async forgotPwdSubmit() {
-			let that = this;
-			(await that.validateSubmit()) &&
-				that
-					.$http(
-						'user.forgotPwd',
-						{
-							mobile: that.form['forgotPwd'].data.mobile,
-							code: that.form['forgotPwd'].data.code,
-							password: that.form['forgotPwd'].data.password
-						},
-						'修改中...'
-					)
-					.then(res => {
-						if (res.code === 1) {
-							that.$u.toast(res.msg);
-							if (that.isLogin) {
-								that.closeAuthModal();
-							} else {
-								that.showAuthModal('accountLogin');
-							}
-						}
-					});
-		},
-
-		// 5.绑定手机
-		async bindMobileSubmit() {
-			let that = this;
-			(await that.validateSubmit()) &&
-				that
-					.$http(
-						'user.bindMobile',
-						{
-							mobile: that.form['bindMobile'].data.mobile,
-							code: that.form['bindMobile'].data.code,
-							password: that.form['bindMobile'].data.password
-						},
-						'绑定中...'
-					)
-					.then(res => {
-						if (res.code === 1) {
-							that.$u.toast(res.msg);
-							that.closeAuthModal();
-							that.getUserInfo();
-						}
-					});
-		},
-
-		// 6.修改密码
-		async changePwdSubmit() {
-			let that = this;
-			(await that.validateSubmit()) &&
-				that
-					.$http(
-						'user.changePwd',
-						{
-							oldpassword: that.form['changePwd'].data.oldPassword,
-							newpassword: that.form['changePwd'].data.newPassword
-						},
-						'修改中...'
-					)
-					.then(res => {
-						if (res.code === 1) {
-							that.closeAuthModal();
-							that.$u.toast(res.msg);
-							that.getUserInfo(res.data.userinfo.token);
-						}
-					});
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-@keyframes title-animation {
-	0% {
-		font-size: 32rpx;
-	}
-
-	100% {
-		font-size: 36rpx;
-	}
-}
-
-.form-wrap {
-	.form-item {
-		display: flex;
-		flex-direction: column;
-		font-size: 28rpx;
-		padding: 20rpx 0;
-		color: $u-main-color;
-		box-sizing: border-box;
-		line-height: $u-form-item-height;
-		width: 100%;
-		.item-title {
-			width: 140rpx;
-			font-size: 30rpx;
-			color: #333;
-			font-weight: 600;
-			text-align: left;
-		}
-		.message-error {
-			text-align: left;
-			font-size: 24rpx;
-			line-height: 24rpx;
-			color: $u-type-error;
-			margin-top: 12rpx;
-			margin-left: 120rpx;
-		}
-	}
-}
-
-.login-wrap {
-	padding: 50rpx 34rpx;
-	min-height: 700rpx;
-	background-color: #fff;
-
-	.head-box {
-		.head-title {
-			min-width: 160rpx;
-			font-size: 36rpx;
-			font-weight: bold;
-			color: #333333;
-			line-height: 36rpx;
-		}
-		.head-title-active {
-			width: 160rpx;
-			font-size: 32rpx;
-			font-weight: 600;
-			color: #999;
-			line-height: 36rpx;
-		}
-		.head-title-animation {
-			animation-name: title-animation;
-			animation-duration: 0.1s;
-			animation-timing-function: ease-out;
-			animation-fill-mode: forwards;
-		}
-		.head-title-line {
-			position: relative;
-			&::before {
-				content: '';
-				width: 1rpx;
-				height: 34rpx;
-				background-color: #e4e7ed;
-				position: absolute;
-				left: -30rpx;
-				top: 50%;
-				transform: translateY(-50%);
-			}
-		}
-
-		.head-subtitle {
-			font-size: 26rpx;
-			font-weight: 400;
-			color: #c2c7cf;
-			text-align: left;
-			display: flex;
-		}
-	}
-	.code-btn[disabled] {
-		background-color: #fff;
-	}
-
-	.code-btn-start {
-		width: 160rpx;
-		line-height: 56rpx;
-		border: 1rpx solid #e9b766;
-		border-radius: 28rpx;
-		font-size: 26rpx;
-		font-weight: 400;
-		color: #e9b766;
-		opacity: 0.5;
-	}
-
-	.forgot-btn {
-		width: 160rpx;
-		line-height: 56rpx;
-		font-size: 30rpx;
-		font-weight: 500;
-		color: #999;
-	}
-
-	.code-btn-end {
-		opacity: 1 !important;
-	}
-
-	.login-btn-start {
-		width: 158rpx;
-		line-height: 56rpx;
-		background: linear-gradient(90deg, #e9b461, #eecc89);
-		border-radius: 28rpx;
-		font-size: 26rpx;
-		font-weight: 500;
-		color: #ffffff;
-	}
-
-	.type-btn {
-		padding: 20rpx;
-		margin: 40rpx auto;
-		width: 200rpx;
-		font-size: 30rpx;
-		font-weight: 500;
-		color: #999999;
-	}
-
-	.auto-login-box {
-		width: 100%;
-
-		.auto-login-img {
-			width: 68rpx;
-			height: 68rpx;
-			border-radius: 50%;
-			margin: 0 30rpx;
-		}
-	}
-
-	.agreement-box {
-		margin: 80rpx auto 0;
-		.protocol-check {
-			transform: scale(0.7);
-		}
-		.agreement-text {
-			font-size: 26rpx;
-			font-weight: 500;
-			color: #999999;
-
-			.tcp-text {
-				color: #e9b562;
-			}
-		}
-	}
-}
-
-// 修改密码
-.editPwd-btn-box {
-	.save-btn {
-		width: 690rpx;
-		line-height: 70rpx;
-		background: linear-gradient(90deg, #e9b461, #eecc89);
-		border-radius: 35rpx;
-		font-size: 28rpx;
-		font-weight: 500;
-		color: #ffffff;
-	}
-	.forgot-btn {
-		width: 690rpx;
-		line-height: 70rpx;
-		font-size: 28rpx;
-		font-weight: 500;
-		color: #999999;
-	}
-}
-</style>

+ 0 - 123
components/shopro-canvas/shopro-canvas.vue

@@ -1,123 +0,0 @@
-<template>
-	<view class="invite-poster-content">
-		<!-- TODO: 小程序端使用type='2d'会有报错 -->
-		<canvas class="hideCanvas" canvas-id="self_canvas" :style="{ width: (poster.width || 1) + 'px', height: (poster.height || 1) + 'px' }"></canvas>
-	</view>
-</template>
-
-<script>
-/**
- * shopro-canvas  - canvas
- * @property {Object} canvasParams - 自定义参数
- * @property {Boolean} isAutoInit = [true] - 是否自动渲染canvas
- */
-
-import _app from '@/shopro/poster/QS-SharePoster/app.js';
-import { getSharePoster } from '@/shopro/poster/QS-SharePoster/QS-SharePoster.js';
-import tools from '@/shopro/poster/tools.js';
-import { mapMutations, mapActions, mapState, mapGetters } from 'vuex';
-let ctx = null;
-export default {
-	components: {},
-	data() {
-		return {
-			poster: {},
-			canvasId: 'self_canvas'
-		};
-	},
-	props: {
-		canvasParams: {
-			type: Object,
-			default: () => {}
-		},
-		isAutoInit: {
-			type: Boolean,
-			default: true
-		}
-	},
-	computed: {
-		...mapGetters(['initShare', 'userInfo'])
-	},
-	async mounted() {
-		ctx = uni.createCanvasContext(this.canvasId, this);
-		ctx && this.isAutoInit && this.shareFc();
-	},
-	methods: {
-		async shareFc() {
-			let that = this;
-			_app.showLoading('绘制中...');
-			let config = {};
-			if (that.canvasParams.backgroundImage) {
-				config = {
-					backgroundImage: tools.checkImgHttp(that.canvasParams.backgroundImage, 'bgImage')
-				};
-			}
-			if (that.canvasParams.background) {
-				config = {
-					background: {
-						width: that.canvasParams.background?.width || 100,
-						height: that.canvasParams.background?.height || 100,
-						backgroundColor: that.canvasParams.background?.color || '#000'
-					}
-				};
-			}
-
-			try {
-				_app.log('准备生成:' + new Date());
-				const d = await getSharePoster({
-					_this: that, //若在组件中使用 必传
-					...config,
-					posterCanvasId: that.canvasId, //canvasId
-					Context: ctx,
-					delayTimeScale: 10, //延时系数
-					draw: false, //是否执行ctx.draw方法, 推荐false,自己去draw
-					drawArray: ({ bgObj, type, bgScale }) => {
-						let arr = tools.initDrawArray(bgObj, that.canvasParams.drawArray);
-						return new Promise((rs, rj) => {
-							rs(arr);
-						});
-					},
-					setCanvasWH: ({ bgObj, type, bgScale }) => {
-						// 为动态设置画布宽高的方法,
-						this.poster = bgObj;
-					}
-				});
-				await that.drawPoster();
-			} catch (e) {
-				_app.hideLoading();
-				_app.showToast(JSON.stringify(e));
-				console.log(JSON.stringify(e));
-			}
-		},
-		async drawPoster() {
-			let that = this;
-			ctx.draw(false, () => {
-				uni.canvasToTempFilePath(
-					{
-						canvasId: that.canvasId,
-						success: res => {
-							_app.hideLoading();
-							that.$emit('success', res.tempFilePath);
-							_app.log('海报生成成功, 时间:' + new Date() + ', 临时路径: ' + res.tempFilePath);
-						},
-						fail: err => {
-							_app.hideLoading();
-							console.log('生成异常', err);
-						}
-					},
-					that
-				);
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.hideCanvas {
-	position: fixed;
-	top: -99999upx;
-	left: -99999upx;
-	z-index: -99999;
-}
-</style>

+ 0 - 176
components/shopro-coupon/shopro-coupon.vue

@@ -1,176 +0,0 @@
-<template>
-	<view class="">
-		<!-- 未领取,已领取 -->
-		<view class="coupon-wrap" :style="gradientColor" :class="{ 'gray-wrap': state === 3 || state === 2 || couponData.status_code == 'cannot_get' }">
-			<view class="coupon-item u-flex u-row-between">
-				<view class="coupon-left  u-flex-col ">
-					<view class="sum-box">
-						<text class="unit " :style="{ color: priceColor }">¥</text>
-						<text class="sum " :style="{ color: priceColor }">{{ couponData.amount }}</text>
-						<text class="sub " :style="{ color: priceColor }">{{ couponData.name }}</text>
-					</view>
-					<view class="notice " :style="{ color: color }">满{{ couponData.enough }}元可用</view>
-					<view class="notice" :style="{ color: color }">
-						有效期:{{ $u.timeFormat(couponData.usetime.start, 'yyyy-mm-dd') }} 至 {{ $u.timeFormat(couponData.usetime.end, 'yyyy-mm-dd') }}
-					</view>
-				</view>
-				<view class="coupon-right u-flex-col">
-					<button class="get-btn" :style="{ color: btnTextColor }" v-if="state === 0" @tap.stop="getCoupon">{{ stateMap[couponData.status_code] || '立即领取' }}</button>
-					<button class="get-btn" :style="{ color: btnTextColor }" v-if="state === 1">去使用</button>
-					<button class="get-btn" :style="{ color: btnTextColor }" v-if="state === 2">暂不可用</button>
-					<button class="get-btn" v-if="state === 3">{{ stateMap[couponData.status_code] }}</button>
-					<view class="surplus-num" :style="{ color: color }" v-if="state === 0">仅剩{{ stock }}张</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-/**
- * shoproCoupon-优惠券
- * @property {Number} state - 0:立即领取,1:去使用,2:查看详情,3:已失效。
- * @property {Object} couponData - 优惠劵数据。
- * @property {String} gradientColor - 渐变色。
- */
-export default {
-	components: {},
-	data() {
-		return {
-			stock: 0,
-			stateMap: {
-				can_use: '立即使用',
-				used: '已使用',
-				expired: '已失效',
-				cannot_use: '暂不可用',
-				can_get: '立即领取',
-				cannot_get: '已领取'
-			}
-		};
-	},
-	props: {
-		state: 0, //0:立即领取,1:去使用,2:查看详情,3:已失效。
-		couponData: {},
-		gradientColor: {
-			type: String,
-			default: ''
-		},
-		color: {
-			type: String,
-			default: ''
-		},
-		btnTextColor: {
-			type: String,
-			default: ''
-		},
-		priceColor: {
-			type: String,
-			default: ''
-		}
-	},
-	computed: {},
-	created() {
-		this.$nextTick(() => {
-			this.stock = this.couponData.stock;
-		});
-	},
-	methods: {
-		getCoupon() {
-			let that = this;
-
-			that.$http(
-				'coupons.get',
-				{
-					id: that.couponData.id
-				},
-				'领取中...'
-			).then(res => {
-				if (res.code === 1) {
-					that.stock -= 1;
-					that.$u.toast('领取成功');
-				}
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-// 失效
-.gray-wrap {
-	-webkit-filter: grayscale(1); /* Webkit */
-	filter: gray; /* IE6-9 */
-	filter: grayscale(1); /* W3C */
-}
-// 未领取,已领取
-.coupon-wrap {
-	mask: url($IMG_URL+'/imgs/coupon_bg1.png');
-	-webkit-mask-box-image: url($IMG_URL+'/imgs/coupon_bg1.png');
-	mask-size: 100% 100%;
-	position: relative;
-	border-radius: 10rpx;
-	width: 710rpx;
-	height: 170rpx;
-	background: linear-gradient(to right, $u-type-warning-disabled, $u-type-warning);
-	.coupon-item {
-		width: 100%;
-		height: 168rpx;
-		border-radius: 10rpx;
-
-		.coupon-left {
-			height: 100%;
-			justify-content: center;
-			padding-left: 40rpx;
-
-			.unit {
-				font-size: 24rpx;
-				color: #fff;
-			}
-
-			.sum {
-				font-size: 55rpx;
-				font-weight: bold;
-				color: #fff;
-				line-height: 55rpx;
-				padding-right: 10rpx;
-			}
-
-			.sub {
-				font-size: 26rpx;
-				color: #fff;
-			}
-
-			.notice {
-				font-size: 22rpx;
-				color: rgba(#fff, 0.7);
-				margin-top: 6rpx;
-			}
-		}
-
-		.coupon-right {
-			height: 100%;
-			width: 220rpx;
-			justify-content: center;
-			align-items: center;
-
-			.get-btn {
-				width: 142rpx;
-				height: 54rpx;
-				background: #ffffff;
-				border-radius: 27rpx;
-				padding: 0;
-				font-size: 24rpx;
-				font-weight: 500;
-				color: $u-type-warning;
-			}
-
-			.surplus-num {
-				font-size: 22rpx;
-				font-weight: 500;
-				color: #fff;
-				margin-top: 14rpx;
-			}
-		}
-	}
-}
-</style>

+ 0 - 77
components/shopro-empty/shopro-empty.vue

@@ -1,77 +0,0 @@
-<template>
-	<view class="shopro-empty-wrap u-flex-col u-row-center u-col-center" :style="{ 'margin-top': marginTop }">
-		<image class="empty-img" :src="image" mode="aspectFill"></image>
-		<view class="empty-text u-tips-color u-font-26">{{ tipText }}</view>
-		<view class="btn-box u-m-t-100" v-if="btnText">
-			<button class="u-reset-button empty-btn" :style="customStyle" hover-class="none" @tap="onBtn">{{ btnText }}</button>
-		</view>
-	</view>
-</template>
-
-<script>
-/**
- * shoproEmpty- 数据为空页
- * @property {String} image - 空白图。
- * @property {String} tipText - 提示语。
- * @property {String} btnText - 按钮文字。
- * @property {String} marginTop - 距离父级距离。
- * @property {Object} customStyle - 自定义按钮样式。
- * @event {Fuction} click - 点击按钮
- */
-export default {
-	name: 'shoproEmpty',
-	props: {
-		image: {
-			type: [String,null],
-			default: '/static/images/empty_network.png'
-		},
-		tipText: {
-			type: String,
-			default: ''
-		},
-		btnText: {
-			type: String,
-			default: ''
-		},
-		marginTop: {
-			type: String,
-			default: '300rpx'
-		},
-		customStyle: {
-			type: Object,
-			default: () => {
-				return {
-					width: '200rpx',
-					height: '70rpx',
-					background: 'linear-gradient(90deg, rgba(233, 180, 97, 1), rgba(238, 204, 137, 1))',
-					borderRradius: '35rpx',
-					fontSize: '28rpx',
-					color: '#fff',
-					border: 0
-				};
-			}
-		}
-	},
-	methods: {
-		onBtn() {
-			this.$emit('click');
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.empty-img {
-	width: 540rpx;
-	height: 290rpx;
-}
-.empty-btn {
-	width: 320rpx;
-	height: 70rpx;
-	line-height: 70rpx;
-	background: linear-gradient(90deg, rgba(233, 180, 97, 1), rgba(238, 204, 137, 1));
-	border-radius: 35rpx;
-	font-size: 28rpx;
-	color: rgba(#fff, 0.9);
-}
-</style>

+ 0 - 184
components/shopro-float-btn/shopro-float-btn.vue

@@ -1,184 +0,0 @@
-<template>
-	<view class="" v-if="floatList && floatList.length">
-		<view class="cu-modal" :class="{ show: showMask }" @tap="hideMask"></view>
-		<!-- 悬浮按钮菜单 -->
-		<view class="shopro-float-btn">
-			<button class="wechat-btn u-reset-button" @tap="onBtn">
-				<image class="wechat_img" :src="floatList.length == 1 ? floatList[0].btnimage : floatData.image" mode="widthFix"></image>
-			</button>
-			<view :class="showBtnList ? 'float--active' : 'float-list-box'">
-				<view class="btn-img-box u-flex-col" @tap="onBtnItem(item)" v-for="item in floatList" :key="item.btnimage">
-					<view class="btn-item u-flex-col u-row-center u-col-center">
-						<image class="btn-img" :src="item.btnimage" mode="aspectFill"></image>
-						<view class="btn-name">{{ item.name }}</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<!-- 弹窗 -->
-		<view class="cu-modal" :class="{ show: showModal }" @tap="showModal = false">
-			<view class="cu-dialog" style="width: 610rpx;background: none;">
-				<view class="img-box"><image class="modal-img" :src="modalImg" mode="aspectFit" @tap="saveImage(modalImg)"></image></view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-/**
- * 悬浮按钮,悬浮菜单。全局通用,数据为vuex初始化导入。
- * @property {Array} floatList - 悬浮按钮菜单数据列表
- */
-import { mapMutations, mapActions, mapState, mapGetters } from 'vuex';
-import Auth from '@/shopro/permission/index.js';
-export default {
-	components: {},
-	data() {
-		return {
-			showBtnList: false, //列表弹出
-			modalImg: '', //子项图片弹出
-			showModal: false, //modal层
-			showMask: false,
-			platform: this.$platform.get()
-		};
-	},
-	props: {},
-	computed: {
-		...mapGetters(['floatData']),
-		// 悬浮按钮数据列表
-		floatList() {
-			if (this.floatData) {
-				return this.floatData.list;
-			}
-		}
-	},
-	created() {},
-	methods: {
-		hideMask() {
-			this.showBtnList = false;
-			this.showMask = false;
-		},
-		// 点击悬浮按钮
-		onBtn() {
-			this.showMask = !this.showMask;
-			if (this.floatList.length == 1) {
-				this.modalImg = this.floatList[0].image;
-				this.floatList[0].style == 2 ? this.$tools.routerTo(this.floatList[0].path) : (this.showModal = true);
-				this.showMask = false;
-			} else {
-				this.showBtnList = !this.showBtnList;
-			}
-		},
-		// 点击按钮菜单,如果悬浮按钮数据为一条,按钮图片为唯一菜单项图片和标题
-		onBtnItem(item) {
-			if (item.style == 2) {
-				this.showMask = false;
-				this.showModal = false;
-				this.showBtnList = false;
-				this.$tools.routerTo(item.path);
-			} else {
-				this.modalImg = item.image;
-				this.showMask = false;
-				this.showModal = true;
-				this.showBtnList = false;
-				!item.image && console.log(`%cerr:弹窗图片未配置`, 'color:green;background:yellow');
-			}
-		},
-
-		saveImageToPhotosAlbum(path) {
-			uni.saveImageToPhotosAlbum({
-				filePath: path,
-				success: res => {
-					this.showMask = false;
-					this.showModal = false;
-					this.$u.toast('保存成功');
-				},
-				fail: err => {
-					console.log(`图片保存失败:`, err);
-					this.$u.toast('保存失败');
-				}
-			});
-		},
-		// 保存图片
-		async saveImage(path) {
-			let that = this;
-			if (['wxOfficialAccount', 'H5'].includes(this.platform)) {
-				this.$u.toast('长按图片保存');
-				return false;
-			}
-			let authState = await new Auth('writePhotosAlbum').check();
-			if (authState) {
-				// #ifdef MP ||APP-VUE
-				const res = await uni.downloadFile({
-					url: this.$tools.checkMPUrl(path)
-				});
-				res[1].statusCode === 200 && this.saveImageToPhotosAlbum(res[1].tempFilePath);
-				// #endif
-			}
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.shopro-float-btn {
-	position: fixed;
-	bottom: calc(var(--window-bottom) + 100rpx);
-	right: 30rpx;
-	z-index: 9999;
-	.float--active {
-		position: absolute;
-		bottom: 80rpx;
-		right: 0;
-		left: 0;
-		margin: 0 auto;
-		z-index: 10010;
-		transform: scale(1);
-		transition: all 0.2s linear;
-	}
-	.float-list-box {
-		position: absolute;
-		z-index: 10010;
-		bottom: 0;
-		right: 0;
-		left: 0;
-		margin: 0 auto;
-		transform: scale(0);
-		transform-origin: bottom;
-		opacity: 0;
-		transition: all 0.2s linear;
-	}
-	.btn-item {
-		margin-bottom: 20rpx;
-		.btn-img {
-			width: 60rpx;
-			height: 60rpx;
-		}
-		.btn-name {
-			font-size: 20rpx;
-			color: #fff;
-			text-align: center;
-			white-space: nowrap;
-		}
-	}
-	.wechat-btn {
-		box-shadow: 0px 0px 20px 4px rgba(199, 199, 199, 0.22);
-		border-radius: 50%;
-		width: 80rpx;
-		height: 80rpx;
-		.wechat_img {
-			width: 80rpx;
-			height: 80rpx;
-		}
-	}
-}
-.img-box {
-	position: relative;
-	width: 610rpx;
-	.modal-img {
-		width: 100%;
-		will-change: transform;
-		height: 830rpx;
-	}
-}
-</style>

+ 0 - 348
components/shopro-goods-card/shopro-goods-card.vue

@@ -1,348 +0,0 @@
-<template>
-	<!-- m -->
-	<view class="goods-box" @tap="click">
-		<view class="img-box">
-			<image class="goods-img" lazy-load fade-show :src="image" mode="aspectFill"></image>
-		</view>
-		<view class="goods-bottom u-p-14"
-			:style="type ? 'background-image: url(' + $IMG_URL + typeMap[type].goodsBg + ')' : ''">
-			<view class="title u-ellipsis-2 u-m-b-10">
-				<view class=" sm cu-tag radius title-tag u-m-r-10"
-					:style="{ backgroundColor: typeMap[type].tagBg, color: '#fff' }" v-if="type">
-					{{ typeMap[type].text }}
-				</view>
-				{{ title }}
-			</view>
-			<view class="sub-title u-ellipsis-1 u-m-b-10" v-show="subtitle">{{ subtitle }}</view>
-			<view class="u-m-b-20">
-				<view class="cu-tag line-red sm radius" v-for="(item, index) in tagTextList" :key="index">{{ item }}
-				</view>
-			</view>
-
-			<slot name="cardBottom">
-				<view class="u-flex u-col-center u-row-between">
-					<view class="price-box">
-						<view class="price u-m-b-10">{{ price }}</view>
-						<view class="origin-price">¥{{ originPrice }}</view>
-					</view>
-					<!-- 加入购物车 -->
-					<view class="cart-box">
-						<!-- 单规格 -->
-						<view class="" v-if="!detail.is_sku">
-							<button class="u-reset-button cart-btn u-flex u-col-center u-row-center"
-								v-if="!isCart(detail.id)" @tap.stop="addCart(detail.sku_price[0])">
-								<view class="u-iconfont uicon-shopping-cart-fill" style="color: #fff;"></view>
-							</button>
-							<view class="num-step" @tap.stop v-else>
-								<u-number-box :value="checkCart[detail.id].num" :min="0" :step="1" :long-press="false"
-									:max="detail.sku_price[0].stock  > 999 ? 999 : detail.sku_price[0].stock"
-									@min="onMin" @plus="plus($event, detail.sku_price[0])"
-									@change="onChangeNum($event, detail.sku_price[0])"></u-number-box>
-							</view>
-						</view>
-						<!-- 多规格 -->
-						<button class="u-reset-button item-btn cart-btn  u-flex u-col-center u-row-center"
-							@tap.stop="selSku(detail)" v-else>
-							<view class="u-iconfont uicon-shopping-cart-fill" style="color: #fff;"></view>
-						</button>
-					</view>
-				</view>
-			</slot>
-		</view>
-		<!-- 规格弹窗 -->
-		<shopro-sku v-if="showSku && goodsInfo.id" v-model="showSku" :goodsInfo="goodsInfo" buyType="cart"></shopro-sku>
-	</view>
-</template>
-
-<script>
-	/**
-	 *shoproGoodsCard - 商品列表卡片
-	 * @property {Object} detail - 商品详情
-	 * @property {String} type - 商品类型
-	 * @property {String} image - 商品图片
-	 * @property {String} title - 商品标题
-	 * @property {String} subtitle - 商品副标题
-	 * @property {String | Number} price - 商品价格
-	 * @property {String | Number} originPrice - 商品原价
-	 * @property {String | Number} sales - 商品销量
-	 * @property {Array} tagTextList - 活动标签
-	 * @event {Function} click 商品被点击
-	 */
-	import { mapMutations, mapActions, mapState, mapGetters } from 'vuex';
-	export default {
-		components: {},
-		data() {
-			return {
-				showSku: false,
-				goodsInfo: {}, //商品详情
-				typeMap: {
-					seckill: {
-						text: '秒杀',
-						tagBg: '#FF5854',
-						goodsBg: '/imgs/tag/seckill_y_bg.png'
-					},
-					groupon: {
-						text: '拼团',
-						tagBg: '#FE832A',
-						goodsBg: '/imgs/tag/groupon_y_bg.png'
-					}
-				}
-			};
-		},
-		computed: {
-			...mapGetters(['cartList', 'checkCart'])
-		},
-		props: {
-			detail: {
-				type: Object,
-				default: () => {
-					return {};
-				}
-			},
-			type: {
-				type: [String, null],
-				default: ''
-			},
-			image: {
-				type: String,
-				default: ''
-			},
-			title: {
-				type: String,
-				default: ''
-			},
-			subtitle: {
-				type: String,
-				default: ''
-			},
-			price: {
-				type: [String, Number],
-				default: ''
-			},
-			originPrice: {
-				type: [String, Number],
-				default: ''
-			},
-			sales: {
-				type: [String, Number],
-				default: ''
-			},
-			tagTextList: {
-				type: Array,
-				default: () => []
-			}
-		},
-		methods: {
-			...mapActions(['getCartList', 'changeCartList', 'addCartGoods']),
-			//点击商品
-			click() {
-				this.$emit('click');
-			},
-
-
-			// 检测是否为购物车商品
-			isCart(id) {
-				return Object.keys(this.checkCart).includes(id + '');
-			},
-
-			// 检测商品在购物车中的下标
-			checkGoodsIndex(id) {
-				let cIndex = 0;
-				this.cartList.forEach((item, index) => {
-					if (id == item.goods_id) {
-						cIndex = index;
-					}
-				});
-				return cIndex;
-			},
-
-			// 更改商品数
-			async onChangeNum(e, sku) {
-				let gIndex = this.checkGoodsIndex(sku.goods_id);
-				if (e.value != this.checkCart[sku.goods_id].num) {
-					uni.showLoading({
-						mask: true
-					});
-					this.$set(this.cartList[gIndex], 'goods_num', +e.value);
-					await this.changeCartList({
-						ids: [this.checkCart[sku.goods_id].cartOrderId],
-						goodsNum: +e.value,
-						art: 'change'
-					});
-
-					await uni.hideLoading();
-				}
-			},
-
-			// 到达最小值
-			onMin() {
-				const that = this;
-				let cartGoodId = 0;
-				cartGoodId = this.cartList.filter(item => item.goods_id === that.detail.id)[0].id;
-				uni.showModal({
-					title: '删除提示',
-					confirmColor: '#f0c785',
-					content: `是否确认从购物车中删除此商品?`,
-					success: res => {
-						res.confirm && this.changeCartList({ ids: [cartGoodId], art: 'delete' });
-					}
-				});
-			},
-
-			// 增加
-			plus(e, sku) {
-				if (e.value >= sku.stock) {
-					this.$u.toast('库存不足');
-					return;
-				}
-				if (this.detail.activity_type === 'seckill' || this.detail.activity_type === 'groupon') {
-					let rules = this.detail.activity.rules;
-					if (rules.limit_buy != 0 && e.value >= rules.limit_buy) {
-						this.$u.toast('本次活动最多购买' + rules.limit_buy + '件');
-						return;
-					}
-				}
-			},
-
-			// 添加购物车,多规格
-			async selSku(info) {
-				if (this.detail.activity_type) {
-					this.$Router.push({ path: '/pages/goods/detail', query: { id: this.detail.id } });
-					return;
-				}
-				this.goodsInfo = {};
-				this.getGoodsDetail(info.id);
-				this.showSku = true;
-			},
-
-			// 商品详情
-			getGoodsDetail(id) {
-				let that = this;
-				that.$http('goods.detail', {
-					id: id
-				}).then(res => {
-					if (res.code === 1) {
-						that.goodsInfo = res.data;
-					}
-				});
-			},
-
-			// 加入购物车
-			addCart(sku) {
-				if (sku.stock <= 0) {
-					this.$u.toast('库存不足');
-					return;
-				}
-				if (this.detail.activity_type) {
-					this.$Router.push({ path: '/pages/goods/detail', query: { id: this.detail.id } });
-					return;
-				}
-				let confirmGoodsList = {
-					list: [{
-						goods_id: sku.goods_id,
-						goods_num: 1,
-						sku_price_id: sku.id,
-						goods_price: sku.price
-					}],
-					from: 'goods'
-				};
-				this.addCartGoods(confirmGoodsList).then(res => {
-					if (res.code === 1) {
-						this.$u.toast(res.msg);
-					}
-				});
-			}
-		}
-	};
-</script>
-
-<style lang="scss">
-	.goods-box {
-		width: 345rpx;
-		background: #fff;
-		border-radius: 20rpx;
-		overflow: hidden;
-
-		.goods-bottom {
-			background-size: 100% 100%;
-			background-position: bottom center;
-			background-repeat: no-repeat;
-		}
-
-		.img-box {
-			width: 345rpx;
-			height: 345rpx;
-			overflow: hidden;
-			position: relative;
-			background-color: #fff;
-			border-radius: 6rpx;
-
-			.goods-img {
-				width: 345rpx;
-				height: 345rpx;
-				background-color: #ccc;
-			}
-		}
-
-		.title {
-			width: 330rpx;
-			vertical-align: center;
-			font-size: 28rpx;
-			font-weight: bold;
-			line-height: 40rpx;
-			color: #333333;
-			padding-top: 6rpx;
-
-			.title-tag {
-				position: relative;
-				top: -6rpx;
-			}
-		}
-
-		.sub-title {
-			font-size: 24rpx;
-			font-weight: 400;
-			width: 330rpx;
-			color: #999999;
-		}
-
-		.price-box {
-			.price {
-				font-size: 30rpx;
-				color: #ff3000;
-				font-weight: 600;
-
-				&::before {
-					content: '¥';
-					font-size: 24rpx;
-				}
-			}
-
-			.origin-price {
-				font-size: 26rpx;
-				font-weight: 400;
-				text-decoration: line-through;
-				color: #c4c4c4;
-			}
-
-			.sales-box {
-				font-size: 18rpx;
-
-				font-weight: 400;
-				color: #c4c4c4;
-				line-height: 20rpx;
-			}
-		}
-
-		// 购物车
-		.cart-box {
-			.cart-btn {
-				width: 54rpx;
-				height: 54rpx;
-				border-radius: 50%;
-				padding: 0;
-				background: linear-gradient(90deg, #e9b461, #eecc89);
-			}
-		}
-	}
-</style>

+ 0 - 361
components/shopro-live-card/shopro-live-card.vue

@@ -1,361 +0,0 @@
-<template>
-	<view class="live-card-wrap">
-		<!-- 小卡片 -->
-		<view class="sp-live-card" v-if="liveType == 2" :style="{ width: wh + 'rpx' }">
-			<view class="live-content" @tap="goRoom" :style="{ width: wh + 'rpx' }">
-				<image class="item-cover" :src="detail.share_img" mode="aspectFill"></image>
-				<view class="item-status">
-					<image class="status-img" :src="liveStatus[liveState].img" mode=""></image>
-					<text class="status-text">{{ liveStatus[liveState].title }}</text>
-				</view>
-				<view class="item-title u-ellipsis-1" :style="{ width: wh + 'rpx' }">{{ detail.name }}</view>
-			</view>
-			<view class="live-bottom" :style="{ width: wh + 'rpx' }">
-				<view class="live-info">
-					<view class="info-box">
-						<view class="info-name u-ellipsis-1" :style="{ width: wh + 'rpx' }">{{ detail.anchor_name }}</view>
-					</view>
-				</view>
-				<slot name="liveGoods">
-					<view class="live-goods" v-if="liveGoodsList.length">
-						<view class="live-goods__item" v-for="(goods, index) in liveGoodsList" :key="goods.id" v-if="index < 3">
-							<image class="live-goods__img" :src="goods.cover_img" mode=""></image>
-							<view class="live-goods__price" v-if="index < 2">¥{{ goods.price }}</view>
-							<view class="live-goods__mark" v-else>
-								<text>{{ liveGoodsList.length }}+</text>
-							</view>
-						</view>
-					</view>
-				</slot>
-			</view>
-		</view>
-		<!-- 大卡片 -->
-		<view class="big-card-wrap" v-if="liveType == 1">
-			<view class="content-one__item" @tap="goRoom">
-				<image class="item-cover" :src="detail.share_img" mode="widthFix"></image>
-				<view class="item-status">
-					<image class="status-img" :src="liveStatus[liveState].img" mode=""></image>
-					<text class="status-text">{{ liveStatus[liveState].title }}</text>
-				</view>
-				<view class="item-title u-ellipsis-1">{{ detail.name }}</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-/**
- * 小程序直播显示卡片
- * @property {Object} detail - 直播卡片显示数据
- * @property {Number} wh = [345] - 直播卡片宽度
- * @property {Number|String} style = 2 - 1:大卡片;2::小卡片
- */
-// #ifdef MP-WEIXIN
-import { HAS_LIVE } from '@/env';
-let livePlayer = null;
-// 全局配置文件控制是否开启直播组件,没有此项功能的小程序,运行会报错。
-if (HAS_LIVE) {
-	livePlayer = requirePlugin('live-player-plugin');
-}
-//  #endif
-let timer = null;
-export default {
-	name: 'shoproLiveCard',
-	components: {},
-	data() {
-		return {
-			liveType: this.type,
-			liveState: this.detail.live_status,
-			liveGoodsList: this.detail.goods,
-			liveStatus: {
-				'101': {
-					img: this.$IMG_URL + '/imgs/live/live.png',
-					title: '直播中'
-				},
-				'102': {
-					img: this.$IMG_URL + '/imgs/live/prevue.png',
-					title: '未开始'
-				},
-				'103': {
-					img: this.$IMG_URL + '/imgs/live/playback.png',
-					title: '已结束'
-				},
-				'104': {
-					img: this.$IMG_URL + '/imgs/live/104.png',
-					title: '禁播'
-				},
-				'105': {
-					img: this.$IMG_URL + '/imgs/live/105.png',
-					title: '暂停中'
-				},
-				'106': {
-					img: this.$IMG_URL + '/imgs/live/106.png',
-					title: '异常'
-				},
-				'107': {
-					img: this.$IMG_URL + '/imgs/live/past.png',
-					title: '已过期'
-				}
-			}
-		};
-	},
-	props: {
-		detail: {
-			type: Object,
-			default: null
-		},
-		wh: {
-			type: Number,
-			default: 345
-		},
-		type: {
-			type: [Number, String],
-			default: 2
-		}
-	},
-
-	computed: {},
-	created() {
-		this.getLiveStatus();
-	},
-	mounted() {
-		let that = this;
-		timer = setInterval(() => {
-			that.getLiveStatus();
-		}, 60000);
-	},
-	beforeDestroy() {
-		timer = null;
-		clearInterval(timer);
-	},
-	methods: {
-		goRoom() {
-			let that = this;
-			wx.navigateTo({
-				url: `plugin-private://wx2b03c6e691cd7370/pages/live-player-plugin?room_id=${that.detail.room_id}`
-			});
-		},
-		// 轮询liveStatus
-		getLiveStatus() {
-			if (HAS_LIVE) {
-				let that = this;
-				let date = '';
-
-				if (that.liveState == 102) {
-					date = that.$u.timeFormat(that.detail.starttime, 'mm-dd hh:MM');
-					that.liveStatus['102'].title = '预告 ' + date;
-				}
-				livePlayer
-					.getLiveStatus({ room_id: that.detail.room_id })
-					.then(res => {
-						// 101: 直播中, 102: 未开始, 103: 已结束, 104: 禁播, 105: 暂停中, 106: 异常,107:已过期
-						that.liveState = res.liveStatus;
-					})
-					.catch(err => {
-						console.log('get live status', err);
-					});
-			}
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-// 小卡片
-.sp-live-card {
-	width: 335rpx;
-	box-shadow: 0px 0px 10rpx 4rpx rgba(199, 199, 199, 0.22);
-	border-radius: 20rpx;
-	height: 100%;
-	overflow: auto;
-}
-.live-content {
-	position: relative;
-	width: 335rpx;
-	height: 335rpx;
-	overflow: hidden;
-	.item-cover {
-		background-color: #eee;
-		width: 100%;
-		height: 100%;
-		border-radius: 20rpx 20rpx 0 0;
-	}
-	.item-status {
-		position: absolute;
-		top: 20rpx;
-		left: 10rpx;
-		height: 40rpx;
-		background: rgba(0, 0, 0, 0.4);
-		border-radius: 20rpx;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		.status-img {
-			width: 40rpx;
-			height: 40rpx;
-		}
-		.status-text {
-			font-size: 22rpx;
-
-			font-weight: 500;
-			color: rgba(255, 255, 255, 1);
-			padding: 0 10rpx;
-		}
-	}
-	.item-title {
-		width: 335rpx;
-		position: absolute;
-		bottom: 0;
-		line-height: 60rpx;
-		padding: 0 20rpx;
-		font-size: 26rpx;
-		font-weight: 500;
-		color: rgba(255, 255, 255, 1);
-		background: linear-gradient(transparent, rgba(#000, 0.5));
-		padding-right: 60rpx;
-	}
-	.like-img {
-		position: absolute;
-		bottom: 20rpx;
-		right: 10rpx;
-		width: 60rpx;
-		height: 130rpx;
-	}
-}
-.live-bottom {
-	background-color: #fff;
-	padding: 20rpx;
-	width: 335rpx;
-	.live-info {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		width: 100%;
-		.info-box {
-			display: flex;
-			align-items: center;
-		}
-		.info-avatar {
-			width: 40rpx;
-			height: 40rpx;
-			border-radius: 50%;
-			margin-right: 10rpx;
-			background: #eee;
-		}
-		.info-name {
-			width: 150rpx;
-			font-size: 24rpx;
-
-			font-weight: 500;
-			color: rgba(51, 51, 51, 1);
-		}
-		.views {
-			font-size: 20rpx;
-			font-weight: 400;
-			color: rgba(153, 153, 153, 1);
-		}
-	}
-	.live-goods {
-		display: flex;
-		align-items: center;
-		margin-top: 20rpx;
-		&__item {
-			position: relative;
-			width: 96rpx;
-			height: 96rpx;
-			border: 1rpx solid rgba(238, 238, 238, 1);
-			border-radius: 10rpx;
-			overflow: hidden;
-			margin-right: 8rpx;
-			&:nth-child(3n) {
-				margin-right: 0;
-			}
-		}
-		&__img {
-			background: #eee;
-			width: 100%;
-			height: 100%;
-		}
-		&__price {
-			position: absolute;
-			bottom: 0;
-			line-height: 40rpx;
-			width: 100%;
-			background: linear-gradient(transparent, rgba(#000, 0.5));
-			font-size: 20rpx;
-			color: #fff;
-		}
-		&__mark {
-			position: absolute;
-			width: 100%;
-			height: 100%;
-			top: 0;
-			left: 0;
-			margin: auto;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			background: rgba(#000, 0.3);
-			font-size: 24rpx;
-			font-weight: 500;
-			color: rgba(255, 255, 255, 1);
-		}
-	}
-}
-// 单个大图直播
-.big-card-wrap {
-	.content-one__item {
-		position: relative;
-		height: 280rpx;
-		border-radius: 20rpx;
-		margin-top: 16rpx;
-		overflow: hidden;
-		.item-cover {
-			background-color: #eee;
-			width: 100%;
-			height: 100%;
-		}
-		.item-status {
-			position: absolute;
-			top: 20rpx;
-			left: 10rpx;
-			height: 40rpx;
-			background: rgba(0, 0, 0, 0.4);
-			border-radius: 20rpx;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			.status-img {
-				width: 38rpx;
-				height: 38rpx;
-			}
-			.status-text {
-				font-size: 22rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: rgba(255, 255, 255, 1);
-				padding: 0 10rpx;
-			}
-		}
-		.item-title {
-			width: 100%;
-			position: absolute;
-			bottom: 0;
-			line-height: 60rpx;
-			padding: 0 20rpx;
-			font-size: 26rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: rgba(255, 255, 255, 1);
-			background: linear-gradient(transparent, rgba(#000, 0.5));
-		}
-		.like-img {
-			position: absolute;
-			bottom: 20rpx;
-			right: 10rpx;
-			width: 60rpx;
-			height: 130rpx;
-		}
-	}
-}
-</style>

+ 0 - 130
components/shopro-mini-card/shopro-mini-card.vue

@@ -1,130 +0,0 @@
-<template>
-	<view class="goods-box u-flex u-col-top" @tap="click">
-		<view class="goods__tag" v-show="tag"><image class="tag-img" :src="tag" mode="widthFix"></image></view>
-		<image class="goods_img"  lazy-load fade-show :src="image" mode="aspectFill"></u-image>
-		<view class="u-m-l-20">
-			<view class="goods-title u-ellipsis-2 u-m-b-10">{{ title }}</view>
-			<view v-if="subtitle" class="describe-text u-m-b-10 u-ellipsis-1">{{ subtitle }}</view>
-			<slot name="describe"></slot>
-			<slot name="cardBottom">
-				<view class="u-flex u-col-bottom font-OPPOSANS">
-					<view class="price u-m-r-10">{{ price }}</view>
-					<view class="origin-price">{{ originPrice }}</view>
-				</view>
-			</slot>
-		</view>
-	</view>
-</template>
-
-<script>
-/**
- * 商品小卡片
- * @property {String} title - 标题
- * @property {String} subtitle - 副标题
- * @property {String} image - 图片地址
- * @property {String} describe - 描述信息
- * @property {String | Number} price - 价格
- * @property {String | Number} originPrice - 原价
- * @property {String} tag - 商品标签
- * @property {Number} number - 商品数量
- * @event {Function} click - 点击卡片
- */
-export default {
-	components: {},
-	data() {
-		return {};
-	},
-	props: {
-		image: {
-			type: String,
-			default: ''
-		},
-		title: {
-			type: String,
-			default: ''
-		},
-		subtitle: {
-			type: String,
-			default: ''
-		},
-		describe: {
-			type: String,
-			default: ''
-		},
-		price: {
-			type: [Number, String],
-			default: ''
-		},
-		originPrice: {
-			type: [Number, String],
-			default: ''
-		},
-		tag: {
-			type: String,
-			default: ''
-		},
-		number: {
-			type: Number,
-			default: 0
-		}
-	},
-	computed: {},
-	created() {},
-	methods: {
-		click() {
-			this.$emit('click');
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.goods-box {
-	position: relative;
-	.goods__tag {
-		position: absolute;
-		top: 0;
-		left: 0;
-		z-index: 5;
-		.tag-img {
-			width: 60rpx;
-		}
-	}
-	.goods_img{
-		width: 180rpx;
-		height: 180rpx;
-		border-radius: 6rpx;
-	}
-	.goods-title {
-		font-size: 28rpx;
-		font-weight: 500;
-		color: rgba(51, 51, 51, 1);
-		width: 450rpx;
-		line-height: 40rpx;
-	}
-
-	.describe-text {
-		font-size: 24rpx;
-		width: 450rpx;
-		color: #a8700d;
-	}
-
-	.price {
-		color: $u-type-error;
-		font-weight: 600;
-		&::before {
-			content: '¥';
-			font-size: 20rpx;
-		}
-	}
-	.origin-price {
-		color: $u-type-info-disabled;
-		font-size: 24rpx;
-		text-decoration: line-through;
-		&::before {
-			content: '¥';
-			font-size: 20rpx;
-		}
-	}
-}
-</style>

+ 0 - 130
components/shopro-navbar/shopro-navbar.vue

@@ -1,130 +0,0 @@
-<template>
-	<view>
-		<view class="cu-custom" :style="[{ height: customBar + 'px' }]">
-			<view class="cu-bar u-flex u-row-between" :class="{ fixed: isFixed }" :style="[style]">
-				<view class="action u-flex" @tap="goBack" v-if="isBack">
-					<view class="u-iconfont" :class="'uicon-' + backIconName" :style="{ color: backIconColor, fontSize: backIconSize + 'rpx' }"></view>
-					<view class="u-back-text u-line-1 u-m-l-20" v-if="backText" :style="[backTextStyle]">{{ backText || '' }}</view>
-				</view>
-				<view class="content" :style="[{ top: statusBarHeight + 'px' }]"><slot name="content"></slot></view>
-				<slot name="right"></slot>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-/**
- * shopro-navbar -自定义标题栏
- * @property {Boolean} isBack = [true] - 是否显示返回按钮
- * @property {Booelan} isFixed = [true] - 是否开启定位
- */
-
-// 获取系统状态栏的高度
-let systemInfo = uni.getSystemInfoSync();
-let menuButtonInfo = {};
-// #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ
-menuButtonInfo = uni.getMenuButtonBoundingClientRect();
-// #endif
-export default {
-	name: 'shopro-tabbar',
-	data() {
-		return {
-			statusBarHeight: systemInfo.statusBarHeight
-		};
-	},
-	computed: {
-		// tabbar样式
-		style() {
-			let statusBarHeight = systemInfo.statusBarHeight;
-			let style = {};
-			style.height = `${this.customBar}px`;
-			style.paddingTop = `${statusBarHeight}px`;
-			Object.assign(style, this.background);
-			return style;
-		},
-		// 高度
-		customBar() {
-			let statusBarHeight = systemInfo.statusBarHeight;
-			// #ifndef MP
-			return systemInfo.platform == 'android' ? statusBarHeight + 50 : statusBarHeight + 45;
-			// #endif
-			// #ifdef MP-WEIXIN
-			return menuButtonInfo.bottom + menuButtonInfo.top - statusBarHeight;
-			// #endif
-			// #ifdef MP-ALIPAY
-			return statusBarHeight + systemInfo.titleBarHeight;
-			// #endif
-		}
-	},
-	props: {
-		isBack: {
-			type: Boolean,
-			default: true
-		},
-		isFixed: {
-			type: Boolean,
-			default: true
-		},
-		background: {
-			type: Object,
-			default() {
-				return {
-					background: '#ffffff'
-				};
-			}
-		},
-		// 返回箭头的颜色
-		backIconColor: {
-			type: String,
-			default: '#606266'
-		},
-		// 左边返回的图标
-		backIconName: {
-			type: String,
-			default: 'arrow-left'
-		},
-		// 左边返回图标的大小,rpx
-		backIconSize: {
-			type: [String, Number],
-			default: '44'
-		},
-		// 返回的文字提示
-		backText: {
-			type: String,
-			default: ''
-		},
-		// 返回的文字的 样式
-		backTextStyle: {
-			type: Object,
-			default() {
-				return {
-					color: '#606266'
-				};
-			}
-		}
-	},
-	methods: {
-		goBack() {
-			uni.navigateBack();
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.cu-custom {
-	width: 100%;
-}
-.cu-bar {
-	width: 100%;
-	.content {
-		width: 560rpx;
-		display: flex;
-		flex-direction: row;
-		flex: 1;
-		align-items: center;
-		pointer-events: auto;
-	}
-}
-</style>

+ 0 - 71
components/shopro-notice-modal/shopro-notice-modal.vue

@@ -1,71 +0,0 @@
-<template>
-	<view class="popup-box" v-show="newPopupList && newPopupList.length">
-		<view class="" v-for="(p, index) in newPopupList" :key="index">
-			<view class="cu-modal" :class="{ show: showModal }" @tap="hideModal(p, index)" v-if="popupCurrent === index && p.image">
-				<view class="cu-dialog" style="width: 610rpx;background: none;">
-					<view class="img-box" @tap.stop="onPopup(p.path)"><image class="modal-img" :src="p.image" mode="aspectFit"></image></view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-/**
- * 广告模态框。连续弹窗和只弹一次。
- * @property {Object} newPopupList  - vuex 初始化传过来的数据
- */
-import { mapMutations, mapActions, mapState, mapGetters } from 'vuex';
-let timer = null;
-export default {
-	name: 'shoproNoticeModal',
-	components: {},
-	data() {
-		return {
-			popupCurrent: 0,
-			showModal: true
-		};
-	},
-	props: {},
-	computed: {
-		...mapGetters(['popupData', 'isLogin']),
-		newPopupList() {
-			if (this.popupData) {
-				return this.popupData.list;
-			}
-		}
-	},
-	beforeDestroy() {
-		clearTimeout(timer);
-		timer = null;
-	},
-	methods: {
-		hideModal(p, index) {
-			clearTimeout(timer);
-			this.showModal = false;
-			if (p.style == 1) {
-				this.$store.commit('delPopup', index);
-			}
-			timer = setTimeout(() => {
-				this.popupCurrent += 1;
-				this.showModal = true;
-			}, 500);
-		},
-		onPopup(path) {
-			this.$tools.routerTo(path);
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.img-box {
-	position: relative;
-	width: 610rpx;
-	.modal-img {
-		width: 100%;
-		will-change: transform;
-		height: 830rpx;
-	}
-}
-</style>

+ 0 - 571
components/shopro-share/shopro-share.vue

@@ -1,571 +0,0 @@
-<template>
-	<view class="content">
-		<!-- 海报弹窗 -->
-		<view class="cu-modal" :class="{ show: showPoster }" @tap="onClosePoster">
-			<view class="cu-dialog" style="width: 640rpx;background: none;">
-				<view class="poster-img-box"><image class="poster-img" :src="posterImage" mode="widthFix"></image></view>
-				<view class="poster-btn-box u-m-t-20 u-flex u-row-between u-col-center" v-show="posterImage">
-					<button class="cancel-btn u-reset-button" @tap="showPoster = false">取消</button>
-					<button class="save-btn u-reset-button" @tap="saveImage">{{ ['wxOfficialAccount', 'H5'].includes(platform) ? '长按图片保存' : '保存图片' }}</button>
-				</view>
-			</view>
-		</view>
-		<!-- 分享tools -->
-		<view class="cu-modal bottom-modal" :class="{ show: showShare }" @tap="showShare = false">
-			<view class="cu-dialog safe-area-inset-bottom" style="border-radius: 20rpx 20rpx 0 0;background: none;">
-				<view class="share-box">
-					<view class="share-list-box u-flex">
-						<!-- #ifdef MP-WEIXIN -->
-						<button class="share-item share-btn u-flex-col u-col-center" open-type="share">
-							<image class="share-img" :src="$IMG_URL + '/imgs/share/share_wx.png'" mode=""></image>
-							<text class="share-title">微信好友</text>
-						</button>
-						<!-- #endif -->
-						<!-- #ifndef MP-WEIXIN  -->
-						<view v-if="platform !== 'H5'" class="share-item u-flex-col u-col-center" @tap="shareFriend">
-							<image class="share-img" :src="$IMG_URL + '/imgs/share/share_wx.png'" mode=""></image>
-							<text class="share-title">微信好友</text>
-						</view>
-						<!-- #endif -->
-						<view class="share-item u-flex-col u-col-center" @tap="onPoster">
-							<image class="share-img" :src="$IMG_URL + '/imgs/share/share_poster.png'" mode=""></image>
-							<text class="share-title">生成海报</text>
-						</view>
-
-						<view class="share-item u-flex-col u-col-center" @tap="copySharePath">
-							<image class="share-img" :src="$IMG_URL + '/imgs/share/share_link.png'" mode=""></image>
-							<text class="share-title">复制链接</text>
-						</view>
-					</view>
-					<view class="share-foot u-flex u-row-center u-col-center" @tap="showShare = false">取消</view>
-				</view>
-			</view>
-		</view>
-		<!-- 分享指引 -->
-		<view class="cu-modal bottom-modal" :class="{ show: showShareGuide }" @tap="showShareGuide = false">
-			<view class="cu-dialog safe-area-inset-bottom" style="border-radius: 20rpx 20rpx 0 0;background: none;vertical-align: top;">
-				<view class="guide-wrap u-flex u-col-top u-row-center"><image class="guide-img" :src="$IMG_URL + '/imgs/share/share_guide.png'" mode=""></image></view>
-			</view>
-		</view>
-
-		<!-- 各海报模块 -->
-		<shopro-canvas v-if="showPoster" ref="shoproCanvas" :canvasParams="canvasParams" @success="onSuccess"></shopro-canvas>
-	</view>
-</template>
-<script>
-/**
- * 分享弹窗
- * @property {Boolean} value = showModal - v-model控制显隐
- * @property {String} posterType - 海报类别
- * @property {Object} posterInfo - 海报数据
- */
-import { mapMutations, mapActions, mapState, mapGetters } from 'vuex';
-import Auth from '@/shopro/permission/index.js';
-export default {
-	name: 'shoproShare',
-	components: {},
-	data() {
-		return {
-			showShareGuide: false, //H5的指引。
-			showPoster: false, //海报弹窗
-			platform: this.$platform.get(),
-			posterImage: '',
-			canvasParams: {}
-		};
-	},
-	props: {
-		posterType: {
-			type: String,
-			default: ''
-		},
-		posterInfo: {
-			type: Object,
-			default: () => {}
-		},
-		value: {}
-	},
-	computed: {
-		...mapGetters(['initShare', 'userInfo', 'isLogin', 'shareInfo']),
-		showShare: {
-			get() {
-				return this.value;
-			},
-			set(val) {
-				if (!this.showPoster) {
-					val ? uni.hideTabBar() : uni.showTabBar();
-				}
-				this.$emit('input', val);
-			}
-		}
-	},
-
-	created() {
-		uni.$on('ON_WX_SHARE', () => {
-			this.showShare = false;
-		});
-	},
-	methods: {
-		// 关闭弹窗
-		onClosePoster() {
-			this.showPoster = false;
-			uni.showTabBar();
-		},
-		// 绘制成功
-		onSuccess(e) {
-			this.posterImage = e;
-		},
-		// 开始绘制
-		onPoster() {
-			this.posterImage = '';
-			uni.hideTabBar();
-			if (this.$store.getters.isLogin) {
-				this.canvasParams = this.getPosterFormatter();
-				this.showPoster = true;
-			} else {
-				this.$store.dispatch('showAuthModal', 'accountLogin');
-			}
-			this.showShare = false;
-		},
-		// 分享好友
-		shareFriend() {
-			let that = this;
-			// #ifdef APP-PLUS
-			uni.share({
-				provider: 'weixin',
-				scene: 'WXSceneSession',
-				type: 0,
-				href: that.shareInfo.path,
-				title: that.shareInfo.title,
-				summary: that.shareInfo.title,
-				image: that.shareInfo.image,
-				success: res => {
-					console.log('success:' + JSON.stringify(res));
-					this.showShare = false;
-				},
-				fail: err => {
-					console.log('fail:' + JSON.stringify(err));
-				}
-			});
-			// #endif
-			// #ifdef H5
-			this.showShare = false;
-			this.showShareGuide = true;
-			// #endif
-		},
-
-		// 保存图片
-		async saveImage() {
-			let that = this;
-			if (['wxOfficialAccount', 'H5'].includes(this.platform)) {
-				this.$u.toast('长按图片保存');
-				return false;
-			}
-			let authState = await new Auth('writePhotosAlbum').check();
-			if (authState) {
-				uni.saveImageToPhotosAlbum({
-					filePath: that.posterImage,
-					success: res => {
-						this.$u.toast('保存成功');
-						this.showPoster = false;
-					},
-					fail: err => {
-						console.log(`图片保存失败:`, err);
-						this.$u.toast('保存失败');
-					}
-				});
-			}
-		},
-		// 复制链接
-		copySharePath() {
-			let that = this;
-			uni.setClipboardData({
-				data: that.shareInfo.copyLink,
-				success: data => {
-					that.$u.toast('已复制到剪切板');
-					that.showShare = false;
-				}
-			});
-		},
-		// 获取海报格式,规则说明在@/shopro/poster/tools.js中的initDrawArray
-		getPosterFormatter() {
-			const that = this;
-			let data = {};
-			switch (this.posterType) {
-				case 'user':
-					data = {
-						backgroundImage: that.initShare.user_poster_bg,
-						drawArray: [
-							{
-								name: '用户昵称',
-								type: 'text',
-								text: that.userInfo.nickname,
-								isBgCenter: true,
-								size: 28,
-								dy: 250,
-								color: '#333',
-								textAlign: 'middle',
-								textBaseLine: 'middle'
-							},
-							{
-								name: 'avatar',
-								type: 'image',
-								url: that.userInfo.avatar,
-								alpha: 1,
-								isBgCenter: true,
-								dy: 95,
-								dWidth: 120,
-								dHeight: 120,
-								circleSet: {}
-							},
-							// #ifdef MP-WEIXIN
-							{
-								name: 'wxCode',
-								type: 'image',
-								url: `${that.$API_URL}wechat/wxacode?scene=${that.shareInfo.query}`,
-								alpha: 1,
-								dy: 560,
-								isBgCenter: true,
-								dWidth: 180,
-								dHeight: 180
-							},
-							// #endif
-							// #ifndef  MP-WEIXIN
-							{
-								name: '普通二维码',
-								type: 'qrcode',
-								text: that.shareInfo.path,
-								size: 180,
-								dy: 560,
-								isBgCenter: true
-							}
-							// #endif
-						]
-					};
-					break;
-				case 'goods':
-					data = {
-						backgroundImage: that.initShare.goods_poster_bg,
-						drawArray: [
-							{
-								name: 'avatar',
-								type: 'image',
-								url: that.userInfo.avatar,
-								alpha: 1,
-								dy: 40,
-								dx: 38,
-								dWidth: 80,
-								dHeight: 80,
-								circleSet: {}
-							},
-							{
-								type: 'text',
-								text: that.userInfo.nickname,
-								size: 28,
-								color: '#333',
-								alpha: 1,
-								textAlign: 'middle',
-								textBaseline: 'bottom',
-								dx: 140,
-								dy: 40
-							},
-							{
-								type: 'text',
-								text: '推荐一个好物给你,请查收!',
-								size: 26,
-								color: '#333',
-								alpha: 1,
-								textAlign: 'middle',
-								textBaseline: 'middle',
-								dx: 140,
-								dy: 80
-							},
-							{
-								name: 'goodsImage',
-								type: 'image',
-								url: that.posterInfo.image,
-								alpha: 1,
-								isBgCenter: true,
-								dy: 140,
-								dWidth: 620,
-								dHeight: 620,
-								roundRectSet: {
-									r: 20
-								}
-							},
-							{
-								type: 'text', //标题
-								text: that.posterInfo.title,
-								size: 28,
-								color: '#333',
-								alpha: 1,
-								textAlign: 'left',
-								textBaseline: 'middle',
-								fontWeight: 'bold',
-								lineFeed: {
-									maxWidth: 620,
-									lineHeight: 40,
-									lineNum: 2
-								},
-								dx: 36,
-								dy: 780
-							},
-							{
-								type: 'text',
-								text: `¥${that.posterInfo.price}`,
-								size: 38,
-								color: '#E1212B',
-								alpha: 1,
-								textAlign: 'left',
-								textBaseline: 'middle',
-								fontWeight: 'bold',
-								fontFamily: 'OPPOSANS',
-								dx: 30,
-								dy: 860
-							},
-							{
-								type: 'text',
-								text: `¥${that.posterInfo.original_price}`,
-								size: 28,
-								color: '#999999',
-								alpha: 1,
-								textAlign: 'left',
-								textBaseline: 'top',
-								lineThrough: {
-									style: '#999999'
-								},
-								dx: 400,
-								dy: 860
-							},
-							// #ifdef MP-WEIXIN
-							{
-								name: 'wxCode',
-								type: 'image', //微信小程序码
-								url: `${that.$API_URL}wechat/wxacode?scene=${that.shareInfo.query}`,
-								alpha: 1,
-								dx: 522,
-								dy: 911,
-								dWidth: 110,
-								dHeight: 110
-							},
-							// #endif
-							// #ifndef MP-WEIXIN
-							{
-								type: 'qrcode',
-								text: that.shareInfo.copyLink,
-								size: 110,
-								dx: 530,
-								dy: 930
-							}
-							// #endif
-						]
-					};
-					break;
-				case 'groupon':
-					data = {
-						backgroundImage: that.initShare.groupon_poster_bg,
-						drawArray: [
-							{
-								name: 'avatar',
-								type: 'image',
-								url: that.userInfo.avatar,
-								alpha: 1,
-								dy: 40,
-								dx: 38,
-								dWidth: 80,
-								dHeight: 80,
-								circleSet: {}
-							},
-							{
-								type: 'text',
-								text: that.userInfo.nickname,
-								size: 28,
-								color: '#333',
-								alpha: 1,
-								textAlign: 'middle',
-								textBaseline: 'bottom',
-								dx: 140,
-								dy: 40
-							},
-							{
-								type: 'text',
-								text: '发现一个好物,快来和我一起拼吧!',
-								size: 26,
-								color: '#333',
-								alpha: 1,
-								textAlign: 'middle',
-								textBaseline: 'middle',
-								dx: 140,
-								dy: 80
-							},
-							{
-								name: 'goodsImage',
-								type: 'image',
-								url: that.posterInfo.goods.image,
-								alpha: 1,
-								isBgCenter: true,
-								dy: 140,
-								dWidth: 620,
-								dHeight: 620,
-								roundRectSet: {
-									r: 20
-								}
-							},
-							{
-								type: 'text', //标题
-								text: that.posterInfo.goods.title,
-								size: 28,
-								color: '#333',
-								alpha: 1,
-								textAlign: 'left',
-								textBaseline: 'middle',
-								fontWeight: 'bold',
-								lineFeed: {
-									maxWidth: 620,
-									lineHeight: 40,
-									lineNum: 2
-								},
-								dx: 36,
-								dy: 780
-							},
-							{
-								type: 'text',
-								text: `拼团价:¥${that.posterInfo.goods.groupon_price}`,
-								size: 32,
-								color: '#E1212B',
-								alpha: 1,
-								textAlign: 'left',
-								textBaseline: 'middle',
-								fontWeight: 'bold',
-								fontFamily: 'OPPOSANS',
-								dx: 30,
-								dy: 860
-							},
-							{
-								type: 'text',
-								text: `${that.posterInfo.num}人团`,
-								size: 24,
-								color: '#fff',
-								alpha: 1,
-								textAlign: 'left',
-								textBaseline: 'top',
-								dx: 565,
-								dy: 863
-							},
-							// #ifdef MP-WEIXIN
-							{
-								name: 'wxCode',
-								type: 'image', //微信小程序码
-								url: `${that.$API_URL}wechat/wxacode?scene=${that.shareInfo.query}`,
-								alpha: 1,
-								dx: 530,
-								dy: 930,
-								dWidth: 110,
-								dHeight: 110
-							},
-							// #endif
-							// #ifndef MP-WEIXIN
-							{
-								type: 'qrcode',
-								text: that.shareInfo.path,
-								size: 110,
-								dx: 530,
-								dy: 930
-							}
-							// #endif
-						]
-					};
-					break;
-				default:
-					console.log('%cerr:没有此类型海报数据', 'color:green;background:yellow');
-					break;
-			}
-			return data;
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-// 指引
-.guide-wrap {
-	height: 100%;
-	.guide-img {
-		width: 580rpx;
-		height: 430rpx;
-	}
-}
-// 分享海报
-.poster-btn-box {
-	.cancel-btn {
-		width: 300rpx;
-		height: 70rpx;
-		line-height: 70rpx;
-		background: #ffffff;
-		border-radius: 35rpx;
-		font-size: 28rpx;
-		font-weight: 500;
-		color: #999999;
-	}
-	.save-btn {
-		width: 300rpx;
-		height: 70rpx;
-		line-height: 70rpx;
-		background: linear-gradient(90deg, #e9b461, #eecc89);
-		border-radius: 35rpx;
-		font-size: 28rpx;
-		font-weight: 500;
-		color: #ffffff;
-	}
-}
-.poster-img-box {
-	.poster-img {
-		width: 660rpx;
-		min-height: 800rpx;
-		border-radius: 20rpx;
-	}
-}
-// 分享tool
-.share-box {
-	background: #fff;
-	width: 750rpx;
-	border-radius: 30rpx 30rpx 0 0;
-	padding-top: 30rpx;
-	position: relative;
-
-	.share-foot {
-		font-size: 24rpx;
-		color: #bfbfbf;
-		height: 80rpx;
-		border-top: 1rpx solid #eee;
-	}
-
-	.share-list-box {
-		.share-btn {
-			background: none;
-			border: none;
-			line-height: 1;
-			padding: 0;
-			&::after {
-				border: none;
-			}
-		}
-		.share-item {
-			flex: 1;
-			padding-bottom: 20rpx;
-
-			.share-img {
-				width: 70rpx;
-				height: 70rpx;
-				background: rgba(246, 246, 254, 1);
-				border-radius: 50%;
-				margin-bottom: 20rpx;
-			}
-
-			.share-title {
-				font-size: 24rpx;
-				color: #666;
-			}
-		}
-	}
-}
-</style>

+ 0 - 589
components/shopro-sku/shopro-sku.vue

@@ -1,589 +0,0 @@
-<template>
-	<!-- 规格 -->
-	<view class="cu-modal bottom-modal" @touchmove.stop.prevent="" :class="{ show: showModal }"
-		@tap.stop="showModal = false" v-if="goodsInfo.sku_price">
-		<view class="cu-dialog" @tap.stop style="border-radius: 30rpx 30rpx 0 0;">
-			<view class="shop-modal page_box" :style="goodsInfo.is_sku == 0 ? 'height:700rpx' : ''">
-				<text class="u-iconfont uicon-close-circle-fill close-icon" @tap.stop="showModal = false"></text>
-				<!-- 商品卡片-->
-				<view class="top u-flex modal-head__box">
-					<image class="shop-img" :src="currentSkuPrice.image ? currentSkuPrice.image : goodsInfo.image"
-						mode="aspectFill"></image>
-					<view class=" goods-box u-flex-col u-row-between">
-						<view class="goods-title u-ellipsis-2">{{ goodsInfo.title }}</view>
-						<view class="u-flex u-row-between goods-bottom">
-							<view class="price-box u-flex">
-								<view v-if="goodsType === 'score'">{{ currentSkuPrice.price_text || goodsInfo.price }}
-								</view>
-								<view v-else-if="grouponBuyType === 'groupon'">
-									¥{{ currentSkuPrice.groupon_price || (goodsInfo.activity_type === 'groupon' ? goodsInfo.groupon_price : goodsInfo.price) }}
-								</view>
-								<view v-else>¥{{ currentSkuPrice.price || goodsInfo.price }}</view>
-							</view>
-							<text class="stock">库存{{ currentSkuPrice.stock || goodsInfo.stock }}件</text>
-						</view>
-					</view>
-				</view>
-
-				<!-- 规格选项 -->
-				<scroll-view scroll-y class="content_box">
-					<view class="select-box u-flex-col u-row-left" v-for="(s, x) in skuList" :key="s.id">
-						<view class="type-title u-flex">{{ s.name }}</view>
-						<view class="tag-box u-flex u-flex-wrap">
-							<button class="tag u-reset-button" v-for="(sc, y) in s.content" :key="sc.id"
-								:class="{ 'tag-active': currentSkuArray[sc.pid] == sc.id, 'tag-disabled': sc.disabled == true }"
-								:disabled="sc.disabled == true" @tap="chooseSku(sc.pid, sc.id)">
-								{{ sc.name }}
-							</button>
-						</view>
-					</view>
-
-					<!-- 计步器 -->
-					<view class="buy-num-box u-flex u-row-between">
-						<view class="num-title">购买数量</view>
-						<u-number-box v-model="goodsNum" :min="1" :step="1" :max="maxStep" @plus="plus"
-							:long-press="false" @change="changeNum"></u-number-box>
-					</view>
-				</scroll-view>
-
-				<!-- 功能按钮 -->
-				<view class="btn-box foot_box u-flex u-row-between" v-if="buyType === 'cart' || buyType === 'buy'">
-					<button class="u-reset-button cu-btn save-btn"
-						v-if="(activityRules && activityRules.status === 'ing') || !goodsInfo.activity_type"
-						@tap="confirm">确认</button>
-					<button class="u-reset-button cu-btn cancel-btn"
-						v-if="activityRules && activityRules.status !== 'ing' && goodsInfo.activity_type"
-						@tap="confirm">确定</button>
-				</view>
-				<view class="btn-box foot_box u-flex u-row-between" v-else>
-					<button class="u-reset-button cu-btn  cart-btn" @tap="confirmCart">加入购物车</button>
-					<button class="u-reset-button cu-btn  buy-btn" @tap="confirmBuy">立即购买</button>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	/**
-	 * 多规格组件
-	 * @property {Object} goodsInfo - 商品数据
-	 * @property {Boolean} value = showModal - 显隐
-	 * @property {String} buyType  - 购买方式
-	 * @property {String} goodsType - 商品类别
-	 * @property {String} grouponBuyType -拼团商品购买方式
-	 * @property {Number} grouponId - 拼团ID,分享进入
-	 * @property {Object} activityRules - 活动状态。
-	 */
-	import { mapMutations, mapActions, mapState } from 'vuex';
-	export default {
-		components: {},
-		data() {
-			return {
-				maxStep: 999,
-				skuList: [],
-				currentSkuPrice: {},
-				currentSkuArray: [],
-				goodsNum: 1,
-				confirmGoodsInfo: {},
-				type: this.buyType
-			};
-		},
-		props: {
-			goodsInfo: {},
-			activityRules: {},
-			value: {},
-			buyType: {
-				type: String,
-				default: 'sku'
-			},
-			goodsType: {
-				type: String,
-				default: 'goods'
-			},
-			grouponBuyType: {
-				type: String,
-				default: 'alone'
-			},
-			grouponId: {
-				//参加拼团的时候,传入当前团id;
-				type: Number,
-				default: 0
-			}
-		},
-		created() {
-			this.skuList = this.goodsInfo.sku;
-			this.changeDisabled(false);
-		},
-		mounted() {
-			// 单规格选项
-			if (!this.goodsInfo.is_sku) {
-				this.currentSkuPrice = this.skuPrice[0];
-				this.maxStep = this.skuPrice[0].stock > 999 ? 999 : this.skuPrice[0].stock;
-			}
-		},
-		watch: {
-			type(nweVal, oldVal) {
-				return newVal;
-			}
-		},
-		computed: {
-			skuPrice() {
-				return this.goodsInfo.sku_price;
-			},
-			showModal: {
-				get() {
-					return this.value;
-				},
-				set(val) {
-					val ? uni.hideTabBar() : uni.showTabBar();
-					this.$emit('input', val);
-					return val;
-				}
-			},
-			currentSkuText() {
-				let that = this;
-				let str = '';
-				let currentSkuArray = this.currentSkuArray;
-				currentSkuArray.forEach(v => {
-					that.skuList.forEach(s => {
-						s.content.forEach(u => {
-							if (u.id === v) {
-								str += ' ' + u.name;
-							}
-						});
-					});
-				});
-				that.$emit('getSkuText', str);
-				return str;
-			}
-		},
-
-		methods: {
-			...mapActions(['addCartGoods', 'getCartList']),
-			jump(path, parmas) {
-				this.$Router.push({
-					path: path,
-					query: parmas
-				});
-			},
-
-			// 选择规格
-			chooseSku(pid, skuId) {
-				let that = this;
-				let isChecked = true; // 选中 or 取消选中
-				this.goodsNum = 1; //选择规格时,数量重置为1.
-				this.maxStep = 999; //选择其他规格时,取消上个规格库存限制
-
-				if (that.currentSkuArray[pid] != undefined && that.currentSkuArray[pid] == skuId) {
-					// 点击已被选中的,删除并填充 ''
-					isChecked = false;
-					that.currentSkuArray.splice(pid, 1, '');
-				} else {
-					// 选中
-					that.$set(that.currentSkuArray, pid, skuId);
-				}
-
-				let chooseSkuId = []; // 选中的规格大类
-				that.currentSkuArray.forEach(sku => {
-					if (sku != '') {
-						// sku 为空是反选 填充的
-						chooseSkuId.push(sku);
-					}
-				});
-
-				// 当前所选规格下,所有可以选择的 skuPric
-				let newPrice = this.getCanUseSkuPrice();
-
-				// 判断所有规格大类是否选择完成
-				if (chooseSkuId.length == that.skuList.length && newPrice.length) {
-					that.currentSkuPrice = newPrice[0];
-				} else {
-					that.currentSkuPrice = {};
-				}
-
-				// 改变规格项禁用状态
-				this.changeDisabled(isChecked, pid, skuId);
-			},
-
-			// 改变禁用状态
-			changeDisabled(isChecked = false, pid = 0, skuId = 0) {
-				let newPrice = []; // 所有可以选择的 skuPrice
-
-				if (isChecked) {
-					// 选中规格
-
-					// 当前点击选中规格下的 所有可用 skuPrice
-					for (let price of this.skuPrice) {
-						if (price.stock <= 0) {
-							// this.goodsNum 不判断是否大于当前选择数量,在 uni-number-box 判断,并且 取 stock 和 goods_num 的小值
-							continue;
-						}
-						if (price.goods_sku_id_arr.indexOf(skuId.toString()) >= 0) {
-							newPrice.push(price);
-						}
-					}
-				} else {
-					// 取消选择规格
-
-					// 当前所选规格下,所有可以选择的 skuPric
-					newPrice = this.getCanUseSkuPrice();
-				}
-
-				// 所有存在并且有库存未选择的规格项 的 子项 id
-				let noChooseSkuIds = [];
-				for (let price of newPrice) {
-					noChooseSkuIds = noChooseSkuIds.concat(price.goods_sku_id_arr);
-				}
-
-				// 去重
-				noChooseSkuIds = Array.from(new Set(noChooseSkuIds));
-
-				if (isChecked) {
-					// 去除当前选中的规格项
-					let index = noChooseSkuIds.indexOf(skuId.toString());
-					noChooseSkuIds.splice(index, 1);
-				} else {
-					// 循环去除当前已选择的规格项
-					this.currentSkuArray.forEach(sku => {
-						if (sku.toString() != '') {
-							// sku 为空是反选 填充的
-							let index = noChooseSkuIds.indexOf(sku.toString());
-							if (index >= 0) {
-								// sku 存在于 noChooseSkuIds
-								noChooseSkuIds.splice(index, 1);
-							}
-						}
-					});
-				}
-
-				// 当前已选择的规格大类
-				let chooseSkuKey = [];
-				if (!isChecked) {
-					// 当前已选择的规格大类
-					this.currentSkuArray.forEach((sku, key) => {
-						if (sku != '') {
-							// sku 为空是反选 填充的
-							chooseSkuKey.push(key);
-						}
-					});
-				} else {
-					// 当前点击选择的规格大类
-					chooseSkuKey = [pid];
-				}
-
-				for (let i in this.skuList) {
-					// 当前点击的规格,或者取消选择时候 已选中的规格 不进行处理
-					if (chooseSkuKey.indexOf(this.skuList[i]['id']) >= 0) {
-						continue;
-					}
-
-					for (let j in this.skuList[i]['content']) {
-						// 如果当前规格项 id 不存在于有库存的规格项中,则禁用
-						if (noChooseSkuIds.indexOf(this.skuList[i]['content'][j]['id'].toString()) >= 0) {
-							this.skuList[i]['content'][j]['disabled'] = false;
-						} else {
-							this.skuList[i]['content'][j]['disabled'] = true;
-						}
-					}
-				}
-			},
-			// 当前所选规格下,获取所有有库存的 skuPrice
-			getCanUseSkuPrice() {
-				let newPrice = [];
-
-				for (let price of this.skuPrice) {
-					if (price.stock <= 0) {
-						// || price.stock < this.goodsNum		不判断是否大于当前选择数量,在 uni-number-box 判断,并且 取 stock 和 goods_num 的小值
-						continue;
-					}
-					var isOk = true;
-
-					this.currentSkuArray.forEach(sku => {
-						// sku 不为空,并且,这个 条 skuPrice 没有被选中,则排除
-						if (sku.toString() != '' && price.goods_sku_id_arr.indexOf(sku.toString()) < 0) {
-							isOk = false;
-						}
-					});
-
-					if (isOk) {
-						newPrice.push(price);
-					}
-				}
-
-				return newPrice;
-			},
-
-			// 数量
-			changeNum(e) {
-				this.changeDisabled(false);
-			},
-			// 增加
-			plus(e) {
-				if (e.value >= this.currentSkuPrice.stock) {
-					this.maxStep = this.currentSkuPrice.stock;
-					this.$u.toast('库存不足');
-					return;
-				}
-				if (this.goodsInfo.activity_type === 'seckill' || this.goodsInfo.activity_type === 'groupon') {
-					let rules = this.goodsInfo.activity.rules;
-					if (rules.limit_buy != 0 && e.value >= rules.limit_buy) {
-						this.maxStep = rules.limit_buy;
-						this.$u.toast('本次活动最多购买' + rules.limit_buy + '件');
-						return;
-					}
-				}
-			},
-
-			// 加入购物车确定
-			confirmCart() {
-				let that = this;
-				if (this.confirmSku()) {
-					let confirmGoodsList = {
-						list: [that.confirmGoodsInfo],
-						from: 'goods'
-					};
-					that.addCartGoods(confirmGoodsList).then(res => {
-						if (res.code === 1) {
-							that.showModal = false;
-							that.$u.toast(res.msg);
-						}
-					});
-				}
-			},
-			// 立即购买
-			confirmBuy() {
-				let that = this;
-				that.showModal = false;
-				if (this.confirmSku()) {
-					let confirmGoodsList = [];
-					confirmGoodsList.push(that.confirmGoodsInfo);
-					that.jump('/pages/order/confirm', {
-						goodsList: confirmGoodsList,
-						from: 'goods',
-						orderType: that.goodsType,
-						grouponBuyType: that.grouponBuyType,
-						grouponId: that.grouponId
-					});
-				}
-			},
-			// 确定
-			confirm() {
-				if (this.confirmSku()) {
-					switch (this.buyType) {
-						case 'cart':
-							this.confirmCart();
-							break;
-						case 'buy':
-							this.confirmBuy();
-							break;
-						default:
-					}
-				}
-			},
-			// 确定规格
-			confirmSku() {
-				let that = this;
-				if (that.currentSkuPrice.stock == 0 || that.currentSkuPrice.stock < that.goodsNum) {
-					that.$u.toast('库存不足');
-					that.showModal = false;
-					return false;
-				} else {
-					that.currentSkuPrice.goods_num = that.goodsNum;
-					that.confirmGoodsInfo = {
-						goods_id: that.currentSkuPrice.goods_id,
-						goods_num: that.currentSkuPrice.goods_num,
-						sku_price_id: that.currentSkuPrice.id,
-						goods_price: that.currentSkuPrice.price
-					};
-					if (!that.confirmGoodsInfo.sku_price_id) {
-						that.$u.toast('请选择规格');
-						return false;
-					} else {
-						that.showModal = false;
-						return true;
-					}
-				}
-			}
-		}
-	};
-</script>
-
-<style lang="scss" scoped>
-	.size-box {
-		line-height: 82rpx;
-		background: #fff;
-		padding: 0 20rpx;
-		margin: 20rpx 0;
-		font-size: 28rpx;
-
-		.title {
-			color: #999;
-			margin-right: 20rpx;
-		}
-	}
-
-	// 规格
-	.shop-modal {
-		width: 750rpx;
-		height: 950rpx;
-		background: rgba(255, 255, 255, 1);
-		padding: 20rpx 20rpx 30rpx;
-		position: relative;
-
-		.close-icon {
-			font-size: 34rpx;
-			color: #e0e0e0;
-			position: absolute;
-			top: 20rpx;
-			right: 20rpx;
-		}
-
-		// 商品卡片
-		.top {
-			margin: 30rpx 0;
-			border-radius: 20rpx;
-			padding: 20rpx;
-
-			.shop-img {
-				width: 160upx;
-				height: 160upx;
-				border-radius: 6upx;
-				margin-right: 30upx;
-				background: #ccc;
-			}
-
-			.goods-box {
-				height: 160upx;
-				width: 490rpx;
-				align-items: flex-start;
-
-				.goods-title {
-					font-size: 28rpx;
-
-					font-weight: 500;
-					color: rgba(51, 51, 51, 1);
-					line-height: 42rpx;
-					text-align: left;
-				}
-
-				.goods-bottom {
-					width: 100%;
-				}
-
-				.price-box {
-					font-size: 36upx;
-
-					font-weight: bold;
-					color: #e1212b;
-
-					.unit {
-						font-size: 24upx;
-
-						font-weight: bold;
-						color: #e1212b;
-					}
-				}
-
-				.stock {
-					font-size: 26rpx;
-					color: #999;
-				}
-			}
-		}
-
-		// 规格选项
-		.select-box {
-			margin-bottom: 30rpx;
-
-			.type-title {
-				font-size: 26upx;
-				font-weight: 400;
-				margin-bottom: 20upx;
-			}
-
-			.tag-box {
-				flex-wrap: wrap;
-			}
-
-			.tag {
-				line-height: 62rpx;
-				background: #f4f4f4;
-				border-radius: 31rpx;
-				font-size: 28upx;
-				font-weight: 400;
-				color: #666666;
-				padding: 0 30upx;
-				margin-bottom: 20rpx;
-				margin-right: 10rpx;
-			}
-
-			.tag-active {
-				background: linear-gradient(90deg, #e9b461, #eecc89);
-				font-size: 28rpx;
-				font-weight: 400;
-				color: #ffffff;
-			}
-
-			.tag-disabled {
-				background: #f8f8f8;
-				color: #cacaca;
-			}
-		}
-
-		.buy-num-box {
-			.num-title {
-				font-size: 26upx;
-
-				font-weight: 400;
-				margin-bottom: 20upx;
-			}
-		}
-	}
-
-	.btn-box {
-		height: 100rpx;
-
-		.cu-btn {
-			width: 340rpx;
-			line-height: 70rpx;
-			border-radius: 35rpx;
-			font-size: 28rpx;
-
-			font-weight: 500;
-			color: rgba(255, 255, 255, 0.9);
-			padding: 0;
-		}
-
-		.cart-btn {
-			background: linear-gradient(90deg, rgba(103, 104, 105, 1), rgba(82, 82, 82, 1));
-			box-shadow: 0px 2rpx 5rpx 0px rgba(102, 103, 104, 0.46);
-		}
-
-		.buy-btn {
-			background: linear-gradient(90deg, rgba(233, 180, 97, 1), rgba(238, 204, 137, 1));
-		}
-
-		.save-btn {
-			width: 710rpx;
-			height: 70rpx;
-			background: linear-gradient(90deg, rgba(233, 180, 97, 1), rgba(238, 204, 137, 1));
-			font-size: 28rpx;
-			font-weight: 500;
-			color: rgba(255, 255, 255, 1);
-			border-radius: 35rpx;
-			padding: 0;
-		}
-
-		.cancel-btn {
-			width: 710rpx;
-			height: 70rpx;
-			background: rgba(221, 221, 221, 1);
-			font-size: 28rpx;
-			font-weight: 500;
-			color: #999999;
-			border-radius: 35rpx;
-			padding: 0;
-		}
-	}
-</style>

+ 0 - 142
components/shopro-tabbar/shopro-tabbar.vue

@@ -1,142 +0,0 @@
-<template>
-	<view class="shopro-tabbar-wrap" v-if="tabbarList && tabbarList.length && showTabbar">
-		<view class="tabbar-box" :style="{ background: tabbarData.bgcolor || '#fff' }">
-			<view class="tabbar-item" v-for="(tab, index) in tabbarList" :key="tab.name" @tap="switchTabbar(tab, index)">
-				<view class="img-box">
-					<image
-						class="tabbar-icon"
-						v-if="tabbarData.style == 1 || tabbarData.style == 2"
-						:src="currentPath == tab.path ? tab.activeImage : tab.image"
-						mode="aspectFill"
-					></image>
-					<!-- 购物车角标 -->
-					<view v-if="tab.path == '/pages/index/cart' && cartNum" class="badge">{{ cartNum }}</view>
-				</view>
-
-				<view
-					class="tabbar-text"
-					v-if="tabbarData.style == 1 || tabbarData.style == 3"
-					:style="{ color: currentPath == tab.path ? tabbarData.activeColor : tabbarData.color }"
-				>
-					{{ tab.name }}
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-/**
- * 自定义底部导航
- * @property {Array} tabbarList - vuex初始化的底部导航数据
- * @property {String} currentPath -computed解析当前页面路径。
- */
-import { mapMutations, mapActions, mapState, mapGetters } from 'vuex';
-import { router } from '@/shopro/router';
-export default {
-	name: 'shoproTabbar',
-	components: {},
-	data() {
-		return {
-			currentPath: '' //当前页面路径
-		};
-	},
-	mounted() {
-		this.currentPath = this.$Route.path === '/pages/index/index' ? this.$Route.path : this.$Route.fullPath;
-	},
-	computed: {
-		...mapGetters(['cartNum', 'tabbarData']),
-		// 底部导航栏列表
-		tabbarList() {
-			if (this.tabbarData) {
-				return this.tabbarData.list;
-			}
-		},
-		// 后台tabbarList数据中必需含有'/pages/index/index',不然逻辑混乱
-		showTabbar() {
-			if (this.tabbarData && this.tabbarData.list) {
-				let arr = ['/pages/index/index'];
-				let path = '';
-				for (let item of this.tabbarData.list) {
-					arr.push(item.path);
-				}
-				return arr.includes(this.currentPath);
-			}
-		}
-	},
-	methods: {
-		// 切换tabbar
-		switchTabbar(tab, index) {
-			this.$tools.routerTo(tab.path, true);
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.shopro-tabbar-wrap {
-	height: calc(100rpx + env(safe-area-inset-bottom) / 2);
-	padding-bottom: calc(env(safe-area-inset-bottom) / 2);
-	position: relative;
-	width: 100%;
-	z-index: 70;
-
-	.tabbar-box {
-		position: fixed;
-		display: flex;
-		align-items: center;
-		width: 100%;
-		height: calc(100rpx + env(safe-area-inset-bottom) / 2);
-		border-top: 1rpx solid #eeeeee;
-		background-color: #fff;
-		z-index: 998;
-		bottom: 0;
-		padding-bottom: calc(env(safe-area-inset-bottom) / 2);
-
-		.tabbar-item {
-			height: 100%;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			justify-content: center;
-			flex: 1;
-
-			.img-box {
-				position: relative;
-
-				.badge {
-					position: absolute;
-					/* #ifndef APP-NVUE */
-					display: inline-flex;
-					/* #endif */
-					justify-content: center;
-					align-items: center;
-					line-height: 24rpx;
-					padding: 4rpx 10rpx;
-					border-radius: 100rpx;
-					color: #fff;
-					font-size: 24rpx;
-					z-index: 9;
-					background-color: $u-type-error;
-					transform: scale(0.8);
-					transform-origin: center center;
-					top: 0;
-					left: 46rpx;
-					white-space: nowrap;
-				}
-			}
-
-			.tabbar-icon {
-				width: 50rpx;
-				height: 50rpx;
-				display: block;
-			}
-
-			.tabbar-text {
-				font-size: 20rpx;
-				margin-top: 4rpx;
-			}
-		}
-	}
-}
-</style>

+ 190 - 0
components/skeleton/index.vue

@@ -0,0 +1,190 @@
+<template>
+	<view v-if="show"
+		:style="{width: systemInfo.width + 'px', height: systemInfo.height + 'px', backgroundColor: bgcolor, position: 'absolute', left: 0, top: 0, zIndex: 9998}">
+		<view v-for="(item,rect_idx) in skeletonRectLists" :key="rect_idx + 'rect'"
+			:class="[loading == 'chiaroscuro' ? 'chiaroscuro' : '']"
+			:style="{width: item.width + 'px', height: item.height + 'px', backgroundColor: 'rgb(194, 207, 214,.3)', position: 'absolute', left: item.left + 'px', top: item.top + 'px'}">
+		</view>
+		<view v-for="(item,circle_idx) in skeletonCircleLists" :key="circle_idx + 'circle'"
+			:class="loading == 'chiaroscuro' ? 'chiaroscuro' : ''"
+			:style="{width: item.width + 'px', height: item.height + 'px', backgroundColor: 'rgb(194, 207, 214,.3)', borderRadius: item.width + 'px', position: 'absolute', left: item.left + 'px', top: item.top + 'px'}">
+		</view>
+		<view class="spinbox" v-if="loading == 'spin'">
+			<view class="spin"></view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "skeleton",
+		props: {
+			bgcolor: {
+				type: String,
+				value: '#FFF'
+			},
+			selector: {
+				type: String,
+				value: 'skeleton'
+			},
+			loading: {
+				type: String,
+				value: 'spin'
+			},
+			show: {
+				type: Boolean,
+				value: false
+			},
+			isNodes: {
+				type: Number,
+				value: false
+			} //控制什么时候开始抓取元素节点,只要数值改变就重新抓取
+		},
+		data() {
+			return {
+				loadingAni: ['spin', 'chiaroscuro'],
+				systemInfo: {},
+				skeletonRectLists: [],
+				skeletonCircleLists: []
+			}
+		},
+		watch: {
+			isNodes(val) {
+				this.readyAction();
+			}
+		},
+		mounted() {
+			this.attachedAction();
+		},
+		methods: {
+			attachedAction: function() {
+				//默认的首屏宽高,防止内容闪现
+				const systemInfo = uni.getSystemInfoSync();
+				this.systemInfo = {
+					width: systemInfo.windowWidth,
+					height: systemInfo.windowHeight
+				};
+				this.loading = this.loadingAni.includes(this.loading) ? this.loading : 'spin';
+			},
+			readyAction: function() {
+				const that = this;
+				//绘制背景
+				uni.createSelectorQuery().selectAll(`.${this.selector}`).boundingClientRect(function(res) {
+					if (res[0] && res[0].length > 0)
+						that.systemInfo.height = res[0][0].height + res[0][0].top;
+				}).exec()
+
+				//绘制矩形
+				this.rectHandle();
+
+				//绘制圆形
+				this.radiusHandle();
+			},
+			rectHandle: function() {
+				const that = this;
+
+				//绘制不带样式的节点
+				uni.createSelectorQuery().selectAll(`.${this.selector}-rect`).boundingClientRect().exec(function(res) {
+					that.skeletonRectLists = res[0];
+				});
+
+			},
+			radiusHandle() {
+				const that = this;
+
+				uni.createSelectorQuery().selectAll(`.${this.selector}-radius`).boundingClientRect().exec(function(res) {
+					that.skeletonCircleLists = res[0];
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	.spinbox {
+		position: fixed;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100%;
+		width: 100%;
+		z-index: 9999
+	}
+
+	.spin {
+		display: inline-block;
+		width: 64rpx;
+		height: 64rpx;
+	}
+
+	.spin:after {
+		content: " ";
+		display: block;
+		width: 46rpx;
+		height: 46rpx;
+		margin: 1rpx;
+		border-radius: 50%;
+		border: 5rpx solid #409eff;
+		border-color: #409eff transparent #409eff transparent;
+		animation: spin 1.2s linear infinite;
+	}
+
+	@keyframes spin {
+		0% {
+			transform: rotate(0deg);
+		}
+
+		100% {
+			transform: rotate(360deg);
+		}
+	}
+
+	.chiaroscuro {
+		width: 100%;
+		height: 100%;
+		background: rgb(194, 207, 214);
+		animation-duration: 2s;
+		animation-name: blink;
+		animation-iteration-count: infinite;
+	}
+
+	@keyframes blink {
+		0% {
+			opacity: .4;
+		}
+
+		50% {
+			opacity: 1;
+		}
+
+		100% {
+			opacity: .4;
+		}
+	}
+
+	@keyframes flush {
+		0% {
+			left: -100%;
+		}
+
+		50% {
+			left: 0;
+		}
+
+		100% {
+			left: 100%;
+		}
+	}
+
+	.shine {
+		animation: flush 2s linear infinite;
+		position: absolute;
+		top: 0;
+		bottom: 0;
+		width: 100%;
+		background: linear-gradient(to left,
+				rgba(255, 255, 255, 0) 0%,
+				rgba(255, 255, 255, .85) 50%,
+				rgba(255, 255, 255, 0) 100%)
+	}
+</style>

+ 52 - 0
components/swipers/index.vue

@@ -0,0 +1,52 @@
+<template>
+	    <view class='swiper'>
+	        <swiper :autoplay="autoplay" :circular="circular" :interval="interval" :duration="duration" @change="swiperChange">
+	            <block v-for="(item,index) in imgUrls" :key="index">
+	              <swiper-item>
+	                <navigator :url="item.link" style='width:100%;height:100%;' hover-class='none'><image :src="item.img" class="slide-image"/></navigator>
+	              </swiper-item>
+	            </block>
+	        </swiper>
+	        <view class="dots acea-row">
+	          <view class="dot" :class="index == currentSwiper ? 'active' : ''" v-for="(item,index) in imgUrls" :key="index"></view>
+	        </view>
+	    </view>
+</template>
+
+	<script>
+		export default {
+			
+			props: {
+				 imgUrls: {
+				 	type: Array,
+				 	default: function(){
+				 		return [];
+				 	}
+				 }
+			},
+			data() {
+				return {
+					circular: true,
+					    autoplay: true,
+					    interval: 3000,
+					    duration: 500,
+					    currentSwiper: 0
+				};
+			},
+			
+			methods: {
+				swiperChange: function (e) {
+					 this.currentSwiper = e.detail.current
+				    }
+			}
+		}
+	</script>
+
+<style scoped lang="scss">
+	.swiper{width:100%;height:282rpx;position:relative;}
+	.swiper swiper{width:100%;height:100%;position:relative;}
+	.swiper swiper .slide-image{width:100%;height:100%;}
+	.swiper .dots{position:absolute;right:40rpx;bottom:20rpx;}
+	.swiper .dots .dot{width:12rpx;height:12rpx;border:2rpx solid #fff;border-radius:50%;margin-right:15rpx;}
+	.swiper .dots .dot.active{border-color:#e93323;background-color:#e93323;}
+</style>

+ 185 - 0
components/tabNav.vue

@@ -0,0 +1,185 @@
+<template>
+	<view class="navTabBox">
+		<view class="longTab">
+			<scroll-view scroll-x="true" style="white-space: nowrap; display: flex;" scroll-with-animation :scroll-left="tabLeft" show-scrollbar="true">
+				<view class="longItem" :style='"width:"+isWidth+"px"' :data-index="index" :class="index===tabClick?'click':''" v-for="(item,index) in tabTitle" :key="index" :id="'id'+index" @click="longClick(index)">{{item.cate_name}}</view>
+				<view class="underlineBox" :style='"transform:translateX("+isLeft+"px);width:"+isWidth+"px"'>
+					<view class="underline"></view>
+				</view>
+			</scroll-view>
+		</view>
+		<view class="child-box" v-if="tabClick>0 && tabTitle[tabClick].children.length>0">
+			<scroll-view scroll-x="true" style="white-space: nowrap; display: flex;align-items: center; height: 100%;" scroll-with-animation :scroll-left="tabLeft" show-scrollbar="false">
+				<view class="wrapper">
+					<view v-for="(item,index) in tabTitle[tabClick].children" class="child-item" :class="{on:index == childIndex}" @click="childTab(tabClick,index)">
+						<image :src="item.pic" mode=""></image>
+						<view class="txt">{{item.cate_name}}</view>
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getProductslist,
+		getProductHot
+	} from '@/api/store.js';
+	export default {
+		name: 'navTab',
+		props: {
+			tabTitle: {
+				type: Array,
+				default: []
+			}
+
+		},
+		data() {
+			return {
+				tabClick: 0, //导航栏被点击
+				isLeft: 0, //导航栏下划线位置
+				isWidth: 0, //每个导航栏占位
+				tabLeft:0,
+				swiperIndex:0,
+				childIndex:0,
+				childID:0
+			};
+		},
+		created() {
+			
+			var that = this
+			// 获取设备宽度
+			uni.getSystemInfo({
+				success(e) {
+					that.isWidth = e.windowWidth / 5 
+				}
+			})
+		},
+		methods: {
+			// 导航栏点击
+			longClick(index){
+				this.childIndex = 0;
+				if(this.tabTitle.length>5){
+					var tempIndex = index - 2;
+					tempIndex = tempIndex<=0 ? 0 : tempIndex;
+					this.tabLeft = (index-2) * this.isWidth //设置下划线位置
+				}
+				this.tabClick = index //设置导航点击了哪一个
+				this.isLeft = index * this.isWidth //设置下划线位置
+				let obj = {
+					type:'big',  //大标题
+					index:index
+				}
+				this.parentEmit(obj)
+				// this.$parent.currentTab = index //设置swiper的第几页
+			},
+			// 导航子类点击
+			childTab(tabClick,index){
+				this.childIndex = index
+				let obj = {
+					parentIndex:tabClick,
+					childIndex:index,
+					type:'small' //小标题
+				}
+				this.parentEmit(obj)
+			},
+			parentEmit(data){
+				this.$emit('changeTab', data);
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.navTabBox {
+		width: 100%;
+		color: rgba(255, 255, 255, 1);
+		.click {
+			color: white;
+		}
+		.longTab {
+			width: 100%;
+			/* #ifdef H5 */
+			padding-bottom: 20rpx;
+			/* #endif */
+			/* #ifdef MP */
+			padding-top: 12rpx;
+			padding-bottom: 12rpx;
+			/* #endif */
+			.longItem{ 
+				height: 50upx; 
+				display: inline-block;
+				line-height: 50upx;
+				text-align: center;
+				font-size: 30rpx;
+				&.click{
+					font-weight: bold;
+				}
+			}
+			.underlineBox {
+				height: 3px;
+				width: 20%;
+				display: flex;
+				align-content: center;
+				justify-content: center;
+				transition: .5s;
+				.underline {
+					width: 33rpx;
+					height: 4rpx;
+					background-color: white;
+				}
+			}
+		}
+	}
+	.child-box{
+		width: 100%;
+		position: relative;
+		// height: 152rpx;
+		background-color: #fff;
+		/* #ifdef H5 */
+		box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.02);
+		/* #endif */
+		/* #ifdef MP */
+		box-shadow: 0 2rpx 3rpx 1rpx #f9f9f9;
+		/* #endif */
+		
+		.wrapper{
+			display: flex;
+			align-items: center;
+			padding: 20rpx 0;
+			background: #fff;
+			/* #ifdef H5 */
+			//box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.06);
+			/* #endif */
+		}
+		.child-item{
+			flex-shrink: 0;
+			width:140rpx;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+			margin-left: 10rpx;
+			image{
+				width: 90rpx;
+				height: 90rpx;
+				border-radius: 50%;
+			}
+			.txt{
+				font-size: 24rpx;
+				color: #282828;
+				text-align: center;
+				margin-top: 10rpx;
+			}
+			&.on{
+				image{
+					border: 1px solid $theme-color-opacity;
+				}
+				.txt{
+					color: $theme-color;
+				}
+			}
+		}
+	}
+</style>

+ 324 - 0
components/tuiDrawer/index.vue

@@ -0,0 +1,324 @@
+<template>
+	<view class="tui-swipeout-wrap" :style="{ backgroundColor: backgroundColor }">
+		<view class="tui-swipeout-item" :class="[isShowBtn ? 'swipe-action-show' : '']"
+			:style="{ transform: 'translate(' + position.pageX + 'px,0)' }">
+			<view class="tui-swipeout-content" @touchstart="handlerTouchstart" @touchmove="handlerTouchmove"
+				@touchend="handlerTouchend" @mousedown="handlerTouchstart" @mousemove="handlerTouchmove"
+				@mouseup="handlerTouchend">
+				<slot name="content"></slot>
+			</view>
+			<view class="tui-swipeout-button-right-group" v-if="actions.length > 0" @touchend.stop="loop"
+				:style="colorStyle">
+				<view class="tui-swipeout-button-right-item" v-for="(item, index) in actions" :key="index"
+					:style="{ backgroundColor: index == 0 ? 'var(--view-theme)' : '#ccc', color: index == 1 ? '#f2f2f2' : '#f2f2f2', width: item.width + 'px' }"
+					:data-index="index" @tap="handlerButton">
+					<image :src="item.icon" v-if="item.icon"
+						:style="{ width: px(item.imgWidth), height: px(item.imgHeight) }"></image>
+					<text :style="{ fontSize: px(item.fontsize) }">{{ item.name }}</text>
+				</view>
+			</view>
+			<!--actions长度设置为0,可直接传按钮进来-->
+			<view class="tui-swipeout-button-right-group" @touchend.stop="loop" @tap="handlerParentButton"
+				v-if="actions.length === 0" :style="{ width: operateWidth + 'px', right: '-' + operateWidth + 'px' }">
+				<slot name="button"></slot>
+			</view>
+		</view>
+		<view v-if="isShowBtn && showMask" class="swipe-action_mask" @tap.stop="closeButtonGroup"
+			@touchstart.stop.prevent="closeButtonGroup" />
+	</view>
+</template>
+
+<script>
+	import colors from '@/mixins/color';
+	export default {
+		name: 'tuiSwipeAction',
+		emits: ['click'],
+		mixins: [colors],
+		props: {
+			// name: '删除',
+			// color: '#fff',
+			// fontsize: 32,//单位rpx
+			// width: 80, //单位px
+			// icon: 'like.png',//此处为图片地址
+			// background: '#ed3f14'
+			actions: {
+				type: Array,
+				default () {
+					return [];
+				}
+			},
+			//点击按钮时是否自动关闭
+			closable: {
+				type: Boolean,
+				default: true
+			},
+			//设为false,可以滑动多行不关闭菜单
+			showMask: {
+				type: Boolean,
+				default: true
+			},
+			operateWidth: {
+				type: Number,
+				default: 80
+			},
+			params: {
+				type: Object,
+				default () {
+					return {};
+				}
+			},
+			//禁止滑动
+			forbid: {
+				type: Boolean,
+				default: false
+			},
+			//手动开关
+			open: {
+				type: Boolean,
+				default: false
+			},
+			//背景色
+			backgroundColor: {
+				type: String,
+				default: '#fff'
+			}
+		},
+		watch: {
+			actions(newValue, oldValue) {
+				this.updateButtonSize();
+			},
+			open(newValue) {
+				this.manualSwitch(newValue);
+			}
+		},
+		data() {
+			return {
+				//start position
+				tStart: {
+					pageX: 0,
+					pageY: 0
+				},
+				//限制滑动距离
+				limitMove: 0,
+				//move position
+				position: {
+					pageX: 0,
+					pageY: 0
+				},
+				isShowBtn: false,
+				move: false
+			};
+		},
+		mounted() {
+			this.updateButtonSize();
+		},
+		methods: {
+			swipeDirection(x1, x2, y1, y2) {
+				return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? (x1 - x2 > 0 ? 'Left' : 'Right') : y1 - y2 > 0 ? 'Up' :
+					'Down';
+			},
+			//阻止事件冒泡
+			loop() {},
+			updateButtonSize() {
+				const actions = this.actions;
+				if (actions.length > 0) {
+					const query = uni.createSelectorQuery().in(this);
+					let limitMovePosition = 0;
+					actions.forEach(item => {
+						limitMovePosition += item.width || 0;
+					});
+					this.limitMove = limitMovePosition;
+				} else {
+					this.limitMove = this.operateWidth;
+				}
+			},
+			handlerTouchstart(event) {
+				if (this.forbid) return;
+				let touches = event.touches
+				if (touches && touches.length > 1) return;
+				this.move = true;
+				touches = touches ? event.touches[0] : {};
+				if (!touches || (touches.pageX === undefined && touches.pageY === undefined)) {
+					touches = {
+						pageX: event.pageX,
+						pageY: event.pageY
+					};
+				}
+				const tStart = this.tStart;
+				if (touches) {
+					for (let i in tStart) {
+						if (touches[i]) {
+							tStart[i] = touches[i];
+						}
+					}
+				}
+			},
+			swipper(touches) {
+				const start = this.tStart;
+				const spacing = {
+					pageX: touches.pageX - start.pageX,
+					pageY: touches.pageY - start.pageY
+				};
+				if (this.limitMove < Math.abs(spacing.pageX)) {
+					spacing.pageX = -this.limitMove;
+				}
+				this.position = spacing;
+			},
+			handlerTouchmove(event) {
+				if (this.forbid || !this.move) return;
+				const start = this.tStart;
+				let touches = event.touches ? event.touches[0] : {};
+				if (!touches || (touches.pageX === undefined && touches.pageY === undefined)) {
+					touches = {
+						pageX: event.pageX,
+						pageY: event.pageY
+					};
+				}
+				if (touches) {
+					const direction = this.swipeDirection(start.pageX, touches.pageX, start.pageY, touches.pageY);
+					if (direction === 'Left' && Math.abs(this.position.pageX) !== this.limitMove) {
+						this.swipper(touches);
+					}
+				}
+			},
+			handlerTouchend(event) {
+				if (this.forbid || !this.move) return;
+				this.move = false;
+				const start = this.tStart;
+				let touches = event.changedTouches ? event.changedTouches[0] : {};
+				if (!touches || (touches.pageX === undefined && touches.pageY === undefined)) {
+					touches = {
+						pageX: event.pageX,
+						pageY: event.pageY
+					};
+				}
+				if (touches) {
+					const direction = this.swipeDirection(start.pageX, touches.pageX, start.pageY, touches.pageY);
+					const spacing = {
+						pageX: touches.pageX - start.pageX,
+						pageY: touches.pageY - start.pageY
+					};
+					if (Math.abs(spacing.pageX) >= 40 && direction === 'Left') {
+						spacing.pageX = spacing.pageX < 0 ? -this.limitMove : this.limitMove;
+						this.isShowBtn = true;
+					} else {
+						spacing.pageX = 0;
+					}
+					if (spacing.pageX == 0) {
+						this.isShowBtn = false;
+					}
+					this.position = spacing;
+
+				}
+			},
+			handlerButton(event) {
+				if (this.closable) {
+					this.closeButtonGroup();
+				}
+				const dataset = event.currentTarget.dataset;
+				this.$emit('click', {
+					index: Number(dataset.index),
+					item: this.params
+				});
+			},
+			closeButtonGroup() {
+				this.position = {
+					pageX: 0,
+					pageY: 0
+				};
+				this.isShowBtn = false;
+			},
+			//控制自定义按钮菜单
+			handlerParentButton(event) {
+				if (this.closable) {
+					this.closeButtonGroup();
+				}
+			},
+			manualSwitch(isOpen) {
+				let x = 0;
+				if (isOpen) {
+					if (this.actions.length === 0) {
+						x = this.operateWidth;
+					} else {
+						let width = 0;
+						this.actions.forEach(item => {
+							width += item.width;
+						});
+						x = width;
+					}
+				}
+				this.position = {
+					pageX: -x,
+					pageY: 0
+				};
+			},
+			px(num) {
+				return uni.upx2px(num) + 'px';
+			}
+		}
+	};
+</script>
+
+<style scoped>
+	.tui-swipeout-wrap {
+		position: relative;
+		overflow: hidden;
+		/* margin-bottom: 24rpx; */
+
+	}
+
+
+	.swipe-action-show {
+		position: relative;
+		z-index: 998;
+	}
+
+	.tui-swipeout-item {
+		width: 100%;
+		/* padding: 15px 20px; */
+		box-sizing: border-box;
+		transition: transform 0.2s ease;
+		font-size: 14px;
+		/* cursor: pointer; */
+	}
+
+	/* .tui-swipeout-item :active {
+    background-color: #fff !important;
+  } */
+
+	.tui-swipeout-content {
+		white-space: nowrap;
+		overflow: hidden;
+	}
+
+	.tui-swipeout-button-right-group {
+		position: absolute;
+		right: -100%;
+		top: 0;
+		height: 100%;
+		z-index: 1;
+		width: 100%;
+	}
+
+	.tui-swipeout-button-right-item {
+		height: 100%;
+		float: left;
+		white-space: nowrap;
+		box-sizing: border-box;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		text-align: center;
+	}
+
+	.swipe-action_mask {
+		display: block;
+		opacity: 0;
+		position: fixed;
+		z-index: 997;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+	}
+</style>

+ 430 - 0
components/update/app-update.vue

@@ -0,0 +1,430 @@
+<template>
+	<view class="wrap" v-if="popup_show">
+		<view class="popup-bg" :style="getHeight">
+			<view class="popup-content" :class="{ 'popup-content-show': popup_show }">
+				<view class="update-wrap">
+					<image src="./images/img.png" class="top-img"></image>
+					<view class="content">
+						<text class="title">{{$t(`发现新版本`)}}{{ update_info.version }}</text>
+						<!-- 升级描述 -->
+						<view class="title-sub" v-html="update_info.info"></view>
+						<!-- 升级按钮 -->
+						<button class="btn" v-if="downstatus < 1" @click="nowUpdate()">
+							{{$t(`立即升级`)}}
+						</button>
+						<!-- 下载进度 -->
+						<view class="sche-wrap" v-else>
+							<!-- 更新包下载中 -->
+							<view class="sche-bg">
+								<view class="sche-bg-jindu" :style="lengthWidth"></view>
+							</view>
+							<text class="down-text">{{$t(`下载进度`)}}:{{ (downSize / 1024 / 1024).toFixed(2) }}M/{{
+                  (fileSize / 1024 / 1024).toFixed(2)
+                }}M</text>
+						</view>
+					</view>
+				</view>
+				<image src="./images/close.png" class="close-ioc" @click="closeUpdate()"></image>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	let vm;
+	import {
+		getUpdateInfo
+	} from '@/api/public.js'
+
+	export default {
+		name: "appUpdate",
+		//@是否强制更新
+		props: {
+			tabbar: {
+				type: Boolean,
+				default: false, //是否有原生tabbar组件
+			},
+			getVer: {
+				type: Boolean,
+				default: false, //是否有原生tabbar组件
+			},
+		},
+		data() {
+			return {
+				popup_show: false, //弹窗是否显示
+				platform: "", //ios or android
+				version: "1.0.0", //当前软件版本
+				need_update: false, // 是否更新
+				downing: false, //是否下载中
+				downstatus: 0, //0未下载  1已开始 2已连接到资源  3已接收到数据  4下载完成
+				update_info: {
+					os: "", //设备系统
+					version: "", //最新版本
+					info: "", //升级说明
+				},
+				fileSize: 0, //文件大小
+				downSize: 0, //已下载大小
+				viewObj: null, //原生遮罩view
+			};
+		},
+		created() {
+			vm = this;
+			if (!this.getVer) this.update()
+		},
+		computed: {
+			// 下载进度计算
+			lengthWidth: function() {
+				let w = (this.downSize / this.fileSize) * 100;
+				if (!w) {
+					w = 0;
+				} else {
+					w = w.toFixed(2);
+				}
+				return {
+					width: w + "%", //return 宽度半分比
+				};
+			},
+			getHeight() {
+				let bottom = 0;
+				if (this.tabbar) {
+					bottom = 50;
+				}
+				return {
+					bottom: bottom + "px",
+					height: "auto",
+				};
+			},
+		},
+		methods: {
+			// 检查更新
+			update() {
+				// #ifdef APP-PLUS
+				// 获取手机系统信息
+				uni.getSystemInfo({
+					success: function(res) {
+						vm.platform = res.platform; //ios  or android
+						console.log("手机系统信息", vm.platform);
+					},
+				});
+
+				// 获取版本号
+				plus.runtime.getProperty(plus.runtime.appid, function(inf) {
+					vm.version = inf.version;
+				});
+				console.log("当前版本", vm.version);
+				this.getUpdateInfo(); //获取更新信息
+				// #endif
+			},
+
+			// 获取线上版本信息
+			getUpdateInfo() {
+				//向后台发起请求,获取最新版本号
+				getUpdateInfo(this.platform === "ios" ? 2 : 1)
+					.then((res) => {
+						console.log(res)
+						if(Array.isArray(res.data)){
+						 return	this.$emit('isNew')
+						}
+						const tagDate = uni.getStorageSync('app_update_time') || '',
+							nowDate = new Date().toLocaleDateString();
+						if (tagDate !== nowDate && !this.getVer) {
+							uni.setStorageSync('app_update_time', new Date().toLocaleDateString());
+						} else if ((tagDate !== nowDate) && this.getVer) {
+							if (!res.data.is_force) return
+						} else if (tagDate == nowDate && !this.getVer && !res.data.is_force) {
+							return
+						}
+						// 这里的返回的数据跟后台约定
+						let data = res.data;
+						// 循环获取当前设备对应的更新数据
+						vm.update_info = data;
+						if (!vm.update_info.platform) {
+							// 后台未配置当前系统的升级数据
+						} else {
+							console.log('111111111111111')
+							vm.checkUpdate(); ///检查是否更新
+						}
+					})
+					.catch((err) => {
+						vm.popup_show = false
+						console.log(err);
+					});
+			},
+			// 检查是否更新
+			checkUpdate() {
+				vm.need_update = vm.compareVersion(vm.version, vm.update_info.version); // 检查是否需要升级
+				if (vm.need_update) {
+					vm.popup_show = true; //线上版本号大于当前安装的版本号  显示升级框
+					if (vm.tabbar) {
+						//页面是否有原生tabbar组件
+						// 创建原生view用来遮罩tabbar的点击事件 (如果是没有用原生的tabbar这一步可以取消)
+						vm.viewObj = new plus.nativeObj.View("viewObj", {
+							bottom: "0px",
+							left: "0px",
+							height: "50px",
+							width: "100%",
+							backgroundColor: "rgba(0,0,0,.6)",
+						});
+						vm.viewObj.show(); //显示原生遮罩
+					}
+				} else {
+					this.$emit('isNew')
+				}
+			},
+
+			// 取消更新
+			closeUpdate() {
+				if (vm.update_info.is_force) {
+					// 强制更新,取消退出app
+					this.platform == "android" ?
+						plus.runtime.quit() :
+						plus.ios
+						.import("UIApplication")
+						.sharedApplication()
+						.performSelector("exit");
+				} else {
+					vm.popup_show = false; //关闭升级弹窗
+					if (vm.viewObj) vm.viewObj.hide(); //隐藏原生遮罩
+				}
+			},
+			// 立即更新
+			nowUpdate() {
+				if (vm.downing) return false; //如果正在下载就停止操作
+				vm.downing = true; //状态改变 正在下载中
+
+				if (/\.apk$/.test(vm.update_info.url)) {
+					// 如果是apk地址
+					vm.download_wgt(); // 安装包/升级包更新
+				} else if (/\.wgt$/.test(vm.update_info.url)) {
+					// 如果是更新包
+					vm.download_wgt(); // 安装包/升级包更新
+				} else {
+					plus.runtime.openURL(vm.update_info.url, function() {
+						//调用外部浏览器打开更新地址
+						plus.nativeUI.toast("打开错误");
+					});
+				}
+			},
+			// 下载升级资源包
+			download_wgt() {
+				plus.nativeUI.showWaiting("下载更新文件..."); //下载更新文件...
+				let options = {
+					method: "get",
+				};
+				let dtask = plus.downloader.createDownload(
+					vm.update_info.url,
+					options,
+					function(d, status) {}
+				);
+
+				dtask.addEventListener("statechanged", function(task, status) {
+					if (status === null) {} else if (status == 200) {
+						//在这里打印会不停的执行,请注意,正式上线切记不要在这里打印东西///////////////////////////////////////////////////
+						vm.downstatus = task.state;
+						switch (task.state) {
+							case 3: // 已接收到数据
+								vm.downSize = task.downloadedSize;
+								if (task.totalSize) {
+									vm.fileSize = task.totalSize; //服务器须返回正确的content-length才会有长度
+								}
+								break;
+							case 4:
+								vm.installWgt(task.filename); // 安装wgt包
+								break;
+						}
+					} else {
+						plus.nativeUI.closeWaiting();
+						plus.nativeUI.toast("下载出错");
+						vm.downing = false;
+						vm.downstatus = 0;
+					}
+				});
+				dtask.start();
+			},
+
+			// 安装文件
+			installWgt(path) {
+				plus.nativeUI.showWaiting("安装更新文件..."); //安装更新文件...
+				plus.runtime.install(
+					path, {},
+					function() {
+						plus.nativeUI.closeWaiting();
+						// 应用资源下载完成!
+						plus.nativeUI.alert("应用资源下载完成!", function() {
+							plus.runtime.restart();
+						});
+					},
+
+					function(e) {
+						plus.nativeUI.closeWaiting();
+						// 安装更新文件失败
+						plus.nativeUI.alert("安装更新文件失败[" + e.code + "]:" + e.message);
+					}
+				);
+			},
+			// 对比版本号
+			compareVersion(ov, nv) {
+				if (!ov || !nv || ov == "" || nv == "") {
+					return false;
+				}
+				let b = false,
+					ova = ov.split(".", 4),
+					nva = nv.split(".", 4);
+				for (let i = 0; i < ova.length && i < nva.length; i++) {
+					let so = ova[i],
+						no = parseInt(so),
+						sn = nva[i],
+						nn = parseInt(sn);
+					if (nn > no || sn.length > so.length) {
+						return true;
+					} else if (nn < no) {
+						return false;
+					}
+				}
+				if (nva.length > ova.length && 0 == nv.indexOf(ov)) {
+					return true;
+				} else {
+					return false;
+				}
+			},
+		},
+	};
+</script>
+
+<style lang="scss" scoped>
+	.popup-bg {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		position: fixed;
+		top: 0;
+		left: 0rpx;
+		right: 0;
+		bottom: 0;
+		width: 750rpx;
+		background-color: rgba(0, 0, 0, 0.6);
+		z-index: 10000;
+	}
+
+	.popup-content {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+	}
+
+	.popup-content-show {
+		animation: mymove 500ms;
+		transform: scale(1);
+	}
+
+	@keyframes mymove {
+		0% {
+			transform: scale(0);
+			/*开始为原始大小*/
+		}
+
+		100% {
+			transform: scale(1);
+		}
+	}
+
+	.update-wrap {
+		width: 580rpx;
+		border-radius: 18rpx;
+		position: relative;
+		display: flex;
+		flex-direction: column;
+		background-color: #ffffff;
+		padding: 170rpx 30rpx 0;
+
+		.top-img {
+			position: absolute;
+			left: 0;
+			width: 100%;
+			height: 256rpx;
+			top: -128rpx;
+		}
+
+		.content {
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			padding-bottom: 40rpx;
+
+			.title {
+				font-size: 32rpx;
+				font-weight: bold;
+				color: #6526f3;
+			}
+
+			.title-sub {
+				text-align: center;
+				font-size: 24rpx;
+				color: #666666;
+				padding: 30rpx 0;
+			}
+
+			.btn {
+				width: 460rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				color: #ffffff;
+				font-size: 30rpx;
+				height: 80rpx;
+				line-height: 80rpx;
+				border-radius: 100px;
+				background-color: #6526f3;
+				margin-top: 20rpx;
+			}
+		}
+	}
+
+	.close-ioc {
+		width: 70rpx;
+		height: 70rpx;
+		margin-top: 30rpx;
+	}
+
+	.sche-wrap {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: flex-end;
+		padding: 10rpx 50rpx 0;
+
+		.sche-wrap-text {
+			font-size: 24rpx;
+			color: #666;
+			margin-bottom: 20rpx;
+		}
+
+		.sche-bg {
+			position: relative;
+			background-color: #cccccc;
+			height: 30rpx;
+			border-radius: 100px;
+			width: 480rpx;
+			display: flex;
+			align-items: center;
+
+			.sche-bg-jindu {
+				position: absolute;
+				left: 0;
+				top: 0;
+				height: 30rpx;
+				min-width: 40rpx;
+				border-radius: 100px;
+				background: url(images/round.png) #5775e7 center right 4rpx no-repeat;
+				background-size: 26rpx 26rpx;
+			}
+		}
+
+		.down-text {
+			font-size: 24rpx;
+			color: #5674e5;
+			margin-top: 16rpx;
+		}
+	}
+</style>

BIN
components/update/images/close.png


BIN
components/update/images/img.png


BIN
components/update/images/round.png


BIN
components/update/images/update-img.png


+ 147 - 0
components/userEvaluation/index.vue

@@ -0,0 +1,147 @@
+<template>
+	<view class="evaluateWtapper">
+		<view class="evaluateItem" v-for="(item, indexw) in reply" :key="indexw">
+			<view class="pic-text acea-row row-middle">
+				<view class="pictrue">
+					<image :src="item.avatar"></image>
+				</view>
+				<view class="acea-row row-middle">
+					<view class="acea-row row-middle" style="margin-right: 15rpx;">
+						<view class="name line1">{{ item.nickname }}</view>
+						<view class="vipImg" v-if="item.is_money_level>0"><image src="../../static/images/svip.gif"></image></view>
+					</view>
+					<view class="start" :class="'star' + item.star"></view>
+				</view>
+			</view>
+			<view class="time">{{ item.add_time }} {{ item.suk }}</view>
+			<view class="evaluate-infor">{{ item.comment }}</view>
+			<view class="imgList acea-row">
+				<view class="pictrue" v-for="(itemn, indexn) in item.pics" :key="indexn">
+					<image :src="itemn" class="image" @click='getpreviewImage(indexw, indexn)'></image>
+				</view>
+			</view>
+			<view class="reply" v-if="item.merchant_reply_content">
+				<text class="font-num">{{$t(`店小二`)}}</text>:{{
+          item.merchant_reply_content
+        }}
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	export default {
+		props: {
+			reply: {
+				type: Array,
+				default: () => []
+			}
+		},
+		data: function() {
+			return {};
+		},
+		methods: {
+			getpreviewImage: function(indexw, indexn) {
+				uni.previewImage({
+					urls: this.reply[indexw].pics,
+					current: this.reply[indexw].pics[indexn]
+				});
+			}
+		}
+	}
+</script>
+<style scoped lang='scss'>
+	.vipImg{
+		width: 68rpx;
+		height: 27rpx;
+		image{
+			width: 100%;
+			height: 100%;
+			margin-left: 10rpx;
+		}
+	}
+	.evaluateWtapper .evaluateItem {
+		background-color: #fff;
+		padding-bottom: 25rpx;
+	}
+
+	.evaluateWtapper .evaluateItem~.evaluateItem {
+		border-top: 1rpx solid #f5f5f5;
+	}
+
+	.evaluateWtapper .evaluateItem .pic-text {
+		font-size: 26rpx;
+		color: #282828;
+		height: 95rpx;
+		padding: 0 30rpx;
+	}
+
+	.evaluateWtapper .evaluateItem .pic-text .pictrue {
+		width: 60rpx;
+		height: 60rpx;
+		margin-right: 20rpx;
+		border-radius: 50%;
+	}
+
+	.evaluateWtapper .evaluateItem .pic-text .pictrue image {
+		width: 100%;
+		height: 100%;
+		border-radius: 50%;
+	}
+
+	.evaluateWtapper .evaluateItem .pic-text .name {
+		max-width: 450rpx;
+		font-size: 30rpx;
+	}
+
+	.evaluateWtapper .evaluateItem .time {
+		font-size: 24rpx;
+		color: #82848f;
+		padding: 0 30rpx;
+	}
+
+	.evaluateWtapper .evaluateItem .evaluate-infor {
+		font-size: 28rpx;
+		color: #282828;
+		margin-top: 19rpx;
+		padding: 0 30rpx;
+	}
+
+	.evaluateWtapper .evaluateItem .imgList {
+		padding: 0 30rpx 0 15rpx;
+		margin-top: 25rpx;
+	}
+
+	.evaluateWtapper .evaluateItem .imgList .pictrue {
+		width: 156rpx;
+		height: 156rpx;
+		margin: 0 0 15rpx 15rpx;
+	}
+
+	.evaluateWtapper .evaluateItem .imgList .pictrue image {
+		width: 100%;
+		height: 100%;
+		background-color: #f7f7f7;
+	}
+
+	.evaluateWtapper .evaluateItem .reply {
+		font-size: 26rpx;
+		color: #454545;
+		background-color: #f7f7f7;
+		border-radius: 5rpx;
+		margin: 20rpx 30rpx 0 30rpx;
+		padding: 20rpx;
+		position: relative;
+	}
+
+	.evaluateWtapper .evaluateItem .reply::before {
+		content: "";
+		width: 0;
+		height: 0;
+		border-left: 20rpx solid transparent;
+		border-right: 20rpx solid transparent;
+		border-bottom: 30rpx solid #f7f7f7;
+		position: absolute;
+		top: -14rpx;
+		left: 40rpx;
+	}
+</style>

+ 1201 - 0
components/zb-code/qrcode.js

@@ -0,0 +1,1201 @@
+let QRCode = {};
+(function () {
+    /**
+     * 获取单个字符的utf8编码
+     * unicode BMP平面约65535个字符
+     * @param {num} code
+     * return {array}
+     */
+    function unicodeFormat8(code) {
+        // 1 byte
+        var c0, c1, c2;
+        if (code < 128) {
+            return [code];
+            // 2 bytes
+        } else if (code < 2048) {
+            c0 = 192 + (code >> 6);
+            c1 = 128 + (code & 63);
+            return [c0, c1];
+            // 3 bytes
+        } else {
+            c0 = 224 + (code >> 12);
+            c1 = 128 + (code >> 6 & 63);
+            c2 = 128 + (code & 63);
+            return [c0, c1, c2];
+        }
+    }
+    /**
+     * 获取字符串的utf8编码字节串
+     * @param {string} string
+     * @return {array}
+     */
+    function getUTF8Bytes(string) {
+        var utf8codes = [];
+        for (var i = 0; i < string.length; i++) {
+            var code = string.charCodeAt(i);
+            var utf8 = unicodeFormat8(code);
+            for (var j = 0; j < utf8.length; j++) {
+                utf8codes.push(utf8[j]);
+            }
+        }
+        return utf8codes;
+    }
+    /**
+     * 二维码算法实现
+     * @param {string} data              要编码的信息字符串
+     * @param {num} errorCorrectLevel 纠错等级
+     */
+    function QRCodeAlg(data, twodimensionalcodeee5conversionmethod) {
+        this.typeNumber = -1; //版本
+        this.errorCorrectLevel = twodimensionalcodeee5conversionmethod;
+        this.modules = null; //二维矩阵,存放最终结果
+        this.moduleCount = 0; //矩阵大小
+        this.dataCache = null; //数据缓存
+        this.rsBlocks = null; //版本数据信息
+        this.totalDataCount = -1; //可使用的数据量
+        this.data = data;
+        this.utf8bytes = getUTF8Bytes(data);
+        this.make();
+    }
+    QRCodeAlg.prototype = {
+        constructor: QRCodeAlg,
+        /**
+         * 获取二维码矩阵大小
+         * @return {num} 矩阵大小
+         */
+        getModuleCount: function () {
+            return this.moduleCount;
+        },
+        /**
+         * 编码
+         */
+        make: function () {
+            this.getRightType();
+            this.dataCache = this.createData();
+            this.createQrcode();
+        },
+        /**
+         * 设置二位矩阵功能图形
+         * @param  {bool} test 表示是否在寻找最好掩膜阶段
+         * @param  {num} maskPattern 掩膜的版本
+         */
+        makeImpl: function (maskPattern) {
+            this.moduleCount = this.typeNumber * 4 + 17;
+            this.modules = new Array(this.moduleCount);
+            for (var row = 0; row < this.moduleCount; row++) {
+                this.modules[row] = new Array(this.moduleCount);
+            }
+            this.setupPositionProbePattern(0, 0);
+            this.setupPositionProbePattern(this.moduleCount - 7, 0);
+            this.setupPositionProbePattern(0, this.moduleCount - 7);
+            this.setupPositionAdjustPattern();
+            this.setupTimingPattern();
+            this.setupTypeInfo(true, maskPattern);
+            if (this.typeNumber >= 7) {
+                this.setupTypeNumber(true);
+            }
+            this.mapData(this.dataCache, maskPattern);
+        },
+        /**
+         * 设置二维码的位置探测图形
+         * @param  {num} row 探测图形的中心横坐标
+         * @param  {num} col 探测图形的中心纵坐标
+         */
+        setupPositionProbePattern: function (row, col) {
+            for (var r = -1; r <= 7; r++) {
+                if (row + r <= -1 || this.moduleCount <= row + r) continue;
+                for (var c = -1; c <= 7; c++) {
+                    if (col + c <= -1 || this.moduleCount <= col + c) continue;
+                    if ((0 <= r && r <= 6 && (c == 0 || c == 6)) || (0 <= c && c <= 6 && (r == 0 || r == 6)) || (2 <= r && r <= 4 && 2 <= c && c <= 4)) {
+                        this.modules[row + r][col + c] = true;
+                    } else {
+                        this.modules[row + r][col + c] = false;
+                    }
+                }
+            }
+        },
+        /**
+         * 创建二维码
+         * @return {[type]} [description]
+         */
+        createQrcode: function () {
+            var minLostPoint = 0;
+            var pattern = 0;
+            var bestModules = null;
+            for (var i = 0; i < 8; i++) {
+                this.makeImpl(i);
+                var lostPoint = QRUtil.getLostPoint(this);
+                if (i == 0 || minLostPoint > lostPoint) {
+                    minLostPoint = lostPoint;
+                    pattern = i;
+                    bestModules = this.modules;
+                }
+            }
+            this.modules = bestModules;
+            this.setupTypeInfo(false, pattern);
+            if (this.typeNumber >= 7) {
+                this.setupTypeNumber(false);
+            }
+        },
+        /**
+         * 设置定位图形
+         * @return {[type]} [description]
+         */
+        setupTimingPattern: function () {
+            for (var r = 8; r < this.moduleCount - 8; r++) {
+                if (this.modules[r][6] != null) {
+                    continue;
+                }
+                this.modules[r][6] = (r % 2 == 0);
+                if (this.modules[6][r] != null) {
+                    continue;
+                }
+                this.modules[6][r] = (r % 2 == 0);
+            }
+        },
+        /**
+         * 设置矫正图形
+         * @return {[type]} [description]
+         */
+        setupPositionAdjustPattern: function () {
+            var pos = QRUtil.getPatternPosition(this.typeNumber);
+            for (var i = 0; i < pos.length; i++) {
+                for (var j = 0; j < pos.length; j++) {
+                    var row = pos[i];
+                    var col = pos[j];
+                    if (this.modules[row][col] != null) {
+                        continue;
+                    }
+                    for (var r = -2; r <= 2; r++) {
+                        for (var c = -2; c <= 2; c++) {
+                            if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {
+                                this.modules[row + r][col + c] = true;
+                            } else {
+                                this.modules[row + r][col + c] = false;
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        /**
+         * 设置版本信息(7以上版本才有)
+         * @param  {bool} test 是否处于判断最佳掩膜阶段
+         * @return {[type]}      [description]
+         */
+        setupTypeNumber: function (test) {
+            var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
+            for (var i = 0; i < 18; i++) {
+                var mod = (!test && ((bits >> i) & 1) == 1);
+                this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
+                this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+            }
+        },
+        /**
+         * 设置格式信息(纠错等级和掩膜版本)
+         * @param  {bool} test
+         * @param  {num} maskPattern 掩膜版本
+         * @return {}
+         */
+        setupTypeInfo: function (test, maskPattern) {
+            var data = (QRErrorCorrectLevel[this.errorCorrectLevel] << 3) | maskPattern;
+            var bits = QRUtil.getBCHTypeInfo(data);
+            // vertical
+            for (var i = 0; i < 15; i++) {
+                var mod = (!test && ((bits >> i) & 1) == 1);
+                if (i < 6) {
+                    this.modules[i][8] = mod;
+                } else if (i < 8) {
+                    this.modules[i + 1][8] = mod;
+                } else {
+                    this.modules[this.moduleCount - 15 + i][8] = mod;
+                }
+                // horizontal
+                var mod = (!test && ((bits >> i) & 1) == 1);
+                if (i < 8) {
+                    this.modules[8][this.moduleCount - i - 1] = mod;
+                } else if (i < 9) {
+                    this.modules[8][15 - i - 1 + 1] = mod;
+                } else {
+                    this.modules[8][15 - i - 1] = mod;
+                }
+            }
+            // fixed module
+            this.modules[this.moduleCount - 8][8] = (!test);
+        },
+        /**
+         * 数据编码
+         * @return {[type]} [description]
+         */
+        createData: function () {
+            var buffer = new QRBitBuffer();
+            var lengthBits = this.typeNumber > 9 ? 16 : 8;
+            buffer.put(4, 4); //添加模式
+            buffer.put(this.utf8bytes.length, lengthBits);
+            for (var i = 0, l = this.utf8bytes.length; i < l; i++) {
+                buffer.put(this.utf8bytes[i], 8);
+            }
+            if (buffer.length + 4 <= this.totalDataCount * 8) {
+                buffer.put(0, 4);
+            }
+            // padding
+            while (buffer.length % 8 != 0) {
+                buffer.putBit(false);
+            }
+            // padding
+            while (true) {
+                if (buffer.length >= this.totalDataCount * 8) {
+                    break;
+                }
+                buffer.put(QRCodeAlg.PAD0, 8);
+                if (buffer.length >= this.totalDataCount * 8) {
+                    break;
+                }
+                buffer.put(QRCodeAlg.PAD1, 8);
+            }
+            return this.createBytes(buffer);
+        },
+        /**
+         * 纠错码编码
+         * @param  {buffer} buffer 数据编码
+         * @return {[type]}
+         */
+        createBytes: function (buffer) {
+            var offset = 0;
+            var maxDcCount = 0;
+            var maxEcCount = 0;
+            var length = this.rsBlock.length / 3;
+            var rsBlocks = new Array();
+            for (var i = 0; i < length; i++) {
+                var count = this.rsBlock[i * 3 + 0];
+                var totalCount = this.rsBlock[i * 3 + 1];
+                var dataCount = this.rsBlock[i * 3 + 2];
+                for (var j = 0; j < count; j++) {
+                    rsBlocks.push([dataCount, totalCount]);
+                }
+            }
+            var dcdata = new Array(rsBlocks.length);
+            var ecdata = new Array(rsBlocks.length);
+            for (var r = 0; r < rsBlocks.length; r++) {
+                var dcCount = rsBlocks[r][0];
+                var ecCount = rsBlocks[r][1] - dcCount;
+                maxDcCount = Math.max(maxDcCount, dcCount);
+                maxEcCount = Math.max(maxEcCount, ecCount);
+                dcdata[r] = new Array(dcCount);
+                for (var i = 0; i < dcdata[r].length; i++) {
+                    dcdata[r][i] = 0xff & buffer.buffer[i + offset];
+                }
+                offset += dcCount;
+                var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
+                var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
+                var modPoly = rawPoly.mod(rsPoly);
+                ecdata[r] = new Array(rsPoly.getLength() - 1);
+                for (var i = 0; i < ecdata[r].length; i++) {
+                    var modIndex = i + modPoly.getLength() - ecdata[r].length;
+                    ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0;
+                }
+            }
+            var data = new Array(this.totalDataCount);
+            var index = 0;
+            for (var i = 0; i < maxDcCount; i++) {
+                for (var r = 0; r < rsBlocks.length; r++) {
+                    if (i < dcdata[r].length) {
+                        data[index++] = dcdata[r][i];
+                    }
+                }
+            }
+            for (var i = 0; i < maxEcCount; i++) {
+                for (var r = 0; r < rsBlocks.length; r++) {
+                    if (i < ecdata[r].length) {
+                        data[index++] = ecdata[r][i];
+                    }
+                }
+            }
+            return data;
+
+        },
+        /**
+         * 布置模块,构建最终信息
+         * @param  {} data
+         * @param  {} maskPattern
+         * @return {}
+         */
+        mapData: function (data, maskPattern) {
+            var inc = -1;
+            var row = this.moduleCount - 1;
+            var bitIndex = 7;
+            var byteIndex = 0;
+            for (var col = this.moduleCount - 1; col > 0; col -= 2) {
+                if (col == 6) col--;
+                while (true) {
+                    for (var c = 0; c < 2; c++) {
+                        if (this.modules[row][col - c] == null) {
+                            var dark = false;
+                            if (byteIndex < data.length) {
+                                dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
+                            }
+                            var mask = QRUtil.getMask(maskPattern, row, col - c);
+                            if (mask) {
+                                dark = !dark;
+                            }
+                            this.modules[row][col - c] = dark;
+                            bitIndex--;
+                            if (bitIndex == -1) {
+                                byteIndex++;
+                                bitIndex = 7;
+                            }
+                        }
+                    }
+                    row += inc;
+                    if (row < 0 || this.moduleCount <= row) {
+                        row -= inc;
+                        inc = -inc;
+                        break;
+                    }
+                }
+            }
+        }
+    };
+    /**
+     * 填充字段
+     */
+    QRCodeAlg.PAD0 = 0xEC;
+    QRCodeAlg.PAD1 = 0x11;
+    //---------------------------------------------------------------------
+    // 纠错等级对应的编码
+    //---------------------------------------------------------------------
+    var QRErrorCorrectLevel = [1, 0, 3, 2];
+    //---------------------------------------------------------------------
+    // 掩膜版本
+    //---------------------------------------------------------------------
+    var QRMaskPattern = {
+        PATTERN000: 0,
+        PATTERN001: 1,
+        PATTERN010: 2,
+        PATTERN011: 3,
+        PATTERN100: 4,
+        PATTERN101: 5,
+        PATTERN110: 6,
+        PATTERN111: 7
+    };
+    //---------------------------------------------------------------------
+    // 工具类
+    //---------------------------------------------------------------------
+    var QRUtil = {
+        /*
+        每个版本矫正图形的位置
+         */
+        PATTERN_POSITION_TABLE: [
+            [],
+            [6, 18],
+            [6, 22],
+            [6, 26],
+            [6, 30],
+            [6, 34],
+            [6, 22, 38],
+            [6, 24, 42],
+            [6, 26, 46],
+            [6, 28, 50],
+            [6, 30, 54],
+            [6, 32, 58],
+            [6, 34, 62],
+            [6, 26, 46, 66],
+            [6, 26, 48, 70],
+            [6, 26, 50, 74],
+            [6, 30, 54, 78],
+            [6, 30, 56, 82],
+            [6, 30, 58, 86],
+            [6, 34, 62, 90],
+            [6, 28, 50, 72, 94],
+            [6, 26, 50, 74, 98],
+            [6, 30, 54, 78, 102],
+            [6, 28, 54, 80, 106],
+            [6, 32, 58, 84, 110],
+            [6, 30, 58, 86, 114],
+            [6, 34, 62, 90, 118],
+            [6, 26, 50, 74, 98, 122],
+            [6, 30, 54, 78, 102, 126],
+            [6, 26, 52, 78, 104, 130],
+            [6, 30, 56, 82, 108, 134],
+            [6, 34, 60, 86, 112, 138],
+            [6, 30, 58, 86, 114, 142],
+            [6, 34, 62, 90, 118, 146],
+            [6, 30, 54, 78, 102, 126, 150],
+            [6, 24, 50, 76, 102, 128, 154],
+            [6, 28, 54, 80, 106, 132, 158],
+            [6, 32, 58, 84, 110, 136, 162],
+            [6, 26, 54, 82, 110, 138, 166],
+            [6, 30, 58, 86, 114, 142, 170]
+        ],
+        G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),
+        G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),
+        G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),
+        /*
+        BCH编码格式信息
+         */
+        getBCHTypeInfo: function (data) {
+            var d = data << 10;
+            while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
+                d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15)));
+            }
+            return ((data << 10) | d) ^ QRUtil.G15_MASK;
+        },
+        /*
+        BCH编码版本信息
+         */
+        getBCHTypeNumber: function (data) {
+            var d = data << 12;
+            while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
+                d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18)));
+            }
+            return (data << 12) | d;
+        },
+        /*
+        获取BCH位信息
+         */
+        getBCHDigit: function (data) {
+            var digit = 0;
+            while (data != 0) {
+                digit++;
+                data >>>= 1;
+            }
+            return digit;
+        },
+        /*
+        获取版本对应的矫正图形位置
+         */
+        getPatternPosition: function (typeNumber) {
+            return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
+        },
+        /*
+        掩膜算法
+         */
+        getMask: function (maskPattern, i, j) {
+            switch (maskPattern) {
+                case QRMaskPattern.PATTERN000:
+                    return (i + j) % 2 == 0;
+                case QRMaskPattern.PATTERN001:
+                    return i % 2 == 0;
+                case QRMaskPattern.PATTERN010:
+                    return j % 3 == 0;
+                case QRMaskPattern.PATTERN011:
+                    return (i + j) % 3 == 0;
+                case QRMaskPattern.PATTERN100:
+                    return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
+                case QRMaskPattern.PATTERN101:
+                    return (i * j) % 2 + (i * j) % 3 == 0;
+                case QRMaskPattern.PATTERN110:
+                    return ((i * j) % 2 + (i * j) % 3) % 2 == 0;
+                case QRMaskPattern.PATTERN111:
+                    return ((i * j) % 3 + (i + j) % 2) % 2 == 0;
+                default:
+                    throw new Error("bad maskPattern:" + maskPattern);
+            }
+        },
+        /*
+        获取RS的纠错多项式
+         */
+        getErrorCorrectPolynomial: function (errorCorrectLength) {
+            var a = new QRPolynomial([1], 0);
+            for (var i = 0; i < errorCorrectLength; i++) {
+                a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
+            }
+            return a;
+        },
+        /*
+        获取评价
+         */
+        getLostPoint: function (qrCode) {
+            var moduleCount = qrCode.getModuleCount(),
+                lostPoint = 0,
+                darkCount = 0;
+            for (var row = 0; row < moduleCount; row++) {
+                var sameCount = 0;
+                var head = qrCode.modules[row][0];
+                for (var col = 0; col < moduleCount; col++) {
+                    var current = qrCode.modules[row][col];
+                    //level 3 评价
+                    if (col < moduleCount - 6) {
+                        if (current && !qrCode.modules[row][col + 1] && qrCode.modules[row][col + 2] && qrCode.modules[row][col + 3] && qrCode.modules[row][col + 4] && !qrCode.modules[row][col + 5] && qrCode.modules[row][col + 6]) {
+                            if (col < moduleCount - 10) {
+                                if (qrCode.modules[row][col + 7] && qrCode.modules[row][col + 8] && qrCode.modules[row][col + 9] && qrCode.modules[row][col + 10]) {
+                                    lostPoint += 40;
+                                }
+                            } else if (col > 3) {
+                                if (qrCode.modules[row][col - 1] && qrCode.modules[row][col - 2] && qrCode.modules[row][col - 3] && qrCode.modules[row][col - 4]) {
+                                    lostPoint += 40;
+                                }
+                            }
+                        }
+                    }
+                    //level 2 评价
+                    if ((row < moduleCount - 1) && (col < moduleCount - 1)) {
+                        var count = 0;
+                        if (current) count++;
+                        if (qrCode.modules[row + 1][col]) count++;
+                        if (qrCode.modules[row][col + 1]) count++;
+                        if (qrCode.modules[row + 1][col + 1]) count++;
+                        if (count == 0 || count == 4) {
+                            lostPoint += 3;
+                        }
+                    }
+                    //level 1 评价
+                    if (head ^ current) {
+                        sameCount++;
+                    } else {
+                        head = current;
+                        if (sameCount >= 5) {
+                            lostPoint += (3 + sameCount - 5);
+                        }
+                        sameCount = 1;
+                    }
+                    //level 4 评价
+                    if (current) {
+                        darkCount++;
+                    }
+                }
+            }
+            for (var col = 0; col < moduleCount; col++) {
+                var sameCount = 0;
+                var head = qrCode.modules[0][col];
+                for (var row = 0; row < moduleCount; row++) {
+                    var current = qrCode.modules[row][col];
+                    //level 3 评价
+                    if (row < moduleCount - 6) {
+                        if (current && !qrCode.modules[row + 1][col] && qrCode.modules[row + 2][col] && qrCode.modules[row + 3][col] && qrCode.modules[row + 4][col] && !qrCode.modules[row + 5][col] && qrCode.modules[row + 6][col]) {
+                            if (row < moduleCount - 10) {
+                                if (qrCode.modules[row + 7][col] && qrCode.modules[row + 8][col] && qrCode.modules[row + 9][col] && qrCode.modules[row + 10][col]) {
+                                    lostPoint += 40;
+                                }
+                            } else if (row > 3) {
+                                if (qrCode.modules[row - 1][col] && qrCode.modules[row - 2][col] && qrCode.modules[row - 3][col] && qrCode.modules[row - 4][col]) {
+                                    lostPoint += 40;
+                                }
+                            }
+                        }
+                    }
+                    //level 1 评价
+                    if (head ^ current) {
+                        sameCount++;
+                    } else {
+                        head = current;
+                        if (sameCount >= 5) {
+                            lostPoint += (3 + sameCount - 5);
+                        }
+                        sameCount = 1;
+                    }
+                }
+            }
+            // LEVEL4
+            var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+            lostPoint += ratio * 10;
+            return lostPoint;
+        }
+
+    };
+    //---------------------------------------------------------------------
+    // QRMath使用的数学工具
+    //---------------------------------------------------------------------
+    var QRMath = {
+        /*
+        将n转化为a^m
+         */
+        glog: function (n) {
+            if (n < 1) {
+                throw new Error("glog(" + n + ")");
+            }
+            return QRMath.LOG_TABLE[n];
+        },
+        /*
+        将a^m转化为n
+         */
+        gexp: function (n) {
+            while (n < 0) {
+                n += 255;
+            }
+            while (n >= 256) {
+                n -= 255;
+            }
+            return QRMath.EXP_TABLE[n];
+        },
+        EXP_TABLE: new Array(256),
+        LOG_TABLE: new Array(256)
+
+    };
+    for (var i = 0; i < 8; i++) {
+        QRMath.EXP_TABLE[i] = 1 << i;
+    }
+    for (var i = 8; i < 256; i++) {
+        QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];
+    }
+    for (var i = 0; i < 255; i++) {
+        QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
+    }
+    //---------------------------------------------------------------------
+    // QRPolynomial 多项式
+    //---------------------------------------------------------------------
+    /**
+     * 多项式类
+     * @param {Array} num   系数
+     * @param {num} shift a^shift
+     */
+    function QRPolynomial(num, shift) {
+        if (num.length == undefined) {
+            throw new Error(num.length + "/" + shift);
+        }
+        var offset = 0;
+        while (offset < num.length && num[offset] == 0) {
+            offset++;
+        }
+        this.num = new Array(num.length - offset + shift);
+        for (var i = 0; i < num.length - offset; i++) {
+            this.num[i] = num[i + offset];
+        }
+    }
+    QRPolynomial.prototype = {
+        get: function (index) {
+            return this.num[index];
+        },
+        getLength: function () {
+            return this.num.length;
+        },
+        /**
+         * 多项式乘法
+         * @param  {QRPolynomial} e 被乘多项式
+         * @return {[type]}   [description]
+         */
+        multiply: function (e) {
+            var num = new Array(this.getLength() + e.getLength() - 1);
+            for (var i = 0; i < this.getLength(); i++) {
+                for (var j = 0; j < e.getLength(); j++) {
+                    num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
+                }
+            }
+            return new QRPolynomial(num, 0);
+        },
+        /**
+         * 多项式模运算
+         * @param  {QRPolynomial} e 模多项式
+         * @return {}
+         */
+        mod: function (e) {
+            var tl = this.getLength(),
+                el = e.getLength();
+            if (tl - el < 0) {
+                return this;
+            }
+            var num = new Array(tl);
+            for (var i = 0; i < tl; i++) {
+                num[i] = this.get(i);
+            }
+            while (num.length >= el) {
+                var ratio = QRMath.glog(num[0]) - QRMath.glog(e.get(0));
+
+                for (var i = 0; i < e.getLength(); i++) {
+                    num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
+                }
+                while (num[0] == 0) {
+                    num.shift();
+                }
+            }
+            return new QRPolynomial(num, 0);
+        }
+    };
+
+    //---------------------------------------------------------------------
+    // RS_BLOCK_TABLE
+    //---------------------------------------------------------------------
+    /*
+    二维码各个版本信息[块数, 每块中的数据块数, 每块中的信息块数]
+     */
+    var RS_BLOCK_TABLE = [
+        // L
+        // M
+        // Q
+        // H
+        // 1
+        [1, 26, 19],
+        [1, 26, 16],
+        [1, 26, 13],
+        [1, 26, 9],
+
+        // 2
+        [1, 44, 34],
+        [1, 44, 28],
+        [1, 44, 22],
+        [1, 44, 16],
+
+        // 3
+        [1, 70, 55],
+        [1, 70, 44],
+        [2, 35, 17],
+        [2, 35, 13],
+
+        // 4
+        [1, 100, 80],
+        [2, 50, 32],
+        [2, 50, 24],
+        [4, 25, 9],
+
+        // 5
+        [1, 134, 108],
+        [2, 67, 43],
+        [2, 33, 15, 2, 34, 16],
+        [2, 33, 11, 2, 34, 12],
+
+        // 6
+        [2, 86, 68],
+        [4, 43, 27],
+        [4, 43, 19],
+        [4, 43, 15],
+
+        // 7
+        [2, 98, 78],
+        [4, 49, 31],
+        [2, 32, 14, 4, 33, 15],
+        [4, 39, 13, 1, 40, 14],
+
+        // 8
+        [2, 121, 97],
+        [2, 60, 38, 2, 61, 39],
+        [4, 40, 18, 2, 41, 19],
+        [4, 40, 14, 2, 41, 15],
+
+        // 9
+        [2, 146, 116],
+        [3, 58, 36, 2, 59, 37],
+        [4, 36, 16, 4, 37, 17],
+        [4, 36, 12, 4, 37, 13],
+
+        // 10
+        [2, 86, 68, 2, 87, 69],
+        [4, 69, 43, 1, 70, 44],
+        [6, 43, 19, 2, 44, 20],
+        [6, 43, 15, 2, 44, 16],
+
+        // 11
+        [4, 101, 81],
+        [1, 80, 50, 4, 81, 51],
+        [4, 50, 22, 4, 51, 23],
+        [3, 36, 12, 8, 37, 13],
+
+        // 12
+        [2, 116, 92, 2, 117, 93],
+        [6, 58, 36, 2, 59, 37],
+        [4, 46, 20, 6, 47, 21],
+        [7, 42, 14, 4, 43, 15],
+
+        // 13
+        [4, 133, 107],
+        [8, 59, 37, 1, 60, 38],
+        [8, 44, 20, 4, 45, 21],
+        [12, 33, 11, 4, 34, 12],
+
+        // 14
+        [3, 145, 115, 1, 146, 116],
+        [4, 64, 40, 5, 65, 41],
+        [11, 36, 16, 5, 37, 17],
+        [11, 36, 12, 5, 37, 13],
+
+        // 15
+        [5, 109, 87, 1, 110, 88],
+        [5, 65, 41, 5, 66, 42],
+        [5, 54, 24, 7, 55, 25],
+        [11, 36, 12],
+
+        // 16
+        [5, 122, 98, 1, 123, 99],
+        [7, 73, 45, 3, 74, 46],
+        [15, 43, 19, 2, 44, 20],
+        [3, 45, 15, 13, 46, 16],
+
+        // 17
+        [1, 135, 107, 5, 136, 108],
+        [10, 74, 46, 1, 75, 47],
+        [1, 50, 22, 15, 51, 23],
+        [2, 42, 14, 17, 43, 15],
+
+        // 18
+        [5, 150, 120, 1, 151, 121],
+        [9, 69, 43, 4, 70, 44],
+        [17, 50, 22, 1, 51, 23],
+        [2, 42, 14, 19, 43, 15],
+
+        // 19
+        [3, 141, 113, 4, 142, 114],
+        [3, 70, 44, 11, 71, 45],
+        [17, 47, 21, 4, 48, 22],
+        [9, 39, 13, 16, 40, 14],
+
+        // 20
+        [3, 135, 107, 5, 136, 108],
+        [3, 67, 41, 13, 68, 42],
+        [15, 54, 24, 5, 55, 25],
+        [15, 43, 15, 10, 44, 16],
+
+        // 21
+        [4, 144, 116, 4, 145, 117],
+        [17, 68, 42],
+        [17, 50, 22, 6, 51, 23],
+        [19, 46, 16, 6, 47, 17],
+
+        // 22
+        [2, 139, 111, 7, 140, 112],
+        [17, 74, 46],
+        [7, 54, 24, 16, 55, 25],
+        [34, 37, 13],
+
+        // 23
+        [4, 151, 121, 5, 152, 122],
+        [4, 75, 47, 14, 76, 48],
+        [11, 54, 24, 14, 55, 25],
+        [16, 45, 15, 14, 46, 16],
+
+        // 24
+        [6, 147, 117, 4, 148, 118],
+        [6, 73, 45, 14, 74, 46],
+        [11, 54, 24, 16, 55, 25],
+        [30, 46, 16, 2, 47, 17],
+
+        // 25
+        [8, 132, 106, 4, 133, 107],
+        [8, 75, 47, 13, 76, 48],
+        [7, 54, 24, 22, 55, 25],
+        [22, 45, 15, 13, 46, 16],
+
+        // 26
+        [10, 142, 114, 2, 143, 115],
+        [19, 74, 46, 4, 75, 47],
+        [28, 50, 22, 6, 51, 23],
+        [33, 46, 16, 4, 47, 17],
+
+        // 27
+        [8, 152, 122, 4, 153, 123],
+        [22, 73, 45, 3, 74, 46],
+        [8, 53, 23, 26, 54, 24],
+        [12, 45, 15, 28, 46, 16],
+
+        // 28
+        [3, 147, 117, 10, 148, 118],
+        [3, 73, 45, 23, 74, 46],
+        [4, 54, 24, 31, 55, 25],
+        [11, 45, 15, 31, 46, 16],
+
+        // 29
+        [7, 146, 116, 7, 147, 117],
+        [21, 73, 45, 7, 74, 46],
+        [1, 53, 23, 37, 54, 24],
+        [19, 45, 15, 26, 46, 16],
+
+        // 30
+        [5, 145, 115, 10, 146, 116],
+        [19, 75, 47, 10, 76, 48],
+        [15, 54, 24, 25, 55, 25],
+        [23, 45, 15, 25, 46, 16],
+
+        // 31
+        [13, 145, 115, 3, 146, 116],
+        [2, 74, 46, 29, 75, 47],
+        [42, 54, 24, 1, 55, 25],
+        [23, 45, 15, 28, 46, 16],
+
+        // 32
+        [17, 145, 115],
+        [10, 74, 46, 23, 75, 47],
+        [10, 54, 24, 35, 55, 25],
+        [19, 45, 15, 35, 46, 16],
+
+        // 33
+        [17, 145, 115, 1, 146, 116],
+        [14, 74, 46, 21, 75, 47],
+        [29, 54, 24, 19, 55, 25],
+        [11, 45, 15, 46, 46, 16],
+
+        // 34
+        [13, 145, 115, 6, 146, 116],
+        [14, 74, 46, 23, 75, 47],
+        [44, 54, 24, 7, 55, 25],
+        [59, 46, 16, 1, 47, 17],
+
+        // 35
+        [12, 151, 121, 7, 152, 122],
+        [12, 75, 47, 26, 76, 48],
+        [39, 54, 24, 14, 55, 25],
+        [22, 45, 15, 41, 46, 16],
+
+        // 36
+        [6, 151, 121, 14, 152, 122],
+        [6, 75, 47, 34, 76, 48],
+        [46, 54, 24, 10, 55, 25],
+        [2, 45, 15, 64, 46, 16],
+
+        // 37
+        [17, 152, 122, 4, 153, 123],
+        [29, 74, 46, 14, 75, 47],
+        [49, 54, 24, 10, 55, 25],
+        [24, 45, 15, 46, 46, 16],
+
+        // 38
+        [4, 152, 122, 18, 153, 123],
+        [13, 74, 46, 32, 75, 47],
+        [48, 54, 24, 14, 55, 25],
+        [42, 45, 15, 32, 46, 16],
+
+        // 39
+        [20, 147, 117, 4, 148, 118],
+        [40, 75, 47, 7, 76, 48],
+        [43, 54, 24, 22, 55, 25],
+        [10, 45, 15, 67, 46, 16],
+
+        // 40
+        [19, 148, 118, 6, 149, 119],
+        [18, 75, 47, 31, 76, 48],
+        [34, 54, 24, 34, 55, 25],
+        [20, 45, 15, 61, 46, 16]
+    ];
+
+    /**
+     * 根据数据获取对应版本
+     * @return {[type]} [description]
+     */
+    QRCodeAlg.prototype.getRightType = function () {
+        for (var typeNumber = 1; typeNumber < 41; typeNumber++) {
+            var rsBlock = RS_BLOCK_TABLE[(typeNumber - 1) * 4 + this.errorCorrectLevel];
+            if (rsBlock == undefined) {
+                throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + this.errorCorrectLevel);
+            }
+            var length = rsBlock.length / 3;
+            var totalDataCount = 0;
+            for (var i = 0; i < length; i++) {
+                var count = rsBlock[i * 3 + 0];
+                var dataCount = rsBlock[i * 3 + 2];
+                totalDataCount += dataCount * count;
+            }
+            var lengthBytes = typeNumber > 9 ? 2 : 1;
+            if (this.utf8bytes.length + lengthBytes < totalDataCount || typeNumber == 40) {
+                this.typeNumber = typeNumber;
+                this.rsBlock = rsBlock;
+                this.totalDataCount = totalDataCount;
+                break;
+            }
+        }
+    };
+
+    //---------------------------------------------------------------------
+    // QRBitBuffer
+    //---------------------------------------------------------------------
+    function QRBitBuffer() {
+        this.buffer = new Array();
+        this.length = 0;
+    }
+    QRBitBuffer.prototype = {
+        get: function (index) {
+            var bufIndex = Math.floor(index / 8);
+            return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1);
+        },
+        put: function (num, length) {
+            for (var i = 0; i < length; i++) {
+                this.putBit(((num >>> (length - i - 1)) & 1));
+            }
+        },
+        putBit: function (bit) {
+            var bufIndex = Math.floor(this.length / 8);
+            if (this.buffer.length <= bufIndex) {
+                this.buffer.push(0);
+            }
+            if (bit) {
+                this.buffer[bufIndex] |= (0x80 >>> (this.length % 8));
+            }
+            this.length++;
+        }
+    };
+
+
+
+    // xzedit
+    let qrcodeAlgObjCache = [];
+    /**
+     * 二维码构造函数,主要用于绘制
+     * @param  {参数列表} opt 传递参数
+     * @return {}
+     */
+    QRCode = function (opt) {
+        //设置默认参数
+        this.options = {
+            text: '',
+            size: 256,
+            correctLevel: 3,
+            background: '#ffffff',
+            foreground: '#000000',
+            pdground: '#000000',
+            image: '',
+            imageSize: 30,
+            canvasId: opt.canvasId,
+            context: opt.context,
+            usingComponents: opt.usingComponents,
+            showLoading: opt.showLoading,
+            loadingText: opt.loadingText,
+        };
+        if (typeof opt === 'string') { // 只编码ASCII字符串
+            opt = {
+                text: opt
+            };
+        }
+        if (opt) {
+            for (var i in opt) {
+                this.options[i] = opt[i];
+            }
+        }
+        //使用QRCodeAlg创建二维码结构
+        var qrCodeAlg = null;
+        for (var i = 0, l = qrcodeAlgObjCache.length; i < l; i++) {
+            if (qrcodeAlgObjCache[i].text == this.options.text && qrcodeAlgObjCache[i].text.correctLevel == this.options.correctLevel) {
+                qrCodeAlg = qrcodeAlgObjCache[i].obj;
+                break;
+            }
+        }
+        if (i == l) {
+            qrCodeAlg = new QRCodeAlg(this.options.text, this.options.correctLevel);
+            qrcodeAlgObjCache.push({
+                text: this.options.text,
+                correctLevel: this.options.correctLevel,
+                obj: qrCodeAlg
+            });
+        }
+        /**
+         * 计算矩阵点的前景色
+         * @param {Obj} config
+         * @param {Number} config.row 点x坐标
+         * @param {Number} config.col 点y坐标
+         * @param {Number} config.count 矩阵大小
+         * @param {Number} config.options 组件的options
+         * @return {String}
+         */
+        let getForeGround = function (config) {
+            var options = config.options;
+            if (options.pdground && (
+                (config.row > 1 && config.row < 5 && config.col > 1 && config.col < 5) ||
+                (config.row > (config.count - 6) && config.row < (config.count - 2) && config.col > 1 && config.col < 5) ||
+                (config.row > 1 && config.row < 5 && config.col > (config.count - 6) && config.col < (config.count - 2))
+            )) {
+                return options.pdground;
+            }
+            return options.foreground;
+        }
+        // 创建canvas
+        let createCanvas = function (options) {
+            if (options.showLoading) {
+                uni.showLoading({
+                    title: options.loadingText,
+                    mask: true
+                });
+            }
+            var ctx = uni.createCanvasContext(options.canvasId, options.context);
+            var count = qrCodeAlg.getModuleCount();
+            var ratioSize = options.size;
+            var ratioImgSize = options.imageSize;
+            //计算每个点的长宽
+            var tileW = (ratioSize / count).toPrecision(4);
+            var tileH = (ratioSize / count).toPrecision(4);
+            //绘制
+            for (var row = 0; row < count; row++) {
+                for (var col = 0; col < count; col++) {
+                    var w = (Math.ceil((col + 1) * tileW) - Math.floor(col * tileW));
+                    var h = (Math.ceil((row + 1) * tileW) - Math.floor(row * tileW));
+                    var foreground = getForeGround({
+                        row: row,
+                        col: col,
+                        count: count,
+                        options: options
+                    });
+                    ctx.setFillStyle(qrCodeAlg.modules[row][col] ? foreground : options.background);
+                    ctx.fillRect(Math.round(col * tileW), Math.round(row * tileH), w, h);
+                }
+            }
+            if (options.image) {
+                var x = Number(((ratioSize - ratioImgSize) / 2).toFixed(2));
+                var y = Number(((ratioSize - ratioImgSize) / 2).toFixed(2));
+                drawRoundedRect(ctx, x, y, ratioImgSize, ratioImgSize, 2, 6, true, true)
+                ctx.drawImage(options.image, x, y, ratioImgSize, ratioImgSize);
+                // 画圆角矩形
+                function drawRoundedRect(ctxi, x, y, width, height, r, lineWidth, fill, stroke) {
+                    ctxi.setLineWidth(lineWidth);
+                    ctxi.setFillStyle(options.background);
+                    ctxi.setStrokeStyle(options.background);
+                    ctxi.beginPath(); // draw top and top right corner 
+                    ctxi.moveTo(x + r, y);
+                    ctxi.arcTo(x + width, y, x + width, y + r, r); // draw right side and bottom right corner 
+                    ctxi.arcTo(x + width, y + height, x + width - r, y + height, r); // draw bottom and bottom left corner 
+                    ctxi.arcTo(x, y + height, x, y + height - r, r); // draw left and top left corner 
+                    ctxi.arcTo(x, y, x + r, y, r);
+                    ctxi.closePath();
+                    if (fill) {
+                        ctxi.fill();
+                    }
+                    if (stroke) {
+                        ctxi.stroke();
+                    }
+                }
+            }
+            setTimeout(() => {
+                ctx.draw(true, () => {
+                    // 保存到临时区域
+                    setTimeout(() => {
+                        uni.canvasToTempFilePath({
+                            width: options.width,
+                            height: options.height,
+                            destWidth: options.width,
+                            destHeight: options.height,
+                            canvasId: options.canvasId,
+                            quality: Number(1),
+                            success: function (res) {
+                                if (options.cbResult) {
+                                    options.cbResult(res.tempFilePath)
+                                }
+                            },
+                            fail: function (res) {
+                                if (options.cbResult) {
+                                    options.cbResult(res)
+                                }
+                            },
+                            complete: function () {
+                                if (options.showLoading){
+                                    uni.hideLoading();
+                                }
+                            },
+                        }, options.context);
+                    }, options.text.length + 100);
+                });
+            }, options.usingComponents ? 0 : 150);
+        }
+        createCanvas(this.options);
+        // 空判定
+        let empty = function (v) {
+            let tp = typeof v,
+                rt = false;
+            if (tp == "number" && String(v) == "") {
+                rt = true
+            } else if (tp == "undefined") {
+                rt = true
+            } else if (tp == "object") {
+                if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true
+            } else if (tp == "string") {
+                if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true
+            } else if (tp == "function") {
+                rt = false
+            }
+            return rt
+        }
+    };
+    QRCode.prototype.clear = function (fn) {
+        var ctx = uni.createCanvasContext(this.options.canvasId, this.options.context)
+        ctx.clearRect(0, 0, this.options.size, this.options.size)
+        ctx.draw(false, () => {
+            if (fn) {
+                fn()
+            }
+        })
+    };
+})()
+
+export default QRCode

+ 210 - 0
components/zb-code/zb-code.vue

@@ -0,0 +1,210 @@
+<template xlang="wxml" minapp="mpvue">
+	<view class="zb-code">
+		<!-- #ifndef MP-ALIPAY -->
+		<canvas class="zb-code-canvas" :canvas-id="cid" :style="{width:cpSize+'px',height:cpSize+'px'}" />
+		<!-- #endif -->
+		<!-- #ifdef MP-ALIPAY -->
+		<canvas :id="cid" :width="cpSize" :height="cpSize" class="zb-code-canvas" />
+		<!-- #endif -->
+		<image v-show="show" :src="result" :style="{width:cpSize+'px',height:cpSize+'px'}" />
+	</view>
+</template>
+
+<script>
+import QRCode from "./qrcode.js"
+let qrcode
+export default {
+	name: "zb-code",
+	props: {
+		cid: {
+			type: String,
+			default: 'zb-code-canvas'
+		},
+		size: {
+			type: Number,
+			default: 200
+		},
+		unit: {
+			type: String,
+			default: 'upx'
+		},
+		show: {
+			type: Boolean,
+			default: true
+		},
+		val: {
+			type: String,
+			default: ''
+		},
+		background: {
+			type: String,
+			default: '#ffffff'
+		},
+		foreground: {
+			type: String,
+			default: '#000000'
+		},
+		pdground: {
+			type: String,
+			default: '#000000'
+		},
+		icon: {
+			type: String,
+			default: ''
+		},
+		iconSize: {
+			type: Number,
+			default: 40
+		},
+		lv: {
+			type: Number,
+			default: 3
+		},
+		onval: {
+			type: Boolean,
+			default: false
+		},
+		loadMake: {
+			type: Boolean,
+			default: false
+		},
+		usingComponents: {
+			type: Boolean,
+			default: true
+		},
+		showLoading: {
+			type: Boolean,
+			default: false
+		},
+		loadingText: {
+			type: String,
+			default: '二维码生成中'
+		},
+	},
+	data() {
+		return {
+			result: '',
+		}
+	},
+	methods: {
+		_makeCode() {
+			let that = this
+			if (!this._empty(this.val)) {
+				qrcode = new QRCode({
+					context: that, // 上下文环境
+					canvasId:that.cid, // canvas-id
+					usingComponents: that.usingComponents, // 是否是自定义组件
+					showLoading: that.showLoading, // 是否显示loading
+					loadingText: that.loadingText, // loading文字
+					text: that.val, // 生成内容
+					size: that.cpSize, // 二维码大小
+					background: that.background, // 背景色
+					foreground: that.foreground, // 前景色
+					pdground: that.pdground, // 定位角点颜色
+					correctLevel: that.lv, // 容错级别
+					image: that.icon, // 二维码图标
+					imageSize: that.iconSize,// 二维码图标大小
+					cbResult: function (res) { // 生成二维码的回调
+						that._result(res)
+					},
+				});
+			} else {
+				uni.showToast({
+					title: '二维码内容不能为空',
+					icon: 'none',
+					duration: 2000
+				});
+			}
+		},
+		_clearCode() {
+			this._result('')
+			qrcode.clear()
+		},
+		_saveCode() {
+			let that = this;
+			if (this.result != "") {
+				uni.saveImageToPhotosAlbum({
+					filePath: that.result,
+					success: function () {
+						uni.showToast({
+							title: '二维码保存成功',
+							icon: 'success',
+							duration: 2000
+						});
+					}
+				});
+			}
+		},
+		_result(res) {
+			this.result = res;
+			this.$emit('result', res)
+		},
+		_empty(v) {
+			let tp = typeof v,
+				rt = false;
+			if (tp == "number" && String(v) == "") {
+				rt = true
+			} else if (tp == "undefined") {
+				rt = true
+			} else if (tp == "object") {
+				if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true
+			} else if (tp == "string") {
+				if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true
+			} else if (tp == "function") {
+				rt = false
+			}
+			return rt
+		}
+	},
+	watch: {
+		size: function (n, o) {
+			if (n != o && !this._empty(n)) {
+				this.cSize = n
+				if (!this._empty(this.val)) {
+					setTimeout(() => {
+						this._makeCode()
+					}, 100);
+				}
+			}
+		},
+		val: function (n, o) {
+			if (this.onval) {
+				if (n != o && !this._empty(n)) {
+					setTimeout(() => {
+						this._makeCode()
+					}, 0);
+				}
+			}
+		}
+	},
+	computed: {
+		cpSize() {
+			if(this.unit == "upx"){
+				return uni.upx2px(this.size)
+			}else{
+				return this.size
+			}
+		}
+	},
+	mounted: function () {
+		if (this.loadMake) {
+			if (!this._empty(this.val)) {
+				setTimeout(() => {
+					this._makeCode()
+				}, 0);
+			}
+		}
+	},
+}
+</script>
+<style>
+.zb-code {
+  position: relative;
+}
+.zb-code-canvas {
+  position: fixed;
+  top: -99999upx;
+  left: -99999upx;
+  z-index: -99999;
+}
+</style>

+ 33 - 0
config/app.js

@@ -0,0 +1,33 @@
+module.exports = {
+	// 小程序配置
+	// #ifdef MP || APP-PLUS
+	// 请求域名 格式: https://您的域名
+	HTTP_REQUEST_URL: `http://v4.crmeb.net`,
+	// #endif
+	
+	// H5配置
+	// #ifdef H5
+	//H5接口是浏览器地址,非单独部署不用修改
+	HTTP_REQUEST_URL: window.location.protocol + "//" + "v4.crmeb.net",
+	// #endif
+
+	// 以下配置在不做二开的前提下,不需要做任何的修改
+	HEADER: {
+		'content-type': 'application/json',
+		//#ifdef H5
+		'Form-type': navigator.userAgent.toLowerCase().indexOf("micromessenger") !== -1 ? 'wechat' : 'h5',
+		//#endif
+		//#ifdef MP
+		'Form-type': 'routine',
+		//#endif
+		//#ifdef APP-VUE
+		'Form-type': 'app',
+		//#endif
+	},
+	// 回话密钥名称 请勿修改此配置
+	TOKENNAME: 'Authori-zation',
+	// 缓存时间 0 永久
+	EXPIRE: 0,
+	//分页最多显示条数
+	LIMIT: 10
+}

+ 42 - 0
config/cache.js

@@ -0,0 +1,42 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+module.exports = {
+	//token
+	LOGIN_STATUS: 'LOGIN_STATUS_TOKEN',
+	//uid
+	UID:'UID',
+	//用户信息
+	USER_INFO: 'USER_INFO',
+	//token过期时间
+	EXPIRES_TIME: 'EXPIRES_TIME',
+	//微信登录
+	WX_AUTH: 'WX_AUTH',
+	//公众号登录code
+	STATE_KEY: 'wx_authorize_state',
+	//登录类型
+	LOGINTYPE: 'loginType',
+	//登录跳转地址
+	BACK_URL: 'login_back_url',
+	//小程序登录状态code
+	STATE_R_KEY: 'roution_authorize_state',
+	//logo 地址
+	LOGO_URL: 'LOGO_URL',
+	//模板缓存
+	SUBSCRIBE_MESSAGE: 'SUBSCRIBE_MESSAGE',
+
+	TIPS_KEY: 'TIPS_KEY',
+
+	SPREAD: 'spread',
+	//缓存经度
+	CACHE_LONGITUDE: 'LONGITUDE',
+	//缓存纬度
+	CACHE_LATITUDE: 'LATITUDE',
+}

+ 18 - 0
config/socket.js

@@ -0,0 +1,18 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+module.exports = {
+  // Socket链接 暂不做配置
+  WSS_SERVER_URL:'',
+  // Socket调试模式
+  SERVER_DEBUG:true,
+  // 心跳间隔
+  PINGINTERVAL:3000
+}

+ 0 - 9
env.js

@@ -1,9 +0,0 @@
-/**
- *  Shopro全局配置文件
- */
-
-export const BASE_URL = 'https://demo.shopro.top' //后台根域名 https://demo.shopro.top
-export const API_URL = `${BASE_URL}/addons/shopro/` //后台接口域名
-export const IMG_URL = 'http://file.shopro.top' //全局网络图片地址变量,css背景图片地址变量在uni.scss
-export const MAP_KEY = '426ebc3f1bbaced***89ee6061a98'; //高德地图开发者Web服务key,逆坐标解析
-export const HAS_LIVE = false //后台是否开通直播权限,根据情况在manifest.json中,开启注释相应组件的引入,pages.json中打开直播

+ 1181 - 0
lang/en_us.json

@@ -0,0 +1,1181 @@
+{
+	"选择地址": "Select Address",
+	"选择其它地址": "Select Other Address",
+	"已选商品": "Selected Goods",
+	"清空": "Clear",
+	"¥": "$",
+	"已售罄": "Sold Out",
+	"已下架": "Take Down",
+	"删除": "Delete",
+	"商品券": "Product",
+	"品类券": "Category",
+	"通用券": "General",
+	"优惠券": "Voucher",
+	"满": "Full ",
+	"元可用": " Used",
+	"无门槛券": "No Threshold",
+	"领取后": "Receive ",
+	"天内可用": "Days use",
+	"已领取": "Received",
+	"立即领取": "Get",
+	"购物满": "Spend",
+	"减": "Off",
+	"不限时": "Unlimited Time",
+	"秒杀": "Seckill",
+	"砍价": "Bargain",
+	"拼团": "Group",
+	"已售": "Sold",
+	"立即购买": "Buy Now",
+	"加入购物车": "Add to Cart",
+	"选规格": "Options",
+	"跳过": "Next",
+	"立即体验": "Go Now",
+	"首页": "Home",
+	"搜索": "Search",
+	"购物车": "Cart",
+	"我的收藏": "Collect",
+	"个人中心": "Mine",
+	"券": "Vo.",
+	"正在加载中": "Loading...",
+	"上拉加载更多": "Pull Up Loading More",
+	"代付金额": "Amount",
+	"共": "A Total of ",
+	"件商品": " Items",
+	"订单包裹": "Order Goods",
+	"申请退款中": "Refunding",
+	"已退款": "Refunded",
+	"已完成": "Completed",
+	"件退款中": "Items Refunding",
+	"不支持配送": "In-store only",
+	"不支持自提": "Shipping only",
+	"已评价": "Evaluated",
+	"评价": "Review",
+	"申请退款": "Refund",
+	"查看物流": "Logistic",
+	"确认收货": "Take Order",
+	"选择付款方式": "Select PayType",
+	"支付": "Pay ",
+	"去付款": "To Pay",
+	"请选择要支付的订单": "Select Order",
+	"余额不足": "Insufficient balance",
+	"支付中": "Paying...",
+	"缺少支付参数": "Missing payment parameters",
+	"取消支付": "Cancel Payment",
+	"支付成功": "Payment Successful",
+	"支付失败": "Payment Failed",
+	"库存": "Stock ",
+	"限量": "Limit ",
+	"数量": "QTY",
+	"我要参团": "Join Group",
+	"确定": "OK",
+	"热门推荐": "Hot Recommendation",
+	"最高返佣": "Highest",
+	"推广享佣金": "Promote",
+	"立即分享": "Share Now",
+	"发现新版本": "New Version ",
+	"立即升级": "Upgrade",
+	"下载进度": "Progress",
+	"店小二": "Waiter",
+	"暂无记录": "No Data",
+	"正在下载海报,请稍后再试": "Downloading poster, please try again later",
+	"海报二维码生成失败": "Failed to generate poster QR code",
+	"倒计时": "Countdown",
+	"天": "D",
+	"时": "H",
+	"分": "M",
+	"秒": "S",
+	"砍价成功": "Bargain Successful",
+	"活动已结束": "Activity Stopped",
+	"已砍至": "Cut to ",
+	"活动进行中": "Processing...",
+	"取消活动": "Cancel",
+	"继续砍价": "Continue",
+	"暂无砍价记录": "No Data",
+	"人正在参与": "Participating",
+	"最低": "Lowest",
+	"参与砍价": "Bargain",
+	"砍价列表": "Bargain List",
+	"人查看": "View",
+	"人分享": "Share",
+	"人参与": "Involved",
+	"邀请您帮忙砍价": "Invite you Help",
+	"查看商品": "View Items",
+	"当前": "Current ",
+	"已砍": "Chopped ",
+	"还剩": "Left ",
+	"立即参与砍价": "Bargain Now",
+	"商品暂无库存": "Out of stock",
+	"邀请好友帮砍价": "Invite Friends Help",
+	"已有": "Have",
+	"位好友成功砍价": "Friends Successful",
+	"帮好友砍一刀": "Help Friends",
+	"好友已砍价成功": "Friends Already Successful",
+	"我也要参与": "I will participate",
+	"已成功帮助好友砍价": "Help Friends Success",
+	"恭喜您砍价成功,快去支付": "Bargaining Successful ,Go Pay",
+	"立即支付": "Pay Now",
+	"抢更多商品": "Grab More",
+	"砍价帮": "Bargaining Gang",
+	"砍掉": "Cut off ",
+	"更多": "More",
+	"关闭": "Close",
+	"点击加载更多": "Click to load more",
+	"商品详情": "Details",
+	"砍价规则": "Bargain Rules",
+	"您已砍掉": "You have cut ",
+	"元,听说分享次数越多砍价成功的机会越大哦": ", More times you share, the greater the chance of successful bargaining",
+	"成功帮砍": "Successfully help cut ",
+	"您也可以砍价低价拿哦,快去挑选心仪的商品吧": "You can also bargain and get it at a low price, go and choose your favorite products",
+	"发送给朋友": "Send Friend",
+	"微信好友": "Wechat Friend",
+	"微信朋友圈": "WeChat Moments",
+	"生成海报": "Generate poster",
+	"砍价详情": "Bargain Details",
+	"分享成功": "Share Successful",
+	"分享失败": "Share Failed",
+	"该商品每人限购": "This product is limited to purchase per person ",
+	"您的好友": "Your friend ",
+	"邀请您砍价": "Invite you cut ",
+	"人团": " People",
+	"去拼团": "Go",
+	"拼团列表": "Group List",
+	"类型": "Type",
+	"累计销量": "Total Sold",
+	"限购": "Limit ",
+	"种规格可选": "Optional",
+	"已拼": "Spelled ",
+	"件": "Piece",
+	"还差": "Only ",
+	"人成团": " success",
+	"去拼单": "Join",
+	"查看更多": "More",
+	"收起": "Put Away",
+	"拼团玩法": "Group process",
+	"开团/参团": "Start",
+	"邀请好友": "Invitation",
+	"满员发货": "Delivery",
+	"用户评价": "Review",
+	"好评率": "Praise Rate",
+	"产品介绍": "Details",
+	"单独购买": "Buy Alone",
+	"立即开团": "Start Group",
+	"请选择": "Selected",
+	"商品": "Product",
+	"详情": "Detail",
+	"缺少参数无法查看商品": "Can't view product due to missing parameters",
+	"参数错误": "Parameter error",
+	"已选择": "Selected",
+	"保存成功": "Saved Success",
+	"保存失败": "Saved Failed",
+	"人拼": " People Fight",
+	"剩余": "Remaining ",
+	"结束": "Finish",
+	"恭喜您拼团成功": "Congratulations on your successful grouping",
+	"人,拼团失败": "Person left, the group failed",
+	"拼团中,还差": "In the group, there is still ",
+	"人拼团成功": "Person left to join the group successfully",
+	"邀请好友参团": "Invite friends to join the group",
+	"再次开团": "Regroup",
+	"取消开团": "Cancel",
+	"查看订单信息": "View Order",
+	"大家都在拼": "All Group",
+	"更多拼团": "More",
+	"邀请您参团": "Invite you join ",
+	"你不是该团的成员": "You are not a member of the group",
+	"已抢": "Robbed",
+	"抢购中": "Grab Now",
+	"未开始": "No Started",
+	"已结束": "Over",
+	"暂无商品,去看点别的吧": "No products",
+	"即将开始": "No Started",
+	"距秒杀结束仅剩": "Only left to end",
+	"累计销售": "Sold",
+	"收藏": "Collect",
+	"保存到手机": "Save to phone",
+	"长按图片可以保存到手机": "Long press to save to phone",
+	"抢购详情页": "Snap purchase details page",
+	"二维码获取失败": "Failed to get QR code",
+	"请选择属性": "Please select a property",
+	"提示:点击图片即可保存至手机相册": "Tip: Click on the picture to save it to the phone album",
+	"拼团海报": "Puzzle poster",
+	"砍价海报": "Haggling poster",
+	"海报生成中": "The poster is being generated",
+	"海报图片获取失败": "Failed to get poster image",
+	"海报": "Poster",
+	"已预定": "Booked",
+	"预售价": "Pre-sale",
+	"立即预定": "Book Now",
+	"开售时间": "Sale Time",
+	"预售活动": "Pre-sale event",
+	"起": "Rise",
+	"划线价": "ORP",
+	"开通“超级会员”立省": "Open 'Super Member' to off ",
+	"元": "$",
+	"立即开通": "Activate now",
+	"预售活动时间": "Pre-sale time",
+	"预售结束后": "Ships within ",
+	"天内发货": "Days after pre-sale ends",
+	"活动": "Activity",
+	"参与秒杀": "Seckill",
+	"参与拼团": "Group",
+	"复制口令": "Copy Goods Code",
+	"复制成功": "Copy successfully",
+	"推荐": "Recommended",
+	"缺少经纬度信息无法查看地图": "Missing latitude and longitude information cannot view the map",
+	"产品库存不足,请选择其它属性": "Insufficient product stock, please select another attribute",
+	"立即退款": "Immediate refund",
+	"一键改价": "Change price",
+	"订单备注": "Order notes",
+	"商品总价": "Total price",
+	"原始邮费": "Old postage",
+	"实际支付": "Actual price",
+	"退款金额": "Refund price",
+	"请填写备注信息": "Please fill in the remarks",
+	"立即修改": "Edit now",
+	"确认退款": "Confirm refund",
+	"拒绝退款": "Refused refund",
+	"取消": "Cancel",
+	"订单号": "Order ID",
+	"发货方式": "Mode",
+	"发货类型": "Shipping type",
+	"快递公司": "Express",
+	"快递单号": "Number",
+	"顺丰请输入单号 :收件人或寄件人手机号后四位": "Please enter the tracking number for SF Express: the last four digits of the recipient's or sender's mobile phone number",
+	"例如:SF000000000000:3941": "For example: SF000000000000:3941",
+	"电子面单": "Electronic sheet",
+	"预览": "Preview",
+	"寄件人姓名": "Sender Name",
+	"填写寄件人姓名": "Fill in sender name",
+	"寄件人电话": "Sender phone",
+	"填写寄件人电话": "Fill in sender phone number",
+	"寄件人地址": "Sender address",
+	"填写寄件人地址": "Fill in sender address",
+	"送货人": "Delivery man",
+	"确认提交": "Submit",
+	"发货": "Ship",
+	"送货": "Give",
+	"无需物流": "No need",
+	"手动填写": "Fill in manually",
+	"电子面单打印": "Electronic sheet",
+	"填写快递单号": "Please fill in the courier number",
+	"请选择电子面单": "Please select an electronic receipt",
+	"待付款": "To Pay",
+	"待发货": "To Ship",
+	"待收货": "To Receive",
+	"待评价": "To Rate",
+	"售后/退款": "Refund",
+	"数据统计": "Statistics",
+	"今日成交额": "Today Sold",
+	"昨日成交额": "Yesterday Sold",
+	"本月成交额": "Month Sold",
+	"今日订单数": "Today Orders",
+	"昨日订单数": "Yesterday Orders",
+	"本月订单数": "Month Orders",
+	"详细数据": "Detailed data",
+	"日期": "Date",
+	"订单数": "Order Count",
+	"成交额": "Turnover",
+	"立即核销": "Write off now",
+	"查看": "View",
+	"确定要核销此订单吗": "Are you sure write off this order",
+	"确定核销": "Verify",
+	"请输入核销码": "Please enter the verification code",
+	"请输入正确的核销码": "Please enter the correct verification code",
+	"查询中": "Querying",
+	"订单": "Order",
+	"订单未备注,点击添加备注信息": "The order has no remarks, click to add remarks",
+	"复制": "Copy",
+	"件商品,应支付": "Items, should pay ",
+	"邮费": "Postage",
+	"订单编号": "Order ID",
+	"下单时间": "Order Time",
+	"支付状态": "Payment Status",
+	"已支付": "Paid",
+	"未支付": "Unpaid",
+	"支付方式": "Pay method",
+	"买家留言": "Buyer MSG",
+	"支付金额": "Pay Amount",
+	"优惠券抵扣": "Coupon deduction",
+	"运费": "Fare",
+	"实付款": "Real Amount",
+	"配送方式": "Delivery Method",
+	"快递": "Express",
+	"送货人电话": "Courier phone",
+	"确认付款": "Confirm Pay",
+	"去发货": "To Ship",
+	"改价成功": "Price changed successfully",
+	"改价失败": "Price change failed",
+	"请输入备注": "Please enter a note",
+	"退款中": "Refunding",
+	"部分退款中": "Partial refund",
+	"件商品,实付款": "Goods, paid in",
+	"同意退货": "Agree return",
+	"待用户发货": "No Shipped",
+	"请输入正确的金额": "Please enter the correct amount",
+	"今天": "Today",
+	"昨天": "Yesterday",
+	"最近7天": "Last 7 days",
+	"本月": "Month",
+	"自定义": "Customize",
+	"营业额(元)": "Turnover",
+	"订单量(份)": "Quantity",
+	"增长率": "Up rate",
+	"增长": "Increase",
+	"单位": "Unit",
+	"元.": "Yuan",
+	"分.": "Cents",
+	"固定": "Fixed",
+	"指定范围": "Scope",
+	"提交时间": "Submit Time",
+	"原因": "Reason",
+	"暂无申请记录,快去申请吧!": "No application records yet, apply now!",
+	"没有更多啦": "No more",
+	"待审核": "Pending review",
+	"审核通过": "Review passed",
+	"审核未通过": "Review failed",
+	"编辑": "Edit",
+	"重新提交": "Resubmit",
+	"会员优惠价": "VIP discount",
+	"余额支付": "Balance pay",
+	"可用余额": "Balance ",
+	"微信支付": "WeChat Pay",
+	"确认": "Confirm",
+	"支付提醒": "Payment reminder",
+	"线下支付已关闭,请点击确认按钮返回主页": "Offline payment has been closed, please click the confirm button to return to the home page",
+	"请输入支付金额": "Please enter payment amount",
+	"正在确认": "Confirming",
+	"进入商城": "Enter mall",
+	"代理商名称": "Agency Name",
+	"请输入代理商名称": "Please Enter Agency Name",
+	"用户姓名": "Your name",
+	"请输入姓名": "Please Enter Your Name",
+	"联系电话": "Your Phone",
+	"请输入手机号": "Please enter phone number",
+	"验证码": "OTP Code",
+	"填写验证码": "Fill in OTP Code",
+	"邀请码": "Invite code",
+	"请输入代理商邀请码": "Enter Invite Code",
+	"请上传营业执照及行业相关资质证明图片": "Please upload pictures of business license and industry-related qualification certificates",
+	"图片最多可上传10张,图片格式支持JPG、PNG、JPEG": "Up to 10 pictures can be uploaded, and the picture format supports JPG, PNG, JPEG",
+	"上传图片": "Upload",
+	"已阅读并同意": "Read & Agree",
+	"代理商协议": "Agency Agreement",
+	"提交申请": "Submit Apply",
+	"代理商入驻协议": "Agent Agreement",
+	"恭喜,您的资料提交成功!": "Congratulations, Submitted successfully!",
+	"返回首页": "Back home",
+	"恭喜,您的资料通过审核!": "Congratulations, Review passed!",
+	"您的申请未通过!": "Your application was rejected!",
+	"重新申请": "Re-apply",
+	"获取验证码": "Get OTP Code",
+	"请输入正确的手机号码": "Please enter the correct phone number",
+	"重新获取": "Reacquire",
+	"请上传营业执照": "Please upload business license",
+	"请勾选并同意入驻协议": "Please tick and agree to the Occupation Agreement",
+	"专题栏": "Topic column",
+	"暂无数据": "No Data",
+	"请输入卡号": "Please enter the card number",
+	"请输入卡密": "Please enter your password",
+	"确认激活": "Confirm",
+	"SVIP会员尊享权": "SVIP member privileges",
+	"正在激活": "Activating",
+	"已使用": "Used",
+	"永久SVIP会员": "Permanent SVIP member",
+	"SVIP会员": "SVIP member",
+	"到期": "maturity",
+	"您与": "You with",
+	"商城的第": "Mall",
+	"天.": " Days.",
+	"已累积为您节省": "Accumulated savings for you",
+	"开通即享会员权益": "Enjoy member benefits",
+	"续费会员": "Renewal",
+	"开通会员": "Join SVIP",
+	"有效期至": "Valid until ",
+	"试用": "Try out",
+	"购买即视为同意": "Purchase as consent ",
+	"会员用户协议": "SVIP Agreement",
+	"点击兑换卡密": "Click to redeem card",
+	"会员优惠券": "SVIP Coupon",
+	"SVIP商品推荐": "SVIP Recommends",
+	"商城价": "Mall price",
+	"激活会员卡": "Activate Card",
+	"支付宝支付": "Alipay",
+	"成功开启0元试用": "Successfully opened 0 yuan trial",
+	"确认绑定": "Confirm binding",
+	"绑定成功": "Binding succeeded",
+	"商城客服已离线": "Customer service is offline",
+	"我要反馈": "I want feedback",
+	"请填写内容": "Please fill content",
+	"提交": "Submit",
+	"精品推荐": "Recommended",
+	"热门榜单": "Popular",
+	"首发新品": "New",
+	"促销单品": "Promotional",
+	"预告": "Notice",
+	"回放": "Playback",
+	"进行中": "Processing",
+	"发送客服": "Send",
+	"客服连接中": "Customer service is connecting",
+	"连接失败": "Connection failed",
+	"提示": "Hint",
+	"客服已下线,是否需要反馈?": "Customer service is offline, do you need feedback?",
+	"和好友一起分享": "Share with friends",
+	"积分抵扣": "Points deduction",
+	"已开票": "Billed",
+	"未开票": "Not invoiced",
+	"发票信息": "Invoice Info",
+	"发票抬头": "Invoice",
+	"发票抬头类型": "Invoice Header Type",
+	"个人": "PER ",
+	"企业": "COM ",
+	"发票类型": "Invoice type",
+	"电子普通发票": "Electronic General Invoice",
+	"电子专用发票": "Electronic special invoice",
+	"企业税号": "Enterprise tax",
+	"联系信息": "Contact Info",
+	"真实姓名": "Real Name",
+	"联系邮箱": "Email",
+	"抬头选择": "Head Selection",
+	"默认": "Default",
+	"普通": "Ordinary ",
+	"专用": "Dedicated ",
+	"您还没有添加发票信息哟": "You have not added invoice information",
+	"添加新的抬头": "Add New Header",
+	"不开发票": "No invoice",
+	"抽奖": "Lottery",
+	"全选": "Select All",
+	"属性": "Attributes",
+	"请填写具体地址": "Please fill in the specific address",
+	"省": "Province",
+	"市": "City",
+	"区": "Area",
+	"添加成功": "Add successfully",
+	"您已拒绝导入微信地址权限": "You have denied permission to import WeChat addresses",
+	"是否进入权限管理,调整授权?": "Do you enter the permission management and adjust the authorization?",
+	"已取消": "Cancelled",
+	"添加失败": "Add failed",
+	"请填写收货人姓名": "Please fill in the consignee's name",
+	"请选择所在地区": "Please select your region",
+	"请填写详细地址": "Please fill in the detailed address",
+	"星": "Star",
+	"商品满足你的期待么?说说你的想法,分享给想买的他们吧": "Does the product meet your expectations? Tell us what you think and share it with those who want to buy it",
+	"立即评价": "Rate Now",
+	"商品质量": "Product quality",
+	"服务态度": "Service attitude",
+	"缺少参数": "Missing parameters",
+	"请填写你对宝贝的心得": "Please fill in your opinion on the product",
+	"正在发布评论": "Posting comment",
+	"感谢您的评价": "Thanks for your review",
+	"评价完成": "Review completed",
+	"恭喜您": "Congratulations",
+	"获得": "Get",
+	"机会": "Chance",
+	"领取成功": "Received successfully",
+	"评分": "Score",
+	"全部": "ALL",
+	"好评": "Praise",
+	"中评": "Average",
+	"差评": "Bad",
+	"加载更多": "Loading more",
+	"千米距离": "Distance",
+	"搜索商品名称": "Search Product",
+	"价格": "Price",
+	"销量": "Sold",
+	"新品": "New",
+	"已全部加载": "All loaded",
+	"缺少订单号": "Missing order ID",
+	"退货件数": "Refunded Number",
+	"退款类型": "Refund Type",
+	"退款原因": "Refund Reason",
+	"备注说明": "Remark",
+	"填写备注信息,100字以内": "Remarks within 100 words",
+	"仅退款": "Only refund",
+	"退货并退款": "Return and refund",
+	"申请成功": "Apply Successful",
+	"请先选择退货商品": "Please select the return item first",
+	"搜索历史": "Search history",
+	"热门搜索": "Hot Search",
+	"请输入要搜索的商品": "Please enter the product you want to search",
+	"正在搜索中": "Searching",
+	"中奖记录": "Winning record",
+	"我的奖品": "My prize",
+	"活动规则": "Activity rule",
+	"昵称": "Nick name",
+	"序号": "Serial",
+	"奖品名称": "Prize name",
+	"获奖时间": "Winning time",
+	"商家暂未上架活动哦": "Merchant has not listed the event yet",
+	"获取抽奖信息": "Get Sweepstakes Information",
+	"奖品类型": "Prize Type",
+	"立即兑换": "Redeem now",
+	"兑换时间": "Exchange time",
+	"暂无中奖记录": "No winning record",
+	"积分": "Point",
+	"余额": "Balance",
+	"红包": "Cash",
+	"设置收货地址": "Set shipping address",
+	"暂无门店信息": "No store information",
+	"剩余积分": "Remaining points ",
+	"当前积分": "Current points ",
+	"开具发票": "Invoice",
+	"请填写": "Please fill ",
+	"配送运费": "Shipping fee",
+	"会员商品优惠": "Product Offers",
+	"会员运费优惠": "Shipping Offers",
+	"合计": "Total",
+	"使用微信快捷支付": "WeChat quick payment",
+	"使用支付宝支付": "Pay with Alipay",
+	"线下支付": "Offline payments",
+	"使用线下付款": "Use offline payment",
+	"好友代付": "Friend pays",
+	"找微信好友支付": "Find friends to pay",
+	"立即使用": "Use",
+	"请选择要购买的商品": "Please select an item to purchase",
+	"发票": "Invoice",
+	"不使用": "Don't use",
+	"订单创建成功": "Order Created successfully",
+	"请选择支付方式": "Please select the payment method",
+	"请选择收货地址": "Please select delivery address",
+	"请填写联系人或联系人电话": "Please fill in the contact person or contact phone number",
+	"暂无门店,请选择其他方式": "No store currently, please choose another way",
+	"请输入": "Please enter ",
+	"请输入正确的": "Please enter the correct ",
+	"请上传": "Please upload ",
+	"订单支付中": "Paying",
+	"请按以上退货信息将商品退回": "Please return the item with information",
+	"请联系管理员获取退货地址": "Please contact the administrator for the return address",
+	"待核销": "Written off",
+	"核销信息": "Write-off info",
+	"营业时间": "Business hours",
+	"每日": "Daily",
+	"使用说明": "Use Instructions",
+	"可将二维码出示给店员扫描或提供数字核销码": "The QR code can be presented to the clerk to scan or provide a digital verification code",
+	"可将二维码出示给配送员进行核销": "The QR code can be presented to the courier for verification",
+	"查看位置": "View location",
+	"拒绝原因": "Denial Reason",
+	"联系客服": "Contact",
+	"商家备注": "Merchant Notes",
+	"收货人": "Receiver",
+	"收货地址": "Ship address",
+	"配送人姓名": "Ship name",
+	"拨打": "Call",
+	"虚拟发货": "Virtual Ship",
+	"已发货,请注意查收": "Shipped, please check",
+	"虚拟备注": "Virtual Notes",
+	"总代付": "Total Amount",
+	"申请开票": "Apply Invoice",
+	"查看发票": "View Invoice",
+	"取消订单": "Cancel",
+	"立即付款": "Pay",
+	"批量退款": "Bulk refund",
+	"查看拼团": "View group",
+	"再次购买": "Buy again",
+	"取消申请": "Cancel Apply",
+	"填写退货信息": "Return info",
+	"查看退货物流": "Logistic",
+	"您确认放弃此次申请吗": "Are you sure you want to abandon this application",
+	"操作成功": "Successful operation",
+	"订单信息不存在": "Order information does not exist",
+	"为保障权益,请收到货确认无误后,再确认收货": "In order to protect the rights and interests, please confirm the receipt of the goods after confirming that the goods are correct.",
+	"删除订单": "Delete order",
+	"确定删除该订单": "Confirm delete order",
+	"删除成功": "Successfully deleted",
+	"确认取消该订单": "Confirm cancel order",
+	"订单信息": "Order info",
+	"消费订单": "Order",
+	"总消费": "Total Amount",
+	"预售": "Pre-sale",
+	"线下付款,未支付": "Offline unpaid",
+	"未核销": "Not written off",
+	"件商品,总金额": " items, total amount ",
+	"查看详情": "View",
+	"暂无订单": "No order yet",
+	"缺少订单号无法取消订单": "Can't cancel order without order number",
+	"订单支付成功": "Order paid successfully",
+	"订单支付失败": "Order paid failed",
+	"暂未支付": "Not yet paid",
+	"失败原因": "failed Reason",
+	"重新购买": "Repurchase",
+	"重新支付": "Pay again",
+	"赠送优惠券": "Give away coupons",
+	"有效期": "Validity",
+	"缺少参数无法查看订单支付状态": "Missing parameters cannot view order payment status",
+	"最多可上传3张": "Up to 3 uploads",
+	"请选择产品": "Please select a product",
+	"该产品没有更多库存了": "There is no more stock for this product",
+	"优品推荐": "Best Recommendation",
+	"暂无产品": "No products yet",
+	"重新选择": "Reselect",
+	"请选择数量": "Please select quantity",
+	"砍价专区·BARGAINING": "BARGAINING",
+	"立即砍价": "Cut Now",
+	"拼团活动": "Group",
+	"人拼团成功.": "People succeeded",
+	"人参团": " Ginseng group",
+	"拼团价": "Group price",
+	"已过期": "Expired",
+	"关注": "Follow",
+	"推荐好货": "Recommend Goods",
+	"暂无商品": "No products yet",
+	"限时秒杀": "Seckill",
+	"抢": "Ro",
+	"广告位": "ADV space",
+	"精彩内容": "Highlights",
+	"砍价模块,暂无数据": "Bargain module, no data yet",
+	"砍价活动": "Bargain",
+	"呼朋唤友来砍价": "Call friends Bargain",
+	"拼团模块,暂无数据": "Group module, no data yet",
+	"享超值开团价": "Enjoy value-for-money group rates",
+	"优惠券,暂无数据": "Coupon, no data temporarily",
+	"领取今日好券": "Get today's good coupon",
+	"可用": " Used",
+	"领取": "Claim",
+	"客服": "Service",
+	"商品列表,暂无数据": "No data temporarily",
+	"搜索商品": "Search Product",
+	"暂无图片,请上传图片": "No pictures, please upload",
+	"首发新品,暂无数据": "First new product, no data yet",
+	"多个优质商品最新上架": "The latest high-quality goods on the shelves",
+	"暂无新闻,请上传新闻": "No news, please upload the news",
+	"热度 TOP": "Heat TOP",
+	"排行榜、暂无数据": "Leaderboard, no data temporarily",
+	"促销单品,暂无数据": "Promotional items, no data temporarily",
+	"库存商品优惠促销活动": "Promotional activities for goods in stock",
+	"精品推荐,暂无数据": "Boutique recommendation, no data yet",
+	"上百种商品分类任您选择": "Hundreds of product categories for you to choose from",
+	"秒杀模块,暂无数据": "Seckill module, no data temporarily",
+	"场": "Site",
+	"暂无数据,请设置": "No data, please set",
+	"暂无数据,请先添加分类": "No data, please add classification first",
+	"暂无标题": "No title temporarily",
+	"诚意推荐品质商品": "Recommend quality goods in good faith",
+	"点击“立即关注”即可关注公众号": "Click“follow now”to follow official account",
+	"立即关注": "Follow now",
+	"添加到我的小程序, 微信首页下拉即可访问商城。": "Add it to my applet, and you can access the mall by pulling down the wechat homepage",
+	"点击": "Click",
+	"服务协议与隐私政策": "Service agreement and privacy policy",
+	"请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。": "Please be sure to carefully read and fully understand the terms of the service agreement and privacy policy, including but not limited to: in order to provide you with instant messaging, content sharing and other services, we need to collect your device information, operation logs and other personal information. You can view, change, delete personal information and manage your authorization in Settings",
+	"你可以阅读": "You can read",
+	"《服务协议与隐私政策》": "《Service agreement and privacy policy》",
+	"了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。": "Learn more. If you agree, please click I agree to start accepting our services",
+	"我同意": "I agree",
+	"残忍拒绝": "Cruel rejection",
+	"下拉加载更多": "Pull down load more",
+	"网络连接断开": "Network connection disconnected",
+	"请检查情况:": "Please check the condition:",
+	"在设置中是否已开启网络权限": "Whether network permission is enabled in settings",
+	"当前是否处于弱网环境": "Currently in a weak network environment",
+	"版本是否过低,升级试试吧": "Whether the version is too low, try upgrading",
+	"重新连接": "Reconnect",
+	"加载中": "Loading",
+	"没有更多内容啦~": "No more content~",
+	"100%正品保证": "100% genuine",
+	"所有商品精挑细选": "Be very choosy",
+	"售后无忧": "Worry free after Sold",
+	"管理": "Manage",
+	"购物数量": "Shopping quantity",
+	"请重新选择商品规格": "Please reselect the product specification",
+	"重选": "Reselection",
+	"失效商品": "Invalid goods",
+	"失效": "Failure",
+	"该商品已失效": "The commodity has expired",
+	"立即下单": "Order now",
+	"我也是有底线的": "I also have a bottom line",
+	"产品库存不足,请选择其它": "Insufficient product inventory, please select other",
+	"添加购物车成功": "Successfully added shopping cart",
+	"清除成功": "Cleanup succeeded",
+	"暂无兑换记录~": "No exchange record~",
+	"大家都在换": "Everyone is changing",
+	"人兑换": " Person exchange",
+	"轻松赚积分": "Earn points easily",
+	"购买商品": "Purchase goods",
+	"购买商品可获得积分奖励": "Points reward for purchasing goods",
+	"去完成": "Go",
+	"每日签到活动": "Daily check-in activities",
+	"每日签到可获得积分奖励": "Daily check-in can get points reward",
+	"九宫格抽奖活动": "Jiugongge lottery",
+	"幸运抽奖可获得积分奖励": "Lucky draw can get points reward",
+	"我的积分": "My points",
+	"每日签到": "Daily sign in",
+	"积分抽奖": "Points lottery",
+	"兑换记录": "Exchange record",
+	"已兑换": "Redeemed",
+	"无法兑换": "Cannot redeem",
+	"[默认]": "[Default]",
+	"可用积分": "Available points",
+	"快递费用": "Express fee",
+	"免运费": "Freight free",
+	"备注信息": "Remarks",
+	"请添加备注(150字以内)": "Please add remarks (within 150 words)",
+	"使用线上支付宝支付": "Pay with online Alipay",
+	"可用余额:": "Balance:",
+	"选择线下付款方式": "Select offline payment method",
+	"正在加载…": "Loading…",
+	"可用积分不足!": "Insufficient points available!",
+	"订单状态": "Order status",
+	"支付积分": "Pay points",
+	"备注": "Remarks",
+	"配送核销码": "Delivery verification code",
+	"当前可用余额:": "Current available balance:",
+	"正在加载": "Loading",
+	"缺少经纬度信息无法查看地图!": "The map cannot be viewed without longitude and latitude information!",
+	"商品兑换成功": "Successfully redeemed",
+	"兑换方式": "Exchange method",
+	"积分兑换": "Point exchange",
+	"兑换积分": "Redeem points",
+	"取消兑换": "Cancel exchange",
+	"缺少参数无法查看订单兑换状态": "Order exchange status cannot be viewed without parameters",
+	"用户离开了": "The user left",
+	"兑换成功": "Successfully redeemed",
+	"物流公司": "Logistics company",
+	"复制单号": "Copy doc no",
+	"设为默认": "Set as default",
+	"添加新地址": "Add new address",
+	"导入微信地址": "Import wechat address",
+	"取消选择": "Deselect",
+	"您设置的默认地址不存在!": "The default address you set does not exist!",
+	"设置成功": "Setting succeeded",
+	"您删除的地址不存在!": "The address you deleted does not exist!",
+	"获取头像": "Get Avatar",
+	"请点击授权": "Please click authorize",
+	"绑定手机号": "Bind mobile number",
+	"永久": "Permanent",
+	"会员到期": "Membership expiration",
+	"未开通会员": "Not open member",
+	"查看会员权益": "View membership benefits",
+	"立即续费": "Renew",
+	"立即激活": "Activation",
+	"会员可享多项权益": "Enjoy multiple benefits",
+	"订单中心": "My order",
+	"我的服务": "My service",
+	"隐私协议": "Privacy",
+	"商家管理": "Business management",
+	"更新用户信息成功": "Successfully updated user information",
+	"客服接待": "Reception",
+	"点击复制网址去浏览器中打开": "Click Copy URL to open in the browser",
+	"点击复制": "Click Copy",
+	"完成支付": "Complete payment",
+	"点击右上角": "Click the upper right corner",
+	"选择 在浏览器 打开,去支付宝支付": "Select to open in the browser and pay through Alipay",
+	"支付订单不存在,页面将在2秒后自动关闭!": "The payment order does not exist, and the page will close automatically in 2 seconds! ",
+	"正在支付中": "Paying",
+	"支付订单不存在,页面将在2秒后自动关闭": "The payment order does not exist, and the page will close automatically in 2 seconds",
+	"复制失败": "Replication failed",
+	"您目前的排名": "Your current ranking",
+	"您目前暂无排名": "You currently ranking",
+	"暂无排名~": "No ranking ~",
+	"输入手机号": "Enter mobile number",
+	"输入验证码": "Enter verification code",
+	"立即登录": "Log in now",
+	"请填写手机号码": "Please fill in your mobile number",
+	"请填写验证码": "Please fill in the verification code",
+	"请输入正确的验证码": "Please enter the correct verification code",
+	"正在登录中": "Logging in",
+	"登录成功": "Login succeeded",
+	"获取授权": "Obtaining authorization",
+	"获取微信的手机号授权": "Obtain wechat mobile number authorization",
+	"获取微信手机号": "Get wechat mobile numbe",
+	"输入手机号码": "Enter mobile number",
+	"填写登录密码": "Fill in login password",
+	"登录": "Login",
+	"快速登录": "Quick login",
+	"账号登录": "Account login",
+	"其他方式登录": "Login by other methods",
+	"登录中": "Logging in",
+	"获取用户信息失败": "Failed to obtain user information",
+	"请绑定手机号后,继续操作": "Please bind your mobile number and continue operation",
+	"错误信息": "Error information",
+	"用户点击确定": "User click OK",
+	"用户点击取消": "User click Cancel",
+	"登录失败": "Login failure",
+	"请勿重复点击": "Do not click repeatedly",
+	"请填写密码": "Please fill in the password",
+	"您输入的密码过于简单": "The password you entered is too simple",
+	"请填写账号": "Please fill in the account number",
+	"请输入正确的账号": "Please enter the correct account number",
+	"[图片]": "[Picture]",
+	"[语音]": "[Voice]",
+	"[商品]": "[Product]",
+	"[订单]": "[Order]",
+	"亲、暂无消息记录哟!": "Dear, no message record yet!",
+	"站内消息": "In station message",
+	"客服消息": "Customer service message",
+	"通知于": "Notified on ",
+	"获取详情中": "Get details",
+	"代付订单创建成功,发给好友帮你付款吧~": "Payment order created successfully, send it to your friend to help you pay ~",
+	"帮我付一下这件商品了,谢谢~": "Help me pay for this commodity, thank you ~",
+	"已经有人替我代付,谢谢啦~": "Someone has paid for me, thank you ~",
+	"谢谢你帮我支付,么么哒~": "Thank you for helping me pay, Moda ~",
+	"我已为你代付成功,商家正在努力发货中~": "I have successfully paid for you, and the merchant is trying to deliver ~",
+	"好友代付成功,商家正在努力发货中~": "Friend payment succeeded, and the merchant is trying to deliver ~",
+	"发送给微信好友": "Send to wechat friends",
+	"查看订单详情": "View order details",
+	"订单已支付": "Order paid",
+	"如果订单申请退款,已支付金额将原路退还给您": "If the order applies for a refund, the paid amount will be returned to you in the same way",
+	"代付成功": "Payment succeeded",
+	"谢谢你为我付款,还可以再去看看其他商品哟~": "Thank you for paying for me, and you can go to see other goods ~",
+	"该订单暂未支付": "The order has not been paid yet",
+	"人": " Person",
+	"推广人数": "Number of promoters",
+	"一级": "Level 1",
+	"二级": "Level 2",
+	"点击搜索会员名称": "Click to search member name",
+	"团队排序": "Team sorting",
+	"金额排序": "Amount sorting",
+	"订单排序": "Order sorting",
+	"单": " Orders",
+	"加入时间": "Joining time",
+	"累积推广订单": "Order count",
+	"本月累计推广订单": "Month Orders",
+	"返佣": "Rebate",
+	"暂未返佣": "Not Rebate",
+	"返佣时间": "Rebate time",
+	"单号": "Order number",
+	"暂无推广订单~": "No promotion order ~",
+	"推广订单列表": "Promotion order list",
+	"找回密码": "Retrieve password",
+	"填写您的新密码": "Fill in your new password",
+	"加载失败": "Load failure",
+	"点击授权登录您的客服工作台": "Click authorize to log in to your customer service workbench",
+	"授权登录": "Authorized login",
+	"没有登录的code,请重新扫码": "Code without login, please scan the code again",
+	"员工人数": "Number of employees",
+	"邀请": "Invitation",
+	"分佣比例": "Scale",
+	"修改分佣比例": "Modify proportion",
+	"请输入百分比": "Please enter percentage",
+	"删除员工": "Delete employee",
+	"确定删除该员工?": "Are you sure to delete this employee?",
+	"请输入比例": "Please enter a scale",
+	"分类": "Class",
+	"我的": "Mine",
+	"姓名": "Name",
+	"请输入联系电话": "Please enter the contact number",
+	"所在地区": "Location",
+	"详细地址": "Address",
+	"设置为默认地址": "Set as default address",
+	"立即保存": "Save now",
+	"浙江省": "Zhejiang",
+	"杭州市": "Hangzhou",
+	"滨江区": "Binjiang District",
+	"广东省": "Guangdong Province",
+	"广州市": "Guangzhou",
+	"番禺区": "Panyu",
+	"修改地址": "Modify address",
+	"添加地址": "Add address",
+	"已取消!": "Canceled!",
+	"请填写联系电话": "Please fill in the contact number",
+	"保存中": "Saving",
+	"修改成功": "Modification succeeded",
+	"消费": "Consumption",
+	"充值": "Recharge",
+	"暂无账单的记录哦~": "No record of bill temporarily~",
+	"点击【立即注销】即代表您已经同意《用户注销协议》": "Clicking [immediate logout] means that you have agreed to the user logout agreement",
+	"立即注销": "Log off now",
+	"是否确认注销": "Confirm logout",
+	"注销后无法恢复,请谨慎操作": "Cannot recover after logout, please be careful",
+	"注销": "Logout",
+	"持卡人": "Cardholder",
+	"请输入持卡人姓名": "Enter cardholder name",
+	"卡号": "Card number",
+	"请填写卡号": "Please fill in the card number",
+	"银行": "Bank",
+	"提现": "Withdrawal",
+	"最低提现金额": "Minimum withdrawal amount",
+	"当前可提现金额": "Current withdrawable amount",
+	"冻结佣金": "Frozen Commission",
+	"说明: 每笔佣金的冻结期为": "Note: the freezing period of each commission is",
+	"天,到期后可提现": "Days, withdrawable upon expiration",
+	"账号": "Account",
+	"请填写您的微信账号": "Fill in your wechat account",
+	"收款码": "Collection code",
+	"请填写您的支付宝账号": "Fill in your Alipay account number",
+	"请选择银行": "Please select a bank",
+	"银行卡": "Bank card",
+	"微信": "Wechat",
+	"支付宝": "Alipay",
+	"请填写持卡人姓名": "Please fill in the name of the cardholder ",
+	"请填写微信号": "Please fill in the wechat",
+	"请填写提现金额": "Please fill in the withdrawal amount",
+	"提现金额不能低于": "Withdrawal amount cannot be less than",
+	"未使用": "Not used",
+	"已使用/过期": "Used/expired",
+	"通用劵": "General securities",
+	"一级分佣上浮": "One level up",
+	"二级分佣上浮": "Secondary floating",
+	"快速升级技巧": "Quick upgrade skills",
+	"未完成": "Incomplete",
+	"已领完": "Collected",
+	"当前共": "Current total",
+	"取关": "Off ",
+	"请选择商品": "Please select a product",
+	"头像": "Avatar",
+	"手机号码": "Mobile number",
+	"点击绑定手机号": "Click to bind",
+	"ID号": "ID number",
+	"权限设置": "Permission",
+	"点击管理": "Management",
+	"密码": "Password",
+	"点击修改密码": "Click Modify",
+	"更换手机号码": "Change number",
+	"点击更换手机号码": "Click to",
+	"缓存大小": "Cache size",
+	"当前版本": "Current version",
+	"地址管理": "Address",
+	"发票管理": "Invoice",
+	"账号注销": "Cancellation",
+	"注销后无法恢复": "Cannot recover",
+	"累计积分": "Accumulated points",
+	"累计消费": "Consumption",
+	"冻结积分": "Freezing points",
+	"积分规则": "Integral rule",
+	"提示:积分数值的高低会直接影响您的会员等级": "Tip: the value your membership level",
+	"提示:你有": "Tip: you have",
+	"积分在": "Integral in",
+	"过期,请尽快使用": "Expired, please use it as soon as possible",
+	"暂无积分记录哦~": "No score record temporarily~",
+	"赚积分": "Earn points",
+	"分值明细": "Score details",
+	"分值提升": "Score increase",
+	"抬头类型": "Header type",
+	"增值税电子专用发票": "VAT electronic special invoice",
+	"增值税电子普通发票": "Electronic ordinary VAT invoice",
+	"需要开具发票的姓名": "Name to be invoiced",
+	"需要开具发票的企业名称": "Name of enterprise to issue invoice",
+	"税号": "Tax number",
+	"纳税人识别号": "Taxpayer identification number",
+	"手机号": "Mobile number",
+	"您的手机号": "Your mobile number",
+	"邮箱": "Mailbox",
+	"您的联系邮箱": "Your contact mailbox",
+	"开户银行": "Deposit bank",
+	"您的开户银行": "Your deposit bank",
+	"银行账号": "Bank account number",
+	"您的银行账号": "Your bank account number",
+	"企业地址": "Enterprise address",
+	"您所在的企业地址": "Your business address",
+	"企业电话": "Enterprise telephone",
+	"您的企业电话": "Your business phone",
+	"设置为默认抬头": "Set as default header",
+	"保存": "Save",
+	"发票类型选择": "Invoice type selection",
+	"纸质发票开出后将以邮寄形式交付": "After the paper invoice is issued, it will be delivered by mail",
+	"请输入需要开具发票的姓名": "Please enter the name to be invoiced",
+	"请输入您的手机号": "Please enter your mobile number",
+	"请正确输入您的手机号": "Please input your mobile number correctly",
+	"请输入您的联系邮箱": "Please enter your contact email",
+	"请正确输入您的联系邮箱": "Please input your contact email correctly",
+	"请输入需要开具发票的企业名称": "Please enter the name of the enterprise to issue invoice",
+	"请输入纳税人识别号": "Please enter taxpayer identification number",
+	"请正确输入纳税人识别号": "Please input the taxpayer identification number correctly",
+	"请输入您的开户银行": "Please enter your deposit bank",
+	"请输入您的银行账号": "Please enter your bank account number",
+	"请正确输入您的银行账号": "Please enter your bank account number correctly",
+	"请输入您所在的企业地址": "Please enter your business address",
+	"请输入您的企业电话": "Please enter your business phone",
+	"发票记录": "Invoice record",
+	"抬头管理": "Header management",
+	"申请时间": "Appli time",
+	"没有发票信息哟~": "No invoice information ~",
+	"个人普通发票": "Personal ordinary invoice",
+	"企业普通发票": "Enterprise ordinary invoice",
+	"企业专用发票": "Enterprise special invoice",
+	"添加新发票": "Add new invoice",
+	"删除该发票?": "Delete this invoice?",
+	"发票编号": "Invoice number",
+	"发票备注": "Invoice remarks",
+	"快递号": "Express number",
+	"总资产(元)": "Total assets ($)",
+	"累计充值(元)": "Co recharge ($)",
+	"累计消费(元)": "Co flower ($)",
+	"账单记录": "Bill record",
+	"消费记录": "Record",
+	"充值记录": "Recharge",
+	"积分中心": "Integral",
+	"签到领积分": "Sign in",
+	"赚积分抵现金": "Earn points",
+	"领取优惠券": "Coupons",
+	"满减享优惠": "Full discount",
+	"最新拼团活动": "Latest group activity",
+	"最新的优惠商品上架拼团": "The latest preferential goods on the shelf",
+	"立即参与": "Participate",
+	"当前限时秒杀": "Current time limit second kill",
+	"最新商品秒杀进行中": "Latest commodity spike in progress",
+	"我的余额": "Balance",
+	"赠送": "Gift",
+	"其他": "Other",
+	"注意事项": "Precautions",
+	"冻结佣金为": "Frozen Commission is",
+	"立即转入": "Immediate transfer in",
+	"立即充值": "Recharge immediately",
+	"请输入金额": "Please enter amount",
+	"转入余额": "Transfer in balance",
+	"转入余额后无法再次转出,确认是否转入余额": "Cannot transfer out again after transferring in balance, confirm whether to transfer in balance",
+	"转入成功": "Transfer in succeeded",
+	"正在支付": "Paying",
+	"充值金额必须为数字": "The recharge amount must be a number",
+	"充值金额不能为0": "Recharge amount cannot be 0",
+	"填写手机号码": "Fill in mobile phone number",
+	"是否绑定账号": "Bind account",
+	"绑定": "Binding",
+	"您已取消绑定!": "You have unbound!",
+	"当前手机号": "Current mobile number",
+	"设置新密码": "Set new password",
+	"确认新密码": "Confirm new password",
+	"手机号码不存在,无法发送验证码!": "Mobile phone number does not exist, unable to send verification code!",
+	"请输入新密码": "Please enter a new password",
+	"两次输入的密码不一致!": "The two passwords you entered are inconsistent!",
+	"请输入验证码": "Please enter a verification code",
+	"暂无退款订单~": "No refund order ~",
+	"缺少订单号无法查看订单详情": "The order number is missing, and the order details cannot be viewed",
+	"明细": "Detas",
+	"第七天": "Day 7",
+	"第7天": "Day 7",
+	"奖励": "Reward",
+	"已签到": "Checked in",
+	"立即签到": "Sign in now",
+	"已累计签到": "Cumulative check-in",
+	"据说连续签到第": "The second consecutive sign in",
+	"天可获得超额积分,一定要坚持签到哦~~~": "If you can get excess points every day, you must insist on signing in~~~",
+	"签到成功": "Check in succeeded",
+	"好的": "OK",
+	"您今日已签到!": "You have signed in today! ",
+	"暂无签到记录~": "No sign in record~",
+	"保存海报": "Save POSTER",
+	"长按保存图片": "Long press to save picture",
+	"分销海报": "Distribution POSTER",
+	"小程序二维码需要发布正式版后才能获取到": "Applet QR code can only be obtained after publishing the official version",
+	"获取中": "Getting ",
+	"暂无数据~": "No data temporarily ~",
+	"提现记录": "Withdrawal",
+	"提现总额": "Total withdrawal",
+	"佣金记录": "Commission record",
+	"佣金明细": "Commission details",
+	"分销等级": "Distribution level ",
+	"昨日收益": "Yesterday's earnings",
+	"累积已提": "Cumulative withdrawn",
+	"代理商申请": "Agent application",
+	"立即提现": "Withdrawal",
+	"推广名片": "Business card",
+	"推广人统计": "Promoter statistics",
+	"推广人订单": "promoter order",
+	"推广订单": "Promotion order",
+	"事业部": "Business division",
+	"代理商": "Agent",
+	"推广人排行": "Promoter ranking",
+	"佣金排行": "Commission ranking",
+	"员工列表": "Employee list",
+	"您目前暂无推广权限": "You currently have no promotion permission",
+	"商城购物可享": "Shopping in the mall",
+	"折": "Discount",
+	"当前等级": "Current level",
+	"未达成": "Not reached",
+	"今日成长值": "Today's growth value",
+	"点": "Point",
+	"我的成长值记录": "My growth value record",
+	"暂未解锁该等级": "This level has not been unlocked yet",
+	"点,需达到": "Point, need to reach",
+	"已解锁更高等级": "Unlocked higher level",
+	"我的成长特权": "My growth privilege",
+	"购物折扣": "Discount",
+	"专属徽章": "Exclusive badge",
+	"经验累积": "Experience accumulation",
+	"尊享客服": "Exclusive service",
+	"签到": "Check in",
+	"可获得": "Available",
+	"点经验": "Point experience",
+	"每日签到可获得经验值,已签到": "Daily sign in can get experience value, signed in",
+	"去签到": "Check in",
+	"点经验/元": "Point experience/$",
+	"购买商品可获得对应的经验值": "Corresponding experience value can be obtained by purchasing goods",
+	"去购买": "Go buy",
+	"点经验/人": "Point experience/person",
+	"邀请好友注册商城可获得经验值": "Invite friends to register in the mall to get experience value",
+	"去邀请": "Invite",
+	"积分数": "Product fraction",
+	"消费金额": "Consumption amount",
+	"暂无经验记录": "No experience record",
+	"账户登录": "Account login",
+	"微信登录": "Wechat login",
+	"手机号登录": "Mobile login",
+	"账户充值": "Recharge",
+	"佣金转入": "Commission",
+	"周榜": "Weekly list",
+	"月榜": "Monthly list",
+	"周排行": "Weekly ranking",
+	"月排行": "Monthly ranking",
+	"语言切换": "Language",
+	"点击前往": "Click to go",
+	"查看全部": "View all",
+	"查看订单": "View order",
+	"无法获取图片信息": "Unable to get picture information",
+	"长按或扫描查看": "Long press or scan view",
+	"点解锁": "Point unlock",
+	"确认修改": "Confirm",
+	"保存修改": "Save",
+	"退出登录": "Log out",
+	"付费会员": "SVIP",
+	"地址信息": "Address",
+	"我的推广": "Extension",
+	"砍价记录": "Bargain",
+	"我的等级": "My level",
+	"兑换": "GO",
+	"申请中": "Application",
+	"统计管理": "Statistics",
+	"退款": "Refund",
+	"未发货": "Not issued",
+	"当前为最新版本": "Currently the latest version",
+	"清除缓存": "Clear cache",
+	"确定清楚本地缓存数据吗": "Are you sure you are clear about the local cache data",
+	"缓存清理完成": "Cache cleaning completed",
+	"切换的账号不存在": "The switched account does not exist",
+	"正在切换中": "Switching",
+	"确认退出登录": "Confirm logout",
+	"我知道了": "I see",
+	"系统错误": "System error",
+	"请求失败": "Request failed",
+	"邀请您加入": "Invite you to join ",
+	"图片上传中": "Uploading",
+	"上传图片失败": "Failed to upload image",
+	"访问位置被拒绝": "Access location denied",
+	"系统定位已关闭": "System positioning is turned off",
+	"需要定位权限": "Location permission required",
+	"订单核销": "Write-off",
+	"当前可转入佣金为":"The current transferable commission is",
+	"浏览记录":"Browsing",
+	"签到奖励":"Check-in Reward",
+	"请输入内容":"Please enter content",
+	"单次限购":"Single purchase restriction",
+	"永久限购":"Permanent purchase restriction",
+	"《用户协议》":"《User agreement》",
+	"《隐私协议》":"《Privacy agreement》",
+	"与":"And",
+	"请先阅读并同意协议":"Please read and agree to the agreement first",
+	"绑定下级通知":"Bind child notifications",
+	"购买成功通知":"Purchase success notification",
+	"确认收货通知":"Confirmation of receipt notice",
+	"改价通知":"Price change notice",
+	"退款成功通知":"Refund success notification",
+	"充值成功通知":"Recharge success notification",
+	"积分到账通知":"Notice of points arrival",
+	"佣金到账通知":"Notice of commission arrival",
+	"砍价成功通知":"Price negotiation success notice",
+	"拼团成功通知":"Notification of success of the tour group",
+	"拼团失败通知":"Notification of group failure",
+	"开团成功通知":"Notification of successful group opening",
+	"提现成功通知":"Withdrawal success notice",
+	"提现失败通知":"Withdrawal failure notice",
+	"充值退款通知":"Recharge refund notice",
+	"退款申请拒绝通知":"Refund application rejection notice",
+	"您有新的退款待处理":"You have a new refund pending processing",
+	"您有新的订单待处理":"You have a new order to be processed",
+	"发货通知":"Delivery notice",
+	"取消拼团通知":"Notice of cancellation of group tour",
+	"参团成功通知":"Notification of successful participation",
+	"你有个新的提现申请待处理":"You have a new withdrawal application to be processed",
+	"你有个新的用户收货待处理":"You have a new user receiving goods to be processed",
+	"提醒付款通知":"Reminder payment notice",
+	"短信验证码":"SMS verification code",
+	"到店自提":"Self withdrawal",
+	"快递配送":"Express"
+}

+ 1181 - 0
lang/fr_fr.json

@@ -0,0 +1,1181 @@
+{
+	"选择地址": "Sélectionner l'adresse",
+	"选择其它地址": "Sélectionner une autre adresse",
+	"已选商品": "Marchandises sélectionnées",
+	"清空": "Effacer",
+	"¥": "€",
+	"已售罄": "Épuisé",
+	"已下架": "Retirer",
+	"删除": "Supprimer",
+	"商品券": "Produit",
+	"品类券": "Catégorie",
+	"通用券": "Général",
+	"优惠券": "Bon",
+	"满": "Complet",
+	"元可用": " Utilisé",
+	"无门槛券": "Pas de seuil",
+	"领取后": "Recevoir",
+	"天内可用": "Jours d'utilisation",
+	"已领取": "Reçu",
+	"立即领取": "Obtenir",
+	"购物满": "Dépenser",
+	"减": "Arrêt",
+	"不限时": "Temps illimité",
+	"秒杀": "Seckill",
+	"砍价": "Marché",
+	"拼团": "Groupe",
+	"已售": "Vendu",
+	"立即购买": "Acheter maintenant",
+	"加入购物车": "Ajouter au panier",
+	"选规格": "Options",
+	"跳过": "Suivant",
+	"立即体验": "Allez maintenant",
+	"首页": "Accueil",
+	"搜索": "Rechercher",
+	"购物车": "Panier",
+	"我的收藏": "Recueillir",
+	"个人中心": "Mien",
+	"券": "Vo.",
+	"正在加载中": "Chargement...",
+	"上拉加载更多": "Pull Up Loading More",
+	"代付金额": "Montant",
+	"共": "Un Total de",
+	"件商品": " Objets",
+	"订单包裹": "Commander des marchandises",
+	"申请退款中": "Remboursement",
+	"已退款": "Remboursé",
+	"已完成": "Terminé",
+	"件退款中": "Remboursement d'articles",
+	"不支持配送": "En magasin uniquement",
+	"不支持自提": "Livraison uniquement",
+	"已评价": "Évalué",
+	"评价": "Réviser",
+	"申请退款": "Remboursement",
+	"查看物流": "Logistique",
+	"确认收货": "Prendre commande",
+	"选择付款方式": "Sélectionner type de paiement",
+	"支付": "Payer",
+	"去付款": "Payer",
+	"请选择要支付的订单": "Sélectionner la commande",
+	"余额不足": "Solde insuffisant",
+	"支付中": "Payant...",
+	"缺少支付参数": "Paramètres de paiement manquants",
+	"取消支付": "Annuler le paiement",
+	"支付成功": "Paiement réussi",
+	"支付失败": "Echec du paiement",
+	"库存": "Stock",
+	"限量": "Limite",
+	"数量": "QTÉ",
+	"我要参团": "Rejoindre le groupe",
+	"确定": "D'accord",
+	"热门推荐": "Recommandation à chaud",
+	"最高返佣": "Le plus élevé",
+	"推广享佣金": "Promouvoir",
+	"立即分享": "Partager maintenant",
+	"发现新版本": "Nouvelle version",
+	"立即升级": "Améliorer",
+	"下载进度": "Progrès",
+	"店小二": "Serveur",
+	"暂无记录": "Aucune donnée",
+	"正在下载海报,请稍后再试": "Téléchargement de l'affiche, veuillez réessayer plus tard",
+	"海报二维码生成失败": "Impossible de générer le code QR de l'affiche",
+	"倒计时": "Compte à rebours",
+	"天": "D",
+	"时": "H",
+	"分": "M",
+	"秒": "S",
+	"砍价成功": "Marché réussi",
+	"活动已结束": "Activité arrêtée",
+	"已砍至": "Couper à",
+	"活动进行中": "Traitement...",
+	"取消活动": "Annuler",
+	"继续砍价": "Continuer",
+	"暂无砍价记录": "Pas de données",
+	"人正在参与": "Participer",
+	"最低": "Le plus bas",
+	"参与砍价": "Marché",
+	"砍价列表": "Liste des bonnes affaires",
+	"人查看": "Voir",
+	"人分享": "Partager",
+	"人参与": "Impliqué",
+	"邀请您帮忙砍价": "Vous inviter à aider",
+	"查看商品": "Afficher les éléments",
+	"当前": "Actuel",
+	"已砍": "Haché",
+	"还剩": "Gauche",
+	"立即参与砍价": "Négociez maintenant",
+	"商品暂无库存": "Rupture de stock",
+	"邀请好友帮砍价": "Aide pour inviter des amis",
+	"已有": "Avoir",
+	"位好友成功砍价": "Amis réussis",
+	"帮好友砍一刀": "Aider les amis",
+	"好友已砍价成功": "Amis déjà réussis",
+	"我也要参与": "Je participerai",
+	"已成功帮助好友砍价": "Aidez vos amis à réussir",
+	"恭喜您砍价成功,快去支付": "Négociation réussie, allez payer",
+	"立即支付": "Payer maintenant",
+	"抢更多商品": "Attrapez plus",
+	"砍价帮": "Gang de marchandage",
+	"砍掉": "Couper ",
+	"更多": "Plus",
+	"关闭": "Fermer",
+	"点击加载更多": "Cliquez pour charger plus",
+	"商品详情": "Détails",
+	"砍价规则": "Règles de négociation",
+	"您已砍掉": "Vous avez coupé",
+	"元,听说分享次数越多砍价成功的机会越大哦": ", Plus vous partagez, plus vous avez de chance de négocier avec succès",
+	"成功帮砍": "Aide à couper avec succès",
+	"您也可以砍价低价拿哦,快去挑选心仪的商品吧": "Vous pouvez aussi marchander et l'avoir à petit prix, allez choisir vos produits préférés",
+	"发送给朋友": "Envoyer un ami",
+	"微信好友": "Wechat ami",
+	"微信朋友圈": "Moments WeChat",
+	"生成海报": "Générer l'affiche",
+	"砍价详情": "Détails de la bonne affaire",
+	"分享成功": "Partage réussi",
+	"分享失败": "Échec du partage",
+	"该商品每人限购": "Ce produit est limité à l'achat par personne",
+	"您的好友": "Votre ami",
+	"邀请您砍价": "Je vous invite à couper",
+	"人团": " Les gens ",
+	"去拼团": "Aller",
+	"拼团列表": "Liste des groupes",
+	"类型": "Tapez",
+	"累计销量": "Total vendu",
+	"限购": "Limite",
+	"种规格可选": "Spécifications",
+	"已拼": "Épelé ",
+	"件": "Pièce",
+	"还差": "Seulement",
+	"人成团": "succès",
+	"去拼单": "Rejoindre",
+	"查看更多": "Plus",
+	"收起": "Ranger",
+	"拼团玩法": "Processus de groupe",
+	"开团/参团": "Démarrer",
+	"邀请好友": "Invitation",
+	"满员发货": "Livraison",
+	"用户评价": "Revoir",
+	"好评率": "Taux d'éloges",
+	"产品介绍": "Détails",
+	"单独购买": "Acheter seul",
+	"立即开团": "Démarrer le groupe",
+	"请选择": "Sélectionné",
+	"商品": "Produit",
+	"详情": "Détail",
+	"缺少参数无法查看商品": "Impossible d'afficher le produit en raison de paramètres manquants",
+	"参数错误": "Erreur de paramètre",
+	"已选择": "Sélectionné",
+	"保存成功": "Succès enregistré",
+	"保存失败": "Échec de la sauvegarde",
+	"人拼": "Les gens se battent",
+	"剩余": "Restant",
+	"结束": "Terminer",
+	"恭喜您拼团成功": "Félicitations pour votre regroupement réussi",
+	"人,拼团失败": "Personne est partie, le groupe a échoué",
+	"拼团中,还差": "Dans le groupe, il y a encore",
+	"人拼团成功": "Personne restante pour rejoindre le groupe avec succès",
+	"邀请好友参团": "Inviter des amis à rejoindre le groupe",
+	"再次开团": "Regrouper",
+	"取消开团": "Annuler",
+	"查看订单信息": "Voir la commande",
+	"大家都在拼": "Tous les groupes",
+	"更多拼团": "Plus",
+	"邀请您参团": "Vous inviter à rejoindre",
+	"你不是该团的成员": "Vous n'êtes pas membre du groupe",
+	"已抢": "Volé",
+	"抢购中": "Attrapez maintenant",
+	"未开始": "Non démarré",
+	"已结束": "Terminé",
+	"暂无商品,去看点别的吧": "Aucun produit",
+	"即将开始": "Non démarré",
+	"距秒杀结束仅剩": "Il ne reste que la fin",
+	"累计销售": "Vendu",
+	"收藏": "Récupérer",
+	"保存到手机": "Enregistrer sur téléphone",
+	"长按图片可以保存到手机": "Appui long pour enregistrer sur le téléphone",
+	"抢购详情页": "Page des détails de l'achat instantané",
+	"二维码获取失败": "Impossible d'obtenir le code QR",
+	"请选择属性": "Veuillez sélectionner une propriété",
+	"提示:点击图片即可保存至手机相册": "Astuce : Cliquez sur l'image pour l'enregistrer dans l'album du téléphone",
+	"拼团海报": "Affiche casse-tête",
+	"砍价海报": "Affiche de marchandage",
+	"海报生成中": "L'affiche est en cours de génération",
+	"海报图片获取失败": "Impossible d'obtenir l'image de l'affiche",
+	"海报": "Affiche",
+	"已预定": "Réservé",
+	"预售价": "Pré-vente",
+	"立即预定": "Réservez maintenant",
+	"开售时间": "Heure de la vente",
+	"预售活动": "Événement avant-vente",
+	"起": "Monter",
+	"划线价": "ORP",
+	"开通“超级会员”立省": "Ouvrir \"Super Member\" pour désactiver ",
+	"元": "€",
+	"立即开通": "Activer maintenant",
+	"预售活动时间": "Délai de prévente",
+	"预售结束后": "Expédié dans",
+	"天内发货": "Jours après la fin de la prévente",
+	"活动": "Activité",
+	"参与秒杀": "Seckill",
+	"参与拼团": "Groupe",
+	"复制口令": "Copier le code des marchandises",
+	"复制成功": "Copie réussie",
+	"推荐": "Recommandé",
+	"缺少经纬度信息无法查看地图": "Les informations de latitude et de longitude manquantes ne permettent pas d'afficher la carte",
+	"产品库存不足,请选择其它属性": "Stock de produit insuffisant, veuillez sélectionner un autre attribut",
+	"立即退款": "Remboursement immédiat",
+	"一键改价": "Modifier le prix",
+	"订单备注": "Notes de commande",
+	"商品总价": "Prix total",
+	"原始邮费": "Ancien affranchissement",
+	"实际支付": "Prix réel",
+	"退款金额": "Prix remboursé",
+	"请填写备注信息": "Veuillez remplir les remarques",
+	"立即修改": "Modifier maintenant",
+	"确认退款": "Confirmer le remboursement",
+	"拒绝退款": "Remboursement refusé",
+	"取消": "Annuler",
+	"订单号": "ID de commande",
+	"发货方式": "Mode",
+	"发货类型": "Type d'expédition",
+	"快递公司": "Express",
+	"快递单号": "Nombre",
+	"顺丰请输入单号 :收件人或寄件人手机号后四位": "Veuillez entrer le numéro de suivi pour SF Express : les quatre derniers chiffres du numéro de téléphone portable du destinataire ou de l'expéditeur",
+	"例如:SF000000000000:3941": "Par exemple : SF000000000000:3941",
+	"电子面单": "Fiche électronique",
+	"预览": "Aperçu",
+	"寄件人姓名": "Nom de l'expéditeur",
+	"填写寄件人姓名": "Renseignez le nom de l'expéditeur",
+	"寄件人电话": "Téléphone de l'expéditeur",
+	"填写寄件人电话": "Renseignez le numéro de téléphone de l'expéditeur",
+	"寄件人地址": "Adresse de l'expéditeur",
+	"填写寄件人地址": "Renseignez l'adresse de l'expéditeur",
+	"送货人": "Livreur",
+	"确认提交": "Soumettre",
+	"发货": "Navire",
+	"送货": "Donner",
+	"无需物流": "Pas besoin",
+	"手动填写": "Remplir manuellement",
+	"电子面单打印": "Fiche électronique",
+	"填写快递单号": "Veuillez renseigner le numéro de courrier",
+	"请选择电子面单": "Veuillez sélectionner un reçu électronique",
+	"待付款": "Payer",
+	"待发货": "A expédier",
+	"待收货": "Recevoir",
+	"待评价": "Évaluer",
+	"售后/退款": "Remboursement",
+	"数据统计": "Statistiques",
+	"今日成交额": "Vendu aujourd'hui",
+	"昨日成交额": "Vendu hier",
+	"本月成交额": "Mois vendu",
+	"今日订单数": "Commandes d'aujourd'hui",
+	"昨日订单数": "Commandes d'hier",
+	"本月订单数": "Commandes mensuelles",
+	"详细数据": "Données détaillées",
+	"日期": "Date",
+	"订单数": "Nombre de commandes",
+	"成交额": "Chiffre d'affaires",
+	"立即核销": "Annulez maintenant",
+	"查看": "Voir",
+	"确定要核销此订单吗": "Êtes-vous sûr d'annuler cette commande",
+	"确定核销": "Vérifier",
+	"请输入核销码": "Veuillez entrer le code de vérification",
+	"请输入正确的核销码": "Veuillez entrer le bon code de vérification",
+	"查询中": "Interrogation",
+	"订单": "Commander",
+	"订单未备注,点击添加备注信息": "La commande n'a pas de remarques, cliquez pour ajouter des remarques",
+	"复制": "Copier",
+	"件商品,应支付": "Articles, devrait payer",
+	"邮费": "Frais de port",
+	"订单编号": "ID de commande",
+	"下单时间": "Heure de la commande",
+	"支付状态": "Statut du paiement",
+	"已支付": "Payant",
+	"未支付": "Impayé",
+	"支付方式": "Méthode de paiement",
+	"买家留言": "MSG acheteur",
+	"支付金额": "Payer le montant",
+	"优惠券抵扣": "Déduction coupon",
+	"运费": "Tarif",
+	"实付款": "Montant réel",
+	"配送方式": "Méthode de livraison",
+	"快递": "Express",
+	"送货人电话": "Téléphone courrier",
+	"确认付款": "Confirmer le paiement",
+	"去发货": "A expédier",
+	"改价成功": "Prix modifié avec succès",
+	"改价失败": "Le changement de prix a échoué",
+	"请输入备注": "Veuillez entrer une note",
+	"退款中": "Remboursement",
+	"部分退款中": "Remboursement partiel",
+	"件商品,实付款": "Marchandises payées",
+	"同意退货": "Accepter le retour",
+	"待用户发货": "Non expédié",
+	"请输入正确的金额": "Veuillez saisir le montant correct",
+	"今天": "Aujourd'hui",
+	"昨天": "Hier",
+	"最近7天": "7 derniers jours",
+	"本月": "Mois",
+	"自定义": "Personnaliser",
+	"营业额(元)": "Chiffre d'affaires",
+	"订单量(份)": "Quantité",
+	"增长率": "Taux à la hausse",
+	"增长": "Augmenter",
+	"单位": "Unité",
+	"元.": "Yuan",
+	"分.": "Cents",
+	"固定": "Fixé",
+	"指定范围": "Portée",
+	"提交时间": "Heure de soumission",
+	"原因": "Raison",
+	"暂无申请记录,快去申请吧!": "Aucun dossier de candidature pour le moment, postulez maintenant !",
+	"没有更多啦": "Pas plus",
+	"待审核": "En attente de révision",
+	"审核通过": "Révision réussie",
+	"审核未通过": "Échec de la révision",
+	"编辑": "Modifier",
+	"重新提交": "Resoumettre",
+	"会员优惠价": "Réduction VIP",
+	"余额支付": "Paiement du solde",
+	"可用余额": "Équilibre",
+	"微信支付": "WeChat Paye",
+	"确认": "Confirmer",
+	"支付提醒": "Rappel de paiement",
+	"线下支付已关闭,请点击确认按钮返回主页": "Le paiement hors ligne a été clôturé, veuillez cliquer sur le bouton de confirmation pour revenir à la page d'accueil",
+	"请输入支付金额": "Veuillez entrer le montant du paiement",
+	"正在确认": "Confirmation",
+	"进入商城": "Entrez centre commercial",
+	"代理商名称": "Nom de l'agence",
+	"请输入代理商名称": "Veuillez entrer le nom de l'agence",
+	"用户姓名": "Votre nom",
+	"请输入姓名": "Veuillez entrer votre nom",
+	"联系电话": "Votre téléphone",
+	"请输入手机号": "Veuillez entrer le numéro de téléphone",
+	"验证码": "Code OTP",
+	"填写验证码": "Remplir le code OTP",
+	"邀请码": "Code d'invitation",
+	"请输入代理商邀请码": "Entrez le code d'invitation",
+	"请上传营业执照及行业相关资质证明图片": "Veuillez télécharger des photos des licences commerciales et des certificats de qualification liés à l'industrie",
+	"图片最多可上传10张,图片格式支持JPG、PNG、JPEG": "Jusqu'à 10 images peuvent être téléchargées, et le format d'image prend en charge JPG, PNG, JPEG",
+	"上传图片": "Télécharger",
+	"已阅读并同意": "Lire et accepter",
+	"代理商协议": "Contrat d'agence",
+	"提交申请": "Soumettre la candidature",
+	"代理商入驻协议": "Contrat d'agent",
+	"恭喜,您的资料提交成功!": "Félicitations, Soumis avec succès !",
+	"返回首页": "Retour à la maison",
+	"恭喜,您的资料通过审核!": "Félicitations, examen réussi !",
+	"您的申请未通过!": "Votre candidature a été rejetée !",
+	"重新申请": "Réappliquer",
+	"获取验证码": "Obtenir le code OTP",
+	"请输入正确的手机号码": "Veuillez entrer le bon numéro de téléphone",
+	"重新获取": "Réacquérir",
+	"请上传营业执照": "Veuillez télécharger la licence commerciale",
+	"请勾选并同意入驻协议": "Veuillez cocher et accepter la convention d'occupation",
+	"专题栏": "Colonne Sujet",
+	"暂无数据": "Aucune donnée",
+	"请输入卡号": "Veuillez entrer le numéro de carte",
+	"请输入卡密": "Veuillez saisir votre mot de passe",
+	"确认激活": "Confirmer",
+	"SVIP会员尊享权": "Privilèges de membre SVIP",
+	"正在激活": "Activation",
+	"已使用": "Occasion",
+	"永久SVIP会员": "Membre SVIP permanent",
+	"SVIP会员": "Membre SVIP",
+	"到期": "maturité",
+	"您与": "Toi avec",
+	"商城的第": "Centre commercial",
+	"天.": " Jours.",
+	"已累积为您节省": "Économies cumulées pour vous",
+	"开通即享会员权益": "Profitez des avantages membres",
+	"续费会员": "Renouvellement",
+	"开通会员": "Rejoindre SVIP",
+	"有效期至": "Valable jusqu'au",
+	"试用": "Essayez",
+	"购买即视为同意": "Achat avec consentement",
+	"会员用户协议": "Accord SVIP",
+	"点击兑换卡密": "Cliquez pour utiliser la carte",
+	"会员优惠券": "Coupon SVIP",
+	"SVIP商品推荐": "SVIP recommande",
+	"商城价": "Prix centre commercial",
+	"激活会员卡": "Activer la carte",
+	"支付宝支付": "Alipay",
+	"成功开启0元试用": "L'essai à 0 yuan a été ouvert avec succès",
+	"确认绑定": "Confirmer la liaison",
+	"绑定成功": "La liaison a réussi",
+	"商城客服已离线": "Le service client est hors ligne",
+	"我要反馈": "Je veux des commentaires",
+	"请填写内容": "Veuillez remplir le contenu",
+	"提交": "Soumettre",
+	"精品推荐": "Recommandé",
+	"热门榜单": "Populaire",
+	"首发新品": "Nouveau",
+	"促销单品": "Promotionnel",
+	"预告": "Avis",
+	"回放": "Lecture",
+	"进行中": "Traitement",
+	"发送客服": "Envoyer",
+	"客服连接中": "Le service client se connecte",
+	"连接失败": "Échec de la connexion",
+	"提示": "Indice",
+	"客服已下线,是否需要反馈?": "Le service client est déconnecté, avez-vous besoin d'un retour ?",
+	"和好友一起分享": "Partager avec des amis",
+	"积分抵扣": "Déduction de points",
+	"已开票": "Facturé",
+	"未开票": "Non facturé",
+	"发票信息": "Informations sur la facture",
+	"发票抬头": "Facture",
+	"发票抬头类型": "Type d'en-tête de facture",
+	"个人": "PAR ",
+	"企业": "COM",
+	"发票类型": "Type de facture",
+	"电子普通发票": "Facture Générale Electronique",
+	"电子专用发票": "Facture spéciale électronique",
+	"企业税号": "Taxe sur les entreprises",
+	"联系信息": "Coordonnées",
+	"真实姓名": "Nom réel",
+	"联系邮箱": "Courriel",
+	"抬头选择": "Sélection de la tête",
+	"默认": "Par défaut",
+	"普通": "Ordinaire",
+	"专用": "Dédié",
+	"您还没有添加发票信息哟": "Vous n'avez pas ajouté d'informations de facturation",
+	"添加新的抬头": "Ajouter un nouvel en-tête",
+	"不开发票": "Pas de facture",
+	"抽奖": "Loterie",
+	"全选": "Tout sélectionner",
+	"属性": "Attributs",
+	"请填写具体地址": "Veuillez renseigner l'adresse spécifique",
+	"省": "Province",
+	"市": "Ville",
+	"区": "Zone",
+	"添加成功": "Ajouter avec succès",
+	"您已拒绝导入微信地址权限": "Vous avez refusé l'autorisation d'importer des adresses WeChat",
+	"是否进入权限管理,调整授权?": "Entrez-vous dans la gestion des autorisations et ajustez-vous l'autorisation ?",
+	"已取消": "Annulé",
+	"添加失败": "Échec de l'ajout",
+	"请填写收货人姓名": "Veuillez renseigner le nom du destinataire",
+	"请选择所在地区": "Veuillez sélectionner votre région",
+	"请填写详细地址": "Veuillez renseigner l'adresse détaillée",
+	"星": "Étoile",
+	"商品满足你的期待么?说说你的想法,分享给想买的他们吧": "Le produit répond-il à vos attentes ? Dites-nous ce que vous en pensez et partagez-le avec ceux qui veulent l'acheter",
+	"立即评价": "Évaluer maintenant",
+	"商品质量": "Qualité du produit",
+	"服务态度": "Attitude de service",
+	"缺少参数": "Paramètres manquants",
+	"请填写你对宝贝的心得": "Merci de renseigner votre avis sur le produit",
+	"正在发布评论": "Commentaire de publication",
+	"感谢您的评价": "Merci pour votre avis",
+	"评价完成": "Revue terminée",
+	"恭喜您": "Félicitations",
+	"获得": "Obtenir",
+	"机会": "Le hasard",
+	"领取成功": "Reçu avec succès",
+	"评分": "Score",
+	"全部": "TOUS",
+	"好评": "Louange",
+	"中评": "Moyenne",
+	"差评": "Mauvais",
+	"加载更多": "Charger plus",
+	"千米距离": "à des kilomètres",
+	"搜索商品名称": "Rechercher Produit",
+	"价格": "Prix",
+	"销量": "Vendu",
+	"新品": "Nouveau",
+	"已全部加载": "Tous chargés",
+	"缺少订单号": "ID de commande manquant",
+	"退货件数": "Numéro remboursé",
+	"退款类型": "Type de remboursement",
+	"退款原因": "Raison du remboursement",
+	"备注说明": "Remarque",
+	"填写备注信息,100字以内": "Remarques de moins de 100 mots",
+	"仅退款": "Remboursement uniquement",
+	"退货并退款": "Retour et remboursement",
+	"申请成功": "Application réussie",
+	"请先选择退货商品": "Veuillez d'abord sélectionner l'article à retourner",
+	"搜索历史": "Historique des recherches",
+	"热门搜索": "Recherche rapide",
+	"请输入要搜索的商品": "Veuillez saisir le produit que vous souhaitez rechercher",
+	"正在搜索中": "Recherche",
+	"中奖记录": "Record gagnant",
+	"我的奖品": "Mon prix",
+	"活动规则": "Règle d'activité",
+	"昵称": "Surnom",
+	"序号": "Série",
+	"奖品名称": "Nom du prix",
+	"获奖时间": "Temps gagnant",
+	"商家暂未上架活动哦": "Le marchand n'a pas encore répertorié l'événement",
+	"获取抽奖信息": "Obtenir des informations sur le concours",
+	"奖品类型": "Type de prix",
+	"立即兑换": "Échangez maintenant",
+	"兑换时间": "Temps d'échange",
+	"暂无中奖记录": "Pas de fiche gagnante",
+	"积分": "Pointer",
+	"余额": "Équilibre",
+	"红包": "Paiement",
+	"设置收货地址": "Définir l'adresse de livraison",
+	"暂无门店信息": "Pas d'informations sur le magasin",
+	"剩余积分": "Points restants",
+	"当前积分": "Points courants",
+	"开具发票": "Facture",
+	"请填写": "Veuillez remplir",
+	"配送运费": "Frais de port",
+	"会员商品优惠": "Offres de produits",
+	"会员运费优惠": "Offres de livraison",
+	"合计": "Totale",
+	"使用微信快捷支付": "Paiement rapide WeChat",
+	"使用支付宝支付": "Payer avec Alipay",
+	"线下支付": "Paiements hors ligne",
+	"使用线下付款": "Utiliser le paiement hors ligne",
+	"好友代付": "Ami paie",
+	"找微信好友支付": "Rechercher des amis pour payer",
+	"立即使用": "Utiliser",
+	"请选择要购买的商品": "Veuillez sélectionner un article à acheter",
+	"发票": "Facture",
+	"不使用": "Ne pas utiliser",
+	"订单创建成功": "Commande créée avec succès",
+	"请选择支付方式": "Veuillez sélectionner le mode de paiement",
+	"请选择收货地址": "Veuillez sélectionner l'adresse de livraison",
+	"请填写联系人或联系人电话": "Veuillez renseigner la personne de contact ou le numéro de téléphone de contact",
+	"暂无门店,请选择其他方式": "Aucun magasin actuellement, veuillez choisir un autre moyen",
+	"请输入": "Veuillez entrer",
+	"请输入正确的": "Veuillez entrer le bon ",
+	"请上传": "Veuillez télécharger",
+	"订单支付中": "Payer",
+	"请按以上退货信息将商品退回": "Veuillez retourner l'article avec les informations",
+	"请联系管理员获取退货地址": "Veuillez contacter l'administrateur pour l'adresse de retour",
+	"待核销": "Annulé",
+	"核销信息": "Informations de radiation",
+	"营业时间": "Heures d'ouverture",
+	"每日": "Quotidien",
+	"使用说明": "Instructions d'utilisation",
+	"可将二维码出示给店员扫描或提供数字核销码": "Le code QR peut être présenté à l'employé pour scanner ou fournir un code de vérification numérique",
+	"可将二维码出示给配送员进行核销": "Le code QR peut être présenté au coursier pour vérification",
+	"查看位置": "Afficher l'emplacement",
+	"拒绝原因": "Raison du refus",
+	"联系客服": "Contacter",
+	"商家备注": "Notes marchandes",
+	"收货人": "Récepteur",
+	"收货地址": "Adresse du navire",
+	"配送人姓名": "Nom du navire",
+	"拨打": "Appeler",
+	"虚拟发货": "Vaisseau virtuel",
+	"已发货,请注意查收": "Expédié, veuillez vérifier",
+	"虚拟备注": "Notes virtuelles",
+	"总代付": "Montant total",
+	"申请开票": "Appliquer la facture",
+	"查看发票": "Voir facture",
+	"取消订单": "Annuler",
+	"立即付款": "Payer",
+	"批量退款": "Remboursement groupé",
+	"查看拼团": "Voir le groupe",
+	"再次购买": "Acheter à nouveau",
+	"取消申请": "Annuler l'application",
+	"填写退货信息": "Informations de retour",
+	"查看退货物流": "Logistique",
+	"您确认放弃此次申请吗": "Êtes-vous sûr de vouloir abandonner cette application",
+	"操作成功": "Opération réussie",
+	"订单信息不存在": "Les informations de la commande n'existent pas",
+	"为保障权益,请收到货确认无误后,再确认收货": "Afin de protéger les droits et intérêts, veuillez confirmer la réception de la marchandise après avoir confirmé que la marchandise est correcte.",
+	"删除订单": "Supprimer la commande",
+	"确定删除该订单": "Confirmer la suppression de la commande",
+	"删除成功": "Supprimé avec succès",
+	"确认取消该订单": "Confirmer l'annulation de la commande",
+	"订单信息": "Informations sur la commande",
+	"消费订单": "Commander",
+	"总消费": "Montant total",
+	"预售": "Pré-vente",
+	"线下付款,未支付": "Hors ligne non payé",
+	"未核销": "Non radié",
+	"件商品,总金额": " articles, montant total ",
+	"查看详情": "Voir",
+	"暂无订单": "Pas encore de commande",
+	"缺少订单号无法取消订单": "Impossible d'annuler la commande sans numéro de commande",
+	"订单支付成功": "Commande payée avec succès",
+	"订单支付失败": "La commande payée a échoué",
+	"暂未支付": "Pas encore payé",
+	"失败原因": "Raison d'échec",
+	"重新购买": "Rachat",
+	"重新支付": "Payer à nouveau",
+	"赠送优惠券": "Offrir des coupons",
+	"有效期": "Validité",
+	"缺少参数无法查看订单支付状态": "Les paramètres manquants ne permettent pas de voir l'état du paiement de la commande",
+	"最多可上传3张": "Jusqu'à 3 téléchargements",
+	"请选择产品": "Veuillez sélectionner un produit",
+	"该产品没有更多库存了": "Il n'y a plus de stock pour ce produit",
+	"优品推荐": "Meilleure recommandation",
+	"暂无产品": "Aucun produit pour le moment",
+	"重新选择": "Resélectionner",
+	"请选择数量": "Veuillez sélectionner la quantité",
+	"砍价专区·BARGAINING": "NÉGOCIATION",
+	"立即砍价": "Couper maintenant",
+	"拼团活动": "Groupe",
+	"人拼团成功.": "Les gens ont réussi",
+	"人参团": " Groupe Ginseng",
+	"拼团价": "Prix groupe",
+	"已过期": "Expiré",
+	"关注": "Suivre",
+	"推荐好货": "Recommander des marchandises",
+	"暂无商品": "Aucun produit pour le moment",
+	"限时秒杀": "Pic limité dans le temps",
+	"抢": "Attraper",
+	"广告位": "espace ADV",
+	"精彩内容": "Faits saillants",
+	"砍价模块,暂无数据": "Module de bonnes affaires, pas encore de données",
+	"砍价活动": "Marché",
+	"呼朋唤友来砍价": "Appelez des amis à bon marché",
+	"拼团模块,暂无数据": "Module de groupe, pas encore de données",
+	"享超值开团价": "Profitez des tarifs groupe au meilleur rapport qualité-prix",
+	"优惠券,暂无数据": "Coupon, pas de données temporairement",
+	"领取今日好券": "Obtenez le bon coupon d'aujourd'hui",
+	"可用": " Utilisé",
+	"领取": "Réclamer",
+	"客服": "Service",
+	"商品列表,暂无数据": "Pas de données temporairement",
+	"搜索商品": "Rechercher Produit",
+	"暂无图片,请上传图片": "Aucune image, veuillez télécharger",
+	"首发新品,暂无数据": "Premier nouveau produit, pas encore de données",
+	"多个优质商品最新上架": "Les dernières marchandises de haute qualité sur les étagères",
+	"暂无新闻,请上传新闻": "Aucune nouvelle, veuillez télécharger la nouvelle",
+	"热度 TOP": "Chauffer le HAUT",
+	"排行榜、暂无数据": "Classement, aucune donnée temporairement",
+	"促销单品,暂无数据": "Articles promotionnels, pas de données temporairement",
+	"库存商品优惠促销活动": "Activités promotionnelles pour les marchandises en stock",
+	"精品推荐,暂无数据": "Recommandation boutique, pas encore de données",
+	"上百种商品分类任您选择": "Des centaines de catégories de produits parmi lesquelles choisir",
+	"秒杀模块,暂无数据": "Module Seckill, aucune donnée temporairement",
+	"场": "Site",
+	"暂无数据,请设置": "Aucune donnée, veuillez définir",
+	"暂无数据,请先添加分类": "Aucune donnée, veuillez d'abord ajouter une classification",
+	"暂无标题": "Pas de titre temporairement",
+	"诚意推荐品质商品": "Recommander des produits de qualité en toute bonne foi",
+	"点击“立即关注”即可关注公众号": "Cliquez sur 'suivre maintenant' pour suivre le compte officiel",
+	"立即关注": "Suivre maintenant",
+	"添加到我的小程序, 微信首页下拉即可访问商城。": "Ajoutez-le à mon applet, et vous pourrez accéder au centre commercial en déroulant la page d'accueil de wechat",
+	"点击": "Cliquez",
+	"服务协议与隐私政策": "Contrat de service et politique de confidentialité",
+	"请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。": "Veuillez vous assurer de lire attentivement et de bien comprendre les termes du contrat de service et de la politique de confidentialité, y compris, mais sans s'y limiter : afin de vous fournir la messagerie instantanée, le partage de contenu et d'autres services, nous devons récupérer votre appareil informations, journaux d'opérations et autres informations personnelles. Vous pouvez afficher, modifier, supprimer des informations personnelles et gérer votre autorisation dans Paramètres",
+	"你可以阅读": "Vous savez lire",
+	"《服务协议与隐私政策》": "《Contrat de service et politique de confidentialité》",
+	"了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。": "En savoir plus. Si vous êtes d'accord, veuillez cliquer sur J'accepte pour commencer à accepter nos services",
+	"我同意": "Je suis d'accord",
+	"残忍拒绝": "Rejet cruel",
+	"下拉加载更多": "Déroulez plus de charge",
+	"网络连接断开": "Connexion réseau déconnectée",
+	"请检查情况:": "Veuillez vérifier l'état:",
+	"在设置中是否已开启网络权限": "Si l'autorisation réseau est activée dans les paramètres",
+	"当前是否处于弱网环境": "Actuellement dans un environnement réseau faible",
+	"版本是否过低,升级试试吧": "Si la version est trop basse, essayez de mettre à jour",
+	"重新连接": "Se reconnecter",
+	"加载中": "Chargement",
+	"没有更多内容啦~": "Plus de contenu~",
+	"100%正品保证": "100% authentique",
+	"所有商品精挑细选": "Soyez très sélectif",
+	"售后无忧": "Sans souci après vente",
+	"管理": "Tube",
+	"购物数量": "Quantité d'achat",
+	"请重新选择商品规格": "Veuillez resélectionner la spécification du produit",
+	"重选": "Resélection",
+	"失效商品": "Marchandises invalides",
+	"失效": "Échec",
+	"该商品已失效": "La marchandise a expiré",
+	"立即下单": "Commander maintenant",
+	"我也是有底线的": "J'ai aussi une ligne de fond",
+	"产品库存不足,请选择其它": "Inventaire de produits insuffisant, veuillez en sélectionner un autre",
+	"添加购物车成功": "Le panier a été ajouté avec succès",
+	"清除成功": "Le nettoyage a réussi",
+	"暂无兑换记录~": "Pas d'enregistrement d'échange~",
+	"大家都在换": "Tout le monde change",
+	"人兑换": " Echange de personne",
+	"轻松赚积分": "Gagnez des points facilement",
+	"购买商品": "Acheter des marchandises",
+	"购买商品可获得积分奖励": "Récompense en points pour l'achat de biens",
+	"去完成": "Aller",
+	"每日签到活动": "Activités d'enregistrement quotidiennes",
+	"每日签到可获得积分奖励": "L'enregistrement quotidien peut obtenir des points de récompense",
+	"九宫格抽奖活动": "Loterie Jiugongge",
+	"幸运抽奖可获得积分奖励": "Un tirage au sort peut rapporter des points",
+	"我的积分": "Mes points",
+	"每日签到": "Connexion quotidienne",
+	"积分抽奖": "Loterie aux points",
+	"兑换记录": "Enregistrement d'échange",
+	"已兑换": "Racheté",
+	"无法兑换": "Impossible d'échanger",
+	"[默认]": "[Par défaut]",
+	"可用积分": "Points disponibles",
+	"快递费用": "Frais express",
+	"免运费": "Frais de port gratuits",
+	"备注信息": "Remarques",
+	"请添加备注(150字以内)": "Veuillez ajouter des remarques (moins de 150 mots)",
+	"使用线上支付宝支付": "Payer avec Alipay en ligne",
+	"可用余额:": "Solde :",
+	"选择线下付款方式": "Sélectionner le mode de paiement hors ligne",
+	"正在加载…": "Chargement…",
+	"可用积分不足!": "Points disponibles insuffisants !",
+	"订单状态": "Statut de la commande",
+	"支付积分": "Payer des points",
+	"备注": "Remarques",
+	"配送核销码": "Code de vérification de livraison",
+	"当前可用余额:": "Solde disponible actuel:",
+	"正在加载": "Chargement",
+	"缺少经纬度信息无法查看地图!": "La carte ne peut pas être visualisée sans les informations de longitude et de latitude!",
+	"商品兑换成功": "Racheté avec succès",
+	"兑换方式": "Méthode d'échange",
+	"积分兑换": "Echange de points",
+	"兑换积分": "Échanger des points",
+	"取消兑换": "Annuler l'échange",
+	"缺少参数无法查看订单兑换状态": "Le statut d'échange de commande ne peut pas être visualisé sans paramètres",
+	"用户离开了": "L'utilisateur est parti",
+	"兑换成功": "Racheté avec succès",
+	"物流公司": "Société de logistique",
+	"复制单号": "Copier le document n°",
+	"设为默认": "Définir par défaut",
+	"添加新地址": "Ajouter une nouvelle adresse",
+	"导入微信地址": "Importer l'adresse wechat",
+	"取消选择": "Désélectionner",
+	"您设置的默认地址不存在!": "L'adresse par défaut que vous avez définie n'existe pas !",
+	"设置成功": "Paramétrage réussi",
+	"您删除的地址不存在!": "L'adresse que vous avez supprimée n'existe pas !",
+	"获取头像": "Obtenir un avatar",
+	"请点击授权": "Veuillez cliquer sur autoriser",
+	"绑定手机号": "Associer numéro mobile",
+	"永久": "Permanente",
+	"会员到期": "Expiration de l'abonnement",
+	"未开通会员": "Membre non ouvert",
+	"查看会员权益": "Voir les avantages de l'abonnement",
+	"立即续费": "Renouveler",
+	"立即激活": "Activation",
+	"会员可享多项权益": "Profitez de multiples avantages",
+	"订单中心": "Ma commande",
+	"我的服务": "Mon service",
+	"隐私协议": "Confidentialité",
+	"商家管理": "Gestion commerciale",
+	"更新用户信息成功": "Informations utilisateur mises à jour avec succès",
+	"客服接待": "Réception",
+	"点击复制网址去浏览器中打开": "Cliquez sur Copier l'URL pour l'ouvrir dans le navigateur",
+	"点击复制": "Cliquez sur Copier",
+	"完成支付": "Terminer le paiement",
+	"点击右上角": "Cliquez sur le coin supérieur droit",
+	"选择 在浏览器 打开,去支付宝支付": "Sélectionner pour ouvrir dans le navigateur et payer via Alipay",
+	"支付订单不存在,页面将在2秒后自动关闭!": "L'ordre de paiement n'existe pas, et la page se fermera automatiquement dans 2 secondes !",
+	"正在支付中": "Payant",
+	"支付订单不存在,页面将在2秒后自动关闭": "L'ordre de paiement n'existe pas, et la page se fermera automatiquement dans 2 secondes",
+	"复制失败": "La réplication a échoué",
+	"您目前的排名": "Votre classement actuel",
+	"您目前暂无排名": "Vous êtes actuellement classé",
+	"暂无排名~": "Aucun classement ~",
+	"输入手机号": "Entrez le numéro de portable",
+	"输入验证码": "Entrez le code de vérification",
+	"立即登录": "Connectez-vous maintenant",
+	"请填写手机号码": "Veuillez renseigner votre numéro de mobile",
+	"请填写验证码": "Veuillez renseigner le code de vérification",
+	"请输入正确的验证码": "Veuillez entrer le bon code de vérification",
+	"正在登录中": "Connexion",
+	"登录成功": "Connexion réussie",
+	"获取授权": "Obtenir l'autorisation",
+	"获取微信的手机号授权": "Obtenir l'autorisation du numéro de mobile wechat",
+	"获取微信手机号": "Obtenir le numéro de mobile wechat",
+	"输入手机号码": "Entrez le numéro de portable",
+	"填写登录密码": "Renseignez le mot de passe de connexion",
+	"登录": "Connexion",
+	"快速登录": "Connexion rapide",
+	"账号登录": "Connexion au compte",
+	"其他方式登录": "Connexion par d'autres méthodes",
+	"登录中": "Connexion",
+	"获取用户信息失败": "Impossible d'obtenir les informations sur l'utilisateur",
+	"请绑定手机号后,继续操作": "Veuillez lier votre numéro de mobile et continuer l'opération",
+	"错误信息": "Informations d'erreur",
+	"用户点击确定": "L'utilisateur clique sur OK",
+	"用户点击取消": "L'utilisateur clique sur Annuler",
+	"登录失败": "Echec de connexion",
+	"请勿重复点击": "Ne pas cliquer plusieurs fois",
+	"请填写密码": "Veuillez renseigner le mot de passe",
+	"您输入的密码过于简单": "Le mot de passe que vous avez entré est trop simple",
+	"请填写账号": "Veuillez renseigner le numéro de compte",
+	"请输入正确的账号": "Veuillez entrer le bon numéro de compte",
+	"[图片]": "[Image]",
+	"[语音]": "[Voix]",
+	"[商品]": "[Produit]",
+	"[订单]": "[Commande]",
+	"亲、暂无消息记录哟!": "Cher, pas encore d'enregistrement de message !",
+	"站内消息": "Message en station",
+	"客服消息": "Message service client",
+	"通知于": "Notifié le",
+	"获取详情中": "Obtenir les détails",
+	"代付订单创建成功,发给好友帮你付款吧~": "Ordre de paiement créé avec succès, envoyez-le à votre ami pour vous aider à payer ~",
+	"帮我付一下这件商品了,谢谢~": "Aidez-moi à payer cette marchandise, merci ~",
+	"已经有人替我代付,谢谢啦~": "Quelqu'un a payé pour moi, merci ~",
+	"谢谢你帮我支付,么么哒~": "Merci de m'avoir aidé à payer, Moda ~",
+	"我已为你代付成功,商家正在努力发货中~": "J'ai payé avec succès pour vous, et le marchand essaie de vous livrer ~",
+	"好友代付成功,商家正在努力发货中~": "Le paiement d'un ami a réussi, et le marchand essaie de livrer ~",
+	"发送给微信好友": "Envoyer aux amis wechat",
+	"查看订单详情": "Voir les détails de la commande",
+	"订单已支付": "Commande payée",
+	"如果订单申请退款,已支付金额将原路退还给您": "Si la commande demande un remboursement, le montant payé vous sera restitué de la même manière",
+	"代付成功": "Paiement réussi",
+	"谢谢你为我付款,还可以再去看看其他商品哟~": "Merci d'avoir payé pour moi, et vous pourrez aller voir d'autres biens ~",
+	"该订单暂未支付": "La commande n'a pas encore été payée",
+	"人": " Personne",
+	"推广人数": "Nombre de promoteurs",
+	"一级": "Niveau 1",
+	"二级": "Niveau 2",
+	"点击搜索会员名称": "Cliquez pour rechercher le nom du membre",
+	"团队排序": "Tri des équipes",
+	"金额排序": "Tri des montants",
+	"订单排序": "Ordre de tri",
+	"单": " Commandes",
+	"加入时间": "Temps de jonction",
+	"累积推广订单": "Compte de commandes",
+	"本月累计推广订单": "Commandes mensuelles",
+	"返佣": "Remise",
+	"暂未返佣": "Pas de remboursement",
+	"返佣时间": "Temps de remise",
+	"单号": "Numéro de commande",
+	"暂无推广订单~": "Aucune commande de promotion ~",
+	"推广订单列表": "Liste des commandes de promotions",
+	"找回密码": "Récupérer le mot de passe",
+	"填写您的新密码": "Renseignez votre nouveau mot de passe",
+	"加载失败": "Échec de chargement",
+	"点击授权登录您的客服工作台": "Cliquez sur Autoriser pour vous connecter à votre espace de travail du service client",
+	"授权登录": "Connexion autorisée",
+	"没有登录的code,请重新扫码": "Code sans connexion, veuillez scanner à nouveau le code",
+	"员工人数": "Nombre d'employés",
+	"邀请": "Invitation",
+	"分佣比例": "Échelle",
+	"修改分佣比例": "Modifier proportion",
+	"请输入百分比": "Veuillez saisir un pourcentage",
+	"删除员工": "Supprimer l'employé",
+	"确定删除该员工?": "Êtes-vous sûr de vouloir supprimer cet employé ?",
+	"请输入比例": "Veuillez entrer une échelle",
+	"分类": "Classe",
+	"我的": "Mien",
+	"姓名": "Nom",
+	"请输入联系电话": "Veuillez entrer le numéro de contact",
+	"所在地区": "Emplacement",
+	"详细地址": "Adresse",
+	"设置为默认地址": "Définir comme adresse par défaut",
+	"立即保存": "Enregistrer maintenant",
+	"浙江省": "Zhejiang",
+	"杭州市": "Hangzhou",
+	"滨江区": "District de Binjiang",
+	"广东省": "Province du Guangdong",
+	"广州市": "Guangzhou",
+	"番禺区": "Panyu",
+	"修改地址": "Modifier l'adresse",
+	"添加地址": "Ajouter une adresse",
+	"已取消!": "Annulé!",
+	"请填写联系电话": "Veuillez renseigner le numéro de contact",
+	"保存中": "Sauvegarder",
+	"修改成功": "Modification réussie",
+	"消费": "Consommation",
+	"充值": "Recharger",
+	"暂无账单的记录哦~": "Pas d'enregistrement de facture temporairement~",
+	"点击【立即注销】即代表您已经同意《用户注销协议》": "Cliquer sur [déconnexion immédiate] signifie que vous avez accepté l'accord de déconnexion de l'utilisateur",
+	"立即注销": "Se déconnecter maintenant",
+	"是否确认注销": "Confirmer la déconnexion",
+	"注销后无法恢复,请谨慎操作": "Impossible de récupérer après la déconnexion, veuillez faire attention",
+	"注销": "Déconnexion",
+	"持卡人": "Titulaire de la carte",
+	"请输入持卡人姓名": "Saisir le nom du titulaire de la carte",
+	"卡号": "Numéro de carte",
+	"请填写卡号": "Veuillez renseigner le numéro de carte",
+	"银行": "Banque",
+	"提现": "Retrait",
+	"最低提现金额": "Montant minimum de retrait",
+	"当前可提现金额": "Montant actuel pouvant être retiré",
+	"冻结佣金": "Commission gelée",
+	"说明: 每笔佣金的冻结期为": "Remarque : la période de gel de chaque commission est",
+	"天,到期后可提现": "Jours, retirables à l'expiration",
+	"账号": "Compte",
+	"请填写您的微信账号": "Renseignez votre compte wechat",
+	"收款码": "Code de collecte",
+	"请填写您的支付宝账号": "Renseignez votre numéro de compte Alipay",
+	"请选择银行": "Veuillez sélectionner une banque",
+	"银行卡": "Carte bancaire",
+	"微信": "Wechat",
+	"支付宝": "Alipay",
+	"请填写持卡人姓名": "Veuillez renseigner le nom du titulaire de la carte",
+	"请填写微信号": "Veuillez remplir le wechat",
+	"请填写提现金额": "Veuillez renseigner le montant du retrait",
+	"提现金额不能低于": "Le montant du retrait ne peut pas être inférieur à",
+	"未使用": "Non utilisé",
+	"已使用/过期": "Utilisé/expiré",
+	"通用劵": "Sûretés générales",
+	"一级分佣上浮": "Un niveau vers le haut",
+	"二级分佣上浮": "Flottant secondaire",
+	"快速升级技巧": "Compétences d'amélioration rapide",
+	"未完成": "Incomplet",
+	"已领完": "Collecté",
+	"当前共": "Total actuel",
+	"取关": "Désactivé",
+	"请选择商品": "Veuillez sélectionner un produit",
+	"头像": "Avatar",
+	"手机号码": "Numéro de portable",
+	"点击绑定手机号": "Cliquez pour lier",
+	"ID号": "numéro d'identification",
+	"权限设置": "Autorisation",
+	"点击管理": "Gestion",
+	"密码": "Mot de passe",
+	"点击修改密码": "Cliquez sur Modifier",
+	"更换手机号码": "Changer de numéro",
+	"点击更换手机号码": "Cliquez pour",
+	"缓存大小": "Taille du cache",
+	"当前版本": "Version actuelle",
+	"地址管理": "Adresse",
+	"发票管理": "Facture",
+	"账号注销": "Annulation",
+	"注销后无法恢复": "Impossible de récupérer",
+	"累计积分": "Points cumulés",
+	"累计消费": "Consommation",
+	"冻结积分": "Points de congélation",
+	"积分规则": "Règle intégrale",
+	"提示:积分数值的高低会直接影响您的会员等级": "Astuce : la valeur de votre niveau d'adhésion",
+	"提示:你有": "Astuce : vous avez",
+	"积分在": "Intégral dans",
+	"过期,请尽快使用": "Expiré, veuillez l'utiliser dès que possible",
+	"暂无积分记录哦~": "Pas d'enregistrement de score temporairement~",
+	"赚积分": "Gagner des points",
+	"分值明细": "Détails de la partition",
+	"分值提升": "Augmentation du score",
+	"抬头类型": "Type d'en-tête",
+	"增值税电子专用发票": "Facture spéciale TVA électronique",
+	"增值税电子普通发票": "Facture TVA ordinaire électronique",
+	"需要开具发票的姓名": "Nom à facturer",
+	"需要开具发票的企业名称": "Nom de l'entreprise pour émettre la facture",
+	"税号": "Numéro fiscal",
+	"纳税人识别号": "Numéro d'identification fiscale",
+	"手机号": "Numéro de portable",
+	"您的手机号": "Votre numéro de portable",
+	"邮箱": "Boîte aux lettres",
+	"您的联系邮箱": "Votre messagerie de contact",
+	"开户银行": "Banque de dépôt",
+	"您的开户银行": "Votre banque de dépôt",
+	"银行账号": "Numéro de compte bancaire",
+	"您的银行账号": "Votre numéro de compte bancaire",
+	"企业地址": "Adresse de l'entreprise",
+	"您所在的企业地址": "Votre adresse professionnelle",
+	"企业电话": "Téléphone d'entreprise",
+	"您的企业电话": "Votre téléphone professionnel",
+	"设置为默认抬头": "Définir comme en-tête par défaut",
+	"保存": "Enregistrer",
+	"发票类型选择": "Sélection du type de facture",
+	"纸质发票开出后将以邮寄形式交付": "Une fois la facture papier émise, elle sera livrée par courrier",
+	"请输入需要开具发票的姓名": "Veuillez saisir le nom à facturer",
+	"请输入您的手机号": "Veuillez saisir votre numéro de mobile",
+	"请正确输入您的手机号": "Veuillez saisir correctement votre numéro de mobile",
+	"请输入您的联系邮箱": "Veuillez saisir votre email de contact",
+	"请正确输入您的联系邮箱": "Veuillez saisir correctement votre email de contact",
+	"请输入需要开具发票的企业名称": "Veuillez entrer le nom de l'entreprise pour émettre la facture",
+	"请输入纳税人识别号": "Veuillez entrer le numéro d'identification fiscale",
+	"请正确输入纳税人识别号": "Veuillez saisir correctement le numéro d'identification fiscale",
+	"请输入您的开户银行": "Veuillez entrer votre banque de dépôt",
+	"请输入您的银行账号": "Veuillez entrer votre numéro de compte bancaire",
+	"请正确输入您的银行账号": "Veuillez saisir correctement votre numéro de compte bancaire",
+	"请输入您所在的企业地址": "Veuillez entrer votre adresse professionnelle",
+	"请输入您的企业电话": "Veuillez entrer votre téléphone professionnel",
+	"发票记录": "Enregistrement de facture",
+	"抬头管理": "Gestion des en-têtes",
+	"申请时间": "Temps d'application",
+	"没有发票信息哟~": "Pas d'informations sur la facture ~",
+	"个人普通发票": "Facture ordinaire personnelle",
+	"企业普通发票": "Facture ordinaire d'entreprise",
+	"企业专用发票": "Facture spéciale entreprise",
+	"添加新发票": "Ajouter une nouvelle facture",
+	"删除该发票?": "Supprimer cette facture ?",
+	"发票编号": "Numéro de facture",
+	"发票备注": "Remarques sur facture",
+	"快递号": "Numéro express",
+	"总资产(元)": "Actif total (€)",
+	"累计充值(元)": "Co recharge (€)",
+	"累计消费(元)": "Co fleur (€)",
+	"账单记录": "Enregistrement de facture",
+	"消费记录": "Enregistrer",
+	"充值记录": "Recharger",
+	"积分中心": "Intégrale",
+	"签到领积分": "Connexion",
+	"赚积分抵现金": "Gagner des points",
+	"领取优惠券": "Coupons",
+	"满减享优惠": "Remise complète",
+	"最新拼团活动": "Dernière activité du groupe",
+	"最新的优惠商品上架拼团": "Les dernières marchandises préférentielles en rayon",
+	"立即参与": "Participer",
+	"当前限时秒杀": "Temps limite actuel second kill",
+	"最新商品秒杀进行中": "Dernier pic de marchandise en cours",
+	"我的余额": "Solde",
+	"赠送": "Cadeau",
+	"其他": "Autre",
+	"注意事项": "Précautions",
+	"冻结佣金为": "La commission gelée est",
+	"立即转入": "Transfert immédiat en",
+	"立即充值": "Recharger immédiatement",
+	"请输入金额": "Veuillez saisir le montant",
+	"转入余额": "Transfert en solde",
+	"转入余额后无法再次转出,确认是否转入余额": "Impossible de retransférer après avoir transféré le solde, confirmez s'il faut transférer le solde",
+	"转入成功": "Transfert en réussi",
+	"正在支付": "Payer",
+	"充值金额必须为数字": "Le montant de la recharge doit être un nombre",
+	"充值金额不能为0": "Le montant de la recharge ne peut pas être 0",
+	"填写手机号码": "Renseignez le numéro de téléphone mobile",
+	"是否绑定账号": "Lier le compte",
+	"绑定": "Lien",
+	"您已取消绑定!": "Vous avez délié !",
+	"当前手机号": "Numéro de portable actuel",
+	"设置新密码": "Définir un nouveau mot de passe",
+	"确认新密码": "Confirmer le nouveau mot de passe",
+	"手机号码不存在,无法发送验证码!": "Le numéro de téléphone portable n'existe pas, impossible d'envoyer le code de vérification !",
+	"请输入新密码": "Veuillez entrer un nouveau mot de passe",
+	"两次输入的密码不一致!": "Les deux mots de passe saisis sont incohérents !",
+	"请输入验证码": "Veuillez entrer un code de vérification",
+	"暂无退款订单~": "Aucune commande de remboursement ~",
+	"缺少订单号无法查看订单详情": "Le numéro de commande est manquant et les détails de la commande ne peuvent pas être consultés",
+	"明细": "Détas",
+	"第七天": "Jour 7",
+	"第7天": "Jour 7",
+	"奖励": "Récompense",
+	"已签到": "Enregistrement",
+	"立即签到": "Se connecter maintenant",
+	"已累计签到": "Enregistrement cumulé",
+	"据说连续签到第": "La deuxième connexion consécutive",
+	"天可获得超额积分,一定要坚持签到哦~~~": "Si vous pouvez obtenir des points supplémentaires tous les jours, vous devez insister pour vous connecter~~~",
+	"签到成功": "Enregistrement réussi",
+	"好的": "D'accord",
+	"您今日已签到!": "Vous vous êtes connecté aujourd'hui !",
+	"暂无签到记录~": "Pas de connexion dans l'enregistrement~",
+	"保存海报": "Enregistrer l'AFFICHE",
+	"长按保存图片": "Appui long pour enregistrer l'image",
+	"分销海报": "AFFICHE Diffusion",
+	"小程序二维码需要发布正式版后才能获取到": "Le code QR de l'applet ne peut être obtenu qu'après la publication de la version officielle",
+	"获取中": "Obtenir",
+	"暂无数据~": "Pas de données temporairement ~",
+	"提现记录": "Retrait",
+	"提现总额": "Retrait total",
+	"佣金记录": "Enregistrement de la commission",
+	"佣金明细": "Détails des commissions",
+	"分销等级": "Niveau de diffusion",
+	"昨日收益": "Revenus d'hier",
+	"累积已提": "Retrait cumulé",
+	"代理商申请": "Demande d'agent",
+	"立即提现": "Retrait",
+	"推广名片": "Carte de visite",
+	"推广人统计": "Statistiques du promoteur",
+	"推广人订单": "ordre promoteur",
+	"推广订单": "Ordre de promotion",
+	"事业部": "Pôle métier",
+	"代理商": "Agent",
+	"推广人排行": "Classement des promoteurs",
+	"佣金排行": "Classement des commissions",
+	"员工列表": "Liste des employés",
+	"您目前暂无推广权限": "Vous n'avez actuellement aucune autorisation de promotion",
+	"商城购物可享": "Faire ses courses au centre commercial",
+	"折": "Réduction",
+	"当前等级": "Niveau actuel",
+	"未达成": "Non atteint",
+	"今日成长值": "Valeur de croissance d'aujourd'hui",
+	"点": "Pointer",
+	"我的成长值记录": "Mon record de valeur de croissance",
+	"暂未解锁该等级": "Ce niveau n'a pas encore été débloqué",
+	"点,需达到": "Point, besoin d'atteindre",
+	"已解锁更高等级": "Niveau supérieur débloqué",
+	"我的成长特权": "Mon privilège de croissance",
+	"购物折扣": "Réduction",
+	"专属徽章": "Badge exclusif",
+	"经验累积": "Accumulation d'expérience",
+	"尊享客服": "Service exclusif",
+	"签到": "Enregistrement",
+	"可获得": "Disponible",
+	"点经验": "Point d'expérience",
+	"每日签到可获得经验值,已签到": "La connexion quotidienne peut obtenir une valeur d'expérience, connecté",
+	"去签到": "Enregistrement",
+	"点经验/元": "Point d'expérience/€",
+	"购买商品可获得对应的经验值": "La valeur d'expérience correspondante peut être obtenue en achetant des biens",
+	"去购买": "Allez acheter",
+	"点经验/人": "Point expérience/personne",
+	"邀请好友注册商城可获得经验值": "Invitez des amis à s'inscrire dans le centre commercial pour gagner de l'expérience",
+	"去邀请": "Inviter",
+	"积分数": "Fraction de produit",
+	"消费金额": "Montant de la consommation",
+	"暂无经验记录": "Pas d'enregistrement d'expérience",
+	"账户登录": "Connexion au compte",
+	"微信登录": "Connexion Wechat",
+	"手机号登录": "Connexion mobile",
+	"账户充值": "Recharger",
+	"佣金转入": "Commission",
+	"周榜": "Liste hebdomadaire",
+	"月榜": "Liste mensuelle",
+	"周排行": "Classement hebdomadaire",
+	"月排行": "Classement mensuel",
+	"语言切换": "Langue",
+	"点击前往": "Cliquez pour aller",
+	"查看全部": "Voir tout",
+	"查看订单": "Voir la commande",
+	"无法获取图片信息": "Impossible d'obtenir les informations sur l'image",
+	"长按或扫描查看": "Appui long ou vue scan",
+	"点解锁": "Déverrouillage des points",
+	"确认修改": "Confirmer",
+	"保存修改": "Enregistrer",
+	"退出登录": "Se déconnecter",
+	"付费会员": "SVIP",
+	"地址信息": "Adresse",
+	"我的推广": "Extension",
+	"砍价记录": "Marché",
+	"我的等级": "Mon niveau",
+	"兑换": "ALLER",
+	"申请中": "Candidature",
+	"统计管理": "Statistiques",
+	"退款": "Remboursement",
+	"未发货": "Non émis",
+	"当前为最新版本": "Actuellement la dernière version",
+	"清除缓存": "Vider le cache",
+	"确定清楚本地缓存数据吗": "Êtes-vous sûr d'avoir bien compris les données du cache local",
+	"缓存清理完成": "Nettoyage du cache terminé",
+	"切换的账号不存在": "Le compte changé n'existe pas",
+	"正在切换中": "Commutation",
+	"确认退出登录": "Confirmer la déconnexion",
+	"我知道了": "Je vois",
+	"系统错误": "Erreur système",
+	"请求失败": "La requête a échoué",
+	"邀请您加入": "Vous inviter à rejoindre ",
+	"图片上传中": "Téléchargement",
+	"上传图片失败": "Impossible de télécharger l'image",
+	"访问位置被拒绝": "Accès à l'emplacement refusé",
+	"系统定位已关闭": "Le positionnement du système est désactivé",
+	"需要定位权限": "Autorisation de localisation requise",
+	"订单核销": "Écrire",
+	"当前可转入佣金为":"La commission transférable actuelle est",
+	"浏览记录":"Historique de navigation",
+	"签到奖励":"Récompense d'enregistrement",
+	"请输入内容":"Please enter content",
+	"单次限购":"Single purchase Limited",
+	"永久限购":"Permanent restricted",
+	"《用户协议》":"《Accord utilisateur》",
+	"《隐私协议》":"《Privacy agreement》",
+	"与":"Et",
+	"请先阅读并同意协议":"Please read and agree to the Agreement First",
+	"绑定下级通知":"BIND Child notification",
+	"购买成功通知":"Avis de succès d'achat",
+	"确认收货通知":"Accusé de réception",
+	"改价通知":"Avis de modification de prix",
+	"退款成功通知":"Avis de remboursement réussi",
+	"充值成功通知":"Notification de recharge réussie",
+	"积分到账通知":"Avis de réception de points",
+	"佣金到账通知":"Avis de réception de la Commission",
+	"砍价成功通知":"Notification de négociation réussie",
+	"拼团成功通知":"Notification de succès du regroupement",
+	"拼团失败通知":"Notification d'échec du regroupement",
+	"开团成功通知":"Notification de succès de la mission",
+	"提现成功通知":"Avis de retrait réussi",
+	"提现失败通知":"Avis d'échec de retrait",
+	"充值退款通知":"Avis de remboursement de recharge",
+	"退款申请拒绝通知":"Avis de rejet de la demande de remboursement",
+	"您有新的退款待处理":"Vous avez un nouveau remboursement à traiter",
+	"您有新的订单待处理":"Vous avez une nouvelle commande en attente",
+	"发货通知":"Avis d'expédition",
+	"取消拼团通知":"Annuler l'avis de regroupement",
+	"参团成功通知":"Notification de succès de la participation",
+	"你有个新的提现申请待处理":"Vous avez une nouvelle demande de retrait en attente",
+	"你有个新的用户收货待处理":"Vous avez un nouvel utilisateur en attente de réception",
+	"提醒付款通知":"Rappel des avis de paiement",
+	"短信验证码":"SMS verification code",
+	"到店自提":"Auto - assistance",
+	"快递配送":"Livraison express"
+}

+ 1181 - 0
lang/it_it.json

@@ -0,0 +1,1181 @@
+{
+	"选择地址": "Seleziona indirizzo",
+	"选择其它地址": "Seleziona altro indirizzo",
+	"已选商品": "Merci Selezionate",
+	"清空": "Cancella",
+	"¥": "€",
+	"已售罄": "Esaurito",
+	"已下架": "Togli giù",
+	"删除": "Elimina",
+	"商品券": "Prodotto",
+	"品类券": "Categoria",
+	"通用券": "Generale",
+	"优惠券": "Buono",
+	"满": "Completo",
+	"元可用": "Usato",
+	"无门槛券": "Nessuna soglia",
+	"领取后": "Ricevi",
+	"天内可用": "Giorni di utilizzo",
+	"已领取": "Ricevuto",
+	"立即领取": "Prendi",
+	"购物满": "Spendi",
+	"减": "Disattiva",
+	"不限时": "Tempo illimitato",
+	"秒杀": "Seckill",
+	"砍价": "Affare",
+	"拼团": "Gruppo",
+	"已售": "Venduto",
+	"立即购买": "Acquista ora",
+	"加入购物车": "Aggiungi al carrello",
+	"选规格": "Opzioni",
+	"跳过": "Avanti",
+	"立即体验": "Vai ora",
+	"首页": "Casa",
+	"搜索": "Cerca",
+	"购物车": "Carrello",
+	"我的收藏": "Raccogli",
+	"个人中心": "Mio",
+	"券": "Voglio.",
+	"正在加载中": "Caricamento in corso...",
+	"上拉加载更多": "Ritira in alto caricando di più",
+	"代付金额": "Importo",
+	"共": "Un totale di ",
+	"件商品": "Articoli",
+	"订单包裹": "Ordina merce",
+	"申请退款中": "Rimborso",
+	"已退款": "Rimborsato",
+	"已完成": "Completato",
+	"件退款中": "Rimborso articoli",
+	"不支持配送": "Solo in negozio",
+	"不支持自提": "Solo spedizione",
+	"已评价": "Valutato",
+	"评价": "Recensione",
+	"申请退款": "Rimborso",
+	"查看物流": "Logistica",
+	"确认收货": "Fai ordine",
+	"选择付款方式": "Seleziona tipo di pagamento",
+	"支付": "Paga",
+	"去付款": "Pagare",
+	"请选择要支付的订单": "Seleziona ordine",
+	"余额不足": "Equilibrio insufficiente",
+	"支付中": "Pagando...",
+	"缺少支付参数": "Parametri di pagamento mancanti",
+	"取消支付": "Annulla pagamento",
+	"支付成功": "Pagamento riuscito",
+	"支付失败": "Pagamento fallito",
+	"库存": "Scorta",
+	"限量": "Limite",
+	"数量": "QTÀ",
+	"我要参团": "Unisciti al gruppo",
+	"确定": "OK",
+	"热门推荐": "Raccomandazione calda",
+	"最高返佣": "Altissimo",
+	"推广享佣金": "Promuovi",
+	"立即分享": "Condividi ora",
+	"发现新版本": "Nuova versione",
+	"立即升级": "Aggiornamento",
+	"下载进度": "Avanzamento",
+	"店小二": "Cameriere",
+	"暂无记录": "Nessun dato",
+	"正在下载海报,请稍后再试": "Download poster, riprovare più tardi",
+	"海报二维码生成失败": "Impossibile generare il codice QR del poster",
+	"倒计时": "Conto alla rovescia",
+	"天": "D",
+	"时": "H",
+	"分": "M",
+	"秒": "S",
+	"砍价成功": "Contrattazione riuscita",
+	"活动已结束": "Attività interrotta",
+	"已砍至": "Taglia su",
+	"活动进行中": "Elaborazione...",
+	"取消活动": "Annulla",
+	"继续砍价": "Continua",
+	"暂无砍价记录": "Nessun dato",
+	"人正在参与": "Partecipare",
+	"最低": "Più basso",
+	"参与砍价": "Affare",
+	"砍价列表": "Elenco occasioni",
+	"人查看": "Visualizza",
+	"人分享": "Condividi",
+	"人参与": "Coinvolto",
+	"邀请您帮忙砍价": "Ti invito ad aiutare",
+	"查看商品": "Visualizza elementi",
+	"当前": "Corrente",
+	"已砍": "Tritato",
+	"还剩": "Sinistra",
+	"立即参与砍价": "Contratta adesso",
+	"商品暂无库存": "Esaurito",
+	"邀请好友帮砍价": "Invita gli amici ad aiutare",
+	"已有": "Avere",
+	"位好友成功砍价": "Amici di successo",
+	"帮好友砍一刀": "Aiuta gli amici",
+	"好友已砍价成功": "Amici già di successo",
+	"我也要参与": "Parteciperò",
+	"已成功帮助好友砍价": "Aiuta gli amici al successo",
+	"恭喜您砍价成功,快去支付": "Contrattazione riuscita, vai a pagare",
+	"立即支付": "Paga ora",
+	"抢更多商品": "Prendi di più",
+	"砍价帮": "Gruppo di contrattazione",
+	"砍掉": "Interrompi",
+	"更多": "Altro",
+	"关闭": "Chiudi",
+	"点击加载更多": "Clicca per caricare altro",
+	"商品详情": "Dettagli",
+	"砍价规则": "Regole dell'affare",
+	"您已砍掉": "Hai tagliato",
+	"元,听说分享次数越多砍价成功的机会越大哦": ", Più volte condividi, maggiore è la possibilità di una contrattazione di successo",
+	"成功帮砍": "Aiutare con successo a tagliare",
+	"您也可以砍价低价拿哦,快去挑选心仪的商品吧": "Puoi anche contrattare e averlo a basso prezzo, vai a scegliere i tuoi prodotti preferiti",
+	"发送给朋友": "Invia amico",
+	"微信好友": "Wechat amico",
+	"微信朋友圈": "Momenti WeChat",
+	"生成海报": "Genera poster",
+	"砍价详情": "Dettagli dell'affare",
+	"分享成功": "Condivisione riuscita",
+	"分享失败": "Condivisione non riuscita",
+	"该商品每人限购": "Questo prodotto è limitato all'acquisto per persona",
+	"您的好友": "Il tuo amico",
+	"邀请您砍价": "Invita a tagliare",
+	"人团": "Persone",
+	"去拼团": "Vai",
+	"拼团列表": "Elenco gruppi",
+	"类型": "Tipo",
+	"累计销量": "Totale venduto",
+	"限购": "Limite",
+	"种规格可选": "Specifiche",
+	"已拼": "Frotto",
+	"件": "Pezzo",
+	"还差": "Solo",
+	"人成团": "successo",
+	"去拼单": "Unisciti",
+	"查看更多": "Altro",
+	"收起": "Metti via",
+	"拼团玩法": "Processo di gruppo",
+	"开团/参团": "Inizio",
+	"邀请好友": "Invito",
+	"满员发货": "Consegna",
+	"用户评价": "Recensione",
+	"好评率": "Tasso di lode",
+	"产品介绍": "Dettagli",
+	"单独购买": "Compra da solo",
+	"立即开团": "Inizia gruppo",
+	"请选择": "Selezionato",
+	"商品": "Prodotto",
+	"详情": "Dettaglio",
+	"缺少参数无法查看商品": "Impossibile visualizzare il prodotto per mancanza di parametri",
+	"参数错误": "Errore parametro",
+	"已选择": "Selezionato",
+	"保存成功": "Successo salvato",
+	"保存失败": "Salvato non riuscito",
+	"人拼": "Le persone combattono",
+	"剩余": "Rimanente",
+	"结束": "Fine",
+	"恭喜您拼团成功": "Congratulazioni per il tuo raggruppamento di successo",
+	"人,拼团失败": "Persona andata via, il gruppo ha fallito",
+	"拼团中,还差": "Nel gruppo c'è ancora",
+	"人拼团成功": "Persona lasciata per unirsi al gruppo con successo",
+	"邀请好友参团": "Invita gli amici a unirsi al gruppo",
+	"再次开团": "Raggruppa",
+	"取消开团": "Annulla",
+	"查看订单信息": "Visualizza ordine",
+	"大家都在拼": "Tutto il gruppo",
+	"更多拼团": "Altro",
+	"邀请您参团": "Invita a partecipare",
+	"你不是该团的成员": "Non sei un membro del gruppo",
+	"已抢": "Derubato",
+	"抢购中": "Prendi ora",
+	"未开始": "Non avviato",
+	"已结束": "Finito",
+	"暂无商品,去看点别的吧": "Nessun prodotto",
+	"即将开始": "Non avviato",
+	"距秒杀结束仅剩": "Manca solo alla fine",
+	"累计销售": "Venduto",
+	"收藏": "Raccogli",
+	"保存到手机": "Salva sul telefono",
+	"长按图片可以保存到手机": "Premere a lungo per salvare sul telefono",
+	"抢购详情页": "Snap alla pagina dei dettagli dell'acquisto",
+	"二维码获取失败": "Impossibile ottenere il codice QR",
+	"请选择属性": "Seleziona una proprietà",
+	"提示:点击图片即可保存至手机相册": "Suggerimento: fare clic sull'immagine per salvarla nell'album del telefono",
+	"拼团海报": "Poster puzzle",
+	"砍价海报": "Manifesto di mercanteggiamenti",
+	"海报生成中": "Il poster è in fase di generazione",
+	"海报图片获取失败": "Impossibile ottenere l'immagine del poster",
+	"海报": "Poster",
+	"已预定": "Prenotato",
+	"预售价": "Prevendita",
+	"立即预定": "Prenota ora",
+	"开售时间": "Tempo di vendita",
+	"预售活动": "Evento in prevendita",
+	"起": "Alzati",
+	"划线价": "ORP",
+	"开通“超级会员”立省": "Apri \"Super membro\" per disattivare ",
+	"元": "€",
+	"立即开通": "Attiva ora",
+	"预售活动时间": "Tempo di prevendita",
+	"预售结束后": "Navi entro",
+	"天内发货": "Giorni dopo la fine della prevendita",
+	"活动": "Attività",
+	"参与秒杀": "Seckill",
+	"参与拼团": "Gruppo",
+	"复制口令": "Copia codice merce",
+	"复制成功": "Copia riuscita",
+	"推荐": "Consigliato",
+	"缺少经纬度信息无法查看地图": "Informazioni di latitudine e longitudine mancanti non possono visualizzare la mappa",
+	"产品库存不足,请选择其它属性": "Scorte di prodotti insufficienti, selezionare un altro attributo",
+	"立即退款": "Rimborso immediato",
+	"一键改价": "Cambia prezzo",
+	"订单备注": "Note sull'ordine",
+	"商品总价": "Prezzo totale",
+	"原始邮费": "Affrancatura antica",
+	"实际支付": "Prezzo effettivo",
+	"退款金额": "Prezzo di rimborso",
+	"请填写备注信息": "Compila i commenti",
+	"立即修改": "Modifica ora",
+	"确认退款": "Conferma rimborso",
+	"拒绝退款": "Rimborso rifiutato",
+	"取消": "Annulla",
+	"订单号": "ID ordine",
+	"发货方式": "Modalità",
+	"发货类型": "Tipo di spedizione",
+	"快递公司": "Espresso",
+	"快递单号": "Numero",
+	"顺丰请输入单号 :收件人或寄件人手机号后四位": "Inserisci il numero di tracciamento per SF Express: le ultime quattro cifre del numero di cellulare del destinatario o del mittente",
+	"例如:SF000000000000:3941": "Ad esempio: SF000000000000:3941",
+	"电子面单": "Foglio elettronico",
+	"预览": "Anteprima",
+	"寄件人姓名": "Nome mittente",
+	"填写寄件人姓名": "Compila nome mittente",
+	"寄件人电话": "Telefono mittente",
+	"填写寄件人电话": "Compila il numero di telefono del mittente",
+	"寄件人地址": "Indirizzo mittente",
+	"填写寄件人地址": "Compila indirizzo mittente",
+	"送货人": "addetto alle consegne",
+	"确认提交": "Invia",
+	"发货": "Nave",
+	"送货": "Dare",
+	"无需物流": "Non c'è bisogno",
+	"手动填写": "Compila manualmente",
+	"电子面单打印": "Foglio elettronico",
+	"填写快递单号": "Compila il numero del corriere",
+	"请选择电子面单": "Seleziona una ricevuta elettronica",
+	"待付款": "Pagare",
+	"待发货": "Spedire",
+	"待收货": "Ricevere",
+	"待评价": "Valutare",
+	"售后/退款": "Rimborso",
+	"数据统计": "Statistiche",
+	"今日成交额": "Oggi venduto",
+	"昨日成交额": "Venduto ieri",
+	"本月成交额": "Mese venduto",
+	"今日订单数": "Ordini di oggi",
+	"昨日订单数": "Ordini di ieri",
+	"本月订单数": "Ordini del mese",
+	"详细数据": "Dati dettagliati",
+	"日期": "Data",
+	"订单数": "Conteggio ordini",
+	"成交额": "Fatturato",
+	"立即核销": "Scrivi ora",
+	"查看": "Visualizza",
+	"确定要核销此订单吗": "Sei sicuro di cancellare questo ordine",
+	"确定核销": "Verifica",
+	"请输入核销码": "Inserisci il codice di verifica",
+	"请输入正确的核销码": "Inserisci il codice di verifica corretto",
+	"查询中": "Interrogazione",
+	"订单": "Ordine",
+	"订单未备注,点击添加备注信息": "L'ordine non ha commenti, clicca per aggiungere commenti",
+	"复制": "Copia",
+	"件商品,应支付": "Articoli, dovrebbero pagare",
+	"邮费": "Affrancatura",
+	"订单编号": "ID ordine",
+	"下单时间": "Tempo dell'ordine",
+	"支付状态": "Stato pagamento",
+	"已支付": "Pagato",
+	"未支付": "Non pagato",
+	"支付方式": "Metodo di pagamento",
+	"买家留言": "MSG acquirente",
+	"支付金额": "Paga importo",
+	"优惠券抵扣": "Detrazione cedola",
+	"运费": "Tariffa",
+	"实付款": "Importo reale",
+	"配送方式": "Metodo di consegna",
+	"快递": "Espresso",
+	"送货人电话": "Corriere telefonico",
+	"确认付款": "Conferma pagamento",
+	"去发货": "Spedire",
+	"改价成功": "Prezzo cambiato con successo",
+	"改价失败": "Cambio prezzo fallito",
+	"请输入备注": "Inserisci una nota",
+	"退款中": "Rimborso",
+	"部分退款中": "Rimborso parziale",
+	"件商品,实付款": "Merci pagate",
+	"同意退货": "Accetta la restituzione",
+	"待用户发货": "Non spedito",
+	"请输入正确的金额": "Inserisci l'importo corretto",
+	"今天": "Oggi",
+	"昨天": "Ieri",
+	"最近7天": "Ultimi 7 giorni",
+	"本月": "Mese",
+	"自定义": "Personalizza",
+	"营业额(元)": "Fatturato",
+	"订单量(份)": "Quantità",
+	"增长率": "Tasso di rialzo",
+	"增长": "Aumento",
+	"单位": "Unità",
+	"元.": "Yuan",
+	"分.": "Cents",
+	"固定": "Risolto",
+	"指定范围": "Ambito",
+	"提交时间": "Tempo di invio",
+	"原因": "Ragione",
+	"暂无申请记录,快去申请吧!": "Nessun record di applicazione ancora, fai domanda ora!",
+	"没有更多啦": "Non più",
+	"待审核": "In attesa di revisione",
+	"审核通过": "Revisione superata",
+	"审核未通过": "Revisione fallita",
+	"编辑": "Modifica",
+	"重新提交": "Invia nuovamente",
+	"会员优惠价": "Sconto VIP",
+	"余额支付": "Paga a saldo",
+	"可用余额": "Equilibrio",
+	"微信支付": "WeChat Pay",
+	"确认": "Conferma",
+	"支付提醒": "Promemoria di pagamento",
+	"线下支付已关闭,请点击确认按钮返回主页": "Il pagamento offline è stato chiuso, fare clic sul pulsante di conferma per tornare alla home page",
+	"请输入支付金额": "Inserisci l'importo del pagamento",
+	"正在确认": "Conferma",
+	"进入商城": "Entra nel centro commerciale",
+	"代理商名称": "Nome agenzia",
+	"请输入代理商名称": "Inserisci il nome dell'agenzia",
+	"用户姓名": "Il tuo nome",
+	"请输入姓名": "Inserisci il tuo nome",
+	"联系电话": "Il tuo telefono",
+	"请输入手机号": "Inserisci numero di telefono",
+	"验证码": "Codice OTP",
+	"填写验证码": "Compila codice OTP",
+	"邀请码": "Codice invito",
+	"请输入代理商邀请码": "Inserisci codice invito",
+	"请上传营业执照及行业相关资质证明图片": "Carica foto di licenze commerciali e certificati di qualificazione relativi al settore",
+	"图片最多可上传10张,图片格式支持JPG、PNG、JPEG": "È possibile caricare fino a 10 immagini e il formato immagine supporta JPG, PNG, JPEG",
+	"上传图片": "Carica",
+	"已阅读并同意": "Leggi e accetta",
+	"代理商协议": "Contratto di agenzia",
+	"提交申请": "Invia domanda",
+	"代理商入驻协议": "Contratto di agente",
+	"恭喜,您的资料提交成功!": "Congratulazioni, inviato con successo!",
+	"返回首页": "Ritorno a casa",
+	"恭喜,您的资料通过审核!": "Congratulazioni, recensione superata!",
+	"您的申请未通过!": "La tua domanda è stata respinta!",
+	"重新申请": "Riapplica",
+	"获取验证码": "Ottieni codice OTP",
+	"请输入正确的手机号码": "Inserisci il numero di telefono corretto",
+	"重新获取": "Riacquisisci",
+	"请上传营业执照": "Carica licenza commerciale",
+	"请勾选并同意入驻协议": "Barrare e accettare il contratto di lavoro",
+	"专题栏": "Colonna Argomento",
+	"暂无数据": "Nessun dato",
+	"请输入卡号": "Inserisci il numero della carta",
+	"请输入卡密": "Inserisci la tua password",
+	"确认激活": "Conferma",
+	"SVIP会员尊享权": "privilegi membri SVIP",
+	"正在激活": "Attivazione",
+	"已使用": "Usato",
+	"永久SVIP会员": "Membro permanente SVIP",
+	"SVIP会员": "Membro SVIP",
+	"到期": "maturità",
+	"您与": "Tu con",
+	"商城的第": "Centro commerciale",
+	"天.": "Giorni.",
+	"已累积为您节省": "Risparmio accumulato per te",
+	"开通即享会员权益": "Goditi i vantaggi per i membri",
+	"续费会员": "Rinnovo",
+	"开通会员": "Unisciti a SVIP",
+	"有效期至": "Valido fino a ",
+	"试用": "Prova",
+	"购买即视为同意": "Acquisto come consenso",
+	"会员用户协议": "Contratto SVIP",
+	"点击兑换卡密": "Clicca per riscattare la carta",
+	"会员优惠券": "Buono SVIP",
+	"SVIP商品推荐": "SVIP consiglia",
+	"商城价": "Prezzo centro commerciale",
+	"激活会员卡": "Attiva Carta",
+	"支付宝支付": "Alipay",
+	"成功开启0元试用": "Prova da 0 yuan aperta con successo",
+	"确认绑定": "Conferma rilegatura",
+	"绑定成功": "Rilegatura riuscita",
+	"商城客服已离线": "Il servizio clienti è offline",
+	"我要反馈": "Voglio un feedback",
+	"请填写内容": "Compila il contenuto",
+	"提交": "Invia",
+	"精品推荐": "Consigliato",
+	"热门榜单": "Popolare",
+	"首发新品": "Nuovo",
+	"促销单品": "Promozionale",
+	"预告": "Avviso",
+	"回放": "Riproduzione",
+	"进行中": "Elaborazione",
+	"发送客服": "Invia",
+	"客服连接中": "Il servizio clienti si sta connettendo",
+	"连接失败": "Connessione fallita",
+	"提示": "Suggerimento",
+	"客服已下线,是否需要反馈?": "Il servizio clienti è offline, hai bisogno di un feedback?",
+	"和好友一起分享": "Condividi con gli amici",
+	"积分抵扣": "Detrazione punti",
+	"已开票": "Fatturato",
+	"未开票": "Non fatturato",
+	"发票信息": "Informazioni sulla fattura",
+	"发票抬头": "Fattura",
+	"发票抬头类型": "Tipo di intestazione fattura",
+	"个人": "PER",
+	"企业": "COM",
+	"发票类型": "Tipo fattura",
+	"电子普通发票": "Fattura generale elettronica",
+	"电子专用发票": "Fattura speciale elettronica",
+	"企业税号": "Imposta sulle imprese",
+	"联系信息": "Informazioni di contatto",
+	"真实姓名": "Nome reale",
+	"联系邮箱": "E-mail",
+	"抬头选择": "Selezione testa",
+	"默认": "Predefinito",
+	"普通": "ordinario",
+	"专用": "Dedicato",
+	"您还没有添加发票信息哟": "Non hai aggiunto le informazioni sulla fattura",
+	"添加新的抬头": "Aggiungi nuova intestazione",
+	"不开发票": "Nessuna fattura",
+	"抽奖": "Lotteria",
+	"全选": "Seleziona tutto",
+	"属性": "Attributi",
+	"请填写具体地址": "Si prega di compilare l'indirizzo specifico",
+	"省": "Provincia",
+	"市": "Città",
+	"区": "Area",
+	"添加成功": "Aggiungi con successo",
+	"您已拒绝导入微信地址权限": "Hai negato il permesso di importare indirizzi WeChat",
+	"是否进入权限管理,调整授权?": "Entri nella gestione dei permessi e modifichi l'autorizzazione?",
+	"已取消": "Annullato",
+	"添加失败": "Aggiungi fallito",
+	"请填写收货人姓名": "Inserisci il nome del destinatario",
+	"请选择所在地区": "Seleziona la tua regione",
+	"请填写详细地址": "Si prega di compilare l'indirizzo dettagliato",
+	"星": "Stella",
+	"商品满足你的期待么?说说你的想法,分享给想买的他们吧": "Il prodotto soddisfa le tue aspettative? Dicci cosa ne pensi e condividilo con chi vuole acquistarlo",
+	"立即评价": "Vota ora",
+	"商品质量": "Qualità del prodotto",
+	"服务态度": "Atteggiamento al servizio",
+	"缺少参数": "Parametri mancanti",
+	"请填写你对宝贝的心得": "Compila la tua opinione sul prodotto",
+	"正在发布评论": "Inserimento commento",
+	"感谢您的评价": "Grazie per la tua recensione",
+	"评价完成": "Revisione completata",
+	"恭喜您": "Congratulazioni",
+	"获得": "Prendi",
+	"机会": "Possibilità",
+	"领取成功": "Ricevuto con successo",
+	"评分": "Punteggio",
+	"全部": "TUTTI",
+	"好评": "Lode",
+	"中评": "Media",
+	"差评": "Cattivo",
+	"加载更多": "Caricamento di più",
+	"千米距离": "a chilometri di distanza",
+	"搜索商品名称": "Cerca prodotto",
+	"价格": "Prezzo",
+	"销量": "Venduto",
+	"新品": "Nuovo",
+	"已全部加载": "Tutto caricato",
+	"缺少订单号": "ID ordine mancante",
+	"退货件数": "Numero rimborsato",
+	"退款类型": "Tipo di rimborso",
+	"退款原因": "Motivo del rimborso",
+	"备注说明": "Osservazione",
+	"填写备注信息,100字以内": "Osservazioni entro 100 parole",
+	"仅退款": "Solo rimborso",
+	"退货并退款": "Reso e rimborso",
+	"申请成功": "Applicazione riuscita",
+	"请先选择退货商品": "Seleziona prima l'articolo da restituire",
+	"搜索历史": "Cronologia delle ricerche",
+	"热门搜索": "Ricerca a caldo",
+	"请输入要搜索的商品": "Inserisci il prodotto che vuoi cercare",
+	"正在搜索中": "Ricerca",
+	"中奖记录": "Record vincente",
+	"我的奖品": "Il mio premio",
+	"活动规则": "Regola attività",
+	"昵称": "soprannome",
+	"序号": "Serie",
+	"奖品名称": "Nome del premio",
+	"获奖时间": "Tempo vincente",
+	"商家暂未上架活动哦": "Il commerciante non ha ancora elencato l'evento",
+	"获取抽奖信息": "Ottieni informazioni sulle lotterie",
+	"奖品类型": "Tipo premio",
+	"立即兑换": "Riscatta ora",
+	"兑换时间": "Tempo di cambio",
+	"暂无中奖记录": "Nessun record di vittorie",
+	"积分": "Punto",
+	"余额": "Equilibrio",
+	"红包": "Contanti",
+	"设置收货地址": "Imposta indirizzo di spedizione",
+	"暂无门店信息": "Nessuna informazione sul negozio",
+	"剩余积分": "Punti rimanenti",
+	"当前积分": "Punti attuali",
+	"开具发票": "Fattura",
+	"请填写": "Compila",
+	"配送运费": "Spese di spedizione",
+	"会员商品优惠": "Offerte di prodotti",
+	"会员运费优惠": "Offerte di spedizione",
+	"合计": "Totale",
+	"使用微信快捷支付": "Pagamento rapido WeChat",
+	"使用支付宝支付": "Paga con Alipay",
+	"线下支付": "Pagamenti offline",
+	"使用线下付款": "Utilizza il pagamento offline",
+	"好友代付": "L'amico paga",
+	"找微信好友支付": "Trova amici da pagare",
+	"立即使用": "Usa",
+	"请选择要购买的商品": "Seleziona un articolo da acquistare",
+	"发票": "Fattura",
+	"不使用": "Non usare",
+	"订单创建成功": "Ordine creato con successo",
+	"请选择支付方式": "Seleziona il metodo di pagamento",
+	"请选择收货地址": "Selezionare l'indirizzo di consegna",
+	"请填写联系人或联系人电话": "Compila la persona di contatto o il numero di telefono di contatto",
+	"暂无门店,请选择其他方式": "Nessun negozio attualmente, scegli un altro modo",
+	"请输入": "Inserisci",
+	"请输入正确的": "Inserisci il corretto",
+	"请上传": "Si prega di caricare",
+	"订单支付中": "Pagare",
+	"请按以上退货信息将商品退回": "Si prega di restituire l'articolo con le informazioni",
+	"请联系管理员获取退货地址": "Contattare l'amministratore per l'indirizzo di ritorno",
+	"待核销": "Scritto",
+	"核销信息": "Informazioni cancellate",
+	"营业时间": "Orario lavorativo",
+	"每日": "Quotidiano",
+	"使用说明": "Istruzioni per l'uso",
+	"可将二维码出示给店员扫描或提供数字核销码": "Il codice QR può essere presentato all'impiegato per eseguire la scansione o fornire un codice di verifica digitale",
+	"可将二维码出示给配送员进行核销": "Il QR code può essere presentato al corriere per la verifica",
+	"查看位置": "Visualizza posizione",
+	"拒绝原因": "Motivo di negazione",
+	"联系客服": "Contatto",
+	"商家备注": "Note del commerciante",
+	"收货人": "Ricevitore",
+	"收货地址": "Indirizzo della nave",
+	"配送人姓名": "Nome della nave",
+	"拨打": "Chiama",
+	"虚拟发货": "Nave virtuale",
+	"已发货,请注意查收": "Spedito, controllare",
+	"虚拟备注": "Note virtuali",
+	"总代付": "Importo totale",
+	"申请开票": "Applica fattura",
+	"查看发票": "Visualizza fattura",
+	"取消订单": "Annulla",
+	"立即付款": "Paga",
+	"批量退款": "Rimborso in blocco",
+	"查看拼团": "Visualizza gruppo",
+	"再次购买": "Compra ancora",
+	"取消申请": "Annulla richiesta",
+	"填写退货信息": "Informazioni sul reso",
+	"查看退货物流": "Logistica",
+	"您确认放弃此次申请吗": "Sei sicuro di voler abbandonare questa applicazione",
+	"操作成功": "Operazione riuscita",
+	"订单信息不存在": "Le informazioni sull'ordine non esistono",
+	"为保障权益,请收到货确认无误后,再确认收货": "Al fine di tutelare i diritti e gli interessi, si prega di confermare il ricevimento della merce dopo aver confermato che la merce è corretta.",
+	"删除订单": "Cancella ordine",
+	"确定删除该订单": "Conferma cancellazione ordine",
+	"删除成功": "Cancellato con successo",
+	"确认取消该订单": "Conferma annullamento ordine",
+	"订单信息": "Informazioni sull'ordine",
+	"消费订单": "Ordine",
+	"总消费": "Importo totale",
+	"预售": "Prevendita",
+	"线下付款,未支付": "Offline non pagato",
+	"未核销": "Non cancellato",
+	"件商品,总金额": "articoli, importo totale",
+	"查看详情": "Visualizza",
+	"暂无订单": "Nessun ordine ancora",
+	"缺少订单号无法取消订单": "Non posso annullare l'ordine senza numero d'ordine",
+	"订单支付成功": "Ordine pagato con successo",
+	"订单支付失败": "Ordine pagato non riuscito",
+	"暂未支付": "Non ancora pagato",
+	"失败原因": "Motivo fallito",
+	"重新购买": "Riscatto",
+	"重新支付": "Paga ancora",
+	"赠送优惠券": "Regala coupon",
+	"有效期": "Validità",
+	"缺少参数无法查看订单支付状态": "I parametri mancanti non possono visualizzare lo stato del pagamento dell'ordine",
+	"最多可上传3张": "Fino a 3 caricamenti",
+	"请选择产品": "Seleziona un prodotto",
+	"该产品没有更多库存了": "Non ci sono più scorte per questo prodotto",
+	"优品推荐": "Migliore raccomandazione",
+	"暂无产品": "Nessun prodotto ancora",
+	"重新选择": "Riseleziona",
+	"请选择数量": "Seleziona la quantità",
+	"砍价专区·BARGAINING": "CONTRATTAZIONE",
+	"立即砍价": "Taglia ora",
+	"拼团活动": "Gruppo",
+	"人拼团成功.": "La gente ha avuto successo",
+	"人参团": "Gruppo Ginseng",
+	"拼团价": "Prezzo gruppo",
+	"已过期": "Scaduto",
+	"关注": "Segui",
+	"推荐好货": "Raccomanda Merci",
+	"暂无商品": "Nessun prodotto ancora",
+	"限时秒杀": "Picco limitato nel tempo",
+	"抢": "Afferra",
+	"广告位": "Spazio ADV",
+	"精彩内容": "In evidenza",
+	"砍价模块,暂无数据": "Modulo affare, nessun dato ancora",
+	"砍价活动": "Affare",
+	"呼朋唤友来砍价": "Chiama gli amici Affare",
+	"拼团模块,暂无数据": "Modulo gruppo, nessun dato ancora",
+	"享超值开团价": "Goditi tariffe di gruppo convenienti",
+	"优惠券,暂无数据": "Buono, nessun dato momentaneamente",
+	"领取今日好券": "Ricevi il buono buono di oggi",
+	"可用": "Usato",
+	"领取": "Rivendicazione",
+	"客服": "Servizio",
+	"商品列表,暂无数据": "Nessun dato momentaneamente",
+	"搜索商品": "Cerca prodotto",
+	"暂无图片,请上传图片": "Nessuna foto, per favore carica",
+	"首发新品,暂无数据": "Primo nuovo prodotto, ancora nessun dato",
+	"多个优质商品最新上架": "Le ultime merci di alta qualità sugli scaffali",
+	"暂无新闻,请上传新闻": "Nessuna notizia, carica la notizia",
+	"热度 TOP": "Riscaldare TOP",
+	"排行榜、暂无数据": "Classifica, nessun dato momentaneamente",
+	"促销单品,暂无数据": "Articoli promozionali, nessun dato momentaneo",
+	"库存商品优惠促销活动": "Attività promozionali per merce in giacenza",
+	"精品推荐,暂无数据": "Consiglio boutique, nessun dato ancora",
+	"上百种商品分类任您选择": "Centinaia di categorie di prodotti tra cui scegliere",
+	"秒杀模块,暂无数据": "Modulo Seckill, nessun dato momentaneamente",
+	"场": "Sito",
+	"暂无数据,请设置": "Nessun dato, si prega di impostare",
+	"暂无数据,请先添加分类": "Nessun dato, aggiungere prima la classificazione",
+	"暂无标题": "Nessun titolo momentaneamente",
+	"诚意推荐品质商品": "Raccomandare merce di qualità in buona fede",
+	"点击“立即关注”即可关注公众号": "Fai clic su 'segui ora' per seguire l'account ufficiale",
+	"立即关注": "Segui ora",
+	"添加到我的小程序, 微信首页下拉即可访问商城。": "Aggiungilo alla mia applet e potrai accedere al centro commerciale tirando giù la homepage di wechat",
+	"点击": "Clic",
+	"服务协议与隐私政策": "Contratto di servizio e informativa privacy",
+	"请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。": "Assicurati di leggere attentamente e di comprendere appieno i termini del contratto di servizio e l'informativa sulla privacy, inclusi ma non limitati a: per fornirti messaggistica istantanea, condivisione di contenuti e altri servizi, abbiamo bisogno di raccogliere il tuo dispositivo informazioni, registri delle operazioni e altre informazioni personali. Puoi visualizzare, modificare, eliminare le informazioni personali e gestire la tua autorizzazione in Impostazioni",
+	"你可以阅读": "Puoi leggere",
+	"《服务协议与隐私政策》": "Contratto di servizio e informativa privacy",
+	"了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。": "Ulteriori informazioni. Se sei d'accordo, fai clic su Accetto per iniziare ad accettare i nostri servizi",
+	"我同意": "Sono d'accordo",
+	"残忍拒绝": "Crudele rifiuto",
+	"下拉加载更多": "Abbassa di più il carico",
+	"网络连接断开": "Connessione di rete disconnessa",
+	"请检查情况:": "Verifica la condizione:",
+	"在设置中是否已开启网络权限": "Se il permesso di rete è abilitato nelle impostazioni",
+	"当前是否处于弱网环境": "Attualmente in un ambiente di rete debole",
+	"版本是否过低,升级试试吧": "Quando la versione è troppo bassa, prova ad aggiornare",
+	"重新连接": "Riconnetti",
+	"加载中": "Caricamento",
+	"没有更多内容啦~": "Niente più contenuti~",
+	"100%正品保证": "100% autentico",
+	"所有商品精挑细选": "Sii molto esigente",
+	"售后无忧": "Senza preoccupazioni dopo il venduto",
+	"管理": "Tubo",
+	"购物数量": "Quantità spesa",
+	"请重新选择商品规格": "Riselezionare le specifiche del prodotto",
+	"重选": "Riselezione",
+	"失效商品": "Merci non valide",
+	"失效": "Fallimento",
+	"该商品已失效": "La merce è scaduta",
+	"立即下单": "Ordina ora",
+	"我也是有底线的": "Ho anche una linea di fondo",
+	"产品库存不足,请选择其它": "Inventario di prodotti insufficiente, seleziona altro",
+	"添加购物车成功": "Carrello della spesa aggiunto con successo",
+	"清除成功": "Pulizia riuscita",
+	"暂无兑换记录~": "Nessun record di scambio~",
+	"大家都在换": "Tutti stanno cambiando",
+	"人兑换": "Scambio di persone",
+	"轻松赚积分": "Guadagna punti facilmente",
+	"购买商品": "Acquista beni",
+	"购买商品可获得积分奖励": "Punti premio per l'acquisto di beni",
+	"去完成": "Vai",
+	"每日签到活动": "Attività di check-in giornaliere",
+	"每日签到可获得积分奖励": "Il check-in giornaliero può ottenere punti premio",
+	"九宫格抽奖活动": "Lotteria Jiugongge",
+	"幸运抽奖可获得积分奖励": "L'estrazione fortunata può ottenere punti premio",
+	"我的积分": "I miei punti",
+	"每日签到": "Accesso giornaliero",
+	"积分抽奖": "Lotteria a punti",
+	"兑换记录": "Registro scambio",
+	"已兑换": "Redento",
+	"无法兑换": "Impossibile riscattare",
+	"[默认]": "[Predefinito]",
+	"可用积分": "Punti disponibili",
+	"快递费用": "Tariffa espressa",
+	"免运费": "Trasporto libero",
+	"备注信息": "Osservazioni",
+	"请添加备注(150字以内)": "Aggiungi commenti (entro 150 parole)",
+	"使用线上支付宝支付": "Paga con Alipay online",
+	"可用余额:": "Saldo:",
+	"选择线下付款方式": "Seleziona metodo di pagamento offline",
+	"正在加载…": "Caricamento in corso...",
+	"可用积分不足!": "Punti disponibili insufficienti!",
+	"订单状态": "Stato dell'ordine",
+	"支付积分": "Paga punti",
+	"备注": "Osservazioni",
+	"配送核销码": "Codice di verifica della consegna",
+	"当前可用余额:": "Saldo attuale disponibile:",
+	"正在加载": "Caricamento",
+	"缺少经纬度信息无法查看地图!": "Non è possibile visualizzare la mappa senza informazioni su longitudine e latitudine!",
+	"商品兑换成功": "Riscattato con successo",
+	"兑换方式": "Metodo di scambio",
+	"积分兑换": "Scambio di punti",
+	"兑换积分": "Riscatta punti",
+	"取消兑换": "Annulla scambio",
+	"缺少参数无法查看订单兑换状态": "Non è possibile visualizzare lo stato di scambio dell'ordine senza parametri",
+	"用户离开了": "L'utente se n'è andato",
+	"兑换成功": "Riscattato con successo",
+	"物流公司": "Azienda di logistica",
+	"复制单号": "Copia doc no",
+	"设为默认": "Imposta come predefinito",
+	"添加新地址": "Aggiungi nuovo indirizzo",
+	"导入微信地址": "Importa indirizzo wechat",
+	"取消选择": "Deseleziona",
+	"您设置的默认地址不存在!": "L'indirizzo predefinito che hai impostato non esiste!",
+	"设置成功": "Impostazione riuscita",
+	"您删除的地址不存在!": "L'indirizzo che hai cancellato non esiste!",
+	"获取头像": "Ottieni avatar",
+	"请点击授权": "Fai clic su autorizza",
+	"绑定手机号": "Lega numero di cellulare",
+	"永久": "Permanente",
+	"会员到期": "Scadenza abbonamento",
+	"未开通会员": "Membro non aperto",
+	"查看会员权益": "Visualizza i vantaggi dell'abbonamento",
+	"立即续费": "Rinnovare",
+	"立即激活": "Attivazione",
+	"会员可享多项权益": "Goditi molteplici vantaggi",
+	"订单中心": "Il mio ordine",
+	"我的服务": "Il mio servizio",
+	"隐私协议": "Privacy",
+	"商家管理": "Gestione aziendale",
+	"更新用户信息成功": "Informazioni utente aggiornate con successo",
+	"客服接待": "Ricevimento",
+	"点击复制网址去浏览器中打开": "Fai clic su Copia URL per aprire nel browser",
+	"点击复制": "Fai clic su Copia",
+	"完成支付": "Completa il pagamento",
+	"点击右上角": "Clicca nell'angolo in alto a destra",
+	"选择 在浏览器 打开,去支付宝支付": "Seleziona per aprire nel browser e pagare tramite Alipay",
+	"支付订单不存在,页面将在2秒后自动关闭!": "L'ordine di pagamento non esiste e la pagina si chiuderà automaticamente tra 2 secondi!",
+	"正在支付中": "Pagare",
+	"支付订单不存在,页面将在2秒后自动关闭": "L'ordine di pagamento non esiste e la pagina si chiuderà automaticamente tra 2 secondi",
+	"复制失败": "Replica fallita",
+	"您目前的排名": "La tua classifica attuale",
+	"您目前暂无排名": "Attualmente sei in classifica",
+	"暂无排名~": "Nessuna classifica ~",
+	"输入手机号": "Inserisci numero di cellulare",
+	"输入验证码": "Inserisci codice di verifica",
+	"立即登录": "Accedi ora",
+	"请填写手机号码": "Inserisci il tuo numero di cellulare",
+	"请填写验证码": "Compila il codice di verifica",
+	"请输入正确的验证码": "Inserisci il codice di verifica corretto",
+	"正在登录中": "Accesso",
+	"登录成功": "Accesso riuscito",
+	"获取授权": "Ottenere l'autorizzazione",
+	"获取微信的手机号授权": "Ottieni l'autorizzazione al numero di cellulare wechat",
+	"获取微信手机号": "Ricevi il numero di cellulare di Wechat",
+	"输入手机号码": "Inserisci numero di cellulare",
+	"填写登录密码": "Compila password di accesso",
+	"登录": "Accedi",
+	"快速登录": "Accesso rapido",
+	"账号登录": "Accesso all'account",
+	"其他方式登录": "Accedi con altri metodi",
+	"登录中": "Accesso",
+	"获取用户信息失败": "Impossibile ottenere informazioni sull'utente",
+	"请绑定手机号后,继续操作": "Collega il tuo numero di cellulare e continua l'operazione",
+	"错误信息": "Informazioni sull'errore",
+	"用户点击确定": "L'utente fa clic su OK",
+	"用户点击取消": "L'utente fa clic su Annulla",
+	"登录失败": "Accesso fallito",
+	"请勿重复点击": "Non fare clic ripetutamente",
+	"请填写密码": "Inserisci la password",
+	"您输入的密码过于简单": "La password che hai inserito è troppo semplice",
+	"请填写账号": "Compila il numero di conto",
+	"请输入正确的账号": "Inserisci il numero di conto corretto",
+	"[图片]": "[Immagine]",
+	"[语音]": "[Voce]",
+	"[商品]": "[Prodotto]",
+	"[订单]": "[Ordine]",
+	"亲、暂无消息记录哟!": "Caro, nessun messaggio registrato ancora!",
+	"站内消息": "Messaggio in stazione",
+	"客服消息": "Messaggio del servizio clienti",
+	"通知于": "Notificato il",
+	"获取详情中": "Ottieni dettagli",
+	"代付订单创建成功,发给好友帮你付款吧~": "Ordine di pagamento creato con successo, invialo al tuo amico per aiutarti a pagare ~",
+	"帮我付一下这件商品了,谢谢~": "Aiutami a pagare questa merce, grazie ~",
+	"已经有人替我代付,谢谢啦~": "Qualcuno ha pagato per me, grazie ~",
+	"谢谢你帮我支付,么么哒~": "Grazie per avermi aiutato a pagare, Moda ~",
+	"我已为你代付成功,商家正在努力发货中~": "Ho pagato con successo per te e il commerciante sta cercando di consegnare ~",
+	"好友代付成功,商家正在努力发货中~": "Pagamento amico riuscito e il commerciante sta cercando di consegnare ~",
+	"发送给微信好友": "Invia ad amici wechat",
+	"查看订单详情": "Visualizza i dettagli dell'ordine",
+	"订单已支付": "Ordine pagato",
+	"如果订单申请退款,已支付金额将原路退还给您": "Se l'ordine richiede il rimborso, l'importo pagato ti verrà restituito allo stesso modo",
+	"代付成功": "Pagamento riuscito",
+	"谢谢你为我付款,还可以再去看看其他商品哟~": "Grazie per avermi pagato e puoi andare a vedere altri beni ~",
+	"该订单暂未支付": "L'ordine non è stato ancora pagato",
+	"人": "Persona",
+	"推广人数": "Numero di promotori",
+	"一级": "Livello 1",
+	"二级": "Livello 2",
+	"点击搜索会员名称": "Clicca per cercare il nome del membro",
+	"团队排序": "Smistamento a squadre",
+	"金额排序": "Smistamento importo",
+	"订单排序": "Smistamento ordini",
+	"单": "Ordini",
+	"加入时间": "Tempo di unione",
+	"累积推广订单": "Conteggio ordini",
+	"本月累计推广订单": "Ordini del mese",
+	"返佣": "Sconto",
+	"暂未返佣": "Non sconto",
+	"返佣时间": "Tempo di sconto",
+	"单号": "Numero d'ordine",
+	"暂无推广订单~": "Nessun ordine di promozione ~",
+	"推广订单列表": "Elenco ordini di promozione",
+	"找回密码": "Recupera password",
+	"填写您的新密码": "Inserisci la tua nuova password",
+	"加载失败": "Errore di carico",
+	"点击授权登录您的客服工作台": "Fai clic su autorizza per accedere al tuo banco di lavoro del servizio clienti",
+	"授权登录": "Accesso autorizzato",
+	"没有登录的code,请重新扫码": "Codice senza login, scansiona di nuovo il codice",
+	"员工人数": "Numero di dipendenti",
+	"邀请": "Invito",
+	"分佣比例": "Bilancia",
+	"修改分佣比例": "Modifica proporzione",
+	"请输入百分比": "Inserisci percentuale",
+	"删除员工": "Elimina dipendente",
+	"确定删除该员工?": "Sei sicuro di eliminare questo dipendente?",
+	"请输入比例": "Inserisci una scala",
+	"分类": "Classe",
+	"我的": "Mio",
+	"姓名": "Nome",
+	"请输入联系电话": "Inserisci il numero di contatto",
+	"所在地区": "Posizione",
+	"详细地址": "Indirizzo",
+	"设置为默认地址": "Imposta come indirizzo predefinito",
+	"立即保存": "Salva ora",
+	"浙江省": "Zhejiang",
+	"杭州市": "Hangzhou",
+	"滨江区": "Distretto di Binjiang",
+	"广东省": "Provincia del Guangdong",
+	"广州市": "Guangzhou",
+	"番禺区": "Panyu",
+	"修改地址": "Modifica indirizzo",
+	"添加地址": "Aggiungi indirizzo",
+	"已取消!": "Annullato!",
+	"请填写联系电话": "Compila il numero di contatto",
+	"保存中": "Risparmio",
+	"修改成功": "Modifica riuscita",
+	"消费": "Consumo",
+	"充值": "Ricarica",
+	"暂无账单的记录哦~": "Nessuna registrazione della fattura temporaneamente~",
+	"点击【立即注销】即代表您已经同意《用户注销协议》": "Cliccando [disconnessione immediata] significa che hai accettato l'accordo di disconnessione dell'utente",
+	"立即注销": "Esci ora",
+	"是否确认注销": "Conferma logout",
+	"注销后无法恢复,请谨慎操作": "Impossibile recuperare dopo il logout, per favore fai attenzione",
+	"注销": "Esci",
+	"持卡人": "Titolare di carta",
+	"请输入持卡人姓名": "Inserisci il nome del titolare della carta",
+	"卡号": "Numero carta",
+	"请填写卡号": "Inserisci il numero della carta",
+	"银行": "Banca",
+	"提现": "Ritiro",
+	"最低提现金额": "Importo minimo di prelievo",
+	"当前可提现金额": "Importo corrente prelevabile",
+	"冻结佣金": "Commissione congelata",
+	"说明: 每笔佣金的冻结期为": "Nota: il periodo di congelamento di ogni provvigione è",
+	"天,到期后可提现": "Giorni, revocabili alla scadenza",
+	"账号": "Conto",
+	"请填写您的微信账号": "Compila il tuo account wechat",
+	"收款码": "Codice raccolta",
+	"请填写您的支付宝账号": "Inserisci il tuo numero di conto Alipay",
+	"请选择银行": "Seleziona una banca",
+	"银行卡": "Carta bancaria",
+	"微信": "Wechat",
+	"支付宝": "Alipay",
+	"请填写持卡人姓名": "Inserisci il nome del titolare della carta",
+	"请填写微信号": "Compila la wechat",
+	"请填写提现金额": "Compila l'importo del prelievo",
+	"提现金额不能低于": "L'importo del prelievo non può essere inferiore a",
+	"未使用": "Non utilizzato",
+	"已使用/过期": "Usato/scaduto",
+	"通用劵": "Titoli generali",
+	"一级分佣上浮": "Un livello in su",
+	"二级分佣上浮": "Secondario fluttuante",
+	"快速升级技巧": "Abilità di aggiornamento rapido",
+	"未完成": "Incompleto",
+	"已领完": "Raccolti",
+	"当前共": "Totale corrente",
+	"取关": "Disattiva",
+	"请选择商品": "Seleziona un prodotto",
+	"头像": "Avatar",
+	"手机号码": "Numero di cellulare",
+	"点击绑定手机号": "Fai clic per legare",
+	"ID号": "Numero ID",
+	"权限设置": "Autorizzazione",
+	"点击管理": "Gestione",
+	"密码": "Password",
+	"点击修改密码": "Fai clic su Modifica",
+	"更换手机号码": "Cambia numero",
+	"点击更换手机号码": "Fai clic per",
+	"缓存大小": "Dimensioni cache",
+	"当前版本": "Versione attuale",
+	"地址管理": "Indirizzo",
+	"发票管理": "Fattura",
+	"账号注销": "Annullamento",
+	"注销后无法恢复": "Impossibile recuperare",
+	"累计积分": "Punti accumulati",
+	"累计消费": "Consumo",
+	"冻结积分": "Punti di congelamento",
+	"积分规则": "Regola integrale",
+	"提示:积分数值的高低会直接影响您的会员等级": "Suggerimento: il valore del tuo livello di iscrizione",
+	"提示:你有": "Suggerimento: hai",
+	"积分在": "Integrale in",
+	"过期,请尽快使用": "Scaduto, utilizzalo il prima possibile",
+	"暂无积分记录哦~": "Nessun record di punteggio temporaneamente~",
+	"赚积分": "Guadagna punti",
+	"分值明细": "Dettagli punteggio",
+	"分值提升": "Aumento punteggio",
+	"抬头类型": "Tipo di testata",
+	"增值税电子专用发票": "Fattura speciale elettronica IVA",
+	"增值税电子普通发票": "Fattura elettronica ordinaria IVA",
+	"需要开具发票的姓名": "Nome da fatturare",
+	"需要开具发票的企业名称": "Nome dell'impresa che emette fattura",
+	"税号": "Codice Fiscale",
+	"纳税人识别号": "Numero di identificazione fiscale",
+	"手机号": "Numero di cellulare",
+	"您的手机号": "Il tuo numero di cellulare",
+	"邮箱": "Casella postale",
+	"您的联系邮箱": "La tua casella di posta di contatto",
+	"开户银行": "Banca di deposito",
+	"您的开户银行": "La tua banca di deposito",
+	"银行账号": "Numero di conto bancario",
+	"您的银行账号": "Il tuo numero di conto bancario",
+	"企业地址": "Indirizzo impresa",
+	"您所在的企业地址": "Il tuo indirizzo commerciale",
+	"企业电话": "Telefono aziendale",
+	"您的企业电话": "Il tuo telefono aziendale",
+	"设置为默认抬头": "Imposta come intestazione predefinita",
+	"保存": "Salva",
+	"发票类型选择": "Selezione tipo fattura",
+	"纸质发票开出后将以邮寄形式交付": "Dopo l'emissione della fattura cartacea, verrà consegnata per posta",
+	"请输入需要开具发票的姓名": "Inserisci il nome da fatturare",
+	"请输入您的手机号": "Inserisci il tuo numero di cellulare",
+	"请正确输入您的手机号": "Inserisci correttamente il tuo numero di cellulare",
+	"请输入您的联系邮箱": "Inserisci la tua email di contatto",
+	"请正确输入您的联系邮箱": "Inserisci correttamente la tua email di contatto",
+	"请输入需要开具发票的企业名称": "Inserisci il nome dell'impresa per l'emissione della fattura",
+	"请输入纳税人识别号": "Inserisci il codice fiscale",
+	"请正确输入纳税人识别号": "Inserire correttamente il codice fiscale",
+	"请输入您的开户银行": "Inserisci la tua banca di deposito",
+	"请输入您的银行账号": "Inserisci il tuo numero di conto bancario",
+	"请正确输入您的银行账号": "Inserisci correttamente il tuo numero di conto bancario",
+	"请输入您所在的企业地址": "Inserisci il tuo indirizzo commerciale",
+	"请输入您的企业电话": "Inserisci il tuo numero di telefono aziendale",
+	"发票记录": "Registro fattura",
+	"抬头管理": "Gestione testata",
+	"申请时间": "Tempo di applicazione",
+	"没有发票信息哟~": "Nessuna informazione sulla fattura ~",
+	"个人普通发票": "Fattura personale ordinaria",
+	"企业普通发票": "Fattura ordinaria impresa",
+	"企业专用发票": "Fattura speciale impresa",
+	"添加新发票": "Aggiungi nuova fattura",
+	"删除该发票?": "Eliminare questa fattura?",
+	"发票编号": "Numero fattura",
+	"发票备注": "Note fattura",
+	"快递号": "Numero espresso",
+	"总资产(元)": "Attività totali (€)",
+	"累计充值(元)": "Ricarica (€)",
+	"累计消费(元)": "Co fiore (€)",
+	"账单记录": "Registro fattura",
+	"消费记录": "Registra",
+	"充值记录": "Ricarica",
+	"积分中心": "Integrale",
+	"签到领积分": "Accedi",
+	"赚积分抵现金": "Guadagna punti",
+	"领取优惠券": "Buoni",
+	"满减享优惠": "Sconto completo",
+	"最新拼团活动": "Ultima attività di gruppo",
+	"最新的优惠商品上架拼团": "Gli ultimi prodotti preferenziali sullo scaffale",
+	"立即参与": "Partecipa",
+	"当前限时秒杀": "Seconda uccisione limite di tempo attuale",
+	"最新商品秒杀进行中": "Ultimo picco di merci in corso",
+	"我的余额": "Equilibrio",
+	"赠送": "Regalo",
+	"其他": "Altro",
+	"注意事项": "Precauzioni",
+	"冻结佣金为": "La Commissione congelata è",
+	"立即转入": "Trasferimento immediato in",
+	"立即充值": "Ricarica subito",
+	"请输入金额": "Inserisci importo",
+	"转入余额": "Trasferimento in saldo",
+	"转入余额后无法再次转出,确认是否转入余额": "Impossibile trasferire nuovamente dopo il trasferimento a saldo, confermare se trasferire a saldo",
+	"转入成功": "Trasferimento in corso",
+	"正在支付": "Pagamento",
+	"充值金额必须为数字": "L'importo della ricarica deve essere un numero",
+	"充值金额不能为0": "L'importo della ricarica non può essere 0",
+	"填写手机号码": "Compila numero di cellulare",
+	"是否绑定账号": "Lega conto",
+	"绑定": "Legatura",
+	"您已取消绑定!": "Sei libero!",
+	"当前手机号": "Numero di cellulare attuale",
+	"设置新密码": "Imposta nuova password",
+	"确认新密码": "Conferma nuova password",
+	"手机号码不存在,无法发送验证码!": "Il numero di cellulare non esiste, impossibile inviare il codice di verifica!",
+	"请输入新密码": "Inserisci una nuova password",
+	"两次输入的密码不一致!": "Le due password che hai inserito non sono coerenti!",
+	"请输入验证码": "Inserisci un codice di verifica",
+	"暂无退款订单~": "Nessun ordine di rimborso ~",
+	"缺少订单号无法查看订单详情": "Manca il numero d'ordine e non è possibile visualizzare i dettagli dell'ordine",
+	"明细": "Dettagli",
+	"第七天": "Giorno 7",
+	"第7天": "Giorno 7",
+	"奖励": "Ricompensa",
+	"已签到": "Registrato",
+	"立即签到": "Accedi ora",
+	"已累计签到": "Check-in cumulativo",
+	"据说连续签到第": "Il secondo accesso consecutivo",
+	"天可获得超额积分,一定要坚持签到哦~~~": "Se puoi ottenere punti in eccesso ogni giorno, devi insistere per accedere~~~",
+	"签到成功": "Check in riuscito",
+	"好的": "OK",
+	"您今日已签到!": "Hai effettuato l'accesso oggi!",
+	"暂无签到记录~": "Nessun record di accesso~",
+	"保存海报": "Salva POSTER",
+	"长按保存图片": "Premere a lungo per salvare l'immagine",
+	"分销海报": "Poster di distribuzione",
+	"小程序二维码需要发布正式版后才能获取到": "Il codice QR dell'applet può essere ottenuto solo dopo aver pubblicato la versione ufficiale",
+	"获取中": "Prendere",
+	"暂无数据~": "Nessun dato temporaneamente ~",
+	"提现记录": "Ritiro",
+	"提现总额": "Ritiro totale",
+	"佣金记录": "Registro della Commissione",
+	"佣金明细": "Dettagli della Commissione",
+	"分销等级": "Livello di distribuzione",
+	"昨日收益": "I guadagni di ieri",
+	"累积已提": "Cumulativo ritirato",
+	"代理商申请": "Applicazione agente",
+	"立即提现": "Ritiro",
+	"推广名片": "Biglietto da visita",
+	"推广人统计": "Statistiche del Promotore",
+	"推广人订单": "ordine promotore",
+	"推广订单": "Ordine di promozione",
+	"事业部": "Dipartimento aziendale",
+	"代理商": "Agente",
+	"推广人排行": "Classifica dei Promotori",
+	"佣金排行": "Graduatoria della Commissione",
+	"员工列表": "Elenco dipendenti",
+	"您目前暂无推广权限": "Al momento non hai il permesso di promozione",
+	"商城购物可享": "Shopping nel centro commerciale",
+	"折": "Sconto",
+	"当前等级": "Livello attuale",
+	"未达成": "Non raggiunto",
+	"今日成长值": "Valore di crescita di oggi",
+	"点": "Punto",
+	"我的成长值记录": "Il mio record di valore di crescita",
+	"暂未解锁该等级": "Questo livello non è stato ancora sbloccato",
+	"点,需达到": "Punto, bisogno di raggiungere",
+	"已解锁更高等级": "Sbloccato livello superiore",
+	"我的成长特权": "Il mio privilegio di crescita",
+	"购物折扣": "Sconto",
+	"专属徽章": "Distintivo esclusivo",
+	"经验累积": "Esperienza accumulata",
+	"尊享客服": "Servizio esclusivo",
+	"签到": "Check-in",
+	"可获得": "Disponibile",
+	"点经验": "Esperienza punto",
+	"每日签到可获得经验值,已签到": "L'accesso quotidiano può ottenere un valore di esperienza, effettuato l'accesso",
+	"去签到": "Check-in",
+	"点经验/元": "Esperienza punti/€",
+	"购买商品可获得对应的经验值": "Il valore di esperienza corrispondente può essere ottenuto acquistando beni",
+	"去购买": "Vai a comprare",
+	"点经验/人": "Punto esperienza/persona",
+	"邀请好友注册商城可获得经验值": "Invita gli amici a registrarsi nel centro commerciale per ottenere un valore di esperienza",
+	"去邀请": "Invita",
+	"积分数": "Frazione di prodotto",
+	"消费金额": "Quantità di consumo",
+	"暂无经验记录": "Nessun record di esperienza",
+	"账户登录": "Accesso all'account",
+	"微信登录": "Accesso a Wechat",
+	"手机号登录": "Accesso mobile",
+	"账户充值": "Ricarica",
+	"佣金转入": "Commissione",
+	"周榜": "Elenco settimanale",
+	"月榜": "Elenco mensile",
+	"周排行": "Classifica settimanale",
+	"月排行": "Classifica mensile",
+	"语言切换": "Lingua",
+	"点击前往": "Clicca per andare",
+	"查看全部": "Vedi tutto",
+	"查看订单": "Visualizza ordine",
+	"无法获取图片信息": "Impossibile ottenere informazioni sull'immagine",
+	"长按或扫描查看": "Premere a lungo o scansionare",
+	"点解锁": "Punto di sblocco",
+	"确认修改": "Conferma",
+	"保存修改": "Salva",
+	"退出登录": "Esci",
+	"付费会员": "SVIP",
+	"地址信息": "Indirizzo",
+	"我的推广": "Estensione",
+	"砍价记录": "Affare",
+	"我的等级": "Il mio livello",
+	"兑换": "Vai",
+	"申请中": "Applicazione",
+	"统计管理": "Statistiche",
+	"退款": "Rimborso",
+	"未发货": "Non emesso",
+	"当前为最新版本": "Attualmente l'ultima versione",
+	"清除缓存": "Svuota cache",
+	"确定清楚本地缓存数据吗": "Sei sicuro di essere chiaro sui dati della cache locale",
+	"缓存清理完成": "Pulizia cache completata",
+	"切换的账号不存在": "L'account cambiato non esiste",
+	"正在切换中": "Commutazione",
+	"确认退出登录": "Conferma logout",
+	"我知道了": "Vedo",
+	"系统错误": "Errore di sistema",
+	"请求失败": "Richiesta fallita",
+	"邀请您加入": "Invita a partecipare",
+	"图片上传中": "Caricamento",
+	"上传图片失败": "Impossibile caricare l'immagine",
+	"访问位置被拒绝": "Posizione di accesso negata",
+	"系统定位已关闭": "Il posizionamento del sistema è disattivato",
+	"需要定位权限": "Permesso di posizione richiesto",
+	"订单核销": "Cancellare",
+	"当前可转入佣金为":"L'attuale commissione trasferibile è",
+	"浏览记录":"Cronologia di navigazione",
+	"签到奖励":"Premio per il check-in",
+	"请输入内容":"Inserisci contenuto",
+	"单次限购":"Limitazione di acquisto unico",
+	"永久限购":"Restrizione permanente all'acquisto",
+	"《用户协议》":"《Accordo utente》",
+	"《隐私协议》":"《Accordo sulla privacy》",
+	"与":"E",
+	"请先阅读并同意协议":"Si prega di leggere e accettare l'accordo prima",
+	"绑定下级通知":"Notifiche minori vincolanti",
+	"购买成功通知":"Notifica di successo dell'acquisto",
+	"确认收货通知":"Avviso di conferma della ricezione",
+	"改价通知":"Avviso di modifica del prezzo",
+	"退款成功通知":"Notifica di successo del rimborso",
+	"充值成功通知":"Notifica di successo della ricarica",
+	"积分到账通知":"Avviso di arrivo dei punti",
+	"佣金到账通知":"Avviso di arrivo della commissione",
+	"砍价成功通知":"Avviso di successo della negoziazione dei prezzi",
+	"拼团成功通知":"Notifica di successo del gruppo turistico",
+	"拼团失败通知":"Notifica di guasto di gruppo",
+	"开团成功通知":"Notifica di apertura positiva del gruppo",
+	"提现成功通知":"Avviso di successo di recesso",
+	"提现失败通知":"Avviso di mancato ritiro",
+	"充值退款通知":"avviso di rimborso della ricarica",
+	"退款申请拒绝通知":"Avviso di rifiuto della domanda di rimborso",
+	"您有新的退款待处理":"Hai un nuovo rimborso in attesa di elaborazione",
+	"您有新的订单待处理":"Hai un nuovo ordine da elaborare",
+	"发货通知":"Avviso di consegna",
+	"取消拼团通知":"Avviso di cancellazione del tour di gruppo",
+	"参团成功通知":"Notifica di partecipazione positiva",
+	"你有个新的提现申请待处理":"Hai una nuova domanda di recesso da elaborare",
+	"你有个新的用户收货待处理":"Hai un nuovo utente che riceve merci da elaborare",
+	"提醒付款通知":"Avviso di pagamento del promemoria",
+	"短信验证码":"Codice di verifica SMS",
+	"到店自提":"Ritiro al negozio",
+	"快递配送":"Consegna espressa"
+}

+ 1181 - 0
lang/ja_jp.json

@@ -0,0 +1,1181 @@
+{
+	"选择地址": "アドレスを選択",
+	"选择其它地址": "他のアドレスを選択",
+	"已选商品": "選択した商品",
+	"清空": "クリア",
+	"¥": "¥",
+	"已售罄": "売り切れ",
+	"已下架": "テイクダウン",
+	"删除": "削除",
+	"商品券": "商品",
+	"品类券": "カテゴリー",
+	"通用券": "一般",
+	"优惠券": "伝票",
+	"满": "いっぱい",
+	"元可用": "使用済み",
+	"无门槛券": "しきい値なし",
+	"领取后": "受信",
+	"天内可用": "使用日数",
+	"已领取": "受け取りました",
+	"立即领取": "取得",
+	"购物满": "使う",
+	"减": "オフ",
+	"不限时": "無制限の時間",
+	"秒杀": "セクキル",
+	"砍价": "掘り出し物",
+	"拼团": "グループ",
+	"已售": "売却",
+	"立即购买": "今すぐ購入",
+	"加入购物车": "カートに入れる",
+	"选规格": "オプション",
+	"跳过": "次へ",
+	"立即体验": "今行く",
+	"首页": "ホーム",
+	"搜索": "検索",
+	"购物车": "カート",
+	"我的收藏": "集める",
+	"个人中心": "私のもの",
+	"券": "声",
+	"正在加载中": "読み込んでいます...",
+	"上拉加载更多": "Pull Up Loading More",
+	"代付金额": "金額",
+	"共": "の合計",
+	"件商品": "アイテム",
+	"订单包裹": "注文品",
+	"申请退款中": "返金",
+	"已退款": "返金",
+	"已完成": "完了",
+	"件退款中": "返金中のアイテム",
+	"不支持配送": "店内のみ",
+	"不支持自提": "配送のみ",
+	"已评价": "評価済み",
+	"评价": "レビュー",
+	"申请退款": "返金",
+	"查看物流": "物流",
+	"确认收货": "注文を取る",
+	"选择付款方式": "PayType を選択",
+	"支付": "支払う",
+	"去付款": "支払う",
+	"请选择要支付的订单": "注文を選択",
+	"余额不足": "不十分なバランス",
+	"支付中": "支払い中...",
+	"缺少支付参数": "支払いパラメータがありません",
+	"取消支付": "支払いのキャンセル",
+	"支付成功": "支払い成功",
+	"支付失败": "支払いに失敗しました",
+	"库存": "ストック",
+	"限量": "リミット",
+	"数量": "数量",
+	"我要参团": "グループに参加",
+	"确定": "わかりました",
+	"热门推荐": "ホットなおすすめ",
+	"最高返佣": "最高",
+	"推广享佣金": "宣伝",
+	"立即分享": "今すぐ共有",
+	"发现新版本": "新しいバージョン",
+	"立即升级": "アップグレード",
+	"下载进度": "進捗状況",
+	"店小二": "ウェイター",
+	"暂无记录": "データなし",
+	"正在下载海报,请稍后再试": "ポスターをダウンロードしています。後でもう一度お試しください",
+	"海报二维码生成失败": "ポスター QR コードの生成に失敗しました",
+	"倒计时": "カウントダウン",
+	"天": "D",
+	"时": "H",
+	"分": "M",
+	"秒": "S",
+	"砍价成功": "交渉成功",
+	"活动已结束": "活動停止",
+	"已砍至": "にカット",
+	"活动进行中": "処理中...",
+	"取消活动": "キャンセル",
+	"继续砍价": "続ける",
+	"暂无砍价记录": "データなし",
+	"人正在参与": "参加中",
+	"最低": "最低",
+	"参与砍价": "掘り出し物",
+	"砍价列表": "バーゲンリスト",
+	"人查看": "ビュー",
+	"人分享": "シェア",
+	"人参与": "関与",
+	"邀请您帮忙砍价": "助けてください",
+	"查看商品": "アイテムを見る",
+	"当前": "現在",
+	"已砍": "みじん切り",
+	"还剩": "左",
+	"立即参与砍价": "お買い得",
+	"商品暂无库存": "在庫切れ",
+	"邀请好友帮砍价": "友達を招待ヘルプ",
+	"已有": "持っている",
+	"位好友成功砍价": "友達成功",
+	"帮好友砍一刀": "友達を助ける",
+	"好友已砍价成功": "フレンドはすでに成功しています",
+	"我也要参与": "参加します",
+	"已成功帮助好友砍价": "友達の成功を助ける",
+	"恭喜您砍价成功,快去支付": "交渉成功、支払いに行く",
+	"立即支付": "今すぐ支払う",
+	"抢更多商品": "もっとつかむ",
+	"砍价帮": "交渉団",
+	"砍掉": "カットオフ",
+	"更多": "もっと",
+	"关闭": "閉じる",
+	"点击加载更多": "クリックしてさらに読み込む",
+	"商品详情": "詳細",
+	"砍价规则": "取引ルール",
+	"您已砍掉": "切りました",
+	"元,听说分享次数越多砍价成功的机会越大哦": ", 共有する回数が多いほど、交渉が成功する可能性が高くなります",
+	"成功帮砍": "カットに成功しました",
+	"您也可以砍价低价拿哦,快去挑选心仪的商品吧": "あなたも値下げして安く手に入れて、お気に入りの商品を選びに行きましょう",
+	"发送给朋友": "友達を送る",
+	"微信好友": "微信友達",
+	"微信朋友圈": "WeChat モーメント",
+	"生成海报": "ポスターを生成",
+	"砍价详情": "バーゲンの詳細",
+	"分享成功": "共有成功",
+	"分享失败": "共有に失敗しました",
+	"该商品每人限购": "この商品はお一人様限定購入",
+	"您的好友": "あなたの友達",
+	"邀请您砍价": "カットを招待",
+	"人团": "人",
+	"去拼团": "行く",
+	"拼团列表": "グループリスト",
+	"类型": "タイプ",
+	"累计销量": "販売合計",
+	"限购": "リミット",
+	"种规格可选": "仕様",
+	"已拼": "スペル",
+	"件": "ピース",
+	"还差": "のみ",
+	"人成团": "成功",
+	"去拼单": "参加",
+	"查看更多": "もっと",
+	"收起": "片付ける",
+	"拼团玩法": "グループプロセス",
+	"开团/参团": "スタート",
+	"邀请好友": "招待状",
+	"满员发货": "配達",
+	"用户评价": "レビュー",
+	"好评率": "賞賛率",
+	"产品介绍": "詳細",
+	"单独购买": "単独で購入",
+	"立即开团": "開始グループ",
+	"请选择": "選択済み",
+	"商品": "製品",
+	"详情": "詳細",
+	"缺少参数无法查看商品": "パラメーターがないため商品を表示できません",
+	"参数错误": "パラメータエラー",
+	"已选择": "選択済み",
+	"保存成功": "保存された成功",
+	"保存失败": "保存に失敗しました",
+	"人拼": "人々の戦い",
+	"剩余": "残り",
+	"结束": "完了",
+	"恭喜您拼团成功": "グルーピング成功おめでとうございます",
+	"人,拼团失败": "人が去り、グループは失敗しました",
+	"拼团中,还差": "グループには、まだあります",
+	"人拼团成功": "グループへの参加に成功した人",
+	"邀请好友参团": "友達をグループに招待",
+	"再次开团": "再編成",
+	"取消开团": "キャンセル",
+	"查看订单信息": "注文を見る",
+	"大家都在拼": "すべてのグループ",
+	"更多拼团": "もっと",
+	"邀请您参团": "招待して参加",
+	"你不是该团的成员": "あなたはグループのメンバーではありません",
+	"已抢": "奪われた",
+	"抢购中": "すぐつかむ",
+	"未开始": "開始されていません",
+	"已结束": "オーバー",
+	"暂无商品,去看点别的吧": "商品がありません",
+	"即将开始": "開始されていません",
+	"距秒杀结束仅剩": "残りは最後まで",
+	"累计销售": "売却",
+	"收藏": "集める",
+	"保存到手机": "電話に保存",
+	"长按图片可以保存到手机": "電話に保存するには長押し",
+	"抢购详情页": "スナップ購入の詳細ページ",
+	"二维码获取失败": "QR コードの取得に失敗しました",
+	"请选择属性": "プロパティを選択してください",
+	"提示:点击图片即可保存至手机相册": "ヒント: 写真をクリックして電話のアルバムに保存します",
+	"拼团海报": "パズルポスター",
+	"砍价海报": "値切りポスター",
+	"海报生成中": "ポスターを作成中",
+	"海报图片获取失败": "ポスター画像の取得に失敗しました",
+	"海报": "ポスター",
+	"已预定": "予約済み",
+	"预售价": "先行販売",
+	"立即预定": "今すぐ予約",
+	"开售时间": "販売時間",
+	"预售活动": "プレセールイベント",
+	"起": "ライズ",
+	"划线价": "ORP",
+	"开通“超级会员”立省": "'スーパー メンバー' をオフにする",
+	"元": "¥",
+	"立即开通": "今すぐ有効化",
+	"预售活动时间": "先行販売時間",
+	"预售结束后": "以内に発送 ",
+	"天内发货": "先行販売終了後の日数",
+	"活动": "アクティビティ",
+	"参与秒杀": "セキル",
+	"参与拼团": "グループ",
+	"复制口令": "商品コードをコピー",
+	"复制成功": "コピー成功",
+	"推荐": "推奨",
+	"缺少经纬度信息无法查看地图": "緯度と経度の情報が不足しているため、地図を表示できません",
+	"产品库存不足,请选择其它属性": "製品在庫が不足しています。別の属性を選択してください",
+	"立即退款": "即時返金",
+	"一键改价": "価格変更",
+	"订单备注": "注文メモ",
+	"商品总价": "合計金額",
+	"原始邮费": "古い郵便料金",
+	"实际支付": "実際の価格",
+	"退款金额": "返金価格",
+	"请填写备注信息": "備考欄にご記入ください",
+	"立即修改": "今すぐ編集",
+	"确认退款": "返金の確認",
+	"拒绝退款": "返金拒否",
+	"取消": "キャンセル",
+	"订单号": "オーダーID",
+	"发货方式": "モード",
+	"发货类型": "配送タイプ",
+	"快递公司": "エクスプレス",
+	"快递单号": "数",
+	"顺丰请输入单号 :收件人或寄件人手机号后四位": "SF Express の追跡番号を入力してください: 受信者または送信者の携帯電話番号の下 4 桁",
+	"例如:SF000000000000:3941": "例: SF000000000000:3941",
+	"电子面单": "電子シート",
+	"预览": "プレビュー",
+	"寄件人姓名": "送信者名",
+	"填写寄件人姓名": "送信者名を入力",
+	"寄件人电话": "送信者の電話",
+	"填写寄件人电话": "送信者の電話番号を入力",
+	"寄件人地址": "送信者アドレス",
+	"填写寄件人地址": "送信者アドレスを入力",
+	"送货人": "配達員",
+	"确认提交": "送信",
+	"发货": "船",
+	"送货": "与える",
+	"无需物流": "必要ありません",
+	"手动填写": "手入力",
+	"电子面单打印": "電子シート",
+	"填写快递单号": "宅配便番号を記入してください",
+	"请选择电子面单": "電子レシートを選択してください",
+	"待付款": "支払う",
+	"待发货": "出荷する",
+	"待收货": "受け取る",
+	"待评价": "評価する",
+	"售后/退款": "返金",
+	"数据统计": "統計",
+	"今日成交额": "本日販売",
+	"昨日成交额": "昨日販売",
+	"本月成交额": "販売月",
+	"今日订单数": "今日の注文",
+	"昨日订单数": "昨日の注文",
+	"本月订单数": "月次注文",
+	"详细数据": "詳細データ",
+	"日期": "日付",
+	"订单数": "注文数",
+	"成交额": "ターンオーバー",
+	"立即核销": "今すぐ書き留める",
+	"查看": "ビュー",
+	"确定要核销此订单吗": "本当にこの注文を取り消しますか",
+	"确定核销": "検証",
+	"请输入核销码": "確認コードを入力してください",
+	"请输入正确的核销码": "正しい確認コードを入力してください",
+	"查询中": "クエリ中",
+	"订单": "注文",
+	"订单未备注,点击添加备注信息": "注文にはコメントがありません。クリックしてコメントを追加してください",
+	"复制": "コピー",
+	"件商品,应支付": "アイテム、支払わなければならない",
+	"邮费": "送料",
+	"订单编号": "オーダーID",
+	"下单时间": "注文時間",
+	"支付状态": "支払い状況",
+	"已支付": "有料",
+	"未支付": "無給",
+	"支付方式": "支払方法",
+	"买家留言": "買い手 MSG",
+	"支付金额": "支払額",
+	"优惠券抵扣": "クーポン控除",
+	"运费": "料金",
+	"实付款": "実額",
+	"配送方式": "配送方法",
+	"快递": "速達",
+	"送货人电话": "宅配便",
+	"确认付款": "支払いの確認",
+	"去发货": "出荷する",
+	"改价成功": "価格が正常に変更されました",
+	"改价失败": "価格変更に失敗しました",
+	"请输入备注": "メモを入力してください",
+	"退款中": "返金",
+	"部分退款中": "一部返金",
+	"件商品,实付款": "商品、入金済み",
+	"同意退货": "返品に同意",
+	"待用户发货": "出荷されていません",
+	"请输入正确的金额": "正しい金額を入力してください",
+	"今天": "今日",
+	"昨天": "昨日",
+	"最近7天": "過去 7 日間",
+	"本月": "月",
+	"自定义": "カスタマイズ",
+	"营业额(元)": "ターンオーバー",
+	"订单量(份)": "数量",
+	"增长率": "上昇率",
+	"增长": "増やす",
+	"单位": "ユニット",
+	"元.": "元",
+	"分.": "セント",
+	"固定": "固定",
+	"指定范围": "スコープ",
+	"提交时间": "提出時間",
+	"原因": "理由",
+	"暂无申请记录,快去申请吧!": "まだ申請記録がありません。今すぐ申請してください!",
+	"没有更多啦": "これ以上",
+	"待审核": "審査待ち",
+	"审核通过": "審査通過",
+	"审核未通过": "レビューに失敗しました",
+	"编辑": "編集",
+	"重新提交": "再提出",
+	"会员优惠价": "VIP割引",
+	"余额支付": "バランスペイ",
+	"可用余额": "バランス",
+	"微信支付": "WeChatペイ",
+	"确认": "確認",
+	"支付提醒": "支払い通知",
+	"线下支付已关闭,请点击确认按钮返回主页": "オフライン決済は終了しました。確認ボタンをクリックしてホームページに戻ってください",
+	"请输入支付金额": "お支払い金額を入力してください",
+	"正在确认": "確認中",
+	"进入商城": "モールに入る",
+	"代理商名称": "代理店名",
+	"请输入代理商名称": "代理店名を入力してください",
+	"用户姓名": "あなたの名前",
+	"请输入姓名": "お名前を入力してください",
+	"联系电话": "あなたの電話",
+	"请输入手机号": "電話番号を入力してください",
+	"验证码": "OTP コード",
+	"填写验证码": "OTP コードを入力",
+	"邀请码": "招待コード",
+	"请输入代理商邀请码": "招待コードを入力",
+	"请上传营业执照及行业相关资质证明图片": "営業許可証や業界関係資格証明書の写真をアップロードしてください",
+	"图片最多可上传10张,图片格式支持JPG、PNG、JPEG": "最大 10 枚の画像をアップロードでき、画像形式は JPG、PNG、JPEG をサポートしています",
+	"上传图片": "アップロード",
+	"已阅读并同意": "読んで同意する",
+	"代理商协议": "代理店契約",
+	"提交申请": "申し込みを送信",
+	"代理商入驻协议": "エージェント契約",
+	"恭喜,您的资料提交成功!": "おめでとうございます。正常に送信されました!",
+	"返回首页": "家に帰る",
+	"恭喜,您的资料通过审核!": "おめでとう、審査通過!",
+	"您的申请未通过!": "申請は却下されました!",
+	"重新申请": "再申請",
+	"获取验证码": "OTP コードを取得",
+	"请输入正确的手机号码": "正しい電話番号を入力してください",
+	"重新获取": "再取得",
+	"请上传营业执照": "営業許可証をアップロードしてください",
+	"请勾选并同意入驻协议": "職業協定にチェックを入れて同意してください",
+	"专题栏": "トピック列",
+	"暂无数据": "データなし",
+	"请输入卡号": "カード番号を入力してください",
+	"请输入卡密": "パスワードを入力してください",
+	"确认激活": "確認",
+	"SVIP会员尊享权": "SVIP会員特権",
+	"正在激活": "起動中",
+	"已使用": "中古",
+	"永久SVIP会员": "永久SVIPメンバー",
+	"SVIP会员": "SVIP メンバー",
+	"到期": "成熟度",
+	"您与": "あなたと",
+	"商城的第": "モール",
+	"天.": " 日.",
+	"已累积为您节省": "累積貯蓄",
+	"开通即享会员权益": "会員特典をお楽しみください",
+	"续费会员": "更新",
+	"开通会员": "SVIPに参加",
+	"有效期至": "まで有効",
+	"试用": "やってみる",
+	"购买即视为同意": "同意として購入",
+	"会员用户协议": "SVIP 契約",
+	"点击兑换卡密": "クリックしてカードを引き換える",
+	"会员优惠券": "SVIPクーポン",
+	"SVIP商品推荐": "SVIP 推奨",
+	"商城价": "モール価格",
+	"激活会员卡": "カードを有効にする",
+	"支付宝支付": "アリペイ",
+	"成功开启0元试用": "0 元トライアルの開始に成功しました",
+	"确认绑定": "バインディングを確認",
+	"绑定成功": "バインド成功",
+	"商城客服已离线": "カスタマー サービスはオフラインです",
+	"我要反馈": "フィードバックが欲しい",
+	"请填写内容": "内容を記入してください",
+	"提交": "送信",
+	"精品推荐": "推奨",
+	"热门榜单": "人気",
+	"首发新品": "新しい",
+	"促销单品": "プロモーション",
+	"预告": "お知らせ",
+	"回放": "再生",
+	"进行中": "処理",
+	"发送客服": "送信",
+	"客服连接中": "カスタマー サービスが接続中",
+	"连接失败": "接続に失敗しました",
+	"提示": "ヒント",
+	"客服已下线,是否需要反馈?": "カスタマー サービスがオフラインです。フィードバックが必要ですか?",
+	"和好友一起分享": "友達と共有",
+	"积分抵扣": "減点",
+	"已开票": "請求済み",
+	"未开票": "請求されていません",
+	"发票信息": "請求書情報",
+	"发票抬头": "請求書",
+	"发票抬头类型": "請求書ヘッダーの種類",
+	"个人": "あたり",
+	"企业": "COM",
+	"发票类型": "請求書の種類",
+	"电子普通发票": "電子一般請求書",
+	"电子专用发票": "電子特別請求書",
+	"企业税号": "事業税",
+	"联系信息": "連絡先情報",
+	"真实姓名": "本名",
+	"联系邮箱": "電子メール",
+	"抬头选择": "頭の選択",
+	"默认": "デフォルト",
+	"普通": "普通",
+	"专用": "専用",
+	"您还没有添加发票信息哟": "請求書情報が追加されていません",
+	"添加新的抬头": "新しいヘッダーを追加",
+	"不开发票": "請求書がありません",
+	"抽奖": "宝くじ",
+	"全选": "すべて選択",
+	"属性": "属性",
+	"请填写具体地址": "具体的な住所を記入してください",
+	"省": "都道府県",
+	"市": "都市",
+	"区": "エリア",
+	"添加成功": "正常に追加",
+	"您已拒绝导入微信地址权限": "WeChat アドレスをインポートする権限が拒否されました",
+	"是否进入权限管理,调整授权?": "権限管理に入り、権限を調整しますか?",
+	"已取消": "キャンセル",
+	"添加失败": "追加に失敗しました",
+	"请填写收货人姓名": "荷受人の名前を記入してください",
+	"请选择所在地区": "地域を選択してください",
+	"请填写详细地址": "詳しい住所を記入してください",
+	"星": "スター",
+	"商品满足你的期待么?说说你的想法,分享给想买的他们吧": "製品はあなたの期待を満たしていますか?ご意見をお聞かせください。購入希望者と共有してください。",
+	"立即评价": "今すぐ評価",
+	"商品质量": "製品の品質",
+	"服务态度": "サービス態度",
+	"缺少参数": "パラメータがありません",
+	"请填写你对宝贝的心得": "製品についての意見を記入してください",
+	"正在发布评论": "コメントの投稿",
+	"感谢您的评价": "レビューありがとうございます",
+	"评价完成": "レビューが完了しました",
+	"恭喜您": "おめでとう",
+	"获得": "取得",
+	"机会": "チャンス",
+	"领取成功": "正常に受信しました",
+	"评分": "スコア",
+	"全部": "すべて",
+	"好评": "賛美",
+	"中评": "平均",
+	"差评": "悪い",
+	"加载更多": "さらに読み込んでいます",
+	"千米距离": "キロメートル先",
+	"搜索商品名称": "検索商品",
+	"价格": "価格",
+	"销量": "売却",
+	"新品": "新しい",
+	"已全部加载": "すべてロード済み",
+	"缺少订单号": "オーダー ID がありません",
+	"退货件数": "返金された番号",
+	"退款类型": "返金タイプ",
+	"退款原因": "返金理由",
+	"备注说明": "コメント",
+	"填写备注信息,100字以内": "100 語以内のコメント",
+	"仅退款": "返金のみ",
+	"退货并退款": "返品と返金",
+	"申请成功": "申し込み成功",
+	"请先选择退货商品": "最初に返品アイテムを選択してください",
+	"搜索历史": "検索履歴",
+	"热门搜索": "ホットサーチ",
+	"请输入要搜索的商品": "検索したい商品を入力してください",
+	"正在搜索中": "検索中",
+	"中奖记录": "優勝記録",
+	"我的奖品": "私の賞品",
+	"活动规则": "アクティビティ ルール",
+	"昵称": "ニックネーム",
+	"序号": "シリアル",
+	"奖品名称": "賞品名",
+	"获奖时间": "勝利時間",
+	"商家暂未上架活动哦": "マーチャントはまだイベントをリストしていません",
+	"获取抽奖信息": "懸賞情報を取得",
+	"奖品类型": "賞品の種類",
+	"立即兑换": "今すぐ交換",
+	"兑换时间": "交換時間",
+	"暂无中奖记录": "優勝記録なし",
+	"积分": "ポイント",
+	"余额": "バランス",
+	"红包": "現金",
+	"设置收货地址": "配送先住所の設定",
+	"暂无门店信息": "ストア情報がありません",
+	"剩余积分": "残りポイント",
+	"当前积分": "現在のポイント",
+	"开具发票": "請求書",
+	"请填写": "記入してください",
+	"配送运费": "送料",
+	"会员商品优惠": "製品オファー",
+	"会员运费优惠": "配送オファー",
+	"合计": "合計",
+	"使用微信快捷支付": "WeChatクイック決済",
+	"使用支付宝支付": "アリペイで支払う",
+	"线下支付": "オフライン決済",
+	"使用线下付款": "オフライン決済を使用",
+	"好友代付": "友達が支払う",
+	"找微信好友支付": "お金を払う友達を探す",
+	"立即使用": "使用",
+	"请选择要购买的商品": "購入するアイテムを選択してください",
+	"发票": "請求書",
+	"不使用": "使わない",
+	"订单创建成功": "注文が正常に作成されました",
+	"请选择支付方式": "支払い方法を選択してください",
+	"请选择收货地址": "配送先住所を選択してください",
+	"请填写联系人或联系人电话": "担当者または連絡先電話番号を入力してください",
+	"暂无门店,请选择其他方式": "現在ストアがありません。別の方法を選択してください",
+	"请输入": "入力してください",
+	"请输入正确的": "正しいものを入力してください",
+	"请上传": "アップロードしてください",
+	"订单支付中": "支払中",
+	"请按以上退货信息将商品退回": "情報とともにアイテムを返品してください",
+	"请联系管理员获取退货地址": "返送先住所については管理者にお問い合わせください",
+	"待核销": "取り消された",
+	"核销信息": "償却情報",
+	"营业时间": "営業時間",
+	"每日": "毎日",
+	"使用说明": "使用説明書",
+	"可将二维码出示给店员扫描或提供数字核销码": "QR コードを店員に提示して、デジタル検証コードをスキャンまたは提供することができます",
+	"可将二维码出示给配送员进行核销": "確認のためにQRコードを配送業者に提示できます",
+	"查看位置": "場所を見る",
+	"拒绝原因": "拒否理由",
+	"联系客服": "連絡先",
+	"商家备注": "マーチャントノート",
+	"收货人": "レシーバー",
+	"收货地址": "配送先住所",
+	"配送人姓名": "船名",
+	"拨打": "コール",
+	"虚拟发货": "仮想船",
+	"已发货,请注意查收": "出荷されました。確認してください",
+	"虚拟备注": "仮想メモ",
+	"总代付": "合計金額",
+	"申请开票": "請求書を適用",
+	"查看发票": "請求書を表示",
+	"取消订单": "キャンセル",
+	"立即付款": "支払う",
+	"批量退款": "一括返金",
+	"查看拼团": "ビューグループ",
+	"再次购买": "再購入",
+	"取消申请": "適用をキャンセル",
+	"填写退货信息": "リターン情報",
+	"查看退货物流": "物流",
+	"您确认放弃此次申请吗": "このアプリケーションを放棄してもよろしいですか",
+	"操作成功": "操作が成功しました",
+	"订单信息不存在": "注文情報が存在しません",
+	"为保障权益,请收到货确认无误后,再确认收货": "権利と利益を保護するために、商品が正しいことを確認した後、商品の受け取りを確認してください.",
+	"删除订单": "注文を削除",
+	"确定删除该订单": "削除注文を確認",
+	"删除成功": "正常に削除されました",
+	"确认取消该订单": "注文のキャンセルを確認",
+	"订单信息": "注文情報",
+	"消费订单": "注文",
+	"总消费": "合計金額",
+	"预售": "プレセール",
+	"线下付款,未支付": "オフライン未払い",
+	"未核销": "取り消されていません",
+	"件商品,总金额": "アイテム、合計金額",
+	"查看详情": "ビュー",
+	"暂无订单": "まだ注文がありません",
+	"缺少订单号无法取消订单": "注文番号のない注文はキャンセルできません",
+	"订单支付成功": "注文は正常に支払われました",
+	"订单支付失败": "注文の支払いに失敗しました",
+	"暂未支付": "未払い",
+	"失败原因": "失敗した理由",
+	"重新购买": "買戻し",
+	"重新支付": "再度支払う",
+	"赠送优惠券": "クーポンをプレゼント",
+	"有效期": "妥当性",
+	"缺少参数无法查看订单支付状态": "パラメーターが不足しているため、注文の支払い状況を表示できません",
+	"最多可上传3张": "最大 3 回のアップロード",
+	"请选择产品": "製品を選択してください",
+	"该产品没有更多库存了": "この商品の在庫はありません",
+	"优品推荐": "最高のおすすめ",
+	"暂无产品": "商品はまだありません",
+	"重新选择": "再選択",
+	"请选择数量": "数量を選択してください",
+	"砍价专区·BARGAINING": "交渉",
+	"立即砍价": "今すぐカット",
+	"拼团活动": "グループ",
+	"人拼团成功.": "人々は成功した",
+	"人参团": "高麗人参群",
+	"拼团价": "グループ価格",
+	"已过期": "期限切れ",
+	"关注": "フォロー",
+	"推荐好货": "おすすめ商品",
+	"暂无商品": "商品はまだありません",
+	"限时秒杀": "時間制限スパイク",
+	"抢": "グラブ",
+	"广告位": "ADVスペース",
+	"精彩内容": "ハイライト",
+	"砍价模块,暂无数据": "お買い得モジュール、まだデータがありません",
+	"砍价活动": "掘り出し物",
+	"呼朋唤友来砍价": "友達にバーゲンを呼ぶ",
+	"拼团模块,暂无数据": "グループ モジュール、データがまだありません",
+	"享超值开团价": "お得な団体料金をお楽しみください",
+	"优惠券,暂无数据": "クーポン、一時的にデータがありません",
+	"领取今日好券": "今日のお得なクーポンをゲット",
+	"可用": "使用済み",
+	"领取": "クレーム",
+	"客服": "サービス",
+	"商品列表,暂无数据": "一時的にデータがありません",
+	"搜索商品": "商品検索",
+	"暂无图片,请上传图片": "画像はありません。アップロードしてください",
+	"首发新品,暂无数据": "最初の新製品、まだデータがありません",
+	"多个优质商品最新上架": "最新の高品質商品が棚に並んでいます",
+	"暂无新闻,请上传新闻": "ニュースがありません。ニュースをアップロードしてください",
+	"热度 TOP": "ヒートトップ",
+	"排行榜、暂无数据": "リーダーボード、一時的にデータがありません",
+	"促销单品,暂无数据": "プロモーション アイテム、一時的にデータがありません",
+	"库存商品优惠促销活动": "在庫商品のプロモーション活動",
+	"精品推荐,暂无数据": "ブティックの推奨事項、データはまだありません",
+	"上百种商品分类任您选择": "何百もの製品カテゴリから選択できます",
+	"秒杀模块,暂无数据": "Seckill モジュール、一時的にデータがありません",
+	"场": "サイト",
+	"暂无数据,请设置": "データがありません。設定してください",
+	"暂无数据,请先添加分类": "データがありません。最初に分類を追加してください",
+	"暂无标题": "一時的にタイトルなし",
+	"诚意推荐品质商品": "誠意を持って高品質の商品をお勧めします",
+	"点击“立即关注”即可关注公众号": "「今すぐフォロー」をクリックして公式アカウントをフォロー",
+	"立即关注": "今すぐフォロー",
+	"添加到我的小程序, 微信首页下拉即可访问商城。": "アプレットに追加すると、wechat ホームページをプルダウンしてモールにアクセスできます",
+	"点击": "クリック",
+	"服务协议与隐私政策": "サービス契約とプライバシー ポリシー",
+	"请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。": "サービス契約とプライバシー ポリシーの条項を注意深く読み、完全に理解してください。これには、インスタント メッセージング、コンテンツ共有、およびその他のサービスを提供するために、デバイスを収集する必要があります。情報、操作ログ、その他の個人情報。個人情報を表示、変更、削除し、[設定] で承認を管理できます。",
+	"你可以阅读": "読めます",
+	"《服务协议与隐私政策》": "《サービス規約とプライバシーポリシー》",
+	"了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。": "もっと詳しく。同意する場合は、[同意する] をクリックして、サービスの受け入れを開始してください。",
+	"我同意": "同意します",
+	"残忍拒绝": "残酷な拒絶",
+	"下拉加载更多": "さらにプルダウン ロード",
+	"网络连接断开": "ネットワーク接続が切断されました",
+	"请检查情况:": "状態を確認してください:",
+	"在设置中是否已开启网络权限": "設定でネットワーク許可が有効になっているかどうか",
+	"当前是否处于弱网环境": "現在ネットワーク環境が弱い",
+	"版本是否过低,升级试试吧": "バージョンが低すぎる場合は、アップグレードしてみてください",
+	"重新连接": "再接続",
+	"加载中": "ロード中",
+	"没有更多内容啦~": "これ以上コンテンツはありません~",
+	"100%正品保证": "100%本物",
+	"所有商品精挑细选": "選り好みする",
+	"售后无忧": "売却後は安心",
+	"管理": "チューブ",
+	"购物数量": "ショッピング数量",
+	"请重新选择商品规格": "製品仕様を再選択してください",
+	"重选": "再選択",
+	"失效商品": "無効な商品",
+	"失效": "失敗",
+	"该商品已失效": "商品の有効期限が切れています",
+	"立即下单": "今すぐ注文",
+	"我也是有底线的": "私にも結論があります",
+	"产品库存不足,请选择其它": "商品在庫が不足しています。その他を選択してください",
+	"添加购物车成功": "ショッピング カートが正常に追加されました",
+	"清除成功": "クリーンアップが成功しました",
+	"暂无兑换记录~": "交換記録なし~",
+	"大家都在换": "誰もが変化している",
+	"人兑换": "人交換",
+	"轻松赚积分": "簡単にポイントを獲得",
+	"购买商品": "商品の購入",
+	"购买商品可获得积分奖励": "商品購入のポイント報酬",
+	"去完成": "行く",
+	"每日签到活动": "毎日のチェックイン活動",
+	"每日签到可获得积分奖励": "毎日のチェックインでポイント報酬を獲得できます",
+	"九宫格抽奖活动": "九公宝くじ",
+	"幸运抽奖可获得积分奖励": "くじ引きでポイントがもらえる",
+	"我的积分": "私のポイント",
+	"每日签到": "デイリーサインイン",
+	"积分抽奖": "ポイントくじ",
+	"兑换记录": "交換記録",
+	"已兑换": "償還済み",
+	"无法兑换": "交換できません",
+	"[默认]": "[デフォルト]",
+	"可用积分": "利用可能なポイント",
+	"快递费用": "速達料金",
+	"免运费": "送料無料",
+	"备注信息": "備考",
+	"请添加备注(150字以内)": "コメントを追加してください (150 ワード以内)",
+	"使用线上支付宝支付": "オンライン アリペイで支払う",
+	"可用余额:": "残高:",
+	"选择线下付款方式": "オフラインの支払い方法を選択",
+	"正在加载…": "読み込み中…",
+	"可用积分不足!": "ポイントが不足しています!",
+	"订单状态": "注文状況",
+	"支付积分": "ポイントを支払う",
+	"备注": "備考",
+	"配送核销码": "配送確認コード",
+	"当前可用余额:": "現在の利用可能残高:",
+	"正在加载": "ロード中",
+	"缺少经纬度信息无法查看地图!": "地図は緯度経度情報がないと見れません!",
+	"商品兑换成功": "正常に引き換えられました",
+	"兑换方式": "交換方法",
+	"积分兑换": "ポイント交換",
+	"兑换积分": "ポイントを交換",
+	"取消兑换": "交換をキャンセル",
+	"缺少参数无法查看订单兑换状态": "注文交換ステータスはパラメータなしでは表示できません",
+	"用户离开了": "ユーザーが退出しました",
+	"兑换成功": "正常に引き換えられました",
+	"物流公司": "物流会社",
+	"复制单号": "文書番号をコピー",
+	"设为默认": "デフォルトとして設定",
+	"添加新地址": "新しいアドレスを追加",
+	"导入微信地址": "wechat アドレスをインポート",
+	"取消选择": "選択解除",
+	"您设置的默认地址不存在!": "設定したデフォルトのアドレスは存在しません!",
+	"设置成功": "設定成功",
+	"您删除的地址不存在!": "あなたが削除したアドレスは存在しません!",
+	"获取头像": "アバターを取得",
+	"请点击授权": "承認をクリックしてください",
+	"绑定手机号": "携帯電話番号をバインド",
+	"永久": "永久",
+	"会员到期": "メンバーシップの有効期限",
+	"未开通会员": "開いていないメンバー",
+	"查看会员权益": "会員特典を見る",
+	"立即续费": "更新",
+	"立即激活": "アクティベーション",
+	"会员可享多项权益": "複数の特典をお楽しみください",
+	"订单中心": "私の注文",
+	"我的服务": "私のサービス",
+	"隐私协议": "プライバシー",
+	"商家管理": "経営管理",
+	"更新用户信息成功": "ユーザー情報が正常に更新されました",
+	"客服接待": "レセプション",
+	"点击复制网址去浏览器中打开": "[URL をコピー] をクリックしてブラウザで開く",
+	"点击复制": "コピーをクリック",
+	"完成支付": "支払い完了",
+	"点击右上角": "右上隅をクリック",
+	"选择 在浏览器 打开,去支付宝支付": "選択してブラウザで開き、Alipay で支払う",
+	"支付订单不存在,页面将在2秒后自动关闭!": "支払い注文は存在しません。ページは 2 秒後に自動的に閉じます! ",
+	"正在支付中": "支払中",
+	"支付订单不存在,页面将在2秒后自动关闭": "支払い注文は存在しません。ページは 2 秒後に自動的に閉じます",
+	"复制失败": "複製に失敗しました",
+	"您目前的排名": "現在のランキング",
+	"您目前暂无排名": "現在のランキング",
+	"暂无排名~": "ランキングなし~",
+	"输入手机号": "携帯電話番号を入力",
+	"输入验证码": "確認コードを入力してください",
+	"立即登录": "今すぐログイン",
+	"请填写手机号码": "携帯電話番号を入力してください",
+	"请填写验证码": "認証コードを入力してください",
+	"请输入正确的验证码": "正しい確認コードを入力してください",
+	"正在登录中": "ログイン中",
+	"登录成功": "ログイン成功",
+	"获取授权": "認証取得中",
+	"获取微信的手机号授权": "wechat 携帯電話番号認証を取得",
+	"获取微信手机号": "wechat モバイル番号を取得",
+	"输入手机号码": "携帯電話番号を入力してください",
+	"填写登录密码": "ログインパスワードを入力",
+	"登录": "ログイン",
+	"快速登录": "クイックログイン",
+	"账号登录": "アカウントのログイン",
+	"其他方式登录": "他の方法でログイン",
+	"登录中": "ログイン中",
+	"获取用户信息失败": "ユーザー情報の取得に失敗しました",
+	"请绑定手机号后,继续操作": "携帯電話番号をバインドして操作を続行してください",
+	"错误信息": "エラー情報",
+	"用户点击确定": "ユーザーが [OK] をクリックしました",
+	"用户点击取消": "ユーザーがキャンセルをクリックしました",
+	"登录失败": "ログイン失敗",
+	"请勿重复点击": "繰り返しクリックしないでください",
+	"请填写密码": "パスワードを入力してください",
+	"您输入的密码过于简单": "入力したパスワードは単純すぎます",
+	"请填写账号": "口座番号を入力してください",
+	"请输入正确的账号": "正しい口座番号を入力してください",
+	"[图片]": "[画像]",
+	"[语音]": "[声]",
+	"[商品]": "[製品]",
+	"[订单]": "[注文]",
+	"亲、暂无消息记录哟!": "親愛なる、メッセージレコードはまだありません!",
+	"站内消息": "駅メッセージ内",
+	"客服消息": "カスタマー サービス メッセージ",
+	"通知于": "に通知",
+	"获取详情中": "詳細を取得",
+	"代付订单创建成功,发给好友帮你付款吧~": "支払い注文が正常に作成されました。お友達に送って支払いを手伝ってもらいましょう ~",
+	"帮我付一下这件商品了,谢谢~": "この商品の支払いを手伝ってください。ありがとうございます ~",
+	"已经有人替我代付,谢谢啦~": "誰かが私にお金を払ってくれました、ありがとう~",
+	"谢谢你帮我支付,么么哒~": "支払いを手伝ってくれてありがとう、モーダ ~",
+	"我已为你代付成功,商家正在努力发货中~": "私はあなたの支払いに成功しました。マーチャントは配達しようとしています ~",
+	"好友代付成功,商家正在努力发货中~": "友達への支払いが成功し、マーチャントは配送を試みています ~",
+	"发送给微信好友": "微信の友達に送る",
+	"查看订单详情": "注文の詳細を見る",
+	"订单已支付": "支払い済みの注文",
+	"如果订单申请退款,已支付金额将原路退还给您": "注文が返金を申請する場合、支払われた金額は同じ方法で返金されます",
+	"代付成功": "支払いが成功しました",
+	"谢谢你为我付款,还可以再去看看其他商品哟~": "お金を払ってくれてありがとう。他の商品を見に行くことができます ~",
+	"该订单暂未支付": "注文はまだ支払われていません",
+	"人": "人",
+	"推广人数": "プロモーターの数",
+	"一级": "レベル 1",
+	"二级": "レベル 2",
+	"点击搜索会员名称": "クリックしてメンバー名を検索",
+	"团队排序": "チームの並べ替え",
+	"金额排序": "金額ソート",
+	"订单排序": "順序の並べ替え",
+	"单": "注文",
+	"加入时间": "参加時間",
+	"累积推广订单": "注文数",
+	"本月累计推广订单": "月次注文",
+	"返佣": "リベート",
+	"暂未返佣": "リベートしない",
+	"返佣时间": "リベート時間",
+	"单号": "注文番号",
+	"暂无推广订单~": "プロモーションオーダーなし ~",
+	"推广订单列表": "プロモーション注文リスト",
+	"找回密码": "パスワードを取得",
+	"填写您的新密码": "新しいパスワードを入力してください",
+	"加载失败": "読み込みエラー",
+	"点击授权登录您的客服工作台": "承認をクリックして、カスタマー サービス ワークベンチにログインしてください",
+	"授权登录": "承認されたログイン",
+	"没有登录的code,请重新扫码": "ログインなしのコードです。もう一度コードをスキャンしてください",
+	"员工人数": "従業員数",
+	"邀请": "招待状",
+	"分佣比例": "スケール",
+	"修改分佣比例": "比率を変更",
+	"请输入百分比": "パーセンテージを入力してください",
+	"删除员工": "従業員を削除",
+	"确定删除该员工?": "この従業員を削除してもよろしいですか?",
+	"请输入比例": "スケールを入力してください",
+	"分类": "クラス",
+	"我的": "私のもの",
+	"姓名": "名前",
+	"请输入联系电话": "連絡先番号を入力してください",
+	"所在地区": "場所",
+	"详细地址": "アドレス",
+	"设置为默认地址": "既定のアドレスとして設定",
+	"立即保存": "今すぐ保存",
+	"浙江省": "浙江",
+	"杭州市": "杭州",
+	"滨江区": "浜江区",
+	"广东省": "広東省",
+	"广州市": "広州",
+	"番禺区": "番禺",
+	"修改地址": "住所変更",
+	"添加地址": "アドレスを追加",
+	"已取消!": "キャンセルしました!",
+	"请填写联系电话": "連絡先番号を入力してください",
+	"保存中": "保存中",
+	"修改成功": "変更が成功しました",
+	"消费": "消費",
+	"充值": "リチャージ",
+	"暂无账单的记录哦~": "一時的に請求の記録がありません~",
+	"点击【立即注销】即代表您已经同意《用户注销协议》": "[即時ログアウト] をクリックすると、ユーザー ログアウト同意書に同意したことになります",
+	"立即注销": "今すぐログオフ",
+	"是否确认注销": "ログアウトの確認",
+	"注销后无法恢复,请谨慎操作": "ログアウト後は復旧できません。ご注意ください",
+	"注销": "ログアウト",
+	"持卡人": "カード所有者",
+	"请输入持卡人姓名": "カード所有者名を入力",
+	"卡号": "カード番号",
+	"请填写卡号": "カード番号を入力してください",
+	"银行": "銀行",
+	"提现": "撤退",
+	"最低提现金额": "最低出金額",
+	"当前可提现金额": "現在の引き出し可能額",
+	"冻结佣金": "冷凍委員会",
+	"说明: 每笔佣金的冻结期为": "注: 各コミッションの凍結期間は",
+	"天,到期后可提现": "日数、有効期限後に引き出し可能",
+	"账号": "アカウント",
+	"请填写您的微信账号": "微信アカウントを記入",
+	"收款码": "コレクションコード",
+	"请填写您的支付宝账号": "Alipay アカウント番号を入力してください",
+	"请选择银行": "銀行を選択してください",
+	"银行卡": "銀行カード",
+	"微信": "微信",
+	"支付宝": "アリペイ",
+	"请填写持卡人姓名": "カード所有者の名前を記入してください",
+	"请填写微信号": "微信に記入してください",
+	"请填写提现金额": "引き出し金額を入力してください",
+	"提现金额不能低于": "出金額はこれより少なくすることはできません",
+	"未使用": "未使用",
+	"已使用/过期": "使用済み/期限切れ",
+	"通用劵": "一般証券",
+	"一级分佣上浮": "1 レベルアップ",
+	"二级分佣上浮": "セカンダリ フローティング",
+	"快速升级技巧": "クイック アップグレード スキル",
+	"未完成": "不完全",
+	"已领完": "収集",
+	"当前共": "現在の合計",
+	"取关": "オフ",
+	"请选择商品": "製品を選択してください",
+	"头像": "アバター",
+	"手机号码": "携帯電話番号",
+	"点击绑定手机号": "クリックしてバインド",
+	"ID号": "ID番号",
+	"权限设置": "パーミッション",
+	"点击管理": "管理",
+	"密码": "パスワード",
+	"点击修改密码": "変更をクリック",
+	"更换手机号码": "変更番号",
+	"点击更换手机号码": "クリックして",
+	"缓存大小": "キャッシュサイズ",
+	"当前版本": "現在のバージョン",
+	"地址管理": "アドレス",
+	"发票管理": "請求書",
+	"账号注销": "キャンセル",
+	"注销后无法恢复": "回復できません",
+	"累计积分": "累積ポイント",
+	"累计消费": "消費",
+	"冻结积分": "凝固点",
+	"积分规则": "積分規則",
+	"提示:积分数值的高低会直接影响您的会员等级": "ヒント: 会員レベルの値",
+	"提示:你有": "ヒント: あります",
+	"积分在": "インテグラルイン",
+	"过期,请尽快使用": "期限切れです。できるだけ早く使用してください",
+	"暂无积分记录哦~": "スコア記録が一時的にありません~",
+	"赚积分": "ポイントを獲得",
+	"分值明细": "スコアの詳細",
+	"分值提升": "スコアアップ",
+	"抬头类型": "ヘッダーの種類",
+	"增值税电子专用发票": "VAT 電子特別請求書",
+	"增值税电子普通发票": "電子普通付加価値税請求書",
+	"需要开具发票的姓名": "請求する名前",
+	"需要开具发票的企业名称": "請求書を発行する企業名",
+	"税号": "税番号",
+	"纳税人识别号": "納税者番号",
+	"手机号": "携帯電話番号",
+	"您的手机号": "あなたの携帯電話番号",
+	"邮箱": "メールボックス",
+	"您的联系邮箱": "あなたの連絡先メールボックス",
+	"开户银行": "預金銀行",
+	"您的开户银行": "あなたの預金銀行",
+	"银行账号": "銀行口座番号",
+	"您的银行账号": "銀行口座番号",
+	"企业地址": "企業アドレス",
+	"您所在的企业地址": "会社の住所",
+	"企业电话": "エンタープライズ電話",
+	"您的企业电话": "会社の電話",
+	"设置为默认抬头": "既定のヘッダーとして設定",
+	"保存": "保存",
+	"发票类型选择": "請求書タイプの選択",
+	"纸质发票开出后将以邮寄形式交付": "紙の請求書が発行された後、郵送されます",
+	"请输入需要开具发票的姓名": "請求先の名前を入力してください",
+	"请输入您的手机号": "携帯電話番号を入力してください",
+	"请正确输入您的手机号": "携帯電話番号を正しく入力してください",
+	"请输入您的联系邮箱": "連絡先メールアドレスを入力してください",
+	"请正确输入您的联系邮箱": "連絡先メールアドレスを正しく入力してください",
+	"请输入需要开具发票的企业名称": "請求書を発行する企業名を入力してください",
+	"请输入纳税人识别号": "納税者番号を入力してください",
+	"请正确输入纳税人识别号": "納税者番号を正しく入力してください",
+	"请输入您的开户银行": "預金銀行を入力してください",
+	"请输入您的银行账号": "銀行口座番号を入力してください",
+	"请正确输入您的银行账号": "銀行口座番号を正しく入力してください",
+	"请输入您所在的企业地址": "会社の住所を入力してください",
+	"请输入您的企业电话": "会社の電話番号を入力してください",
+	"发票记录": "請求記録",
+	"抬头管理": "ヘッダー管理",
+	"申请时间": "適用時間",
+	"没有发票信息哟~": "請求書情報がありません ~",
+	"个人普通发票": "個人の通常の請求書",
+	"企业普通发票": "企業の通常の請求書",
+	"企业专用发票": "エンタープライズ特別請求書",
+	"添加新发票": "新しい請求書を追加",
+	"删除该发票?": "この請求書を削除しますか?",
+	"发票编号": "請求書番号",
+	"发票备注": "請求書備考",
+	"快递号": "特急番号",
+	"总资产(元)": "総資産 (¥)",
+	"累计充值(元)": "Co リチャージ (¥)",
+	"累计消费(元)": "Co 花 (¥)",
+	"账单记录": "請求記録",
+	"消费记录": "記録",
+	"充值记录": "リチャージ",
+	"积分中心": "整数",
+	"签到领积分": "サインイン",
+	"赚积分抵现金": "ポイントを獲得",
+	"领取优惠券": "クーポン",
+	"满减享优惠": "全額割引",
+	"最新拼团活动": "最新のグループ活動",
+	"最新的优惠商品上架拼团": "棚にある最新の優待商品",
+	"立即参与": "参加",
+	"当前限时秒杀": "現在の制限時間 2 番目のキル",
+	"最新商品秒杀进行中": "進行中の最新の商品スパイク",
+	"我的余额": "バランス",
+	"赠送": "ギフト",
+	"其他": "その他",
+	"注意事项": "注意事項",
+	"冻结佣金为": "Frozen Commission is",
+	"立即转入": "即時転送",
+	"立即充值": "すぐに充電",
+	"请输入金额": "金額を入力してください",
+	"转入余额": "バランスの転送",
+	"转入余额后无法再次转出,确认是否转入余额": "残高で送金した後、再度送金することはできません。残高で送金するかどうかを確認してください",
+	"转入成功": "転送に成功しました",
+	"正在支付": "支払中",
+	"充值金额必须为数字": "リチャージ額は数値でなければなりません",
+	"充值金额不能为0": "充電量を 0 にすることはできません",
+	"填写手机号码": "携帯電話番号を入力",
+	"是否绑定账号": "バインド アカウント",
+	"绑定": "バインディング",
+	"您已取消绑定!": "バインドを解除しました!",
+	"当前手机号": "現在の携帯電話番号",
+	"设置新密码": "新しいパスワードを設定",
+	"确认新密码": "新しいパスワードを確認",
+	"手机号码不存在,无法发送验证码!": "携帯電話番号が存在しないため、確認コードを送信できません!",
+	"请输入新密码": "新しいパスワードを入力してください",
+	"两次输入的密码不一致!": "入力した 2 つのパスワードは矛盾しています!",
+	"请输入验证码": "確認コードを入力してください",
+	"暂无退款订单~": "返金注文なし ~",
+	"缺少订单号无法查看订单详情": "注文番号が欠落しており、注文の詳細を表示できません",
+	"明细": "デタス",
+	"第七天": "7 日目",
+	"第7天": "7日目",
+	"奖励": "報酬",
+	"已签到": "チェックイン",
+	"立即签到": "今すぐサインイン",
+	"已累计签到": "累積チェックイン",
+	"据说连续签到第": "2 回連続のサインイン",
+	"天可获得超额积分,一定要坚持签到哦~~~": "毎日超過ポイントを獲得できる場合は、サインインを主張する必要があります~~~",
+	"签到成功": "チェックイン成功",
+	"好的": "わかりました",
+	"您今日已签到!": "今日サインインしました! ",
+	"暂无签到记录~": "記録にサインがありません~",
+	"保存海报": "ポスターを保存",
+	"长按保存图片": "画像を保存するには長押し",
+	"分销海报": "配布ポスター",
+	"小程序二维码需要发布正式版后才能获取到": "アプレットの QR コードは、正式版の公開後にのみ取得できます",
+	"获取中": "取得",
+	"暂无数据~": "一時的にデータがありません ~",
+	"提现记录": "撤退",
+	"提现总额": "合計引き出し",
+	"佣金记录": "手数料記録",
+	"佣金明细": "手数料の詳細",
+	"分销等级": "配布レベル",
+	"昨日收益": "昨日の収益",
+	"累积已提": "累計撤回",
+	"代理商申请": "エージェント アプリケーション",
+	"立即提现": "撤退",
+	"推广名片": "名刺",
+	"推广人统计": "プロモーター統計",
+	"推广人订单": "プロモーターオーダー",
+	"推广订单": "プロモーション注文",
+	"事业部": "事業部",
+	"代理商": "エージェント",
+	"推广人排行": "プロモーターランキング",
+	"佣金排行": "手数料ランキング",
+	"员工列表": "従業員リスト",
+	"您目前暂无推广权限": "あなたには現在昇格権限がありません",
+	"商城购物可享": "モールで買い物",
+	"折": "割引",
+	"当前等级": "現在のレベル",
+	"未达成": "到達していません",
+	"今日成长值": "今日の成長値",
+	"点": "ポイント",
+	"我的成长值记录": "私の成長値記録",
+	"暂未解锁该等级": "このレベルはまだアンロックされていません",
+	"点,需达到": "ポイント、到達する必要があります",
+	"已解锁更高等级": "より高いレベルのロックを解除しました",
+	"我的成长特权": "私の成長特権",
+	"购物折扣": "割引",
+	"专属徽章": "限定バッジ",
+	"经验累积": "経験の蓄積",
+	"尊享客服": "専用サービス",
+	"签到": "チェックイン",
+	"可获得": "利用可能",
+	"点经验": "ポイント経験",
+	"每日签到可获得经验值,已签到": "デイリーサインインで経験値がもらえる、サインイン",
+	"去签到": "チェックイン",
+	"点经验/元": "経験値/¥",
+	"购买商品可获得对应的经验值": "商品を購入することで、対応する経験値を得ることができます",
+	"去购买": "買いに行く",
+	"点经验/人": "ポイント経験/人",
+	"邀请好友注册商城可获得经验值": "友人を招待してショッピングモールに登録し、経験値を獲得",
+	"去邀请": "招待",
+	"积分数": "製品分数",
+	"消费金额": "消費量",
+	"暂无经验记录": "実績なし",
+	"账户登录": "アカウントのログイン",
+	"微信登录": "微信ログイン",
+	"手机号登录": "モバイルログイン",
+	"账户充值": "リチャージ",
+	"佣金转入": "コミッション",
+	"周榜": "週間リスト",
+	"月榜": "月間リスト",
+	"周排行": "週間ランキング",
+	"月排行": "月間ランキング",
+	"语言切换": "言語",
+	"点击前往": "クリックして移動",
+	"查看全部": "すべて表示",
+	"查看订单": "注文を見る",
+	"无法获取图片信息": "画像情報を取得できません",
+	"长按或扫描查看": "長押しまたはスキャンビュー",
+	"点解锁": "ポイントロック解除",
+	"确认修改": "確認",
+	"保存修改": "保存",
+	"退出登录": "ログアウト",
+	"付费会员": "SVIP",
+	"地址信息": "アドレス",
+	"我的推广": "エクステンション",
+	"砍价记录": "掘り出し物",
+	"我的等级": "私のレベル",
+	"兑换": "GO",
+	"申请中": "アプリケーション",
+	"统计管理": "統計",
+	"退款": "払い戻し",
+	"未发货": "発行されていません",
+	"当前为最新版本": "現在最新バージョン",
+	"清除缓存": "キャッシュをクリア",
+	"确定清楚本地缓存数据吗": "ローカル キャッシュ データについて明確にしていますか",
+	"缓存清理完成": "キャッシュのクリーニングが完了しました",
+	"切换的账号不存在": "切り替えたアカウントは存在しません",
+	"正在切换中": "スイッチング",
+	"确认退出登录": "ログアウトを確認",
+	"我知道了": "なるほど",
+	"系统错误": "システム エラー",
+	"请求失败": "リクエストに失敗しました",
+	"邀请您加入": "あなたを参加に招待します",
+	"图片上传中": "アップロード",
+	"上传图片失败": "画像のアップロードに失敗しました",
+	"访问位置被拒绝": "アクセス場所が拒否されました",
+	"系统定位已关闭": "システムのポジショニングがオフになっています",
+	"需要定位权限": "位置情報の許可が必要",
+	"订单核销": "帳消し",
+	"当前可转入佣金为":"現在の譲渡可能手数料は",
+	"浏览记录":"閲覧履歴",
+	"签到奖励":"チェックイン特典",
+	"请输入内容":"コンテンツを入力してください",
+	"单次限购":"一回限り購入",
+	"永久限购":"永久購入制限",
+	"《用户协议》":"《ユーザー・プロトコル》",
+	"《隐私协议》":"《プライバシープロトコル》",
+	"与":"と",
+	"请先阅读并同意协议":"まずプロトコルを読んで同意してください",
+	"绑定下级通知":"下位通知のバインド",
+	"购买成功通知":"購入成功通知",
+	"确认收货通知":"出荷確認通知",
+	"改价通知":"価格変更通知",
+	"退款成功通知":"返金成功通知",
+	"充值成功通知":"チャージ成功通知",
+	"积分到账通知":"ポイント入金通知",
+	"佣金到账通知":"コミッション入金通知",
+	"砍价成功通知":"値切り成功通知",
+	"拼团成功通知":"コラージュ成功通知",
+	"拼团失败通知":"コラージュ失敗通知",
+	"开团成功通知":"開団成功通知",
+	"提现成功通知":"現金化成功通知",
+	"提现失败通知":"現金化失敗通知",
+	"充值退款通知":"チャージ返金通知",
+	"退款申请拒绝通知":"返金申請却下通知",
+	"您有新的退款待处理":"新規返金保留中",
+	"您有新的订单待处理":"新しい注文を処理しています",
+	"发货通知":"出荷通知",
+	"取消拼团通知":"コラージュ解除通知",
+	"参团成功通知":"参加成功通知",
+	"你有个新的提现申请待处理":"新しい現金引き出し申請があります",
+	"你有个新的用户收货待处理":"新しいユーザーが出荷保留中",
+	"提醒付款通知":"支払通知のリマインダ",
+	"短信验证码":"ショートメッセージ検証コード",
+	"到店自提":"じこちゅうしゅつ",
+	"快递配送":"速達配送"
+}

+ 1181 - 0
lang/ko_kr.json

@@ -0,0 +1,1181 @@
+{
+	"选择地址": "주소 선택",
+	"选择其它地址": "다른 주소 선택",
+	"已选商品": "선택한 상품",
+	"清空": "지우기",
+	"¥": "₩",
+	"已售罄": "매진",
+	"已下架": "테이크다운",
+	"删除": "삭제",
+	"商品券": "제품",
+	"品类券": "범주",
+	"通用券": "일반",
+	"优惠券": "상품권",
+	"满": "전체",
+	"元可用": "중고",
+	"无门槛券": "임계값 없음",
+	"领取后": "받기",
+	"天内可用": "일 사용",
+	"已领取": "받음",
+	"立即领取": "얻다",
+	"购物满": "지출",
+	"减": "꺼짐",
+	"不限时": "무제한 시간",
+	"秒杀": "세킬",
+	"砍价": "거래",
+	"拼团": "그룹",
+	"已售": "판매",
+	"立即购买": "지금 구매",
+	"加入购物车": "장바구니에 추가",
+	"选规格": "옵션",
+	"跳过": "다음",
+	"立即体验": "지금 가세요",
+	"首页": "집",
+	"搜索": "검색",
+	"购物车": "카트",
+	"我的收藏": "수집",
+	"个人中心": "내 것",
+	"券": "보.",
+	"正在加载中": "로드 중...",
+	"上拉加载更多": "더 불러오기",
+	"代付金额": "금액",
+	"共": "총 ",
+	"件商品": "아이템",
+	"订单包裹": "상품 주문",
+	"申请退款中": "환불",
+	"已退款": "환불",
+	"已完成": "완료",
+	"件退款中": "상품 환불",
+	"不支持配送": "매장에서만",
+	"不支持自提": "배송만",
+	"已评价": "평가",
+	"评价": "리뷰",
+	"申请退款": "환불",
+	"查看物流": "물류",
+	"确认收货": "주문 받기",
+	"选择付款方式": "지불 유형 선택",
+	"支付": "지불",
+	"去付款": "지불하다",
+	"请选择要支付的订单": "주문 선택",
+	"余额不足": "불충분한 균형",
+	"支付中": "결제 중...",
+	"缺少支付参数": "결제 매개변수 누락",
+	"取消支付": "결제 취소",
+	"支付成功": "결제 성공",
+	"支付失败": "결제 실패",
+	"库存": "재고",
+	"限量": "한계",
+	"数量": "수량",
+	"我要参团": "그룹 가입",
+	"确定": "알았어",
+	"热门推荐": "핫 추천",
+	"最高返佣": "최고",
+	"推广享佣金": "승진",
+	"立即分享": "지금 공유",
+	"发现新版本": "새 버전",
+	"立即升级": "업그레이드",
+	"下载进度": "진행",
+	"店小二": "웨이터",
+	"暂无记录": "데이터 없음",
+	"正在下载海报,请稍后再试": "포스터 다운로드 중, 나중에 다시 시도하세요",
+	"海报二维码生成失败": "포스터 QR 코드 생성 실패",
+	"倒计时": "카운트다운",
+	"天": "디",
+	"时": "하",
+	"分": "엠",
+	"秒": "S",
+	"砍价成功": "협상 성공",
+	"活动已结束": "활동 중지됨",
+	"已砍至": "잘라내기",
+	"活动进行中": "처리 중...",
+	"取消活动": "취소",
+	"继续砍价": "계속",
+	"暂无砍价记录": "데이터 없음",
+	"人正在参与": "참여",
+	"最低": "최저",
+	"参与砍价": "거래",
+	"砍价列表": "거래 목록",
+	"人查看": "보기",
+	"人分享": "공유",
+	"人参与": "관여",
+	"邀请您帮忙砍价": "도와주세요",
+	"查看商品": "항목 보기",
+	"当前": "현재",
+	"已砍": "다진",
+	"还剩": "왼쪽",
+	"立即参与砍价": "지금 흥정",
+	"商品暂无库存": "재고 없음",
+	"邀请好友帮砍价": "친구 초대하기",
+	"已有": "가지고",
+	"位好友成功砍价": "친구 성공",
+	"帮好友砍一刀": "친구를 도와주세요",
+	"好友已砍价成功": "친구는 이미 성공했습니다",
+	"我也要参与": "참여하겠습니다",
+	"已成功帮助好友砍价": "친구의 성공을 도와주세요",
+	"恭喜您砍价成功,快去支付": "교섭 성공, 지불하기",
+	"立即支付": "지금 지불",
+	"抢更多商品": "더 잡기",
+	"砍价帮": "협상 갱",
+	"砍掉": "차단",
+	"更多": "더",
+	"关闭": "닫기",
+	"点击加载更多": "더 로드하려면 클릭하세요",
+	"商品详情": "세부 사항",
+	"砍价规则": "거래 규칙",
+	"您已砍掉": "잘랐어요",
+	"元,听说分享次数越多砍价成功的机会越大哦": ", 더 많이 나눌수록 성공적인 교섭의 기회가 커집니다",
+	"成功帮砍": "잘라내기 성공",
+	"您也可以砍价低价拿哦,快去挑选心仪的商品吧": "저렴한 가격에 흥정도 할 수 있고, 마음에 드는 상품 골라서 가세요",
+	"发送给朋友": "친구 보내기",
+	"微信好友": "위챗 친구",
+	"微信朋友圈": "위챗 모멘트",
+	"生成海报": "포스터 생성",
+	"砍价详情": "할인 정보",
+	"分享成功": "공유 성공",
+	"分享失败": "공유 실패",
+	"该商品每人限购": "본 상품은 1인 구매 한정 상품입니다",
+	"您的好友": "당신의 친구",
+	"邀请您砍价": "초대장 컷",
+	"人团": "사람",
+	"去拼团": "가서",
+	"拼团列表": "그룹 목록",
+	"类型": "유형",
+	"累计销量": "총 판매",
+	"限购": "한계",
+	"种规格可选": "사양",
+	"已拼": "철자",
+	"件": "조각",
+	"还差": "오직",
+	"人成团": "성공",
+	"去拼单": "가입",
+	"查看更多": "더",
+	"收起": "치워 버리다",
+	"拼团玩法": "그룹 프로세스",
+	"开团/参团": "시작",
+	"邀请好友": "초대",
+	"满员发货": "배달",
+	"用户评价": "검토",
+	"好评率": "찬양율",
+	"产品介绍": "세부 사항",
+	"单独购买": "혼자 구매",
+	"立即开团": "그룹 시작",
+	"请选择": "선택됨",
+	"商品": "제품",
+	"详情": "세부 사항",
+	"缺少参数无法查看商品": "매개변수가 누락되어 제품을 볼 수 없습니다",
+	"参数错误": "매개변수 오류",
+	"已选择": "선택됨",
+	"保存成功": "저장된 성공",
+	"保存失败": "저장 실패",
+	"人拼": "사람들이 싸우다",
+	"剩余": "남은",
+	"结束": "마침",
+	"恭喜您拼团成功": "합격 축하합니다",
+	"人,拼团失败": "사람이 남음, 그룹 실패",
+	"拼团中,还差": "그룹에 아직 이 있습니다.",
+	"人拼团成功": "그룹에 성공적으로 합류하기 위해 남은 사람",
+	"邀请好友参团": "그룹에 가입할 친구 초대",
+	"再次开团": "재그룹",
+	"取消开团": "취소",
+	"查看订单信息": "주문 보기",
+	"大家都在拼": "모든 그룹",
+	"更多拼团": "더",
+	"邀请您参团": "당신을 초대합니다",
+	"你不是该团的成员": "당신은 그룹의 구성원이 아닙니다",
+	"已抢": "강탈",
+	"抢购中": "지금 잡아",
+	"未开始": "시작되지 않음",
+	"已结束": "오버",
+	"暂无商品,去看点别的吧": "제품 없음",
+	"即将开始": "시작되지 않음",
+	"距秒杀结束仅剩": "끝까지 남았습니다",
+	"累计销售": "매진",
+	"收藏": "수집",
+	"保存到手机": "전화에 저장",
+	"长按图片可以保存到手机": "전화에 저장하려면 길게 누르세요",
+	"抢购详情页": "스냅 구매 세부 정보 페이지",
+	"二维码获取失败": "QR 코드 가져오기 실패",
+	"请选择属性": "속성을 선택하십시오",
+	"提示:点击图片即可保存至手机相册": "팁: 사진을 클릭하시면 폰앨범에 저장됩니다",
+	"拼团海报": "퍼즐 포스터",
+	"砍价海报": "흥정 포스터",
+	"海报生成中": "포스터 생성 중",
+	"海报图片获取失败": "포스터 이미지 가져오기 실패",
+	"海报": "포스터",
+	"已预定": "예약됨",
+	"预售价": "예약판매",
+	"立即预定": "지금 예약",
+	"开售时间": "세일 시간",
+	"预售活动": "선판매 이벤트",
+	"起": "일어나다",
+	"划线价": "오피",
+	"开通“超级会员”立省": "'Super Member'를 해제하려면 ",
+	"元": "₩",
+	"立即开通": "지금 활성화",
+	"预售活动时间": "선판매 시간",
+	"预售结束后": "내 배송",
+	"天内发货": "선판매 종료 후 일",
+	"活动": "활동",
+	"参与秒杀": "세킬",
+	"参与拼团": "그룹",
+	"复制口令": "상품 코드 복사",
+	"复制成功": "복사 성공",
+	"推荐": "권장",
+	"缺少经纬度信息无法查看地图": "위도 및 경도 정보가 누락되어 지도를 볼 수 없습니다",
+	"产品库存不足,请选择其它属性": "제품 재고가 충분하지 않습니다. 다른 속성을 선택하세요.",
+	"立即退款": "즉시 환불",
+	"一键改价": "가격 변경",
+	"订单备注": "주문 메모",
+	"商品总价": "총 가격",
+	"原始邮费": "오래된 우표",
+	"实际支付": "실제 가격",
+	"退款金额": "환불 가격",
+	"请填写备注信息": "비고란에 기입해주세요",
+	"立即修改": "지금 편집",
+	"确认退款": "환불 확인",
+	"拒绝退款": "환불 거부",
+	"取消": "취소",
+	"订单号": "주문 ID",
+	"发货方式": "모드",
+	"发货类型": "배송 유형",
+	"快递公司": "익스프레스",
+	"快递单号": "숫자",
+	"顺丰请输入单号 :收件人或寄件人手机号后四位": "SF Express에 대한 추적 번호를 입력하십시오: 받는 사람 또는 보낸 사람의 휴대 전화 번호의 마지막 4자리",
+	"例如:SF000000000000:3941": "예: SF000000000000:3941",
+	"电子面单": "전자 시트",
+	"预览": "미리보기",
+	"寄件人姓名": "발신자 이름",
+	"填写寄件人姓名": "발신자 이름 입력",
+	"寄件人电话": "발신자 전화",
+	"填写寄件人电话": "발신자 전화번호 입력",
+	"寄件人地址": "발신자 주소",
+	"填写寄件人地址": "발신자 주소 입력",
+	"送货人": "배달맨",
+	"确认提交": "제출",
+	"发货": "배",
+	"送货": "주다",
+	"无需物流": "필요 없음",
+	"手动填写": "수동으로 채우기",
+	"电子面单打印": "전자 시트",
+	"填写快递单号": "택배 번호를 입력하세요",
+	"请选择电子面单": "전자영수증을 선택하세요",
+	"待付款": "지불하다",
+	"待发货": "배송",
+	"待收货": "받다",
+	"待评价": "평가",
+	"售后/退款": "환불",
+	"数据统计": "통계",
+	"今日成交额": "오늘 판매",
+	"昨日成交额": "어제 판매",
+	"本月成交额": "판매된 달",
+	"今日订单数": "오늘 주문",
+	"昨日订单数": "어제 주문",
+	"本月订单数": "월 주문",
+	"详细数据": "상세 데이터",
+	"日期": "날짜",
+	"订单数": "주문 수",
+	"成交额": "회전율",
+	"立即核销": "지금 당장 쓰세요",
+	"查看": "보기",
+	"确定要核销此订单吗": "이 주문을 취소하시겠습니까?",
+	"确定核销": "확인",
+	"请输入核销码": "인증번호를 입력하세요",
+	"请输入正确的核销码": "올바른 인증번호를 입력하세요",
+	"查询中": "질의",
+	"订单": "주문",
+	"订单未备注,点击添加备注信息": "주문에 비고가 없습니다. 비고를 추가하려면 클릭하세요.",
+	"复制": "복사",
+	"件商品,应支付": "항목, 지불해야 ",
+	"邮费": "우송료",
+	"订单编号": "주문 ID",
+	"下单时间": "주문 시간",
+	"支付状态": "결제 상태",
+	"已支付": "유료",
+	"未支付": "무급",
+	"支付方式": "결제수단",
+	"买家留言": "구매자 MSG",
+	"支付金额": "결제 금액",
+	"优惠券抵扣": "쿠폰 공제",
+	"运费": "운임",
+	"实付款": "실제 금액",
+	"配送方式": "배달 방법",
+	"快递": "익스프레스",
+	"送货人电话": "택배전화",
+	"确认付款": "결제 확인",
+	"去发货": "배송",
+	"改价成功": "가격이 성공적으로 변경되었습니다",
+	"改价失败": "가격 변경 실패",
+	"请输入备注": "메모를 입력하세요",
+	"退款中": "환불",
+	"部分退款中": "부분 환불",
+	"件商品,实付款": "상품, 지불",
+	"同意退货": "반환 동의",
+	"待用户发货": "배송되지 않음",
+	"请输入正确的金额": "정확한 금액을 입력하세요",
+	"今天": "오늘",
+	"昨天": "어제",
+	"最近7天": "지난 7일",
+	"本月": "월",
+	"自定义": "맞춤화",
+	"营业额(元)": "회전율",
+	"订单量(份)": "수량",
+	"增长率": "상승률",
+	"增长": "증가",
+	"单位": "단위",
+	"元.": "위안",
+	"分.": "센트",
+	"固定": "고정",
+	"指定范围": "범위",
+	"提交时间": "제출 시간",
+	"原因": "이유",
+	"暂无申请记录,快去申请吧!": "아직 신청 기록이 없습니다. 지금 신청하세요!",
+	"没有更多啦": "더 이상",
+	"待审核": "검토 대기 중",
+	"审核通过": "검토 통과",
+	"审核未通过": "검토 실패",
+	"编辑": "편집",
+	"重新提交": "다시 제출",
+	"会员优惠价": "VIP 할인",
+	"余额支付": "잔액 지급",
+	"可用余额": "균형",
+	"微信支付": "위챗페이",
+	"确认": "확인",
+	"支付提醒": "결제 알림",
+	"线下支付已关闭,请点击确认按钮返回主页": "오프라인 결제가 종료되었습니다. 확인 버튼을 눌러 홈페이지로 돌아가주세요",
+	"请输入支付金额": "결제 금액을 입력하세요",
+	"正在确认": "확인",
+	"进入商城": "몰 들어가다",
+	"代理商名称": "에이전시 이름",
+	"请输入代理商名称": "에이전시 이름을 입력하세요",
+	"用户姓名": "당신의 이름",
+	"请输入姓名": "이름을 입력하세요",
+	"联系电话": "당신의 전화",
+	"请输入手机号": "전화번호를 입력하세요",
+	"验证码": "OTP 코드",
+	"填写验证码": "OTP 코드 입력",
+	"邀请码": "초대 코드",
+	"请输入代理商邀请码": "초대 코드 입력",
+	"请上传营业执照及行业相关资质证明图片": "사업자등록증 및 산업관련 자격증 사진을 올려주세요",
+	"图片最多可上传10张,图片格式支持JPG、PNG、JPEG": "최대 10장의 사진을 업로드할 수 있으며 사진 형식은 JPG, PNG, JPEG를 지원합니다",
+	"上传图片": "업로드",
+	"已阅读并同意": "읽기 및 동의",
+	"代理商协议": "에이전시 계약",
+	"提交申请": "지원서 제출",
+	"代理商入驻协议": "에이전트 계약",
+	"恭喜,您的资料提交成功!": "축하합니다. 성공적으로 제출되었습니다!",
+	"返回首页": "집으로 돌아가다",
+	"恭喜,您的资料通过审核!": "축하합니다. 검토가 통과되었습니다!",
+	"您的申请未通过!": "신청이 거부되었습니다!",
+	"重新申请": "재신청",
+	"获取验证码": "OTP 코드 받기",
+	"请输入正确的手机号码": "올바른 전화번호를 입력하세요",
+	"重新获取": "재획득",
+	"请上传营业执照": "사업 허가증을 업로드하십시오",
+	"请勾选并同意入驻协议": "점령 동의서에 체크하고 동의해주세요",
+	"专题栏": "주제 열",
+	"暂无数据": "데이터 없음",
+	"请输入卡号": "카드번호를 입력하세요",
+	"请输入卡密": "비밀번호를 입력하세요",
+	"确认激活": "확인",
+	"SVIP会员尊享权": "SVIP 회원 권한",
+	"正在激活": "활성화",
+	"已使用": "중고",
+	"永久SVIP会员": "영구 SVIP 회원",
+	"SVIP会员": "SVIP 회원",
+	"到期": "성숙",
+	"您与": "너와 함께",
+	"商城的第": "몰",
+	"天.": "일.",
+	"已累积为您节省": "당신을 위한 축적된 저축",
+	"开通即享会员权益": "회원 혜택 누리기",
+	"续费会员": "갱신",
+	"开通会员": "SVIP 가입",
+	"有效期至": "다음까지 유효함",
+	"试用": "시도하다",
+	"购买即视为同意": "동의로 구매",
+	"会员用户协议": "SVIP 계약",
+	"点击兑换卡密": "카드를 사용하려면 클릭",
+	"会员优惠券": "SVIP 쿠폰",
+	"SVIP商品推荐": "SVIP 추천",
+	"商城价": "몰 가격",
+	"激活会员卡": "카드 활성화",
+	"支付宝支付": "알리페이",
+	"成功开启0元试用": "0원 체험판 성공적으로 열림",
+	"确认绑定": "바인딩 확인",
+	"绑定成功": "바인딩 성공",
+	"商城客服已离线": "고객 서비스가 오프라인 상태입니다",
+	"我要反馈": "피드백을 원합니다",
+	"请填写内容": "내용을 채워주세요",
+	"提交": "제출",
+	"精品推荐": "권장",
+	"热门榜单": "인기",
+	"首发新品": "신규",
+	"促销单品": "프로모션",
+	"预告": "공지",
+	"回放": "재생",
+	"进行中": "처리 중",
+	"发送客服": "보내기",
+	"客服连接中": "고객센터 연결 중",
+	"连接失败": "연결 실패",
+	"提示": "힌트",
+	"客服已下线,是否需要反馈?": "고객 서비스가 오프라인 상태입니다. 피드백이 필요하십니까?",
+	"和好友一起分享": "친구와 공유",
+	"积分抵扣": "포인트 공제",
+	"已开票": "청구됨",
+	"未开票": "청구되지 않음",
+	"发票信息": "인보이스 정보",
+	"发票抬头": "송장",
+	"发票抬头类型": "송장 헤더 유형",
+	"个人": "퍼",
+	"企业": "컴",
+	"发票类型": "송장 유형",
+	"电子普通发票": "전자 일반 송장",
+	"电子专用发票": "전자 특별 송장",
+	"企业税号": "기업세",
+	"联系信息": "연락처 정보",
+	"真实姓名": "실명",
+	"联系邮箱": "이메일",
+	"抬头选择": "머리 선택",
+	"默认": "기본",
+	"普通": "보통",
+	"专用": "헌신",
+	"您还没有添加发票信息哟": "인보이스 정보를 추가하지 않았습니다",
+	"添加新的抬头": "새 헤더 추가",
+	"不开发票": "인보이스 없음",
+	"抽奖": "복권",
+	"全选": "모두 선택",
+	"属性": "속성",
+	"请填写具体地址": "특정 주소를 입력하세요",
+	"省": "도",
+	"市": "도시",
+	"区": "영역",
+	"添加成功": "성공적으로 추가",
+	"您已拒绝导入微信地址权限": "WeChat 주소 가져오기 권한을 거부했습니다",
+	"是否进入权限管理,调整授权?": "권한관리 들어가셔서 권한조정 하시나요?",
+	"已取消": "취소됨",
+	"添加失败": "추가 실패",
+	"请填写收货人姓名": "수하인의 이름을 입력하세요",
+	"请选择所在地区": "지역을 선택하세요",
+	"请填写详细地址": "자세한 주소를 입력하세요",
+	"星": "별",
+	"商品满足你的期待么?说说你的想法,分享给想买的他们吧": "제품이 당신의 기대에 부응합니까? 당신의 생각을 말해주고 그것을 사고 싶은 사람들과 공유하십시오",
+	"立即评价": "지금 평가",
+	"商品质量": "제품 품질",
+	"服务态度": "서비스 태도",
+	"缺少参数": "누락된 매개변수",
+	"请填写你对宝贝的心得": "제품에 대한 의견을 작성해주세요",
+	"正在发布评论": "댓글 게시",
+	"感谢您的评价": "리뷰 감사합니다",
+	"评价完成": "검토 완료",
+	"恭喜您": "축하합니다",
+	"获得": "얻다",
+	"机会": "기회",
+	"领取成功": "성공적으로 받았습니다",
+	"评分": "점수",
+	"全部": "모두",
+	"好评": "찬양",
+	"中评": "평균",
+	"差评": "나쁜",
+	"加载更多": "더 불러오기",
+	"千米距离": "킬로미터 떨어져",
+	"搜索商品名称": "상품 검색",
+	"价格": "가격",
+	"销量": "매진",
+	"新品": "신규",
+	"已全部加载": "모두 로드됨",
+	"缺少订单号": "주문 ID 누락",
+	"退货件数": "환급 번호",
+	"退款类型": "환불 유형",
+	"退款原因": "환불 사유",
+	"备注说明": "비고",
+	"填写备注信息,100字以内": "100단어 이내 비고",
+	"仅退款": "환불만",
+	"退货并退款": "반품 및 환불",
+	"申请成功": "적용 성공",
+	"请先选择退货商品": "반품 항목을 먼저 선택하세요",
+	"搜索历史": "검색 기록",
+	"热门搜索": "핫 서치",
+	"请输入要搜索的商品": "검색할 상품을 입력하세요",
+	"正在搜索中": "검색 중",
+	"中奖记录": "우승 기록",
+	"我的奖品": "나의 상",
+	"活动规则": "활동 규칙",
+	"昵称": "닉네임",
+	"序号": "직렬",
+	"奖品名称": "상 이름",
+	"获奖时间": "승리의 시간",
+	"商家暂未上架活动哦": "판매자가 아직 이벤트를 등록하지 않았습니다",
+	"获取抽奖信息": "경품 정보 얻기",
+	"奖品类型": "상금 종류",
+	"立即兑换": "지금 사용",
+	"兑换时间": "시간 교환",
+	"暂无中奖记录": "승리 기록 없음",
+	"积分": "포인트",
+	"余额": "균형",
+	"红包": "현금",
+	"设置收货地址": "배송 주소 설정",
+	"暂无门店信息": "상점 정보 없음",
+	"剩余积分": "나머지 포인트",
+	"当前积分": "현재 포인트",
+	"开具发票": "인보이스",
+	"请填写": "채워주세요",
+	"配送运费": "배송비",
+	"会员商品优惠": "제품 제안",
+	"会员运费优惠": "배송 제안",
+	"合计": "총계",
+	"使用微信快捷支付": "위챗 간편결제",
+	"使用支付宝支付": "알리페이로 ​​결제",
+	"线下支付": "오프라인 결제",
+	"使用线下付款": "오프라인 결제 사용",
+	"好友代付": "친구 지불",
+	"找微信好友支付": "결제할 친구 찾기",
+	"立即使用": "사용",
+	"请选择要购买的商品": "구매할 아이템을 선택하세요",
+	"发票": "송장",
+	"不使用": "사용하지 마세요",
+	"订单创建成功": "성공적으로 생성된 주문",
+	"请选择支付方式": "결제 수단을 선택하세요",
+	"请选择收货地址": "배송 주소를 선택하세요",
+	"请填写联系人或联系人电话": "연락처 또는 연락 가능한 전화번호를 입력하세요",
+	"暂无门店,请选择其他方式": "현재 매장이 없습니다. 다른 방법을 선택하세요",
+	"请输入": "입력하세요",
+	"请输入正确的": "올바른 것을 입력하세요",
+	"请上传": "업로드하세요",
+	"订单支付中": "결제",
+	"请按以上退货信息将商品退回": "정보와 함께 항목을 반환하십시오",
+	"请联系管理员获取退货地址": "반품 주소는 관리자에게 문의하세요",
+	"待核销": "폐쇄",
+	"核销信息": "상각 정보",
+	"营业时间": "영업시간",
+	"每日": "매일",
+	"使用说明": "사용 지침",
+	"可将二维码出示给店员扫描或提供数字核销码": "QR 코드를 점원에게 제시하여 스캔하거나 디지털 인증 코드를 제공할 수 있음",
+	"可将二维码出示给配送员进行核销": "QR코드를 택배사에 제시하면 확인 가능",
+	"查看位置": "위치 보기",
+	"拒绝原因": "거부 이유",
+	"联系客服": "연락처",
+	"商家备注": "상인 메모",
+	"收货人": "수신자",
+	"收货地址": "배송 주소",
+	"配送人姓名": "선명",
+	"拨打": "전화",
+	"虚拟发货": "가상 선박",
+	"已发货,请注意查收": "배송되었습니다, 확인해주세요",
+	"虚拟备注": "가상 메모",
+	"总代付": "총 금액",
+	"申请开票": "인보이스 적용",
+	"查看发票": "인보이스 보기",
+	"取消订单": "취소",
+	"立即付款": "지불하다",
+	"批量退款": "대량 환불",
+	"查看拼团": "그룹 보기",
+	"再次购买": "재구매",
+	"取消申请": "신청 취소",
+	"填写退货信息": "반환 정보",
+	"查看退货物流": "물류",
+	"您确认放弃此次申请吗": "이 응용 프로그램을 중단하시겠습니까?",
+	"操作成功": "성공적인 작업",
+	"订单信息不存在": "주문 정보가 존재하지 않습니다",
+	"为保障权益,请收到货确认无误后,再确认收货": "권익 보호를 위해 상품이 맞는지 확인하신 후 상품 수령을 확인해주세요.",
+	"删除订单": "주문 삭제",
+	"确定删除该订单": "삭제 순서 확인",
+	"删除成功": "성공적으로 삭제됨",
+	"确认取消该订单": "주문 취소 확인",
+	"订单信息": "주문 정보",
+	"消费订单": "주문",
+	"总消费": "총 금액",
+	"预售": "예약판매",
+	"线下付款,未支付": "오프라인 미결제",
+	"未核销": "기록되지 않음",
+	"件商品,总金额": "항목, 총 금액 ",
+	"查看详情": "보기",
+	"暂无订单": "아직 주문이 없습니다",
+	"缺少订单号无法取消订单": "주문번호가 없으면 주문을 취소할 수 없습니다",
+	"订单支付成功": "주문 결제 성공",
+	"订单支付失败": "주문 결제 실패",
+	"暂未支付": "아직 지불되지 않음",
+	"失败原因": "실패한 이유",
+	"重新购买": "재구매",
+	"重新支付": "다시 지불",
+	"赠送优惠券": "쿠폰 증정",
+	"有效期": "유효성",
+	"缺少参数无法查看订单支付状态": "누락된 매개변수는 주문 결제 상태를 볼 수 없습니다",
+	"最多可上传3张": "최대 3개 업로드",
+	"请选择产品": "상품을 선택하세요",
+	"该产品没有更多库存了": "이 제품에 대한 재고가 더 이상 없습니다",
+	"优品推荐": "최고의 추천",
+	"暂无产品": "아직 제품이 없습니다",
+	"重新选择": "재선택",
+	"请选择数量": "수량을 선택하세요",
+	"砍价专区·BARGAINING": "교섭",
+	"立即砍价": "지금 자르기",
+	"拼团活动": "그룹",
+	"人拼团成功.": "사람들이 성공했습니다",
+	"人参团": "인삼군",
+	"拼团价": "그룹 가격",
+	"已过期": "만료",
+	"关注": "팔로우",
+	"推荐好货": "상품 추천",
+	"暂无商品": "아직 제품이 없습니다",
+	"限时秒杀": "시간 제한 스파이크",
+	"抢": "잡다",
+	"广告位": "ADV 공간",
+	"精彩内容": "하이라이트",
+	"砍价模块,暂无数据": "거래 모듈, 아직 데이터 없음",
+	"砍价活动": "거래",
+	"呼朋唤友来砍价": "친구에게 전화 걸기 흥정",
+	"拼团模块,暂无数据": "그룹 모듈, 아직 데이터 없음",
+	"享超值开团价": "가성비 좋은 단체 요금을 즐기세요",
+	"优惠券,暂无数据": "쿠폰, 일시적으로 데이터 없음",
+	"领取今日好券": "오늘의 좋은 쿠폰 받기",
+	"可用": "중고",
+	"领取": "주장",
+	"客服": "서비스",
+	"商品列表,暂无数据": "임시 데이터 없음",
+	"搜索商品": "상품 검색",
+	"暂无图片,请上传图片": "사진이 없습니다. 업로드하세요",
+	"首发新品,暂无数据": "첫 번째 신제품, 아직 데이터 없음",
+	"多个优质商品最新上架": "선반에 있는 최신 고품질 상품",
+	"暂无新闻,请上传新闻": "뉴스가 없습니다. 뉴스를 업로드하세요",
+	"热度 TOP": "히트 탑",
+	"排行榜、暂无数据": "리더보드, 일시적으로 데이터 없음",
+	"促销单品,暂无数据": "프로모션 아이템, 일시적으로 데이터 없음",
+	"库存商品优惠促销活动": "재고품 판촉활동",
+	"精品推荐,暂无数据": "부티크 추천, 아직 데이터 없음",
+	"上百种商品分类任您选择": "선택할 수 있는 수백 개의 제품 카테고리",
+	"秒杀模块,暂无数据": "Seckill 모듈, 일시적으로 데이터 없음",
+	"场": "사이트",
+	"暂无数据,请设置": "데이터가 없습니다. 설정하세요",
+	"暂无数据,请先添加分类": "데이터가 없습니다. 먼저 분류를 추가하십시오",
+	"暂无标题": "임시 제목 없음",
+	"诚意推荐品质商品": "좋은 품질의 상품을 선의로 추천",
+	"点击“立即关注”即可关注公众号": "공식 계정을 팔로우하려면 \"지금 팔로우\"를 클릭하세요",
+	"立即关注": "지금 팔로우",
+	"添加到我的小程序, 微信首页下拉即可访问商城。": "내 애플릿에 추가하고 위챗 홈페이지를 내리면 쇼핑몰에 접속할 수 있습니다",
+	"点击": "클릭",
+	"服务协议与隐私政策": "서비스 동의 및 개인 정보 보호 정책",
+	"请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。": "인스턴트 메시징, 콘텐츠 공유 및 기타 서비스를 제공하기 위해 귀하의 기기를 수집해야 합니다. 개인정보 조회, 변경, 삭제, 권한 관리는 설정에서 하실 수 있습니다.",
+	"你可以阅读": "당신은 읽을 수 있습니다",
+	"《服务协议与隐私政策》": "\"서비스 동의 및 개인 정보 보호 정책\"",
+	"了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。": "자세히 알아보기. 동의하면 서비스 수락을 시작하는 데 동의합니다를 클릭하세요.",
+	"我同意": "동의합니다",
+	"残忍拒绝": "잔인한 거절",
+	"下拉加载更多": "더 많이 내리기",
+	"网络连接断开": "네트워크 연결이 끊어졌습니다",
+	"请检查情况:": "상태를 확인하십시오:",
+	"在设置中是否已开启网络权限": "설정에서 네트워크 권한이 활성화되었는지 여부",
+	"当前是否处于弱网环境": "현재 네트워크 환경이 취약합니다",
+	"版本是否过低,升级试试吧": "버전이 너무 낮으면 업그레이드 해보세요",
+	"重新连接": "다시 연결",
+	"加载中": "로드 중",
+	"没有更多内容啦~": "더 이상 콘텐츠가 없습니다~",
+	"100%正品保证": "100% 정품",
+	"所有商品精挑细选": "매우 까다롭습니다",
+	"售后无忧": "판매 후 걱정하지 마세요",
+	"管理": "튜브",
+	"购物数量": "쇼핑 수량",
+	"请重新选择商品规格": "제품 사양을 다시 선택하십시오",
+	"重选": "재선택",
+	"失效商品": "잘못된 상품",
+	"失效": "실패",
+	"该商品已失效": "상품이 만료되었습니다",
+	"立即下单": "지금 주문",
+	"我也是有底线的": "나에게도 결론이 있습니다",
+	"产品库存不足,请选择其它": "상품 재고가 부족합니다. 다른 상품을 선택하세요",
+	"添加购物车成功": "장바구니 추가 성공",
+	"清除成功": "정리 성공",
+	"暂无兑换记录~": "교환 기록이 없습니다~",
+	"大家都在换": "모두가 변하고 있습니다",
+	"人兑换": "사람 교환",
+	"轻松赚积分": "쉽게 포인트 적립",
+	"购买商品": "상품 구매",
+	"购买商品可获得积分奖励": "상품 구매에 대한 포인트 보상",
+	"去完成": "가서",
+	"每日签到活动": "매일 체크인 활동",
+	"每日签到可获得积分奖励": "매일 출석체크하면 포인트 적립 가능",
+	"九宫格抽奖活动": "주공게 복권",
+	"幸运抽奖可获得积分奖励": "럭키드로우는 포인트 보상을 받을 수 있습니다",
+	"我的积分": "내 포인트",
+	"每日签到": "일일 로그인",
+	"积分抽奖": "포인트 추첨",
+	"兑换记录": "교환 기록",
+	"已兑换": "구속됨",
+	"无法兑换": "교환할 수 없음",
+	"[默认]": "[기본값]",
+	"可用积分": "사용 가능한 포인트",
+	"快递费用": "특급 요금",
+	"免运费": "무료",
+	"备注信息": "비고",
+	"请添加备注(150字以内)": "비고를 추가해주세요(150단어 이내)",
+	"使用线上支付宝支付": "온라인 알리페이로 ​​결제",
+	"可用余额:": "균형:",
+	"选择线下付款方式": "오프라인 결제 수단 선택",
+	"正在加载…": "로드 중...",
+	"可用积分不足!": "사용 가능한 포인트가 부족합니다!",
+	"订单状态": "주문 상태",
+	"支付积分": "포인트 지불",
+	"备注": "비고",
+	"配送核销码": "배송확인코드",
+	"当前可用余额:": "현재 사용 가능한 잔액:",
+	"正在加载": "로드 중",
+	"缺少经纬度信息无法查看地图!": "경도와 위도 정보가 없으면 지도를 볼 수 없습니다! ",
+	"商品兑换成功": "성공적으로 사용됨",
+	"兑换方式": "교환 방법",
+	"积分兑换": "포인트 교환",
+	"兑换积分": "포인트 사용",
+	"取消兑换": "교환 취소",
+	"缺少参数无法查看订单兑换状态": "매개변수 없이 주문 교환 상태를 볼 수 없습니다",
+	"用户离开了": "사용자가 떠났습니다",
+	"兑换成功": "성공적으로 구속됨",
+	"物流公司": "물류회사",
+	"复制单号": "문서 번호 복사",
+	"设为默认": "기본값으로 설정",
+	"添加新地址": "새 주소 추가",
+	"导入微信地址": "위챗 주소 가져오기",
+	"取消选择": "선택 해제",
+	"您设置的默认地址不存在!": "설정한 기본 주소가 존재하지 않습니다!",
+	"设置成功": "설정 성공",
+	"您删除的地址不存在!": "삭제한 주소가 존재하지 않습니다!",
+	"获取头像": "아바타 얻기",
+	"请点击授权": "승인을 클릭하십시오",
+	"绑定手机号": "휴대전화 번호 묶기",
+	"永久": "영구",
+	"会员到期": "멤버십 만료",
+	"未开通会员": "열린 회원이 아닙니다",
+	"查看会员权益": "멤버십 혜택 보기",
+	"立即续费": "갱신",
+	"立即激活": "활성화",
+	"会员可享多项权益": "여러가지 혜택을 누리세요",
+	"订单中心": "내 주문",
+	"我的服务": "나의 서비스",
+	"隐私协议": "프라이버시",
+	"商家管理": "경영",
+	"更新用户信息成功": "성공적으로 업데이트된 사용자 정보",
+	"客服接待": "접수",
+	"点击复制网址去浏览器中打开": "브라우저에서 열려면 URL 복사를 클릭하세요",
+	"点击复制": "복사 클릭",
+	"完成支付": "결제 완료",
+	"点击右上角": "오른쪽 상단을 클릭하세요",
+	"选择 在浏览器 打开,去支付宝支付": "브라우저에서 열고 알리페이로 ​​결제하려면 선택",
+	"支付订单不存在,页面将在2秒后自动关闭!": "결제 주문이 존재하지 않으며, 2초 후에 페이지가 자동으로 닫힙니다!",
+	"正在支付中": "결제",
+	"支付订单不存在,页面将在2秒后自动关闭": "결제 주문이 존재하지 않으며, 2초 후에 페이지가 자동으로 닫힙니다",
+	"复制失败": "복제 실패",
+	"您目前的排名": "현재 순위",
+	"您目前暂无排名": "현재 순위를 매겼습니다",
+	"暂无排名~": "순위 없음~",
+	"输入手机号": "휴대전화 번호 입력",
+	"输入验证码": "인증 코드 입력",
+	"立即登录": "지금 로그인",
+	"请填写手机号码": "휴대전화 번호를 입력하세요",
+	"请填写验证码": "인증번호를 입력하세요",
+	"请输入正确的验证码": "올바른 인증번호를 입력하세요",
+	"正在登录中": "로그인",
+	"登录成功": "로그인 성공",
+	"获取授权": "승인 받기",
+	"获取微信的手机号授权": "위챗 휴대폰 번호 인증 받기",
+	"获取微信手机号": "위챗 휴대폰 번호 받기",
+	"输入手机号码": "휴대전화 번호 입력",
+	"填写登录密码": "로그인 비밀번호 입력",
+	"登录": "로그인",
+	"快速登录": "빠른 로그인",
+	"账号登录": "계정 로그인",
+	"其他方式登录": "다른 방법으로 로그인",
+	"登录中": "로그인",
+	"获取用户信息失败": "사용자 정보 획득 실패",
+	"请绑定手机号后,继续操作": "휴대전화 번호를 묶고 작업을 계속하십시오",
+	"错误信息": "오류 정보",
+	"用户点击确定": "사용자가 확인을 클릭합니다",
+	"用户点击取消": "사용자 클릭 취소",
+	"登录失败": "로그인 실패",
+	"请勿重复点击": "반복적으로 클릭하지 마십시오",
+	"请填写密码": "비밀번호를 입력하세요",
+	"您输入的密码过于简单": "입력하신 비밀번호가 너무 간단합니다",
+	"请填写账号": "계좌번호를 입력하세요",
+	"请输入正确的账号": "정확한 계좌번호를 입력하세요",
+	"[图片]": "[사진]",
+	"[语音]": "[목소리]",
+	"[商品]": "[제품]",
+	"[订单]": "[주문]",
+	"亲、暂无消息记录哟!": "여보, 아직 메시지 기록이 없습니다!",
+	"站内消息": "국내 메시지",
+	"客服消息": "고객 서비스 메시지",
+	"通知于": "알림",
+	"获取详情中": "세부정보 가져오기",
+	"代付订单创建成功,发给好友帮你付款吧~": "결제 주문이 성공적으로 생성되었습니다. 결제할 수 있도록 친구에게 보내주세요~",
+	"帮我付一下这件商品了,谢谢~": "이 상품 결제 도와주세요, 감사합니다~",
+	"已经有人替我代付,谢谢啦~": "누군가가 나를 위해 지불했습니다, 감사합니다~",
+	"谢谢你帮我支付,么么哒~": "결제 도와줘서 고마워, 모다~",
+	"我已为你代付成功,商家正在努力发货中~": "성공적으로 결제를 완료했고 상인이 배송을 하려고 합니다~",
+	"好友代付成功,商家正在努力发货中~": "친구 결제 성공, 상인이 배송을 하려고 합니다~",
+	"发送给微信好友": "위챗 친구에게 보내기",
+	"查看订单详情": "주문 세부정보 보기",
+	"订单已支付": "주문 결제",
+	"如果订单申请退款,已支付金额将原路退还给您": "환불 신청을 하면 결제금액을 동일하게 환불해 드립니다",
+	"代付成功": "결제 성공",
+	"谢谢你为我付款,还可以再去看看其他商品哟~": "결제해주셔서 감사합니다, 다른 상품 보러 가실 수 있어요~",
+	"该订单暂未支付": "주문이 아직 지불되지 않았습니다",
+	"人": "사람",
+	"推广人数": "발기인의 수",
+	"一级": "레벨 1",
+	"二级": "레벨 2",
+	"点击搜索会员名称": "회원명을 검색하려면 클릭하세요",
+	"团队排序": "팀 정렬",
+	"金额排序": "금액 정렬",
+	"订单排序": "주문 정렬",
+	"单": "주문",
+	"加入时间": "가입 시간",
+	"累积推广订单": "주문 건수",
+	"本月累计推广订单": "월 주문",
+	"返佣": "리베이트",
+	"暂未返佣": "리베이트 아님",
+	"返佣时间": "리베이트 시간",
+	"单号": "주문 번호",
+	"暂无推广订单~": "프로모션 주문 없음~",
+	"推广订单列表": "프로모션 주문 목록",
+	"找回密码": "비밀번호 찾기",
+	"填写您的新密码": "새 비밀번호 입력",
+	"加载失败": "로드 실패",
+	"点击授权登录您的客服工作台": "고객 서비스 워크벤치에 로그인하려면 승인을 클릭하세요",
+	"授权登录": "인증된 로그인",
+	"没有登录的code,请重新扫码": "로그인하지 않은 코드, 코드를 다시 스캔하십시오",
+	"员工人数": "직원 수",
+	"邀请": "초대",
+	"分佣比例": "저울",
+	"修改分佣比例": "비율 수정",
+	"请输入百分比": "퍼센트를 입력하세요",
+	"删除员工": "직원 삭제",
+	"确定删除该员工?": "이 직원을 삭제하시겠습니까?",
+	"请输入比例": "저울을 입력하세요",
+	"分类": "클래스",
+	"我的": "내",
+	"姓名": "이름",
+	"请输入联系电话": "연락처를 입력하세요",
+	"所在地区": "위치",
+	"详细地址": "주소",
+	"设置为默认地址": "기본 주소로 설정",
+	"立即保存": "지금 저장",
+	"浙江省": "절강",
+	"杭州市": "항저우",
+	"滨江区": "빈장 구",
+	"广东省": "광동성",
+	"广州市": "광저우",
+	"番禺区": "판유",
+	"修改地址": "주소 수정",
+	"添加地址": "주소 추가",
+	"已取消!": "취소되었습니다! ",
+	"请填写联系电话": "연락처를 입력하세요",
+	"保存中": "저장",
+	"修改成功": "수정 성공",
+	"消费": "소비",
+	"充值": "재충전",
+	"暂无账单的记录哦~": "일시적으로 청구서 기록이 없습니다~",
+	"点击【立即注销】即代表您已经同意《用户注销协议》": "[즉시 로그아웃]을 클릭하면 사용자 로그아웃 동의에 동의한다는 의미입니다",
+	"立即注销": "지금 로그오프",
+	"是否确认注销": "로그아웃 확인",
+	"注销后无法恢复,请谨慎操作": "로그아웃 후 복구할 수 없으니 주의하세요",
+	"注销": "로그아웃",
+	"持卡人": "카드 소지자",
+	"请输入持卡人姓名": "카드 소지자 이름 입력",
+	"卡号": "카드 번호",
+	"请填写卡号": "카드번호를 입력하세요",
+	"银行": "은행",
+	"提现": "철수",
+	"最低提现金额": "최소 출금 금액",
+	"当前可提现金额": "현재 인출 가능한 금액",
+	"冻结佣金": "얼어붙은 위원회",
+	"说明: 每笔佣金的冻结期为": "참고: 각 수수료의 동결 기간은",
+	"天,到期后可提现": "만료 시 인출 가능한 일수",
+	"账号": "계정",
+	"请填写您的微信账号": "위챗 계정 입력",
+	"收款码": "수집 코드",
+	"请填写您的支付宝账号": "알리페이 계좌번호 입력",
+	"请选择银行": "은행을 선택하세요",
+	"银行卡": "은행 카드",
+	"微信": "위챗",
+	"支付宝": "알리페이",
+	"请填写持卡人姓名": "카드 소지자의 이름을 입력하세요",
+	"请填写微信号": "위챗을 작성해주세요",
+	"请填写提现金额": "출금금액을 기입해주세요",
+	"提现金额不能低于": "출금 금액은 이보다 작을 수 없습니다",
+	"未使用": "사용하지 않음",
+	"已使用/过期": "사용/만료",
+	"通用劵": "일반 증권",
+	"一级分佣上浮": "한 레벨 업",
+	"二级分佣上浮": "2차 부동",
+	"快速升级技巧": "빠른 업그레이드 기술",
+	"未完成": "불완전한",
+	"已领完": "수집",
+	"当前共": "현재 합계",
+	"取关": "꺼짐",
+	"请选择商品": "상품을 선택하세요",
+	"头像": "아바타",
+	"手机号码": "휴대전화 번호",
+	"点击绑定手机号": "바인딩하려면 클릭",
+	"ID号": "아이디번호",
+	"权限设置": "권한",
+	"点击管理": "관리",
+	"密码": "비밀번호",
+	"点击修改密码": "수정 클릭",
+	"更换手机号码": "번호 변경",
+	"点击更换手机号码": "클릭",
+	"缓存大小": "캐시 크기",
+	"当前版本": "현재 버전",
+	"地址管理": "주소",
+	"发票管理": "송장",
+	"账号注销": "취소",
+	"注销后无法恢复": "복구할 수 없음",
+	"累计积分": "누적 포인트",
+	"累计消费": "소비",
+	"冻结积分": "빙점",
+	"积分规则": "적분법칙",
+	"提示:积分数值的高低会直接影响您的会员等级": "도움말: 멤버십 등급 값",
+	"提示:你有": "팁: 있습니다",
+	"积分在": "통합",
+	"过期,请尽快使用": "만료, 최대한 빨리 사용하세요",
+	"暂无积分记录哦~": "일시적으로 점수 기록이 없습니다~",
+	"赚积分": "포인트 적립",
+	"分值明细": "점수 세부정보",
+	"分值提升": "점수 증가",
+	"抬头类型": "헤더 유형",
+	"增值税电子专用发票": "VAT 전자 특별 송장",
+	"增值税电子普通发票": "전자 일반 VAT 인보이스",
+	"需要开具发票的姓名": "청구할 이름",
+	"需要开具发票的企业名称": "인보이스를 발행할 기업명",
+	"税号": "세금 번호",
+	"纳税人识别号": "납세자 식별 번호",
+	"手机号": "휴대전화 번호",
+	"您的手机号": "내 휴대폰 번호",
+	"邮箱": "사서함",
+	"您的联系邮箱": "연락처 사서함",
+	"开户银行": "예금 은행",
+	"您的开户银行": "귀하의 예금 은행",
+	"银行账号": "은행 계좌 번호",
+	"您的银行账号": "귀하의 은행 계좌 번호",
+	"企业地址": "기업 주소",
+	"您所在的企业地址": "회사 주소",
+	"企业电话": "기업 전화",
+	"您的企业电话": "회사 전화",
+	"设置为默认抬头": "기본 헤더로 설정",
+	"保存": "저장",
+	"发票类型选择": "송장 유형 선택",
+	"纸质发票开出后将以邮寄形式交付": "종이 계산서 발행 후 우편으로 배송됩니다",
+	"请输入需要开具发票的姓名": "청구할 이름을 입력하세요",
+	"请输入您的手机号": "휴대전화 번호를 입력하세요",
+	"请正确输入您的手机号": "휴대전화 번호를 정확하게 입력하세요",
+	"请输入您的联系邮箱": "연락처 이메일을 입력하세요",
+	"请正确输入您的联系邮箱": "연락처 이메일을 정확하게 입력하세요",
+	"请输入需要开具发票的企业名称": "인보이스를 발행할 기업명을 입력하세요",
+	"请输入纳税人识别号": "납세자 식별 번호를 입력하세요",
+	"请正确输入纳税人识别号": "납세자 식별 번호를 정확하게 입력하세요",
+	"请输入您的开户银行": "예금 은행을 입력하세요",
+	"请输入您的银行账号": "은행 계좌 번호를 입력하세요",
+	"请正确输入您的银行账号": "은행 계좌 번호를 정확하게 입력하세요",
+	"请输入您所在的企业地址": "사업장 주소를 입력하세요",
+	"请输入您的企业电话": "회사 전화번호를 입력하세요",
+	"发票记录": "송장 기록",
+	"抬头管理": "헤더 관리",
+	"申请时间": "적용 시간",
+	"没有发票信息哟~": "인보이스 정보가 없습니다~",
+	"个人普通发票": "개인 일반 송장",
+	"企业普通发票": "기업 일반 송장",
+	"企业专用发票": "기업 특별 송장",
+	"添加新发票": "새 송장 추가",
+	"删除该发票?": "이 송장을 삭제하시겠습니까?",
+	"发票编号": "인보이스 번호",
+	"发票备注": "인보이스 비고",
+	"快递号": "특급번호",
+	"总资产(元)": "총 자산(₩)",
+	"累计充值(元)": "공동충전(₩)",
+	"累计消费(元)": "코플라워(₩)",
+	"账单记录": "청구서 기록",
+	"消费记录": "기록",
+	"充值记录": "재충전",
+	"积分中心": "적분",
+	"签到领积分": "로그인",
+	"赚积分抵现金": "포인트 적립",
+	"领取优惠券": "쿠폰",
+	"满减享优惠": "전체 할인",
+	"最新拼团活动": "최신 그룹 활동",
+	"最新的优惠商品上架拼团": "선반에 있는 최신 특혜 상품",
+	"立即参与": "참여",
+	"当前限时秒杀": "현재 시간 제한 2차 처치",
+	"最新商品秒杀进行中": "최신 상품 급증 진행 중",
+	"我的余额": "균형",
+	"赠送": "선물",
+	"其他": "기타",
+	"注意事项": "주의사항",
+	"冻结佣金为": "얼어붙은 커미션 is",
+	"立即转入": "즉시 이체",
+	"立即充值": "즉시 재충전",
+	"请输入金额": "금액을 입력하세요",
+	"转入余额": "잔액으로 이체",
+	"转入余额后无法再次转出,确认是否转入余额": "잔액 이체 후 재이체 불가, 잔액 이체 여부 확인",
+	"转入成功": "전송 성공",
+	"正在支付": "결제",
+	"充值金额必须为数字": "충전 금액은 숫자여야 합니다",
+	"充值金额不能为0": "충전량은 0이 될 수 없습니다",
+	"填写手机号码": "휴대전화 번호 입력",
+	"是否绑定账号": "바인드 계정",
+	"绑定": "바인딩",
+	"您已取消绑定!": "언바운드되었습니다!",
+	"当前手机号": "현재 휴대폰 번호",
+	"设置新密码": "새 비밀번호 설정",
+	"确认新密码": "새 비밀번호 확인",
+	"手机号码不存在,无法发送验证码!": "휴대전화 번호가 존재하지 않아 인증번호를 보낼 수 없습니다!",
+	"请输入新密码": "새 비밀번호를 입력하세요",
+	"两次输入的密码不一致!": "입력한 두 개의 암호가 일치하지 않습니다!",
+	"请输入验证码": "인증 코드를 입력하세요",
+	"暂无退款订单~": "환불 불가~",
+	"缺少订单号无法查看订单详情": "주문번호가 누락되어 주문내역을 조회할 수 없습니다",
+	"明细": "데타",
+	"第七天": "7일차",
+	"第7天": "7일차",
+	"奖励": "보상",
+	"已签到": "체크인",
+	"立即签到": "지금 로그인",
+	"已累计签到": "누적 체크인",
+	"据说连续签到第": "두 번째 연속 로그인",
+	"天可获得超额积分,一定要坚持签到哦~~~": "매일 초과 포인트를 얻을 수 있다면 로그인을 고집해야 합니다~~~",
+	"签到成功": "체크인 성공",
+	"好的": "확인",
+	"您今日已签到!": "오늘 로그인하셨습니다!",
+	"暂无签到记录~": "로그인 기록이 없습니다~",
+	"保存海报": "포스터 저장",
+	"长按保存图片": "사진을 저장하려면 길게 누르세요",
+	"分销海报": "배포 포스터",
+	"小程序二维码需要发布正式版后才能获取到": "애플릿 QR코드는 정식버전 발행 이후에만 획득 가능",
+	"获取中": "얻다",
+	"暂无数据~": "일시적으로 데이터가 없습니다~",
+	"提现记录": "철회",
+	"提现总额": "총 인출",
+	"佣金记录": "커미션 기록",
+	"佣金明细": "커미션 세부정보",
+	"分销等级": "배포 수준",
+	"昨日收益": "어제 수입",
+	"累积已提": "누적 인출",
+	"代理商申请": "에이전트 신청",
+	"立即提现": "철회",
+	"推广名片": "명함",
+	"推广人统计": "발기인 통계",
+	"推广人订单": "발기인 주문",
+	"推广订单": "프로모션 주문",
+	"事业部": "사업부문",
+	"代理商": "에이전트",
+	"推广人排行": "프로모터 순위",
+	"佣金排行": "커미션 순위",
+	"员工列表": "직원 목록",
+	"您目前暂无推广权限": "현재 승급 권한이 없습니다",
+	"商城购物可享": "쇼핑몰에서 쇼핑하기",
+	"折": "할인",
+	"当前等级": "현재 수준",
+	"未达成": "도달되지 않음",
+	"今日成长值": "오늘의 성장가치",
+	"点": "포인트",
+	"我的成长值记录": "나의 성장 가치 기록",
+	"暂未解锁该等级": "이 레벨은 아직 잠금 해제되지 않았습니다",
+	"点,需达到": "점, 도달해야 함",
+	"已解锁更高等级": "상위 레벨 잠금 해제",
+	"我的成长特权": "나의 성장 특권",
+	"购物折扣": "할인",
+	"专属徽章": "독점 배지",
+	"经验累积": "경험치 축적",
+	"尊享客服": "독점 서비스",
+	"签到": "체크인",
+	"可获得": "사용 가능",
+	"点经验": "포인트 경험치",
+	"每日签到可获得经验值,已签到": "매일 로그인하면 경험치 획득 가능, 로그인",
+	"去签到": "체크인",
+	"点经验/元": "포인트 경험치/₩",
+	"购买商品可获得对应的经验值": "상품 구매 시 해당 경험치 획득 가능",
+	"去购买": "가서 사세요",
+	"点经验/人": "포인트 경험치/인",
+	"邀请好友注册商城可获得经验值": "친구를 초대하여 몰에 등록하여 경험치 획득",
+	"去邀请": "초대",
+	"积分数": "제품 분수",
+	"消费金额": "소비량",
+	"暂无经验记录": "경험 기록 없음",
+	"账户登录": "계정 로그인",
+	"微信登录": "위챗 로그인",
+	"手机号登录": "모바일 로그인",
+	"账户充值": "재충전",
+	"佣金转入": "커미션",
+	"周榜": "주간 목록",
+	"月榜": "월간 목록",
+	"周排行": "주간 순위",
+	"月排行": "월간 순위",
+	"语言切换": "언어",
+	"点击前往": "클릭하여 이동",
+	"查看全部": "모두 보기",
+	"查看订单": "주문 보기",
+	"无法获取图片信息": "사진 정보를 가져올 수 없습니다",
+	"长按或扫描查看": "길게 누르거나 보기를 스캔",
+	"点解锁": "포인트 잠금 해제",
+	"确认修改": "확인",
+	"保存修改": "저장",
+	"退出登录": "로그아웃",
+	"付费会员": "SVIP",
+	"地址信息": "주소",
+	"我的推广": "확장",
+	"砍价记录": "거래",
+	"我的等级": "내 레벨",
+	"兑换": "가서",
+	"申请中": "응용 프로그램",
+	"统计管理": "통계",
+	"退款": "환불",
+	"未发货": "발급되지 않음",
+	"当前为最新版本": "현재 최신 버전",
+	"清除缓存": "캐시 지우기",
+	"确定清楚本地缓存数据吗": "로컬 캐시 데이터가 확실합니까?",
+	"缓存清理完成": "캐시 정리 완료",
+	"切换的账号不存在": "전환된 계정이 존재하지 않습니다",
+	"正在切换中": "전환",
+	"确认退出登录": "로그아웃 확인",
+	"我知道了": "알겠습니다",
+	"系统错误": "시스템 오류",
+	"请求失败": "요청 실패",
+	"邀请您加入": "가입 초대",
+	"图片上传中": "업로드 중",
+	"上传图片失败": "이미지 업로드 실패",
+	"访问位置被拒绝": "액세스 위치가 거부되었습니다",
+	"系统定位已关闭": "시스템 위치 지정이 해제되었습니다",
+	"需要定位权限": "위치 권한 필요",
+	"订单核销": "쓸어버리다",
+	"当前可转入佣金为":"현재 양도 가능한 수수료는",
+	"浏览记录":"검색 기록",
+	"签到奖励":"체크인 보상",
+	"请输入内容":"내용을 입력하십시오",
+	"单次限购":"단회한매",
+	"永久限购":"영구한구",
+	"《用户协议》":"《사용자 프로토콜》",
+	"《隐私协议》":"《프라이버시 프로토콜》",
+	"与":"과",
+	"请先阅读并同意协议":"먼저 읽고 동의하십시오",
+	"绑定下级通知":"하위 알림 바인딩",
+	"购买成功通知":"구매 성공 알림",
+	"确认收货通知":"수품 확인 통지",
+	"改价通知":"가격 변경 통지",
+	"退款成功通知":"환불 성공 알림",
+	"充值成功通知":"충전 성공 알림",
+	"积分到账通知":"적분 입금 통지",
+	"佣金到账通知":"커미션 입금 통지",
+	"砍价成功通知":"깎기 성공 통지",
+	"拼团成功通知":"단합 성공 알림",
+	"拼团失败通知":"단합 실패 알림",
+	"开团成功通知":"개단 성공 통지",
+	"提现成功通知":"현금 인출 성공 통지",
+	"提现失败通知":"현금 인출 실패 알림",
+	"充值退款通知":"충전 환불 알림",
+	"退款申请拒绝通知":"환불 신청 거부 통지",
+	"您有新的退款待处理":"새로운 환불 대기 중",
+	"您有新的订单待处理":"처리해야 할 새로운 주문이 있습니다",
+	"发货通知":"발송 알림",
+	"取消拼团通知":"콜라보레이션 알림 취소",
+	"参团成功通知":"참단 성공 통지",
+	"你有个新的提现申请待处理":"당신에게 새로운 현금 인출 신청이 있습니다. 처리해야 합니다",
+	"你有个新的用户收货待处理":"당신은 새로운 사용자가 처리를 기다리고 있습니다",
+	"提醒付款通知":"알림 결제 알림",
+	"短信验证码":"문자 인증 코드",
+	"到店自提":"제기하다",
+	"快递配送":"택배배송"
+}

+ 1181 - 0
lang/mn_mn.json

@@ -0,0 +1,1181 @@
+{
+	"选择地址": "Хаяг сонгох",
+	"选择其它地址": "Бусад хаяг сонгох",
+	"已选商品": "Сонгосон бараа",
+	"清空": "Цэвэр",
+	"¥": "$",
+	"已售罄": "Борагдсан",
+	"已下架": "Буулгах",
+	"删除": "Устгах",
+	"商品券": "Бүтээгдэхүүн",
+	"品类券": "Ангилал",
+	"通用券": "Ерөнхий",
+	"优惠券": "Эрхийн бичиг",
+	"满": "Бүрэн",
+	"元可用": "Ашигласан",
+	"无门槛券": "Босгогүй",
+	"领取后": "Хүлээн авах",
+	"天内可用": "Өдрийн хэрэглээ",
+	"已领取": "Хүлээн авсан",
+	"立即领取": "Авах",
+	"购物满": "Зарцах",
+	"减": "Унтраах",
+	"不限时": "Хязгааргүй хугацаа",
+	"秒杀": "Секкилл",
+	"砍价": "Хэлэлцэх",
+	"拼团": "Бүлэг",
+	"已售": "Зарагдсан",
+	"立即购买": "Одоо худалдаж авах",
+	"加入购物车": "Сагсанд нэмэх",
+	"选规格": "Сонголтууд",
+	"跳过": "Дараагийн",
+	"立即体验": "Одоо яв",
+	"首页": "Гэр",
+	"搜索": "Хайлт",
+	"购物车": "Сагс",
+	"我的收藏": "Цуглуулах",
+	"个人中心": "Минийх",
+	"券": "Vo.",
+	"正在加载中": "Ачааж байна...",
+	"上拉加载更多": "Дээш татах, илүү их ачаалах",
+	"代付金额": "Хэмжээ",
+	"共": "Нийт ",
+	"件商品": "Зүйлс",
+	"订单包裹": "Бараа захиалах",
+	"申请退款中": "Төлбөрийг буцаан олгох",
+	"已退款": "Буцаан олгогдох",
+	"已完成": "Дууссан",
+	"件退款中": "Барааны буцаан олголт",
+	"不支持配送": "Зөвхөн дэлгүүрт",
+	"不支持自提": "Зөвхөн хүргэлт",
+	"已评价": "Үнэлсэн",
+	"评价": "Шүүмж",
+	"申请退款": "Төлбөрийг буцаан олгох",
+	"查看物流": "Логистик",
+	"确认收货": "Захиалга авах",
+	"选择付款方式": "Төлбөрийн төрлийг сонгох",
+	"支付": "Төлбөр",
+	"去付款": "Төлбөр төлөх",
+	"请选择要支付的订单": "Захиалга сонгох",
+	"余额不足": "Үлдэл хангалтгүй",
+	"支付中": "Төлбөр төлж байна...",
+	"缺少支付参数": "Төлбөрийн параметр дутуу",
+	"取消支付": "Төлбөрийг цуцлах",
+	"支付成功": "Төлбөр амжилттай боллоо",
+	"支付失败": "Төлбөр амжилтгүй боллоо",
+	"库存": "Хувьцаа",
+	"限量": "Хязгаарлалт",
+	"数量": "QTY",
+	"我要参团": "Бүлэгт нэгдэх",
+	"确定": "За",
+	"热门推荐": "Халуун зөвлөмж",
+	"最高返佣": "Хамгийн өндөр",
+	"推广享佣金": "Дэмжих",
+	"立即分享": "Одоо хуваалцах",
+	"发现新版本": "Шинэ хувилбар",
+	"立即升级": "Сайжруулах",
+	"下载进度": "Дэвшил",
+	"店小二": "Зөөгч",
+	"暂无记录": "Өгөгдөл байхгүй",
+	"正在下载海报,请稍后再试": "Зурагт хуудас татаж байна, дараа дахин оролдоно уу",
+	"海报二维码生成失败": "Зурагт хуудасны QR код үүсгэж чадсангүй",
+	"倒计时": "Countdown",
+	"天": "D",
+	"时": "H",
+	"分": "М",
+	"秒": "S",
+	"砍价成功": "Хэлэлцээ амжилттай боллоо",
+	"活动已结束": "Үйл ажиллагаа зогссон",
+	"已砍至": "Таслах",
+	"活动进行中": "Боловсруулж байна...",
+	"取消活动": "Цуцлах",
+	"继续砍价": "Үргэлжлүүлэх",
+	"暂无砍价记录": "Өгөгдөл байхгүй",
+	"人正在参与": "Оролцож байна",
+	"最低": "Хамгийн бага",
+	"参与砍价": "Хэлэлцэх",
+	"砍价列表": "Худалдааны жагсаалт",
+	"人查看": "Харах",
+	"人分享": "Хуваалцах",
+	"人参与": "Оролцсон",
+	"邀请您帮忙砍价": "Тусламжийг урих",
+	"查看商品": "Зүйлс харах",
+	"当前": "Одоогийн",
+	"已砍": "жижиглэсэн",
+	"还剩": "Зүүн",
+	"立即参与砍价": "Одоо наймаалцах",
+	"商品暂无库存": "Хувьцаагүй",
+	"邀请好友帮砍价": "Найзуудынхаа тусламжийг урих",
+	"已有": "Байна",
+	"位好友成功砍价": "Амжилттай найзууд",
+	"帮好友砍一刀": "Найзууддаа туслаарай",
+	"好友已砍价成功": "Найзууд аль хэдийн амжилттай болсон",
+	"我也要参与": "Би оролцох болно",
+	"已成功帮助好友砍价": "Найзууддаа амжилтанд тусал",
+	"恭喜您砍价成功,快去支付": "Хэлэлцээ амжилттай боллоо, төлбөрөө хий",
+	"立即支付": "Одоо төлөх",
+	"抢更多商品": "Илүү их татах",
+	"砍价帮": "Худалдааны бүлэг",
+	"砍掉": "Таслах",
+	"更多": "Илүү их",
+	"关闭": "Хаах",
+	"点击加载更多": "Илүү ачаалах бол товшино уу",
+	"商品详情": "Дэлгэрэнгүй мэдээлэл",
+	"砍价规则": "Худалдааны дүрэм",
+	"您已砍掉": "Та таслав",
+	"元,听说分享次数越多砍价成功的机会越大哦": ", Та олон удаа хуваалцах тусам амжилттай наймаа хийх боломж нэмэгдэнэ",
+	"成功帮砍": "Таслахад амжилттай туслаач",
+	"您也可以砍价低价拿哦,快去挑选心仪的商品吧": "Та мөн хямд үнээр хямд үнээр хямд үнээр худалдаж авах боломжтой, очоод дуртай бүтээгдэхүүнээ сонгоорой",
+	"发送给朋友": "Найздаа илгээх",
+	"微信好友": "Wechat найз",
+	"微信朋友圈": "WeChat мөчүүд",
+	"生成海报": "Зурагт хуудас үүсгэх",
+	"砍价详情": "Хэлэлцээний дэлгэрэнгүй мэдээлэл",
+	"分享成功": "Амжилттай хуваалцсан",
+	"分享失败": "Хуваалцаж чадсангүй",
+	"该商品每人限购": "Энэ бүтээгдэхүүнийг нэг хүнд ногдох худалдан авалтаар хязгаарласан",
+	"您的好友": "Таны найз",
+	"邀请您砍价": "Таныг тайрахыг урьж байна",
+	"人团": "Хүмүүс",
+	"去拼团": "Яв",
+	"拼团列表": "Бүлгийн жагсаалт",
+	"类型": "Төрөл",
+	"累计销量": "Нийт борлогдсон",
+	"限购": "Хязгаарлалт",
+	"种规格可选": "Үзүүлэлтүүд",
+	"已拼": "Үсгийн үсэг",
+	"件": "Хэсэг",
+	"还差": "Зөвхөн",
+	"人成团": "амжилт",
+	"去拼单": "Нэгдэх",
+	"查看更多": "Илүү их",
+	"收起": "Хойшоо",
+	"拼团玩法": "Бүлгийн үйл явц",
+	"开团/参团": "Эхлэх",
+	"邀请好友": "Урилга",
+	"满员发货": "Хүргэлт",
+	"用户评价": "Шүүмж",
+	"好评率": "Магтаал",
+	"产品介绍": "Дэлгэрэнгүй мэдээлэл",
+	"单独购买": "Ганцаараа худалдаж авах",
+	"立即开团": "Эхлэх бүлэг",
+	"请选择": "Сонгосон",
+	"商品": "Бүтээгдэхүүн",
+	"详情": "Дэлгэрэнгүй",
+	"缺少参数无法查看商品": "Параметр дутуу байгаа тул бүтээгдэхүүнийг харж чадахгүй байна",
+	"参数错误": "Параметрийн алдаа",
+	"已选择": "Сонгосон",
+	"保存成功": "Хадгалсан амжилт",
+	"保存失败": "Хадгалж чадсангүй",
+	"人拼": "Хүмүүс тулалддаг",
+	"剩余": "Үлдсэн",
+	"结束": "Дуусгах",
+	"恭喜您拼团成功": "Амжилттай бүлэглэсэнд баяр хүргэе",
+	"人,拼团失败": "Хүн орхисон, бүлэг амжилтгүй боллоо",
+	"拼团中,还差": "Бүлэгт байсаар байна ",
+	"人拼团成功": "Бүлэгт амжилттай нэгдэх хүн үлдсэн",
+	"邀请好友参团": "Бүлэгт нэгдэх найзуудаа урих",
+	"再次开团": "Дахин бүлэглэх",
+	"取消开团": "Цуцлах",
+	"查看订单信息": "Захиалга харах",
+	"大家都在拼": "Бүх бүлэг",
+	"更多拼团": "Илүү их",
+	"邀请您参团": "Та нэгдэхийг урьж байна",
+	"你不是该团的成员": "Та бүлгийн гишүүн биш",
+	"已抢": "дээрэмдсэн",
+	"抢购中": "Одоо шүүрч авах",
+	"未开始": "Эхэлсэнгүй",
+	"已结束": "Дээрх",
+	"暂无商品,去看点别的吧": "Бүтээгдэхүүн байхгүй",
+	"即将开始": "Эхэлсэнгүй",
+	"距秒杀结束仅剩": "Төгсгөлд нь л үлдлээ",
+	"累计销售": "Зарагдсан",
+	"收藏": "Цуглуулах",
+	"保存到手机": "Утсанд хадгалах",
+	"长按图片可以保存到手机": "Утсанд хадгалахын тулд удаан дарна уу",
+	"抢购详情页": "Худалдан авалтын дэлгэрэнгүй хуудас",
+	"二维码获取失败": "QR код авч чадсангүй",
+	"请选择属性": "Үл хөдлөх хөрөнгө сонгоно уу",
+	"提示:点击图片即可保存至手机相册": "Зөвлөгөө: Зурган дээр дарж утасны цомогт хадгална уу",
+	"拼团海报": "Тааварт зурагт хуудас",
+	"砍价海报": "Хэлэлцэх зурагт хуудас",
+	"海报生成中": "Зурагт хуудас үүсгэж байна",
+	"海报图片获取失败": "Зурагт хуудасны зургийг авч чадсангүй",
+	"海报": "Зурагт хуудас",
+	"已预定": "Захиалагдсан",
+	"预售价": "Урьдчилсан худалдаа",
+	"立即预定": "Одоо захиалах",
+	"开售时间": "Борлуулалтын хугацаа",
+	"预售活动": "Борлуулалтын өмнөх арга хэмжээ",
+	"起": "Өсөх",
+	"划线价": "ORP",
+	"开通“超级会员”立省": "\"Супер гишүүн\"-г унтрааж ",
+	"元": "$",
+	"立即开通": "Одоо идэвхжүүл",
+	"预售活动时间": "Борлуулалтын өмнөх хугацаа",
+	"预售结束后": "Дотор тээвэрлэгддэг",
+	"天内发货": "Борлуулалтын өмнөх худалдаа дууссаны дараах өдрүүд",
+	"活动": "Үйл ажиллагаа",
+	"参与秒杀": "Секкилл",
+	"参与拼团": "Бүлэг",
+	"复制口令": "Барааны кодыг хуулах",
+	"复制成功": "Амжилттай хуулах",
+	"推荐": "Санал болгож байна",
+	"缺少经纬度信息无法查看地图": "Өргөрөг, уртрагийн мэдээлэл алга болсон тул газрын зургийг харж чадахгүй байна",
+	"产品库存不足,请选择其它属性": "Бүтээгдэхүүний нөөц хангалтгүй, өөр шинж чанар сонгоно уу",
+	"立即退款": "Шууд буцаан олгох",
+	"一键改价": "Үнийг өөрчлөх",
+	"订单备注": "Захиалгын тэмдэглэл",
+	"商品总价": "Нийт үнэ",
+	"原始邮费": "Хуучин шуудан",
+	"实际支付": "Бодит үнэ",
+	"退款金额": "Буцаан олголтын үнэ",
+	"请填写备注信息": "Тайлбарыг бөглөнө үү",
+	"立即修改": "Одоо засах",
+	"确认退款": "Буцаан олголтоо баталгаажуулах",
+	"拒绝退款": "Буцаан олголтоос татгалзсан",
+	"取消": "Цуцлах",
+	"订单号": "Захиалгын ID",
+	"发货方式": "Гэрэмж",
+	"发货类型": "Тээвэрлэлтийн төрөл",
+	"快递公司": "Экспресс",
+	"快递单号": "Тоо",
+	"顺丰请输入单号 :收件人或寄件人手机号后四位": "SF Express-ийн хяналтын дугаарыг оруулна уу: хүлээн авагч эсвэл илгээгчийн гар утасны дугаарын сүүлийн дөрвөн орон",
+	"例如:SF000000000000:3941": "Жишээ нь: SF000000000000:3941",
+	"电子面单": "Цахим хуудас",
+	"预览": "Урьдчилан харах",
+	"寄件人姓名": "Илгээгчийн нэр",
+	"填写寄件人姓名": "Илгээгчийн нэрийг бөглөнө үү",
+	"寄件人电话": "Илгээгчийн утас",
+	"填写寄件人电话": "Илгээгчийн утасны дугаарыг бөглөнө үү",
+	"寄件人地址": "Илгээгчийн хаяг",
+	"填写寄件人地址": "Илгээгчийн хаягийг бөглөнө үү",
+	"送货人": "Хүргэгч",
+	"确认提交": "Илгээх",
+	"发货": "Усан онгоц",
+	"送货": "Өгөх",
+	"无需物流": "Шаардлагагүй",
+	"手动填写": "Гараар бөглөх",
+	"电子面单打印": "Цахим хуудас",
+	"填写快递单号": "Шуудангийн дугаараа бөглөнө үү",
+	"请选择电子面单": "Цахим баримт сонгоно уу",
+	"待付款": "Төлбөр төлөх",
+	"待发货": "Тээвэрлэх",
+	"待收货": "Хүлээн авах",
+	"待评价": "Үнэлгээ өгөх",
+	"售后/退款": "Төлбөрийг буцаан олгох",
+	"数据统计": "Статистик",
+	"今日成交额": "Өнөөдөр зарагдсан",
+	"昨日成交额": "Өчигдөр зарагдсан",
+	"本月成交额": "Сар зарагдсан",
+	"今日订单数": "Өнөөдрийн захиалга",
+	"昨日订单数": "Өчигдрийн захиалга",
+	"本月订单数": "Сарын захиалга",
+	"详细数据": "Дэлгэрэнгүй мэдээлэл",
+	"日期": "Огноо",
+	"订单数": "Захиалгын тоо",
+	"成交额": "Эргэц",
+	"立即核销": "Одоо хас",
+	"查看": "Харах",
+	"确定要核销此订单吗": "Та энэ захиалгыг хассан гэдэгт итгэлтэй байна уу",
+	"确定核销": "Баталгаажуулах",
+	"请输入核销码": "Баталгаажуулах кодыг оруулна уу",
+	"请输入正确的核销码": "Зөв баталгаажуулах код оруулна уу",
+	"查询中": "Асуулга",
+	"订单": "Захиалга",
+	"订单未备注,点击添加备注信息": "Захиалгад ямар ч тайлбар байхгүй, тайлбар нэмэхийн тулд дарна уу",
+	"复制": "Хуулбар",
+	"件商品,应支付": "Төлбөр төлөх ёстой зүйлс",
+	"邮费": "Шуудангийн мөнгө",
+	"订单编号": "Захиалгын ID",
+	"下单时间": "Захиалгын цаг",
+	"支付状态": "Төлбөрийн төлөв",
+	"已支付": "Төлсөн",
+	"未支付": "Төлбөргүй",
+	"支付方式": "Төлбөрийн арга",
+	"买家留言": "Худалдан авагч MSG",
+	"支付金额": "Төлбөрийн дүн",
+	"优惠券抵扣": "Купоны хасалт",
+	"运费": "Үнэ",
+	"实付款": "Бодит дүн",
+	"配送方式": "Хүргэх арга",
+	"快递": "Экспресс",
+	"送货人电话": "Шуудангийн утас",
+	"确认付款": "Төлбөрийг баталгаажуулах",
+	"去发货": "Тээвэрлэх",
+	"改价成功": "Үнэ амжилттай өөрчлөгдсөн",
+	"改价失败": "Үнийн өөрчлөлт амжилтгүй боллоо",
+	"请输入备注": "Тэмдэглэл оруулна уу",
+	"退款中": "Төлбөрийг буцаан олгох",
+	"部分退款中": "Хэсэгчилсэн буцаан олголт",
+	"件商品,实付款": "Бараа, төлсөн",
+	"同意退货": "Буцахыг зөвшөөрч байна",
+	"待用户发货": "Ачилгаагүй",
+	"请输入正确的金额": "Зөв дүнг оруулна уу",
+	"今天": "Өнөөдөр",
+	"昨天": "Өчигдөр",
+	"最近7天": "Сүүлийн 7 хоног",
+	"本月": "Сар",
+	"自定义": "Өөрчлөх",
+	"营业额(元)": "Эргэц",
+	"订单量(份)": "Тоо хэмжээ",
+	"增长率": "Өсөх хувь",
+	"增长": "Өсөх",
+	"单位": "нэгж",
+	"元.": "Юань",
+	"分.": "Цент",
+	"固定": "Тогтмол",
+	"指定范围": "Хамрах хүрээ",
+	"提交时间": "Илгээх хугацаа",
+	"原因": "Шалтгаан",
+	"暂无申请记录,快去申请吧!": "Одоохондоо өргөдлийн бүртгэл байхгүй, одоо өргөдөл гарга!",
+	"没有更多啦": "Дахиад байхгүй",
+	"待审核": "Хяналт хүлээгдэж байна",
+	"审核通过": "Шалгалтад тэнцсэн",
+	"审核未通过": "Шалгаж чадсангүй",
+	"编辑": "Засварлах",
+	"重新提交": "Дахин илгээх",
+	"会员优惠价": "VIP хөнгөлөлт",
+	"余额支付": "Төлбөрийн үлдэгдэл",
+	"可用余额": "Тэнцвэр",
+	"微信支付": "WeChat Pay",
+	"确认": "Баталгаажуулах",
+	"支付提醒": "Төлбөрийн сануулга",
+	"线下支付已关闭,请点击确认按钮返回主页": "Оффлайн төлбөрийг хаасан тул баталгаажуулах товчийг дарж нүүр хуудас руу буцна уу",
+	"请输入支付金额": "Төлбөрийн дүнг оруулна уу",
+	"正在确认": "Баталгаажуулж байна",
+	"进入商城": "Дэлгүүрт орох",
+	"代理商名称": "Агентлагийн нэр",
+	"请输入代理商名称": "Агентлагийн нэрийг оруулна уу",
+	"用户姓名": "Таны нэр",
+	"请输入姓名": "Нэрээ оруулна уу",
+	"联系电话": "Таны утас",
+	"请输入手机号": "Утасны дугаараа оруулна уу",
+	"验证码": "OTP код",
+	"填写验证码": "OTP кодыг бөглөнө үү",
+	"邀请码": "Урилгын код",
+	"请输入代理商邀请码": "Урилгын кодыг оруулна уу",
+	"请上传营业执照及行业相关资质证明图片": "Аж ахуйн нэгжийн лиценз болон салбартай холбоотой мэргэшлийн гэрчилгээний зургийг байршуулна уу",
+	"图片最多可上传10张,图片格式支持JPG、PNG、JPEG": "10 хүртэл зураг байршуулах боломжтой ба зургийн формат нь JPG, PNG, JPEG-г дэмждэг",
+	"上传图片": "Байршуулах",
+	"已阅读并同意": "Уншсан ба зөвшөөрч байна",
+	"代理商协议": "Агентлагийн гэрээ",
+	"提交申请": "Хүлээж өгөх",
+	"代理商入驻协议": "Төлөөлөгчийн гэрээ",
+	"恭喜,您的资料提交成功!": "Баяр хүргэе, амжилттай илгээлээ!",
+	"返回首页": "Гэртээ буцах",
+	"恭喜,您的资料通过审核!": "Баяр хүргэе, Шалгалт амжилттай боллоо!",
+	"您的申请未通过!": "Таны өргөдлийг татгалзсан!",
+	"重新申请": "Дахин өргөдөл гаргах",
+	"获取验证码": "OTP код авах",
+	"请输入正确的手机号码": "Утасны дугаараа зөв оруулна уу",
+	"重新获取": "Дахин авах",
+	"请上传营业执照": "Бизнесийн лицензийг байршуулна уу",
+	"请勾选并同意入驻协议": "Мэргэжлийн гэрээг тэмдэглэж, зөвшөөрнө үү",
+	"专题栏": "Сэдвийн багана",
+	"暂无数据": "Өгөгдөл байхгүй",
+	"请输入卡号": "Картын дугаараа оруулна уу",
+	"请输入卡密": "Нууц үгээ оруулна уу",
+	"确认激活": "Баталгаажуулах",
+	"SVIP会员尊享权": "SVIP гишүүний эрх",
+	"正在激活": "Идэвхжүүлж байна",
+	"已使用": "Ашигласан",
+	"永久SVIP会员": "Байнгын SVIP гишүүн",
+	"SVIP会员": "SVIP гишүүн",
+	"到期": "төлөвших",
+	"您与": "Та нартай",
+	"商城的第": "Худалдааны төв",
+	"天.": "Өдөр.",
+	"已累积为您节省": "Таны хуримтлуулсан хадгаламж",
+	"开通即享会员权益": "Гишүүдийн үр шимийг хүртэх",
+	"续费会员": "Шинэчлэх",
+	"开通会员": "SVIP-д нэгдэх",
+	"有效期至": "хүртэл хүчинтэй",
+	"试用": "Оролдоод үзээрэй",
+	"购买即视为同意": "Зөвшөөрлийн дагуу худалдан авах",
+	"会员用户协议": "SVIP гэрээ",
+	"点击兑换卡密": "Картыг эргүүлэн авахын тулд дарна уу",
+	"会员优惠券": "SVIP купон",
+	"SVIP商品推荐": "SVIP санал болгож байна",
+	"商城价": "Дэлгүүрийн үнэ",
+	"激活会员卡": "Картыг идэвхжүүлэх",
+	"支付宝支付": "Алипай",
+	"成功开启0元试用": "0 юанийн туршилтыг амжилттай нээсэн",
+	"确认绑定": "Холбоо баталгаажуулах",
+	"绑定成功": "Холбоо амжилттай боллоо",
+	"商城客服已离线": "Хэрэглэгчийн үйлчилгээ офлайн байна",
+	"我要反馈": "Би санал хүсэлт хүсч байна",
+	"请填写内容": "Агуулгыг бөглөнө үү",
+	"提交": "Илгээх",
+	"精品推荐": "Санал болгож байна",
+	"热门榜单": "Алдартай",
+	"首发新品": "Шинэ",
+	"促销单品": "Урамшуулал",
+	"预告": "Мэдэгдэл",
+	"回放": "Тоглуулах",
+	"进行中": "боловсруулж байна",
+	"发送客服": "Илгээх",
+	"客服连接中": "Хэрэглэгчийн үйлчилгээ холбогдож байна",
+	"连接失败": "Холболт амжилтгүй боллоо",
+	"提示": "Зөвлөгөө",
+	"客服已下线,是否需要反馈?": "Хэрэглэгчийн үйлчилгээ офлайн байна, танд санал хүсэлт хэрэгтэй байна уу?",
+	"和好友一起分享": "Найзуудтайгаа хуваалцах",
+	"积分抵扣": "Оноо хасалт",
+	"已开票": "Төлбөр тооцсон",
+	"未开票": "Нэхэмжлэл гаргаагүй",
+	"发票信息": "Нэхэмжлэлийн мэдээлэл",
+	"发票抬头": "Нэхэмжлэх",
+	"发票抬头类型": "Нэхэмжлэлийн толгойн төрөл",
+	"个人": "НЭГ",
+	"企业": "COM",
+	"发票类型": "Нэхэмжлэлийн төрөл",
+	"电子普通发票": "Цахим ерөнхий нэхэмжлэх",
+	"电子专用发票": "Цахим тусгай нэхэмжлэх",
+	"企业税号": "Аж ахуйн нэгжийн татвар",
+	"联系信息": "Холбоо барих мэдээлэл",
+	"真实姓名": "Жинхэнэ нэр",
+	"联系邮箱": "И-мэйл",
+	"抬头选择": "Толгой сонгох",
+	"默认": "Өгөгдмөл",
+	"普通": "Энгийн",
+	"专用": "Зориулагдсан",
+	"您还没有添加发票信息哟": "Та нэхэмжлэхийн мэдээллийг нэмээгүй байна",
+	"添加新的抬头": "Шинэ гарчиг нэмэх",
+	"不开发票": "Нэхэмжлэхгүй",
+	"抽奖": "Сугалаа",
+	"全选": "Бүгдийг сонгох",
+	"属性": "Атрибутууд",
+	"请填写具体地址": "Тодорхой хаягаа оруулна уу",
+	"省": "Аймаг",
+	"市": "Хот",
+	"区": "Талбай",
+	"添加成功": "Амжилттай нэмэх",
+	"您已拒绝导入微信地址权限": "Та WeChat хаягийг импортлох зөвшөөрлийг татгалзсан байна",
+	"是否进入权限管理,调整授权?": "Та зөвшөөрлийн удирдлагад орж, зөвшөөрлийг тохируулж байна уу?",
+	"已取消": "Цуцлагдсан",
+	"添加失败": "Нэмж чадсангүй",
+	"请填写收货人姓名": "Ачаа хүлээн авагчийн нэрийг бичнэ үү",
+	"请选择所在地区": "Бүсээ сонгоно уу",
+	"请填写详细地址": "Дэлгэрэнгүй хаягийг бөглөнө үү",
+	"星": "Од",
+	"商品满足你的期待么?说说你的想法,分享给想买的他们吧": "Бүтээгдэхүүн таны хүлээлтийг хангаж байна уу? Та юу гэж бодож байгаагаа хэлж, худалдан авахыг хүссэн хүмүүстэй хуваалцаарай",
+	"立即评价": "Одоо үнэлэх",
+	"商品质量": "Бүтээгдэхүүний чанар",
+	"服务态度": "Үйлчилгээний хандлага",
+	"缺少参数": "Дутуу параметрүүд",
+	"请填写你对宝贝的心得": "Бүтээгдэхүүний талаар санал бодлоо бичнэ үү",
+	"正在发布评论": "Сэтгэгдэл бичих",
+	"感谢您的评价": "Таны шүүмж өгсөнд баярлалаа",
+	"评价完成": "Шалгаж дууссан",
+	"恭喜您": "Баяр хүргэе",
+	"获得": "авах",
+	"机会": "Боломж",
+	"领取成功": "Амжилттай хүлээн авсан",
+	"评分": "Оноо",
+	"全部": "БҮХ",
+	"好评": "Магтаал",
+	"中评": "Дундаж",
+	"差评": "Муу",
+	"加载更多": "Илүү ачаалж байна",
+	"千米距离": "километрийн зайд",
+	"搜索商品名称": "Бүтээгдэхүүн хайх",
+	"价格": "Үнэ",
+	"销量": "Зарагдсан",
+	"新品": "Шинэ",
+	"已全部加载": "Бүгд ачаалагдсан",
+	"缺少订单号": "Захиалгын ID дутуу",
+	"退货件数": "Буцаасан дугаар",
+	"退款类型": "Буцаан олголтын төрөл",
+	"退款原因": "Төлбөрийг буцаан олгох шалтгаан",
+	"备注说明": "Тэмдэглэл",
+	"填写备注信息,100字以内": "100 үг доторх тайлбар",
+	"仅退款": "Зөвхөн буцаан олголт",
+	"退货并退款": "Буцах ба буцаан олгох",
+	"申请成功": "Амжилттай өргөдөл гаргасан",
+	"请先选择退货商品": "Эхлээд буцаах зүйлээ сонгоно уу",
+	"搜索历史": "Хайлтын түүх",
+	"热门搜索": "Халуун хайлт",
+	"请输入要搜索的商品": "Хайхыг хүсэж буй бүтээгдэхүүнээ оруулна уу",
+	"正在搜索中": "Хайж байна",
+	"中奖记录": "Ялалтын рекорд",
+	"我的奖品": "Миний шагнал",
+	"活动规则": "Үйл ажиллагааны дүрэм",
+	"昵称": "Хоч",
+	"序号": "Цуваа",
+	"奖品名称": "Шагналын нэр",
+	"获奖时间": "Хожих хугацаа",
+	"商家暂未上架活动哦": "Худалдаач үйл явдлыг хараахан жагсаагүй байна",
+	"获取抽奖信息": "Сугалааны мэдээлэл авах",
+	"奖品类型": "Шагналын төрөл",
+	"立即兑换": "Одоо эргүүлэн авах",
+	"兑换时间": "Хугацаа солилцох",
+	"暂无中奖记录": "Ялалтын рекорд байхгүй",
+	"积分": "Цэг",
+	"余额": "Тэнцвэр",
+	"红包": "Бэлэн мөнгө",
+	"设置收货地址": "Тээвэрлэлтийн хаягийг тохируулах",
+	"暂无门店信息": "Дэлгүүрийн мэдээлэл алга",
+	"剩余积分": "Үлдсэн оноо",
+	"当前积分": "Одоогийн цэгүүд",
+	"开具发票": "Нэхэмжлэх",
+	"请填写": "Бөгнө үү",
+	"配送运费": "Тээвэрлэлтийн хураамж",
+	"会员商品优惠": "Бүтээгдэхүүний санал",
+	"会员运费优惠": "Тээвэрлэлтийн санал",
+	"合计": "Нийт",
+	"使用微信快捷支付": "WeChat хурдан төлбөр",
+	"使用支付宝支付": "Alipay-ээр төлөх",
+	"线下支付": "Оффлайн төлбөр",
+	"使用线下付款": "Офлайн төлбөр ашиглах",
+	"好友代付": "Найз төлдөг",
+	"找微信好友支付": "Төлбөр төлөх найзуудаа ол",
+	"立即使用": "Ашиглах",
+	"请选择要购买的商品": "Худалдан авах зүйлээ сонгоно уу",
+	"发票": "Нэхэмжлэх",
+	"不使用": "Бүү ашигла",
+	"订单创建成功": "Захиалга амжилттай үүсгэгдсэн",
+	"请选择支付方式": "Төлбөрийн хэрэгслээ сонгоно уу",
+	"请选择收货地址": "Хүргэх хаягаа сонгоно уу",
+	"请填写联系人或联系人电话": "Харилцах хүн эсвэл холбоо барих утасны дугаараа оруулна уу",
+	"暂无门店,请选择其他方式": "Одоогоор дэлгүүр байхгүй, өөр арга сонгоно уу",
+	"请输入": "Оруулна уу",
+	"请输入正确的": "Зөвийг оруулна уу",
+	"请上传": "Хуулбарлана уу",
+	"订单支付中": "Төлбөр төлж байна",
+	"请按以上退货信息将商品退回": "Мэдээллийн хамт барааг буцаана уу",
+	"请联系管理员获取退货地址": "Буцах хаягийг админаас авна уу",
+	"待核销": "Бичигдсэн",
+	"核销信息": "Басгах мэдээлэл",
+	"营业时间": "Ажлын цаг",
+	"每日": "Өдөр бүр",
+	"使用说明": "Ашиглах заавар",
+	"可将二维码出示给店员扫描或提供数字核销码": "QR кодыг сканнердах эсвэл дижитал баталгаажуулах код өгөхийн тулд бичиг хэргийн ажилтанд үзүүлж болно",
+	"可将二维码出示给配送员进行核销": "QR кодыг шуудан зөөгч рүү өгч баталгаажуулах боломжтой",
+	"查看位置": "Байршил харах",
+	"拒绝原因": "Татгалзах шалтгаан",
+	"联系客服": "Холбоо барих",
+	"商家备注": "Худалдааны тэмдэглэл",
+	"收货人": "Хүлээн авагч",
+	"收货地址": "Хөлөг онгоцны хаяг",
+	"配送人姓名": "Хөлөг онгоцны нэр",
+	"拨打": "Дуудлага",
+	"虚拟发货": "Виртуал хөлөг онгоц",
+	"已发货,请注意查收": "Ачуулсан, шалгана уу",
+	"虚拟备注": "Виртуал тэмдэглэл",
+	"总代付": "Нийт дүн",
+	"申请开票": "Нэхэмжлэх хэрэглэх",
+	"查看发票": "Нэхэмжлэхийг харах",
+	"取消订单": "Цуцлах",
+	"立即付款": "Төлбөр",
+	"批量退款": "Бөөнөөр буцаан олгох",
+	"查看拼团": "Бүлэг харах",
+	"再次购买": "Дахин худалдаж авах",
+	"取消申请": "Хэрэглэхээ цуцлах",
+	"填写退货信息": "Буцах мэдээлэл",
+	"查看退货物流": "Логистик",
+	"您确认放弃此次申请吗": "Та энэ програмыг орхихыг хүсэж байна уу",
+	"操作成功": "Амжилттай ажиллагаа",
+	"订单信息不存在": "Захиалгын мэдээлэл байхгүй байна",
+	"为保障权益,请收到货确认无误后,再确认收货": "Эрх, ашиг сонирхлыг хамгаалах үүднээс барааг хүлээн авсан эсэхээ баталгаажуулсны дараа барааг хүлээн авсан эсэхээ баталгаажуулна уу.",
+	"删除订单": "Захиалга устгах",
+	"确定删除该订单": "Устгах дарааллыг баталгаажуулах",
+	"删除成功": "Амжилттай устгасан",
+	"确认取消该订单": "Захиалга цуцлахыг баталгаажуулах",
+	"订单信息": "Захиалгын мэдээлэл",
+	"消费订单": "Захиалга",
+	"总消费": "Нийт дүн",
+	"预售": "Урьдчилсан худалдаа",
+	"线下付款,未支付": "Оффлайн төлбөргүй",
+	"未核销": "Бичигдээгүй",
+	"件商品,总金额": "зүйлс, нийт дүн",
+	"查看详情": "Харах",
+	"暂无订单": "Одоохондоо захиалга алга",
+	"缺少订单号无法取消订单": "Захиалгын дугааргүйгээр захиалгыг цуцлах боломжгүй",
+	"订单支付成功": "Захиалга амжилттай төлсөн",
+	"订单支付失败": "Захиалга төлж чадсангүй",
+	"暂未支付": "Хараахан төлөөгүй байна",
+	"失败原因": "амжилтгүй болсон шалтгаан",
+	"重新购买": "Дахин худалдан авах",
+	"重新支付": "Дахин төлөх",
+	"赠送优惠券": "Купон өгөх",
+	"有效期": "Хүчин төгөлдөр байдал",
+	"缺少参数无法查看订单支付状态": "Дутуу параметрүүд захиалгын төлбөрийн төлөвийг харах боломжгүй",
+	"最多可上传3张": "3 хүртэл байршуулалт",
+	"请选择产品": "Бүтээгдэхүүнээ сонгоно уу",
+	"该产品没有更多库存了": "Энэ бүтээгдэхүүний нөөц байхгүй",
+	"优品推荐": "Шилдэг зөвлөмж",
+	"暂无产品": "Одоохондоо бүтээгдэхүүн алга",
+	"重新选择": "Дахин сонгох",
+	"请选择数量": "Тоо хэмжээг сонгоно уу",
+	"砍价专区·BARGAINING": "ХЭРЭГЛЭЭ",
+	"立即砍价": "Одоо таслах",
+	"拼团活动": "Бүлэг",
+	"人拼团成功.": "Хүмүүс амжилтанд хүрсэн",
+	"人参团": "Хүн орхоодой бүлэг",
+	"拼团价": "Бүлгийн үнэ",
+	"已过期": "Хугацаа дууссан",
+	"关注": "Дагах",
+	"推荐好货": "Барааг санал болгох",
+	"暂无商品": "Одоохондоо бүтээгдэхүүн алга",
+	"限时秒杀": "Хязгаарлагдмал хугацаа",
+	"抢": "Барьж авах",
+	"广告位": "ADV зай",
+	"精彩内容": "Онцлох үйл явдал",
+	"砍价模块,暂无数据": "Худалдааны модуль, одоогоор өгөгдөл алга байна",
+	"砍价活动": "Хэлэлцэх",
+	"呼朋唤友来砍价": "Найзуудаа дуудаарай.",
+	"拼团模块,暂无数据": "Бүлгийн модуль, одоогоор өгөгдөл алга",
+	"享超值开团价": "Мөнгөний үнэ цэнийн бүлгийн үнээс таашаал аваарай",
+	"优惠券,暂无数据": "Купон, мэдээлэл түр байхгүй",
+	"领取今日好券": "Өнөөдрийн сайн купон аваарай",
+	"可用": "Ашигласан",
+	"领取": "Нэхэмжлэл",
+	"客服": "Үйлчилгээ",
+	"商品列表,暂无数据": "Түр дата байхгүй",
+	"搜索商品": "Бүтээгдэхүүн хайх",
+	"暂无图片,请上传图片": "Зураг байхгүй, байршуулна уу",
+	"首发新品,暂无数据": "Анхны шинэ бүтээгдэхүүн, хараахан өгөгдөл алга",
+	"多个优质商品最新上架": "Лангуун дээрх хамгийн сүүлийн үеийн өндөр чанартай бараа",
+	"暂无新闻,请上传新闻": "Мэдээ байхгүй, мэдээгээ оруулна уу",
+	"热度 TOP": "ДЭЭД халаах",
+	"排行榜、暂无数据": "Тэргүүлэх самбар, түр өгөгдөл байхгүй",
+	"促销单品,暂无数据": "Урамшууллын зүйл, мэдээлэл түр байхгүй",
+	"库存商品优惠促销活动": "Нөөцөд байгаа барааг сурталчлах үйл ажиллагаа",
+	"精品推荐,暂无数据": "Дэлгүүрийн зөвлөмж, хараахан өгөгдөл алга",
+	"上百种商品分类任您选择": "Таны сонгох боломжтой олон зуун бүтээгдэхүүний ангилал",
+	"秒杀模块,暂无数据": "Seckill модуль, өгөгдөл түр байхгүй",
+	"场": "Сайт",
+	"暂无数据,请设置": "Өгөгдөл байхгүй, тохируулна уу",
+	"暂无数据,请先添加分类": "Өгөгдөл байхгүй, эхлээд ангиллыг нэмнэ үү",
+	"暂无标题": "Түр зуур гарчиг байхгүй",
+	"诚意推荐品质商品": "Сайн санааны үүднээс чанартай бараа санал болгох",
+	"点击“立即关注”即可关注公众号": "Албан ёсны бүртгэлийг дагахын тулд 'одоо дагах' дээр дарна уу",
+	"立即关注": "Одоо дага",
+	"添加到我的小程序, 微信首页下拉即可访问商城。": "Үүнийг миний апплетад нэмээд wechat нүүр хуудсыг доош татаж худалдааны төв рүү нэвтрэх боломжтой",
+	"点击": "Дарна уу",
+	"服务协议与隐私政策": "Үйлчилгээний гэрээ ба нууцлалын бодлого",
+	"请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。": "Үйлчилгээний гэрээ болон нууцлалын бодлогыг анхааралтай уншиж, бүрэн ойлгоно уу, үүнд: Танд шуурхай зурвас илгээх, контент хуваалцах болон бусад үйлчилгээг үзүүлэхийн тулд бид таны төхөөрөмжийг цуглуулах шаардлагатай. мэдээлэл, үйлдлийн бүртгэл болон бусад хувийн мэдээлэл. Та хувийн мэдээллээ харах, өөрчлөх, устгах, зөвшөөрлөө удирдах боломжтой Тохиргоо",
+	"你可以阅读": "Та уншиж болно",
+	"《服务协议与隐私政策》": "Үйлчилгээний гэрээ ба нууцлалын бодлого",
+	"了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。": "Дэлгэрэнгүй үзэх. Хэрэв та зөвшөөрвөл 'Би зөвшөөрч байна' гэснийг товшино уу, манай үйлчилгээг хүлээн зөвшөөрч эхэлнэ",
+	"我同意": "Би зөвшөөрч байна",
+	"残忍拒绝": "Харгис няцаалт",
+	"下拉加载更多": "Ачааллыг доош нь татах",
+	"网络连接断开": "Сүлжээний холболт тасарсан",
+	"请检查情况:": "Нөхцөлийг шалгана уу:",
+	"在设置中是否已开启网络权限": "Тохиргоонд сүлжээний зөвшөөрлийг идэвхжүүлсэн эсэх",
+	"当前是否处于弱网环境": "Одоогоор сүлжээний орчинд сул байна",
+	"版本是否过低,升级试试吧": "Хувилбар хэт бага байвал шинэчилж үзнэ үү",
+	"重新连接": "дахин холбогдох",
+	"加载中": "Ачааж байна",
+	"没有更多内容啦~": "Дахиад контент байхгүй~",
+	"100%正品保证": "100% жинхэнэ",
+	"所有商品精挑细选": "Маш сонгомол бай",
+	"售后无忧": "Зарагдсаны дараа санаа зоволтгүй",
+	"管理": "Хоолой",
+	"购物数量": "Худалдааны тоо",
+	"请重新选择商品规格": "Бүтээгдэхүүний тодорхойлолтыг дахин сонгоно уу",
+	"重选": "Дахин сонголт",
+	"失效商品": "Хүчингүй бараа",
+	"失效": "Бүтэлгүйтэл",
+	"该商品已失效": "Барааны хугацаа дууссан",
+	"立即下单": "Одоо захиалах",
+	"我也是有底线的": "Надад бас үр дүн бий",
+	"产品库存不足,请选择其它": "Бүтээгдэхүүний нөөц хангалтгүй, өөрийг сонгоно уу",
+	"添加购物车成功": "Сагсыг амжилттай нэмлээ",
+	"清除成功": "Цэвэрлэгээ амжилттай боллоо",
+	"暂无兑换记录~": "Валютын бүртгэл байхгүй~",
+	"大家都在换": "Хүн бүр өөрчлөгдөж байна",
+	"人兑换": "Хүн солилцох",
+	"轻松赚积分": "Амархан оноо цуглуул",
+	"购买商品": "Бараа худалдаж авах",
+	"购买商品可获得积分奖励": "Бараа худалдаж авсан онооны шагнал",
+	"去完成": "Яв",
+	"每日签到活动": "Өдөр тутмын бүртгэлийн үйл ажиллагаа",
+	"每日签到可获得积分奖励": "Өдөр бүр бүртгүүлснээр онооны урамшуулал авах боломжтой",
+	"九宫格抽奖活动": "Jiugongge сугалаа",
+	"幸运抽奖可获得积分奖励": "Азтай сугалаа онооны шагнал авах боломжтой",
+	"我的积分": "Миний оноо",
+	"每日签到": "Өдөр бүр нэвтрэх",
+	"积分抽奖": "Онооны сугалаа",
+	"兑换记录": "солилцооны бичлэг",
+	"已兑换": "Гэтгэсэн",
+	"无法兑换": "Зохицуулах боломжгүй",
+	"[默认]": "[Өгөгдмөл]",
+	"可用积分": "Боломжтой оноо",
+	"快递费用": "Экспресс хураамж",
+	"免运费": "Ачаа үнэгүй",
+	"备注信息": "Тэмдэглэл",
+	"请添加备注(150字以内)": "Тэмдэглэл (150 үг дотор) нэмнэ үү",
+	"使用线上支付宝支付": "Онлайн Alipay-ээр төлбөр хийх",
+	"可用余额:": "Үлдэл:",
+	"选择线下付款方式": "Офлайн төлбөрийн аргыг сонгох",
+	"正在加载…": "Ачааж байна...",
+	"可用积分不足!": "Боломжийн оноо хангалтгүй!",
+	"订单状态": "Захиалгын байдал",
+	"支付积分": "Төлбөрийн оноо",
+	"备注": "Тэмдэглэл",
+	"配送核销码": "Хүргэлтийн баталгаажуулах код",
+	"当前可用余额:": "Одоо байгаа үлдэгдэл:",
+	"正在加载": "Ачааж байна",
+	"缺少经纬度信息无法查看地图!": "Газрын зургийг уртраг, өргөргийн мэдээлэлгүйгээр үзэх боломжгүй!",
+	"商品兑换成功": "Амжилттай зарцуулагдсан",
+	"兑换方式": "солилцооны арга",
+	"积分兑换": "Цэгийн солилцоо",
+	"兑换积分": "Оноо эргүүлэн авах",
+	"取消兑换": "солилцоо цуцлах",
+	"缺少参数无法查看订单兑换状态": "Захиалгын солилцооны төлөвийг параметргүйгээр харах боломжгүй",
+	"用户离开了": "Хэрэглэгч явсан",
+	"兑换成功": "Амжилттай зарцуулагдсан",
+	"物流公司": "Логистикийн компани",
+	"复制单号": "Баримт бичгийн дугаарыг хуулах",
+	"设为默认": "Өгөгдмөлөөр тохируулах",
+	"添加新地址": "Шинэ хаяг нэмэх",
+	"导入微信地址": "Wechat хаяг импортлох",
+	"取消选择": "Сонголтыг цуцлах",
+	"您设置的默认地址不存在!": "Таны тохируулсан өгөгдмөл хаяг байхгүй байна!",
+	"设置成功": "Тохиргоо амжилттай боллоо",
+	"您删除的地址不存在!": "Таны устгасан хаяг байхгүй байна!",
+	"获取头像": "Аватар авах",
+	"请点击授权": "Зөвшөөрөх товчийг дарна уу",
+	"绑定手机号": "Гар утасны дугаарыг холбох",
+	"永久": "Байнгын",
+	"会员到期": "Гишүүнчлэлийн хугацаа дуусах",
+	"未开通会员": "Нээлттэй гишүүн биш",
+	"查看会员权益": "Гишүүнчлэлийн үр өгөөжийг харах",
+	"立即续费": "Шинэчлэх",
+	"立即激活": "Идэвхжүүлэх",
+	"会员可享多项权益": "Олон үр шимийг хүртээрэй",
+	"订单中心": "Миний захиалга",
+	"我的服务": "Миний үйлчилгээ",
+	"隐私协议": "Нууцлал",
+	"商家管理": "Бизнесийн удирдлага",
+	"更新用户信息成功": "Хэрэглэгчийн мэдээллийг амжилттай шинэчилсэн",
+	"客服接待": "хүлээн авах",
+	"点击复制网址去浏览器中打开": "Хөтч дээр нээхийн тулд URL хуулах дээр дарна уу",
+	"点击复制": "Хуулбар дээр дарна уу",
+	"完成支付": "Төлбөрийг дуусгах",
+	"点击右上角": "Баруун дээд буланд дарна уу",
+	"选择 在浏览器 打开,去支付宝支付": "Хөтөч дээр нээж, Alipay-ээр төлөхийг сонго",
+	"支付订单不存在,页面将在2秒后自动关闭!": "Төлбөрийн даалгавар байхгүй, хуудас 2 секундын дараа автоматаар хаагдах болно!",
+	"正在支付中": "Төлбөр төлж байна",
+	"支付订单不存在,页面将在2秒后自动关闭": "Төлбөрийн захиалга байхгүй, хуудас 2 секундын дараа автоматаар хаагдах болно",
+	"复制失败": "Хуулбарлах амжилтгүй",
+	"您目前的排名": "Таны одоогийн зэрэглэл",
+	"您目前暂无排名": "Та одоо эрэмбэлж байна",
+	"暂无排名~": "Жагсаалт байхгүй ~",
+	"输入手机号": "Гар утасны дугаар оруулна уу",
+	"输入验证码": "Баталгаажуулах кодыг оруулна уу",
+	"立即登录": "Одоо нэвтэрнэ үү",
+	"请填写手机号码": "Гар утасны дугаараа оруулна уу",
+	"请填写验证码": "Баталгаажуулах кодыг бөглөнө үү",
+	"请输入正确的验证码": "Зөв баталгаажуулах код оруулна уу",
+	"正在登录中": "Нэвтэрч байна",
+	"登录成功": "Нэвтрэх амжилттай",
+	"获取授权": "Зөвшөөрөл авч байна",
+	"获取微信的手机号授权": "wechat гар утасны дугаарын зөвшөөрөл авах",
+	"获取微信手机号": "wechat гар утасны дугаар авах",
+	"输入手机号码": "Гар утасны дугаар оруулна уу",
+	"填写登录密码": "Нэвтрэх нууц үгээ бөглөнө үү",
+	"登录": "Нэвтрэх",
+	"快速登录": "Хурдан нэвтрэх",
+	"账号登录": "Бүртгэлд нэвтрэх",
+	"其他方式登录": "Бусад аргаар нэвтрэх",
+	"登录中": "Нэвтэрч байна",
+	"获取用户信息失败": "Хэрэглэгчийн мэдээллийг авч чадсангүй",
+	"请绑定手机号后,继续操作": "Гар утасны дугаараа залгаад үйл ажиллагаагаа үргэлжлүүлнэ үү",
+	"错误信息": "Алдааны мэдээлэл",
+	"用户点击确定": "Хэрэглэгч OK дарна",
+	"用户点击取消": "Хэрэглэгч Цуцлах дээр дарна",
+	"登录失败": "Нэвтрэх алдаа",
+	"请勿重复点击": "Дахин дахин дарж болохгүй",
+	"请填写密码": "Нууц үгээ оруулна уу",
+	"您输入的密码过于简单": "Таны оруулсан нууц үг хэтэрхий энгийн байна",
+	"请填写账号": "Дансны дугаарыг бөглөнө үү",
+	"请输入正确的账号": "Зөв дансны дугаар оруулна уу",
+	"[图片]": "[Зураг]",
+	"[语音]": "[дуу хоолой]",
+	"[商品]": "[Бүтээгдэхүүн]",
+	"[订单]": "[Захиалга]",
+	"亲、暂无消息记录哟!": "Эрхэм ээ, одоохондоо мессеж бичээгүй байна!",
+	"站内消息": "Станцын мессеж",
+	"客服消息": "Хэрэглэгчийн үйлчилгээний мессеж",
+	"通知于": "Мэдэгдэл өгсөн",
+	"获取详情中": "Дэлгэрэнгүй мэдээллийг авах",
+	"代付订单创建成功,发给好友帮你付款吧~": "Төлбөрийн захиалга амжилттай үүсгэгдсэн тул төлбөрөө төлөхөд тань туслахын тулд үүнийг найздаа илгээнэ үү ~",
+	"帮我付一下这件商品了,谢谢~": "Надад энэ барааны төлбөрийг төлөхөд тусална уу, баярлалаа ~",
+	"已经有人替我代付,谢谢啦~": "Хэн нэгэн миний төлбөрийг төлсөн, баярлалаа ~",
+	"谢谢你帮我支付,么么哒~": "Намайг төлөхөд тусалсанд баярлалаа, Мода ~",
+	"我已为你代付成功,商家正在努力发货中~": "Би таны төлбөрийг амжилттай төлж, худалдаачин хүргэхийг оролдож байна ~",
+	"好友代付成功,商家正在努力发货中~": "Найзын төлбөр амжилттай болсон бөгөөд худалдаачин хүргэхийг оролдож байна ~",
+	"发送给微信好友": "Wechat найзууд руу илгээх",
+	"查看订单详情": "Захиалгын дэлгэрэнгүйг харах",
+	"订单已支付": "Захиалга төлсөн",
+	"如果订单申请退款,已支付金额将原路退还给您": "Хэрэв захиалга буцаан олголтод хамрагдсан бол төлсөн дүнг тань ижил аргаар буцаан олгоно",
+	"代付成功": "Төлбөр амжилттай боллоо",
+	"谢谢你为我付款,还可以再去看看其他商品哟~": "Миний төлбөрийг төлсөнд баярлалаа, та өөр бараа үзэхээр явж болно ~",
+	"该订单暂未支付": "Захиалга хараахан төлөгдөөгүй байна",
+	"人": "Хүн",
+	"推广人数": "Дэмжигчдийн тоо",
+	"一级": "1-р түвшин",
+	"二级": "2-р түвшин",
+	"点击搜索会员名称": "Гишүүн нэрийг хайх бол товшино уу",
+	"团队排序": "Багийн эрэмбэлэх",
+	"金额排序": "Дэмжээ ангилах",
+	"订单排序": "Захиалга эрэмбэлэх",
+	"单": "Захиалга",
+	"加入时间": "Нэгдэх цаг",
+	"累积推广订单": "Захиалгын тоо",
+	"本月累计推广订单": "Сарын захиалга",
+	"返佣": "Хөнгөлөлт",
+	"暂未返佣": "Хөнгөлөхгүй",
+	"返佣时间": "Хөнгөлөх хугацаа",
+	"单号": "Захиалгын дугаар",
+	"暂无推广订单~": "Урамшууллын захиалга байхгүй ~",
+	"推广订单列表": "Урамшууллын захиалгын жагсаалт",
+	"找回密码": "Нууц үг сэргээх",
+	"填写您的新密码": "Шинэ нууц үгээ бөглөнө үү",
+	"加载失败": "Ачаалал алдаа",
+	"点击授权登录您的客服工作台": "Хэрэглэгчийн үйлчилгээний ажлын хэсэгт нэвтрэхийн тулд зөвшөөрөл дээр дарна уу",
+	"授权登录": "Зөвшөөрөлтэй нэвтрэх",
+	"没有登录的code,请重新扫码": "Нэвтрэхгүйгээр код, кодыг дахин уншина уу",
+	"员工人数": "Ажилчдын тоо",
+	"邀请": "Урилга",
+	"分佣比例": "Масштаб",
+	"修改分佣比例": "Пропорцийг өөрчлөх",
+	"请输入百分比": "Хувиар оруулна уу",
+	"删除员工": "Ажилтныг устгах",
+	"确定删除该员工?": "Та энэ ажилтныг устгахдаа итгэлтэй байна уу?",
+	"请输入比例": "Мажаараа оруулна уу",
+	"分类": "Анги",
+	"我的": "Минийх",
+	"姓名": "Нэр",
+	"请输入联系电话": "Холбоо барих дугаараа оруулна уу",
+	"所在地区": "Байршил",
+	"详细地址": "Хаяг",
+	"设置为默认地址": "Өгөгдмөл хаягаар тохируулах",
+	"立即保存": "Одоо хадгалах",
+	"浙江省": "Жэжян",
+	"杭州市": "Ханжоу",
+	"滨江区": "Бинжиан дүүрэг",
+	"广东省": "Гуандун муж",
+	"广州市": "Гуанжоу",
+	"番禺区": "Панью",
+	"修改地址": "Хаяг өөрчлөх",
+	"添加地址": "Хаяг нэмэх",
+	"已取消!": "Цуцлагдсан!",
+	"请填写联系电话": "Холбоо барих дугаараа бөглөнө үү",
+	"保存中": "Хадгалах",
+	"修改成功": "Өөрчлөлт амжилттай болсон",
+	"消费": "Хэрэглээ",
+	"充值": "Цэнэглэх",
+	"暂无账单的记录哦~": "Түр дансны бүртгэл байхгүй~",
+	"点击【立即注销】即代表您已经同意《用户注销协议》": "[Шууд гарах] дээр дарснаар та хэрэглэгчээс гарах гэрээг зөвшөөрсөн гэсэн үг",
+	"立即注销": "Одоо гарна уу",
+	"是否确认注销": "Гарахыг баталгаажуулах",
+	"注销后无法恢复,请谨慎操作": "Гарсны дараа сэргээх боломжгүй, болгоомжтой байгаарай",
+	"注销": "Гарах",
+	"持卡人": "карт эзэмшигч",
+	"请输入持卡人姓名": "Карт эзэмшигчийн нэрийг оруулна уу",
+	"卡号": "Картын дугаар",
+	"请填写卡号": "Картын дугаарыг бөглөнө үү",
+	"银行": "Банк",
+	"提现": "Татаж авах",
+	"最低提现金额": "Мөнгө гаргах хамгийн бага хэмжээ",
+	"当前可提现金额": "Одоогийн авах боломжтой дүн",
+	"冻结佣金": "Царцаасан комисс",
+	"说明: 每笔佣金的冻结期为": "Тэмдэглэл: комисс бүрийн хөлдөөх хугацаа",
+	"天,到期后可提现": "Хугацаа дууссаны дараа буцаан авах боломжтой өдрүүд",
+	"账号": "Бүртгэл",
+	"请填写您的微信账号": "Wechat дансаа бөглөнө үү",
+	"收款码": "Цуглуулгын код",
+	"请填写您的支付宝账号": "Alipay дансны дугаараа бөглөнө үү",
+	"请选择银行": "Банк сонгоно уу",
+	"银行卡": "Банкны карт",
+	"微信": "Wechat",
+	"支付宝": "Алипай",
+	"请填写持卡人姓名": "Карт эзэмшигчийн нэрийг оруулна уу ",
+	"请填写微信号": "Wechat-ыг бөглөнө үү",
+	"请填写提现金额": "Татан авалтын дүнг бөглөнө үү",
+	"提现金额不能低于": "Татан авалтын дүн түүнээс бага байж болохгүй",
+	"未使用": "Ашиглагдаагүй",
+	"已使用/过期": "Ашигласан/хугацаа нь дууссан",
+	"通用劵": "Ерөнхий үнэт цаас",
+	"一级分佣上浮": "Нэг шат ахисан",
+	"二级分佣上浮": "Хоёрдогч хөвөгч",
+	"快速升级技巧": "Хурдан сайжруулах ур чадвар",
+	"未完成": "Дуусаагүй",
+	"已领完": "Цуглуулсан",
+	"当前共": "Одоогийн нийт",
+	"取关": "Унтраах",
+	"请选择商品": "Бүтээгдэхүүнээ сонгоно уу",
+	"头像": "Аватар",
+	"手机号码": "Гар утасны дугаар",
+	"点击绑定手机号": "Холбохын тулд товшино уу",
+	"ID号": "ID дугаар",
+	"权限设置": "Зөвшөөрөл",
+	"点击管理": "Удирдлага",
+	"密码": "Нууц үг",
+	"点击修改密码": "Өөрчлөх дээр дарна уу",
+	"更换手机号码": "Дугаарыг өөрчлөх",
+	"点击更换手机号码": "Дарна уу",
+	"缓存大小": "Кэшийн хэмжээ",
+	"当前版本": "Одоогийн хувилбар",
+	"地址管理": "Хаяг",
+	"发票管理": "Нэхэмжлэх",
+	"账号注销": "Цуцлах",
+	"注销后无法恢复": "Сэргээх боломжгүй",
+	"累计积分": "хуримтлагдсан оноо",
+	"累计消费": "Хэрэглээ",
+	"冻结积分": "Хөлдөх цэгүүд",
+	"积分规则": "Интеграл дүрэм",
+	"提示:积分数值的高低会直接影响您的会员等级": "Зөвлөгөө: гишүүнчлэлийн түвшингээ үнэлээрэй",
+	"提示:你有": "Зөвлөгөө: танд байна",
+	"积分在": "Интеграл",
+	"过期,请尽快使用": "Хугацаа дууссан тул аль болох хурдан ашиглаарай",
+	"暂无积分记录哦~": "Түр хугацаанд оноо байхгүй~",
+	"赚积分": "Оноо цуглуул",
+	"分值明细": "Онооны дэлгэрэнгүй",
+	"分值提升": "Оноо нэмэгдэх",
+	"抬头类型": "Толгойн төрөл",
+	"增值税电子专用发票": "НӨАТ-ын цахим тусгай нэхэмжлэх",
+	"增值税电子普通发票": "Энгийн НӨАТ-ын цахим падаан",
+	"需要开具发票的姓名": "Нэхэмжлэх нэр",
+	"需要开具发票的企业名称": "Нэхэмжлэх гаргах аж ахуйн нэгжийн нэр",
+	"税号": "Татварын дугаар",
+	"纳税人识别号": "Татвар төлөгчийн үнэмлэх",
+	"手机号": "Гар утасны дугаар",
+	"您的手机号": "Таны гар утасны дугаар",
+	"邮箱": "Шуудангийн хайрцаг",
+	"您的联系邮箱": "Таны холбоо барих шуудангийн хайрцаг",
+	"开户银行": "Хадгаламжийн банк",
+	"您的开户银行": "Таны хадгаламжийн банк",
+	"银行账号": "Банкны дансны дугаар",
+	"您的银行账号": "Таны банкны дансны дугаар",
+	"企业地址": "Аж ахуйн нэгжийн хаяг",
+	"您所在的企业地址": "Таны бизнесийн хаяг",
+	"企业电话": "Аж ахуйн нэгжийн утас",
+	"您的企业电话": "Таны бизнесийн утас",
+	"设置为默认抬头": "Өгөгдмөл толгойгоор тохируулах",
+	"保存": "Хадгалах",
+	"发票类型选择": "Нэхэмжлэлийн төрлийг сонгох",
+	"纸质发票开出后将以邮寄形式交付": "Цаасан нэхэмжлэх гарсны дараа шуудангаар хүргэгдэнэ",
+	"请输入需要开具发票的姓名": "Нэхэмжлэх нэрээ оруулна уу",
+	"请输入您的手机号": "Гар утасны дугаараа оруулна уу",
+	"请正确输入您的手机号": "Гар утасны дугаараа зөв оруулна уу",
+	"请输入您的联系邮箱": "Холбоо барих имэйлээ оруулна уу",
+	"请正确输入您的联系邮箱": "Холбоо барих имэйлээ зөв оруулна уу",
+	"请输入需要开具发票的企业名称": "Нэхэмжлэх гаргах аж ахуйн нэгжийн нэрийг оруулна уу",
+	"请输入纳税人识别号": "Татвар төлөгчийн дугаарыг оруулна уу",
+	"请正确输入纳税人识别号": "Татвар төлөгчийн дугаарыг зөв оруулна уу",
+	"请输入您的开户银行": "Хадгаламжийн банкаа оруулна уу",
+	"请输入您的银行账号": "Банкны дансны дугаараа оруулна уу",
+	"请正确输入您的银行账号": "Банкны дансны дугаараа зөв оруулна уу",
+	"请输入您所在的企业地址": "Та бизнесийн хаягаа оруулна уу",
+	"请输入您的企业电话": "Та бизнесийн утсаа оруулна уу",
+	"发票记录": "Нэхэмжлэлийн бүртгэл",
+	"抬头管理": "Толгойн удирдлага",
+	"申请时间": "Хэрэглэх хугацаа",
+	"没有发票信息哟~": "Нэхэмжлэлийн мэдээлэл байхгүй ~",
+	"个人普通发票": "Хувийн энгийн нэхэмжлэх",
+	"企业普通发票": "Аж ахуйн нэгжийн энгийн нэхэмжлэх",
+	"企业专用发票": "Байгууллагын тусгай нэхэмжлэх",
+	"添加新发票": "Шинэ нэхэмжлэх нэмэх",
+	"删除该发票?": "Энэ нэхэмжлэхийг устгах уу?",
+	"发票编号": "Нэхэмжлэлийн дугаар",
+	"发票备注": "Нэхэмжлэлийн тайлбар",
+	"快递号": "Экспресс дугаар",
+	"总资产(元)": "Нийт хөрөнгө ($)",
+	"累计充值(元)": "Хамтран цэнэглэх ($)",
+	"累计消费(元)": "Ко цэцэг ($)",
+	"账单记录": "Төлбөрийн бүртгэл",
+	"消费记录": "Бичлэг",
+	"充值记录": "Цэнэглэх",
+	"积分中心": "Интеграл",
+	"签到领积分": "Нэвтрэх",
+	"赚积分抵现金": "Оноо цуглуул",
+	"领取优惠券": "Купон",
+	"满减享优惠": "Бүрэн хөнгөлөлт",
+	"最新拼团活动": "Сүүлийн бүлгийн үйл ажиллагаа",
+	"最新的优惠商品上架拼团": "Тавиур дээрх хамгийн сүүлийн үеийн хөнгөлөлттэй бараа",
+	"立即参与": "Оролцох",
+	"当前限时秒杀": "Одоогийн цагийн хязгаар хоёр дахь аллага",
+	"最新商品秒杀进行中": "Хамгийн сүүлийн үеийн барааны өсөлт үргэлжилж байна",
+	"我的余额": "Тэнцвэр",
+	"赠送": "Бэлэг",
+	"其他": "Бусад",
+	"注意事项": "Урьдчилан сэргийлэх арга хэмжээ",
+	"冻结佣金为": "Царцаасан комисс",
+	"立即转入": "Шууд шилжүүлэх",
+	"立即充值": "Шууд цэнэглэ",
+	"请输入金额": "Дэмжээ оруулна уу",
+	"转入余额": "Үлдэгдлийг шилжүүлэх",
+	"转入余额后无法再次转出,确认是否转入余额": "Үлдэгдлийг шилжүүлсний дараа дахин шилжүүлэх боломжгүй, үлдэгдэлд шилжүүлэх эсэхийг баталгаажуулна уу",
+	"转入成功": "Шилжүүлэг амжилттай боллоо",
+	"正在支付": "Төлбөр төлж байна",
+	"充值金额必须为数字": "Цэнэглэх хэмжээ нь тоо байх ёстой",
+	"充值金额不能为0": "Цэнэглэх хэмжээ 0 байж болохгүй",
+	"填写手机号码": "Гар утасны дугаараа бөглөнө үү",
+	"是否绑定账号": "Бүртгэлийг холбох",
+	"绑定": "Холбоо",
+	"您已取消绑定!": "Танд хязгааргүй байна!",
+	"当前手机号": "Одоогийн гар утасны дугаар",
+	"设置新密码": "Шинэ нууц үг тохируулах",
+	"确认新密码": "Шинэ нууц үгээ баталгаажуулах",
+	"手机号码不存在,无法发送验证码!": "Гар утасны дугаар байхгүй тул баталгаажуулах код илгээх боломжгүй!",
+	"请输入新密码": "Шинэ нууц үг оруулна уу",
+	"两次输入的密码不一致!": "Таны оруулсан хоёр нууц үг таарахгүй байна!",
+	"请输入验证码": "Баталгаажуулах код оруулна уу",
+	"暂无退款订单~": "Буцаан олголтын захиалга байхгүй ~",
+	"缺少订单号无法查看订单详情": "Захиалгын дугаар дутуу, захиалгын дэлгэрэнгүйг харах боломжгүй",
+	"明细": "Дэлгэрэнгүй мэдээлэл",
+	"第七天": "7 дахь өдөр",
+	"第7天": "7 дахь өдөр",
+	"奖励": "Шагнал",
+	"已签到": "Бүртгүүлсэн",
+	"立即签到": "Одоо нэвтэрнэ үү",
+	"已累计签到": "Хуримтлагдсан бүртгэл",
+	"据说连续签到第": "Хоёр дахь дараалсан нэвтрэлт",
+	"天可获得超额积分,一定要坚持签到哦~~~": "Хэрэв та өдөр бүр илүү оноо авах боломжтой бол нэвтэрч орохыг шаардах ёстой~~~",
+	"签到成功": "Шалгалт амжилттай боллоо",
+	"好的": "За",
+	"您今日已签到!": "Та өнөөдөр нэвтэрлээ!",
+	"暂无签到记录~": "Нэвтрэх бүртгэл байхгүй~",
+	"保存海报": "ПОСТЕР хадгалах",
+	"长按保存图片": "Зургийг хадгалахын тулд удаан дарна уу",
+	"分销海报": "Түгээлтийн ПОСТЕР",
+	"小程序二维码需要发布正式版后才能获取到": "Applet QR кодыг зөвхөн албан ёсны хувилбарыг нийтлэсний дараа авах боломжтой",
+	"获取中": "Олж байна",
+	"暂无数据~": "Түр хугацаанд өгөгдөл байхгүй ~",
+	"提现记录": "Татаж авах",
+	"提现总额": "Нийт татан авалт",
+	"佣金记录": "Комиссын бүртгэл",
+	"佣金明细": "Комиссын мэдээлэл",
+	"分销等级": "Хуваарилалтын түвшин",
+	"昨日收益": "Өчигдрийн орлого",
+	"累积已提": "Нийт буцаан татсан",
+	"代理商申请": "Агент програм",
+	"立即提现": "Татаж авах",
+	"推广名片": "Нэрийн хуудас",
+	"推广人统计": "Дэмжүүлэгчийн статистик",
+	"推广人订单": "сурталчлагчийн захиалга",
+	"推广订单": "Урамшууллын захиалга",
+	"事业部": "Бизнесийн хэлтэс",
+	"代理商": "Агент",
+	"推广人排行": "Дэмжүүлэгчийн зэрэглэл",
+	"佣金排行": "Комиссын зэрэглэл",
+	"员工列表": "Ажилчдын жагсаалт",
+	"您目前暂无推广权限": "Танд одоогоор сурталчилгааны зөвшөөрөл байхгүй байна",
+	"商城购物可享": "Дэлгүүрт худалдаа хийх",
+	"折": "Хямдрал",
+	"当前等级": "Одоогийн түвшин",
+	"未达成": "Хүрээгүй",
+	"今日成长值": "Өнөөдрийн өсөлтийн утга",
+	"点": "Цэг",
+	"我的成长值记录": "Миний өсөлтийн үнэлгээ",
+	"暂未解锁该等级": "Энэ түвшин хараахан нээгдээгүй байна",
+	"点,需达到": "Цэг, хүрэх хэрэгтэй",
+	"已解锁更高等级": "Дээд түвшний түгжээг тайлсан",
+	"我的成长特权": "Миний өсөлтийн давуу тал",
+	"购物折扣": "Хямдрал",
+	"专属徽章": "Онцгой тэмдэг",
+	"经验累积": "Туршлагын хуримтлал",
+	"尊享客服": "Онцгой үйлчилгээ",
+	"签到": "Бүртгүүлэх",
+	"可获得": "Боломжтой",
+	"点经验": "Цэгийн туршлага",
+	"每日签到可获得经验值,已签到": "Өдөр бүр нэвтрэх нь туршлагын утгыг авах боломжтой, нэвтэрсэн",
+	"去签到": "Бүртгүүлэх",
+	"点经验/元": "Цэгийн туршлага/$",
+	"购买商品可获得对应的经验值": "Харгалзах туршлагын үнэ цэнийг бараа худалдан авах замаар олж авах боломжтой",
+	"去购买": "Худалдан ав",
+	"点经验/人": "Онцлох туршлага/хүн",
+	"邀请好友注册商城可获得经验值": "Туршлагын үнэ цэнийг авахын тулд найзуудаа худалдааны төвд бүртгүүлэхээр урина уу",
+	"去邀请": "Урилга",
+	"积分数": "Бүтээгдэхүүний хэсэг",
+	"消费金额": "Хэрэглээний хэмжээ",
+	"暂无经验记录": "Туршлагын бүртгэл байхгүй",
+	"账户登录": "Бүртгэлд нэвтрэх",
+	"微信登录": "Wechat нэвтрэх",
+	"手机号登录": "Гар утаснаас нэвтрэх",
+	"账户充值": "Цэнэглэх",
+	"佣金转入": "Комисс",
+	"周榜": "Долоо хоног тутмын жагсаалт",
+	"月榜": "Сар бүрийн жагсаалт",
+	"周排行": "Долоо хоног тутмын зэрэглэл",
+	"月排行": "Сар бүрийн зэрэглэл",
+	"语言切换": "Хэл",
+	"点击前往": "Явахын тулд товшино уу",
+	"查看全部": "Бүгдийг харах",
+	"查看订单": "Захиалга харах",
+	"无法获取图片信息": "Зургийн мэдээлэл авах боломжгүй",
+	"长按或扫描查看": "Урт дарж эсвэл сканнердах",
+	"点解锁": "Цэгээр тайлах",
+	"确认修改": "Баталгаажуулах",
+	"保存修改": "Хадгалах",
+	"退出登录": "Гарах",
+	"付费会员": "SVIP",
+	"地址信息": "Хаяг",
+	"我的推广": "Өргөтгөл",
+	"砍价记录": "Хэлэлцэх",
+	"我的等级": "Миний түвшин",
+	"兑换": "ЯВАХ",
+	"申请中": "Програм",
+	"统计管理": "Статистик",
+	"退款": "Төлбөрийг буцаан олгох",
+	"未发货": "Одоогүй",
+	"当前为最新版本": "Одоогоор хамгийн сүүлийн хувилбар",
+	"清除缓存": "Кэшийг цэвэрлэх",
+	"确定清楚本地缓存数据吗": "Та дотоод кэш өгөгдлийн талаар тодорхой итгэлтэй байна уу",
+	"缓存清理完成": "Кэшийг цэвэрлэж дууслаа",
+	"切换的账号不存在": "Шилсэн данс байхгүй байна",
+	"正在切换中": "Шилжүүлж байна",
+	"确认退出登录": "Гарахыг баталгаажуулах",
+	"我知道了": "Би харж байна",
+	"系统错误": "Системийн алдаа",
+	"请求失败": "Хүсэлт амжилтгүй боллоо",
+	"邀请您加入": "Таныг нэгдэхийг урьж байна",
+	"图片上传中": "Байршуулж байна",
+	"上传图片失败": "Зургийг байршуулж чадсангүй",
+	"访问位置被拒绝": "Байршилд хандах боломжгүй",
+	"系统定位已关闭": "Системийн байршил унтарсан",
+	"需要定位权限": "Байршлын зөвшөөрөл шаардлагатай",
+	"订单核销": "хасалт",
+	"当前可转入佣金为":"Одоогийн шилжүүлж болох комисс нь",
+	"浏览记录":"Хайлтын түүх",
+	"签到奖励":"Бүртгэлийн урамшуулал",
+	"请输入内容":"пожалуйста, введите содержание",
+	"单次限购":"одноразовые ограничительные закупки",
+	"永久限购":"постоянные Ограничения приобретения",
+	"《用户协议》":"《Протокол пользователя》",
+	"《隐私协议》":"《соглашение о конфиденциальности》",
+	"与":"и",
+	"请先阅读并同意协议":"пожалуйста, прочитайте и Соглашайтесь сначала с Протоколом",
+	"绑定下级通知":"уведомление о нижестоящем звене связи",
+	"购买成功通知":"уведомление об успешном покупке",
+	"确认收货通知":"подтверждение получения уведомления",
+	"改价通知":"уведомление о пересмотре цен",
+	"退款成功通知":"уведомление об успешном возврате средств",
+	"充值成功通知":"уведомление об успешном пополнении",
+	"积分到账通知":"уведомление об учете",
+	"佣金到账通知":"уведомление о комиссионных в счет",
+	"砍价成功通知":"уведомление об отмене цены",
+	"拼团成功通知":"уведомление об успешном исходе группы",
+	"拼团失败通知":"уведомление об ошибке группы",
+	"开团成功通知":"уведомление об успешном открытии миссии",
+	"提现成功通知":"уведомление об успехе",
+	"提现失败通知":"уведомление об ошибке",
+	"充值退款通知":"уведомление о возврате полной суммы",
+	"退款申请拒绝通知":"уведомление об отклонении просьбы о возврате средств",
+	"您有新的退款待处理":"у вас есть новые возвраты",
+	"您有新的订单待处理":"у вас есть новые заказы для обработки",
+	"发货通知":"уведомление о поставке",
+	"取消拼团通知":"уведомление об отмене группы",
+	"参团成功通知":"уведомление об успешном участии",
+	"你有个新的提现申请待处理":"у вас есть новая заявка для обработки",
+	"你有个新的用户收货待处理":"у вас есть новый пользователь для получения и обработки",
+	"提醒付款通知":"напоминание о платеже",
+	"短信验证码":"код проверки смс",
+	"到店自提":"в магазин",
+	"快递配送":"курьер"
+}

+ 1181 - 0
lang/th_th.json

@@ -0,0 +1,1181 @@
+{
+	"选择地址": "เลือกที่อยู่",
+	"选择其它地址": "เลือกที่อยู่อื่น",
+	"已选商品": "สินค้าที่เลือก",
+	"清空": "เคลียร์",
+	"¥": "฿",
+	"已售罄": "ขายหมดแล้ว",
+	"已下架": "ลง",
+	"删除": "ลบ",
+	"商品券": "สินค้า",
+	"品类券": "หมวดหมู่",
+	"通用券": "นายพล",
+	"优惠券": "บัตรกำนัล",
+	"满": "เต็ม",
+	"元可用": " ใช้แล้ว",
+	"无门槛券": "ไม่มีเกณฑ์",
+	"领取后": "รับ ",
+	"天内可用": "การใช้วัน",
+	"已领取": "ได้รับ",
+	"立即领取": "รับ",
+	"购物满": "ใช้จ่าย",
+	"减": "ปิด",
+	"不限时": "ไม่จำกัดเวลา",
+	"秒杀": "เซคคิลล์",
+	"砍价": "ต่อรองราคา",
+	"拼团": "กลุ่ม",
+	"已售": "ขายแล้ว",
+	"立即购买": "ซื้อเลย",
+	"加入购物车": "หยิบใส่รถเข็น",
+	"选规格": "ตัวเลือก",
+	"跳过": "ต่อไป",
+	"立即体验": "ไปเดี๋ยวนี้",
+	"首页": "บ้าน",
+	"搜索": "ค้นหา",
+	"购物车": "รถเข็น",
+	"我的收藏": "สะสม",
+	"个人中心": "ของฉัน",
+	"券": "โว",
+	"正在加载中": "กำลังโหลด...",
+	"上拉加载更多": "ดึงขึ้นโหลดเพิ่มเติม",
+	"代付金额": "จำนวนเงิน",
+	"共": "ผลรวมของ ",
+	"件商品": " รายการ",
+	"订单包裹": "สั่งซื้อสินค้า",
+	"申请退款中": "การคืนเงิน",
+	"已退款": "คืนเงิน",
+	"已完成": "เสร็จแล้ว",
+	"件退款中": "การคืนสินค้า",
+	"不支持配送": "ในร้านค้าเท่านั้น",
+	"不支持自提": "จัดส่งเท่านั้น",
+	"已评价": "ประเมินแล้ว",
+	"评价": "รีวิว",
+	"申请退款": "คืนเงิน",
+	"查看物流": "โลจิสติกส์",
+	"确认收货": "รับคำสั่ง",
+	"选择付款方式": "เลือก PayType",
+	"支付": "จ่าย ",
+	"去付款": "จ่าย",
+	"请选择要支付的订单": "เลือกคำสั่งซื้อ",
+	"余额不足": "ยอดเงินไม่เพียงพอ",
+	"支付中": "จ่าย...",
+	"缺少支付参数": "ไม่มีพารามิเตอร์การชำระเงิน",
+	"取消支付": "ยกเลิกการชำระเงิน",
+	"支付成功": "ชำระเงินสำเร็จ",
+	"支付失败": "การชำระเงินล้มเหลว",
+	"库存": "หุ้น ",
+	"限量": "ขีดจำกัด ",
+	"数量": "จำนวน",
+	"我要参团": "เข้าร่วมกลุ่ม",
+	"确定": "โอเค",
+	"热门推荐": "สินค้าแนะนำ",
+	"最高返佣": "สูงสุด",
+	"推广享佣金": "โปรโมต",
+	"立即分享": "แชร์เลย",
+	"发现新版本": "เวอร์ชั่นใหม่ ",
+	"立即升级": "อัพเกรด",
+	"下载进度": "ความคืบหน้า",
+	"店小二": "บริกร",
+	"暂无记录": "ไม่มีข้อมูล",
+	"正在下载海报,请稍后再试": "กำลังดาวน์โหลดโปสเตอร์ โปรดลองอีกครั้งในภายหลัง",
+	"海报二维码生成失败": "ไม่สามารถสร้างรหัส QR โปสเตอร์",
+	"倒计时": "นับถอยหลัง",
+	"天": "ด",
+	"时": "เอช",
+	"分": "ม",
+	"秒": "ส",
+	"砍价成功": "ประสบความสำเร็จในการต่อรองราคา",
+	"活动已结束": "กิจกรรมหยุด",
+	"已砍至": "ตัดไปที่ ",
+	"活动进行中": "กำลังประมวลผล...",
+	"取消活动": "ยกเลิก",
+	"继续砍价": "ต่อ",
+	"暂无砍价记录": "ไม่มีข้อมูล",
+	"人正在参与": "เข้าร่วม",
+	"最低": "ต่ำสุด",
+	"参与砍价": "ต่อรองราคา",
+	"砍价列表": "รายการต่อรอง",
+	"人查看": "ดู",
+	"人分享": "แบ่งปัน",
+	"人参与": "เกี่ยวข้อง",
+	"邀请您帮忙砍价": "เชิญคุณช่วย",
+	"查看商品": "ดูรายการ",
+	"当前": "ปัจจุบัน ",
+	"已砍": "สับ ",
+	"还剩": "ซ้าย ",
+	"立即参与砍价": "ต่อรองราคาตอนนี้",
+	"商品暂无库存": "สินค้าหมด",
+	"邀请好友帮砍价": "เชิญเพื่อนช่วย",
+	"已有": "มี",
+	"位好友成功砍价": "เพื่อนที่ประสบความสำเร็จ",
+	"帮好友砍一刀": "ช่วยเพื่อน",
+	"好友已砍价成功": "เพื่อนสำเร็จแล้ว",
+	"我也要参与": "ฉันจะเข้าร่วม",
+	"已成功帮助好友砍价": "ช่วยเพื่อนสำเร็จ",
+	"恭喜您砍价成功,快去支付": "ต่อรองได้สำเร็จ ,ไปจ่าย",
+	"立即支付": "จ่ายเลย",
+	"抢更多商品": "คว้าอีก",
+	"砍价帮": "แก๊งต่อรอง",
+	"砍掉": "ตัดออก ",
+	"更多": "เพิ่มเติม",
+	"关闭": "ปิด",
+	"点击加载更多": "คลิกเพื่อโหลดเพิ่มเติม",
+	"商品详情": "รายละเอียด",
+	"砍价规则": "กฎการต่อรองราคา",
+	"您已砍掉": "คุณตัดแล้ว ",
+	"元,听说分享次数越多砍价成功的机会越大哦": ", แบ่งปันมากขึ้น, โอกาสในการต่อรองที่ประสบความสำเร็จมากขึ้น",
+	"成功帮砍": "ช่วยตัดได้สำเร็จ ",
+	"您也可以砍价低价拿哦,快去挑选心仪的商品吧": "คุณยังสามารถต่อรองราคาได้ ไปและเลือกผลิตภัณฑ์ที่คุณชื่นชอบ",
+	"发送给朋友": "ส่งเพื่อน",
+	"微信好友": "เพื่อน Wechat",
+	"微信朋友圈": "ช่วงเวลา WeChat",
+	"生成海报": "สร้างโปสเตอร์",
+	"砍价详情": "รายละเอียดการต่อรองราคา",
+	"分享成功": "แชร์สำเร็จ",
+	"分享失败": "การแชร์ล้มเหลว",
+	"该商品每人限购": "สินค้านี้จำกัดการซื้อต่อคน",
+	"您的好友": "เพื่อนของคุณ ",
+	"邀请您砍价": "เชิญคุณตัด",
+	"人团": " คน",
+	"去拼团": "ไป",
+	"拼团列表": "รายชื่อกลุ่ม",
+	"类型": "ประเภท",
+	"累计销量": "ขายทั้งหมด",
+	"限购": "ขีดจำกัด ",
+	"种规格可选": "ข้อกำหนด",
+	"已拼": "สะกด ",
+	"件": "ชิ้น",
+	"还差": "เท่านั้น ",
+	"人成团": " สำเร็จ",
+	"去拼单": "เข้าร่วม",
+	"查看更多": "เพิ่มเติม",
+	"收起": "ทิ้งไป",
+	"拼团玩法": "กระบวนการกลุ่ม",
+	"开团/参团": "เริ่ม",
+	"邀请好友": "คำเชิญ",
+	"满员发货": "ส่งของ",
+	"用户评价": "รีวิว",
+	"好评率": "อัตราสรรเสริญ",
+	"产品介绍": "รายละเอียด",
+	"单独购买": "ซื้อคนเดียว",
+	"立即开团": "กลุ่มเริ่มต้น",
+	"请选择": "เลือกแล้ว",
+	"商品": "สินค้า",
+	"详情": "รายละเอียด",
+	"缺少参数无法查看商品": "ไม่สามารถดูสินค้าได้เนื่องจากไม่มีพารามิเตอร์",
+	"参数错误": "ข้อผิดพลาดของพารามิเตอร์",
+	"已选择": "เลือกแล้ว",
+	"保存成功": "บันทึกความสำเร็จ",
+	"保存失败": "บันทึกล้มเหลว",
+	"人拼": " คนทะเลาะกัน",
+	"剩余": "เหลือ ",
+	"结束": "เสร็จสิ้น",
+	"恭喜您拼团成功": "ยินดีด้วยที่จัดกลุ่มสำเร็จ",
+	"人,拼团失败": "คนออกไป กลุ่มล้มเหลว",
+	"拼团中,还差": "ในกลุ่มยังมี ",
+	"人拼团成功": "คนออกจากกลุ่มเรียบร้อยแล้ว",
+	"邀请好友参团": "เชิญเพื่อนเข้าร่วมกลุ่ม",
+	"再次开团": "จัดกลุ่มใหม่",
+	"取消开团": "ยกเลิก",
+	"查看订单信息": "ดูคำสั่งซื้อ",
+	"大家都在拼": "ทุกกลุ่ม",
+	"更多拼团": "เพิ่มเติม",
+	"邀请您参团": "เชิญคุณเข้าร่วม ",
+	"你不是该团的成员": "คุณไม่ใช่สมาชิกของกลุ่ม",
+	"已抢": "ปล้น",
+	"抢购中": "คว้าเลย",
+	"未开始": "ไม่ได้เริ่ม",
+	"已结束": "จบ",
+	"暂无商品,去看点别的吧": "ไม่มีสินค้า",
+	"即将开始": "ไม่ได้เริ่ม",
+	"距秒杀结束仅剩": "เหลือแต่ตอนจบ",
+	"累计销售": "ขายแล้ว",
+	"收藏": "สะสม",
+	"保存到手机": "บันทึกลงในโทรศัพท์",
+	"长按图片可以保存到手机": "กดค้างเพื่อบันทึกลงในโทรศัพท์",
+	"抢购详情页": "สแน็ปหน้ารายละเอียดการซื้อ",
+	"二维码获取失败": "ไม่สามารถรับรหัส QR",
+	"请选择属性": "กรุณาเลือกคุณสมบัติ",
+	"提示:点击图片即可保存至手机相册": "เคล็ดลับ: คลิกที่รูปภาพเพื่อบันทึกลงในอัลบั้มโทรศัพท์",
+	"拼团海报": "โปสเตอร์ปริศนา",
+	"砍价海报": "โปสเตอร์การต่อรอง",
+	"海报生成中": "กำลังสร้างโปสเตอร์",
+	"海报图片获取失败": "ไม่สามารถรับภาพโปสเตอร์",
+	"海报": "โปสเตอร์",
+	"已预定": "จองแล้ว",
+	"预售价": "พรีเซลล์",
+	"立即预定": "จองเลย",
+	"开售时间": "เวลาลดราคา",
+	"预售活动": "งานพรีเซลล์",
+	"起": "เพิ่มขึ้น",
+	"划线价": "ORP",
+	"开通“超级会员”立省": "เปิด 'Super Member' เพื่อปิด ",
+	"元": "฿",
+	"立即开通": "เปิดใช้งานทันที",
+	"预售活动时间": "ช่วงพรีเซลล์",
+	"预售结束后": "จัดส่งภายใน ",
+	"天内发货": "วันหลังจากสิ้นสุดการขายล่วงหน้า",
+	"活动": "กิจกรรม",
+	"参与秒杀": "เซคคิลล์",
+	"参与拼团": "กลุ่ม",
+	"复制口令": "คัดลอกรหัสสินค้า",
+	"复制成功": "คัดลอกสำเร็จ",
+	"推荐": "แนะนำ",
+	"缺少经纬度信息无法查看地图": "ไม่มีข้อมูลละติจูดและลองจิจูดไม่สามารถดูแผนที่ได้",
+	"产品库存不足,请选择其它属性": "สต๊อกสินค้าไม่เพียงพอ โปรดเลือกแอตทริบิวต์อื่น",
+	"立即退款": "คืนเงินทันที",
+	"一键改价": "เปลี่ยนราคา",
+	"订单备注": "บันทึกการสั่งซื้อ",
+	"商品总价": "ราคารวม",
+	"原始邮费": "ไปรษณีย์เก่า",
+	"实际支付": "ราคาจริง",
+	"退款金额": "ราคาคืนเงิน",
+	"请填写备注信息": "กรุณากรอกหมายเหตุ",
+	"立即修改": "แก้ไขเดี๋ยวนี้",
+	"确认退款": "ยืนยันการคืนเงิน",
+	"拒绝退款": "ปฏิเสธการคืนเงิน",
+	"取消": "ยกเลิก",
+	"订单号": "รหัสคำสั่งซื้อ",
+	"发货方式": "โหมด",
+	"发货类型": "ประเภทการจัดส่ง",
+	"快递公司": "ด่วน",
+	"快递单号": "หมายเลข",
+	"顺丰请输入单号 :收件人或寄件人手机号后四位": "โปรดป้อนหมายเลขติดตามสำหรับ SF Express: ตัวเลขสี่หลักสุดท้ายของหมายเลขโทรศัพท์มือถือของผู้รับ หรือผู้ส่ง",
+	"例如:SF000000000000:3941": "ตัวอย่างเช่น: SF000000000000:3941",
+	"电子面单": "แผ่นอิเล็กทรอนิกส์",
+	"预览": "ดูตัวอย่าง",
+	"寄件人姓名": "ชื่อผู้ส่ง",
+	"填写寄件人姓名": "กรอกชื่อผู้ส่ง",
+	"寄件人电话": "โทรศัพท์ผู้ส่ง",
+	"填写寄件人电话": "กรอกหมายเลขโทรศัพท์ของผู้ส่ง",
+	"寄件人地址": "ที่อยู่ผู้ส่ง",
+	"填写寄件人地址": "กรอกที่อยู่ผู้ส่ง",
+	"送货人": "คนส่งของ",
+	"确认提交": "ส่ง",
+	"发货": "เรือ",
+	"送货": "ให้",
+	"无需物流": "ไม่จำเป็น",
+	"手动填写": "กรอกด้วยตนเอง",
+	"电子面单打印": "แผ่นอิเล็กทรอนิกส์",
+	"填写快递单号": "กรุณากรอกหมายเลขผู้จัดส่ง",
+	"请选择电子面单": "กรุณาเลือกใบเสร็จอิเล็กทรอนิกส์",
+	"待付款": "จ่าย",
+	"待发货": "จัดส่ง",
+	"待收货": "รับ",
+	"待评价": "ให้คะแนน",
+	"售后/退款": "คืนเงิน",
+	"数据统计": "สถิติ",
+	"今日成交额": "ขายวันนี้",
+	"昨日成交额": "ขายเมื่อวาน",
+	"本月成交额": "ขายเดือน",
+	"今日订单数": "ออเดอร์วันนี้",
+	"昨日订单数": "คำสั่งเมื่อวาน",
+	"本月订单数": "คำสั่งเดือน",
+	"详细数据": "ข้อมูลโดยละเอียด",
+	"日期": "วันที่",
+	"订单数": "จำนวนการสั่งซื้อ",
+	"成交额": "มูลค่าการซื้อขาย",
+	"立即核销": "ตัดทิ้งเดี๋ยวนี้",
+	"查看": "ดู",
+	"确定要核销此订单吗": "คุณแน่ใจหรือว่าตัดคำสั่งนี้ออก",
+	"确定核销": "ยืนยัน",
+	"请输入核销码": "โปรดป้อนรหัสยืนยัน",
+	"请输入正确的核销码": "โปรดป้อนรหัสยืนยันที่ถูกต้อง",
+	"查询中": "สอบถาม",
+	"订单": "คำสั่ง",
+	"订单未备注,点击添加备注信息": "คำสั่งไม่มีหมายเหตุ คลิกเพื่อเพิ่มหมายเหตุ",
+	"复制": "คัดลอก",
+	"件商品,应支付": "ของมีค่าควรจ่าย",
+	"邮费": "ไปรษณีย์",
+	"订单编号": "รหัสคำสั่งซื้อ",
+	"下单时间": "เวลาสั่งซื้อ",
+	"支付状态": "สถานะการชำระเงิน",
+	"已支付": "จ่ายแล้ว",
+	"未支付": "ค้างชำระ",
+	"支付方式": "วิธีการชำระเงิน",
+	"买家留言": "ผู้ซื้อผงชูรส",
+	"支付金额": "จำนวนเงินที่จ่าย",
+	"优惠券抵扣": "การหักคูปอง",
+	"运费": "ค่าโดยสาร",
+	"实付款": "จำนวนจริง",
+	"配送方式": "วิธีการจัดส่ง",
+	"快递": "ด่วน",
+	"送货人电话": "โทรศัพท์เคอรี่",
+	"确认付款": "ยืนยันการชำระเงิน",
+	"去发货": "จัดส่ง",
+	"改价成功": "ราคาเปลี่ยนแปลงเรียบร้อยแล้ว",
+	"改价失败": "การเปลี่ยนแปลงราคาล้มเหลว",
+	"请输入备注": "โปรดป้อนหมายเหตุ",
+	"退款中": "การคืนเงิน",
+	"部分退款中": "คืนเงินบางส่วน",
+	"件商品,实付款": "สินค้าที่ชำระแล้ว",
+	"同意退货": "ตกลงคืน",
+	"待用户发货": "ไม่มีการจัดส่ง",
+	"请输入正确的金额": "กรุณาใส่จำนวนที่ถูกต้อง",
+	"今天": "วันนี้",
+	"昨天": "เมื่อวาน",
+	"最近7天": "7 วันที่ผ่านมา",
+	"本月": "เดือน",
+	"自定义": "ปรับแต่ง",
+	"营业额(元)": "ยอดเทิร์นโอเวอร์",
+	"订单量(份)": "ปริมาณ",
+	"增长率": "อัตราการขึ้น",
+	"增长": "เพิ่มขึ้น",
+	"单位": "หน่วย",
+	"元.": "หยวน",
+	"分.": "เซ็นต์",
+	"固定": "แก้ไข",
+	"指定范围": "ขอบเขต",
+	"提交时间": "เวลาส่ง",
+	"原因": "เหตุผล",
+	"暂无申请记录,快去申请吧!": "ยังไม่มีบันทึกการสมัคร สมัครเลย!",
+	"没有更多啦": "ไม่มีแล้ว",
+	"待审核": "รอการตรวจสอบ",
+	"审核通过": "ผ่านการพิจารณาแล้ว",
+	"审核未通过": "การตรวจสอบล้มเหลว",
+	"编辑": "แก้ไข",
+	"重新提交": "ส่งใหม่",
+	"会员优惠价": "ส่วนลดวีไอพี",
+	"余额支付": "ยอดเงินคงเหลือ",
+	"可用余额": "สมดุล ",
+	"微信支付": "วีแชท เพย์",
+	"确认": "ยืนยัน",
+	"支付提醒": "การแจ้งเตือนการชำระเงิน",
+	"线下支付已关闭,请点击确认按钮返回主页": "การชำระเงินออฟไลน์ถูกปิด โปรดคลิกปุ่มยืนยันเพื่อกลับสู่หน้าแรก",
+	"请输入支付金额": "กรุณาใส่จำนวนเงินที่ชำระ",
+	"正在确认": "ยืนยัน",
+	"进入商城": "เข้าห้าง",
+	"代理商名称": "ชื่อหน่วยงาน",
+	"请输入代理商名称": "กรุณากรอกชื่อหน่วยงาน",
+	"用户姓名": "ชื่อของคุณ",
+	"请输入姓名": "กรุณาใส่ชื่อของคุณ",
+	"联系电话": "โทรศัพท์ของคุณ",
+	"请输入手机号": "กรุณาใส่หมายเลขโทรศัพท์",
+	"验证码": "รหัส OTP",
+	"填写验证码": "กรอกรหัส OTP",
+	"邀请码": "รหัสเชิญ",
+	"请输入代理商邀请码": "ใส่รหัสเชิญ",
+	"请上传营业执照及行业相关资质证明图片": "โปรดอัปโหลดรูปภาพใบอนุญาตประกอบธุรกิจและใบรับรองคุณสมบัติที่เกี่ยวข้องกับอุตสาหกรรม",
+	"图片最多可上传10张,图片格式支持JPG、PNG、JPEG": "สามารถอัพโหลดได้ถึง 10 ภาพ และรูปแบบภาพรองรับ JPG, PNG, JPEG",
+	"上传图片": "อัปโหลด",
+	"已阅读并同意": "อ่านแล้วตกลง",
+	"代理商协议": "ข้อตกลงตัวแทน",
+	"提交申请": "ส่งใบสมัคร",
+	"代理商入驻协议": "ข้อตกลงตัวแทน",
+	"恭喜,您的资料提交成功!": "ยินดีด้วย ส่งเรียบร้อยแล้ว!",
+	"返回首页": "กลับบ้าน",
+	"恭喜,您的资料通过审核!": "ยินดีด้วย รีวิวผ่านไปแล้ว!",
+	"您的申请未通过!": "ใบสมัครของคุณถูกปฏิเสธ!",
+	"重新申请": "สมัครใหม่",
+	"获取验证码": "รับรหัส OTP",
+	"请输入正确的手机号码": "โปรดป้อนหมายเลขโทรศัพท์ที่ถูกต้อง",
+	"重新获取": "รับใหม่",
+	"请上传营业执照": "โปรดอัปโหลดใบอนุญาตประกอบธุรกิจ",
+	"请勾选并同意入驻协议": "โปรดทำเครื่องหมายและยอมรับข้อตกลงอาชีพ",
+	"专题栏": "คอลัมน์หัวข้อ",
+	"暂无数据": "ไม่มีข้อมูล",
+	"请输入卡号": "กรุณาใส่หมายเลขบัตร",
+	"请输入卡密": "โปรดป้อนรหัสผ่านของคุณ",
+	"确认激活": "ยืนยัน",
+	"SVIP会员尊享权": "สิทธิ์ของสมาชิก SVIP",
+	"正在激活": "กำลังเปิดใช้งาน",
+	"已使用": "ใช้แล้ว",
+	"永久SVIP会员": "สมาชิกถาวร SVIP",
+	"SVIP会员": "สมาชิก SVIP",
+	"到期": "วุฒิภาวะ",
+	"您与": "คุณด้วย",
+	"商城的第": "ห้างสรรพสินค้า",
+	"天.": " วัน",
+	"已累积为您节省": "สะสมเงินออมเพื่อคุณ",
+	"开通即享会员权益": "เพลิดเพลินกับสิทธิประโยชน์ของสมาชิก",
+	"续费会员": "ต่ออายุ",
+	"开通会员": "เข้าร่วม SVIP",
+	"有效期至": "ใช้ได้จนถึง ",
+	"试用": "ลองดู",
+	"购买即视为同意": "ซื้อตามความยินยอม ",
+	"会员用户协议": "ข้อตกลง SVIP",
+	"点击兑换卡密": "คลิกเพื่อแลกบัตร",
+	"会员优惠券": "คูปอง SVIP",
+	"SVIP商品推荐": "แนะนำ SVIP",
+	"商城价": "ราคาห้างสรรพสินค้า",
+	"激活会员卡": "เปิดใช้งานการ์ด",
+	"支付宝支付": "อาลีเพย์",
+	"成功开启0元试用": "เปิดทดลอง 0 หยวนสำเร็จ",
+	"确认绑定": "ยืนยันการผูกมัด",
+	"绑定成功": "ผูกสำเร็จ",
+	"商城客服已离线": "ฝ่ายบริการลูกค้าออฟไลน์",
+	"我要反馈": "ฉันต้องการความคิดเห็น",
+	"请填写内容": "กรุณากรอกเนื้อหา",
+	"提交": "ส่ง",
+	"精品推荐": "แนะนำ",
+	"热门榜单": "ยอดนิยม",
+	"首发新品": "ใหม่",
+	"促销单品": "โปรโมชั่น",
+	"预告": "ประกาศ",
+	"回放": "เล่น",
+	"进行中": "กำลังดำเนินการ",
+	"发送客服": "ส่ง",
+	"客服连接中": "กำลังเชื่อมต่อฝ่ายบริการลูกค้า",
+	"连接失败": "การเชื่อมต่อล้มเหลว",
+	"提示": "คำแนะนำ",
+	"客服已下线,是否需要反馈?": "ฝ่ายบริการลูกค้าออฟไลน์ ต้องการคำติชมหรือไม่",
+	"和好友一起分享": "แบ่งปันกับเพื่อน",
+	"积分抵扣": "การหักคะแนน",
+	"已开票": "เรียกเก็บเงิน",
+	"未开票": "ไม่ได้ออกใบแจ้งหนี้",
+	"发票信息": "ข้อมูลใบแจ้งหนี้",
+	"发票抬头": "ใบแจ้งหนี้",
+	"发票抬头类型": "ประเภทส่วนหัวของใบแจ้งหนี้",
+	"个人": "ต่อ ",
+	"企业": "COM ",
+	"发票类型": "ประเภทใบแจ้งหนี้",
+	"电子普通发票": "ใบแจ้งหนี้อิเล็กทรอนิกส์ทั่วไป",
+	"电子专用发票": "ใบแจ้งหนี้พิเศษทางอิเล็กทรอนิกส์",
+	"企业税号": "ภาษีองค์กร",
+	"联系信息": "ข้อมูลการติดต่อ",
+	"真实姓名": "ชื่อจริง",
+	"联系邮箱": "อีเมล",
+	"抬头选择": "การเลือกหัว",
+	"默认": "ค่าเริ่มต้น",
+	"普通": "สามัญ ",
+	"专用": "ทุ่มเท ",
+	"您还没有添加发票信息哟": "คุณยังไม่ได้เพิ่มข้อมูลใบแจ้งหนี้",
+	"添加新的抬头": "เพิ่มส่วนหัวใหม่",
+	"不开发票": "ไม่มีใบแจ้งหนี้",
+	"抽奖": "หวย",
+	"全选": "เลือกทั้งหมด",
+	"属性": "คุณสมบัติ",
+	"请填写具体地址": "กรุณากรอกที่อยู่เฉพาะ",
+	"省": "จังหวัด",
+	"市": "เมือง",
+	"区": "พื้นที่",
+	"添加成功": "เพิ่มสำเร็จ",
+	"您已拒绝导入微信地址权限": "คุณปฏิเสธการอนุญาตให้นำเข้าที่อยู่ WeChat",
+	"是否进入权限管理,调整授权?": "คุณเข้าสู่การจัดการการอนุญาตและปรับการอนุญาตหรือไม่",
+	"已取消": "ยกเลิก",
+	"添加失败": "เพิ่มไม่สำเร็จ",
+	"请填写收货人姓名": "กรุณากรอกชื่อผู้รับ",
+	"请选择所在地区": "กรุณาเลือกภูมิภาคของคุณ",
+	"请填写详细地址": "กรุณากรอกที่อยู่โดยละเอียด",
+	"星": "ดาว",
+	"商品满足你的期待么?说说你的想法,分享给想买的他们吧": "ผลิตภัณฑ์ตรงตามความคาดหวังของคุณหรือไม่ บอกเราว่าคุณคิดอย่างไรและแชร์กับผู้ที่ต้องการซื้อ",
+	"立即评价": "ให้คะแนนตอนนี้",
+	"商品质量": "คุณภาพสินค้า",
+	"服务态度": "ทัศนคติการบริการ",
+	"缺少参数": "ไม่มีพารามิเตอร์",
+	"请填写你对宝贝的心得": "กรุณากรอกความคิดเห็นเกี่ยวกับผลิตภัณฑ์",
+	"正在发布评论": "กำลังโพสต์ความคิดเห็น",
+	"感谢您的评价": "ขอบคุณสำหรับความคิดเห็นของคุณ",
+	"评价完成": "ตรวจสอบเสร็จแล้ว",
+	"恭喜您": "ยินดีด้วย",
+	"获得": "รับ",
+	"机会": "โอกาส",
+	"领取成功": "ได้รับเรียบร้อยแล้ว",
+	"评分": "คะแนน",
+	"全部": "ทั้งหมด",
+	"好评": "สรรเสริญ",
+	"中评": "ค่าเฉลี่ย",
+	"差评": "แย่",
+	"加载更多": "กำลังโหลดเพิ่ม",
+	"千米距离": "ห่างออกไปกิโลเมตร",
+	"搜索商品名称": "ค้นหาสินค้า",
+	"价格": "ราคา",
+	"销量": "ขายแล้ว",
+	"新品": "ใหม่",
+	"已全部加载": "โหลดทั้งหมด",
+	"缺少订单号": "ไม่มีรหัสคำสั่งซื้อ",
+	"退货件数": "หมายเลขที่ขอคืน",
+	"退款类型": "ประเภทการคืนเงิน",
+	"退款原因": "เหตุผลในการคืนเงิน",
+	"备注说明": "หมายเหตุ",
+	"填写备注信息,100字以内": "หมายเหตุภายใน 100 คำ",
+	"仅退款": "คืนเงินเท่านั้น",
+	"退货并退款": "คืนสินค้าและคืนเงิน",
+	"申请成功": "สมัครสำเร็จ",
+	"请先选择退货商品": "กรุณาเลือกรายการคืนสินค้าก่อน",
+	"搜索历史": "ประวัติการค้นหา",
+	"热门搜索": "การค้นหายอดนิยม",
+	"请输入要搜索的商品": "กรุณาระบุสินค้าที่ต้องการค้นหา",
+	"正在搜索中": "กำลังค้นหา",
+	"中奖记录": "สถิติการชนะ",
+	"我的奖品": "รางวัลของฉัน",
+	"活动规则": "กฎกิจกรรม",
+	"昵称": "ชื่อเล่น",
+	"序号": "ซีเรียล",
+	"奖品名称": "ชื่อรางวัล",
+	"获奖时间": "เวลาชนะ",
+	"商家暂未上架活动哦": "ผู้ขายยังไม่ได้ระบุกิจกรรม",
+	"获取抽奖信息": "รับข้อมูลการชิงโชค",
+	"奖品类型": "ประเภทรางวัล",
+	"立即兑换": "แลกเลย",
+	"兑换时间": "เวลาแลกเปลี่ยน",
+	"暂无中奖记录": "ไม่มีสถิติชนะ",
+	"积分": "แต้ม",
+	"余额": "ยอดคงเหลือ",
+	"红包": "เงินสด",
+	"设置收货地址": "กำหนดที่อยู่สำหรับจัดส่ง",
+	"暂无门店信息": "ไม่มีข้อมูลร้านค้า",
+	"剩余积分": "คะแนนที่เหลืออยู่ ",
+	"当前积分": "คะแนนปัจจุบัน ",
+	"开具发票": "ใบแจ้งหนี้",
+	"请填写": "กรุณากรอก ",
+	"配送运费": "ค่าขนส่ง",
+	"会员商品优惠": "ข้อเสนอผลิตภัณฑ์",
+	"会员运费优惠": "ข้อเสนอการจัดส่ง",
+	"合计": "รวม",
+	"使用微信快捷支付": "ชำระเงินด่วน WeChat",
+	"使用支付宝支付": "ชำระด้วยอาลีเพย์",
+	"线下支付": "การชำระเงินออฟไลน์",
+	"使用线下付款": "ใช้การชำระเงินออฟไลน์",
+	"好友代付": "เพื่อนจ่าย",
+	"找微信好友支付": "หาเพื่อนจ่าย",
+	"立即使用": "ใช้",
+	"请选择要购买的商品": "กรุณาเลือกรายการที่จะซื้อ",
+	"发票": "ใบแจ้งหนี้",
+	"不使用": "อย่าใช้",
+	"订单创建成功": "สร้างคำสั่งซื้อสำเร็จ",
+	"请选择支付方式": "กรุณาเลือกวิธีการชำระเงิน",
+	"请选择收货地址": "กรุณาเลือกที่อยู่จัดส่ง",
+	"请填写联系人或联系人电话": "กรุณากรอกชื่อผู้ติดต่อหรือหมายเลขโทรศัพท์ติดต่อ",
+	"暂无门店,请选择其他方式": "ขณะนี้ไม่มีร้านค้า โปรดเลือกวิธีอื่น",
+	"请输入": "กรุณาป้อน ",
+	"请输入正确的": "กรุณากรอกให้ถูกต้อง ",
+	"请上传": "โปรดอัปโหลด ",
+	"订单支付中": "การจ่ายเงิน",
+	"请按以上退货信息将商品退回": "กรุณาส่งคืนสินค้าพร้อมข้อมูล",
+	"请联系管理员获取退货地址": "โปรดติดต่อผู้ดูแลระบบเพื่อขอที่อยู่สำหรับส่งคืน",
+	"待核销": "เขียนออก",
+	"核销信息": "ข้อมูลการตัดยอด",
+	"营业时间": "เวลาทำการ",
+	"每日": "รายวัน",
+	"使用说明": "คำแนะนำการใช้งาน",
+	"可将二维码出示给店员扫描或提供数字核销码": "สามารถแสดงรหัส QR ต่อพนักงานเพื่อสแกนหรือระบุรหัสยืนยันดิจิทัล",
+	"可将二维码出示给配送员进行核销": "สามารถแสดงรหัส QR แก่ผู้จัดส่งเพื่อตรวจสอบ",
+	"查看位置": "ดูตำแหน่ง",
+	"拒绝原因": "เหตุผลการปฏิเสธ",
+	"联系客服": "ติดต่อ",
+	"商家备注": "บันทึกผู้ขาย",
+	"收货人": "ผู้รับ",
+	"收货地址": "ที่อยู่จัดส่ง",
+	"配送人姓名": "ชื่อเรือ",
+	"拨打": "โทร",
+	"虚拟发货": "เรือเสมือน",
+	"已发货,请注意查收": "จัดส่งแล้ว โปรดตรวจสอบ",
+	"虚拟备注": "บันทึกเสมือน",
+	"总代付": "ยอดรวม",
+	"申请开票": "สมัครใบแจ้งหนี้",
+	"查看发票": "ดูใบแจ้งหนี้",
+	"取消订单": "ยกเลิก",
+	"立即付款": "จ่าย",
+	"批量退款": "คืนเงินจำนวนมาก",
+	"查看拼团": "ดูกลุ่ม",
+	"再次购买": "ซื้อซ้ำ",
+	"取消申请": "ยกเลิกการสมัคร",
+	"填写退货信息": "ส่งคืนข้อมูล",
+	"查看退货物流": "โลจิสติกส์",
+	"您确认放弃此次申请吗": "คุณแน่ใจหรือว่าต้องการละทิ้งแอปพลิเคชันนี้",
+	"操作成功": "ดำเนินการสำเร็จ",
+	"订单信息不存在": "ไม่มีข้อมูลการสั่งซื้อ",
+	"为保障权益,请收到货确认无误后,再确认收货": "เพื่อปกป้องสิทธิและผลประโยชน์ โปรดยืนยันการรับสินค้าหลังจากยืนยันว่าสินค้าถูกต้อง",
+	"删除订单": "ลบคำสั่งซื้อ",
+	"确定删除该订单": "ยืนยันการลบคำสั่ง",
+	"删除成功": "ลบเรียบร้อยแล้ว",
+	"确认取消该订单": "ยืนยันยกเลิกคำสั่งซื้อ",
+	"订单信息": "ข้อมูลการสั่งซื้อ",
+	"消费订单": "คำสั่ง",
+	"总消费": "ยอดรวม",
+	"预售": "พรีเซลล์",
+	"线下付款,未支付": "ออฟไลน์ค้างชำระ",
+	"未核销": "ไม่ถูกตัดออก",
+	"件商品,总金额": " รายการ, จำนวนเงินทั้งหมด ",
+	"查看详情": "ดู",
+	"暂无订单": "ยังไม่มีคำสั่ง",
+	"缺少订单号无法取消订单": "ไม่สามารถยกเลิกคำสั่งซื้อโดยไม่มีหมายเลขคำสั่งซื้อ",
+	"订单支付成功": "ชำระเงินเรียบร้อยแล้ว",
+	"订单支付失败": "คำสั่งซื้อที่ชำระเงินล้มเหลว",
+	"暂未支付": "ยังไม่ได้ชำระเงิน",
+	"失败原因": "เหตุผลล้มเหลว",
+	"重新购买": "ซื้อคืน",
+	"重新支付": "จ่ายใหม่",
+	"赠送优惠券": "แจกคูปอง",
+	"有效期": "ความถูกต้อง",
+	"缺少参数无法查看订单支付状态": "พารามิเตอร์ที่ขาดหายไปไม่สามารถดูสถานะการชำระเงินตามคำสั่งซื้อได้",
+	"最多可上传3张": "อัปโหลดสูงสุด 3 รายการ",
+	"请选择产品": "กรุณาเลือกผลิตภัณฑ์",
+	"该产品没有更多库存了": "สินค้านี้ไม่มีสต็อกแล้ว",
+	"优品推荐": "คำแนะนำที่ดีที่สุด",
+	"暂无产品": "ยังไม่มีสินค้า",
+	"重新选择": "เลือกใหม่",
+	"请选择数量": "กรุณาเลือกจำนวน",
+	"砍价专区·BARGAINING": "การเจรจาต่อรอง",
+	"立即砍价": "ตัดเลย",
+	"拼团活动": "กลุ่ม",
+	"人拼团成功.": "ผู้คนประสบความสำเร็จ",
+	"人参团": " กลุ่มโสม",
+	"拼团价": "ราคากลุ่ม",
+	"已过期": "หมดอายุ",
+	"关注": "ติดตาม",
+	"推荐好货": "แนะนำสินค้า",
+	"暂无商品": "ยังไม่มีสินค้า",
+	"限时秒杀": "เข็มจำกัดเวลา",
+	"抢": "คว้า",
+	"广告位": "พื้นที่ ADV",
+	"精彩内容": "ไฮไลท์",
+	"砍价模块,暂无数据": "โมดูลต่อรอง ยังไม่มีข้อมูล",
+	"砍价活动": "ต่อรองราคา",
+	"呼朋唤友来砍价": "ต่อรองราคาเพื่อน",
+	"拼团模块,暂无数据": "โมดูลกลุ่ม ยังไม่มีข้อมูล",
+	"享超值开团价": "เพลิดเพลินกับราคากลุ่มสุดคุ้ม",
+	"优惠券,暂无数据": "คูปองไม่มีข้อมูลชั่วคราว",
+	"领取今日好券": "รับคูปองวันนี้",
+	"可用": " ใช้แล้ว",
+	"领取": "เรียกร้อง",
+	"客服": "บริการ",
+	"商品列表,暂无数据": "ไม่มีข้อมูลชั่วคราว",
+	"搜索商品": "ค้นหาสินค้า",
+	"暂无图片,请上传图片": "ไม่มีรูปภาพ โปรดอัปโหลด",
+	"首发新品,暂无数据": "ผลิตภัณฑ์ใหม่ครั้งแรก, ยังไม่มีข้อมูล",
+	"多个优质商品最新上架": "สินค้าคุณภาพสูงล่าสุดบนชั้นวาง",
+	"暂无新闻,请上传新闻": "ไม่มีข่าว โปรดอัปโหลดข่าว",
+	"热度 TOP": "ฮีทท็อป",
+	"排行榜、暂无数据": "ลีดเดอร์บอร์ด, ไม่มีข้อมูลชั่วคราว",
+	"促销单品,暂无数据": "รายการส่งเสริมการขาย ไม่มีข้อมูลชั่วคราว",
+	"库存商品优惠促销活动": "กิจกรรมส่งเสริมการขายสินค้าในสต็อก",
+	"精品推荐,暂无数据": "ร้านบูติกแนะนำ ยังไม่มีข้อมูล",
+	"上百种商品分类任您选择": "หลายร้อยหมวดหมู่สินค้าให้คุณเลือก",
+	"秒杀模块,暂无数据": "โมดูล Seckill ไม่มีข้อมูลชั่วคราว",
+	"场": "ไซต์",
+	"暂无数据,请设置": "ไม่มีข้อมูล โปรดตั้งค่า",
+	"暂无数据,请先添加分类": "ไม่มีข้อมูล กรุณาเพิ่มหมวดหมู่ก่อน",
+	"暂无标题": "ไม่มีชื่อชั่วคราว",
+	"诚意推荐品质商品": "แนะนำสินค้าคุณภาพโดยสุจริต",
+	"点击“立即关注”即可关注公众号": "คลิก “ติดตามเลย” เพื่อติดตามบัญชีทางการ",
+	"立即关注": "ติดตามเลย",
+	"添加到我的小程序, 微信首页下拉即可访问商城。": "เพิ่มลงในแอปเพล็ตของฉัน และคุณสามารถเข้าถึงห้างสรรพสินค้าได้โดยดึงหน้าแรกของ wechat",
+	"点击": "คลิก",
+	"服务协议与隐私政策": "ข้อตกลงการบริการและนโยบายความเป็นส่วนตัว",
+	"请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。": "โปรดอ่านอย่างละเอียดและเข้าใจข้อกำหนดของข้อตกลงการบริการและนโยบายความเป็นส่วนตัวอย่างละเอียดถี่ถ้วน ซึ่งรวมถึงแต่ไม่จำกัดเพียง: เพื่อให้บริการส่งข้อความโต้ตอบแบบทันที การแบ่งปันเนื้อหา และบริการอื่น ๆ แก่คุณ เราจำเป็นต้องรวบรวมอุปกรณ์ของคุณ ข้อมูล บันทึกการทำงาน และข้อมูลส่วนบุคคลอื่น ๆ คุณสามารถดู เปลี่ยนแปลง ลบข้อมูลส่วนบุคคล และจัดการการอนุญาตของคุณในการตั้งค่า",
+	"你可以阅读": "คุณอ่านได้",
+	"《服务协议与隐私政策》": "《ข้อตกลงการบริการและนโยบายความเป็นส่วนตัว》",
+	"了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。": "เรียนรู้เพิ่มเติม หากคุณตกลง โปรดคลิก ฉันยอมรับ เพื่อเริ่มยอมรับบริการของเรา",
+	"我同意": "เห็นด้วย",
+	"残忍拒绝": "การปฏิเสธที่โหดร้าย",
+	"下拉加载更多": "ดึงโหลดเพิ่ม",
+	"网络连接断开": "การเชื่อมต่อเครือข่ายถูกตัดการเชื่อมต่อ",
+	"请检查情况:": "โปรดตรวจสอบเงื่อนไข:",
+	"在设置中是否已开启网络权限": "ไม่ว่าจะเปิดใช้งานการอนุญาตเครือข่ายในการตั้งค่าหรือไม่",
+	"当前是否处于弱网环境": "ขณะนี้อยู่ในสภาพแวดล้อมเครือข่ายที่อ่อนแอ",
+	"版本是否过低,升级试试吧": "เป็นเวอร์ชั่นที่ต่ำเกินไปหรือไม่ ลองอัพเกรด",
+	"重新连接": "เชื่อมต่อใหม่",
+	"加载中": "กำลังโหลด",
+	"没有更多内容啦~": "ไม่มีเนื้อหาแล้ว~",
+	"100%正品保证": "ของแท้ 100%",
+	"所有商品精挑细选": "จู้จี้จุกจิก",
+	"售后无忧": "หมดกังวลหลังการขาย",
+	"管理": "ท่อ",
+	"购物数量": "ปริมาณการซื้อของ",
+	"请重新选择商品规格": "โปรดเลือกข้อมูลจำเพาะของผลิตภัณฑ์อีกครั้ง",
+	"重选": "การเลือกใหม่",
+	"失效商品": "สินค้าไม่ถูกต้อง",
+	"失效": "ความล้มเหลว",
+	"该商品已失效": "สินค้าหมดอายุ",
+	"立即下单": "สั่งเลย",
+	"我也是有底线的": "ฉันยังมีข้อแม้",
+	"产品库存不足,请选择其它": "สินค้าคงคลังไม่เพียงพอ โปรดเลือกรายการอื่น",
+	"添加购物车成功": "เพิ่มตะกร้าสินค้าเรียบร้อยแล้ว",
+	"清除成功": "ล้างข้อมูลสำเร็จ",
+	"暂无兑换记录~": "ไม่มีบันทึกการแลกเปลี่ยน~",
+	"大家都在换": "ทุกคนเปลี่ยนไป",
+	"人兑换": " การแลกเปลี่ยนบุคคล",
+	"轻松赚积分": "รับคะแนนง่ายๆ",
+	"购买商品": "ซื้อสินค้า",
+	"购买商品可获得积分奖励": "คะแนนสะสมสำหรับการซื้อสินค้า",
+	"去完成": "ไป",
+	"每日签到活动": "กิจกรรมเช็คอินรายวัน",
+	"每日签到可获得积分奖励": "เช็คอินทุกวันจะได้รับคะแนนสะสม",
+	"九宫格抽奖活动": "หวย Jiugongge",
+	"幸运抽奖可获得积分奖励": "สุ่มจับรางวัลได้คะแนน",
+	"我的积分": "คะแนนของฉัน",
+	"每日签到": "ลงชื่อเข้าใช้รายวัน",
+	"积分抽奖": "แต้มลอตเตอรี",
+	"兑换记录": "บันทึกการแลกเปลี่ยน",
+	"已兑换": "แลก",
+	"无法兑换": "ไม่สามารถแลกได้",
+	"[默认]": "[ค่าเริ่มต้น]",
+	"可用积分": "คะแนนที่มี",
+	"快递费用": "ค่าธรรมเนียมด่วน",
+	"免运费": "ปลอดค่าขนส่ง",
+	"备注信息": "ข้อสังเกต",
+	"请添加备注(150字以内)": "กรุณาเพิ่มข้อสังเกต (ภายใน 150 คำ)",
+	"使用线上支付宝支付": "ชำระเงินด้วย Alipay ออนไลน์",
+	"可用余额:": "ยอดคงเหลือ:",
+	"选择线下付款方式": "เลือกวิธีการชำระเงินออฟไลน์",
+	"正在加载…": "กำลังโหลด…",
+	"可用积分不足!": "คะแนนไม่เพียงพอ!",
+	"订单状态": "สถานะการสั่งซื้อ",
+	"支付积分": "จ่ายแต้ม",
+	"备注": "ข้อสังเกต",
+	"配送核销码": "รหัสยืนยันการจัดส่ง",
+	"当前可用余额:": "ยอดเงินคงเหลือในปัจจุบัน:",
+	"正在加载": "กำลังโหลด",
+	"缺少经纬度信息无法查看地图!": "ไม่สามารถดูแผนที่ได้หากไม่มีข้อมูลลองจิจูดและละติจูด!",
+	"商品兑换成功": "แลกสำเร็จ",
+	"兑换方式": "วิธีแลกเปลี่ยน",
+	"积分兑换": "การแลกเปลี่ยนคะแนน",
+	"兑换积分": "แลกคะแนน",
+	"取消兑换": "ยกเลิกการแลกเปลี่ยน",
+	"缺少参数无法查看订单兑换状态": "ไม่สามารถดูสถานะการแลกเปลี่ยนคำสั่งซื้อได้หากไม่มีพารามิเตอร์",
+	"用户离开了": "ผู้ใช้ออกไป",
+	"兑换成功": "แลกสำเร็จ",
+	"物流公司": "บริษัทขนส่ง",
+	"复制单号": "คัดลอกหมายเลขเอกสาร",
+	"设为默认": "ตั้งเป็นค่าเริ่มต้น",
+	"添加新地址": "เพิ่มที่อยู่ใหม่",
+	"导入微信地址": "นำเข้าที่อยู่ wechat",
+	"取消选择": "ยกเลิกการเลือก",
+	"您设置的默认地址不存在!": "ไม่มีที่อยู่เริ่มต้นที่คุณตั้งไว้!",
+	"设置成功": "การตั้งค่าสำเร็จ",
+	"您删除的地址不存在!": "ไม่มีที่อยู่ที่คุณลบ!",
+	"获取头像": "รับอวาตาร์",
+	"请点击授权": "โปรดคลิกอนุญาต",
+	"绑定手机号": "ผูกเบอร์มือถือ",
+	"永久": "ถาวร",
+	"会员到期": "สมาชิกหมดอายุ",
+	"未开通会员": "ไม่เปิดสมาชิก",
+	"查看会员权益": "ดูสิทธิประโยชน์ของสมาชิก",
+	"立即续费": "ต่ออายุ",
+	"立即激活": "การเปิดใช้งาน",
+	"会员可享多项权益": "รับประโยชน์มากมาย",
+	"订单中心": "คำสั่งของฉัน",
+	"我的服务": "บริการของฉัน",
+	"隐私协议": "ความเป็นส่วนตัว",
+	"商家管理": "การจัดการธุรกิจ",
+	"更新用户信息成功": "อัปเดตข้อมูลผู้ใช้เรียบร้อยแล้ว",
+	"客服接待": "แผนกต้อนรับ",
+	"点击复制网址去浏览器中打开": "คลิกคัดลอก URL เพื่อเปิดในเบราว์เซอร์",
+	"点击复制": "คลิกคัดลอก",
+	"完成支付": "ชำระเงินเรียบร้อยแล้ว",
+	"点击右上角": "คลิกที่มุมขวาบน",
+	"选择 在浏览器 打开,去支付宝支付": "เลือกเปิดในเบราว์เซอร์และชำระเงินผ่าน Alipay",
+	"支付订单不存在,页面将在2秒后自动关闭!": "ไม่มีคำสั่งจ่ายเงิน และหน้าจะปิดโดยอัตโนมัติใน 2 วินาที!",
+	"正在支付中": "การจ่ายเงิน",
+	"支付订单不存在,页面将在2秒后自动关闭": "ไม่มีคำสั่งชำระเงิน และหน้าจะปิดโดยอัตโนมัติใน 2 วินาที",
+	"复制失败": "การจำลองแบบล้มเหลว",
+	"您目前的排名": "อันดับปัจจุบันของคุณ",
+	"您目前暂无排名": "คุณอยู่ในอันดับปัจจุบัน",
+	"暂无排名~": "ไม่มีอันดับ ~",
+	"输入手机号": "ป้อนหมายเลขโทรศัพท์มือถือ",
+	"输入验证码": "ป้อนรหัสยืนยัน",
+	"立即登录": "เข้าสู่ระบบเลย",
+	"请填写手机号码": "กรุณากรอกหมายเลขโทรศัพท์มือถือของคุณ",
+	"请填写验证码": "กรุณากรอกรหัสยืนยัน",
+	"请输入正确的验证码": "โปรดป้อนรหัสยืนยันที่ถูกต้อง",
+	"正在登录中": "เข้าสู่ระบบ",
+	"登录成功": "เข้าสู่ระบบสำเร็จ",
+	"获取授权": "ได้รับใบอนุญาต",
+	"获取微信的手机号授权": "รับการอนุญาตหมายเลขโทรศัพท์มือถือ wechat",
+	"获取微信手机号": "รับเบอร์มือถือ wechat",
+	"输入手机号码": "ป้อนหมายเลขโทรศัพท์มือถือ",
+	"填写登录密码": "กรอกรหัสผ่านเข้าสู่ระบบ",
+	"登录": "เข้าสู่ระบบ",
+	"快速登录": "เข้าสู่ระบบด่วน",
+	"账号登录": "เข้าสู่ระบบบัญชี",
+	"其他方式登录": "เข้าสู่ระบบด้วยวิธีอื่น",
+	"登录中": "เข้าสู่ระบบ",
+	"获取用户信息失败": "ไม่สามารถรับข้อมูลผู้ใช้",
+	"请绑定手机号后,继续操作": "กรุณาผูกหมายเลขโทรศัพท์มือถือของคุณและดำเนินการต่อไป",
+	"错误信息": "ข้อมูลผิดพลาด",
+	"用户点击确定": "ผู้ใช้คลิกตกลง",
+	"用户点击取消": "ผู้ใช้คลิกยกเลิก",
+	"登录失败": "การเข้าสู่ระบบล้มเหลว",
+	"请勿重复点击": "ห้ามคลิกซ้ำ",
+	"请填写密码": "กรุณากรอกรหัสผ่าน",
+	"您输入的密码过于简单": "รหัสผ่านที่คุณป้อนง่ายเกินไป",
+	"请填写账号": "กรุณากรอกหมายเลขบัญชี",
+	"请输入正确的账号": "โปรดป้อนหมายเลขบัญชีที่ถูกต้อง",
+	"[图片]": "[รูปภาพ]",
+	"[语音]": "[เสียง]",
+	"[商品]": "[สินค้า]",
+	"[订单]": "[คำสั่ง]",
+	"亲、暂无消息记录哟!": "เรียน ยังไม่มีบันทึกข้อความ!",
+	"站内消息": "ในข้อความสถานี",
+	"客服消息": "ข้อความบริการลูกค้า",
+	"通知于": "แจ้งเตือนเมื่อ ",
+	"获取详情中": "รับรายละเอียด",
+	"代付订单创建成功,发给好友帮你付款吧~": "สร้างคำสั่งการชำระเงินเรียบร้อยแล้ว ส่งให้เพื่อนของคุณเพื่อช่วยจ่าย~",
+	"帮我付一下这件商品了,谢谢~": "ช่วยฉันจ่ายค่าสินค้านี้ ขอบคุณ~",
+	"已经有人替我代付,谢谢啦~": "มีคนจ่ายเงินให้ฉัน ขอบคุณ ~",
+	"谢谢你帮我支付,么么哒~": "ขอบคุณที่ช่วยฉันจ่าย Moda ~",
+	"我已为你代付成功,商家正在努力发货中~": "ฉันจ่ายเงินให้คุณเรียบร้อยแล้ว และพ่อค้าพยายามส่งสินค้า ~",
+	"好友代付成功,商家正在努力发货中~": "การชำระเงินของเพื่อนสำเร็จ และพ่อค้าพยายามส่งสินค้า ~",
+	"发送给微信好友": "ส่งให้เพื่อน wechat",
+	"查看订单详情": "ดูรายละเอียดการสั่งซื้อ",
+	"订单已支付": "สั่งจ่ายแล้ว",
+	"如果订单申请退款,已支付金额将原路退还给您": "หากคำสั่งซื้อใช้สำหรับการคืนเงิน จำนวนเงินที่ชำระจะถูกส่งคืนให้คุณในลักษณะเดียวกัน",
+	"代付成功": "ชำระเงินสำเร็จ",
+	"谢谢你为我付款,还可以再去看看其他商品哟~": "ขอบคุณที่จ่ายเงินให้ฉัน และคุณสามารถไปดูสินค้าอื่นๆ ได้~",
+	"该订单暂未支付": "คำสั่งซื้อยังไม่ได้รับการชำระเงิน",
+	"人": " คน",
+	"推广人数": "จำนวนโปรโมเตอร์",
+	"一级": "ระดับ 1",
+	"二级": "ระดับ 2",
+	"点击搜索会员名称": "คลิกเพื่อค้นหาชื่อสมาชิก",
+	"团队排序": "การคัดแยกทีม",
+	"金额排序": "การเรียงลำดับจำนวนเงิน",
+	"订单排序": "การเรียงลำดับ",
+	"单": " คำสั่งซื้อ",
+	"加入时间": "เวลาเข้าร่วม",
+	"累积推广订单": "จำนวนการสั่งซื้อ",
+	"本月累计推广订单": "คำสั่งเดือน",
+	"返佣": "ส่วนลด",
+	"暂未返佣": "ไม่คืนเงิน",
+	"返佣时间": "เวลาคืนเงิน",
+	"单号": "หมายเลขคำสั่งซื้อ",
+	"暂无推广订单~": "ไม่มีคำสั่งส่งเสริมการขาย ~",
+	"推广订单列表": "รายการสั่งซื้อโปรโมชั่น",
+	"找回密码": "ดึงรหัสผ่าน",
+	"填写您的新密码": "กรอกรหัสผ่านใหม่ของคุณ",
+	"加载失败": "โหลดล้มเหลว",
+	"点击授权登录您的客服工作台": "คลิกอนุญาตเพื่อเข้าสู่โต๊ะทำงานบริการลูกค้าของคุณ",
+	"授权登录": "เข้าสู่ระบบที่ได้รับอนุญาต",
+	"没有登录的code,请重新扫码": "รหัสโดยไม่ต้องเข้าสู่ระบบ โปรดสแกนรหัสอีกครั้ง",
+	"员工人数": "จำนวนพนักงาน",
+	"邀请": "คำเชิญ",
+	"分佣比例": "มาตราส่วน",
+	"修改分佣比例": "ปรับเปลี่ยนสัดส่วน",
+	"请输入百分比": "โปรดป้อนเปอร์เซ็นต์",
+	"删除员工": "ลบพนักงาน",
+	"确定删除该员工?": "คุณแน่ใจหรือว่าต้องการลบพนักงานคนนี้",
+	"请输入比例": "กรุณาใส่มาตราส่วน",
+	"分类": "คลาส",
+	"我的": "ของฉัน",
+	"姓名": "ชื่อ",
+	"请输入联系电话": "กรุณากรอกเบอร์ติดต่อ",
+	"所在地区": "ที่ตั้ง",
+	"详细地址": "ที่อยู่",
+	"设置为默认地址": "ตั้งเป็นที่อยู่เริ่มต้น",
+	"立即保存": "บันทึกทันที",
+	"浙江省": "เจ้อเจียง",
+	"杭州市": "หางโจว",
+	"滨江区": "เขตปินเจียง",
+	"广东省": "มณฑลกวางตุ้ง",
+	"广州市": "กวางโจว",
+	"番禺区": "ปันหยู",
+	"修改地址": "แก้ไขที่อยู่",
+	"添加地址": "เพิ่มที่อยู่",
+	"已取消!": "ยกเลิก!",
+	"请填写联系电话": "กรุณากรอกเบอร์ติดต่อ",
+	"保存中": "ออมทรัพย์",
+	"修改成功": "แก้ไขสำเร็จ",
+	"消费": "การบริโภค",
+	"充值": "เติมเงิน",
+	"暂无账单的记录哦~": "ไม่มีบันทึกการเรียกเก็บเงินชั่วคราว~",
+	"点击【立即注销】即代表您已经同意《用户注销协议》": "การคลิก [ออกจากระบบทันที] หมายความว่าคุณยอมรับข้อตกลงการออกจากระบบของผู้ใช้",
+	"立即注销": "ออกจากระบบเดี๋ยวนี้",
+	"是否确认注销": "ยืนยันการออกจากระบบ",
+	"注销后无法恢复,请谨慎操作": "ไม่สามารถกู้คืนได้หลังจากออกจากระบบ โปรดระวัง",
+	"注销": "ออกจากระบบ",
+	"持卡人": "ผู้ถือบัตร",
+	"请输入持卡人姓名": "ป้อนชื่อผู้ถือบัตร",
+	"卡号": "หมายเลขบัตร",
+	"请填写卡号": "กรุณากรอกหมายเลขบัตร",
+	"银行": "ธนาคาร",
+	"提现": "ถอนเงิน",
+	"最低提现金额": "จำนวนถอนขั้นต่ำ",
+	"当前可提现金额": "จำนวนเงินที่ถอนได้ในปัจจุบัน",
+	"冻结佣金": "ค่าคอมมิชชั่นแช่แข็ง",
+	"说明: 每笔佣金的冻结期为": "หมายเหตุ: ระยะเวลาการแช่แข็งของแต่ละคอมมิชชั่นคือ",
+	"天,到期后可提现": "วัน ถอนได้เมื่อหมดอายุ",
+	"账号": "บัญชี",
+	"请填写您的微信账号": "กรอกบัญชี wechat ของคุณ",
+	"收款码": "รหัสสะสม",
+	"请填写您的支付宝账号": "กรอกหมายเลขบัญชี Alipay ของคุณ",
+	"请选择银行": "กรุณาเลือกธนาคาร",
+	"银行卡": "บัตรธนาคาร",
+	"微信": "วีแชท",
+	"支付宝": "อาลีเพย์",
+	"请填写持卡人姓名": "กรุณากรอกชื่อผู้ถือบัตร",
+	"请填写微信号": "กรุณากรอก wechat",
+	"请填写提现金额": "กรุณากรอกจำนวนเงินที่ถอน",
+	"现金额不能低于": "จำนวนถอนต้องไม่น้อยกว่า",
+	"未使用": "ไม่ได้ใช้",
+	"已使用/过期": "ใช้แล้ว/หมดอายุ",
+	"通用劵": "หลักทรัพย์ทั่วไป",
+	"一级分佣上浮": "หนึ่งระดับขึ้นไป",
+	"二级分佣上浮": "ลอยตัวรอง",
+	"快速升级技巧": "ทักษะการอัพเกรดอย่างรวดเร็ว",
+	"未完成": "ไม่สมบูรณ์",
+	"已领完": "รวบรวม",
+	"当前共": "ยอดรวมปัจจุบัน",
+	"取关": "ปิด ",
+	"请选择商品": "กรุณาเลือกผลิตภัณฑ์",
+	"头像": "อวตาร",
+	"手机号码": "เบอร์มือถือ",
+	"点击绑定手机号": "คลิกเพื่อผูก",
+	"ID号": "หมายเลขประจำตัวประชาชน",
+	"权限设置": "อนุญาต",
+	"点击管理": "การจัดการ",
+	"密码": "รหัสผ่าน",
+	"点击修改密码": "คลิกแก้ไข",
+	"更换手机号码": "เปลี่ยนหมายเลข",
+	"点击更换手机号码": "คลิกเพื่อ",
+	"缓存大小": "ขนาดแคช",
+	"当前版本": "เวอร์ชันปัจจุบัน",
+	"地址管理": "ที่อยู่",
+	"发票管理": "ใบแจ้งหนี้",
+	"账号注销": "ยกเลิก",
+	"注销后无法恢复": "ไม่สามารถกู้คืนได้",
+	"累计积分": "คะแนนสะสม",
+	"累计消费": "การบริโภค",
+	"冻结积分": "จุดเยือกแข็ง",
+	"积分规则": "กฎปริพันธ์",
+	"提示:积分数值的高低会直接影响您的会员等级": "เคล็ดลับ: คุณค่าระดับสมาชิกของคุณ",
+	"提示:你有": "เคล็ดลับ: คุณมี",
+	"积分在": "อินทิกรัลใน",
+	"过期,请尽快使用": "หมดอายุ โปรดใช้โดยเร็วที่สุด",
+	"暂无积分记录哦~": "ไม่มีการบันทึกคะแนนชั่วคราว~",
+	"赚积分": "รับคะแนน",
+	"分值明细": "รายละเอียดคะแนน",
+	"分值提升": "คะแนนเพิ่มขึ้น",
+	"抬头类型": "ประเภทส่วนหัว",
+	"增值税电子专用发票": "VAT ใบแจ้งหนี้พิเศษทางอิเล็กทรอนิกส์",
+	"增值税电子普通发票": "ใบกำกับภาษีมูลค่าเพิ่มแบบอิเล็กทรอนิกส์",
+	"需要开具发票的姓名": "ชื่อที่จะออกใบแจ้งหนี้",
+	"需要开具发票的企业名称": "ชื่อองค์กรที่ออกใบแจ้งหนี้",
+	"税号": "เลขภาษี",
+	"纳税人识别号": "หมายเลขประจำตัวผู้เสียภาษี",
+	"手机号": "เบอร์มือถือ",
+	"您的手机号": "เบอร์มือถือของคุณ",
+	"邮箱": "กล่องจดหมาย",
+	"您的联系邮箱": "กล่องจดหมายติดต่อของคุณ",
+	"开户银行": "เงินฝากธนาคาร",
+	"您的开户银行": "ธนาคารเงินฝากของคุณ",
+	"银行账号": "หมายเลขบัญชีธนาคาร",
+	"您的银行账号": "หมายเลขบัญชีธนาคารของคุณ",
+	"企业地址": "ที่อยู่องค์กร",
+	"您所在的企业地址": "ที่อยู่ธุรกิจของคุณ",
+	"企业电话": "โทรศัพท์องค์กร",
+	"您的企业电话": "โทรศัพท์ธุรกิจของคุณ",
+	"设置为默认抬头": "ตั้งเป็นส่วนหัวเริ่มต้น",
+	"保存": "บันทึก",
+	"发票类型选择": "การเลือกประเภทใบแจ้งหนี้",
+	"纸质发票开出后将以邮寄形式交付": "หลังจากออกใบแจ้งหนี้กระดาษแล้ว จะถูกจัดส่งทางไปรษณีย์",
+	"请输入需要开具发票的姓名": "โปรดป้อนชื่อที่จะออกใบแจ้งหนี้",
+	"请输入您的手机号": "กรุณาใส่หมายเลขโทรศัพท์มือถือของคุณ",
+	"请正确输入您的手机号": "กรุณาใส่หมายเลขโทรศัพท์มือถือของคุณถูกต้อง",
+	"请输入您的联系邮箱": "กรุณาใส่อีเมลสำหรับติดต่อของคุณ",
+	"请正确输入您的联系邮箱": "กรุณาใส่อีเมลติดต่อของคุณให้ถูกต้อง",
+	"请输入需要开具发票的企业名称": "โปรดป้อนชื่อองค์กรเพื่อออกใบแจ้งหนี้",
+	"请输入纳税人识别号": "โปรดป้อนหมายเลขประจำตัวผู้เสียภาษี",
+	"请正确输入纳税人识别号": "กรุณาใส่หมายเลขประจำตัวผู้เสียภาษีให้ถูกต้อง",
+	"请输入您的开户银行": "กรุณาป้อนธนาคารเงินฝากของคุณ",
+	"请输入您的银行账号": "โปรดป้อนหมายเลขบัญชีธนาคารของคุณ",
+	"请正确输入您的银行账号": "โปรดป้อนหมายเลขบัญชีธนาคารของคุณให้ถูกต้อง",
+	"请输入您所在的企业地址": "โปรดป้อนที่อยู่ธุรกิจของคุณ",
+	"请输入您的企业电话": "โปรดป้อนหมายเลขโทรศัพท์ธุรกิจของคุณ",
+	"发票记录": "บันทึกใบแจ้งหนี้",
+	"抬头管理": "การจัดการส่วนหัว",
+	"申请时间": "เวลาสมัคร",
+	"没有发票信息哟~": "ไม่มีข้อมูลใบแจ้งหนี้ ~",
+	"个人普通发票": "ใบแจ้งหนี้ส่วนบุคคล",
+	"企业普通发票": "ใบแจ้งหนี้ธรรมดาขององค์กร",
+	"企业专用发票": "ใบแจ้งหนี้พิเศษขององค์กร",
+	"添加新发票": "เพิ่มใบแจ้งหนี้ใหม่",
+	"删除该发票?": "ลบใบแจ้งหนี้นี้หรือไม่",
+	"发票编号": "หมายเลขใบแจ้งหนี้",
+	"发票备注": "หมายเหตุใบแจ้งหนี้",
+	"快递号": "หมายเลขด่วน",
+	"总资产(元)": "สินทรัพย์ทั้งหมด (฿)",
+	"累计充值(元)": "เติมเงินร่วม (฿)",
+	"累计消费(元)": "ดอกโค (฿)",
+	"账单记录": "บันทึกบิล",
+	"消费记录": "บันทึก",
+	"充值记录": "เติมเงิน",
+	"积分中心": "อินทิกรัล",
+	"签到领积分": "ลงชื่อเข้าใช้",
+	"赚积分抵现金": "รับคะแนน",
+	"领取优惠券": "คูปอง",
+	"满减享优惠": "ส่วนลดเต็มจำนวน",
+	"最新拼团活动": "กิจกรรมกลุ่มล่าสุด",
+	"最新的优惠商品上架拼团": "สินค้าพิเศษล่าสุดบนหิ้ง",
+	"立即参与": "เข้าร่วม",
+	"当前限时秒杀": "เวลาปัจจุบัน จำกัด การฆ่าครั้งที่สอง",
+	"最新商品秒杀进行中": "กำลังเร่งสินค้าโภคภัณฑ์ล่าสุด",
+	"我的余额": "ยอดคงเหลือ",
+	"赠送": "ของขวัญ",
+	"其他": "อื่นๆ",
+	"注意事项": "ข้อควรระวัง",
+	"冻结佣金为": "ค่าคอมมิชชั่นแช่แข็งคือ",
+	"立即转入": "โอนเข้าทันที",
+	"立即充值": "เติมเงินทันที",
+	"请输入金额": "กรุณาใส่จำนวนเงิน",
+	"转入余额": "โอนในยอดคงเหลือ",
+	"转入余额后无法再次转出,确认是否转入余额": "ไม่สามารถโอนออกได้อีกหลังจากโอนในยอดคงเหลือ ให้ยืนยันว่าจะโอนในยอดคงเหลือ",
+	"转入成功": "โอนสำเร็จ",
+	"正在支付": "การจ่ายเงิน",
+	"充值金额必须为数字": "ยอดเติมเงินต้องเป็นตัวเลข",
+	"充值金额不能为0": "จำนวนเติมเงินไม่สามารถเป็น 0",
+	"填写手机号码": "กรอกหมายเลขโทรศัพท์มือถือ",
+	"是否绑定账号": "ผูกบัญชี",
+	"绑定": "การผูกมัด",
+	"您已取消绑定!": "คุณมี unbound!",
+	"当前手机号": "หมายเลขโทรศัพท์มือถือปัจจุบัน",
+	"设置新密码": "ตั้งรหัสผ่านใหม่",
+	"确认新密码": "ยืนยันรหัสผ่านใหม่",
+	"手机号码不存在,无法发送验证码!": "ไม่มีหมายเลขโทรศัพท์มือถือ ไม่สามารถส่งรหัสยืนยันได้!",
+	"请输入新密码": "กรุณาใส่รหัสผ่านใหม่",
+	"两次输入的密码不一致!": "รหัสผ่านทั้งสองที่คุณป้อนไม่สอดคล้องกัน!",
+	"请输入验证码": "โปรดป้อนรหัสยืนยัน",
+	"暂无退款订单~": "ไม่มีคำสั่งคืนเงิน ~",
+	"缺少订单号无法查看订单详情": "ไม่มีหมายเลขคำสั่งซื้อและไม่สามารถดูรายละเอียดคำสั่งซื้อได้",
+	"明细": "เดต้า",
+	"第七天": "วันที่ 7",
+	"第7天": "วันที่ 7",
+	"奖励": "รางวัล",
+	"已签到": "เช็คอิน",
+	"立即签到": "ลงชื่อเข้าใช้เลย",
+	"已累计签到": "เช็คอินสะสม",
+	"据说连续签到第": "การเข้าสู่ระบบติดต่อกันเป็นครั้งที่สอง",
+	"天可获得超额积分,一定要坚持签到哦~~~": "หากคุณได้รับคะแนนส่วนเกินทุกวัน คุณต้องยืนยันในการลงชื่อเข้าใช้~~~",
+	"签到成功": "เช็คอินสำเร็จ",
+	"好的": "โอเค",
+	"您今日已签到!": "คุณลงชื่อเข้าใช้วันนี้!",
+	"暂无签到记录~": "ไม่มีบันทึกการลงชื่อเข้าใช้~",
+	"保存海报": "บันทึกโปสเตอร์",
+	"长按保存图片": "กดค้างเพื่อบันทึกภาพ",
+	"分销海报": "โปสเตอร์แจกจ่าย",
+	"小程序二维码需要发布正式版后才能获取到": "รหัส QR ของ Applet สามารถรับได้หลังจากเผยแพร่เวอร์ชันอย่างเป็นทางการแล้วเท่านั้น",
+	"获取中": "รับ ",
+	"暂无数据~": "ไม่มีข้อมูลชั่วคราว ~",
+	"提现记录": "ถอนเงิน",
+	"提现总额": "ถอนทั้งหมด",
+	"佣金记录": "บันทึกค่าคอมมิชชั่น",
+	"佣金明细": "รายละเอียดค่าคอมมิชชั่น",
+	"分销等级": "ระดับการกระจาย ",
+	"昨日收益": "รายได้ของเมื่อวาน",
+	"累积已提": "ถอนสะสม",
+	"代理商申请": "สมัครตัวแทน",
+	"立即提现": "ถอนเงิน",
+	"推广名片": "นามบัตร",
+	"推广人统计": "สถิติโปรโมเตอร์",
+	"推广人订单": "คำสั่งโปรโมเตอร์",
+	"推广订单": "คำสั่งส่งเสริมการขาย",
+	"事业部": "ฝ่ายธุรกิจ",
+	"代理商": "ตัวแทน",
+	"推广人排行": "อันดับโปรโมเตอร์",
+	"佣金排行": "อันดับค่าคอมมิชชั่น",
+	"员工列表": "รายชื่อพนักงาน",
+	"您目前暂无推广权限": "ขณะนี้คุณไม่ได้รับอนุญาตให้เลื่อนขั้น",
+	"商城购物可享": "ช้อปปิ้งในห้าง",
+	"折": "ส่วนลด",
+	"当前等级": "ระดับปัจจุบัน",
+	"未达成": "ไม่ถึง",
+	"今日成长值": "มูลค่าการเติบโตของวันนี้",
+	"点": "แต้ม",
+	"我的成长值记录": "บันทึกมูลค่าการเติบโตของฉัน",
+	"暂未解锁该等级": "ระดับนี้ยังไม่ได้ปลดล็อค",
+	"点,需达到": "ชี้ต้องไปให้ถึง",
+	"已解锁更高等级": "ปลดล็อกระดับที่สูงขึ้น",
+	"我的成长特权": "สิทธิ์การเติบโตของฉัน",
+	"购物折扣": "ส่วนลด",
+	"专属徽章": "ตราพิเศษ",
+	"经验累积": "สะสมประสบการณ์",
+	"尊享客服": "บริการพิเศษ",
+	"签到": "เช็คอิน",
+	"可获得": "ว่าง",
+	"点经验": "แต้มประสบการณ์",
+	"每日签到可获得经验值,已签到": "การลงชื่อเข้าใช้รายวันสามารถรับค่าประสบการณ์, ลงชื่อเข้าใช้",
+	"去签到": "เช็คอิน",
+	"点经验/元": "แต้มประสบการณ์/฿",
+	"购买商品可获得对应的经验值": "ค่าประสบการณ์ที่สอดคล้องกันสามารถรับได้จากการซื้อสินค้า",
+	"去购买": "ไปซื้อ",
+	"点经验/人": "ค่าประสบการณ์/คน",
+	"邀请好友注册商城可获得经验值": "ชวนเพื่อนลงทะเบียนในห้างเพื่อรับค่าประสบการณ์",
+	"去邀请": "เชิญ",
+	"积分数": "เศษผลิตภัณฑ์",
+	"消费金额": "ปริมาณการใช้",
+	"暂无经验记录": "ไม่มีประวัติประสบการณ์",
+	"账户登录": "เข้าสู่ระบบบัญชี",
+	"微信登录": "เข้าสู่ระบบ Wechat",
+	"手机号登录": "เข้าสู่ระบบมือถือ",
+	"账户充值": "เติมเงิน",
+	"佣金转入": "ค่าคอมมิชชั่น",
+	"周榜": "รายการรายสัปดาห์",
+	"月榜": "รายการรายเดือน",
+	"周排行": "อันดับประจำสัปดาห์",
+	"月排行": "อันดับรายเดือน",
+	"语言切换": "ภาษา",
+	"点击前往": "คลิกเพื่อไป",
+	"查看全部": "ดูทั้งหมด",
+	"查看订单": "ดูคำสั่งซื้อ",
+	"无法获取图片信息": "ไม่สามารถรับข้อมูลภาพได้",
+	"长按或扫描查看": "กดแบบยาวหรือสแกนดู",
+	"点解锁": "ปลดล็อกแต้ม",
+	"确认修改": "ยืนยัน",
+	"保存修改": "บันทึก",
+	"退出登录": "ออกจากระบบ",
+	"付费会员": "สวีไอพี",
+	"地址信息": "ที่อยู่",
+	"我的推广": "ส่วนขยาย",
+	"砍价记录": "ต่อรองราคา",
+	"我的等级": "ระดับของฉัน",
+	"兑换": "ไป",
+	"申请中": "ใบสมัคร",
+	"统计管理": "สถิติ",
+	"退款": "คืนเงิน",
+	"未发货": "ไม่ออก",
+	"当前为最新版本": "ปัจจุบันเป็นเวอร์ชันล่าสุด",
+	"清除缓存": "ล้างแคช",
+	"确定清楚本地缓存数据吗": "คุณแน่ใจหรือว่าคุณชัดเจนเกี่ยวกับข้อมูลแคชในเครื่อง",
+	"缓存清理完成": "การล้างแคชเสร็จสิ้น",
+	"切换的账号不存在": "ไม่มีบัญชีที่สับเปลี่ยน",
+	"正在切换中": "เปลี่ยน",
+	"确认退出登录": "ยืนยันการออกจากระบบ",
+	"我知道了": "ฉันเห็น",
+	"系统错误": "ระบบผิดพลาด",
+	"请求失败": "คำขอล้มเหลว",
+	"邀请您加入": "เชิญคุณเข้าร่วม ",
+	"图片上传中": "กำลังอัปโหลด",
+	"上传图片失败": "ไม่สามารถอัปโหลดภาพ",
+	"访问位置被拒绝": "ตำแหน่งการเข้าถึงถูกปฏิเสธ",
+	"系统定位已关闭": "ปิดตำแหน่งระบบ",
+	"需要定位权限": "ต้องได้รับอนุญาตจากตำแหน่ง",
+	"订单核销": "ตัดจำหน่าย",
+	"当前可转入佣金为":"ค่าคอมมิชชั่นที่โอนได้ในปัจจุบันคือ",
+	"浏览记录":"ประวัติการค้นหา",
+	"签到奖励":"รางวัลเช็คอิน",
+	"请输入内容":"โปรดระบุเนื้อหา",
+	"单次限购":"ซื้อจำกัดเดียว",
+	"永久限购":"ซื้อจำกัดถาวร",
+	"《用户协议》":"《ข้อตกลงผู้ใช้》",
+	"《隐私协议》":"《ข้อตกลงความเป็นส่วนตัว》",
+	"与":"กับ",
+	"请先阅读并同意协议":"กรุณาอ่านและยอมรับข้อตกลงก่อน",
+	"绑定下级通知":"ผูกพันการแจ้งเตือนระดับล่าง",
+	"购买成功通知":"ประกาศซื้อสำเร็จ",
+	"确认收货通知":"ยืนยันการรับสินค้า",
+	"改价通知":"แจ้งการเปลี่ยนแปลงราคา",
+	"退款成功通知":"ประกาศความสำเร็จของการคืนเงิน",
+	"充值成功通知":"แจ้งเตือนความสำเร็จ",
+	"积分到账通知":"แจ้งยอดบัญชี",
+	"佣金到账通知":"คณะกรรมการแจ้งบัญชี",
+	"砍价成功通知":"ประกาศความสำเร็จของการเจรจาต่อรอง",
+	"拼团成功通知":"ประกาศความสำเร็จ",
+	"拼团失败通知":"การแจ้งเตือนความล้มเหลว",
+	"开团成功通知":"ประกาศความสำเร็จของกลุ่ม",
+	"提现成功通知":"ส่งประกาศความสำเร็จ",
+	"提现失败通知":"แจ้งความล้มเหลว",
+	"充值退款通知":"การแจ้งเตือนการคืนเงินเต็ม",
+	"退款申请拒绝通知":"แจ้งการปฏิเสธการคืนเงิน",
+	"您有新的退款待处理":"คุณมีการคืนเงินใหม่ที่จะจัดการกับ",
+	"您有新的订单待处理":"คุณมีคำสั่งใหม่ที่ต้องจัดการ",
+	"发货通知":"ประกาศการจัดส่งสินค้า",
+	"取消拼团通知":"ประกาศยกเลิก",
+	"参团成功通知":"ประกาศความสำเร็จของคณะผู้แทน",
+	"你有个新的提现申请待处理":"คุณมีข้อเสนอใหม่สำหรับการประมวลผล",
+	"你有个新的用户收货待处理":"คุณมีผู้ใช้ใหม่เพื่อรับสินค้า",
+	"提醒付款通知":"แจ้งเตือนการชำระเงิน",
+	"短信验证码":"รหัสตรวจสอบข้อความ",
+	"到店自提":"ไปที่ร้าน",
+	"快递配送":"จัดส่งด่วน"
+}

+ 1181 - 0
lang/vi_vn.json

@@ -0,0 +1,1181 @@
+{
+	"选择地址": "Chọn địa chỉ",
+	"选择其它地址": "Chọn Địa chỉ Khác",
+	"已选商品": "Hàng hóa được Chọn",
+	"清空": "Rõ ràng",
+	"¥": "₫",
+	"已售罄": "Hết hàng",
+	"已下架": "Hạ gục",
+	"删除": "Xóa",
+	"商品券": "Sản phẩm",
+	"品类券": "Danh mục",
+	"通用券": "Chung",
+	"优惠券": "Phiếu thưởng",
+	"满": "Đầy đủ",
+	"元可用": "Đã qua sử dụng",
+	"无门槛券": "Không có ngưỡng",
+	"领取后": "Nhận",
+	"天内可用": "Số ngày sử dụng",
+	"已领取": "Đã nhận",
+	"立即领取": "Nhận",
+	"购物满": "Chi tiêu",
+	"减": "Tắt",
+	"不限时": "Thời gian không giới hạn",
+	"秒杀": "Seckill",
+	"砍价": "Mặc cả",
+	"拼团": "Nhóm",
+	"已售": "Đã bán",
+	"立即购买": "Mua ngay bây giờ",
+	"加入购物车": "Thêm vào giỏ hàng",
+	"选规格": "Tùy chọn",
+	"跳过": "Tiếp theo",
+	"立即体验": "Đi ngay",
+	"首页": "Trang chủ",
+	"搜索": "Tìm kiếm",
+	"购物车": "Giỏ hàng",
+	"我的收藏": "Thu thập",
+	"个人中心": "Của tôi",
+	"券": "Vo.",
+	"正在加载中": "Đang tải ...",
+	"上拉加载更多": "Kéo lên Tải thêm",
+	"代付金额": "Số lượng",
+	"共": "Tổng số",
+	"件商品": "Mặt hàng",
+	"订单包裹": "Đặt hàng",
+	"申请退款中": "Hoàn lại tiền",
+	"已退款": "Đã hoàn lại",
+	"已完成": "Đã hoàn thành",
+	"件退款中": "Hoàn trả mặt hàng",
+	"不支持配送": "Chỉ tại cửa hàng",
+	"不支持自提": "Chỉ vận chuyển",
+	"已评价": "Đã đánh giá",
+	"评价": "Xem lại",
+	"申请退款": "Hoàn lại tiền",
+	"查看物流": "Hậu cần",
+	"确认收货": "Đặt hàng",
+	"选择付款方式": "Chọn PayType",
+	"支付": "Thanh toán",
+	"去付款": "Thanh toán",
+	"请选择要支付的订单": "Chọn đơn hàng",
+	"余额不足": "Không đủ số dư",
+	"支付中": "Đang thanh toán ...",
+	"缺少支付参数": "Thiếu thông số thanh toán",
+	"取消支付": "Hủy Thanh toán",
+	"支付成功": "Thanh toán Thành công",
+	"支付失败": "Thanh toán Không thành công",
+	"库存": "Cổ phiếu",
+	"限量": "Giới hạn",
+	"数量": "QTY",
+	"我要参团": "Tham gia nhóm",
+	"确定": "Được",
+	"热门推荐": "Đề xuất nóng",
+	"最高返佣": "Cao nhất",
+	"推广享佣金": "Quảng cáo",
+	"立即分享": "Chia sẻ ngay bây giờ",
+	"发现新版本": "Phiên bản mới",
+	"立即升级": "Nâng cấp",
+	"下载进度": "Tiến trình",
+	"店小二": "Người phục vụ",
+	"暂无记录": "Không có dữ liệu",
+	"正在下载海报,请稍后再试": "Đang tải poster xuống, vui lòng thử lại sau",
+	"海报二维码生成失败": "Không tạo được mã QR áp phích",
+	"倒计时": "Đếm ngược",
+	"天": "D",
+	"时": "H",
+	"分": "M",
+	"秒": "S",
+	"砍价成功": "Mặc cả Thành công",
+	"活动已结束": "Hoạt động đã dừng",
+	"已砍至": "Cắt thành",
+	"活动进行中": "Đang xử lý ...",
+	"取消活动": "Hủy bỏ",
+	"继续砍价": "Tiếp tục",
+	"暂无砍价记录": "Không có dữ liệu",
+	"人正在参与": "Tham gia",
+	"最低": "Thấp nhất",
+	"参与砍价": "Mặc cả",
+	"砍价列表": "Danh sách mặc cả",
+	"人查看": "Xem",
+	"人分享": "Chia sẻ",
+	"人参与": "Tham gia",
+	"邀请您帮忙砍价": "Mời bạn Trợ giúp",
+	"查看商品": "Xem các mục",
+	"当前": "Hiện tại",
+	"已砍": "Cắt nhỏ",
+	"还剩": "Trái",
+	"立即参与砍价": "Mặc cả ngay",
+	"商品暂无库存": "Hết hàng",
+	"邀请好友帮砍价": "Mời Bạn bè Trợ giúp",
+	"已有": "Có",
+	"位好友成功砍价": "Những người bạn thành công",
+	"帮好友砍一刀": "Giúp đỡ bạn bè",
+	"好友已砍价成功": "Bạn bè đã thành công",
+	"我也要参与": "Tôi sẽ tham gia",
+	"已成功帮助好友砍价": "Giúp Bạn bè Thành công",
+	"恭喜您砍价成功,快去支付": "Thương lượng Thành công, Thanh toán",
+	"立即支付": "Thanh toán ngay",
+	"抢更多商品": "Lấy thêm",
+	"砍价帮": "Băng đảng mặc cả",
+	"砍掉": "Cắt bỏ",
+	"更多": "Thêm",
+	"关闭": "Đóng",
+	"点击加载更多": "Nhấp để tải thêm",
+	"商品详情": "Chi tiết",
+	"砍价规则": "Quy tắc mặc cả",
+	"您已砍掉": "Bạn đã cắt",
+	"元,听说分享次数越多砍价成功的机会越大哦": ", Càng chia sẻ nhiều lần, cơ hội thương lượng thành công càng lớn",
+	"成功帮砍": "Giúp cắt thành công",
+	"您也可以砍价低价拿哦,快去挑选心仪的商品吧": "Bạn cũng có thể mặc cả và nhận được với giá rẻ, hãy đến và chọn sản phẩm yêu thích của bạn",
+	"发送给朋友": "Gửi bạn bè",
+	"微信好友": "Wechat Friend",
+	"微信朋友圈": "Khoảnh khắc WeChat",
+	"生成海报": "Tạo áp phích",
+	"砍价详情": "Chi tiết mặc cả",
+	"分享成功": "Chia sẻ thành công",
+	"分享失败": "Chia sẻ Không thành công",
+	"该商品每人限购": "Sản phẩm này được giới hạn mua cho mỗi người",
+	"您的好友": "Bạn của bạn",
+	"邀请您砍价": "Mời bạn cắt",
+	"人团": "Mọi người",
+	"去拼团": "Đi",
+	"拼团列表": "Danh sách nhóm",
+	"类型": "Loại",
+	"累计销量": "Tổng số đã bán",
+	"限购": "Giới hạn",
+	"种规格可选": "Thông số kỹ thuật",
+	"已拼": "Đánh vần",
+	"件": "Mảnh",
+	"还差": "Chỉ",
+	"人成团": "thành công",
+	"去拼单": "Tham gia",
+	"查看更多": "Thêm",
+	"收起": "Bỏ đi",
+	"拼团玩法": "Quy trình nhóm",
+	"开团/参团": "Bắt ​​đầu",
+	"邀请好友": "Lời mời",
+	"满员发货": "Giao hàng",
+	"用户评价": "Xem lại",
+	"好评率": "Tỷ lệ Khen ngợi",
+	"产品介绍": "Chi tiết",
+	"单独购买": "Mua một mình",
+	"立即开团": "Bắt ​​đầu nhóm",
+	"请选择": "Đã chọn",
+	"商品": "Sản phẩm",
+	"详情": "Chi tiết",
+	"缺少参数无法查看商品": "Không thể xem sản phẩm do thiếu thông số",
+	"参数错误": "Lỗi tham số",
+	"已选择": "Đã chọn",
+	"保存成功": "Thành công đã Lưu",
+	"保存失败": "Không lưu được",
+	"人拼": "Mọi người chiến đấu",
+	"剩余": "Còn lại",
+	"结束": "Kết thúc",
+	"恭喜您拼团成功": "Chúc mừng bạn đã nhóm thành công",
+	"人,拼团失败": "Người còn lại, nhóm không thành công",
+	"拼团中,还差": "Trong nhóm vẫn còn",
+	"人拼团成功": "Người còn lại để tham gia nhóm thành công",
+	"邀请好友参团": "Mời bạn bè tham gia nhóm",
+	"再次开团": "Tập hợp lại",
+	"取消开团": "Hủy bỏ",
+	"查看订单信息": "Xem đơn hàng",
+	"大家都在拼": "Tất cả nhóm",
+	"更多拼团": "Thêm",
+	"邀请您参团": "Mời bạn tham gia",
+	"你不是该团的成员": "Bạn không phải là thành viên của nhóm",
+	"已抢": "Bị cướp",
+	"抢购中": "Lấy ngay",
+	"未开始": "Không bắt đầu",
+	"已结束": "Hết",
+	"暂无商品,去看点别的吧": "Không có sản phẩm",
+	"即将开始": "Không bắt đầu",
+	"距秒杀结束仅剩": "Chỉ còn lại để kết thúc",
+	"累计销售": "Đã bán",
+	"收藏": "Thu thập",
+	"保存到手机": "Lưu vào điện thoại",
+	"长按图片可以保存到手机": "Nhấn và giữ để lưu vào điện thoại",
+	"抢购详情页": "Trang chi tiết mua hàng Snap",
+	"二维码获取失败": "Không lấy được mã QR",
+	"请选择属性": "Vui lòng chọn một tài sản",
+	"提示:点击图片即可保存至手机相册": "Mẹo: Bấm vào hình để lưu vào album điện thoại",
+	"拼团海报": "Áp phích câu đố",
+	"砍价海报": "Áp phích Haggling",
+	"海报生成中": "Áp phích đang được tạo",
+	"海报图片获取失败": "Không lấy được hình ảnh áp phích",
+	"海报": "Áp phích",
+	"已预定": "Đã đặt trước",
+	"预售价": "Bán trước",
+	"立即预定": "Đặt ngay",
+	"开售时间": "Thời gian bán hàng",
+	"预售活动": "Sự kiện bán trước",
+	"起": "Trỗi dậy",
+	"划线价": "ORP",
+	"开通“超级会员”立省": "Open Super Member to off",
+	"元": "₫",
+	"立即开通": "Kích hoạt ngay bây giờ",
+	"预售活动时间": "Thời gian bán trước",
+	"预售结束后": "Gửi trong vòng",
+	"天内发货": "Những ngày sau khi chương trình ưu đãi trước kết thúc",
+	"活动": "Hoạt động",
+	"参与秒杀": "Seckill",
+	"参与拼团": "Nhóm",
+	"复制口令": "Sao chép mã hàng hóa",
+	"复制成功": "Sao chép thành công",
+	"推荐": "Được đề xuất",
+	"缺少经纬度信息无法查看地图": "Thiếu thông tin kinh độ và vĩ độ không thể xem bản đồ",
+	"产品库存不足,请选择其它属性": "Không đủ kho sản phẩm, vui lòng chọn thuộc tính khác",
+	"立即退款": "Hoàn trả ngay lập tức",
+	"一键改价": "Thay đổi giá",
+	"订单备注": "Ghi chú đơn hàng",
+	"商品总价": "Tổng giá",
+	"原始邮费": "Bưu chính cũ",
+	"实际支付": "Giá thực tế",
+	"退款金额": "Giá hoàn lại",
+	"请填写备注信息": "Vui lòng điền vào các nhận xét",
+	"立即修改": "Chỉnh sửa ngay bây giờ",
+	"确认退款": "Xác nhận hoàn lại tiền",
+	"拒绝退款": "Hoàn trả bị từ chối",
+	"取消": "Hủy",
+	"订单号": "ID đặt hàng",
+	"发货方式": "Chế độ",
+	"发货类型": "Loại vận chuyển",
+	"快递公司": "Cấp tốc",
+	"快递单号": "Số",
+	"顺丰请输入单号 :收件人或寄件人手机号后四位": "Vui lòng nhập số theo dõi cho SF Express: bốn chữ số cuối của số điện thoại di động của người nhận hoặc người gửi",
+	"例如:SF000000000000:3941": "Ví dụ: SF000000000000: 3941",
+	"电子面单": "Tờ điện tử",
+	"预览": "Xem trước",
+	"寄件人姓名": "Tên người gửi",
+	"填写寄件人姓名": "Điền tên người gửi",
+	"寄件人电话": "Điện thoại người gửi",
+	"填写寄件人电话": "Điền số điện thoại người gửi",
+	"寄件人地址": "Địa chỉ người gửi",
+	"填写寄件人地址": "Điền địa chỉ người gửi",
+	"送货人": "Người giao hàng",
+	"确认提交": "Gửi",
+	"发货": "Giao hàng",
+	"送货": "Cho",
+	"无需物流": "Không cần",
+	"手动填写": "Điền thủ công",
+	"电子面单打印": "Tờ điện tử",
+	"填写快递单号": "Vui lòng điền số chuyển phát nhanh",
+	"请选择电子面单": "Vui lòng chọn biên lai điện tử",
+	"待付款": "Thanh toán",
+	"待发货": "Giao hàng",
+	"待收货": "Nhận",
+	"待评价": "Xếp hạng",
+	"售后/退款": "Hoàn lại tiền",
+	"数据统计": "Thống kê",
+	"今日成交额": "Hôm nay bán",
+	"昨日成交额": "Hôm qua Bán",
+	"本月成交额": "Tháng được bán",
+	"今日订单数": "Đơn đặt hàng hôm nay",
+	"昨日订单数": "Đơn đặt hàng hôm qua",
+	"本月订单数": "Đơn đặt hàng tháng",
+	"详细数据": "Dữ liệu chi tiết",
+	"日期": "Ngày",
+	"订单数": "Số lượng đơn hàng",
+	"成交额": "Doanh thu",
+	"立即核销": "Viết tắt ngay bây giờ",
+	"查看": "Xem",
+	"确定要核销此订单吗": "Bạn có chắc chắn viết tắt đơn hàng này không",
+	"确定核销": "Xác minh",
+	"请输入核销码": "Vui lòng nhập mã xác minh",
+	"请输入正确的核销码": "Vui lòng nhập mã xác minh chính xác",
+	"查询中": "Truy vấn",
+	"订单": "Đặt hàng",
+	"订单未备注,点击添加备注信息": "Đơn hàng không có nhận xét, bấm vào để thêm nhận xét",
+	"复制": "Sao chép",
+	"件商品,应支付": "Các mặt hàng, nên trả tiền",
+	"邮费": "Bưu phí",
+	"订单编号": "ID đặt hàng",
+	"下单时间": "Thời gian đặt hàng",
+	"支付状态": "Trạng thái Thanh toán",
+	"已支付": "Trả phí",
+	"未支付": "Chưa thanh toán",
+	"支付方式": "Phương thức thanh toán",
+	"买家留言": "Bột ngọt của người mua",
+	"支付金额": "Thanh toán số tiền",
+	"优惠券抵扣": "Khấu trừ phiếu thưởng",
+	"运费": "Giá vé",
+	"实付款": "Số tiền thực",
+	"配送方式": "Phương thức giao hàng",
+	"快递": "Cấp tốc",
+	"送货人电话": "Điện thoại chuyển phát nhanh",
+	"确认付款": "Xác nhận Thanh toán",
+	"去发货": "Giao hàng",
+	"改价成功": "Giá đã thay đổi thành công",
+	"改价失败": "Thay đổi giá không thành công",
+	"请输入备注": "Vui lòng nhập ghi chú",
+	"退款中": "Hoàn lại tiền",
+	"部分退款中": "Hoàn trả một phần",
+	"件商品,实付款": "Hàng hóa, đã thanh toán",
+	"同意退货": "Đồng ý trả lại",
+	"待用户发货": "Không Giao hàng",
+	"请输入正确的金额": "Vui lòng nhập số tiền chính xác",
+	"今天": "Hôm nay",
+	"昨天": "Hôm qua",
+	"最近7天": "7 ngày qua",
+	"本月": "Tháng",
+	"自定义": "Tùy chỉnh",
+	"营业额(元)": "Doanh thu",
+	"订单量(份)": "Số lượng",
+	"增长率": "Tỷ lệ tăng",
+	"增长": "Tăng",
+	"单位": "Đơn vị",
+	"元.": "Nhân dân tệ",
+	"分.": "Xu",
+	"固定": "Đã sửa",
+	"指定范围": "Phạm vi",
+	"提交时间": "Thời gian gửi",
+	"原因": "Lý do",
+	"暂无申请记录,快去申请吧!": "Chưa có hồ sơ ứng tuyển, nộp hồ sơ ngay!",
+	"没有更多啦": "Không còn nữa",
+	"待审核": "Đang chờ xem xét",
+	"审核通过": "Đã thông qua đánh giá",
+	"审核未通过": "Xem lại không thành công",
+	"编辑": "Chỉnh sửa",
+	"重新提交": "Gửi lại",
+	"会员优惠价": "Giảm giá VIP",
+	"余额支付": "Số dư thanh toán",
+	"可用余额": "Số dư",
+	"微信支付": "Thanh toán qua WeChat",
+	"确认": "Xác nhận",
+	"支付提醒": "Nhắc nhở thanh toán",
+	"线下支付已关闭,请点击确认按钮返回主页": "Thanh toán ngoại tuyến đã được đóng, vui lòng nhấp vào nút xác nhận để quay lại trang chủ",
+	"请输入支付金额": "Vui lòng nhập số tiền thanh toán",
+	"正在确认": "Xác nhận",
+	"进入商城": "Vào trung tâm mua sắm",
+	"代理商名称": "Tên đại lý",
+	"请输入代理商名称": "Vui lòng nhập Tên đại lý",
+	"用户姓名": "Tên của bạn",
+	"请输入姓名": "Vui lòng nhập tên của bạn",
+	"联系电话": "Điện thoại của bạn",
+	"请输入手机号": "Vui lòng nhập số điện thoại",
+	"验证码": "Mã OTP",
+	"填写验证码": "Điền Mã OTP",
+	"邀请码": "Mã mời",
+	"请输入代理商邀请码": "Nhập Mã Mời",
+	"请上传营业执照及行业相关资质证明图片": "Vui lòng tải lên hình ảnh của giấy phép kinh doanh và các chứng chỉ liên quan đến ngành nghề",
+	"图片最多可上传10张,图片格式支持JPG、PNG、JPEG": "Có thể tải lên tối đa 10 hình ảnh và định dạng hình ảnh hỗ trợ JPG, PNG, JPEG",
+	"上传图片": "Tải lên",
+	"已阅读并同意": "Đọc & Đồng ý",
+	"代理商协议": "Thỏa thuận đại lý",
+	"提交申请": "Gửi Đơn đăng ký",
+	"代理商入驻协议": "Thỏa thuận đại lý",
+	"恭喜,您的资料提交成功!": "Xin chúc mừng, đã gửi thành công!",
+	"返回首页": "Trở về nhà",
+	"恭喜,您的资料通过审核!": "Xin chúc mừng, Bài đánh giá đã thông qua!",
+	"您的申请未通过!": "Đơn đăng ký của bạn đã bị từ chối!",
+	"重新申请": "Đăng ký lại",
+	"获取验证码": "Lấy mã OTP",
+	"请输入正确的手机号码": "Vui lòng nhập số điện thoại chính xác",
+	"重新获取": "Yêu cầu lại",
+	"请上传营业执照": "Vui lòng tải lên giấy phép kinh doanh",
+	"请勾选并同意入驻协议": "Vui lòng đánh dấu và đồng ý với Thỏa thuận nghề nghiệp",
+	"专题栏": "Cột chủ đề",
+	"暂无数据": "Không có dữ liệu",
+	"请输入卡号": "Vui lòng nhập số thẻ",
+	"请输入卡密": "Vui lòng nhập mật khẩu của bạn",
+	"确认激活": "Xác nhận",
+	"SVIP会员尊享权": "Đặc quyền thành viên SVIP",
+	"正在激活": "Đang kích hoạt",
+	"已使用": "Đã qua sử dụng",
+	"永久SVIP会员": "Thành viên SVIP vĩnh viễn",
+	"SVIP会员": "Thành viên SVIP",
+	"到期": "trưởng thành",
+	"您与": "Bạn với",
+	"商城的第": "Trung tâm mua sắm",
+	"天.": "Ngày.",
+	"已累积为您节省": "Tiết kiệm tích lũy cho bạn",
+	"开通即享会员权益": "Hưởng lợi ích thành viên",
+	"续费会员": "Gia hạn",
+	"开通会员": "Tham gia SVIP",
+	"有效期至": "Có giá trị cho đến khi",
+	"试用": "Dùng thử",
+	"购买即视为同意": "Mua theo sự đồng ý",
+	"会员用户协议": "Thỏa thuận SVIP",
+	"点击兑换卡密": "Nhấp để đổi thẻ",
+	"会员优惠券": "Phiếu giảm giá SVIP",
+	"SVIP商品推荐": "Khuyến nghị SVIP",
+	"商城价": "Giá trung tâm thương mại",
+	"激活会员卡": "Kích hoạt thẻ",
+	"支付宝支付": "Alipay",
+	"成功开启0元试用": "Đã mở thành công bản dùng thử 0 nhân dân tệ",
+	"确认绑定": "Xác nhận ràng buộc",
+	"绑定成功": "Liên kết thành công",
+	"商城客服已离线": "Dịch vụ khách hàng ngoại tuyến",
+	"我要反馈": "Tôi muốn phản hồi",
+	"请填写内容": "Vui lòng điền nội dung",
+	"提交": "Gửi",
+	"精品推荐": "Được đề xuất",
+	"热门榜单": "Phổ biến",
+	"首发新品": "Mới",
+	"促销单品": "Khuyến mại",
+	"预告": "Thông báo",
+	"回放": "Phát lại",
+	"进行中": "Đang xử lý",
+	"发送客服": "Gửi",
+	"客服连接中": "Dịch vụ khách hàng đang kết nối",
+	"连接失败": "Kết nối không thành công",
+	"提示": "Gợi ý",
+	"客服已下线,是否需要反馈?": "Dịch vụ khách hàng đang ngoại tuyến, bạn có cần phản hồi không?",
+	"和好友一起分享": "Chia sẻ với bạn bè",
+	"积分抵扣": "Trừ điểm",
+	"已开票": "Đã lập hóa đơn",
+	"未开票": "Không được lập hóa đơn",
+	"发票信息": "Thông tin hóa đơn",
+	"发票抬头": "Hóa đơn",
+	"发票抬头类型": "Loại tiêu đề hóa đơn",
+	"个人": "PER",
+	"企业": "COM",
+	"发票类型": "Loại hóa đơn",
+	"电子普通发票": "Hóa đơn điện tử chung",
+	"电子专用发票": "Hóa đơn điện tử đặc biệt",
+	"企业税号": "Thuế doanh nghiệp",
+	"联系信息": "Thông tin liên hệ",
+	"真实姓名": "Tên thật",
+	"联系邮箱": "Email",
+	"抬头选择": "Lựa chọn đầu",
+	"默认": "Mặc định",
+	"普通": "Bình thường",
+	"专用": "Chuyên dụng",
+	"您还没有添加发票信息哟": "Bạn chưa thêm thông tin hóa đơn",
+	"添加新的抬头": "Thêm tiêu đề mới",
+	"不开发票": "Không có hóa đơn",
+	"抽奖": "Xổ số",
+	"全选": "Chọn tất cả",
+	"属性": "Thuộc tính",
+	"请填写具体地址": "Vui lòng điền vào địa chỉ cụ thể",
+	"省": "Tỉnh",
+	"市": "Thành phố",
+	"区": "Khu vực",
+	"添加成功": "Thêm thành công",
+	"您已拒绝导入微信地址权限": "Bạn đã từ chối quyền nhập địa chỉ WeChat",
+	"是否进入权限管理,调整授权?": "Bạn có vào phần quản lý quyền và điều chỉnh quyền không?",
+	"已取消": "Đã hủy",
+	"添加失败": "Thêm không thành công",
+	"请填写收货人姓名": "Vui lòng điền tên người nhận hàng",
+	"请选择所在地区": "Vui lòng chọn khu vực của bạn",
+	"请填写详细地址": "Vui lòng điền địa chỉ chi tiết",
+	"星": "Ngôi sao",
+	"商品满足你的期待么?说说你的想法,分享给想买的他们吧": "Sản phẩm có đáp ứng được mong đợi của bạn không? Hãy cho chúng tôi biết suy nghĩ của bạn và chia sẻ với những người muốn mua sản phẩm đó",
+	"立即评价": "Xếp hạng ngay",
+	"商品质量": "Chất lượng sản phẩm",
+	"服务态度": "Thái độ phục vụ",
+	"缺少参数": "Thiếu tham số",
+	"请填写你对宝贝的心得": "Vui lòng điền ý kiến ​​của bạn về sản phẩm",
+	"正在发布评论": "Đăng bình luận",
+	"感谢您的评价": "Cảm ơn đánh giá của bạn",
+	"评价完成": "Xem xét hoàn tất",
+	"恭喜您": "Xin chúc mừng",
+	"获得": "Nhận",
+	"机会": "Cơ hội",
+	"领取成功": "Đã nhận thành công",
+	"评分": "Điểm",
+	"全部": "TẤT CẢ",
+	"好评": "Khen ngợi",
+	"中评": "Trung bình",
+	"差评": "Xấu",
+	"加载更多": "Đang tải thêm",
+	"千米距离": "km đi",
+	"搜索商品名称": "Tìm kiếm Sản phẩm",
+	"价格": "Giá",
+	"销量": "Đã bán",
+	"新品": "Mới",
+	"已全部加载": "Đã tải tất cả",
+	"缺少订单号": "Thiếu ID đơn hàng",
+	"退货件数": "Số được hoàn lại",
+	"退款类型": "Loại tiền hoàn lại",
+	"退款原因": "Lý do hoàn tiền",
+	"备注说明": "Nhận xét",
+	"填写备注信息,100字以内": "Nhận xét trong vòng 100 từ",
+	"仅退款": "Chỉ hoàn lại tiền",
+	"退货并退款": "Trả lại và hoàn lại tiền",
+	"申请成功": "Áp dụng thành công",
+	"请先选择退货商品": "Vui lòng chọn mặt hàng trả lại trước",
+	"搜索历史": "Lịch sử tìm kiếm",
+	"热门搜索": "Tìm kiếm phổ biến",
+	"请输入要搜索的商品": "Vui lòng nhập sản phẩm bạn muốn tìm kiếm",
+	"正在搜索中": "Đang tìm kiếm",
+	"中奖记录": "Kỷ lục chiến thắng",
+	"我的奖品": "Giải thưởng của tôi",
+	"活动规则": "Quy tắc hoạt động",
+	"昵称": "Tên biệt hiệu",
+	"序号": "Nối tiếp",
+	"奖品名称": "Tên giải thưởng",
+	"获奖时间": "Giành chiến thắng",
+	"商家暂未上架活动哦": "Người bán chưa liệt kê sự kiện",
+	"获取抽奖信息": "Nhận thông tin rút thăm trúng thưởng",
+	"奖品类型": "Loại Giải thưởng",
+	"立即兑换": "Đổi ngay",
+	"兑换时间": "Thời gian trao đổi",
+	"暂无中奖记录": "Không có kỷ lục chiến thắng",
+	"积分": "Điểm",
+	"余额": "Số dư",
+	"红包": "Tiền mặt",
+	"设置收货地址": "Đặt địa chỉ giao hàng",
+	"暂无门店信息": "Không có thông tin cửa hàng",
+	"剩余积分": "Điểm còn lại",
+	"当前积分": "Điểm hiện tại",
+	"开具发票": "Hóa đơn",
+	"请填写": "Vui lòng điền vào",
+	"配送运费": "Phí vận chuyển",
+	"会员商品优惠": "Ưu đãi Sản phẩm",
+	"会员运费优惠": "Ưu đãi Giao hàng",
+	"合计": "Tổng số",
+	"使用微信快捷支付": "Thanh toán nhanh qua WeChat",
+	"使用支付宝支付": "Thanh toán bằng Alipay",
+	"线下支付": "Thanh toán ngoại tuyến",
+	"使用线下付款": "Sử dụng thanh toán ngoại tuyến",
+	"好友代付": "Bạn bè trả tiền",
+	"找微信好友支付": "Tìm bạn để thanh toán",
+	"立即使用": "Sử dụng",
+	"请选择要购买的商品": "Vui lòng chọn một mặt hàng để mua",
+	"发票": "Hóa đơn",
+	"不使用": "Không sử dụng",
+	"订单创建成功": "Đã tạo đơn hàng thành công",
+	"请选择支付方式": "Vui lòng chọn phương thức thanh toán",
+	"请选择收货地址": "Vui lòng chọn địa chỉ giao hàng",
+	"请填写联系人或联系人电话": "Vui lòng điền thông tin người liên hệ hoặc số điện thoại liên hệ",
+	"暂无门店,请选择其他方式": "Hiện tại không có cửa hàng, vui lòng chọn cách khác",
+	"请输入": "Vui lòng nhập",
+	"请输入正确的": "Vui lòng nhập chính xác",
+	"请上传": "Vui lòng tải lên",
+	"订单支付中": "Thanh toán",
+	"请按以上退货信息将商品退回": "Vui lòng gửi lại hàng kèm theo thông tin",
+	"请联系管理员获取退货地址": "Vui lòng liên hệ với quản trị viên để biết địa chỉ trả hàng",
+	"待核销": "Đã xóa sổ",
+	"核销信息": "Thông tin xóa sổ",
+	"营业时间": "Giờ làm việc",
+	"每日": "Hàng ngày",
+	"使用说明": "Hướng dẫn Sử dụng",
+	"可将二维码出示给店员扫描或提供数字核销码": "Mã QR có thể được xuất trình cho nhân viên bán hàng để quét hoặc cung cấp mã xác minh kỹ thuật số",
+	"可将二维码出示给配送员进行核销": "Mã QR có thể được xuất trình cho người chuyển phát nhanh để xác minh",
+	"查看位置": "Xem vị trí",
+	"拒绝原因": "Lý do từ chối",
+	"联系客服": "Liên hệ",
+	"商家备注": "Ghi chú của người bán",
+	"收货人": "Người nhận",
+	"收货地址": "Địa chỉ giao hàng",
+	"配送人姓名": "Tên tàu",
+	"拨打": "Gọi",
+	"虚拟发货": "Con tàu ảo",
+	"已发货,请注意查收": "Đã giao hàng, vui lòng kiểm tra",
+	"虚拟备注": "Ghi chú ảo",
+	"总代付": "Tổng số tiền",
+	"申请开票": "Áp dụng hóa đơn",
+	"查看发票": "Xem hóa đơn",
+	"取消订单": "Hủy",
+	"立即付款": "Thanh toán",
+	"批量退款": "Hoàn trả hàng loạt",
+	"查看拼团": "Xem nhóm",
+	"再次购买": "Mua lại",
+	"取消申请": "Huỷ Áp dụng",
+	"填写退货信息": "Thông tin trả lại",
+	"查看退货物流": "Hậu cần",
+	"您确认放弃此次申请吗": "Bạn có chắc chắn muốn từ bỏ ứng dụng này không",
+	"操作成功": "Hoạt động thành công",
+	"订单信息不存在": "Thông tin đặt hàng không tồn tại",
+	"为保障权益,请收到货确认无误后,再确认收货": "Để bảo vệ quyền và lợi ích, Quý khách vui lòng xác nhận nhận hàng sau khi xác nhận đúng hàng.",
+	"删除订单": "Xóa đơn hàng",
+	"确定删除该订单": "Xác nhận xóa đơn hàng",
+	"删除成功": "Đã xóa thành công",
+	"确认取消该订单": "Xác nhận hủy đơn hàng",
+	"订单信息": "Thông tin đặt hàng",
+	"消费订单": "Đặt hàng",
+	"总消费": "Tổng số tiền",
+	"预售": "Bán trước",
+	"线下付款,未支付": "Ngoại tuyến chưa thanh toán",
+	"未核销": "Không viết tắt",
+	"件商品,总金额": "mặt hàng, tổng số tiền",
+	"查看详情": "Xem",
+	"暂无订单": "Chưa có đơn hàng",
+	"缺少订单号无法取消订单": "Không thể hủy đơn hàng mà không có số đơn hàng",
+	"订单支付成功": "Đã thanh toán đơn hàng thành công",
+	"订单支付失败": "Đơn hàng đã thanh toán không thành công",
+	"暂未支付": "Chưa được thanh toán",
+	"失败原因": "Lý do không thành công",
+	"重新购买": "Mua lại",
+	"重新支付": "Thanh toán lại",
+	"赠送优惠券": "Tặng phiếu giảm giá",
+	"有效期": "Tính hợp lệ",
+	"缺少参数无法查看订单支付状态": "Thiếu thông số không xem được trạng thái thanh toán đơn hàng",
+	"最多可上传3张": "Tối đa 3 tải lên",
+	"请选择产品": "Vui lòng chọn sản phẩm",
+	"该产品没有更多库存了": "Không còn hàng cho sản phẩm này",
+	"优品推荐": "Đề xuất Tốt nhất",
+	"暂无产品": "Chưa có sản phẩm",
+	"重新选择": "Chọn lại",
+	"请选择数量": "Vui lòng chọn số lượng",
+	"砍价专区·BARGAINING": "BARGAINING",
+	"立即砍价": "Cắt ngay bây giờ",
+	"拼团活动": "Nhóm",
+	"人拼团成功.": "Mọi người đã thành công",
+	"人参团": "Nhóm nhân sâm",
+	"拼团价": "Giá nhóm",
+	"已过期": "Đã hết hạn",
+	"关注": "Theo dõi",
+	"推荐好货": "Đề xuất hàng hóa",
+	"暂无商品": "Chưa có sản phẩm",
+	"限时秒杀": "Tăng đột biến có giới hạn thời gian",
+	"抢": "Lấy",
+	"广告位": "Không gian ADV",
+	"精彩内容": "Điểm nổi bật",
+	"砍价模块,暂无数据": "Mô-đun mặc cả, chưa có dữ liệu",
+	"砍价活动": "Mặc cả",
+	"呼朋唤友来砍价": "Gọi cho bạn bè mặc cả",
+	"拼团模块,暂无数据": "Mô-đun nhóm, chưa có dữ liệu",
+	"享超值开团价": "Hưởng mức giá nhóm đáng đồng tiền",
+	"优惠券,暂无数据": "Phiếu giảm giá, tạm thời không có dữ liệu",
+	"领取今日好券": "Nhận phiếu giảm giá tốt ngay hôm nay",
+	"可用": "Đã qua sử dụng",
+	"领取": "Yêu cầu",
+	"客服": "Dịch vụ",
+	"商品列表,暂无数据": "Tạm thời không có dữ liệu",
+	"搜索商品": "Tìm kiếm Sản phẩm",
+	"暂无图片,请上传图片": "Không có ảnh, vui lòng tải lên",
+	"首发新品,暂无数据": "Sản phẩm mới đầu tiên, chưa có dữ liệu",
+	"多个优质商品最新上架": "Hàng chất lượng cao mới nhất trên kệ",
+	"暂无新闻,请上传新闻": "Không có tin tức, vui lòng tải lên tin tức",
+	"热度 TOP": "Heat TOP",
+	"排行榜、暂无数据": "Bảng xếp hạng, tạm thời không có dữ liệu",
+	"促销单品,暂无数据": "Các mặt hàng khuyến mại, tạm thời không có dữ liệu",
+	"库存商品优惠促销活动": "Hoạt động khuyến mại cho hàng hóa tồn kho",
+	"精品推荐,暂无数据": "Đề xuất cửa hàng, chưa có dữ liệu",
+	"上百种商品分类任您选择": "Hàng trăm danh mục sản phẩm cho bạn lựa chọn",
+	"秒杀模块,暂无数据": "Mô-đun Seckill, tạm thời không có dữ liệu",
+	"场": "Trang web",
+	"暂无数据,请设置": "Không có dữ liệu, vui lòng thiết lập",
+	"暂无数据,请先添加分类": "Không có dữ liệu, vui lòng thêm phân loại trước",
+	"暂无标题": "Tạm thời không có tiêu đề",
+	"诚意推荐品质商品": "Đề xuất hàng chất lượng tốt",
+	"点击“立即关注”即可关注公众号": "Nhấp vào \"theo dõi ngay\" để theo dõi tài khoản chính thức",
+	"立即关注": "Theo dõi ngay bây giờ",
+	"添加到我的小程序, 微信首页下拉即可访问商城。": "Thêm nó vào applet của tôi, và bạn có thể truy cập trung tâm thương mại bằng cách kéo xuống trang chủ wechat",
+	"点击": "Nhấp vào",
+	"服务协议与隐私政策": "Thỏa thuận dịch vụ và chính sách bảo mật",
+	"请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。": "Vui lòng đảm bảo đọc kỹ và hiểu đầy đủ các điều khoản của thỏa thuận dịch vụ và chính sách bảo mật, bao gồm nhưng không giới hạn ở: để cung cấp cho bạn tính năng nhắn tin nhanh, chia sẻ nội dung và các dịch vụ khác, chúng tôi cần thu thập thiết bị của bạn thông tin, nhật ký hoạt động và thông tin cá nhân khác. Bạn có thể xem, thay đổi, xóa thông tin cá nhân và quản lý ủy quyền của mình trong Cài đặt ",
+	"你可以阅读": "Bạn có thể đọc",
+	"《服务协议与隐私政策》": "\"Thỏa thuận dịch vụ và chính sách bảo mật\"",
+	"了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。": "Tìm hiểu thêm. Nếu bạn đồng ý, vui lòng nhấp vào Tôi đồng ý để bắt đầu chấp nhận dịch vụ của chúng tôi",
+	"我同意": "Tôi đồng ý",
+	"残忍拒绝": "Từ chối phũ phàng",
+	"下拉加载更多": "Kéo xuống tải thêm",
+	"网络连接断开": "Kết nối mạng bị ngắt kết nối",
+	"请检查情况:": "Vui lòng kiểm tra điều kiện:",
+	"在设置中是否已开启网络权限": "Cho dù quyền mạng có được bật trong cài đặt hay không",
+	"当前是否处于弱网环境": "Hiện tại trong môi trường mạng yếu",
+	"版本是否过低,升级试试吧": "Khi phiên bản quá thấp, hãy thử nâng cấp",
+	"重新连接": "Kết nối lại",
+	"加载中": "Đang tải",
+	"没有更多内容啦~": "Không còn nội dung nữa ~",
+	"100%正品保证": "100% chính hãng",
+	"所有商品精挑细选": "Hãy rất kén chọn",
+	"售后无忧": "Không lo lắng sau khi bán",
+	"管理": "Ống",
+	"购物数量": "Số lượng mua sắm",
+	"请重新选择商品规格": "Vui lòng chọn lại đặc điểm sản phẩm",
+	"重选": "Lựa chọn lại",
+	"失效商品": "Hàng không hợp lệ",
+	"失效": "Thất bại",
+	"该商品已失效": "Hàng đã hết hạn sử dụng",
+	"立即下单": "Đặt hàng ngay",
+	"我也是有底线的": "Tôi cũng có một điểm mấu chốt",
+	"产品库存不足,请选择其它": "Hàng tồn kho không đủ, vui lòng chọn sản phẩm khác",
+	"添加购物车成功": "Đã thêm thành công giỏ hàng",
+	"清除成功": "Dọn dẹp thành công",
+	"暂无兑换记录~": "Không có hồ sơ trao đổi ~",
+	"大家都在换": "Mọi người đều đang thay đổi",
+	"人兑换": "Trao đổi người",
+	"轻松赚积分": "Kiếm điểm dễ dàng",
+	"购买商品": "Mua hàng",
+	"购买商品可获得积分奖励": "Điểm thưởng khi mua hàng",
+	"去完成": "Đi",
+	"每日签到活动": "Hoạt động đăng ký hàng ngày",
+	"每日签到可获得积分奖励": "Đăng ký hàng ngày có thể nhận được điểm thưởng",
+	"九宫格抽奖活动": "Xổ số Jiugongge",
+	"幸运抽奖可获得积分奖励": "Rút thăm may mắn có thể nhận được điểm thưởng",
+	"我的积分": "Điểm của tôi",
+	"每日签到": "Đăng nhập hàng ngày",
+	"积分抽奖": "Xổ số tích điểm",
+	"兑换记录": "Bản ghi trao đổi",
+	"已兑换": "Đã đổi",
+	"无法兑换": "Không đổi được",
+	"[默认]": "[Mặc định]",
+	"可用积分": "Điểm khả dụng",
+	"快递费用": "Phí chuyển phát nhanh",
+	"免运费": "Miễn phí vận chuyển",
+	"备注信息": "Nhận xét",
+	"请添加备注(150字以内)": "Vui lòng thêm nhận xét (trong vòng 150 từ)",
+	"使用线上支付宝支付": "Thanh toán bằng Alipay trực tuyến",
+	"可用余额:": "Số dư:",
+	"选择线下付款方式": "Chọn phương thức thanh toán ngoại tuyến",
+	"正在加载…": "Đang tải ...",
+	"可用积分不足!": "Không đủ điểm!",
+	"订单状态": "Trạng thái đơn hàng",
+	"支付积分": "Trả điểm",
+	"备注": "Nhận xét",
+	"配送核销码": "Mã xác minh giao hàng",
+	"当前可用余额:": "Số dư khả dụng hiện tại:",
+	"正在加载": "Đang tải",
+	"缺少经纬度信息无法查看地图!": "Không thể xem bản đồ nếu không có thông tin kinh độ và vĩ độ! ",
+	"商品兑换成功": "Đã đổi thành công",
+	"兑换方式": "Phương thức trao đổi",
+	"积分兑换": "Trao đổi điểm",
+	"兑换积分": "Đổi điểm",
+	"取消兑换": "Hủy trao đổi",
+	"缺少参数无法查看订单兑换状态": "Không thể xem trạng thái trao đổi đơn hàng nếu không có thông số",
+	"用户离开了": "Người dùng đã rời đi",
+	"兑换成功": "Đã đổi thành công",
+	"物流公司": "Công ty hậu cần",
+	"复制单号": "Copy doc no",
+	"设为默认": "Đặt làm mặc định",
+	"添加新地址": "Thêm địa chỉ mới",
+	"导入微信地址": "Nhập địa chỉ wechat",
+	"取消选择": "Bỏ chọn",
+	"您设置的默认地址不存在!": "Địa chỉ mặc định bạn đặt không tồn tại!",
+	"设置成功": "Cài đặt thành công",
+	"您删除的地址不存在!": "Địa chỉ bạn đã xóa không tồn tại!",
+	"获取头像": "Lấy hình đại diện",
+	"请点击授权": "Vui lòng nhấp vào ủy quyền",
+	"绑定手机号": "Liên kết số điện thoại di động",
+	"永久": "Vĩnh viễn",
+	"会员到期": "Hết hạn tư cách thành viên",
+	"未开通会员": "Không mở thành viên",
+	"查看会员权益": "Xem lợi ích thành viên",
+	"立即续费": "Gia hạn",
+	"立即激活": "Kích hoạt",
+	"会员可享多项权益": "Hưởng nhiều lợi ích",
+	"订单中心": "Đơn đặt hàng của tôi",
+	"我的服务": "Dịch vụ của tôi",
+	"隐私协议": "Quyền riêng tư",
+	"商家管理": "Quản lý doanh nghiệp",
+	"更新用户信息成功": "Cập nhật thông tin người dùng thành công",
+	"客服接待": "Tiếp tân",
+	"点击复制网址去浏览器中打开": "Nhấp vào Sao chép URL để mở trong trình duyệt",
+	"点击复制": "Nhấp vào Sao chép",
+	"完成支付": "Hoàn tất thanh toán",
+	"点击右上角": "Nhấp vào góc trên bên phải",
+	"选择 在浏览器 打开,去支付宝支付": "Chọn mở trong trình duyệt và thanh toán qua Alipay",
+	"支付订单不存在,页面将在2秒后自动关闭!": "Lệnh thanh toán không tồn tại và trang sẽ tự động đóng sau 2 giây!",
+	"正在支付中": "Thanh toán",
+	"支付订单不存在,页面将在2秒后自动关闭": "Lệnh thanh toán không tồn tại và trang sẽ tự động đóng sau 2 giây",
+	"复制失败": "Sao chép không thành công",
+	"您目前的排名": "Xếp hạng hiện tại của bạn",
+	"您目前暂无排名": "Bạn hiện đang xếp hạng",
+	"暂无排名~": "Không có thứ hạng ~",
+	"输入手机号": "Nhập số điện thoại di động",
+	"输入验证码": "Nhập mã xác minh",
+	"立即登录": "Đăng nhập ngay bây giờ",
+	"请填写手机号码": "Vui lòng điền số điện thoại di động của bạn",
+	"请填写验证码": "Vui lòng điền mã xác minh vào",
+	"请输入正确的验证码": "Vui lòng nhập mã xác minh chính xác",
+	"正在登录中": "Đang đăng nhập",
+	"登录成功": "Đăng nhập thành công",
+	"获取授权": "Nhận ủy quyền",
+	"获取微信的手机号授权": "Nhận ủy quyền số điện thoại di động wechat",
+	"获取微信手机号": "Lấy số điện thoại di động wechat",
+	"输入手机号码": "Nhập số điện thoại di động",
+	"填写登录密码": "Điền mật khẩu đăng nhập",
+	"登录": "Đăng nhập",
+	"快速登录": "Đăng nhập nhanh",
+	"账号登录": "Đăng nhập tài khoản",
+	"其他方式登录": "Đăng nhập bằng các phương pháp khác",
+	"登录中": "Đang đăng nhập",
+	"获取用户信息失败": "Không lấy được thông tin người dùng",
+	"请绑定手机号后,继续操作": "Vui lòng liên kết số điện thoại di động của bạn và tiếp tục hoạt động",
+	"错误信息": "Thông tin lỗi",
+	"用户点击确定": "Người dùng bấm OK",
+	"用户点击取消": "Người dùng nhấp vào Hủy bỏ",
+	"登录失败": "Đăng nhập không thành công",
+	"请勿重复点击": "Không nhấp liên tục",
+	"请填写密码": "Vui lòng điền mật khẩu",
+	"您输入的密码过于简单": "Mật khẩu bạn nhập quá đơn giản",
+	"请填写账号": "Vui lòng điền số tài khoản",
+	"请输入正确的账号": "Vui lòng nhập số tài khoản chính xác",
+	"[图片]": "[Hình ảnh]",
+	"[语音]": "[Giọng nói]",
+	"[商品]": "[Sản phẩm]",
+	"[订单]": "[Đặt hàng]",
+	"亲、暂无消息记录哟!": "Thân mến, chưa có tin nhắn nào!",
+	"站内消息": "Tin nhắn trong đài",
+	"客服消息": "Tin nhắn dịch vụ khách hàng",
+	"通知于": "Đã thông báo trên",
+	"获取详情中": "Nhận thông tin chi tiết",
+	"代付订单创建成功,发给好友帮你付款吧~": "Lệnh thanh toán đã được tạo thành công, hãy gửi cho bạn của bạn để giúp bạn thanh toán ~",
+	"帮我付一下这件商品了,谢谢~": "Giúp tôi thanh toán cho món hàng này, cảm ơn bạn ~",
+	"已经有人替我代付,谢谢啦~": "Ai đó đã trả tiền cho tôi, cảm ơn bạn ~",
+	"谢谢你帮我支付,么么哒~": "Cảm ơn bạn đã giúp tôi thanh toán, Moda ~",
+	"我已为你代付成功,商家正在努力发货中~": "Tôi đã thanh toán thành công cho bạn và người bán đang cố gắng giao hàng ~",
+	"好友代付成功,商家正在努力发货中~": "Thanh toán cho bạn bè đã thành công và người bán đang cố gắng giao hàng ~",
+	"发送给微信好友": "Gửi cho bạn bè wechat",
+	"查看订单详情": "Xem chi tiết đơn hàng",
+	"订单已支付": "Đơn hàng đã thanh toán",
+	"如果订单申请退款,已支付金额将原路退还给您": "Nếu đơn hàng áp dụng hoàn lại tiền, số tiền đã thanh toán sẽ được trả lại cho bạn theo cách tương tự",
+	"代付成功": "Thanh toán thành công",
+	"谢谢你为我付款,还可以再去看看其他商品哟~": "Cảm ơn bạn đã trả tiền cho mình, còn bạn có thể qua xem hàng khác ~",
+	"该订单暂未支付": "Đơn hàng vẫn chưa được thanh toán",
+	"人": "Người",
+	"推广人数": "Số lượng người quảng bá",
+	"一级": "Cấp độ 1",
+	"二级": "Cấp độ 2",
+	"点击搜索会员名称": "Nhấp để tìm kiếm tên thành viên",
+	"团队排序": "Sắp xếp nhóm",
+	"金额排序": "Sắp xếp số lượng",
+	"订单排序": "Sắp xếp đơn hàng",
+	"单": "Đơn hàng",
+	"加入时间": "Thời gian tham gia",
+	"累积推广订单": "Số lượng đơn hàng",
+	"本月累计推广订单": "Đơn đặt hàng tháng",
+	"返佣": "Giảm giá",
+	"暂未返佣": "Không giảm giá",
+	"返佣时间": "Thời gian hoàn tiền",
+	"单号": "Số đơn hàng",
+	"暂无推广订单~": "Không có đơn hàng khuyến mãi ~",
+	"推广订单列表": "Danh sách đơn hàng khuyến mãi",
+	"找回密码": "Lấy lại mật khẩu",
+	"填写您的新密码": "Điền mật khẩu mới của bạn",
+	"加载失败": "Lỗi tải",
+	"点击授权登录您的客服工作台": "Nhấp vào ủy quyền để đăng nhập vào bàn làm việc dịch vụ khách hàng của bạn",
+	"授权登录": "Đăng nhập được ủy quyền",
+	"没有登录的code,请重新扫码": "Code không đăng nhập được, vui lòng quét lại code",
+	"员工人数": "Số lượng nhân viên",
+	"邀请": "Lời mời",
+	"分佣比例": "Quy mô",
+	"修改分佣比例": "Điều chỉnh tỷ lệ",
+	"请输入百分比": "Vui lòng nhập tỷ lệ phần trăm",
+	"删除员工": "Xóa nhân viên",
+	"确定删除该员工?": "Bạn có chắc chắn xóa nhân viên này không?",
+	"请输入比例": "Vui lòng nhập thang điểm",
+	"分类": "Lớp",
+	"我的": "Của tôi",
+	"姓名": "Tên",
+	"请输入联系电话": "Vui lòng nhập số điện thoại liên hệ",
+	"所在地区": "Vị trí",
+	"详细地址": "Địa chỉ",
+	"设置为默认地址": "Đặt làm địa chỉ mặc định",
+	"立即保存": "Lưu ngay bây giờ",
+	"浙江省": "Chiết Giang",
+	"杭州市": "Hàng Châu",
+	"滨江区": "Quận Tân Cương",
+	"广东省": "Tỉnh Quảng Đông",
+	"广州市": "Quảng Châu",
+	"番禺区": "Phiên Ngung",
+	"修改地址": "Sửa đổi địa chỉ",
+	"添加地址": "Thêm địa chỉ",
+	"已取消!": "Đã hủy! ",
+	"请填写联系电话": "Vui lòng điền số điện thoại liên hệ",
+	"保存中": "Tiết kiệm",
+	"修改成功": "Sửa đổi thành công",
+	"消费": "Tiêu thụ",
+	"充值": "Nạp tiền",
+	"暂无账单的记录哦~": "Tạm thời không có hồ sơ hóa đơn ~",
+	"点击【立即注销】即代表您已经同意《用户注销协议》": "Nhấp vào [đăng xuất ngay lập tức] có nghĩa là bạn đã đồng ý với thỏa thuận đăng xuất của người dùng",
+	"立即注销": "Đăng xuất ngay bây giờ",
+	"是否确认注销": "Xác nhận đăng xuất",
+	"注销后无法恢复,请谨慎操作": "Không thể khôi phục sau khi đăng xuất, hãy cẩn thận",
+	"注销": "Đăng xuất",
+	"持卡人": "Chủ thẻ",
+	"请输入持卡人姓名": "Nhập tên chủ thẻ",
+	"卡号": "Số thẻ",
+	"请填写卡号": "Vui lòng điền số thẻ",
+	"银行": "Ngân hàng",
+	"提现": "Rút tiền",
+	"最低提现金额": "Số tiền rút tối thiểu",
+	"当前可提现金额": "Số tiền có thể rút hiện tại",
+	"冻结佣金": "Hoa hồng đông lạnh",
+	"说明: 每笔佣金的冻结期为": "Lưu ý: thời gian đóng băng của mỗi khoản hoa hồng là",
+	"天,到期后可提现": "Ngày, có thể rút khi hết hạn",
+	"账号": "Tài khoản",
+	"请填写您的微信账号": "Điền vào tài khoản wechat của bạn",
+	"收款码": "Mã bộ sưu tập",
+	"请填写您的支付宝账号": "Điền số tài khoản Alipay của bạn",
+	"请选择银行": "Vui lòng chọn ngân hàng",
+	"银行卡": "Thẻ ngân hàng",
+	"微信": "Wechat",
+	"支付宝": "Alipay",
+	"请填写持卡人姓名": "Vui lòng điền tên chủ thẻ",
+	"请填写微信号": "Vui lòng điền vào wechat",
+	"请填写提现金额": "Vui lòng điền số tiền rút",
+	"提现金额不能低于": "Số tiền rút không được nhỏ hơn",
+	"未使用": "Không được sử dụng",
+	"已使用/过期": "Đã sử dụng / hết hạn",
+	"通用劵": "Chứng khoán chung",
+	"一级分佣上浮": "Tăng một cấp",
+	"二级分佣上浮": "Nổi thứ cấp",
+	"快速升级技巧": "Kỹ năng nâng cấp nhanh chóng",
+	"未完成": "Chưa hoàn thành",
+	"已领完": "Đã thu thập",
+	"当前共": "Tổng số hiện tại",
+	"取关": "Tắt",
+	"请选择商品": "Vui lòng chọn sản phẩm",
+	"头像": "Hình đại diện",
+	"手机号码": "Số điện thoại di động",
+	"点击绑定手机号": "Nhấp để ràng buộc",
+	"ID号": "Số ID",
+	"权限设置": "Quyền",
+	"点击管理": "Quản lý",
+	"密码": "Mật khẩu",
+	"点击修改密码": "Nhấp vào Sửa đổi",
+	"更换手机号码": "Thay đổi số",
+	"点击更换手机号码": "Nhấp để",
+	"缓存大小": "Kích thước bộ nhớ đệm",
+	"当前版本": "Phiên bản hiện tại",
+	"地址管理": "Địa chỉ",
+	"发票管理": "Hóa đơn",
+	"账号注销": "Hủy bỏ",
+	"注销后无法恢复": "Không thể phục hồi",
+	"累计积分": "Điểm tích lũy",
+	"累计消费": "Tiêu thụ",
+	"冻结积分": "Điểm đóng băng",
+	"积分规则": "Quy tắc tích phân",
+	"提示:积分数值的高低会直接影响您的会员等级": "Mẹo: giá trị cấp độ thành viên của bạn",
+	"提示:你有": "Mẹo: bạn có",
+	"积分在": "Tích phân trong",
+	"过期,请尽快使用": "Hết hạn, vui lòng sử dụng càng sớm càng tốt",
+	"暂无积分记录哦~": "Tạm thời không có điểm số ~",
+	"赚积分": "Kiếm điểm",
+	"分值明细": "Chi tiết điểm",
+	"分值提升": "Tăng điểm",
+	"抬头类型": "Loại tiêu đề",
+	"增值税电子专用发票": "Hóa đơn đặc biệt điện tử VAT",
+	"增值税电子普通发票": "Hóa đơn VAT điện tử thông thường",
+	"需要开具发票的姓名": "Tên được lập hóa đơn",
+	"需要开具发票的企业名称": "Tên doanh nghiệp xuất hóa đơn",
+	"税号": "Số thuế",
+	"纳税人识别号": "Mã số người nộp thuế",
+	"手机号": "Số điện thoại di động",
+	"您的手机号": "Số điện thoại di động của bạn",
+	"邮箱": "Hộp thư",
+	"您的联系邮箱": "Hộp thư liên hệ của bạn",
+	"开户银行": "Gửi tiền ngân hàng",
+	"您的开户银行": "Ngân hàng gửi tiền của bạn",
+	"银行账号": "Số tài khoản ngân hàng",
+	"您的银行账号": "Số tài khoản ngân hàng của bạn",
+	"企业地址": "Địa chỉ doanh nghiệp",
+	"您所在的企业地址": "Địa chỉ doanh nghiệp của bạn",
+	"企业电话": "Điện thoại doanh nghiệp",
+	"您的企业电话": "Điện thoại doanh nghiệp của bạn",
+	"设置为默认抬头": "Đặt làm tiêu đề mặc định",
+	"保存": "Lưu",
+	"发票类型选择": "Lựa chọn loại hóa đơn",
+	"纸质发票开出后将以邮寄形式交付": "Sau khi xuất hóa đơn giấy sẽ được chuyển qua đường bưu điện",
+	"请输入需要开具发票的姓名": "Vui lòng nhập tên được lập hóa đơn",
+	"请输入您的手机号": "Vui lòng nhập số điện thoại di động của bạn",
+	"请正确输入您的手机号": "Vui lòng nhập chính xác số điện thoại di động của bạn",
+	"请输入您的联系邮箱": "Vui lòng nhập email liên hệ của bạn",
+	"请正确输入您的联系邮箱": "Vui lòng nhập chính xác email liên hệ của bạn",
+	"请输入需要开具发票的企业名称": "Vui lòng điền tên doanh nghiệp xuất hóa đơn",
+	"请输入纳税人识别号": "Vui lòng nhập mã số thuế",
+	"请正确输入纳税人识别号": "Vui lòng nhập mã số thuế chính xác",
+	"请输入您的开户银行": "Vui lòng nhập ngân hàng gửi tiền của bạn",
+	"请输入您的银行账号": "Vui lòng nhập số tài khoản ngân hàng của bạn",
+	"请正确输入您的银行账号": "Vui lòng nhập chính xác số tài khoản ngân hàng của bạn",
+	"请输入您所在的企业地址": "Vui lòng nhập địa chỉ doanh nghiệp của bạn",
+	"请输入您的企业电话": "Vui lòng nhập số điện thoại doanh nghiệp của bạn",
+	"发票记录": "Bản ghi hóa đơn",
+	"抬头管理": "Quản lý tiêu đề",
+	"申请时间": "Appli time",
+	"没有发票信息哟~": "Không có thông tin hóa đơn ~",
+	"个人普通发票": "Hóa đơn thông thường cá nhân",
+	"企业普通发票": "Hóa đơn thông thường của doanh nghiệp",
+	"企业专用发票": "Hóa đơn đặc biệt của doanh nghiệp",
+	"添加新发票": "Thêm hóa đơn mới",
+	"删除该发票?": "Xóa hóa đơn này?",
+	"发票编号": "Số hóa đơn",
+	"发票备注": "Nhận xét hóa đơn",
+	"快递号": "Số nhanh",
+	"总资产(元)": "Tổng tài sản (₫)",
+	"累计充值(元)": "Co nạp tiền (₫)",
+	"累计消费(元)": "Co hoa (₫)",
+	"账单记录": "Hồ sơ hóa đơn",
+	"消费记录": "Ghi lại",
+	"充值记录": "Nạp tiền",
+	"积分中心": "Tích phân",
+	"签到领积分": "Đăng nhập",
+	"赚积分抵现金": "Kiếm điểm",
+	"领取优惠券": "Phiếu giảm giá",
+	"满减享优惠": "Giảm giá toàn bộ",
+	"最新拼团活动": "Hoạt động nhóm mới nhất",
+	"最新的优惠商品上架拼团": "Hàng ưu đãi mới nhất lên kệ",
+	"立即参与": "Tham gia",
+	"当前限时秒杀": "Giết thứ hai trong giới hạn thời gian hiện tại",
+	"最新商品秒杀进行中": "Hàng hóa mới nhất đang tăng đột biến",
+	"我的余额": "Số dư",
+	"赠送": "Quà tặng",
+	"其他": "Khác",
+	"注意事项": "Biện pháp phòng ngừa",
+	"冻结佣金为": "Hoa hồng đông lạnh là",
+	"立即转入": "Chuyển khoản ngay lập tức",
+	"立即充值": "Nạp tiền ngay lập tức",
+	"请输入金额": "Vui lòng nhập số tiền",
+	"转入余额": "Chuyển khoản trong số dư",
+	"转入余额后无法再次转出,确认是否转入余额": "Không thể chuyển ra ngoài sau khi chuyển số dư, xác nhận xem có chuyển số dư hay không",
+	"转入成功": "Đã chuyển thành công",
+	"正在支付": "Thanh toán",
+	"充值金额必须为数字": "Số tiền nạp phải là số",
+	"充值金额不能为0": "Số tiền nạp không được bằng 0",
+	"填写手机号码": "Điền số điện thoại di động",
+	"是否绑定账号": "Tài khoản ràng buộc",
+	"绑定": "Ràng buộc",
+	"您已取消绑定!": "Bạn chưa bị ràng buộc!",
+	"当前手机号": "Số điện thoại di động hiện tại",
+	"设置新密码": "Đặt mật khẩu mới",
+	"确认新密码": "Xác nhận mật khẩu mới",
+	"手机号码不存在,无法发送验证码!": "Số điện thoại di động không tồn tại, không thể gửi mã xác minh!",
+	"请输入新密码": "Vui lòng nhập mật khẩu mới",
+	"两次输入的密码不一致!": "Hai mật khẩu bạn đã nhập không nhất quán!",
+	"请输入验证码": "Vui lòng nhập mã xác minh",
+	"暂无退款订单~": "Không có đơn hàng hoàn lại ~",
+	"缺少订单号无法查看订单详情": "Số đơn hàng bị thiếu, không xem được chi tiết đơn hàng",
+	"明细": "Detas",
+	"第七天": "Ngày 7",
+	"第7天": "Ngày 7",
+	"奖励": "Phần thưởng",
+	"已签到": "Đã đăng ký",
+	"立即签到": "Đăng nhập ngay bây giờ",
+	"已累计签到": "Đăng ký tích lũy",
+	"据说连续签到第": "Lần đăng nhập thứ hai liên tiếp",
+	"天可获得超额积分,一定要坚持签到哦~~~": "Nếu bạn có thể nhận được điểm vượt quá mỗi ngày, bạn nhất định phải đăng nhập ~~~",
+	"签到成功": "Đăng ký thành công",
+	"好的": "Được",
+	"您今日已签到!": "Bạn đã đăng nhập hôm nay!",
+	"暂无签到记录~": "Hồ sơ không đăng nhập ~",
+	"保存海报": "Lưu POSTER",
+	"长按保存图片": "Nhấn và giữ để lưu ảnh",
+	"分销海报": "ĐĂNG KÝ phân phối",
+	"小程序二维码需要发布正式版后才能获取到": "Chỉ có thể lấy mã QR Applet sau khi xuất bản phiên bản chính thức",
+	"获取中": "Bắt",
+	"暂无数据~": "Tạm thời không có dữ liệu ~",
+	"提现记录": "Rút tiền",
+	"提现总额": "Tổng số tiền rút",
+	"佣金记录": "Hồ sơ hoa hồng",
+	"佣金明细": "Chi tiết hoa hồng",
+	"分销等级": "Mức độ phân phối",
+	"昨日收益": "Thu nhập của ngày hôm qua",
+	"累积已提": "Rút tiền tích lũy",
+	"代理商申请": "Ứng dụng đại lý",
+	"立即提现": "Rút tiền",
+	"推广名片": "Danh thiếp",
+	"推广人统计": "Thống kê nhà quảng cáo",
+	"推广人订单": "đơn đặt hàng của người quảng cáo",
+	"推广订单": "Đơn hàng khuyến mãi",
+	"事业部": "Bộ phận kinh doanh",
+	"代理商": "Đặc vụ",
+	"推广人排行": "Xếp hạng nhà quảng cáo",
+	"佣金排行": "Xếp hạng hoa hồng",
+	"员工列表": "Danh sách nhân viên",
+	"您目前暂无推广权限": "Bạn hiện không có quyền quảng cáo",
+	"商城购物可享": "Mua sắm trong trung tâm thương mại",
+	"折": "Giảm giá",
+	"当前等级": "Cấp độ hiện tại",
+	"未达成": "Không đạt",
+	"今日成长值": "Giá trị tăng trưởng của ngày hôm nay",
+	"点": "Điểm",
+	"我的成长值记录": "Kỷ lục giá trị tăng trưởng của tôi",
+	"暂未解锁该等级": "Cấp độ này vẫn chưa được mở khóa",
+	"点,需达到": "Điểm, cần đạt",
+	"已解锁更高等级": "Đã mở khóa cấp cao hơn",
+	"我的成长特权": "Đặc quyền phát triển của tôi",
+	"购物折扣": "Giảm giá",
+	"专属徽章": "Huy hiệu độc quyền",
+	"经验累积": "Tích lũy kinh nghiệm",
+	"尊享客服": "Dịch vụ độc quyền",
+	"签到": "Đăng ký",
+	"可获得": "Có sẵn",
+	"点经验": "Điểm kinh nghiệm",
+	"每日签到可获得经验值,已签到": "Đăng nhập hàng ngày có thể nhận được giá trị kinh nghiệm, đăng nhập",
+	"去签到": "Đăng ký",
+	"点经验/元": "Điểm kinh nghiệm / ₫",
+	"购买商品可获得对应的经验值": "Giá trị kinh nghiệm tương ứng có thể nhận được khi mua hàng",
+	"去购买": "Đi mua",
+	"点经验/人": "Điểm kinh nghiệm / người",
+	"邀请好友注册商城可获得经验值": "Mời bạn bè đăng ký trong trung tâm mua sắm để nhận giá trị trải nghiệm",
+	"去邀请": "Mời",
+	"积分数": "Phân số sản phẩm",
+	"消费金额": "Lượng tiêu thụ",
+	"暂无经验记录": "Không có hồ sơ kinh nghiệm",
+	"账户登录": "Đăng nhập tài khoản",
+	"微信登录": "Đăng nhập Wechat",
+	"手机号登录": "Đăng nhập trên điện thoại di động",
+	"账户充值": "Nạp tiền",
+	"佣金转入": "Hoa hồng",
+	"周榜": "Danh sách hàng tuần",
+	"月榜": "Danh sách hàng tháng",
+	"周排行": "Xếp hạng hàng tuần",
+	"月排行": "Xếp hạng hàng tháng",
+	"语言切换": "Ngôn ngữ",
+	"点击前往": "Nhấp để truy cập",
+	"查看全部": "Xem tất cả",
+	"查看订单": "Xem đơn hàng",
+	"无法获取图片信息": "Không thể lấy thông tin hình ảnh",
+	"长按或扫描查看": "Nhấn và giữ chế độ xem quét",
+	"点解锁": "Mở khóa bằng điểm",
+	"确认修改": "Xác nhận",
+	"保存修改": "Lưu",
+	"退出登录": "Đăng xuất",
+	"付费会员": "SVIP",
+	"地址信息": "Địa chỉ",
+	"我的推广": "Phần mở rộng",
+	"砍价记录": "Mặc cả",
+	"我的等级": "Cấp độ của tôi",
+	"兑换": "ĐI",
+	"申请中": "Ứng dụng",
+	"统计管理": "Thống kê",
+	"退款": "Hoàn lại tiền",
+	"未发货": "Không được cấp",
+	"当前为最新版本": "Hiện tại là phiên bản mới nhất",
+	"清除缓存": "Xóa bộ nhớ cache",
+	"确定清楚本地缓存数据吗": "Bạn có chắc chắn rằng bạn đã rõ về dữ liệu bộ nhớ cache cục bộ",
+	"缓存清理完成": "Đã hoàn thành dọn dẹp bộ nhớ cache",
+	"切换的账号不存在": "Tài khoản đã chuyển đổi không tồn tại",
+	"正在切换中": "Đang chuyển mạch",
+	"确认退出登录": "Xác nhận đăng xuất",
+	"我知道了": "Tôi hiểu rồi",
+	"系统错误": "Lỗi hệ thống",
+	"请求失败": "Yêu cầu không thành công",
+	"邀请您加入": "Mời bạn tham gia",
+	"图片上传中": "Đang tải lên",
+	"上传图片失败": "Không tải lên được hình ảnh",
+	"访问位置被拒绝": "Vị trí truy cập bị từ chối",
+	"系统定位已关闭": "Định vị hệ thống bị tắt",
+	"需要定位权限": "Yêu cầu quyền vị trí",
+	"订单核销": "viết tắt",
+	"当前可转入佣金为":"Hoa hồng có thể chuyển nhượng hiện tại là",
+	"浏览记录":"Lịch sử duyệt web",
+	"签到奖励":"Phần thưởng đăng ký",
+	"请输入内容":"Hãy nhập nội dung",
+	"单次限购":"Giảm hạn mua đơn",
+	"永久限购":"Giảm hạn mua sắm",
+	"《用户协议》":"《Thỏa thuận người dùng》",
+	"《隐私协议》":"《Thỏa thuận cá nhân》",
+	"与":"Và",
+	"请先阅读并同意协议":"Hãy đọc và đồng ý thỏa thuận trước đã",
+	"绑定下级通知":"Liên kết thông báo phụ",
+	"购买成功通知":"Thông báo thành công mua",
+	"确认收货通知":"Xác nhận hóa đơn",
+	"改价通知":"Thông báo Thay giá",
+	"退款成功通知":"Thông báo bồi thường",
+	"充值成功通知":"Duyệt lại thông báo thành công",
+	"积分到账通知":"Thông báo các điểm đến",
+	"佣金到账通知":"Thông báo Ủy ban",
+	"砍价成功通知":"Thông báo giá cả thành công",
+	"拼团成功通知":"Thông báo thành công của nhóm",
+	"拼团失败通知":"Thông báo về việc không tham gia nhóm",
+	"开团成功通知":"Thông báo mở khóa thành công",
+	"提现成功通知":"Thông báo về việc rút lui",
+	"提现失败通知":"Thông báo dừng thai",
+	"充值退款通知":"Thông báo trả lại tiền",
+	"退款申请拒绝通知":"Thông báo từ chối bồi thường",
+	"您有新的退款待处理":"Bạn đang đợi hoàn tiền mới",
+	"您有新的订单待处理":"Bạn có một trật tự mới cần xử lý",
+	"发货通知":"Thông báo giao hàng",
+	"取消拼团通知":"Thông báo hủy bỏ",
+	"参团成功通知":"Thông báo về sự tham gia",
+	"你有个新的提现申请待处理":"Bạn có một đơn xin rút tiền mới cần xử lý",
+	"你有个新的用户收货待处理":"Bạn có người dùng mới nhận hàng hóa cần xử lý",
+	"提醒付款通知":"Ghi nhớ thông báo thanh toán",
+	"短信验证码":"Mã kiểm tra SMS",
+	"到店自提":"Tự rút lui",
+	"快递配送":"Name"
+}

+ 1181 - 0
lang/zh_cn.json

@@ -0,0 +1,1181 @@
+{
+	"选择地址": "选择地址",
+	"选择其它地址": "选择其它地址",
+	"已选商品": "已选商品",
+	"清空": "清空",
+	"¥": "¥",
+	"已售罄": "已售罄",
+	"已下架": "已下架",
+	"删除": "删除",
+	"商品券": "商品券",
+	"品类券": "品类券",
+	"通用券": "通用券",
+	"优惠券": "优惠券",
+	"满": "满",
+	"元可用": "元可用",
+	"无门槛券": "无门槛券",
+	"领取后": "领取后",
+	"天内可用": "天内可用",
+	"已领取": "已领取",
+	"立即领取": "立即领取",
+	"购物满": "购物满",
+	"减": "减",
+	"不限时": "不限时",
+	"秒杀": "秒杀",
+	"砍价": "砍价",
+	"拼团": "拼团",
+	"已售": "已售",
+	"立即购买": "立即购买",
+	"加入购物车": "加入购物车",
+	"选规格": "选规格",
+	"跳过": "跳过",
+	"立即体验": "立即体验",
+	"首页": "首页",
+	"搜索": "搜索",
+	"购物车": "购物车",
+	"我的收藏": "我的收藏",
+	"个人中心": "个人中心",
+	"券": "券",
+	"正在加载中": "正在加载中",
+	"上拉加载更多": "上拉加载更多",
+	"代付金额": "代付金额",
+	"共": "共",
+	"件商品": "件商品",
+	"订单包裹": "订单包裹",
+	"申请退款中": "申请退款中",
+	"已退款": "已退款",
+	"已完成": "已完成",
+	"件退款中": "件退款中",
+	"不支持配送": "不支持配送",
+	"不支持自提": "不支持自提",
+	"已评价": "已评价",
+	"评价": "评价",
+	"申请退款": "申请退款",
+	"查看物流": "查看物流",
+	"确认收货": "确认收货",
+	"选择付款方式": "选择付款方式",
+	"支付": "支付",
+	"去付款": "去付款",
+	"请选择要支付的订单": "请选择要支付的订单",
+	"余额不足": "余额不足",
+	"支付中": "支付中",
+	"缺少支付参数": "缺少支付参数",
+	"取消支付": "取消支付",
+	"支付成功": "支付成功",
+	"支付失败": "支付失败",
+	"库存": "库存",
+	"限量": "限量",
+	"数量": "数量",
+	"我要参团": "我要参团",
+	"确定": "确定",
+	"热门推荐": "热门推荐",
+	"最高返佣": "最高返佣",
+	"推广享佣金": "推广享佣金",
+	"立即分享": "立即分享",
+	"发现新版本": "发现新版本",
+	"立即升级": "立即升级",
+	"下载进度": "下载进度",
+	"店小二": "店小二",
+	"暂无记录": "暂无记录",
+	"正在下载海报,请稍后再试": "正在下载海报,请稍后再试",
+	"海报二维码生成失败": "海报二维码生成失败",
+	"倒计时": "倒计时",
+	"天": "天",
+	"时": "时",
+	"分": "分",
+	"秒": "秒",
+	"砍价成功": "砍价成功",
+	"活动已结束": "活动已结束",
+	"已砍至": "已砍至",
+	"活动进行中": "活动进行中",
+	"取消活动": "取消活动",
+	"继续砍价": "继续砍价",
+	"暂无砍价记录": "暂无砍价记录",
+	"人正在参与": "人正在参与",
+	"最低": "最低",
+	"参与砍价": "参与砍价",
+	"砍价列表": "砍价列表",
+	"人查看": "人查看",
+	"人分享": "人分享",
+	"人参与": "人参与",
+	"邀请您帮忙砍价": "邀请您帮忙砍价",
+	"查看商品": "查看商品",
+	"当前": "当前",
+	"已砍": "已砍",
+	"还剩": "还剩",
+	"立即参与砍价": "立即参与砍价",
+	"商品暂无库存": "商品暂无库存",
+	"邀请好友帮砍价": "邀请好友帮砍价",
+	"已有": "已有",
+	"位好友成功砍价": "位好友成功砍价",
+	"帮好友砍一刀": "帮好友砍一刀",
+	"好友已砍价成功": "好友已砍价成功",
+	"我也要参与": "我也要参与",
+	"已成功帮助好友砍价": "已成功帮助好友砍价",
+	"恭喜您砍价成功,快去支付": "恭喜您砍价成功,快去支付",
+	"立即支付": "立即支付",
+	"抢更多商品": "抢更多商品",
+	"砍价帮": "砍价帮",
+	"砍掉": "砍掉",
+	"更多": "更多",
+	"关闭": "关闭",
+	"点击加载更多": "点击加载更多",
+	"商品详情": "商品详情",
+	"砍价规则": "砍价规则",
+	"您已砍掉": "您已砍掉",
+	"元,听说分享次数越多砍价成功的机会越大哦": "元,听说分享次数越多砍价成功的机会越大哦",
+	"成功帮砍": "成功帮砍",
+	"您也可以砍价低价拿哦,快去挑选心仪的商品吧": "您也可以砍价低价拿哦,快去挑选心仪的商品吧",
+	"发送给朋友": "发送给朋友",
+	"微信好友": "微信好友",
+	"微信朋友圈": "微信朋友圈",
+	"生成海报": "生成海报",
+	"砍价详情": "砍价详情",
+	"分享成功": "分享成功",
+	"分享失败": "分享失败",
+	"该商品每人限购": "该商品每人限购",
+	"您的好友": "您的好友",
+	"邀请您砍价": "邀请您砍价",
+	"人团": "人团",
+	"去拼团": "去拼团",
+	"拼团列表": "拼团列表",
+	"类型": "类型",
+	"累计销量": "累计销量",
+	"限购": "限购",
+	"种规格可选": "种规格可选",
+	"已拼": "已拼",
+	"件": "件",
+	"还差": "还差",
+	"人成团": "人成团",
+	"去拼单": "去拼单",
+	"查看更多": "查看更多",
+	"收起": "收起",
+	"拼团玩法": "拼团玩法",
+	"开团/参团": "开团/参团",
+	"邀请好友": "邀请好友",
+	"满员发货": "满员发货",
+	"用户评价": "用户评价",
+	"好评率": "好评率",
+	"产品介绍": "产品介绍",
+	"单独购买": "单独购买",
+	"立即开团": "立即开团",
+	"请选择": "请选择",
+	"商品": "商品",
+	"详情": "详情",
+	"缺少参数无法查看商品": "缺少参数无法查看商品",
+	"参数错误": "参数错误",
+	"已选择": "已选择",
+	"保存成功": "保存成功",
+	"保存失败": "保存失败",
+	"人拼": "人拼",
+	"剩余": "剩余",
+	"结束": "结束",
+	"恭喜您拼团成功": "恭喜您拼团成功",
+	"人,拼团失败": "人,拼团失败",
+	"拼团中,还差": "拼团中,还差",
+	"人拼团成功": "人拼团成功",
+	"邀请好友参团": "邀请好友参团",
+	"再次开团": "再次开团",
+	"取消开团": "取消开团",
+	"查看订单信息": "查看订单信息",
+	"大家都在拼": "大家都在拼",
+	"更多拼团": "更多拼团",
+	"邀请您参团": "邀请您参团",
+	"你不是该团的成员": "你不是该团的成员",
+	"已抢": "已抢",
+	"抢购中": "抢购中",
+	"未开始": "未开始",
+	"已结束": "已结束",
+	"暂无商品,去看点别的吧": "暂无商品,去看点别的吧",
+	"即将开始": "即将开始",
+	"距秒杀结束仅剩": "距秒杀结束仅剩",
+	"累计销售": "累计销售",
+	"收藏": "收藏",
+	"保存到手机": "保存到手机",
+	"长按图片可以保存到手机": "长按图片可以保存到手机",
+	"抢购详情页": "抢购详情页",
+	"二维码获取失败": "二维码获取失败",
+	"请选择属性": "请选择属性",
+	"提示:点击图片即可保存至手机相册": "提示:点击图片即可保存至手机相册",
+	"拼团海报": "拼团海报",
+	"砍价海报": "砍价海报",
+	"海报生成中": "海报生成中",
+	"海报图片获取失败": "海报图片获取失败",
+	"海报": "海报",
+	"已预定": "已预定",
+	"预售价": "预售价",
+	"立即预定": "立即预定",
+	"开售时间": "开售时间",
+	"预售活动": "预售活动",
+	"起": "起",
+	"划线价": "划线价",
+	"开通“超级会员”立省": "开通“超级会员”立省",
+	"元": "元",
+	"立即开通": "立即开通",
+	"预售活动时间": "预售活动时间",
+	"预售结束后": "预售结束后",
+	"天内发货": "天内发货",
+	"活动": "活动",
+	"参与秒杀": "参与秒杀",
+	"参与拼团": "参与拼团",
+	"复制口令": "复制口令",
+	"复制成功": "复制成功",
+	"推荐": "推荐",
+	"缺少经纬度信息无法查看地图": "缺少经纬度信息无法查看地图",
+	"产品库存不足,请选择其它属性": "产品库存不足,请选择其它属性",
+	"立即退款": "立即退款",
+	"一键改价": "一键改价",
+	"订单备注": "订单备注",
+	"商品总价": "商品总价",
+	"原始邮费": "原始邮费",
+	"实际支付": "实际支付",
+	"退款金额": "退款金额",
+	"请填写备注信息": "请填写备注信息",
+	"立即修改": "立即修改",
+	"确认退款": "确认退款",
+	"拒绝退款": "拒绝退款",
+	"取消": "取消",
+	"订单号": "订单号",
+	"发货方式": "发货方式",
+	"发货类型": "发货类型",
+	"快递公司": "快递公司",
+	"快递单号": "快递单号",
+	"顺丰请输入单号 :收件人或寄件人手机号后四位": "顺丰请输入单号 :收件人或寄件人手机号后四位",
+	"例如:SF000000000000:3941": "例如:SF000000000000:3941",
+	"电子面单": "电子面单",
+	"预览": "预览",
+	"寄件人姓名": "寄件人姓名",
+	"填写寄件人姓名": "填写寄件人姓名",
+	"寄件人电话": "寄件人电话",
+	"填写寄件人电话": "填写寄件人电话",
+	"寄件人地址": "寄件人地址",
+	"填写寄件人地址": "填写寄件人地址",
+	"送货人": "送货人",
+	"确认提交": "确认提交",
+	"发货": "发货",
+	"送货": "送货",
+	"无需物流": "无需物流",
+	"手动填写": "手动填写",
+	"电子面单打印": "电子面单打印",
+	"填写快递单号": "填写快递单号",
+	"请选择电子面单": "请选择电子面单",
+	"待付款": "待付款",
+	"待发货": "待发货",
+	"待收货": "待收货",
+	"待评价": "待评价",
+	"售后/退款": "退款",
+	"数据统计": "数据统计",
+	"今日成交额": "今日成交额",
+	"昨日成交额": "昨日成交额",
+	"本月成交额": "本月成交额",
+	"今日订单数": "今日订单数",
+	"昨日订单数": "昨日订单数",
+	"本月订单数": "本月订单数",
+	"详细数据": "详细数据",
+	"日期": "日期",
+	"订单数": "订单数",
+	"成交额": "成交额",
+	"立即核销": "立即核销",
+	"查看": "查看",
+	"确定要核销此订单吗": "确定要核销此订单吗",
+	"确定核销": "确定核销",
+	"请输入核销码": "请输入核销码",
+	"请输入正确的核销码": "请输入正确的核销码",
+	"查询中": "查询中",
+	"订单": "订单",
+	"订单未备注,点击添加备注信息": "订单未备注,点击添加备注信息",
+	"复制": "复制",
+	"件商品,应支付": "件商品,应支付",
+	"邮费": "邮费",
+	"订单编号": "订单编号",
+	"下单时间": "下单时间",
+	"支付状态": "支付状态",
+	"已支付": "已支付",
+	"未支付": "未支付",
+	"支付方式": "支付方式",
+	"买家留言": "买家留言",
+	"支付金额": "支付金额",
+	"优惠券抵扣": "优惠券抵扣",
+	"运费": "运费",
+	"实付款": "实付款",
+	"配送方式": "配送方式",
+	"快递": "快递",
+	"送货人电话": "送货人电话",
+	"确认付款": "确认付款",
+	"去发货": "去发货",
+	"改价成功": "改价成功",
+	"改价失败": "改价失败",
+	"请输入备注": "请输入备注",
+	"退款中": "退款中",
+	"部分退款中": "部分退款中",
+	"件商品,实付款": "件商品,实付款",
+	"同意退货": "同意退货",
+	"待用户发货": "待用户发货",
+	"请输入正确的金额": "请输入正确的金额",
+	"今天": "今天",
+	"昨天": "昨天",
+	"最近7天": "最近7天",
+	"本月": "本月",
+	"自定义": "自定义",
+	"营业额(元)": "营业额(元)",
+	"订单量(份)": "订单量(份)",
+	"增长率": "增长率",
+	"增长": "增长",
+	"单位": "单位",
+	"元.": "元",
+	"分.": "分",
+	"固定": "固定",
+	"指定范围": "指定范围",
+	"提交时间": "提交时间",
+	"原因": "原因",
+	"暂无申请记录,快去申请吧!": "暂无申请记录,快去申请吧!",
+	"没有更多啦": "没有更多啦",
+	"待审核": "待审核",
+	"审核通过": "审核通过",
+	"审核未通过": "审核未通过",
+	"编辑": "编辑",
+	"重新提交": "重新提交",
+	"会员优惠价": "会员优惠价",
+	"余额支付": "余额支付",
+	"可用余额": "可用余额",
+	"微信支付": "微信支付",
+	"确认": "确认",
+	"支付提醒": "支付提醒",
+	"线下支付已关闭,请点击确认按钮返回主页": "线下支付已关闭,请点击确认按钮返回主页",
+	"请输入支付金额": "请输入支付金额",
+	"正在确认": "正在确认",
+	"进入商城": "进入商城",
+	"代理商名称": "代理商名称",
+	"请输入代理商名称": "请输入代理商名称",
+	"用户姓名": "用户姓名",
+	"请输入姓名": "请输入姓名",
+	"联系电话": "联系电话",
+	"请输入手机号": "请输入手机号",
+	"验证码": "验证码",
+	"填写验证码": "填写验证码",
+	"邀请码": "邀请码",
+	"请输入代理商邀请码": "请输入代理商邀请码",
+	"请上传营业执照及行业相关资质证明图片": "请上传营业执照及行业相关资质证明图片",
+	"图片最多可上传10张,图片格式支持JPG、PNG、JPEG": "图片最多可上传10张,图片格式支持JPG、PNG、JPEG",
+	"上传图片": "上传图片",
+	"已阅读并同意": "已阅读并同意",
+	"代理商协议": "代理商协议",
+	"提交申请": "提交申请",
+	"代理商入驻协议": "代理商入驻协议",
+	"恭喜,您的资料提交成功!": "恭喜,您的资料提交成功!",
+	"返回首页": "返回首页",
+	"恭喜,您的资料通过审核!": "恭喜,您的资料通过审核!",
+	"您的申请未通过!": "您的申请未通过!",
+	"重新申请": "重新申请",
+	"获取验证码": "获取验证码",
+	"请输入正确的手机号码": "请输入正确的手机号码",
+	"重新获取": "重新获取",
+	"请上传营业执照": "请上传营业执照",
+	"请勾选并同意入驻协议": "请勾选并同意入驻协议",
+	"专题栏": "专题栏",
+	"暂无数据": "暂无数据",
+	"请输入卡号": "请输入卡号",
+	"请输入卡密": "请输入卡密",
+	"确认激活": "确认激活",
+	"SVIP会员尊享权": "SVIP会员尊享权",
+	"正在激活": "正在激活",
+	"已使用": "已使用",
+	"永久SVIP会员": "永久SVIP会员",
+	"SVIP会员": "SVIP会员",
+	"到期": "到期",
+	"您与": "您与",
+	"商城的第": "商城的第",
+	"天.": "天.",
+	"已累积为您节省": "已累积为您节省",
+	"开通即享会员权益": "开通即享会员权益",
+	"续费会员": "续费会员",
+	"开通会员": "开通会员",
+	"有效期至": "有效期至",
+	"试用": "试用",
+	"购买即视为同意": "购买即视为同意",
+	"会员用户协议": "会员用户协议",
+	"点击兑换卡密": "点击兑换卡密",
+	"会员优惠券": "会员优惠券",
+	"SVIP商品推荐": "SVIP商品推荐",
+	"商城价": "商城价",
+	"激活会员卡": "激活会员卡",
+	"支付宝支付": "支付宝支付",
+	"成功开启0元试用": "成功开启0元试用",
+	"确认绑定": "确认绑定",
+	"绑定成功": "绑定成功",
+	"商城客服已离线": "商城客服已离线",
+	"我要反馈": "我要反馈",
+	"请填写内容": "请填写内容",
+	"提交": "提交",
+	"精品推荐": "精品推荐",
+	"热门榜单": "热门榜单",
+	"首发新品": "首发新品",
+	"促销单品": "促销单品",
+	"预告": "预告",
+	"回放": "回放",
+	"进行中": "进行中",
+	"发送客服": "发送客服",
+	"客服连接中": "客服连接中",
+	"连接失败": "连接失败",
+	"提示": "提示",
+	"客服已下线,是否需要反馈?": "客服已下线,是否需要反馈?",
+	"和好友一起分享": "和好友一起分享",
+	"积分抵扣": "积分抵扣",
+	"已开票": "已开票",
+	"未开票": "未开票",
+	"发票信息": "发票信息",
+	"发票抬头": "发票抬头",
+	"发票抬头类型": "发票抬头类型",
+	"个人": "个人",
+	"企业": "企业",
+	"发票类型": "发票类型",
+	"电子普通发票": "电子普通发票",
+	"电子专用发票": "电子专用发票",
+	"企业税号": "企业税号",
+	"联系信息": "联系信息",
+	"真实姓名": "真实姓名",
+	"联系邮箱": "联系邮箱",
+	"抬头选择": "抬头选择",
+	"默认": "默认",
+	"普通": "普通",
+	"专用": "专用",
+	"您还没有添加发票信息哟": "您还没有添加发票信息哟",
+	"添加新的抬头": "添加新的抬头",
+	"不开发票": "不开发票",
+	"抽奖": "抽奖",
+	"全选": "全选",
+	"属性": "属性",
+	"请填写具体地址": "请填写具体地址",
+	"省": "省",
+	"市": "市",
+	"区": "区",
+	"添加成功": "添加成功",
+	"您已拒绝导入微信地址权限": "您已拒绝导入微信地址权限",
+	"是否进入权限管理,调整授权?": "是否进入权限管理,调整授权?",
+	"已取消": "已取消",
+	"添加失败": "添加失败",
+	"请填写收货人姓名": "请填写收货人姓名",
+	"请选择所在地区": "请选择所在地区",
+	"请填写详细地址": "请填写详细地址",
+	"星": "星",
+	"商品满足你的期待么?说说你的想法,分享给想买的他们吧": "商品满足你的期待么?说说你的想法,分享给想买的他们吧",
+	"立即评价": "立即评价",
+	"商品质量": "商品质量",
+	"服务态度": "服务态度",
+	"缺少参数": "缺少参数",
+	"请填写你对宝贝的心得": "请填写你对宝贝的心得",
+	"正在发布评论": "正在发布评论",
+	"感谢您的评价": "感谢您的评价",
+	"评价完成": "评价完成",
+	"恭喜您": "恭喜您",
+	"获得": "获得",
+	"机会": "机会",
+	"领取成功": "领取成功",
+	"评分": "评分",
+	"全部": "全部",
+	"好评": "好评",
+	"中评": "中评",
+	"差评": "差评",
+	"加载更多": "加载更多",
+	"千米距离": "千米距离",
+	"搜索商品名称": "搜索商品名称",
+	"价格": "价格",
+	"销量": "销量",
+	"新品": "新品",
+	"已全部加载": "已全部加载",
+	"缺少订单号": "缺少订单号",
+	"退货件数": "退货件数",
+	"退款类型": "退款类型",
+	"退款原因": "退款原因",
+	"备注说明": "备注说明",
+	"填写备注信息,100字以内": "填写备注信息,100字以内",
+	"仅退款": "仅退款",
+	"退货并退款": "退货并退款",
+	"申请成功": "申请成功",
+	"请先选择退货商品": "请先选择退货商品",
+	"搜索历史": "搜索历史",
+	"热门搜索": "热门搜索",
+	"请输入要搜索的商品": "请输入要搜索的商品",
+	"正在搜索中": "正在搜索中",
+	"中奖记录": "中奖记录",
+	"我的奖品": "我的奖品",
+	"活动规则": "活动规则",
+	"昵称": "昵称",
+	"序号": "序号",
+	"奖品名称": "奖品名称",
+	"获奖时间": "获奖时间",
+	"商家暂未上架活动哦": "商家暂未上架活动哦",
+	"获取抽奖信息": "获取抽奖信息",
+	"奖品类型": "奖品类型",
+	"立即兑换": "立即兑换",
+	"兑换时间": "兑换时间",
+	"暂无中奖记录": "暂无中奖记录",
+	"积分": "积分",
+	"余额": "余额",
+	"红包": "红包",
+	"设置收货地址": "设置收货地址",
+	"暂无门店信息": "暂无门店信息",
+	"剩余积分": "剩余积分",
+	"当前积分": "当前积分",
+	"开具发票": "开具发票",
+	"请填写": "请填写",
+	"配送运费": "配送运费",
+	"会员商品优惠": "会员商品优惠",
+	"会员运费优惠": "会员运费优惠",
+	"合计": "合计",
+	"使用微信快捷支付": "使用微信快捷支付",
+	"使用支付宝支付": "使用支付宝支付",
+	"线下支付": "线下支付",
+	"使用线下付款": "使用线下付款",
+	"好友代付": "好友代付",
+	"找微信好友支付": "找微信好友支付",
+	"立即使用": "立即使用",
+	"请选择要购买的商品": "请选择要购买的商品",
+	"发票": "发票",
+	"不使用": "不使用",
+	"订单创建成功": "订单创建成功",
+	"请选择支付方式": "请选择支付方式",
+	"请选择收货地址": "请选择收货地址",
+	"请填写联系人或联系人电话": "请填写联系人或联系人电话",
+	"暂无门店,请选择其他方式": "暂无门店,请选择其他方式",
+	"请输入": "请输入",
+	"请输入正确的": "请输入正确的",
+	"请上传": "请上传",
+	"订单支付中": "订单支付中",
+	"请按以上退货信息将商品退回": "请按以上退货信息将商品退回",
+	"请联系管理员获取退货地址": "请联系管理员获取退货地址",
+	"待核销": "待核销",
+	"核销信息": "核销信息",
+	"营业时间": "营业时间",
+	"每日": "每日",
+	"使用说明": "使用说明",
+	"可将二维码出示给店员扫描或提供数字核销码": "可将二维码出示给店员扫描或提供数字核销码",
+	"可将二维码出示给配送员进行核销": "可将二维码出示给配送员进行核销",
+	"查看位置": "查看位置",
+	"拒绝原因": "拒绝原因",
+	"联系客服": "联系客服",
+	"商家备注": "商家备注",
+	"收货人": "收货人",
+	"收货地址": "收货地址",
+	"配送人姓名": "配送人姓名",
+	"拨打": "拨打",
+	"虚拟发货": "虚拟发货",
+	"已发货,请注意查收": "已发货,请注意查收",
+	"虚拟备注": "虚拟备注",
+	"总代付": "总代付",
+	"申请开票": "申请开票",
+	"查看发票": "查看发票",
+	"取消订单": "取消订单",
+	"立即付款": "立即付款",
+	"批量退款": "批量退款",
+	"查看拼团": "查看拼团",
+	"再次购买": "再次购买",
+	"取消申请": "取消申请",
+	"填写退货信息": "填写退货信息",
+	"查看退货物流": "查看退货物流",
+	"您确认放弃此次申请吗": "您确认放弃此次申请吗",
+	"操作成功": "操作成功",
+	"订单信息不存在": "订单信息不存在",
+	"为保障权益,请收到货确认无误后,再确认收货": "为保障权益,请收到货确认无误后,再确认收货",
+	"删除订单": "删除订单",
+	"确定删除该订单": "确定删除该订单",
+	"删除成功": "删除成功",
+	"确认取消该订单": "确认取消该订单",
+	"订单信息": "订单信息",
+	"消费订单": "消费订单",
+	"总消费": "总消费",
+	"预售": "预售",
+	"线下付款,未支付": "线下付款,未支付",
+	"未核销": "未核销",
+	"件商品,总金额": "件商品,总金额",
+	"查看详情": "查看详情",
+	"暂无订单": "暂无订单",
+	"缺少订单号无法取消订单": "缺少订单号无法取消订单",
+	"订单支付成功": "订单支付成功",
+	"订单支付失败": "订单支付失败",
+	"暂未支付": "暂未支付",
+	"失败原因": "失败原因",
+	"重新购买": "重新购买",
+	"重新支付": "重新支付",
+	"赠送优惠券": "赠送优惠券",
+	"有效期": "有效期",
+	"缺少参数无法查看订单支付状态": "缺少参数无法查看订单支付状态",
+	"最多可上传3张": "最多可上传3张",
+	"请选择产品": "请选择产品",
+	"该产品没有更多库存了": "该产品没有更多库存了",
+	"优品推荐": "优品推荐",
+	"暂无产品": "暂无产品",
+	"重新选择": "重新选择",
+	"请选择数量": "请选择数量",
+	"砍价专区·BARGAINING": "砍价专区·BARGAINING",
+	"立即砍价": "立即砍价",
+	"拼团活动": "拼团活动",
+	"人拼团成功.": "人拼团成功.",
+	"人参团": "人参团",
+	"拼团价": "拼团价",
+	"已过期": "已过期",
+	"关注": "关注",
+	"推荐好货": "推荐好货",
+	"暂无商品": "暂无商品",
+	"限时秒杀": "限时秒杀",
+	"抢": "抢",
+	"广告位": "广告位",
+	"精彩内容": "精彩内容",
+	"砍价模块,暂无数据": "砍价模块,暂无数据",
+	"砍价活动": "砍价活动",
+	"呼朋唤友来砍价": "呼朋唤友来砍价",
+	"拼团模块,暂无数据": "拼团模块,暂无数据",
+	"享超值开团价": "享超值开团价",
+	"优惠券,暂无数据": "优惠券,暂无数据",
+	"领取今日好券": "领取今日好券",
+	"可用": "可用",
+	"领取": "领取",
+	"客服": "客服",
+	"商品列表,暂无数据": "商品列表,暂无数据",
+	"搜索商品": "搜索商品",
+	"暂无图片,请上传图片": "暂无图片,请上传图片",
+	"首发新品,暂无数据": "首发新品,暂无数据",
+	"多个优质商品最新上架": "多个优质商品最新上架",
+	"暂无新闻,请上传新闻": "暂无新闻,请上传新闻",
+	"热度 TOP": "热度 TOP",
+	"排行榜、暂无数据": "排行榜、暂无数据",
+	"促销单品,暂无数据": "促销单品,暂无数据",
+	"库存商品优惠促销活动": "库存商品优惠促销活动",
+	"精品推荐,暂无数据": "精品推荐,暂无数据",
+	"上百种商品分类任您选择": "上百种商品分类任您选择",
+	"秒杀模块,暂无数据": "秒杀模块,暂无数据",
+	"场": "场",
+	"暂无数据,请设置": "暂无数据,请设置",
+	"暂无数据,请先添加分类": "暂无数据,请先添加分类",
+	"暂无标题": "暂无标题",
+	"诚意推荐品质商品": "诚意推荐品质商品",
+	"点击“立即关注”即可关注公众号": "点击“立即关注”即可关注公众号",
+	"立即关注": "立即关注",
+	"添加到我的小程序, 微信首页下拉即可访问商城。": "添加到我的小程序, 微信首页下拉即可访问商城。",
+	"点击": "点击",
+	"服务协议与隐私政策": "服务协议与隐私政策",
+	"请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。": "请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。",
+	"你可以阅读": "你可以阅读",
+	"《服务协议与隐私政策》": "《服务协议与隐私政策》",
+	"了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。": "了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。",
+	"我同意": "我同意",
+	"残忍拒绝": "残忍拒绝",
+	"下拉加载更多": "下拉加载更多",
+	"网络连接断开": "网络连接断开",
+	"请检查情况:": "请检查情况:",
+	"在设置中是否已开启网络权限": "在设置中是否已开启网络权限",
+	"当前是否处于弱网环境": "当前是否处于弱网环境",
+	"版本是否过低,升级试试吧": "版本是否过低,升级试试吧",
+	"重新连接": "重新连接",
+	"加载中": "加载中",
+	"没有更多内容啦~": "没有更多内容啦~",
+	"100%正品保证": "100%正品保证",
+	"所有商品精挑细选": "所有商品精挑细选",
+	"售后无忧": "售后无忧",
+	"管理": "管理",
+	"购物数量": "购物数量",
+	"请重新选择商品规格": "请重新选择商品规格",
+	"重选": "重选",
+	"失效商品": "失效商品",
+	"失效": "失效",
+	"该商品已失效": "该商品已失效",
+	"立即下单": "立即下单",
+	"产品库存不足,请选择其它": "产品库存不足,请选择其它",
+	"添加购物车成功": "添加购物车成功",
+	"清除成功": "清除成功",
+	"暂无兑换记录~": "暂无兑换记录~",
+	"大家都在换": "大家都在换",
+	"人兑换": "人兑换",
+	"轻松赚积分": "轻松赚积分",
+	"购买商品": "购买商品",
+	"购买商品可获得积分奖励": "购买商品可获得积分奖励",
+	"去完成": "去完成",
+	"每日签到活动": "每日签到活动",
+	"每日签到可获得积分奖励": "每日签到可获得积分奖励",
+	"九宫格抽奖活动": "九宫格抽奖活动",
+	"幸运抽奖可获得积分奖励": "幸运抽奖可获得积分奖励",
+	"我的积分": "我的积分",
+	"每日签到": "每日签到",
+	"积分抽奖": "积分抽奖",
+	"兑换记录": "兑换记录",
+	"已兑换": "已兑换",
+	"无法兑换": "无法兑换",
+	"[默认]": "[默认]",
+	"可用积分": "可用积分",
+	"快递费用": "快递费用",
+	"免运费": "免运费",
+	"备注信息": "备注信息",
+	"请添加备注(150字以内)": "请添加备注(150字以内)",
+	"使用线上支付宝支付": "使用线上支付宝支付",
+	"可用余额:": "可用余额:",
+	"选择线下付款方式": "选择线下付款方式",
+	"正在加载…": "正在加载…",
+	"可用积分不足!": "可用积分不足!",
+	"订单状态": "订单状态",
+	"支付积分": "支付积分",
+	"备注": "备注",
+	"配送核销码": "配送核销码",
+	"当前可用余额:": "当前可用余额:",
+	"正在加载": "正在加载",
+	"缺少经纬度信息无法查看地图!": "缺少经纬度信息无法查看地图!",
+	"商品兑换成功": "商品兑换成功",
+	"兑换方式": "兑换方式",
+	"积分兑换": "积分兑换",
+	"兑换积分": "兑换积分",
+	"取消兑换": "取消兑换",
+	"缺少参数无法查看订单兑换状态": "缺少参数无法查看订单兑换状态",
+	"用户离开了": "用户离开了",
+	"兑换成功": "兑换成功",
+	"物流公司": "物流公司",
+	"复制单号": "复制单号",
+	"设为默认": "设为默认",
+	"添加新地址": "添加新地址",
+	"导入微信地址": "导入微信地址",
+	"取消选择": "取消选择",
+	"您设置的默认地址不存在!": "您设置的默认地址不存在!",
+	"设置成功": "设置成功",
+	"您删除的地址不存在!": "您删除的地址不存在!",
+	"获取头像": "获取头像",
+	"请点击授权": "请点击授权",
+	"绑定手机号": "绑定手机号",
+	"永久": "永久",
+	"会员到期": "会员到期",
+	"未开通会员": "未开通会员",
+	"查看会员权益": "查看会员权益",
+	"立即续费": "立即续费",
+	"立即激活": "立即激活",
+	"会员可享多项权益": "会员可享多项权益",
+	"订单中心": "订单中心",
+	"我的服务": "我的服务",
+	"隐私协议": "隐私协议",
+	"商家管理": "商家管理",
+	"更新用户信息成功": "更新用户信息成功",
+	"客服接待": "客服接待",
+	"点击复制网址去浏览器中打开": "点击复制网址去浏览器中打开",
+	"点击复制": "点击复制",
+	"完成支付": "完成支付",
+	"点击右上角": "点击右上角",
+	"选择 在浏览器 打开,去支付宝支付": "选择 在浏览器 打开,去支付宝支付",
+	"支付订单不存在,页面将在2秒后自动关闭!": "支付订单不存在,页面将在2秒后自动关闭!",
+	"正在支付中": "正在支付中",
+	"支付订单不存在,页面将在2秒后自动关闭": "支付订单不存在,页面将在2秒后自动关闭",
+	"复制失败": "复制失败",
+	"您目前的排名": "您目前的排名",
+	"您目前暂无排名": "您目前暂无排名",
+	"暂无排名~": "暂无排名~",
+	"我也是有底线的": "我也是有底线的",
+	"输入手机号": "输入手机号",
+	"输入验证码": "输入验证码",
+	"立即登录": "立即登录",
+	"请填写手机号码": "请填写手机号码",
+	"请填写验证码": "请填写验证码",
+	"请输入正确的验证码": "请输入正确的验证码",
+	"正在登录中": "正在登录中",
+	"登录成功": "登录成功",
+	"获取授权": "获取授权",
+	"获取微信的手机号授权": "获取微信的手机号授权",
+	"获取微信手机号": "获取微信手机号",
+	"输入手机号码": "输入手机号码",
+	"填写登录密码": "填写登录密码",
+	"登录": "登录",
+	"快速登录": "快速登录",
+	"账号登录": "账号登录",
+	"其他方式登录": "其他方式登录",
+	"登录中": "登录中",
+	"获取用户信息失败": "获取用户信息失败",
+	"请绑定手机号后,继续操作": "请绑定手机号后,继续操作",
+	"错误信息": "错误信息",
+	"用户点击确定": "用户点击确定",
+	"用户点击取消": "用户点击取消",
+	"登录失败": "登录失败",
+	"请勿重复点击": "请勿重复点击",
+	"请填写密码": "请填写密码",
+	"您输入的密码过于简单": "您输入的密码过于简单",
+	"请填写账号": "请填写账号",
+	"请输入正确的账号": "请输入正确的账号",
+	"[图片]": "[图片]",
+	"[语音]": "[语音]",
+	"[商品]": "[商品]",
+	"[订单]": "[订单]",
+	"亲、暂无消息记录哟!": "亲、暂无消息记录哟!",
+	"站内消息": "站内消息",
+	"客服消息": "客服消息",
+	"通知于": "通知于",
+	"获取详情中": "获取详情中",
+	"代付订单创建成功,发给好友帮你付款吧~": "代付订单创建成功,发给好友帮你付款吧~",
+	"帮我付一下这件商品了,谢谢~": "帮我付一下这件商品了,谢谢~",
+	"已经有人替我代付,谢谢啦~": "已经有人替我代付,谢谢啦~",
+	"谢谢你帮我支付,么么哒~": "谢谢你帮我支付,么么哒~",
+	"我已为你代付成功,商家正在努力发货中~": "我已为你代付成功,商家正在努力发货中~",
+	"好友代付成功,商家正在努力发货中~": "好友代付成功,商家正在努力发货中~",
+	"发送给微信好友": "发送给微信好友",
+	"查看订单详情": "查看订单详情",
+	"订单已支付": "订单已支付",
+	"如果订单申请退款,已支付金额将原路退还给您": "如果订单申请退款,已支付金额将原路退还给您",
+	"代付成功": "代付成功",
+	"谢谢你为我付款,还可以再去看看其他商品哟~": "谢谢你为我付款,还可以再去看看其他商品哟~",
+	"该订单暂未支付": "该订单暂未支付",
+	"人": "人",
+	"推广人数": "推广人数",
+	"一级": "一级",
+	"二级": "二级",
+	"点击搜索会员名称": "点击搜索会员名称",
+	"团队排序": "团队排序",
+	"金额排序": "金额排序",
+	"订单排序": "订单排序",
+	"单": "单",
+	"加入时间": "加入时间",
+	"累积推广订单": "累积推广订单",
+	"本月累计推广订单": "本月累计推广订单",
+	"返佣": "返佣",
+	"暂未返佣": "暂未返佣",
+	"返佣时间": "返佣时间",
+	"单号": "单号",
+	"暂无推广订单~": "暂无推广订单~",
+	"推广订单列表": "推广订单列表",
+	"找回密码": "找回密码",
+	"填写您的新密码": "填写您的新密码",
+	"加载失败": "加载失败",
+	"点击授权登录您的客服工作台": "点击授权登录您的客服工作台",
+	"授权登录": "授权登录",
+	"没有登录的code,请重新扫码": "没有登录的code,请重新扫码",
+	"员工人数": "员工人数",
+	"邀请": "邀请",
+	"分佣比例": "分佣比例",
+	"修改分佣比例": "修改分佣比例",
+	"请输入百分比": "请输入百分比",
+	"删除员工": "删除员工",
+	"确定删除该员工?": "确定删除该员工?",
+	"请输入比例": "请输入比例",
+	"分类": "分类",
+	"我的": "我的",
+	"姓名": "姓名",
+	"请输入联系电话": "请输入联系电话",
+	"所在地区": "所在地区",
+	"详细地址": "详细地址",
+	"设置为默认地址": "设置为默认地址",
+	"立即保存": "立即保存",
+	"浙江省": "浙江省",
+	"杭州市": "杭州市",
+	"滨江区": "滨江区",
+	"广东省": "广东省",
+	"广州市": "广州市",
+	"番禺区": "番禺区",
+	"修改地址": "修改地址",
+	"添加地址": "添加地址",
+	"已取消!": "已取消!",
+	"请填写联系电话": "请填写联系电话",
+	"保存中": "保存中",
+	"修改成功": "修改成功",
+	"消费": "消费",
+	"充值": "充值",
+	"暂无账单的记录哦~": "暂无账单的记录哦~",
+	"点击【立即注销】即代表您已经同意《用户注销协议》": "点击【立即注销】即代表您已经同意《用户注销协议》",
+	"立即注销": "立即注销",
+	"是否确认注销": "是否确认注销",
+	"注销后无法恢复,请谨慎操作": "注销后无法恢复,请谨慎操作",
+	"注销": "注销",
+	"持卡人": "持卡人",
+	"请输入持卡人姓名": "请输入持卡人姓名",
+	"卡号": "卡号",
+	"请填写卡号": "请填写卡号",
+	"银行": "银行",
+	"提现": "提现",
+	"最低提现金额": "最低提现金额",
+	"当前可提现金额": "当前可提现金额",
+	"冻结佣金": "冻结佣金",
+	"说明: 每笔佣金的冻结期为": "说明: 每笔佣金的冻结期为",
+	"天,到期后可提现": "天,到期后可提现",
+	"账号": "账号",
+	"请填写您的微信账号": "请填写您的微信账号",
+	"收款码": "收款码",
+	"请填写您的支付宝账号": "请填写您的支付宝账号",
+	"请选择银行": "请选择银行",
+	"银行卡": "银行卡",
+	"微信": "微信",
+	"支付宝": "支付宝",
+	"请填写持卡人姓名": "请填写持卡人姓名",
+	"请填写微信号": "请填写微信号",
+	"请填写提现金额": "请填写提现金额",
+	"提现金额不能低于": "提现金额不能低于",
+	"未使用": "未使用",
+	"已使用/过期": "已使用/过期",
+	"通用劵": "通用劵",
+	"一级分佣上浮": "一级分佣上浮",
+	"二级分佣上浮": "二级分佣上浮",
+	"快速升级技巧": "快速升级技巧",
+	"未完成": "未完成",
+	"已领完": "已领完",
+	"当前共": "当前共",
+	"取关": "取关",
+	"请选择商品": "请选择商品",
+	"头像": "头像",
+	"手机号码": "手机号码",
+	"点击绑定手机号": "点击绑定手机号",
+	"ID号": "ID号",
+	"权限设置": "权限设置",
+	"点击管理": "点击管理",
+	"密码": "密码",
+	"点击修改密码": "点击修改密码",
+	"更换手机号码": "更换手机号码",
+	"点击更换手机号码": "点击更换手机号码",
+	"缓存大小": "缓存大小",
+	"当前版本": "当前版本",
+	"地址管理": "地址管理",
+	"发票管理": "发票管理",
+	"账号注销": "账号注销",
+	"注销后无法恢复": "注销后无法恢复",
+	"累计积分": "累计积分",
+	"累计消费": "累计消费",
+	"冻结积分": "冻结积分",
+	"积分规则": "积分规则",
+	"提示:积分数值的高低会直接影响您的会员等级": "提示:积分数值的高低会直接影响您的会员等级",
+	"提示:你有": "提示:你有",
+	"积分在": "积分在",
+	"过期,请尽快使用": "过期,请尽快使用",
+	"暂无积分记录哦~": "暂无积分记录哦~",
+	"赚积分": "赚积分",
+	"分值明细": "分值明细",
+	"分值提升": "分值提升",
+	"抬头类型": "抬头类型",
+	"增值税电子专用发票": "增值税电子专用发票",
+	"增值税电子普通发票": "增值税电子普通发票",
+	"需要开具发票的姓名": "需要开具发票的姓名",
+	"需要开具发票的企业名称": "需要开具发票的企业名称",
+	"税号": "税号",
+	"纳税人识别号": "纳税人识别号",
+	"手机号": "手机号",
+	"您的手机号": "您的手机号",
+	"邮箱": "邮箱",
+	"您的联系邮箱": "您的联系邮箱",
+	"开户银行": "开户银行",
+	"您的开户银行": "您的开户银行",
+	"银行账号": "银行账号",
+	"您的银行账号": "您的银行账号",
+	"企业地址": "企业地址",
+	"您所在的企业地址": "您所在的企业地址",
+	"企业电话": "企业电话",
+	"您的企业电话": "您的企业电话",
+	"设置为默认抬头": "设置为默认抬头",
+	"保存": "保存",
+	"发票类型选择": "发票类型选择",
+	"纸质发票开出后将以邮寄形式交付": "纸质发票开出后将以邮寄形式交付",
+	"请输入需要开具发票的姓名": "请输入需要开具发票的姓名",
+	"请输入您的手机号": "请输入您的手机号",
+	"请正确输入您的手机号": "请正确输入您的手机号",
+	"请输入您的联系邮箱": "请输入您的联系邮箱",
+	"请正确输入您的联系邮箱": "请正确输入您的联系邮箱",
+	"请输入需要开具发票的企业名称": "请输入需要开具发票的企业名称",
+	"请输入纳税人识别号": "请输入纳税人识别号",
+	"请正确输入纳税人识别号": "请正确输入纳税人识别号",
+	"请输入您的开户银行": "请输入您的开户银行",
+	"请输入您的银行账号": "请输入您的银行账号",
+	"请正确输入您的银行账号": "请正确输入您的银行账号",
+	"请输入您所在的企业地址": "请输入您所在的企业地址",
+	"请输入您的企业电话": "请输入您的企业电话",
+	"发票记录": "发票记录",
+	"抬头管理": "抬头管理",
+	"申请时间": "申请时间",
+	"没有发票信息哟~": "没有发票信息哟~",
+	"个人普通发票": "个人普通发票",
+	"企业普通发票": "企业普通发票",
+	"企业专用发票": "企业专用发票",
+	"添加新发票": "添加新发票",
+	"删除该发票?": "删除该发票?",
+	"发票编号": "发票编号",
+	"发票备注": "发票备注",
+	"快递号": "快递号",
+	"总资产(元)": "总资产(元)",
+	"累计充值(元)": "累计充值(元)",
+	"累计消费(元)": "累计消费(元)",
+	"账单记录": "账单记录",
+	"消费记录": "消费记录",
+	"充值记录": "充值记录",
+	"积分中心": "积分中心",
+	"签到领积分": "签到领积分",
+	"赚积分抵现金": "赚积分抵现金",
+	"领取优惠券": "领取优惠券",
+	"满减享优惠": "满减享优惠",
+	"最新拼团活动": "最新拼团活动",
+	"最新的优惠商品上架拼团": "最新的优惠商品上架拼团",
+	"立即参与": "立即参与",
+	"当前限时秒杀": "当前限时秒杀",
+	"最新商品秒杀进行中": "最新商品秒杀进行中",
+	"我的余额": "我的余额",
+	"赠送": "赠送",
+	"其他": "其他",
+	"注意事项": "注意事项",
+	"冻结佣金为": "冻结佣金为",
+	"立即转入": "立即转入",
+	"立即充值": "立即充值",
+	"请输入金额": "请输入金额",
+	"转入余额": "转入余额",
+	"转入余额后无法再次转出,确认是否转入余额": "转入余额后无法再次转出,确认是否转入余额",
+	"转入成功": "转入成功",
+	"正在支付": "正在支付",
+	"充值金额必须为数字": "充值金额必须为数字",
+	"充值金额不能为0": "充值金额不能为0",
+	"填写手机号码": "填写手机号码",
+	"是否绑定账号": "是否绑定账号",
+	"绑定": "绑定",
+	"您已取消绑定!": "您已取消绑定!",
+	"当前手机号": "当前手机号",
+	"设置新密码": "设置新密码",
+	"确认新密码": "确认新密码",
+	"手机号码不存在,无法发送验证码!": "手机号码不存在,无法发送验证码!",
+	"请输入新密码": "请输入新密码",
+	"两次输入的密码不一致!": "两次输入的密码不一致!",
+	"请输入验证码": "请输入验证码",
+	"暂无退款订单~": "暂无退款订单~",
+	"缺少订单号无法查看订单详情": "缺少订单号无法查看订单详情",
+	"明细": "明细",
+	"第七天": "第七天",
+	"第7天": "第7天",
+	"奖励": "奖励",
+	"已签到": "已签到",
+	"立即签到": "立即签到",
+	"已累计签到": "已累计签到",
+	"据说连续签到第": "据说连续签到第",
+	"天可获得超额积分,一定要坚持签到哦~~~": "天可获得超额积分,一定要坚持签到哦~~~",
+	"签到成功": "签到成功",
+	"好的": "OK",
+	"您今日已签到!": "您今日已签到!",
+	"暂无签到记录~": "暂无签到记录~",
+	"保存海报": "保存海报",
+	"长按保存图片": "长按保存图片",
+	"分销海报": "分销海报",
+	"小程序二维码需要发布正式版后才能获取到": "小程序二维码需要发布正式版后才能获取到",
+	"获取中": "获取中",
+	"暂无数据~": "暂无数据~",
+	"提现记录": "提现记录",
+	"提现总额": "提现总额",
+	"佣金记录": "佣金记录",
+	"佣金明细": "佣金明细",
+	"分销等级": "分销等级",
+	"昨日收益": "昨日收益",
+	"累积已提": "累积已提",
+	"代理商申请": "代理商申请",
+	"立即提现": "立即提现",
+	"推广名片": "推广名片",
+	"推广人统计": "推广人统计",
+	"推广人订单": "推广人订单",
+	"推广订单": "推广订单",
+	"事业部": "事业部",
+	"代理商": "代理商",
+	"推广人排行": "推广人排行",
+	"佣金排行": "佣金排行",
+	"员工列表": "员工列表",
+	"您目前暂无推广权限": "您目前暂无推广权限",
+	"商城购物可享": "商城购物可享",
+	"折": "折",
+	"当前等级": "当前等级",
+	"未达成": "未达成",
+	"今日成长值": "今日成长值",
+	"点": "点",
+	"我的成长值记录": "我的成长值记录",
+	"暂未解锁该等级": "暂未解锁该等级",
+	"点,需达到": "点,需达到",
+	"已解锁更高等级": "已解锁更高等级",
+	"我的成长特权": "我的成长特权",
+	"购物折扣": "购物折扣",
+	"专属徽章": "专属徽章",
+	"经验累积": "经验累积",
+	"尊享客服": "尊享客服",
+	"签到": "签到",
+	"可获得": "可获得",
+	"点经验": "点经验",
+	"每日签到可获得经验值,已签到": "每日签到可获得经验值,已签到",
+	"去签到": "去签到",
+	"点经验/元": "点经验/元",
+	"购买商品可获得对应的经验值": "购买商品可获得对应的经验值",
+	"去购买": "去购买",
+	"点经验/人": "点经验/人",
+	"邀请好友注册商城可获得经验值": "邀请好友注册商城可获得经验值",
+	"去邀请": "去邀请",
+	"积分数": "积分数",
+	"消费金额": "消费金额",
+	"暂无经验记录": "暂无经验记录",
+	"账户登录": "账户登录",
+	"微信登录": "微信登录",
+	"手机号登录": "手机号登录",
+	"账户充值": "账户充值",
+	"佣金转入": "佣金转入",
+	"周榜": "周榜",
+	"月榜": "周榜",
+	"周排行": "周排行",
+	"月排行": "月排行",
+	"语言切换": "语言切换",
+	"点击前往": "点击前往",
+	"查看全部": "查看全部",
+	"查看订单": "查看订单",
+	"无法获取图片信息": "无法获取图片信息",
+	"长按或扫描查看": "长按或扫描查看",
+	"点解锁": "点解锁",
+	"确认修改": "确认修改",
+	"保存修改": "保存修改",
+	"退出登录": "退出登录",
+	"付费会员": "付费会员",
+	"地址信息": "地址信息",
+	"我的推广": "我的推广",
+	"砍价记录": "砍价记录",
+	"我的等级": "我的等级",
+	"兑换": "兑换",
+	"申请中": "申请中",
+	"统计管理": "统计管理",
+	"退款": "退款",
+	"未发货": "未发货",
+	"当前为最新版本": "当前为最新版本",
+	"清除缓存": "清除缓存",
+	"确定清楚本地缓存数据吗": "确定清楚本地缓存数据吗",
+	"缓存清理完成": "缓存清理完成",
+	"切换的账号不存在": "切换的账号不存在",
+	"正在切换中": "正在切换中",
+	"确认退出登录": "确认退出登录",
+	"我知道了": "我知道了",
+	"系统错误": "系统错误",
+	"请求失败": "请求失败",
+	"邀请您加入": "邀请您加入",
+	"图片上传中": "图片上传中",
+	"上传图片失败": "上传图片失败",
+	"访问位置被拒绝": "访问位置被拒绝",
+	"系统定位已关闭": "系统定位已关闭",
+	"需要定位权限": "需要定位权限",
+	"订单核销": "订单核销",
+	"当前可转入佣金为":"当前可转入佣金为",
+	"浏览记录":"浏览记录",
+	"签到奖励":"签到奖励",
+	"请输入内容":"请输入内容",
+	"单次限购":"单次限购",
+	"永久限购":"永久限购",
+	"《用户协议》":"《用户协议》",
+	"《隐私协议》":"《隐私协议》",
+	"与":"与",
+	"请先阅读并同意协议":"请先阅读并同意协议",
+	"绑定下级通知":"绑定下级通知",
+	"购买成功通知":"购买成功通知",
+	"确认收货通知":"确认收货通知",
+	"改价通知":"改价通知",
+	"退款成功通知":"退款成功通知",
+	"充值成功通知":"充值成功通知",
+	"积分到账通知":"积分到账通知",
+	"佣金到账通知":"佣金到账通知",
+	"砍价成功通知":"砍价成功通知",
+	"拼团成功通知":"拼团成功通知",
+	"拼团失败通知":"拼团失败通知",
+	"开团成功通知":"开团成功通知",
+	"提现成功通知":"提现成功通知",
+	"提现失败通知":"提现失败通知",
+	"充值退款通知":"充值退款通知",
+	"退款申请拒绝通知":"退款申请拒绝通知",
+	"您有新的退款待处理":"您有新的退款待处理",
+	"您有新的订单待处理":"您有新的订单待处理",
+	"发货通知":"发货通知",
+	"取消拼团通知":"取消拼团通知",
+	"参团成功通知":"参团成功通知",
+	"你有个新的提现申请待处理":"你有个新的提现申请待处理",
+	"你有个新的用户收货待处理":"你有个新的用户收货待处理",
+	"提醒付款通知":"提醒付款通知",
+	"短信验证码":"短信验证码",
+	"到店自提":"到店自提",
+	"快递配送":"快递配送"
+}

+ 1181 - 0
lang/zh_ft.json

@@ -0,0 +1,1181 @@
+{
+	"选择地址": "選擇地址",
+	"选择其它地址": "選擇其它地址",
+	"已选商品": "已選商品",
+	"清空": "清空",
+	"¥": "¥",
+	"已售罄": "已售罄",
+	"已下架": "已下架",
+	"删除": "刪除",
+	"商品券": "商品券",
+	"品类券": "品類券",
+	"通用券": "通用券",
+	"优惠券": "優惠券",
+	"满": "滿",
+	"元可用": "元可用",
+	"无门槛券": "無門檻券",
+	"领取后": "領取後",
+	"天内可用": "天內可用",
+	"已领取": "已領取",
+	"立即领取": "立即領取",
+	"购物满": "購物滿",
+	"减": "減",
+	"不限时": "不限時",
+	"秒杀": "秒殺",
+	"砍价": "砍價",
+	"拼团": "拼團",
+	"已售": "已售",
+	"立即购买": "立即購買",
+	"加入购物车": "加入購物車",
+	"选规格": "選規格",
+	"跳过": "跳過",
+	"立即体验": "立即體驗",
+	"首页": "首頁",
+	"搜索": "搜索",
+	"购物车": "購物車",
+	"我的收藏": "我的收藏",
+	"个人中心": "個人中心",
+	"券": "券",
+	"正在加载中": "正在加載中",
+	"上拉加载更多": "上拉加載更多",
+	"代付金额": "代付金額",
+	"共": "共",
+	"件商品": "件商品",
+	"订单包裹": "訂單包裹",
+	"申请退款中": "申請退款中",
+	"已退款": "已退款",
+	"已完成": "已完成",
+	"件退款中": "件退款中",
+	"不支持配送": "不支持配送",
+	"不支持自提": "不支持自提",
+	"已评价": "已評價",
+	"评价": "評價",
+	"申请退款": "申請退款",
+	"查看物流": "查看物流",
+	"确认收货": "確認收貨",
+	"选择付款方式": "選擇付款方式",
+	"支付": "支付",
+	"去付款": "去付款",
+	"请选择要支付的订单": "請選擇要支付的訂單",
+	"余额不足": "餘額不足",
+	"支付中": "支付中",
+	"缺少支付参数": "缺少支付參數",
+	"取消支付": "取消支付",
+	"支付成功": "支付成功",
+	"支付失败": "支付失敗",
+	"库存": "庫存",
+	"限量": "限量",
+	"数量": "數量",
+	"我要参团": "我要參團",
+	"确定": "確定",
+	"热门推荐": "熱門推薦",
+	"最高返佣": "最高返佣",
+	"推广享佣金": "推廣享佣金",
+	"立即分享": "立即分享",
+	"发现新版本": "發現新版本",
+	"立即升级": "立即升級",
+	"下载进度": "下載進度",
+	"店小二": "店小二",
+	"暂无记录": "暫無記錄",
+	"正在下载海报,请稍后再试": "正在下載海報,請稍後再試",
+	"海报二维码生成失败": "海報二維碼生成失敗",
+	"倒计时": "倒計時",
+	"天": "天",
+	"时": "時",
+	"分": "分",
+	"秒": "秒",
+	"砍价成功": "砍價成功",
+	"活动已结束": "活動已結束",
+	"已砍至": "已砍至",
+	"活动进行中": "活動進行中",
+	"取消活动": "取消活動",
+	"继续砍价": "繼續砍價",
+	"暂无砍价记录": "暫無砍價記錄",
+	"人正在参与": "人正在參與",
+	"最低": "最低",
+	"参与砍价": "參與砍價",
+	"砍价列表": "砍價列表",
+	"人查看": "人查看",
+	"人分享": "人分享",
+	"人参与": "人參與",
+	"邀请您帮忙砍价": "邀請您幫忙砍價",
+	"查看商品": "查看商品",
+	"当前": "當前",
+	"已砍": "已砍",
+	"还剩": "還剩",
+	"立即参与砍价": "立即參與砍價",
+	"商品暂无库存": "商品暫無庫存",
+	"邀请好友帮砍价": "邀請好友幫砍價",
+	"已有": "已有",
+	"位好友成功砍价": "位好友成功砍價",
+	"帮好友砍一刀": "幫好友砍一刀",
+	"好友已砍价成功": "好友已砍價成功",
+	"我也要参与": "我也要參與",
+	"已成功帮助好友砍价": "已成功幫助好友砍價",
+	"恭喜您砍价成功,快去支付": "恭喜您砍價成功,快去支付",
+	"立即支付": "立即支付",
+	"抢更多商品": "搶更多商品",
+	"砍价帮": "砍價幫",
+	"砍掉": "砍掉",
+	"更多": "更多",
+	"关闭": "關閉",
+	"点击加载更多": "點擊加載更多",
+	"商品详情": "商品詳情",
+	"砍价规则": "砍價規則",
+	"您已砍掉": "您已砍掉",
+	"元,听说分享次数越多砍价成功的机会越大哦": "元,聽說分享次數越多砍價成功的機會越大哦",
+	"成功帮砍": "成功幫砍",
+	"您也可以砍价低价拿哦,快去挑选心仪的商品吧": "您也可以砍價低價拿哦,快去挑選心儀的商品吧",
+	"发送给朋友": "發送給朋友",
+	"微信好友": "微信好友",
+	"微信朋友圈": "微信朋友圈",
+	"生成海报": "生成海報",
+	"砍价详情": "砍價詳情",
+	"分享成功": "分享成功",
+	"分享失败": "分享失敗",
+	"该商品每人限购": "該商品每人限購",
+	"您的好友": "您的好友",
+	"邀请您砍价": "邀請您砍價",
+	"人团": "人團",
+	"去拼团": "去拼團",
+	"拼团列表": "拼團列表",
+	"类型": "類型",
+	"累计销量": "累計銷量",
+	"限购": "限購",
+	"种规格可选": "種規格可選",
+	"已拼": "已拼",
+	"件": "件",
+	"还差": "還差",
+	"人成团": "人成團",
+	"去拼单": "去拼單",
+	"查看更多": "查看更多",
+	"收起": "收起",
+	"拼团玩法": "拼團玩法",
+	"开团/参团": "開團/參團",
+	"邀请好友": "邀請好友",
+	"满员发货": "滿員發貨",
+	"用户评价": "用戶評價",
+	"好评率": "好評率",
+	"产品介绍": "產品介紹",
+	"单独购买": "單獨購買",
+	"立即开团": "立即開團",
+	"请选择": "請選擇",
+	"商品": "商品",
+	"详情": "詳情",
+	"缺少参数无法查看商品": "缺少參數無法查看商品",
+	"参数错误": "參數錯誤",
+	"已选择": "已選擇",
+	"保存成功": "保存成功",
+	"保存失败": "保存失敗",
+	"人拼": "人拼",
+	"剩余": "剩餘",
+	"结束": "結束",
+	"恭喜您拼团成功": "恭喜您拼團成功",
+	"人,拼团失败": "人,拼團失敗",
+	"拼团中,还差": "拼團中,還差",
+	"人拼团成功": "人拼團成功",
+	"邀请好友参团": "邀請好友參團",
+	"再次开团": "再次開團",
+	"取消开团": "取消開團",
+	"查看订单信息": "查看訂單信息",
+	"大家都在拼": "大家都在拼",
+	"更多拼团": "更多拼團",
+	"邀请您参团": "邀請您參團",
+	"你不是该团的成员": "你不是該團的成員",
+	"已抢": "已搶",
+	"抢购中": "搶購中",
+	"未开始": "未開始",
+	"已结束": "已結束",
+	"暂无商品,去看点别的吧": "暫無商品,去看點別的吧",
+	"即将开始": "即將開始",
+	"距秒杀结束仅剩": "距秒殺結束僅剩",
+	"累计销售": "累計銷售",
+	"收藏": "收藏",
+	"保存到手机": "保存到手機",
+	"长按图片可以保存到手机": "長按圖片可以保存到手機",
+	"抢购详情页": "搶購詳情頁",
+	"二维码获取失败": "二維碼獲取失敗",
+	"请选择属性": "請選擇屬性",
+	"提示:点击图片即可保存至手机相册": "提示:點擊圖片即可保存至手機相冊",
+	"拼团海报": "拼團海報",
+	"砍价海报": "砍價海報",
+	"海报生成中": "海報生成中",
+	"海报图片获取失败": "海報圖片獲取失敗",
+	"海报": "海報",
+	"已预定": "已預定",
+	"预售价": "預售價",
+	"立即预定": "立即預定",
+	"开售时间": "開售時間",
+	"预售活动": "預售活動",
+	"起": "起",
+	"划线价": "劃線價",
+	"开通“超级会员”立省": "開通“超級會員”立省",
+	"元": "元",
+	"立即开通": "立即開通",
+	"预售活动时间": "預售活動時間",
+	"预售结束后": "預售結束後",
+	"天内发货": "天內發貨",
+	"活动": "活動",
+	"参与秒杀": "參與秒殺",
+	"参与拼团": "參與拼團",
+	"复制口令": "複製口令",
+	"复制成功": "複製成功",
+	"推荐": "推薦",
+	"缺少经纬度信息无法查看地图": "缺少經緯度信息無法查看地圖",
+	"产品库存不足,请选择其它属性": "產品庫存不足,請選擇其它屬性",
+	"立即退款": "立即退款",
+	"一键改价": "一鍵改價",
+	"订单备注": "訂單備註",
+	"商品总价": "商品總價",
+	"原始邮费": "原始郵費",
+	"实际支付": "實際支付",
+	"退款金额": "退款金額",
+	"请填写备注信息": "請填寫備註信息",
+	"立即修改": "立即修改",
+	"确认退款": "確認退款",
+	"拒绝退款": "拒絕退款",
+	"取消": "取消",
+	"订单号": "訂單號",
+	"发货方式": "發貨方式",
+	"发货类型": "發貨類型",
+	"快递公司": "快遞公司",
+	"快递单号": "快遞單號",
+	"顺丰请输入单号 :收件人或寄件人手机号后四位": "順豐請輸入單號 :收件人或寄件人手機號後四位",
+	"例如:SF000000000000:3941": "例如:SF000000000000:3941",
+	"电子面单": "電子麵單",
+	"预览": "預覽",
+	"寄件人姓名": "寄件人姓名",
+	"填写寄件人姓名": "填寫寄件人姓名",
+	"寄件人电话": "寄件人電話",
+	"填写寄件人电话": "填寫寄件人電話",
+	"寄件人地址": "寄件人地址",
+	"填写寄件人地址": "填寫寄件人地址",
+	"送货人": "送貨人",
+	"确认提交": "確認提交",
+	"发货": "發貨",
+	"送货": "送貨",
+	"无需物流": "無需物流",
+	"手动填写": "手動填寫",
+	"电子面单打印": "電子麵單打印",
+	"填写快递单号": "填寫快遞單號",
+	"请选择电子面单": "請選擇電子麵單",
+	"待付款": "待付款",
+	"待发货": "待發貨",
+	"待收货": "待收貨",
+	"待评价": "待評價",
+	"售后/退款": "退款",
+	"数据统计": "數據統計",
+	"今日成交额": "今日成交額",
+	"昨日成交额": "昨日成交額",
+	"本月成交额": "本月成交額",
+	"今日订单数": "今日訂單數",
+	"昨日订单数": "昨日訂單數",
+	"本月订单数": "本月訂單數",
+	"详细数据": "詳細數據",
+	"日期": "日期",
+	"订单数": "訂單數",
+	"成交额": "成交額",
+	"立即核销": "立即核銷",
+	"查看": "查看",
+	"确定要核销此订单吗": "確定要核銷此訂單嗎",
+	"确定核销": "確定核銷",
+	"请输入核销码": "請輸入核銷碼",
+	"请输入正确的核销码": "請輸入正確的核銷碼",
+	"查询中": "查詢中",
+	"订单": "訂單",
+	"订单未备注,点击添加备注信息": "訂單未備註,點擊添加備註信息",
+	"复制": "複製",
+	"件商品,应支付": "件商品,應支付",
+	"邮费": "郵費",
+	"订单编号": "訂單編號",
+	"下单时间": "下單時間",
+	"支付状态": "支付狀態",
+	"已支付": "已支付",
+	"未支付": "未支付",
+	"支付方式": "支付方式",
+	"买家留言": "買家留言",
+	"支付金额": "支付金額",
+	"优惠券抵扣": "優惠券抵扣",
+	"运费": "運費",
+	"实付款": "實付款",
+	"配送方式": "配送方式",
+	"快递": "快遞",
+	"送货人电话": "送貨人電話",
+	"确认付款": "確認付款",
+	"去发货": "去發貨",
+	"改价成功": "改價成功",
+	"改价失败": "改價失敗",
+	"请输入备注": "請輸入備註",
+	"退款中": "退款中",
+	"部分退款中": "部分退款中",
+	"件商品,实付款": "件商品,實付款",
+	"同意退货": "同意退貨",
+	"待用户发货": "待用戶發貨",
+	"请输入正确的金额": "請輸入正確的金額",
+	"今天": "今天",
+	"昨天": "昨天",
+	"最近7天": "最近7天",
+	"本月": "本月",
+	"自定义": "自定義",
+	"营业额(元)": "營業額(元)",
+	"订单量(份)": "訂單量(份)",
+	"增长率": "增長率",
+	"增长": "增長",
+	"单位": "單位",
+	"元.": "元",
+	"分.": "分",
+	"固定": "固定",
+	"指定范围": "指定範圍",
+	"提交时间": "提交時間",
+	"原因": "原因",
+	"暂无申请记录,快去申请吧!": "暫無申請記錄,快去申請吧!",
+	"没有更多啦": "沒有更多啦",
+	"待审核": "待審核",
+	"审核通过": "審核通過",
+	"审核未通过": "審核未通過",
+	"编辑": "編輯",
+	"重新提交": "重新提交",
+	"会员优惠价": "會員優惠價",
+	"余额支付": "餘額支付",
+	"可用余额": "可用餘額",
+	"微信支付": "微信支付",
+	"确认": "確認",
+	"支付提醒": "支付提醒",
+	"线下支付已关闭,请点击确认按钮返回主页": "線下支付已關閉,請點擊確認按鈕返回主頁",
+	"请输入支付金额": "請輸入支付金額",
+	"正在确认": "正在確認",
+	"进入商城": "進入商城",
+	"代理商名称": "代理商名稱",
+	"请输入代理商名称": "請輸入代理商名稱",
+	"用户姓名": "用戶姓名",
+	"请输入姓名": "請輸入姓名",
+	"联系电话": "聯繫電話",
+	"请输入手机号": "請輸入手機號",
+	"验证码": "驗證碼",
+	"填写验证码": "填寫驗證碼",
+	"邀请码": "邀請碼",
+	"请输入代理商邀请码": "請輸入代理商邀請碼",
+	"请上传营业执照及行业相关资质证明图片": "請上傳營業執照及行業相關資質證明圖片",
+	"图片最多可上传10张,图片格式支持JPG、PNG、JPEG": "圖片最多可上傳10張,圖片格式支持JPG、PNG、JPEG",
+	"上传图片": "上傳圖片",
+	"已阅读并同意": "已閱讀並同意",
+	"代理商协议": "代理商協議",
+	"提交申请": "提交申請",
+	"代理商入驻协议": "代理商入駐協議",
+	"恭喜,您的资料提交成功!": "恭喜,您的資料提交成功! ",
+	"返回首页": "返回首頁",
+	"恭喜,您的资料通过审核!": "恭喜,您的資料通過審核! ",
+	"您的申请未通过!": "您的申請未通過! ",
+	"重新申请": "重新申請",
+	"获取验证码": "獲取驗證碼",
+	"请输入正确的手机号码": "請輸入正確的手機號碼",
+	"重新获取": "重新獲取",
+	"请上传营业执照": "請上傳營業執照",
+	"请勾选并同意入驻协议": "請勾選並同意入駐協議",
+	"专题栏": "專題欄",
+	"暂无数据": "暫無數據",
+	"请输入卡号": "請輸入卡號",
+	"请输入卡密": "請輸入卡密",
+	"确认激活": "確認激活",
+	"SVIP会员尊享权": "SVIP會員尊享權",
+	"正在激活": "正在激活",
+	"已使用": "已使用",
+	"永久SVIP会员": "永久SVIP會員",
+	"SVIP会员": "SVIP會員",
+	"到期": "到期",
+	"您与": "您與",
+	"商城的第": "商城的第",
+	"天.": "天.",
+	"已累积为您节省": "已累積為您節省",
+	"开通即享会员权益": "開通即享會員權益",
+	"续费会员": "續費會員",
+	"开通会员": "開通會員",
+	"有效期至": "有效期至",
+	"试用": "試用",
+	"购买即视为同意": "購買即視為同意",
+	"会员用户协议": "會員用戶協議",
+	"点击兑换卡密": "點擊兌換卡密",
+	"会员优惠券": "會員優惠券",
+	"SVIP商品推荐": "SVIP商品推薦",
+	"商城价": "商城價",
+	"激活会员卡": "激活會員卡",
+	"支付宝支付": "支付寶支付",
+	"成功开启0元试用": "成功開啟0元試用",
+	"确认绑定": "確認綁定",
+	"绑定成功": "綁定成功",
+	"商城客服已离线": "商城客服已離線",
+	"我要反馈": "我要反饋",
+	"请填写内容": "請填寫內容",
+	"提交": "提交",
+	"精品推荐": "精品推薦",
+	"热门榜单": "熱門榜單",
+	"首发新品": "首發新品",
+	"促销单品": "促銷單品",
+	"预告": "預告",
+	"回放": "回放",
+	"进行中": "進行中",
+	"发送客服": "發送客服",
+	"客服连接中": "客服連接中",
+	"连接失败": "連接失敗",
+	"提示": "提示",
+	"客服已下线,是否需要反馈?": "客服已下線,是否需要反饋? ",
+	"和好友一起分享": "和好友一起分享",
+	"积分抵扣": "積分抵扣",
+	"已开票": "已開票",
+	"未开票": "未開票",
+	"发票信息": "發票信息",
+	"发票抬头": "發票抬頭",
+	"发票抬头类型": "發票抬頭類型",
+	"个人": "個人",
+	"企业": "企業",
+	"发票类型": "發票類型",
+	"电子普通发票": "電子普通發票",
+	"电子专用发票": "電子專用發票",
+	"企业税号": "企業稅號",
+	"联系信息": "聯繫信息",
+	"真实姓名": "真實姓名",
+	"联系邮箱": "聯繫郵箱",
+	"抬头选择": "抬頭選擇",
+	"默认": "默認",
+	"普通": "普通",
+	"专用": "專用",
+	"您还没有添加发票信息哟": "您還沒有添加發票信息喲",
+	"添加新的抬头": "添加新的抬頭",
+	"不开发票": "不開發票",
+	"抽奖": "抽獎",
+	"全选": "全選",
+	"属性": "屬性",
+	"请填写具体地址": "請填寫具體地址",
+	"省": "省",
+	"市": "市",
+	"区": "區",
+	"添加成功": "添加成功",
+	"您已拒绝导入微信地址权限": "您已拒絕導入微信地址權限",
+	"是否进入权限管理,调整授权?": "是否進入權限管理,調整授權? ",
+	"已取消": "已取消",
+	"添加失败": "添加失敗",
+	"请填写收货人姓名": "請填寫收貨人姓名",
+	"请选择所在地区": "請選擇所在地區",
+	"请填写详细地址": "請填寫詳細地址",
+	"星": "星",
+	"商品满足你的期待么?说说你的想法,分享给想买的他们吧": "商品滿足你的期待麼?說說你的想法,分享給想買的他們吧",
+	"立即评价": "立即評價",
+	"商品质量": "商品質量",
+	"服务态度": "服務態度",
+	"缺少参数": "缺少參數",
+	"请填写你对宝贝的心得": "請填寫你對寶貝的心得",
+	"正在发布评论": "正在發布評論",
+	"感谢您的评价": "感謝您的評價",
+	"评价完成": "評價完成",
+	"恭喜您": "恭喜您",
+	"获得": "獲得",
+	"机会": "機會",
+	"领取成功": "領取成功",
+	"评分": "評分",
+	"全部": "全部",
+	"好评": "好評",
+	"中评": "中評",
+	"差评": "差評",
+	"加载更多": "加載更多",
+	"千米距离": "千米距離",
+	"搜索商品名称": "搜索商品名稱",
+	"价格": "價格",
+	"销量": "銷量",
+	"新品": "新品",
+	"已全部加载": "已全部加載",
+	"缺少订单号": "缺少訂單號",
+	"退货件数": "退貨件數",
+	"退款类型": "退款類型",
+	"退款原因": "退款原因",
+	"备注说明": "備註說明",
+	"填写备注信息,100字以内": "填寫備註信息,100字以內",
+	"仅退款": "僅退款",
+	"退货并退款": "退貨並退款",
+	"申请成功": "申請成功",
+	"请先选择退货商品": "請先選擇退貨商品",
+	"搜索历史": "搜索歷史",
+	"热门搜索": "熱門搜索",
+	"请输入要搜索的商品": "請輸入要搜索的商品",
+	"正在搜索中": "正在搜索中",
+	"中奖记录": "中獎記錄",
+	"我的奖品": "我的獎品",
+	"活动规则": "活動規則",
+	"昵称": "暱稱",
+	"序号": "序號",
+	"奖品名称": "獎品名稱",
+	"获奖时间": "獲獎時間",
+	"商家暂未上架活动哦": "商家暫未上架活動哦",
+	"获取抽奖信息": "獲取抽獎信息",
+	"奖品类型": "獎品類型",
+	"立即兑换": "立即兌換",
+	"兑换时间": "兌換時間",
+	"暂无中奖记录": "暫無中獎記錄",
+	"积分": "積分",
+	"余额": "餘額",
+	"红包": "紅包",
+	"设置收货地址": "設置收貨地址",
+	"暂无门店信息": "暫無門店信息",
+	"剩余积分": "剩餘積分",
+	"当前积分": "當前積分",
+	"开具发票": "開具發票",
+	"请填写": "請填寫",
+	"配送运费": "配送運費",
+	"会员商品优惠": "會員商品優惠",
+	"会员运费优惠": "會員運費優惠",
+	"合计": "合計",
+	"使用微信快捷支付": "使用微信快捷支付",
+	"使用支付宝支付": "使用支付寶支付",
+	"线下支付": "線下支付",
+	"使用线下付款": "使用線下付款",
+	"好友代付": "好友代付",
+	"找微信好友支付": "找微信好友支付",
+	"立即使用": "立即使用",
+	"请选择要购买的商品": "請選擇要購買的商品",
+	"发票": "發票",
+	"不使用": "不使用",
+	"订单创建成功": "訂單創建成功",
+	"请选择支付方式": "請選擇支付方式",
+	"请选择收货地址": "請選擇收貨地址",
+	"请填写联系人或联系人电话": "請填寫聯繫人或聯繫人電話",
+	"暂无门店,请选择其他方式": "暫無門店,請選擇其他方式",
+	"请输入": "請輸入",
+	"请输入正确的": "請輸入正確的",
+	"请上传": "請上傳",
+	"订单支付中": "訂單支付中",
+	"请按以上退货信息将商品退回": "請按以上退貨信息將商品退回",
+	"请联系管理员获取退货地址": "請聯繫管理員獲取退貨地址",
+	"待核销": "待核銷",
+	"核销信息": "核銷信息",
+	"营业时间": "營業時間",
+	"每日": "每日",
+	"使用说明": "使用說明",
+	"可将二维码出示给店员扫描或提供数字核销码": "可將二維碼出示給店員掃描或提供數字核銷碼",
+	"可将二维码出示给配送员进行核销": "可將二維碼出示給配送員進行核銷",
+	"查看位置": "查看位置",
+	"拒绝原因": "拒絕原因",
+	"联系客服": "聯繫客服",
+	"商家备注": "商家備註",
+	"收货人": "收貨人",
+	"收货地址": "收貨地址",
+	"配送人姓名": "配送人姓名",
+	"拨打": "撥打",
+	"虚拟发货": "虛擬發貨",
+	"已发货,请注意查收": "已發貨,請注意查收",
+	"虚拟备注": "虛擬備註",
+	"总代付": "總代付",
+	"申请开票": "申請開票",
+	"查看发票": "查看發票",
+	"取消订单": "取消訂單",
+	"立即付款": "立即付款",
+	"批量退款": "批量退款",
+	"查看拼团": "查看拼團",
+	"再次购买": "再次購買",
+	"取消申请": "取消申請",
+	"填写退货信息": "填寫退貨信息",
+	"查看退货物流": "查看退貨物流",
+	"您确认放弃此次申请吗": "您確認放棄此次申請嗎",
+	"操作成功": "操作成功",
+	"订单信息不存在": "訂單信息不存在",
+	"为保障权益,请收到货确认无误后,再确认收货": "為保障權益,請收到貨確認無誤後,再確認收貨",
+	"删除订单": "刪除訂單",
+	"确定删除该订单": "確定刪除該訂單",
+	"删除成功": "刪除成功",
+	"确认取消该订单": "確認取消該訂單",
+	"订单信息": "訂單信息",
+	"消费订单": "消費訂單",
+	"总消费": "總消費",
+	"预售": "預售",
+	"线下付款,未支付": "線下付款,未支付",
+	"未核销": "未核銷",
+	"件商品,总金额": "件商品,總金額",
+	"查看详情": "查看詳情",
+	"暂无订单": "暫無訂單",
+	"缺少订单号无法取消订单": "缺少訂單號無法取消訂單",
+	"订单支付成功": "訂單支付成功",
+	"订单支付失败": "訂單支付失敗",
+	"暂未支付": "暫未支付",
+	"失败原因": "失敗原因",
+	"重新购买": "重新購買",
+	"重新支付": "重新支付",
+	"赠送优惠券": "贈送優惠券",
+	"有效期": "有效期",
+	"缺少参数无法查看订单支付状态": "缺少參數無法查看訂單支付狀態",
+	"最多可上传3张": "最多可上傳3張",
+	"请选择产品": "請選擇產品",
+	"该产品没有更多库存了": "該產品沒有更多庫存了",
+	"优品推荐": "優品推薦",
+	"暂无产品": "暫無產品",
+	"重新选择": "重新選擇",
+	"请选择数量": "請選擇數量",
+	"砍价专区·BARGAINING": "砍價專區·BARGAINING",
+	"立即砍价": "立即砍價",
+	"拼团活动": "拼團活動",
+	"人拼团成功.": "人拼團成功.",
+	"人参团": "人參團",
+	"拼团价": "拼團價",
+	"已过期": "已過期",
+	"关注": "關注",
+	"推荐好货": "推薦好貨",
+	"暂无商品": "暫無商品",
+	"限时秒杀": "限時秒殺",
+	"抢": "搶",
+	"广告位": "廣告位",
+	"精彩内容": "精彩內容",
+	"砍价模块,暂无数据": "砍價模塊,暫無數據",
+	"砍价活动": "砍價活動",
+	"呼朋唤友来砍价": "呼朋喚友來砍價",
+	"拼团模块,暂无数据": "拼團模塊,暫無數據",
+	"享超值开团价": "享超值開團價",
+	"优惠券,暂无数据": "優惠券,暫無數據",
+	"领取今日好券": "領取今日好券",
+	"可用": "可用",
+	"领取": "領取",
+	"客服": "客服",
+	"商品列表,暂无数据": "商品列表,暫無數據",
+	"搜索商品": "搜索商品",
+	"暂无图片,请上传图片": "暫無圖片,請上傳圖片",
+	"首发新品,暂无数据": "首發新品,暫無數據",
+	"多个优质商品最新上架": "多個優質商品最新上架",
+	"暂无新闻,请上传新闻": "暫無新聞,請上傳新聞",
+	"热度 TOP": "熱度 TOP",
+	"排行榜、暂无数据": "排行榜、暫無數據",
+	"促销单品,暂无数据": "促銷單品,暫無數據",
+	"库存商品优惠促销活动": "庫存商品優惠促銷活動",
+	"精品推荐,暂无数据": "精品推薦,暫無數據",
+	"上百种商品分类任您选择": "上百種商品分類任您選擇",
+	"秒杀模块,暂无数据": "秒殺模塊,暫無數據",
+	"场": "場",
+	"暂无数据,请设置": "暫無數據,請設置",
+	"暂无数据,请先添加分类": "暫無數據,請先添加分類",
+	"暂无标题": "暫無標題",
+	"诚意推荐品质商品": "誠意推薦品質商品",
+	"点击“立即关注”即可关注公众号": "點擊“立即關注”即可關注公眾號",
+	"立即关注": "立即關注",
+	"添加到我的小程序, 微信首页下拉即可访问商城。": "添加到我的小程序, 微信首頁下拉即可訪問商城。 ",
+	"点击": "點擊",
+	"服务协议与隐私政策": "服務協議與隱私政策",
+	"请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。": "請務必審慎閱讀、充分理解“服務協議與 隱私政策”各條款,包括但不限於:為了 向你提供即時通訊、內容分享等服務,我 們需要收集你的設備信息、操作日誌等個 人信息。你可以在“設置”中查看、變更、刪除個人信息並管理你的授權。 ",
+	"你可以阅读": "你可以閱讀",
+	"《服务协议与隐私政策》": "《服務協議與隱私政策》",
+	"了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。": "了解詳細信息。如你同意,請點擊“我同意”開始接受我們的服務。 ",
+	"我同意": "我同意",
+	"残忍拒绝": "殘忍拒絕",
+	"下拉加载更多": "下拉加載更多",
+	"网络连接断开": "網絡連接斷開",
+	"请检查情况:": "請檢查情況:",
+	"在设置中是否已开启网络权限": "在設置中是否已開啟網絡權限",
+	"当前是否处于弱网环境": "當前是否處於弱網環境",
+	"版本是否过低,升级试试吧": "版本是否過低,升級試試吧",
+	"重新连接": "重新連接",
+	"加载中": "加載中",
+	"没有更多内容啦~": "沒有更多內容啦~",
+	"100%正品保证": "100%正品保證",
+	"所有商品精挑细选": "所有商品精挑細選",
+	"售后无忧": "售後無憂",
+	"管理": "管理",
+	"购物数量": "購物數量",
+	"请重新选择商品规格": "請重新選擇商品規格",
+	"重选": "重選",
+	"失效商品": "失效商品",
+	"失效": "失效",
+	"该商品已失效": "該商品已失效",
+	"立即下单": "立即下單",
+	"产品库存不足,请选择其它": "產品庫存不足,請選擇其它",
+	"添加购物车成功": "添加購物車成功",
+	"清除成功": "清除成功",
+	"暂无兑换记录~": "暫無兌換記錄~",
+	"大家都在换": "大家都在換",
+	"人兑换": "人兌換",
+	"轻松赚积分": "輕鬆賺積分",
+	"购买商品": "購買商品",
+	"购买商品可获得积分奖励": "購買商品可獲得積分獎勵",
+	"去完成": "去完成",
+	"每日签到活动": "每日簽到活動",
+	"每日签到可获得积分奖励": "每日簽到可獲得積分獎勵",
+	"九宫格抽奖活动": "九宮格抽獎活動",
+	"幸运抽奖可获得积分奖励": "幸運抽獎可獲得積分獎勵",
+	"我的积分": "我的積分",
+	"每日签到": "每日簽到",
+	"积分抽奖": "積分抽獎",
+	"兑换记录": "兌換記錄",
+	"已兑换": "已兌換",
+	"无法兑换": "無法兌換",
+	"[默认]": "[默認]",
+	"可用积分": "可用積分",
+	"快递费用": "快遞費用",
+	"免运费": "免運費",
+	"备注信息": "備註信息",
+	"请添加备注(150字以内)": "請添加備註(150字以內)",
+	"使用线上支付宝支付": "使用線上支付寶支付",
+	"可用余额:": "可用餘額:",
+	"选择线下付款方式": "選擇線下付款方式",
+	"正在加载…": "正在加載…",
+	"可用积分不足!": "可用積分不足! ",
+	"订单状态": "訂單狀態",
+	"支付积分": "支付積分",
+	"备注": "備註",
+	"配送核销码": "配送核銷碼",
+	"当前可用余额:": "當前可用餘額:",
+	"正在加载": "正在加載",
+	"缺少经纬度信息无法查看地图!": "缺少經緯度信息無法查看地圖! ",
+	"商品兑换成功": "商品兌換成功",
+	"兑换方式": "兌換方式",
+	"积分兑换": "積分兌換",
+	"兑换积分": "兌換積分",
+	"取消兑换": "取消兌換",
+	"缺少参数无法查看订单兑换状态": "缺少參數無法查看訂單兌換狀態",
+	"用户离开了": "用戶離開了",
+	"兑换成功": "兌換成功",
+	"物流公司": "物流公司",
+	"复制单号": "複製單號",
+	"设为默认": "設為默認",
+	"添加新地址": "添加新地址",
+	"导入微信地址": "導入微信地址",
+	"取消选择": "取消選擇",
+	"您设置的默认地址不存在!": "您設置的默認地址不存在!",
+	"设置成功": "設置成功",
+	"您删除的地址不存在!": "您刪除的地址不存在!",
+	"获取头像": "獲取頭像",
+	"请点击授权": "請點擊授權",
+	"绑定手机号": "綁定手機號",
+	"永久": "永久",
+	"会员到期": "會員到期",
+	"未开通会员": "未開通會員",
+	"查看会员权益": "查看會員權益",
+	"立即续费": "立即續費",
+	"立即激活": "立即激活",
+	"会员可享多项权益": "會員可享多項權益",
+	"订单中心": "訂單中心",
+	"我的服务": "我的服務",
+	"隐私协议": "隱私協議",
+	"商家管理": "商家管理",
+	"更新用户信息成功": "更新用戶信息成功",
+	"客服接待": "客服接待",
+	"点击复制网址去浏览器中打开": "點擊複製網址去瀏覽器中打開",
+	"点击复制": "點擊複製",
+	"完成支付": "完成支付",
+	"点击右上角": "點擊右上角",
+	"选择 在浏览器 打开,去支付宝支付": "選擇 在瀏覽器 打開,去支付寶支付",
+	"支付订单不存在,页面将在2秒后自动关闭!": "支付訂單不存在,頁面將在2秒後自動關閉! ",
+	"正在支付中": "正在支付中",
+	"支付订单不存在,页面将在2秒后自动关闭": "支付訂單不存在,頁面將在2秒後自動關閉",
+	"复制失败": "複製失敗",
+	"您目前的排名": "您目前的排名",
+	"您目前暂无排名": "您目前暫無排名",
+	"暂无排名~": "暫無排名~",
+	"我也是有底线的": "我也是有底線的",
+	"输入手机号": "輸入手機號",
+	"输入验证码": "輸入驗證碼",
+	"立即登录": "立即登錄",
+	"请填写手机号码": "請填寫手機號碼",
+	"请填写验证码": "請填寫驗證碼",
+	"请输入正确的验证码": "請輸入正確的驗證碼",
+	"正在登录中": "正在登錄中",
+	"登录成功": "登錄成功",
+	"获取授权": "獲取授權",
+	"获取微信的手机号授权": "獲取微信的手機號授權",
+	"获取微信手机号": "獲取微信手機號",
+	"输入手机号码": "輸入手機號碼",
+	"填写登录密码": "填寫登錄密碼",
+	"登录": "登錄",
+	"快速登录": "快速登錄",
+	"账号登录": "賬號登錄",
+	"其他方式登录": "其他方式登錄",
+	"登录中": "登錄中",
+	"获取用户信息失败": "獲取用戶信息失敗",
+	"请绑定手机号后,继续操作": "請綁定手機號後,繼續操作",
+	"错误信息": "錯誤信息",
+	"用户点击确定": "用戶點擊確定",
+	"用户点击取消": "用戶點擊取消",
+	"登录失败": "登錄失敗",
+	"请勿重复点击": "請勿重複點擊",
+	"请填写密码": "請填寫密碼",
+	"您输入的密码过于简单": "您輸入的密碼過於簡單",
+	"请填写账号": "請填寫賬號",
+	"请输入正确的账号": "請輸入正確的賬號",
+	"[图片]": "[圖片]",
+	"[语音]": "[語音]",
+	"[商品]": "[商品]",
+	"[订单]": "[訂單]",
+	"亲、暂无消息记录哟!": "親、暫無消息記錄喲! ",
+	"站内消息": "站內消息",
+	"客服消息": "客服消息",
+	"通知于": "通知於",
+	"获取详情中": "獲取詳情中",
+	"代付订单创建成功,发给好友帮你付款吧~": "代付訂單創建成功,發給好友幫你付款吧~",
+	"帮我付一下这件商品了,谢谢~": "幫我付一下這件商品了,謝謝~",
+	"已经有人替我代付,谢谢啦~": "已經有人替我代付,謝謝啦~",
+	"谢谢你帮我支付,么么哒~": "謝謝你幫我支付,麼麼噠~",
+	"我已为你代付成功,商家正在努力发货中~": "我已為你代付成功,商家正在努力發貨中~",
+	"好友代付成功,商家正在努力发货中~": "好友代付成功,商家正在努力發貨中~",
+	"发送给微信好友": "發送給微信好友",
+	"查看订单详情": "查看訂單詳情",
+	"订单已支付": "訂單已支付",
+	"如果订单申请退款,已支付金额将原路退还给您": "如果訂單申請退款,已支付金額將原路退還給您",
+	"代付成功": "代付成功",
+	"谢谢你为我付款,还可以再去看看其他商品哟~": "謝謝你為我付款,還可以再去看看其他商品喲~",
+	"该订单暂未支付": "該訂單暫未支付",
+	"人": "人",
+	"推广人数": "推廣人數",
+	"一级": "一級",
+	"二级": "二級",
+	"点击搜索会员名称": "點擊搜索會員名稱",
+	"团队排序": "團隊排序",
+	"金额排序": "金額排序",
+	"订单排序": "訂單排序",
+	"单": "單",
+	"加入时间": "加入時間",
+	"累积推广订单": "累積推廣訂單",
+	"本月累计推广订单": "本月累計推廣訂單",
+	"返佣": "返佣",
+	"暂未返佣": "暫未返佣",
+	"返佣时间": "返佣時間",
+	"单号": "單號",
+	"暂无推广订单~": "暫無推廣訂單~",
+	"推广订单列表": "推廣訂單列表",
+	"找回密码": "找回密碼",
+	"填写您的新密码": "填寫您的新密碼",
+	"加载失败": "加載失敗",
+	"点击授权登录您的客服工作台": "點擊授權登錄您的客服工作台",
+	"授权登录": "授權登錄",
+	"没有登录的code,请重新扫码": "沒有登錄的code,請重新掃碼",
+	"员工人数": "員工人數",
+	"邀请": "邀請",
+	"分佣比例": "分傭比例",
+	"修改分佣比例": "修改分傭比例",
+	"请输入百分比": "請輸入百分比",
+	"删除员工": "刪除員工",
+	"确定删除该员工?": "確定刪除該員工?",
+	"请输入比例": "請輸入比例",
+	"分类": "分類",
+	"我的": "我的",
+	"姓名": "姓名",
+	"请输入联系电话": "請輸入聯繫電話",
+	"所在地区": "所在地區",
+	"详细地址": "詳細地址",
+	"设置为默认地址": "設置為默認地址",
+	"立即保存": "立即保存",
+	"浙江省": "浙江省",
+	"杭州市": "杭州市",
+	"滨江区": "濱江區",
+	"广东省": "廣東省",
+	"广州市": "廣州市",
+	"番禺区": "番禺區",
+	"修改地址": "修改地址",
+	"添加地址": "添加地址",
+	"已取消!": "已取消! ",
+	"请填写联系电话": "請填寫聯繫電話",
+	"保存中": "保存中",
+	"修改成功": "修改成功",
+	"消费": "消費",
+	"充值": "充值",
+	"暂无账单的记录哦~": "暫無賬單的記錄哦~",
+	"点击【立即注销】即代表您已经同意《用户注销协议》": "點擊【立即註銷】即代表您已經同意《用戶註銷協議》",
+	"立即注销": "立即註銷",
+	"是否确认注销": "是否確認註銷",
+	"注销后无法恢复,请谨慎操作": "註銷後無法恢復,請謹慎操作",
+	"注销": "註銷",
+	"持卡人": "持卡人",
+	"请输入持卡人姓名": "請輸入持卡人姓名",
+	"卡号": "卡號",
+	"请填写卡号": "請填寫卡號",
+	"银行": "銀行",
+	"提现": "提現",
+	"最低提现金额": "最低提現金額",
+	"当前可提现金额": "當前可提現金額",
+	"冻结佣金": "凍結佣金",
+	"说明: 每笔佣金的冻结期为": "說明: 每筆佣金的凍結期為",
+	"天,到期后可提现": "天,到期後可提現",
+	"账号": "賬號",
+	"请填写您的微信账号": "請填寫您的微信賬號",
+	"收款码": "收款碼",
+	"请填写您的支付宝账号": "請填寫您的支付寶賬號",
+	"请选择银行": "請選擇銀行",
+	"银行卡": "銀行卡",
+	"微信": "微信",
+	"支付宝": "支付寶",
+	"请填写持卡人姓名": "請填寫持卡人姓名",
+	"请填写微信号": "請填寫微信號",
+	"请填写提现金额": "請填寫提現金額",
+	"提现金额不能低于": "提現金額不能低於",
+	"未使用": "未使用",
+	"已使用/过期": "已使用/過期",
+	"通用劵": "通用劵",
+	"一级分佣上浮": "一級分傭上浮",
+	"二级分佣上浮": "二級分傭上浮",
+	"快速升级技巧": "快速升級技巧",
+	"未完成": "未完成",
+	"已领完": "已領完",
+	"当前共": "當前共",
+	"取关": "取關",
+	"请选择商品": "請選擇商品",
+	"头像": "頭像",
+	"手机号码": "手機號碼",
+	"点击绑定手机号": "點擊綁定手機號",
+	"ID号": "ID號",
+	"权限设置": "權限設置",
+	"点击管理": "點擊管理",
+	"密码": "密碼",
+	"点击修改密码": "點擊修改密碼",
+	"更换手机号码": "更換手機號碼",
+	"点击更换手机号码": "點擊更換手機號碼",
+	"缓存大小": "緩存大小",
+	"当前版本": "當前版本",
+	"地址管理": "地址管理",
+	"发票管理": "發票管理",
+	"账号注销": "賬號註銷",
+	"注销后无法恢复": "註銷後無法恢復",
+	"累计积分": "累計積分",
+	"累计消费": "累計消費",
+	"冻结积分": "凍結積分",
+	"积分规则": "積分規則",
+	"提示:积分数值的高低会直接影响您的会员等级": "提示:積分數值的高低會直接影響您的會員等級",
+	"提示:你有": "提示:你有",
+	"积分在": "積分在",
+	"过期,请尽快使用": "過期,請盡快使用",
+	"暂无积分记录哦~": "暫無積分記錄哦~",
+	"赚积分": "賺積分",
+	"分值明细": "分值明細",
+	"分值提升": "分值提升",
+	"抬头类型": "抬頭類型",
+	"增值税电子专用发票": "增值稅電子專用發票",
+	"增值税电子普通发票": "增值稅電子普通發票",
+	"需要开具发票的姓名": "需要開具發票的姓名",
+	"需要开具发票的企业名称": "需要開具發票的企業名稱",
+	"税号": "稅號",
+	"纳税人识别号": "納稅人識別號",
+	"手机号": "手機號",
+	"您的手机号": "您的手機號",
+	"邮箱": "郵箱",
+	"您的联系邮箱": "您的聯繫郵箱",
+	"开户银行": "開戶銀行",
+	"您的开户银行": "您的開戶銀行",
+	"银行账号": "銀行賬號",
+	"您的银行账号": "您的銀行賬號",
+	"企业地址": "企業地址",
+	"您所在的企业地址": "您所在的企業地址",
+	"企业电话": "企業電話",
+	"您的企业电话": "您的企業電話",
+	"设置为默认抬头": "設置為默認抬頭",
+	"保存": "保存",
+	"发票类型选择": "發票類型選擇",
+	"纸质发票开出后将以邮寄形式交付": "紙質發票開出後將以郵寄形式交付",
+	"请输入需要开具发票的姓名": "請輸入需要開具發票的姓名",
+	"请输入您的手机号": "請輸入您的手機號",
+	"请正确输入您的手机号": "請正確輸入您的手機號",
+	"请输入您的联系邮箱": "請輸入您的聯繫郵箱",
+	"请正确输入您的联系邮箱": "請正確輸入您的聯繫郵箱",
+	"请输入需要开具发票的企业名称": "請輸入需要開具發票的企業名稱",
+	"请输入纳税人识别号": "請輸入納稅人識別號",
+	"请正确输入纳税人识别号": "請正確輸入納稅人識別號",
+	"请输入您的开户银行": "請輸入您的開戶銀行",
+	"请输入您的银行账号": "請輸入您的銀行賬號",
+	"请正确输入您的银行账号": "請正確輸入您的銀行賬號",
+	"请输入您所在的企业地址": "請輸入您所在的企業地址",
+	"请输入您的企业电话": "請輸入您的企業電話",
+	"发票记录": "發票記錄",
+	"抬头管理": "抬頭管理",
+	"申请时间": "申請時間",
+	"没有发票信息哟~": "沒有發票信息喲~",
+	"个人普通发票": "個人普通發票",
+	"企业普通发票": "企業普通發票",
+	"企业专用发票": "企業專用發票",
+	"添加新发票": "添加新發票",
+	"删除该发票?": "刪除該發票? ",
+	"发票编号": "發票編號",
+	"发票备注": "發票備註",
+	"快递号": "快遞號",
+	"总资产(元)": "總資產(元)",
+	"累计充值(元)": "累計充值(元)",
+	"累计消费(元)": "累計消費(元)",
+	"账单记录": "賬單記錄",
+	"消费记录": "消費記錄",
+	"充值记录": "充值記錄",
+	"积分中心": "積分中心",
+	"签到领积分": "簽到領積分",
+	"赚积分抵现金": "賺積分抵現金",
+	"领取优惠券": "領取優惠券",
+	"满减享优惠": "滿減享優惠",
+	"最新拼团活动": "最新拼團活動",
+	"最新的优惠商品上架拼团": "最新的優惠商品上架拼團",
+	"立即参与": "立即參與",
+	"当前限时秒杀": "當前限時秒殺",
+	"最新商品秒杀进行中": "最新商品秒殺進行中",
+	"我的余额": "我的餘額",
+	"赠送": "贈送",
+	"其他": "其他",
+	"注意事项": "注意事項",
+	"冻结佣金为": "凍結佣金為",
+	"立即转入": "立即轉入",
+	"立即充值": "立即充值",
+	"请输入金额": "請輸入金額",
+	"转入余额": "轉入餘額",
+	"转入余额后无法再次转出,确认是否转入余额": "轉入餘額後無法再次轉出,確認是否轉入餘額",
+	"转入成功": "轉入成功",
+	"正在支付": "正在支付",
+	"充值金额必须为数字": "充值金額必須為數字",
+	"充值金额不能为0": "充值金額不能為0",
+	"填写手机号码": "填寫手機號碼",
+	"是否绑定账号": "是否綁定賬號",
+	"绑定": "綁定",
+	"您已取消绑定!": "您已取消綁定! ",
+	"当前手机号": "當前手機號",
+	"设置新密码": "設置新密碼",
+	"确认新密码": "確認新密碼",
+	"手机号码不存在,无法发送验证码!": "手機號碼不存在,無法發送驗證碼! ",
+	"请输入新密码": "請輸入新密碼",
+	"两次输入的密码不一致!": "兩次輸入的密碼不一致! ",
+	"请输入验证码": "請輸入驗證碼",
+	"暂无退款订单~": "暫無退款訂單~",
+	"缺少订单号无法查看订单详情": "缺少訂單號無法查看訂單詳情",
+	"明细": "明細",
+	"第七天": "第七天",
+	"第7天": "第7天",
+	"奖励": "獎勵",
+	"已签到": "已簽到",
+	"立即签到": "立即簽到",
+	"已累计签到": "已累計簽到",
+	"据说连续签到第": "據說連續簽到第",
+	"天可获得超额积分,一定要坚持签到哦~~~": "天可獲得超額積分,一定要堅持簽到哦~~~",
+	"签到成功": "簽到成功",
+	"好的": "OK",
+	"您今日已签到!": "您今日已簽到!",
+	"暂无签到记录~": "暫無簽到記錄~",
+	"保存海报": "保存海報",
+	"长按保存图片": "長按保存圖片",
+	"分销海报": "分銷海報",
+	"小程序二维码需要发布正式版后才能获取到": "小程序二維碼需要發布正式版後才能獲取到",
+	"获取中": "獲取中",
+	"暂无数据~": "暫無數據~",
+	"提现记录": "提現記錄",
+	"提现总额": "提現總額",
+	"佣金记录": "佣金記錄",
+	"佣金明细": "佣金明細",
+	"分销等级": "分銷等級",
+	"昨日收益": "昨日收益",
+	"累积已提": "累積已提",
+	"代理商申请": "代理商申請",
+	"立即提现": "立即提現",
+	"推广名片": "推廣名片",
+	"推广人统计": "推廣人統計",
+	"推广人订单": "推廣人訂單",
+	"推广订单": "推廣訂單",
+	"事业部": "事業部",
+	"代理商": "代理商",
+	"推广人排行": "推廣人排行",
+	"佣金排行": "佣金排行",
+	"员工列表": "員工列表",
+	"您目前暂无推广权限": "您目前暫無推廣權限",
+	"商城购物可享": "商城購物可享",
+	"折": "折",
+	"当前等级": "當前等級",
+	"未达成": "未達成",
+	"今日成长值": "今日成長值",
+	"点": "點",
+	"我的成长值记录": "我的成長值記錄",
+	"暂未解锁该等级": "暫未解鎖該等級",
+	"点,需达到": "點,需達到",
+	"已解锁更高等级": "已解鎖更高等級",
+	"我的成长特权": "我的成長特權",
+	"购物折扣": "購物折扣",
+	"专属徽章": "專屬徽章",
+	"经验累积": "經驗累積",
+	"尊享客服": "尊享客服",
+	"签到": "簽到",
+	"可获得": "可獲得",
+	"点经验": "點經驗",
+	"每日签到可获得经验值,已签到": "每日簽到可獲得經驗值,已簽到",
+	"去签到": "去簽到",
+	"点经验/元": "點經驗/元",
+	"购买商品可获得对应的经验值": "購買商品可獲得對應的經驗值",
+	"去购买": "去購買",
+	"点经验/人": "點經驗/人",
+	"邀请好友注册商城可获得经验值": "邀請好友註冊商城可獲得經驗值",
+	"去邀请": "去邀請",
+	"积分数": "積分數",
+	"消费金额": "消費金額",
+	"暂无经验记录": "暫無經驗記錄",
+	"账户登录": "賬戶登錄",
+	"微信登录": "微信登錄",
+	"手机号登录": "手機號登錄",
+	"账户充值": "賬戶充值",
+	"佣金转入": "佣金轉入",
+	"周榜": "周榜",
+	"月榜": "周榜",
+	"周排行": "週排行",
+	"月排行": "月排行",
+	"语言切换": "語言切換",
+	"点击前往": "點擊前往",
+	"查看全部": "查看全部",
+	"查看订单": "查看訂單",
+	"无法获取图片信息": "無法獲取圖片信息",
+	"长按或扫描查看": "長按或掃描查看",
+	"点解锁": "點解鎖",
+	"确认修改": "確認修改",
+	"保存修改": "保存修改",
+	"退出登录": "退出登錄",
+	"付费会员": "付費會員",
+	"地址信息": "地址信息",
+	"我的推广": "我的推廣",
+	"砍价记录": "砍價記錄",
+	"我的等级": "我的等級",
+	"兑换": "兌換",
+	"申请中": "申請中",
+	"统计管理": "統計管理",
+	"退款": "退款",
+	"未发货": "未發貨",
+	"当前为最新版本": "當前為最新版本",
+	"清除缓存": "清除緩存",
+	"确定清楚本地缓存数据吗": "確定清楚本地緩存數據嗎",
+	"缓存清理完成": "緩存清理完成",
+	"切换的账号不存在": "切換的賬號不存在",
+	"正在切换中": "正在切換中",
+	"确认退出登录": "確認退出登錄",
+	"我知道了": "我知道了",
+	"系统错误": "系統錯誤",
+	"请求失败": "請求失敗",
+	"邀请您加入": "邀請您加入",
+	"图片上传中": "圖片上傳中",
+	"上传图片失败": "上傳圖片失敗",
+	"访问位置被拒绝": "訪問位置被拒絕",
+	"系统定位已关闭": "系統定位已關閉",
+	"需要定位权限": "需要定位權限",
+	"订单核销":"訂單核銷",
+	"当前可转入佣金为":"當前可轉入佣金為",
+	"浏览记录":"瀏覽記錄",
+	"签到奖励":"簽到獎勵",
+	"请输入内容":"請輸入內容",
+	"单次限购":"單次限購",
+	"永久限购":"永久限購",
+	"《用户协议》":"《用戶協議》",
+	"《隐私协议》":"《隱私協議》",
+	"与":"與",
+	"请先阅读并同意协议":"請先閱讀並同意協定",
+	"绑定下级通知":"綁定下級通知",
+	"购买成功通知":"購買成功通知",
+	"确认收货通知":"確認收貨通知",
+	"改价通知":"改價通知",
+	"退款成功通知":"退款成功通知",
+	"充值成功通知":"充值成功通知",
+	"积分到账通知":"積分到賬通知",
+	"佣金到账通知":"傭金到賬通知",
+	"砍价成功通知":"砍價成功通知",
+	"拼团成功通知":"拼團成功通知",
+	"拼团失败通知":"拼團失敗通知",
+	"开团成功通知":"開團成功通知",
+	"提现成功通知":"提現成功通知",
+	"提现失败通知":"提現失敗通知",
+	"充值退款通知":"充值退款通知",
+	"退款申请拒绝通知":"退款申請拒絕通知",
+	"您有新的退款待处理":"您有新的退款待處理",
+	"您有新的订单待处理":"您有新的訂單待處理",
+	"发货通知":"發貨通知",
+	"取消拼团通知":"取消拼團通知",
+	"参团成功通知":"參團成功通知",
+	"你有个新的提现申请待处理":"你有個新的提現申請待處理",
+	"你有个新的用户收货待处理":"你有個新的用戶收貨待處理",
+	"提醒付款通知":"提醒付款通知",
+	"短信验证码":"簡訊驗證碼",
+	"到店自提":"到店自提",
+	"快递配送":"快遞配送"
+}

+ 79 - 0
libs/chat.js

@@ -0,0 +1,79 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import $store from "@/store";
+import {
+	VUE_APP_WS_URL
+} from "@/utils/index.js";
+const Socket = function() {
+	let url = VUE_APP_WS_URL
+	this.ws = new WebSocket(wss(url));
+	this.ws.onopen = this.onOpen.bind(this);
+	this.ws.onerror = this.onError.bind(this);
+	this.ws.onmessage = this.onMessage.bind(this);
+	this.ws.onclose = this.onClose.bind(this);
+};
+
+function wss(wsSocketUrl) {
+	let ishttps = document.location.protocol == 'https:';
+	if (ishttps) {
+		return wsSocketUrl.replace('ws:', 'wss:');
+	} else {
+		return wsSocketUrl.replace('wss:', 'ws:');
+	}
+}
+
+Socket.prototype = {
+	vm(vm) {
+		this.vm = vm;
+	},
+	close() {
+		clearInterval(this.timer);
+		this.ws.close();
+	},
+	onOpen() {
+		this.init();
+		console.log('创建连接了!')
+		
+		this.send({
+			type: "login",
+			data: $store.state.app.token
+		});
+		this.vm.$emit("socket_open");
+	},
+	init() {
+		var that = this;
+		this.timer = setInterval(()=> {
+			that.send({
+				type: "ping"
+			});
+		}, 10000);
+	},
+	send(data) {
+		return this.ws.send(JSON.stringify(data));
+	},
+	onMessage(res) {
+		const {
+			type,
+			data = {}
+		} = JSON.parse(res.data);
+		this.vm.$emit(type, data);
+	},
+	onClose: function() {
+		clearInterval(this.timer);
+	},
+	onError: function(e) {
+		this.vm.$emit("socket_error", e);
+	}
+};
+
+Socket.prototype.constructor = Socket;
+
+export default Socket;

+ 142 - 0
libs/login.js

@@ -0,0 +1,142 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import store from "../store";
+import Cache from '../utils/cache';
+import {
+	Debounce
+} from '@/utils/validate.js'
+// #ifdef H5 || APP-PLUS
+import {
+	isWeixin
+} from "../utils";
+import auth from './wechat';
+// #endif
+
+import {
+	LOGIN_STATUS,
+	USER_INFO,
+	EXPIRES_TIME,
+	STATE_R_KEY
+} from './../config/cache';
+import Routine from '@/libs/routine';
+
+function prePage() {
+	let pages = getCurrentPages();
+	let prePage = pages[pages.length - 1];
+	// #ifndef APP-PLUS
+	return prePage.route;
+	// #endif
+	// #ifdef APP-PLUS
+	return prePage.$page.fullPath;
+	// #endif
+
+}
+
+
+
+
+export const toLogin = Debounce(_toLogin, 800)
+
+function _toLogin(push, pathLogin) {
+	// #ifdef H5
+	if (isWeixin()) {
+		if (!uni.getStorageSync('authIng')) {
+			store.commit("LOGOUT");
+		}
+	} else {
+		store.commit("LOGOUT");
+	}
+	// #endif
+	// #ifndef H5
+	store.commit("LOGOUT");
+	// #endif
+	let path = prePage();
+
+	// #ifdef H5
+	path = location.pathname + location.search;
+	// #endif
+
+	if (!pathLogin)
+		pathLogin = '/page/users/login/index'
+	Cache.set('login_back_url', path);
+	// #ifdef H5
+	if (isWeixin()) {
+		let urlData = location.pathname + location.search
+		if (urlData.indexOf('?') !== -1) {
+			urlData += '&go_longin=1';
+		} else {
+			urlData += '?go_longin=1';
+		}
+		// if (!Cache.has('snsapiKey')) {
+		// 	auth.oAuth('snsapi_base', urlData);
+		// } else {
+		// 	uni.navigateTo({
+		// 		url: '/pages/users/wechat_login/index',
+		// 	});
+		// }
+		uni.navigateTo({
+			url: '/pages/users/wechat_login/index',
+		});
+
+	} else {
+		uni.navigateTo({
+			url: '/pages/users/login/index'
+		})
+	}
+	// #endif
+
+	// #ifdef MP 
+	uni.navigateTo({
+		url: '/pages/users/wechat_login/index'
+	})
+	// Routine.getCode()
+	// 	.then(code => {
+	// 		console.log(code)
+	// 		Routine.silenceAuth(code).then(res => {
+	// 			console.log(res)
+	// 		})
+	// 	})
+	// 	.catch(err => {
+	// 		uni.hideLoading();
+	// 	});
+	// #endif
+
+	// #ifdef APP-PLUS
+	uni.navigateTo({
+		url: '/pages/users/login/index'
+	})
+	// #endif
+
+}
+
+
+export function checkLogin() {
+	let token = Cache.get(LOGIN_STATUS);
+	// let token
+	let expiresTime = Cache.get(EXPIRES_TIME);
+	// let newTime = Math.round(new Date() / 1000);
+	if (!token) {
+		uni.setStorageSync('authIng', false)
+		Cache.clear(LOGIN_STATUS);
+		Cache.clear(EXPIRES_TIME);
+		Cache.clear(USER_INFO);
+		Cache.clear(STATE_R_KEY);
+		return false;
+	} else {
+		store.commit('UPDATE_LOGIN', token);
+		let userInfo = Cache.get(USER_INFO, true);
+		if (userInfo) {
+			store.commit('UPDATE_USERINFO', userInfo);
+		}
+		return true;
+	}
+
+}

+ 99 - 0
libs/new_chat.js

@@ -0,0 +1,99 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import $store from "@/store";
+import {
+	HTTP_REQUEST_URL
+} from "@/config/app.js";
+import {
+	VUE_APP_WS_URL
+} from "@/utils/index.js";
+import {
+	getServerType
+} from '@/api/api.js';
+const Socket = function() {
+
+	// this.ws.close(this.close.bind(this));
+};
+
+
+// #ifdef H5
+function wss(wsSocketUrl) {
+	let ishttps = document.location.protocol == 'https:';
+	if (ishttps) {
+		return wsSocketUrl.replace('ws:', 'wss:');
+	} else {
+		return wsSocketUrl.replace('wss:', 'ws:');
+	}
+}
+// #endif
+
+
+
+Socket.prototype = {
+	// close() {
+	//   clearInterval(this.timer);
+	//   this.ws.close();
+	// },
+	onSocketOpen: function(my) {
+		uni.$emit('socketOpen', my)
+	},
+	init: function() {
+		var that = this;
+		this.timer = setInterval(function() {
+			that.send({
+				type: "ping"
+			});
+		}, 10000);
+	},
+	send: function(data) {
+		let datas = JSON.stringify(data)
+		return uni.sendSocketMessage({
+			data: datas
+		});
+	},
+	onMessage: function(res) {
+		const {
+			type,
+			data = {}
+		} = JSON.parse(res.data);
+		uni.$emit(type, data)
+	},
+
+	onClose: function() {
+		uni.closeSocket()
+		clearInterval(this.timer);
+		uni.$emit("socket_close");
+	},
+	onError: function(e) {
+		uni.$emit("socket_error", e);
+	},
+	close: function() {
+		uni.closeSocket();
+	},
+	onStart: function(token, form_type) {
+		let wssUrl = `${VUE_APP_WS_URL}`
+		this.ws = uni.connectSocket({
+			url: wssUrl + '?type=user&token=' + token + '&form_type=' + form_type,
+			header: {
+				'content-type': 'application/json'
+			},
+			method: 'GET',
+			success: (res) => {}
+		});
+		this.ws.onOpen(this.onSocketOpen.bind(this))
+		this.ws.onError(this.onError.bind(this));
+		this.ws.onMessage(this.onMessage.bind(this))
+		this.ws.onClose(this.onClose.bind(this));
+	}
+};
+
+Socket.prototype.constructor = Socket;
+export default Socket;

+ 42 - 0
libs/order.js

@@ -0,0 +1,42 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+let app = getApp()
+
+export function goShopDetail(item, uid) {
+	return new Promise(resolve => {
+		if (item.activity && item.activity.type === "1") {
+			uni.navigateTo({
+				url: `/pages/activity/goods_seckill_details/index?id=${item.activity.id}&time=${item.activity.time}&status=1`
+			})
+		} else if (item.activity && item.activity.type === "2") {
+			uni.navigateTo({
+				url: `/pages/activity/goods_bargain_details/index?id=${item.activity.id}&bargain=${uid}`
+			})
+		} else if (item.activity && item.activity.type === "3") {
+			uni.navigateTo({
+				url: `/pages/activity/goods_combination_details/index?id=${item.activity.id}`
+			})
+		} else {
+			resolve(item);
+		}
+	});
+}
+
+
+export function goPage() {
+	return new Promise(resolve => {
+		if (app.globalData.isIframe == false) {
+			resolve(true);
+		}else{
+			return false
+		}
+	});
+}

+ 220 - 0
libs/routine.js

@@ -0,0 +1,220 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import store from '../store';
+import {
+	checkLogin
+} from './login';
+import {
+	login,
+	routineLogin,
+	silenceAuth
+} from '../api/public';
+import Cache from '../utils/cache';
+import {
+	STATE_R_KEY,
+	USER_INFO,
+	EXPIRES_TIME,
+	LOGIN_STATUS
+} from './../config/cache';
+import {
+	mapGetters
+} from "vuex";
+class Routine {
+
+	constructor() {
+		this.scopeUserInfo = 'scope.userInfo';
+	}
+
+	async getUserCode() {
+		let isAuth = await this.isAuth(),
+			code = '';
+		if (isAuth)
+			code = await this.getCode();
+		return code;
+	}
+	// 小程序静默授权
+	// silenceAuth(code) {
+	// 	const app = getApp();
+	// 	let that = this;
+	// 	let spread = app.globalData.spid ? app.globalData.spid : '';
+	// 	return new Promise((resolve, reject) => {
+	// 		silenceAuth({
+	// 				code: code,
+	// 				spread_spid: spread,
+	// 				spread_code: app.globalData.code
+	// 			})
+	// 			.then(res => {
+	// 				if (res.data && res.data.token !== undefined) {
+	// 					uni.hideLoading();
+	// 					let time = res.data.expires_time - Math.round(new Date() / 1000);
+	// 					store.commit('LOGIN', {
+	// 						token: res.data.token,
+	// 						time: time
+	// 					});
+	// 					store.commit('SETUID', res.data.userInfo.uid);
+	// 					store.commit('UPDATE_USERINFO', res.data.userInfo);
+	// 					resolve(res)
+	// 				} else {
+	// 					reject()
+	// 					uni.navigateTo({
+	// 						url: '/pages/users/wechat_login/index'
+	// 					})
+	// 				}
+	// 			})
+	// 			.catch(err => {
+	// 				reject(err)
+	// 			});
+	// 	})
+	// }
+	/**
+	 * 获取用户信息
+	 */
+	getUserInfo() {
+		let that = this,
+			code = this.getUserCode();
+		return new Promise((resolve, reject) => {
+			uni.getUserInfo({
+				lang: 'zh_CN',
+				success(user) {
+					if (code) user.code = code;
+					resolve({
+						userInfo: user,
+						islogin: false
+					});
+				},
+				fail(res) {
+					reject(res);
+				}
+			})
+		})
+	}
+
+	/**
+	 * 新版小程序获取用户信息 2021 4.13微信小程序开始正式启用
+	 */
+	getUserProfile(code) {
+		return new Promise((resolve, reject) => {
+			uni.getUserProfile({
+				lang: 'zh_CN',
+				desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
+				success(user) {
+					if (code) user.code = code;
+					resolve({
+						userInfo: user,
+						islogin: false
+					});
+				},
+				fail(res) {
+					reject(res);
+				}
+			})
+		})
+	}
+
+	/**
+	 * 获取用户信息
+	 */
+	authorize() {
+		let that = this;
+		return new Promise((resolve, reject) => {
+			if (checkLogin())
+				return resolve({
+					userInfo: Cache.get(USER_INFO, true),
+					islogin: true,
+				});
+			uni.authorize({
+				scope: that.scopeUserInfo,
+				success() {
+					resolve({
+						islogin: false
+					});
+				},
+				fail(res) {
+					reject(res);
+				}
+			})
+		})
+	}
+
+	async getCode() {
+		let provider = await this.getProvider();
+		return new Promise((resolve, reject) => {
+			// if(Cache.has(STATE_R_KEY)){
+			// 	return resolve(Cache.get(STATE_R_KEY));
+			// }
+			uni.login({
+				provider: provider,
+				success(res) {
+					if (res.code) Cache.set(STATE_R_KEY, res.code, 10800);
+					return resolve(res.code);
+				},
+				fail() {
+					return reject(null);
+				}
+			})
+		})
+	}
+
+	/**
+	 * 获取服务供应商
+	 */
+	getProvider() {
+		return new Promise((resolve, reject) => {
+			uni.getProvider({
+				service: 'oauth',
+				success(res) {
+					resolve(res.provider);
+				},
+				fail() {
+					resolve(false);
+				}
+			});
+		});
+	}
+
+	/**
+	 * 是否授权
+	 */
+	isAuth() {
+		let that = this;
+		return new Promise((resolve, reject) => {
+			uni.getSetting({
+				success(res) {
+					if (!res.authSetting[that.scopeUserInfo]) {
+						resolve(true)
+					} else {
+						resolve(true);
+					}
+				},
+				fail() {
+					resolve(false);
+				}
+			});
+		});
+	}
+
+	authUserInfo(data) {
+		return new Promise((resolve, reject) => {
+			routineLogin(data).then(res => {
+				if (res.data.key !== undefined && res.data.key) {} else {
+					store.commit('UPDATE_USERINFO', res.data.userInfo);
+					store.commit('SETUID', res.data.userInfo.uid);
+					Cache.set(USER_INFO, res.data.userInfo);
+				}
+				return resolve(res);
+			}).catch(res => {
+				return reject(res);
+			})
+		})
+	}
+}
+
+export default new Routine();

+ 339 - 0
libs/wechat.js

@@ -0,0 +1,339 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+// #ifdef H5
+import WechatJSSDK from "@/plugin/jweixin-module/index.js";
+
+
+import {
+	getWechatConfig,
+	wechatAuth,
+	getShopConfig,
+	wechatAuthV2
+} from "@/api/public";
+import {
+	WX_AUTH,
+	STATE_KEY,
+	LOGINTYPE,
+	BACK_URL
+} from '@/config/cache';
+import {
+	parseQuery
+} from '@/utils';
+import store from '@/store';
+import Cache from '@/utils/cache';
+
+class AuthWechat {
+
+	constructor() {
+		//微信实例化对象
+		this.instance = WechatJSSDK;
+		//是否实例化
+		this.status = false;
+
+		this.initConfig = {};
+
+	}
+
+	isAndroid() {
+		let u = navigator.userAgent;
+		return u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
+	}
+
+	signLink() {
+		if (typeof window.entryUrl === 'undefined' || window.entryUrl === '') {
+			window.entryUrl = document.location.href
+		}
+		return /(Android)/i.test(navigator.userAgent) ? document.location.href : window.entryUrl;
+	}
+
+	/**
+	 * 初始化wechat(分享配置)
+	 */
+	wechat() {
+		return new Promise((resolve, reject) => {
+			// if (this.status && !this.isAndroid()) return resolve(this.instance);
+			getWechatConfig()
+				.then(res => {
+					this.instance.config(res.data);
+					this.initConfig = res.data;
+					this.status = true;
+					this.instance.ready(() => {
+						resolve(this.instance);
+					})
+				}).catch(err => {
+					this.status = false;
+					reject(err);
+				});
+		});
+	}
+
+	/**
+	 * 验证是否初始化
+	 */
+	verifyInstance() {
+		let that = this;
+		return new Promise((resolve, reject) => {
+			if (that.instance === null && !that.status) {
+				that.wechat().then(res => {
+					resolve(that.instance);
+				}).catch(() => {
+					return reject();
+				})
+			} else {
+				return resolve(that.instance);
+			}
+		})
+	}
+	// 微信公众号的共享地址
+	openAddress() {
+		return new Promise((resolve, reject) => {
+			this.wechat().then(wx => {
+				this.toPromise(wx.openAddress).then(res => {
+					resolve(res);
+				}).catch(err => {
+					reject(err);
+				});
+			}).catch(err => {
+				reject(err);
+			})
+		});
+	}
+
+	// 获取经纬度;
+	location() {
+		return new Promise((resolve, reject) => {
+			this.wechat().then(wx => {
+				this.toPromise(wx.getLocation, {
+					type: 'wgs84'
+				}).then(res => {
+					resolve(res);
+				}).catch(err => {
+					reject(err);
+				});
+			}).catch(err => {
+				reject(err);
+			})
+		});
+	}
+
+	// 使用微信内置地图查看位置接口;
+	seeLocation(config) {
+		return new Promise((resolve, reject) => {
+			this.wechat().then(wx => {
+				this.toPromise(wx.openLocation, config).then(res => {
+					resolve(res);
+				}).catch(err => {
+					reject(err);
+				});
+			}).catch(err => {
+				reject(err);
+			})
+		});
+	}
+
+	/**
+	 * 微信支付
+	 * @param {Object} config
+	 */
+	pay(config) {
+		return new Promise((resolve, reject) => {
+			this.wechat().then((wx) => {
+				this.toPromise(wx.chooseWXPay, config).then(res => {
+					resolve(res);
+				}).catch(res => {
+					reject(res);
+				});
+			}).catch(res => {
+				reject(res);
+			});
+		});
+	}
+
+	toPromise(fn, config = {}) {
+		return new Promise((resolve, reject) => {
+			fn({
+				...config,
+				success(res) {
+					resolve(res);
+				},
+				fail(err) {
+					reject(err);
+				},
+				complete(err) {
+					reject(err);
+				},
+				cancel(err) {
+					reject(err);
+				}
+			});
+		});
+	}
+
+	/**
+	 * 自动去授权
+	 */
+	oAuth(snsapiBase, url) {
+		// if (uni.getStorageSync('authIng')) return
+
+		if (uni.getStorageSync(WX_AUTH) && store.state.app.token && snsapiBase == 'snsapi_base') return;
+		let {
+			code
+		} = parseQuery();
+		let snsapiCode = uni.getStorageSync('snsapiCode')
+		if (code instanceof Array) {
+			code = code[code.length - 1]
+		}
+		if (snsapiCode instanceof Array) {
+			snsapiCode = snsapiCode[snsapiCode.length - 1]
+		}
+		if (!code || code == snsapiCode) {
+			uni.setStorageSync('authIng', true)
+			return this.toAuth(snsapiBase, url);
+		} else {
+			// if(Cache.has('snsapiKey'))
+			// 	return this.auth(code).catch(error=>{
+			// 		uni.showToast({
+			// 			title:error,
+			// 			icon:'none'
+			// 		})
+			// 	})
+		}
+	}
+
+	clearAuthStatus() {
+
+	}
+
+	/**
+	 * 授权登陆获取token
+	 * @param {Object} code
+	 */
+	auth(code) {
+		return new Promise((resolve, reject) => {
+			let loginType = Cache.get(LOGINTYPE);
+			wechatAuthV2(code, parseInt(Cache.get("spread")))
+				.then(({
+					data
+				}) => {
+					// store.commit("LOGIN", {
+					// 	token: data.token,
+					// 	time: Cache.strTotime(data.expires_time) - Cache.time()
+					// });
+					// store.commit("SETUID", data.userInfo.uid);
+					Cache.set(WX_AUTH, code);
+					Cache.clear(STATE_KEY);
+					resolve(data);
+				})
+				.catch(reject);
+		});
+	}
+
+	/**
+	 * 获取跳转授权后的地址
+	 * @param {Object} appId
+	 */
+	getAuthUrl(appId, snsapiBase, backUrl) {
+		if (backUrl) {
+			let backUrlArr = backUrl.split('&');
+			let newUrlArr = backUrlArr.filter(item => {
+				if (item.indexOf('code=') === -1) {
+					return item;
+				}
+			});
+			backUrl = newUrlArr.join('&');
+		}
+
+		let url = `${location.origin}${backUrl}`
+		if (url.indexOf('?') === -1) {
+			url = url + '?'
+		} else {
+			url = url + '&'
+		}
+		const redirect_uri = encodeURIComponent(
+			`${url}scope=${snsapiBase}&back_url=` +
+			encodeURIComponent(
+				encodeURIComponent(
+					uni.getStorageSync(BACK_URL) ?
+					uni.getStorageSync(BACK_URL) :
+					location.pathname + location.search
+				)
+			)
+		);
+		uni.removeStorageSync(BACK_URL);
+		const state = encodeURIComponent(
+			("" + Math.random()).split(".")[1] + "authorizestate"
+		);
+		uni.setStorageSync(STATE_KEY, state);
+		if (snsapiBase === 'snsapi_base') {
+			return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_base&state=${state}&connect_redirect=1#wechat_redirect`;
+		} else {
+			return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=${state}&connect_redirect=1#wechat_redirect`;
+		}
+
+	}
+
+	/**
+	 * 跳转自动登陆
+	 */
+	toAuth(snsapiBase, backUrl) {
+		let that = this;
+		this.wechat().then(wx => {
+			location.href = this.getAuthUrl(that.initConfig.appId, snsapiBase, backUrl);
+		})
+	}
+
+	/**
+	 * 绑定事件
+	 * @param {Object} name 事件名
+	 * @param {Object} config 参数
+	 */
+	wechatEvevt(name, config) {
+		let that = this;
+		return new Promise((resolve, reject) => {
+			let configDefault = {
+				fail(res) {
+					if (that.instance) return reject({
+						is_ready: true,
+						wx: that.instance
+					});
+					that.verifyInstance().then(wx => {
+						return reject({
+							is_ready: true,
+							wx: wx
+						});
+					})
+				},
+				success(res) {
+					return resolve(res, 2222);
+				}
+			};
+			Object.assign(configDefault, config);
+			that.wechat().then(wx => {
+				if (typeof name === 'object') {
+					name.forEach(item => {
+						wx[item] && wx[item](configDefault)
+					})
+				} else {
+					wx[name] && wx[name](configDefault)
+				}
+			})
+		});
+	}
+
+
+	isWeixin() {
+		return navigator.userAgent.toLowerCase().indexOf("micromessenger") !== -1;
+	}
+
+}
+
+export default new AuthWechat();
+// #endif

+ 88 - 31
main.js

@@ -1,33 +1,90 @@
-import Vue from "vue";
-import App from "./App";
-import {
-	router,
-	RouterMount
-} from "@/shopro/router";
-import store from "@/shopro/store";
-import uView from "uview-ui";
-import shopro from "@/shopro";
-
-
-async function bootstrap() {
-	App.mpType = "app";
-	//引入路由
-	Vue.use(router);
-	// 引入全局uView
-	Vue.use(uView);
-	// 加载shopro
-	Vue.use(shopro);
-
-	const app = new Vue({
-		store,
-		...App
-	});
-	// #ifdef H5
-	RouterMount(app, router, "#app");
-	// #endif
-	// #ifndef H5
-	app.$mount();
-	// #endif
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import Vue from 'vue'
+import App from './App'
+import store from './store'
+import Cache from './utils/cache'
+import util from 'utils/util'
+import configs from './config/app.js'
+import socket from './libs/new_chat.js'
+import i18n from './utils/lang.js';
+Vue.prototype.$util = util;
+Vue.prototype.$config = configs;
+Vue.prototype.$Cache = Cache;
+Vue.prototype.$eventHub = new Vue();
+Vue.prototype.$socket = new socket();
+Vue.config.productionTip = false
+import pageLoading from './components/pageLoading.vue'
+import skeleton from './components/skeleton/index.vue'
+
+Vue.component('skeleton', skeleton)
+Vue.component('pageLoading',pageLoading) 
+
+/* uni.scss */
+import uView from '@/uni_modules/uview-ui'
+Vue.use(uView)
+uni.$u.config.unit = 'rpx'
+// #ifdef H5
+
+
+import { parseQuery } from "./utils";
+import Auth from './libs/wechat';
+import { SPREAD } from './config/cache';
+Vue.prototype.$wechat = Auth;
+
+
+
+let cookieName = "VCONSOLE",
+	query = parseQuery(),
+	urlSpread = query["spread"],
+	vconsole = query[cookieName.toLowerCase()],
+	md5Crmeb = "b14d1e9baeced9bb7525ab19ee35f2d2", //CRMEB MD5 加密开启vconsole模式
+	md5UnCrmeb = "3dca2162c4e101b7656793a1af20295c"; //UN_CREMB MD5 加密关闭vconsole模式
+
+if (urlSpread !== undefined) {
+	var spread = Cache.get(SPREAD);
+	urlSpread = parseInt(urlSpread);
+	if (!Number.isNaN(urlSpread) && spread !== urlSpread) {
+		Cache.set("spread", urlSpread || 0);
+	} else if (spread === 0 || typeof spread !== "number") {
+		Cache.set("spread", urlSpread || 0);
+	}
 }
 
-bootstrap();
+if (vconsole !== undefined) {
+  if (vconsole === md5UnCrmeb && Cache.has(cookieName))
+	  Cache.clear(cookieName);
+} else vconsole = Cache.get(cookieName);
+
+import VConsole from './pages/extension/components/vconsole.min.js'
+
+if (vconsole !== undefined && vconsole === md5Crmeb) {
+	Cache.set(cookieName, md5Crmeb, 3600);
+	let vConsole = new VConsole();
+}
+
+// let snsapiBase = 'snsapi_base';
+// Auth.isWeixin() && Auth.oAuth(snsapiBase);
+
+
+//全局路由前置守卫
+// #endif
+
+App.mpType = 'app'
+
+
+const app = new Vue({
+    ...App,
+	store,
+	Cache,
+	i18n,
+})
+app.$mount();

+ 95 - 101
manifest.json

@@ -1,118 +1,126 @@
 {
-    "name" : "中宏商城",
-    "appid" : "__UNI__5B2A826",
-    "description" : "中宏商城",
-    "versionName" : "1.3.8",
-    "versionCode" : 137,
+    "name" : "CRMEB客户管理电商商城系统前端模板uni-app版",
+    "appid" : "__UNI__A901EE0",
+    "description" : "CRMEB标准版",
+    "versionName" : "1.0.0",
+    "versionCode" : 100,
     "transformPx" : false,
     "app-plus" : {
-        // APP-VUE分包,可提APP升启动速度,2.7.12开始支持,兼容微信小程序分包方案,默认关闭
-        "optimization" : {
-            "subPackages" : true
-        },
-        "runmode" : "liberate", // 开启分包优化后,必须配置资源释放模式
-        "safearea" : {
-            //APP底部安全区域
-            "background" : "#fff",
-            "bottom" : {
-                "offset" : "auto"
-            }
-        },
+        "usingComponents" : true,
+        "nvueCompiler" : "uni-app",
         "splashscreen" : {
-            "alwaysShowBeforeRender" : true,
-            "waiting" : true,
+            "alwaysShowBeforeRender" : false,
+            "waiting" : false,
             "autoclose" : true,
-            "delay" : 200
+            "delay" : 0
         },
-        "usingComponents" : true,
-        "nvueCompiler" : "uni-app",
-        "compilerVersion" : 3,
         "modules" : {
-            "Geolocation" : {},
-            "Maps" : {},
             "Payment" : {},
             "Share" : {},
-            "VideoPlayer" : {}
+            "OAuth" : {}
+        },
+        "safearea" : {
+            "bottom" : {
+                "offset" : "none"
+            }
         },
         "distribute" : {
             "android" : {
                 "permissions" : [
-                    "<uses-feature android:name=\"android.hardware.camera\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
                     "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
                     "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
                     "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
                     "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
                     "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
-                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.CAPTURE_AUDIO_OUTPUT\"/>",
                     "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
                     "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
                     "<uses-permission android:name=\"android.permission.INTERNET\"/>",
                     "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
                     "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
                     "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
                     "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
                     "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
                     "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
                     "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
                     "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
                 ],
-                "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ]
+                "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ],
+                "permissionExternalStorage" : {
+                    "request" : "none",
+                    "prompt" : "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
+                },
+                "permissionPhoneState" : {
+                    "request" : "none"
+                }
             },
             "ios" : {
                 "capabilities" : {
                     "entitlements" : {
-                        "com.apple.developer.associated-domains" : [ "" ]
+                        "com.apple.developer.associated-domains" : [ "applinks:", "applinks:demo26.crmeb.net", "applinks:bzapp.crmeb.net" ]
                     }
                 },
                 "privacyDescription" : {
-                    "NSLocationAlwaysAndWhenInUseUsageDescription" : "需要同意获取您的位置信息才能展示附近信息",
-                    "NSLocationAlwaysUsageDescription" : "需要同意获取您的位置信息才能展示附近信息",
-                    "NSLocationWhenInUseUsageDescription" : "需要同意获取您的位置信息才能展示附近信息",
-                    "NSPhotoLibraryAddUsageDescription" : "需要同意访问您的相册才能保存图片",
-                    "NSPhotoLibraryUsageDescription" : "需要同意访问您的相册才能选取图片",
-                    "NSCameraUsageDescription" : "需要同意访问您的摄像头才能拍摄照片",
-                    "NSUserTrackingUsageDescription" : "请放心,开启权限不会获取您在其他站点的隐私信息,该权限仅用于标识设备并保障服务安全与提升浏览体验"
-                }
+                    "NSLocationWhenInUseUsageDescription" : "根据客户地理位置推荐最近门店",
+                    "NSPhotoLibraryUsageDescription" : "上传用户头像保存分享海报",
+                    "NSPhotoLibraryAddUsageDescription" : "上传用户头像保存分享海报",
+                    "NSLocationAlwaysAndWhenInUseUsageDescription" : "根据客户地理位置推荐最近门店",
+                    "NSLocationAlwaysUsageDescription" : "根据客户地理位置推荐最近门店",
+                    "NSCameraUsageDescription" : "上传用户头像保存分享海报"
+                },
+                "idfa" : false
             },
             "sdkConfigs" : {
-                "ad" : {},
                 "payment" : {
+                    "alipay" : {
+                        "__platform__" : [ "ios", "android" ]
+                    },
                     "weixin" : {
                         "__platform__" : [ "ios", "android" ],
                         "appid" : "wx8b2b4e2abfd0744f",
-                        "UniversalLinks" : ""
+                        "UniversalLinks" : "https://bzapp.crmeb.net/uni-universallinks/__UNI__A3F1ED4/"
                     }
                 },
-                "geolocation" : {
+                "share" : {
+                    "weixin" : {
+                        "appid" : "wx8b2b4e2abfd0744f",
+                        "UniversalLinks" : "https://bzapp.crmeb.net/uni-universallinks/__UNI__A3F1ED4/"
+                    }
+                },
+                "push" : {},
+                "maps" : {
                     "amap" : {
-                        "__platform__" : [ "android" ],
-                        "appkey_ios" : "",
-                        "appkey_android" : ""
+                        "appkey_ios" : "aeb768547b9d752891e37e1ca0a2b66d",
+                        "appkey_android" : "41ec5c3f4d110ce02a326210fe147be8"
                     }
                 },
-                "maps" : {},
                 "oauth" : {
+                    "apple" : {},
                     "weixin" : {
                         "appid" : "wx8b2b4e2abfd0744f",
                         "appsecret" : "",
-                        "UniversalLinks" : ""
-                    },
-                    "apple" : {}
+                        "UniversalLinks" : "https://bzapp.crmeb.net/uni-universallinks/__UNI__A3F1ED4/"
+                    }
                 },
-                "share" : {
-                    "weixin" : {
-                        "appid" : "wx8b2b4e2abfd0744f",
-                        "UniversalLinks" : ""
+                "ad" : {},
+                "geolocation" : {
+                    "amap" : {
+                        "__platform__" : [ "ios", "android" ],
+                        "appkey_ios" : "aeb768547b9d752891e37e1ca0a2b66d",
+                        "appkey_android" : "41ec5c3f4d110ce02a326210fe147be8"
                     }
                 },
-                "push" : {}
+                "statics" : {
+                    "google" : {
+                        "config_ios" : "",
+                        "config_android" : ""
+                    }
+                }
+            },
+            "splashscreen" : {
+                "androidStyle" : "common",
+                "iosStyle" : "common",
+                "useOriginalMsgbox" : true
             },
             "icons" : {
                 "android" : {
@@ -146,9 +154,6 @@
                     }
                 }
             }
-        },
-        "kernel" : {
-            "ios" : "WKWebview" //或者 "WKWebview"  
         }
     },
     "quickapp" : {},
@@ -156,68 +161,57 @@
         "appid" : "wx8b2b4e2abfd0744f",
         "setting" : {
             "urlCheck" : false,
-            "es6" : true, //消除大多数样式警告
             "minified" : true,
             "postcss" : true,
-            "checkSiteMap" : false // 关闭页面索引检测
-        },
-        "optimization" : {
-            "subPackages" : true
+            "es6" : true
         },
-        "plugins" : {},
-        //这段代码,需要放到plugins中。
-        //只有后台开通小程序直播功能权限,才可以打开,不然报错,程序无法运行。
-        // "live-player-plugin": {
-        // 	"version": "1.3.2", // 注意填写该直播组件最新版本号,微信开发者工具调试时可获取最新版本号
-        // 	"provider": "wx2b03c6e691cd7370" // 必须填该直播组件appid,该示例值即为直播组件appid
-        // }
-        "usingComponents" : true,
         "permission" : {
             "scope.userLocation" : {
-                "desc" : "计算附近商家位置"
+                "desc" : "你的位置信息将用于和门店的距离长度"
             }
-        }
+        },
+        "usingComponents" : true
     },
     "mp-alipay" : {
-        "usingComponents" : true,
-        "component2" : true
-    },
-    "mp-qq" : {
-        "appid" : ""
+        "usingComponents" : true
     },
     "mp-baidu" : {
-        "usingComponents" : true,
-        "appid" : ""
+        "usingComponents" : true
     },
     "mp-toutiao" : {
-        "usingComponents" : true,
-        "appid" : ""
+        "usingComponents" : true
     },
     "h5" : {
-        "template" : "template.h5.html",
+        "devServer" : {
+            "https" : false
+        },
         "router" : {
             "mode" : "history",
             "base" : ""
         },
-        "optimization" : {
-            "treeShaking" : {
-                "enable" : true
-            }
-        },
-        "title" : "中宏商城",
-        "devServer" : {
-            "https" : false,
-            "port" : ""
-        },
+        "domain" : "",
         "sdkConfigs" : {
             "maps" : {
                 "qqmap" : {
-                    "key" : ""
+                    "key" : "NO7BZ-APDKP-UCBD7-VT7CX-R5UZK-JBF2W"
                 }
             }
         },
-        "domain" : ""
+        "optimization" : {
+            "treeShaking" : {
+                "enable" : true
+            }
+        },
+        "async" : {
+            "timeout" : 200000
+        },
+        "title" : "加载中"
+    },
+    "plus" : {
+        "statusbar" : {
+            "immersed" : true
+        }
     },
-    "_spaceID" : "",
+    "_spaceID" : "679f0930-8f60-425c-9033-8c135f397ea5",
     "vueVersion" : "2"
 }

+ 37 - 0
mixins/SendVerifyCode.js

@@ -0,0 +1,37 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+export default {
+  data() {
+    return {
+      disabled: false,
+      text: this.$t('验证码')
+    };
+  },
+  methods: {
+    sendCode() {
+      if (this.disabled) return;
+      this.disabled = true;
+      let n = 60;
+      this.text = this.$t('剩余') + n + "s";
+      const run = setInterval(() => {
+        n = n - 1;
+        if (n < 0) {
+          clearInterval(run);
+        }
+        this.text = this.$t('剩余') + n + "s";
+        if (this.text < this.$t('剩余') + 0 + "s") {
+          this.disabled = false;
+          this.text = this.$t('重新获取');
+        }
+      }, 1000);
+    }
+  }
+};

+ 26 - 0
mixins/color.js

@@ -0,0 +1,26 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+export default {
+	data() {
+		return {
+			colorStyle: '',
+			colorStatus: ''
+		};
+	},
+	created() {
+		this.colorStyle = uni.getStorageSync('viewColor')
+		uni.$on('ok', (data, status) => {
+			this.colorStyle = data
+			this.colorStatus = status
+		})
+	},
+	methods: {}
+};

+ 220 - 0
mixins/sharePoster.js

@@ -0,0 +1,220 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+import {
+	imageBase64
+} from "@/api/public";
+import {
+	getProductCode
+} from "@/api/store.js";
+import i18n from '../utils/lang.js';
+let sysHeight = uni.getSystemInfoSync().statusBarHeight + 'px';
+export const sharePoster = {
+	data() {
+		return {
+			//二维码参数
+			codeShow: false,
+			cid: '1',
+			codeVal: "", // 要生成的二维码值
+			size: 200, // 二维码大小
+			unit: 'upx', // 单位
+			background: '#FFF', // 背景色
+			foreground: '#000', // 前景色
+			pdground: '#000', // 角标色
+			codeIcon: '', // 二维码图标
+			iconsize: 40, // 二维码图标大小
+			lv: 3, // 二维码容错级别 , 一般不用设置,默认就行
+			onval: true, // val值变化时自动重新生成二维码
+			loadMake: true, // 组件加载完成后自动生成二维码
+			base64Show: 0,
+			shareQrcode: 0,
+			followCode: '',
+			selectSku: {},
+			currentPage: false,
+			sysHeight: sysHeight,
+			isShow: 0,
+			storeImageBase64: ''
+		};
+	},
+	methods: {
+		qrR(res) {
+			// #ifdef H5
+			if (!this.$wechat.isWeixin() || this.shareQrcode != '1') {
+				this.PromotionCode = res;
+				this.followCode = ''
+			}
+			// #endif
+			// #ifdef APP-PLUS
+			this.PromotionCode = res;
+			// #endif
+		},
+		getImageBase64() {
+			let that = this;
+			imageBase64(that.storeImage, '')
+				.then((res) => {
+					that.storeImageBase64 = res.data.image;
+					// that.PromotionCode = res.data.code;
+				})
+				.catch(() => {});
+		},
+		/**
+		 * 生成海报
+		 */
+		goPoster() {
+			let that = this;
+			that.posters = false;
+			that.$set(that, "canvasStatus", true);
+			let arr2
+			// #ifdef MP
+			arr2 = [that.posterbackgd, that.storeImage, that.PromotionCode];
+			if (that.isDown)
+				return that.$util.Tips({
+					title: i18n.t(`正在下载海报,请稍后再试`),
+				});
+			// #endif
+			// #ifdef H5 || APP-PLUS
+			arr2 = [that.posterbackgd, that.storeImageBase64, that.PromotionCode];
+			if (!that.storeImageBase64)
+				return that.$util.Tips({
+					title: i18n.t(`正在下载海报,请稍后再试`),
+				});
+			// #endif
+			uni.getImageInfo({
+				src: that.PromotionCode,
+				fail: function(res) {
+					// #ifdef H5
+					return that.$util.Tips({
+						title: res,
+					});
+					// #endif
+					// #ifdef MP
+					return that.$util.Tips({
+						title: i18n.t(`正在下载海报,请稍后再试`),
+					});
+					// #endif
+				},
+				success() {
+					if (arr2[2] == "") {
+						//海报二维码不存在则从新下载
+						that.downloadFilePromotionCode(function(msgPromotionCode) {
+							arr2[2] = msgPromotionCode;
+							if (arr2[2] == "")
+								return that.$util.Tips({
+									title: i18n.t(`海报二维码生成失败`),
+								});
+							that.$util.PosterCanvas(
+								arr2,
+								that.storeInfo.store_name,
+								that.storeInfo.price,
+								that.storeInfo.ot_price,
+								function(tempFilePath) {
+									that.$set(that, "posterImage", tempFilePath);
+									that.$set(that, "posterImageStatus", true);
+									that.$set(that, "canvasStatus", false);
+									that.$set(that, "actionSheetHidden", !that
+										.actionSheetHidden);
+								}
+							);
+						});
+					} else {
+						//生成推广海报
+						that.$nextTick(e => {
+							that.$util.PosterCanvas(
+								arr2,
+								that.storeInfo.store_name,
+								that.storeInfo.price,
+								that.storeInfo.ot_price,
+								function(tempFilePath) {
+									that.$set(that, "posterImage", tempFilePath);
+									that.$set(that, "posterImageStatus", true);
+									that.$set(that, "canvasStatus", false);
+									that.$set(that, "actionSheetHidden", !that
+										.actionSheetHidden);
+								}
+							);
+						})
+
+					}
+				},
+			});
+		},
+		//替换安全域名
+		setDomain(url) {
+			url = url ? url.toString() : "";
+			//本地调试打开,生产请注销
+			if (url.indexOf("https://") > -1) return url;
+			else return url.replace("http://", "https://");
+		},
+		//获取海报产品图
+		downloadFilestoreImage() {
+			let that = this;
+			uni.downloadFile({
+				url: that.setDomain(that.storeInfo.image),
+				success: function(res) {
+					that.storeImage = res.tempFilePath;
+					that.storeImageBase64 = res.tempFilePath;
+				},
+				fail: function() {
+					return that.$util.Tips({
+						title: "",
+					});
+					that.storeImage = "";
+				},
+			});
+		},
+		/**
+		 * 获取产品分销二维码
+		 * @param function successFn 下载完成回调
+		 *
+		 */
+		downloadFilePromotionCode(successFn) {
+			let that = this;
+			// #ifdef MP
+			getProductCode(that.id)
+				.then((res) => {
+					uni.downloadFile({
+						url: that.setDomain(res.data.code),
+						success: function(res) {
+							that.$set(that, "isDown", false);
+							that.$set(that, "PromotionCode", res.tempFilePath)
+							if (typeof successFn == "function")
+								successFn && successFn(res.tempFilePath);
+						},
+						fail: function() {
+							that.$set(that, "isDown", false);
+							that.$set(that, "PromotionCode", "");
+						},
+					});
+				})
+				.catch((err) => {
+					that.$set(that, "isDown", false);
+					that.$set(that, "PromotionCode", "");
+					return that.$util.Tips({
+						title: err,
+					});
+				});
+			// #endif
+			// #ifdef APP-PLUS
+			uni.downloadFile({
+				url: that.setDomain(that.PromotionCode),
+				success: function(res) {
+					that.$set(that, "isDown", false);
+					if (typeof successFn == "function")
+						successFn && successFn(res.tempFilePath);
+					else that.$set(that, "PromotionCode", res.tempFilePath);
+				},
+				fail: function() {
+					that.$set(that, "isDown", false);
+					that.$set(that, "PromotionCode", "");
+				},
+			});
+			// #endif
+		},
+	}
+};

+ 1991 - 218
package-lock.json

@@ -1,220 +1,1993 @@
 {
-	"name": "shopro-plus",
-	"version": "1.0.0",
-	"lockfileVersion": 2,
-	"requires": true,
-	"packages": {
-		"": {
-			"name": "shopro-plus",
-			"version": "1.0.0",
-			"license": "ISC",
-			"dependencies": {
-				"jweixin-module": "^1.6.0",
-				"uni-read-pages": "^1.0.5",
-				"uni-simple-router": "^2.0.6",
-				"vconsole": "^3.7.0"
-			},
-			"devDependencies": {}
-		},
-		"node_modules/_@babel_runtime@7.19.4@@babel": {},
-		"node_modules/_@babel_runtime@7.19.4@@babel/runtime": {
-			"name": "@babel/runtime",
-			"version": "7.19.4",
-			"license": "MIT",
-			"dependencies": {
-				"regenerator-runtime": "^0.13.4"
-			},
-			"engines": {
-				"node": ">=6.9.0"
-			}
-		},
-		"node_modules/_@babel_runtime@7.19.4@@babel/runtime/node_modules/regenerator-runtime": {
-			"resolved": "node_modules/_regenerator-runtime@0.13.10@regenerator-runtime",
-			"link": true
-		},
-		"node_modules/_copy-text-to-clipboard@3.0.1@copy-text-to-clipboard": {
-			"name": "copy-text-to-clipboard",
-			"version": "3.0.1",
-			"license": "MIT",
-			"engines": {
-				"node": ">=12"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
-			}
-		},
-		"node_modules/_core-js@3.25.5@core-js": {
-			"name": "core-js",
-			"version": "3.25.5",
-			"hasInstallScript": true,
-			"license": "MIT",
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/core-js"
-			}
-		},
-		"node_modules/_jweixin-module@1.6.0@jweixin-module": {
-			"name": "jweixin-module",
-			"version": "1.6.0",
-			"license": "ISC"
-		},
-		"node_modules/_mutation-observer@1.0.3@mutation-observer": {
-			"name": "mutation-observer",
-			"version": "1.0.3"
-		},
-		"node_modules/_regenerator-runtime@0.13.10@regenerator-runtime": {
-			"name": "regenerator-runtime",
-			"version": "0.13.10",
-			"license": "MIT"
-		},
-		"node_modules/_uni-read-pages@1.0.5@uni-read-pages": {
-			"name": "uni-read-pages",
-			"version": "1.0.5",
-			"hasInstallScript": true,
-			"license": "ISC"
-		},
-		"node_modules/_uni-simple-router@2.0.7@uni-simple-router": {
-			"name": "uni-simple-router",
-			"version": "2.0.7",
-			"license": "MIT"
-		},
-		"node_modules/_vconsole@3.14.7@vconsole": {
-			"name": "vconsole",
-			"version": "3.14.7",
-			"license": "MIT",
-			"dependencies": {
-				"@babel/runtime": "^7.17.2",
-				"copy-text-to-clipboard": "^3.0.1",
-				"core-js": "^3.11.0",
-				"mutation-observer": "^1.0.3"
-			}
-		},
-		"node_modules/_vconsole@3.14.7@vconsole/node_modules/@babel/runtime": {
-			"resolved": "node_modules/_@babel_runtime@7.19.4@@babel/runtime",
-			"link": true
-		},
-		"node_modules/_vconsole@3.14.7@vconsole/node_modules/copy-text-to-clipboard": {
-			"resolved": "node_modules/_copy-text-to-clipboard@3.0.1@copy-text-to-clipboard",
-			"link": true
-		},
-		"node_modules/_vconsole@3.14.7@vconsole/node_modules/core-js": {
-			"resolved": "node_modules/_core-js@3.25.5@core-js",
-			"link": true
-		},
-		"node_modules/_vconsole@3.14.7@vconsole/node_modules/mutation-observer": {
-			"resolved": "node_modules/_mutation-observer@1.0.3@mutation-observer",
-			"link": true
-		},
-		"node_modules/jweixin-module": {
-			"resolved": "node_modules/_jweixin-module@1.6.0@jweixin-module",
-			"link": true
-		},
-		"node_modules/uni-read-pages": {
-			"resolved": "node_modules/_uni-read-pages@1.0.5@uni-read-pages",
-			"link": true
-		},
-		"node_modules/uni-simple-router": {
-			"resolved": "node_modules/_uni-simple-router@2.0.7@uni-simple-router",
-			"link": true
-		},
-		"node_modules/vconsole": {
-			"resolved": "node_modules/_vconsole@3.14.7@vconsole",
-			"link": true
-		}
-	},
-	"dependencies": {
-		"_@babel_runtime@7.19.4@@babel": {},
-		"_copy-text-to-clipboard@3.0.1@copy-text-to-clipboard": {
-			"version": "npm:copy-text-to-clipboard@3.0.1"
-		},
-		"_core-js@3.25.5@core-js": {
-			"version": "npm:core-js@3.25.5"
-		},
-		"_jweixin-module@1.6.0@jweixin-module": {
-			"version": "npm:jweixin-module@1.6.0"
-		},
-		"_mutation-observer@1.0.3@mutation-observer": {
-			"version": "npm:mutation-observer@1.0.3"
-		},
-		"_regenerator-runtime@0.13.10@regenerator-runtime": {
-			"version": "npm:regenerator-runtime@0.13.10"
-		},
-		"_uni-read-pages@1.0.5@uni-read-pages": {
-			"version": "npm:uni-read-pages@1.0.5"
-		},
-		"_uni-simple-router@2.0.7@uni-simple-router": {
-			"version": "npm:uni-simple-router@2.0.7"
-		},
-		"_vconsole@3.14.7@vconsole": {
-			"version": "npm:vconsole@3.14.7",
-			"requires": {
-				"@babel/runtime": "^7.17.2",
-				"copy-text-to-clipboard": "^3.0.1",
-				"core-js": "^3.11.0",
-				"mutation-observer": "^1.0.3"
-			},
-			"dependencies": {
-				"@babel/runtime": {
-					"version": "file:node_modules/_@babel_runtime@7.19.4@@babel/runtime",
-					"requires": {
-						"regenerator-runtime": "^0.13.4"
-					},
-					"dependencies": {
-						"regenerator-runtime": {
-							"version": "file:node_modules/_regenerator-runtime@0.13.10@regenerator-runtime"
-						}
-					}
-				},
-				"copy-text-to-clipboard": {
-					"version": "file:node_modules/_copy-text-to-clipboard@3.0.1@copy-text-to-clipboard"
-				},
-				"core-js": {
-					"version": "file:node_modules/_core-js@3.25.5@core-js"
-				},
-				"mutation-observer": {
-					"version": "file:node_modules/_mutation-observer@1.0.3@mutation-observer"
-				}
-			}
-		},
-		"jweixin-module": {
-			"version": "file:node_modules/_jweixin-module@1.6.0@jweixin-module"
-		},
-		"uni-read-pages": {
-			"version": "file:node_modules/_uni-read-pages@1.0.5@uni-read-pages"
-		},
-		"uni-simple-router": {
-			"version": "file:node_modules/_uni-simple-router@2.0.7@uni-simple-router"
-		},
-		"vconsole": {
-			"version": "file:node_modules/_vconsole@3.14.7@vconsole",
-			"requires": {
-				"@babel/runtime": "^7.17.2",
-				"copy-text-to-clipboard": "^3.0.1",
-				"core-js": "^3.11.0",
-				"mutation-observer": "^1.0.3"
-			},
-			"dependencies": {
-				"@babel/runtime": {
-					"version": "file:node_modules/_@babel_runtime@7.19.4@@babel/runtime",
-					"requires": {
-						"regenerator-runtime": "^0.13.4"
-					},
-					"dependencies": {
-						"regenerator-runtime": {
-							"version": "file:node_modules/_regenerator-runtime@0.13.10@regenerator-runtime"
-						}
-					}
-				},
-				"copy-text-to-clipboard": {
-					"version": "file:node_modules/_copy-text-to-clipboard@3.0.1@copy-text-to-clipboard"
-				},
-				"core-js": {
-					"version": "file:node_modules/_core-js@3.25.5@core-js"
-				},
-				"mutation-observer": {
-					"version": "file:node_modules/_mutation-observer@1.0.3@mutation-observer"
-				}
-			}
-		}
-	}
+    "name": "saber-weixin",
+    "version": "v4.4.5",
+    "lockfileVersion": 2,
+    "requires": true,
+    "packages": {
+        "": {
+            "version": "v4.4.5",
+            "devDependencies": {
+                "sass": "^1.55.0",
+                "sass-loader": "^13.1.0"
+            }
+        },
+        "node_modules/@jridgewell/gen-mapping": {
+            "version": "0.3.2",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+            "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@jridgewell/set-array": "^1.0.1",
+                "@jridgewell/sourcemap-codec": "^1.4.10",
+                "@jridgewell/trace-mapping": "^0.3.9"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            }
+        },
+        "node_modules/@jridgewell/resolve-uri": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+            "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=6.0.0"
+            }
+        },
+        "node_modules/@jridgewell/set-array": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+            "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=6.0.0"
+            }
+        },
+        "node_modules/@jridgewell/source-map": {
+            "version": "0.3.2",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.2.tgz",
+            "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@jridgewell/gen-mapping": "^0.3.0",
+                "@jridgewell/trace-mapping": "^0.3.9"
+            }
+        },
+        "node_modules/@jridgewell/sourcemap-codec": {
+            "version": "1.4.14",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+            "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/@jridgewell/trace-mapping": {
+            "version": "0.3.17",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+            "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@jridgewell/resolve-uri": "3.1.0",
+                "@jridgewell/sourcemap-codec": "1.4.14"
+            }
+        },
+        "node_modules/@types/eslint": {
+            "version": "8.4.7",
+            "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.4.7.tgz",
+            "integrity": "sha512-ehM7cCt2RSFs42mb+lcmhFT9ouIlV92PuaeRGn8N8c98oMjG4Z5pJHA9b1QiCcuqnbPSHcyfiD3mlhqMaHsQIw==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@types/estree": "*",
+                "@types/json-schema": "*"
+            }
+        },
+        "node_modules/@types/eslint-scope": {
+            "version": "3.7.4",
+            "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
+            "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@types/eslint": "*",
+                "@types/estree": "*"
+            }
+        },
+        "node_modules/@types/estree": {
+            "version": "0.0.51",
+            "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-0.0.51.tgz",
+            "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/@types/json-schema": {
+            "version": "7.0.11",
+            "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz",
+            "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/@types/node": {
+            "version": "18.11.3",
+            "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.11.3.tgz",
+            "integrity": "sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/@webassemblyjs/ast": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.1.tgz",
+            "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@webassemblyjs/helper-numbers": "1.11.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+            }
+        },
+        "node_modules/@webassemblyjs/floating-point-hex-parser": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
+            "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/@webassemblyjs/helper-api-error": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
+            "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/@webassemblyjs/helper-buffer": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
+            "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/@webassemblyjs/helper-numbers": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
+            "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@webassemblyjs/floating-point-hex-parser": "1.11.1",
+                "@webassemblyjs/helper-api-error": "1.11.1",
+                "@xtuc/long": "4.2.2"
+            }
+        },
+        "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
+            "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/@webassemblyjs/helper-wasm-section": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
+            "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/helper-buffer": "1.11.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+                "@webassemblyjs/wasm-gen": "1.11.1"
+            }
+        },
+        "node_modules/@webassemblyjs/ieee754": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
+            "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@xtuc/ieee754": "^1.2.0"
+            }
+        },
+        "node_modules/@webassemblyjs/leb128": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
+            "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@xtuc/long": "4.2.2"
+            }
+        },
+        "node_modules/@webassemblyjs/utf8": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
+            "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/@webassemblyjs/wasm-edit": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
+            "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/helper-buffer": "1.11.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+                "@webassemblyjs/helper-wasm-section": "1.11.1",
+                "@webassemblyjs/wasm-gen": "1.11.1",
+                "@webassemblyjs/wasm-opt": "1.11.1",
+                "@webassemblyjs/wasm-parser": "1.11.1",
+                "@webassemblyjs/wast-printer": "1.11.1"
+            }
+        },
+        "node_modules/@webassemblyjs/wasm-gen": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
+            "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+                "@webassemblyjs/ieee754": "1.11.1",
+                "@webassemblyjs/leb128": "1.11.1",
+                "@webassemblyjs/utf8": "1.11.1"
+            }
+        },
+        "node_modules/@webassemblyjs/wasm-opt": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
+            "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/helper-buffer": "1.11.1",
+                "@webassemblyjs/wasm-gen": "1.11.1",
+                "@webassemblyjs/wasm-parser": "1.11.1"
+            }
+        },
+        "node_modules/@webassemblyjs/wasm-parser": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
+            "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/helper-api-error": "1.11.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+                "@webassemblyjs/ieee754": "1.11.1",
+                "@webassemblyjs/leb128": "1.11.1",
+                "@webassemblyjs/utf8": "1.11.1"
+            }
+        },
+        "node_modules/@webassemblyjs/wast-printer": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
+            "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@xtuc/long": "4.2.2"
+            }
+        },
+        "node_modules/@xtuc/ieee754": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+            "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/@xtuc/long": {
+            "version": "4.2.2",
+            "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz",
+            "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/acorn": {
+            "version": "8.8.0",
+            "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.0.tgz",
+            "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+            "dev": true,
+            "peer": true,
+            "bin": {
+                "acorn": "bin/acorn"
+            },
+            "engines": {
+                "node": ">=0.4.0"
+            }
+        },
+        "node_modules/acorn-import-assertions": {
+            "version": "1.8.0",
+            "resolved": "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
+            "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
+            "dev": true,
+            "peer": true,
+            "peerDependencies": {
+                "acorn": "^8"
+            }
+        },
+        "node_modules/ajv": {
+            "version": "6.12.6",
+            "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
+            "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "fast-deep-equal": "^3.1.1",
+                "fast-json-stable-stringify": "^2.0.0",
+                "json-schema-traverse": "^0.4.1",
+                "uri-js": "^4.2.2"
+            }
+        },
+        "node_modules/ajv-keywords": {
+            "version": "3.5.2",
+            "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+            "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+            "dev": true,
+            "peer": true,
+            "peerDependencies": {
+                "ajv": "^6.9.1"
+            }
+        },
+        "node_modules/anymatch": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz",
+            "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+            "dev": true,
+            "dependencies": {
+                "normalize-path": "^3.0.0",
+                "picomatch": "^2.0.4"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/binary-extensions": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz",
+            "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/braces": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz",
+            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+            "dev": true,
+            "dependencies": {
+                "fill-range": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/browserslist": {
+            "version": "4.21.4",
+            "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz",
+            "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "caniuse-lite": "^1.0.30001400",
+                "electron-to-chromium": "^1.4.251",
+                "node-releases": "^2.0.6",
+                "update-browserslist-db": "^1.0.9"
+            },
+            "bin": {
+                "browserslist": "cli.js"
+            },
+            "engines": {
+                "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+            }
+        },
+        "node_modules/buffer-from": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
+            "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/caniuse-lite": {
+            "version": "1.0.30001423",
+            "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001423.tgz",
+            "integrity": "sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/chokidar": {
+            "version": "3.5.3",
+            "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz",
+            "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+            "dev": true,
+            "dependencies": {
+                "anymatch": "~3.1.2",
+                "braces": "~3.0.2",
+                "glob-parent": "~5.1.2",
+                "is-binary-path": "~2.1.0",
+                "is-glob": "~4.0.1",
+                "normalize-path": "~3.0.0",
+                "readdirp": "~3.6.0"
+            },
+            "engines": {
+                "node": ">= 8.10.0"
+            },
+            "optionalDependencies": {
+                "fsevents": "~2.3.2"
+            }
+        },
+        "node_modules/chrome-trace-event": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+            "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=6.0"
+            }
+        },
+        "node_modules/commander": {
+            "version": "2.20.3",
+            "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
+            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/electron-to-chromium": {
+            "version": "1.4.284",
+            "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+            "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/enhanced-resolve": {
+            "version": "5.10.0",
+            "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
+            "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "graceful-fs": "^4.2.4",
+                "tapable": "^2.2.0"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        },
+        "node_modules/es-module-lexer": {
+            "version": "0.9.3",
+            "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
+            "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/escalade": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz",
+            "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/eslint-scope": {
+            "version": "5.1.1",
+            "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
+            "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "esrecurse": "^4.3.0",
+                "estraverse": "^4.1.1"
+            },
+            "engines": {
+                "node": ">=8.0.0"
+            }
+        },
+        "node_modules/esrecurse": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz",
+            "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "estraverse": "^5.2.0"
+            },
+            "engines": {
+                "node": ">=4.0"
+            }
+        },
+        "node_modules/esrecurse/node_modules/estraverse": {
+            "version": "5.3.0",
+            "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
+            "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=4.0"
+            }
+        },
+        "node_modules/estraverse": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz",
+            "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=4.0"
+            }
+        },
+        "node_modules/events": {
+            "version": "3.3.0",
+            "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
+            "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=0.8.x"
+            }
+        },
+        "node_modules/fast-deep-equal": {
+            "version": "3.1.3",
+            "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+            "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/fast-json-stable-stringify": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+            "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/fill-range": {
+            "version": "7.0.1",
+            "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz",
+            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+            "dev": true,
+            "dependencies": {
+                "to-regex-range": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/fsevents": {
+            "version": "2.3.2",
+            "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz",
+            "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+            "dev": true,
+            "hasInstallScript": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+            }
+        },
+        "node_modules/glob-parent": {
+            "version": "5.1.2",
+            "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+            "dev": true,
+            "dependencies": {
+                "is-glob": "^4.0.1"
+            },
+            "engines": {
+                "node": ">= 6"
+            }
+        },
+        "node_modules/glob-to-regexp": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+            "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/graceful-fs": {
+            "version": "4.2.10",
+            "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz",
+            "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/has-flag": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/immutable": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.1.0.tgz",
+            "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==",
+            "dev": true
+        },
+        "node_modules/is-binary-path": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
+            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+            "dev": true,
+            "dependencies": {
+                "binary-extensions": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/is-extglob": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+            "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-glob": {
+            "version": "4.0.3",
+            "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+            "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+            "dev": true,
+            "dependencies": {
+                "is-extglob": "^2.1.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-number": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.12.0"
+            }
+        },
+        "node_modules/jest-worker": {
+            "version": "27.5.1",
+            "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz",
+            "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@types/node": "*",
+                "merge-stream": "^2.0.0",
+                "supports-color": "^8.0.0"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/json-parse-even-better-errors": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+            "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/json-schema-traverse": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+            "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/klona": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.5.tgz",
+            "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==",
+            "dev": true,
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/loader-runner": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz",
+            "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=6.11.5"
+            }
+        },
+        "node_modules/merge-stream": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
+            "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/mime-db": {
+            "version": "1.52.0",
+            "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+            "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/mime-types": {
+            "version": "2.1.35",
+            "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+            "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "mime-db": "1.52.0"
+            },
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/neo-async": {
+            "version": "2.6.2",
+            "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
+            "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+            "dev": true
+        },
+        "node_modules/node-releases": {
+            "version": "2.0.6",
+            "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz",
+            "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/normalize-path": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
+            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/picocolors": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+            "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/picomatch": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+            "dev": true,
+            "engines": {
+                "node": ">=8.6"
+            }
+        },
+        "node_modules/punycode": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz",
+            "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/randombytes": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
+            "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "safe-buffer": "^5.1.0"
+            }
+        },
+        "node_modules/readdirp": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
+            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+            "dev": true,
+            "dependencies": {
+                "picomatch": "^2.2.1"
+            },
+            "engines": {
+                "node": ">=8.10.0"
+            }
+        },
+        "node_modules/safe-buffer": {
+            "version": "5.2.1",
+            "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+            "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+            "dev": true,
+            "peer": true
+        },
+        "node_modules/sass": {
+            "version": "1.55.0",
+            "resolved": "https://registry.npmmirror.com/sass/-/sass-1.55.0.tgz",
+            "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==",
+            "dev": true,
+            "dependencies": {
+                "chokidar": ">=3.0.0 <4.0.0",
+                "immutable": "^4.0.0",
+                "source-map-js": ">=0.6.2 <2.0.0"
+            },
+            "bin": {
+                "sass": "sass.js"
+            },
+            "engines": {
+                "node": ">=12.0.0"
+            }
+        },
+        "node_modules/sass-loader": {
+            "version": "13.1.0",
+            "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-13.1.0.tgz",
+            "integrity": "sha512-tZS1RJQ2n2+QNyf3CCAo1H562WjL/5AM6Gi8YcPVVoNxQX8d19mx8E+8fRrMWsyc93ZL6Q8vZDSM0FHVTJaVnQ==",
+            "dev": true,
+            "dependencies": {
+                "klona": "^2.0.4",
+                "neo-async": "^2.6.2"
+            },
+            "engines": {
+                "node": ">= 14.15.0"
+            },
+            "peerDependencies": {
+                "fibers": ">= 3.1.0",
+                "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0",
+                "sass": "^1.3.0",
+                "sass-embedded": "*",
+                "webpack": "^5.0.0"
+            },
+            "peerDependenciesMeta": {
+                "fibers": {
+                    "optional": true
+                },
+                "node-sass": {
+                    "optional": true
+                },
+                "sass": {
+                    "optional": true
+                },
+                "sass-embedded": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/schema-utils": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz",
+            "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@types/json-schema": "^7.0.8",
+                "ajv": "^6.12.5",
+                "ajv-keywords": "^3.5.2"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/serialize-javascript": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+            "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "randombytes": "^2.1.0"
+            }
+        },
+        "node_modules/source-map": {
+            "version": "0.6.1",
+            "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/source-map-js": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
+            "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/source-map-support": {
+            "version": "0.5.21",
+            "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
+            "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "buffer-from": "^1.0.0",
+                "source-map": "^0.6.0"
+            }
+        },
+        "node_modules/supports-color": {
+            "version": "8.1.1",
+            "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
+            "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "has-flag": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/tapable": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz",
+            "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/terser": {
+            "version": "5.15.1",
+            "resolved": "https://registry.npmmirror.com/terser/-/terser-5.15.1.tgz",
+            "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@jridgewell/source-map": "^0.3.2",
+                "acorn": "^8.5.0",
+                "commander": "^2.20.0",
+                "source-map-support": "~0.5.20"
+            },
+            "bin": {
+                "terser": "bin/terser"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/terser-webpack-plugin": {
+            "version": "5.3.6",
+            "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz",
+            "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@jridgewell/trace-mapping": "^0.3.14",
+                "jest-worker": "^27.4.5",
+                "schema-utils": "^3.1.1",
+                "serialize-javascript": "^6.0.0",
+                "terser": "^5.14.1"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            },
+            "peerDependencies": {
+                "webpack": "^5.1.0"
+            },
+            "peerDependenciesMeta": {
+                "@swc/core": {
+                    "optional": true
+                },
+                "esbuild": {
+                    "optional": true
+                },
+                "uglify-js": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/to-regex-range": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+            "dev": true,
+            "dependencies": {
+                "is-number": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=8.0"
+            }
+        },
+        "node_modules/update-browserslist-db": {
+            "version": "1.0.10",
+            "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+            "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "escalade": "^3.1.1",
+                "picocolors": "^1.0.0"
+            },
+            "bin": {
+                "browserslist-lint": "cli.js"
+            },
+            "peerDependencies": {
+                "browserslist": ">= 4.21.0"
+            }
+        },
+        "node_modules/uri-js": {
+            "version": "4.4.1",
+            "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
+            "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "punycode": "^2.1.0"
+            }
+        },
+        "node_modules/watchpack": {
+            "version": "2.4.0",
+            "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz",
+            "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "glob-to-regexp": "^0.4.1",
+                "graceful-fs": "^4.1.2"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        },
+        "node_modules/webpack": {
+            "version": "5.74.0",
+            "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.74.0.tgz",
+            "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==",
+            "dev": true,
+            "peer": true,
+            "dependencies": {
+                "@types/eslint-scope": "^3.7.3",
+                "@types/estree": "^0.0.51",
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/wasm-edit": "1.11.1",
+                "@webassemblyjs/wasm-parser": "1.11.1",
+                "acorn": "^8.7.1",
+                "acorn-import-assertions": "^1.7.6",
+                "browserslist": "^4.14.5",
+                "chrome-trace-event": "^1.0.2",
+                "enhanced-resolve": "^5.10.0",
+                "es-module-lexer": "^0.9.0",
+                "eslint-scope": "5.1.1",
+                "events": "^3.2.0",
+                "glob-to-regexp": "^0.4.1",
+                "graceful-fs": "^4.2.9",
+                "json-parse-even-better-errors": "^2.3.1",
+                "loader-runner": "^4.2.0",
+                "mime-types": "^2.1.27",
+                "neo-async": "^2.6.2",
+                "schema-utils": "^3.1.0",
+                "tapable": "^2.1.1",
+                "terser-webpack-plugin": "^5.1.3",
+                "watchpack": "^2.4.0",
+                "webpack-sources": "^3.2.3"
+            },
+            "bin": {
+                "webpack": "bin/webpack.js"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            },
+            "peerDependenciesMeta": {
+                "webpack-cli": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/webpack-sources": {
+            "version": "3.2.3",
+            "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz",
+            "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+            "dev": true,
+            "peer": true,
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        }
+    },
+    "dependencies": {
+        "@jridgewell/gen-mapping": {
+            "version": "0.3.2",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+            "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@jridgewell/set-array": "^1.0.1",
+                "@jridgewell/sourcemap-codec": "^1.4.10",
+                "@jridgewell/trace-mapping": "^0.3.9"
+            }
+        },
+        "@jridgewell/resolve-uri": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+            "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+            "dev": true,
+            "peer": true
+        },
+        "@jridgewell/set-array": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+            "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+            "dev": true,
+            "peer": true
+        },
+        "@jridgewell/source-map": {
+            "version": "0.3.2",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.2.tgz",
+            "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@jridgewell/gen-mapping": "^0.3.0",
+                "@jridgewell/trace-mapping": "^0.3.9"
+            }
+        },
+        "@jridgewell/sourcemap-codec": {
+            "version": "1.4.14",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+            "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+            "dev": true,
+            "peer": true
+        },
+        "@jridgewell/trace-mapping": {
+            "version": "0.3.17",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+            "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@jridgewell/resolve-uri": "3.1.0",
+                "@jridgewell/sourcemap-codec": "1.4.14"
+            }
+        },
+        "@types/eslint": {
+            "version": "8.4.7",
+            "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.4.7.tgz",
+            "integrity": "sha512-ehM7cCt2RSFs42mb+lcmhFT9ouIlV92PuaeRGn8N8c98oMjG4Z5pJHA9b1QiCcuqnbPSHcyfiD3mlhqMaHsQIw==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@types/estree": "*",
+                "@types/json-schema": "*"
+            }
+        },
+        "@types/eslint-scope": {
+            "version": "3.7.4",
+            "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
+            "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@types/eslint": "*",
+                "@types/estree": "*"
+            }
+        },
+        "@types/estree": {
+            "version": "0.0.51",
+            "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-0.0.51.tgz",
+            "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+            "dev": true,
+            "peer": true
+        },
+        "@types/json-schema": {
+            "version": "7.0.11",
+            "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz",
+            "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+            "dev": true,
+            "peer": true
+        },
+        "@types/node": {
+            "version": "18.11.3",
+            "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.11.3.tgz",
+            "integrity": "sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A==",
+            "dev": true,
+            "peer": true
+        },
+        "@webassemblyjs/ast": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.1.tgz",
+            "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@webassemblyjs/helper-numbers": "1.11.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+            }
+        },
+        "@webassemblyjs/floating-point-hex-parser": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
+            "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
+            "dev": true,
+            "peer": true
+        },
+        "@webassemblyjs/helper-api-error": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
+            "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
+            "dev": true,
+            "peer": true
+        },
+        "@webassemblyjs/helper-buffer": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
+            "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
+            "dev": true,
+            "peer": true
+        },
+        "@webassemblyjs/helper-numbers": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
+            "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@webassemblyjs/floating-point-hex-parser": "1.11.1",
+                "@webassemblyjs/helper-api-error": "1.11.1",
+                "@xtuc/long": "4.2.2"
+            }
+        },
+        "@webassemblyjs/helper-wasm-bytecode": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
+            "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
+            "dev": true,
+            "peer": true
+        },
+        "@webassemblyjs/helper-wasm-section": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
+            "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/helper-buffer": "1.11.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+                "@webassemblyjs/wasm-gen": "1.11.1"
+            }
+        },
+        "@webassemblyjs/ieee754": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
+            "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@xtuc/ieee754": "^1.2.0"
+            }
+        },
+        "@webassemblyjs/leb128": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
+            "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@xtuc/long": "4.2.2"
+            }
+        },
+        "@webassemblyjs/utf8": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
+            "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
+            "dev": true,
+            "peer": true
+        },
+        "@webassemblyjs/wasm-edit": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
+            "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/helper-buffer": "1.11.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+                "@webassemblyjs/helper-wasm-section": "1.11.1",
+                "@webassemblyjs/wasm-gen": "1.11.1",
+                "@webassemblyjs/wasm-opt": "1.11.1",
+                "@webassemblyjs/wasm-parser": "1.11.1",
+                "@webassemblyjs/wast-printer": "1.11.1"
+            }
+        },
+        "@webassemblyjs/wasm-gen": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
+            "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+                "@webassemblyjs/ieee754": "1.11.1",
+                "@webassemblyjs/leb128": "1.11.1",
+                "@webassemblyjs/utf8": "1.11.1"
+            }
+        },
+        "@webassemblyjs/wasm-opt": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
+            "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/helper-buffer": "1.11.1",
+                "@webassemblyjs/wasm-gen": "1.11.1",
+                "@webassemblyjs/wasm-parser": "1.11.1"
+            }
+        },
+        "@webassemblyjs/wasm-parser": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
+            "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/helper-api-error": "1.11.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+                "@webassemblyjs/ieee754": "1.11.1",
+                "@webassemblyjs/leb128": "1.11.1",
+                "@webassemblyjs/utf8": "1.11.1"
+            }
+        },
+        "@webassemblyjs/wast-printer": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
+            "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.1",
+                "@xtuc/long": "4.2.2"
+            }
+        },
+        "@xtuc/ieee754": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+            "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+            "dev": true,
+            "peer": true
+        },
+        "@xtuc/long": {
+            "version": "4.2.2",
+            "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz",
+            "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+            "dev": true,
+            "peer": true
+        },
+        "acorn": {
+            "version": "8.8.0",
+            "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.0.tgz",
+            "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+            "dev": true,
+            "peer": true
+        },
+        "acorn-import-assertions": {
+            "version": "1.8.0",
+            "resolved": "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
+            "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
+            "dev": true,
+            "peer": true,
+            "requires": {}
+        },
+        "ajv": {
+            "version": "6.12.6",
+            "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
+            "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "fast-deep-equal": "^3.1.1",
+                "fast-json-stable-stringify": "^2.0.0",
+                "json-schema-traverse": "^0.4.1",
+                "uri-js": "^4.2.2"
+            }
+        },
+        "ajv-keywords": {
+            "version": "3.5.2",
+            "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+            "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+            "dev": true,
+            "peer": true,
+            "requires": {}
+        },
+        "anymatch": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz",
+            "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+            "dev": true,
+            "requires": {
+                "normalize-path": "^3.0.0",
+                "picomatch": "^2.0.4"
+            }
+        },
+        "binary-extensions": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz",
+            "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+            "dev": true
+        },
+        "braces": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz",
+            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+            "dev": true,
+            "requires": {
+                "fill-range": "^7.0.1"
+            }
+        },
+        "browserslist": {
+            "version": "4.21.4",
+            "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz",
+            "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "caniuse-lite": "^1.0.30001400",
+                "electron-to-chromium": "^1.4.251",
+                "node-releases": "^2.0.6",
+                "update-browserslist-db": "^1.0.9"
+            }
+        },
+        "buffer-from": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
+            "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+            "dev": true,
+            "peer": true
+        },
+        "caniuse-lite": {
+            "version": "1.0.30001423",
+            "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001423.tgz",
+            "integrity": "sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ==",
+            "dev": true,
+            "peer": true
+        },
+        "chokidar": {
+            "version": "3.5.3",
+            "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz",
+            "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+            "dev": true,
+            "requires": {
+                "anymatch": "~3.1.2",
+                "braces": "~3.0.2",
+                "fsevents": "~2.3.2",
+                "glob-parent": "~5.1.2",
+                "is-binary-path": "~2.1.0",
+                "is-glob": "~4.0.1",
+                "normalize-path": "~3.0.0",
+                "readdirp": "~3.6.0"
+            }
+        },
+        "chrome-trace-event": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+            "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+            "dev": true,
+            "peer": true
+        },
+        "commander": {
+            "version": "2.20.3",
+            "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
+            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+            "dev": true,
+            "peer": true
+        },
+        "electron-to-chromium": {
+            "version": "1.4.284",
+            "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+            "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
+            "dev": true,
+            "peer": true
+        },
+        "enhanced-resolve": {
+            "version": "5.10.0",
+            "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
+            "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "graceful-fs": "^4.2.4",
+                "tapable": "^2.2.0"
+            }
+        },
+        "es-module-lexer": {
+            "version": "0.9.3",
+            "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
+            "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
+            "dev": true,
+            "peer": true
+        },
+        "escalade": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz",
+            "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+            "dev": true,
+            "peer": true
+        },
+        "eslint-scope": {
+            "version": "5.1.1",
+            "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
+            "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "esrecurse": "^4.3.0",
+                "estraverse": "^4.1.1"
+            }
+        },
+        "esrecurse": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz",
+            "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "estraverse": "^5.2.0"
+            },
+            "dependencies": {
+                "estraverse": {
+                    "version": "5.3.0",
+                    "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
+                    "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+                    "dev": true,
+                    "peer": true
+                }
+            }
+        },
+        "estraverse": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz",
+            "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+            "dev": true,
+            "peer": true
+        },
+        "events": {
+            "version": "3.3.0",
+            "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
+            "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+            "dev": true,
+            "peer": true
+        },
+        "fast-deep-equal": {
+            "version": "3.1.3",
+            "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+            "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+            "dev": true,
+            "peer": true
+        },
+        "fast-json-stable-stringify": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+            "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+            "dev": true,
+            "peer": true
+        },
+        "fill-range": {
+            "version": "7.0.1",
+            "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz",
+            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+            "dev": true,
+            "requires": {
+                "to-regex-range": "^5.0.1"
+            }
+        },
+        "fsevents": {
+            "version": "2.3.2",
+            "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz",
+            "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+            "dev": true,
+            "optional": true
+        },
+        "glob-parent": {
+            "version": "5.1.2",
+            "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+            "dev": true,
+            "requires": {
+                "is-glob": "^4.0.1"
+            }
+        },
+        "glob-to-regexp": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+            "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+            "dev": true,
+            "peer": true
+        },
+        "graceful-fs": {
+            "version": "4.2.10",
+            "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz",
+            "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+            "dev": true,
+            "peer": true
+        },
+        "has-flag": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+            "dev": true,
+            "peer": true
+        },
+        "immutable": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.1.0.tgz",
+            "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==",
+            "dev": true
+        },
+        "is-binary-path": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
+            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+            "dev": true,
+            "requires": {
+                "binary-extensions": "^2.0.0"
+            }
+        },
+        "is-extglob": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+            "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+            "dev": true
+        },
+        "is-glob": {
+            "version": "4.0.3",
+            "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+            "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+            "dev": true,
+            "requires": {
+                "is-extglob": "^2.1.1"
+            }
+        },
+        "is-number": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+            "dev": true
+        },
+        "jest-worker": {
+            "version": "27.5.1",
+            "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz",
+            "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@types/node": "*",
+                "merge-stream": "^2.0.0",
+                "supports-color": "^8.0.0"
+            }
+        },
+        "json-parse-even-better-errors": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+            "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+            "dev": true,
+            "peer": true
+        },
+        "json-schema-traverse": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+            "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+            "dev": true,
+            "peer": true
+        },
+        "klona": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.5.tgz",
+            "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==",
+            "dev": true
+        },
+        "loader-runner": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz",
+            "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+            "dev": true,
+            "peer": true
+        },
+        "merge-stream": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
+            "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+            "dev": true,
+            "peer": true
+        },
+        "mime-db": {
+            "version": "1.52.0",
+            "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+            "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+            "dev": true,
+            "peer": true
+        },
+        "mime-types": {
+            "version": "2.1.35",
+            "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+            "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "mime-db": "1.52.0"
+            }
+        },
+        "neo-async": {
+            "version": "2.6.2",
+            "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
+            "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+            "dev": true
+        },
+        "node-releases": {
+            "version": "2.0.6",
+            "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz",
+            "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
+            "dev": true,
+            "peer": true
+        },
+        "normalize-path": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
+            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+            "dev": true
+        },
+        "picocolors": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+            "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+            "dev": true,
+            "peer": true
+        },
+        "picomatch": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+            "dev": true
+        },
+        "punycode": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz",
+            "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+            "dev": true,
+            "peer": true
+        },
+        "randombytes": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
+            "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "safe-buffer": "^5.1.0"
+            }
+        },
+        "readdirp": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
+            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+            "dev": true,
+            "requires": {
+                "picomatch": "^2.2.1"
+            }
+        },
+        "safe-buffer": {
+            "version": "5.2.1",
+            "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+            "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+            "dev": true,
+            "peer": true
+        },
+        "sass": {
+            "version": "1.55.0",
+            "resolved": "https://registry.npmmirror.com/sass/-/sass-1.55.0.tgz",
+            "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==",
+            "dev": true,
+            "requires": {
+                "chokidar": ">=3.0.0 <4.0.0",
+                "immutable": "^4.0.0",
+                "source-map-js": ">=0.6.2 <2.0.0"
+            }
+        },
+        "sass-loader": {
+            "version": "13.1.0",
+            "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-13.1.0.tgz",
+            "integrity": "sha512-tZS1RJQ2n2+QNyf3CCAo1H562WjL/5AM6Gi8YcPVVoNxQX8d19mx8E+8fRrMWsyc93ZL6Q8vZDSM0FHVTJaVnQ==",
+            "dev": true,
+            "requires": {
+                "klona": "^2.0.4",
+                "neo-async": "^2.6.2"
+            }
+        },
+        "schema-utils": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz",
+            "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@types/json-schema": "^7.0.8",
+                "ajv": "^6.12.5",
+                "ajv-keywords": "^3.5.2"
+            }
+        },
+        "serialize-javascript": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+            "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "randombytes": "^2.1.0"
+            }
+        },
+        "source-map": {
+            "version": "0.6.1",
+            "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+            "dev": true,
+            "peer": true
+        },
+        "source-map-js": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
+            "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+            "dev": true
+        },
+        "source-map-support": {
+            "version": "0.5.21",
+            "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
+            "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "buffer-from": "^1.0.0",
+                "source-map": "^0.6.0"
+            }
+        },
+        "supports-color": {
+            "version": "8.1.1",
+            "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
+            "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "has-flag": "^4.0.0"
+            }
+        },
+        "tapable": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz",
+            "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+            "dev": true,
+            "peer": true
+        },
+        "terser": {
+            "version": "5.15.1",
+            "resolved": "https://registry.npmmirror.com/terser/-/terser-5.15.1.tgz",
+            "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@jridgewell/source-map": "^0.3.2",
+                "acorn": "^8.5.0",
+                "commander": "^2.20.0",
+                "source-map-support": "~0.5.20"
+            }
+        },
+        "terser-webpack-plugin": {
+            "version": "5.3.6",
+            "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz",
+            "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@jridgewell/trace-mapping": "^0.3.14",
+                "jest-worker": "^27.4.5",
+                "schema-utils": "^3.1.1",
+                "serialize-javascript": "^6.0.0",
+                "terser": "^5.14.1"
+            }
+        },
+        "to-regex-range": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+            "dev": true,
+            "requires": {
+                "is-number": "^7.0.0"
+            }
+        },
+        "update-browserslist-db": {
+            "version": "1.0.10",
+            "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+            "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "escalade": "^3.1.1",
+                "picocolors": "^1.0.0"
+            }
+        },
+        "uri-js": {
+            "version": "4.4.1",
+            "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
+            "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "punycode": "^2.1.0"
+            }
+        },
+        "watchpack": {
+            "version": "2.4.0",
+            "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz",
+            "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "glob-to-regexp": "^0.4.1",
+                "graceful-fs": "^4.1.2"
+            }
+        },
+        "webpack": {
+            "version": "5.74.0",
+            "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.74.0.tgz",
+            "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==",
+            "dev": true,
+            "peer": true,
+            "requires": {
+                "@types/eslint-scope": "^3.7.3",
+                "@types/estree": "^0.0.51",
+                "@webassemblyjs/ast": "1.11.1",
+                "@webassemblyjs/wasm-edit": "1.11.1",
+                "@webassemblyjs/wasm-parser": "1.11.1",
+                "acorn": "^8.7.1",
+                "acorn-import-assertions": "^1.7.6",
+                "browserslist": "^4.14.5",
+                "chrome-trace-event": "^1.0.2",
+                "enhanced-resolve": "^5.10.0",
+                "es-module-lexer": "^0.9.0",
+                "eslint-scope": "5.1.1",
+                "events": "^3.2.0",
+                "glob-to-regexp": "^0.4.1",
+                "graceful-fs": "^4.2.9",
+                "json-parse-even-better-errors": "^2.3.1",
+                "loader-runner": "^4.2.0",
+                "mime-types": "^2.1.27",
+                "neo-async": "^2.6.2",
+                "schema-utils": "^3.1.0",
+                "tapable": "^2.1.1",
+                "terser-webpack-plugin": "^5.1.3",
+                "watchpack": "^2.4.0",
+                "webpack-sources": "^3.2.3"
+            }
+        },
+        "webpack-sources": {
+            "version": "3.2.3",
+            "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz",
+            "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+            "dev": true,
+            "peer": true
+        }
+    }
 }

+ 21 - 22
package.json

@@ -1,24 +1,23 @@
 {
-	"name": "shopro-plus",
-	"version": "1.0.0",
-	"main": "main.js",
-	"scripts": {
-		"test": ""
-	},
-	"repository": {
-		"type": "git",
-		"url": ""
-	},
-	"keywords": [],
-	"author": "",
-	"license": "ISC",
-	"homepage": "",
-	"dependencies": {
-		"jweixin-module": "^1.6.0",
-		"uni-read-pages": "^1.0.5",
-		"uni-simple-router": "^2.0.6",
-		"vconsole": "^3.7.0"
-	},
-	"description": "",
-	"devDependencies": {}
+    "id": "CRMEB-moren",
+    "displayName": "CRMEB客户管理电商商城系统前端模板uni-app版",
+    "version": "v4.4.5",
+    "description": "系统包含商城首页、分类页、购物车、个人中心、产品详情、订单、客服、拼团、砍价、秒杀、分销、优惠券、签到、积分等完整的商城系统前端模板。欢迎大家下载体验",
+    "keywords": [
+        "商城",
+        "模板",
+        "CRMEB",
+        "小程序",
+        "公众号"
+    ],
+    "dcloudext": {
+        "category": [
+            "uni-app前端模板",
+            "uni-app前端项目模板"
+        ]
+    },
+    "devDependencies": {
+        "sass": "^1.55.0",
+        "sass-loader": "^13.1.0"
+    }
 }

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