diff --git a/.local.config.js b/.local.config.js index fc3e332..701710d 100644 --- a/.local.config.js +++ b/.local.config.js @@ -74,6 +74,10 @@ const localDevConfig = ({ uniacid: 11, domain: 'https://5g.aigc-quickapp.com/', }, + '5g-206': { + uniacid: 206, + domain: 'https://5g.aigc-quickapp.com/', + }, '47': { // 修改弹窗 uniacid: 47, domain: 'https://5g.aigc-quickapp.com/', diff --git a/common/js/lang.js b/common/js/lang.js index dd10e31..511113c 100644 --- a/common/js/lang.js +++ b/common/js/lang.js @@ -182,91 +182,20 @@ function processRoutePath(route) { } // 加载语言包(同步方式) -// 2026-06-24 升级为多文件结构:lang//index.js 聚合各业务模块 -// 同时保留旧单文件 lang/.js 作为过渡,新结构优先,旧结构兜底 -// path 参数保留仅为兼容旧调用签名(忽略值)。 function loadLangPackSync(lang, path) { try { - const cacheKey = `${lang}__single`; - if (loadedLangPacks[cacheKey]) { - return loadedLangPacks[cacheKey]; + if (loadedLangPacks[`${lang}_${path}`]) { + return loadedLangPacks[`${lang}_${path}`]; } - // 1. 先加载旧单文件(兜底) - let legacyData = {}; - try { - legacyData = require(`@/lang/${lang}.js`).lang || {}; - } catch (e) { - // 旧文件不存在也没关系 - } - // 2. 再加载新多文件聚合(优先) - let modularData = {}; - try { - modularData = require(`@/lang/${lang}/index.js`).lang || {}; - } catch (e) { - // 新文件不存在也没关系 - } - // 3. 深度合并:新结构覆盖旧结构 - const langData = deepMergeLang(legacyData, modularData); - loadedLangPacks[cacheKey] = langData; + const langData = require(`@/lang/${lang}/${path}.js`).lang; + loadedLangPacks[`${lang}_${path}`] = langData; return langData; } catch (error) { - // console.error(`加载语言包 ${lang} 失败:`, error); + // console.error(`加载语言包 ${lang}/${path} 失败:`, error); return {}; } } -// 深度合并语言包对象,新值覆盖旧值 -function deepMergeLang(target, source) { - const result = { ...target }; - for (const key of Object.keys(source)) { - const srcVal = source[key]; - const tgtVal = result[key]; - if (srcVal && typeof srcVal === 'object' && !Array.isArray(srcVal) - && tgtVal && typeof tgtVal === 'object' && !Array.isArray(tgtVal)) { - result[key] = deepMergeLang(tgtVal, srcVal); - } else { - result[key] = srcVal; - } - } - return result; -} - -// 检测 page module 是否覆盖 common 已有 key。 -// 自 2026-06-23 起强制:page 覆盖 common 直接 throw 阻断,防止 AI 默默改文案。 -// 历史上 commit f258987 / 47098bd 都曾让 page 覆盖 common 引发翻译错乱。 -function detectShadowing(commonLang, pageLang, langPath) { - if (!pageLang || typeof pageLang !== 'object') return; - if (!commonLang || typeof commonLang !== 'object') return; - const conflicts = []; - const walk = (pageNode, commonNode, prefix) => { - if (!pageNode || typeof pageNode !== 'object') return; - if (!commonNode || typeof commonNode !== 'object') return; - for (const k of Object.keys(pageNode)) { - const fullKey = prefix ? `${prefix}.${k}` : k; - if (Object.prototype.hasOwnProperty.call(commonNode, k)) { - const pageVal = pageNode[k]; - const commonVal = commonNode[k]; - // 仅当 page 想覆盖 common 的"叶子"值(字符串)时报错 - if (typeof pageVal === 'string' && typeof commonVal === 'string' && pageVal !== commonVal) { - conflicts.push({ key: fullKey, commonVal, pageVal }); - } else if (typeof pageVal === 'object' && pageVal !== null && typeof commonVal === 'object' && commonVal !== null) { - // 嵌套结构继续递归 - walk(pageVal, commonVal, fullKey); - } - } - } - }; - walk(pageLang, commonLang, ''); - if (conflicts.length > 0) { - const list = conflicts.map(c => ` - "${c.key}": common="${c.commonVal}" vs page="${c.pageVal}"`).join('\n'); - throw new Error( - `[i18n] page module "${langPath || 'unknown'}" overrides common.js keys:\n${list}\n` + - `Fix: rename the page key with a business namespace prefix, e.g. ".${conflicts[0].key.split('.').pop()}"\n` + - `See docs/i18n-rules.md for the rule.` - ); - } -} - /** * 获得当前本地语言 * @returns @@ -634,20 +563,12 @@ export default { let mergedLang = _mergedLangCache[mergeCacheKey]; if (!mergedLang) { try { - // 自 2026-06-23 起:只加载单一权威 lang/.js - // page module 已废弃,因此不再读取 lang//.js - const lang = loadLangPackSync(locale, langPath); - const currentPageLang = {}; // 兼容旧调用;旧 page module 已废弃 - // detectShadowing 在 page 部分为空时直接返回,不抛错 - detectShadowing(lang, currentPageLang, langPath); + const lang = loadLangPackSync(locale, 'common'); + const currentPageLang = langPath ? loadLangPackSync(locale, langPath) : {}; mergedLang = Object.assign(deepCloneLang(lang), deepCloneLang(currentPageLang)); const ovr = overrideCache[getOverrideMemKey(locale)]; if (ovr && ovr.map) applyOverrides(mergedLang, ovr.map); } catch (e) { - // detectShadowing 抛错时不应该被静默吞掉——直接重抛 - if (e && e.message && e.message.startsWith('[i18n]')) { - throw e; - } console.error('解析语言包失败:', e, { langPath, field, locale }); mergedLang = {}; } @@ -759,15 +680,7 @@ export default { _refreshInProgress = true; try { let _page = getCurrentPages()[getCurrentPages().length - 1]; - if (_page) { - // 自 2026-06-23 起:每个 page 的 title 集中到 pageTitles. 命名空间 - // processRoutePath() 已经把 route 映射成 langPath(如 'order/list') - const _langPath = processRoutePath(_page.route || (_page.$page && _page.$page.path) || ''); - const _titleKey = _langPath ? `pageTitles.${_langPath.replace(/\//g, '.')}` : 'pageTitles'; - const _title = this.lang(_titleKey); - // 兜底:旧 page module 仍可能在 lang 包外自定义 title,没匹配时用通用 title - this.title(_title && _title !== _titleKey ? _title : this.lang('title')); - } + if (_page) this.title(this.lang("title")); if (emit) { // 远端 i18n 翻译更新后,推送重渲染信号; diff --git a/components-diy/diy-article.vue b/components-diy/diy-article.vue index 7925d69..5f615b7 100644 --- a/components-diy/diy-article.vue +++ b/components-diy/diy-article.vue @@ -1,1199 +1,1199 @@ - - - - - \ No newline at end of file diff --git a/components-diy/diy-bargain.vue b/components-diy/diy-bargain.vue index acdb53b..3135710 100644 --- a/components-diy/diy-bargain.vue +++ b/components-diy/diy-bargain.vue @@ -12,7 +12,7 @@ {{ $lang("diy.diy-bargain.l15.t0") }} + :style="{ color: value.titleStyle.textColor }">低至0元免费拿 diff --git a/components-diy/diy-category-item.vue b/components-diy/diy-category-item.vue index 2f596d6..5be555e 100644 --- a/components-diy/diy-category-item.vue +++ b/components-diy/diy-category-item.vue @@ -44,7 +44,7 @@ :class="{ 'screen-category-4': value.template == 4 }" :scroll-with-animation="true" :scroll-into-view="scrollIntoView"> {{ $lang("diy.diy-category-item.l47.t0") }} + @tap.stop="selectCategory(-1)">全部 @@ -57,7 +57,7 @@ - {{ $lang("diy.diy-category-item.l47.t0") }} + 全部 @@ -125,11 +125,11 @@ @@ -160,7 +160,7 @@ - - + - @@ -29,7 +29,7 @@ - @@ -51,7 +51,7 @@ - {{ $lang("diy.diy-category.l54.t0") }} + 展开 @@ -68,7 +68,7 @@ - {{ $lang("diy.diy-category.l71.t0") }} + 点击收起 @@ -102,7 +102,7 @@ @tologin="toLogin" @selectsku="selectSku($event, index)" @addCart="addCartPoint" @loadfinish="getHeightArea"> - {{ $lang("diy.diy-category-item.l163.t0") }} + 已经到底了~ - {{ $lang("diy.diy-category.l123.t0") }} + 暂时没有分类哦! - {{ $lang("diy.diy-category.l123.t0") }} + 暂时没有分类哦! @@ -409,7 +409,7 @@ export default { success: res => { if (res.code >= 0) { let item = res.data; - item.unit = item.unit || $lang('common.ns-goods-sku.ns-goods-sku-index.l150.t0'); + item.unit = item.unit || '件'; if (item.sku_images) item.sku_images = item.sku_images.split(','); else item.sku_images = []; diff --git a/components-diy/diy-channel-list.vue b/components-diy/diy-channel-list.vue index 2e5b1f3..348f177 100644 --- a/components-diy/diy-channel-list.vue +++ b/components-diy/diy-channel-list.vue @@ -1,631 +1,631 @@ - - - - - \ No newline at end of file diff --git a/components-diy/diy-coupon.vue b/components-diy/diy-coupon.vue index d8200f2..7859302 100644 --- a/components-diy/diy-coupon.vue +++ b/components-diy/diy-coupon.vue @@ -26,16 +26,16 @@ {{ item.discount | moneyConduct }} - {{ $lang("common.register-reward.l60.t1") }} + 折 - {{ item.at_least > 0 ? $lang('diy.diy-coupon.l32.t0') + Number(item.at_least) + '元可用' : $lang('diy.diy-coupon.l32.t2') }} + {{ item.at_least > 0 ? '满' + Number(item.at_least) + '元可用' : '无门槛优惠券' }} {{ value.btnStyle.text }} - {{ $lang("diy.diy-coupon.l38.t0") }} + 去使用 @@ -61,14 +61,14 @@ {{ item.discount | moneyConduct }} - {{ $lang("common.register-reward.l60.t1") }} + 折 - {{ item.at_least > 0 ? $lang('diy.diy-coupon.l32.t0') + Number(item.at_least) + '元可用' : $lang('diy.diy-coupon.l32.t2') }} + {{ item.at_least > 0 ? '满' + Number(item.at_least) + '元可用' : '无门槛优惠券' }} - {{ value.btnStyle.text || $lang('diy.diy-coupon.l71.t0') }} + {{ value.btnStyle.text || '领取' }} 去使用 @@ -95,20 +95,20 @@ {{ item.discount | moneyConduct }} - {{ $lang("common.register-reward.l60.t1") }} + 折 - {{ item.at_least > 0 ? $lang('diy.diy-coupon.l32.t0') + - Number(item.at_least) + '元可用' : $lang('diy.diy-coupon.l32.t2') }} - {{ $lang("diy.diy-coupon.l103.t0") }} - {{ $lang("diy.diy-coupon.l104.t0") }} - {{ $lang("diy.diy-coupon.l105.t0") }} + {{ item.at_least > 0 ? '满' + + Number(item.at_least) + '元可用' : '无门槛优惠券' }} + 所有商品可用 + 指定商品可用 + 指定商品不可用 - {{ value.btnStyle.text || $lang('diy.diy-coupon.l71.t0') }} + {{ value.btnStyle.text || '领取' }} - {{ $lang("diy.diy-coupon.l38.t0") }} + 去使用 @@ -133,16 +133,16 @@ {{ item.discount | moneyConduct }} - {{ $lang("common.register-reward.l60.t1") }} + 折 - {{ item.at_least > 0 ? $lang('diy.diy-coupon.l32.t0') + Number(item.at_least) + '元可用' : $lang('diy.diy-coupon.l32.t2') }} + {{ item.at_least > 0 ? '满' + Number(item.at_least) + '元可用' : '无门槛优惠券' }} - {{ value.btnStyle.text || $lang('diy.diy-coupon.l143.t0') }} + {{ value.btnStyle.text || '立即使用' }} - {{ $lang("diy.diy-coupon.l38.t0") }} + 去使用 @@ -160,11 +160,11 @@ {{ item.money | moneyConduct }} - {{ $lang("common.register-reward.l45.t0") }} + 元 {{ item.discount | moneyConduct }} - {{ $lang("common.register-reward.l60.t1") }} + 折 @@ -173,12 +173,12 @@ {{ item.coupon_name }} { $lang("diy.diy-coupon.l32.t0") } Number(item.at_least) }}元可用 + v-if="item.at_least > 0">满{{ Number(item.at_least) }}元可用 {{ $lang("diy.diy-coupon.l32.t2") }} + v-else>无门槛优惠券 {{ - value.btnStyle.text || $lang('diy.diy-coupon.l181.t0') }} + value.btnStyle.text || '立即领取' }} 去使用 @@ -204,9 +204,9 @@ {{ (item.discount == '0.00' ? item.money : item.discount) | moneyConduct }} - {{ item.discount == '0.00' ? '元' : $lang('common.register-reward.l60.t1') }} + {{ item.discount == '0.00' ? '元' : '折' }} - {{ $lang("diy.diy-coupon.l209.t0") }} + 优惠券 - {{ $lang("diy.diy-coupon.l38.t0") }} + 去使用 { $lang("diy.diy-coupon.l32.t0") } item.at_least | moneyConduct }}元使用 - {{ $lang("diy.diy-coupon.l229.t0") }} + v-if="parseFloat(item.at_least) > 0">满{{ item.at_least | moneyConduct }}元使用 + 无门槛使用
+ - {{ $lang("diy.diy-coupon.l241.t0") }} + 暂无优惠券
- {{ $lang("common.ns-empty.l31.t0") }} + 去逛逛
@@ -257,23 +257,23 @@ {{ item.money | moneyConduct }} - {{ $lang("common.register-reward.l45.t0") }} + 元 {{ item.discount | moneyConduct }} - {{ $lang("common.register-reward.l60.t1") }} + 折 { $lang("diy.diy-coupon.l32.t0") } Number(item.at_least) }}元可用 - {{ $lang("diy.diy-coupon.l32.t2") }} + v-if="item.at_least > 0">满{{ Number(item.at_least) }}元可用 + 无门槛优惠券 有效期至{{ $util.timeStampTurnTime(item.end_time, 'yearmonthday') }} - {{ value.btnStyle.text || $lang('diy.diy-coupon.l181.t0') }} + {{ value.btnStyle.text || '立即领取' }} 去使用 @@ -404,7 +404,7 @@ export default { couponTap(item, index) { if (item.count == item.lead_count) { this.$util.showToast({ - title: $lang('diy.diy-coupon.l407.t0') + title: '该优惠券已抢光' }); return; } @@ -427,7 +427,7 @@ export default { var data = res.data; let msg = res.message; if (res.code == 0) { - msg = $lang('diy.diy-coupon.l430.t0'); + msg = '领取成功'; if (res.data.is_exist == 1) { for (let i = 0; i < that.couponList.length; i++) { if (that.couponList[i].coupon_type_id == item.coupon_type_id) { diff --git a/components-diy/diy-fenxiao-goods-list.vue b/components-diy/diy-fenxiao-goods-list.vue index 265a029..08ecc1b 100644 --- a/components-diy/diy-fenxiao-goods-list.vue +++ b/components-diy/diy-fenxiao-goods-list.vue @@ -20,7 +20,7 @@ {{ $lang("diy.diy-fenxiao-goods-list.l23.t0") }} + :style="{ color: value.theme == 'diy' ? value.priceStyle.mainColor : '' }">赚 ¥ {{ item.commission_money.split('.')[0] }} @@ -138,7 +138,7 @@ export default { }, success: res => { if (res.code >= 0) { - this.$util.showToast({ title: $lang('diy.diy-fenxiao-goods-list.l141.t0') }); + this.$util.showToast({ title: '关注成功' }); this.list[index].is_collect = 1; this.list[index].collect_id = res.data; } @@ -149,8 +149,8 @@ export default { //取消关注 delFollowTip(e, index) { uni.showModal({ - title: $lang('common.wxwork-contact.l202.t0'), - content: $lang('diy.diy-fenxiao-goods-list.l153.t0'), + title: '提示', + content: '确认取消关注该商品吗', success: res => { if (res.confirm) { this.delFollow(e.collect_id, index); @@ -167,7 +167,7 @@ export default { success: res => { let msg = ''; if (res.code == 0) { - msg = $lang('diy.diy-fenxiao-goods-list.l170.t0'); + msg = '取消成功'; } else { msg = res.message; } diff --git a/components-diy/diy-form.vue b/components-diy/diy-form.vue index 98dffac..8a30b8a 100644 --- a/components-diy/diy-form.vue +++ b/components-diy/diy-form.vue @@ -139,7 +139,7 @@ export default { // 提交按钮文字:与后端 design.html 默认对齐,开放给 formConfig 覆盖 // 走 mergedFormConfig(兼容 camelCase / snake_case),让 formConfig.submitText 能正确覆盖 submitText() { - return this.mergedFormConfig.submitText || $lang('diy.diy-form.l142.t0'); + return this.mergedFormConfig.submitText || '提交'; }, // 后端把表单样式配置统一存放在 data.formConfig 子对象中(与后端 design.js getDefaultFormData().formConfig 字段名一致)。 // 这里做一次归一化:优先取 formConfig;如果历史数据是扁平结构(直接挂在 value 上),也做兼容。 @@ -298,12 +298,12 @@ export default { form_id: this.value.form_id || 0, form_data: JSON.stringify(submitData), component_id: this.value.id || '', - form_name: this.value.form_name || $lang('diy.diy-form.l301.t0') + form_name: this.value.form_name || '默认表单' }, success: function(res) { if (res.code === 0) { uni.showToast({ - title: $lang('diy.diy-form.l306.t0'), + title: '提交成功', icon: 'success' }); // 重置表单 @@ -312,7 +312,7 @@ export default { } } else { uni.showToast({ - title: res.message || $lang('diy.diy-form.l315.t0'), + title: res.message || '提交失败', icon: 'none' }); } diff --git a/components-diy/diy-goods-list.vue b/components-diy/diy-goods-list.vue index 9daef9d..61ea2d1 100644 --- a/components-diy/diy-goods-list.vue +++ b/components-diy/diy-goods-list.vue @@ -60,7 +60,7 @@ - 已售{{ item.sale_num }}{{ item.unit ? item.unit : $lang('common.ns-goods-sku.ns-goods-sku-index.l150.t0') }} + 已售{{ item.sale_num }}{{ item.unit ? item.unit : '件' }} @@ -168,7 +168,7 @@ - 已售{{ item.sale_num }}{{ item.unit ? item.unit : $lang('common.ns-goods-sku.ns-goods-sku-index.l150.t0') }} + 已售{{ item.sale_num }}{{ item.unit ? item.unit : '件' }} @@ -238,7 +238,7 @@ - 已售{{ dataItem.sale_num }}{{ dataItem.unit ? dataItem.unit : $lang('common.ns-goods-sku.ns-goods-sku-index.l150.t0') }} + 已售{{ dataItem.sale_num }}{{ dataItem.unit ? dataItem.unit : '件' }} diff --git a/components-diy/diy-goods-recommend.vue b/components-diy/diy-goods-recommend.vue index a6fe133..54929c4 100644 --- a/components-diy/diy-goods-recommend.vue +++ b/components-diy/diy-goods-recommend.vue @@ -53,7 +53,7 @@ ¥{{ showMarketPrice(dataItem) }} - 售{{ dataItem.sale_num }}{{ dataItem.unit ? dataItem.unit : $lang('common.ns-goods-sku.ns-goods-sku-index.l150.t0') }} + 售{{ dataItem.sale_num }}{{ dataItem.unit ? dataItem.unit : '件' }} diff --git a/components-diy/diy-index-page.vue b/components-diy/diy-index-page.vue index f925c2e..46f032d 100644 --- a/components-diy/diy-index-page.vue +++ b/components-diy/diy-index-page.vue @@ -1,863 +1,863 @@ - - - - - \ No newline at end of file diff --git a/components-diy/diy-kefu.vue b/components-diy/diy-kefu.vue index 3333e22..b3498fb 100644 --- a/components-diy/diy-kefu.vue +++ b/components-diy/diy-kefu.vue @@ -14,7 +14,7 @@ {{ $lang("diy.diy-kefu.l17.t0") }} + :style="{ background: item.BtBgColor, color: item.BtColor }" @tap.stop="previewSqs()">立即添加 diff --git a/components-diy/diy-listmenu.vue b/components-diy/diy-listmenu.vue index 3c6eb58..a6e6b78 100644 --- a/components-diy/diy-listmenu.vue +++ b/components-diy/diy-listmenu.vue @@ -12,7 +12,7 @@ style="border-radius:6rpx;width: 60rpx;"> {{ item.title }} - {{ lang == 'en-us' ? 'view' : $lang('diy.diy-listmenu.l15.t0') }} + {{ lang == 'en-us' ? 'view' : '查看' }} diff --git a/components-diy/diy-live.vue b/components-diy/diy-live.vue index 2059d68..1dd989e 100644 --- a/components-diy/diy-live.vue +++ b/components-diy/diy-live.vue @@ -26,11 +26,11 @@ - { $lang("diy.diy-live.l29.t0") } liveInfo.anchor_name }} + 主播:{{ liveInfo.anchor_name }} | - { $lang("diy.diy-live.l33.t0") } liveInfo.goods.length }} + 直播商品:{{ liveInfo.goods.length }} diff --git a/components-diy/diy-map.vue b/components-diy/diy-map.vue index 7b99a4a..b84128b 100644 --- a/components-diy/diy-map.vue +++ b/components-diy/diy-map.vue @@ -6,14 +6,14 @@
- {{ $lang("diy.diy-map.l9.t0") }} + 一键导航
@@ -71,7 +71,7 @@ export default { uni.openLocation({ latitude: parseFloat(item.lat), longitude: parseFloat(item.lng), - name: $lang("diy.diy-map.l9.t0"), + name: "一键导航", }) }, async handlerClick(item) { diff --git a/components-diy/diy-member-info.vue b/components-diy/diy-member-info.vue index 6490aa7..3092db6 100644 --- a/components-diy/diy-member-info.vue +++ b/components-diy/diy-member-info.vue @@ -1,1509 +1,1509 @@ - - - - - + \ No newline at end of file diff --git a/components-diy/diy-member-my-order.vue b/components-diy/diy-member-my-order.vue index 6910428..6f6afcf 100644 --- a/components-diy/diy-member-my-order.vue +++ b/components-diy/diy-member-my-order.vue @@ -19,7 +19,7 @@ > 99 ? '99+' : orderNum.waitpay }} - {{ $lang('order.list.waitpay') }} + {{ $lang('waitpay') }} @@ -38,7 +38,7 @@ orderNum.waitsend > 99 ? '99+' : orderNum.waitsend }} - {{ $lang('order.list.waitsend') }} + {{ $lang('waitsend') }} @@ -57,7 +57,7 @@ orderNum.waitconfirm > 99 ? '99+' : orderNum.waitconfirm }} - {{ $lang('order.list.waitconfirm') }} + {{ $lang('waitconfirm') }} @@ -74,7 +74,7 @@ - {{ $lang('order.list.completed') }} + {{ $lang('completed') }} @@ -92,7 +92,7 @@ orderNum.refunding > 99 ? '99+' : orderNum.refunding }} - {{ $lang('order.list.activist') }} + {{ $lang('activist') }} diff --git a/components-diy/diy-merch-list.vue b/components-diy/diy-merch-list.vue index 100cc91..7457a40 100644 --- a/components-diy/diy-merch-list.vue +++ b/components-diy/diy-merch-list.vue @@ -63,31 +63,31 @@ export default { return { list: [ /*{ - merch_name:$lang('diy.diy-merch-list.l66.t0'), + merch_name:'品牌', merch_image:'https://saas.cn//upload/4/common/images/20240824/20240824040223172448654356147.jpg' }, { - merch_name:$lang('diy.diy-merch-list.l66.t0'), + merch_name:'品牌', merch_image:'https://saas.cn//upload/4/common/images/20240824/20240824040223172448654356147.jpg' }, { - merch_name:$lang('diy.diy-merch-list.l66.t0'), + merch_name:'品牌', merch_image:'https://saas.cn//upload/4/common/images/20240824/20240824040223172448654356147.jpg' }, { - merch_name:$lang('diy.diy-merch-list.l66.t0'), + merch_name:'品牌', merch_image:'https://saas.cn//upload/4/common/images/20240824/20240824040223172448654356147.jpg' }, { - merch_name:$lang('diy.diy-merch-list.l66.t0'), + merch_name:'品牌', merch_image:'https://saas.cn//upload/4/common/images/20240824/20240824040223172448654356147.jpg' }, { - merch_name:$lang('diy.diy-merch-list.l66.t0'), + merch_name:'品牌', merch_image:'https://saas.cn//upload/4/common/images/20240824/20240824040223172448654356147.jpg' }, { - merch_name:$lang('diy.diy-merch-list.l66.t0'), + merch_name:'品牌', merch_image:'https://saas.cn//upload/4/common/images/20240824/20240824040223172448654356147.jpg' }*/ ], diff --git a/components-diy/diy-notes.vue b/components-diy/diy-notes.vue index f7091e4..d686b60 100644 --- a/components-diy/diy-notes.vue +++ b/components-diy/diy-notes.vue @@ -18,7 +18,7 @@ #{{ item.note_type == 'goods_item' ? '单品介绍' : - $lang('diy.diy-notes.l21.t0') }}# + '掌柜说' }}# {{ item.note_abstract }} diff --git a/components-diy/diy-notice.vue b/components-diy/diy-notice.vue index ab41853..34d0db0 100644 --- a/components-diy/diy-notice.vue +++ b/components-diy/diy-notice.vue @@ -42,11 +42,11 @@ - {{ $lang("diy.diy-notice.l45.t0") }} + 公告 {{ notice }} - + diff --git a/components-diy/diy-payment-qrcode.vue b/components-diy/diy-payment-qrcode.vue index 812c6d5..55c12e8 100644 --- a/components-diy/diy-payment-qrcode.vue +++ b/components-diy/diy-payment-qrcode.vue @@ -3,23 +3,23 @@ - {{ $lang("diy.diy-payment-qrcode.l6.t0") }} + 门店消费时使用,支付时点击下方展示付款码 - {{ $lang("diy.diy-payment-qrcode.l22.t0") }} + 门店支付 @@ -27,11 +27,11 @@ - {{ $lang("common.wxwork-contact.l202.t0") }} + 提示 - {{ $lang("diy.diy-payment-qrcode.l33.t0") }} - + 扫码付请退出程序后直接使用微信扫一扫或返回上一页使用付款码进行支付 + diff --git a/components-diy/diy-pinfan.vue b/components-diy/diy-pinfan.vue index 8d07cc8..efbc364 100644 --- a/components-diy/diy-pinfan.vue +++ b/components-diy/diy-pinfan.vue @@ -25,7 +25,7 @@ - { $lang("diy.diy-pinfan.l28.t0") } item.order_num }}件 + 已拼{{ item.order_num }}件 @@ -49,10 +49,10 @@ borderRadius: value.btnStyle.aroundRadius * 2 + 'rpx' }"> {{ value.btnStyle.text }} - { $lang("diy.diy-pinfan.l52.t0") } item.reward_type_num }}积分 + 返{{ item.reward_type_num }}积分 返¥{{ item.reward_type_num }} - {{ $lang("diy.diy-pinfan.l55.t0") }} + 返优惠券 @@ -92,7 +92,7 @@ {{ $lang("diy.diy-pinfan.l55.t0") }} + v-if="item.reward_type == 3">返优惠券 {{ value.titleStyle.virtualNum || headData.pintuan_count }} - {{ value.titleStyle.style == 'style-2' ? '人参与' : $lang('diy.diy-pintuan.l29.t1') }} + {{ value.titleStyle.style == 'style-2' ? '人参与' : '人拼团成功' }} - { $lang("diy.diy-pinfan.l28.t0") } item.order_num }}件 + 已拼{{ item.order_num }}件 @@ -148,10 +148,10 @@ {{ '.' + item.pintuan_price.split('.')[1] }} - {{ $lang("diy.diy-pintuan.l151.t0") }} + 去参团 - { $lang("diy.diy-pinfan.l28.t0") } item.sale_num }}件 + 已拼{{ item.sale_num }}件 @@ -192,7 +192,7 @@ {{ '.' + item.pintuan_price.split('.')[1] }} - { $lang("diy.diy-pinfan.l28.t0") } item.sale_num }}件 + 已拼{{ item.sale_num }}件 diff --git a/components-diy/diy-search.vue b/components-diy/diy-search.vue index 58e349b..81f521a 100644 --- a/components-diy/diy-search.vue +++ b/components-diy/diy-search.vue @@ -28,7 +28,7 @@ @tap.stop="handlerSearchClick" :placeholderStyle="placeholderStyle" /> {{ $lang("diy.diy-search.l31.t0") }} + :style="{ 'backgroundColor': value.pageBgColor ? value.pageBgColor : 'rgba(0,0,0,0)' }">搜索 diff --git a/components-diy/diy-seckill.vue b/components-diy/diy-seckill.vue index 0f0ca19..bdc028a 100644 --- a/components-diy/diy-seckill.vue +++ b/components-diy/diy-seckill.vue @@ -13,10 +13,10 @@ {{ $lang("diy.diy-seckill.l16.t0") }} + :style="{ color: value.titleStyle.textColor }" class="seckill-style-name">距离开始 {{ isFuture ? - '距离开始' : $lang('diy.diy-seckill.l19.t0') }} + '距离开始' : '距离结束' }} {{ seckillH ? seckillH : '00' }} @@ -87,7 +87,7 @@ {{ $lang("diy.diy-seckill.l90.t0") }} + :style="{ color: value.theme == 'diy' ? value.priceStyle.lineColor : '' }">原价: ¥{{ item.price }} @@ -502,7 +502,7 @@ export default { toDetail(id) { if (this.isFuture) { this.$util.showToast({ - title: $lang('diy.diy-seckill.l505.t0') + title: '秒杀活动即将开启,敬请期待!' }); return false; } diff --git a/components-diy/diy-store.vue b/components-diy/diy-store.vue index c42a1ce..a6696d6 100644 --- a/components-diy/diy-store.vue +++ b/components-diy/diy-store.vue @@ -7,17 +7,17 @@ {{ globalStoreInfo.store_name }} - {{ $lang("diy.diy-store.l10.t0") }} + 切换 - {{ $lang("common.ns-navbar.l39.t0") }} + 定位中... {{ globalStoreInfo.show_address }} - {{ $lang("diy.diy-store.l20.t0") }} + 获取当前位置... @@ -40,11 +40,11 @@ {{ globalStoreInfo.store_name }} - {{ $lang("diy.diy-store.l10.t0") }} + 切换 - {{ $lang("common.ns-navbar.l39.t0") }} + 定位中... {{ globalStoreInfo.store_name }} - {{ $lang("common.ns-navbar.l39.t0") }} + 定位中... - diff --git a/components-diy/diy-text.vue b/components-diy/diy-text.vue index 8002013..f9086e1 100644 --- a/components-diy/diy-text.vue +++ b/components-diy/diy-text.vue @@ -208,7 +208,7 @@ {{ value.text }} {{ $lang("diy.diy-text.l211.t0") }} + :style="{ fontSize: value.fontSize * 2 + 'rpx', fontWeight: value.fontWeight }">专区 diff --git a/components-diy/diy-video.vue b/components-diy/diy-video.vue index 052b152..7cec6a8 100644 --- a/components-diy/diy-video.vue +++ b/components-diy/diy-video.vue @@ -143,7 +143,7 @@ export default { }); video.addEventListener('error', (e) => { - console.error($lang('diy.diy-video.l146.t0'), e); + console.error('H5端预加载视频失败:', e); }); // 触发加载 @@ -184,7 +184,7 @@ export default { // 视频错误事件 onVideoError(event) { - console.error($lang('diy.diy-video.l187.t0'), event); + console.error('视频加载失败:', event); }, async handlerClick(videoUrl) { diff --git a/components-diy/js/wechat-channel.js b/components-diy/js/wechat-channel.js index 684292b..9291161 100644 --- a/components-diy/js/wechat-channel.js +++ b/components-diy/js/wechat-channel.js @@ -1,187 +1,187 @@ -// 微信视频号组件配置 -export const wechatChannelConfig = { - // 图标相关 - icon: { - defaultSize: 80, // 默认图标尺寸(rpx) - smallSize: 60, // 小图标尺寸(rpx) - channelArrowSize: 24, // 频道箭头图标尺寸(rpx) - channelArrow: 'addon/personnel/shop/view/enterprise/arrow.png', // 频道箭头图标路径 - }, - - - // 视频相关配置 - video: { - defaultHeight: 320, // 默认视频高度(rpx) - minHeight: 200, // 最小视频高度(rpx) - maxHeight: 500, // 最大视频高度(rpx) - defaultCoverUrl: 'addon/personnel/shop/view/enterprise/default-video-cover.png', // 默认视频封面 - }, - - // 播放按钮配置 - playButton: { - size: 80, // 标准尺寸(rpx) - smallSize: 60, // 小尺寸(rpx) - iconSize: 40, // 标准图标尺寸(rpx) - smallIconSize: 30, // 小图标尺寸(rpx) - background: 'rgba(0, 0, 0, 0.4)', // 背景颜色 - }, - - // 布局配置 - layout: { - borderRadius: 12, // 圆角(rpx) - padding: 16, // 内边距(rpx) - margin: 10, // 外边距(rpx) - }, - - // 字体配置 - font: { - channelNameSize: 28, // 频道名称字体大小(rpx) - videoTitleSize: 28, // 视频标题字体大小(rpx) - statsSize: 24, // 统计信息字体大小(rpx) - }, - - // 颜色配置 - color: { - channelName: '#333', // 频道名称颜色 - videoTitle: '#333', // 视频标题颜色 - stats: '#999', // 统计信息颜色 - border: '#f0f0f0', // 边框颜色 - }, - - // 微信相关配置 - wechat: { - minSdkVersion: '2.19.2', // 最小微信基础库版本 - embedComponent: 'channel-video', // 嵌入式视频组件名称 - }, - - // 错误提示配置 - error: { - notWechat: $lang('diy.js.wechat-channel.l59.t0'), - lowVersion: $lang('diy.js.wechat-channel.l60.t0'), - notSupported: $lang('diy.js.wechat-channel.l61.t0'), - missingFields: $lang('diy.js.wechat-channel.l62.t0'), - }, -}; - -// 获取配置项的辅助函数 -export const getwechatChannelConfig = (key, defaultValue = null) => { - const keys = key.split('.'); - let config = wechatChannelConfig; - - for (const k of keys) { - if (config[k] === undefined) { - return defaultValue; - } - config = config[k]; - } - - return config; -}; - -// 微信视频号工具函数 -export const wechatChannelUtil = { - // 版本比较 - versionCompare(v1, v2) { - const arr1 = v1.split('.'); - const arr2 = v2.split('.'); - for (let i = 0; i < Math.max(arr1.length, arr2.length); i++) { - const num1 = parseInt(arr1[i] || 0); - const num2 = parseInt(arr2[i] || 0); - if (num1 > num2) return 1; - if (num1 < num2) return -1; - } - return 0; - }, - - // 检查是否支持嵌入式播放 - isEmbedModeSupported() { - return typeof wx !== 'undefined' && wx.canIUse(wechatChannelConfig.wechat.embedComponent); - }, - - // 获取默认视频封面 - getDefaultCoverUrl() { - return wechatChannelConfig.video.defaultCoverUrl; - }, - - // 数据校验 - validateVideoData(item) { - const requiredFields = ['feedId', 'finderUserName']; - for (const field of requiredFields) { - if (!item[field]) { - throw new Error($lang(`diy.js.wechat-channel.l111.t0`)); - } - } - return true; - }, - - // 播放视频 - playVideo(item) { - return new Promise((resolve, reject) => { - try { - // 数据校验 - this.validateVideoData(item); - } catch (err) { - this.handleError(err, item); - reject(err); - return; - } - - // 检查微信环境 - if (typeof wx === 'undefined') { - const err = new Error(wechatChannelConfig.error.notWechat); - this.handleError(err, item); - reject(err); - return; - } - - // 检查基础库版本 - const systemInfo = wx.getSystemInfoSync(); - const SDKVersion = systemInfo.SDKVersion; - if (this.versionCompare(SDKVersion, wechatChannelConfig.wechat.minSdkVersion) < 0) { - const err = new Error(wechatChannelConfig.error.lowVersion); - this.handleError(err, item); - reject(err); - return; - } - - // 调用微信视频号播放API - if (wx.openChannelsActivity) { - wx.openChannelsActivity({ - feedId: item.feedId, - finderUserName: item.finderUserName, - success: (res) => { - resolve(res); - }, - fail: (err) => { - this.handleError(err, item); - reject(err); - } - }); - } else { - const err = new Error(wechatChannelConfig.error.notSupported); - this.handleError(err, item); - reject(err); - } - }); - }, - - // 统一错误处理 - handleError(err, item) { - console.error($lang('diy.js.wechat-channel.l170.t0'), err); - const { message = '', errMsg = '微信视频播放失败!', errCode = -1 } = err; - - // 错误码5: 表示用户点击了取消. openChannelsActivity:fail cancel - if ([5].includes(errCode)) { - return; - } - - const showErrorToast = (otherMsgs = []) => { - uni.showToast({ - title: [errMsg, message,...otherMsgs].join('\n'), - icon: 'none', - duration: 2000 - }); - } - showErrorToast(); - } +// 微信视频号组件配置 +export const wechatChannelConfig = { + // 图标相关 + icon: { + defaultSize: 80, // 默认图标尺寸(rpx) + smallSize: 60, // 小图标尺寸(rpx) + channelArrowSize: 24, // 频道箭头图标尺寸(rpx) + channelArrow: 'addon/personnel/shop/view/enterprise/arrow.png', // 频道箭头图标路径 + }, + + + // 视频相关配置 + video: { + defaultHeight: 320, // 默认视频高度(rpx) + minHeight: 200, // 最小视频高度(rpx) + maxHeight: 500, // 最大视频高度(rpx) + defaultCoverUrl: 'addon/personnel/shop/view/enterprise/default-video-cover.png', // 默认视频封面 + }, + + // 播放按钮配置 + playButton: { + size: 80, // 标准尺寸(rpx) + smallSize: 60, // 小尺寸(rpx) + iconSize: 40, // 标准图标尺寸(rpx) + smallIconSize: 30, // 小图标尺寸(rpx) + background: 'rgba(0, 0, 0, 0.4)', // 背景颜色 + }, + + // 布局配置 + layout: { + borderRadius: 12, // 圆角(rpx) + padding: 16, // 内边距(rpx) + margin: 10, // 外边距(rpx) + }, + + // 字体配置 + font: { + channelNameSize: 28, // 频道名称字体大小(rpx) + videoTitleSize: 28, // 视频标题字体大小(rpx) + statsSize: 24, // 统计信息字体大小(rpx) + }, + + // 颜色配置 + color: { + channelName: '#333', // 频道名称颜色 + videoTitle: '#333', // 视频标题颜色 + stats: '#999', // 统计信息颜色 + border: '#f0f0f0', // 边框颜色 + }, + + // 微信相关配置 + wechat: { + minSdkVersion: '2.19.2', // 最小微信基础库版本 + embedComponent: 'channel-video', // 嵌入式视频组件名称 + }, + + // 错误提示配置 + error: { + notWechat: '当前环境不是微信小程序', + lowVersion: '当前微信基础库版本过低,需要 2.19.2 或以上版本', + notSupported: '当前环境不支持微信视频号', + missingFields: '缺少必要字段: {field}', + }, +}; + +// 获取配置项的辅助函数 +export const getwechatChannelConfig = (key, defaultValue = null) => { + const keys = key.split('.'); + let config = wechatChannelConfig; + + for (const k of keys) { + if (config[k] === undefined) { + return defaultValue; + } + config = config[k]; + } + + return config; +}; + +// 微信视频号工具函数 +export const wechatChannelUtil = { + // 版本比较 + versionCompare(v1, v2) { + const arr1 = v1.split('.'); + const arr2 = v2.split('.'); + for (let i = 0; i < Math.max(arr1.length, arr2.length); i++) { + const num1 = parseInt(arr1[i] || 0); + const num2 = parseInt(arr2[i] || 0); + if (num1 > num2) return 1; + if (num1 < num2) return -1; + } + return 0; + }, + + // 检查是否支持嵌入式播放 + isEmbedModeSupported() { + return typeof wx !== 'undefined' && wx.canIUse(wechatChannelConfig.wechat.embedComponent); + }, + + // 获取默认视频封面 + getDefaultCoverUrl() { + return wechatChannelConfig.video.defaultCoverUrl; + }, + + // 数据校验 + validateVideoData(item) { + const requiredFields = ['feedId', 'finderUserName']; + for (const field of requiredFields) { + if (!item[field]) { + throw new Error(`缺少必要字段: ${field}`); + } + } + return true; + }, + + // 播放视频 + playVideo(item) { + return new Promise((resolve, reject) => { + try { + // 数据校验 + this.validateVideoData(item); + } catch (err) { + this.handleError(err, item); + reject(err); + return; + } + + // 检查微信环境 + if (typeof wx === 'undefined') { + const err = new Error(wechatChannelConfig.error.notWechat); + this.handleError(err, item); + reject(err); + return; + } + + // 检查基础库版本 + const systemInfo = wx.getSystemInfoSync(); + const SDKVersion = systemInfo.SDKVersion; + if (this.versionCompare(SDKVersion, wechatChannelConfig.wechat.minSdkVersion) < 0) { + const err = new Error(wechatChannelConfig.error.lowVersion); + this.handleError(err, item); + reject(err); + return; + } + + // 调用微信视频号播放API + if (wx.openChannelsActivity) { + wx.openChannelsActivity({ + feedId: item.feedId, + finderUserName: item.finderUserName, + success: (res) => { + resolve(res); + }, + fail: (err) => { + this.handleError(err, item); + reject(err); + } + }); + } else { + const err = new Error(wechatChannelConfig.error.notSupported); + this.handleError(err, item); + reject(err); + } + }); + }, + + // 统一错误处理 + handleError(err, item) { + console.error('微信视频号错误:', err); + const { message = '', errMsg = '微信视频播放失败!', errCode = -1 } = err; + + // 错误码5: 表示用户点击了取消. openChannelsActivity:fail cancel + if ([5].includes(errCode)) { + return; + } + + const showErrorToast = (otherMsgs = []) => { + uni.showToast({ + title: [errMsg, message,...otherMsgs].join('\n'), + icon: 'none', + duration: 2000 + }); + } + showErrorToast(); + } }; \ No newline at end of file diff --git a/components/chat-message/chat-message.vue b/components/chat-message/chat-message.vue index c9b7654..110b227 100644 --- a/components/chat-message/chat-message.vue +++ b/components/chat-message/chat-message.vue @@ -1,333 +1,333 @@ - - - - - \ No newline at end of file diff --git a/components/hover-nav/hover-nav.vue b/components/hover-nav/hover-nav.vue index b2b6b31..3749334 100644 --- a/components/hover-nav/hover-nav.vue +++ b/components/hover-nav/hover-nav.vue @@ -1,329 +1,329 @@ - - - - - \ No newline at end of file diff --git a/components/l-time/l-time.vue b/components/l-time/l-time.vue index f0a708c..a2e78fc 100644 --- a/components/l-time/l-time.vue +++ b/components/l-time/l-time.vue @@ -37,7 +37,7 @@ export default { getText() { let self = this; let timeVal = _time_.getFormatTime(self.textVal, self.maxDate); - if (timeVal && (timeVal.endsWith($lang('common.l-time.l40.t0')) || timeVal.endsWith($lang('common.l-time.l40.t1')))) { + if (timeVal && (timeVal.endsWith('刚刚') || timeVal.endsWith('分钟前'))) { setTimeout(() => { let temp = self.textVal; self.textVal = ''; diff --git a/components/l-time/time.js b/components/l-time/time.js index 1b61f6c..76c5f4b 100644 --- a/components/l-time/time.js +++ b/components/l-time/time.js @@ -1,161 +1,161 @@ -Function.prototype.asyAfter = function(afterfn) { - var _self = this; - return function() { - var ret = _self.apply(this, arguments); - if (ret === 'next') { - return afterfn.apply(this, arguments); - } - return ret; - } -} - -Date.prototype.pattern = function(fmt) { - var o = { - "M+": this.getMonth() + 1, //月份 - "d+": this.getDate(), //日 - "h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //小时 - "H+": this.getHours(), //小时 - "m+": this.getMinutes(), //分 - "s+": this.getSeconds(), //秒 - "q+": Math.floor((this.getMonth() + 3) / 3), //季度 - "S": this.getMilliseconds() //毫秒 - }; - var week = { - "0": "\u65e5", - "1": "\u4e00", - "2": "\u4e8c", - "3": "\u4e09", - "4": "\u56db", - "5": "\u4e94", - "6": "\u516d" - }; - if (/(y+)/.test(fmt)) { - fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); - } - if (/(E+)/.test(fmt)) { - fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "\u661f\u671f" : "\u5468") : - "") + - week[this.getDay() + ""]); - } - for (var k in o) { - if (new RegExp("(" + k + ")").test(fmt)) { - fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]) - .length))); - } - } - return fmt; -} - -const isType = type => (/^\[object\s(.*)\]$/.exec(Object.prototype.toString.call(type)))[1]; -let Time = function() {}; -let timeProto = Time.prototype; - -//获取当前时间戳 -timeProto.getUnix = function() { - return new Date().getTime(); -} - -//获取当天0点0分0秒时间戳 -timeProto.getTodayUnix = function() { - let date = new Date(); - let myDate = `${date.getFullYear()}/${(date.getMonth() + 1)}/${date.getDate()} 00:00:00`; - return new Date(myDate).getTime(); -} - -//获取今年1月1日0点0分0秒时间戳 -timeProto.getYearUnix = function() { - let date = new Date(); - date.setMonth(0); - date.setDate(1); - date.setHours(0); - date.setMinutes(0); - date.setSeconds(0); - date.setMilliseconds(0); - return date.getTime(); -} - -//获取当前时间标准年月日 -timeProto.getLastDate = function(constTime) { - if (!constTime) { - return; - } - let date = new Date(constTime); - if (date.pattern) { - return date.pattern("yyyy-MM-dd"); - } - - let month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1; - let day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate(); - return date.getFullYear() + '-' + month + '-' + day; -} - -const resDateStr = function(timer, constTime) { - let _just = function(timer) { - - if (timer <= 0 || Math.floor(timer / 60) <= 0) { - return $lang("common.l-time.l40.t0") - } else return 'next'; - } - - let _mm = function(timer) { - if (timer < 3600) { - return Math.floor(timer / 60) + $lang("common.l-time.l40.t1") - } else return 'next'; - } - let _hh = function(timer, constTime) { - let today = _time_.getTodayUnix(); - if (timer >= 3600 && (constTime - today >= 0)) { - //可切换显示模式 - // return "今天 " + new Date(constTime).pattern("HH:mm"); - return Math.floor(timer / 60 / 60) + $lang("common.l-time.time.l110.t0"); - } else { - return 'next' - }; - } - let _dd = function(timer, constTime) { - let today = _time_.getTodayUnix(); - timer = (today - constTime) / 1000; - if (timer / 86400 <= 31) { - return Math.ceil(timer / 86400) + $lang("common.l-time.time.l119.t0") - } else return 'next'; - } - let _dlast = function(timer, constTime) { - return _time_.getLastDate(constTime); - } - - let dateFilter = _just.asyAfter(_mm).asyAfter(_hh).asyAfter(_dd).asyAfter(_dlast); - return dateFilter(timer, constTime); -} - - -//转换时间 -const reg = new RegExp("-", "g"); -timeProto.getFormatTime = function(constTime, max) { - if (!constTime) { - return ""; - } - - switch (isType(constTime)) { - case 'Date': - constTime = constTime.getTime(); - break; - case 'String': - constTime = constTime.replace(reg, "/"); - default: - constTime = new Date(constTime).getTime(); - break; - } - - let now = this.getUnix(); - let year = this.getYearUnix(); - let timer = (now - constTime) / 1000; - if (constTime > now && max) { - return this.getLastDate(constTime); - } - - let _t = this; - return resDateStr(timer, constTime); -} - -const _time_ = new Time(); -export default _time_; +Function.prototype.asyAfter = function(afterfn) { + var _self = this; + return function() { + var ret = _self.apply(this, arguments); + if (ret === 'next') { + return afterfn.apply(this, arguments); + } + return ret; + } +} + +Date.prototype.pattern = function(fmt) { + var o = { + "M+": this.getMonth() + 1, //月份 + "d+": this.getDate(), //日 + "h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //小时 + "H+": this.getHours(), //小时 + "m+": this.getMinutes(), //分 + "s+": this.getSeconds(), //秒 + "q+": Math.floor((this.getMonth() + 3) / 3), //季度 + "S": this.getMilliseconds() //毫秒 + }; + var week = { + "0": "\u65e5", + "1": "\u4e00", + "2": "\u4e8c", + "3": "\u4e09", + "4": "\u56db", + "5": "\u4e94", + "6": "\u516d" + }; + if (/(y+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); + } + if (/(E+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "\u661f\u671f" : "\u5468") : + "") + + week[this.getDay() + ""]); + } + for (var k in o) { + if (new RegExp("(" + k + ")").test(fmt)) { + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]) + .length))); + } + } + return fmt; +} + +const isType = type => (/^\[object\s(.*)\]$/.exec(Object.prototype.toString.call(type)))[1]; +let Time = function() {}; +let timeProto = Time.prototype; + +//获取当前时间戳 +timeProto.getUnix = function() { + return new Date().getTime(); +} + +//获取当天0点0分0秒时间戳 +timeProto.getTodayUnix = function() { + let date = new Date(); + let myDate = `${date.getFullYear()}/${(date.getMonth() + 1)}/${date.getDate()} 00:00:00`; + return new Date(myDate).getTime(); +} + +//获取今年1月1日0点0分0秒时间戳 +timeProto.getYearUnix = function() { + let date = new Date(); + date.setMonth(0); + date.setDate(1); + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + return date.getTime(); +} + +//获取当前时间标准年月日 +timeProto.getLastDate = function(constTime) { + if (!constTime) { + return; + } + let date = new Date(constTime); + if (date.pattern) { + return date.pattern("yyyy-MM-dd"); + } + + let month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1; + let day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate(); + return date.getFullYear() + '-' + month + '-' + day; +} + +const resDateStr = function(timer, constTime) { + let _just = function(timer) { + + if (timer <= 0 || Math.floor(timer / 60) <= 0) { + return "刚刚" + } else return 'next'; + } + + let _mm = function(timer) { + if (timer < 3600) { + return Math.floor(timer / 60) + "分钟前" + } else return 'next'; + } + let _hh = function(timer, constTime) { + let today = _time_.getTodayUnix(); + if (timer >= 3600 && (constTime - today >= 0)) { + //可切换显示模式 + // return "今天 " + new Date(constTime).pattern("HH:mm"); + return Math.floor(timer / 60 / 60) + "小时前"; + } else { + return 'next' + }; + } + let _dd = function(timer, constTime) { + let today = _time_.getTodayUnix(); + timer = (today - constTime) / 1000; + if (timer / 86400 <= 31) { + return Math.ceil(timer / 86400) + "天前" + } else return 'next'; + } + let _dlast = function(timer, constTime) { + return _time_.getLastDate(constTime); + } + + let dateFilter = _just.asyAfter(_mm).asyAfter(_hh).asyAfter(_dd).asyAfter(_dlast); + return dateFilter(timer, constTime); +} + + +//转换时间 +const reg = new RegExp("-", "g"); +timeProto.getFormatTime = function(constTime, max) { + if (!constTime) { + return ""; + } + + switch (isType(constTime)) { + case 'Date': + constTime = constTime.getTime(); + break; + case 'String': + constTime = constTime.replace(reg, "/"); + default: + constTime = new Date(constTime).getTime(); + break; + } + + let now = this.getUnix(); + let year = this.getYearUnix(); + let timer = (now - constTime) / 1000; + if (constTime > now && max) { + return this.getLastDate(constTime); + } + + let _t = this; + return resDateStr(timer, constTime); +} + +const _time_ = new Time(); +export default _time_; diff --git a/components/mescroll/mescroll-uni-option.js b/components/mescroll/mescroll-uni-option.js index f14a324..a701ad1 100644 --- a/components/mescroll/mescroll-uni-option.js +++ b/components/mescroll/mescroll-uni-option.js @@ -3,15 +3,15 @@ const GlobalOption = { down: { // 其他down的配置参数也可以写,这里只展示了常用的配置: - textInOffset: $lang('common.mescroll.mescroll-uni-option.l6.t0'), // 下拉的距离在offset范围内的提示文本 - textOutOffset: $lang('common.mescroll.mescroll-uni-option.l7.t0'), // 下拉的距离大于offset范围的提示文本 - textLoading: $lang('common.mescroll.mescroll-uni-option.l8.t0'), // 加载中的提示文本 + textInOffset: '下拉刷新', // 下拉的距离在offset范围内的提示文本 + textOutOffset: '释放更新', // 下拉的距离大于offset范围的提示文本 + textLoading: '加载中 ...', // 加载中的提示文本 offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 native: false // 是否使用系统自带的下拉刷新; 默认false; 仅在mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) }, up: { // 其他up的配置参数也可以写,这里只展示了常用的配置: - textLoading: $lang('common.mescroll.mescroll-uni-option.l8.t0'), // 加载中的提示文本 + textLoading: '加载中 ...', // 加载中的提示文本 textNoMore: '', // 没有更多数据的提示文本 // textNoMore: '— 我是有底线的 —', // 没有更多数据的提示文本 offset: 80, // 距底部多远时,触发upCallback @@ -27,7 +27,7 @@ const GlobalOption = { empty: { use: true, // 是否显示空布局 icon: "https://www.mescroll.com/img/mescroll-empty.png?v=1", // 图标路径 (建议放入static目录, 如 /static/img/mescroll-empty.png ) - tip: $lang('common.mescroll.mescroll-uni-option.l30.t0') // 提示 + tip: '~ 暂无相关数据 ~' // 提示 } } } diff --git a/components/mescroll/mescroll-uni.js b/components/mescroll/mescroll-uni.js index adf2063..1b2eb9d 100644 --- a/components/mescroll/mescroll-uni.js +++ b/components/mescroll/mescroll-uni.js @@ -1,841 +1,841 @@ -/* mescroll - * version 1.2.3 - * 2020-02-18 wenju - * http://www.mescroll.com - */ - -export default function MeScroll(options, isScrollBody) { - let me = this; - me.version = '1.2.3'; // mescroll版本号 - me.options = options || {}; // 配置 - me.isScrollBody = isScrollBody || false; // 滚动区域是否为原生页面滚动; 默认为scroll-view - - me.isDownScrolling = false; // 是否在执行下拉刷新的回调 - me.isUpScrolling = false; // 是否在执行上拉加载的回调 - let hasDownCallback = me.options.down && me.options.down.callback; // 是否配置了down的callback - - // 初始化下拉刷新 - me.initDownScroll(); - // 初始化上拉加载,则初始化 - me.initUpScroll(); - - // 自动加载 - setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 - // 自动触发下拉刷新 (只有配置了down的callback才自动触发下拉刷新) - if (me.optDown.use && me.optDown.auto && hasDownCallback) { - if (me.optDown.autoShowLoading) { - me.triggerDownScroll(); // 显示下拉进度,执行下拉回调 - } else { - me.optDown.callback && me.optDown.callback(me); // 不显示下拉进度,直接执行下拉回调 - } - } - // 自动触发上拉加载 - setTimeout(function() { // 延时确保先执行down的callback,再执行up的callback,因为部分小程序emit是异步,会导致isUpAutoLoad判断有误 - me.optUp.use && me.optUp.auto && !me.isUpAutoLoad && me.triggerUpScroll(); - }, 100) - }, 30); // 需让me.optDown.inited和me.optUp.inited先执行 -} - -/* 配置参数:下拉刷新 */ -MeScroll.prototype.extendDownScroll = function(optDown) { - // 下拉刷新的配置 - MeScroll.extend(optDown, { - use: true, // 是否启用下拉刷新; 默认true - auto: true, // 是否在初始化完毕之后自动执行下拉刷新的回调; 默认true - native: false, // 是否使用系统自带的下拉刷新; 默认false; 仅mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) - autoShowLoading: false, // 如果设置auto=true(在初始化完毕之后自动执行下拉刷新的回调),那么是否显示下拉刷新的进度; 默认false - isLock: false, // 是否锁定下拉刷新,默认false; - offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 - startTop: 100, // scroll-view滚动到顶部时,此时的scroll-top不一定为0, 此值用于控制最大的误差 - fps: 80, // 下拉节流 (值越大每秒刷新频率越高) - inOffsetRate: 1, // 在列表顶部,下拉的距离小于offset时,改变下拉区域高度比例;值小于1且越接近0,高度变化越小,表现为越往下越难拉 - outOffsetRate: 0.2, // 在列表顶部,下拉的距离大于offset时,改变下拉区域高度比例;值小于1且越接近0,高度变化越小,表现为越往下越难拉 - bottomOffset: 20, // 当手指touchmove位置在距离body底部20px范围内的时候结束上拉刷新,避免Webview嵌套导致touchend事件不执行 - minAngle: 45, // 向下滑动最少偏移的角度,取值区间 [0,90];默认45度,即向下滑动的角度大于45度则触发下拉;而小于45度,将不触发下拉,避免与左右滑动的轮播等组件冲突; - textInOffset: $lang('common.mescroll.mescroll-uni-option.l6.t0'), // 下拉的距离在offset范围内的提示文本 - textOutOffset: $lang('common.mescroll.mescroll-uni-option.l7.t0'), // 下拉的距离大于offset范围的提示文本 - textLoading: $lang('common.mescroll.mescroll-uni-option.l8.t0'), // 加载中的提示文本 - inited: null, // 下拉刷新初始化完毕的回调 - inOffset: null, // 下拉的距离进入offset范围内那一刻的回调 - outOffset: null, // 下拉的距离大于offset那一刻的回调 - onMoving: null, // 下拉过程中的回调,滑动过程一直在执行; rate下拉区域当前高度与指定距离的比值(inOffset: rate<1; outOffset: rate>=1); downHight当前下拉区域的高度 - beforeLoading: null, // 准备触发下拉刷新的回调: 如果return true,将不触发showLoading和callback回调; 常用来完全自定义下拉刷新, 参考案例【淘宝 v6.8.0】 - showLoading: null, // 显示下拉刷新进度的回调 - afterLoading: null, // 准备结束下拉的回调. 返回结束下拉的延时执行时间,默认0ms; 常用于结束下拉之前再显示另外一小段动画,才去隐藏下拉刷新的场景, 参考案例【dotJump】 - endDownScroll: null, // 结束下拉刷新的回调 - callback: function(mescroll) { - // 下拉刷新的回调;默认重置上拉加载列表为第一页 - mescroll.resetUpScroll(); - } - }) -} - -/* 配置参数:上拉加载 */ -MeScroll.prototype.extendUpScroll = function(optUp) { - // 上拉加载的配置 - MeScroll.extend(optUp, { - use: true, // 是否启用上拉加载; 默认true - auto: true, // 是否在初始化完毕之后自动执行上拉加载的回调; 默认true - isLock: false, // 是否锁定上拉加载,默认false; - isBoth: true, // 上拉加载时,如果滑动到列表顶部是否可以同时触发下拉刷新;默认true,两者可同时触发; - isBounce: false, // 默认禁止橡皮筋的回弹效果, 必读事项: http://www.mescroll.com/qa.html?v=190725#q25 - callback: null, // 上拉加载的回调;function(page,mescroll){ } - page: { - num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始 - size: 10, // 每页数据的数量 - time: null // 加载第一页数据服务器返回的时间; 防止用户翻页时,后台新增了数据从而导致下一页数据重复; - }, - noMoreSize: 5, // 如果列表已无数据,可设置列表的总数量要大于等于5条才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看 - offset: 80, // 距底部多远时,触发upCallback - textLoading: $lang('common.mescroll.mescroll-uni-option.l8.t0'), // 加载中的提示文本 - textNoMore: '-- END --', // 没有更多数据的提示文本 - inited: null, // 初始化完毕的回调 - showLoading: null, // 显示加载中的回调 - showNoMore: null, // 显示无更多数据的回调 - hideUpScroll: null, // 隐藏上拉加载的回调 - errDistance: 60, // endErr的时候需往上滑动一段距离,使其往下滑动时再次触发onReachBottom,仅mescroll-body生效 - toTop: { - // 回到顶部按钮,需配置src才显示 - src: null, // 图片路径,默认null (绝对路径或网络图) - offset: 1000, // 列表滚动多少距离才显示回到顶部按钮,默认1000 - duration: 300, // 回到顶部的动画时长,默认300ms (当值为0或300则使用系统自带回到顶部,更流畅; 其他值则通过step模拟,部分机型可能不够流畅,所以非特殊情况不建议修改此项) - btnClick: null, // 点击按钮的回调 - onShow: null, // 是否显示的回调 - zIndex: 9990, // fixed定位z-index值 - left: null, // 到左边的距离, 默认null. 此项有值时,right不生效. (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) - right: 20, // 到右边的距离, 默认20 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) - bottom: 120, // 到底部的距离, 默认120 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) - safearea: false, // bottom的偏移量是否加上底部安全区的距离, 默认false, 需要适配iPhoneX时使用 (具体的界面如果不配置此项,则取本vue的safearea值) - width: 72, // 回到顶部图标的宽度, 默认72 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) - radius: "50%" // 圆角, 默认"50%" (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) - }, - empty: { - use: true, // 是否显示空布局 - icon: null, // 图标路径 - tip: $lang('common.mescroll.mescroll-uni-option.l30.t0'), // 提示 - btnText: '', // 按钮 - btnClick: null, // 点击按钮的回调 - onShow: null, // 是否显示的回调 - fixed: false, // 是否使用fixed定位,默认false; 配置fixed为true,以下的top和zIndex才生效 (transform会使fixed失效,最终会降级为absolute) - top: "100rpx", // fixed定位的top值 (完整的单位值,如 "10%"; "100rpx") - zIndex: 99 // fixed定位z-index值 - }, - onScroll: false // 是否监听滚动事件 - }) -} - -/* 配置参数 */ -MeScroll.extend = function(userOption, defaultOption) { - if (!userOption) return defaultOption; - for (let key in defaultOption) { - if (userOption[key] == null) { - let def = defaultOption[key]; - if (def != null && typeof def === 'object') { - userOption[key] = MeScroll.extend({}, def); // 深度匹配 - } else { - userOption[key] = def; - } - } else if (typeof userOption[key] === 'object') { - MeScroll.extend(userOption[key], defaultOption[key]); // 深度匹配 - } - } - return userOption; -} - -/* -------初始化下拉刷新------- */ -MeScroll.prototype.initDownScroll = function() { - let me = this; - // 配置参数 - me.optDown = me.options.down || {}; - me.extendDownScroll(me.optDown); - - // 如果是mescroll-body且配置了native,则禁止自定义的下拉刷新 - if (me.isScrollBody && me.optDown.native) { - me.optDown.use = false - } else { - me.optDown.native = false // 仅mescroll-body支持,mescroll-uni不支持 - } - - me.downHight = 0; // 下拉区域的高度 - - // 在页面中加入下拉布局 - if (me.optDown.use && me.optDown.inited) { - // 初始化完毕的回调 - setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 - me.optDown.inited(me); - }, 0) - } -} - -/* 列表touchstart事件 */ -MeScroll.prototype.touchstartEvent = function(e) { - if (!this.optDown.use) return; - - this.startPoint = this.getPoint(e); // 记录起点 - this.startTop = this.getScrollTop(); // 记录此时的滚动条位置 - this.lastPoint = this.startPoint; // 重置上次move的点 - this.maxTouchmoveY = this.getBodyHeight() - this.optDown.bottomOffset; // 手指触摸的最大范围(写在touchstart避免body获取高度为0的情况) - this.inTouchend = false; // 标记不是touchend -} - -/* 列表touchmove事件 */ -MeScroll.prototype.touchmoveEvent = function(e) { - if (!this.optDown.use) return; - if (!this.startPoint) return; - let me = this; - - // 节流 - let t = new Date().getTime(); - if (me.moveTime && t - me.moveTime < me.moveTimeDiff) { // 小于节流时间,则不处理 - return; - } else { - me.moveTime = t - if (!me.moveTimeDiff) me.moveTimeDiff = 1000 / me.optDown.fps - } - - let scrollTop = me.getScrollTop(); // 当前滚动条的距离 - let curPoint = me.getPoint(e); // 当前点 - - let moveY = curPoint.y - me.startPoint.y; // 和起点比,移动的距离,大于0向下拉,小于0向上拉 - - // 向下拉 && 在顶部 - // mescroll-body,直接判定在顶部即可 - // scroll-view在滚动时不会触发touchmove,当触顶/底/左/右时,才会触发touchmove - // scroll-view滚动到顶部时,scrollTop不一定为0; 在iOS的APP中scrollTop可能为负数,不一定和startTop相等 - if (moveY > 0 && ( - (me.isScrollBody && scrollTop <= 0) || - (!me.isScrollBody && (scrollTop <= 0 || (scrollTop <= me.optDown.startTop && scrollTop === me.startTop))) - )) { - // 可下拉的条件 - if (!me.inTouchend && !me.isDownScrolling && !me.optDown.isLock && (!me.isUpScrolling || (me.isUpScrolling && - me.optUp.isBoth))) { - - // 下拉的角度是否在配置的范围内 - let angle = me.getAngle(me.lastPoint, curPoint); // 两点之间的角度,区间 [0,90] - if (angle < me.optDown.minAngle) return; // 如果小于配置的角度,则不往下执行下拉刷新 - - // 如果手指的位置超过配置的距离,则提前结束下拉,避免Webview嵌套导致touchend无法触发 - if (me.maxTouchmoveY > 0 && curPoint.y >= me.maxTouchmoveY) { - me.inTouchend = true; // 标记执行touchend - me.touchendEvent(); // 提前触发touchend - return; - } - - me.preventDefault(e); // 阻止默认事件 - - let diff = curPoint.y - me.lastPoint.y; // 和上次比,移动的距离 (大于0向下,小于0向上) - - // 下拉距离 < 指定距离 - if (me.downHight < me.optDown.offset) { - if (me.movetype !== 1) { - me.movetype = 1; // 加入标记,保证只执行一次 - me.optDown.inOffset && me.optDown.inOffset(me); // 进入指定距离范围内那一刻的回调,只执行一次 - me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来 - } - me.downHight += diff * me.optDown.inOffsetRate; // 越往下,高度变化越小 - - // 指定距离 <= 下拉距离 - } else { - if (me.movetype !== 2) { - me.movetype = 2; // 加入标记,保证只执行一次 - me.optDown.outOffset && me.optDown.outOffset(me); // 下拉超过指定距离那一刻的回调,只执行一次 - me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来 - } - if (diff > 0) { // 向下拉 - me.downHight += Math.round(diff * me.optDown.outOffsetRate); // 越往下,高度变化越小 - } else { // 向上收 - me.downHight += diff; // 向上收回高度,则向上滑多少收多少高度 - } - } - - let rate = me.downHight / me.optDown.offset; // 下拉区域当前高度与指定距离的比值 - me.optDown.onMoving && me.optDown.onMoving(me, rate, me.downHight); // 下拉过程中的回调,一直在执行 - } - } - - me.lastPoint = curPoint; // 记录本次移动的点 -} - -/* 列表touchend事件 */ -MeScroll.prototype.touchendEvent = function(e) { - if (!this.optDown.use) return; - // 如果下拉区域高度已改变,则需重置回来 - if (this.isMoveDown) { - if (this.downHight >= this.optDown.offset) { - // 符合触发刷新的条件 - this.triggerDownScroll(); - } else { - // 不符合的话 则重置 - this.downHight = 0; - this.optDown.endDownScroll && this.optDown.endDownScroll(this); - } - this.movetype = 0; - this.isMoveDown = false; - } else if (!this.isScrollBody && this.getScrollTop() === this.startTop) { // scroll-view到顶/左/右/底的滑动事件 - let isScrollUp = this.getPoint(e).y - this.startPoint.y < 0; // 和起点比,移动的距离,大于0向下拉,小于0向上拉 - // 上滑 - if (isScrollUp) { - // 需检查滑动的角度 - let angle = this.getAngle(this.getPoint(e), this.startPoint); // 两点之间的角度,区间 [0,90] - if (angle > 80) { - // 检查并触发上拉 - this.triggerUpScroll(true); - } - } - } -} - -/* 根据点击滑动事件获取第一个手指的坐标 */ -MeScroll.prototype.getPoint = function(e) { - if (!e) { - return { - x: 0, - y: 0 - } - } - if (e.touches && e.touches[0]) { - return { - x: e.touches[0].pageX, - y: e.touches[0].pageY - } - } else if (e.changedTouches && e.changedTouches[0]) { - return { - x: e.changedTouches[0].pageX, - y: e.changedTouches[0].pageY - } - } else { - return { - x: e.clientX, - y: e.clientY - } - } -} - -/* 计算两点之间的角度: 区间 [0,90]*/ -MeScroll.prototype.getAngle = function(p1, p2) { - let x = Math.abs(p1.x - p2.x); - let y = Math.abs(p1.y - p2.y); - let z = Math.sqrt(x * x + y * y); - let angle = 0; - if (z !== 0) { - angle = Math.asin(y / z) / Math.PI * 180; - } - return angle -} - -/* 触发下拉刷新 */ -MeScroll.prototype.triggerDownScroll = function() { - if (this.optDown.beforeLoading && this.optDown.beforeLoading(this)) { - //return true则处于完全自定义状态 - } else { - this.showDownScroll(); // 下拉刷新中... - this.optDown.callback && this.optDown.callback(this); // 执行回调,联网加载数据 - } -} - -/* 显示下拉进度布局 */ -MeScroll.prototype.showDownScroll = function() { - this.isDownScrolling = true; // 标记下拉中 - if (this.optDown.native) { - uni.startPullDownRefresh(); // 系统自带的下拉刷新 - this.optDown.showLoading && this.optDown.showLoading(this, 0); // 仍触发showLoading,因为上拉加载用到 - } else { - this.downHight = this.optDown.offset; // 更新下拉区域高度 - this.optDown.showLoading && this.optDown.showLoading(this, this.downHight); // 下拉刷新中... - } -} - -/* 显示系统自带的下拉刷新时需要处理的业务 */ -MeScroll.prototype.onPullDownRefresh = function() { - this.isDownScrolling = true; // 标记下拉中 - this.optDown.showLoading && this.optDown.showLoading(this, 0); // 仍触发showLoading,因为上拉加载用到 - this.optDown.callback && this.optDown.callback(this); // 执行回调,联网加载数据 -} - -/* 结束下拉刷新 */ -MeScroll.prototype.endDownScroll = function() { - if (this.optDown.native) { // 结束原生下拉刷新 - this.isDownScrolling = false; - this.optDown.endDownScroll && this.optDown.endDownScroll(this); - uni.stopPullDownRefresh(); - return - } - let me = this; - // 结束下拉刷新的方法 - let endScroll = function() { - me.downHight = 0; - me.isDownScrolling = false; - me.optDown.endDownScroll && me.optDown.endDownScroll(me); - !me.isScrollBody && me.setScrollHeight(0) // scroll-view重置滚动区域,使数据不满屏时仍可检查触发翻页 - } - // 结束下拉刷新时的回调 - let delay = 0; - if (me.optDown.afterLoading) delay = me.optDown.afterLoading(me); // 结束下拉刷新的延时,单位ms - if (typeof delay === 'number' && delay > 0) { - setTimeout(endScroll, delay); - } else { - endScroll(); - } -} - -/* 锁定下拉刷新:isLock=ture,null锁定;isLock=false解锁 */ -MeScroll.prototype.lockDownScroll = function(isLock) { - if (isLock == null) isLock = true; - this.optDown.isLock = isLock; -} - -/* 锁定上拉加载:isLock=ture,null锁定;isLock=false解锁 */ -MeScroll.prototype.lockUpScroll = function(isLock) { - if (isLock == null) isLock = true; - this.optUp.isLock = isLock; -} - -/* -------初始化上拉加载------- */ -MeScroll.prototype.initUpScroll = function() { - let me = this; - // 配置参数 - me.optUp = me.options.up || { - use: false - }; - me.extendUpScroll(me.optUp); - - if (!me.optUp.isBounce) me.setBounce(false); // 不允许bounce时,需禁止window的touchmove事件 - - if (me.optUp.use === false) return; // 配置不使用上拉加载时,则不初始化上拉布局 - me.optUp.hasNext = true; // 如果使用上拉,则默认有下一页 - me.startNum = me.optUp.page.num + 1; // 记录page开始的页码 - - // 初始化完毕的回调 - if (me.optUp.inited) { - setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 - me.optUp.inited(me); - }, 0) - } -} - -/*滚动到底部的事件 (仅mescroll-body生效)*/ -MeScroll.prototype.onReachBottom = function() { - if (this.isScrollBody && !this.isUpScrolling) { // 只能支持下拉刷新的时候同时可以触发上拉加载,否则滚动到底部就需要上滑一点才能触发onReachBottom - if (!this.optUp.isLock && this.optUp.hasNext) { - this.triggerUpScroll(); - } - } -} - -/*列表滚动事件 (仅mescroll-body生效)*/ -MeScroll.prototype.onPageScroll = function(e) { - if (!this.isScrollBody) return; - - // 更新滚动条的位置 (主要用于判断下拉刷新时,滚动条是否在顶部) - this.setScrollTop(e.scrollTop); - - // 顶部按钮的显示隐藏 - if (e.scrollTop >= this.optUp.toTop.offset) { - this.showTopBtn(); - } else { - this.hideTopBtn(); - } -} - -/*列表滚动事件*/ -MeScroll.prototype.scroll = function(e, onScroll) { - // 更新滚动条的位置 - this.setScrollTop(e.scrollTop); - // 更新滚动内容高度 - this.setScrollHeight(e.scrollHeight); - - // 向上滑还是向下滑动 - if (this.preScrollY == null) this.preScrollY = 0; - this.isScrollUp = e.scrollTop - this.preScrollY > 0; - this.preScrollY = e.scrollTop; - - // 上滑 && 检查并触发上拉 - this.isScrollUp && this.triggerUpScroll(true); - - // 顶部按钮的显示隐藏 - if (e.scrollTop >= this.optUp.toTop.offset) { - this.showTopBtn(); - } else { - this.hideTopBtn(); - } - - // 滑动监听 - this.optUp.onScroll && onScroll && onScroll() -} - -/* 触发上拉加载 */ -MeScroll.prototype.triggerUpScroll = function(isCheck) { - if (!this.isUpScrolling && this.optUp.use && this.optUp.callback) { - // 是否校验在底部; 默认不校验 - if (isCheck === true) { - let canUp = false; - // 还有下一页 && 没有锁定 && 不在下拉中 - if (this.optUp.hasNext && !this.optUp.isLock && !this.isDownScrolling) { - if (this.getScrollBottom() <= this.optUp.offset) { // 到底部 - canUp = true; // 标记可上拉 - } - } - if (canUp === false) return; - } - this.showUpScroll(); // 上拉加载中... - this.optUp.page.num++; // 预先加一页,如果失败则减回 - this.isUpAutoLoad = true; // 标记上拉已经自动执行过,避免初始化时多次触发上拉回调 - this.num = this.optUp.page.num; // 把最新的页数赋值在mescroll上,避免对page的影响 - this.size = this.optUp.page.size; // 把最新的页码赋值在mescroll上,避免对page的影响 - this.time = this.optUp.page.time; // 把最新的页码赋值在mescroll上,避免对page的影响 - this.optUp.callback(this); // 执行回调,联网加载数据 - } -} - -/* 显示上拉加载中 */ -MeScroll.prototype.showUpScroll = function() { - this.isUpScrolling = true; // 标记上拉加载中 - this.optUp.showLoading && this.optUp.showLoading(this); // 回调 -} - -/* 显示上拉无更多数据 */ -MeScroll.prototype.showNoMore = function() { - this.optUp.hasNext = false; // 标记无更多数据 - this.optUp.showNoMore && this.optUp.showNoMore(this); // 回调 -} - -/* 隐藏上拉区域**/ -MeScroll.prototype.hideUpScroll = function() { - this.optUp.hideUpScroll && this.optUp.hideUpScroll(this); // 回调 -} - -/* 结束上拉加载 */ -MeScroll.prototype.endUpScroll = function(isShowNoMore) { - if (isShowNoMore != null) { // isShowNoMore=null,不处理下拉状态,下拉刷新的时候调用 - if (isShowNoMore) { - this.showNoMore(); // isShowNoMore=true,显示无更多数据 - } else { - this.hideUpScroll(); // isShowNoMore=false,隐藏上拉加载 - } - } - this.isUpScrolling = false; // 标记结束上拉加载 -} - -/* 重置上拉加载列表为第一页 - *isShowLoading 是否显示进度布局; - * 1.默认null,不传参,则显示上拉加载的进度布局 - * 2.传参true, 则显示下拉刷新的进度布局 - * 3.传参false,则不显示上拉和下拉的进度 (常用于静默更新列表数据) - */ -MeScroll.prototype.resetUpScroll = function(isShowLoading) { - if (this.optUp && this.optUp.use) { - let page = this.optUp.page; - this.prePageNum = page.num; // 缓存重置前的页码,加载失败可退回 - this.prePageTime = page.time; // 缓存重置前的时间,加载失败可退回 - page.num = this.startNum; // 重置为第一页 - page.time = null; // 重置时间为空 - if (!this.isDownScrolling && isShowLoading !== false) { // 如果不是下拉刷新触发的resetUpScroll并且不配置列表静默更新,则显示进度; - if (isShowLoading == null) { - this.removeEmpty(); // 移除空布局 - this.showUpScroll(); // 不传参,默认显示上拉加载的进度布局 - } else { - this.showDownScroll(); // 传true,显示下拉刷新的进度布局,不清空列表 - } - } - this.isUpAutoLoad = true; // 标记上拉已经自动执行过,避免初始化时多次触发上拉回调 - this.num = page.num; // 把最新的页数赋值在mescroll上,避免对page的影响 - this.size = page.size; // 把最新的页码赋值在mescroll上,避免对page的影响 - this.time = page.time; // 把最新的页码赋值在mescroll上,避免对page的影响 - this.optUp.callback && this.optUp.callback(this); // 执行上拉回调 - } -} - -/* 设置page.num的值 */ -MeScroll.prototype.setPageNum = function(num) { - this.optUp.page.num = num - 1; -} - -/* 设置page.size的值 */ -MeScroll.prototype.setPageSize = function(size) { - this.optUp.page.size = size; -} - -/* 联网回调成功,结束下拉刷新和上拉加载 - * dataSize: 当前页的数据量(必传) - * totalPage: 总页数(必传) - * systime: 服务器时间 (可空) - */ -MeScroll.prototype.endByPage = function(dataSize, totalPage, systime) { - let hasNext; - if (this.optUp.use && totalPage != null) hasNext = this.optUp.page.num < totalPage; // 是否还有下一页 - this.endSuccess(dataSize, hasNext, systime); -} - -/* 联网回调成功,结束下拉刷新和上拉加载 - * dataSize: 当前页的数据量(必传) - * totalSize: 列表所有数据总数量(必传) - * systime: 服务器时间 (可空) - */ -MeScroll.prototype.endBySize = function(dataSize, totalSize, systime) { - let hasNext; - if (this.optUp.use && totalSize != null) { - let loadSize = (this.optUp.page.num - 1) * this.optUp.page.size + dataSize; // 已加载的数据总数 - hasNext = loadSize < totalSize; // 是否还有下一页 - } - this.endSuccess(dataSize, hasNext, systime); -} - -/* 联网回调成功,结束下拉刷新和上拉加载 - * dataSize: 当前页的数据个数(不是所有页的数据总和),用于上拉加载判断是否还有下一页.如果不传,则会判断还有下一页 - * hasNext: 是否还有下一页,布尔类型;用来解决这个小问题:比如列表共有20条数据,每页加载10条,共2页.如果只根据dataSize判断,则需翻到第三页才会知道无更多数据,如果传了hasNext,则翻到第二页即可显示无更多数据. - * systime: 服务器时间(可空);用来解决这个小问题:当准备翻下一页时,数据库新增了几条记录,此时翻下一页,前面的几条数据会和上一页的重复;这里传入了systime,那么upCallback的page.time就会有值,把page.time传给服务器,让后台过滤新加入的那几条记录 - */ -MeScroll.prototype.endSuccess = function(dataSize, hasNext, systime) { - let me = this; - // 结束下拉刷新 - if (me.isDownScrolling) me.endDownScroll(); - - // 结束上拉加载 - if (me.optUp.use) { - let isShowNoMore; // 是否已无更多数据 - if (dataSize != null) { - let pageNum = me.optUp.page.num; // 当前页码 - let pageSize = me.optUp.page.size; // 每页长度 - // 如果是第一页 - if (pageNum === 1) { - if (systime) me.optUp.page.time = systime; // 设置加载列表数据第一页的时间 - } - if (dataSize < pageSize || hasNext === false) { - // 返回的数据不满一页时,则说明已无更多数据 - me.optUp.hasNext = false; - if (dataSize === 0 && pageNum === 1) { - // 如果第一页无任何数据且配置了空布局 - isShowNoMore = false; - me.showEmpty(); - } else { - // 总列表数少于配置的数量,则不显示无更多数据 - let allDataSize = (pageNum - 1) * pageSize + dataSize; - if (allDataSize < me.optUp.noMoreSize) { - isShowNoMore = false; - } else { - isShowNoMore = true; - } - me.removeEmpty(); // 移除空布局 - } - } else { - // 还有下一页 - isShowNoMore = false; - me.optUp.hasNext = true; - me.removeEmpty(); // 移除空布局 - } - } - - // 隐藏上拉 - me.endUpScroll(isShowNoMore); - } -} - -/* 回调失败,结束下拉刷新和上拉加载 */ -MeScroll.prototype.endErr = function(errDistance) { - // 结束下拉,回调失败重置回原来的页码和时间 - if (this.isDownScrolling) { - let page = this.optUp.page; - if (page && this.prePageNum) { - page.num = this.prePageNum; - page.time = this.prePageTime; - } - this.endDownScroll(); - } - // 结束上拉,回调失败重置回原来的页码 - if (this.isUpScrolling) { - this.optUp.page.num--; - this.endUpScroll(false); - // 如果是mescroll-body,则需往回滚一定距离 - if (this.isScrollBody && errDistance !== 0) { // 不处理0 - if (!errDistance) errDistance = this.optUp.errDistance; // 不传,则取默认 - this.scrollTo(this.getScrollTop() - errDistance, 0) // 往上回滚的距离 - } - } -} - -/* 显示空布局 */ -MeScroll.prototype.showEmpty = function() { - this.optUp.empty.use && this.optUp.empty.onShow && this.optUp.empty.onShow(true) -} - -/* 移除空布局 */ -MeScroll.prototype.removeEmpty = function() { - this.optUp.empty.use && this.optUp.empty.onShow && this.optUp.empty.onShow(false) -} - -/* 显示回到顶部的按钮 */ -MeScroll.prototype.showTopBtn = function() { - if (!this.topBtnShow) { - this.topBtnShow = true; - this.optUp.toTop.onShow && this.optUp.toTop.onShow(true); - } -} - -/* 隐藏回到顶部的按钮 */ -MeScroll.prototype.hideTopBtn = function() { - if (this.topBtnShow) { - this.topBtnShow = false; - this.optUp.toTop.onShow && this.optUp.toTop.onShow(false); - } -} - -/* 获取滚动条的位置 */ -MeScroll.prototype.getScrollTop = function() { - return this.scrollTop || 0 -} - -/* 记录滚动条的位置 */ -MeScroll.prototype.setScrollTop = function(y) { - this.scrollTop = y; -} - -/* 滚动到指定位置 */ -MeScroll.prototype.scrollTo = function(y, t) { - this.myScrollTo && this.myScrollTo(y, t) // scrollview需自定义回到顶部方法 -} - -/* 自定义scrollTo */ -MeScroll.prototype.resetScrollTo = function(myScrollTo) { - this.myScrollTo = myScrollTo -} - -/* 滚动条到底部的距离 */ -MeScroll.prototype.getScrollBottom = function() { - return this.getScrollHeight() - this.getClientHeight() - this.getScrollTop() -} - -/* 计步器 - star: 开始值 - end: 结束值 - callback(step,timer): 回调step值,计步器timer,可自行通过window.clearInterval(timer)结束计步器; - t: 计步时长,传0则直接回调end值;不传则默认300ms - rate: 周期;不传则默认30ms计步一次 - * */ -MeScroll.prototype.getStep = function(star, end, callback, t, rate) { - let diff = end - star; // 差值 - if (t === 0 || diff === 0) { - callback && callback(end); - return; - } - t = t || 300; // 时长 300ms - rate = rate || 30; // 周期 30ms - let count = t / rate; // 次数 - let step = diff / count; // 步长 - let i = 0; // 计数 - let timer = setInterval(function() { - if (i < count - 1) { - star += step; - callback && callback(star, timer); - i++; - } else { - callback && callback(end, timer); // 最后一次直接设置end,避免计算误差 - clearInterval(timer); - } - }, rate); -} - -/* 滚动容器的高度 */ -MeScroll.prototype.getClientHeight = function(isReal) { - let h = this.clientHeight || 0 - if (h === 0 && isReal !== true) { // 未获取到容器的高度,可临时取body的高度 (可能会有误差) - h = this.getBodyHeight() - } - return h -} -MeScroll.prototype.setClientHeight = function(h) { - this.clientHeight = h; -} - -/* 滚动内容的高度 */ -MeScroll.prototype.getScrollHeight = function() { - return this.scrollHeight || 0; -} -MeScroll.prototype.setScrollHeight = function(h) { - this.scrollHeight = h; -} - -/* body的高度 */ -MeScroll.prototype.getBodyHeight = function() { - return this.bodyHeight || 0; -} -MeScroll.prototype.setBodyHeight = function(h) { - this.bodyHeight = h; -} - -/* 阻止浏览器默认滚动事件 */ -MeScroll.prototype.preventDefault = function(e) { - // 小程序不支持e.preventDefault - // app的bounce只能通过配置pages.json的style.app-plus.bounce为"none"来禁止 - // cancelable:是否可以被禁用; defaultPrevented:是否已经被禁用 - if (e && e.cancelable && !e.defaultPrevented) e.preventDefault() -} - -/* 是否允许下拉回弹(橡皮筋效果); true或null为允许; false禁止bounce */ -MeScroll.prototype.setBounce = function(isBounce) { - // #ifdef H5 - if (isBounce === false) { - this.optUp.isBounce = false; // 禁止 - // 标记当前页使用了mescroll (需延时,确保page已切换) - setTimeout(function() { - let uniPageDom = document.getElementsByTagName('uni-page')[0]; - uniPageDom && uniPageDom.setAttribute('use_mescroll', true) - }, 30); - // 避免重复添加事件 - if (window.isSetBounce) return; - window.isSetBounce = true; - // 需禁止window的touchmove事件才能有效的阻止bounce - window.bounceTouchmove = function(e) { - let el = e.target; - // 当前touch的元素及父元素是否要拦截touchmove事件 - let isPrevent = true; - while (el !== document.body && el !== document) { - if (el.tagName === 'UNI-PAGE') { // 只扫描当前页 - if (!el.getAttribute('use_mescroll')) { - isPrevent = false; // 如果当前页没有使用mescroll,则不阻止 - } - break; - } - let cls = el.classList; - if (cls) { - if (cls.contains('mescroll-touch')) { // 采用scroll-view 此处不能过滤mescroll-uni,否则下拉仍然有回弹 - isPrevent = false; // mescroll-touch无需拦截touchmove事件 - break; - } else if (cls.contains('mescroll-touch-x') || cls.contains('mescroll-touch-y')) { - // 如果配置了水平或者垂直滑动 - let curX = e.touches ? e.touches[0].pageX : e.clientX; // 当前第一个手指距离列表顶部的距离x - let curY = e.touches ? e.touches[0].pageY : e.clientY; // 当前第一个手指距离列表顶部的距离y - if (!this.preWinX) this.preWinX = curX; // 设置上次移动的距离x - if (!this.preWinY) this.preWinY = curY; // 设置上次移动的距离y - // 计算两点之间的角度 - let x = Math.abs(this.preWinX - curX); - let y = Math.abs(this.preWinY - curY); - let z = Math.sqrt(x * x + y * y); - this.preWinX = curX; // 记录本次curX的值 - this.preWinY = curY; // 记录本次curY的值 - if (z !== 0) { - let angle = Math.asin(y / z) / Math.PI * 180; // 角度区间 [0,90] - if ((angle <= 45 && cls.contains('mescroll-touch-x')) || (angle > 45 && cls.contains('mescroll-touch-y'))) { - isPrevent = false; // 水平滑动或者垂直滑动,不拦截touchmove事件 - break; - } - } - } - } - el = el.parentNode; // 继续检查其父元素 - } - // 拦截touchmove事件:是否可以被禁用&&是否已经被禁用 (这里不使用me.preventDefault(e)的方法,因为某些情况下会报找不到方法的异常) - if (isPrevent && e.cancelable && !e.defaultPrevented && typeof e.preventDefault === "function") e.preventDefault(); - } - window.addEventListener('touchmove', window.bounceTouchmove, { - passive: false - }); - } else { - this.optUp.isBounce = true; // 允许 - if (window.bounceTouchmove) { - window.removeEventListener('touchmove', window.bounceTouchmove); - window.bounceTouchmove = null; - window.isSetBounce = false; - } - } - // #endif -} +/* mescroll + * version 1.2.3 + * 2020-02-18 wenju + * http://www.mescroll.com + */ + +export default function MeScroll(options, isScrollBody) { + let me = this; + me.version = '1.2.3'; // mescroll版本号 + me.options = options || {}; // 配置 + me.isScrollBody = isScrollBody || false; // 滚动区域是否为原生页面滚动; 默认为scroll-view + + me.isDownScrolling = false; // 是否在执行下拉刷新的回调 + me.isUpScrolling = false; // 是否在执行上拉加载的回调 + let hasDownCallback = me.options.down && me.options.down.callback; // 是否配置了down的callback + + // 初始化下拉刷新 + me.initDownScroll(); + // 初始化上拉加载,则初始化 + me.initUpScroll(); + + // 自动加载 + setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 + // 自动触发下拉刷新 (只有配置了down的callback才自动触发下拉刷新) + if (me.optDown.use && me.optDown.auto && hasDownCallback) { + if (me.optDown.autoShowLoading) { + me.triggerDownScroll(); // 显示下拉进度,执行下拉回调 + } else { + me.optDown.callback && me.optDown.callback(me); // 不显示下拉进度,直接执行下拉回调 + } + } + // 自动触发上拉加载 + setTimeout(function() { // 延时确保先执行down的callback,再执行up的callback,因为部分小程序emit是异步,会导致isUpAutoLoad判断有误 + me.optUp.use && me.optUp.auto && !me.isUpAutoLoad && me.triggerUpScroll(); + }, 100) + }, 30); // 需让me.optDown.inited和me.optUp.inited先执行 +} + +/* 配置参数:下拉刷新 */ +MeScroll.prototype.extendDownScroll = function(optDown) { + // 下拉刷新的配置 + MeScroll.extend(optDown, { + use: true, // 是否启用下拉刷新; 默认true + auto: true, // 是否在初始化完毕之后自动执行下拉刷新的回调; 默认true + native: false, // 是否使用系统自带的下拉刷新; 默认false; 仅mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) + autoShowLoading: false, // 如果设置auto=true(在初始化完毕之后自动执行下拉刷新的回调),那么是否显示下拉刷新的进度; 默认false + isLock: false, // 是否锁定下拉刷新,默认false; + offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 + startTop: 100, // scroll-view滚动到顶部时,此时的scroll-top不一定为0, 此值用于控制最大的误差 + fps: 80, // 下拉节流 (值越大每秒刷新频率越高) + inOffsetRate: 1, // 在列表顶部,下拉的距离小于offset时,改变下拉区域高度比例;值小于1且越接近0,高度变化越小,表现为越往下越难拉 + outOffsetRate: 0.2, // 在列表顶部,下拉的距离大于offset时,改变下拉区域高度比例;值小于1且越接近0,高度变化越小,表现为越往下越难拉 + bottomOffset: 20, // 当手指touchmove位置在距离body底部20px范围内的时候结束上拉刷新,避免Webview嵌套导致touchend事件不执行 + minAngle: 45, // 向下滑动最少偏移的角度,取值区间 [0,90];默认45度,即向下滑动的角度大于45度则触发下拉;而小于45度,将不触发下拉,避免与左右滑动的轮播等组件冲突; + textInOffset: '下拉刷新', // 下拉的距离在offset范围内的提示文本 + textOutOffset: '释放更新', // 下拉的距离大于offset范围的提示文本 + textLoading: '加载中 ...', // 加载中的提示文本 + inited: null, // 下拉刷新初始化完毕的回调 + inOffset: null, // 下拉的距离进入offset范围内那一刻的回调 + outOffset: null, // 下拉的距离大于offset那一刻的回调 + onMoving: null, // 下拉过程中的回调,滑动过程一直在执行; rate下拉区域当前高度与指定距离的比值(inOffset: rate<1; outOffset: rate>=1); downHight当前下拉区域的高度 + beforeLoading: null, // 准备触发下拉刷新的回调: 如果return true,将不触发showLoading和callback回调; 常用来完全自定义下拉刷新, 参考案例【淘宝 v6.8.0】 + showLoading: null, // 显示下拉刷新进度的回调 + afterLoading: null, // 准备结束下拉的回调. 返回结束下拉的延时执行时间,默认0ms; 常用于结束下拉之前再显示另外一小段动画,才去隐藏下拉刷新的场景, 参考案例【dotJump】 + endDownScroll: null, // 结束下拉刷新的回调 + callback: function(mescroll) { + // 下拉刷新的回调;默认重置上拉加载列表为第一页 + mescroll.resetUpScroll(); + } + }) +} + +/* 配置参数:上拉加载 */ +MeScroll.prototype.extendUpScroll = function(optUp) { + // 上拉加载的配置 + MeScroll.extend(optUp, { + use: true, // 是否启用上拉加载; 默认true + auto: true, // 是否在初始化完毕之后自动执行上拉加载的回调; 默认true + isLock: false, // 是否锁定上拉加载,默认false; + isBoth: true, // 上拉加载时,如果滑动到列表顶部是否可以同时触发下拉刷新;默认true,两者可同时触发; + isBounce: false, // 默认禁止橡皮筋的回弹效果, 必读事项: http://www.mescroll.com/qa.html?v=190725#q25 + callback: null, // 上拉加载的回调;function(page,mescroll){ } + page: { + num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始 + size: 10, // 每页数据的数量 + time: null // 加载第一页数据服务器返回的时间; 防止用户翻页时,后台新增了数据从而导致下一页数据重复; + }, + noMoreSize: 5, // 如果列表已无数据,可设置列表的总数量要大于等于5条才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看 + offset: 80, // 距底部多远时,触发upCallback + textLoading: '加载中 ...', // 加载中的提示文本 + textNoMore: '-- END --', // 没有更多数据的提示文本 + inited: null, // 初始化完毕的回调 + showLoading: null, // 显示加载中的回调 + showNoMore: null, // 显示无更多数据的回调 + hideUpScroll: null, // 隐藏上拉加载的回调 + errDistance: 60, // endErr的时候需往上滑动一段距离,使其往下滑动时再次触发onReachBottom,仅mescroll-body生效 + toTop: { + // 回到顶部按钮,需配置src才显示 + src: null, // 图片路径,默认null (绝对路径或网络图) + offset: 1000, // 列表滚动多少距离才显示回到顶部按钮,默认1000 + duration: 300, // 回到顶部的动画时长,默认300ms (当值为0或300则使用系统自带回到顶部,更流畅; 其他值则通过step模拟,部分机型可能不够流畅,所以非特殊情况不建议修改此项) + btnClick: null, // 点击按钮的回调 + onShow: null, // 是否显示的回调 + zIndex: 9990, // fixed定位z-index值 + left: null, // 到左边的距离, 默认null. 此项有值时,right不生效. (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + right: 20, // 到右边的距离, 默认20 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + bottom: 120, // 到底部的距离, 默认120 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + safearea: false, // bottom的偏移量是否加上底部安全区的距离, 默认false, 需要适配iPhoneX时使用 (具体的界面如果不配置此项,则取本vue的safearea值) + width: 72, // 回到顶部图标的宽度, 默认72 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + radius: "50%" // 圆角, 默认"50%" (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + }, + empty: { + use: true, // 是否显示空布局 + icon: null, // 图标路径 + tip: '~ 暂无相关数据 ~', // 提示 + btnText: '', // 按钮 + btnClick: null, // 点击按钮的回调 + onShow: null, // 是否显示的回调 + fixed: false, // 是否使用fixed定位,默认false; 配置fixed为true,以下的top和zIndex才生效 (transform会使fixed失效,最终会降级为absolute) + top: "100rpx", // fixed定位的top值 (完整的单位值,如 "10%"; "100rpx") + zIndex: 99 // fixed定位z-index值 + }, + onScroll: false // 是否监听滚动事件 + }) +} + +/* 配置参数 */ +MeScroll.extend = function(userOption, defaultOption) { + if (!userOption) return defaultOption; + for (let key in defaultOption) { + if (userOption[key] == null) { + let def = defaultOption[key]; + if (def != null && typeof def === 'object') { + userOption[key] = MeScroll.extend({}, def); // 深度匹配 + } else { + userOption[key] = def; + } + } else if (typeof userOption[key] === 'object') { + MeScroll.extend(userOption[key], defaultOption[key]); // 深度匹配 + } + } + return userOption; +} + +/* -------初始化下拉刷新------- */ +MeScroll.prototype.initDownScroll = function() { + let me = this; + // 配置参数 + me.optDown = me.options.down || {}; + me.extendDownScroll(me.optDown); + + // 如果是mescroll-body且配置了native,则禁止自定义的下拉刷新 + if (me.isScrollBody && me.optDown.native) { + me.optDown.use = false + } else { + me.optDown.native = false // 仅mescroll-body支持,mescroll-uni不支持 + } + + me.downHight = 0; // 下拉区域的高度 + + // 在页面中加入下拉布局 + if (me.optDown.use && me.optDown.inited) { + // 初始化完毕的回调 + setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 + me.optDown.inited(me); + }, 0) + } +} + +/* 列表touchstart事件 */ +MeScroll.prototype.touchstartEvent = function(e) { + if (!this.optDown.use) return; + + this.startPoint = this.getPoint(e); // 记录起点 + this.startTop = this.getScrollTop(); // 记录此时的滚动条位置 + this.lastPoint = this.startPoint; // 重置上次move的点 + this.maxTouchmoveY = this.getBodyHeight() - this.optDown.bottomOffset; // 手指触摸的最大范围(写在touchstart避免body获取高度为0的情况) + this.inTouchend = false; // 标记不是touchend +} + +/* 列表touchmove事件 */ +MeScroll.prototype.touchmoveEvent = function(e) { + if (!this.optDown.use) return; + if (!this.startPoint) return; + let me = this; + + // 节流 + let t = new Date().getTime(); + if (me.moveTime && t - me.moveTime < me.moveTimeDiff) { // 小于节流时间,则不处理 + return; + } else { + me.moveTime = t + if (!me.moveTimeDiff) me.moveTimeDiff = 1000 / me.optDown.fps + } + + let scrollTop = me.getScrollTop(); // 当前滚动条的距离 + let curPoint = me.getPoint(e); // 当前点 + + let moveY = curPoint.y - me.startPoint.y; // 和起点比,移动的距离,大于0向下拉,小于0向上拉 + + // 向下拉 && 在顶部 + // mescroll-body,直接判定在顶部即可 + // scroll-view在滚动时不会触发touchmove,当触顶/底/左/右时,才会触发touchmove + // scroll-view滚动到顶部时,scrollTop不一定为0; 在iOS的APP中scrollTop可能为负数,不一定和startTop相等 + if (moveY > 0 && ( + (me.isScrollBody && scrollTop <= 0) || + (!me.isScrollBody && (scrollTop <= 0 || (scrollTop <= me.optDown.startTop && scrollTop === me.startTop))) + )) { + // 可下拉的条件 + if (!me.inTouchend && !me.isDownScrolling && !me.optDown.isLock && (!me.isUpScrolling || (me.isUpScrolling && + me.optUp.isBoth))) { + + // 下拉的角度是否在配置的范围内 + let angle = me.getAngle(me.lastPoint, curPoint); // 两点之间的角度,区间 [0,90] + if (angle < me.optDown.minAngle) return; // 如果小于配置的角度,则不往下执行下拉刷新 + + // 如果手指的位置超过配置的距离,则提前结束下拉,避免Webview嵌套导致touchend无法触发 + if (me.maxTouchmoveY > 0 && curPoint.y >= me.maxTouchmoveY) { + me.inTouchend = true; // 标记执行touchend + me.touchendEvent(); // 提前触发touchend + return; + } + + me.preventDefault(e); // 阻止默认事件 + + let diff = curPoint.y - me.lastPoint.y; // 和上次比,移动的距离 (大于0向下,小于0向上) + + // 下拉距离 < 指定距离 + if (me.downHight < me.optDown.offset) { + if (me.movetype !== 1) { + me.movetype = 1; // 加入标记,保证只执行一次 + me.optDown.inOffset && me.optDown.inOffset(me); // 进入指定距离范围内那一刻的回调,只执行一次 + me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来 + } + me.downHight += diff * me.optDown.inOffsetRate; // 越往下,高度变化越小 + + // 指定距离 <= 下拉距离 + } else { + if (me.movetype !== 2) { + me.movetype = 2; // 加入标记,保证只执行一次 + me.optDown.outOffset && me.optDown.outOffset(me); // 下拉超过指定距离那一刻的回调,只执行一次 + me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来 + } + if (diff > 0) { // 向下拉 + me.downHight += Math.round(diff * me.optDown.outOffsetRate); // 越往下,高度变化越小 + } else { // 向上收 + me.downHight += diff; // 向上收回高度,则向上滑多少收多少高度 + } + } + + let rate = me.downHight / me.optDown.offset; // 下拉区域当前高度与指定距离的比值 + me.optDown.onMoving && me.optDown.onMoving(me, rate, me.downHight); // 下拉过程中的回调,一直在执行 + } + } + + me.lastPoint = curPoint; // 记录本次移动的点 +} + +/* 列表touchend事件 */ +MeScroll.prototype.touchendEvent = function(e) { + if (!this.optDown.use) return; + // 如果下拉区域高度已改变,则需重置回来 + if (this.isMoveDown) { + if (this.downHight >= this.optDown.offset) { + // 符合触发刷新的条件 + this.triggerDownScroll(); + } else { + // 不符合的话 则重置 + this.downHight = 0; + this.optDown.endDownScroll && this.optDown.endDownScroll(this); + } + this.movetype = 0; + this.isMoveDown = false; + } else if (!this.isScrollBody && this.getScrollTop() === this.startTop) { // scroll-view到顶/左/右/底的滑动事件 + let isScrollUp = this.getPoint(e).y - this.startPoint.y < 0; // 和起点比,移动的距离,大于0向下拉,小于0向上拉 + // 上滑 + if (isScrollUp) { + // 需检查滑动的角度 + let angle = this.getAngle(this.getPoint(e), this.startPoint); // 两点之间的角度,区间 [0,90] + if (angle > 80) { + // 检查并触发上拉 + this.triggerUpScroll(true); + } + } + } +} + +/* 根据点击滑动事件获取第一个手指的坐标 */ +MeScroll.prototype.getPoint = function(e) { + if (!e) { + return { + x: 0, + y: 0 + } + } + if (e.touches && e.touches[0]) { + return { + x: e.touches[0].pageX, + y: e.touches[0].pageY + } + } else if (e.changedTouches && e.changedTouches[0]) { + return { + x: e.changedTouches[0].pageX, + y: e.changedTouches[0].pageY + } + } else { + return { + x: e.clientX, + y: e.clientY + } + } +} + +/* 计算两点之间的角度: 区间 [0,90]*/ +MeScroll.prototype.getAngle = function(p1, p2) { + let x = Math.abs(p1.x - p2.x); + let y = Math.abs(p1.y - p2.y); + let z = Math.sqrt(x * x + y * y); + let angle = 0; + if (z !== 0) { + angle = Math.asin(y / z) / Math.PI * 180; + } + return angle +} + +/* 触发下拉刷新 */ +MeScroll.prototype.triggerDownScroll = function() { + if (this.optDown.beforeLoading && this.optDown.beforeLoading(this)) { + //return true则处于完全自定义状态 + } else { + this.showDownScroll(); // 下拉刷新中... + this.optDown.callback && this.optDown.callback(this); // 执行回调,联网加载数据 + } +} + +/* 显示下拉进度布局 */ +MeScroll.prototype.showDownScroll = function() { + this.isDownScrolling = true; // 标记下拉中 + if (this.optDown.native) { + uni.startPullDownRefresh(); // 系统自带的下拉刷新 + this.optDown.showLoading && this.optDown.showLoading(this, 0); // 仍触发showLoading,因为上拉加载用到 + } else { + this.downHight = this.optDown.offset; // 更新下拉区域高度 + this.optDown.showLoading && this.optDown.showLoading(this, this.downHight); // 下拉刷新中... + } +} + +/* 显示系统自带的下拉刷新时需要处理的业务 */ +MeScroll.prototype.onPullDownRefresh = function() { + this.isDownScrolling = true; // 标记下拉中 + this.optDown.showLoading && this.optDown.showLoading(this, 0); // 仍触发showLoading,因为上拉加载用到 + this.optDown.callback && this.optDown.callback(this); // 执行回调,联网加载数据 +} + +/* 结束下拉刷新 */ +MeScroll.prototype.endDownScroll = function() { + if (this.optDown.native) { // 结束原生下拉刷新 + this.isDownScrolling = false; + this.optDown.endDownScroll && this.optDown.endDownScroll(this); + uni.stopPullDownRefresh(); + return + } + let me = this; + // 结束下拉刷新的方法 + let endScroll = function() { + me.downHight = 0; + me.isDownScrolling = false; + me.optDown.endDownScroll && me.optDown.endDownScroll(me); + !me.isScrollBody && me.setScrollHeight(0) // scroll-view重置滚动区域,使数据不满屏时仍可检查触发翻页 + } + // 结束下拉刷新时的回调 + let delay = 0; + if (me.optDown.afterLoading) delay = me.optDown.afterLoading(me); // 结束下拉刷新的延时,单位ms + if (typeof delay === 'number' && delay > 0) { + setTimeout(endScroll, delay); + } else { + endScroll(); + } +} + +/* 锁定下拉刷新:isLock=ture,null锁定;isLock=false解锁 */ +MeScroll.prototype.lockDownScroll = function(isLock) { + if (isLock == null) isLock = true; + this.optDown.isLock = isLock; +} + +/* 锁定上拉加载:isLock=ture,null锁定;isLock=false解锁 */ +MeScroll.prototype.lockUpScroll = function(isLock) { + if (isLock == null) isLock = true; + this.optUp.isLock = isLock; +} + +/* -------初始化上拉加载------- */ +MeScroll.prototype.initUpScroll = function() { + let me = this; + // 配置参数 + me.optUp = me.options.up || { + use: false + }; + me.extendUpScroll(me.optUp); + + if (!me.optUp.isBounce) me.setBounce(false); // 不允许bounce时,需禁止window的touchmove事件 + + if (me.optUp.use === false) return; // 配置不使用上拉加载时,则不初始化上拉布局 + me.optUp.hasNext = true; // 如果使用上拉,则默认有下一页 + me.startNum = me.optUp.page.num + 1; // 记录page开始的页码 + + // 初始化完毕的回调 + if (me.optUp.inited) { + setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 + me.optUp.inited(me); + }, 0) + } +} + +/*滚动到底部的事件 (仅mescroll-body生效)*/ +MeScroll.prototype.onReachBottom = function() { + if (this.isScrollBody && !this.isUpScrolling) { // 只能支持下拉刷新的时候同时可以触发上拉加载,否则滚动到底部就需要上滑一点才能触发onReachBottom + if (!this.optUp.isLock && this.optUp.hasNext) { + this.triggerUpScroll(); + } + } +} + +/*列表滚动事件 (仅mescroll-body生效)*/ +MeScroll.prototype.onPageScroll = function(e) { + if (!this.isScrollBody) return; + + // 更新滚动条的位置 (主要用于判断下拉刷新时,滚动条是否在顶部) + this.setScrollTop(e.scrollTop); + + // 顶部按钮的显示隐藏 + if (e.scrollTop >= this.optUp.toTop.offset) { + this.showTopBtn(); + } else { + this.hideTopBtn(); + } +} + +/*列表滚动事件*/ +MeScroll.prototype.scroll = function(e, onScroll) { + // 更新滚动条的位置 + this.setScrollTop(e.scrollTop); + // 更新滚动内容高度 + this.setScrollHeight(e.scrollHeight); + + // 向上滑还是向下滑动 + if (this.preScrollY == null) this.preScrollY = 0; + this.isScrollUp = e.scrollTop - this.preScrollY > 0; + this.preScrollY = e.scrollTop; + + // 上滑 && 检查并触发上拉 + this.isScrollUp && this.triggerUpScroll(true); + + // 顶部按钮的显示隐藏 + if (e.scrollTop >= this.optUp.toTop.offset) { + this.showTopBtn(); + } else { + this.hideTopBtn(); + } + + // 滑动监听 + this.optUp.onScroll && onScroll && onScroll() +} + +/* 触发上拉加载 */ +MeScroll.prototype.triggerUpScroll = function(isCheck) { + if (!this.isUpScrolling && this.optUp.use && this.optUp.callback) { + // 是否校验在底部; 默认不校验 + if (isCheck === true) { + let canUp = false; + // 还有下一页 && 没有锁定 && 不在下拉中 + if (this.optUp.hasNext && !this.optUp.isLock && !this.isDownScrolling) { + if (this.getScrollBottom() <= this.optUp.offset) { // 到底部 + canUp = true; // 标记可上拉 + } + } + if (canUp === false) return; + } + this.showUpScroll(); // 上拉加载中... + this.optUp.page.num++; // 预先加一页,如果失败则减回 + this.isUpAutoLoad = true; // 标记上拉已经自动执行过,避免初始化时多次触发上拉回调 + this.num = this.optUp.page.num; // 把最新的页数赋值在mescroll上,避免对page的影响 + this.size = this.optUp.page.size; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.time = this.optUp.page.time; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.optUp.callback(this); // 执行回调,联网加载数据 + } +} + +/* 显示上拉加载中 */ +MeScroll.prototype.showUpScroll = function() { + this.isUpScrolling = true; // 标记上拉加载中 + this.optUp.showLoading && this.optUp.showLoading(this); // 回调 +} + +/* 显示上拉无更多数据 */ +MeScroll.prototype.showNoMore = function() { + this.optUp.hasNext = false; // 标记无更多数据 + this.optUp.showNoMore && this.optUp.showNoMore(this); // 回调 +} + +/* 隐藏上拉区域**/ +MeScroll.prototype.hideUpScroll = function() { + this.optUp.hideUpScroll && this.optUp.hideUpScroll(this); // 回调 +} + +/* 结束上拉加载 */ +MeScroll.prototype.endUpScroll = function(isShowNoMore) { + if (isShowNoMore != null) { // isShowNoMore=null,不处理下拉状态,下拉刷新的时候调用 + if (isShowNoMore) { + this.showNoMore(); // isShowNoMore=true,显示无更多数据 + } else { + this.hideUpScroll(); // isShowNoMore=false,隐藏上拉加载 + } + } + this.isUpScrolling = false; // 标记结束上拉加载 +} + +/* 重置上拉加载列表为第一页 + *isShowLoading 是否显示进度布局; + * 1.默认null,不传参,则显示上拉加载的进度布局 + * 2.传参true, 则显示下拉刷新的进度布局 + * 3.传参false,则不显示上拉和下拉的进度 (常用于静默更新列表数据) + */ +MeScroll.prototype.resetUpScroll = function(isShowLoading) { + if (this.optUp && this.optUp.use) { + let page = this.optUp.page; + this.prePageNum = page.num; // 缓存重置前的页码,加载失败可退回 + this.prePageTime = page.time; // 缓存重置前的时间,加载失败可退回 + page.num = this.startNum; // 重置为第一页 + page.time = null; // 重置时间为空 + if (!this.isDownScrolling && isShowLoading !== false) { // 如果不是下拉刷新触发的resetUpScroll并且不配置列表静默更新,则显示进度; + if (isShowLoading == null) { + this.removeEmpty(); // 移除空布局 + this.showUpScroll(); // 不传参,默认显示上拉加载的进度布局 + } else { + this.showDownScroll(); // 传true,显示下拉刷新的进度布局,不清空列表 + } + } + this.isUpAutoLoad = true; // 标记上拉已经自动执行过,避免初始化时多次触发上拉回调 + this.num = page.num; // 把最新的页数赋值在mescroll上,避免对page的影响 + this.size = page.size; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.time = page.time; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.optUp.callback && this.optUp.callback(this); // 执行上拉回调 + } +} + +/* 设置page.num的值 */ +MeScroll.prototype.setPageNum = function(num) { + this.optUp.page.num = num - 1; +} + +/* 设置page.size的值 */ +MeScroll.prototype.setPageSize = function(size) { + this.optUp.page.size = size; +} + +/* 联网回调成功,结束下拉刷新和上拉加载 + * dataSize: 当前页的数据量(必传) + * totalPage: 总页数(必传) + * systime: 服务器时间 (可空) + */ +MeScroll.prototype.endByPage = function(dataSize, totalPage, systime) { + let hasNext; + if (this.optUp.use && totalPage != null) hasNext = this.optUp.page.num < totalPage; // 是否还有下一页 + this.endSuccess(dataSize, hasNext, systime); +} + +/* 联网回调成功,结束下拉刷新和上拉加载 + * dataSize: 当前页的数据量(必传) + * totalSize: 列表所有数据总数量(必传) + * systime: 服务器时间 (可空) + */ +MeScroll.prototype.endBySize = function(dataSize, totalSize, systime) { + let hasNext; + if (this.optUp.use && totalSize != null) { + let loadSize = (this.optUp.page.num - 1) * this.optUp.page.size + dataSize; // 已加载的数据总数 + hasNext = loadSize < totalSize; // 是否还有下一页 + } + this.endSuccess(dataSize, hasNext, systime); +} + +/* 联网回调成功,结束下拉刷新和上拉加载 + * dataSize: 当前页的数据个数(不是所有页的数据总和),用于上拉加载判断是否还有下一页.如果不传,则会判断还有下一页 + * hasNext: 是否还有下一页,布尔类型;用来解决这个小问题:比如列表共有20条数据,每页加载10条,共2页.如果只根据dataSize判断,则需翻到第三页才会知道无更多数据,如果传了hasNext,则翻到第二页即可显示无更多数据. + * systime: 服务器时间(可空);用来解决这个小问题:当准备翻下一页时,数据库新增了几条记录,此时翻下一页,前面的几条数据会和上一页的重复;这里传入了systime,那么upCallback的page.time就会有值,把page.time传给服务器,让后台过滤新加入的那几条记录 + */ +MeScroll.prototype.endSuccess = function(dataSize, hasNext, systime) { + let me = this; + // 结束下拉刷新 + if (me.isDownScrolling) me.endDownScroll(); + + // 结束上拉加载 + if (me.optUp.use) { + let isShowNoMore; // 是否已无更多数据 + if (dataSize != null) { + let pageNum = me.optUp.page.num; // 当前页码 + let pageSize = me.optUp.page.size; // 每页长度 + // 如果是第一页 + if (pageNum === 1) { + if (systime) me.optUp.page.time = systime; // 设置加载列表数据第一页的时间 + } + if (dataSize < pageSize || hasNext === false) { + // 返回的数据不满一页时,则说明已无更多数据 + me.optUp.hasNext = false; + if (dataSize === 0 && pageNum === 1) { + // 如果第一页无任何数据且配置了空布局 + isShowNoMore = false; + me.showEmpty(); + } else { + // 总列表数少于配置的数量,则不显示无更多数据 + let allDataSize = (pageNum - 1) * pageSize + dataSize; + if (allDataSize < me.optUp.noMoreSize) { + isShowNoMore = false; + } else { + isShowNoMore = true; + } + me.removeEmpty(); // 移除空布局 + } + } else { + // 还有下一页 + isShowNoMore = false; + me.optUp.hasNext = true; + me.removeEmpty(); // 移除空布局 + } + } + + // 隐藏上拉 + me.endUpScroll(isShowNoMore); + } +} + +/* 回调失败,结束下拉刷新和上拉加载 */ +MeScroll.prototype.endErr = function(errDistance) { + // 结束下拉,回调失败重置回原来的页码和时间 + if (this.isDownScrolling) { + let page = this.optUp.page; + if (page && this.prePageNum) { + page.num = this.prePageNum; + page.time = this.prePageTime; + } + this.endDownScroll(); + } + // 结束上拉,回调失败重置回原来的页码 + if (this.isUpScrolling) { + this.optUp.page.num--; + this.endUpScroll(false); + // 如果是mescroll-body,则需往回滚一定距离 + if (this.isScrollBody && errDistance !== 0) { // 不处理0 + if (!errDistance) errDistance = this.optUp.errDistance; // 不传,则取默认 + this.scrollTo(this.getScrollTop() - errDistance, 0) // 往上回滚的距离 + } + } +} + +/* 显示空布局 */ +MeScroll.prototype.showEmpty = function() { + this.optUp.empty.use && this.optUp.empty.onShow && this.optUp.empty.onShow(true) +} + +/* 移除空布局 */ +MeScroll.prototype.removeEmpty = function() { + this.optUp.empty.use && this.optUp.empty.onShow && this.optUp.empty.onShow(false) +} + +/* 显示回到顶部的按钮 */ +MeScroll.prototype.showTopBtn = function() { + if (!this.topBtnShow) { + this.topBtnShow = true; + this.optUp.toTop.onShow && this.optUp.toTop.onShow(true); + } +} + +/* 隐藏回到顶部的按钮 */ +MeScroll.prototype.hideTopBtn = function() { + if (this.topBtnShow) { + this.topBtnShow = false; + this.optUp.toTop.onShow && this.optUp.toTop.onShow(false); + } +} + +/* 获取滚动条的位置 */ +MeScroll.prototype.getScrollTop = function() { + return this.scrollTop || 0 +} + +/* 记录滚动条的位置 */ +MeScroll.prototype.setScrollTop = function(y) { + this.scrollTop = y; +} + +/* 滚动到指定位置 */ +MeScroll.prototype.scrollTo = function(y, t) { + this.myScrollTo && this.myScrollTo(y, t) // scrollview需自定义回到顶部方法 +} + +/* 自定义scrollTo */ +MeScroll.prototype.resetScrollTo = function(myScrollTo) { + this.myScrollTo = myScrollTo +} + +/* 滚动条到底部的距离 */ +MeScroll.prototype.getScrollBottom = function() { + return this.getScrollHeight() - this.getClientHeight() - this.getScrollTop() +} + +/* 计步器 + star: 开始值 + end: 结束值 + callback(step,timer): 回调step值,计步器timer,可自行通过window.clearInterval(timer)结束计步器; + t: 计步时长,传0则直接回调end值;不传则默认300ms + rate: 周期;不传则默认30ms计步一次 + * */ +MeScroll.prototype.getStep = function(star, end, callback, t, rate) { + let diff = end - star; // 差值 + if (t === 0 || diff === 0) { + callback && callback(end); + return; + } + t = t || 300; // 时长 300ms + rate = rate || 30; // 周期 30ms + let count = t / rate; // 次数 + let step = diff / count; // 步长 + let i = 0; // 计数 + let timer = setInterval(function() { + if (i < count - 1) { + star += step; + callback && callback(star, timer); + i++; + } else { + callback && callback(end, timer); // 最后一次直接设置end,避免计算误差 + clearInterval(timer); + } + }, rate); +} + +/* 滚动容器的高度 */ +MeScroll.prototype.getClientHeight = function(isReal) { + let h = this.clientHeight || 0 + if (h === 0 && isReal !== true) { // 未获取到容器的高度,可临时取body的高度 (可能会有误差) + h = this.getBodyHeight() + } + return h +} +MeScroll.prototype.setClientHeight = function(h) { + this.clientHeight = h; +} + +/* 滚动内容的高度 */ +MeScroll.prototype.getScrollHeight = function() { + return this.scrollHeight || 0; +} +MeScroll.prototype.setScrollHeight = function(h) { + this.scrollHeight = h; +} + +/* body的高度 */ +MeScroll.prototype.getBodyHeight = function() { + return this.bodyHeight || 0; +} +MeScroll.prototype.setBodyHeight = function(h) { + this.bodyHeight = h; +} + +/* 阻止浏览器默认滚动事件 */ +MeScroll.prototype.preventDefault = function(e) { + // 小程序不支持e.preventDefault + // app的bounce只能通过配置pages.json的style.app-plus.bounce为"none"来禁止 + // cancelable:是否可以被禁用; defaultPrevented:是否已经被禁用 + if (e && e.cancelable && !e.defaultPrevented) e.preventDefault() +} + +/* 是否允许下拉回弹(橡皮筋效果); true或null为允许; false禁止bounce */ +MeScroll.prototype.setBounce = function(isBounce) { + // #ifdef H5 + if (isBounce === false) { + this.optUp.isBounce = false; // 禁止 + // 标记当前页使用了mescroll (需延时,确保page已切换) + setTimeout(function() { + let uniPageDom = document.getElementsByTagName('uni-page')[0]; + uniPageDom && uniPageDom.setAttribute('use_mescroll', true) + }, 30); + // 避免重复添加事件 + if (window.isSetBounce) return; + window.isSetBounce = true; + // 需禁止window的touchmove事件才能有效的阻止bounce + window.bounceTouchmove = function(e) { + let el = e.target; + // 当前touch的元素及父元素是否要拦截touchmove事件 + let isPrevent = true; + while (el !== document.body && el !== document) { + if (el.tagName === 'UNI-PAGE') { // 只扫描当前页 + if (!el.getAttribute('use_mescroll')) { + isPrevent = false; // 如果当前页没有使用mescroll,则不阻止 + } + break; + } + let cls = el.classList; + if (cls) { + if (cls.contains('mescroll-touch')) { // 采用scroll-view 此处不能过滤mescroll-uni,否则下拉仍然有回弹 + isPrevent = false; // mescroll-touch无需拦截touchmove事件 + break; + } else if (cls.contains('mescroll-touch-x') || cls.contains('mescroll-touch-y')) { + // 如果配置了水平或者垂直滑动 + let curX = e.touches ? e.touches[0].pageX : e.clientX; // 当前第一个手指距离列表顶部的距离x + let curY = e.touches ? e.touches[0].pageY : e.clientY; // 当前第一个手指距离列表顶部的距离y + if (!this.preWinX) this.preWinX = curX; // 设置上次移动的距离x + if (!this.preWinY) this.preWinY = curY; // 设置上次移动的距离y + // 计算两点之间的角度 + let x = Math.abs(this.preWinX - curX); + let y = Math.abs(this.preWinY - curY); + let z = Math.sqrt(x * x + y * y); + this.preWinX = curX; // 记录本次curX的值 + this.preWinY = curY; // 记录本次curY的值 + if (z !== 0) { + let angle = Math.asin(y / z) / Math.PI * 180; // 角度区间 [0,90] + if ((angle <= 45 && cls.contains('mescroll-touch-x')) || (angle > 45 && cls.contains('mescroll-touch-y'))) { + isPrevent = false; // 水平滑动或者垂直滑动,不拦截touchmove事件 + break; + } + } + } + } + el = el.parentNode; // 继续检查其父元素 + } + // 拦截touchmove事件:是否可以被禁用&&是否已经被禁用 (这里不使用me.preventDefault(e)的方法,因为某些情况下会报找不到方法的异常) + if (isPrevent && e.cancelable && !e.defaultPrevented && typeof e.preventDefault === "function") e.preventDefault(); + } + window.addEventListener('touchmove', window.bounceTouchmove, { + passive: false + }); + } else { + this.optUp.isBounce = true; // 允许 + if (window.bounceTouchmove) { + window.removeEventListener('touchmove', window.bounceTouchmove); + window.bounceTouchmove = null; + window.isSetBounce = false; + } + } + // #endif +} diff --git a/components/mescroll/my-list-mescroll.vue b/components/mescroll/my-list-mescroll.vue index dbe0d76..d0d2935 100644 --- a/components/mescroll/my-list-mescroll.vue +++ b/components/mescroll/my-list-mescroll.vue @@ -1,158 +1,158 @@ - - - + + + diff --git a/components/ns-chat/ns-chat-goods.vue b/components/ns-chat/ns-chat-goods.vue index be57e01..b5b95a2 100644 --- a/components/ns-chat/ns-chat-goods.vue +++ b/components/ns-chat/ns-chat-goods.vue @@ -1,142 +1,142 @@ - - - - - + + + + + diff --git a/components/ns-chat/ns-chat-order.vue b/components/ns-chat/ns-chat-order.vue index a63ee21..1e3c5d2 100644 --- a/components/ns-chat/ns-chat-order.vue +++ b/components/ns-chat/ns-chat-order.vue @@ -1,149 +1,149 @@ - - - - - + + + + + diff --git a/components/ns-chat/ns-chat-receiveGoods.vue b/components/ns-chat/ns-chat-receiveGoods.vue index af2dd7e..1217161 100644 --- a/components/ns-chat/ns-chat-receiveGoods.vue +++ b/components/ns-chat/ns-chat-receiveGoods.vue @@ -6,7 +6,7 @@ {{ isEnEnv ? goodsInfo.en_goods_name : goodsInfo.goods_name }} 库存:{{ goodsInfo.stock }} - { $lang("common.ns-chat.ns-chat-receiveGoods.l9.t0") } goodsInfo.sale_num }} + 销量:{{ goodsInfo.sale_num }} diff --git a/components/ns-contact/ns-contact.vue b/components/ns-contact/ns-contact.vue index 779f8de..fc97a74 100644 --- a/components/ns-contact/ns-contact.vue +++ b/components/ns-contact/ns-contact.vue @@ -29,10 +29,10 @@ - {{ $lang("common.ns-contact.l32.t0") }} + 联系客服 - {{ siteInfo.site_tel ? $lang('common.ns-contact.l35.t0') + siteInfo.site_tel : $lang('common.ns-contact.l35.t1') }} + {{ siteInfo.site_tel ? '请联系客服,客服电话是' + siteInfo.site_tel : '抱歉,商家暂无客服,请线下联系' }} diff --git a/components/ns-copyright/ns-copyright.vue b/components/ns-copyright/ns-copyright.vue index f983905..0ea40ef 100644 --- a/components/ns-copyright/ns-copyright.vue +++ b/components/ns-copyright/ns-copyright.vue @@ -1,142 +1,142 @@ - - - - - \ No newline at end of file diff --git a/components/ns-empty/ns-empty.vue b/components/ns-empty/ns-empty.vue index 8f99a3e..3249614 100644 --- a/components/ns-empty/ns-empty.vue +++ b/components/ns-empty/ns-empty.vue @@ -1,95 +1,95 @@ - - - - - + + + + + diff --git a/components/ns-form/ns-form.vue b/components/ns-form/ns-form.vue index 80cdc66..ce2d8c1 100644 --- a/components/ns-form/ns-form.vue +++ b/components/ns-form/ns-form.vue @@ -1,863 +1,863 @@ - - - - - \ No newline at end of file diff --git a/components/ns-goods-recommend/ns-goods-recommend.vue b/components/ns-goods-recommend/ns-goods-recommend.vue index c960ee1..88223eb 100644 --- a/components/ns-goods-recommend/ns-goods-recommend.vue +++ b/components/ns-goods-recommend/ns-goods-recommend.vue @@ -1,394 +1,394 @@ - - - - - \ No newline at end of file diff --git a/components/ns-goods-sku/ns-goods-sku-category.vue b/components/ns-goods-sku/ns-goods-sku-category.vue index 9cc9fe6..16c4735 100644 --- a/components/ns-goods-sku/ns-goods-sku-category.vue +++ b/components/ns-goods-sku/ns-goods-sku-category.vue @@ -1,857 +1,857 @@ - - - - \ No newline at end of file diff --git a/components/ns-goods-sku/ns-goods-sku-index.vue b/components/ns-goods-sku/ns-goods-sku-index.vue index 0e751b2..f57f889 100644 --- a/components/ns-goods-sku/ns-goods-sku-index.vue +++ b/components/ns-goods-sku/ns-goods-sku-index.vue @@ -1,234 +1,234 @@ - - - \ No newline at end of file diff --git a/components/ns-goods-sku/ns-goods-sku.vue b/components/ns-goods-sku/ns-goods-sku.vue index 0918cde..e4f5cb1 100644 --- a/components/ns-goods-sku/ns-goods-sku.vue +++ b/components/ns-goods-sku/ns-goods-sku.vue @@ -1,1541 +1,1541 @@ - - - - \ No newline at end of file diff --git a/components/ns-loading/ns-loading.vue b/components/ns-loading/ns-loading.vue index df3295f..eb4507c 100644 --- a/components/ns-loading/ns-loading.vue +++ b/components/ns-loading/ns-loading.vue @@ -1,89 +1,89 @@ - - - - - + + + + + diff --git a/components/ns-login/ns-login.vue b/components/ns-login/ns-login.vue index 6a53358..0715071 100644 --- a/components/ns-login/ns-login.vue +++ b/components/ns-login/ns-login.vue @@ -1,887 +1,887 @@ - - - - - + + + + + diff --git a/components/ns-navbar/ns-navbar.vue b/components/ns-navbar/ns-navbar.vue index 15d3145..a2b4c5e 100644 --- a/components/ns-navbar/ns-navbar.vue +++ b/components/ns-navbar/ns-navbar.vue @@ -1,404 +1,404 @@ - - - - - \ No newline at end of file diff --git a/components/ns-newform/ns-newform.vue b/components/ns-newform/ns-newform.vue index 4ad7213..394f703 100644 --- a/components/ns-newform/ns-newform.vue +++ b/components/ns-newform/ns-newform.vue @@ -50,7 +50,7 @@ {{ item.val }} - {{ item.value.placeholder || $lang('common.ns-form.l37.t0') }} + {{ item.value.placeholder || '请选择' }} @@ -146,7 +146,7 @@ @change="bindDateChange($event, index)" > - {{ item.val ? item.val : (item.value.placeholder || $lang('common.ns-newform.l149.t0')) }} + {{ item.val ? item.val : (item.value.placeholder || '请选择日期') }} @@ -170,7 +170,7 @@ > - {{ item.start_date ? item.start_date : (item.value.placeholder_start || $lang('common.ns-newform.l173.t0')) }} + {{ item.start_date ? item.start_date : (item.value.placeholder_start || '开始日期') }} @@ -184,7 +184,7 @@ > - {{ item.end_date ? item.end_date : (item.value.placeholder_end || $lang('common.ns-newform.l187.t0')) }} + {{ item.end_date ? item.end_date : (item.value.placeholder_end || '结束日期') }} @@ -207,7 +207,7 @@ @change="bindTimeChange($event, index)" > - {{ item.val ? item.val : (item.value.placeholder || $lang('common.ns-newform.l210.t0')) }} + {{ item.val ? item.val : (item.value.placeholder || '请选择时间') }} @@ -231,7 +231,7 @@ > - {{ item.start_time ? item.start_time : (item.value.placeholder_start || $lang('common.ns-newform.l234.t0')) }} + {{ item.start_time ? item.start_time : (item.value.placeholder_start || '开始时间') }} @@ -245,7 +245,7 @@ > - {{ item.end_time ? item.end_time : (item.value.placeholder_end || $lang('common.ns-newform.l248.t0')) }} + {{ item.end_time ? item.end_time : (item.value.placeholder_end || '结束时间') }} @@ -268,7 +268,7 @@ @getRegions="handleGetRegions($event, index)" > - {{ item.val ? item.val : (item.value.placeholder || (item.value.default_type == 1 ? '请选择省市' : $lang('common.ns-newform.l271.t0'))) }} + {{ item.val ? item.val : (item.value.placeholder || (item.value.default_type == 1 ? '请选择省市' : '请选择省市区')) }} @@ -788,89 +788,89 @@ export default { if (item.controller == 'Text') { if (item.value.required && !item.val) { - this.$util.showToast({ title: $lang('common.ns-form.l368.t0') + item.value.title }); + this.$util.showToast({ title: '请输入' + item.value.title }); return false; } if (item.name == 'ID_CARD' && !/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(item.val)) { if (!item.value.required) { - this.$util.showToast({ title: $lang('common.ns-form.l378.t0') }); + this.$util.showToast({ title: '身份证输入不合法' }); return false; } if (item.val != '') { - this.$util.showToast({ title: $lang('common.ns-form.l378.t0') }); + this.$util.showToast({ title: '身份证输入不合法' }); return false; } } if (item.name == 'MOBILE' && !this.$util.verifyMobile(item.val)) { if (!item.value.required) { - this.$util.showToast({ title: $lang('common.ns-form.l395.t0') }); + this.$util.showToast({ title: '手机号输入不合法' }); return false; } if (item.val != '') { - this.$util.showToast({ title: $lang('common.ns-form.l395.t0') }); + this.$util.showToast({ title: '手机号输入不合法' }); return false; } } } if (item.controller == 'Textarea' && item.value.required && !item.val) { - this.$util.showToast({ title: $lang('common.ns-form.l368.t0') + item.value.title }); + this.$util.showToast({ title: '请输入' + item.value.title }); return false; } if (item.controller == 'Select' && item.value.required && !item.val) { - this.$util.showToast({ title: $lang('common.ns-form.l37.t0') + item.value.title }); + this.$util.showToast({ title: '请选择' + item.value.title }); return false; } if (item.controller == 'Checkbox' && item.value.required && !item.val) { - this.$util.showToast({ title: $lang('common.ns-form.l432.t0') + item.value.title }); + this.$util.showToast({ title: '请至少选择一个' + item.value.title }); return false; } if (item.controller == 'Img' && item.value.required && !item.val) { - this.$util.showToast({ title: $lang('common.ns-form.l442.t0') + item.value.title }); + this.$util.showToast({ title: '请至少上传一张' + item.value.title }); return false; } if (item.controller == 'Date' && item.value.required && !item.val) { - this.$util.showToast({ title: $lang('common.ns-form.l37.t0') + item.value.title }); + this.$util.showToast({ title: '请选择' + item.value.title }); return false; } if (item.controller == 'Datelimit') { if (item.value.required && !item.val) { - this.$util.showToast({ title: $lang('common.ns-form.l37.t0') + item.value.title }); + this.$util.showToast({ title: '请选择' + item.value.title }); return false; } if (this.$util.timeTurnTimeStamp(item.start_date) > this.$util.timeTurnTimeStamp(item.end_date)) { - this.$util.showToast({ title: $lang('common.ns-form.l470.t0') }); + this.$util.showToast({ title: '结束日期不能小于开始日期' }); return false; } } if (item.controller == 'Time' && item.value.required && !item.val) { - this.$util.showToast({ title: $lang('common.ns-form.l37.t0') + item.value.title }); + this.$util.showToast({ title: '请选择' + item.value.title }); return false; } if (item.controller == 'Timelimit') { if (item.value.required && !item.val) { - this.$util.showToast({ title: $lang('common.ns-form.l37.t0') + item.value.title }); + this.$util.showToast({ title: '请选择' + item.value.title }); return false; } if (item.start_time >= item.end_time) { - this.$util.showToast({ title: $lang('common.ns-form.l498.t0') }); + this.$util.showToast({ title: '结束时间必须大于开始时间' }); return false; } } if (item.controller == 'City' && item.value.required && !item.val) { - this.$util.showToast({ title: $lang('common.ns-form.l37.t0') + item.value.title }); + this.$util.showToast({ title: '请选择' + item.value.title }); return false; } } @@ -902,7 +902,7 @@ export default { if (res.length > 0) { res.forEach(function(img) { if (self.formData[index].img_lists.length >= Number(self.formData[index].value.max_count)) { - self.$util.showToast({ title: $lang('common.ns-form.l545.t0') + self.formData[index].value.max_count + $lang('common.ns-form.l545.t1') }); + self.$util.showToast({ title: '最多上传' + self.formData[index].value.max_count + '张图片' }); return false; } self.formData[index].img_lists.push(img); @@ -916,7 +916,7 @@ export default { addImg(index) { let self = this; if (this.formData[index].img_lists.length >= Number(this.formData[index].value.max_count)) { - this.$util.showToast({ title: $lang('common.ns-form.l545.t0') + this.formData[index].value.max_count + $lang('common.ns-form.l545.t1') }); + this.$util.showToast({ title: '最多上传' + this.formData[index].value.max_count + '张图片' }); return false; } diff --git a/components/ns-payment/ns-payment.vue b/components/ns-payment/ns-payment.vue index 54ef886..6550598 100644 --- a/components/ns-payment/ns-payment.vue +++ b/components/ns-payment/ns-payment.vue @@ -1,643 +1,643 @@ - - - - - - \ No newline at end of file diff --git a/components/ns-select-time/ns-select-time.vue b/components/ns-select-time/ns-select-time.vue index 2fdcd00..8d39484 100644 --- a/components/ns-select-time/ns-select-time.vue +++ b/components/ns-select-time/ns-select-time.vue @@ -1,365 +1,365 @@ - - - - - + + + + + diff --git a/components/ns-video-player-popup/ns-video-player-popup.vue b/components/ns-video-player-popup/ns-video-player-popup.vue index 3a07c00..774b25f 100644 --- a/components/ns-video-player-popup/ns-video-player-popup.vue +++ b/components/ns-video-player-popup/ns-video-player-popup.vue @@ -1,145 +1,145 @@ - - - - - \ No newline at end of file diff --git a/components/payment/payment.vue b/components/payment/payment.vue index 8aa1aab..501039a 100644 --- a/components/payment/payment.vue +++ b/components/payment/payment.vue @@ -1,647 +1,647 @@ - - - - - - \ No newline at end of file diff --git a/components/pick-regions/pick-regions.vue b/components/pick-regions/pick-regions.vue index 9480a62..4260088 100644 --- a/components/pick-regions/pick-regions.vue +++ b/components/pick-regions/pick-regions.vue @@ -14,8 +14,8 @@ - {{ $lang("common.pick-regions.l17.t0") }} - {{ $lang("common.pick-regions.l18.t0") }} + 取消 + 完成 diff --git a/components/privacy-popup/privacy-popup.vue b/components/privacy-popup/privacy-popup.vue index 4dbbcb8..d4c30fe 100644 --- a/components/privacy-popup/privacy-popup.vue +++ b/components/privacy-popup/privacy-popup.vue @@ -2,7 +2,7 @@ - {{ $lang("common.privacy-popup.l5.t0") }} + 用户隐私保护提示 感谢您使用{{ appName }},在使用前您应当阅读并同意 {{ privacyContractName }} @@ -12,13 +12,13 @@ ,当点击同意并继续时,即表示您已理解并同意该条款内容,该条款将对您产生法律约束力;如您不同意,将无法继续使用{{ appName }}相关功能。 - + + @agreeprivacyauthorization="handleAgree">同意并继续 - + @@ -43,12 +43,12 @@ export default { showPop: false, privacyAuthorization: null, privacyResolves: new Set(), - privacyContractName: $lang('common.privacy-popup.l46.t0'), - appName: $lang('common.privacy-popup.l47.t0'), + privacyContractName: '用户隐私保护指引', + appName: '本小程序', // #ifdef WEB || H5 - appName: $lang('common.privacy-popup.l49.t0'), - privacyContractName: $lang('common.ns-login.l51.t0'), - privacyServiceName: $lang('common.ns-login.l53.t0'), + appName: '本应用', + privacyContractName: '《隐私条款》', + privacyServiceName: '《用户服务协议》', // #endif } }, @@ -79,7 +79,7 @@ export default { } // #endif } catch (e) { - console.error($lang("common.privacy-popup.l82.t0"), e) + console.error("=========低版本基础库==========", e) } }, methods: { @@ -250,7 +250,7 @@ export default { uni.setStorageSync('privacyAgreed', true); uni.showModal({ - content: $lang('common.privacy-popup.l253.t0'), + content: '未同意隐私协议,无法使用相关功能', success: () => { this.$emit('disagree') } diff --git a/components/register-reward/register-reward.vue b/components/register-reward/register-reward.vue index 3611276..a23f850 100644 --- a/components/register-reward/register-reward.vue +++ b/components/register-reward/register-reward.vue @@ -1,292 +1,292 @@ - - - - - - + + \ No newline at end of file diff --git a/components/wxwork-contact/wxwork-contact.vue b/components/wxwork-contact/wxwork-contact.vue index 4e0d6f3..ccd3073 100644 --- a/components/wxwork-contact/wxwork-contact.vue +++ b/components/wxwork-contact/wxwork-contact.vue @@ -13,14 +13,14 @@ - {{ $lang("common.wxwork-contact.l16.t0") }} + 添加企业微信客服 - {{ $lang("common.wxwork-contact.l19.t0") }} + 点击确定后将跳转至企业微信,添加专业客服为您服务 - - + + @@ -36,7 +36,7 @@ // 按钮文字 btnText: { type: String, - default: $lang('common.wxwork-contact.l16.t0') + default: '添加企业微信客服' }, // 企业ID(必需) corpId: { @@ -105,11 +105,11 @@ }); if (!initResult) { - console.error($lang('common.wxwork-contact.l108.t0')); + console.error('企业微信SDK初始化失败'); } } } catch (error) { - console.error($lang('common.wxwork-contact.l112.t0'), error); + console.error('初始化企业微信SDK失败:', error); } }, @@ -142,7 +142,7 @@ // 方案2:使用SDK打开用户资料 this.openUserProfile(contactId); } else { - this.showError($lang('common.wxwork-contact.l145.t0')); + this.showError('未配置企业微信客服信息'); } // #endif @@ -151,7 +151,7 @@ // H5环境直接跳转 window.location.href = contactUrl; } else { - this.showError($lang('common.wxwork-contact.l145.t0')); + this.showError('未配置企业微信客服信息'); } // #endif }, @@ -165,13 +165,13 @@ path: `pages/contacts/externalContactDetail?url=${encodeURIComponent(contactUrl)}`, success: () => { this.$util.showToast({ - title: $lang('common.wxwork-contact.l168.t0'), + title: '跳转成功', icon: 'success' }); }, fail: (err) => { - console.error($lang('common.wxwork-contact.l173.t0'), err); - this.showError($lang('common.wxwork-contact.l174.t0')); + console.error('跳转企业微信失败:', err); + this.showError('跳转失败,请检查企业微信配置'); } }); }, @@ -181,7 +181,7 @@ */ openUserProfile(contactId) { if (!this.wxWorkSDK) { - this.showError($lang('common.wxwork-contact.l184.t0')); + this.showError('企业微信SDK未初始化'); return; } @@ -189,8 +189,8 @@ userId: contactId }, (res) => { }, (err) => { - console.error($lang('common.wxwork-contact.l192.t0'), err); - this.showError($lang('common.wxwork-contact.l193.t0')); + console.error('打开用户资料失败:', err); + this.showError('打开用户资料失败'); }); }, @@ -199,7 +199,7 @@ */ showError(message) { uni.showModal({ - title: $lang('common.wxwork-contact.l202.t0'), + title: '提示', content: message, showCancel: false }); diff --git a/components/yuyue-date/yuyue-date.js b/components/yuyue-date/yuyue-date.js index 98db83e..bfe777e 100644 --- a/components/yuyue-date/yuyue-date.js +++ b/components/yuyue-date/yuyue-date.js @@ -1,98 +1,98 @@ -//字符串拼接 -export function strFormat(str) { - return str < 10 ? `0${str}` : str -} -// 获取当前时间 -export function currentTime() { - const myDate = new Date(); - const year = myDate.getFullYear() - const m = myDate.getMonth() + 1; - const d = myDate.getDate(); - // const date = year + '-' + strFormat(m) + '-' + strFormat(d); // 隐藏年 - const date = strFormat(m) + '-' + strFormat(d); - - const hour = myDate.getHours() - const min = myDate.getMinutes() - const secon = myDate.getSeconds() - const time = strFormat(hour) + ':' + strFormat(min) + ':' + strFormat(secon); - return { - year, - date, - time - } -} - -//时间戳转日期 -export function timeStamp(time) { - const dates = new Date(time) - const year = dates.getFullYear() - const month = dates.getMonth() + 1 - const date = dates.getDate() - const day = dates.getDay() - const hour = dates.getHours() - const min = dates.getMinutes() - const days = [$lang('common.ns-select-time.l98.t0'), $lang('common.yuyue-date.l34.t0'), $lang('common.yuyue-date.l34.t1'), $lang('common.yuyue-date.l34.t2'), $lang('common.yuyue-date.l34.t3'), $lang('common.yuyue-date.l34.t4'), $lang('common.yuyue-date.l34.t5')] - return { - allDate: `${year}/${strFormat(month)}/${strFormat(date)}`, - date: `${strFormat(month)}-${strFormat(date)}`, //返回的日期 07-01,${strFormat(year)}-${strFormat(month)}-${strFormat(date)} - day: $lang(`common.yuyue-date.l38.t0`), //返回的礼拜天数 星期一 - hour: strFormat(hour) + ':' + strFormat(min) // + ':00' //返回的时钟 08:00 - } -} - -//获取最近7天的日期和礼拜天数 -export function initData(appointedDay = '') { - const time = [] - const date = appointedDay ? new Date(appointedDay) : new Date() - - const now = date.getTime() //获取当前日期的时间戳 - let timeStr = 3600 * 24 * 1000 //一天的时间戳 - let obj = { - 0: $lang("common.ns-select-time.l173.t0"), - 1: $lang("common.ns-select-time.l185.t0"), - 2: $lang("common.yuyue-date.l53.t0") - } - for (let i = 0; i < 7; i++) { - const timeObj = {} - timeObj.date = timeStamp(now + timeStr * i).date //保存日期 - timeObj.timeStamp = now + timeStr * i //保存时间戳 - timeObj.week = appointedDay == '' ? (obj[i] ?? timeStamp(now + timeStr * i).day) : timeStamp(now + timeStr * i) - .day - time.push(timeObj) - } - return time -} - -//时间数组 -export function initTime(startTime = '09:00', endTime = '18:30', timeInterval = 1) { - const time = [] - const date = timeStamp(Date.now()).allDate - const startDate = `${date} ${startTime}` - const endDate = `${date} ${endTime}` - const startTimeStamp = new Date(startDate).getTime() - const endTimeStamp = new Date(endDate).getTime() - const timeStr = 3600 * 1000 * timeInterval - for (let i = startTimeStamp; i <= endTimeStamp; i = i + timeStr) { - const timeObj = {} - timeObj.time = timeStamp(i).hour - timeObj.disable = false - time.push(timeObj) - } - return time -} - -export function weekDate(){ - var now = new Date(); //当前日期 - var nowDayOfWeek = now.getDay(); //今天本周的第几天 - var nowDay = now.getDate(); //当前日 - var nowMonth = now.getMonth(); //当前月 - var nowYear = now.getYear(); //当前年 - - var weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + 1); - var weekEndDate = new Date(nowYear, nowMonth, nowDay + (7 - nowDayOfWeek)); - - var arr = []; - arr[0] = strFormat(weekStartDate.getMonth()+1) + '-' + strFormat(weekStartDate.getDate()); - arr[1] = strFormat(weekEndDate.getMonth()+1) + '-' + strFormat(weekEndDate.getDate()); - return arr; -} +//字符串拼接 +export function strFormat(str) { + return str < 10 ? `0${str}` : str +} +// 获取当前时间 +export function currentTime() { + const myDate = new Date(); + const year = myDate.getFullYear() + const m = myDate.getMonth() + 1; + const d = myDate.getDate(); + // const date = year + '-' + strFormat(m) + '-' + strFormat(d); // 隐藏年 + const date = strFormat(m) + '-' + strFormat(d); + + const hour = myDate.getHours() + const min = myDate.getMinutes() + const secon = myDate.getSeconds() + const time = strFormat(hour) + ':' + strFormat(min) + ':' + strFormat(secon); + return { + year, + date, + time + } +} + +//时间戳转日期 +export function timeStamp(time) { + const dates = new Date(time) + const year = dates.getFullYear() + const month = dates.getMonth() + 1 + const date = dates.getDate() + const day = dates.getDay() + const hour = dates.getHours() + const min = dates.getMinutes() + const days = ['日', '一', '二', '三', '四', '五', '六'] + return { + allDate: `${year}/${strFormat(month)}/${strFormat(date)}`, + date: `${strFormat(month)}-${strFormat(date)}`, //返回的日期 07-01,${strFormat(year)}-${strFormat(month)}-${strFormat(date)} + day: `周${days[day]}`, //返回的礼拜天数 星期一 + hour: strFormat(hour) + ':' + strFormat(min) // + ':00' //返回的时钟 08:00 + } +} + +//获取最近7天的日期和礼拜天数 +export function initData(appointedDay = '') { + const time = [] + const date = appointedDay ? new Date(appointedDay) : new Date() + + const now = date.getTime() //获取当前日期的时间戳 + let timeStr = 3600 * 24 * 1000 //一天的时间戳 + let obj = { + 0: "今天", + 1: "明天", + 2: "后天" + } + for (let i = 0; i < 7; i++) { + const timeObj = {} + timeObj.date = timeStamp(now + timeStr * i).date //保存日期 + timeObj.timeStamp = now + timeStr * i //保存时间戳 + timeObj.week = appointedDay == '' ? (obj[i] ?? timeStamp(now + timeStr * i).day) : timeStamp(now + timeStr * i) + .day + time.push(timeObj) + } + return time +} + +//时间数组 +export function initTime(startTime = '09:00', endTime = '18:30', timeInterval = 1) { + const time = [] + const date = timeStamp(Date.now()).allDate + const startDate = `${date} ${startTime}` + const endDate = `${date} ${endTime}` + const startTimeStamp = new Date(startDate).getTime() + const endTimeStamp = new Date(endDate).getTime() + const timeStr = 3600 * 1000 * timeInterval + for (let i = startTimeStamp; i <= endTimeStamp; i = i + timeStr) { + const timeObj = {} + timeObj.time = timeStamp(i).hour + timeObj.disable = false + time.push(timeObj) + } + return time +} + +export function weekDate(){ + var now = new Date(); //当前日期 + var nowDayOfWeek = now.getDay(); //今天本周的第几天 + var nowDay = now.getDate(); //当前日 + var nowMonth = now.getMonth(); //当前月 + var nowYear = now.getYear(); //当前年 + + var weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + 1); + var weekEndDate = new Date(nowYear, nowMonth, nowDay + (7 - nowDayOfWeek)); + + var arr = []; + arr[0] = strFormat(weekStartDate.getMonth()+1) + '-' + strFormat(weekStartDate.getDate()); + arr[1] = strFormat(weekEndDate.getMonth()+1) + '-' + strFormat(weekEndDate.getDate()); + return arr; +} diff --git a/components/yuyue-date/yuyue-date.vue b/components/yuyue-date/yuyue-date.vue index 23dba03..a43125e 100644 --- a/components/yuyue-date/yuyue-date.vue +++ b/components/yuyue-date/yuyue-date.vue @@ -3,7 +3,7 @@ @@ -20,7 +20,7 @@
- {{ $lang("common.yuyue-date.l23.t0") }} + 指定日期
@@ -54,13 +54,13 @@
- +
@@ -100,12 +100,12 @@ disableText: { //禁用显示的文本 type: String, - default: $lang('common.yuyue-date.l103.t0') + default: '已约满' }, undisableText: { //未禁用显示的文本 type: String, - default: $lang('common.yuyue-date.l108.t0') + default: '可预约' }, timeInterval: { // 时间间隔,小时为单位 @@ -173,7 +173,7 @@ return { pickerStartDay: '', // 指定开始日期 pickerEndDay: '', // 指定结束日期 - orderDateTime: $lang('common.yuyue-date.l176.t0'), // 选中时间 + orderDateTime: '暂无选择', // 选中时间 orderTimeArr: {}, //多选的时间 dateArr: [], //日期数据 timeArr: [], //时间数据 @@ -209,11 +209,11 @@ let date = e.split("-"); date = date[1] + "-" + date[2]; if (this.disableWeek.length && date >= weekDate()[0] && date <= weekDate()[1]) { - let weekBox = [$lang('common.ns-select-time.l148.t0'), $lang('common.ns-select-time.l148.t1'), $lang('common.ns-select-time.l148.t2'), $lang('common.ns-select-time.l148.t3'), $lang('common.ns-select-time.l148.t4'), $lang('common.ns-select-time.l148.t5'), $lang('common.ns-select-time.l148.t6')]; + let weekBox = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; let index = new Date(e).getDay(); if (this.disableWeek.indexOf(weekBox[index]) != -1) { uni.showToast({ - title: weekBox[index] + $lang('common.yuyue-date.l216.t0'), + title: weekBox[index] + '不可以预约', icon: 'none' }) return false; @@ -231,7 +231,7 @@ // 判断默认是不能选择的周,则都禁止选中 if (this.disableWeek.length && this.selectDate >= weekDate()[0] && this.selectDate <= weekDate()[1]) { - let weekBox = [$lang('common.ns-select-time.l148.t0'), $lang('common.ns-select-time.l148.t1'), $lang('common.ns-select-time.l148.t2'), $lang('common.ns-select-time.l148.t3'), $lang('common.ns-select-time.l148.t4'), $lang('common.ns-select-time.l148.t5'), $lang('common.ns-select-time.l148.t6')]; + let weekBox = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; let date = currentTime().year + '-' + this.selectDate; let index = new Date(date).getDay(); if (this.disableWeek.indexOf(weekBox[index]) != -1) { @@ -297,11 +297,11 @@ // 日期选择事件 selectDateEvent(index, item) { if (this.disableWeek.length && item.date >= weekDate()[0] && item.date <= weekDate()[1]) { - let weekBox = [$lang('common.ns-select-time.l148.t0'), $lang('common.ns-select-time.l148.t1'), $lang('common.ns-select-time.l148.t2'), $lang('common.ns-select-time.l148.t3'), $lang('common.ns-select-time.l148.t4'), $lang('common.ns-select-time.l148.t5'), $lang('common.ns-select-time.l148.t6')]; + let weekBox = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; let index = new Date(item.timeStamp).getDay(); if (this.disableWeek.indexOf(weekBox[index]) != -1) { uni.showToast({ - title: weekBox[index] + $lang('common.yuyue-date.l216.t0'), + title: weekBox[index] + '不可以预约', icon: 'none' }) return false; diff --git a/lang/en-us.js b/lang/en-us.js deleted file mode 100644 index 8c33e83..0000000 --- a/lang/en-us.js +++ /dev/null @@ -1,1911 +0,0 @@ -// Auto-generated by i18n_build_zhcn.py -// Single authoritative lang source. Do not edit manually. -// locale: en-us -// Generated: 2026-06-23 - -export const lang = { - "common": { - "chat-message.l60.t0": "", - "chat-message.l63.t0": "", - "currency_symbol": "¥", - "hover-nav.l192.t0": "", - "hover-nav.l239.t0": "", - "l460": "", - "l466": "", - "l477": "", - "l496": "", - "l506": "", - "l-time.l40.t0": "", - "l-time.l40.t1": "", - "l-time.time.l110.t0": "", - "l-time.time.l119.t0": "", - "mescroll.mescroll-uni-option.l30.t0": "", - "mescroll.mescroll-uni-option.l6.t0": "", - "mescroll.mescroll-uni-option.l7.t0": "", - "mescroll.mescroll-uni-option.l8.t0": "", - "mescroll.my-list-mescroll.l44.t0": "", - "mescroll.my-list-mescroll.l45.t0": "", - "ns-chat.ns-chat-goods.l12.t0": "", - "ns-chat.ns-chat-goods.l25.t0": "", - "ns-chat.ns-chat-order.l7.t0": "", - "ns-chat.ns-chat-order.l8.t0": "", - "ns-chat.ns-chat-receiveGoods.l9.t0": "", - "ns-contact.l32.t0": "", - "ns-contact.l35.t0": "", - "ns-contact.l35.t1": "", - "ns-copyright.l13.t0": "", - "ns-empty.l18.t0": "", - "ns-empty.l31.t0": "", - "ns-form.l191.t0": "", - "ns-form.l191.t1": "", - "ns-form.l368.t0": "", - "ns-form.l37.t0": "", - "ns-form.l378.t0": "", - "ns-form.l395.t0": "", - "ns-form.l432.t0": "", - "ns-form.l442.t0": "", - "ns-form.l470.t0": "", - "ns-form.l498.t0": "", - "ns-form.l545.t0": "", - "ns-form.l545.t1": "", - "ns-goods-recommend.l13.t0": "", - "ns-goods-recommend.l20.t0": "", - "ns-goods-sku.l1007.t0": "", - "ns-goods-sku.l1014.t0": "", - "ns-goods-sku.l120.t0": "", - "ns-goods-sku.l124.t0": "", - "ns-goods-sku.l161.t0": "", - "ns-goods-sku.l162.t0": "", - "ns-goods-sku.l163.t0": "", - "ns-goods-sku.l167.t0": "", - "ns-goods-sku.l185.t0": "", - "ns-goods-sku.l195.t0": "", - "ns-goods-sku.l196.t0": "", - "ns-goods-sku.l199.t0": "", - "ns-goods-sku.l208.t0": "", - "ns-goods-sku.l51.t0": "", - "ns-goods-sku.l710.t0": "", - "ns-goods-sku.l897.t0": "", - "ns-goods-sku.l897.t1": "", - "ns-goods-sku.l985.t0": "", - "ns-goods-sku.ns-goods-sku-category.l264.t0": "", - "ns-goods-sku.ns-goods-sku-category.l272.t0": "", - "ns-goods-sku.ns-goods-sku-category.l278.t0": "", - "ns-goods-sku.ns-goods-sku-category.l279.t0": "", - "ns-goods-sku.ns-goods-sku-category.l378.t0": "", - "ns-goods-sku.ns-goods-sku-category.l388.t0": "", - "ns-goods-sku.ns-goods-sku-category.l459.t0": "", - "ns-goods-sku.ns-goods-sku-category.l75.t0": "", - "ns-goods-sku.ns-goods-sku-category.l76.t0": "", - "ns-goods-sku.ns-goods-sku-index.l124.t0": "", - "ns-goods-sku.ns-goods-sku-index.l150.t0": "", - "ns-goods-sku.ns-goods-sku-index.l70.t0": "", - "ns-loading.l16.t0": "", - "ns-login.l10.t0": "", - "ns-login.l11.t0": "", - "ns-login.l115.t0": "", - "ns-login.l15.t0": "", - "ns-login.l16.t0": "", - "ns-login.l169.t0": "", - "ns-login.l19.t0": "", - "ns-login.l20.t0": "", - "ns-login.l231.t0": "", - "ns-login.l24.t0": "", - "ns-login.l25.t0": "", - "ns-login.l30.t0": "", - "ns-login.l327.t0": "", - "ns-login.l35.t0": "", - "ns-login.l37.t0": "", - "ns-login.l37.t1": "", - "ns-login.l393.t0": "", - "ns-login.l414.t0": "", - "ns-login.l51.t0": "", - "ns-login.l53.t0": "", - "ns-login.l606.t0": "", - "ns-login.l61.t0": "", - "ns-login.l646.t0": "", - "ns-login.l66.t0": "", - "ns-login.l672.t0": "", - "ns-login.l718.t0": "", - "ns-login.l79.t0": "", - "ns-login.l87.t0": "", - "ns-login.l88.t0": "", - "ns-navbar.l31.t0": "", - "ns-navbar.l39.t0": "", - "ns-navbar.l41.t0": "", - "ns-newform.l149.t0": "", - "ns-newform.l173.t0": "", - "ns-newform.l187.t0": "", - "ns-newform.l210.t0": "", - "ns-newform.l234.t0": "", - "ns-newform.l248.t0": "", - "ns-newform.l271.t0": "", - "ns-payment.l13.t0": "", - "ns-payment.l161.t0": "", - "ns-payment.l166.t0": "", - "ns-payment.l18.t0": "", - "ns-payment.l185.t0": "", - "ns-payment.l19.t0": "", - "ns-payment.l298.t0": "", - "ns-payment.l34.t0": "", - "ns-payment.l39.t0": "", - "ns-payment.l398.t0": "", - "ns-payment.l7.t0": "", - "ns-payment.l75.t0": "", - "ns-payment.l80.t0": "", - "ns-select-time.l148.t0": "", - "ns-select-time.l148.t1": "", - "ns-select-time.l148.t2": "", - "ns-select-time.l148.t3": "", - "ns-select-time.l148.t4": "", - "ns-select-time.l148.t5": "", - "ns-select-time.l148.t6": "", - "ns-select-time.l173.t0": "", - "ns-select-time.l185.t0": "", - "ns-select-time.l6.t0": "", - "ns-select-time.l7.t0": "", - "ns-select-time.l89.t0": "", - "ns-select-time.l96.t0": "", - "ns-select-time.l98.t0": "", - "ns-video-player-popup.l17.t0": "", - "l18": "", - "pick-regions.l17.t0": "", - "pick-regions.l18.t0": "", - "privacy-popup.l15.t0": "", - "privacy-popup.l18.t0": "", - "privacy-popup.l253.t0": "", - "privacy-popup.l46.t0": "", - "privacy-popup.l47.t0": "", - "privacy-popup.l49.t0": "", - "privacy-popup.l5.t0": "", - "privacy-popup.l82.t0": "", - "register-reward.l14.t0": "", - "register-reward.l19.t0": "", - "register-reward.l21.t0": "", - "register-reward.l23.t0": "", - "register-reward.l27.t0": "", - "register-reward.l34.t0": "", - "register-reward.l40.t0": "", - "register-reward.l45.t0": "", - "register-reward.l47.t0": "", - "register-reward.l53.t0": "", - "register-reward.l60.t0": "", - "register-reward.l60.t1": "", - "register-reward.l60.t2": "", - "search_tip": "Please enter search keywords", - "submit": "Submit", - "wxwork-contact.l108.t0": "", - "wxwork-contact.l112.t0": "", - "wxwork-contact.l145.t0": "", - "wxwork-contact.l16.t0": "", - "wxwork-contact.l168.t0": "", - "wxwork-contact.l173.t0": "", - "wxwork-contact.l174.t0": "", - "wxwork-contact.l184.t0": "", - "wxwork-contact.l19.t0": "", - "wxwork-contact.l192.t0": "", - "wxwork-contact.l193.t0": "", - "wxwork-contact.l202.t0": "", - "yuyue-date.l103.t0": "", - "yuyue-date.l108.t0": "", - "yuyue-date.l176.t0": "", - "yuyue-date.l216.t0": "", - "yuyue-date.l23.t0": "", - "yuyue-date.l34.t0": "", - "yuyue-date.l34.t1": "", - "yuyue-date.l34.t2": "", - "yuyue-date.l34.t3": "", - "yuyue-date.l34.t4": "", - "yuyue-date.l34.t5": "", - "yuyue-date.l38.t0": "", - "yuyue-date.l53.t0": "", - "yuyue-date.l57.t0": "", - "yuyue-date.l6.t0": "", - "yuyue-date.l60.t0": "", - "yuyue-date.l63.t0": "", - }, - "customer": { - }, - "pageTitles": { - "article.detail": "文章详情", - "article.list": "文章列表", - "bale.detail": "", - "bale.payment": "待付款订单", - "bargain.detail": "", - "bargain.launch": "砍价详情", - "bargain.list": "砍价专区", - "bargain.my_bargain": "我的砍价", - "bargain.payment": "待付款订单", - "combo.detail": "组合套餐", - "combo.payment": "待付款订单", - "contact.contact": "电子名片", - "diy.diy": "", - "fenxiao.apply": "", - "fenxiao.bill": "账单", - "fenxiao.follow": "我的关注", - "fenxiao.goods_list": "", - "fenxiao.index": "", - "fenxiao.level": "", - "fenxiao.order": "", - "fenxiao.order_detail": "订单详情", - "fenxiao.promote_code": "推广海报", - "fenxiao.team": "", - "fenxiao.withdraw_apply": "", - "fenxiao.withdraw_list": "", - "game.cards": "刮刮乐", - "game.record": "中奖纪录", - "game.smash_eggs": "砸金蛋", - "game.turntable": "大转盘", - "goods.brand": "品牌专区", - "goods.cart": "购物车", - "goods.category": "商品分类", - "goods.consult": "商品咨询", - "goods.consult_edit": "我要咨询", - "goods.coupon": "优惠券领取", - "goods.coupon_receive": "领取优惠券", - "goods.detail": "", - "goods.evaluate": "商品评价", - "goods.list": "商品列表", - "goods.not_exist": "商品找不到", - "goods.point": "积分中心", - "goods.search": "搜索", - "groupbuy.detail": "", - "groupbuy.list": "团购专区", - "groupbuy.payment": "待付款订单", - "help.detail": "帮助详情", - "help.list": "帮助中心", - "hongbao.list": "瓜分红包列表", - "hongbao.my_hongbao": "我的红包列表", - "index.index": "", - "live.list": "直播", - "login.find": "找回密码", - "login.login": "登录", - "login.register": "注册", - "member.account": "账户列表", - "member.account_edit": "编辑账户", - "member.address": "收货地址", - "member.address_edit": "编辑收货地址", - "member.apply_withdrawal": "申请提现", - "member.assets": "账号注销", - "member.balance": "我的余额", - "member.balance_detail": "余额明细", - "member.cancellation": "账号注销", - "member.cancelrefuse": "账号注销", - "member.cancelstatus": "账号注销", - "member.cancelsuccess": "账号注销", - "member.card": "会员卡", - "member.card_buy": "会员卡", - "member.collection": "我的关注", - "member.contact": "客服", - "member.coupon": "我的优惠券", - "member.footprint": "我的足迹", - "member.gift": "我的礼品", - "member.gift_detail": "礼品订单", - "member.index": "会员中心", - "member.info": "个人资料", - "member.info_edit": "个人资料", - "member.invite_friends": "邀请好友", - "member.level": "会员等级", - "member.message": "我的消息", - "member.modify_face": "修改头像", - "member.pay_password": "支付密码", - "member.point": "我的积分", - "member.point_detail": "积分明细", - "member.signin": "签到有礼", - "member.withdrawal": "提现记录", - "member.withdrawal_detail": "提现详情", - "notice.detail": "公告详情", - "notice.list": "公告列表", - "order.activist": "售后", - "order.detail": "订单详情", - "order.detail_local_delivery": "订单详情", - "order.detail_pickup": "订单详情", - "order.detail_point": "订单详情", - "order.detail_virtual": "订单详情", - "order.evaluate": "我要评价", - "order.list": "订单列表", - "order.logistics": "物流信息", - "order.payment": "待付款订单", - "order.refund": "申请退款", - "order.refund_batch": "申请退款", - "order.refund_detail": "退款详情", - "pay.index": "支付方式", - "pay.result": "支付结果", - "pintuan.detail": "", - "pintuan.list": "拼团专区", - "pintuan.my_spell": "我的拼单", - "pintuan.payment": "待付款订单", - "pintuan.share": "拼团分享", - "point.detail": "兑换", - "point.list": "积分商城", - "point.order_detail": "积分兑换订单详情", - "point.order_list": "积分兑换", - "point.payment": "待付款订单", - "point.result": "兑换结果", - "presale.detail": "", - "presale.list": "预售专区", - "presale.order_detail": "订单详情", - "presale.order_list": "我的预售", - "presale.payment": "待付款订单", - "recharge.detail": "充值详情", - "recharge.list": "充值列表", - "recharge.order_list": "充值记录", - "seckill.detail": "", - "seckill.list": "秒杀专区", - "seckill.payment": "待付款订单", - "store_notes.note_detail": "笔记详情", - "store_notes.note_list": "店铺笔记", - "storeclose.storeclose": "店铺打烊", - "topics.detail": "专题活动详情", - "topics.goods_detail": "", - "topics.list": "专题活动列表", - "topics.payment": "待付款订单", - "verification.detail": "核销明细", - "verification.index": "核销台", - "verification.list": "核销记录", - "vr.index": "VR", - }, - "tabBar": { - }, - "address": { - }, - "aiChat": { - }, - "ai_chat": { - "ai-chat.ai-chat-message.l1026.t0": "", - "ai-chat.ai-chat-message.l1082.t0": "", - "ai-chat.ai-chat-message.l1100.t0": "", - "ai-chat.ai-chat-message.l1101.t0": "", - "ai-chat.ai-chat-message.l1102.t0": "", - "ai-chat.ai-chat-message.l1103.t0": "", - "ai-chat.ai-chat-message.l1128.t0": "", - "ai-chat.ai-chat-message.l1128.t1": "", - "ai-chat.ai-chat-message.l1129.t0": "", - "ai-chat.ai-chat-message.l1130.t0": "", - "ai-chat.ai-chat-message.l1130.t1": "", - "ai-chat.ai-chat-message.l1131.t0": "", - "ai-chat.ai-chat-message.l1131.t1": "", - "ai-chat.ai-chat-message.l1132.t0": "", - "ai-chat.ai-chat-message.l1132.t1": "", - "ai-chat.ai-chat-message.l1139.t0": "", - "ai-chat.ai-chat-message.l1139.t1": "", - "ai-chat.ai-chat-message.l1429.t0": "", - "ai-chat.ai-chat-message.l1477.t0": "", - "ai-chat.ai-chat-message.l1483.t0": "", - "ai-chat.ai-chat-message.l1691.t0": "", - "ai-chat.ai-chat-message.l1691.t1": "", - "ai-chat.ai-chat-message.l1705.t0": "", - "ai-chat.ai-chat-message.l1705.t1": "", - "ai-chat.ai-chat-message.l1709.t0": "", - "ai-chat.ai-chat-message.l1713.t0": "", - "ai-chat.ai-chat-message.l1714.t0": "", - "ai-chat.ai-chat-message.l1714.t1": "", - "ai-chat.ai-chat-message.l1971.t0": "", - "ai-chat.ai-chat-message.l1972.t0": "", - "ai-chat.ai-chat-message.l1973.t0": "", - "ai-chat.ai-chat-message.l1974.t0": "", - "ai-chat.ai-chat-message.l1975.t0": "", - "ai-chat.ai-chat-message.l1976.t0": "", - "ai-chat.ai-chat-message.l1977.t0": "", - "ai-chat.ai-chat-message.l1978.t0": "", - "ai-chat.ai-chat-message.l1979.t0": "", - "ai-chat.ai-chat-message.l1980.t0": "", - "ai-chat.ai-chat-message.l1981.t0": "", - "ai-chat.ai-chat-message.l1983.t0": "", - "ai-chat.ai-chat-message.l1984.t0": "", - "ai-chat.ai-chat-message.l1985.t0": "", - "ai-chat.ai-chat-message.l1987.t0": "", - "ai-chat.ai-chat-message.l1989.t0": "", - "ai-chat.ai-chat-message.l1990.t0": "", - "ai-chat.ai-chat-message.l1991.t0": "", - "ai-chat.ai-chat-message.l1996.t0": "", - "ai-chat.ai-chat-message.l1997.t0": "", - "ai-chat.ai-chat-message.l1998.t0": "", - "ai-chat.ai-chat-message.l1999.t0": "", - "ai-chat.ai-chat-message.l2001.t0": "", - "ai-chat.ai-chat-message.l2003.t0": "", - "ai-chat.ai-chat-message.l2004.t0": "", - "ai-chat.ai-chat-message.l2005.t0": "", - "ai-chat.ai-chat-message.l2006.t0": "", - "ai-chat.ai-chat-message.l2007.t0": "", - "ai-chat.ai-chat-message.l2008.t0": "", - "ai-chat.ai-chat-message.l2010.t0": "", - "ai-chat.ai-chat-message.l2011.t0": "", - "ai-chat.ai-chat-message.l2012.t0": "", - "ai-chat.ai-chat-message.l2014.t0": "", - "ai-chat.ai-chat-message.l2015.t0": "", - "ai-chat.ai-chat-message.l2017.t0": "", - "ai-chat.ai-chat-message.l2018.t0": "", - "ai-chat.ai-chat-message.l2019.t0": "", - "ai-chat.ai-chat-message.l2020.t0": "", - "ai-chat.ai-chat-message.l2021.t0": "", - "ai-chat.ai-chat-message.l2022.t0": "", - "ai-chat.ai-chat-message.l2023.t0": "", - "ai-chat.ai-chat-message.l2024.t0": "", - "ai-chat.ai-chat-message.l2025.t0": "", - "ai-chat.ai-chat-message.l2026.t0": "", - "ai-chat.ai-chat-message.l2027.t0": "", - "ai-chat.ai-chat-message.l2028.t0": "", - "ai-chat.ai-chat-message.l2029.t0": "", - "ai-chat.ai-chat-message.l2031.t0": "", - "ai-chat.ai-chat-message.l2033.t0": "", - "ai-chat.ai-chat-message.l2034.t0": "", - "ai-chat.ai-chat-message.l2036.t0": "", - "ai-chat.ai-chat-message.l2038.t0": "", - "ai-chat.ai-chat-message.l2039.t0": "", - "ai-chat.ai-chat-message.l2040.t0": "", - "ai-chat.ai-chat-message.l2043.t0": "", - "ai-chat.ai-chat-message.l2044.t0": "", - "ai-chat.ai-chat-message.l2045.t0": "", - "ai-chat.ai-chat-message.l2046.t0": "", - "ai-chat.ai-chat-message.l2047.t0": "", - "ai-chat.ai-chat-message.l2048.t0": "", - "ai-chat.ai-chat-message.l2050.t0": "", - "ai-chat.ai-chat-message.l2051.t0": "", - "ai-chat.ai-chat-message.l2054.t0": "", - "ai-chat.ai-chat-message.l2056.t0": "", - "ai-chat.ai-chat-message.l2057.t0": "", - "ai-chat.ai-chat-message.l2059.t0": "", - "ai-chat.ai-chat-message.l2060.t0": "", - "ai-chat.ai-chat-message.l2061.t0": "", - "ai-chat.ai-chat-message.l2062.t0": "", - "ai-chat.ai-chat-message.l2063.t0": "", - "ai-chat.ai-chat-message.l2064.t0": "", - "ai-chat.ai-chat-message.l2065.t0": "", - "ai-chat.ai-chat-message.l2066.t0": "", - "ai-chat.ai-chat-message.l2067.t0": "", - "ai-chat.ai-chat-message.l2068.t0": "", - "ai-chat.ai-chat-message.l2069.t0": "", - "ai-chat.ai-chat-message.l2070.t0": "", - "ai-chat.ai-chat-message.l2071.t0": "", - "ai-chat.ai-chat-message.l2072.t0": "", - "ai-chat.ai-chat-message.l2073.t0": "", - "ai-chat.ai-chat-message.l2074.t0": "", - "ai-chat.ai-chat-message.l2075.t0": "", - "ai-chat.ai-chat-message.l2076.t0": "", - "ai-chat.ai-chat-message.l2080.t0": "", - "ai-chat.ai-chat-message.l2081.t0": "", - "ai-chat.ai-chat-message.l2082.t0": "", - "ai-chat.ai-chat-message.l2083.t0": "", - "ai-chat.ai-chat-message.l2084.t0": "", - "ai-chat.ai-chat-message.l2085.t0": "", - "ai-chat.ai-chat-message.l2086.t0": "", - "ai-chat.ai-chat-message.l2087.t0": "", - "ai-chat.ai-chat-message.l2088.t0": "", - "ai-chat.ai-chat-message.l2089.t0": "", - "ai-chat.ai-chat-message.l2090.t0": "", - "ai-chat.ai-chat-message.l2091.t0": "", - "ai-chat.ai-chat-message.l2092.t0": "", - "ai-chat.ai-chat-message.l2093.t0": "", - "ai-chat.ai-chat-message.l2095.t0": "", - "ai-chat.ai-chat-message.l2096.t0": "", - "ai-chat.ai-chat-message.l2097.t0": "", - "ai-chat.ai-chat-message.l2098.t0": "", - "ai-chat.ai-chat-message.l2099.t0": "", - "ai-chat.ai-chat-message.l2100.t0": "", - "ai-chat.ai-chat-message.l2101.t0": "", - "ai-chat.ai-chat-message.l2102.t0": "", - "ai-chat.ai-chat-message.l2103.t0": "", - "ai-chat.ai-chat-message.l2104.t0": "", - "ai-chat.ai-chat-message.l2105.t0": "", - "ai-chat.ai-chat-message.l2107.t0": "", - "ai-chat.ai-chat-message.l2108.t0": "", - "ai-chat.ai-chat-message.l2109.t0": "", - "ai-chat.ai-chat-message.l2110.t0": "", - "ai-chat.ai-chat-message.l2111.t0": "", - "ai-chat.ai-chat-message.l2112.t0": "", - "ai-chat.ai-chat-message.l2113.t0": "", - "ai-chat.ai-chat-message.l2114.t0": "", - "ai-chat.ai-chat-message.l2115.t0": "", - "ai-chat.ai-chat-message.l2116.t0": "", - "ai-chat.ai-chat-message.l2117.t0": "", - "ai-chat.ai-chat-message.l2118.t0": "", - "ai-chat.ai-chat-message.l2119.t0": "", - "ai-chat.ai-chat-message.l2121.t0": "", - "ai-chat.ai-chat-message.l2125.t0": "", - "ai-chat.ai-chat-message.l2126.t0": "", - "ai-chat.ai-chat-message.l2127.t0": "", - "ai-chat.ai-chat-message.l2128.t0": "", - "ai-chat.ai-chat-message.l2129.t0": "", - "ai-chat.ai-chat-message.l2130.t0": "", - "ai-chat.ai-chat-message.l2131.t0": "", - "ai-chat.ai-chat-message.l618.t0": "", - "ai-chat.ai-chat-message.l623.t0": "", - "ai-chat.ai-chat-message.l627.t0": "", - "ai-chat.ai-chat-message.l630.t0": "", - "ai-chat.ai-chat-message.l638.t0": "", - "ai-chat.ai-chat-message.l649.t0": "", - "ai-chat.ai-chat-message.l660.t0": "", - "ai-chat.ai-chat-message.l664.t0": "", - "ai-chat.ai-chat-message.l672.t0": "", - "ai-chat.ai-chat-message.l674.t0": "", - "ai-chat.ai-chat-message.l767.t0": "", - "ai-chat.ai-chat-message.l771.t0": "", - "ai-chat.ai-chat-message.l775.t0": "", - "ai-chat.ai-chat-message.l778.t0": "", - "ai-chat.ai-chat-message.l781.t0": "", - "ai-chat.ai-chat-message.l801.t0": "", - "ai-chat.ai-chat-message.l801.t1": "", - "ai-chat.ai-chat-message.l807.t0": "", - "ai-chat.ai-chat-message.l884.t0": "", - "ai-chat.index.l146.t0": "", - "ai-chat.index.l157.t0": "", - "ai-chat.index.l180.t0": "", - "ai-chat.index.l236.t0": "", - "ai-chat.index.l266.t0": "", - "ai-chat.index.l424.t0": "", - "ai-chat.index.l425.t0": "", - "ai-chat.index.l426.t0": "", - "ai-chat.index.l427.t0": "", - "ai-chat.index.l428.t0": "", - "ai-chat.index.l437.t0": "", - "ai-chat.index.l437.t1": "", - "ai-chat.index.l481.t0": "", - "ai-chat.index.l485.t0": "", - "ai-chat.index.l521.t0": "", - }, - "appointment": { - }, - "article": { - "detail.l5.t0": "", - "list.l24.t0": "", - "list.l91.t0": "", - }, - "assets": { - }, - "auth": { - }, - "balance": { - }, - "bale": { - }, - "bargain": { - }, - "birthday": { - }, - "brand": { - }, - "cancel": { - }, - "card": { - }, - "cart": { - }, - "cases": { - }, - "category": { - }, - "channel": { - }, - "chat": { - }, - "collection": { - }, - "combo": { - }, - "contact": { - "l165.t0": "", - "l314.t0": "", - "l372.t0": "", - "l376.t0": "", - "l380.t0": "", - "l405.t0": "", - "l76.t0": "", - "l93.t0": "", - }, - "coupon": { - }, - "customerService": { - }, - "date": { - }, - "delivery": { - }, - "diy": { - "diy-article.l10.t0": "", - "diy-article.l908.t0": "", - "diy-article.l925.t0": "", - "diy-article.l94.t0": "", - "diy-article.l99.t0": "", - "diy-bargain.l15.t0": "", - "diy-bargain.l78.t0": "", - "diy-category-item.l132.t0": "", - "diy-category-item.l163.t0": "", - "diy-category-item.l47.t0": "", - "diy-category.l12.t0": "", - "diy-category.l123.t0": "", - "diy-category.l138.t0": "", - "diy-category.l144.t0": "", - "diy-category.l54.t0": "", - "diy-category.l71.t0": "", - "diy-channel-list.l268.t0": "", - "diy-channel-list.l278.t0": "", - "diy-coupon.l103.t0": "", - "diy-coupon.l104.t0": "", - "diy-coupon.l105.t0": "", - "diy-coupon.l143.t0": "", - "diy-coupon.l181.t0": "", - "diy-coupon.l209.t0": "", - "diy-coupon.l229.t0": "", - "diy-coupon.l241.t0": "", - "diy-coupon.l32.t0": "", - "diy-coupon.l32.t1": "", - "diy-coupon.l32.t2": "", - "diy-coupon.l38.t0": "", - "diy-coupon.l407.t0": "", - "diy-coupon.l430.t0": "", - "diy-coupon.l71.t0": "", - "diy-fenxiao-goods-list.l141.t0": "", - "diy-fenxiao-goods-list.l153.t0": "", - "diy-fenxiao-goods-list.l170.t0": "", - "diy-fenxiao-goods-list.l23.t0": "", - "diy-form.l142.t0": "", - "diy-form.l301.t0": "", - "diy-form.l306.t0": "", - "diy-form.l315.t0": "", - "diy-index-page.l156.t0": "", - "diy-index-page.l196.t0": "", - "diy-kefu.l17.t0": "", - "diy-listmenu.l15.t0": "", - "diy-live.l29.t0": "", - "diy-live.l33.t0": "", - "diy-map.l9.t0": "", - "diy-member-info.l110.t0": "", - "diy-member-info.l113.t0": "", - "diy-member-info.l114.t0": "", - "diy-member-info.l121.t0": "", - "diy-member-info.l125.t0": "", - "diy-member-info.l137.t0": "", - "diy-member-info.l146.t0": "", - "diy-member-info.l15.t0": "", - "diy-member-info.l164.t0": "", - "diy-member-info.l197.t0": "", - "diy-member-info.l198.t0": "", - "diy-member-info.l39.t0": "", - "diy-member-info.l407.t0": "", - "diy-member-info.l497.t0": "", - "diy-merch-list.l66.t0": "", - "diy-notes.l20.t0": "", - "diy-notes.l21.t0": "", - "diy-notice.l45.t0": "", - "diy-notice.l49.t0": "", - "diy-payment-qrcode.l12.t0": "", - "diy-payment-qrcode.l16.t0": "", - "diy-payment-qrcode.l22.t0": "", - "diy-payment-qrcode.l33.t0": "", - "diy-payment-qrcode.l6.t0": "", - "diy-pinfan.l28.t0": "", - "diy-pinfan.l52.t0": "", - "diy-pinfan.l55.t0": "", - "diy-pintuan.l151.t0": "", - "diy-pintuan.l29.t0": "", - "diy-pintuan.l29.t1": "", - "diy-search.l31.t0": "", - "diy-seckill.l100.t0": "", - "diy-seckill.l16.t0": "", - "diy-seckill.l19.t0": "", - "diy-seckill.l505.t0": "", - "diy-seckill.l90.t0": "", - "diy-store.l10.t0": "", - "diy-store.l20.t0": "", - "diy-store.l66.t0": "", - "diy-text.l211.t0": "", - "diy-video.l146.t0": "", - "diy-video.l187.t0": "", - "js.wechat-channel.l111.t0": "", - "js.wechat-channel.l170.t0": "", - "js.wechat-channel.l59.t0": "", - "js.wechat-channel.l60.t0": "", - "js.wechat-channel.l61.t0": "", - "js.wechat-channel.l62.t0": "", - }, - "diyText": { - }, - "evaluate": { - }, - "fenxiao": { - "apply.l100.t0": "", - "apply.l101.t0": "", - "apply.l126.t0": "", - "apply.l131.t0": "", - "apply.l133.t0": "", - "apply.l134.t0": "", - "apply.l16.t0": "", - "apply.l166.t0": "", - "apply.l194.t0": "", - "apply.l210.t0": "", - "apply.l27.t0": "", - "apply.l278.t0": "", - "apply.l32.t0": "", - "apply.l45.t0": "", - "apply.l52.t0": "", - "apply.l82.t0": "", - "bill.l11.t0": "", - "bill.l19.t0": "", - "child_fenxiao.l23.t0": "", - "child_fenxiao.l24.t0": "", - "child_fenxiao.l32.t0": "", - "goods_list.l118.t0": "", - "goods_list.l43.t0": "", - "goods_list.l49.t0": "", - "goods_list.l56.t0": "", - "goods_list.l59.t0": "", - "index.l114.t0": "", - "index.l124.t0": "", - "index.l125.t0": "", - "index.l133.t0": "", - "index.l142.t0": "", - "index.l162.t0": "", - "index.l171.t0": "", - "index.l172.t0": "", - "index.l180.t0": "", - "index.l21.t0": "", - "index.l21.t1": "", - "index.l214.t0": "", - "index.l215.t0": "", - "index.l22.t0": "", - "index.l223.t0": "", - "index.l231.t0": "", - "index.l239.t0": "", - "index.l254.t0": "", - "index.l254.t1": "", - "index.l293.t0": "", - "index.l33.t0": "", - "index.l33.t1": "", - "index.l34.t0": "", - "index.l36.t0": "", - "index.l371.t0": "", - "index.l43.t0": "", - "index.l483.t0": "", - "index.l484.t0": "", - "index.l485.t0": "", - "index.l498.t0": "", - "index.l499.t0": "", - "index.l512.t0": "", - "index.l512.t1": "", - "index.l514.t0": "", - "index.l514.t1": "", - "index.l526.t0": "", - "index.l527.t0": "", - "index.l528.t0": "", - "index.l539.t0": "", - "index.l540.t0": "", - "index.l55.t0": "", - "index.l553.t0": "", - "index.l554.t0": "", - "index.l567.t0": "", - "index.l568.t0": "", - "index.l59.t0": "", - "index.l64.t0": "", - "index.l70.t0": "", - "index.l93.t0": "", - "index.l94.t0": "", - "level.l119.t0": "", - "level.l131.t0": "", - "level.l143.t0": "", - "level.l144.t0": "", - "level.l157.t0": "", - "level.l169.t0": "", - "level.l181.t0": "", - "level.l181.t1": "", - "level.l193.t0": "", - "level.l20.t0": "", - "level.l221.t0": "", - "level.l24.t0": "", - "level.l28.t0": "", - "order.l17.t0": "", - "order.l19.t0": "", - "order.l20.t0": "", - "order.l81.t0": "", - "order.l83.t0": "", - "order.l85.t0": "", - "order.l87.t0": "", - "order_detail.l47.t0": "", - "order_detail.l56.t0": "", - "order_detail.l60.t0": "", - "promote.l21.t0": "", - "promote.l22.t0": "", - "promote.l35.t0": "", - "promote.l44.t0": "", - "promote_code.l114.t0": "", - "promote_code.l139.t0": "", - "promote_code.l14.t0": "", - "promote_code.l18.t0": "", - "promote_code.l24.t0": "", - "promote_code.l29.t0": "", - "ranking_list.l19.t0": "", - "ranking_list.l21.t0": "", - "ranking_list.l33.t0": "", - "ranking_list.l44.t0": "", - "ranking_list.l45.t0": "", - "ranking_list.l57.t0": "", - "ranking_list.l68.t0": "", - "team.l92.t0": "", - "team.l96.t0": "", - "withdraw_apply.l178.t0": "", - "withdraw_apply.l189.t0": "", - "withdraw_apply.l19.t0": "", - "withdraw_apply.l196.t0": "", - "withdraw_apply.l205.t0": "", - "withdraw_apply.l238.t0": "", - "withdraw_apply.l31.t0": "", - "withdraw_apply.l41.t0": "", - "withdraw_apply.l42.t0": "", - "withdraw_apply.l46.t0": "", - "withdraw_apply.l48.t0": "", - "withdraw_apply.l5.t0": "", - "withdraw_apply.l59.t0": "", - "withdraw_apply.l6.t0": "", - "withdraw_apply.l64.t0": "", - "withdraw_list.l12.t0": "", - "withdraw_list.l12.t1": "", - "withdraw_list.l13.t0": "", - "withdraw_list.l28.t0": "", - "withdraw_list.l45.t0": "", - "withdraw_list.l49.t0": "", - "withdraw_list.l53.t0": "", - "withdraw_list.l57.t0": "", - "withdraw_list.l78.t0": "", - "withdrawal_detail.l10.t0": "", - "withdrawal_detail.l14.t0": "", - "withdrawal_detail.l18.t0": "", - "withdrawal_detail.l22.t0": "", - "withdrawal_detail.l26.t0": "", - "withdrawal_detail.l30.t0": "", - "withdrawal_detail.l34.t0": "", - "withdrawal_detail.l38.t0": "", - "withdrawal_detail.l42.t0": "", - "withdrawal_detail.l46.t0": "", - }, - "files": { - }, - "find": { - }, - "footprint": { - }, - "form": { - }, - "game": { - }, - "goods": { - "_components.goods-detail-view.detail.l285.t0": "", - "_components.goods-detail-view.detail.l351.t0": "", - "_components.goods-detail-view.detail.l356.t0": "", - "_components.goods-detail-view.l143.t0": "", - "_components.goods-detail-view.l156.t0": "", - "_components.goods-detail-view.l180.t0": "", - "_components.goods-detail-view.l213.t0": "", - "_components.goods-detail-view.l257.t0": "", - "_components.goods-detail-view.l264.t0": "", - "_components.goods-detail-view.l269.t0": "", - "_components.goods-detail-view.l290.t0": "", - "_components.goods-detail-view.l292.t0": "", - "_components.goods-detail-view.l338.t0": "", - "_components.goods-detail-view.l397.t0": "", - "_components.goods-detail-view.l400.t0": "", - "_components.goods-detail-view.l411.t0": "", - "_components.goods-detail-view.l417.t0": "", - "_components.goods-detail-view.l426.t0": "", - "_components.goods-detail-view.l434.t0": "", - "_components.goods-detail-view.l441.t0": "", - "_components.goods-detail-view.l446.t0": "", - "_components.goods-detail-view.l75.t0": "", - "_components.goods-detail-view.l81.t0": "", - "_components.goods-detail-view.l99.t0": "", - "_components.ns-goods-promotion.l13.t0": "", - "_components.ns-goods-promotion.l19.t0": "", - "_components.ns-goods-promotion.l25.t0": "", - "_components.ns-goods-promotion.l31.t0": "", - "_components.ns-goods-promotion.l37.t0": "", - "_components.ns-goods-promotion.l43.t0": "", - "_components.ns-goods-promotion.l6.t0": "", - "_components.ns-goods-promotion.l7.t0": "", - "cart.l123.t0": "", - "cart.l143.t0": "", - "cart.l145.t0": "", - "cart.l17.t0": "", - "cart.l192.t0": "", - "cart.l202.t0": "", - "cart.l202.t1": "", - "cart.l221.t0": "", - "cart.l226.t0": "", - "cart.l239.t0": "", - "cart.l294.t0": "", - "cart.l298.t0": "", - "cart.l341.t0": "", - "cart.l341.t1": "", - "cart.l8.t0": "", - "category.l51.t0": "", - "detail.l129.t0": "", - "detail.l131.t0": "", - "detail.l132.t0": "", - "detail.l133.t0": "", - "detail.l134.t0": "", - "detail.l152.t0": "", - "detail.l18.t0": "", - "detail.l187.t0": "", - "detail.l194.t0": "", - "detail.l220.t0": "", - "detail.l23.t0": "", - "detail.l300.t0": "", - "detail.l348.t0": "", - "detail.l349.t0": "", - "detail.l350.t0": "", - "detail.l354.t0": "", - "detail.l379.t0": "", - "detail.l383.t0": "", - "detail.l396.t0": "", - "detail.l523.t0": "", - "detail.l527.t0": "", - "detail.l55.t0": "", - "detail.l591.t0": "", - "detail.l99.t0": "", - "list.l148.t0": "", - "list.l160.t0": "", - "list.l168.t0": "", - "list.l170.t0": "", - "list.l172.t0": "", - "list.l188.t0": "", - "list.l19.t0": "", - "list.l203.t0": "", - "list.l23.t0": "", - "list.l28.t0": "", - "list.l40.t0": "", - "public.js.cart.l236.t0": "", - "public.js.cart.l243.t0": "", - "public.js.cart.l243.t1": "", - "public.js.cart.l385.t0": "", - "public.js.detail.l321.t0": "", - "public.js.detail.l323.t0": "", - "public.js.detail.l379.t0": "", - "public.js.detail.l386.t0": "", - "public.js.detail.l392.t0": "", - "public.js.detail.l392.t1": "", - "public.js.detail.l392.t2": "", - "public.js.detail.l395.t0": "", - "public.js.list.l126.t0": "", - "public.js.list.l126.t1": "", - "public.js.list.l126.t2": "", - "public.js.list.l365.t0": "", - "public.js.list.l371.t0": "", - "public.js.list.l378.t0": "", - "public.js.list.l384.t0": "", - "public.js.list.l78.t0": "", - }, - "goodsList": { - }, - "groupbuy": { - }, - "help": { - "list.l73.t0": "", - "list.l81.t0": "", - "list.l9.t0": "", - }, - "hongbao": { - }, - "http": { - }, - "imgCropping": { - }, - "index": { - }, - "invite": { - }, - "kefu": { - }, - "level": { - }, - "live": { - }, - "login": { - "find.l100.t0": "", - "find.l13.t0": "", - "find.l169.t0": "", - "find.l18.t0": "", - "find.l188.t0": "", - "find.l19.t0": "", - "find.l196.t0": "", - "find.l196.t1": "", - "find.l200.t0": "", - "find.l204.t0": "", - "find.l208.t0": "", - "find.l212.t0": "", - "find.l216.t0": "", - "find.l230.t0": "", - "find.l286.t0": "", - "find.l7.t0": "", - }, - "loginPage": { - }, - "logistics": { - }, - "map": { - }, - "member": { - "account.l10.t0": "", - "account.l106.t0": "", - "account.l107.t0": "", - "account.l118.t0": "", - "account.l123.t0": "", - "account.l184.t0": "", - "account.l32.t0": "", - "account.l37.t0": "", - "account.l55.t0": "", - "account_edit.l139.t0": "", - "account_edit.l163.t0": "", - "account_edit.l178.t0": "", - "account_edit.l20.t0": "", - "account_edit.l226.t0": "", - "account_edit.l23.t0": "", - "account_edit.l230.t0": "", - "account_edit.l24.t0": "", - "account_edit.l5.t0": "", - "account_edit.l67.t0": "", - "account_edit.l71.t0": "", - "address.l196.t0": "", - "address.l201.t0": "", - "address.l247.t0": "", - "address.l293.t0": "", - "address.l38.t0": "", - "address.l57.t0": "", - "address_edit.l138.t0": "", - "address_edit.l142.t0": "", - "address_edit.l200.t0": "", - "address_edit.l233.t0": "", - "address_edit.l234.t0": "", - "address_edit.l241.t0": "", - "address_edit.l259.t0": "", - "address_edit.l319.t0": "", - "address_edit.l4.t0": "", - "address_edit.l44.t0": "", - "apply_withdrawal.l109.t0": "", - "apply_withdrawal.l19.t0": "", - "apply_withdrawal.l24.t0": "", - "apply_withdrawal.l34.t0": "", - "apply_withdrawal.l40.t0": "", - "assets.l18.t0": "", - "assets.l22.t0": "", - "assets.l33.t0": "", - "assets.l46.t0": "", - "assets.l5.t0": "", - "assets.l54.t0": "", - "assets.l59.t0": "", - "assets.l63.t0": "", - "assets.l67.t0": "", - "assets.l73.t0": "", - "assets.l74.t0": "", - "assets.l9.t0": "", - "balance.l19.t0": "", - "balance.l24.t0": "", - "balance.l28.t0": "", - "balance.l33.t0": "", - "balance.l49.t0": "", - "balance.l56.t0": "", - "balance_detail.l124.t0": "", - "balance_detail.l46.t0": "", - "balance_detail.l68.t0": "", - "balance_detail.l71.t0": "", - "cancellation.l13.t0": "", - "cancellation.l15.t0": "", - "cancellation.l63.t0": "", - "cancelrefuse.l5.t0": "", - "cancelrefuse.l6.t0": "", - "cancelrefuse.l8.t0": "", - "cancelstatus.l16.t0": "", - "cancelstatus.l17.t0": "", - "cancelstatus.l26.t0": "", - "cancelstatus.l27.t0": "", - "cancelstatus.l33.t0": "", - "cancelstatus.l8.t0": "", - "cancelstatus.l84.t0": "", - "cancelstatus.l85.t0": "", - "cancelstatus.l9.t0": "", - "cancelsuccess.l7.t0": "", - "cancelsuccess.l8.t0": "", - "card.l104.t0": "", - "card.l174.t0": "", - "card.l25.t0": "", - "card.l31.t0": "", - "card.l42.t0": "", - "card.l52.t0": "", - "card.l53.t0": "", - "card.l57.t0": "", - "card.l58.t0": "", - "card.l62.t0": "", - "card.l63.t0": "", - "card.l72.t0": "", - "card.l81.t0": "", - "card.l82.t0": "", - "card.l86.t0": "", - "card.l91.t0": "", - "card_buy.l175.t0": "", - "card_buy.l214.t0": "", - "card_buy.l353.t0": "", - "card_buy.l81.t0": "", - "collection.l33.t0": "", - "collection.l33.t1": "", - "coupon.l45.t0": "", - "coupon.l5.t0": "", - "coupon.l6.t0": "", - "footprint.l137.t0": "", - "footprint.l4.t0": "", - "footprint.l49.t0": "", - "footprint.l49.t1": "", - "footprint.l57.t0": "", - "footprint.l59.t0": "", - "info.l101.t0": "", - "info.l14.t0": "", - "info.l37.t0": "", - "info.l43.t0": "", - "info.l50.t0": "", - "info.l66.t0": "", - "info.l75.t0": "", - "info.l83.t0": "", - "info_edit.l10.t0": "", - "info_edit.l120.t0": "", - "info_edit.l131.t0": "", - "info_edit.l134.t0": "", - "info_edit.l139.t0": "", - "info_edit.l147.t0": "", - "info_edit.l57.t0": "", - "info_edit.l7.t0": "", - "info_edit.l71.t0": "", - "info_edit.l72.t0": "", - "info_edit.l77.t0": "", - "info_edit.l82.t0": "", - "info_edit.l87.t0": "", - "invite_friends.l126.t0": "", - "invite_friends.l133.t0": "", - "invite_friends.l142.t0": "", - "invite_friends.l151.t0": "", - "invite_friends.l17.t0": "", - "invite_friends.l20.t0": "", - "invite_friends.l217.t0": "", - "invite_friends.l50.t0": "", - "invite_friends.l55.t0": "", - "invite_friends.l56.t0": "", - "invite_friends.l61.t0": "", - "invite_friends.l71.t0": "", - "invite_friends.l98.t0": "", - "level.l100.t0": "", - "level.l106.t0": "", - "level.l113.t0": "", - "level.l12.t0": "", - "level.l268.t0": "", - "level.l57.t0": "", - "level.l59.t0": "", - "level.l72.t0": "", - "level.l91.t0": "", - "level.l92.t0": "", - "level.l98.t0": "", - "level.l99.t0": "", - "level_growth_rules.l23.t0": "", - "level_growth_rules.l25.t0": "", - "level_growth_rules.l30.t0": "", - "level_growth_rules.l33.t0": "", - "level_growth_rules.l34.t0": "", - "level_growth_rules.l35.t0": "", - "level_growth_rules.l36.t0": "", - "modify_face.l117.t0": "", - "modify_face.l14.t0": "", - "modify_face.l22.t0": "", - "modify_face.l23.t0": "", - "modify_face.l95.t0": "", - "pay_password.l10.t0": "", - "pay_password.l11.t0": "", - "pay_password.l12.t0": "", - "pay_password.l152.t0": "", - "pay_password.l3.t0": "", - "pay_password.l37.t0": "", - "pay_password.l4.t0": "", - "pay_password.l52.t0": "", - "point.l20.t0": "", - "point.l24.t0": "", - "point.l28.t0": "", - "point.l32.t0": "", - "point.l48.t0": "", - "point.l53.t0": "", - "point.l57.t0": "", - "point.l58.t0": "", - "point.l60.t0": "", - "point.l65.t0": "", - "point.l66.t0": "", - "point.l68.t0": "", - "public.js.info.l157.t0": "", - "public.js.info.l404.t0": "", - "public.js.info.l411.t0": "", - "public.js.info.l579.t0": "", - "public.js.info.l58.t0": "", - "public.js.info.l612.t0": "", - "public.js.info.l62.t0": "", - "public.js.info.l67.t0": "", - "public.js.info.l726.t0": "", - "public.js.info.l744.t0": "", - "public.js.info.l869.t0": "", - "public.js.info.l874.t0": "", - "public.js.member-public.l64.t0": "", - "public.js.signin.l201.t0": "", - "public.js.signin.l236.t0": "", - "public.js.signin.l237.t0": "", - "public.js.signin.l268.t0": "", - "public.js.signin.l31.t0": "", - }, - "memberInfo": { - }, - "merch": { - "detail.l102.t0": "", - "detail.l31.t0": "", - "detail.l35.t0": "", - "detail.l35.t1": "", - "detail.l7.t0": "", - "merchcategory.l83.t0": "", - "merchcategory.l87.t0": "", - "public.edit.l103.t0": "", - "public.edit.l126.t0": "", - "public.edit.l133.t0": "", - "public.edit.l170.t0": "", - "public.edit.l496.t0": "", - "public.edit.l533.t0": "", - "public.edit.l56.t0": "", - "public.edit.l56.t1": "", - "public.edit.l578.t0": "", - "public.edit.l58.t0": "", - "public.edit.l58.t1": "", - "public.edit.l58.t2": "", - "public.edit.l58.t3": "", - "public.edit.l585.t0": "", - "public.edit.l63.t0": "", - "public.edit.l635.t0": "", - "public.edit.l641.t0": "", - "public.edit.l648.t0": "", - "public.edit.l658.t0": "", - "public.edit.l665.t0": "", - "public.edit.l67.t0": "", - "public.edit.l671.t0": "", - "public.edit.l677.t0": "", - "public.edit.l71.t0": "", - "public.edit.l81.t0": "", - "public.edit.l85.t0": "", - "public.edit.l908.t0": "", - "public.edit.l929.t0": "", - "public.edit.l93.t0": "", - "public.edit.l93.t1": "", - "public.edit.l96.t0": "", - "public.edit.l99.t0": "", - "public.js.list.l80.t0": "", - }, - "mescroll": { - }, - "navbar": { - }, - "newGift": { - }, - "note": { - }, - "notice": { - "detail.l87.t0": "", - "list.l10.t0": "", - "list.l18.t0": "", - }, - "order": { - "_components.common-payment.l100.t0": "", - "_components.common-payment.l102.t0": "", - "_components.common-payment.l128.t0": "", - "_components.common-payment.l138.t0": "", - "_components.common-payment.l144.t0": "", - "_components.common-payment.l149.t0": "", - "_components.common-payment.l156.t0": "", - "_components.common-payment.l192.t0": "", - "_components.common-payment.l227.t0": "", - "_components.common-payment.l230.t0": "", - "_components.common-payment.l238.t0": "", - "_components.common-payment.l239.t0": "", - "_components.common-payment.l242.t0": "", - "_components.common-payment.l251.t0": "", - "_components.common-payment.l27.t0": "", - "_components.common-payment.l276.t0": "", - "_components.common-payment.l28.t0": "", - "_components.common-payment.l285.t0": "", - "_components.common-payment.l293.t0": "", - "_components.common-payment.l301.t0": "", - "_components.common-payment.l303.t0": "", - "_components.common-payment.l303.t1": "", - "_components.common-payment.l304.t0": "", - "_components.common-payment.l316.t0": "", - "_components.common-payment.l335.t0": "", - "_components.common-payment.l342.t0": "", - "_components.common-payment.l351.t0": "", - "_components.common-payment.l361.t0": "", - "_components.common-payment.l385.t0": "", - "_components.common-payment.l393.t0": "", - "_components.common-payment.l403.t0": "", - "_components.common-payment.l403.t1": "", - "_components.common-payment.l408.t0": "", - "_components.common-payment.l414.t0": "", - "_components.common-payment.l415.t0": "", - "_components.common-payment.l452.t0": "", - "_components.common-payment.l469.t0": "", - "_components.common-payment.l478.t0": "", - "_components.common-payment.l500.t0": "", - "_components.common-payment.l551.t0": "", - "_components.common-payment.l557.t0": "", - "_components.common-payment.l57.t0": "", - "_components.common-payment.l587.t0": "", - "_components.common-payment.l602.t0": "", - "_components.common-payment.l610.t0": "", - "_components.common-payment.l611.t0": "", - "_components.common-payment.l7.t0": "", - "_components.common-payment.l75.t0": "", - "_components.common-payment.l81.t0": "", - "_components.common-payment.payment.l134.t0": "", - "_components.common-payment.payment.l135.t0": "", - "_components.common-payment.payment.l142.t0": "", - "_components.common-payment.payment.l150.t0": "", - "_components.common-payment.payment.l151.t0": "", - "_components.common-payment.payment.l158.t0": "", - "_components.common-payment.payment.l159.t0": "", - "_components.common-payment.payment.l487.t0": "", - "_components.common-payment.payment.l500.t0": "", - "_components.common-payment.payment.l509.t0": "", - "_components.common-payment.payment.l517.t0": "", - "_components.common-payment.payment.l535.t0": "", - "_components.common-payment.payment.l544.t0": "", - "_components.common-payment.payment.l840.t0": "", - "_components.common-payment.payment.l846.t0": "", - "_components.common-payment.payment.l852.t0": "", - "_components.common-payment.payment.l858.t0": "", - "_components.common-payment.payment.l866.t0": "", - "_components.common-payment.payment.l873.t0": "", - "detail.l106.t0": "", - "detail.l109.t0": "", - "detail.l16.t0": "", - "detail.l192.t0": "", - "detail.l192.t1": "", - "detail.l198.t0": "", - "detail.l198.t1": "", - "detail.l208.t0": "", - "detail.l214.t0": "", - "detail.l221.t0": "", - "detail.l227.t0": "", - "detail.l233.t0": "", - "detail.l241.t0": "", - "detail.l247.t0": "", - "detail.l254.t0": "", - "detail.l260.t0": "", - "detail.l266.t0": "", - "detail.l274.t0": "", - "detail.l276.t0": "", - "detail.l276.t1": "", - "detail.l280.t0": "", - "detail.l282.t0": "", - "detail.l282.t1": "", - "detail.l286.t0": "", - "detail.l293.t0": "", - "detail.l299.t0": "", - "detail.l305.t0": "", - "detail.l329.t0": "", - "detail.l350.t0": "", - "detail.l360.t0": "", - "detail.l362.t0": "", - "detail.l37.t0": "", - "detail.l372.t0": "", - "detail.l376.t0": "", - "detail.l382.t0": "", - "detail.l387.t0": "", - "detail.l393.t0": "", - "detail.l400.t0": "", - "detail.l406.t0": "", - "detail.l409.t0": "", - "detail.l416.t0": "", - "detail.l42.t0": "", - "detail.l47.t0": "", - "detail.l51.t0": "", - "detail.l537.t0": "", - "detail.l568.t0": "", - "detail.l589.t0": "", - "detail.l601.t0": "", - "detail.l602.t0": "", - "detail.l737.t0": "", - "detail.l84.t0": "", - "detail_point.l126.t0": "", - "detail_point.l128.t0": "", - "detail_point.l14.t0": "", - "detail_point.l14.t1": "", - "detail_point.l15.t0": "", - "detail_point.l225.t0": "", - "detail_point.l236.t0": "", - "detail_point.l99.t0": "", - "list.l141.t0": "", - "list.l152.t0": "", - "list.l297.t0": "", - "list.l302.t0": "", - "list.l307.t0": "", - "list.l317.t0": "", - "list.l35.t0": "", - "list.l6.t0": "", - "list.l74.t0": "", - "payment.l37.t0": "", - "payment.l48.t0": "", - "payment.l66.t0": "", - "payment.l73.t0": "", - "public.js.orderMethod.l13.t0": "", - "public.js.orderMethod.l13.t1": "", - "public.js.orderMethod.l176.t0": "", - "public.js.orderMethod.l47.t0": "", - "public.js.orderMethod.l60.t0": "", - "public.js.orderMethod.l61.t0": "", - "public.js.orderMethod.l81.t0": "", - "public.js.refundMethod.l10.t0": "", - "public.js.refundMethod.l11.t0": "", - }, - "page": { - "index.l108.t0": "", - "index.l115.t0": "", - "index.l119.t0": "", - "index.l130.t0": "", - "index.l133.t0": "", - "index.l16.t0": "", - "index.l47.t0": "", - "index.l89.t0": "", - "index.public.js.index.l121.t0": "", - "index.public.js.index.l122.t0": "", - "index.public.js.index.l126.t0": "", - }, - "pay": { - }, - "payment": { - }, - "picker": { - }, - "pinfan": { - }, - "pintuan": { - }, - "point": { - "detail.l129.t0": "", - "detail.l144.t0": "", - "detail.l187.t0": "", - "detail.l195.t0": "", - "detail.l208.t0": "", - "detail.l213.t0": "", - "detail.l296.t0": "", - "detail.l296.t1": "", - "detail.l77.t0": "", - "detail.l77.t1": "", - "detail.l78.t0": "", - "goods_list.l29.t0": "", - "goods_list.l79.t0": "", - "goods_list.l99.t0": "", - "list.l125.t0": "", - "list.l128.t0": "", - "list.l13.t0": "", - "list.l148.t0": "", - "list.l181.t0": "", - "list.l234.t0": "", - "list.l239.t0": "", - "list.l240.t0": "", - "list.l241.t0": "", - "list.l242.t0": "", - "list.l243.t0": "", - "list.l244.t0": "", - "list.l245.t0": "", - "list.l246.t0": "", - "list.l247.t0": "", - "list.l276.t0": "", - "list.l305.t0": "", - "list.l31.t0": "", - "list.l40.t0": "", - "list.l41.t0": "", - "list.l50.t0": "", - "list.l55.t0": "", - "list.l583.t0": "", - "list.l59.t0": "", - "list.l63.t0": "", - "list.l67.t0": "", - "list.l84.t0": "", - "list.l86.t0": "", - "list.l94.t0": "", - "order_list.l85.t0": "", - "payment.l133.t0": "", - "payment.l217.t0": "", - "public.js.payment.l283.t0": "", - "public.js.payment.l285.t0": "", - "public.js.payment.l318.t0": "", - "public.js.payment.l356.t0": "", - "public.js.payment.l363.t0": "", - "public.js.payment.l378.t0": "", - "public.js.payment.l95.t0": "", - }, - "presale": { - }, - "privacy": { - }, - "promotion": { - }, - "recharge": { - }, - "refund": { - }, - "reward": { - }, - "seal": { - "medium.detail.l17.t0": "", - "medium.detail.l18.t0": "", - "medium.detail.l29.t0": "", - "medium.search.l6.t0": "", - "structure.l12.t0": "", - "structure.l23.t0": "", - "structure.l6.t0": "", - }, - "seckill": { - }, - "share": { - }, - "sku": { - }, - "store": { - }, - "store_notes": { - }, - "storeclose": { - }, - "time": { - }, - "tool": { - "_components.img-cropping.l212.t0": "", - "_components.img-cropping.l22.t0": "", - "_components.img-cropping.l23.t0": "", - "_components.img-cropping.l235.t0": "", - "_components.img-cropping.l255.t0": "", - "_components.ns-birthday-gift.l11.t0": "", - "_components.ns-birthday-gift.l14.t0": "", - "_components.ns-birthday-gift.l33.t0": "", - "_components.ns-birthday-gift.l35.t0": "", - "_components.ns-birthday-gift.l45.t0": "", - "_components.ns-birthday-gift.l57.t0": "", - "_components.ns-new-gift.l14.t0": "", - "_components.ns-new-gift.l23.t0": "", - "agreement.contenr.l11.t0": "", - "agreement.contenr.l12.t0": "", - "agreement.contenr.l13.t0": "", - "cases.index.l143.t0": "", - "cases.index.l167.t0": "", - "cases.index.l22.t0": "", - "cases.index.l31.t0": "", - "cases.index.l47.t0": "", - "cases.index.l56.t0": "", - "cases.index.l60.t0": "", - "cases.index.l62.t0": "", - "cases.index.l66.t0": "", - "cases.index.l68.t0": "", - "file-preview.l15.t0": "", - "file-preview.l32.t0": "", - "files.list.l32.t0": "", - "files.list.l5.t0": "", - "form.formdata.l72.t0": "", - "form.l8.t0": "", - "goods.brand.l14.t0": "", - "goods.brand.l79.t0": "", - "goods.coupon.l10.t0": "", - "goods.coupon.l102.t0": "", - "goods.coupon.l11.t0": "", - "goods.coupon.l44.t0": "", - "goods.coupon.l45.t0": "", - "goods.coupon.l52.t0": "", - "goods.coupon.l52.t1": "", - "goods.coupon.l65.t0": "", - "goods.coupon.l66.t0": "", - "goods.coupon.l70.t0": "", - "goods.coupon.l8.t0": "", - "goods.coupon_receive.l13.t0": "", - "goods.coupon_receive.l186.t0": "", - "goods.coupon_receive.l189.t0": "", - "goods.coupon_receive.l192.t0": "", - "goods.coupon_receive.l195.t0": "", - "goods.coupon_receive.l207.t0": "", - "goods.coupon_receive.l207.t1": "", - "goods.coupon_receive.l212.t0": "", - "goods.coupon_receive.l247.t0": "", - "goods.coupon_receive.l249.t0": "", - "goods.coupon_receive.l27.t0": "", - "goods.evaluate.l47.t0": "", - "goods.evaluate.l52.t0": "", - "goods.evaluate.l69.t0": "", - "goods.evaluate.l82.t0": "", - "goods.evaluate.l82.t1": "", - "goods.evaluate.l82.t2": "", - "goods.not_exist.l5.t0": "", - "goods.search.l15.t0": "", - "goods.search.l165.t0": "", - "goods.search.l33.t0": "", - "goods.search.l86.t0": "", - "goods.search.l99.t0": "", - "order.activist.l10.t0": "", - "order.activist.l115.t0": "", - "order.activist.l12.t0": "", - "order.activist.l30.t0": "", - "order.evaluate.l16.t0": "", - "order.evaluate.l42.t0": "", - "order.evaluate.l47.t0": "", - "order.evaluate.l72.t0": "", - "order.logistics.l37.t0": "", - "order.public.js.evaluate.l160.t0": "", - "order.public.js.evaluate.l168.t0": "", - "order.public.js.evaluate.l200.t0": "", - "order.public.js.evaluate.l90.t0": "", - "order.refund.l17.t0": "", - "order.refund.l175.t0": "", - "order.refund.l18.t0": "", - "order.refund.l24.t0": "", - "order.refund.l242.t0": "", - "order.refund.l25.t0": "", - "order.refund.l34.t0": "", - "order.refund.l42.t0": "", - "order.refund.l48.t0": "", - "order.refund.l54.t0": "", - "order.refund.l81.t0": "", - "order.refund_batch.l26.t0": "", - "order.refund_detail.l10.t0": "", - "order.refund_detail.l100.t0": "", - "order.refund_detail.l106.t0": "", - "order.refund_detail.l121.t0": "", - "order.refund_detail.l121.t1": "", - "order.refund_detail.l13.t0": "", - "order.refund_detail.l139.t0": "", - "order.refund_detail.l14.t0": "", - "order.refund_detail.l19.t0": "", - "order.refund_detail.l24.t0": "", - "order.refund_detail.l26.t0": "", - "order.refund_detail.l29.t0": "", - "order.refund_detail.l32.t0": "", - "order.refund_detail.l38.t0": "", - "order.refund_detail.l51.t0": "", - "order.refund_detail.l51.t1": "", - "order.refund_detail.l52.t0": "", - "order.refund_detail.l52.t1": "", - "order.refund_detail.l52.t2": "", - "order.refund_detail.l52.t3": "", - "order.refund_detail.l56.t0": "", - "order.refund_detail.l57.t0": "", - "order.refund_detail.l58.t0": "", - "order.refund_detail.l59.t0": "", - "order.refund_detail.l60.t0": "", - "order.refund_detail.l76.t0": "", - "order.refund_detail.l8.t0": "", - "order.refund_detail.l80.t0": "", - "order.refund_detail.l88.t0": "", - "order.refund_detail.l9.t0": "", - "order.refund_detail.l92.t0": "", - "order.refund_goods_select.l28.t0": "", - "order.refund_goods_select.l53.t0": "", - "pay.cashier.l23.t0": "", - "pay.cashier.l25.t0": "", - "pay.cashier.l27.t0": "", - "pay.result.l21.t0": "", - "pay.result.l37.t0": "", - "pay.result.l46.t0": "", - "pay.wx_pay.l6.t0": "", - "recharge.list.l20.t0": "", - "recharge.list.l276.t0": "", - "recharge.list.l29.t0": "", - "recharge.list.l34.t0": "", - "recharge.list.l44.t0": "", - "recharge.list.l44.t1": "", - "recharge.list.l50.t0": "", - "recharge.list.l56.t0": "", - "recharge.list.l67.t0": "", - "recharge.list.l7.t0": "", - "recharge.list.l89.t0": "", - "recharge.order_list.l16.t0": "", - "recharge.order_list.l24.t0": "", - "recharge.order_list.l29.t0": "", - "recharge.order_list.l34.t0": "", - "storeclose.l41.t0": "", - "storeclose.l45.t0": "", - "storeclose.l47.t0": "", - "weapp.order_shipping.l20.t0": "", - "weapp.order_shipping.l32.t0": "", - }, - "topics": { - }, - "verification": { - }, - "video": { - }, - "vr": { - }, - "weapp": { - }, - "wxwork": { - }, - "yuyueDate": { - }, - "Filter": "", - "Make": "", - "Price": "", - "Random": "", - "Sales": "", - "Search": "", - "about": "", - "account": "", - "accountInputPlaceholder": "", - "accountPlaceholder": "", - "accountType": "", - "activist": "", - "addcart": "", - "addressPlaceholder": "", - "agreeAgreementTip": "", - "aiNickname": "", - "aiThinking": "", - "alikeNickname": "", - "alikePhone": "", - "alikeusername": "", - "allElection": "", - "animateCodeInput": "", - "audioMessage": "", - "avatarSelectorTitle": "", - "buy": "", - "buynow": "", - "call": "", - "cancellation": "", - "captchaPlaceholder": "", - "changeAvatar": "", - "changeAvatarDesc": "", - "changeNickname": "", - "changeNicknameDesc": "", - "chatCleared": "", - "chooseFromAlbum": "", - "commission": "", - "commissiontext": "", - "complete": "", - "completed": "", - "confirmClearChat": "", - "confirmCodeInput": "", - "confirmOpenLink": "", - "consignee": "", - "consigneePlaceholder": "", - "consult": "", - "contactInfo": "", - "copy": "", - "copyFail": "", - "copyFailed": "", - "copySuccess": "", - "defaultNickname": "", - "del": "", - "details": "", - "dynacodeInputPlaceholder": "", - "dynacodePlaceholder": "", - "edit": "", - "editNickname": "", - "emojiTitle": "", - "emptyTips": "", - "enterCaptchaTip": "", - "enterCorrectMobileTip": "", - "enterMobileTip": "", - "exchangeSuccess": "", - "exclusiveCustomerService": "", - "expandEditorTitle": "", - "express": "", - "fallbackWelcome": "", - "featureDeveloping": "", - "file": "", - "fileOpenFail": "", - "findanimateCode": "", - "follow": "", - "forgetPasswordText": "", - "getAddress": "", - "getDynacode": "", - "goHome": "", - "home": "", - "image": "", - "improveService": "", - "inputPlaceholder": "", - "lang": "", - "leave": "", - "loadHistoryFail": "", - "loadMoreHistory": "", - "location": "", - "loginButtonText": "", - "loginSuccessTip": "", - "loginTpis": "", - "logout": "", - "logoutContent": "", - "logoutTitle": "", - "make": "", - "max": "", - "menuClearChat": "", - "menuExport": "", - "menuHelp": "", - "menuSettings": "", - "messageContent": "", - "mobile": "", - "mobileInputPlaceholder": "", - "mobilePhone": "", - "mobilePlaceholder": "", - "modify": "", - "modifyNickname": "", - "moreFunctions": "", - "name": "", - "newAddAccount": "", - "newAddAddress": "", - "newNicknamePlaceholder": "", - "next": "", - "nicknameChangeSuccess": "", - "nicknameTip": "", - "noContentToCopy": "", - "noEmityNickname": "", - "noEmityUsername": "", - "noMatchResult": "", - "oneClickNavigation": "", - "onlineMessage": "", - "openLink": "", - "openingFile": "", - "operationFailed": "", - "password": "", - "passwordInputPlaceholder": "", - "passwordPlaceholder": "", - "paymentAmount": "", - "paymentFail": "", - "paymentSuccess": "", - "paypassword": "", - "pleaseEnterMessage": "", - "pleaseEnterMobile": "", - "pleaseEnterName": "", - "pleaseInputNewPassword": "", - "pleaseInputOldPassword": "", - "privacyPolicy": "", - "privacyPolicyText": "", - "prompt": "", - "rePasswordPlaceholder": "", - "realName": "", - "receivingCity": "", - "receivingReply": "", - "recordingTip": "", - "registerAgreementText": "", - "registrationAgreement": "", - "requestFailTip": "", - "retry": "", - "sales": "", - "save": "", - "search": "", - "searchAtBottom": "", - "searchAtTop": "", - "searchClose": "", - "searchEntrance": "", - "searchPlaceholder": "", - "see": "", - "sellout": "", - "send": "", - "serviceTemporaryUnavailable": "", - "serviceTypeNotSupported": "", - "serviceUnavailable": "", - "settingsTitle": "", - "settlement": "", - "sex": "", - "spec": "", - "startRecordTip": "", - "status": "", - "stock": "", - "submit": "", - "surePhoneNumber": "", - "telephone": "", - "telephonePlaceholder": "", - "thanksFeedback": "", - "timeFormatBeforeYesterday": "", - "timeFormatYesterday": "", - "title": "", - "toGoodsCategoryPage": "", - "toLogin": "", - "total": "", - "updateSuccess": "", - "userServiceAgreementText": "", - "videoMessage": "", - "voice": "", - "voiceInputFailed": "", - "voiceInputTitle": "", - "waitconfirm": "", - "waitpay": "", - "waitsend": "", - "welcomeText": "", - "withdrawal": "", -}; diff --git a/lang/en-us/ai-chat/index.js b/lang/en-us/ai-chat/index.js new file mode 100644 index 0000000..2a41b70 --- /dev/null +++ b/lang/en-us/ai-chat/index.js @@ -0,0 +1,104 @@ +export const lang = { + //title for each page + title: 'AI Customer Service', + + // ====== Common ====== + cancel: 'Cancel', + save: 'Save', + send: 'Send', + retry: 'Retry', + + // ====== Time Format ====== + timeFormatToday: 'Today', + timeFormatYesterday: 'Yesterday', + timeFormatBeforeYesterday: 'Day before yesterday', + + // ====== ai-chat-message ====== + aiNickname: 'AI Assistant', + defaultNickname: 'Me', + audioMessage: 'Voice Message', + videoMessage: 'Video Message', + inputPlaceholder: 'Please enter your question...', + expandEditorTitle: 'Edit Content', + loadMoreHistory: 'Load more history', + loadingHistory: 'Loading history...', + aiThinking: 'AI is thinking', + receivingReply: 'Receiving reply', + aiThinkingStatus1: 'AI is thinking', + aiThinkingStatus2: 'AI is analyzing', + aiThinkingStatus3: 'AI is searching', + aiThinkingStatus4: 'AI is generating', + serviceUnavailable: 'Sorry, the AI service is temporarily unavailable. Please try again later.', + serviceTemporaryUnavailable: 'Sorry, the service is temporarily unavailable. Please try again later.', + noContentToCopy: 'No content to copy', + copySuccess: 'Copied', + copySelected: 'Copied selected content', + copyFail: 'Copy failed', + openingFile: 'Opening file...', + fileOpenFail: 'Failed to open file', + loadHistoryFail: 'Failed to load history', + about: '0B', + + // ====== ai-chat-search ====== + searchEntrance: 'Search', + searchPlaceholder: 'Search chat history', + searchClose: 'Done', + noMatchResult: 'No matching results', + searchAtTop: 'Already at top', + searchAtBottom: 'Already at bottom', + + // ====== index.vue ====== + settingsTitle: 'Settings', + fallbackWelcome: 'Hello! I am an AI customer service assistant, glad to serve you!\n\nI can help you with:\n• Product-related questions\n• Order issues\n• Technical support\n• Product recommendations\n\nPlease tell me how I can assist you?', + changeAvatar: 'Change Avatar', + changeAvatarDesc: 'Customize your chat avatar', + changeNickname: 'Change Nickname', + changeNicknameDesc: 'Customize your nickname', + clearChat: 'Clear Chat', + exportChat: 'Export Records', + help: 'Help', + confirmClearChat: 'Are you sure you want to clear the chat?', + chatCleared: 'Chat history has been cleared. How can I help you?', + featureDeveloping: 'Feature under development', + thanksFeedback: 'Thank you for your feedback!', + improveService: 'We will improve our service', + openLink: 'Open Link', + confirmOpenLink: 'Are you sure you want to open this link: ', + operationFailed: 'Operation failed, please try again', + prompt: 'Prompt', + serviceTypeNotSupported: 'Current service type does not support this page', + + // ====== ai-chat-avatar-selector ====== + avatarSelectorTitle: 'Change Avatar', + chooseFromAlbum: 'Choose from Album', + avatarChangeSuccess: 'Avatar changed successfully', + enableAlbumPermission: 'Please enable album permission', + + // ====== ai-chat-emoji-panel ====== + emojiTitle: 'Emoji', + + // ====== ai-chat-nickname-editor ====== + editNickname: 'Edit Nickname', + newNicknamePlaceholder: 'Please enter your new nickname', + nicknameTip: 'Nickname length 1-12 characters, visible only to you', + nicknameChangeSuccess: 'Nickname changed successfully', + + // ====== ai-chat-tools-panel ====== + moreFunctions: 'More Features', + image: 'Image', + file: 'File', + voice: 'Voice', + location: 'Location', + + // ====== ai-chat-voice-panel ====== + voiceInputTitle: 'Voice Input', + recordingTip: 'Recording, release to end', + startRecordTip: 'Tap to start recording', + voiceInputFailed: 'Voice input failed', + + // ====== index.vue - Menu ====== + menuClearChat: 'Clear Chat', + menuExport: 'Export Records', + menuSettings: 'Settings', + menuHelp: 'Help' +} diff --git a/lang/en-us/article/detail.js b/lang/en-us/article/detail.js new file mode 100644 index 0000000..f9511d1 --- /dev/null +++ b/lang/en-us/article/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Article Details' +} \ No newline at end of file diff --git a/lang/en-us/article/list.js b/lang/en-us/article/list.js new file mode 100644 index 0000000..1cce3aa --- /dev/null +++ b/lang/en-us/article/list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: 'Article List', + emptyText: "No article information available currently" +} \ No newline at end of file diff --git a/lang/en-us/bale/detail.js b/lang/en-us/bale/detail.js new file mode 100644 index 0000000..5df3c59 --- /dev/null +++ b/lang/en-us/bale/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '' +} \ No newline at end of file diff --git a/lang/en-us/bale/payment.js b/lang/en-us/bale/payment.js new file mode 100644 index 0000000..dd3cca0 --- /dev/null +++ b/lang/en-us/bale/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Pending Payment Order' +} \ No newline at end of file diff --git a/lang/en-us/bargain/detail.js b/lang/en-us/bargain/detail.js new file mode 100644 index 0000000..bb306c5 --- /dev/null +++ b/lang/en-us/bargain/detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: 'Select', + params: 'Parameters', + service: 'Product Service', + allGoods: 'All Products', + image: 'Image', + video: 'Video', +} \ No newline at end of file diff --git a/lang/en-us/bargain/launch.js b/lang/en-us/bargain/launch.js new file mode 100644 index 0000000..56140de --- /dev/null +++ b/lang/en-us/bargain/launch.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Bargain Details' +} \ No newline at end of file diff --git a/lang/en-us/bargain/list.js b/lang/en-us/bargain/list.js new file mode 100644 index 0000000..eb635eb --- /dev/null +++ b/lang/en-us/bargain/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Bargain Zone' +} \ No newline at end of file diff --git a/lang/en-us/bargain/my_bargain.js b/lang/en-us/bargain/my_bargain.js new file mode 100644 index 0000000..836607b --- /dev/null +++ b/lang/en-us/bargain/my_bargain.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Bargain' +} \ No newline at end of file diff --git a/lang/en-us/bargain/payment.js b/lang/en-us/bargain/payment.js new file mode 100644 index 0000000..aec078a --- /dev/null +++ b/lang/en-us/bargain/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Pending Payment Order' +} \ No newline at end of file diff --git a/lang/en-us/combo/detail.js b/lang/en-us/combo/detail.js new file mode 100644 index 0000000..746d2f0 --- /dev/null +++ b/lang/en-us/combo/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Combo Package' +} \ No newline at end of file diff --git a/lang/en-us/combo/payment.js b/lang/en-us/combo/payment.js new file mode 100644 index 0000000..1572d25 --- /dev/null +++ b/lang/en-us/combo/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Pending Payment Orders' +} \ No newline at end of file diff --git a/lang/en-us/common.js b/lang/en-us/common.js new file mode 100644 index 0000000..7ed4c42 --- /dev/null +++ b/lang/en-us/common.js @@ -0,0 +1,37 @@ +export const lang = { + + // 底部选项卡 + tabBar: { + home: 'index', + category: 'category', + cart: 'cart', + member: 'member', + }, + + //公共 + common: { + //语言包名称 + name: '英文', + mescrollTextInOffset: 'pull to refresh', + mescrollTextOutOffset: 'Loading...', + mescrollEmpty: "No data available", + goodsRecommendTitle: 'Guess you like', + currencySymbol: '¥', + submit: 'Submit', + searchTip: 'Please enter search keywords' + }, + + //customer service + customer: { + weChatKefu: 'WeChat Customer Service', + systemKefu: 'System Customer Service', + weChatWorkKefu: 'WeChat Work Customer Service', + }, + + getDynacode: 'Get Code', + + login: 'Login/Register', + loginTips: 'Click to login and enjoy more exciting information', + toLogin: 'Go to login', + toGoodsCategoryPage: 'Go shopping', +} \ No newline at end of file diff --git a/lang/en-us/contact/contact.js b/lang/en-us/contact/contact.js new file mode 100644 index 0000000..a27c572 --- /dev/null +++ b/lang/en-us/contact/contact.js @@ -0,0 +1,18 @@ +export const lang = { + //title为每个页面的标题 + title: 'Electronic Card', + onlineMessage: 'Online Message', + call: 'One-click Call', + copy: 'Copy', + copyFailed: 'Copy Failed', + copySuccess: 'Copy Success', + oneClickNavigation: 'One-click Navigation', + name: 'Name', + contactInfo: 'Contact Info', + messageContent: 'Message Content', + pleaseEnterName: 'Please enter your name', + pleaseEnterMobile: 'Please enter your phone number', + pleaseEnterMessage: 'Please enter your message', + submit: 'Submit', + exclusiveCustomerService: 'Exclusive Customer Service' +} diff --git a/lang/en-us/diy/diy.js b/lang/en-us/diy/diy.js new file mode 100644 index 0000000..69f2645 --- /dev/null +++ b/lang/en-us/diy/diy.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '', +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/apply.js b/lang/en-us/fenxiao/apply.js new file mode 100644 index 0000000..1306afc --- /dev/null +++ b/lang/en-us/fenxiao/apply.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: 'Distributor Application' + title: '' +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/bill.js b/lang/en-us/fenxiao/bill.js new file mode 100644 index 0000000..bc18ef0 --- /dev/null +++ b/lang/en-us/fenxiao/bill.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Bill' +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/follow.js b/lang/en-us/fenxiao/follow.js new file mode 100644 index 0000000..d7fdb92 --- /dev/null +++ b/lang/en-us/fenxiao/follow.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Following' +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/goods_list.js b/lang/en-us/fenxiao/goods_list.js new file mode 100644 index 0000000..7c9bbf1 --- /dev/null +++ b/lang/en-us/fenxiao/goods_list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: 'Distribution Product List', + title: '' +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/index.js b/lang/en-us/fenxiao/index.js new file mode 100644 index 0000000..e8aab4e --- /dev/null +++ b/lang/en-us/fenxiao/index.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: 'Distribution Center', + title: '' +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/level.js b/lang/en-us/fenxiao/level.js new file mode 100644 index 0000000..8d9fb0a --- /dev/null +++ b/lang/en-us/fenxiao/level.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: 'Distributor Level', + title: '' +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/order.js b/lang/en-us/fenxiao/order.js new file mode 100644 index 0000000..43ed42f --- /dev/null +++ b/lang/en-us/fenxiao/order.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: 'Distribution Orders', + title: '' +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/order_detail.js b/lang/en-us/fenxiao/order_detail.js new file mode 100644 index 0000000..0d8984e --- /dev/null +++ b/lang/en-us/fenxiao/order_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Order Details' +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/promote_code.js b/lang/en-us/fenxiao/promote_code.js new file mode 100644 index 0000000..de3fd13 --- /dev/null +++ b/lang/en-us/fenxiao/promote_code.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Promotion Poster' +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/team.js b/lang/en-us/fenxiao/team.js new file mode 100644 index 0000000..8a96e75 --- /dev/null +++ b/lang/en-us/fenxiao/team.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: 'My Team' + title: '' +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/withdraw_apply.js b/lang/en-us/fenxiao/withdraw_apply.js new file mode 100644 index 0000000..7b23789 --- /dev/null +++ b/lang/en-us/fenxiao/withdraw_apply.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: 'Withdrawal Application' + title: '' +} \ No newline at end of file diff --git a/lang/en-us/fenxiao/withdraw_list.js b/lang/en-us/fenxiao/withdraw_list.js new file mode 100644 index 0000000..a8bb884 --- /dev/null +++ b/lang/en-us/fenxiao/withdraw_list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: 'Withdrawal Records' + title: '' +} \ No newline at end of file diff --git a/lang/en-us/game/cards.js b/lang/en-us/game/cards.js new file mode 100644 index 0000000..c55e6ba --- /dev/null +++ b/lang/en-us/game/cards.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Scratch Card' +} \ No newline at end of file diff --git a/lang/en-us/game/record.js b/lang/en-us/game/record.js new file mode 100644 index 0000000..6897f64 --- /dev/null +++ b/lang/en-us/game/record.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Winning Records' +} \ No newline at end of file diff --git a/lang/en-us/game/smash_eggs.js b/lang/en-us/game/smash_eggs.js new file mode 100644 index 0000000..3f127d0 --- /dev/null +++ b/lang/en-us/game/smash_eggs.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Smash Golden Eggs' +} \ No newline at end of file diff --git a/lang/en-us/game/turntable.js b/lang/en-us/game/turntable.js new file mode 100644 index 0000000..fecc1a0 --- /dev/null +++ b/lang/en-us/game/turntable.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Turntable' +} \ No newline at end of file diff --git a/lang/en-us/goods/brand.js b/lang/en-us/goods/brand.js new file mode 100644 index 0000000..be4dcee --- /dev/null +++ b/lang/en-us/goods/brand.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Brand Zone' +} \ No newline at end of file diff --git a/lang/en-us/goods/cart.js b/lang/en-us/goods/cart.js new file mode 100644 index 0000000..273691d --- /dev/null +++ b/lang/en-us/goods/cart.js @@ -0,0 +1,13 @@ +export const lang = { + //title为每个页面的标题 + title: 'Shopping Cart', + complete: 'Complete', + edit: 'Manage', + allElection: 'Select All', + total: 'Total', + settlement: 'Checkout', + emptyTips: 'No products yet', + goForStroll: 'Go shopping', + del: 'Delete', + login: 'Go to login' +} \ No newline at end of file diff --git a/lang/en-us/goods/category.js b/lang/en-us/goods/category.js new file mode 100644 index 0000000..248b48b --- /dev/null +++ b/lang/en-us/goods/category.js @@ -0,0 +1,6 @@ +export const lang = { + //title为每个页面的标题 + title: 'Goods Category', + search: 'Search', + seeMore : 'See More' +} diff --git a/lang/en-us/goods/consult.js b/lang/en-us/goods/consult.js new file mode 100644 index 0000000..1cbda06 --- /dev/null +++ b/lang/en-us/goods/consult.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Product Consultation' +} \ No newline at end of file diff --git a/lang/en-us/goods/consult_edit.js b/lang/en-us/goods/consult_edit.js new file mode 100644 index 0000000..bcc9f83 --- /dev/null +++ b/lang/en-us/goods/consult_edit.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'I Want to Consult' +} \ No newline at end of file diff --git a/lang/en-us/goods/coupon.js b/lang/en-us/goods/coupon.js new file mode 100644 index 0000000..5065578 --- /dev/null +++ b/lang/en-us/goods/coupon.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Coupon Collection' +} \ No newline at end of file diff --git a/lang/en-us/goods/coupon_receive.js b/lang/en-us/goods/coupon_receive.js new file mode 100644 index 0000000..0595c45 --- /dev/null +++ b/lang/en-us/goods/coupon_receive.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Receive Coupon' +} \ No newline at end of file diff --git a/lang/en-us/goods/detail.js b/lang/en-us/goods/detail.js new file mode 100644 index 0000000..04b1f4d --- /dev/null +++ b/lang/en-us/goods/detail.js @@ -0,0 +1,38 @@ +export const lang = { + //title为每个页面的标题 + title: 'Product Details', + details:'Details', + document:'Document', + home:'Home', + cart:'Cart', + + leave:'leave a message', + make:'make an appointment', + makebtn:'make', + + sales:'sales', + stock:'stock', + send:'send', + express:'Express Delivery', + commission:'Commission Details', + + express:'Express Delivery', + addcart:'Add Cart', + buynow:'Buy Now', + status:'Goods Off', + sellout:'Sell Out', + max:'Maximum', + + + select: 'Select', + params: 'Parameters', + service: 'Product Service', + allGoods: 'All Products', + image: 'Image', + video: 'Video', + + kefu:'Contact', + follow:'Follow', + + spec:'Spec' +} diff --git a/lang/en-us/goods/evaluate.js b/lang/en-us/goods/evaluate.js new file mode 100644 index 0000000..f3f6e2b --- /dev/null +++ b/lang/en-us/goods/evaluate.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Product Reviews' +} \ No newline at end of file diff --git a/lang/en-us/goods/list.js b/lang/en-us/goods/list.js new file mode 100644 index 0000000..cb1fbb1 --- /dev/null +++ b/lang/en-us/goods/list.js @@ -0,0 +1,11 @@ +export const lang = { + //title为每个页面的标题 + title: 'Product List', + Random:'Comprehensive', + Sales:'Sales', + Price:'Price', + Filter:'Filter', + Search:'Please enter the product you want to search', + Make:'Consult', + +} \ No newline at end of file diff --git a/lang/en-us/goods/not_exist.js b/lang/en-us/goods/not_exist.js new file mode 100644 index 0000000..3f2b35f --- /dev/null +++ b/lang/en-us/goods/not_exist.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Product Not Found', +} \ No newline at end of file diff --git a/lang/en-us/goods/point.js b/lang/en-us/goods/point.js new file mode 100644 index 0000000..6683d8b --- /dev/null +++ b/lang/en-us/goods/point.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Points Center' +} \ No newline at end of file diff --git a/lang/en-us/goods/search.js b/lang/en-us/goods/search.js new file mode 100644 index 0000000..2c42a12 --- /dev/null +++ b/lang/en-us/goods/search.js @@ -0,0 +1,9 @@ +export const lang = { + //title为每个页面的标题 + title: 'Search', + history: 'Search History', + hot: 'Hot Search', + find: 'Search Discovery', + hidefind: 'Current search discovery is hidden', + inputPlaceholder: 'Search products' +} \ No newline at end of file diff --git a/lang/en-us/groupbuy/detail.js b/lang/en-us/groupbuy/detail.js new file mode 100644 index 0000000..28c8a91 --- /dev/null +++ b/lang/en-us/groupbuy/detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: 'Select', + params: 'Parameters', + service: 'Product Service', + allGoods: 'All Products', + image: 'Image', + video: 'Video' +} \ No newline at end of file diff --git a/lang/en-us/groupbuy/list.js b/lang/en-us/groupbuy/list.js new file mode 100644 index 0000000..fec80b7 --- /dev/null +++ b/lang/en-us/groupbuy/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Group Buy Zone' +} \ No newline at end of file diff --git a/lang/en-us/groupbuy/payment.js b/lang/en-us/groupbuy/payment.js new file mode 100644 index 0000000..1572d25 --- /dev/null +++ b/lang/en-us/groupbuy/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Pending Payment Orders' +} \ No newline at end of file diff --git a/lang/en-us/help/detail.js b/lang/en-us/help/detail.js new file mode 100644 index 0000000..ed24d71 --- /dev/null +++ b/lang/en-us/help/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Help Detail' +} \ No newline at end of file diff --git a/lang/en-us/help/list.js b/lang/en-us/help/list.js new file mode 100644 index 0000000..92132ab --- /dev/null +++ b/lang/en-us/help/list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: 'Help Center', + emptyText: 'No help information available' +} \ No newline at end of file diff --git a/lang/en-us/hongbao/list.js b/lang/en-us/hongbao/list.js new file mode 100644 index 0000000..aad3396 --- /dev/null +++ b/lang/en-us/hongbao/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Red Envelopes List' +} \ No newline at end of file diff --git a/lang/en-us/hongbao/my_hongbao.js b/lang/en-us/hongbao/my_hongbao.js new file mode 100644 index 0000000..cac0aa0 --- /dev/null +++ b/lang/en-us/hongbao/my_hongbao.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Red Envelopes' +} \ No newline at end of file diff --git a/lang/en-us/index/index.js b/lang/en-us/index/index.js new file mode 100644 index 0000000..c1a15a9 --- /dev/null +++ b/lang/en-us/index/index.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Home', +} \ No newline at end of file diff --git a/lang/en-us/live/list.js b/lang/en-us/live/list.js new file mode 100644 index 0000000..b4e990c --- /dev/null +++ b/lang/en-us/live/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Live Streaming', +} \ No newline at end of file diff --git a/lang/en-us/login/find.js b/lang/en-us/login/find.js new file mode 100644 index 0000000..3cad034 --- /dev/null +++ b/lang/en-us/login/find.js @@ -0,0 +1,12 @@ +export const lang = { + //title为每个页面的标题 + title: 'Find Password', + findPassword: 'Find Password', + accountPlaceholder: 'Please enter mobile number', + captchaPlaceholder: 'Please enter verification code', + dynacodePlaceholder: 'Please enter dynamic code', + passwordPlaceholder: 'Please enter new password', + rePasswordPlaceholder: 'Please confirm new password', + next: 'Next', + save: 'Confirm Modification' +} \ No newline at end of file diff --git a/lang/en-us/login/login.js b/lang/en-us/login/login.js new file mode 100644 index 0000000..09c44cd --- /dev/null +++ b/lang/en-us/login/login.js @@ -0,0 +1,38 @@ +export const lang = { + //title为每个页面的标题 + title: 'Login', + mobileLogin: 'Mobile Login', + accountLogin: 'Account Login', + autoLogin: 'One-Click Authorization Login', + login: 'Login', + mobilePlaceholder: 'Mobile login is only for mainland China users', + dynacodePlaceholder: 'Please enter dynamic code', + captchaPlaceholder: 'Please enter verification code', + accountPlaceholder: 'Please enter account', + passwordPlaceholder: 'Please enter password', + rePasswordPlaceholder: 'Please confirm password', + forgetPassword: 'Forgot password', + register: 'Register', + registerTips: 'Users without an account', + registerTips1: 'register', + registerTips2: 'now', + newUserRegister: 'New User Registration', + // login.vue page new translation items + welcomeText: 'Hello,
Welcome to use', + getDynacode: 'Get Dynamic Code', + mobileInputPlaceholder: 'Please enter your mobile phone number', + accountInputPlaceholder: 'Please enter account', + passwordInputPlaceholder: 'Please enter password', + forgetPasswordText: 'Forgot password?', + dynacodeInputPlaceholder: 'Please enter dynamic code', + loginButtonText: 'Login', + registerAgreementText: 'If you are not registered, you will be automatically registered after login. Registration means you agree to', + privacyPolicyText: '《Privacy Policy》', + userServiceAgreementText: '《User Service Agreement》', + agreeAgreementTip: 'Please read and agree to the agreement first', + loginSuccessTip: 'Login successful', + enterMobileTip: 'Please enter mobile phone number', + enterCorrectMobileTip: 'Please enter correct mobile phone number', + enterCaptchaTip: 'Please enter verification code', + requestFailTip: 'request:fail' +} \ No newline at end of file diff --git a/lang/en-us/login/register.js b/lang/en-us/login/register.js new file mode 100644 index 0000000..abd15f0 --- /dev/null +++ b/lang/en-us/login/register.js @@ -0,0 +1,17 @@ +export const lang = { + //title为每个页面的标题 + title: 'Register', + mobileRegister: 'Mobile Registration', + accountRegister: 'Account Registration', + mobilePlaceholder: 'Mobile login is only for mainland China users', + dynacodePlaceholder: 'Please enter dynamic code', + captchaPlaceholder: 'Please enter verification code', + accountPlaceholder: 'Please enter username', + passwordPlaceholder: 'Please enter password', + rePasswordPlaceholder: 'Please confirm password', + completeRegister: 'Complete registration and login', + registerTips: 'By clicking register, you agree to the', + registerAgreement: 'Registration Agreement', + next: 'Next', + save: 'Save' +} \ No newline at end of file diff --git a/lang/en-us/member/account.js b/lang/en-us/member/account.js new file mode 100644 index 0000000..75dad35 --- /dev/null +++ b/lang/en-us/member/account.js @@ -0,0 +1,13 @@ +export const lang = { + //title为每个页面的标题 + title: 'Account List', + name: 'Name', + accountType: 'Account Type', + mobilePhone: 'Mobile Number', + withdrawalAccount: 'Withdrawal Account', + bankInfo: 'Branch Information', + newAddAccount: 'Add New Account', + del: 'Delete', + update: 'Modify', + emptyText: 'No accounts available' +} \ No newline at end of file diff --git a/lang/en-us/member/account_edit.js b/lang/en-us/member/account_edit.js new file mode 100644 index 0000000..06b0075 --- /dev/null +++ b/lang/en-us/member/account_edit.js @@ -0,0 +1,14 @@ +export const lang = { + //title为每个页面的标题 + title: 'Edit Account', + name: 'Name', + namePlaceholder: 'Please enter real name', + mobilePhone: 'Mobile Number', + mobilePhonePlaceholder: 'Please enter mobile number', + accountType: 'Account Type', + bankInfo: 'Branch Information', + bankInfoPlaceholder: 'Please enter branch information', + withdrawalAccount: 'Withdrawal Account', + withdrawalAccountPlaceholder: 'Please enter withdrawal account', + save: 'Save' +} \ No newline at end of file diff --git a/lang/en-us/member/address.js b/lang/en-us/member/address.js new file mode 100644 index 0000000..7fedc77 --- /dev/null +++ b/lang/en-us/member/address.js @@ -0,0 +1,9 @@ +export const lang = { + //title为每个页面的标题 + title: 'Shipping Address', + newAddAddress: 'Add Shipping Address', + getAddress: 'Get Address with One Click', + is_default: 'Default', + modify: 'Edit', + del: 'Delete' +} \ No newline at end of file diff --git a/lang/en-us/member/address_edit.js b/lang/en-us/member/address_edit.js new file mode 100644 index 0000000..d296615 --- /dev/null +++ b/lang/en-us/member/address_edit.js @@ -0,0 +1,14 @@ +export const lang = { + //title为每个页面的标题 + title: 'Edit Shipping Address', + consignee: 'Name', + consigneePlaceholder: 'Consignee Name', + mobile: 'Mobile', + mobilePlaceholder: 'Consignee Mobile Number', + telephone: 'Phone', + telephonePlaceholder: 'Consignee Fixed Phone (Optional)', + receivingCity: 'Region', + address: 'Detailed Address', + addressPlaceholder: 'Community, Street, Office Building', + save: 'Save' +} \ No newline at end of file diff --git a/lang/en-us/member/apply_withdrawal.js b/lang/en-us/member/apply_withdrawal.js new file mode 100644 index 0000000..d3a3633 --- /dev/null +++ b/lang/en-us/member/apply_withdrawal.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Apply for Withdrawal' +} \ No newline at end of file diff --git a/lang/en-us/member/assets.js b/lang/en-us/member/assets.js new file mode 100644 index 0000000..605a8db --- /dev/null +++ b/lang/en-us/member/assets.js @@ -0,0 +1,3 @@ +export const lang = { + title: 'Account Cancellation', +} \ No newline at end of file diff --git a/lang/en-us/member/balance.js b/lang/en-us/member/balance.js new file mode 100644 index 0000000..350c22f --- /dev/null +++ b/lang/en-us/member/balance.js @@ -0,0 +1,13 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Balance', + accountBalance: 'Account Balance ', + money:' (Yuan)', + recharge: 'Recharge', + withdrawal: 'Withdraw', + balanceDetailed: 'Balance Details', + emptyTips: 'No balance records', + rechargeRecord:'Recharge Records', + ableAccountBalance:'Cash Balance ', + noAccountBalance:'Stored Value Balance ', +} \ No newline at end of file diff --git a/lang/en-us/member/balance_detail.js b/lang/en-us/member/balance_detail.js new file mode 100644 index 0000000..4f55314 --- /dev/null +++ b/lang/en-us/member/balance_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Balance Details' +} \ No newline at end of file diff --git a/lang/en-us/member/cancellation.js b/lang/en-us/member/cancellation.js new file mode 100644 index 0000000..605a8db --- /dev/null +++ b/lang/en-us/member/cancellation.js @@ -0,0 +1,3 @@ +export const lang = { + title: 'Account Cancellation', +} \ No newline at end of file diff --git a/lang/en-us/member/cancelrefuse.js b/lang/en-us/member/cancelrefuse.js new file mode 100644 index 0000000..605a8db --- /dev/null +++ b/lang/en-us/member/cancelrefuse.js @@ -0,0 +1,3 @@ +export const lang = { + title: 'Account Cancellation', +} \ No newline at end of file diff --git a/lang/en-us/member/cancelstatus.js b/lang/en-us/member/cancelstatus.js new file mode 100644 index 0000000..605a8db --- /dev/null +++ b/lang/en-us/member/cancelstatus.js @@ -0,0 +1,3 @@ +export const lang = { + title: 'Account Cancellation', +} \ No newline at end of file diff --git a/lang/en-us/member/cancelsuccess.js b/lang/en-us/member/cancelsuccess.js new file mode 100644 index 0000000..605a8db --- /dev/null +++ b/lang/en-us/member/cancelsuccess.js @@ -0,0 +1,3 @@ +export const lang = { + title: 'Account Cancellation', +} \ No newline at end of file diff --git a/lang/en-us/member/card.js b/lang/en-us/member/card.js new file mode 100644 index 0000000..3234b08 --- /dev/null +++ b/lang/en-us/member/card.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Membership Card' +} \ No newline at end of file diff --git a/lang/en-us/member/card_buy.js b/lang/en-us/member/card_buy.js new file mode 100644 index 0000000..3234b08 --- /dev/null +++ b/lang/en-us/member/card_buy.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Membership Card' +} \ No newline at end of file diff --git a/lang/en-us/member/collection.js b/lang/en-us/member/collection.js new file mode 100644 index 0000000..feaf7c6 --- /dev/null +++ b/lang/en-us/member/collection.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Favorites' +} \ No newline at end of file diff --git a/lang/en-us/member/contact.js b/lang/en-us/member/contact.js new file mode 100644 index 0000000..d892902 --- /dev/null +++ b/lang/en-us/member/contact.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Customer Service', +} \ No newline at end of file diff --git a/lang/en-us/member/coupon.js b/lang/en-us/member/coupon.js new file mode 100644 index 0000000..d6584be --- /dev/null +++ b/lang/en-us/member/coupon.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Coupons' +} \ No newline at end of file diff --git a/lang/en-us/member/footprint.js b/lang/en-us/member/footprint.js new file mode 100644 index 0000000..19a2733 --- /dev/null +++ b/lang/en-us/member/footprint.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Browsing History', + emptyTpis: 'You haven\'t browsed any products yet!' +} \ No newline at end of file diff --git a/lang/en-us/member/gift.js b/lang/en-us/member/gift.js new file mode 100644 index 0000000..48692d2 --- /dev/null +++ b/lang/en-us/member/gift.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Gifts', + emptyTips: 'No gifts available' +} \ No newline at end of file diff --git a/lang/en-us/member/gift_detail.js b/lang/en-us/member/gift_detail.js new file mode 100644 index 0000000..251fe46 --- /dev/null +++ b/lang/en-us/member/gift_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Gift Order', +} \ No newline at end of file diff --git a/lang/en-us/member/index.js b/lang/en-us/member/index.js new file mode 100644 index 0000000..ef03491 --- /dev/null +++ b/lang/en-us/member/index.js @@ -0,0 +1,60 @@ +export const lang = { + //title为每个页面的标题 + title: 'Member Center', + login: 'Login', + loginTpis: 'Login experience', + memberLevel: 'Member Level', + moreAuthority: 'More Privileges', + allOrders: 'All Orders', + seeAllOrders: 'View All Orders', + waitPay: 'Pending Payment', + readyDelivery: 'Pending Shipment', + waitDelivery: 'Pending Receipt', + refunding: 'Refunding', + // 会员中心入口 + sign: 'Check-in', + personInfo: 'Personal Information', + receivingAddress: 'Shipping Address', + accountList: 'Account List', + couponList: 'Coupon List', + mySpellList: 'My Group Orders', + myBargain: 'My Bargains', + virtualCode: 'Virtual Code', + winningRecord: 'My Gifts', + myCollection: 'My Favorites', + myTracks: 'My Browsing History', + pintuanOrder: 'Group Purchase Orders', + yushouOrder: 'Pre-sale Orders', + verification: 'Verification Desk', + message: 'My Messages', + exchangeOrder: 'Points Exchange', + // 推广中心 + balance: 'Balance', + point: 'Point', + coupon: 'Coupon', + memberRecommend: 'Invite Rewards', + myPresale: 'My Pre-sales', + myGiftcard: 'My Gift Cards', + myDivideticket: 'My Dividend Tickets', + myRebate: 'Group Rebate', + myHongbao: 'My Red Envelopes', + myBlindBox: 'My Blind Boxes', + + waitpay: 'Waitpay', + waitsend: 'Waitsend', + waitconfirm: 'Waitconfirm', + activist: 'Activist', + completed: 'Completed', + + // 账户操作 + logout: 'Logout', + cancellation: 'Account Cancellation', + logoutTitle: 'Tips', + logoutContent: 'Are you sure you want to log out', + cancellationTitle: 'Risk Warning', + cancellationContent: 'Are you sure you want to cancel your current account?', + + // 协议 + privacyPolicy: 'Privacy Policy', + registrationAgreement: 'Registration Agreement', +} diff --git a/lang/en-us/member/info.js b/lang/en-us/member/info.js new file mode 100644 index 0000000..b37e91c --- /dev/null +++ b/lang/en-us/member/info.js @@ -0,0 +1,56 @@ +export const lang = { + //title为每个页面的标题 + title: 'Profile', + headImg: 'Avatar', + account: 'Account', + nickname: 'Nickname', + realName: 'Real Name', + sex: 'Gender', + birthday: 'Birthday', + password: 'Password', + paypassword: 'Payment Password', + mobilePhone: 'Mobile Phone', + bindMobile: 'Bind Mobile', + cancellation: 'Cancel Account', + lang: "Language", + logout: 'Logout', + save: "Save", + noset: 'Not Set', + + nickPlaceholder: "Please enter a new nickname", + pleaseRealName:"Please enter your real name", + + nowPassword: "Current Password", + newPassword: "New Password", + confirmPassword: "Confirm New Password", + + phoneNumber: "Phone Number", + + confirmCode: "Verification Code", + confirmCodeInput: "Please enter verification code", + confirmCodeInputerror: "Invalid verification code", + findanimateCode: "Get Dynamic Code", + animateCode: "Dynamic Code", + animateCodeInput: "Please enter dynamic code", + + modifyNickname: "Modify Nickname", + modifyPassword: "Modify Password", + bindPhone: "Bind Phone", + + alikeNickname: "Same as original nickname, no need to modify", + noEmityNickname: "Nickname cannot be empty", + + updateSuccess: "Update Successful", + + pleaseInputOldPassword: "Please enter original password", + pleaseInputNewPassword: "Please enter new password", + passwordLength: "Password must be at least 6 characters long", + alikePassword: "Passwords do not match", + + samePassword: "New password cannot be the same as current password", + + surePhoneNumber: "Please enter a valid phone number", + + alikePhone: "Same as original phone number, no need to modify", + modify: 'Modify' +} \ No newline at end of file diff --git a/lang/en-us/member/info_edit.js b/lang/en-us/member/info_edit.js new file mode 100644 index 0000000..ab59965 --- /dev/null +++ b/lang/en-us/member/info_edit.js @@ -0,0 +1,61 @@ +export const lang = { + //title为每个页面的标题 + title: 'Edit Profile', + headImg: 'Avatar', + account: 'Account', + username: 'Username', + nickname: 'Nickname', + realName: 'Real Name', + sex: 'Gender', + birthday: 'Birthday', + password: 'Password', + paypassword: 'Payment Password', + mobilePhone: 'Mobile Phone', + bindMobile: 'Bind Mobile', + cancellation: 'Cancel Account', + lang: "Language", + logout: 'Logout', + save: "Save", + noset: 'Not Set', + + usernamePlaceholder: "Please enter a new username", + nickPlaceholder: "Please enter a new nickname", + pleaseRealName:"Please enter your real name", + + nowPassword: "Current Password", + newPassword: "New Password", + confirmPassword: "Confirm New Password", + + phoneNumber: "Phone Number", + + confirmCode: "Verification Code", + confirmCodeInput: "Please enter verification code", + confirmCodeInputerror: "Invalid verification code", + findanimateCode: "Get Dynamic Code", + animateCode: "Dynamic Code", + animateCodeInput: "Please enter dynamic code", + + modifyNickname: "Modify Nickname", + modifyPassword: "Modify Password", + bindPhone: "Bind Phone", + + alikeusername: "Same as original username, no need to modify", + noEmityUsername: "Username cannot be empty", + + alikeNickname: "Same as original nickname, no need to modify", + noEmityNickname: "Nickname cannot be empty", + + updateSuccess: "Update Successful", + + pleaseInputOldPassword: "Please enter original password", + pleaseInputNewPassword: "Please enter new password", + passwordLength: "Password must be at least 6 characters long", + alikePassword: "Passwords do not match", + + samePassword: "New password cannot be the same as current password", + + surePhoneNumber: "Please enter a valid phone number", + + alikePhone: "Same as original phone number, no need to modify", + modify: 'Modify' +} \ No newline at end of file diff --git a/lang/en-us/member/invite_friends.js b/lang/en-us/member/invite_friends.js new file mode 100644 index 0000000..a5d534b --- /dev/null +++ b/lang/en-us/member/invite_friends.js @@ -0,0 +1,3 @@ +export const lang = { + title: 'Invite Friends', +} \ No newline at end of file diff --git a/lang/en-us/member/level.js b/lang/en-us/member/level.js new file mode 100644 index 0000000..158c1c2 --- /dev/null +++ b/lang/en-us/member/level.js @@ -0,0 +1,17 @@ +export const lang = { + //title为每个页面的标题 + title: 'Member Level', + defaultLevelTips: 'You are already the highest level member!', + tag: 'Exclusive Tag', + tagDesc: 'Tag Expert', + discount: 'Exclusive Discount', + discountDesc: 'Exclusive {0}% Off', + service: 'Premium Service', + serviceDesc: '360-degree comprehensive', + memberLevel: 'Member Level', + condition: 'Condition', + equity: 'Benefits', + giftPackage: 'Upgrade Gift Pack', + levelExplain: 'Level Explanation', + upgradeTips: 'Upgrade membership to enjoy exclusive benefits' +} \ No newline at end of file diff --git a/lang/en-us/member/message.js b/lang/en-us/member/message.js new file mode 100644 index 0000000..b882e55 --- /dev/null +++ b/lang/en-us/member/message.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Messages' +} \ No newline at end of file diff --git a/lang/en-us/member/modify_face.js b/lang/en-us/member/modify_face.js new file mode 100644 index 0000000..cdca09b --- /dev/null +++ b/lang/en-us/member/modify_face.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Modify Avatar' +} \ No newline at end of file diff --git a/lang/en-us/member/pay_password.js b/lang/en-us/member/pay_password.js new file mode 100644 index 0000000..8d07b67 --- /dev/null +++ b/lang/en-us/member/pay_password.js @@ -0,0 +1,3 @@ +export const lang = { + title: 'Payment Password', +} \ No newline at end of file diff --git a/lang/en-us/member/point.js b/lang/en-us/member/point.js new file mode 100644 index 0000000..095789e --- /dev/null +++ b/lang/en-us/member/point.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Points' +} \ No newline at end of file diff --git a/lang/en-us/member/point_detail.js b/lang/en-us/member/point_detail.js new file mode 100644 index 0000000..a25ef2a --- /dev/null +++ b/lang/en-us/member/point_detail.js @@ -0,0 +1,6 @@ +export const lang = { + //title为每个页面的标题 + title: 'Points Details', + emptyTpis: 'You don\'t have any points records yet!', + pointExplain: 'Points Explanation' +} \ No newline at end of file diff --git a/lang/en-us/member/signin.js b/lang/en-us/member/signin.js new file mode 100644 index 0000000..44e5a15 --- /dev/null +++ b/lang/en-us/member/signin.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Check-in Rewards' +} \ No newline at end of file diff --git a/lang/en-us/member/withdrawal.js b/lang/en-us/member/withdrawal.js new file mode 100644 index 0000000..f4d7936 --- /dev/null +++ b/lang/en-us/member/withdrawal.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Withdrawal Records' +} \ No newline at end of file diff --git a/lang/en-us/member/withdrawal_detail.js b/lang/en-us/member/withdrawal_detail.js new file mode 100644 index 0000000..1706d49 --- /dev/null +++ b/lang/en-us/member/withdrawal_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Withdrawal Details' +} \ No newline at end of file diff --git a/lang/en-us/notice/detail.js b/lang/en-us/notice/detail.js new file mode 100644 index 0000000..3ac62a0 --- /dev/null +++ b/lang/en-us/notice/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Notice Detail' +} \ No newline at end of file diff --git a/lang/en-us/notice/list.js b/lang/en-us/notice/list.js new file mode 100644 index 0000000..980d2c9 --- /dev/null +++ b/lang/en-us/notice/list.js @@ -0,0 +1,6 @@ +export const lang = { + //title为每个页面的标题 + title: 'Notice List', + emptyText:"No more information available", + contentTitle:'Upgrade Notice' +} \ No newline at end of file diff --git a/lang/en-us/order/activist.js b/lang/en-us/order/activist.js new file mode 100644 index 0000000..8383e2e --- /dev/null +++ b/lang/en-us/order/activist.js @@ -0,0 +1,6 @@ +export const lang = { + //title为每个页面的标题 + title: 'Refund', + checkDetail: 'View Details', + emptyTips: 'No refund records' +} \ No newline at end of file diff --git a/lang/en-us/order/detail.js b/lang/en-us/order/detail.js new file mode 100644 index 0000000..0d8984e --- /dev/null +++ b/lang/en-us/order/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Order Details' +} \ No newline at end of file diff --git a/lang/en-us/order/detail_local_delivery.js b/lang/en-us/order/detail_local_delivery.js new file mode 100644 index 0000000..0d8984e --- /dev/null +++ b/lang/en-us/order/detail_local_delivery.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Order Details' +} \ No newline at end of file diff --git a/lang/en-us/order/detail_pickup.js b/lang/en-us/order/detail_pickup.js new file mode 100644 index 0000000..0d8984e --- /dev/null +++ b/lang/en-us/order/detail_pickup.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Order Details' +} \ No newline at end of file diff --git a/lang/en-us/order/detail_point.js b/lang/en-us/order/detail_point.js new file mode 100644 index 0000000..0d8984e --- /dev/null +++ b/lang/en-us/order/detail_point.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Order Details' +} \ No newline at end of file diff --git a/lang/en-us/order/detail_virtual.js b/lang/en-us/order/detail_virtual.js new file mode 100644 index 0000000..0d8984e --- /dev/null +++ b/lang/en-us/order/detail_virtual.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Order Details' +} \ No newline at end of file diff --git a/lang/en-us/order/evaluate.js b/lang/en-us/order/evaluate.js new file mode 100644 index 0000000..160c6f4 --- /dev/null +++ b/lang/en-us/order/evaluate.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Write a Review' +} \ No newline at end of file diff --git a/lang/en-us/order/list.js b/lang/en-us/order/list.js new file mode 100644 index 0000000..26d9ced --- /dev/null +++ b/lang/en-us/order/list.js @@ -0,0 +1,13 @@ +export const lang = { + //title为每个页面的标题 + title: 'Order List', + emptyTips: 'No related orders', + all: 'All', + waitPay: 'Pending Payment', + readyDelivery: 'Pending Shipment', + waitDelivery: 'Pending Receipt', + waitEvaluate: 'Pending Review', + waitUse: 'Pending Use', + update: "Release to refresh", + updateIng: "Loading..." +} \ No newline at end of file diff --git a/lang/en-us/order/logistics.js b/lang/en-us/order/logistics.js new file mode 100644 index 0000000..d5a78de --- /dev/null +++ b/lang/en-us/order/logistics.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Logistics Information' +} \ No newline at end of file diff --git a/lang/en-us/order/payment.js b/lang/en-us/order/payment.js new file mode 100644 index 0000000..aec078a --- /dev/null +++ b/lang/en-us/order/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Pending Payment Order' +} \ No newline at end of file diff --git a/lang/en-us/order/refund.js b/lang/en-us/order/refund.js new file mode 100644 index 0000000..4e5e27f --- /dev/null +++ b/lang/en-us/order/refund.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Apply for Refund', +} \ No newline at end of file diff --git a/lang/en-us/order/refund_batch.js b/lang/en-us/order/refund_batch.js new file mode 100644 index 0000000..4e5e27f --- /dev/null +++ b/lang/en-us/order/refund_batch.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Apply for Refund', +} \ No newline at end of file diff --git a/lang/en-us/order/refund_detail.js b/lang/en-us/order/refund_detail.js new file mode 100644 index 0000000..f8f8844 --- /dev/null +++ b/lang/en-us/order/refund_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Refund Details', +} \ No newline at end of file diff --git a/lang/en-us/pay/index.js b/lang/en-us/pay/index.js new file mode 100644 index 0000000..d0f6ed0 --- /dev/null +++ b/lang/en-us/pay/index.js @@ -0,0 +1,7 @@ +export const lang = { + //title为每个页面的标题 + title: 'Payment Method', + paymentAmount: 'Payment Amount', + confirmPayment: 'Confirm Payment', + seeOrder: 'View Order' +} \ No newline at end of file diff --git a/lang/en-us/pay/result.js b/lang/en-us/pay/result.js new file mode 100644 index 0000000..4ec2575 --- /dev/null +++ b/lang/en-us/pay/result.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: 'Payment Result', + paymentSuccess: 'Payment Successful', + paymentFail: 'Payment Failed', + goHome: 'Back to Home', + memberCenter: 'Member Center', + payMoney: 'Payment Amount', + unit: 'Yuan' +} \ No newline at end of file diff --git a/lang/en-us/pintuan/detail.js b/lang/en-us/pintuan/detail.js new file mode 100644 index 0000000..c8bf3f1 --- /dev/null +++ b/lang/en-us/pintuan/detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: 'Select', + params: 'Parameters', + service: 'Product Services', + allGoods: 'All Products', + image: 'Image', + video: 'Video' +} \ No newline at end of file diff --git a/lang/en-us/pintuan/list.js b/lang/en-us/pintuan/list.js new file mode 100644 index 0000000..504dc54 --- /dev/null +++ b/lang/en-us/pintuan/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Group Buying Zone' +} \ No newline at end of file diff --git a/lang/en-us/pintuan/my_spell.js b/lang/en-us/pintuan/my_spell.js new file mode 100644 index 0000000..1470b28 --- /dev/null +++ b/lang/en-us/pintuan/my_spell.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Group Orders' +} \ No newline at end of file diff --git a/lang/en-us/pintuan/payment.js b/lang/en-us/pintuan/payment.js new file mode 100644 index 0000000..1572d25 --- /dev/null +++ b/lang/en-us/pintuan/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Pending Payment Orders' +} \ No newline at end of file diff --git a/lang/en-us/pintuan/share.js b/lang/en-us/pintuan/share.js new file mode 100644 index 0000000..431d7a2 --- /dev/null +++ b/lang/en-us/pintuan/share.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Group Buy Sharing' +} \ No newline at end of file diff --git a/lang/en-us/point/detail.js b/lang/en-us/point/detail.js new file mode 100644 index 0000000..bca1748 --- /dev/null +++ b/lang/en-us/point/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Exchange' +} \ No newline at end of file diff --git a/lang/en-us/point/goods_detail.js b/lang/en-us/point/goods_detail.js new file mode 100644 index 0000000..a2b30e1 --- /dev/null +++ b/lang/en-us/point/goods_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + // title: 'Exchange' +} \ No newline at end of file diff --git a/lang/en-us/point/list.js b/lang/en-us/point/list.js new file mode 100644 index 0000000..7915f01 --- /dev/null +++ b/lang/en-us/point/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Point Mall' +} \ No newline at end of file diff --git a/lang/en-us/point/order_detail.js b/lang/en-us/point/order_detail.js new file mode 100644 index 0000000..7b4f199 --- /dev/null +++ b/lang/en-us/point/order_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Points Exchange Order Details' +} \ No newline at end of file diff --git a/lang/en-us/point/order_list.js b/lang/en-us/point/order_list.js new file mode 100644 index 0000000..b234764 --- /dev/null +++ b/lang/en-us/point/order_list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: 'Points Exchange', + emptyTips: 'No more data available' +} \ No newline at end of file diff --git a/lang/en-us/point/payment.js b/lang/en-us/point/payment.js new file mode 100644 index 0000000..1572d25 --- /dev/null +++ b/lang/en-us/point/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Pending Payment Orders' +} \ No newline at end of file diff --git a/lang/en-us/point/result.js b/lang/en-us/point/result.js new file mode 100644 index 0000000..ae1ed24 --- /dev/null +++ b/lang/en-us/point/result.js @@ -0,0 +1,7 @@ +export const lang = { + //title为每个页面的标题 + title: 'Exchange Result', + exchangeSuccess: 'Exchange Successful', + see: 'View Exchange History', + goHome: 'Go to Home' +} \ No newline at end of file diff --git a/lang/en-us/presale/detail.js b/lang/en-us/presale/detail.js new file mode 100644 index 0000000..28c8a91 --- /dev/null +++ b/lang/en-us/presale/detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: 'Select', + params: 'Parameters', + service: 'Product Service', + allGoods: 'All Products', + image: 'Image', + video: 'Video' +} \ No newline at end of file diff --git a/lang/en-us/presale/list.js b/lang/en-us/presale/list.js new file mode 100644 index 0000000..bdcabe3 --- /dev/null +++ b/lang/en-us/presale/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Presale Zone' +} \ No newline at end of file diff --git a/lang/en-us/presale/order_detail.js b/lang/en-us/presale/order_detail.js new file mode 100644 index 0000000..0d8984e --- /dev/null +++ b/lang/en-us/presale/order_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Order Details' +} \ No newline at end of file diff --git a/lang/en-us/presale/order_list.js b/lang/en-us/presale/order_list.js new file mode 100644 index 0000000..b7e5541 --- /dev/null +++ b/lang/en-us/presale/order_list.js @@ -0,0 +1,7 @@ +export const lang = { + //title为每个页面的标题 + title: 'My Presales', + emptyTips: 'No presale orders available', + update: "Release to refresh", + updateIng: "Loading..." +} \ No newline at end of file diff --git a/lang/en-us/presale/payment.js b/lang/en-us/presale/payment.js new file mode 100644 index 0000000..1572d25 --- /dev/null +++ b/lang/en-us/presale/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Pending Payment Orders' +} \ No newline at end of file diff --git a/lang/en-us/recharge/detail.js b/lang/en-us/recharge/detail.js new file mode 100644 index 0000000..d44ebbd --- /dev/null +++ b/lang/en-us/recharge/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Recharge Details' +} \ No newline at end of file diff --git a/lang/en-us/recharge/list.js b/lang/en-us/recharge/list.js new file mode 100644 index 0000000..bf3d63c --- /dev/null +++ b/lang/en-us/recharge/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Recharge List' +} \ No newline at end of file diff --git a/lang/en-us/recharge/order_list.js b/lang/en-us/recharge/order_list.js new file mode 100644 index 0000000..8fbebae --- /dev/null +++ b/lang/en-us/recharge/order_list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Recharge Records', +} \ No newline at end of file diff --git a/lang/en-us/seckill/detail.js b/lang/en-us/seckill/detail.js new file mode 100644 index 0000000..28c8a91 --- /dev/null +++ b/lang/en-us/seckill/detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: 'Select', + params: 'Parameters', + service: 'Product Service', + allGoods: 'All Products', + image: 'Image', + video: 'Video' +} \ No newline at end of file diff --git a/lang/en-us/seckill/list.js b/lang/en-us/seckill/list.js new file mode 100644 index 0000000..ff3a1a0 --- /dev/null +++ b/lang/en-us/seckill/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Flash Sale Zone' +} \ No newline at end of file diff --git a/lang/en-us/seckill/payment.js b/lang/en-us/seckill/payment.js new file mode 100644 index 0000000..1572d25 --- /dev/null +++ b/lang/en-us/seckill/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Pending Payment Orders' +} \ No newline at end of file diff --git a/lang/en-us/store_notes/note_detail.js b/lang/en-us/store_notes/note_detail.js new file mode 100644 index 0000000..815a23a --- /dev/null +++ b/lang/en-us/store_notes/note_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Note Details' +} \ No newline at end of file diff --git a/lang/en-us/store_notes/note_list.js b/lang/en-us/store_notes/note_list.js new file mode 100644 index 0000000..240b790 --- /dev/null +++ b/lang/en-us/store_notes/note_list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Store Notes' +} \ No newline at end of file diff --git a/lang/en-us/storeclose/storeclose.js b/lang/en-us/storeclose/storeclose.js new file mode 100644 index 0000000..d3c4dc4 --- /dev/null +++ b/lang/en-us/storeclose/storeclose.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Store Closed' +} \ No newline at end of file diff --git a/lang/en-us/topics/detail.js b/lang/en-us/topics/detail.js new file mode 100644 index 0000000..9eda13e --- /dev/null +++ b/lang/en-us/topics/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Special Topic Details' +} \ No newline at end of file diff --git a/lang/en-us/topics/goods_detail.js b/lang/en-us/topics/goods_detail.js new file mode 100644 index 0000000..28c8a91 --- /dev/null +++ b/lang/en-us/topics/goods_detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: 'Select', + params: 'Parameters', + service: 'Product Service', + allGoods: 'All Products', + image: 'Image', + video: 'Video' +} \ No newline at end of file diff --git a/lang/en-us/topics/list.js b/lang/en-us/topics/list.js new file mode 100644 index 0000000..0fee407 --- /dev/null +++ b/lang/en-us/topics/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Special Topic List' +} \ No newline at end of file diff --git a/lang/en-us/topics/payment.js b/lang/en-us/topics/payment.js new file mode 100644 index 0000000..1572d25 --- /dev/null +++ b/lang/en-us/topics/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Pending Payment Orders' +} \ No newline at end of file diff --git a/lang/en-us/verification/detail.js b/lang/en-us/verification/detail.js new file mode 100644 index 0000000..fcc9da5 --- /dev/null +++ b/lang/en-us/verification/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Verification Details' +} \ No newline at end of file diff --git a/lang/en-us/verification/index.js b/lang/en-us/verification/index.js new file mode 100644 index 0000000..459e380 --- /dev/null +++ b/lang/en-us/verification/index.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'Verification Counter' +} \ No newline at end of file diff --git a/lang/en-us/verification/list.js b/lang/en-us/verification/list.js new file mode 100644 index 0000000..f8a1e6c --- /dev/null +++ b/lang/en-us/verification/list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: 'Verification Records', + emptyTips: 'No Records' +} \ No newline at end of file diff --git a/lang/en-us/vr/index.js b/lang/en-us/vr/index.js new file mode 100644 index 0000000..24d3a31 --- /dev/null +++ b/lang/en-us/vr/index.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'VR' +} \ No newline at end of file diff --git a/lang/zh-cn.js b/lang/zh-cn.js deleted file mode 100644 index 433fc63..0000000 --- a/lang/zh-cn.js +++ /dev/null @@ -1,1911 +0,0 @@ -// Auto-generated by i18n_build_zhcn.py -// Single authoritative lang source. Do not edit manually. -// locale: zh-cn -// Generated: 2026-06-23 - -export const lang = { - "common": { - "chat-message.l60.t0": "客服不在线", - "chat-message.l63.t0": "客服在线", - "currency_symbol": "¥", - "hover-nav.l192.t0": "未获取到 shopInfo,使用默认设置", - "hover-nav.l239.t0": "来自悬浮按钮的咨询", - "l460": "设置主题颜色失败", - "l466": "加载", - "l477": "[theme] loadTheme 返回空:", - "l496": "[theme] applyThemeWithRemote 失败,回退到纯预设:", - "l506": "[theme] 纯预设回退也失败:", - "l-time.l40.t0": "刚刚", - "l-time.l40.t1": "分钟前", - "l-time.time.l110.t0": "小时前", - "l-time.time.l119.t0": "天前", - "mescroll.mescroll-uni-option.l30.t0": "~ 暂无相关数据 ~", - "mescroll.mescroll-uni-option.l6.t0": "下拉刷新", - "mescroll.mescroll-uni-option.l7.t0": "释放更新", - "mescroll.mescroll-uni-option.l8.t0": "加载中 ...", - "mescroll.my-list-mescroll.l44.t0": "~ 空空如也 ~", - "mescroll.my-list-mescroll.l45.t0": "去看看", - "ns-chat.ns-chat-goods.l12.t0": "已发送", - "ns-chat.ns-chat-goods.l25.t0": "发送", - "ns-chat.ns-chat-order.l7.t0": "订单状态:", - "ns-chat.ns-chat-order.l8.t0": "配送方式:", - "ns-chat.ns-chat-receiveGoods.l9.t0": "销量:", - "ns-contact.l32.t0": "联系客服", - "ns-contact.l35.t0": "请联系客服,客服电话是", - "ns-contact.l35.t1": "抱歉,商家暂无客服,请线下联系", - "ns-copyright.l13.t0": "公安备案", - "ns-empty.l18.t0": "暂无相关数据", - "ns-empty.l31.t0": "去逛逛", - "ns-form.l191.t0": "请选择省市", - "ns-form.l191.t1": "请选择省市区/县", - "ns-form.l368.t0": "请输入", - "ns-form.l37.t0": "请选择", - "ns-form.l378.t0": "身份证输入不合法", - "ns-form.l395.t0": "手机号输入不合法", - "ns-form.l432.t0": "请至少选择一个", - "ns-form.l442.t0": "请至少上传一张", - "ns-form.l470.t0": "结束日期不能小于开始日期", - "ns-form.l498.t0": "结束时间必须大于开始时间", - "ns-form.l545.t0": "最多上传", - "ns-form.l545.t1": "张图片", - "ns-goods-recommend.l13.t0": "猜你喜欢", - "ns-goods-recommend.l20.t0": "购买", - "ns-goods-sku.l1007.t0": "购买数量不能小于等于0", - "ns-goods-sku.l1014.t0": "库存小于最低购买数量", - "ns-goods-sku.l120.t0": "库存", - "ns-goods-sku.l124.t0": "已选规格:", - "ns-goods-sku.l161.t0": "兑换数量", - "ns-goods-sku.l162.t0": "购买数量", - "ns-goods-sku.l163.t0": "(每人限购", - "ns-goods-sku.l167.t0": "(限购", - "ns-goods-sku.l185.t0": "兑换", - "ns-goods-sku.l195.t0": "立即购买", - "ns-goods-sku.l196.t0": "确认", - "ns-goods-sku.l199.t0": "立即抢购", - "ns-goods-sku.l208.t0": "该商品已下架", - "ns-goods-sku.l51.t0": "尾款", - "ns-goods-sku.l710.t0": "该规格未参与打包一口价活动", - "ns-goods-sku.l897.t0": "该商品", - "ns-goods-sku.l897.t1": "起售", - "ns-goods-sku.l985.t0": "预览商品无法购买", - "ns-goods-sku.ns-goods-sku-category.l264.t0": "库存不足", - "ns-goods-sku.ns-goods-sku-category.l272.t0": "该商品每次最多购买", - "ns-goods-sku.ns-goods-sku-category.l278.t0": "该商品每人限购", - "ns-goods-sku.ns-goods-sku-category.l279.t0": ",您已购买了", - "ns-goods-sku.ns-goods-sku-category.l378.t0": "商品已下架", - "ns-goods-sku.ns-goods-sku-category.l388.t0": "商品已售罄", - "ns-goods-sku.ns-goods-sku-category.l459.t0": "加入购物车成功", - "ns-goods-sku.ns-goods-sku-category.l75.t0": "加入购物车", - "ns-goods-sku.ns-goods-sku-category.l76.t0": "确定", - "ns-goods-sku.ns-goods-sku-index.l124.t0": "商品添加购物车成功", - "ns-goods-sku.ns-goods-sku-index.l150.t0": "件", - "ns-goods-sku.ns-goods-sku-index.l70.t0": "商品库存不足", - "ns-loading.l16.t0": "加载中", - "ns-login.l10.t0": "检测到您还未绑定手机号", - "ns-login.l11.t0": "为了方便您接收订单等信息,需要绑定手机号", - "ns-login.l115.t0": "获取手机号", - "ns-login.l15.t0": "手机号", - "ns-login.l16.t0": "请输入手机号", - "ns-login.l169.t0": "获取动态码", - "ns-login.l19.t0": "验证码", - "ns-login.l20.t0": "请输入验证码", - "ns-login.l231.t0": "请确认相关协议", - "ns-login.l24.t0": "动态码", - "ns-login.l25.t0": "请输入动态码", - "ns-login.l30.t0": "保存", - "ns-login.l327.t0": "上传失败", - "ns-login.l35.t0": "欢迎来到", - "ns-login.l37.t0": "使用手机号登录,", - "ns-login.l37.t1": "注册登录,", - "ns-login.l393.t0": "请输入正确的手机号", - "ns-login.l414.t0": "s后可重新获取", - "ns-login.l51.t0": "《隐私条款》", - "ns-login.l53.t0": "《用户服务协议》", - "ns-login.l606.t0": "登录中", - "ns-login.l61.t0": "同意隐私协议并授权手机号", - "ns-login.l646.t0": "登录失败", - "ns-login.l66.t0": "授权手机号码", - "ns-login.l672.t0": "请授权您的手机号码", - "ns-login.l718.t0": "头像拉取失败", - "ns-login.l79.t0": "头像", - "ns-login.l87.t0": "昵称", - "ns-login.l88.t0": "请输入昵称", - "ns-navbar.l31.t0": "请输入商品名称", - "ns-navbar.l39.t0": "定位中...", - "ns-navbar.l41.t0": "附近门店", - "ns-newform.l149.t0": "请选择日期", - "ns-newform.l173.t0": "开始日期", - "ns-newform.l187.t0": "结束日期", - "ns-newform.l210.t0": "请选择时间", - "ns-newform.l234.t0": "开始时间", - "ns-newform.l248.t0": "结束时间", - "ns-newform.l271.t0": "请选择省市区", - "ns-payment.l13.t0": "支付金额", - "ns-payment.l161.t0": "请选择支付方式!", - "ns-payment.l166.t0": "支付中...", - "ns-payment.l18.t0": "余额抵扣", - "ns-payment.l185.t0": "未获取到支付信息!", - "ns-payment.l19.t0": "可用¥", - "ns-payment.l298.t0": "您已取消支付", - "ns-payment.l34.t0": "平台尚未配置支付方式!", - "ns-payment.l39.t0": "确认支付", - "ns-payment.l398.t0": "支付失败,失败原因:", - "ns-payment.l7.t0": "支付方式", - "ns-payment.l75.t0": "支付宝支付", - "ns-payment.l80.t0": "微信支付", - "ns-select-time.l148.t0": "周日", - "ns-select-time.l148.t1": "周一", - "ns-select-time.l148.t2": "周二", - "ns-select-time.l148.t3": "周三", - "ns-select-time.l148.t4": "周四", - "ns-select-time.l148.t5": "周五", - "ns-select-time.l148.t6": "周六", - "ns-select-time.l173.t0": "今天", - "ns-select-time.l185.t0": "明天", - "ns-select-time.l6.t0": "选择送达时间", - "ns-select-time.l7.t0": "选择自提时间", - "ns-select-time.l89.t0": "立即配送(", - "ns-select-time.l96.t0": "月", - "ns-select-time.l98.t0": "日", - "ns-video-player-popup.l17.t0": "视频地址不存在", - "l18": "余额支付", - "pick-regions.l17.t0": "取消", - "pick-regions.l18.t0": "完成", - "privacy-popup.l15.t0": "不同意", - "privacy-popup.l18.t0": "同意并继续", - "privacy-popup.l253.t0": "未同意隐私协议,无法使用相关功能", - "privacy-popup.l46.t0": "用户隐私保护指引", - "privacy-popup.l47.t0": "本小程序", - "privacy-popup.l49.t0": "本应用", - "privacy-popup.l5.t0": "用户隐私保护提示", - "privacy-popup.l82.t0": "=========低版本基础库==========", - "register-reward.l14.t0": "积分奖励", - "register-reward.l19.t0": "积分", - "register-reward.l21.t0": "用于下单时抵现或兑换商品等", - "register-reward.l23.t0": "立即查看", - "register-reward.l27.t0": "成长值", - "register-reward.l34.t0": "用于提升会员等级", - "register-reward.l40.t0": "红包奖励", - "register-reward.l45.t0": "元", - "register-reward.l47.t0": "不可提现下单时可用", - "register-reward.l53.t0": "优惠券奖励", - "register-reward.l60.t0": "打", - "register-reward.l60.t1": "折", - "register-reward.l60.t2": "减", - "search_tip": "请输入搜索关键词", - "submit": "提交", - "wxwork-contact.l108.t0": "企业微信SDK初始化失败", - "wxwork-contact.l112.t0": "初始化企业微信SDK失败:", - "wxwork-contact.l145.t0": "未配置企业微信客服信息", - "wxwork-contact.l16.t0": "添加企业微信客服", - "wxwork-contact.l168.t0": "跳转成功", - "wxwork-contact.l173.t0": "跳转企业微信失败:", - "wxwork-contact.l174.t0": "跳转失败,请检查企业微信配置", - "wxwork-contact.l184.t0": "企业微信SDK未初始化", - "wxwork-contact.l19.t0": "点击确定后将跳转至企业微信,添加专业客服为您服务", - "wxwork-contact.l192.t0": "打开用户资料失败:", - "wxwork-contact.l193.t0": "打开用户资料失败", - "wxwork-contact.l202.t0": "提示", - "yuyue-date.l103.t0": "已约满", - "yuyue-date.l108.t0": "可预约", - "yuyue-date.l176.t0": "暂无选择", - "yuyue-date.l216.t0": "不可以预约", - "yuyue-date.l23.t0": "指定日期", - "yuyue-date.l34.t0": "一", - "yuyue-date.l34.t1": "二", - "yuyue-date.l34.t2": "三", - "yuyue-date.l34.t3": "四", - "yuyue-date.l34.t4": "五", - "yuyue-date.l34.t5": "六", - "yuyue-date.l38.t0": "周${days[day]}", - "yuyue-date.l53.t0": "后天", - "yuyue-date.l57.t0": "预约时间:", - "yuyue-date.l6.t0": "选择时间", - "yuyue-date.l60.t0": "确认预约", - "yuyue-date.l63.t0": "如不想线上预约,可致电商家电话预约", - }, - "customer": { - }, - "pageTitles": { - "article.detail": "文章详情", - "article.list": "文章列表", - "bale.detail": "", - "bale.payment": "待付款订单", - "bargain.detail": "", - "bargain.launch": "砍价详情", - "bargain.list": "砍价专区", - "bargain.my_bargain": "我的砍价", - "bargain.payment": "待付款订单", - "combo.detail": "组合套餐", - "combo.payment": "待付款订单", - "contact.contact": "电子名片", - "diy.diy": "", - "fenxiao.apply": "", - "fenxiao.bill": "账单", - "fenxiao.follow": "我的关注", - "fenxiao.goods_list": "", - "fenxiao.index": "", - "fenxiao.level": "", - "fenxiao.order": "", - "fenxiao.order_detail": "订单详情", - "fenxiao.promote_code": "推广海报", - "fenxiao.team": "", - "fenxiao.withdraw_apply": "", - "fenxiao.withdraw_list": "", - "game.cards": "刮刮乐", - "game.record": "中奖纪录", - "game.smash_eggs": "砸金蛋", - "game.turntable": "大转盘", - "goods.brand": "品牌专区", - "goods.cart": "购物车", - "goods.category": "商品分类", - "goods.consult": "商品咨询", - "goods.consult_edit": "我要咨询", - "goods.coupon": "优惠券领取", - "goods.coupon_receive": "领取优惠券", - "goods.detail": "", - "goods.evaluate": "商品评价", - "goods.list": "商品列表", - "goods.not_exist": "商品找不到", - "goods.point": "积分中心", - "goods.search": "搜索", - "groupbuy.detail": "", - "groupbuy.list": "团购专区", - "groupbuy.payment": "待付款订单", - "help.detail": "帮助详情", - "help.list": "帮助中心", - "hongbao.list": "瓜分红包列表", - "hongbao.my_hongbao": "我的红包列表", - "index.index": "", - "live.list": "直播", - "login.find": "找回密码", - "login.login": "登录", - "login.register": "注册", - "member.account": "账户列表", - "member.account_edit": "编辑账户", - "member.address": "收货地址", - "member.address_edit": "编辑收货地址", - "member.apply_withdrawal": "申请提现", - "member.assets": "账号注销", - "member.balance": "我的余额", - "member.balance_detail": "余额明细", - "member.cancellation": "账号注销", - "member.cancelrefuse": "账号注销", - "member.cancelstatus": "账号注销", - "member.cancelsuccess": "账号注销", - "member.card": "会员卡", - "member.card_buy": "会员卡", - "member.collection": "我的关注", - "member.contact": "客服", - "member.coupon": "我的优惠券", - "member.footprint": "我的足迹", - "member.gift": "我的礼品", - "member.gift_detail": "礼品订单", - "member.index": "会员中心", - "member.info": "个人资料", - "member.info_edit": "个人资料", - "member.invite_friends": "邀请好友", - "member.level": "会员等级", - "member.message": "我的消息", - "member.modify_face": "修改头像", - "member.pay_password": "支付密码", - "member.point": "我的积分", - "member.point_detail": "积分明细", - "member.signin": "签到有礼", - "member.withdrawal": "提现记录", - "member.withdrawal_detail": "提现详情", - "notice.detail": "公告详情", - "notice.list": "公告列表", - "order.activist": "售后", - "order.detail": "订单详情", - "order.detail_local_delivery": "订单详情", - "order.detail_pickup": "订单详情", - "order.detail_point": "订单详情", - "order.detail_virtual": "订单详情", - "order.evaluate": "我要评价", - "order.list": "订单列表", - "order.logistics": "物流信息", - "order.payment": "待付款订单", - "order.refund": "申请退款", - "order.refund_batch": "申请退款", - "order.refund_detail": "退款详情", - "pay.index": "支付方式", - "pay.result": "支付结果", - "pintuan.detail": "", - "pintuan.list": "拼团专区", - "pintuan.my_spell": "我的拼单", - "pintuan.payment": "待付款订单", - "pintuan.share": "拼团分享", - "point.detail": "兑换", - "point.list": "积分商城", - "point.order_detail": "积分兑换订单详情", - "point.order_list": "积分兑换", - "point.payment": "待付款订单", - "point.result": "兑换结果", - "presale.detail": "", - "presale.list": "预售专区", - "presale.order_detail": "订单详情", - "presale.order_list": "我的预售", - "presale.payment": "待付款订单", - "recharge.detail": "充值详情", - "recharge.list": "充值列表", - "recharge.order_list": "充值记录", - "seckill.detail": "", - "seckill.list": "秒杀专区", - "seckill.payment": "待付款订单", - "store_notes.note_detail": "笔记详情", - "store_notes.note_list": "店铺笔记", - "storeclose.storeclose": "店铺打烊", - "topics.detail": "专题活动详情", - "topics.goods_detail": "", - "topics.list": "专题活动列表", - "topics.payment": "待付款订单", - "verification.detail": "核销明细", - "verification.index": "核销台", - "verification.list": "核销记录", - "vr.index": "VR", - }, - "tabBar": { - }, - "address": { - }, - "aiChat": { - }, - "ai_chat": { - "ai-chat.ai-chat-message.l1026.t0": "流式请求失败:", - "ai-chat.ai-chat-message.l1082.t0": "流式请求失败", - "ai-chat.ai-chat-message.l1100.t0": "AI正在思考", - "ai-chat.ai-chat-message.l1101.t0": "AI正在分析", - "ai-chat.ai-chat-message.l1102.t0": "AI正在检索", - "ai-chat.ai-chat-message.l1103.t0": "AI正在生成", - "ai-chat.ai-chat-message.l1128.t0": "你好", - "ai-chat.ai-chat-message.l1128.t1": "您好!我是AI智能客服,很高兴为您服务!有什么可以帮助您的吗?", - "ai-chat.ai-chat-message.l1129.t0": "我们的产品价格根据型号和配置有所不同,具体价格请查看商品详情页面。", - "ai-chat.ai-chat-message.l1130.t0": "发货", - "ai-chat.ai-chat-message.l1130.t1": "一般情况下,订单会在24小时内发货,具体时效请查看物流信息。", - "ai-chat.ai-chat-message.l1131.t0": "退货", - "ai-chat.ai-chat-message.l1131.t1": "支持7天无理由退货,请确保商品完好无损。", - "ai-chat.ai-chat-message.l1132.t0": "客服", - "ai-chat.ai-chat-message.l1132.t1": "我们的客服工作时间是9:00-18:00,有问题可以随时联系我们。", - "ai-chat.ai-chat-message.l1139.t0": "感谢您的咨询!关于", - "ai-chat.ai-chat-message.l1139.t1": "的问题,我们的专业客服会尽快为您解答。您也可以查看我们的帮助文档获取更多信息。", - "ai-chat.ai-chat-message.l1429.t0": "加载历史消息中...", - "ai-chat.ai-chat-message.l1477.t0": "加载历史失败:", - "ai-chat.ai-chat-message.l1483.t0": "加载更多历史消息", - "ai-chat.ai-chat-message.l1691.t0": "已复制选中内容", - "ai-chat.ai-chat-message.l1691.t1": "已复制", - "ai-chat.ai-chat-message.l1705.t0": "[AI Chat] 开始复制, 内容长度:", - "ai-chat.ai-chat-message.l1705.t1": "内容前50字:", - "ai-chat.ai-chat-message.l1709.t0": "[AI Chat] 复制成功", - "ai-chat.ai-chat-message.l1713.t0": "[AI Chat] 复制失败, 详细错误:", - "ai-chat.ai-chat-message.l1714.t0": "[AI Chat] 复制失败 errMsg:", - "ai-chat.ai-chat-message.l1714.t1": "无错误消息", - "ai-chat.ai-chat-message.l1971.t0": "[开心]", - "ai-chat.ai-chat-message.l1972.t0": "[大笑]", - "ai-chat.ai-chat-message.l1973.t0": "[微笑]", - "ai-chat.ai-chat-message.l1974.t0": "[爱心]", - "ai-chat.ai-chat-message.l1975.t0": "[点赞]", - "ai-chat.ai-chat-message.l1976.t0": "[哭泣]", - "ai-chat.ai-chat-message.l1977.t0": "[感谢/拜托]", - "ai-chat.ai-chat-message.l1978.t0": "[喜欢]", - "ai-chat.ai-chat-message.l1979.t0": "[庆祝]", - "ai-chat.ai-chat-message.l1980.t0": "[思考]", - "ai-chat.ai-chat-message.l1981.t0": "[尴尬]", - "ai-chat.ai-chat-message.l1983.t0": "[喜爱]", - "ai-chat.ai-chat-message.l1984.t0": "[飞吻]", - "ai-chat.ai-chat-message.l1985.t0": "[坏笑]", - "ai-chat.ai-chat-message.l1987.t0": "[难过]", - "ai-chat.ai-chat-message.l1989.t0": "[生气]", - "ai-chat.ai-chat-message.l1990.t0": "[困]", - "ai-chat.ai-chat-message.l1991.t0": "[拥抱]", - "ai-chat.ai-chat-message.l1996.t0": "[天使]", - "ai-chat.ai-chat-message.l1997.t0": "[惊喜]", - "ai-chat.ai-chat-message.l1998.t0": "[好吃]", - "ai-chat.ai-chat-message.l1999.t0": "[调皮]", - "ai-chat.ai-chat-message.l2001.t0": "[搞怪]", - "ai-chat.ai-chat-message.l2003.t0": "[发财]", - "ai-chat.ai-chat-message.l2004.t0": "[害羞]", - "ai-chat.ai-chat-message.l2005.t0": "[嘘]", - "ai-chat.ai-chat-message.l2006.t0": "[闭嘴]", - "ai-chat.ai-chat-message.l2007.t0": "[疑惑]", - "ai-chat.ai-chat-message.l2008.t0": "[无语]", - "ai-chat.ai-chat-message.l2010.t0": "[沉默]", - "ai-chat.ai-chat-message.l2011.t0": "[不屑]", - "ai-chat.ai-chat-message.l2012.t0": "[白眼]", - "ai-chat.ai-chat-message.l2014.t0": "[说谎]", - "ai-chat.ai-chat-message.l2015.t0": "[安心]", - "ai-chat.ai-chat-message.l2017.t0": "[流口水]", - "ai-chat.ai-chat-message.l2018.t0": "[生病]", - "ai-chat.ai-chat-message.l2019.t0": "[发烧]", - "ai-chat.ai-chat-message.l2020.t0": "[受伤]", - "ai-chat.ai-chat-message.l2021.t0": "[恶心]", - "ai-chat.ai-chat-message.l2022.t0": "[呕吐]", - "ai-chat.ai-chat-message.l2023.t0": "[感冒]", - "ai-chat.ai-chat-message.l2024.t0": "[热]", - "ai-chat.ai-chat-message.l2025.t0": "[冷]", - "ai-chat.ai-chat-message.l2026.t0": "[头晕]", - "ai-chat.ai-chat-message.l2027.t0": "[晕]", - "ai-chat.ai-chat-message.l2028.t0": "[爆炸]", - "ai-chat.ai-chat-message.l2029.t0": "[酷]", - "ai-chat.ai-chat-message.l2031.t0": "[书呆子]", - "ai-chat.ai-chat-message.l2033.t0": "[困惑]", - "ai-chat.ai-chat-message.l2034.t0": "[担心]", - "ai-chat.ai-chat-message.l2036.t0": "[惊讶]", - "ai-chat.ai-chat-message.l2038.t0": "[震惊]", - "ai-chat.ai-chat-message.l2039.t0": "[脸红]", - "ai-chat.ai-chat-message.l2040.t0": "[恳求]", - "ai-chat.ai-chat-message.l2043.t0": "[害怕]", - "ai-chat.ai-chat-message.l2044.t0": "[紧张]", - "ai-chat.ai-chat-message.l2045.t0": "[失望]", - "ai-chat.ai-chat-message.l2046.t0": "[恐惧]", - "ai-chat.ai-chat-message.l2047.t0": "[困扰]", - "ai-chat.ai-chat-message.l2048.t0": "[痛苦]", - "ai-chat.ai-chat-message.l2050.t0": "[汗]", - "ai-chat.ai-chat-message.l2051.t0": "[累]", - "ai-chat.ai-chat-message.l2054.t0": "[愤怒]", - "ai-chat.ai-chat-message.l2056.t0": "[咒骂]", - "ai-chat.ai-chat-message.l2057.t0": "[恶魔]", - "ai-chat.ai-chat-message.l2059.t0": "[骷髅]", - "ai-chat.ai-chat-message.l2060.t0": "[便便]", - "ai-chat.ai-chat-message.l2061.t0": "[鬼]", - "ai-chat.ai-chat-message.l2062.t0": "[外星人]", - "ai-chat.ai-chat-message.l2063.t0": "[机器人]", - "ai-chat.ai-chat-message.l2064.t0": "[万圣节]", - "ai-chat.ai-chat-message.l2065.t0": "[开心猫]", - "ai-chat.ai-chat-message.l2066.t0": "[微笑猫]", - "ai-chat.ai-chat-message.l2067.t0": "[大笑猫]", - "ai-chat.ai-chat-message.l2068.t0": "[花痴猫]", - "ai-chat.ai-chat-message.l2069.t0": "[得意猫]", - "ai-chat.ai-chat-message.l2070.t0": "[亲亲猫]", - "ai-chat.ai-chat-message.l2071.t0": "[惊讶猫]", - "ai-chat.ai-chat-message.l2072.t0": "[哭泣猫]", - "ai-chat.ai-chat-message.l2073.t0": "[生气猫]", - "ai-chat.ai-chat-message.l2074.t0": "[挥手]", - "ai-chat.ai-chat-message.l2075.t0": "[举手]", - "ai-chat.ai-chat-message.l2076.t0": "[手掌]", - "ai-chat.ai-chat-message.l2080.t0": "[捏]", - "ai-chat.ai-chat-message.l2081.t0": "[耶]", - "ai-chat.ai-chat-message.l2082.t0": "[好运]", - "ai-chat.ai-chat-message.l2083.t0": "[爱你]", - "ai-chat.ai-chat-message.l2084.t0": "[摇滚]", - "ai-chat.ai-chat-message.l2085.t0": "[打电话]", - "ai-chat.ai-chat-message.l2086.t0": "[左边]", - "ai-chat.ai-chat-message.l2087.t0": "[右边]", - "ai-chat.ai-chat-message.l2088.t0": "[上边]", - "ai-chat.ai-chat-message.l2089.t0": "[竖中指]", - "ai-chat.ai-chat-message.l2090.t0": "[下边]", - "ai-chat.ai-chat-message.l2091.t0": "[向上]", - "ai-chat.ai-chat-message.l2092.t0": "[鄙视]", - "ai-chat.ai-chat-message.l2093.t0": "[拳头]", - "ai-chat.ai-chat-message.l2095.t0": "[左拳]", - "ai-chat.ai-chat-message.l2096.t0": "[右拳]", - "ai-chat.ai-chat-message.l2097.t0": "[鼓掌]", - "ai-chat.ai-chat-message.l2098.t0": "[举手庆祝]", - "ai-chat.ai-chat-message.l2099.t0": "[张开手]", - "ai-chat.ai-chat-message.l2100.t0": "[摊手]", - "ai-chat.ai-chat-message.l2101.t0": "[握手]", - "ai-chat.ai-chat-message.l2102.t0": "[写字]", - "ai-chat.ai-chat-message.l2103.t0": "[美甲]", - "ai-chat.ai-chat-message.l2104.t0": "[自拍]", - "ai-chat.ai-chat-message.l2105.t0": "[肌肉]", - "ai-chat.ai-chat-message.l2107.t0": "[心跳]", - "ai-chat.ai-chat-message.l2108.t0": "[两颗心]", - "ai-chat.ai-chat-message.l2109.t0": "[闪亮心]", - "ai-chat.ai-chat-message.l2110.t0": "[礼物心]", - "ai-chat.ai-chat-message.l2111.t0": "[旋转心]", - "ai-chat.ai-chat-message.l2112.t0": "[丘比特]", - "ai-chat.ai-chat-message.l2113.t0": "[情书]", - "ai-chat.ai-chat-message.l2114.t0": "[心形]", - "ai-chat.ai-chat-message.l2115.t0": "[黄心]", - "ai-chat.ai-chat-message.l2116.t0": "[蓝心]", - "ai-chat.ai-chat-message.l2117.t0": "[紫心]", - "ai-chat.ai-chat-message.l2118.t0": "[黑心]", - "ai-chat.ai-chat-message.l2119.t0": "[心碎]", - "ai-chat.ai-chat-message.l2121.t0": "[炸弹]", - "ai-chat.ai-chat-message.l2125.t0": "[风]", - "ai-chat.ai-chat-message.l2126.t0": "[眼睛]", - "ai-chat.ai-chat-message.l2127.t0": "[看]", - "ai-chat.ai-chat-message.l2128.t0": "[舌头]", - "ai-chat.ai-chat-message.l2129.t0": "[嘴巴]", - "ai-chat.ai-chat-message.l2130.t0": "[耳朵]", - "ai-chat.ai-chat-message.l2131.t0": "[鼻子]", - "ai-chat.ai-chat-message.l618.t0": "[AI Chat] → 分支1: ID变化,加载历史", - "ai-chat.ai-chat-message.l623.t0": "[AI Chat] → 分支2: ID不变但只有初始消息,从服务端恢复", - "ai-chat.ai-chat-message.l627.t0": "[AI Chat] → 分支3: 全新会话", - "ai-chat.ai-chat-message.l630.t0": "[AI Chat] → 分支4: 跳过加载,保留当前消息, messages.length:", - "ai-chat.ai-chat-message.l638.t0": "[AI Chat] 已有会话,跳过欢迎语", - "ai-chat.ai-chat-message.l649.t0": "[AI Chat] API getServiceConfig 返回:", - "ai-chat.ai-chat-message.l660.t0": "[AI Chat] 使用远程欢迎语:", - "ai-chat.ai-chat-message.l664.t0": "[AI Chat] 获取服务配置失败:", - "ai-chat.ai-chat-message.l672.t0": "[AI Chat] 使用降级欢迎语", - "ai-chat.ai-chat-message.l674.t0": "[AI Chat] 无可用欢迎语", - "ai-chat.ai-chat-message.l767.t0": "[AI Chat] loadChatHistoryIfExist 被调用, convId:", - "ai-chat.ai-chat-message.l771.t0": "[AI Chat] 请求历史 API...", - "ai-chat.ai-chat-message.l775.t0": "[AI Chat] 历史 API 返回:", - "ai-chat.ai-chat-message.l778.t0": "[AI Chat] 历史记录为空或格式无效, success:", - "ai-chat.ai-chat-message.l781.t0": "[AI Chat] 原始消息数:", - "ai-chat.ai-chat-message.l801.t0": "[AI Chat] 过滤后消息数:", - "ai-chat.ai-chat-message.l801.t1": "内容摘要:", - "ai-chat.ai-chat-message.l807.t0": "[AI Chat] 加载历史记录失败:", - "ai-chat.ai-chat-message.l884.t0": "AI服务调用失败:", - "ai-chat.index.l146.t0": "[AI Chat Page] onShow 触发", - "ai-chat.index.l157.t0": "onKeyboardHeightChange 不可用:", - "ai-chat.index.l180.t0": "[AI Chat Page] onUnload 触发", - "ai-chat.index.l236.t0": "事件处理错误:", - "ai-chat.index.l266.t0": "初始化导航栏失败:", - "ai-chat.index.l424.t0": "我理解您的需求,让我为您详细解答。", - "ai-chat.index.l425.t0": "感谢您的提问,这是一个很好的问题。", - "ai-chat.index.l426.t0": "根据您的问题,我建议您可以考虑以下几个方面:", - "ai-chat.index.l427.t0": "这个问题很常见,让我为您提供一些解决方案。", - "ai-chat.index.l428.t0": "我明白您的困惑,让我帮您分析一下。", - "ai-chat.index.l437.t0": "$ {randomResponse}\\n\\n您的问题", - "ai-chat.index.l437.t1": "我已经收到,正在为您处理中...", - "ai-chat.index.l481.t0": "聊天组件未初始化", - "ai-chat.index.l485.t0": "我想了解以下商品的详细信息:\\n商品名称:${product.goods_name}\\n价格:¥${product.price}\\n商品ID:${product.goods_id}", - "ai-chat.index.l521.t0": "【AI客服】servicerConfig 未加载,200ms后重试...", - }, - "appointment": { - }, - "article": { - "detail.l5.t0": "发表时间:", - "list.l24.t0": "暂无文章", - "list.l91.t0": "文章列表", - }, - "assets": { - }, - "auth": { - }, - "balance": { - }, - "bale": { - }, - "bargain": { - }, - "birthday": { - }, - "brand": { - }, - "cancel": { - }, - "card": { - }, - "cart": { - }, - "cases": { - }, - "category": { - }, - "channel": { - }, - "chat": { - }, - "collection": { - }, - "combo": { - }, - "contact": { - "l165.t0": "请输入您的邮箱", - "l314.t0": "联系我们", - "l372.t0": "请填写姓名", - "l376.t0": "手机号格式不正确", - "l380.t0": "请填写留言内容", - "l405.t0": "提交失败,请重试", - "l76.t0": "企业文件", - "l93.t0": "企业视频", - }, - "coupon": { - }, - "customerService": { - }, - "date": { - }, - "delivery": { - }, - "diy": { - "diy-article.l10.t0": "滚到底后跳变", - "diy-article.l908.t0": "但不是 .read-wrap,特异性 view", - "diy-article.l925.t0": "组件内部", - "diy-article.l94.t0": "查看更多", - "diy-article.l99.t0": "暂无相关文章", - "diy-bargain.l15.t0": "低至0元免费拿", - "diy-bargain.l78.t0": "继续砍价", - "diy-category-item.l132.t0": "选规格", - "diy-category-item.l163.t0": "已经到底了~", - "diy-category-item.l47.t0": "全部", - "diy-category.l12.t0": "商品分类", - "diy-category.l123.t0": "暂时没有分类哦!", - "diy-category.l138.t0": "总计:", - "diy-category.l144.t0": "去结算", - "diy-category.l54.t0": "展开", - "diy-category.l71.t0": "点击收起", - "diy-channel-list.l268.t0": "视频号仅支持在微信小程序环境中播放", - "diy-channel-list.l278.t0": "打开视频号失败", - "diy-coupon.l103.t0": "所有商品可用", - "diy-coupon.l104.t0": "指定商品可用", - "diy-coupon.l105.t0": "指定商品不可用", - "diy-coupon.l143.t0": "立即使用", - "diy-coupon.l181.t0": "立即领取", - "diy-coupon.l209.t0": "优惠券", - "diy-coupon.l229.t0": "无门槛使用", - "diy-coupon.l241.t0": "暂无优惠券", - "diy-coupon.l32.t0": "满", - "diy-coupon.l32.t1": "元可用", - "diy-coupon.l32.t2": "无门槛优惠券", - "diy-coupon.l38.t0": "去使用", - "diy-coupon.l407.t0": "该优惠券已抢光", - "diy-coupon.l430.t0": "领取成功", - "diy-coupon.l71.t0": "领取", - "diy-fenxiao-goods-list.l141.t0": "关注成功", - "diy-fenxiao-goods-list.l153.t0": "确认取消关注该商品吗", - "diy-fenxiao-goods-list.l170.t0": "取消成功", - "diy-fenxiao-goods-list.l23.t0": "赚 ¥", - "diy-form.l142.t0": "提交", - "diy-form.l301.t0": "默认表单", - "diy-form.l306.t0": "提交成功", - "diy-form.l315.t0": "提交失败", - "diy-index-page.l156.t0": "该分类下暂无商品", - "diy-index-page.l196.t0": "首页", - "diy-kefu.l17.t0": "立即添加", - "diy-listmenu.l15.t0": "查看", - "diy-live.l29.t0": "主播:", - "diy-live.l33.t0": "直播商品:", - "diy-map.l9.t0": "一键导航", - "diy-member-info.l110.t0": "超级会员", - "diy-member-info.l113.t0": "查看特权", - "diy-member-info.l114.t0": "会员可享更多权益", - "diy-member-info.l121.t0": "开通可享更多权益", - "diy-member-info.l125.t0": "立即开通", - "diy-member-info.l137.t0": "查看更多权益", - "diy-member-info.l146.t0": "余额", - "diy-member-info.l15.t0": "点击授权头像昵称", - "diy-member-info.l164.t0": "余额充值", - "diy-member-info.l197.t0": "获取您的昵称、头像", - "diy-member-info.l198.t0": "获取用户头像、昵称完善个人资料,主要用于向用户提供具有辨识度的用户中心界面", - "diy-member-info.l39.t0": "点击获取微信头像", - "diy-member-info.l407.t0": "微信用户", - "diy-member-info.l497.t0": "使用会员码需先绑定手机号,是否绑定手机号?", - "diy-merch-list.l66.t0": "品牌", - "diy-notes.l20.t0": "单品介绍", - "diy-notes.l21.t0": "掌柜说", - "diy-notice.l45.t0": "公告", - "diy-notice.l49.t0": "我知道了", - "diy-payment-qrcode.l12.t0": "付款码", - "diy-payment-qrcode.l16.t0": "扫码付", - "diy-payment-qrcode.l22.t0": "门店支付", - "diy-payment-qrcode.l33.t0": "扫码付请退出程序后直接使用微信扫一扫或返回上一页使用付款码进行支付", - "diy-payment-qrcode.l6.t0": "门店消费时使用,支付时点击下方展示付款码", - "diy-pinfan.l28.t0": "已拼", - "diy-pinfan.l52.t0": "返", - "diy-pinfan.l55.t0": "返优惠券", - "diy-pintuan.l151.t0": "去参团", - "diy-pintuan.l29.t0": "人参与", - "diy-pintuan.l29.t1": "人拼团成功", - "diy-search.l31.t0": "搜索", - "diy-seckill.l100.t0": "即将开始", - "diy-seckill.l16.t0": "距离开始", - "diy-seckill.l19.t0": "距离结束", - "diy-seckill.l505.t0": "秒杀活动即将开启,敬请期待!", - "diy-seckill.l90.t0": "原价:", - "diy-store.l10.t0": "切换", - "diy-store.l20.t0": "获取当前位置...", - "diy-store.l66.t0": "商品搜索", - "diy-text.l211.t0": "专区", - "diy-video.l146.t0": "H5端预加载视频失败:", - "diy-video.l187.t0": "视频加载失败:", - "js.wechat-channel.l111.t0": "缺少必要字段: ${field}", - "js.wechat-channel.l170.t0": "微信视频号错误:", - "js.wechat-channel.l59.t0": "当前环境不是微信小程序", - "js.wechat-channel.l60.t0": "当前微信基础库版本过低,需要 2.19.2 或以上版本", - "js.wechat-channel.l61.t0": "当前环境不支持微信视频号", - "js.wechat-channel.l62.t0": "缺少必要字段: {field}", - }, - "diyText": { - }, - "evaluate": { - }, - "fenxiao": { - "apply.l100.t0": "成为分销商的条件", - "apply.l101.t0": "成为", - "apply.l126.t0": "您还不是分销商", - "apply.l131.t0": "您已提交", - "apply.l133.t0": "您提交的", - "apply.l134.t0": "重新申请", - "apply.l16.t0": "请填写申请信息", - "apply.l166.t0": "无", - "apply.l194.t0": "商家未开启分销", - "apply.l210.t0": "申请", - "apply.l27.t0": "邀请人", - "apply.l278.t0": "请仔细阅读协议,并勾选", - "apply.l32.t0": "名称", - "apply.l45.t0": "申请成为", - "apply.l52.t0": "分销商申请条件", - "apply.l82.t0": "展开更多", - "bill.l11.t0": "账单编号:", - "bill.l19.t0": "暂无账单信息", - "child_fenxiao.l23.t0": "人", - "child_fenxiao.l24.t0": "单", - "child_fenxiao.l32.t0": "暂无数据", - "goods_list.l118.t0": "长按保存图片", - "goods_list.l43.t0": "赚", - "goods_list.l49.t0": "暂无分销商品", - "goods_list.l56.t0": "分享好友", - "goods_list.l59.t0": "生成海报", - "index.l114.t0": "订单", - "index.l124.t0": "我的邀请码", - "index.l125.t0": "邀好友赚好礼", - "index.l133.t0": "邀请好友", - "index.l142.t0": "账单报表", - "index.l162.t0": "您的排名为第", - "index.l171.t0": "推广人排行", - "index.l172.t0": "您的排名为", - "index.l180.t0": "等级说明", - "index.l21.t0": "总店", - "index.l21.t1": "上级代理商:", - "index.l214.t0": "您还不是", - "index.l215.t0": "立即加入", - "index.l22.t0": "已邀请成功:", - "index.l223.t0": "快速升级技巧", - "index.l231.t0": "未完成", - "index.l239.t0": "去完成", - "index.l254.t0": "满足任意一条件即可升级", - "index.l254.t1": "满足全部条件才能进行升级", - "index.l293.t0": "中心", - "index.l33.t0": "等级未解锁", - "index.l33.t1": "0 ? info.level_name : '等级未解锁' }}", - "index.l34.t0": "下单、邀请好友均可提升等级", - "index.l36.t0": "做任务", - "index.l371.t0": "当前分销商已冻结", - "index.l43.t0": "可", - "index.l483.t0": "下级消费", - "index.l484.t0": "下级消费单数满", - "index.l485.t0": "分销商自己购买和自己推荐的直属会员购买的订单次数", - "index.l498.t0": "下级消费金额满", - "index.l499.t0": "分销商自己购买和推荐的直属会员购买的订单的总额", - "index.l512.t0": "下级消费产生", - "index.l512.t1": "总额满", - "index.l514.t0": "分销商自己购买和自己推荐的直属会员购买的订单", - "index.l514.t1": "总额", - "index.l526.t0": "自身消费", - "index.l527.t0": "自身消费单数满", - "index.l528.t0": "分销商自己购买的订单次数", - "index.l539.t0": "自身消费金额满", - "index.l540.t0": "分销商自己购买的订单总额", - "index.l55.t0": "总", - "index.l553.t0": "邀请好友人数达到", - "index.l554.t0": "分销商的直属下级会员人数(包含已经申请成为分销商的)", - "index.l567.t0": "邀请好友成为分销商人数达到", - "index.l568.t0": "分销商的直属下级分销商人数", - "index.l59.t0": "已提现", - "index.l64.t0": "提现中(元)", - "index.l70.t0": "待入账(元)", - "index.l93.t0": "我的粉丝", - "index.l94.t0": "邀请的用户", - "level.l119.t0": "分销商自己购买和自己推荐的直属会员购买的订单次数达到", - "level.l131.t0": "分销商自己购买和推荐的直属会员购买的订单的总额达到", - "level.l143.t0": "下级消费产生佣金总额满", - "level.l144.t0": "分销商自己购买和自己推荐的直属会员购买的订单佣金总额达到", - "level.l157.t0": "分销商自己购买的订单次数达到", - "level.l169.t0": "分销商自己购买的订单总额满足", - "level.l181.t0": "分销商的直属下级会员人数达到", - "level.l181.t1": "人(包含已经申请成为分销商的)", - "level.l193.t0": "分销商的直属下级分销商人数达到", - "level.l20.t0": "一级分佣比率", - "level.l221.t0": "等级", - "level.l24.t0": "二级分佣比率", - "level.l28.t0": "三级分佣比率", - "order.l17.t0": "已退款", - "order.l19.t0": "已结算", - "order.l20.t0": "待结算", - "order.l81.t0": "暂无订单", - "order.l83.t0": "暂无待结算订单", - "order.l85.t0": "暂无已结算订单", - "order.l87.t0": "暂无已退款订单", - "order_detail.l47.t0": "返佣详情", - "order_detail.l56.t0": "分佣层级:", - "order_detail.l60.t0": "返佣金额:", - "promote.l21.t0": "已邀请好友", - "promote.l22.t0": "已下单好友", - "promote.l35.t0": "暂无已邀请好友,快去邀请吧", - "promote.l44.t0": "暂无活动规则", - "promote_code.l114.t0": "下载失败", - "promote_code.l139.t0": "海报生成失败", - "promote_code.l14.t0": "长按识别图中二维码", - "promote_code.l18.t0": "保存海报", - "promote_code.l24.t0": "您拒绝了保存图片到相册的授权请求,无法保存图片到相册,如需正常使用,请授权之后再进行操作。", - "promote_code.l29.t0": "立即授权", - "ranking_list.l19.t0": "点击提现", - "ranking_list.l21.t0": "我的团队", - "ranking_list.l33.t0": "分销佣金", - "ranking_list.l44.t0": "佣金排行", - "ranking_list.l45.t0": "您排行第", - "ranking_list.l57.t0": "推广人数", - "ranking_list.l68.t0": "推广排行", - "team.l92.t0": "一级", - "team.l96.t0": "二级", - "withdraw_apply.l178.t0": "请输入提现金额", - "withdraw_apply.l189.t0": "提现金额超出可提现金额", - "withdraw_apply.l19.t0": "请添加提现账户", - "withdraw_apply.l196.t0": "提现金额小于最低提现金额", - "withdraw_apply.l205.t0": "请先添加提现方式", - "withdraw_apply.l238.t0": "提现申请成功", - "withdraw_apply.l31.t0": "提现金额:", - "withdraw_apply.l41.t0": "可提现金额:", - "withdraw_apply.l42.t0": "全部提现", - "withdraw_apply.l46.t0": "最小提现金额为", - "withdraw_apply.l48.t0": "手续费为", - "withdraw_apply.l5.t0": "提现到", - "withdraw_apply.l59.t0": "提现", - "withdraw_apply.l6.t0": "微信默认钱包", - "withdraw_apply.l64.t0": "提现记录", - "withdraw_list.l12.t0": "支付宝", - "withdraw_list.l12.t1": "银行卡", - "withdraw_list.l13.t0": "微信", - "withdraw_list.l28.t0": "暂无提现记录", - "withdraw_list.l45.t0": "已转账", - "withdraw_list.l49.t0": "待审核", - "withdraw_list.l53.t0": "已审核", - "withdraw_list.l57.t0": "已拒绝", - "withdraw_list.l78.t0": "明细", - "withdrawal_detail.l10.t0": "当前状态", - "withdrawal_detail.l14.t0": "交易号", - "withdrawal_detail.l18.t0": "手续费", - "withdrawal_detail.l22.t0": "申请时间", - "withdrawal_detail.l26.t0": "审核时间", - "withdrawal_detail.l30.t0": "银行名称", - "withdrawal_detail.l34.t0": "收款账号", - "withdrawal_detail.l38.t0": "拒绝理由", - "withdrawal_detail.l42.t0": "转账方式名称", - "withdrawal_detail.l46.t0": "转账时间", - }, - "files": { - }, - "find": { - }, - "footprint": { - }, - "form": { - }, - "game": { - }, - "goods": { - "_components.goods-detail-view.detail.l285.t0": "海报生成中...", - "_components.goods-detail-view.detail.l351.t0": "保存成功", - "_components.goods-detail-view.detail.l356.t0": "保存失败,请稍后重试", - "_components.goods-detail-view.l143.t0": "官方认证商家,值得信赖!", - "_components.goods-detail-view.l156.t0": "配送", - "_components.goods-detail-view.l180.t0": "商品服务", - "_components.goods-detail-view.l213.t0": "门店列表", - "_components.goods-detail-view.l257.t0": "添加", - "_components.goods-detail-view.l264.t0": "添加社群", - "_components.goods-detail-view.l269.t0": "长按识别二维码,添加社群", - "_components.goods-detail-view.l290.t0": "暂无评价", - "_components.goods-detail-view.l292.t0": "查看全部", - "_components.goods-detail-view.l338.t0": "规格属性", - "_components.goods-detail-view.l397.t0": "保存图片", - "_components.goods-detail-view.l400.t0": "长按图片进行保存", - "_components.goods-detail-view.l411.t0": "分享", - "_components.goods-detail-view.l417.t0": "分享给好友", - "_components.goods-detail-view.l426.t0": "分享到好物圈", - "_components.goods-detail-view.l434.t0": "生成分享海报", - "_components.goods-detail-view.l441.t0": "复制链接", - "_components.goods-detail-view.l446.t0": "取消分享", - "_components.goods-detail-view.l75.t0": "未配置", - "_components.goods-detail-view.l81.t0": "门店", - "_components.goods-detail-view.l99.t0": "服务", - "_components.ns-goods-promotion.l13.t0": "团购", - "_components.ns-goods-promotion.l19.t0": "拼团", - "_components.ns-goods-promotion.l25.t0": "秒杀", - "_components.ns-goods-promotion.l31.t0": "专题活动", - "_components.ns-goods-promotion.l37.t0": "砍价", - "_components.ns-goods-promotion.l43.t0": "拼团返利", - "_components.ns-goods-promotion.l6.t0": "限时折扣", - "_components.ns-goods-promotion.l7.t0": "当前商品正在参加", - "cart.l123.t0": "满减", - "cart.l143.t0": "失效商品", - "cart.l145.t0": "清空", - "cart.l17.t0": "领券结算最高可减", - "cart.l192.t0": "已失效", - "cart.l202.t0": "购物车为空", - "cart.l202.t1": "赶紧去逛逛, 购买心仪的商品吧", - "cart.l221.t0": "优惠明细", - "cart.l226.t0": "商品总额", - "cart.l239.t0": "合计", - "cart.l294.t0": "有效期:长期有效", - "cart.l298.t0": "已领取", - "cart.l341.t0": "领券", - "cart.l341.t1": "立即", - "cart.l8.t0": "共", - "category.l51.t0": "发现超多好物,快来看看", - "detail.l129.t0": "- 套餐包含以下的服务及商品 -", - "detail.l131.t0": "卡项内项目/商品总的可用次数为", - "detail.l132.t0": "次数不限 ,", - "detail.l133.t0": "永久", - "detail.l134.t0": "天", - "detail.l152.t0": "收起", - "detail.l18.t0": "已售", - "detail.l187.t0": "选择", - "detail.l194.t0": "促销", - "detail.l220.t0": "组合套餐", - "detail.l23.t0": "距结束仅剩", - "detail.l300.t0": "套餐价", - "detail.l348.t0": "最多可抵¥", - "detail.l349.t0": "有效期:", - "detail.l350.t0": "有效期:领取之日起", - "detail.l354.t0": "已抢光", - "detail.l379.t0": "满送", - "detail.l383.t0": "包邮", - "detail.l396.t0": "商品留言", - "detail.l523.t0": "可在手机端拨打 021-51815181", - "detail.l527.t0": "复制到剪切板", - "detail.l55.t0": "原价", - "detail.l591.t0": "复制成功", - "detail.l99.t0": "开通", - "list.l148.t0": "暂无商品", - "list.l160.t0": "是否包邮", - "list.l168.t0": "价格区间(元)", - "list.l170.t0": "最低价", - "list.l172.t0": "最高价", - "list.l188.t0": "全部分类", - "list.l19.t0": "综合", - "list.l203.t0": "重置", - "list.l23.t0": "销量", - "list.l28.t0": "价格", - "list.l40.t0": "筛选", - "public.js.cart.l236.t0": "请选择要删除的商品", - "public.js.cart.l243.t0": "确定要删除这些商品吗?", - "public.js.cart.l243.t1": "确定要删除该商品吗?", - "public.js.cart.l385.t0": "确定要清空这些商品吗?", - "public.js.detail.l321.t0": "您已领取过该优惠券,快去使用吧", - "public.js.detail.l323.t0": "领取成功,快去使用吧", - "public.js.detail.l379.t0": ";满", - "public.js.detail.l386.t0": "送", - "public.js.detail.l392.t0": "、送", - "public.js.detail.l392.t1": "张", - "public.js.detail.l392.t2": "折优惠券", - "public.js.detail.l395.t0": "元优惠券", - "public.js.list.l126.t0": "搜索到", - "public.js.list.l126.t1": "件“", - "public.js.list.l126.t2": "”相关的优质商品", - "public.js.list.l365.t0": "请输入最高价", - "public.js.list.l371.t0": "筛选价格不能小于0", - "public.js.list.l378.t0": "最低价不能大于最高价", - "public.js.list.l384.t0": "最高价不能小于最低价", - "public.js.list.l78.t0": "商品列表", - }, - "goodsList": { - }, - "groupbuy": { - }, - "help": { - "list.l73.t0": "帮助中心", - "list.l81.t0": "帮助中心使你更加方便", - "list.l9.t0": "暂无帮助信息", - }, - "hongbao": { - }, - "http": { - }, - "imgCropping": { - }, - "index": { - }, - "invite": { - }, - "kefu": { - }, - "level": { - }, - "live": { - }, - "login": { - "find.l100.t0": "重新获取", - "find.l13.t0": "已将验证码发送至手机号:", - "find.l169.t0": "该手机号未注册", - "find.l18.t0": "请设置新的密码", - "find.l188.t0": "请输入密码", - "find.l19.t0": "建议您的新密码以简单好记为标准", - "find.l196.t0": "密码长度不能小于", - "find.l196.t1": "位", - "find.l200.t0": "密码需包含", - "find.l204.t0": "数字", - "find.l208.t0": "、小写字母", - "find.l212.t0": "、大写字母", - "find.l216.t0": "、特殊字符", - "find.l230.t0": "两次密码不一致", - "find.l286.t0": "重新获取(", - "find.l7.t0": "请确认您的账号已绑定此手机号", - }, - "loginPage": { - }, - "logistics": { - }, - "map": { - }, - "member": { - "account.l10.t0": "提现到余额", - "account.l106.t0": "操作提示", - "account.l107.t0": "确定要删除该账户吗?", - "account.l118.t0": "删除成功", - "account.l123.t0": "删除失败", - "account.l184.t0": "银行", - "account.l32.t0": "修改", - "account.l37.t0": "设为默认账户", - "account.l55.t0": "暂无账户信息,请添加", - "account_edit.l139.t0": "微信零钱", - "account_edit.l163.t0": "请输入姓名", - "account_edit.l178.t0": "请选择账户类型", - "account_edit.l20.t0": "请输入银行名称", - "account_edit.l226.t0": "添加成功", - "account_edit.l23.t0": "提现账号", - "account_edit.l230.t0": "修改成功", - "account_edit.l24.t0": "请输入提现账号", - "account_edit.l5.t0": "请输入真实姓名", - "account_edit.l67.t0": "编辑账户", - "account_edit.l71.t0": "新增账户", - "address.l196.t0": "确定要删除该地址吗?", - "address.l201.t0": "默认地址,不能删除", - "address.l247.t0": "修改默认地址成功", - "address.l293.t0": "PC端微信不支持一键获取地址", - "address.l38.t0": "设为默认地址", - "address.l57.t0": "暂无收货地址,请添加", - "address_edit.l138.t0": "编辑收货地址", - "address_edit.l142.t0": "新增收货地址", - "address_edit.l200.t0": "数据有误", - "address_edit.l233.t0": "是否授权当前位置", - "address_edit.l234.t0": "需要获取您的地理位置,请确认授权,否则地图功能将无法使用", - "address_edit.l241.t0": "授权成功", - "address_edit.l259.t0": "授权失败", - "address_edit.l319.t0": "详细地址不能为空", - "address_edit.l4.t0": "地址信息", - "address_edit.l44.t0": "请选择省市区县", - "apply_withdrawal.l109.t0": "未开启提现", - "apply_withdrawal.l19.t0": "请添加提现方式", - "apply_withdrawal.l24.t0": "提现金额", - "apply_withdrawal.l34.t0": "可提现余额:", - "apply_withdrawal.l40.t0": ",手续费为", - "assets.l18.t0": "现金余额", - "assets.l22.t0": "储值余额", - "assets.l33.t0": "订单资产", - "assets.l46.t0": "退款中", - "assets.l5.t0": "风险提示:确认申请后您的资产将被清空且不可找回!", - "assets.l54.t0": "分销资产", - "assets.l59.t0": "可提现佣金", - "assets.l63.t0": "提现中佣金", - "assets.l67.t0": "待结算订单", - "assets.l73.t0": "上一步", - "assets.l74.t0": "确认申请", - "assets.l9.t0": "账户资产", - "balance.l19.t0": "账户余额(元)", - "balance.l24.t0": "现金余额(元)", - "balance.l28.t0": "储值余额(元)", - "balance.l33.t0": "充值", - "balance.l49.t0": "余额明细", - "balance.l56.t0": "充值记录", - "balance_detail.l124.t0": "${year}年${month}月", - "balance_detail.l46.t0": "暂无余额明细", - "balance_detail.l68.t0": "收入", - "balance_detail.l71.t0": "支出", - "cancellation.l13.t0": "勾选即表示您已阅读并同意本协议", - "cancellation.l15.t0": "下一步", - "cancellation.l63.t0": "请先勾选同意协议", - "cancelrefuse.l5.t0": "您的申请已拒绝", - "cancelrefuse.l6.t0": "拒绝理由:", - "cancelrefuse.l8.t0": "返回", - "cancelstatus.l16.t0": "等待审核", - "cancelstatus.l17.t0": "等待审核中,审核通过后您的账号将直接被删除", - "cancelstatus.l26.t0": "审核通过,注销完成", - "cancelstatus.l27.t0": "您已成功注销账号,期待下一次与您相遇", - "cancelstatus.l33.t0": "撤销申请", - "cancelstatus.l8.t0": "提交申请", - "cancelstatus.l84.t0": "风险提示", - "cancelstatus.l85.t0": "确定要撤销申请吗?", - "cancelstatus.l9.t0": "您已提交申请,请耐心等待~", - "cancelsuccess.l7.t0": "您已成功注销账号", - "cancelsuccess.l8.t0": "待下次与您更好的相遇,如需再次使用,请重新注册", - "card.l104.t0": "会员卡说明", - "card.l174.t0": "专属会员权益,快来体验", - "card.l25.t0": "会员大礼包等权益", - "card.l31.t0": "立即续费", - "card.l42.t0": "会员权益", - "card.l52.t0": "全场包邮", - "card.l53.t0": "享受商品包邮服务", - "card.l57.t0": "消费折扣", - "card.l58.t0": "部分商品下单可享", - "card.l62.t0": "积分回馈", - "card.l63.t0": "下单享", - "card.l72.t0": "开卡礼包", - "card.l81.t0": "积分礼包", - "card.l82.t0": "赠送", - "card.l86.t0": "红包礼包", - "card.l91.t0": "优惠券礼包", - "card_buy.l175.t0": "充值开通", - "card_buy.l214.t0": "暂无可开会员卡", - "card_buy.l353.t0": "您有尚未过期的会员卡,再次购卡会覆盖掉之前的卡,是否继续?", - "card_buy.l81.t0": "卡种选择", - "collection.l33.t0": "暂无关注的商品", - "collection.l33.t1": "赶紧去逛逛, 关注心仪的商品吧", - "coupon.l45.t0": "(最大优惠", - "coupon.l5.t0": "未使用", - "coupon.l6.t0": "已使用", - "footprint.l137.t0": "请选择要删除的数据!", - "footprint.l4.t0": "管理", - "footprint.l49.t0": "暂无浏览过的商品", - "footprint.l49.t1": "赶紧去逛逛, 发现更多商品吧", - "footprint.l57.t0": "全选", - "footprint.l59.t0": "删除", - "info.l101.t0": "退出登录", - "info.l14.t0": "账号", - "info.l37.t0": "性别", - "info.l43.t0": "生日", - "info.l50.t0": "密码", - "info.l66.t0": "所在地址", - "info.l75.t0": "注销账号", - "info.l83.t0": "版本号", - "info_edit.l10.t0": "用户名仅可修改一次,请谨慎设置", - "info_edit.l120.t0": "短信验证码", - "info_edit.l131.t0": "一键授权绑定", - "info_edit.l134.t0": "手动绑定", - "info_edit.l139.t0": "所在地区", - "info_edit.l147.t0": "详细地址", - "info_edit.l57.t0": "请选择生日", - "info_edit.l7.t0": "用户名", - "info_edit.l71.t0": "请先绑定手机再执行该操作", - "info_edit.l72.t0": "立即绑定", - "info_edit.l77.t0": "原密码", - "info_edit.l82.t0": "新密码", - "info_edit.l87.t0": "再次输入", - "invite_friends.l126.t0": "如何邀请好友", - "invite_friends.l133.t0": "分享链接给好友", - "invite_friends.l142.t0": "好友进入", - "invite_friends.l151.t0": "好友注册成功获得奖励", - "invite_friends.l17.t0": "立即邀请", - "invite_friends.l20.t0": "我的好友", - "invite_friends.l217.t0": "活动说明", - "invite_friends.l50.t0": "没有更多数据了", - "invite_friends.l55.t0": "您还没有邀请到新朋友哦", - "invite_friends.l56.t0": "邀请好友,赚取好礼。赶紧去试试吧~", - "invite_friends.l61.t0": "邀请好友奖励", - "invite_friends.l71.t0": "现金红包", - "invite_friends.l98.t0": "分享给好友,让好友通过你的分享链接进入并注册登录,可获得以下奖励:", - "level.l100.t0": "提供", - "level.l106.t0": "享受积分回馈服务", - "level.l113.t0": "会员礼包", - "level.l12.t0": "当前等级:", - "level.l268.t0": "将前往详情页面", - "level.l57.t0": "当前等级", - "level.l59.t0": "当前成长值", - "level.l72.t0": "您现在已经是最高等级", - "level.l91.t0": "包邮服务", - "level.l92.t0": "提供商品包邮服务", - "level.l98.t0": "享受消费折扣服务", - "level.l99.t0": "不享受任何消费折扣和其他权益", - "level_growth_rules.l23.t0": "什么是成长值", - "level_growth_rules.l25.t0": "成长值是消费者在店铺成为会员后,通过消费计算出来的值。成长值决定会员等级,会员等级越高,所享受的会员权益和会员礼包就越多。", - "level_growth_rules.l30.t0": "如何获得成长值", - "level_growth_rules.l33.t0": "1、注册会员送x成长值。", - "level_growth_rules.l34.t0": "2、会员充值到余额送x成长值。", - "level_growth_rules.l35.t0": "3、会员签到送x成长值。", - "level_growth_rules.l36.t0": "4、会员消费x元,交易完成即可获得x个成长值。", - "modify_face.l117.t0": "头像修改成功", - "modify_face.l14.t0": "点击上传", - "modify_face.l22.t0": "确认保存", - "modify_face.l23.t0": "重新上传", - "modify_face.l95.t0": "头像上传失败", - "pay_password.l10.t0": "输入短信验证码", - "pay_password.l11.t0": "请设置支付密码", - "pay_password.l12.t0": "请再次输入", - "pay_password.l152.t0": "两次输入的密码不一致", - "pay_password.l3.t0": "请输入6位支付密码,建议不要使用重复或连续数字", - "pay_password.l37.t0": "获取验证码", - "pay_password.l4.t0": "验证码已发送至", - "pay_password.l52.t0": "设置支付密码需要先绑定手机号,是否立即绑定?", - "point.l20.t0": "当前积分", - "point.l24.t0": "累计积分", - "point.l28.t0": "累计消费", - "point.l32.t0": "今日获得", - "point.l48.t0": "积分商城", - "point.l53.t0": "做任务赚积分", - "point.l57.t0": "每日签到", - "point.l58.t0": "连续签到可获得更多积分", - "point.l60.t0": "去签到", - "point.l65.t0": "购买商品", - "point.l66.t0": "购买商品可获得积分", - "point.l68.t0": "去下单", - "public.js.info.l157.t0": "个人资料", - "public.js.info.l404.t0": "与原真实姓名一致,无需修改", - "public.js.info.l411.t0": "真实姓名不能为空", - "public.js.info.l579.t0": "新密码长度不能小于", - "public.js.info.l58.t0": "未知", - "public.js.info.l612.t0": "新密码不能与原密码相同", - "public.js.info.l62.t0": "男", - "public.js.info.l67.t0": "女", - "public.js.info.l726.t0": "已发送(", - "public.js.info.l744.t0": "请勿重复点击", - "public.js.info.l869.t0": "请选择所在地区", - "public.js.info.l874.t0": "请输入详细地址", - "public.js.member-public.l64.t0": "确定要注销当前账号吗?", - "public.js.signin.l201.t0": "签到未开启", - "public.js.signin.l236.t0": "签到有礼", - "public.js.signin.l237.t0": "天天签到,积分好礼送不停", - "public.js.signin.l268.t0": "签到有礼,天天签到,积分好礼送不停", - "public.js.signin.l31.t0": "商家未开启会员签到", - }, - "memberInfo": { - }, - "merch": { - "detail.l102.t0": "立即咨询", - "detail.l31.t0": "上滑查看更多", - "detail.l35.t0": "↑ 收起", - "detail.l35.t1": "↓ 展开", - "detail.l7.t0": "请输入您要搜索的商品", - "merchcategory.l83.t0": "物业", - "merchcategory.l87.t0": "鞋里革", - "public.edit.l103.t0": "长期限购", - "public.edit.l126.t0": "编辑商品", - "public.edit.l133.t0": "添加商品", - "public.edit.l170.t0": "商品不存在", - "public.edit.l496.t0": "商品可以属于多个分类,最多10个", - "public.edit.l533.t0": "添加卡密【", - "public.edit.l56.t0": "下架", - "public.edit.l56.t1": "上架", - "public.edit.l578.t0": "商品简介不能超过100个字符", - "public.edit.l58.t0": "当日达", - "public.edit.l58.t1": "次日达", - "public.edit.l58.t2": "隔日达", - "public.edit.l58.t3": "自定义", - "public.edit.l585.t0": "请上传商品图片", - "public.edit.l63.t0": "自动发货", - "public.edit.l635.t0": "请输入销售价", - "public.edit.l641.t0": "[销售价]格式输入错误", - "public.edit.l648.t0": "[原价价]格式输入错误", - "public.edit.l658.t0": "请输入库存", - "public.edit.l665.t0": "[库存]格式输入错误", - "public.edit.l67.t0": "手动发货", - "public.edit.l671.t0": "[起售]格式输入错误", - "public.edit.l677.t0": "起售数量不能小于0", - "public.edit.l71.t0": "到店核销", - "public.edit.l81.t0": "自动收货", - "public.edit.l85.t0": "买家确认收货", - "public.edit.l908.t0": "请选择商品表单", - "public.edit.l929.t0": "请选择供应商", - "public.edit.l93.t0": "购买后几日有效", - "public.edit.l93.t1": "指定过期日期", - "public.edit.l96.t0": "添加卡密", - "public.edit.l99.t0": "单次限购", - "public.js.list.l80.t0": "商家不存在", - }, - "mescroll": { - }, - "navbar": { - }, - "newGift": { - }, - "note": { - }, - "notice": { - "detail.l87.t0": "[公告]", - "list.l10.t0": "置顶", - "list.l18.t0": "暂无公告", - }, - "order": { - "_components.common-payment.l100.t0": "送达时间", - "_components.common-payment.l102.t0": "请选择送达时间", - "_components.common-payment.l128.t0": "营业时间:", - "_components.common-payment.l138.t0": "姓名", - "_components.common-payment.l144.t0": "预留手机", - "_components.common-payment.l149.t0": "提货时间", - "_components.common-payment.l156.t0": "当前无自提门店,请选择其它配送方式", - "_components.common-payment.l192.t0": "该商品不支持", - "_components.common-payment.l227.t0": "买家留言", - "_components.common-payment.l230.t0": "无留言", - "_components.common-payment.l238.t0": "已选择1张优惠券", - "_components.common-payment.l239.t0": "优惠", - "_components.common-payment.l242.t0": "不使用优惠券", - "_components.common-payment.l251.t0": "小计:", - "_components.common-payment.l27.t0": "手机号码", - "_components.common-payment.l276.t0": "已使用优惠券,优惠", - "_components.common-payment.l28.t0": "请输入您的手机号码", - "_components.common-payment.l285.t0": "活动优惠", - "_components.common-payment.l293.t0": "使用", - "_components.common-payment.l301.t0": "发票", - "_components.common-payment.l303.t0": "纸质", - "_components.common-payment.l303.t1": "电子", - "_components.common-payment.l304.t0": "无需发票", - "_components.common-payment.l316.t0": "本单预计可省", - "_components.common-payment.l335.t0": "商品金额", - "_components.common-payment.l342.t0": "运费", - "_components.common-payment.l351.t0": "税费", - "_components.common-payment.l361.t0": "发票邮寄费", - "_components.common-payment.l385.t0": "积分抵扣", - "_components.common-payment.l393.t0": "会员卡", - "_components.common-payment.l403.t0": "购买前请先阅读", - "_components.common-payment.l403.t1": ",下单即代表同意该协议", - "_components.common-payment.l408.t0": "合计:", - "_components.common-payment.l414.t0": "提交订单", - "_components.common-payment.l415.t0": "差", - "_components.common-payment.l452.t0": "已为您甄选出附近所有相关门店", - "_components.common-payment.l469.t0": "地址:", - "_components.common-payment.l478.t0": "所选择收货地址附近没有可以自提的门店", - "_components.common-payment.l500.t0": "留言前建议先与商家协调一致", - "_components.common-payment.l551.t0": "长期有效", - "_components.common-payment.l557.t0": "暂无可用的优惠券", - "_components.common-payment.l57.t0": "请设置收货地址", - "_components.common-payment.l587.t0": "买家信息", - "_components.common-payment.l602.t0": "选择次卡", - "_components.common-payment.l610.t0": "不限次数", - "_components.common-payment.l611.t0": "剩余", - "_components.common-payment.l7.t0": "确认订单", - "_components.common-payment.l75.t0": "点击切换", - "_components.common-payment.l81.t0": "您的附近没有可配送的门店,请选择其他配送方式", - "_components.common-payment.payment.l134.t0": "周卡", - "_components.common-payment.payment.l135.t0": "周", - "_components.common-payment.payment.l142.t0": "月卡", - "_components.common-payment.payment.l150.t0": "季卡", - "_components.common-payment.payment.l151.t0": "季", - "_components.common-payment.payment.l158.t0": "年卡", - "_components.common-payment.payment.l159.t0": "年", - "_components.common-payment.payment.l487.t0": "请输入预留手机", - "_components.common-payment.payment.l500.t0": "商家未设置配送方式", - "_components.common-payment.payment.l509.t0": "请先选择您的收货地址", - "_components.common-payment.payment.l517.t0": "没有可提货的门店,请选择其他配送方式", - "_components.common-payment.payment.l535.t0": "请选择提货时间", - "_components.common-payment.payment.l544.t0": "没有可配送的门店,请选择其他配送方式", - "_components.common-payment.payment.l840.t0": "请填写发票抬头", - "_components.common-payment.payment.l846.t0": "请填写纳税人识别号", - "_components.common-payment.payment.l852.t0": "请填写发票邮寄地址", - "_components.common-payment.payment.l858.t0": "请填写邮箱", - "_components.common-payment.payment.l866.t0": "请填写正确的邮箱", - "_components.common-payment.payment.l873.t0": "请选择发票内容", - "detail.l106.t0": "提货码:", - "detail.l109.t0": "复制", - "detail.l16.t0": "订单关闭原因:", - "detail.l192.t0": "申请售后", - "detail.l192.t1": "申请退款", - "detail.l198.t0": "查看售后", - "detail.l198.t1": "查看退款", - "detail.l208.t0": "订单类型:", - "detail.l214.t0": "订单编号:", - "detail.l221.t0": "订单交易号:", - "detail.l227.t0": "创建时间:", - "detail.l233.t0": "关闭时间:", - "detail.l241.t0": "支付方式:", - "detail.l247.t0": "支付时间:", - "detail.l254.t0": "配送方式:", - "detail.l260.t0": "买家留言:", - "detail.l266.t0": "活动优惠:", - "detail.l274.t0": "发票类型:", - "detail.l276.t0": "纸质发票", - "detail.l276.t1": "电子发票", - "detail.l280.t0": "发票抬头类型:", - "detail.l282.t0": "个人", - "detail.l282.t1": "企业", - "detail.l286.t0": "发票抬头:", - "detail.l293.t0": "发票内容:", - "detail.l299.t0": "发票邮寄地址:", - "detail.l305.t0": "发票接收邮件:", - "detail.l329.t0": "我的卡包:", - "detail.l350.t0": "请将条形码或二维码出示给核销员", - "detail.l360.t0": "核销信息", - "detail.l362.t0": "核销次数", - "detail.l37.t0": "收货地址:", - "detail.l372.t0": "有效期", - "detail.l376.t0": "永久有效", - "detail.l382.t0": "核销记录", - "detail.l387.t0": "核销人", - "detail.l393.t0": "核销时间", - "detail.l400.t0": "暂无核销记录", - "detail.l406.t0": "卡密信息", - "detail.l409.t0": "卡号:", - "detail.l416.t0": "密码:", - "detail.l42.t0": "送达时间:", - "detail.l47.t0": "配送员:", - "detail.l51.t0": "外卖电话:", - "detail.l537.t0": "订单调整", - "detail.l568.t0": "使用余额", - "detail.l589.t0": "实付金额:", - "detail.l601.t0": "评价", - "detail.l602.t0": "追评", - "detail.l737.t0": "未获取到订单信息!", - "detail.l84.t0": "当前无自提门店", - "detail_point.l126.t0": "关闭", - "detail_point.l128.t0": "支付", - "detail_point.l14.t0": "待支付", - "detail_point.l14.t1": "已完成", - "detail_point.l15.t0": "已关闭", - "detail_point.l225.t0": "确定关闭此次兑换?", - "detail_point.l236.t0": "关闭成功", - "detail_point.l99.t0": "使用积分", - "list.l141.t0": "查看详情", - "list.l152.t0": "合并付款", - "list.l297.t0": "待付款", - "list.l302.t0": "待发货", - "list.l307.t0": "待收货", - "list.l317.t0": "待使用", - "list.l35.t0": "订单号:", - "list.l6.t0": "请输入商品名称/订单编号", - "list.l74.t0": "加购物车", - "payment.l37.t0": "满减送", - "payment.l48.t0": "购买可享受满", - "payment.l66.t0": "购物满", - "payment.l73.t0": "可得", - "public.js.orderMethod.l13.t0": "商家已将支付金额调整为", - "public.js.orderMethod.l13.t1": "元,是否继续支付?", - "public.js.orderMethod.l176.t0": "您确定要进行收货吗?", - "public.js.orderMethod.l47.t0": "您确定要关闭该订单吗?", - "public.js.orderMethod.l60.t0": "当前订单可能存在拼团,维权等操作,", - "public.js.orderMethod.l61.t0": "不可以关闭哦!", - "public.js.orderMethod.l81.t0": "您确定已经收到货物了吗?", - "public.js.refundMethod.l10.t0": "撤销之后本次申请将会关闭,如后续仍有问题可再次发起申请。", - "public.js.refundMethod.l11.t0": "暂不撤销", - }, - "page": { - "index.l108.t0": "请确认门店", - "index.l115.t0": "重新定位", - "index.l119.t0": "当前门店", - "index.l130.t0": "确认进入", - "index.l133.t0": "选择其他门店", - "index.l16.t0": "关注公众号", - "index.l47.t0": "跳过", - "index.l89.t0": "关注了解更多", - "index.public.js.index.l121.t0": "构建版本信息", - "index.public.js.index.l122.t0": "提交 ID: ${v.commitId}\\n构建时间: ${v.buildTime}", - "index.public.js.index.l126.t0": "未获取到构建版本信息", - }, - "pay": { - }, - "payment": { - }, - "picker": { - }, - "pinfan": { - }, - "pintuan": { - }, - "point": { - "detail.l129.t0": "属性", - "detail.l144.t0": "商品属性", - "detail.l187.t0": "兑换详情", - "detail.l195.t0": "暂无兑换详情!", - "detail.l208.t0": "登录之后方可兑换", - "detail.l213.t0": "积分不足", - "detail.l296.t0": "仅需", - "detail.l296.t1": "积分即可兑换", - "detail.l77.t0": "领取之日起", - "detail.l77.t1": "天内有效", - "detail.l78.t0": "到期", - "goods_list.l29.t0": "上新时间", - "goods_list.l79.t0": "立即兑换", - "goods_list.l99.t0": "积分区间", - "list.l125.t0": "可用", - "list.l128.t0": "全场券", - "list.l13.t0": "搜索商品", - "list.l148.t0": "积分换红包", - "list.l181.t0": "积分换礼品", - "list.l234.t0": "积分说明", - "list.l239.t0": "积分的获取", - "list.l240.t0": "1、积分可在注册、签到、分享、消费、充值时获得。", - "list.l241.t0": "2、在购买部分商品时可获得积分。", - "list.l242.t0": "积分的使用", - "list.l243.t0": "1、积分可用于兑换积分中心的商品。", - "list.l244.t0": "2、积分可在参与某些活动时使用。", - "list.l245.t0": "3、积分不得转让,出售,不设有效期。", - "list.l246.t0": "积分的查询", - "list.l247.t0": "1、积分可在会员中心中查询具体数额以及明细。", - "list.l276.t0": "积分换好物", - "list.l305.t0": "商家未开启积分商城", - "list.l31.t0": "我的积分", - "list.l40.t0": "提醒", - "list.l41.t0": "积分兑好礼,每日上新换不停!", - "list.l50.t0": "活动规则", - "list.l55.t0": "储值赚积分", - "list.l583.t0": "暂无相关活动", - "list.l59.t0": "兑换记录", - "list.l63.t0": "积分抽奖", - "list.l67.t0": "积分明细", - "list.l84.t0": "储值", - "list.l86.t0": "去储值", - "list.l94.t0": "积分换券", - "order_list.l85.t0": "暂无积分兑换订单", - "payment.l133.t0": "自提时间", - "payment.l217.t0": "所需积分", - "public.js.payment.l283.t0": "订单未创建", - "public.js.payment.l285.t0": "去设置", - "public.js.payment.l318.t0": "请输入正确的手机号码", - "public.js.payment.l356.t0": "请输入正确的预留手机", - "public.js.payment.l363.t0": "请选择自提时间", - "public.js.payment.l378.t0": "请选择配送时间", - "public.js.payment.l95.t0": "未获取到创建订单所需数据!", - }, - "presale": { - }, - "privacy": { - }, - "promotion": { - }, - "recharge": { - }, - "refund": { - }, - "reward": { - }, - "seal": { - "medium.detail.l17.t0": "导出图片", - "medium.detail.l18.t0": "导出PDF", - "medium.detail.l29.t0": "搜索结果", - "medium.search.l6.t0": "请输入介质名称", - "structure.l12.t0": "选型结果:", - "structure.l23.t0": "结果文件", - "structure.l6.t0": "当前选择:", - }, - "seckill": { - }, - "share": { - }, - "sku": { - }, - "store": { - }, - "store_notes": { - }, - "storeclose": { - }, - "time": { - }, - "tool": { - "_components.img-cropping.l212.t0": "加载中...", - "_components.img-cropping.l22.t0": "预览", - "_components.img-cropping.l23.t0": "上传", - "_components.img-cropping.l235.t0": "裁剪框的宽或高没有设置", - "_components.img-cropping.l255.t0": "请选择正确图片", - "_components.ns-birthday-gift.l11.t0": "感谢您一直以来的支持,在您生日到来之际,特为您送上最真诚的祝福!", - "_components.ns-birthday-gift.l14.t0": "生日贺礼", - "_components.ns-birthday-gift.l33.t0": "元红包", - "_components.ns-birthday-gift.l35.t0": "不可提现红包", - "_components.ns-birthday-gift.l45.t0": "可提现红包", - "_components.ns-birthday-gift.l57.t0": "元优惠劵", - "_components.ns-new-gift.l14.t0": "感谢您一直以来的支持,为回馈会员,商城", - "_components.ns-new-gift.l23.t0": "用于参与活动购买商品时抵扣", - "agreement.contenr.l11.t0": "暂无内容", - "agreement.contenr.l12.t0": "该协议内容暂未设置", - "agreement.contenr.l13.t0": "重新加载", - "cases.index.l143.t0": "正在加载", - "cases.index.l167.t0": "文件不存在", - "cases.index.l22.t0": "完成时间:", - "cases.index.l31.t0": "查看PDF文件", - "cases.index.l47.t0": "在线留言", - "cases.index.l56.t0": "请输入您的姓名", - "cases.index.l60.t0": "联系方式", - "cases.index.l62.t0": "请输入您的手机号", - "cases.index.l66.t0": "留言内容", - "cases.index.l68.t0": "请输入留言内容", - "file-preview.l15.t0": "文件地址不存在", - "file-preview.l32.t0": "不支持的文件类型", - "files.list.l32.t0": "暂无文件", - "files.list.l5.t0": "请输入您要搜索的文件名称", - "form.formdata.l72.t0": "参数错误", - "form.l8.t0": "请填写表单所需信息", - "goods.brand.l14.t0": "暂无更多品牌,去首页看看吧", - "goods.brand.l79.t0": "你想要的大牌都在这里", - "goods.coupon.l10.t0": "折扣券", - "goods.coupon.l102.t0": "商家未开启优惠券", - "goods.coupon.l11.t0": "无门槛券", - "goods.coupon.l44.t0": "指定商品", - "goods.coupon.l45.t0": "全场商品", - "goods.coupon.l52.t0": "适用门店:全部门店", - "goods.coupon.l52.t1": "适用门店:", - "goods.coupon.l65.t0": "已过期", - "goods.coupon.l66.t0": "已达上限", - "goods.coupon.l70.t0": "暂无可领取的优惠券", - "goods.coupon.l8.t0": "满减券", - "goods.coupon_receive.l13.t0": "有效期至", - "goods.coupon_receive.l186.t0": "来迟了该优惠券已被领取完了!", - "goods.coupon_receive.l189.t0": "该优惠券活动已结束!", - "goods.coupon_receive.l192.t0": "该优惠券活动已关闭", - "goods.coupon_receive.l195.t0": "该优惠券领取已达到上限!", - "goods.coupon_receive.l207.t0": "恭喜您获得一张", - "goods.coupon_receive.l207.t1": "元的优惠券", - "goods.coupon_receive.l212.t0": "满${this.info.at_least}元可用", - "goods.coupon_receive.l247.t0": ",满${this.info.at_least}元可用", - "goods.coupon_receive.l249.t0": ",无门槛优惠券", - "goods.coupon_receive.l27.t0": "注:扫描二维码或点击右上角进行分享", - "goods.evaluate.l47.t0": "商家回复:", - "goods.evaluate.l52.t0": "追加评价", - "goods.evaluate.l69.t0": "暂无商品评价", - "goods.evaluate.l82.t0": "好评", - "goods.evaluate.l82.t1": "中评", - "goods.evaluate.l82.t2": "差评", - "goods.not_exist.l5.t0": "您查看的商品不存在,可能已下架或被删除", - "goods.search.l15.t0": "历史搜索", - "goods.search.l165.t0": "搜索内容不能为空哦", - "goods.search.l33.t0": "热门搜索", - "goods.search.l86.t0": "确认删除全部历史记录?", - "goods.search.l99.t0": "确认删除该条历史记录?", - "order.activist.l10.t0": "退款成功", - "order.activist.l115.t0": "撤销成功", - "order.activist.l12.t0": "退款失败", - "order.activist.l30.t0": "退款:¥", - "order.evaluate.l16.t0": "描述相符", - "order.evaluate.l42.t0": "请在此处输入您的评价", - "order.evaluate.l47.t0": "请在此处输入您的追评", - "order.evaluate.l72.t0": "匿名", - "order.logistics.l37.t0": "承运公司:", - "order.public.js.evaluate.l160.t0": "商家未开启商品评价功能", - "order.public.js.evaluate.l168.t0": "商品的评价不能为空哦", - "order.public.js.evaluate.l200.t0": "评价成功", - "order.public.js.evaluate.l90.t0": "未获取到订单数据", - "order.refund.l17.t0": "退款无需退货", - "order.refund.l175.t0": "未获取到该订单项退款信息", - "order.refund.l18.t0": "没收到货,或与卖家协商同意无需退货只退款", - "order.refund.l24.t0": "退货退款", - "order.refund.l242.t0": "请选择退款原因", - "order.refund.l25.t0": "已收到货,需退还收到的货物", - "order.refund.l34.t0": "退款原因:", - "order.refund.l42.t0": "退款金额:", - "order.refund.l48.t0": "退款说明", - "order.refund.l54.t0": "请输入退款说明(选填)", - "order.refund.l81.t0": "退款原因", - "order.refund_batch.l26.t0": "退款方式:", - "order.refund_detail.l10.t0": "如果商家逾期未处理,平台将自动通过申请并退款给你", - "order.refund_detail.l100.t0": "物流说明", - "order.refund_detail.l106.t0": "选填", - "order.refund_detail.l121.t0": "买家", - "order.refund_detail.l121.t1": "卖家", - "order.refund_detail.l13.t0": "如果商家确认收货将会退款给你", - "order.refund_detail.l139.t0": "返回详情", - "order.refund_detail.l14.t0": "如果商家拒绝收货,该次退款将会关闭,你可以重新发起退款", - "order.refund_detail.l19.t0": "协商记录", - "order.refund_detail.l24.t0": "退货地址", - "order.refund_detail.l26.t0": "收货人:", - "order.refund_detail.l29.t0": "联系方式:", - "order.refund_detail.l32.t0": "退货地址:", - "order.refund_detail.l38.t0": "退款信息", - "order.refund_detail.l51.t0": "仅退款", - "order.refund_detail.l51.t1": "退款退货", - "order.refund_detail.l52.t0": "原路退款", - "order.refund_detail.l52.t1": "线下退款", - "order.refund_detail.l52.t2": "退款到余额", - "order.refund_detail.l52.t3": "退款途径:", - "order.refund_detail.l56.t0": "退款编号:", - "order.refund_detail.l57.t0": "申请时间:", - "order.refund_detail.l58.t0": "退款时间:", - "order.refund_detail.l59.t0": "退款说明:", - "order.refund_detail.l60.t0": "退款积分:", - "order.refund_detail.l76.t0": "物流公司", - "order.refund_detail.l8.t0": "如果商家拒绝,你可重新发起申请", - "order.refund_detail.l80.t0": "请输入物流公司", - "order.refund_detail.l88.t0": "物流单号", - "order.refund_detail.l9.t0": "如果商家同意,将通过申请并退款给你", - "order.refund_detail.l92.t0": "请输入物流单号", - "order.refund_goods_select.l28.t0": "请选择商品", - "order.refund_goods_select.l53.t0": "未查找到订单信息", - "pay.cashier.l23.t0": "店铺尚未配置支付方式!", - "pay.cashier.l25.t0": "该支付单据已支付", - "pay.cashier.l27.t0": "未获取到支付信息", - "pay.result.l21.t0": "恭喜您获得", - "pay.result.l37.t0": "张优惠券", - "pay.result.l46.t0": "查看订单", - "pay.wx_pay.l6.t0": "点击右上角跳转到浏览器打开", - "recharge.list.l20.t0": "请输入充值金额", - "recharge.list.l276.t0": "请选择套餐", - "recharge.list.l29.t0": "售价", - "recharge.list.l34.t0": "其他金额", - "recharge.list.l44.t0": ">,优惠券X{{ list[isIndex].coupon_id.split(", - "recharge.list.l44.t1": ",优惠券X", - "recharge.list.l50.t0": "充值说明", - "recharge.list.l56.t0": ">,优惠券X{{ item.coupon_id.split(", - "recharge.list.l67.t0": "金额", - "recharge.list.l7.t0": "账户余额", - "recharge.list.l89.t0": "确认充值", - "recharge.order_list.l16.t0": "充值成功", - "recharge.order_list.l24.t0": "赠送:", - "recharge.order_list.l29.t0": "优惠券x", - "recharge.order_list.l34.t0": "暂无充值记录", - "storeclose.l41.t0": "该店铺已打烊...", - "storeclose.l45.t0": "店铺不存在", - "storeclose.l47.t0": "店铺打烊", - "weapp.order_shipping.l20.t0": "缺少merchant_trade_no参数", - "weapp.order_shipping.l32.t0": "未知错误", - }, - "topics": { - }, - "verification": { - }, - "video": { - }, - "vr": { - }, - "weapp": { - }, - "wxwork": { - }, - "yuyueDate": { - }, - "Filter": "筛选", - "Make": "立即咨询", - "Price": "价格", - "Random": "综合", - "Sales": "销量", - "Search": "请输入您要搜索的商品", - "about": "0B", - "account": "账号", - "accountInputPlaceholder": "请输入账号", - "accountPlaceholder": "请输入用户名", - "accountType": "账号类型", - "activist": "售后", - "addcart": "添加购物车", - "addressPlaceholder": "小区、街道、写字楼", - "agreeAgreementTip": "请先阅读并同意协议", - "aiNickname": "智能助手", - "aiThinking": "AI正在思考", - "alikeNickname": "与原昵称一致,无需修改", - "alikePhone": "与原手机号一致,无需修改", - "alikeusername": "与原用户名一致,无需修改", - "allElection": "全选", - "animateCodeInput": "请输入动态码", - "audioMessage": "语音消息", - "avatarSelectorTitle": "更换头像", - "buy": "购买", - "buynow": "立即购买", - "call": "一键拨打", - "cancellation": "注销账号", - "captchaPlaceholder": "请输入验证码", - "changeAvatar": "更换头像", - "changeAvatarDesc": "自定义您的聊天头像", - "changeNickname": "更换昵称", - "changeNicknameDesc": "自定义您的昵称", - "chatCleared": "聊天记录已清空,有什么可以帮助您的吗?", - "chooseFromAlbum": "从相册选择", - "commission": "佣金详情", - "commissiontext": "佣金", - "complete": "完成", - "completed": "已完成", - "confirmClearChat": "确定要清空聊天记录吗?", - "confirmCodeInput": "请输入验证码", - "confirmOpenLink": "确定要打开链接:", - "consignee": "姓名", - "consigneePlaceholder": "收货人姓名", - "consult": "立即咨询", - "contactInfo": "联系方式", - "copy": "复制", - "copyFail": "复制失败", - "copyFailed": "复制失败", - "copySuccess": "复制成功", - "defaultNickname": "我", - "del": "删除", - "details": "商品详情", - "dynacodeInputPlaceholder": "请输入动态码", - "dynacodePlaceholder": "请输入动态码", - "edit": "管理", - "editNickname": "修改昵称", - "emojiTitle": "表情", - "emptyTips": "暂无记录", - "enterCaptchaTip": "请输入验证码", - "enterCorrectMobileTip": "请输入正确的手机号", - "enterMobileTip": "请输入手机号", - "exchangeSuccess": "兑换成功", - "exclusiveCustomerService": "专属客服", - "expandEditorTitle": "编辑内容", - "express": "快递发货", - "fallbackWelcome": "您好!我是AI智能客服,很高兴为您服务!\\n\\n我可以帮您:\\n• 解答产品相关问题\\n• 处理订单问题\\n• 提供技术支持\\n• 推荐相关商品\\n\\n请告诉我您需要什么帮助?", - "featureDeveloping": "功能开发中", - "file": "文件", - "fileOpenFail": "文件打开失败", - "findanimateCode": "获取动态码", - "follow": "收藏", - "forgetPasswordText": "忘记密码?", - "getAddress": "一键获取地址", - "getDynacode": "获取动态验证码", - "goHome": "回到首页", - "home": "首页", - "image": "图片", - "improveService": "我们会改进服务", - "inputPlaceholder": "搜索商品", - "lang": "语言", - "leave": "立即留言", - "loadHistoryFail": "加载历史失败", - "loadMoreHistory": "加载更多历史消息", - "location": "位置", - "loginButtonText": "登录", - "loginSuccessTip": "登录成功", - "loginTpis": "点击登录 享受更多精彩信息", - "logout": "退出登录", - "logoutContent": "确定要退出登录吗", - "logoutTitle": "提示", - "make": "立即咨询", - "max": "已达最大限购数量", - "menuClearChat": "清空聊天", - "menuExport": "导出记录", - "menuHelp": "帮助", - "menuSettings": "设置", - "messageContent": "留言内容", - "mobile": "手机", - "mobileInputPlaceholder": "请输入您的手机号", - "mobilePhone": "手机", - "mobilePlaceholder": "收货人手机号", - "modify": "修改", - "modifyNickname": "修改昵称", - "moreFunctions": "更多功能", - "name": "姓名", - "newAddAccount": "新增账户", - "newAddAddress": "添加收货地址", - "newNicknamePlaceholder": "请输入您的新昵称", - "next": "下一步", - "nicknameChangeSuccess": "昵称修改成功", - "nicknameTip": "昵称长度限制1-12个字符,仅自己可见", - "noContentToCopy": "无可复制的内容", - "noEmityNickname": "昵称不能为空", - "noEmityUsername": "用户名不能为空", - "noMatchResult": "未找到匹配结果", - "oneClickNavigation": "一键导航", - "onlineMessage": "在线留言", - "openLink": "打开链接", - "openingFile": "打开文件中...", - "operationFailed": "操作失败,请重试", - "password": "密码", - "passwordInputPlaceholder": "请输入密码", - "passwordPlaceholder": "请输入密码", - "paymentAmount": "支付金额", - "paymentFail": "支付失败", - "paymentSuccess": "支付成功", - "paypassword": "支付密码", - "pleaseEnterMessage": "请输入留言内容", - "pleaseEnterMobile": "请输入您的手机号", - "pleaseEnterName": "请输入您的姓名", - "pleaseInputNewPassword": "请输入新密码", - "pleaseInputOldPassword": "请输入原始密码", - "privacyPolicy": "隐私协议", - "privacyPolicyText": "《隐私条款》", - "prompt": "提示", - "rePasswordPlaceholder": "请确认密码", - "realName": "真实姓名", - "receivingCity": "地区", - "receivingReply": "正在接收回复", - "recordingTip": "正在录音,松开结束", - "registerAgreementText": "若您未注册,则登录后将自动帮您注册。注册即视为同意", - "registrationAgreement": "注册协议", - "requestFailTip": "request:fail", - "retry": "重试", - "sales": "销量", - "save": "保存", - "search": "商品搜索", - "searchAtBottom": "已到底部", - "searchAtTop": "已到顶部", - "searchClose": "完成", - "searchEntrance": "搜索", - "searchPlaceholder": "搜索聊天记录", - "see": "查看兑换记录", - "sellout": "库存不足", - "send": "配送", - "serviceTemporaryUnavailable": "抱歉,服务暂时不可用,请稍后重试。", - "serviceTypeNotSupported": "当前客服类型不支持此页面", - "serviceUnavailable": "抱歉,AI服务暂时不可用,请稍后重试。", - "settingsTitle": "设置", - "settlement": "结算", - "sex": "性别", - "spec": "规格", - "startRecordTip": "点击开始录音", - "status": "该商品已下架", - "stock": "库存", - "submit": "提交", - "surePhoneNumber": "请输入正确的手机号", - "telephone": "电话", - "telephonePlaceholder": "收货人固定电话(选填)", - "thanksFeedback": "感谢您的反馈!", - "timeFormatBeforeYesterday": "前天", - "timeFormatYesterday": "昨天", - "title": "VR", - "toGoodsCategoryPage": "去逛逛", - "toLogin": "去登录", - "total": "合计", - "updateSuccess": "修改成功", - "userServiceAgreementText": "《用户服务协议》", - "videoMessage": "视频消息", - "voice": "语音", - "voiceInputFailed": "语音输入失败", - "voiceInputTitle": "语音输入", - "waitconfirm": "待收货", - "waitpay": "待付款", - "waitsend": "待发货", - "welcomeText": "您好,
欢迎使用", - "withdrawal": "提现", -}; diff --git a/lang/zh-cn/agreement/contenr.js b/lang/zh-cn/agreement/contenr.js new file mode 100644 index 0000000..e9f3538 --- /dev/null +++ b/lang/zh-cn/agreement/contenr.js @@ -0,0 +1 @@ +export const lang = {} \ No newline at end of file diff --git a/lang/zh-cn/ai-chat/index.js b/lang/zh-cn/ai-chat/index.js new file mode 100644 index 0000000..98d721c --- /dev/null +++ b/lang/zh-cn/ai-chat/index.js @@ -0,0 +1,104 @@ +export const lang = { + //title为每个页面的标题 + title: 'AI智能客服', + + // ====== 通用 ====== + cancel: '取消', + save: '保存', + send: '发送', + retry: '重试', + + // ====== 时间格式化 ====== + timeFormatToday: '今天', + timeFormatYesterday: '昨天', + timeFormatBeforeYesterday: '前天', + + // ====== ai-chat-message ====== + aiNickname: '智能助手', + defaultNickname: '我', + audioMessage: '语音消息', + videoMessage: '视频消息', + inputPlaceholder: '请输入您的问题...', + expandEditorTitle: '编辑内容', + loadMoreHistory: '加载更多历史消息', + loadingHistory: '加载历史消息中...', + aiThinking: 'AI正在思考', + receivingReply: '正在接收回复', + aiThinkingStatus1: 'AI正在思考', + aiThinkingStatus2: 'AI正在分析', + aiThinkingStatus3: 'AI正在检索', + aiThinkingStatus4: 'AI正在生成', + serviceUnavailable: '抱歉,AI服务暂时不可用,请稍后重试。', + serviceTemporaryUnavailable: '抱歉,服务暂时不可用,请稍后重试。', + noContentToCopy: '无可复制的内容', + copySuccess: '已复制', + copySelected: '已复制选中内容', + copyFail: '复制失败', + openingFile: '打开文件中...', + fileOpenFail: '文件打开失败', + loadHistoryFail: '加载历史失败', + about: '0B', + + // ====== ai-chat-search ====== + searchEntrance: '搜索', + searchPlaceholder: '搜索聊天记录', + searchClose: '完成', + noMatchResult: '未找到匹配结果', + searchAtTop: '已到顶部', + searchAtBottom: '已到底部', + + // ====== index.vue ====== + settingsTitle: '设置', + fallbackWelcome: '您好!我是AI智能客服,很高兴为您服务!\n\n我可以帮您:\n• 解答产品相关问题\n• 处理订单问题\n• 提供技术支持\n• 推荐相关商品\n\n请告诉我您需要什么帮助?', + changeAvatar: '更换头像', + changeAvatarDesc: '自定义您的聊天头像', + changeNickname: '更换昵称', + changeNicknameDesc: '自定义您的昵称', + clearChat: '清空聊天', + exportChat: '导出记录', + help: '帮助', + confirmClearChat: '确定要清空聊天记录吗?', + chatCleared: '聊天记录已清空,有什么可以帮助您的吗?', + featureDeveloping: '功能开发中', + thanksFeedback: '感谢您的反馈!', + improveService: '我们会改进服务', + openLink: '打开链接', + confirmOpenLink: '确定要打开链接:', + operationFailed: '操作失败,请重试', + prompt: '提示', + serviceTypeNotSupported: '当前客服类型不支持此页面', + + // ====== ai-chat-avatar-selector ====== + avatarSelectorTitle: '更换头像', + chooseFromAlbum: '从相册选择', + avatarChangeSuccess: '头像更换成功', + enableAlbumPermission: '请开启相册权限', + + // ====== ai-chat-emoji-panel ====== + emojiTitle: '表情', + + // ====== ai-chat-nickname-editor ====== + editNickname: '修改昵称', + newNicknamePlaceholder: '请输入您的新昵称', + nicknameTip: '昵称长度限制1-12个字符,仅自己可见', + nicknameChangeSuccess: '昵称修改成功', + + // ====== ai-chat-tools-panel ====== + moreFunctions: '更多功能', + image: '图片', + file: '文件', + voice: '语音', + location: '位置', + + // ====== ai-chat-voice-panel ====== + voiceInputTitle: '语音输入', + recordingTip: '正在录音,松开结束', + startRecordTip: '点击开始录音', + voiceInputFailed: '语音输入失败', + + // ====== index.vue - 菜单 ====== + menuClearChat: '清空聊天', + menuExport: '导出记录', + menuSettings: '设置', + menuHelp: '帮助' +} diff --git a/lang/zh-cn/article/detail.js b/lang/zh-cn/article/detail.js new file mode 100644 index 0000000..2d9ca88 --- /dev/null +++ b/lang/zh-cn/article/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '文章详情' +} diff --git a/lang/zh-cn/article/list.js b/lang/zh-cn/article/list.js new file mode 100644 index 0000000..129277a --- /dev/null +++ b/lang/zh-cn/article/list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: '文章列表', + emptyText:"当前暂无文章信息" +} diff --git a/lang/zh-cn/bale/detail.js b/lang/zh-cn/bale/detail.js new file mode 100644 index 0000000..02a0bea --- /dev/null +++ b/lang/zh-cn/bale/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '' +} diff --git a/lang/zh-cn/bale/payment.js b/lang/zh-cn/bale/payment.js new file mode 100644 index 0000000..a6fa0ed --- /dev/null +++ b/lang/zh-cn/bale/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '待付款订单' +} \ No newline at end of file diff --git a/lang/zh-cn/bargain/detail.js b/lang/zh-cn/bargain/detail.js new file mode 100644 index 0000000..c3c6999 --- /dev/null +++ b/lang/zh-cn/bargain/detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: '选择', + params: '参数', + service: '商品服务', + allGoods: '全部商品', + image: '图片', + video: '视频', +} diff --git a/lang/zh-cn/bargain/launch.js b/lang/zh-cn/bargain/launch.js new file mode 100644 index 0000000..4a271f2 --- /dev/null +++ b/lang/zh-cn/bargain/launch.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '砍价详情' +} diff --git a/lang/zh-cn/bargain/list.js b/lang/zh-cn/bargain/list.js new file mode 100644 index 0000000..efbd47b --- /dev/null +++ b/lang/zh-cn/bargain/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '砍价专区' +} diff --git a/lang/zh-cn/bargain/my_bargain.js b/lang/zh-cn/bargain/my_bargain.js new file mode 100644 index 0000000..bb9b398 --- /dev/null +++ b/lang/zh-cn/bargain/my_bargain.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '我的砍价' +} diff --git a/lang/zh-cn/bargain/payment.js b/lang/zh-cn/bargain/payment.js new file mode 100644 index 0000000..88657dd --- /dev/null +++ b/lang/zh-cn/bargain/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '待付款订单' +} diff --git a/lang/zh-cn/combo/detail.js b/lang/zh-cn/combo/detail.js new file mode 100644 index 0000000..e67f6f4 --- /dev/null +++ b/lang/zh-cn/combo/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '组合套餐' +} diff --git a/lang/zh-cn/combo/payment.js b/lang/zh-cn/combo/payment.js new file mode 100644 index 0000000..88657dd --- /dev/null +++ b/lang/zh-cn/combo/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '待付款订单' +} diff --git a/lang/zh-cn/common.js b/lang/zh-cn/common.js new file mode 100644 index 0000000..bd649fc --- /dev/null +++ b/lang/zh-cn/common.js @@ -0,0 +1,66 @@ +export const lang = { + + // 底部选项卡 + tabBar: { + home: '首页', + category: '分类', + cart: '购物车', + member: '个人中心' + }, + + //公共 + common: { + //语言包名称 + name: '中文', + mescrollTextInOffset: '下拉刷新', + mescrollTextOutOffset: '释放更新', + mescrollEmpty: "暂无相关数据", + goodsRecommendTitle: '猜你喜欢', + currencySymbol: '¥', + submit: '提交', + searchTip: '请输入搜索关键词' + }, + + //客服 + customer: { + weChatKefu: '微信客服', + systemKefu: '专属客服', + weChatWorkKefu: '企业微信客服', + }, + + login: '登录/注册', + loginTpis: '点击登录 享受更多精彩信息', + toLogin: '去登录', + toGoodsCategoryPage: '去逛逛', + + getDynacode: '获取动态码', + + waitpay: '待付款', + waitsend: '待发货', + waitconfirm: '待收货', + activist: '售后', + completed: '已完成', + + buy: '购买', + buyNow: '立即购买', + addToCart: '加入购物车', + addToCartSuccess: '已加入购物车', + addToCartFail: '加入购物车失败', + addToCartFailMax: '已达到最大购买数量', + addToCartFailMin: '已达到最小购买数量', + addToCartFailStock: '库存不足', + + consult: '立即咨询', + consultSuccess: '咨询成功', + consultFail: '咨询失败', + + // 会员相关 + privacyPolicy: '隐私协议', + registrationAgreement: '注册协议', + cancellation: '账号注销', + logout: '退出登录', + logoutTitle: '提示', + logoutContent: '确定要退出登录吗', + + +} diff --git a/lang/zh-cn/contact/contact.js b/lang/zh-cn/contact/contact.js new file mode 100644 index 0000000..14121e4 --- /dev/null +++ b/lang/zh-cn/contact/contact.js @@ -0,0 +1,18 @@ +export const lang = { + //title为每个页面的标题 + title: '电子名片', + onlineMessage: '在线留言', + call: '一键拨打', + copy: '复制', + copyFailed: '复制失败', + copySuccess: '复制成功', + oneClickNavigation: '一键导航', + name: '姓名', + contactInfo: '联系方式', + messageContent: '留言内容', + pleaseEnterName: '请输入您的姓名', + pleaseEnterMobile: '请输入您的手机号', + pleaseEnterMessage: '请输入留言内容', + submit: '提交', + exclusiveCustomerService: '专属客服' +} diff --git a/lang/zh-cn/diy/diy.js b/lang/zh-cn/diy/diy.js new file mode 100644 index 0000000..74eb5f5 --- /dev/null +++ b/lang/zh-cn/diy/diy.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '', +} diff --git a/lang/zh-cn/fenxiao/apply.js b/lang/zh-cn/fenxiao/apply.js new file mode 100644 index 0000000..46bed58 --- /dev/null +++ b/lang/zh-cn/fenxiao/apply.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: '分销商申请' + title: '' +} diff --git a/lang/zh-cn/fenxiao/bill.js b/lang/zh-cn/fenxiao/bill.js new file mode 100644 index 0000000..5deadae --- /dev/null +++ b/lang/zh-cn/fenxiao/bill.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '账单' +} diff --git a/lang/zh-cn/fenxiao/follow.js b/lang/zh-cn/fenxiao/follow.js new file mode 100644 index 0000000..7ba4f3f --- /dev/null +++ b/lang/zh-cn/fenxiao/follow.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '我的关注' +} diff --git a/lang/zh-cn/fenxiao/goods_list.js b/lang/zh-cn/fenxiao/goods_list.js new file mode 100644 index 0000000..2c765c5 --- /dev/null +++ b/lang/zh-cn/fenxiao/goods_list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: '分销商品列表', + title: '' +} diff --git a/lang/zh-cn/fenxiao/index.js b/lang/zh-cn/fenxiao/index.js new file mode 100644 index 0000000..3f940bb --- /dev/null +++ b/lang/zh-cn/fenxiao/index.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: '分销中心', + title: '' +} diff --git a/lang/zh-cn/fenxiao/level.js b/lang/zh-cn/fenxiao/level.js new file mode 100644 index 0000000..a504074 --- /dev/null +++ b/lang/zh-cn/fenxiao/level.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: '分销商等级', + title: '' +} diff --git a/lang/zh-cn/fenxiao/order.js b/lang/zh-cn/fenxiao/order.js new file mode 100644 index 0000000..7db8bb1 --- /dev/null +++ b/lang/zh-cn/fenxiao/order.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: '分销订单', + title: '' +} diff --git a/lang/zh-cn/fenxiao/order_detail.js b/lang/zh-cn/fenxiao/order_detail.js new file mode 100644 index 0000000..6c02235 --- /dev/null +++ b/lang/zh-cn/fenxiao/order_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '订单详情' +} diff --git a/lang/zh-cn/fenxiao/promote_code.js b/lang/zh-cn/fenxiao/promote_code.js new file mode 100644 index 0000000..e462f20 --- /dev/null +++ b/lang/zh-cn/fenxiao/promote_code.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '推广海报' +} diff --git a/lang/zh-cn/fenxiao/team.js b/lang/zh-cn/fenxiao/team.js new file mode 100644 index 0000000..26c1595 --- /dev/null +++ b/lang/zh-cn/fenxiao/team.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: '我的团队' + title: '' +} diff --git a/lang/zh-cn/fenxiao/withdraw_apply.js b/lang/zh-cn/fenxiao/withdraw_apply.js new file mode 100644 index 0000000..5ed3079 --- /dev/null +++ b/lang/zh-cn/fenxiao/withdraw_apply.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: '提现申请' + title: '' +} diff --git a/lang/zh-cn/fenxiao/withdraw_list.js b/lang/zh-cn/fenxiao/withdraw_list.js new file mode 100644 index 0000000..6b4a6ae --- /dev/null +++ b/lang/zh-cn/fenxiao/withdraw_list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + // title: '提现记录' + title: '' +} diff --git a/lang/zh-cn/game/cards.js b/lang/zh-cn/game/cards.js new file mode 100644 index 0000000..ce82d23 --- /dev/null +++ b/lang/zh-cn/game/cards.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '刮刮乐' +} diff --git a/lang/zh-cn/game/record.js b/lang/zh-cn/game/record.js new file mode 100644 index 0000000..de9a180 --- /dev/null +++ b/lang/zh-cn/game/record.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '中奖纪录' +} diff --git a/lang/zh-cn/game/smash_eggs.js b/lang/zh-cn/game/smash_eggs.js new file mode 100644 index 0000000..4acf085 --- /dev/null +++ b/lang/zh-cn/game/smash_eggs.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '砸金蛋' +} diff --git a/lang/zh-cn/game/turntable.js b/lang/zh-cn/game/turntable.js new file mode 100644 index 0000000..3ebe1ec --- /dev/null +++ b/lang/zh-cn/game/turntable.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '大转盘' +} diff --git a/lang/zh-cn/goods/brand.js b/lang/zh-cn/goods/brand.js new file mode 100644 index 0000000..68694de --- /dev/null +++ b/lang/zh-cn/goods/brand.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '品牌专区' +} diff --git a/lang/zh-cn/goods/cart.js b/lang/zh-cn/goods/cart.js new file mode 100644 index 0000000..85f4341 --- /dev/null +++ b/lang/zh-cn/goods/cart.js @@ -0,0 +1,13 @@ +export const lang = { + //title为每个页面的标题 + title: '购物车', + complete: '完成', + edit: '管理', + allElection: '全选', + total: '合计', + settlement: '结算', + emptyTips: '暂无商品', + goForStroll: '去逛逛', + del: '删除', + login: '去登录' +} diff --git a/lang/zh-cn/goods/category.js b/lang/zh-cn/goods/category.js new file mode 100644 index 0000000..491be73 --- /dev/null +++ b/lang/zh-cn/goods/category.js @@ -0,0 +1,7 @@ +export const lang = { + //title为每个页面的标题 + title: '商品分类', + search:'商品搜索', + seeMore : '查看更多', + Make: "立即咨询" +} diff --git a/lang/zh-cn/goods/consult.js b/lang/zh-cn/goods/consult.js new file mode 100644 index 0000000..89b8e55 --- /dev/null +++ b/lang/zh-cn/goods/consult.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '商品咨询' +} diff --git a/lang/zh-cn/goods/consult_edit.js b/lang/zh-cn/goods/consult_edit.js new file mode 100644 index 0000000..c27770a --- /dev/null +++ b/lang/zh-cn/goods/consult_edit.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '我要咨询' +} diff --git a/lang/zh-cn/goods/coupon.js b/lang/zh-cn/goods/coupon.js new file mode 100644 index 0000000..0e6b51a --- /dev/null +++ b/lang/zh-cn/goods/coupon.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '优惠券领取' +} diff --git a/lang/zh-cn/goods/coupon_receive.js b/lang/zh-cn/goods/coupon_receive.js new file mode 100644 index 0000000..2bbf131 --- /dev/null +++ b/lang/zh-cn/goods/coupon_receive.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '领取优惠券' +} diff --git a/lang/zh-cn/goods/detail.js b/lang/zh-cn/goods/detail.js new file mode 100644 index 0000000..2ca424d --- /dev/null +++ b/lang/zh-cn/goods/detail.js @@ -0,0 +1,32 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: '选择', + details:'商品详情', + document:'文档详情', + params: '参数', + service: '商品服务', + allGoods: '全部商品', + image: '图片', + video: '视频', + home:'首页', + cart:'购物车', + leave:'立即留言', + make:'立即咨询', + + send:'配送', + express:'快递发货', + commission:'佣金详情', + commissiontext:'佣金', + addcart:'添加购物车', + buynow:'立即购买', + status:'该商品已下架', + sellout:'库存不足', + max:'已达最大限购数量', + makebtn:'立即咨询', + sales:'销量', + stock:'库存', + kefu:'客服', + follow:'收藏', + spec:'规格', +} diff --git a/lang/zh-cn/goods/evaluate.js b/lang/zh-cn/goods/evaluate.js new file mode 100644 index 0000000..3694418 --- /dev/null +++ b/lang/zh-cn/goods/evaluate.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '商品评价' +} diff --git a/lang/zh-cn/goods/list.js b/lang/zh-cn/goods/list.js new file mode 100644 index 0000000..475ef45 --- /dev/null +++ b/lang/zh-cn/goods/list.js @@ -0,0 +1,11 @@ +export const lang = { + //title为每个页面的标题 + title: '商品列表', + Random:'综合', + Sales:'销量', + Price:'价格', + Filter:'筛选', + Search:'请输入您要搜索的商品', + Make:'立即咨询', + +} diff --git a/lang/zh-cn/goods/not_exist.js b/lang/zh-cn/goods/not_exist.js new file mode 100644 index 0000000..7690bf6 --- /dev/null +++ b/lang/zh-cn/goods/not_exist.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '商品找不到', +} diff --git a/lang/zh-cn/goods/point.js b/lang/zh-cn/goods/point.js new file mode 100644 index 0000000..4c12e0b --- /dev/null +++ b/lang/zh-cn/goods/point.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '积分中心' +} diff --git a/lang/zh-cn/goods/search.js b/lang/zh-cn/goods/search.js new file mode 100644 index 0000000..70059c1 --- /dev/null +++ b/lang/zh-cn/goods/search.js @@ -0,0 +1,9 @@ +export const lang = { + //title为每个页面的标题 + title: '搜索', + history: '历史搜索', + hot: '热门搜索', + find: '搜索发现', + hidefind: '当前搜索发现已隐藏', + inputPlaceholder: '搜索商品' +} diff --git a/lang/zh-cn/groupbuy/detail.js b/lang/zh-cn/groupbuy/detail.js new file mode 100644 index 0000000..aa08c12 --- /dev/null +++ b/lang/zh-cn/groupbuy/detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: '选择', + params: '参数', + service: '商品服务', + allGoods: '全部商品', + image: '图片', + video: '视频' +} diff --git a/lang/zh-cn/groupbuy/list.js b/lang/zh-cn/groupbuy/list.js new file mode 100644 index 0000000..98b8fd7 --- /dev/null +++ b/lang/zh-cn/groupbuy/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '团购专区' +} diff --git a/lang/zh-cn/groupbuy/payment.js b/lang/zh-cn/groupbuy/payment.js new file mode 100644 index 0000000..88657dd --- /dev/null +++ b/lang/zh-cn/groupbuy/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '待付款订单' +} diff --git a/lang/zh-cn/help/detail.js b/lang/zh-cn/help/detail.js new file mode 100644 index 0000000..f872d86 --- /dev/null +++ b/lang/zh-cn/help/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '帮助详情' +} diff --git a/lang/zh-cn/help/list.js b/lang/zh-cn/help/list.js new file mode 100644 index 0000000..34c12e0 --- /dev/null +++ b/lang/zh-cn/help/list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: '帮助中心', + emptyText:"当前暂无帮助信息" +} diff --git a/lang/zh-cn/hongbao/list.js b/lang/zh-cn/hongbao/list.js new file mode 100644 index 0000000..94882b2 --- /dev/null +++ b/lang/zh-cn/hongbao/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '瓜分红包列表' +} diff --git a/lang/zh-cn/hongbao/my_hongbao.js b/lang/zh-cn/hongbao/my_hongbao.js new file mode 100644 index 0000000..e541b7e --- /dev/null +++ b/lang/zh-cn/hongbao/my_hongbao.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '我的红包列表' +} diff --git a/lang/zh-cn/index/index.js b/lang/zh-cn/index/index.js new file mode 100644 index 0000000..74eb5f5 --- /dev/null +++ b/lang/zh-cn/index/index.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '', +} diff --git a/lang/zh-cn/live/list.js b/lang/zh-cn/live/list.js new file mode 100644 index 0000000..69c6591 --- /dev/null +++ b/lang/zh-cn/live/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '直播', +} diff --git a/lang/zh-cn/login/find.js b/lang/zh-cn/login/find.js new file mode 100644 index 0000000..6cd27dd --- /dev/null +++ b/lang/zh-cn/login/find.js @@ -0,0 +1,12 @@ +export const lang = { + //title为每个页面的标题 + title: '找回密码', + findPassword: '找回密码', + accountPlaceholder: '请输入手机号', + captchaPlaceholder: "请输入验证码", + dynacodePlaceholder: '请输入动态码', + passwordPlaceholder: '请输入新密码', + rePasswordPlaceholder: '请确认新密码', + next: '下一步', + save: '确认修改' +} diff --git a/lang/zh-cn/login/login.js b/lang/zh-cn/login/login.js new file mode 100644 index 0000000..dded48e --- /dev/null +++ b/lang/zh-cn/login/login.js @@ -0,0 +1,38 @@ +export const lang = { + //title为每个页面的标题 + title: '登录', + mobileLogin: '手机号登录', + accountLogin: '账号登录', + autoLogin: '一键授权登录', + login: '登录', + mobilePlaceholder: '手机号登录仅限中国大陆用户', + dynacodePlaceholder: '请输入动态码', + captchaPlaceholder: '请输入验证码', + accountPlaceholder: '请输入账号', + passwordPlaceholder: '请输入密码', + rePasswordPlaceholder: '请确认密码', + forgetPassword: '忘记密码', + register: '注册', + registerTips: '没有账号的用户快来', + registerTips1: '注册', + registerTips2: '吧', + newUserRegister: '新用户注册', + // login.vue页面新增翻译项 + welcomeText: '您好,
欢迎使用', + getDynacode: '获取动态码', + mobileInputPlaceholder: '请输入您的手机号', + accountInputPlaceholder: '请输入账号', + passwordInputPlaceholder: '请输入密码', + forgetPasswordText: '忘记密码?', + dynacodeInputPlaceholder: '请输入动态码', + loginButtonText: '登录', + registerAgreementText: '若您未注册,则登录后将自动帮您注册。注册即视为同意', + privacyPolicyText: '《隐私条款》', + userServiceAgreementText: '《用户服务协议》', + agreeAgreementTip: '请先阅读并同意协议', + loginSuccessTip: '登录成功', + enterMobileTip: '请输入手机号', + enterCorrectMobileTip: '请输入正确的手机号', + enterCaptchaTip: '请输入验证码', + requestFailTip: 'request:fail' +} diff --git a/lang/zh-cn/login/register.js b/lang/zh-cn/login/register.js new file mode 100644 index 0000000..503e921 --- /dev/null +++ b/lang/zh-cn/login/register.js @@ -0,0 +1,17 @@ +export const lang = { + //title为每个页面的标题 + title: '注册', + mobileRegister: '手机号注册', + accountRegister: '账号注册', + mobilePlaceholder: '手机号登录仅限中国大陆用户', + dynacodePlaceholder: '请输入动态码', + captchaPlaceholder: '请输入验证码', + accountPlaceholder: '请输入用户名', + passwordPlaceholder: '请输入密码', + rePasswordPlaceholder: '请确认密码', + completeRegister: '完成注册,并登录', + registerTips: '点击注册即代表您已同意', + registerAgreement: '注册协议', + next: '下一步', + save: '保存' +} diff --git a/lang/zh-cn/member/account.js b/lang/zh-cn/member/account.js new file mode 100644 index 0000000..79dde87 --- /dev/null +++ b/lang/zh-cn/member/account.js @@ -0,0 +1,13 @@ +export const lang = { + //title为每个页面的标题 + title: '账户列表', + name: '姓名', + accountType: '账号类型', + mobilePhone: '手机号码', + withdrawalAccount: '提现账号', + bankInfo: '支行信息', + newAddAccount: '新增账户', + del: '删除', + update: "修改", + emptyText:"当前暂无账户" +} diff --git a/lang/zh-cn/member/account_edit.js b/lang/zh-cn/member/account_edit.js new file mode 100644 index 0000000..5088b38 --- /dev/null +++ b/lang/zh-cn/member/account_edit.js @@ -0,0 +1,14 @@ +export const lang = { + //title为每个页面的标题 + title: '编辑账户', + name: '姓名', + namePlaceholder: '请输入真实姓名', + mobilePhone: '手机号码', + mobilePhonePlaceholder: '请输入手机号', + accountType: '账号类型', + bankInfo: '支行信息', + bankInfoPlaceholder: '请输入支行信息', + withdrawalAccount: '提现账号', + withdrawalAccountPlaceholder: '请输入提现账号', + save: '保存' +} diff --git a/lang/zh-cn/member/address.js b/lang/zh-cn/member/address.js new file mode 100644 index 0000000..08a97e8 --- /dev/null +++ b/lang/zh-cn/member/address.js @@ -0,0 +1,9 @@ +export const lang = { + //title为每个页面的标题 + title: '收货地址', + newAddAddress: '添加收货地址', + getAddress: '一键获取地址', + is_default: '默认', + modify: '编辑', + del: '删除' +} diff --git a/lang/zh-cn/member/address_edit.js b/lang/zh-cn/member/address_edit.js new file mode 100644 index 0000000..e93f405 --- /dev/null +++ b/lang/zh-cn/member/address_edit.js @@ -0,0 +1,14 @@ +export const lang = { + //title为每个页面的标题 + title: '编辑收货地址', + consignee: '姓名', + consigneePlaceholder: '收货人姓名', + mobile: '手机', + mobilePlaceholder: '收货人手机号', + telephone: '电话', + telephonePlaceholder: '收货人固定电话(选填)', + receivingCity: '地区', + address: '详细地址', + addressPlaceholder: '小区、街道、写字楼', + save: '保存' +} diff --git a/lang/zh-cn/member/apply_withdrawal.js b/lang/zh-cn/member/apply_withdrawal.js new file mode 100644 index 0000000..d2f5f7a --- /dev/null +++ b/lang/zh-cn/member/apply_withdrawal.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '申请提现' +} diff --git a/lang/zh-cn/member/assets.js b/lang/zh-cn/member/assets.js new file mode 100644 index 0000000..1702e20 --- /dev/null +++ b/lang/zh-cn/member/assets.js @@ -0,0 +1,3 @@ +export const lang = { + title: '账号注销', +} \ No newline at end of file diff --git a/lang/zh-cn/member/balance.js b/lang/zh-cn/member/balance.js new file mode 100644 index 0000000..49fb93d --- /dev/null +++ b/lang/zh-cn/member/balance.js @@ -0,0 +1,13 @@ +export const lang = { + //title为每个页面的标题 + title: '我的余额', + accountBalance: '账户余额 ', + money:' (元)', + recharge: '充值', + withdrawal: '提现', + balanceDetailed: '余额明细', + emptyTips: '暂无余额记录', + rechargeRecord:'充值记录', + ableAccountBalance:'现金余额 ', + noAccountBalance:'储值余额 ', +} diff --git a/lang/zh-cn/member/balance_detail.js b/lang/zh-cn/member/balance_detail.js new file mode 100644 index 0000000..538ab54 --- /dev/null +++ b/lang/zh-cn/member/balance_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '余额明细' +} diff --git a/lang/zh-cn/member/cancellation.js b/lang/zh-cn/member/cancellation.js new file mode 100644 index 0000000..1702e20 --- /dev/null +++ b/lang/zh-cn/member/cancellation.js @@ -0,0 +1,3 @@ +export const lang = { + title: '账号注销', +} \ No newline at end of file diff --git a/lang/zh-cn/member/cancelrefuse.js b/lang/zh-cn/member/cancelrefuse.js new file mode 100644 index 0000000..1702e20 --- /dev/null +++ b/lang/zh-cn/member/cancelrefuse.js @@ -0,0 +1,3 @@ +export const lang = { + title: '账号注销', +} \ No newline at end of file diff --git a/lang/zh-cn/member/cancelstatus.js b/lang/zh-cn/member/cancelstatus.js new file mode 100644 index 0000000..1702e20 --- /dev/null +++ b/lang/zh-cn/member/cancelstatus.js @@ -0,0 +1,3 @@ +export const lang = { + title: '账号注销', +} \ No newline at end of file diff --git a/lang/zh-cn/member/cancelsuccess.js b/lang/zh-cn/member/cancelsuccess.js new file mode 100644 index 0000000..1702e20 --- /dev/null +++ b/lang/zh-cn/member/cancelsuccess.js @@ -0,0 +1,3 @@ +export const lang = { + title: '账号注销', +} \ No newline at end of file diff --git a/lang/zh-cn/member/card.js b/lang/zh-cn/member/card.js new file mode 100644 index 0000000..1aab742 --- /dev/null +++ b/lang/zh-cn/member/card.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '会员卡' +} diff --git a/lang/zh-cn/member/card_buy.js b/lang/zh-cn/member/card_buy.js new file mode 100644 index 0000000..1aab742 --- /dev/null +++ b/lang/zh-cn/member/card_buy.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '会员卡' +} diff --git a/lang/zh-cn/member/collection.js b/lang/zh-cn/member/collection.js new file mode 100644 index 0000000..7ba4f3f --- /dev/null +++ b/lang/zh-cn/member/collection.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '我的关注' +} diff --git a/lang/zh-cn/member/contact.js b/lang/zh-cn/member/contact.js new file mode 100644 index 0000000..ff0307c --- /dev/null +++ b/lang/zh-cn/member/contact.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '客服', +} diff --git a/lang/zh-cn/member/coupon.js b/lang/zh-cn/member/coupon.js new file mode 100644 index 0000000..3b4a64d --- /dev/null +++ b/lang/zh-cn/member/coupon.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '我的优惠券' +} diff --git a/lang/zh-cn/member/footprint.js b/lang/zh-cn/member/footprint.js new file mode 100644 index 0000000..2809ba2 --- /dev/null +++ b/lang/zh-cn/member/footprint.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: '我的足迹', + emptyTpis: '您还未浏览过任何商品!' +} diff --git a/lang/zh-cn/member/gift.js b/lang/zh-cn/member/gift.js new file mode 100644 index 0000000..ebdcbda --- /dev/null +++ b/lang/zh-cn/member/gift.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: '我的礼品', + emptyTips: '暂无礼品' +} diff --git a/lang/zh-cn/member/gift_detail.js b/lang/zh-cn/member/gift_detail.js new file mode 100644 index 0000000..492e1ae --- /dev/null +++ b/lang/zh-cn/member/gift_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '礼品订单', +} diff --git a/lang/zh-cn/member/index.js b/lang/zh-cn/member/index.js new file mode 100644 index 0000000..7dccba7 --- /dev/null +++ b/lang/zh-cn/member/index.js @@ -0,0 +1,64 @@ +export const lang = { + //title为每个页面的标题 + title: '会员中心', + login: '登录/注册', + loginTpis: '点击登录 享受更多精彩信息', + memberLevel: '会员等级', + moreAuthority: '更多权限', + allOrders: '全部订单', + seeAllOrders: '查看全部订单', + waitPay: '待付款', + readyDelivery: '待发货', + waitDelivery: '待收货', + refunding: '退款', + getDynacode: '获取动态验证码', + + + // 会员中心入口 + sign: '签到', + personInfo: '个人资料', + receivingAddress: '收货地址', + accountList: '账户列表', + couponList: '优惠券', + mySpellList: '我的拼单', + myBargain: '我的砍价', + virtualCode: '虚拟码', + winningRecord: '我的礼品', + myCollection: '我的关注', + myTracks: '我的足迹', + pintuanOrder: '拼团订单', + yushouOrder: '预售订单', + verification: '核销台', + message: '我的消息', + exchangeOrder: '积分兑换', + + waitpay: '待付款', + waitsend: '待发货', + waitconfirm: '待收货', + activist: '售后', + completed: '已完成', + + // 推广中心 + balance: '余额', + point: '积分', + coupon: '优惠券', + memberRecommend: '邀请有礼', + myPresale: '我的预售', + myGiftcard: '我的礼品卡', + myDivideticket: '我的瓜分券', + myRebate: '拼团返利', + myHongbao: '我的红包列表', + myBlindBox: '我的盲盒', + + // 账户操作 + logout: '退出登录', + cancellation: '账号注销', + logoutTitle: '提示', + logoutContent: '确定要退出登录吗', + cancellationTitle: '风险提示', + cancellationContent: '确定要注销当前账号吗?', + + // 协议 + privacyPolicy: '隐私协议', + registrationAgreement: '注册协议', +} diff --git a/lang/zh-cn/member/info.js b/lang/zh-cn/member/info.js new file mode 100644 index 0000000..52b220a --- /dev/null +++ b/lang/zh-cn/member/info.js @@ -0,0 +1,56 @@ +export const lang = { + //title为每个页面的标题 + title: '个人资料', + headImg: '头像', + account: '账号', + nickname: '昵称', + realName: '真实姓名', + sex: '性别', + birthday: '生日', + password: '密码', + paypassword: '支付密码', + mobilePhone: '手机', + bindMobile: '绑定手机', + cancellation: '注销账号', + lang: "语言", + logout: '退出登录', + save: "保存", + noset: '未设置', + + nickPlaceholder: "请输入新昵称", + pleaseRealName:"请输入真实姓名", + + nowPassword: "当前密码", + newPassword: "新密码", + confirmPassword: "确认新密码", + + phoneNumber: "手机号", + + confirmCode: "验证码", + confirmCodeInput: "请输入验证码", + confirmCodeInputerror: "验证码错误", + findanimateCode: "获取动态码", + animateCode: "动态码", + animateCodeInput: "请输入动态码", + + modifyNickname: "修改昵称", + modifyPassword: "修改密码", + bindPhone: "绑定手机", + + alikeNickname: "与原昵称一致,无需修改", + noEmityNickname: "昵称不能为空", + + updateSuccess: "修改成功", + + pleaseInputOldPassword: "请输入原始密码", + pleaseInputNewPassword: "请输入新密码", + passwordLength: "密码长度不能小于6位", + alikePassword: "两次密码不一致", + + samePassword: "新密码不能与原密码相同", + + surePhoneNumber: "请输入正确的手机号", + + alikePhone: "与原手机号一致,无需修改", + modify: '修改' +} diff --git a/lang/zh-cn/member/info_edit.js b/lang/zh-cn/member/info_edit.js new file mode 100644 index 0000000..9220f03 --- /dev/null +++ b/lang/zh-cn/member/info_edit.js @@ -0,0 +1,61 @@ +export const lang = { + //title为每个页面的标题 + title: '个人资料', + headImg: '头像', + account: '账号', + username: '用户名', + nickname: '昵称', + realName: '真实姓名', + sex: '性别', + birthday: '生日', + password: '密码', + paypassword: '支付密码', + mobilePhone: '手机', + bindMobile: '绑定手机', + cancellation: '注销账号', + lang: "语言", + logout: '退出登录', + save: "保存", + noset: '未设置', + + usernamePlaceholder: "请输入新用户名", + nickPlaceholder: "请输入新昵称", + pleaseRealName:"请输入真实姓名", + + nowPassword: "当前密码", + newPassword: "新密码", + confirmPassword: "确认新密码", + + phoneNumber: "手机号", + + confirmCode: "验证码", + confirmCodeInput: "请输入验证码", + confirmCodeInputerror: "验证码错误", + findanimateCode: "获取动态码", + animateCode: "动态码", + animateCodeInput: "请输入动态码", + + modifyNickname: "修改昵称", + modifyPassword: "修改密码", + bindPhone: "绑定手机", + + alikeusername: "与原用户名一致,无需修改", + noEmityUsername: "用户名不能为空", + + alikeNickname: "与原昵称一致,无需修改", + noEmityNickname: "昵称不能为空", + + updateSuccess: "修改成功", + + pleaseInputOldPassword: "请输入原始密码", + pleaseInputNewPassword: "请输入新密码", + passwordLength: "密码长度不能小于6位", + alikePassword: "两次密码不一致", + + samePassword: "新密码不能与原密码相同", + + surePhoneNumber: "请输入正确的手机号", + + alikePhone: "与原手机号一致,无需修改", + modify: '修改' +} diff --git a/lang/zh-cn/member/invite_friends.js b/lang/zh-cn/member/invite_friends.js new file mode 100644 index 0000000..5456928 --- /dev/null +++ b/lang/zh-cn/member/invite_friends.js @@ -0,0 +1,3 @@ +export const lang = { + title: '邀请好友', +} \ No newline at end of file diff --git a/lang/zh-cn/member/level.js b/lang/zh-cn/member/level.js new file mode 100644 index 0000000..a4a0e8d --- /dev/null +++ b/lang/zh-cn/member/level.js @@ -0,0 +1,17 @@ +export const lang = { + //title为每个页面的标题 + title: '会员等级', + defaultLevelTips: '您已经是最高级别的会员了!', + tag: '专属标签', + tagDesc: '标签达人', + discount: '专享折扣', + discountDesc: '专享{0}折', + service: '优质服务', + serviceDesc: '360度全方位', + memberLevel: '会员等级', + condition: '条件', + equity: '权益', + giftPackage: '升级礼包', + levelExplain: '等级说明', + upgradeTips: '升级会员,享专属权益' +} diff --git a/lang/zh-cn/member/message.js b/lang/zh-cn/member/message.js new file mode 100644 index 0000000..c970ecb --- /dev/null +++ b/lang/zh-cn/member/message.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '我的消息' +} diff --git a/lang/zh-cn/member/modify_face.js b/lang/zh-cn/member/modify_face.js new file mode 100644 index 0000000..cb7f76f --- /dev/null +++ b/lang/zh-cn/member/modify_face.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '修改头像' +} diff --git a/lang/zh-cn/member/pay_password.js b/lang/zh-cn/member/pay_password.js new file mode 100644 index 0000000..f699e06 --- /dev/null +++ b/lang/zh-cn/member/pay_password.js @@ -0,0 +1,3 @@ +export const lang = { + title: '支付密码', +} \ No newline at end of file diff --git a/lang/zh-cn/member/point.js b/lang/zh-cn/member/point.js new file mode 100644 index 0000000..bd74dd9 --- /dev/null +++ b/lang/zh-cn/member/point.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '我的积分' +} diff --git a/lang/zh-cn/member/point_detail.js b/lang/zh-cn/member/point_detail.js new file mode 100644 index 0000000..5c33ed8 --- /dev/null +++ b/lang/zh-cn/member/point_detail.js @@ -0,0 +1,6 @@ +export const lang = { + //title为每个页面的标题 + title: '积分明细', + emptyTpis: '您暂时还没有积分记录哦!', + pointExplain: '积分说明' +} diff --git a/lang/zh-cn/member/signin.js b/lang/zh-cn/member/signin.js new file mode 100644 index 0000000..00003a9 --- /dev/null +++ b/lang/zh-cn/member/signin.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '签到有礼' +} diff --git a/lang/zh-cn/member/withdrawal.js b/lang/zh-cn/member/withdrawal.js new file mode 100644 index 0000000..9b99202 --- /dev/null +++ b/lang/zh-cn/member/withdrawal.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '提现记录' +} diff --git a/lang/zh-cn/member/withdrawal_detail.js b/lang/zh-cn/member/withdrawal_detail.js new file mode 100644 index 0000000..8b822bb --- /dev/null +++ b/lang/zh-cn/member/withdrawal_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '提现详情' +} diff --git a/lang/zh-cn/notice/detail.js b/lang/zh-cn/notice/detail.js new file mode 100644 index 0000000..d2d77c9 --- /dev/null +++ b/lang/zh-cn/notice/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '公告详情' +} diff --git a/lang/zh-cn/notice/list.js b/lang/zh-cn/notice/list.js new file mode 100644 index 0000000..e2c2d7c --- /dev/null +++ b/lang/zh-cn/notice/list.js @@ -0,0 +1,6 @@ +export const lang = { + //title为每个页面的标题 + title: '公告列表', + emptyText:"当前暂无更多信息", + contentTitle:'升级公告' +} diff --git a/lang/zh-cn/order/activist.js b/lang/zh-cn/order/activist.js new file mode 100644 index 0000000..bc39f08 --- /dev/null +++ b/lang/zh-cn/order/activist.js @@ -0,0 +1,6 @@ +export const lang = { + //title为每个页面的标题 + title: '售后', + checkDetail: '查看详情', + emptyTips: '暂无售后记录' +} diff --git a/lang/zh-cn/order/detail.js b/lang/zh-cn/order/detail.js new file mode 100644 index 0000000..6c02235 --- /dev/null +++ b/lang/zh-cn/order/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '订单详情' +} diff --git a/lang/zh-cn/order/detail_local_delivery.js b/lang/zh-cn/order/detail_local_delivery.js new file mode 100644 index 0000000..6c02235 --- /dev/null +++ b/lang/zh-cn/order/detail_local_delivery.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '订单详情' +} diff --git a/lang/zh-cn/order/detail_pickup.js b/lang/zh-cn/order/detail_pickup.js new file mode 100644 index 0000000..6c02235 --- /dev/null +++ b/lang/zh-cn/order/detail_pickup.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '订单详情' +} diff --git a/lang/zh-cn/order/detail_point.js b/lang/zh-cn/order/detail_point.js new file mode 100644 index 0000000..6c02235 --- /dev/null +++ b/lang/zh-cn/order/detail_point.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '订单详情' +} diff --git a/lang/zh-cn/order/detail_virtual.js b/lang/zh-cn/order/detail_virtual.js new file mode 100644 index 0000000..6c02235 --- /dev/null +++ b/lang/zh-cn/order/detail_virtual.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '订单详情' +} diff --git a/lang/zh-cn/order/evaluate.js b/lang/zh-cn/order/evaluate.js new file mode 100644 index 0000000..73d6c04 --- /dev/null +++ b/lang/zh-cn/order/evaluate.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '我要评价' +} diff --git a/lang/zh-cn/order/list.js b/lang/zh-cn/order/list.js new file mode 100644 index 0000000..1160a28 --- /dev/null +++ b/lang/zh-cn/order/list.js @@ -0,0 +1,13 @@ +export const lang = { + //title为每个页面的标题 + title: '订单列表', + emptyTips: '暂无相关订单', + all: '全部', + waitPay: '待付款', + readyDelivery: '待发货', + waitDelivery: '待收货', + waitEvaluate: '待评价', + waitUse: '待使用', + update: "释放刷新", + updateIng: "加载中..." +} diff --git a/lang/zh-cn/order/logistics.js b/lang/zh-cn/order/logistics.js new file mode 100644 index 0000000..3736635 --- /dev/null +++ b/lang/zh-cn/order/logistics.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '物流信息' +} diff --git a/lang/zh-cn/order/payment.js b/lang/zh-cn/order/payment.js new file mode 100644 index 0000000..88657dd --- /dev/null +++ b/lang/zh-cn/order/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '待付款订单' +} diff --git a/lang/zh-cn/order/refund.js b/lang/zh-cn/order/refund.js new file mode 100644 index 0000000..d1b3c1d --- /dev/null +++ b/lang/zh-cn/order/refund.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '申请退款', +} diff --git a/lang/zh-cn/order/refund_batch.js b/lang/zh-cn/order/refund_batch.js new file mode 100644 index 0000000..d1b3c1d --- /dev/null +++ b/lang/zh-cn/order/refund_batch.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '申请退款', +} diff --git a/lang/zh-cn/order/refund_detail.js b/lang/zh-cn/order/refund_detail.js new file mode 100644 index 0000000..f931c6b --- /dev/null +++ b/lang/zh-cn/order/refund_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '退款详情', +} diff --git a/lang/zh-cn/pay/index.js b/lang/zh-cn/pay/index.js new file mode 100644 index 0000000..60ddcaf --- /dev/null +++ b/lang/zh-cn/pay/index.js @@ -0,0 +1,7 @@ +export const lang = { + //title为每个页面的标题 + title: '支付方式', + paymentAmount: '支付金额', + confirmPayment: '确认支付', + seeOrder: '查看订单' +} diff --git a/lang/zh-cn/pay/result.js b/lang/zh-cn/pay/result.js new file mode 100644 index 0000000..294c202 --- /dev/null +++ b/lang/zh-cn/pay/result.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '支付结果', + paymentSuccess: '支付成功', + paymentFail: '支付失败', + goHome: '回到首页', + memberCenter: '会员中心', + payMoney: '支付金额', + unit: '元' +} diff --git a/lang/zh-cn/pintuan/detail.js b/lang/zh-cn/pintuan/detail.js new file mode 100644 index 0000000..aa08c12 --- /dev/null +++ b/lang/zh-cn/pintuan/detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: '选择', + params: '参数', + service: '商品服务', + allGoods: '全部商品', + image: '图片', + video: '视频' +} diff --git a/lang/zh-cn/pintuan/list.js b/lang/zh-cn/pintuan/list.js new file mode 100644 index 0000000..c9e868c --- /dev/null +++ b/lang/zh-cn/pintuan/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '拼团专区' +} diff --git a/lang/zh-cn/pintuan/my_spell.js b/lang/zh-cn/pintuan/my_spell.js new file mode 100644 index 0000000..ffb8d0f --- /dev/null +++ b/lang/zh-cn/pintuan/my_spell.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '我的拼单' +} diff --git a/lang/zh-cn/pintuan/payment.js b/lang/zh-cn/pintuan/payment.js new file mode 100644 index 0000000..88657dd --- /dev/null +++ b/lang/zh-cn/pintuan/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '待付款订单' +} diff --git a/lang/zh-cn/pintuan/share.js b/lang/zh-cn/pintuan/share.js new file mode 100644 index 0000000..9b25eb4 --- /dev/null +++ b/lang/zh-cn/pintuan/share.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '拼团分享' +} diff --git a/lang/zh-cn/point/detail.js b/lang/zh-cn/point/detail.js new file mode 100644 index 0000000..17ad9f1 --- /dev/null +++ b/lang/zh-cn/point/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '兑换' +} diff --git a/lang/zh-cn/point/goods_detail.js b/lang/zh-cn/point/goods_detail.js new file mode 100644 index 0000000..7c5e6bf --- /dev/null +++ b/lang/zh-cn/point/goods_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + // title: '兑换' +} \ No newline at end of file diff --git a/lang/zh-cn/point/list.js b/lang/zh-cn/point/list.js new file mode 100644 index 0000000..35fa006 --- /dev/null +++ b/lang/zh-cn/point/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '积分商城' +} diff --git a/lang/zh-cn/point/order_detail.js b/lang/zh-cn/point/order_detail.js new file mode 100644 index 0000000..02b134b --- /dev/null +++ b/lang/zh-cn/point/order_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '积分兑换订单详情' +} diff --git a/lang/zh-cn/point/order_list.js b/lang/zh-cn/point/order_list.js new file mode 100644 index 0000000..5139a9a --- /dev/null +++ b/lang/zh-cn/point/order_list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: '积分兑换', + emptyTips: '暂无更多数据了' +} diff --git a/lang/zh-cn/point/payment.js b/lang/zh-cn/point/payment.js new file mode 100644 index 0000000..88657dd --- /dev/null +++ b/lang/zh-cn/point/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '待付款订单' +} diff --git a/lang/zh-cn/point/result.js b/lang/zh-cn/point/result.js new file mode 100644 index 0000000..fb9a581 --- /dev/null +++ b/lang/zh-cn/point/result.js @@ -0,0 +1,7 @@ +export const lang = { + //title为每个页面的标题 + title: '兑换结果', + exchangeSuccess: '兑换成功', + see: '查看兑换记录', + goHome: '回到首页' +} diff --git a/lang/zh-cn/presale/detail.js b/lang/zh-cn/presale/detail.js new file mode 100644 index 0000000..aa08c12 --- /dev/null +++ b/lang/zh-cn/presale/detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: '选择', + params: '参数', + service: '商品服务', + allGoods: '全部商品', + image: '图片', + video: '视频' +} diff --git a/lang/zh-cn/presale/list.js b/lang/zh-cn/presale/list.js new file mode 100644 index 0000000..6062102 --- /dev/null +++ b/lang/zh-cn/presale/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '预售专区' +} diff --git a/lang/zh-cn/presale/order_detail.js b/lang/zh-cn/presale/order_detail.js new file mode 100644 index 0000000..6c02235 --- /dev/null +++ b/lang/zh-cn/presale/order_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '订单详情' +} diff --git a/lang/zh-cn/presale/order_list.js b/lang/zh-cn/presale/order_list.js new file mode 100644 index 0000000..33e46b3 --- /dev/null +++ b/lang/zh-cn/presale/order_list.js @@ -0,0 +1,7 @@ +export const lang = { + //title为每个页面的标题 + title: '我的预售', + emptyTips: '暂无相关预售订单', + update: "释放刷新", + updateIng: "加载中..." +} diff --git a/lang/zh-cn/presale/payment.js b/lang/zh-cn/presale/payment.js new file mode 100644 index 0000000..88657dd --- /dev/null +++ b/lang/zh-cn/presale/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '待付款订单' +} diff --git a/lang/zh-cn/recharge/detail.js b/lang/zh-cn/recharge/detail.js new file mode 100644 index 0000000..7f56b11 --- /dev/null +++ b/lang/zh-cn/recharge/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '充值详情' +} diff --git a/lang/zh-cn/recharge/list.js b/lang/zh-cn/recharge/list.js new file mode 100644 index 0000000..0247946 --- /dev/null +++ b/lang/zh-cn/recharge/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '充值列表' +} diff --git a/lang/zh-cn/recharge/order_list.js b/lang/zh-cn/recharge/order_list.js new file mode 100644 index 0000000..ccae5ec --- /dev/null +++ b/lang/zh-cn/recharge/order_list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '充值记录', +} diff --git a/lang/zh-cn/seckill/detail.js b/lang/zh-cn/seckill/detail.js new file mode 100644 index 0000000..aa08c12 --- /dev/null +++ b/lang/zh-cn/seckill/detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: '选择', + params: '参数', + service: '商品服务', + allGoods: '全部商品', + image: '图片', + video: '视频' +} diff --git a/lang/zh-cn/seckill/list.js b/lang/zh-cn/seckill/list.js new file mode 100644 index 0000000..d546477 --- /dev/null +++ b/lang/zh-cn/seckill/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '秒杀专区' +} diff --git a/lang/zh-cn/seckill/payment.js b/lang/zh-cn/seckill/payment.js new file mode 100644 index 0000000..88657dd --- /dev/null +++ b/lang/zh-cn/seckill/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '待付款订单' +} diff --git a/lang/zh-cn/store_notes/note_detail.js b/lang/zh-cn/store_notes/note_detail.js new file mode 100644 index 0000000..f776d19 --- /dev/null +++ b/lang/zh-cn/store_notes/note_detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '笔记详情' +} \ No newline at end of file diff --git a/lang/zh-cn/store_notes/note_list.js b/lang/zh-cn/store_notes/note_list.js new file mode 100644 index 0000000..daf0791 --- /dev/null +++ b/lang/zh-cn/store_notes/note_list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '店铺笔记' +} \ No newline at end of file diff --git a/lang/zh-cn/storeclose/storeclose.js b/lang/zh-cn/storeclose/storeclose.js new file mode 100644 index 0000000..af147fc --- /dev/null +++ b/lang/zh-cn/storeclose/storeclose.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '店铺打烊' +} diff --git a/lang/zh-cn/topics/detail.js b/lang/zh-cn/topics/detail.js new file mode 100644 index 0000000..37300ef --- /dev/null +++ b/lang/zh-cn/topics/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '专题活动详情' +} diff --git a/lang/zh-cn/topics/goods_detail.js b/lang/zh-cn/topics/goods_detail.js new file mode 100644 index 0000000..aa08c12 --- /dev/null +++ b/lang/zh-cn/topics/goods_detail.js @@ -0,0 +1,10 @@ +export const lang = { + //title为每个页面的标题 + title: '', + select: '选择', + params: '参数', + service: '商品服务', + allGoods: '全部商品', + image: '图片', + video: '视频' +} diff --git a/lang/zh-cn/topics/list.js b/lang/zh-cn/topics/list.js new file mode 100644 index 0000000..88fad9a --- /dev/null +++ b/lang/zh-cn/topics/list.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '专题活动列表' +} diff --git a/lang/zh-cn/topics/payment.js b/lang/zh-cn/topics/payment.js new file mode 100644 index 0000000..88657dd --- /dev/null +++ b/lang/zh-cn/topics/payment.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '待付款订单' +} diff --git a/lang/zh-cn/verification/detail.js b/lang/zh-cn/verification/detail.js new file mode 100644 index 0000000..d363d70 --- /dev/null +++ b/lang/zh-cn/verification/detail.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '核销明细' +} diff --git a/lang/zh-cn/verification/index.js b/lang/zh-cn/verification/index.js new file mode 100644 index 0000000..e03614d --- /dev/null +++ b/lang/zh-cn/verification/index.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: '核销台' +} diff --git a/lang/zh-cn/verification/list.js b/lang/zh-cn/verification/list.js new file mode 100644 index 0000000..0280f33 --- /dev/null +++ b/lang/zh-cn/verification/list.js @@ -0,0 +1,5 @@ +export const lang = { + //title为每个页面的标题 + title: '核销记录', + emptyTips: '暂无记录' +} diff --git a/lang/zh-cn/vr/index.js b/lang/zh-cn/vr/index.js new file mode 100644 index 0000000..24d3a31 --- /dev/null +++ b/lang/zh-cn/vr/index.js @@ -0,0 +1,4 @@ +export const lang = { + //title为每个页面的标题 + title: 'VR' +} \ No newline at end of file diff --git a/package.json b/package.json index 4ee2de8..79ec5dc 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,6 @@ { "scripts": { - "mp-weixin": "node scripts/mp-weixin.patch.js", - "i18n:check": "python scripts/i18n_check.py", - "i18n:audit": "python scripts/i18n_audit.py", - "i18n:strict": "python scripts/i18n_check.py strict", - "i18n:apply": "python scripts/i18n_rewrite_calls.py --apply", - "i18n:merge": "python scripts/i18n_merge.py", - "i18n:clean-dead": "python scripts/i18n_clean_dead.py" + "mp-weixin": "node scripts/mp-weixin.patch.js" }, "devDependencies": { "dart-sass": "^1.25.0", diff --git a/pages/index/index.vue b/pages/index/index.vue index 9edba56..462fcbf 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -1,258 +1,258 @@ - - - - - - + \ No newline at end of file diff --git a/pages/index/public/js/index.js b/pages/index/public/js/index.js index 8edd140..addebae 100644 --- a/pages/index/public/js/index.js +++ b/pages/index/public/js/index.js @@ -1,130 +1,130 @@ -export default { - data() { - return { - minScrollTop: 100, // 设置回到顶端按钮显示要求,最小页面滚动距离 - wechatQrcode: '', // 公众号二维码 - diyRoute: '/pages/index/index', - shopInfo: null // 店铺信息 - }; - }, - onLoad(option) { - // #ifdef H5 - // H5地图选择位置回调数据 - if (option.module && option.module == 'locationPicker') { - option.name = ''; // 清空地址 - } - // #endif - this.name = option.name || 'DIY_VIEW_INDEX'; // 根据店铺运营模式,打开平台(shop)或者连锁门店(stroe)页面,接口会自行判断 - - // 获取店铺信息 - this.shopInfo = uni.getStorageSync('shopInfo'); - }, - onShow() { - // 获取关注公众号二维码 - this.getFollowQrcode(); - - // 重新获取店铺信息 - this.shopInfo = uni.getStorageSync('shopInfo'); - }, - mounted() { - // 监听图片、文字、商品列表等组件的点击事件 - this.unsubscribe = this.$eventBus?.onMany([ - 'rubik-cube-tap', - 'picture-tap', - 'text-tap', - 'goods-list-tap', - 'presale-tap', - 'notes-tap', - 'merch-list-tap', - 'map-tap', - 'img-ads-tap', - 'many-goods-list-tap', - 'search-tap', - ], this._handleDiyGroupInteractionEvent); - }, - beforeDestroy() { - // 移除图片点击事件监听 - if (this.unsubscribe) this.unsubscribe(); - }, - methods: { - // 关注公众号 - getFollowQrcode() { - if (!this.$util.isWeiXin()) return; - this.$api.sendRequest({ - url: '/wechat/api/wechat/followqrcode', - success: res => { - if (res.code >= 0 && res.data) { - this.wechatQrcode = res.data.qrcode; - } - } - }); - }, - officialAccountsOpen() { - this.$refs.officialAccountsPopup.open(); - }, - officialAccountsClose() { - this.$refs.officialAccountsPopup.close(); - }, - // 判断是否需要登录授权 - _requireHomeAuth() { - // #ifdef MP-WEIXIN - // 检查 index_login_auth 都开启时才需要登录授权 - return this.shopInfo?.index_login_auth === 1; - // #endif - - // TODO: 其他平台, 后面可以根据平台类型判断 - - return false; - }, - // 统一处理点击及触摸事件 - _handleDiyGroupInteractionEvent(payload) { - // 如果不需要登录授权,直接返回 true 继续传播 - if (!this._requireHomeAuth()) { - return true; - } - - // 如果已登录,直接返回 true 继续传播 - if (this.storeToken) { - return true; - } - - this.$refs.login?.open(); - - // 阻止事件继续传播 - return false; - }, - /** - * 标题连击 5 次显示构建版本信息(供测试人员使用) - */ - onTitleTap() { - this._titleTapCount = (this._titleTapCount || 0) + 1; - if (this._titleTapTimer) { - clearTimeout(this._titleTapTimer); - } - if (this._titleTapCount >= 5) { - this._titleTapCount = 0; - this._showVersionInfo(); - return; - } - // 2 秒内未达到 5 次则重置计数 - this._titleTapTimer = setTimeout(() => { - this._titleTapCount = 0; - }, 2000); - }, - _showVersionInfo() { - let v = null; - try { - v = typeof __app_version !== 'undefined' ? __app_version : null; - } catch (e) {} - if (v && v.commitId) { - uni.showModal({ - title: $lang('page.index.public.js.index.l121.t0'), - content: $lang(`page.index.public.js.index.l122.t0`), - showCancel: false - }); - } else { - console.log($lang('page.index.public.js.index.l126.t0')); - } - } - } +export default { + data() { + return { + minScrollTop: 100, // 设置回到顶端按钮显示要求,最小页面滚动距离 + wechatQrcode: '', // 公众号二维码 + diyRoute: '/pages/index/index', + shopInfo: null // 店铺信息 + }; + }, + onLoad(option) { + // #ifdef H5 + // H5地图选择位置回调数据 + if (option.module && option.module == 'locationPicker') { + option.name = ''; // 清空地址 + } + // #endif + this.name = option.name || 'DIY_VIEW_INDEX'; // 根据店铺运营模式,打开平台(shop)或者连锁门店(stroe)页面,接口会自行判断 + + // 获取店铺信息 + this.shopInfo = uni.getStorageSync('shopInfo'); + }, + onShow() { + // 获取关注公众号二维码 + this.getFollowQrcode(); + + // 重新获取店铺信息 + this.shopInfo = uni.getStorageSync('shopInfo'); + }, + mounted() { + // 监听图片、文字、商品列表等组件的点击事件 + this.unsubscribe = this.$eventBus?.onMany([ + 'rubik-cube-tap', + 'picture-tap', + 'text-tap', + 'goods-list-tap', + 'presale-tap', + 'notes-tap', + 'merch-list-tap', + 'map-tap', + 'img-ads-tap', + 'many-goods-list-tap', + 'search-tap', + ], this._handleDiyGroupInteractionEvent); + }, + beforeDestroy() { + // 移除图片点击事件监听 + if (this.unsubscribe) this.unsubscribe(); + }, + methods: { + // 关注公众号 + getFollowQrcode() { + if (!this.$util.isWeiXin()) return; + this.$api.sendRequest({ + url: '/wechat/api/wechat/followqrcode', + success: res => { + if (res.code >= 0 && res.data) { + this.wechatQrcode = res.data.qrcode; + } + } + }); + }, + officialAccountsOpen() { + this.$refs.officialAccountsPopup.open(); + }, + officialAccountsClose() { + this.$refs.officialAccountsPopup.close(); + }, + // 判断是否需要登录授权 + _requireHomeAuth() { + // #ifdef MP-WEIXIN + // 检查 index_login_auth 都开启时才需要登录授权 + return this.shopInfo?.index_login_auth === 1; + // #endif + + // TODO: 其他平台, 后面可以根据平台类型判断 + + return false; + }, + // 统一处理点击及触摸事件 + _handleDiyGroupInteractionEvent(payload) { + // 如果不需要登录授权,直接返回 true 继续传播 + if (!this._requireHomeAuth()) { + return true; + } + + // 如果已登录,直接返回 true 继续传播 + if (this.storeToken) { + return true; + } + + this.$refs.login?.open(); + + // 阻止事件继续传播 + return false; + }, + /** + * 标题连击 5 次显示构建版本信息(供测试人员使用) + */ + onTitleTap() { + this._titleTapCount = (this._titleTapCount || 0) + 1; + if (this._titleTapTimer) { + clearTimeout(this._titleTapTimer); + } + if (this._titleTapCount >= 5) { + this._titleTapCount = 0; + this._showVersionInfo(); + return; + } + // 2 秒内未达到 5 次则重置计数 + this._titleTapTimer = setTimeout(() => { + this._titleTapCount = 0; + }, 2000); + }, + _showVersionInfo() { + let v = null; + try { + v = typeof __app_version !== 'undefined' ? __app_version : null; + } catch (e) {} + if (v && v.commitId) { + uni.showModal({ + title: '构建版本信息', + content: `提交 ID: ${v.commitId}\n构建时间: ${v.buildTime}`, + showCancel: false + }); + } else { + console.log('未获取到构建版本信息'); + } + } + } } \ No newline at end of file diff --git a/pages_goods/_components/goods-detail-view/detail.js b/pages_goods/_components/goods-detail-view/detail.js index a6e45e8..00a9516 100644 --- a/pages_goods/_components/goods-detail-view/detail.js +++ b/pages_goods/_components/goods-detail-view/detail.js @@ -1,523 +1,523 @@ -// 商品详情业务 -import { - Weixin -} from '@/common/js/wx-jssdk.js'; - -export default { - data() { - return { - skuId: 0, - goodsId: 0, - isIphoneX: false, //判断手机是否是iphoneX以上 - whetherCollection: 0, - - //是否开启预览,0:不开启,1:开启 - preview: 0, - videoContext: '', - - // 媒体,图片,视频 - - // 解决每个商品SKU图片数量不同时,无法切换到第一个,导致轮播图显示不出来 - swiperInterval: 1, - swiperAutoplay: false, - swiperCurrent: 1, - switchMedia: 'img', - - //评价 - goodsEvaluate: [{ - member_headimg: '', - member_name: '', - content: '', - images: [], - create_time: 0, - sku_name: '' - }], - evaluateConfig: { - evaluate_audit: 1, - evaluate_show: 0, - evaluate_status: 1 - }, - - // 是否可分享到好物圈 - goodsCircle: false, - service: null, - shareUrl: '', // 分享链接 - source_member: 0, //分享人的id - isCommunity: false, //社群弹窗 - - poster: "-1", //海报 - posterMsg: "", //海报错误信息 - posterHeight: 0, - posterParams: {}, //海报所需参数 - goodsRoute: '', - posterApi: '', - goodsAttrShow: false, // 商品属性是否展开 - - //门店列表 - storeList: { - data: [], - page: 1, - page_size: 10 - }, - isShowStore: false, - latitude: null, // 纬度 - longitude: null, // 经度 - evaluateCount: 0, // 商品评论数量 - deliveryType: null, // 配送方式 - isVirtual: 0, //是否为虚拟商品 - - // 详情 Tab: 'html' 商品详情 / 'pdf' 文档详情 - detailTab: 'html' - } - }, - created() { - this.isIphoneX = this.$util.uniappIsIPhoneX(); - - if (this.location) { - this.latitude = this.location.latitude; - this.longitude = this.location.longitude; - } else { - this.$util.getLocation(); - } - this.getStoreData(); - }, - watch: { - location: function (nVal) { - if (nVal) { - this.latitude = nVal.latitude; - this.longitude = nVal.longitude; - this.getStoreData(); - } - }, - // 跟随 goodsSkuDetail 变化重新决定默认 Tab - // 解决 refreshGoodsSkuDetail 后续合并 pdf_url 时,Tab 已显示但 detailTab 仍为 'html' 的问题 - goodsSkuDetail: { - deep: true, - immediate: true, - handler(newVal) { - if (!newVal) return; - if (newVal.pdf_url) { - this.detailTab = 'pdf'; - } else if (newVal.goods_content) { - this.detailTab = 'html'; - } - } - } - }, - methods: { - init(params) { - this.skuId = params.sku_id; - this.goodsId = params.goods_id; - this.preview = params.preview; - this.source_member = params.source_member; - this.whetherCollection = params.whetherCollection; - this.posterParams = params.posterParams; - - this.shareUrl = params.shareUrl; - this.goodsRoute = params.goodsRoute; - this.posterApi = params.posterApi; - this.isVirtual = params.isVirtual; - this.deliveryType = params.deliveryType; - this.evaluateConfig = params.evaluateConfig; - - if (this.evaluateConfig.evaluate_show == 1) { - //商品评论 - this.getGoodsEvaluate(params.evaluateList); - this.evaluateCount = params.evaluateCount; - } - - for (let k in this.deliveryType) { - if (k == 'store') { - this.isShowStore = true; - } - } - - this.getService(); - - this.videoContext = uni.createVideoContext('goodsVideo'); - - // #ifdef MP-WEIXIN - this.goodsSyncToGoodsCircle(); - // #endif - - }, - swiperChange(e) { - this.swiperCurrent = e.detail.current + 1; - }, - - //-------------------------------------服务------------------------------------- - - openMerchantsServicePopup() { - this.$refs.merchantsServicePopup.open(); - }, - closeMerchantsServicePopup() { - this.$refs.merchantsServicePopup.close(); - }, - - //-------------------------------------门店列表------------------------------------- - openStoreListPopup() { - this.$refs.storeListPopup.open(); - }, - closeStoreListPopup() { - this.$refs.storeListPopup.close(); - }, - getStoreData() { - //门店列表 - let data = { - page: this.storeList.page, - page_size: this.storeList.page_size - }; - if (this.latitude && this.longitude) { - data.latitude = this.latitude; - data.longitude = this.longitude; - } - this.$api.sendRequest({ - url: '/api/store/page', - data: data, - success: res => { - if (this.storeList.page == 1) this.storeList.data == []; - if (res.code >= 0 && res.data) { - this.storeList.data = this.storeList.data.concat(res.data.list); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - }, - selectStore(item) { - this.$util.redirectTo('/pages_tool/store/detail', { - store_id: item.store_id - }); - this.closeStoreListPopup(); - }, - //-------------------------------------属性------------------------------------- - - switchGoodsAttr() { - this.goodsAttrShow = !this.goodsAttrShow; - }, - //-------------------------------------评价------------------------------------- - //商品评论列表 - getGoodsEvaluate(list) { - if (list) { - this.goodsEvaluate = list; - this.goodsEvaluate.forEach((item, index) => { - if (this.goodsEvaluate[index].images) this.goodsEvaluate[index].images = this.goodsEvaluate[index].images.split(","); - if (this.goodsEvaluate[index].is_anonymous == 1) this.goodsEvaluate[index].member_name = this.goodsEvaluate[index].member_name.replace(this.goodsEvaluate[index].member_name.substring(1, this.goodsEvaluate[index].member_name.length - 1), '***') - }) - // if (this.goodsEvaluate.images) this.goodsEvaluate.images = this.goodsEvaluate.images.split(","); - // if (this.goodsEvaluate.is_anonymous == 1) this.goodsEvaluate.member_name = this.goodsEvaluate.member_name.replace( - // this.goodsEvaluate.member_name.substring(1, this.goodsEvaluate.member_name.length - 1), '***') - } - }, - // 预览评价图片 - previewEvaluate(index, img_index, field) { - var paths = []; - for (let i = 0; i < this.goodsEvaluate[index][field].length; i++) { - paths.push(this.$util.img(this.goodsEvaluate[index][field][i])); - } - uni.previewImage({ - current: img_index, - urls: paths - }); - }, - //-------------------------------------关注------------------------------------- - async collection() { - if (this.preview) return; // 开启预览,禁止任何操作和跳转 - - if (this.storeToken) { - - //未关注添加关注 - if (this.whetherCollection == 0) { - let res = await this.$api.sendRequest({ - url: "/api/goodscollect/add", - data: { - sku_id: this.skuId, - goods_id: this.goodsSkuDetail.goods_id, - sku_name: this.goodsSkuDetail.sku_name, - sku_price: this.goodsSkuDetail.show_price, - sku_image: this.goodsSkuDetail.sku_image - }, - async: false, - }); - var data = res.data; - if (data > 0) { - this.whetherCollection = 1; - } - } else { - //已关注取消关注 - let res = await this.$api.sendRequest({ - url: "/api/goodscollect/delete", - data: { - goods_id: this.goodsSkuDetail.goods_id - }, - async: false, - }); - var data = res.data; - if (data > 0) { - this.whetherCollection = 0; - } - } - return this.whetherCollection; - } else { - if (this.source_member) { - this.$refs.login.open(this.shareUrl + '&source_member=' + this.source_member); - } else { - this.$refs.login.open(this.shareUrl); - } - } - }, - //-------------------------------------分享------------------------------------- - // 打开分享弹出层 - openSharePopup() { - this.$refs.sharePopup.open(); - }, - // 关闭分享弹出层 - closeSharePopup() { - this.$refs.sharePopup.close(); - }, - copyUrl() { - let text = this.$config.h5Domain + this.shareUrl; - if (this.memberInfo && this.memberInfo.member_id) text += '&source_member=' + this.memberInfo.member_id; - this.$util.copy(text, () => { - this.closeSharePopup(); - }); - }, - - //-------------------------------------海报------------------------------------- - // 打开海报弹出层 - openPosterPopup() { - this.getGoodsPoster(); - this.$refs.sharePopup.close(); - }, - // 关闭海报弹出层 - closePosterPopup() { - this.$refs.posterPopup.close(); - this.poster = '' - }, - //生成海报 - getGoodsPoster() { - uni.showLoading({ - 'title': $lang('goods._components.goods-detail-view.detail.l285.t0') - }) - //活动海报信息 - if (this.memberInfo && this.memberInfo.member_id) this.posterParams.source_member = this.memberInfo.member_id; - - this.$api.sendRequest({ - url: this.posterApi, - data: { - page: this.goodsRoute, - qrcode_param: JSON.stringify(this.posterParams) - }, - success: res => { - if (res.code == 0) { - this.$refs.posterPopup.open(); - this.poster = res.data.path + "?time=" + new Date().getTime(); - } else { - this.posterMsg = res.message; - this.$util.showToast({ - title: res.message - }) - } - uni.hideLoading(); - }, - fail: err => { - uni.hideLoading(); - } - }); - }, - // 预览图片 - previewMedia(index) { - var paths = []; - for (let i = 0; i < this.goodsSkuDetail.sku_images.length; i++) { - paths.push(this.$util.img(this.goodsSkuDetail.sku_images[i], { - size: 'big' - })); - } - uni.previewImage({ - current: index, - urls: paths, - // longPressActions: { - // itemList: ['发送给朋友', '保存图片', '关注'], - // success: function(data) { - // console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片'); - // }, - // fail: function(err) { - // console.log(err.errMsg); - // } - // } - }); - }, - swiperImageError(index) { - this.goodsSkuDetail.sku_images[index] = this.$util.getDefaultImage().goods; - this.$forceUpdate(); - }, - // #ifdef MP || APP-PLUS - //小程序中保存海报 - saveGoodsPoster() { - let url = this.$util.img(this.poster); - uni.downloadFile({ - url: url, - success: (res) => { - if (res.errMsg == "downloadFile:ok") { - uni.saveImageToPhotosAlbum({ - filePath: res.tempFilePath, - success: () => { - this.$util.showToast({ - title: $lang("goods._components.goods-detail-view.detail.l351.t0") - }); - }, - fail: (err) => { - this.$util.showToast({ - title: $lang("goods._components.goods-detail-view.detail.l356.t0") - }); - } - }); - } - }, - fail: (err) => { - this.$util.showToast({ - title: $lang("goods._components.goods-detail-view.detail.l356.t0") - }); - } - }); - }, - // #endif - //售后保障查询 - getService() { - this.$api.sendRequest({ - url: '/api/goods/aftersale', - success: res => { - if (res.code == 0 && res.data) { - this.service = res.data; - } - } - }); - }, - - // #ifdef MP-WEIXIN - /** - * 将商品同步到微信圈子 - */ - goodsSyncToGoodsCircle() { - this.$api.sendRequest({ - url: '/goodscircle/api/goods/sync', - data: { - goods_id: this.goodsSkuDetail.goods_id - }, - success: res => { - if (res.code == 0) { - this.goodsCircle = true; - } - } - }) - }, - /** - * 将商品推荐到微信圈子 - */ - openBusinessView() { - if (wx.openBusinessView) { - wx.openBusinessView({ - businessType: 'friendGoodsRecommend', - extraData: { - product: { - item_code: this.goodsSkuDetail.goods_id, - title: this.goodsSkuDetail.sku_name, - image_list: this.goodsSkuDetail.sku_images.map((ele) => { - return this.$util.img(ele); - }) - } - }, - success: function (res) { - }, - fail: function (res) { - } - }) - } - }, - // #endif - toEvaluateDetail(id) { - this.$util.redirectTo('/pages_tool/goods/evaluate', { - goods_id: id - }); - }, - showImg(e) { - //拿到图片的路径里面的内容放在我们数组中 - let contentimg = e.target.dataset.nodes; - let arrImg = []; - for (var i = 0; i < contentimg.length; i++) { - var img = contentimg[i].children; - if (Array.isArray(img)) { - for (var j = 0; j < img.length; j++) { - if (img[j].attrs && img[j].name == "img") { - if (img[j].attrs.src) { - arrImg.push(img[j].attrs.src) - } - } - } - } - } - //最后一步就是把我们的所有图片放在预览的api中就可以了 - uni.previewImage({ - current: arrImg, - urls: arrImg, - }) - }, - - //-------------------------------------社群------------------------------------- - - //添加福利群 - onCommunity() { - this.isCommunity = true - }, - onCloseCommunity() { - this.isCommunity = false - }, - - //-------------------------------------PDF文档------------------------------------- - // 切换详情 Tab - switchDetailTab(tab) { - if (tab !== 'html' && tab !== 'pdf') return; - this.detailTab = tab; - }, - onTapDoc(pdf_url) { - if (!pdf_url) return; - uni.showLoading({ - title: '正在加载' - }); - let url = this.$util.img(pdf_url); - uni.downloadFile({ - url: url, - success: (res) => { - if (res.statusCode === 200) { - let filePath = res.tempFilePath; - uni.openDocument({ - filePath: filePath, - success: () => { - console.log('打开成功'); - }, - fail: () => {}, - complete: () => { - uni.hideLoading(); - } - }); - } - }, - fail: (res) => { - uni.hideLoading(); - }, - complete: (res) => { - if (res.statusCode === 404) { - uni.showToast({ - title: '文件不存在', - icon: 'none' - }); - } - } - }); - }, - - } - +// 商品详情业务 +import { + Weixin +} from '@/common/js/wx-jssdk.js'; + +export default { + data() { + return { + skuId: 0, + goodsId: 0, + isIphoneX: false, //判断手机是否是iphoneX以上 + whetherCollection: 0, + + //是否开启预览,0:不开启,1:开启 + preview: 0, + videoContext: '', + + // 媒体,图片,视频 + + // 解决每个商品SKU图片数量不同时,无法切换到第一个,导致轮播图显示不出来 + swiperInterval: 1, + swiperAutoplay: false, + swiperCurrent: 1, + switchMedia: 'img', + + //评价 + goodsEvaluate: [{ + member_headimg: '', + member_name: '', + content: '', + images: [], + create_time: 0, + sku_name: '' + }], + evaluateConfig: { + evaluate_audit: 1, + evaluate_show: 0, + evaluate_status: 1 + }, + + // 是否可分享到好物圈 + goodsCircle: false, + service: null, + shareUrl: '', // 分享链接 + source_member: 0, //分享人的id + isCommunity: false, //社群弹窗 + + poster: "-1", //海报 + posterMsg: "", //海报错误信息 + posterHeight: 0, + posterParams: {}, //海报所需参数 + goodsRoute: '', + posterApi: '', + goodsAttrShow: false, // 商品属性是否展开 + + //门店列表 + storeList: { + data: [], + page: 1, + page_size: 10 + }, + isShowStore: false, + latitude: null, // 纬度 + longitude: null, // 经度 + evaluateCount: 0, // 商品评论数量 + deliveryType: null, // 配送方式 + isVirtual: 0, //是否为虚拟商品 + + // 详情 Tab: 'html' 商品详情 / 'pdf' 文档详情 + detailTab: 'html' + } + }, + created() { + this.isIphoneX = this.$util.uniappIsIPhoneX(); + + if (this.location) { + this.latitude = this.location.latitude; + this.longitude = this.location.longitude; + } else { + this.$util.getLocation(); + } + this.getStoreData(); + }, + watch: { + location: function (nVal) { + if (nVal) { + this.latitude = nVal.latitude; + this.longitude = nVal.longitude; + this.getStoreData(); + } + }, + // 跟随 goodsSkuDetail 变化重新决定默认 Tab + // 解决 refreshGoodsSkuDetail 后续合并 pdf_url 时,Tab 已显示但 detailTab 仍为 'html' 的问题 + goodsSkuDetail: { + deep: true, + immediate: true, + handler(newVal) { + if (!newVal) return; + if (newVal.pdf_url) { + this.detailTab = 'pdf'; + } else if (newVal.goods_content) { + this.detailTab = 'html'; + } + } + } + }, + methods: { + init(params) { + this.skuId = params.sku_id; + this.goodsId = params.goods_id; + this.preview = params.preview; + this.source_member = params.source_member; + this.whetherCollection = params.whetherCollection; + this.posterParams = params.posterParams; + + this.shareUrl = params.shareUrl; + this.goodsRoute = params.goodsRoute; + this.posterApi = params.posterApi; + this.isVirtual = params.isVirtual; + this.deliveryType = params.deliveryType; + this.evaluateConfig = params.evaluateConfig; + + if (this.evaluateConfig.evaluate_show == 1) { + //商品评论 + this.getGoodsEvaluate(params.evaluateList); + this.evaluateCount = params.evaluateCount; + } + + for (let k in this.deliveryType) { + if (k == 'store') { + this.isShowStore = true; + } + } + + this.getService(); + + this.videoContext = uni.createVideoContext('goodsVideo'); + + // #ifdef MP-WEIXIN + this.goodsSyncToGoodsCircle(); + // #endif + + }, + swiperChange(e) { + this.swiperCurrent = e.detail.current + 1; + }, + + //-------------------------------------服务------------------------------------- + + openMerchantsServicePopup() { + this.$refs.merchantsServicePopup.open(); + }, + closeMerchantsServicePopup() { + this.$refs.merchantsServicePopup.close(); + }, + + //-------------------------------------门店列表------------------------------------- + openStoreListPopup() { + this.$refs.storeListPopup.open(); + }, + closeStoreListPopup() { + this.$refs.storeListPopup.close(); + }, + getStoreData() { + //门店列表 + let data = { + page: this.storeList.page, + page_size: this.storeList.page_size + }; + if (this.latitude && this.longitude) { + data.latitude = this.latitude; + data.longitude = this.longitude; + } + this.$api.sendRequest({ + url: '/api/store/page', + data: data, + success: res => { + if (this.storeList.page == 1) this.storeList.data == []; + if (res.code >= 0 && res.data) { + this.storeList.data = this.storeList.data.concat(res.data.list); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + }, + selectStore(item) { + this.$util.redirectTo('/pages_tool/store/detail', { + store_id: item.store_id + }); + this.closeStoreListPopup(); + }, + //-------------------------------------属性------------------------------------- + + switchGoodsAttr() { + this.goodsAttrShow = !this.goodsAttrShow; + }, + //-------------------------------------评价------------------------------------- + //商品评论列表 + getGoodsEvaluate(list) { + if (list) { + this.goodsEvaluate = list; + this.goodsEvaluate.forEach((item, index) => { + if (this.goodsEvaluate[index].images) this.goodsEvaluate[index].images = this.goodsEvaluate[index].images.split(","); + if (this.goodsEvaluate[index].is_anonymous == 1) this.goodsEvaluate[index].member_name = this.goodsEvaluate[index].member_name.replace(this.goodsEvaluate[index].member_name.substring(1, this.goodsEvaluate[index].member_name.length - 1), '***') + }) + // if (this.goodsEvaluate.images) this.goodsEvaluate.images = this.goodsEvaluate.images.split(","); + // if (this.goodsEvaluate.is_anonymous == 1) this.goodsEvaluate.member_name = this.goodsEvaluate.member_name.replace( + // this.goodsEvaluate.member_name.substring(1, this.goodsEvaluate.member_name.length - 1), '***') + } + }, + // 预览评价图片 + previewEvaluate(index, img_index, field) { + var paths = []; + for (let i = 0; i < this.goodsEvaluate[index][field].length; i++) { + paths.push(this.$util.img(this.goodsEvaluate[index][field][i])); + } + uni.previewImage({ + current: img_index, + urls: paths + }); + }, + //-------------------------------------关注------------------------------------- + async collection() { + if (this.preview) return; // 开启预览,禁止任何操作和跳转 + + if (this.storeToken) { + + //未关注添加关注 + if (this.whetherCollection == 0) { + let res = await this.$api.sendRequest({ + url: "/api/goodscollect/add", + data: { + sku_id: this.skuId, + goods_id: this.goodsSkuDetail.goods_id, + sku_name: this.goodsSkuDetail.sku_name, + sku_price: this.goodsSkuDetail.show_price, + sku_image: this.goodsSkuDetail.sku_image + }, + async: false, + }); + var data = res.data; + if (data > 0) { + this.whetherCollection = 1; + } + } else { + //已关注取消关注 + let res = await this.$api.sendRequest({ + url: "/api/goodscollect/delete", + data: { + goods_id: this.goodsSkuDetail.goods_id + }, + async: false, + }); + var data = res.data; + if (data > 0) { + this.whetherCollection = 0; + } + } + return this.whetherCollection; + } else { + if (this.source_member) { + this.$refs.login.open(this.shareUrl + '&source_member=' + this.source_member); + } else { + this.$refs.login.open(this.shareUrl); + } + } + }, + //-------------------------------------分享------------------------------------- + // 打开分享弹出层 + openSharePopup() { + this.$refs.sharePopup.open(); + }, + // 关闭分享弹出层 + closeSharePopup() { + this.$refs.sharePopup.close(); + }, + copyUrl() { + let text = this.$config.h5Domain + this.shareUrl; + if (this.memberInfo && this.memberInfo.member_id) text += '&source_member=' + this.memberInfo.member_id; + this.$util.copy(text, () => { + this.closeSharePopup(); + }); + }, + + //-------------------------------------海报------------------------------------- + // 打开海报弹出层 + openPosterPopup() { + this.getGoodsPoster(); + this.$refs.sharePopup.close(); + }, + // 关闭海报弹出层 + closePosterPopup() { + this.$refs.posterPopup.close(); + this.poster = '' + }, + //生成海报 + getGoodsPoster() { + uni.showLoading({ + 'title': '海报生成中...' + }) + //活动海报信息 + if (this.memberInfo && this.memberInfo.member_id) this.posterParams.source_member = this.memberInfo.member_id; + + this.$api.sendRequest({ + url: this.posterApi, + data: { + page: this.goodsRoute, + qrcode_param: JSON.stringify(this.posterParams) + }, + success: res => { + if (res.code == 0) { + this.$refs.posterPopup.open(); + this.poster = res.data.path + "?time=" + new Date().getTime(); + } else { + this.posterMsg = res.message; + this.$util.showToast({ + title: res.message + }) + } + uni.hideLoading(); + }, + fail: err => { + uni.hideLoading(); + } + }); + }, + // 预览图片 + previewMedia(index) { + var paths = []; + for (let i = 0; i < this.goodsSkuDetail.sku_images.length; i++) { + paths.push(this.$util.img(this.goodsSkuDetail.sku_images[i], { + size: 'big' + })); + } + uni.previewImage({ + current: index, + urls: paths, + // longPressActions: { + // itemList: ['发送给朋友', '保存图片', '关注'], + // success: function(data) { + // console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片'); + // }, + // fail: function(err) { + // console.log(err.errMsg); + // } + // } + }); + }, + swiperImageError(index) { + this.goodsSkuDetail.sku_images[index] = this.$util.getDefaultImage().goods; + this.$forceUpdate(); + }, + // #ifdef MP || APP-PLUS + //小程序中保存海报 + saveGoodsPoster() { + let url = this.$util.img(this.poster); + uni.downloadFile({ + url: url, + success: (res) => { + if (res.errMsg == "downloadFile:ok") { + uni.saveImageToPhotosAlbum({ + filePath: res.tempFilePath, + success: () => { + this.$util.showToast({ + title: "保存成功" + }); + }, + fail: (err) => { + this.$util.showToast({ + title: "保存失败,请稍后重试" + }); + } + }); + } + }, + fail: (err) => { + this.$util.showToast({ + title: "保存失败,请稍后重试" + }); + } + }); + }, + // #endif + //售后保障查询 + getService() { + this.$api.sendRequest({ + url: '/api/goods/aftersale', + success: res => { + if (res.code == 0 && res.data) { + this.service = res.data; + } + } + }); + }, + + // #ifdef MP-WEIXIN + /** + * 将商品同步到微信圈子 + */ + goodsSyncToGoodsCircle() { + this.$api.sendRequest({ + url: '/goodscircle/api/goods/sync', + data: { + goods_id: this.goodsSkuDetail.goods_id + }, + success: res => { + if (res.code == 0) { + this.goodsCircle = true; + } + } + }) + }, + /** + * 将商品推荐到微信圈子 + */ + openBusinessView() { + if (wx.openBusinessView) { + wx.openBusinessView({ + businessType: 'friendGoodsRecommend', + extraData: { + product: { + item_code: this.goodsSkuDetail.goods_id, + title: this.goodsSkuDetail.sku_name, + image_list: this.goodsSkuDetail.sku_images.map((ele) => { + return this.$util.img(ele); + }) + } + }, + success: function (res) { + }, + fail: function (res) { + } + }) + } + }, + // #endif + toEvaluateDetail(id) { + this.$util.redirectTo('/pages_tool/goods/evaluate', { + goods_id: id + }); + }, + showImg(e) { + //拿到图片的路径里面的内容放在我们数组中 + let contentimg = e.target.dataset.nodes; + let arrImg = []; + for (var i = 0; i < contentimg.length; i++) { + var img = contentimg[i].children; + if (Array.isArray(img)) { + for (var j = 0; j < img.length; j++) { + if (img[j].attrs && img[j].name == "img") { + if (img[j].attrs.src) { + arrImg.push(img[j].attrs.src) + } + } + } + } + } + //最后一步就是把我们的所有图片放在预览的api中就可以了 + uni.previewImage({ + current: arrImg, + urls: arrImg, + }) + }, + + //-------------------------------------社群------------------------------------- + + //添加福利群 + onCommunity() { + this.isCommunity = true + }, + onCloseCommunity() { + this.isCommunity = false + }, + + //-------------------------------------PDF文档------------------------------------- + // 切换详情 Tab + switchDetailTab(tab) { + if (tab !== 'html' && tab !== 'pdf') return; + this.detailTab = tab; + }, + onTapDoc(pdf_url) { + if (!pdf_url) return; + uni.showLoading({ + title: '正在加载' + }); + let url = this.$util.img(pdf_url); + uni.downloadFile({ + url: url, + success: (res) => { + if (res.statusCode === 200) { + let filePath = res.tempFilePath; + uni.openDocument({ + filePath: filePath, + success: () => { + console.log('打开成功'); + }, + fail: () => {}, + complete: () => { + uni.hideLoading(); + } + }); + } + }, + fail: (res) => { + uni.hideLoading(); + }, + complete: (res) => { + if (res.statusCode === 404) { + uni.showToast({ + title: '文件不存在', + icon: 'none' + }); + } + } + }); + }, + + } + } \ No newline at end of file diff --git a/pages_goods/_components/goods-detail-view/goods-detail-view.vue b/pages_goods/_components/goods-detail-view/goods-detail-view.vue index 3ac445c..c8a43f1 100644 --- a/pages_goods/_components/goods-detail-view/goods-detail-view.vue +++ b/pages_goods/_components/goods-detail-view/goods-detail-view.vue @@ -1,679 +1,680 @@ - - - - - - + \ No newline at end of file diff --git a/pages_goods/_components/ns-goods-promotion/ns-goods-promotion.vue b/pages_goods/_components/ns-goods-promotion/ns-goods-promotion.vue index 7302f54..93c8905 100644 --- a/pages_goods/_components/ns-goods-promotion/ns-goods-promotion.vue +++ b/pages_goods/_components/ns-goods-promotion/ns-goods-promotion.vue @@ -1,125 +1,125 @@ - - - - - + + + + + diff --git a/pages_goods/cart.vue b/pages_goods/cart.vue index 6414191..b8dea99 100644 --- a/pages_goods/cart.vue +++ b/pages_goods/cart.vue @@ -1,390 +1,390 @@ - - - - - \ No newline at end of file diff --git a/pages_goods/cart.vue.bak b/pages_goods/cart.vue.bak deleted file mode 100644 index b8dea99..0000000 --- a/pages_goods/cart.vue.bak +++ /dev/null @@ -1,390 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages_goods/category.vue b/pages_goods/category.vue index f8b1c05..7f265db 100644 --- a/pages_goods/category.vue +++ b/pages_goods/category.vue @@ -1,149 +1,149 @@ - - - - - \ No newline at end of file diff --git a/pages_goods/detail.vue b/pages_goods/detail.vue index 0127d51..16437a8 100644 --- a/pages_goods/detail.vue +++ b/pages_goods/detail.vue @@ -1,760 +1,760 @@ - - - - - - + + + + + + diff --git a/pages_goods/list.vue b/pages_goods/list.vue index 24c2de5..1e0f8b9 100644 --- a/pages_goods/list.vue +++ b/pages_goods/list.vue @@ -1,269 +1,269 @@ - - - - - - + \ No newline at end of file diff --git a/pages_goods/public/js/cart.js b/pages_goods/public/js/cart.js index c50e84b..35134f6 100644 --- a/pages_goods/public/js/cart.js +++ b/pages_goods/public/js/cart.js @@ -1,598 +1,598 @@ -import common from './common.js'; - -export default { - mixins: [common], - data() { - return { - cartData: [], // 购物车 - checkAll: true, - totalPrice: '0.00', - totalCount: 0, - isSub: false, - invalidGoods: [], // 失效商品集合 - isIphoneX: false, //判断手机是否是iphoneX以上, - isAction: false, // 是否操作删除 - goodsSkuDetail: null, - discount: {}, - manjian: {}, - receiveSub: false, - discountPopupShow: false, - startX: '', // 触摸开始位置 - endX: '', // 触摸结束位置 - refresherTriggered: false, // 设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发 - timeout: {} - }; - }, - onLoad() { - uni.hideTabBar(); - this.isIphoneX = this.$util.uniappIsIPhoneX(); - }, - onShow() { - if (this.storeToken) { - this.getCartData(); - } else { - this.cartData = []; - this.invalidGoods = []; - this.calculationTotalPrice(); - } - }, - onHide() { - this.isAction = false; - }, - onUnload() { - if (!this.storeToken && this.$refs.login) this.$refs.login.cancelCompleteInfo(); - }, - onReady() { - if (!this.storeToken) { - if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); - } - }, - computed: { - hasData() { - return this.cartData.length > 0 || this.invalidGoods.length > 0; - } - }, - methods: { - initNum(item) { - let max_buy = item.max_buy > 0 && item.max_buy < item.stock ? item.max_buy : item.stock; - max_buy = max_buy == 0 ? 1 : max_buy; - if (item.num > max_buy) return max_buy; - return item.num; - }, - /** - * 获取购物车数据 - */ - getCartData() { - this.$api.sendRequest({ - url: '/api/cart/goodslists', - success: res => { - if (res.code >= 0) { - if (res.data.length) this.handleCartData(res.data); - else this.cartData = []; - } - this.refresherTriggered = false; - if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); - }, - fail: res => { - if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); - } - }); - }, - /** - * 处理购物车数据结构 - */ - handleCartData(data) { - this.invalidGoods = []; - this.cartData = []; - var temp = {}; - data.forEach((item, index) => { - if (item.goods_state == 1) { - if (item.store_goods_status != undefined && item.store_goods_status != 1) { - this.invalidGoods.push(item); - } else if (item.min_buy > 0 && item.min_buy > item.stock) { - // 如果最小限购超出库存则该商品失效 - this.invalidGoods.push(item); - } else { - item.checked = true; - item.edit = false; - if (temp['site_' + item.site_id] != undefined) { - temp['site_' + item.site_id].cartList.push(item); - } else { - temp['site_' + item.site_id] = { - siteId: item.site_id, - siteName: item.site_name, - edit: false, - checked: true, - cartList: [item] - }; - } - } - } else { - this.invalidGoods.push(item); - } - }); - - this.cartData = []; - Object.keys(temp).forEach(key => { - this.cartData.push(temp[key]); - }); - this.calculationTotalPrice(); - if (this.cartData.length) { - this.cartData[0].cartList.forEach(v => { - if (v.sku_spec_format) { - v.sku_spec_format = JSON.parse(v.sku_spec_format); - } else { - v.sku_spec_format = []; - } - }); - } - if (this.invalidGoods.length) { - this.invalidGoods.forEach(v => { - if (v.sku_spec_format) { - v.sku_spec_format = JSON.parse(v.sku_spec_format); - } else { - v.sku_spec_format = []; - } - }); - } - }, - /** - * 单选 - * @param siteIndex - * @param index - */ - singleElection(siteIndex, index) { - this.cartData[siteIndex].cartList[index].checked = !this.cartData[siteIndex].cartList[index].checked; - this.calculationTotalPrice(); - }, - /** - * 店铺全选 - * @param checked - * @param index - */ - siteAllElection(checked, index) { - this.cartData[index].checked = checked; - this.cartData[index].cartList.forEach(item => { - item.checked = checked; - }); - this.calculationTotalPrice(); - }, - /** - * 全选 - */ - allElection(checked) { - if (typeof checked == 'boolean') { - this.checkAll = checked; - } else { - this.checkAll = !this.checkAll; - } - if (this.cartData.length) { - this.cartData.forEach(siteItem => { - siteItem.checked = this.checkAll; - siteItem.cartList.forEach(item => { - item.checked = this.checkAll; - }); - }); - } - this.calculationTotalPrice(); - }, - /** - * 计算购物车总价 - */ - calculationTotalPrice() { - if (this.cartData.length) { - let totalPrice = 0, - totalCount = 0, - siteAllElectionCount = 0; - - this.cartData.forEach(siteItem => { - let siteGoodsCount = 0; - siteItem.cartList.forEach(item => { - if (item.checked) { - siteGoodsCount += 1; - totalCount += parseInt(item.num); - if (Number(item.member_price) > 0 && Number(item.member_price) < Number(item.discount_price)) { - totalPrice += item.member_price * item.num; - } else { - totalPrice += item.discount_price * item.num; - } - } - }); - if (siteItem.cartList.length == siteGoodsCount) { - siteItem.checked = true; - siteAllElectionCount += 1; - } else { - siteItem.checked = false; - } - }); - this.totalPrice = totalPrice.toFixed(2); - this.totalCount = totalCount; - this.checkAll = this.cartData.length == siteAllElectionCount; - } else { - this.totalPrice = '0.00'; - this.totalCount = 0; - } - this.discountCalculate(); - }, - /** - * 删除购物车 - * @param tag - * @param siteIndex - * @param cartIndex - */ - deleteCart(tag, siteIndex, cartIndex) { - var cart_id = []; - if (tag == 'all') { - for (let i = 0; i < this.cartData.length; i++) { - for (let j = 0; j < this.cartData[i].cartList.length; j++) { - if (this.cartData[i].cartList[j].checked) cart_id.push(this.cartData[i].cartList[j].cart_id); - } - } - } else { - cart_id.push(this.cartData[siteIndex].cartList[cartIndex].cart_id); - } - if (cart_id.length == 0) { - this.$util.showToast({ - title: $lang('goods.public.js.cart.l236') - }); - return; - } - - uni.showModal({ - title: $lang('common.wxwork-contact.l202.t0'), - content: cart_id.length > 1 ? '确定要删除这些商品吗?' : $lang('goods.public.js.cart.l243'), - success: res => { - if (res.confirm) { - cart_id = cart_id.toString(); - - this.$api.sendRequest({ - url: '/api/cart/delete', - data: { - cart_id - }, - success: res => { - if (res.code >= 0) { - - if (tag == 'all') { - // 全选 - for (var i = 0; i < this.cartData.length; i++) { - for (var j = 0; j < this.cartData[i].cartList.length; j++) { - var item = this.cartData[i].cartList[j]; - if (item.checked) { - this.cartData[i].cartList.splice(j, 1); - j = -1; - } - } - if (this.cartData[i].cartList.length == 0) { - this.cartData.splice(i, 1); - i = -1; - } - } - - this.$store.dispatch('emptyCart'); - } else { - let item = this.cartData[siteIndex].cartList; - let goods_id = item[cartIndex].goods_id; - let sku_id = item[cartIndex].sku_id; - - delete this.cartList['goods_' + goods_id]['sku_' + sku_id]; - if (Object.keys(this.cartList['goods_' + goods_id]).length == 2) { - delete this.cartList['goods_' + goods_id]; - } - this.$store.dispatch('cartCalculate'); - - item.splice(cartIndex, 1); - if (item.length == 0) this.cartData.splice(siteIndex, 1); - - } - - this.resetEditStatus(); - this.calculationTotalPrice(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - } - } - }); - }, - /** - * 变更购物车数量 - * @param {Object} params - */ - cartNumChange(num, params) { - if (isNaN(num)) return; - let data = this.cartData[params.siteIndex].cartList[params.cartIndex], - max_buy = data.is_limit && data.max_buy > 0 && data.max_buy < data.stock ? data.max_buy : data.stock, - min_buy = data.min_buy > 0 ? data.min_buy : 1; - if (num > max_buy) num = max_buy; - if (num < min_buy) num = min_buy; - - let cartId = this.cartData[params.siteIndex].cartList[params.cartIndex].cart_id - - if (this.timeout[cartId]) clearTimeout(this.timeout[cartId]) - - this.timeout[cartId] = setTimeout(() => { - this.$api.sendRequest({ - url: '/api/cart/edit', - data: { - num, - cart_id: cartId - }, - success: res => { - if (res.code >= 0) { - let item = this.cartData[params.siteIndex].cartList[params.cartIndex]; - let goods_id = item.goods_id; - let sku_id = item.sku_id; - item.num = num; - - this.cartList['goods_' + goods_id]['sku_' + sku_id].num = num; - this.$store.dispatch('cartCalculate'); - this.resetEditStatus(); - - this.calculationTotalPrice(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - }, 800) - }, - /** - * 结算 - */ - settlement() { - if (this.totalCount > 0) { - let cart_ids = []; - this.cartData.forEach(siteItem => { - siteItem.cartList.forEach(item => { - if (item.checked) { - cart_ids.push(item.cart_id); - } - }); - }); - - if (this.discount.coupon_info && this.discount.coupon_info.receive_type == 'wait') this.receiveCoupon( - this.discount.coupon_info.coupon_type_id, false); - - if (this.isSub) return; - this.isSub = true; - - uni.removeStorageSync('delivery'); - uni.setStorage({ - key: 'orderCreateData', - data: { - cart_ids: cart_ids.toString() - }, - success: () => { - this.$util.redirectTo('/pages_order/payment'); - this.isSub = false; - } - }); - } - }, - /** - * 清空失效商品 - */ - clearInvalidGoods() { - uni.showModal({ - title: $lang('common.wxwork-contact.l202.t0'), - content: $lang('goods.public.js.cart.l385'), - success: res => { - if (res.confirm) { - var cart_ids = []; - this.invalidGoods.forEach(goodsItem => { - cart_ids.push(goodsItem.cart_id); - }); - if (cart_ids.length) { - this.$api.sendRequest({ - url: '/api/cart/delete', - data: { - cart_id: cart_ids.toString() - }, - success: res => { - if (res.code >= 0) { - this.invalidGoods = []; - this.refreshCartNumber(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - } - } - } - }); - }, - imageError(siteIndex, cartIndex) { - this.cartData[siteIndex].cartList[cartIndex].sku_image = this.$util.getDefaultImage().goods; - this.$forceUpdate(); - }, - toGoodsDetail(item) { - this.$util.redirectTo('/pages_goods/detail', { - sku_id: item.sku_id - }); - }, - // 购物车数量 - refreshCartNumber() { - if (this.storeToken) { - this.$store.dispatch('getCartNumber'); - this.resetEditStatus(); - } - }, - goodsLimit(event, params) { - let data = this.cartData[params.siteIndex].cartList[params.cartIndex]; - if (event.type == 'plus') { - if (data.max_buy > 0 && data.max_buy < data.stock) { - this.$util.showToast({ - title: $lang('common.ns-goods-sku.ns-goods-sku-category.l278.t0') + data.max_buy + $lang('common.ns-goods-sku.ns-goods-sku-index.l150.t0') - }); - } else { - this.$util.showToast({ - title: $lang('common.ns-goods-sku.ns-goods-sku-category.l264.t0') - }); - } - } else { - // 数量减至最少时,则删除商品 - this.deleteCart('single', params.siteIndex, params.cartIndex); - // this.$util.showToast({ - // title: '最少购买' + event.value + '件' - // }); - } - }, - // 重置编辑状态 - resetEditStatus() { - if (this.cartData.length) { - for (var i = 0; i < this.cartData[0].cartList.length; i++) { - this.cartData[0].cartList[i].edit = false; - } - this.$forceUpdate(); - } - }, - changeAction() { - this.isAction = !this.isAction; - this.resetEditStatus(); - }, - selectSku(data) { - let goodsSkuDetail = this.$util.deepClone(data); - if (goodsSkuDetail.goods_spec_format) goodsSkuDetail.goods_spec_format = JSON.parse(goodsSkuDetail.goods_spec_format); - this.goodsSkuDetail = goodsSkuDetail; - - this.$nextTick(() => { - this.$refs.selectSku.show('confirm', (sku_id, num) => { - this.$api.sendRequest({ - url: '/api/cart/editcartsku', - data: { - cart_id: data.cart_id, - sku_id: sku_id, - num: num - }, - success: res => { - if (res.code >= 0) { - this.invalidGoods = []; - this.getCartData(); - this.refreshCartNumber(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - }, this.goodsSkuDetail); - }) - }, - toggleDiscountPopup() { - if (this.$refs.discountPopup.showPopup) this.$refs.discountPopup.close(); - else this.$refs.discountPopup.open(); - this.discountPopupShow = !this.discountPopupShow; - }, - /** - * 优惠信息计算 - */ - discountCalculate() { - if (this.cartData.length == 0) return; - let skuIds = []; - this.cartData.forEach(siteItem => { - siteItem.cartList.forEach(item => { - if (item.checked) { - skuIds.push({ - sku_id: item.sku_id, - num: item.num - }); - } - }); - }); - if (skuIds.length == 0) { - this.discount = {}; - return; - } - - this.$api.sendRequest({ - url: '/api/cartcalculate/calculate', - data: { - sku_ids: JSON.stringify(skuIds) - }, - success: res => { - if (res.code >= 0 && res.data && (res.data.coupon_money > 0 || res.data.promotion_money > 0)) { - this.discount = res.data; - let manjian = {}; - res.data.goods_list.forEach(item => { - if (item.promotion && item.promotion.manjian) { - manjian['sku_' + item.sku_id] = JSON.parse(item.promotion.manjian.rule_json); - } - }) - Object.assign(this.manjian, manjian); - this.refresherTriggered = false; - } else { - this.discount = {}; - } - } - }) - }, - /** - * 领取优惠券 - * tips 失败时是否提示 - * @param {Object} couponTypeId - */ - receiveCoupon(couponTypeId, tips = true) { - if (this.receiveSub) return; - this.receiveSub = true; - this.$api.sendRequest({ - url: '/coupon/api/coupon/receive', - data: { - coupon_type_id: couponTypeId, - get_type: 2 //获取方式:1订单2.直接领取3.活动领取 - }, - success: res => { - if (res.code == 0) { - this.$set(this.discount.coupon_info, 'receive_type', ''); - } else { - if (tips) this.$util.showToast({ - title: res.message - }); - this.receiveSub = false; - } - } - }); - }, - // 手指触摸事件 用于菜单左滑 - touchS(e) { - this.startX = e.touches[0].clientX; - }, - touchE(e, cartIndex) { - this.endX = e.changedTouches[0].clientX; - // 触摸开始到停止的差值,小于0左滑,大于0右滑 - var disX = this.startX - this.endX; - // cartIndex.edit = disX > 50; - if (disX > 50) cartIndex.edit = true; - else if (disX < 0) cartIndex.edit = false; - this.$forceUpdate(); - }, - moneyFormat(money) { - if (isNaN(parseFloat(money))) return money; - return parseFloat(money).toFixed(2); - }, - refreshSkuDetail(goodsSkuDetail) { - this.goodsSkuDetail = goodsSkuDetail; - }, - onRefresh(e) { - this.refresherTriggered = true; - if (this.storeToken) { - this.getCartData(); - this.refreshCartNumber(); - } else { - this.cartData = []; - this.invalidGoods = []; - this.calculationTotalPrice(); - } - } - }, +import common from './common.js'; + +export default { + mixins: [common], + data() { + return { + cartData: [], // 购物车 + checkAll: true, + totalPrice: '0.00', + totalCount: 0, + isSub: false, + invalidGoods: [], // 失效商品集合 + isIphoneX: false, //判断手机是否是iphoneX以上, + isAction: false, // 是否操作删除 + goodsSkuDetail: null, + discount: {}, + manjian: {}, + receiveSub: false, + discountPopupShow: false, + startX: '', // 触摸开始位置 + endX: '', // 触摸结束位置 + refresherTriggered: false, // 设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发 + timeout: {} + }; + }, + onLoad() { + uni.hideTabBar(); + this.isIphoneX = this.$util.uniappIsIPhoneX(); + }, + onShow() { + if (this.storeToken) { + this.getCartData(); + } else { + this.cartData = []; + this.invalidGoods = []; + this.calculationTotalPrice(); + } + }, + onHide() { + this.isAction = false; + }, + onUnload() { + if (!this.storeToken && this.$refs.login) this.$refs.login.cancelCompleteInfo(); + }, + onReady() { + if (!this.storeToken) { + if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); + } + }, + computed: { + hasData() { + return this.cartData.length > 0 || this.invalidGoods.length > 0; + } + }, + methods: { + initNum(item) { + let max_buy = item.max_buy > 0 && item.max_buy < item.stock ? item.max_buy : item.stock; + max_buy = max_buy == 0 ? 1 : max_buy; + if (item.num > max_buy) return max_buy; + return item.num; + }, + /** + * 获取购物车数据 + */ + getCartData() { + this.$api.sendRequest({ + url: '/api/cart/goodslists', + success: res => { + if (res.code >= 0) { + if (res.data.length) this.handleCartData(res.data); + else this.cartData = []; + } + this.refresherTriggered = false; + if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); + }, + fail: res => { + if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); + } + }); + }, + /** + * 处理购物车数据结构 + */ + handleCartData(data) { + this.invalidGoods = []; + this.cartData = []; + var temp = {}; + data.forEach((item, index) => { + if (item.goods_state == 1) { + if (item.store_goods_status != undefined && item.store_goods_status != 1) { + this.invalidGoods.push(item); + } else if (item.min_buy > 0 && item.min_buy > item.stock) { + // 如果最小限购超出库存则该商品失效 + this.invalidGoods.push(item); + } else { + item.checked = true; + item.edit = false; + if (temp['site_' + item.site_id] != undefined) { + temp['site_' + item.site_id].cartList.push(item); + } else { + temp['site_' + item.site_id] = { + siteId: item.site_id, + siteName: item.site_name, + edit: false, + checked: true, + cartList: [item] + }; + } + } + } else { + this.invalidGoods.push(item); + } + }); + + this.cartData = []; + Object.keys(temp).forEach(key => { + this.cartData.push(temp[key]); + }); + this.calculationTotalPrice(); + if (this.cartData.length) { + this.cartData[0].cartList.forEach(v => { + if (v.sku_spec_format) { + v.sku_spec_format = JSON.parse(v.sku_spec_format); + } else { + v.sku_spec_format = []; + } + }); + } + if (this.invalidGoods.length) { + this.invalidGoods.forEach(v => { + if (v.sku_spec_format) { + v.sku_spec_format = JSON.parse(v.sku_spec_format); + } else { + v.sku_spec_format = []; + } + }); + } + }, + /** + * 单选 + * @param siteIndex + * @param index + */ + singleElection(siteIndex, index) { + this.cartData[siteIndex].cartList[index].checked = !this.cartData[siteIndex].cartList[index].checked; + this.calculationTotalPrice(); + }, + /** + * 店铺全选 + * @param checked + * @param index + */ + siteAllElection(checked, index) { + this.cartData[index].checked = checked; + this.cartData[index].cartList.forEach(item => { + item.checked = checked; + }); + this.calculationTotalPrice(); + }, + /** + * 全选 + */ + allElection(checked) { + if (typeof checked == 'boolean') { + this.checkAll = checked; + } else { + this.checkAll = !this.checkAll; + } + if (this.cartData.length) { + this.cartData.forEach(siteItem => { + siteItem.checked = this.checkAll; + siteItem.cartList.forEach(item => { + item.checked = this.checkAll; + }); + }); + } + this.calculationTotalPrice(); + }, + /** + * 计算购物车总价 + */ + calculationTotalPrice() { + if (this.cartData.length) { + let totalPrice = 0, + totalCount = 0, + siteAllElectionCount = 0; + + this.cartData.forEach(siteItem => { + let siteGoodsCount = 0; + siteItem.cartList.forEach(item => { + if (item.checked) { + siteGoodsCount += 1; + totalCount += parseInt(item.num); + if (Number(item.member_price) > 0 && Number(item.member_price) < Number(item.discount_price)) { + totalPrice += item.member_price * item.num; + } else { + totalPrice += item.discount_price * item.num; + } + } + }); + if (siteItem.cartList.length == siteGoodsCount) { + siteItem.checked = true; + siteAllElectionCount += 1; + } else { + siteItem.checked = false; + } + }); + this.totalPrice = totalPrice.toFixed(2); + this.totalCount = totalCount; + this.checkAll = this.cartData.length == siteAllElectionCount; + } else { + this.totalPrice = '0.00'; + this.totalCount = 0; + } + this.discountCalculate(); + }, + /** + * 删除购物车 + * @param tag + * @param siteIndex + * @param cartIndex + */ + deleteCart(tag, siteIndex, cartIndex) { + var cart_id = []; + if (tag == 'all') { + for (let i = 0; i < this.cartData.length; i++) { + for (let j = 0; j < this.cartData[i].cartList.length; j++) { + if (this.cartData[i].cartList[j].checked) cart_id.push(this.cartData[i].cartList[j].cart_id); + } + } + } else { + cart_id.push(this.cartData[siteIndex].cartList[cartIndex].cart_id); + } + if (cart_id.length == 0) { + this.$util.showToast({ + title: '请选择要删除的商品' + }); + return; + } + + uni.showModal({ + title: '提示', + content: cart_id.length > 1 ? '确定要删除这些商品吗?' : '确定要删除该商品吗?', + success: res => { + if (res.confirm) { + cart_id = cart_id.toString(); + + this.$api.sendRequest({ + url: '/api/cart/delete', + data: { + cart_id + }, + success: res => { + if (res.code >= 0) { + + if (tag == 'all') { + // 全选 + for (var i = 0; i < this.cartData.length; i++) { + for (var j = 0; j < this.cartData[i].cartList.length; j++) { + var item = this.cartData[i].cartList[j]; + if (item.checked) { + this.cartData[i].cartList.splice(j, 1); + j = -1; + } + } + if (this.cartData[i].cartList.length == 0) { + this.cartData.splice(i, 1); + i = -1; + } + } + + this.$store.dispatch('emptyCart'); + } else { + let item = this.cartData[siteIndex].cartList; + let goods_id = item[cartIndex].goods_id; + let sku_id = item[cartIndex].sku_id; + + delete this.cartList['goods_' + goods_id]['sku_' + sku_id]; + if (Object.keys(this.cartList['goods_' + goods_id]).length == 2) { + delete this.cartList['goods_' + goods_id]; + } + this.$store.dispatch('cartCalculate'); + + item.splice(cartIndex, 1); + if (item.length == 0) this.cartData.splice(siteIndex, 1); + + } + + this.resetEditStatus(); + this.calculationTotalPrice(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + } + } + }); + }, + /** + * 变更购物车数量 + * @param {Object} params + */ + cartNumChange(num, params) { + if (isNaN(num)) return; + let data = this.cartData[params.siteIndex].cartList[params.cartIndex], + max_buy = data.is_limit && data.max_buy > 0 && data.max_buy < data.stock ? data.max_buy : data.stock, + min_buy = data.min_buy > 0 ? data.min_buy : 1; + if (num > max_buy) num = max_buy; + if (num < min_buy) num = min_buy; + + let cartId = this.cartData[params.siteIndex].cartList[params.cartIndex].cart_id + + if (this.timeout[cartId]) clearTimeout(this.timeout[cartId]) + + this.timeout[cartId] = setTimeout(() => { + this.$api.sendRequest({ + url: '/api/cart/edit', + data: { + num, + cart_id: cartId + }, + success: res => { + if (res.code >= 0) { + let item = this.cartData[params.siteIndex].cartList[params.cartIndex]; + let goods_id = item.goods_id; + let sku_id = item.sku_id; + item.num = num; + + this.cartList['goods_' + goods_id]['sku_' + sku_id].num = num; + this.$store.dispatch('cartCalculate'); + this.resetEditStatus(); + + this.calculationTotalPrice(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + }, 800) + }, + /** + * 结算 + */ + settlement() { + if (this.totalCount > 0) { + let cart_ids = []; + this.cartData.forEach(siteItem => { + siteItem.cartList.forEach(item => { + if (item.checked) { + cart_ids.push(item.cart_id); + } + }); + }); + + if (this.discount.coupon_info && this.discount.coupon_info.receive_type == 'wait') this.receiveCoupon( + this.discount.coupon_info.coupon_type_id, false); + + if (this.isSub) return; + this.isSub = true; + + uni.removeStorageSync('delivery'); + uni.setStorage({ + key: 'orderCreateData', + data: { + cart_ids: cart_ids.toString() + }, + success: () => { + this.$util.redirectTo('/pages_order/payment'); + this.isSub = false; + } + }); + } + }, + /** + * 清空失效商品 + */ + clearInvalidGoods() { + uni.showModal({ + title: '提示', + content: '确定要清空这些商品吗?', + success: res => { + if (res.confirm) { + var cart_ids = []; + this.invalidGoods.forEach(goodsItem => { + cart_ids.push(goodsItem.cart_id); + }); + if (cart_ids.length) { + this.$api.sendRequest({ + url: '/api/cart/delete', + data: { + cart_id: cart_ids.toString() + }, + success: res => { + if (res.code >= 0) { + this.invalidGoods = []; + this.refreshCartNumber(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + } + } + } + }); + }, + imageError(siteIndex, cartIndex) { + this.cartData[siteIndex].cartList[cartIndex].sku_image = this.$util.getDefaultImage().goods; + this.$forceUpdate(); + }, + toGoodsDetail(item) { + this.$util.redirectTo('/pages_goods/detail', { + sku_id: item.sku_id + }); + }, + // 购物车数量 + refreshCartNumber() { + if (this.storeToken) { + this.$store.dispatch('getCartNumber'); + this.resetEditStatus(); + } + }, + goodsLimit(event, params) { + let data = this.cartData[params.siteIndex].cartList[params.cartIndex]; + if (event.type == 'plus') { + if (data.max_buy > 0 && data.max_buy < data.stock) { + this.$util.showToast({ + title: '该商品每人限购' + data.max_buy + '件' + }); + } else { + this.$util.showToast({ + title: '库存不足' + }); + } + } else { + // 数量减至最少时,则删除商品 + this.deleteCart('single', params.siteIndex, params.cartIndex); + // this.$util.showToast({ + // title: '最少购买' + event.value + '件' + // }); + } + }, + // 重置编辑状态 + resetEditStatus() { + if (this.cartData.length) { + for (var i = 0; i < this.cartData[0].cartList.length; i++) { + this.cartData[0].cartList[i].edit = false; + } + this.$forceUpdate(); + } + }, + changeAction() { + this.isAction = !this.isAction; + this.resetEditStatus(); + }, + selectSku(data) { + let goodsSkuDetail = this.$util.deepClone(data); + if (goodsSkuDetail.goods_spec_format) goodsSkuDetail.goods_spec_format = JSON.parse(goodsSkuDetail.goods_spec_format); + this.goodsSkuDetail = goodsSkuDetail; + + this.$nextTick(() => { + this.$refs.selectSku.show('confirm', (sku_id, num) => { + this.$api.sendRequest({ + url: '/api/cart/editcartsku', + data: { + cart_id: data.cart_id, + sku_id: sku_id, + num: num + }, + success: res => { + if (res.code >= 0) { + this.invalidGoods = []; + this.getCartData(); + this.refreshCartNumber(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + }, this.goodsSkuDetail); + }) + }, + toggleDiscountPopup() { + if (this.$refs.discountPopup.showPopup) this.$refs.discountPopup.close(); + else this.$refs.discountPopup.open(); + this.discountPopupShow = !this.discountPopupShow; + }, + /** + * 优惠信息计算 + */ + discountCalculate() { + if (this.cartData.length == 0) return; + let skuIds = []; + this.cartData.forEach(siteItem => { + siteItem.cartList.forEach(item => { + if (item.checked) { + skuIds.push({ + sku_id: item.sku_id, + num: item.num + }); + } + }); + }); + if (skuIds.length == 0) { + this.discount = {}; + return; + } + + this.$api.sendRequest({ + url: '/api/cartcalculate/calculate', + data: { + sku_ids: JSON.stringify(skuIds) + }, + success: res => { + if (res.code >= 0 && res.data && (res.data.coupon_money > 0 || res.data.promotion_money > 0)) { + this.discount = res.data; + let manjian = {}; + res.data.goods_list.forEach(item => { + if (item.promotion && item.promotion.manjian) { + manjian['sku_' + item.sku_id] = JSON.parse(item.promotion.manjian.rule_json); + } + }) + Object.assign(this.manjian, manjian); + this.refresherTriggered = false; + } else { + this.discount = {}; + } + } + }) + }, + /** + * 领取优惠券 + * tips 失败时是否提示 + * @param {Object} couponTypeId + */ + receiveCoupon(couponTypeId, tips = true) { + if (this.receiveSub) return; + this.receiveSub = true; + this.$api.sendRequest({ + url: '/coupon/api/coupon/receive', + data: { + coupon_type_id: couponTypeId, + get_type: 2 //获取方式:1订单2.直接领取3.活动领取 + }, + success: res => { + if (res.code == 0) { + this.$set(this.discount.coupon_info, 'receive_type', ''); + } else { + if (tips) this.$util.showToast({ + title: res.message + }); + this.receiveSub = false; + } + } + }); + }, + // 手指触摸事件 用于菜单左滑 + touchS(e) { + this.startX = e.touches[0].clientX; + }, + touchE(e, cartIndex) { + this.endX = e.changedTouches[0].clientX; + // 触摸开始到停止的差值,小于0左滑,大于0右滑 + var disX = this.startX - this.endX; + // cartIndex.edit = disX > 50; + if (disX > 50) cartIndex.edit = true; + else if (disX < 0) cartIndex.edit = false; + this.$forceUpdate(); + }, + moneyFormat(money) { + if (isNaN(parseFloat(money))) return money; + return parseFloat(money).toFixed(2); + }, + refreshSkuDetail(goodsSkuDetail) { + this.goodsSkuDetail = goodsSkuDetail; + }, + onRefresh(e) { + this.refresherTriggered = true; + if (this.storeToken) { + this.getCartData(); + this.refreshCartNumber(); + } else { + this.cartData = []; + this.invalidGoods = []; + this.calculationTotalPrice(); + } + } + }, } \ No newline at end of file diff --git a/pages_goods/public/js/detail.js b/pages_goods/public/js/detail.js index 76ab684..787a955 100644 --- a/pages_goods/public/js/detail.js +++ b/pages_goods/public/js/detail.js @@ -1,525 +1,525 @@ -export default { - data() { - return { - goodsRoute: '/pages_goods/detail', - couponList: [], //优惠券列表 - couponBtnSwitch: false, //获取优惠券防止重复提交 - - posterApi: '/api/goods/poster', - - //满减活动 - manjian: { - type: 0, - manjian_name: "", - rule_json: null - }, - //组合套餐 - bundlingType: false, - bundling: [{ - bundling_goods: { - bl_name: '', - sku_image: '' - } - }], - - membercard: null, // 会员卡信息 - hackReset: true, - cardOff: false, - informationform:[]//留言表单 - - } - }, - computed: { - showDiscount() { - var flag = false; - if ( - this.preview == 0 && - this.addonIsExist.discount && - this.goodsSkuDetail.promotion_type == 1 && - this.goodsSkuDetail.discountTimeMachine && - (!this.goodsSkuDetail.member_price || (this.goodsSkuDetail.member_price > 0 && Number(this.goodsSkuDetail.member_price) > Number(this.goodsSkuDetail.discount_price)) - ) - ) { - flag = true; - } - return flag; - }, - memberCardDiscount() { - let discount = 0, - showPrice = this.goodsSkuDetail.member_price > 0 && Number(this.goodsSkuDetail.member_price) < Number(this.goodsSkuDetail.discount_price) ? this.goodsSkuDetail.member_price : this.goodsSkuDetail.discount_price; - if (this.membercard && this.membercard.member_price > 0 && (parseFloat(showPrice) > parseFloat(this.membercard.member_price))) { - discount = parseFloat(showPrice) - parseFloat(this.membercard.member_price); - } - return discount.toFixed(2); - }, - //表单高度 - FormHeight(){ - let height = 48; - if (this.goodsForm && this.goodsForm.length) { - height += this.goodsForm.length * 5; - } - height += 'vh'; - return height; - } - }, - onLoad(data) { - - // #ifdef MP-ALIPAY - let options = my.getLaunchOptionsSync(); - options.query && Object.assign(data, options.query) - // #endif - - this.skuId = data.sku_id || 0; - this.goodsId = data.goods_id || 0; - - // 小程序扫码进入 - if (data.scene) { - var sceneParams = decodeURIComponent(data.scene); - sceneParams = sceneParams.split('&'); - if (sceneParams.length) { - sceneParams.forEach(item => { - if (item.indexOf('goods_id') != -1) this.goodsId = item.split('-')[1]; - }); - } - } - - // #ifdef MP-WEIXIN - this.getShareImg(); - // #endif - }, - async onShow() { - //同步获取商品详情 - await this.getGoodsSkuDetail(); - }, - onHide() { - this.couponBtnSwitch = false; - }, - methods: { - //拨打电话 - phoneClick(mobile){ - uni.makePhoneCall({ - phoneNumber: mobile+'', - success(){}, - fail(){} - }) - }, - setSkuId(val) { - if (val) { - this.skuId = val; - this.getBundling(); - } - }, - // 获取商品详情 - async getGoodsSkuDetail() { - let res = await this.$api.sendRequest({ - url: '/api/goodssku/detail', - async: false, - data: { - sku_id: this.skuId, - goods_id: this.goodsId, - } - }); - let data = res.data; - if (data.goods_sku_detail != null) { - if (data.goods_sku_detail.promotion_type == 'presale' && data.goods_sku_detail.presale_id) { - this.$util.redirectTo('/pages_promotion/presale/detail', { - id: data.goods_sku_detail.presale_id, - sku_id: this.skuId - }, 'reLaunch'); - return; - } - if(uni.getStorageSync('lang') == 'en-us') data.goods_sku_detail.goods_name = data.goods_sku_detail.en_goods_name - - this.goodsSkuDetail = data.goods_sku_detail; - if (!this.skuId) this.skuId = this.goodsSkuDetail.sku_id; - if (!this.goodsId) this.goodsId = this.goodsSkuDetail.goods_id; - // 分享参数、链接 - this.shareQuery = 'goods_id=' + this.goodsSkuDetail.goods_id; - this.shareUrl = this.goodsRoute + '?' + this.shareQuery; - - // 在线客服聊天参数 - this.chatRoomParams = { - sku_id: this.goodsSkuDetail.sku_id - }; - let typeId = this.goodsSkuDetail.goods_promotion[0]; - if (typeId) { - // 限时折扣 - if (typeId.discount_id) { - this.chatRoomParams.type = 'discount' - this.chatRoomParams.type_id = typeId.discount_id - } - } - - // 海报参数 - this.posterParams = { - goods_id: this.goodsId - }; - - // 处理商品数据 - this.handleGoodsSkuData(); - - // 限时折扣 - if (this.goodsSkuDetail.promotion_type == 1 && this.addonIsExist.discount) { - //检测倒计时 - if ((this.goodsSkuDetail.end_time - res.timestamp) > 0) { - this.goodsSkuDetail.discountTimeMachine = this.$util.countDown(this.goodsSkuDetail.end_time - res.timestamp); - } else { - this.goodsSkuDetail.promotion_type = 0; - } - } - if (this.goodsSkuDetail.promotion_type == 1 && this.goodsSkuDetail.discountTimeMachine) { - if (this.goodsSkuDetail.member_price > 0 && Number(this.goodsSkuDetail.member_price) <= Number(this.goodsSkuDetail.discount_price)) { - this.goodsSkuDetail.show_price = this.goodsSkuDetail.member_price; - } else { - this.goodsSkuDetail.show_price = this.goodsSkuDetail.discount_price; - } - } else { - if (this.goodsSkuDetail.member_price > 0) { - this.goodsSkuDetail.show_price = this.goodsSkuDetail.member_price; - } else { - this.goodsSkuDetail.show_price = this.goodsSkuDetail.price; - } - } - - // 满减 - if (this.goodsSkuDetail.manjian) { - this.getManjian(this.goodsSkuDetail.manjian); - } - - // 会员卡 - if (this.goodsSkuDetail.membercard) { - this.membercard = this.goodsSkuDetail.membercard; - } - - // 优惠券 - if (this.goodsSkuDetail.coupon_list) { - this.couponList = this.goodsSkuDetail.coupon_list; - this.couponList.forEach(v => { - if (v.count == v.lead_count) v.useState = 2; - else if (v.max_fetch != 0 && v.member_coupon_num && v.member_coupon_num >= v.max_fetch) v.useState = 1; - else v.useState = 0; - }); - this.couponList = this.couponList.sort(this.sortBy('useState')) - } - - // 组合套餐 - // if (this.goodsSkuDetail.bundling_list) { - // this.handleBundlingData(this.goodsSkuDetail.bundling_list); - // } - - if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); - - } else { - this.$util.redirectTo('/pages_tool/goods/not_exist', {}, 'redirectTo'); - } - }, - choiceSku() { - this.$refs.goodsSku.show("buy_now", () => { - this.$store.dispatch('getCartNumber'); - }); - }, - - //商品留言打开 - showinformation(){ - this.informationform = this.goodsSkuDetail.goods_form - this.$refs.informationPopup.open(); - }, - //商品留言关闭 - closeinformationPopup(){ - this.$refs.informationPopup.close(); - }, - //保存商品留言 - saveubfirnation(){ - //缺少 - if (!this.$refs.form.verify()) return; - - // uni.setStorageSync('goodFormData', { - // goods_id: this.goodsSkuDetail.goods_id, - // form_data: this.$refs.form.formData - // }); - this.$api.sendRequest({ - url: '/api/goods/information', - data: { - goods_id: this.goodsSkuDetail.goods_id, - form_data: JSON.stringify(this.$refs.form.formData) - }, - success: res => { - var data = res.data; - if (res.code == 0) { - - }else{ - this.$util.showToast({ - title: res.msg - }); - } - - - }, - }); - }, - // 加入购物车 - joinCart() { - if (!this.storeToken && this.preview == 0) { - this.$refs.login.open(this.shareUrl); - return; - } - if (this.goodsSkuDetail.is_virtual == 1) { - this.$refs.goodsSku.show("buy_now", () => { - this.$store.dispatch('getCartNumber'); - }); - } else { - this.$refs.goodsSku.show("join_cart", () => { - this.$store.dispatch('getCartNumber'); - }); - } - }, - // 立即购买 - buyNow() { - if (!this.storeToken && this.preview == 0) { - this.$refs.login.open(this.shareUrl); - return; - } - this.$refs.goodsSku.show("buy_now", () => { - }); - }, - - sortBy(field) { - //根据传过来的字段进行排序,y-x 得分从高到低,x-y 从低到高 - return (y, x) => { - return y[field] - x[field] - } - }, - - // 打开优惠券弹出层 - openCouponPopup() { - this.$refs.couponPopup.open(); - }, - // 关闭优惠券弹出层 - closeCouponPopup() { - this.$refs.couponPopup.close(); - }, - // 领取优惠券 - receiveCoupon(item) { - let that = this; - if (this.preview) return; // 开启预览,禁止任何操作和跳转 - if (this.couponBtnSwitch) return; - this.couponBtnSwitch = true; - if (this.storeToken) { - this.$api.sendRequest({ - url: '/coupon/api/coupon/receive', - data: { - coupon_type_id: item.coupon_type_id, - get_type: 2 //获取方式:1订单2.直接领取3.活动领取 - }, - success: res => { - var data = res.data; - - let msg = ''; - - let list = this.couponList; - if (res.data.is_exist == 1 && res.code < 0) { - msg = $lang('goods.public.js.detail.l321'); - } else if (res.code == 0) { - msg = $lang('goods.public.js.detail.l323'); - } else { - msg = res.message; - } - if (res.data.is_exist == 1) { - for (let i = 0; i < list.length; i++) { - if (list[i].coupon_type_id == item.coupon_type_id) { - that.$set(that.couponList[i], 'useState', 1); - } - } - } else { - for (let i = 0; i < list.length; i++) { - if (list[i].coupon_type_id == item.coupon_type_id) { - that.$set(that.couponList[i], 'useState', 2); - - } - - } - } - this.$util.showToast({ - title: msg - }); - that.$forceUpdate() - this.hackReset = false; - this.$nextTick(() => { - this.hackReset = true; - }) - - this.couponBtnSwitch = false; - }, - }); - } else { - this.$refs.login.open(this.shareUrl); - this.couponBtnSwitch = false; - } - }, - - //-------------------------------------满减------------------------------------- - - //获取满减信息 - getManjian(data) { - this.manjian = data; - let limit = data.type == 0 ? '元' : $lang('common.ns-goods-sku.ns-goods-sku-index.l150.t0'); - Object.keys(data.rule_json).forEach((key) => { - var item = data.rule_json[key]; - if (item.coupon_data) { - for (var i = 0; i < item.coupon_data.length; i++) { - item.coupon_data[i].coupon_num = item.coupon_num[i] - } - } - item.limit = data.type == 0 ? parseFloat(item.limit).toFixed(2) : parseInt(item.limit); - // 满减 - if (item.discount_money != undefined) { - if (this.manjian.manjian == undefined) { - this.manjian.manjian = $lang('diy.diy-coupon.l32.t0') + item.limit + limit + $lang('common.register-reward.l60.t2') + item.discount_money + $lang('common.register-reward.l45.t0'); - } else { - this.manjian.manjian += $lang('goods.public.js.detail.l379') + item.limit + limit + $lang('common.register-reward.l60.t2') + item.discount_money + $lang('common.register-reward.l45.t0'); - } - } - // 满送 - if (item.point != undefined || item.coupon != undefined) { - let text = ''; - if (item.point != undefined) { - text = $lang('goods.public.js.detail.l386') + item.point + $lang('common.register-reward.l19.t0'); - } - if (item.coupon != undefined && item.coupon_data != undefined) { - item.coupon_data.forEach((couponItem, couponIndex) => { - if (couponItem.type == 'discount') { - if (text == '') text = '送' + item.coupon_num[couponIndex] + '张' + parseFloat(couponItem.discount) + '折优惠券'; - else text += $lang('goods.public.js.detail.l392') + item.coupon_num[couponIndex] + $lang('goods.public.js.detail.l392') + parseFloat(couponItem.discount) + $lang('goods.public.js.detail.l392'); - } else { - if (text == '') text = '送' + item.coupon_num[couponIndex] + '张' + parseFloat(couponItem.money) + '元优惠券'; - else text += $lang('goods.public.js.detail.l392') + item.coupon_num[couponIndex] + $lang('goods.public.js.detail.l392') + parseFloat(couponItem.money) + $lang('goods.public.js.detail.l395'); - } - }) - } - if (this.manjian.mansong == undefined) { - this.manjian.mansong = $lang('diy.diy-coupon.l32.t0') + item.limit + limit + text; - } else { - this.manjian.mansong += ';' + $lang('diy.diy-coupon.l32.t0') + item.limit + limit + text; - } - } - // 包邮 - if (item.free_shipping != undefined) { - if (this.manjian.free_shipping == undefined) { - this.manjian.free_shipping = $lang('diy.diy-coupon.l32.t0') + item.limit + limit + $lang('goods.detail.l383'); - } else { - this.manjian.free_shipping += $lang('goods.public.js.detail.l379') + item.limit + limit + $lang('goods.detail.l383'); - } - } - }); - }, - openManjianPopup() { - this.$refs.manjianPopup.open(); - }, - closeManjianPopup() { - this.$refs.manjianPopup.close(); - }, - - //-------------------------------------组合套餐------------------------------------- - - //获取当前商品关联的组合套餐 - getBundling() { - // 连锁门店没有营销活动 - if (this.globalStoreConfig && this.globalStoreConfig.store_business == 'store') return; - - this.$api.sendRequest({ - url: "/bundling/api/bundling/lists", - data: { - sku_id: this.skuId - }, - success: res => { - // this.handleBundlingData(res.data); - } - }); - }, - handleBundlingData(data) { - this.bundling = data; - if (this.bundling.length) { - - for (var i = 0; i < this.bundling[0].bundling_goods.length; i++) { - if (this.bundling[0].bundling_goods[i].sku_id == this.skuId) { - this.bundlingType = true; - break; - } else { - this.bundlingType = false; - } - } - - for (var i = 0; i < this.bundling.length; i++) { - for (var j = 0; j < this.bundling[i].bundling_goods.length; j++) { - if (this.bundling[i].bundling_goods[j].sku_id == this.skuId) { - this.bundling[i].bundling_goods.splice(j, 1); - } - } - } - } - }, - // 打开组合套餐弹出层 - openBundlingPopup() { - this.$refs.bundlingPopup.open(); - }, - // 关闭组合套餐弹出层 - closeBundlingPopup() { - this.$refs.bundlingPopup.close(); - }, - imageError() { - this.goodsSkuDetail.sku_image = this.$util.getDefaultImage().goods; - this.$forceUpdate(); - }, - bundlingImageError(index, goods_index) { - this.bundling[index].bundling_goods[goods_index].sku_image = this.$util.getDefaultImage().goods; - this.$forceUpdate(); - }, - fenxiao() { - this.$refs.fenxiaoPopup.show() - }, - toGoodsDetail(item) { - this.$util.redirectTo(this.goodsRoute, { - sku_id: item - }); - }, - toComoDetail(id) { - this.$util.redirectTo('/pages_promotion/bundling/detail', { - bl_id: id - }); - }, - /** - * 获取分享图 - */ - getShareImg() { - let posterParams = { - goods_id: this.goodsId - }; - this.$api.sendRequest({ - url: '/api/goods/shareimg', - data: { - qrcode_param: JSON.stringify(posterParams) - }, - success: res => { - if (res.code == 0) this.shareImg = res.data.path + '?no=' + parseInt((new Date()).getTime() / 1000); - } - }) - }, - /** - * 金额格式化输出 - * @param {Object} money - */ - decimalPointFormat(money) { - if (isNaN(parseFloat(money))) return money; - let arr = money.toString().split("."); - let arr1 = arr[1].split("").reverse(); - let arr2 = []; - arr1.forEach((item, index) => { - if (item > 1) { - arr2 = arr1.splice(index); - } - }); - let str = arr2.length ? (arr[0] + "." + arr2.reverse().join("")) : arr[0]; - return str; - } - } +export default { + data() { + return { + goodsRoute: '/pages_goods/detail', + couponList: [], //优惠券列表 + couponBtnSwitch: false, //获取优惠券防止重复提交 + + posterApi: '/api/goods/poster', + + //满减活动 + manjian: { + type: 0, + manjian_name: "", + rule_json: null + }, + //组合套餐 + bundlingType: false, + bundling: [{ + bundling_goods: { + bl_name: '', + sku_image: '' + } + }], + + membercard: null, // 会员卡信息 + hackReset: true, + cardOff: false, + informationform:[]//留言表单 + + } + }, + computed: { + showDiscount() { + var flag = false; + if ( + this.preview == 0 && + this.addonIsExist.discount && + this.goodsSkuDetail.promotion_type == 1 && + this.goodsSkuDetail.discountTimeMachine && + (!this.goodsSkuDetail.member_price || (this.goodsSkuDetail.member_price > 0 && Number(this.goodsSkuDetail.member_price) > Number(this.goodsSkuDetail.discount_price)) + ) + ) { + flag = true; + } + return flag; + }, + memberCardDiscount() { + let discount = 0, + showPrice = this.goodsSkuDetail.member_price > 0 && Number(this.goodsSkuDetail.member_price) < Number(this.goodsSkuDetail.discount_price) ? this.goodsSkuDetail.member_price : this.goodsSkuDetail.discount_price; + if (this.membercard && this.membercard.member_price > 0 && (parseFloat(showPrice) > parseFloat(this.membercard.member_price))) { + discount = parseFloat(showPrice) - parseFloat(this.membercard.member_price); + } + return discount.toFixed(2); + }, + //表单高度 + FormHeight(){ + let height = 48; + if (this.goodsForm && this.goodsForm.length) { + height += this.goodsForm.length * 5; + } + height += 'vh'; + return height; + } + }, + onLoad(data) { + + // #ifdef MP-ALIPAY + let options = my.getLaunchOptionsSync(); + options.query && Object.assign(data, options.query) + // #endif + + this.skuId = data.sku_id || 0; + this.goodsId = data.goods_id || 0; + + // 小程序扫码进入 + if (data.scene) { + var sceneParams = decodeURIComponent(data.scene); + sceneParams = sceneParams.split('&'); + if (sceneParams.length) { + sceneParams.forEach(item => { + if (item.indexOf('goods_id') != -1) this.goodsId = item.split('-')[1]; + }); + } + } + + // #ifdef MP-WEIXIN + this.getShareImg(); + // #endif + }, + async onShow() { + //同步获取商品详情 + await this.getGoodsSkuDetail(); + }, + onHide() { + this.couponBtnSwitch = false; + }, + methods: { + //拨打电话 + phoneClick(mobile){ + uni.makePhoneCall({ + phoneNumber: mobile+'', + success(){}, + fail(){} + }) + }, + setSkuId(val) { + if (val) { + this.skuId = val; + this.getBundling(); + } + }, + // 获取商品详情 + async getGoodsSkuDetail() { + let res = await this.$api.sendRequest({ + url: '/api/goodssku/detail', + async: false, + data: { + sku_id: this.skuId, + goods_id: this.goodsId, + } + }); + let data = res.data; + if (data.goods_sku_detail != null) { + if (data.goods_sku_detail.promotion_type == 'presale' && data.goods_sku_detail.presale_id) { + this.$util.redirectTo('/pages_promotion/presale/detail', { + id: data.goods_sku_detail.presale_id, + sku_id: this.skuId + }, 'reLaunch'); + return; + } + if(uni.getStorageSync('lang') == 'en-us') data.goods_sku_detail.goods_name = data.goods_sku_detail.en_goods_name + + this.goodsSkuDetail = data.goods_sku_detail; + if (!this.skuId) this.skuId = this.goodsSkuDetail.sku_id; + if (!this.goodsId) this.goodsId = this.goodsSkuDetail.goods_id; + // 分享参数、链接 + this.shareQuery = 'goods_id=' + this.goodsSkuDetail.goods_id; + this.shareUrl = this.goodsRoute + '?' + this.shareQuery; + + // 在线客服聊天参数 + this.chatRoomParams = { + sku_id: this.goodsSkuDetail.sku_id + }; + let typeId = this.goodsSkuDetail.goods_promotion[0]; + if (typeId) { + // 限时折扣 + if (typeId.discount_id) { + this.chatRoomParams.type = 'discount' + this.chatRoomParams.type_id = typeId.discount_id + } + } + + // 海报参数 + this.posterParams = { + goods_id: this.goodsId + }; + + // 处理商品数据 + this.handleGoodsSkuData(); + + // 限时折扣 + if (this.goodsSkuDetail.promotion_type == 1 && this.addonIsExist.discount) { + //检测倒计时 + if ((this.goodsSkuDetail.end_time - res.timestamp) > 0) { + this.goodsSkuDetail.discountTimeMachine = this.$util.countDown(this.goodsSkuDetail.end_time - res.timestamp); + } else { + this.goodsSkuDetail.promotion_type = 0; + } + } + if (this.goodsSkuDetail.promotion_type == 1 && this.goodsSkuDetail.discountTimeMachine) { + if (this.goodsSkuDetail.member_price > 0 && Number(this.goodsSkuDetail.member_price) <= Number(this.goodsSkuDetail.discount_price)) { + this.goodsSkuDetail.show_price = this.goodsSkuDetail.member_price; + } else { + this.goodsSkuDetail.show_price = this.goodsSkuDetail.discount_price; + } + } else { + if (this.goodsSkuDetail.member_price > 0) { + this.goodsSkuDetail.show_price = this.goodsSkuDetail.member_price; + } else { + this.goodsSkuDetail.show_price = this.goodsSkuDetail.price; + } + } + + // 满减 + if (this.goodsSkuDetail.manjian) { + this.getManjian(this.goodsSkuDetail.manjian); + } + + // 会员卡 + if (this.goodsSkuDetail.membercard) { + this.membercard = this.goodsSkuDetail.membercard; + } + + // 优惠券 + if (this.goodsSkuDetail.coupon_list) { + this.couponList = this.goodsSkuDetail.coupon_list; + this.couponList.forEach(v => { + if (v.count == v.lead_count) v.useState = 2; + else if (v.max_fetch != 0 && v.member_coupon_num && v.member_coupon_num >= v.max_fetch) v.useState = 1; + else v.useState = 0; + }); + this.couponList = this.couponList.sort(this.sortBy('useState')) + } + + // 组合套餐 + // if (this.goodsSkuDetail.bundling_list) { + // this.handleBundlingData(this.goodsSkuDetail.bundling_list); + // } + + if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); + + } else { + this.$util.redirectTo('/pages_tool/goods/not_exist', {}, 'redirectTo'); + } + }, + choiceSku() { + this.$refs.goodsSku.show("buy_now", () => { + this.$store.dispatch('getCartNumber'); + }); + }, + + //商品留言打开 + showinformation(){ + this.informationform = this.goodsSkuDetail.goods_form + this.$refs.informationPopup.open(); + }, + //商品留言关闭 + closeinformationPopup(){ + this.$refs.informationPopup.close(); + }, + //保存商品留言 + saveubfirnation(){ + //缺少 + if (!this.$refs.form.verify()) return; + + // uni.setStorageSync('goodFormData', { + // goods_id: this.goodsSkuDetail.goods_id, + // form_data: this.$refs.form.formData + // }); + this.$api.sendRequest({ + url: '/api/goods/information', + data: { + goods_id: this.goodsSkuDetail.goods_id, + form_data: JSON.stringify(this.$refs.form.formData) + }, + success: res => { + var data = res.data; + if (res.code == 0) { + + }else{ + this.$util.showToast({ + title: res.msg + }); + } + + + }, + }); + }, + // 加入购物车 + joinCart() { + if (!this.storeToken && this.preview == 0) { + this.$refs.login.open(this.shareUrl); + return; + } + if (this.goodsSkuDetail.is_virtual == 1) { + this.$refs.goodsSku.show("buy_now", () => { + this.$store.dispatch('getCartNumber'); + }); + } else { + this.$refs.goodsSku.show("join_cart", () => { + this.$store.dispatch('getCartNumber'); + }); + } + }, + // 立即购买 + buyNow() { + if (!this.storeToken && this.preview == 0) { + this.$refs.login.open(this.shareUrl); + return; + } + this.$refs.goodsSku.show("buy_now", () => { + }); + }, + + sortBy(field) { + //根据传过来的字段进行排序,y-x 得分从高到低,x-y 从低到高 + return (y, x) => { + return y[field] - x[field] + } + }, + + // 打开优惠券弹出层 + openCouponPopup() { + this.$refs.couponPopup.open(); + }, + // 关闭优惠券弹出层 + closeCouponPopup() { + this.$refs.couponPopup.close(); + }, + // 领取优惠券 + receiveCoupon(item) { + let that = this; + if (this.preview) return; // 开启预览,禁止任何操作和跳转 + if (this.couponBtnSwitch) return; + this.couponBtnSwitch = true; + if (this.storeToken) { + this.$api.sendRequest({ + url: '/coupon/api/coupon/receive', + data: { + coupon_type_id: item.coupon_type_id, + get_type: 2 //获取方式:1订单2.直接领取3.活动领取 + }, + success: res => { + var data = res.data; + + let msg = ''; + + let list = this.couponList; + if (res.data.is_exist == 1 && res.code < 0) { + msg = '您已领取过该优惠券,快去使用吧'; + } else if (res.code == 0) { + msg = '领取成功,快去使用吧'; + } else { + msg = res.message; + } + if (res.data.is_exist == 1) { + for (let i = 0; i < list.length; i++) { + if (list[i].coupon_type_id == item.coupon_type_id) { + that.$set(that.couponList[i], 'useState', 1); + } + } + } else { + for (let i = 0; i < list.length; i++) { + if (list[i].coupon_type_id == item.coupon_type_id) { + that.$set(that.couponList[i], 'useState', 2); + + } + + } + } + this.$util.showToast({ + title: msg + }); + that.$forceUpdate() + this.hackReset = false; + this.$nextTick(() => { + this.hackReset = true; + }) + + this.couponBtnSwitch = false; + }, + }); + } else { + this.$refs.login.open(this.shareUrl); + this.couponBtnSwitch = false; + } + }, + + //-------------------------------------满减------------------------------------- + + //获取满减信息 + getManjian(data) { + this.manjian = data; + let limit = data.type == 0 ? '元' : '件'; + Object.keys(data.rule_json).forEach((key) => { + var item = data.rule_json[key]; + if (item.coupon_data) { + for (var i = 0; i < item.coupon_data.length; i++) { + item.coupon_data[i].coupon_num = item.coupon_num[i] + } + } + item.limit = data.type == 0 ? parseFloat(item.limit).toFixed(2) : parseInt(item.limit); + // 满减 + if (item.discount_money != undefined) { + if (this.manjian.manjian == undefined) { + this.manjian.manjian = '满' + item.limit + limit + '减' + item.discount_money + '元'; + } else { + this.manjian.manjian += ';满' + item.limit + limit + '减' + item.discount_money + '元'; + } + } + // 满送 + if (item.point != undefined || item.coupon != undefined) { + let text = ''; + if (item.point != undefined) { + text = '送' + item.point + '积分'; + } + if (item.coupon != undefined && item.coupon_data != undefined) { + item.coupon_data.forEach((couponItem, couponIndex) => { + if (couponItem.type == 'discount') { + if (text == '') text = '送' + item.coupon_num[couponIndex] + '张' + parseFloat(couponItem.discount) + '折优惠券'; + else text += '、送' + item.coupon_num[couponIndex] + '张' + parseFloat(couponItem.discount) + '折优惠券'; + } else { + if (text == '') text = '送' + item.coupon_num[couponIndex] + '张' + parseFloat(couponItem.money) + '元优惠券'; + else text += '、送' + item.coupon_num[couponIndex] + '张' + parseFloat(couponItem.money) + '元优惠券'; + } + }) + } + if (this.manjian.mansong == undefined) { + this.manjian.mansong = '满' + item.limit + limit + text; + } else { + this.manjian.mansong += ';' + '满' + item.limit + limit + text; + } + } + // 包邮 + if (item.free_shipping != undefined) { + if (this.manjian.free_shipping == undefined) { + this.manjian.free_shipping = '满' + item.limit + limit + '包邮'; + } else { + this.manjian.free_shipping += ';满' + item.limit + limit + '包邮'; + } + } + }); + }, + openManjianPopup() { + this.$refs.manjianPopup.open(); + }, + closeManjianPopup() { + this.$refs.manjianPopup.close(); + }, + + //-------------------------------------组合套餐------------------------------------- + + //获取当前商品关联的组合套餐 + getBundling() { + // 连锁门店没有营销活动 + if (this.globalStoreConfig && this.globalStoreConfig.store_business == 'store') return; + + this.$api.sendRequest({ + url: "/bundling/api/bundling/lists", + data: { + sku_id: this.skuId + }, + success: res => { + // this.handleBundlingData(res.data); + } + }); + }, + handleBundlingData(data) { + this.bundling = data; + if (this.bundling.length) { + + for (var i = 0; i < this.bundling[0].bundling_goods.length; i++) { + if (this.bundling[0].bundling_goods[i].sku_id == this.skuId) { + this.bundlingType = true; + break; + } else { + this.bundlingType = false; + } + } + + for (var i = 0; i < this.bundling.length; i++) { + for (var j = 0; j < this.bundling[i].bundling_goods.length; j++) { + if (this.bundling[i].bundling_goods[j].sku_id == this.skuId) { + this.bundling[i].bundling_goods.splice(j, 1); + } + } + } + } + }, + // 打开组合套餐弹出层 + openBundlingPopup() { + this.$refs.bundlingPopup.open(); + }, + // 关闭组合套餐弹出层 + closeBundlingPopup() { + this.$refs.bundlingPopup.close(); + }, + imageError() { + this.goodsSkuDetail.sku_image = this.$util.getDefaultImage().goods; + this.$forceUpdate(); + }, + bundlingImageError(index, goods_index) { + this.bundling[index].bundling_goods[goods_index].sku_image = this.$util.getDefaultImage().goods; + this.$forceUpdate(); + }, + fenxiao() { + this.$refs.fenxiaoPopup.show() + }, + toGoodsDetail(item) { + this.$util.redirectTo(this.goodsRoute, { + sku_id: item + }); + }, + toComoDetail(id) { + this.$util.redirectTo('/pages_promotion/bundling/detail', { + bl_id: id + }); + }, + /** + * 获取分享图 + */ + getShareImg() { + let posterParams = { + goods_id: this.goodsId + }; + this.$api.sendRequest({ + url: '/api/goods/shareimg', + data: { + qrcode_param: JSON.stringify(posterParams) + }, + success: res => { + if (res.code == 0) this.shareImg = res.data.path + '?no=' + parseInt((new Date()).getTime() / 1000); + } + }) + }, + /** + * 金额格式化输出 + * @param {Object} money + */ + decimalPointFormat(money) { + if (isNaN(parseFloat(money))) return money; + let arr = money.toString().split("."); + let arr1 = arr[1].split("").reverse(); + let arr2 = []; + arr1.forEach((item, index) => { + if (item > 1) { + arr2 = arr1.splice(index); + } + }); + let str = arr2.length ? (arr[0] + "." + arr2.reverse().join("")) : arr[0]; + return str; + } + } } \ No newline at end of file diff --git a/pages_goods/public/js/list.js b/pages_goods/public/js/list.js index 3762f02..137c5fd 100644 --- a/pages_goods/public/js/list.js +++ b/pages_goods/public/js/list.js @@ -1,502 +1,502 @@ -export default { - data() { - return { - listStyle: '', - loadingType: 'loading', //加载更多状态 - orderType: '', - priceOrder: 'desc', //1 价格从低到高 2价格从高到低 - categoryList: [], //排序类型 - goodsList: [], - order: '', - sort: 'desc', - showScreen: false, - keyword: '', - categoryId: 0, - minPrice: '', - maxPrice: '', - isFreeShipping: false, //是否免邮 - isIphoneX: false, - coupon: 0, - emptyShow: false, - isList: true, //列表样式 - //分享所需标题 - share_title: '', - //搜索到多少件商品 - count: 0, - //当前分类名称 - category_title: '', - //优惠券数据 - coupon_name: '', - //列表瀑布流数据 - listHeight: [], - listPosition: [], - debounce: null, - brandId: 0, - brandList: [], //品牌筛选项 - config: { - fontWeight: false, - padding: 0, - cartEvent: "detail", - text: $lang("common.ns-goods-recommend.l20.t0"), - textColor: "#FFFFFF", - theme: "default", - aroundRadius: 25, - control: true, - bgColor: "#FF6A00", - style: "button", - iconDiy: { - iconType: "icon", - icon: "", - style: { - fontSize: "60", - iconBgColor: [], - iconBgColorDeg: 0, - iconBgImg: "", - bgRadius: 0, - iconColor: [ - "#000000" - ], - iconColorDeg: 0 - } - } - }, - - langstatus:0, - lang:uni.getStorageSync('lang') - } - }, - - onLoad(options) { - this.$api.sendRequest({ - url: '/api/lucky/status', - data: {}, - success: res => { - this.langstatus = res.status - if(this.langstatus == 1){ - // this.$langConfig.refresh(); - uni.setNavigationBarTitle({ - title:uni.getStorageSync('lang') == 'en-us'?'Goods List':$lang('goods.public.js.list.l78') - }) - } - } - }); - - this.categoryId = options.category_id || 0; - this.keyword = options.keyword || ''; - this.coupon = options.coupon || 0; - this.goods_id_arr = options.goods_id_arr || 0; - this.brandId = options.brand_id || 0; - - this.loadCategoryList(this.categoryId); - this.getBrandList(); - this.isIphoneX = this.$util.uniappIsIPhoneX(); - - //小程序分享接收source_member - if (options.source_member) { - uni.setStorageSync('source_member', options.source_member); - } - // 小程序扫码进入,接收source_member - if (options.scene) { - var sceneParams = decodeURIComponent(options.scene); - sceneParams = sceneParams.split('&'); - if (sceneParams.length) { - sceneParams.forEach(item => { - if (item.indexOf('sku_id') != -1) this.skuId = item.split('-')[1]; - if (item.indexOf('m') != -1) uni.setStorageSync('source_member', item.split('-')[1]); - if (item.indexOf('is_test') != -1) uni.setStorageSync('is_test', 1); - }); - } - } - - uni.onWindowResize(res => { - if (this.debounce) clearTimeout(this.debounce); - this.waterfallflow(0); - }) - }, - onShow() { - //记录分享关系 - if (this.storeToken && uni.getStorageSync('source_member')) { - this.$util.onSourceMember(uni.getStorageSync('source_member')); - } - }, - /** - * 转发分享 - */ - onShareAppMessage(res) { - var title = $lang('goods.public.js.list.l126') + this.count + $lang('goods.public.js.list.l126') + this.keyword + this.category_title + this.coupon_name + $lang('goods.public.js.list.l126'); - let route = this.$util.getCurrentShareRoute(this.memberInfo ? this.memberInfo.member_id : 0); - var path = route.path; - return { - title: title, - path: path, - success: res => { - }, - fail: res => { - } - }; - }, - // 分享到微信朋友圈 - onShareTimeline() { - var title = $lang('goods.public.js.list.l126') + this.count + $lang('goods.public.js.list.l126') + this.keyword + this.category_title + this.coupon_name + $lang('goods.public.js.list.l126'); - let route = this.$util.getCurrentShareRoute(this.memberInfo ? this.memberInfo.member_id : 0); - var query = route.query; - return { - title: title, - query: query, - imageUrl: '' - }; - }, - methods: { - /** - * 获取优惠券数据 - */ - couponInfo(id) { - return new Promise(resolve => { - this.$api.sendRequest({ - url: '/coupon/api/coupon/typeinfo', - data: { - coupon_type_id: id - }, - success: res => { - if (res.code >= 0) { - resolve(res.data.coupon_name); - } - } - }); - }) - }, - /** - * 获取分类名称 - */ - share_select(data, id) { - return new Promise((resolve) => { - data.forEach((item) => { - if (item.category_id == id) { - resolve(item.category_name) - } - if (item.child_list && item.child_list.length > 0) { - item.child_list.forEach((v) => { - if (v.category_id == id) { - resolve(v.category_name) - } - if (v.child_list && v.child_list.length > 0) { - v.forEach((m) => { - if (m.category_id == id) { - resolve(m.category_name) - } - }) - - } - }) - } - }) - }) - }, - //加载分类 - loadCategoryList(fid, sid) { - this.$api.sendRequest({ - url: '/api/goodscategory/tree', - data: {}, - success: res => { - if (res.data != null) { - this.categoryList = res.data - } - } - }); - }, - getGoodsList(mescroll) { - // #ifdef MP-HARMONY - // 鸿蒙元服务API响应极快,可能抢在scroll-view首次渲染完成之前返回数据 - // 导致mescroll测得内容高度为0,列表不可见。首次加载延迟300ms确保DOM就绪。 - if (!this._harmonyFirstLoadDone) { - this._harmonyFirstLoadDone = true; - setTimeout(() => { - this._doGetGoodsList(mescroll); - }, 300); - return; - } - // #endif - this._doGetGoodsList(mescroll); - }, - _doGetGoodsList(mescroll) { - this.$api.sendRequest({ - url: '/api/goodssku/page', - data: { - page: mescroll.num, - page_size: mescroll.size, - keyword: this.keyword, - category_id: this.categoryId, - brand_id: this.brandId, - min_price: this.minPrice, - max_price: this.maxPrice, - is_free_shipping: (this.isFreeShipping ? 1 : 0), - order: this.order, - sort: this.sort, - coupon: this.coupon, - goods_id_arr: this.goods_id_arr - }, - success: res => { - let newArr = [] - let msg = res.message; - if (res.code == 0 && res.data) { - this.count = res.data.count; - if (res.data.page_count == 0) { - this.emptyShow = true - } - newArr = res.data.list; - newArr = newArr.map(item => { - item.id = this.genNonDuplicate(); - return item; - }); - } else { - this.$util.showToast({ - title: msg - }) - } - this.category_title = ''; - this.coupon_name = ''; - if (res.data.config) this.config = res.data.config; - if (this.categoryId) { - this.share_select(this.categoryList, this.categoryId).then(resolve => { - this.category_title = resolve - }); - } - if (this.coupon) { - this.couponInfo(this.coupon).then(resolve => { - this.coupon_name = resolve - }); - } - mescroll.endSuccess(newArr.length); - //设置列表数据 - if (mescroll.num == 1) this.goodsList = []; //如果是第一页需手动制空列表 - this.goodsList = this.goodsList.concat(newArr); //追加新数据 - if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); - - // #ifdef MP-HARMONY - // 鸿蒙下 mescroll 初始化时 setClientHeight 在 slot 内容渲染前执行,测得高度为 0 - // 数据加载后必须主动重新测量容器高度,否则 mescroll 认为容器高度为 0,列表不可见 - // 注:scrollTo(0,0) 只能重置滚动位置,scrollTop 已是 0 时不会触发 scroll 事件,不会重测 - // mounted 阶段的重试可能已经耗尽 5 次,这里主动重置 clientNum 让测量重新有机会 - this.$nextTick(() => { - const mescrollUni = this.$refs.mescroll && (this.$refs.mescroll.mescroll || this.$refs.mescroll); - if (mescrollUni && typeof mescrollUni.setClientHeight === 'function') { - mescrollUni.clientNum = null; - mescrollUni.isExec = false; - mescrollUni.setClientHeight(); - } - }); - // #endif - - this.waterfallflow((mescroll.num - 1) * 10); - }, - fail: res => { - //联网失败的回调 - mescroll.endErr(); - if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); - } - }); - }, - changeListStyle() { - this.isList = !this.isList; - // 鸿蒙下 isList 切换导致 :key 变化、DOM 重建,重建出来的 .goods-item @click 事件绑定会丢失 - // 主动触发 slot 重建,把事件绑定带回来 - // #ifdef MP-HARMONY - const mescroll = this.$refs.mescroll; - if (mescroll && typeof mescroll.forceSlotRebuild === 'function') { - mescroll.forceSlotRebuild(); - } - // #endif - this.waterfallflow(0); - }, - //筛选点击 - sortTabClick(tag) { - if (tag == 'sale_num') { - this.order = 'sale_num'; - this.sort = 'desc'; - } else if (tag == 'discount_price') { - this.order = 'discount_price'; - this.sort = 'desc'; - } else if (tag == 'screen') { - //筛选 - this.showScreen = true; - return; - } else { - this.order = ''; - this.sort = ''; - } - - if (this.orderType === tag && tag !== 'discount_price') return; - - this.orderType = tag; - if (tag === 'discount_price') { - this.priceOrder = this.priceOrder === 'asc' ? 'desc' : 'asc'; - this.sort = this.priceOrder; - } else { - this.priceOrder = ''; - } - this.emptyShow = false; - this.goodsList = []; - this.$refs.mescroll.refresh(); - }, - //商品详情 - toDetail(item) { - this.$util.redirectTo('/pages_goods/detail', { - goods_id: item.goods_id - }); - }, - search() { - this.emptyShow = false; - this.goodsList = []; - this.$refs.mescroll.refresh(); - }, - selectedCategory(categoryId) { - this.categoryId = categoryId; - }, - screenData() { - if (this.minPrice != '' || this.maxPrice != '') { - // if (!Number(this.minPrice) && this.minPrice) { - // this.$util.showToast({ - // title: '请输入最低价' - // }); - // return; - // } - if (!Number(this.maxPrice) && this.maxPrice) { - this.$util.showToast({ - title: $lang('goods.public.js.list.l365') - }); - return; - } - if (Number(this.minPrice) < 0 || Number(this.maxPrice) < 0) { - this.$util.showToast({ - title: $lang('goods.public.js.list.l371') - }); - return; - } - if (this.minPrice != '' && Number(this.minPrice) > Number(this.maxPrice) && this.maxPrice) { - - this.$util.showToast({ - title: $lang('goods.public.js.list.l378') - }); - return; - } - if (this.maxPrice != '' && Number(this.maxPrice) < Number(this.minPrice)) { - this.$util.showToast({ - title: $lang('goods.public.js.list.l384') - }); - return; - } - } - this.emptyShow = false; - this.goodsList = []; - this.$refs.mescroll.refresh(); - this.showScreen = false; - }, - //重置数据 - resetData() { - this.categoryId = 0 - this.minPrice = '' - this.maxPrice = '' - this.isFreeShipping = false - }, - goodsImg(imgStr) { - let imgs = imgStr.split(','); - return imgs[0] ? this.$util.img(imgs[0], { - size: 'mid' - }) : this.$util.getDefaultImage().goods; - }, - imgError(index) { - this.goodsList[index].goods_image = this.$util.getDefaultImage().goods; - }, - showPrice(data) { - let price = data.discount_price; - if (data.member_price && parseFloat(data.member_price) < parseFloat(price)) price = data.member_price; - return price; - }, - showMarketPrice(item) { - if (item.market_price_show) { - let price = this.showPrice(item); - if (item.market_price > 0) { - return item.market_price; - } else if (parseFloat(item.price) > parseFloat(price)) { - return item.price; - } - } - return ''; - }, - goodsTag(data) { - return data.label_name || ''; - }, - /** - * 瀑布流 - */ - waterfallflow(start = 0) { - if (!this.isList) { - //页面渲染完成后的事件 - this.$nextTick(() => { - setTimeout(() => { - let listHeight = []; - let listPosition = []; - if (start != 0) { - listHeight = this.listHeight; - listPosition = this.listPosition; - } - let column = 2; - const query = uni.createSelectorQuery().in(this); - query.selectAll('.double-column .goods-item').boundingClientRect(data => { - for (let i = start; i < data.length; i++) { - if (i < column) { - let position = {}; - position.top = uni.upx2px(20) + 'px'; - if (i % column == 0) { - position.left = data[i].width * i + "px"; - } else { - position.left = data[i].width * i + (i % column * uni - .upx2px(30)) + "px"; - } - listPosition[i] = position; - listHeight[i] = data[i].height + uni.upx2px(20); - } else { - let minHeight = Math.min(...listHeight); // 找到第一列的最小高度 - let minIndex = listHeight.findIndex(item => item === minHeight) // 找到最小高度的索引 - //设置当前子元素项的位置 - let position = {}; - position.top = minHeight + uni.upx2px(20) + "px"; - position.left = listPosition[minIndex].left; - listPosition[i] = position; - //重新定义数组最小项的高度 进行累加 - listHeight[minIndex] += data[i].height + uni.upx2px(20); - } - } - this.listHeight = listHeight; - this.listPosition = listPosition; - }).exec(); - }, 50) - }) - } - }, - getBrandList() { - var data = { - page: 1, - page_size: 0 - }; - this.$api.sendRequest({ - url: '/api/goodsbrand/page', - data: data, - success: res => { - if (res.code == 0 && res.data) { - let data = res.data; - this.brandList = data.list; - } - } - }); - }, - /** - * 添加购物车回调 - */ - addCart(id) { - }, - genNonDuplicate(len = 6) { - return Number(Math.random().toString().substr(3, len) + Date.now()).toString(36); - } - } +export default { + data() { + return { + listStyle: '', + loadingType: 'loading', //加载更多状态 + orderType: '', + priceOrder: 'desc', //1 价格从低到高 2价格从高到低 + categoryList: [], //排序类型 + goodsList: [], + order: '', + sort: 'desc', + showScreen: false, + keyword: '', + categoryId: 0, + minPrice: '', + maxPrice: '', + isFreeShipping: false, //是否免邮 + isIphoneX: false, + coupon: 0, + emptyShow: false, + isList: true, //列表样式 + //分享所需标题 + share_title: '', + //搜索到多少件商品 + count: 0, + //当前分类名称 + category_title: '', + //优惠券数据 + coupon_name: '', + //列表瀑布流数据 + listHeight: [], + listPosition: [], + debounce: null, + brandId: 0, + brandList: [], //品牌筛选项 + config: { + fontWeight: false, + padding: 0, + cartEvent: "detail", + text: "购买", + textColor: "#FFFFFF", + theme: "default", + aroundRadius: 25, + control: true, + bgColor: "#FF6A00", + style: "button", + iconDiy: { + iconType: "icon", + icon: "", + style: { + fontSize: "60", + iconBgColor: [], + iconBgColorDeg: 0, + iconBgImg: "", + bgRadius: 0, + iconColor: [ + "#000000" + ], + iconColorDeg: 0 + } + } + }, + + langstatus:0, + lang:uni.getStorageSync('lang') + } + }, + + onLoad(options) { + this.$api.sendRequest({ + url: '/api/lucky/status', + data: {}, + success: res => { + this.langstatus = res.status + if(this.langstatus == 1){ + // this.$langConfig.refresh(); + uni.setNavigationBarTitle({ + title:uni.getStorageSync('lang') == 'en-us'?'Goods List':'商品列表' + }) + } + } + }); + + this.categoryId = options.category_id || 0; + this.keyword = options.keyword || ''; + this.coupon = options.coupon || 0; + this.goods_id_arr = options.goods_id_arr || 0; + this.brandId = options.brand_id || 0; + + this.loadCategoryList(this.categoryId); + this.getBrandList(); + this.isIphoneX = this.$util.uniappIsIPhoneX(); + + //小程序分享接收source_member + if (options.source_member) { + uni.setStorageSync('source_member', options.source_member); + } + // 小程序扫码进入,接收source_member + if (options.scene) { + var sceneParams = decodeURIComponent(options.scene); + sceneParams = sceneParams.split('&'); + if (sceneParams.length) { + sceneParams.forEach(item => { + if (item.indexOf('sku_id') != -1) this.skuId = item.split('-')[1]; + if (item.indexOf('m') != -1) uni.setStorageSync('source_member', item.split('-')[1]); + if (item.indexOf('is_test') != -1) uni.setStorageSync('is_test', 1); + }); + } + } + + uni.onWindowResize(res => { + if (this.debounce) clearTimeout(this.debounce); + this.waterfallflow(0); + }) + }, + onShow() { + //记录分享关系 + if (this.storeToken && uni.getStorageSync('source_member')) { + this.$util.onSourceMember(uni.getStorageSync('source_member')); + } + }, + /** + * 转发分享 + */ + onShareAppMessage(res) { + var title = '搜索到' + this.count + '件“' + this.keyword + this.category_title + this.coupon_name + '”相关的优质商品'; + let route = this.$util.getCurrentShareRoute(this.memberInfo ? this.memberInfo.member_id : 0); + var path = route.path; + return { + title: title, + path: path, + success: res => { + }, + fail: res => { + } + }; + }, + // 分享到微信朋友圈 + onShareTimeline() { + var title = '搜索到' + this.count + '件“' + this.keyword + this.category_title + this.coupon_name + '”相关的优质商品'; + let route = this.$util.getCurrentShareRoute(this.memberInfo ? this.memberInfo.member_id : 0); + var query = route.query; + return { + title: title, + query: query, + imageUrl: '' + }; + }, + methods: { + /** + * 获取优惠券数据 + */ + couponInfo(id) { + return new Promise(resolve => { + this.$api.sendRequest({ + url: '/coupon/api/coupon/typeinfo', + data: { + coupon_type_id: id + }, + success: res => { + if (res.code >= 0) { + resolve(res.data.coupon_name); + } + } + }); + }) + }, + /** + * 获取分类名称 + */ + share_select(data, id) { + return new Promise((resolve) => { + data.forEach((item) => { + if (item.category_id == id) { + resolve(item.category_name) + } + if (item.child_list && item.child_list.length > 0) { + item.child_list.forEach((v) => { + if (v.category_id == id) { + resolve(v.category_name) + } + if (v.child_list && v.child_list.length > 0) { + v.forEach((m) => { + if (m.category_id == id) { + resolve(m.category_name) + } + }) + + } + }) + } + }) + }) + }, + //加载分类 + loadCategoryList(fid, sid) { + this.$api.sendRequest({ + url: '/api/goodscategory/tree', + data: {}, + success: res => { + if (res.data != null) { + this.categoryList = res.data + } + } + }); + }, + getGoodsList(mescroll) { + // #ifdef MP-HARMONY + // 鸿蒙元服务API响应极快,可能抢在scroll-view首次渲染完成之前返回数据 + // 导致mescroll测得内容高度为0,列表不可见。首次加载延迟300ms确保DOM就绪。 + if (!this._harmonyFirstLoadDone) { + this._harmonyFirstLoadDone = true; + setTimeout(() => { + this._doGetGoodsList(mescroll); + }, 300); + return; + } + // #endif + this._doGetGoodsList(mescroll); + }, + _doGetGoodsList(mescroll) { + this.$api.sendRequest({ + url: '/api/goodssku/page', + data: { + page: mescroll.num, + page_size: mescroll.size, + keyword: this.keyword, + category_id: this.categoryId, + brand_id: this.brandId, + min_price: this.minPrice, + max_price: this.maxPrice, + is_free_shipping: (this.isFreeShipping ? 1 : 0), + order: this.order, + sort: this.sort, + coupon: this.coupon, + goods_id_arr: this.goods_id_arr + }, + success: res => { + let newArr = [] + let msg = res.message; + if (res.code == 0 && res.data) { + this.count = res.data.count; + if (res.data.page_count == 0) { + this.emptyShow = true + } + newArr = res.data.list; + newArr = newArr.map(item => { + item.id = this.genNonDuplicate(); + return item; + }); + } else { + this.$util.showToast({ + title: msg + }) + } + this.category_title = ''; + this.coupon_name = ''; + if (res.data.config) this.config = res.data.config; + if (this.categoryId) { + this.share_select(this.categoryList, this.categoryId).then(resolve => { + this.category_title = resolve + }); + } + if (this.coupon) { + this.couponInfo(this.coupon).then(resolve => { + this.coupon_name = resolve + }); + } + mescroll.endSuccess(newArr.length); + //设置列表数据 + if (mescroll.num == 1) this.goodsList = []; //如果是第一页需手动制空列表 + this.goodsList = this.goodsList.concat(newArr); //追加新数据 + if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); + + // #ifdef MP-HARMONY + // 鸿蒙下 mescroll 初始化时 setClientHeight 在 slot 内容渲染前执行,测得高度为 0 + // 数据加载后必须主动重新测量容器高度,否则 mescroll 认为容器高度为 0,列表不可见 + // 注:scrollTo(0,0) 只能重置滚动位置,scrollTop 已是 0 时不会触发 scroll 事件,不会重测 + // mounted 阶段的重试可能已经耗尽 5 次,这里主动重置 clientNum 让测量重新有机会 + this.$nextTick(() => { + const mescrollUni = this.$refs.mescroll && (this.$refs.mescroll.mescroll || this.$refs.mescroll); + if (mescrollUni && typeof mescrollUni.setClientHeight === 'function') { + mescrollUni.clientNum = null; + mescrollUni.isExec = false; + mescrollUni.setClientHeight(); + } + }); + // #endif + + this.waterfallflow((mescroll.num - 1) * 10); + }, + fail: res => { + //联网失败的回调 + mescroll.endErr(); + if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); + } + }); + }, + changeListStyle() { + this.isList = !this.isList; + // 鸿蒙下 isList 切换导致 :key 变化、DOM 重建,重建出来的 .goods-item @click 事件绑定会丢失 + // 主动触发 slot 重建,把事件绑定带回来 + // #ifdef MP-HARMONY + const mescroll = this.$refs.mescroll; + if (mescroll && typeof mescroll.forceSlotRebuild === 'function') { + mescroll.forceSlotRebuild(); + } + // #endif + this.waterfallflow(0); + }, + //筛选点击 + sortTabClick(tag) { + if (tag == 'sale_num') { + this.order = 'sale_num'; + this.sort = 'desc'; + } else if (tag == 'discount_price') { + this.order = 'discount_price'; + this.sort = 'desc'; + } else if (tag == 'screen') { + //筛选 + this.showScreen = true; + return; + } else { + this.order = ''; + this.sort = ''; + } + + if (this.orderType === tag && tag !== 'discount_price') return; + + this.orderType = tag; + if (tag === 'discount_price') { + this.priceOrder = this.priceOrder === 'asc' ? 'desc' : 'asc'; + this.sort = this.priceOrder; + } else { + this.priceOrder = ''; + } + this.emptyShow = false; + this.goodsList = []; + this.$refs.mescroll.refresh(); + }, + //商品详情 + toDetail(item) { + this.$util.redirectTo('/pages_goods/detail', { + goods_id: item.goods_id + }); + }, + search() { + this.emptyShow = false; + this.goodsList = []; + this.$refs.mescroll.refresh(); + }, + selectedCategory(categoryId) { + this.categoryId = categoryId; + }, + screenData() { + if (this.minPrice != '' || this.maxPrice != '') { + // if (!Number(this.minPrice) && this.minPrice) { + // this.$util.showToast({ + // title: '请输入最低价' + // }); + // return; + // } + if (!Number(this.maxPrice) && this.maxPrice) { + this.$util.showToast({ + title: '请输入最高价' + }); + return; + } + if (Number(this.minPrice) < 0 || Number(this.maxPrice) < 0) { + this.$util.showToast({ + title: '筛选价格不能小于0' + }); + return; + } + if (this.minPrice != '' && Number(this.minPrice) > Number(this.maxPrice) && this.maxPrice) { + + this.$util.showToast({ + title: '最低价不能大于最高价' + }); + return; + } + if (this.maxPrice != '' && Number(this.maxPrice) < Number(this.minPrice)) { + this.$util.showToast({ + title: '最高价不能小于最低价' + }); + return; + } + } + this.emptyShow = false; + this.goodsList = []; + this.$refs.mescroll.refresh(); + this.showScreen = false; + }, + //重置数据 + resetData() { + this.categoryId = 0 + this.minPrice = '' + this.maxPrice = '' + this.isFreeShipping = false + }, + goodsImg(imgStr) { + let imgs = imgStr.split(','); + return imgs[0] ? this.$util.img(imgs[0], { + size: 'mid' + }) : this.$util.getDefaultImage().goods; + }, + imgError(index) { + this.goodsList[index].goods_image = this.$util.getDefaultImage().goods; + }, + showPrice(data) { + let price = data.discount_price; + if (data.member_price && parseFloat(data.member_price) < parseFloat(price)) price = data.member_price; + return price; + }, + showMarketPrice(item) { + if (item.market_price_show) { + let price = this.showPrice(item); + if (item.market_price > 0) { + return item.market_price; + } else if (parseFloat(item.price) > parseFloat(price)) { + return item.price; + } + } + return ''; + }, + goodsTag(data) { + return data.label_name || ''; + }, + /** + * 瀑布流 + */ + waterfallflow(start = 0) { + if (!this.isList) { + //页面渲染完成后的事件 + this.$nextTick(() => { + setTimeout(() => { + let listHeight = []; + let listPosition = []; + if (start != 0) { + listHeight = this.listHeight; + listPosition = this.listPosition; + } + let column = 2; + const query = uni.createSelectorQuery().in(this); + query.selectAll('.double-column .goods-item').boundingClientRect(data => { + for (let i = start; i < data.length; i++) { + if (i < column) { + let position = {}; + position.top = uni.upx2px(20) + 'px'; + if (i % column == 0) { + position.left = data[i].width * i + "px"; + } else { + position.left = data[i].width * i + (i % column * uni + .upx2px(30)) + "px"; + } + listPosition[i] = position; + listHeight[i] = data[i].height + uni.upx2px(20); + } else { + let minHeight = Math.min(...listHeight); // 找到第一列的最小高度 + let minIndex = listHeight.findIndex(item => item === minHeight) // 找到最小高度的索引 + //设置当前子元素项的位置 + let position = {}; + position.top = minHeight + uni.upx2px(20) + "px"; + position.left = listPosition[minIndex].left; + listPosition[i] = position; + //重新定义数组最小项的高度 进行累加 + listHeight[minIndex] += data[i].height + uni.upx2px(20); + } + } + this.listHeight = listHeight; + this.listPosition = listPosition; + }).exec(); + }, 50) + }) + } + }, + getBrandList() { + var data = { + page: 1, + page_size: 0 + }; + this.$api.sendRequest({ + url: '/api/goodsbrand/page', + data: data, + success: res => { + if (res.code == 0 && res.data) { + let data = res.data; + this.brandList = data.list; + } + } + }); + }, + /** + * 添加购物车回调 + */ + addCart(id) { + }, + genNonDuplicate(len = 6) { + return Number(Math.random().toString().substr(3, len) + Date.now()).toString(36); + } + } } \ No newline at end of file diff --git a/pages_order/_components/common-payment/common-payment.vue b/pages_order/_components/common-payment/common-payment.vue index 64c0705..d1eeffd 100644 --- a/pages_order/_components/common-payment/common-payment.vue +++ b/pages_order/_components/common-payment/common-payment.vue @@ -1,657 +1,657 @@ - diff --git a/pages_tool/goods/search.vue b/pages_tool/goods/search.vue index c3161ed..1870587 100644 --- a/pages_tool/goods/search.vue +++ b/pages_tool/goods/search.vue @@ -1,345 +1,345 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/help/list.vue b/pages_tool/help/list.vue index b45fd8c..479227c 100644 --- a/pages_tool/help/list.vue +++ b/pages_tool/help/list.vue @@ -1,132 +1,132 @@ - - - - - + + + + + diff --git a/pages_tool/index/diy.vue b/pages_tool/index/diy.vue index a1ad661..2bf6c87 100644 --- a/pages_tool/index/diy.vue +++ b/pages_tool/index/diy.vue @@ -43,7 +43,7 @@ - {{ $lang("diy.diy-notice.l49.t0") }} + 我知道了
diff --git a/pages_tool/login/find.vue b/pages_tool/login/find.vue index 488c270..dd8d3b2 100644 --- a/pages_tool/login/find.vue +++ b/pages_tool/login/find.vue @@ -1,440 +1,440 @@ - - - - - + + + + + diff --git a/pages_tool/login/login.vue b/pages_tool/login/login.vue index aa34ca1..0ec95de 100644 --- a/pages_tool/login/login.vue +++ b/pages_tool/login/login.vue @@ -1,500 +1,500 @@ - - - - - - - + + \ No newline at end of file diff --git a/pages_tool/member/account.vue b/pages_tool/member/account.vue index 5efd028..2921673 100644 --- a/pages_tool/member/account.vue +++ b/pages_tool/member/account.vue @@ -1,453 +1,453 @@ - - - - - - - + + \ No newline at end of file diff --git a/pages_tool/member/account_edit.vue b/pages_tool/member/account_edit.vue index acfc6a7..0225527 100644 --- a/pages_tool/member/account_edit.vue +++ b/pages_tool/member/account_edit.vue @@ -1,323 +1,323 @@ - - - - - + + + + + diff --git a/pages_tool/member/address.vue b/pages_tool/member/address.vue index f4503c0..b0a4f9f 100644 --- a/pages_tool/member/address.vue +++ b/pages_tool/member/address.vue @@ -1,607 +1,607 @@ - - - - - - + \ No newline at end of file diff --git a/pages_tool/member/address_edit.vue b/pages_tool/member/address_edit.vue index b17af22..7451fea 100644 --- a/pages_tool/member/address_edit.vue +++ b/pages_tool/member/address_edit.vue @@ -1,497 +1,497 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/apply_withdrawal.vue b/pages_tool/member/apply_withdrawal.vue index 609760a..6317eb6 100644 --- a/pages_tool/member/apply_withdrawal.vue +++ b/pages_tool/member/apply_withdrawal.vue @@ -1,424 +1,424 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/assets.vue b/pages_tool/member/assets.vue index b60fbd6..f5a7a8b 100644 --- a/pages_tool/member/assets.vue +++ b/pages_tool/member/assets.vue @@ -1,234 +1,234 @@ - - - - - + + + + + diff --git a/pages_tool/member/balance.vue b/pages_tool/member/balance.vue index 997b62e..fa528b7 100644 --- a/pages_tool/member/balance.vue +++ b/pages_tool/member/balance.vue @@ -1,189 +1,189 @@ - - - - - + + + + + diff --git a/pages_tool/member/balance_detail.vue b/pages_tool/member/balance_detail.vue index 5f0f2eb..ff5586c 100644 --- a/pages_tool/member/balance_detail.vue +++ b/pages_tool/member/balance_detail.vue @@ -1,362 +1,362 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/cancellation.vue b/pages_tool/member/cancellation.vue index 492ffbc..15d1e79 100644 --- a/pages_tool/member/cancellation.vue +++ b/pages_tool/member/cancellation.vue @@ -1,133 +1,133 @@ - - - - - + + + + + diff --git a/pages_tool/member/cancelrefuse.vue b/pages_tool/member/cancelrefuse.vue index 57df6ed..7ca4d77 100644 --- a/pages_tool/member/cancelrefuse.vue +++ b/pages_tool/member/cancelrefuse.vue @@ -1,117 +1,117 @@ - - - - - + + + + + diff --git a/pages_tool/member/cancelstatus.vue b/pages_tool/member/cancelstatus.vue index 31a148e..fc0e914 100644 --- a/pages_tool/member/cancelstatus.vue +++ b/pages_tool/member/cancelstatus.vue @@ -1,189 +1,189 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/cancelsuccess.vue b/pages_tool/member/cancelsuccess.vue index b1692c8..dca4284 100644 --- a/pages_tool/member/cancelsuccess.vue +++ b/pages_tool/member/cancelsuccess.vue @@ -1,104 +1,104 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/card.vue b/pages_tool/member/card.vue index acdd3d6..f98f099 100644 --- a/pages_tool/member/card.vue +++ b/pages_tool/member/card.vue @@ -1,265 +1,265 @@ - - - - - - - + + \ No newline at end of file diff --git a/pages_tool/member/card_buy.vue b/pages_tool/member/card_buy.vue index ff677cc..bd4b526 100644 --- a/pages_tool/member/card_buy.vue +++ b/pages_tool/member/card_buy.vue @@ -1,429 +1,429 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/collection.vue b/pages_tool/member/collection.vue index 044a263..83e0458 100644 --- a/pages_tool/member/collection.vue +++ b/pages_tool/member/collection.vue @@ -1,92 +1,92 @@ - - - - - - - + + \ No newline at end of file diff --git a/pages_tool/member/contact.vue b/pages_tool/member/contact.vue index 4fb4ff4..d3b7c6a 100644 --- a/pages_tool/member/contact.vue +++ b/pages_tool/member/contact.vue @@ -1,28 +1,28 @@ - - - - - + + + + + diff --git a/pages_tool/member/coupon.vue b/pages_tool/member/coupon.vue index 8a52290..08db353 100644 --- a/pages_tool/member/coupon.vue +++ b/pages_tool/member/coupon.vue @@ -1,401 +1,401 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/footprint.vue b/pages_tool/member/footprint.vue index 1f7a54c..01a4b54 100644 --- a/pages_tool/member/footprint.vue +++ b/pages_tool/member/footprint.vue @@ -1,255 +1,255 @@ - - - - - + + + + + diff --git a/pages_tool/member/index.vue b/pages_tool/member/index.vue index 5b48521..0eccc33 100644 --- a/pages_tool/member/index.vue +++ b/pages_tool/member/index.vue @@ -1,202 +1,205 @@ - - - - - - - + + \ No newline at end of file diff --git a/pages_tool/member/info.vue b/pages_tool/member/info.vue index 0f9596b..c36bd80 100644 --- a/pages_tool/member/info.vue +++ b/pages_tool/member/info.vue @@ -1,329 +1,329 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/info_edit.vue b/pages_tool/member/info_edit.vue index 953af00..5d9ef29 100644 --- a/pages_tool/member/info_edit.vue +++ b/pages_tool/member/info_edit.vue @@ -1,387 +1,387 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/invite_friends.vue b/pages_tool/member/invite_friends.vue index 5d5b7b0..34c44bb 100644 --- a/pages_tool/member/invite_friends.vue +++ b/pages_tool/member/invite_friends.vue @@ -1,278 +1,278 @@ - - - - - - - - - + + + + + + + + + diff --git a/pages_tool/member/level.vue b/pages_tool/member/level.vue index b019434..1eb6596 100644 --- a/pages_tool/member/level.vue +++ b/pages_tool/member/level.vue @@ -1,372 +1,372 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/level_growth_rules.vue b/pages_tool/member/level_growth_rules.vue index 2ce653b..94309f0 100644 --- a/pages_tool/member/level_growth_rules.vue +++ b/pages_tool/member/level_growth_rules.vue @@ -8,8 +8,8 @@ - {{ $lang("fenxiao.level.l221") }} - {{ $lang("common.register-reward.l27.t0") }} + 等级 + 成长值 {{ item.level_name }} @@ -20,20 +20,20 @@ - {{ $lang("member.level_growth_rules.l23") }} + 什么是成长值 - {{ $lang("member.level_growth_rules.l25") }} + 成长值是消费者在店铺成为会员后,通过消费计算出来的值。成长值决定会员等级,会员等级越高,所享受的会员权益和会员礼包就越多。 - {{ $lang("member.level_growth_rules.l30") }} + 如何获得成长值 - {{ $lang("member.level_growth_rules.l33") }} - {{ $lang("member.level_growth_rules.l34") }} - {{ $lang("member.level_growth_rules.l35") }} - {{ $lang("member.level_growth_rules.l36") }} + 1、注册会员送x成长值。 + 2、会员充值到余额送x成长值。 + 3、会员签到送x成长值。 + 4、会员消费x元,交易完成即可获得x个成长值。 @@ -118,7 +118,7 @@ }, getBannerDetail(index) { uni.showLoading({ - title: $lang('member.level.l268'), + title: '将前往详情页面', duration: 2000, mask: true }); diff --git a/pages_tool/member/modify_face.vue b/pages_tool/member/modify_face.vue index e892d58..fece095 100644 --- a/pages_tool/member/modify_face.vue +++ b/pages_tool/member/modify_face.vue @@ -1,197 +1,197 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/pay_password.vue b/pages_tool/member/pay_password.vue index 721c1ce..0511b4b 100644 --- a/pages_tool/member/pay_password.vue +++ b/pages_tool/member/pay_password.vue @@ -1,278 +1,278 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/member/point.vue b/pages_tool/member/point.vue index 9c61231..172cbc8 100644 --- a/pages_tool/member/point.vue +++ b/pages_tool/member/point.vue @@ -1,161 +1,161 @@ - - - - - + + + + + diff --git a/pages_tool/member/point_detail.vue b/pages_tool/member/point_detail.vue index f217931..7087667 100644 --- a/pages_tool/member/point_detail.vue +++ b/pages_tool/member/point_detail.vue @@ -1,342 +1,342 @@ - - - - - + + + + + diff --git a/pages_tool/member/public/js/collection.js b/pages_tool/member/public/js/collection.js index f781f08..c941bc6 100644 --- a/pages_tool/member/public/js/collection.js +++ b/pages_tool/member/public/js/collection.js @@ -1,80 +1,80 @@ -export default { - data() { - return { - collectionList: [], - isShowEmpty: false - }; - }, - methods: { - //跳转至详情页 - toDetail(e) { - this.$util.redirectTo("/pages_goods/detail", { - goods_id: e.goods_id - }); - }, - //请求数据 - getData(mescroll) { - this.isShowEmpty = false; - let url = "/api/goodscollect/page" - let array = [] - this.$api.sendRequest({ - url: url, - data: { - page_size: mescroll.size, - page: mescroll.num, - }, - async: false, - }).then((res) => { - let newArr = res.data?.list || []; - for (var i = 0; i < newArr.length; i++) { - newArr[i].composite_score = Math.floor((parseFloat(newArr[i].shop_desccredit) + parseFloat(newArr[i].shop_servicecredit) + parseFloat(newArr[i].shop_deliverycredit)) / 3).toFixed(1); - } - array = array.concat(newArr); - //设置列表数据 - if (mescroll.num == 1) this.collectionList = []; //如果是第一页需手动制空列表 - this.collectionList = this.collectionList.concat(newArr); //追加新数据 - mescroll.endSuccess(array.length); - if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); - this.isShowEmpty = true; - }) - - }, - //监听下拉刷新,初始化页面数据 - listenRefresh(e) { - this.$refs.goodsRecommend.init(); - }, - //删除某一项 - deleteItem(e) { - this.$api.sendRequest({ - url: "/api/goodscollect/delete", - data: { - goods_id: e - }, - success: res => { - if (res.code == 0) { - this.$util.showToast({ - title: $lang("member.account.l118") - }) - let array = this.collectionList; - let newArray = array.filter((v) => { - return v.goods_id != e; - }) - this.collectionList = newArray; - } else { - this.$util.showToast({ - title: res.message - }) - } - } - }) - }, - imageError(index) { - this.collectionList[index].logo = this.$util.getDefaultImage().goods; - this.$forceUpdate(); - }, - goodsImageError(index) { - this.collectionList[index].sku_image = this.$util.getDefaultImage().goods; - this.$forceUpdate(); - } - } -}; +export default { + data() { + return { + collectionList: [], + isShowEmpty: false + }; + }, + methods: { + //跳转至详情页 + toDetail(e) { + this.$util.redirectTo("/pages_goods/detail", { + goods_id: e.goods_id + }); + }, + //请求数据 + getData(mescroll) { + this.isShowEmpty = false; + let url = "/api/goodscollect/page" + let array = [] + this.$api.sendRequest({ + url: url, + data: { + page_size: mescroll.size, + page: mescroll.num, + }, + async: false, + }).then((res) => { + let newArr = res.data?.list || []; + for (var i = 0; i < newArr.length; i++) { + newArr[i].composite_score = Math.floor((parseFloat(newArr[i].shop_desccredit) + parseFloat(newArr[i].shop_servicecredit) + parseFloat(newArr[i].shop_deliverycredit)) / 3).toFixed(1); + } + array = array.concat(newArr); + //设置列表数据 + if (mescroll.num == 1) this.collectionList = []; //如果是第一页需手动制空列表 + this.collectionList = this.collectionList.concat(newArr); //追加新数据 + mescroll.endSuccess(array.length); + if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); + this.isShowEmpty = true; + }) + + }, + //监听下拉刷新,初始化页面数据 + listenRefresh(e) { + this.$refs.goodsRecommend.init(); + }, + //删除某一项 + deleteItem(e) { + this.$api.sendRequest({ + url: "/api/goodscollect/delete", + data: { + goods_id: e + }, + success: res => { + if (res.code == 0) { + this.$util.showToast({ + title: "删除成功" + }) + let array = this.collectionList; + let newArray = array.filter((v) => { + return v.goods_id != e; + }) + this.collectionList = newArray; + } else { + this.$util.showToast({ + title: res.message + }) + } + } + }) + }, + imageError(index) { + this.collectionList[index].logo = this.$util.getDefaultImage().goods; + this.$forceUpdate(); + }, + goodsImageError(index) { + this.collectionList[index].sku_image = this.$util.getDefaultImage().goods; + this.$forceUpdate(); + } + } +}; diff --git a/pages_tool/member/public/js/info.js b/pages_tool/member/public/js/info.js index 009b9c5..b0764e4 100644 --- a/pages_tool/member/public/js/info.js +++ b/pages_tool/member/public/js/info.js @@ -1,962 +1,962 @@ -import validate from '@/common/js/validate.js'; -import memberPublic from './member-public.js'; - -export default { - data() { - return { - registerConfig: {}, - indent: 'all', - customNavTitle: "", - formData: { - userHeadImg: '', - number: '', //账号 - nickName: '', //昵称 - sex: '', //性别 - realName: '', //真实姓名 - birthday: '', //生日 - currentPassword: '', //当前密码 - newPassword: '', //新密码 - confirmPassword: '', //确认密码 - mobile: '', //手机号 - mobileVercode: '', //手机验证码 - mobileDynacode: '', //手机动态验证吗 - mobileCodeText: "", - username: '', - provinceId: 0, - cityId: 0, - districtId: 0, - fullAddress: '', - address: '' - }, - memberInfoformData: { - userHeadImg: '', - number: '', //账号 - nickName: '', //昵称 - sex: '', //性别 - realName: '', //真实姓名 - birthday: '', //生日 - currentPassword: '', //当前密码 - newPassword: '', //新密码 - confirmPassword: '', //确认密码 - mobile: '', //手机号 - mobileVercode: '', //手机验证码 - mobileDynacode: '', //手机动态验证吗 - mobileCodeText: "", - }, - langList: [], - langIndex: 0, - seconds: 120, - timer: null, - isSend: false, - captcha: { - id: '', - img: '' - }, - isIphoneX: false, - items: [{ - value: '0', - name: $lang('member.public.js.info.l58') - }, - { - value: '1', - name: $lang('member.public.js.info.l62'), - checked: 'true' - }, - { - value: '2', - name: $lang('member.public.js.info.l67') - } - ], - current: 0, - memberConfig: { - is_audit: 0, - is_enable: 0 - }, - defaultRegions: [], - }; - }, - onLoad(option) { - this.isIphoneX = this.$util.uniappIsIPhoneX() - this.formData.mobileCodeText = this.$lang('login.list.findanimate_code'); - - if (option.back) { - this.back = option.back; - } - - this.getCaptcha(); - - if (option.action) { - this.indent = option.action; - this.setNavbarTitle() - - // #ifdef MP-WEIXIN - option.action == 'bind_mobile' && this.getCode() - // #endif - } - - this.getRegisterConfig(); - this.initLang(); - this.getMemberConfig(); - }, - onShow() { - if (!this.storeToken) { - this.$nextTick(() => { - this.$refs.login.open('/pages_tool/member/info'); - }); - } else { - this.getInfo(); - } - }, - onHide() { - this.seconds = 120; - this.formData.mobileCodeText = $lang('common.ns-login.l169.t0'); - this.isSend = false; - clearInterval(this.timer); - }, - watch: { - seconds(value) { - if (value == 0) { - this.seconds = 120; - this.formData.mobileCodeText = $lang('common.ns-login.l169.t0'); - this.isSend = false; - clearInterval(this.timer); - } - } - }, - computed: { - startDate() { - return this.getDate('start'); - }, - endDate() { - return this.getDate('end'); - } - }, - filters: { - mobile(mobile) { - return mobile.substring(0, 4 - 1) + '****' + mobile.substring(6 + 1); - } - }, - methods: { - ...memberPublic.methods, - // 初始化语言 - initLang() { - //获取语言列表 - this.langList = this.$langConfig.list(); - if (!uni.getStorageSync("lang")) { - this.langIndex = 0; - } else { - for (let i = 0; i < this.langList.length; i++) { - if (this.langList[i].value == uni.getStorageSync("lang")) { - this.langIndex = i; - break; - } - } - } - }, - setNavbarTitle() { - let title = $lang('member.public.js.info.l157'); - switch (this.indent) { - case 'name': - title = this.$lang('common.list.modify_nickname'); - break; - case 'realName': - title = this.$lang('common.list.real_name'); - break; - case 'sex': - title = this.$lang('common.list.sex'); - break; - case 'birthday': - title = this.$lang('birthday'); - break; - case 'password': - title = this.$lang('login.list.password'); - break; - case 'mobile': - title = this.$lang('login.list.mobile'); - break; - } - uni.setNavigationBarTitle({ - title: title - }); - }, - // 初始化用户信息 - getInfo() { - this.memberInfoformData.userHeadImg = this.memberInfo.headimg; - this.memberInfoformData.number = this.memberInfo.username; //账号 - this.memberInfoformData.nickName = this.memberInfo.nickname; //昵称 - this.memberInfoformData.realName = this.memberInfo.realname ? this.memberInfo.realname : $lang('member.account_edit.l5'); //真实姓名 - this.memberInfoformData.sex = this.memberInfo.sex == 0 ? '未知' : this.memberInfo.sex == 1 ? '男' : $lang('member.public.js.info.l67'); //性别 - this.memberInfoformData.birthday = this.memberInfo.birthday ? this.$util.timeStampTurnTime(this.memberInfo.birthday, 'YYYY-MM-DD') : $lang('member.info_edit.l57'); //生日 - this.memberInfoformData.mobile = this.memberInfo.mobile; //手机号 - - this.formData.username = this.memberInfo.username; //用户名 - this.formData.nickName = this.memberInfo.nickname; //昵称 - this.formData.realName = this.memberInfo.realname; //真实姓名 - this.formData.sex = this.memberInfo.sex; //性别 - this.formData.birthday = this.memberInfo.birthday ? this.$util.timeStampTurnTime(this.memberInfo.birthday, 'YYYY-MM-DD') : ''; //生日 - this.formData.provinceId = this.memberInfo.province_id; - this.formData.cityId = this.memberInfo.city_id; - this.formData.districtId = this.memberInfo.district_id; - this.formData.fullAddress = this.memberInfo.full_address; - this.formData.address = this.memberInfo.address; - if (this.memberInfo.full_address) this.defaultRegions = [this.memberInfo - .province_id, this.memberInfo.city_id, this.memberInfo.district_id - ]; - }, - // 切换编辑项 - modifyInfo(action) { - switch (action) { - case 'cancellation': - this.getCancelStatus(); - break; - case 'language': - let newArray = []; - for (let i = 0; i < this.langList.length; i++) { - newArray.push(this.langList[i].name) - } - uni.showActionSheet({ - itemList: newArray, - success: function (res) { - if (vm.langIndex != res.tapIndex) { - vm.$langConfig.change(vm.langList[res.tapIndex].value) - } - } - }); - break; - case 'mobile': - // #ifdef MP - this.$util.redirectTo('/pages_tool/member/info_edit', { - action: 'bind_mobile' - }); - // #endif - // #ifndef MP - this.$util.redirectTo('/pages_tool/member/info_edit', { - action - }); - // #endif - break; - default: - this.$util.redirectTo('/pages_tool/member/info_edit', { - action - }); - } - }, - // 导航返回 - NavReturn() { - uni.navigateBack({ - delta: 1 - }) - }, - // 获取验证码 - getCaptcha() { - this.$api.sendRequest({ - url: '/api/captcha/captcha', - data: { - captcha_id: this.captcha.id - }, - success: res => { - if (res.code >= 0) { - this.captcha = res.data; - this.captcha.img = this.captcha.img.replace(/\r\n/g, ''); - } - } - }); - }, - headImage() { - this.$util.redirectTo("/pages_tool/member/modify_face"); - }, - // 检测手机是否已绑定 - async testBinding(type) { - var res = await this.checkMobile(); - return res; - }, - //获取注销的配置信息 - getMemberConfig() { - this.$api.sendRequest({ - url: '/membercancel/api/membercancel/config', - success: res => { - if (res.code >= 0) { - this.memberConfig = res.data - } - } - }); - - }, - save(type) { - switch (type) { - case 'username': - this.modifyUserName(); - break; - case 'name': - this.modifyNickName(); - break; - case 'realName': - this.modifyRealName(); - break; - case 'sex': - this.modifySex(); - break; - case 'birthday': - this.modifyBirthday(); - break; - case 'password': - this.modifyPassword(); - break; - case 'mobile': - this.modifyMobile(); - break; - case 'address': - this.modifyAddress(); - break; - } - }, - - // ------------------------修改用户名------------------------------ - modifyUserName() { - if (this.formData.username == this.memberInfo.username) { - this.$util.showToast({ - title: this.$lang('login.list.alikeusername') - }); - return; - } - var rule = [{ - name: 'username', - checkType: 'required', - errorMsg: this.$lang('login.list.no_emity_username') - }]; - if (!rule.length) return; - var checkRes = validate.check(this.formData, rule); - if (checkRes) { - this.$api.sendRequest({ - url: '/api/member/modifyusername', - data: { - username: this.formData.username - }, - success: res => { - if (res.code == 0) { - this.memberInfo.username = this.formData.username; - this.$store.commit('setMemberInfo', this.memberInfo); - this.$util.showToast({ - title: this.$lang("common.list.update_success") - }); - this.NavReturn(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - } else { - this.$util.showToast({ - title: validate.error - }); - } - }, - // ------------------------修改昵称------------------------------ - - modifyNickName() { - if (this.formData.nickName == this.memberInfo.nickname) { - this.$util.showToast({ - title: this.$lang('common.list.alike_nickname') - }); - return; - } - var rule = [{ - name: 'nickName', - checkType: 'required', - errorMsg: this.$lang('common.list.no_emity_nickname') - }]; - if (!rule.length) return; - var checkRes = validate.check(this.formData, rule); - if (checkRes) { - this.$api.sendRequest({ - url: '/api/member/modifynickname', - data: { - nickname: this.formData.nickName - }, - success: res => { - if (res.code == 0) { - this.memberInfo.nickname = this.formData.nickName; - this.$store.commit('setMemberInfo', this.memberInfo); - this.$util.showToast({ - title: this.$lang("common.list.update_success") - }); - this.NavReturn(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - } else { - this.$util.showToast({ - title: validate.error - }); - } - }, - - // ------------------------修改真实姓名------------------------------ - modifyRealName() { - if (this.formData.realName == this.memberInfo.realname && this.memberInfo.realname) { - this.$util.showToast({ - title: $lang('member.public.js.info.l404') - }); - return; - } - var rule = [{ - name: 'realName', - checkType: 'required', - errorMsg: $lang('member.public.js.info.l411') - }]; - if (!rule.length) return; - var checkRes = validate.check(this.formData, rule); - if (checkRes) { - this.$api.sendRequest({ - url: '/api/member/modifyrealname', - data: { - realname: this.formData.realName - }, - success: res => { - if (res.code == 0) { - this.memberInfo.realname = this.formData.realName; - this.$store.commit('setMemberInfo', this.memberInfo); - this.$util.showToast({ - title: this.$lang("common.list.update_success") - }); - this.NavReturn(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - } else { - this.$util.showToast({ - title: validate.error - }); - } - }, - - // ------------------------修改性别------------------------------ - radioChange: function (evt) { - for (let i = 0; i < this.items.length; i++) { - if (this.items[i].value === evt.target.value) { - this.formData.sex = i; - break; - } - } - }, - - modifySex() { - this.$api.sendRequest({ - url: '/api/member/modifysex', - data: { - sex: this.formData.sex - }, - success: res => { - if (res.code == 0) { - this.memberInfo.sex = this.formData.sex; - this.$store.commit('setMemberInfo', this.memberInfo); - this.$util.showToast({ - title: this.$lang("common.list.update_success") - }); - this.NavReturn(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - }, - - // ------------------------修改生日------------------------------ - - bindDateChange: function (e) { - this.formData.birthday = e.target.value - }, - - getDate(type) { - const date = new Date(); - let year = date.getFullYear(); - let month = date.getMonth() + 1; - let day = date.getDate(); - - if (type === 'start') { - year = year - 60; - } else if (type === 'end') { - year = year + 2; - } - month = month > 9 ? month : '0' + month; - day = day > 9 ? day : '0' + day; - return `${year}-${month}-${day}`; - }, - - modifyBirthday() { - if (this.formData.birthday.length == 0) { - this.$util.showToast({ - title: $lang('member.info_edit.l57') - }); - return; - } - this.$api.sendRequest({ - url: '/api/member/modifybirthday', - data: { - birthday: this.$util.timeTurnTimeStamp(this.formData.birthday) - }, - success: res => { - if (res.code == 0) { - this.memberInfo.birthday = this.$util.timeTurnTimeStamp(this.formData.birthday); - this.$store.commit('setMemberInfo', this.memberInfo); - this.$util.showToast({ - title: this.$lang("common.list.update_success") - }); - this.NavReturn(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - }, - - // ------------------------修改密码------------------------------ - /** - * 获取注册配置 - */ - getRegisterConfig() { - this.$api.sendRequest({ - url: '/api/register/config', - success: res => { - if (res.code >= 0) { - this.registerConfig = res.data.value; - } - } - }); - }, - modifyPassword() { - if (this.memberInfo.password) { - var rule = [{ - name: 'currentPassword', - checkType: 'required', - errorMsg: this.$lang("login.list.please_input_old_password") - }, - { - name: 'newPassword', - checkType: 'required', - errorMsg: this.$lang("login.list.please_input_new_password") - } - ]; - } else { - var rule = [{ - name: 'mobileVercode', - checkType: 'required', - errorMsg: this.$lang("common.list.confirm_code_input") - }, - { - name: 'mobileDynacode', - checkType: 'required', - errorMsg: this.$lang("login.list.animate_code_input") - }, - { - name: 'newPassword', - checkType: 'required', - errorMsg: this.$lang("login.list.please_input_new_password") - } - ]; - } - - let regConfig = this.registerConfig; - if (regConfig.pwd_len > 0) { - rule.push({ - name: 'newPassword', - checkType: 'lengthMin', - checkRule: regConfig.pwd_len, - errorMsg: $lang('member.public.js.info.l579') + regConfig.pwd_len + $lang('login.find.l196') - }); - } - if (regConfig.pwd_complexity) { - let passwordErrorMsg = $lang('login.find.l200'), - reg = ''; - if (regConfig.pwd_complexity.indexOf('number') != -1) { - reg += '(?=.*?[0-9])'; - passwordErrorMsg += $lang('login.find.l204'); - } - if (regConfig.pwd_complexity.indexOf('letter') != -1) { - reg += '(?=.*?[a-z])'; - passwordErrorMsg += $lang('login.find.l208'); - } - if (regConfig.pwd_complexity.indexOf('upper_case') != -1) { - reg += '(?=.*?[A-Z])'; - passwordErrorMsg += $lang('login.find.l212'); - } - if (regConfig.pwd_complexity.indexOf('symbol') != -1) { - reg += '(?=.*?[#?!@$%^&*-])'; - passwordErrorMsg += $lang('login.find.l216'); - } - rule.push({ - name: 'newPassword', - checkType: 'reg', - checkRule: reg, - errorMsg: passwordErrorMsg - }); - } - var checkRes = validate.check(this.formData, rule); - if (checkRes) { - if (this.formData.currentPassword == this.formData.newPassword) { - this.$util.showToast({ - title: $lang('member.public.js.info.l612') - }); - return; - } - if (this.formData.newPassword != this.formData.confirmPassword) { - this.$util.showToast({ - title: $lang('login.find.l230') - }); - return; - } - this.$api.sendRequest({ - url: '/api/member/modifypassword', - data: { - new_password: this.formData.newPassword, - old_password: this.formData.currentPassword, - code: this.formData.mobileDynacode, - key: uni.getStorageSync("password_mobile_key"), - }, - success: res => { - if (res.code == 0) { - this.memberInfo.password = 1; - this.$store.commit('setMemberInfo', this.memberInfo); - this.$util.showToast({ - title: this.$lang('common.list.update_success') - }); - this.NavReturn(); - uni.removeStorageSync('password_mobile_key'); - } else { - this.$util.showToast({ - title: res.message - }); - this.getCaptcha(); - } - } - }); - } else { - this.$util.showToast({ - title: validate.error - }); - } - }, - - // ------------------------修改手机号------------------------------ - // 验证手机号 - vertifyMobile() { - var rule = [{ - name: 'mobile', - checkType: 'required', - errorMsg: $lang('common.ns-login.l16.t0') - }, { - name: 'mobile', - checkType: 'phoneno', - errorMsg: $lang('common.ns-login.l393.t0') - }]; - var checkRes = validate.check(this.formData, rule); - if (!checkRes) { - this.$util.showToast({ - title: validate.error - }); - return false; - } - return true; - }, - // 检测手机号是否存在 - async checkMobile() { - if (!this.vertifyMobile()) return; - let res = await this.$api.sendRequest({ - url: '/api/member/checkmobile', - data: { - mobile: this.formData.mobile - }, - async: false - }); - if (res.code != 0) { - this.$util.showToast({ - title: res.message - }); - return false; - } - return true; - }, - - // 发送短信动态码 - async bindMoblieCode() { - if (this.seconds != 120) return; - var rule = [{ - name: 'mobile', - checkType: 'phoneno', - errorMsg: this.$lang("login.list.sure_phone_number") - }, - { - name: 'mobileVercode', - checkType: 'required', - errorMsg: this.$lang("common.list.confirm_code_input") - }, - ]; - - var checkRes = validate.check(this.formData, rule); - - if (checkRes && !this.isSend) { - this.isSend = true; - this.$api.sendRequest({ - url: '/api/member/bindmobliecode', - data: { - mobile: this.formData.mobile, - captcha_id: this.captcha.id, - captcha_code: this.formData.mobileVercode - }, - success: res => { - let data = res.data; - if (data.key) { - if (this.seconds == 120 && this.timer == null) { - this.timer = setInterval(() => { - this.seconds--; - this.formData.mobileCodeText = $lang('member.public.js.info.l726') + this.seconds + 's)'; - }, 1000); - } - uni.setStorageSync('mobile_key', data.key); - } else { - this.$util.showToast({ - title: res.message - }); - this.isSend = false; - } - }, - fail: res => { - this.isSend = false; - this.getCaptcha(); - } - }); - } else { - this.$util.showToast({ - title: validate.error ? validate.error : $lang('member.public.js.info.l744') - }); - } - }, - async modifyMobile() { - - var mobileRule = [{ - name: 'mobile', - checkType: 'phoneno', - errorMsg: this.$lang("login.list.sure_phone_number") - }, - { - name: 'mobileVercode', - checkType: 'required', - errorMsg: this.$lang("common.list.confirm_code_input") - }, - { - name: 'mobileDynacode', - checkType: 'required', - errorMsg: this.$lang("login.list.animate_code_input") - }, - ]; - var checkRes = validate.check(this.formData, mobileRule); - - if (checkRes) { - if (this.formData.mobile == this.memberInfo.mobile) { - this.$util.showToast({ - title: this.$lang("login.list.alike_phone") - }); - return; - } - this.$api.sendRequest({ - url: '/api/member/modifymobile', - data: { - mobile: this.formData.mobile, - captcha_id: this.captcha.id, - captcha_code: this.formData.mobileVercode, - code: this.formData.mobileDynacode, - key: uni.getStorageSync("mobile_key"), - }, - success: res => { - if (res.code == 0) { - this.memberInfo.mobile = this.formData.mobile; - this.$store.commit('setMemberInfo', this.memberInfo); - this.$util.showToast({ - title: this.$lang("common.list.update_success") - }); - if (this.back) { - this.$util.redirectTo('/pages_tool/member/pay_password', { - 'back': this.back - }, 'redirectTo') - } else { - this.NavReturn(); - } - } else { - this.$util.showToast({ - title: res.message - }); - this.getCaptcha(); - } - }, - fail: res => { - this.isSend = false; - this.getCaptcha(); - } - }); - } else { - this.$util.showToast({ - title: validate.error - }); - } - }, - /** - * 修改密码发送动态码 - */ - passwordMoblieCode() { - if (this.seconds != 120) return; - - if (this.formData.mobileVercode == '') { - this.$util.showToast({ - title: this.$lang("common.list.confirm_code_input") - }); - return; - } - - if (!this.isSend) { - this.isSend = true; - this.$api.sendRequest({ - url: '/api/member/pwdmobliecode', - data: { - captcha_id: this.captcha.id, - captcha_code: this.formData.mobileVercode - }, - success: res => { - let data = res.data; - if (data.key) { - if (this.seconds == 120 && this.timer == null) { - this.timer = setInterval(() => { - this.seconds--; - this.formData.mobileCodeText = $lang('member.public.js.info.l726') + this.seconds + 's)'; - }, 1000); - } - uni.setStorageSync('password_mobile_key', data.key); - } else { - this.$util.showToast({ - title: res.message - }); - this.isSend = false; - } - }, - fail: res => { - this.isSend = false; - this.getCaptcha(); - } - }); - } else { - this.$util.showToast({ - title: $lang('member.public.js.info.l744') - }); - } - }, - modifyAddress() { - var rule = [{ - name: 'fullAddress', - checkType: 'required', - errorMsg: $lang('member.public.js.info.l869') - }, - { - name: 'address', - checkType: 'required', - errorMsg: $lang('member.public.js.info.l874') - } - ]; - if (!rule.length) return; - var checkRes = validate.check(this.formData, rule); - if (checkRes) { - this.$api.sendRequest({ - url: '/api/member/modifyaddress', - data: { - province_id: this.formData.provinceId, - city_id: this.formData.cityId, - district_id: this.formData.districtId, - address: this.formData.address, - full_address: this.formData.fullAddress - }, - success: res => { - if (res.code == 0) { - this.memberInfo.province_id = this.formData.provinceId; - this.memberInfo.city_id = this.formData.cityId; - this.memberInfo.district_id = this.formData.districtId; - this.memberInfo.address = this.formData.address; - this.memberInfo.full_address = this.formData.fullAddress; - this.$store.commit('setMemberInfo', this.memberInfo); - this.$util.showToast({ - title: this.$lang("common.list.update_success") - }); - this.NavReturn(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - } else { - this.$util.showToast({ - title: validate.error - }); - } - }, - initFormData() { - this.formData.currentPassword = ''; - this.formData.newPassword = ''; - this.formData.confirmPassword = ''; - this.formData.mobileVercode = ''; - this.formData.mobileDynacode = ''; - this.formData.mobile = ''; - }, - handleGetRegions(regions) { - this.formData.fullAddress = ''; - this.formData.fullAddress += regions[0] != undefined ? regions[0].label : ''; - this.formData.fullAddress += regions[1] != undefined ? '-' + regions[1].label : ''; - this.formData.fullAddress += regions[2] != undefined ? '-' + regions[2].label : ''; - this.formData.provinceId = regions[0] ? regions[0].value : 0; - this.formData.cityId = regions[1] ? regions[1].value : 0; - this.formData.districtId = regions[2] ? regions[2].value : 0; - }, - /** - * 手动绑定手机号 - */ - manualBinding() { - this.indent = 'mobile'; - }, - mobileAuth(e) { - if (e.detail.errMsg == 'getPhoneNumber:ok') { - let data = e.detail - // #ifdef MP-WEIXIN - Object.assign(data, this.authInfo) - // #endif - this.$api.sendRequest({ - url: '/api/member/mobileauth', - data, - success: res => { - if (res.code == 0) { - this.$util.showToast({ - title: this.$lang("common.list.update_success") - }); - this.NavReturn(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }) - } - } - } +import validate from '@/common/js/validate.js'; +import memberPublic from './member-public.js'; + +export default { + data() { + return { + registerConfig: {}, + indent: 'all', + customNavTitle: "", + formData: { + userHeadImg: '', + number: '', //账号 + nickName: '', //昵称 + sex: '', //性别 + realName: '', //真实姓名 + birthday: '', //生日 + currentPassword: '', //当前密码 + newPassword: '', //新密码 + confirmPassword: '', //确认密码 + mobile: '', //手机号 + mobileVercode: '', //手机验证码 + mobileDynacode: '', //手机动态验证吗 + mobileCodeText: "", + username: '', + provinceId: 0, + cityId: 0, + districtId: 0, + fullAddress: '', + address: '' + }, + memberInfoformData: { + userHeadImg: '', + number: '', //账号 + nickName: '', //昵称 + sex: '', //性别 + realName: '', //真实姓名 + birthday: '', //生日 + currentPassword: '', //当前密码 + newPassword: '', //新密码 + confirmPassword: '', //确认密码 + mobile: '', //手机号 + mobileVercode: '', //手机验证码 + mobileDynacode: '', //手机动态验证吗 + mobileCodeText: "", + }, + langList: [], + langIndex: 0, + seconds: 120, + timer: null, + isSend: false, + captcha: { + id: '', + img: '' + }, + isIphoneX: false, + items: [{ + value: '0', + name: '未知' + }, + { + value: '1', + name: '男', + checked: 'true' + }, + { + value: '2', + name: '女' + } + ], + current: 0, + memberConfig: { + is_audit: 0, + is_enable: 0 + }, + defaultRegions: [], + }; + }, + onLoad(option) { + this.isIphoneX = this.$util.uniappIsIPhoneX() + this.formData.mobileCodeText = this.$lang('findanimateCode'); + + if (option.back) { + this.back = option.back; + } + + this.getCaptcha(); + + if (option.action) { + this.indent = option.action; + this.setNavbarTitle() + + // #ifdef MP-WEIXIN + option.action == 'bind_mobile' && this.getCode() + // #endif + } + + this.getRegisterConfig(); + this.initLang(); + this.getMemberConfig(); + }, + onShow() { + if (!this.storeToken) { + this.$nextTick(() => { + this.$refs.login.open('/pages_tool/member/info'); + }); + } else { + this.getInfo(); + } + }, + onHide() { + this.seconds = 120; + this.formData.mobileCodeText = '获取动态码'; + this.isSend = false; + clearInterval(this.timer); + }, + watch: { + seconds(value) { + if (value == 0) { + this.seconds = 120; + this.formData.mobileCodeText = '获取动态码'; + this.isSend = false; + clearInterval(this.timer); + } + } + }, + computed: { + startDate() { + return this.getDate('start'); + }, + endDate() { + return this.getDate('end'); + } + }, + filters: { + mobile(mobile) { + return mobile.substring(0, 4 - 1) + '****' + mobile.substring(6 + 1); + } + }, + methods: { + ...memberPublic.methods, + // 初始化语言 + initLang() { + //获取语言列表 + this.langList = this.$langConfig.list(); + if (!uni.getStorageSync("lang")) { + this.langIndex = 0; + } else { + for (let i = 0; i < this.langList.length; i++) { + if (this.langList[i].value == uni.getStorageSync("lang")) { + this.langIndex = i; + break; + } + } + } + }, + setNavbarTitle() { + let title = '个人资料'; + switch (this.indent) { + case 'name': + title = this.$lang('modifyNickname'); + break; + case 'realName': + title = this.$lang('realName'); + break; + case 'sex': + title = this.$lang('sex'); + break; + case 'birthday': + title = this.$lang('birthday'); + break; + case 'password': + title = this.$lang('password'); + break; + case 'mobile': + title = this.$lang('mobile'); + break; + } + uni.setNavigationBarTitle({ + title: title + }); + }, + // 初始化用户信息 + getInfo() { + this.memberInfoformData.userHeadImg = this.memberInfo.headimg; + this.memberInfoformData.number = this.memberInfo.username; //账号 + this.memberInfoformData.nickName = this.memberInfo.nickname; //昵称 + this.memberInfoformData.realName = this.memberInfo.realname ? this.memberInfo.realname : '请输入真实姓名'; //真实姓名 + this.memberInfoformData.sex = this.memberInfo.sex == 0 ? '未知' : this.memberInfo.sex == 1 ? '男' : '女'; //性别 + this.memberInfoformData.birthday = this.memberInfo.birthday ? this.$util.timeStampTurnTime(this.memberInfo.birthday, 'YYYY-MM-DD') : '请选择生日'; //生日 + this.memberInfoformData.mobile = this.memberInfo.mobile; //手机号 + + this.formData.username = this.memberInfo.username; //用户名 + this.formData.nickName = this.memberInfo.nickname; //昵称 + this.formData.realName = this.memberInfo.realname; //真实姓名 + this.formData.sex = this.memberInfo.sex; //性别 + this.formData.birthday = this.memberInfo.birthday ? this.$util.timeStampTurnTime(this.memberInfo.birthday, 'YYYY-MM-DD') : ''; //生日 + this.formData.provinceId = this.memberInfo.province_id; + this.formData.cityId = this.memberInfo.city_id; + this.formData.districtId = this.memberInfo.district_id; + this.formData.fullAddress = this.memberInfo.full_address; + this.formData.address = this.memberInfo.address; + if (this.memberInfo.full_address) this.defaultRegions = [this.memberInfo + .province_id, this.memberInfo.city_id, this.memberInfo.district_id + ]; + }, + // 切换编辑项 + modifyInfo(action) { + switch (action) { + case 'cancellation': + this.getCancelStatus(); + break; + case 'language': + let newArray = []; + for (let i = 0; i < this.langList.length; i++) { + newArray.push(this.langList[i].name) + } + uni.showActionSheet({ + itemList: newArray, + success: function (res) { + if (vm.langIndex != res.tapIndex) { + vm.$langConfig.change(vm.langList[res.tapIndex].value) + } + } + }); + break; + case 'mobile': + // #ifdef MP + this.$util.redirectTo('/pages_tool/member/info_edit', { + action: 'bind_mobile' + }); + // #endif + // #ifndef MP + this.$util.redirectTo('/pages_tool/member/info_edit', { + action + }); + // #endif + break; + default: + this.$util.redirectTo('/pages_tool/member/info_edit', { + action + }); + } + }, + // 导航返回 + NavReturn() { + uni.navigateBack({ + delta: 1 + }) + }, + // 获取验证码 + getCaptcha() { + this.$api.sendRequest({ + url: '/api/captcha/captcha', + data: { + captcha_id: this.captcha.id + }, + success: res => { + if (res.code >= 0) { + this.captcha = res.data; + this.captcha.img = this.captcha.img.replace(/\r\n/g, ''); + } + } + }); + }, + headImage() { + this.$util.redirectTo("/pages_tool/member/modify_face"); + }, + // 检测手机是否已绑定 + async testBinding(type) { + var res = await this.checkMobile(); + return res; + }, + //获取注销的配置信息 + getMemberConfig() { + this.$api.sendRequest({ + url: '/membercancel/api/membercancel/config', + success: res => { + if (res.code >= 0) { + this.memberConfig = res.data + } + } + }); + + }, + save(type) { + switch (type) { + case 'username': + this.modifyUserName(); + break; + case 'name': + this.modifyNickName(); + break; + case 'realName': + this.modifyRealName(); + break; + case 'sex': + this.modifySex(); + break; + case 'birthday': + this.modifyBirthday(); + break; + case 'password': + this.modifyPassword(); + break; + case 'mobile': + this.modifyMobile(); + break; + case 'address': + this.modifyAddress(); + break; + } + }, + + // ------------------------修改用户名------------------------------ + modifyUserName() { + if (this.formData.username == this.memberInfo.username) { + this.$util.showToast({ + title: this.$lang('alikeusername') + }); + return; + } + var rule = [{ + name: 'username', + checkType: 'required', + errorMsg: this.$lang('noEmityUsername') + }]; + if (!rule.length) return; + var checkRes = validate.check(this.formData, rule); + if (checkRes) { + this.$api.sendRequest({ + url: '/api/member/modifyusername', + data: { + username: this.formData.username + }, + success: res => { + if (res.code == 0) { + this.memberInfo.username = this.formData.username; + this.$store.commit('setMemberInfo', this.memberInfo); + this.$util.showToast({ + title: this.$lang("updateSuccess") + }); + this.NavReturn(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + } else { + this.$util.showToast({ + title: validate.error + }); + } + }, + // ------------------------修改昵称------------------------------ + + modifyNickName() { + if (this.formData.nickName == this.memberInfo.nickname) { + this.$util.showToast({ + title: this.$lang('alikeNickname') + }); + return; + } + var rule = [{ + name: 'nickName', + checkType: 'required', + errorMsg: this.$lang('noEmityNickname') + }]; + if (!rule.length) return; + var checkRes = validate.check(this.formData, rule); + if (checkRes) { + this.$api.sendRequest({ + url: '/api/member/modifynickname', + data: { + nickname: this.formData.nickName + }, + success: res => { + if (res.code == 0) { + this.memberInfo.nickname = this.formData.nickName; + this.$store.commit('setMemberInfo', this.memberInfo); + this.$util.showToast({ + title: this.$lang("updateSuccess") + }); + this.NavReturn(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + } else { + this.$util.showToast({ + title: validate.error + }); + } + }, + + // ------------------------修改真实姓名------------------------------ + modifyRealName() { + if (this.formData.realName == this.memberInfo.realname && this.memberInfo.realname) { + this.$util.showToast({ + title: '与原真实姓名一致,无需修改' + }); + return; + } + var rule = [{ + name: 'realName', + checkType: 'required', + errorMsg: '真实姓名不能为空' + }]; + if (!rule.length) return; + var checkRes = validate.check(this.formData, rule); + if (checkRes) { + this.$api.sendRequest({ + url: '/api/member/modifyrealname', + data: { + realname: this.formData.realName + }, + success: res => { + if (res.code == 0) { + this.memberInfo.realname = this.formData.realName; + this.$store.commit('setMemberInfo', this.memberInfo); + this.$util.showToast({ + title: this.$lang("updateSuccess") + }); + this.NavReturn(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + } else { + this.$util.showToast({ + title: validate.error + }); + } + }, + + // ------------------------修改性别------------------------------ + radioChange: function (evt) { + for (let i = 0; i < this.items.length; i++) { + if (this.items[i].value === evt.target.value) { + this.formData.sex = i; + break; + } + } + }, + + modifySex() { + this.$api.sendRequest({ + url: '/api/member/modifysex', + data: { + sex: this.formData.sex + }, + success: res => { + if (res.code == 0) { + this.memberInfo.sex = this.formData.sex; + this.$store.commit('setMemberInfo', this.memberInfo); + this.$util.showToast({ + title: this.$lang("updateSuccess") + }); + this.NavReturn(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + }, + + // ------------------------修改生日------------------------------ + + bindDateChange: function (e) { + this.formData.birthday = e.target.value + }, + + getDate(type) { + const date = new Date(); + let year = date.getFullYear(); + let month = date.getMonth() + 1; + let day = date.getDate(); + + if (type === 'start') { + year = year - 60; + } else if (type === 'end') { + year = year + 2; + } + month = month > 9 ? month : '0' + month; + day = day > 9 ? day : '0' + day; + return `${year}-${month}-${day}`; + }, + + modifyBirthday() { + if (this.formData.birthday.length == 0) { + this.$util.showToast({ + title: '请选择生日' + }); + return; + } + this.$api.sendRequest({ + url: '/api/member/modifybirthday', + data: { + birthday: this.$util.timeTurnTimeStamp(this.formData.birthday) + }, + success: res => { + if (res.code == 0) { + this.memberInfo.birthday = this.$util.timeTurnTimeStamp(this.formData.birthday); + this.$store.commit('setMemberInfo', this.memberInfo); + this.$util.showToast({ + title: this.$lang("updateSuccess") + }); + this.NavReturn(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + }, + + // ------------------------修改密码------------------------------ + /** + * 获取注册配置 + */ + getRegisterConfig() { + this.$api.sendRequest({ + url: '/api/register/config', + success: res => { + if (res.code >= 0) { + this.registerConfig = res.data.value; + } + } + }); + }, + modifyPassword() { + if (this.memberInfo.password) { + var rule = [{ + name: 'currentPassword', + checkType: 'required', + errorMsg: this.$lang("pleaseInputOldPassword") + }, + { + name: 'newPassword', + checkType: 'required', + errorMsg: this.$lang("pleaseInputNewPassword") + } + ]; + } else { + var rule = [{ + name: 'mobileVercode', + checkType: 'required', + errorMsg: this.$lang("confirmCodeInput") + }, + { + name: 'mobileDynacode', + checkType: 'required', + errorMsg: this.$lang("animateCodeInput") + }, + { + name: 'newPassword', + checkType: 'required', + errorMsg: this.$lang("pleaseInputNewPassword") + } + ]; + } + + let regConfig = this.registerConfig; + if (regConfig.pwd_len > 0) { + rule.push({ + name: 'newPassword', + checkType: 'lengthMin', + checkRule: regConfig.pwd_len, + errorMsg: '新密码长度不能小于' + regConfig.pwd_len + '位' + }); + } + if (regConfig.pwd_complexity) { + let passwordErrorMsg = '密码需包含', + reg = ''; + if (regConfig.pwd_complexity.indexOf('number') != -1) { + reg += '(?=.*?[0-9])'; + passwordErrorMsg += '数字'; + } + if (regConfig.pwd_complexity.indexOf('letter') != -1) { + reg += '(?=.*?[a-z])'; + passwordErrorMsg += '、小写字母'; + } + if (regConfig.pwd_complexity.indexOf('upper_case') != -1) { + reg += '(?=.*?[A-Z])'; + passwordErrorMsg += '、大写字母'; + } + if (regConfig.pwd_complexity.indexOf('symbol') != -1) { + reg += '(?=.*?[#?!@$%^&*-])'; + passwordErrorMsg += '、特殊字符'; + } + rule.push({ + name: 'newPassword', + checkType: 'reg', + checkRule: reg, + errorMsg: passwordErrorMsg + }); + } + var checkRes = validate.check(this.formData, rule); + if (checkRes) { + if (this.formData.currentPassword == this.formData.newPassword) { + this.$util.showToast({ + title: '新密码不能与原密码相同' + }); + return; + } + if (this.formData.newPassword != this.formData.confirmPassword) { + this.$util.showToast({ + title: '两次密码不一致' + }); + return; + } + this.$api.sendRequest({ + url: '/api/member/modifypassword', + data: { + new_password: this.formData.newPassword, + old_password: this.formData.currentPassword, + code: this.formData.mobileDynacode, + key: uni.getStorageSync("password_mobile_key"), + }, + success: res => { + if (res.code == 0) { + this.memberInfo.password = 1; + this.$store.commit('setMemberInfo', this.memberInfo); + this.$util.showToast({ + title: this.$lang('updateSuccess') + }); + this.NavReturn(); + uni.removeStorageSync('password_mobile_key'); + } else { + this.$util.showToast({ + title: res.message + }); + this.getCaptcha(); + } + } + }); + } else { + this.$util.showToast({ + title: validate.error + }); + } + }, + + // ------------------------修改手机号------------------------------ + // 验证手机号 + vertifyMobile() { + var rule = [{ + name: 'mobile', + checkType: 'required', + errorMsg: '请输入手机号' + }, { + name: 'mobile', + checkType: 'phoneno', + errorMsg: '请输入正确的手机号' + }]; + var checkRes = validate.check(this.formData, rule); + if (!checkRes) { + this.$util.showToast({ + title: validate.error + }); + return false; + } + return true; + }, + // 检测手机号是否存在 + async checkMobile() { + if (!this.vertifyMobile()) return; + let res = await this.$api.sendRequest({ + url: '/api/member/checkmobile', + data: { + mobile: this.formData.mobile + }, + async: false + }); + if (res.code != 0) { + this.$util.showToast({ + title: res.message + }); + return false; + } + return true; + }, + + // 发送短信动态码 + async bindMoblieCode() { + if (this.seconds != 120) return; + var rule = [{ + name: 'mobile', + checkType: 'phoneno', + errorMsg: this.$lang("surePhoneNumber") + }, + { + name: 'mobileVercode', + checkType: 'required', + errorMsg: this.$lang("confirmCodeInput") + }, + ]; + + var checkRes = validate.check(this.formData, rule); + + if (checkRes && !this.isSend) { + this.isSend = true; + this.$api.sendRequest({ + url: '/api/member/bindmobliecode', + data: { + mobile: this.formData.mobile, + captcha_id: this.captcha.id, + captcha_code: this.formData.mobileVercode + }, + success: res => { + let data = res.data; + if (data.key) { + if (this.seconds == 120 && this.timer == null) { + this.timer = setInterval(() => { + this.seconds--; + this.formData.mobileCodeText = '已发送(' + this.seconds + 's)'; + }, 1000); + } + uni.setStorageSync('mobile_key', data.key); + } else { + this.$util.showToast({ + title: res.message + }); + this.isSend = false; + } + }, + fail: res => { + this.isSend = false; + this.getCaptcha(); + } + }); + } else { + this.$util.showToast({ + title: validate.error ? validate.error : '请勿重复点击' + }); + } + }, + async modifyMobile() { + + var mobileRule = [{ + name: 'mobile', + checkType: 'phoneno', + errorMsg: this.$lang("surePhoneNumber") + }, + { + name: 'mobileVercode', + checkType: 'required', + errorMsg: this.$lang("confirmCodeInput") + }, + { + name: 'mobileDynacode', + checkType: 'required', + errorMsg: this.$lang("animateCodeInput") + }, + ]; + var checkRes = validate.check(this.formData, mobileRule); + + if (checkRes) { + if (this.formData.mobile == this.memberInfo.mobile) { + this.$util.showToast({ + title: this.$lang("alikePhone") + }); + return; + } + this.$api.sendRequest({ + url: '/api/member/modifymobile', + data: { + mobile: this.formData.mobile, + captcha_id: this.captcha.id, + captcha_code: this.formData.mobileVercode, + code: this.formData.mobileDynacode, + key: uni.getStorageSync("mobile_key"), + }, + success: res => { + if (res.code == 0) { + this.memberInfo.mobile = this.formData.mobile; + this.$store.commit('setMemberInfo', this.memberInfo); + this.$util.showToast({ + title: this.$lang("updateSuccess") + }); + if (this.back) { + this.$util.redirectTo('/pages_tool/member/pay_password', { + 'back': this.back + }, 'redirectTo') + } else { + this.NavReturn(); + } + } else { + this.$util.showToast({ + title: res.message + }); + this.getCaptcha(); + } + }, + fail: res => { + this.isSend = false; + this.getCaptcha(); + } + }); + } else { + this.$util.showToast({ + title: validate.error + }); + } + }, + /** + * 修改密码发送动态码 + */ + passwordMoblieCode() { + if (this.seconds != 120) return; + + if (this.formData.mobileVercode == '') { + this.$util.showToast({ + title: this.$lang("confirmCodeInput") + }); + return; + } + + if (!this.isSend) { + this.isSend = true; + this.$api.sendRequest({ + url: '/api/member/pwdmobliecode', + data: { + captcha_id: this.captcha.id, + captcha_code: this.formData.mobileVercode + }, + success: res => { + let data = res.data; + if (data.key) { + if (this.seconds == 120 && this.timer == null) { + this.timer = setInterval(() => { + this.seconds--; + this.formData.mobileCodeText = '已发送(' + this.seconds + 's)'; + }, 1000); + } + uni.setStorageSync('password_mobile_key', data.key); + } else { + this.$util.showToast({ + title: res.message + }); + this.isSend = false; + } + }, + fail: res => { + this.isSend = false; + this.getCaptcha(); + } + }); + } else { + this.$util.showToast({ + title: '请勿重复点击' + }); + } + }, + modifyAddress() { + var rule = [{ + name: 'fullAddress', + checkType: 'required', + errorMsg: '请选择所在地区' + }, + { + name: 'address', + checkType: 'required', + errorMsg: '请输入详细地址' + } + ]; + if (!rule.length) return; + var checkRes = validate.check(this.formData, rule); + if (checkRes) { + this.$api.sendRequest({ + url: '/api/member/modifyaddress', + data: { + province_id: this.formData.provinceId, + city_id: this.formData.cityId, + district_id: this.formData.districtId, + address: this.formData.address, + full_address: this.formData.fullAddress + }, + success: res => { + if (res.code == 0) { + this.memberInfo.province_id = this.formData.provinceId; + this.memberInfo.city_id = this.formData.cityId; + this.memberInfo.district_id = this.formData.districtId; + this.memberInfo.address = this.formData.address; + this.memberInfo.full_address = this.formData.fullAddress; + this.$store.commit('setMemberInfo', this.memberInfo); + this.$util.showToast({ + title: this.$lang("updateSuccess") + }); + this.NavReturn(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + } else { + this.$util.showToast({ + title: validate.error + }); + } + }, + initFormData() { + this.formData.currentPassword = ''; + this.formData.newPassword = ''; + this.formData.confirmPassword = ''; + this.formData.mobileVercode = ''; + this.formData.mobileDynacode = ''; + this.formData.mobile = ''; + }, + handleGetRegions(regions) { + this.formData.fullAddress = ''; + this.formData.fullAddress += regions[0] != undefined ? regions[0].label : ''; + this.formData.fullAddress += regions[1] != undefined ? '-' + regions[1].label : ''; + this.formData.fullAddress += regions[2] != undefined ? '-' + regions[2].label : ''; + this.formData.provinceId = regions[0] ? regions[0].value : 0; + this.formData.cityId = regions[1] ? regions[1].value : 0; + this.formData.districtId = regions[2] ? regions[2].value : 0; + }, + /** + * 手动绑定手机号 + */ + manualBinding() { + this.indent = 'mobile'; + }, + mobileAuth(e) { + if (e.detail.errMsg == 'getPhoneNumber:ok') { + let data = e.detail + // #ifdef MP-WEIXIN + Object.assign(data, this.authInfo) + // #endif + this.$api.sendRequest({ + url: '/api/member/mobileauth', + data, + success: res => { + if (res.code == 0) { + this.$util.showToast({ + title: this.$lang("updateSuccess") + }); + this.NavReturn(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }) + } + } + } }; \ No newline at end of file diff --git a/pages_tool/member/public/js/invite_friends.js b/pages_tool/member/public/js/invite_friends.js index 2de14bb..12e5a86 100644 --- a/pages_tool/member/public/js/invite_friends.js +++ b/pages_tool/member/public/js/invite_friends.js @@ -1,115 +1,115 @@ -export default { - methods: { - //获取邀请列表 - getList() { - this.$api.sendRequest({ - url: '/memberrecommend/api/memberrecommend/lists', - data: { - page: this.page, - page_size: this.page_size - }, - success: res => { - this.inviteList = this.inviteList.concat(res.data.list); - this.total_num = res.data.page_count; - } - }); - }, - moreList() { - this.page++; - this.isClick = false; - if (this.page < this.total_num) { - this.getList(); - this.isClick = true; - } else if (this.page == this.total_num) { - this.getList(); - } - }, - getBaseInfo() { - this.$api.sendRequest({ - url: '/memberrecommend/api/memberrecommend/info', - success: res => { - if (res.code == 0) { - this.info = res.data; - if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); - } - } - }); - }, - openSharePopup() { - this.$refs.sharePopup.open(); - }, - // 关闭分享弹出层 - closeSharePopup() { - this.$refs.sharePopup.close(); - }, - // 打开规则说明弹出层 - openRulePopup() { - this.$refs.rulePopup.open(); - }, - // 打开规则说明弹出层 - closeRulePopup() { - this.$refs.rulePopup.close(); - }, - copyUrl() { - let text = this.$config.h5Domain + this.$util.INDEX_PAGE_URL; - if (this.memberInf && this.memberInfo.member_id) text += '?source_member=' + this.memberInfo.member_id; - this.$util.copy(text, () => { - this.closeSharePopup(); - }); - }, - // 打开海报弹出层 - openPosterPopup() { - this.getPoster(); - this.$refs.sharePopup.close(); - this.$refs.posterPopup.open(); - }, - // 关闭海报弹出层 - closePosterPopup() { - this.$refs.posterPopup.close(); - }, - //生成海报 - getPoster() { - //活动海报信息 - let qrcode_param = { - source_member: this.memberInfo.member_id - }; - this.$api.sendRequest({ - url: "/memberrecommend/api/memberrecommend/poster", - data: { - page: this.$util.INDEX_PAGE_URL, - qrcode_param: JSON.stringify(qrcode_param) - }, - success: res => { - if (res.code == 0) { - this.poster = res.data.path + "?time=" + new Date().getTime(); - } else { - this.posterMsg = res.message; - } - } - }); - }, - savePoster() { - let url = this.$util.img(this.poster); - uni.downloadFile({ - url: url, - success: (res) => { - if (res.statusCode === 200) { - uni.saveImageToPhotosAlbum({ - filePath: res.tempFilePath, - success: () => { - this.$util.showToast({ - title: $lang("goods._components.goods-detail-view.detail.l351.t0") - }); - }, - fail: () => { - this.$util.showToast({ - title: $lang("goods._components.goods-detail-view.detail.l356.t0") - }); - } - }); - } - } - }); - } - } +export default { + methods: { + //获取邀请列表 + getList() { + this.$api.sendRequest({ + url: '/memberrecommend/api/memberrecommend/lists', + data: { + page: this.page, + page_size: this.page_size + }, + success: res => { + this.inviteList = this.inviteList.concat(res.data.list); + this.total_num = res.data.page_count; + } + }); + }, + moreList() { + this.page++; + this.isClick = false; + if (this.page < this.total_num) { + this.getList(); + this.isClick = true; + } else if (this.page == this.total_num) { + this.getList(); + } + }, + getBaseInfo() { + this.$api.sendRequest({ + url: '/memberrecommend/api/memberrecommend/info', + success: res => { + if (res.code == 0) { + this.info = res.data; + if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); + } + } + }); + }, + openSharePopup() { + this.$refs.sharePopup.open(); + }, + // 关闭分享弹出层 + closeSharePopup() { + this.$refs.sharePopup.close(); + }, + // 打开规则说明弹出层 + openRulePopup() { + this.$refs.rulePopup.open(); + }, + // 打开规则说明弹出层 + closeRulePopup() { + this.$refs.rulePopup.close(); + }, + copyUrl() { + let text = this.$config.h5Domain + this.$util.INDEX_PAGE_URL; + if (this.memberInf && this.memberInfo.member_id) text += '?source_member=' + this.memberInfo.member_id; + this.$util.copy(text, () => { + this.closeSharePopup(); + }); + }, + // 打开海报弹出层 + openPosterPopup() { + this.getPoster(); + this.$refs.sharePopup.close(); + this.$refs.posterPopup.open(); + }, + // 关闭海报弹出层 + closePosterPopup() { + this.$refs.posterPopup.close(); + }, + //生成海报 + getPoster() { + //活动海报信息 + let qrcode_param = { + source_member: this.memberInfo.member_id + }; + this.$api.sendRequest({ + url: "/memberrecommend/api/memberrecommend/poster", + data: { + page: this.$util.INDEX_PAGE_URL, + qrcode_param: JSON.stringify(qrcode_param) + }, + success: res => { + if (res.code == 0) { + this.poster = res.data.path + "?time=" + new Date().getTime(); + } else { + this.posterMsg = res.message; + } + } + }); + }, + savePoster() { + let url = this.$util.img(this.poster); + uni.downloadFile({ + url: url, + success: (res) => { + if (res.statusCode === 200) { + uni.saveImageToPhotosAlbum({ + filePath: res.tempFilePath, + success: () => { + this.$util.showToast({ + title: "保存成功" + }); + }, + fail: () => { + this.$util.showToast({ + title: "保存失败,请稍后重试" + }); + } + }); + } + } + }); + } + } } \ No newline at end of file diff --git a/pages_tool/member/public/js/member-public.js b/pages_tool/member/public/js/member-public.js index 2ecccbf..5a736b4 100644 --- a/pages_tool/member/public/js/member-public.js +++ b/pages_tool/member/public/js/member-public.js @@ -1,90 +1,90 @@ -export default { - methods: { - // 清除登录态(token / 用户信息 / 购物车 / 本地存储) - clearLoginState() { - this.$store.commit('setToken', ''); - this.$store.commit('setMemberInfo', ''); - this.$store.dispatch('emptyCart'); - uni.removeStorageSync('authInfo'); - uni.removeStorageSync('privacyAgreed'); - }, - - // 退出登录 - logout() { - uni.showModal({ - title: this.$lang('login.list.logout_title'), - content: this.$lang('login.list.logout_content'), - success: (res) => { - if (res.confirm) { - this.clearLoginState(); - this.$util.redirectTo(this.$util.LOGIN_PAGE_URL); - } - } - }); - }, - - // 账号注销入口:先查状态,根据状态分流 - cancellation() { - this.getCancelStatus(); - }, - - // 查询注销状态并跳转对应页面 - // status: undefined/null → 未申请 → 协议页 cancellation.vue - // status: 0 → 审核中 → 状态页 cancelstatus.vue - // status: 1 → 通过 → 成功页 cancelsuccess.vue - // status: -1 → 拒绝 → 拒绝页 cancelrefuse.vue - getCancelStatus() { - this.$api.sendRequest({ - url: '/membercancel/api/membercancel/info', - success: res => { - if (res.code >= 0) { - if (res.data) { - if (res.data.status == 0) { - this.$util.redirectTo('/pages_tool/member/cancelstatus'); - } else if (res.data.status == 1) { - this.$util.redirectTo('/pages_tool/member/cancelsuccess'); - } else { - this.$util.redirectTo('/pages_tool/member/cancelrefuse'); - } - } else { - this.$util.redirectTo('/pages_tool/member/cancellation'); - } - } else if (res.code == -1) { - this.clearLoginState(); - this.$util.redirectTo(this.$util.LOGIN_PAGE_URL); - } - } - }); - }, - - // 提交注销申请并清理登录态(供 assets.vue 等页面调用) - submitCancelApply(options = {}) { - uni.showModal({ - title: options.title || $lang('member.cancelstatus.l84'), - content: options.content || $lang('member.public.js.member-public.l64.t0'), - confirmColor: '#000000', - success: res => { - if (res.confirm) { - this.$api.sendRequest({ - url: '/membercancel/api/membercancel/apply', - success: rres => { - if (rres.code >= 0) { - if (options.clearStateAndRedirect) { - this.clearLoginState(); - this.$util.redirectTo(this.$util.LOGIN_PAGE_URL); - } else { - this.$util.redirectTo('/pages_tool/member/cancelstatus'); - } - } else { - this.$util.showToast({ - title: rres.message - }); - } - } - }); - } - } - }); - } - } -}; +export default { + methods: { + // 清除登录态(token / 用户信息 / 购物车 / 本地存储) + clearLoginState() { + this.$store.commit('setToken', ''); + this.$store.commit('setMemberInfo', ''); + this.$store.dispatch('emptyCart'); + uni.removeStorageSync('authInfo'); + uni.removeStorageSync('privacyAgreed'); + }, + + // 退出登录 + logout() { + uni.showModal({ + title: this.$lang('logoutTitle'), + content: this.$lang('logoutContent'), + success: (res) => { + if (res.confirm) { + this.clearLoginState(); + this.$util.redirectTo(this.$util.LOGIN_PAGE_URL); + } + } + }); + }, + + // 账号注销入口:先查状态,根据状态分流 + cancellation() { + this.getCancelStatus(); + }, + + // 查询注销状态并跳转对应页面 + // status: undefined/null → 未申请 → 协议页 cancellation.vue + // status: 0 → 审核中 → 状态页 cancelstatus.vue + // status: 1 → 通过 → 成功页 cancelsuccess.vue + // status: -1 → 拒绝 → 拒绝页 cancelrefuse.vue + getCancelStatus() { + this.$api.sendRequest({ + url: '/membercancel/api/membercancel/info', + success: res => { + if (res.code >= 0) { + if (res.data) { + if (res.data.status == 0) { + this.$util.redirectTo('/pages_tool/member/cancelstatus'); + } else if (res.data.status == 1) { + this.$util.redirectTo('/pages_tool/member/cancelsuccess'); + } else { + this.$util.redirectTo('/pages_tool/member/cancelrefuse'); + } + } else { + this.$util.redirectTo('/pages_tool/member/cancellation'); + } + } else if (res.code == -1) { + this.clearLoginState(); + this.$util.redirectTo(this.$util.LOGIN_PAGE_URL); + } + } + }); + }, + + // 提交注销申请并清理登录态(供 assets.vue 等页面调用) + submitCancelApply(options = {}) { + uni.showModal({ + title: options.title || '风险提示', + content: options.content || '确定要注销当前账号吗?', + confirmColor: '#000000', + success: res => { + if (res.confirm) { + this.$api.sendRequest({ + url: '/membercancel/api/membercancel/apply', + success: rres => { + if (rres.code >= 0) { + if (options.clearStateAndRedirect) { + this.clearLoginState(); + this.$util.redirectTo(this.$util.LOGIN_PAGE_URL); + } else { + this.$util.redirectTo('/pages_tool/member/cancelstatus'); + } + } else { + this.$util.showToast({ + title: rres.message + }); + } + } + }); + } + } + }); + } + } +}; diff --git a/pages_tool/member/public/js/signin.js b/pages_tool/member/public/js/signin.js index 62cff91..94d2f11 100644 --- a/pages_tool/member/public/js/signin.js +++ b/pages_tool/member/public/js/signin.js @@ -1,276 +1,276 @@ -export default { - data() { - return { - showSignDays: [], // 一共展示的天数 - rule: [{}], - hasSign: 0, //今天是否签到 - signDaysSeries: 0, //连续签到次数 - MonthData: [], //本月日期信息 - signList: [], - back: '', //返回页 - redirect: '', //返回方式 - successTip: {}, - startDate: null, - endDate: null, - isActive: "", //判断点击 - signState: 1, - headimg: '', - point: 0, - growth: 0, - signPoint: 0, - signGrowth: 0, - rewardRuleDay: [], - cycle: 0, - reward: {} - }; - }, - onLoad(option) { - setTimeout( () => { - if (!this.addonIsExist.membersignin) { - this.$util.showToast({ - title: $lang('member.public.js.signin.l31'), - mask: true, - duration: 2000 - }); - setTimeout(() => { - this.$util.redirectTo(this.$util.INDEX_PAGE_URL); - }, 2000); - } - },1000); - - if (option.back) this.back = option.back; - if (option.redirect) this.redirect = option.redirect; - - this.getSignState(); - }, - onShow() { - if (!this.storeToken) { - this.$nextTick(() => { - this.$refs.login.open('/pages_tool/member/signin'); - }); - return; - } - - this.headimg = this.memberInfo.headimg; - this.signDaysSeries = this.memberInfo.sign_days_series; - - this.getSignPointData(); - this.getSignGrowthData(); - this.setPublicShare(); - - this.getIsSign(); - }, - methods: { - // 获取签到累积积分 - getSignPointData() { - this.$api.sendRequest({ - url: '/api/memberaccount/sum', - data: { - account_type: 'point', - from_type: 'signin' - }, - success: res => { - if (res.code == 0) { - this.signPoint = res.data; - } - } - }); - }, - // 获取签到累积成长值 - getSignGrowthData() { - this.$api.sendRequest({ - url: '/api/memberaccount/sum', - data: { - account_type: 'growth', - from_type: 'signin' - }, - success: res => { - if (res.code == 0) { - this.signGrowth = res.data; - } - } - }); - }, - // 签到是否开启 - getSignState() { - this.$api.sendRequest({ - url: '/api/membersignin/getSignStatus', - success: res => { - if (res.code == 0) { - this.signState = res.data.is_use; - } - } - }); - }, - navigateBack() { - if (this.back != '') { - this.$util.redirectTo(this.back, {}, this.redirect); - } else { - this.$util.redirectTo(this.$util.MEMBER_PAGE_URL); - } - }, - //获取rule - getRule() { - this.rewardRuleDay = []; - this.$api.sendRequest({ - url: '/api/membersignin/award', - success: res => { - if (res.code == 0) { - - this.cycle = res.data.cycle || 0; - this.rule = res.data.reward || []; - let default_point = 0; - if (this.rule.length > 0) { - this.rule.forEach((item, index) => { - if (item.day == 1) { - default_point = item.point; - } else { - this.rewardRuleDay.push(parseInt(item.day)); - this.reward[item.day] = item.point; - } - }); - } - //展示7天 - var showSignDays = []; - var start_day = 1; - var end_day = 7; - var total_day = res.data.cycle; - if (this.signDaysSeries > 5) { - start_day = this.signDaysSeries - 5; - } - if (total_day >= (this.signDaysSeries + 1)) { - end_day = this.signDaysSeries + 1; - } - if (this.signDaysSeries <= 5) { - end_day = 8 - start_day; - } - - if ((end_day - start_day) < 7 && total_day >= start_day + 6) { - end_day = start_day + 6; - } - if (total_day == this.signDaysSeries) { - start_day = this.signDaysSeries - 6; - end_day = this.signDaysSeries; - } - - for (let i = 1; i <= res.data.cycle; i++) { - if (i >= start_day && i <= end_day) { - showSignDays.push({ - day: i, - is_last: 0, - point: default_point - }) - } - } - - if (showSignDays && showSignDays.length) { - showSignDays[showSignDays.length - 1]['is_last'] = 1; - } - - for (let i in showSignDays) { - let item = showSignDays[i]; - if (this.$util.inArray(item.day, this.rewardRuleDay) != -1) { - showSignDays[i]['point'] = parseInt(this.reward[item.day]) + parseInt(default_point); - } - } - - this.showSignDays = showSignDays; - this.$refs.loadingCover.hide(); - } - } - }); - }, - //判断当前是否签到 - getIsSign() { - this.$api.sendRequest({ - url: '/api/membersignin/issign', - success: res => { - if (res.code == 0) { - this.hasSign = res.data; - this.getRule(); - this.getSignPointData(); - this.getSignGrowthData(); - } - } - }); - }, - //签到 - sign() { - if (this.signState == 0) { - this.$util.showToast({ - title: $lang('member.public.js.signin.l201') - }) - } - - if (!this.hasSign && this.signState == 1) { - this.$api.sendRequest({ - url: '/api/membersignin/signin', - success: res => { - if (res.code == 0) { - this.successTip = res.data; - this.$refs.uniPopup.open() - this.getRule(); - this.getSignPointData(); - this.getSignGrowthData(); - this.hasSign = 1; - this.signDaysSeries = this.signDaysSeries + 1; - } else { - this.$util.showToast({ - title: res.message - }) - } - } - }); - } - }, - close() { - this.$refs.uniPopup.close() - }, - /** - * 设置公众号分享 - */ - setPublicShare() { - let shareUrl = this.$config.h5Domain + '/pages_tool/member/signin'; - - this.$util.setPublicShare({ - title: $lang('member.public.js.signin.l236'), - desc: $lang('member.public.js.signin.l237'), - link: shareUrl, - imgUrl: '' - }, - res => { - // console.log('公众号分享成功'); - // this.share(); - } - ); - }, - }, - computed: { - pointTomorrow: function() { - var signDaysSeries = this.signDaysSeries + 1; - var point = this.rule[0].point ? parseInt(this.rule[0].point) : 0; - for (let i = 1; i < this.rule.length; i++) { - let reward = this.rule[i]; - if (reward.day == signDaysSeries && reward.point) point += parseInt(reward.point); - } - return point; - }, - showDay: function() { - return parseInt(this.signDaysSeries / 7) * 7 + 1; - } - }, - /** - * 自定义分享内容 - */ - onShareAppMessage() { - var path = '/pages_tool/member/signin'; - return { - title: $lang('member.public.js.signin.l268'), - imageUrl: '', - path: path, - success: res => {}, - fail: res => {}, - complete: res => {} - }; - } +export default { + data() { + return { + showSignDays: [], // 一共展示的天数 + rule: [{}], + hasSign: 0, //今天是否签到 + signDaysSeries: 0, //连续签到次数 + MonthData: [], //本月日期信息 + signList: [], + back: '', //返回页 + redirect: '', //返回方式 + successTip: {}, + startDate: null, + endDate: null, + isActive: "", //判断点击 + signState: 1, + headimg: '', + point: 0, + growth: 0, + signPoint: 0, + signGrowth: 0, + rewardRuleDay: [], + cycle: 0, + reward: {} + }; + }, + onLoad(option) { + setTimeout( () => { + if (!this.addonIsExist.membersignin) { + this.$util.showToast({ + title: '商家未开启会员签到', + mask: true, + duration: 2000 + }); + setTimeout(() => { + this.$util.redirectTo(this.$util.INDEX_PAGE_URL); + }, 2000); + } + },1000); + + if (option.back) this.back = option.back; + if (option.redirect) this.redirect = option.redirect; + + this.getSignState(); + }, + onShow() { + if (!this.storeToken) { + this.$nextTick(() => { + this.$refs.login.open('/pages_tool/member/signin'); + }); + return; + } + + this.headimg = this.memberInfo.headimg; + this.signDaysSeries = this.memberInfo.sign_days_series; + + this.getSignPointData(); + this.getSignGrowthData(); + this.setPublicShare(); + + this.getIsSign(); + }, + methods: { + // 获取签到累积积分 + getSignPointData() { + this.$api.sendRequest({ + url: '/api/memberaccount/sum', + data: { + account_type: 'point', + from_type: 'signin' + }, + success: res => { + if (res.code == 0) { + this.signPoint = res.data; + } + } + }); + }, + // 获取签到累积成长值 + getSignGrowthData() { + this.$api.sendRequest({ + url: '/api/memberaccount/sum', + data: { + account_type: 'growth', + from_type: 'signin' + }, + success: res => { + if (res.code == 0) { + this.signGrowth = res.data; + } + } + }); + }, + // 签到是否开启 + getSignState() { + this.$api.sendRequest({ + url: '/api/membersignin/getSignStatus', + success: res => { + if (res.code == 0) { + this.signState = res.data.is_use; + } + } + }); + }, + navigateBack() { + if (this.back != '') { + this.$util.redirectTo(this.back, {}, this.redirect); + } else { + this.$util.redirectTo(this.$util.MEMBER_PAGE_URL); + } + }, + //获取rule + getRule() { + this.rewardRuleDay = []; + this.$api.sendRequest({ + url: '/api/membersignin/award', + success: res => { + if (res.code == 0) { + + this.cycle = res.data.cycle || 0; + this.rule = res.data.reward || []; + let default_point = 0; + if (this.rule.length > 0) { + this.rule.forEach((item, index) => { + if (item.day == 1) { + default_point = item.point; + } else { + this.rewardRuleDay.push(parseInt(item.day)); + this.reward[item.day] = item.point; + } + }); + } + //展示7天 + var showSignDays = []; + var start_day = 1; + var end_day = 7; + var total_day = res.data.cycle; + if (this.signDaysSeries > 5) { + start_day = this.signDaysSeries - 5; + } + if (total_day >= (this.signDaysSeries + 1)) { + end_day = this.signDaysSeries + 1; + } + if (this.signDaysSeries <= 5) { + end_day = 8 - start_day; + } + + if ((end_day - start_day) < 7 && total_day >= start_day + 6) { + end_day = start_day + 6; + } + if (total_day == this.signDaysSeries) { + start_day = this.signDaysSeries - 6; + end_day = this.signDaysSeries; + } + + for (let i = 1; i <= res.data.cycle; i++) { + if (i >= start_day && i <= end_day) { + showSignDays.push({ + day: i, + is_last: 0, + point: default_point + }) + } + } + + if (showSignDays && showSignDays.length) { + showSignDays[showSignDays.length - 1]['is_last'] = 1; + } + + for (let i in showSignDays) { + let item = showSignDays[i]; + if (this.$util.inArray(item.day, this.rewardRuleDay) != -1) { + showSignDays[i]['point'] = parseInt(this.reward[item.day]) + parseInt(default_point); + } + } + + this.showSignDays = showSignDays; + this.$refs.loadingCover.hide(); + } + } + }); + }, + //判断当前是否签到 + getIsSign() { + this.$api.sendRequest({ + url: '/api/membersignin/issign', + success: res => { + if (res.code == 0) { + this.hasSign = res.data; + this.getRule(); + this.getSignPointData(); + this.getSignGrowthData(); + } + } + }); + }, + //签到 + sign() { + if (this.signState == 0) { + this.$util.showToast({ + title: '签到未开启' + }) + } + + if (!this.hasSign && this.signState == 1) { + this.$api.sendRequest({ + url: '/api/membersignin/signin', + success: res => { + if (res.code == 0) { + this.successTip = res.data; + this.$refs.uniPopup.open() + this.getRule(); + this.getSignPointData(); + this.getSignGrowthData(); + this.hasSign = 1; + this.signDaysSeries = this.signDaysSeries + 1; + } else { + this.$util.showToast({ + title: res.message + }) + } + } + }); + } + }, + close() { + this.$refs.uniPopup.close() + }, + /** + * 设置公众号分享 + */ + setPublicShare() { + let shareUrl = this.$config.h5Domain + '/pages_tool/member/signin'; + + this.$util.setPublicShare({ + title: '签到有礼', + desc: '天天签到,积分好礼送不停', + link: shareUrl, + imgUrl: '' + }, + res => { + // console.log('公众号分享成功'); + // this.share(); + } + ); + }, + }, + computed: { + pointTomorrow: function() { + var signDaysSeries = this.signDaysSeries + 1; + var point = this.rule[0].point ? parseInt(this.rule[0].point) : 0; + for (let i = 1; i < this.rule.length; i++) { + let reward = this.rule[i]; + if (reward.day == signDaysSeries && reward.point) point += parseInt(reward.point); + } + return point; + }, + showDay: function() { + return parseInt(this.signDaysSeries / 7) * 7 + 1; + } + }, + /** + * 自定义分享内容 + */ + onShareAppMessage() { + var path = '/pages_tool/member/signin'; + return { + title: '签到有礼,天天签到,积分好礼送不停', + imageUrl: '', + path: path, + success: res => {}, + fail: res => {}, + complete: res => {} + }; + } }; \ No newline at end of file diff --git a/pages_tool/member/withdrawal.vue b/pages_tool/member/withdrawal.vue index dc08d48..380d22e 100644 --- a/pages_tool/member/withdrawal.vue +++ b/pages_tool/member/withdrawal.vue @@ -1,171 +1,171 @@ - - - - - + + + + + diff --git a/pages_tool/member/withdrawal_detail.vue b/pages_tool/member/withdrawal_detail.vue index 9aafc4d..ab035de 100644 --- a/pages_tool/member/withdrawal_detail.vue +++ b/pages_tool/member/withdrawal_detail.vue @@ -1,131 +1,131 @@ - - - - - + + + + + diff --git a/pages_tool/notice/detail.vue b/pages_tool/notice/detail.vue index bcccdb2..a2b25a4 100644 --- a/pages_tool/notice/detail.vue +++ b/pages_tool/notice/detail.vue @@ -1,139 +1,139 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/notice/list.vue b/pages_tool/notice/list.vue index cffb48e..91b484b 100644 --- a/pages_tool/notice/list.vue +++ b/pages_tool/notice/list.vue @@ -1,182 +1,182 @@ - - - - - \ No newline at end of file diff --git a/pages_tool/order/activist.vue b/pages_tool/order/activist.vue index 83e3bc1..3eb7fba 100644 --- a/pages_tool/order/activist.vue +++ b/pages_tool/order/activist.vue @@ -1,151 +1,151 @@ - - - - - + + + + + diff --git a/pages_tool/order/evaluate.vue b/pages_tool/order/evaluate.vue index e89558f..6f0df14 100644 --- a/pages_tool/order/evaluate.vue +++ b/pages_tool/order/evaluate.vue @@ -13,7 +13,7 @@ - {{ $lang("tool.order.evaluate.l16.t0") }} + 描述相符 @@ -26,11 +26,11 @@ : '' "> {{ $lang("tool.goods.evaluate.l82.t0") }} + v-if="goodsEvalList[index].explain_type == '1'">好评 {{ $lang("tool.goods.evaluate.l82.t1") }} + v-if="goodsEvalList[index].explain_type == '2'">中评 {{ $lang("tool.goods.evaluate.l82.t2") }} + v-if="goodsEvalList[index].explain_type == '3'">差评 @@ -39,12 +39,12 @@ -