diff --git a/.hermes/note-backend-jwt-changes.md b/.hermes/note-backend-jwt-changes.md new file mode 100644 index 0000000..2e73a1d --- /dev/null +++ b/.hermes/note-backend-jwt-changes.md @@ -0,0 +1,61 @@ +# 后端 JWT Token 签发 — 需要添加的修改 + +以 CRMEB 后端 PHP 为例,找到签发 token 的方法(通常在类似以下位置): + +## 1. 查找签发位置 + +CRMEB 后端搜索 `JWT::encode` 或 `makeToken` / `createToken`: +- `crmeb/app/services/system/SystemAuthService.php` +- `crmeb/app/services/other/CacheTokenService.php` +- 或 `crmeb/app/services/wechat/...` + +## 2. 修改 Payload + +原始代码可能类似: + +```php +$payload = [ + 'iss' => 'crmeb', + 'iat' => time(), + 'exp' => time() + 86400 * 7, + 'id' => $user->id, +]; +$token = JWT::encode($payload, $key, 'HS256'); +``` + +改为(添加 uid、phone、openid): + +```php +$payload = [ + 'iss' => 'crmeb', + 'iat' => time(), + 'exp' => time() + 86400 * 7, + 'uid' => $user->id, // ← 添加:用户 ID + 'phone' => $user->phone ?? '', // ← 添加:手机号 + 'openid' => $user->openid ?? '', // ← 添加:微信 openid +]; +$token = JWT::encode($payload, $key, 'HS256'); +``` + +## 3. 验证 + +修改后登录任意用户,token 形如: + +``` +eyJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEyMywicGhvbmUiOiIxMzgwMDAwMDAwMCIsIm9wZW5pZCI6Im8xMjNfIn0.xxxx +``` + +在浏览器 DevTools 或 https://jwt.io 解码 payload 应看到: + +```json +{ + "uid": 123, + "phone": "13800000000", + "openid": "o123_xxx", + "exp": 1748000000, + "iss": "crmeb", + "iat": 1747395200 +} +``` + +前端 `parseJwt()` 就能正确读取这些字段。 diff --git a/.trae/documents/mp_to_h5_token_design.md b/.trae/documents/mp_to_h5_token_design.md new file mode 100644 index 0000000..2c8fcc8 --- /dev/null +++ b/.trae/documents/mp_to_h5_token_design.md @@ -0,0 +1,77 @@ +## 方案:小程序跳转到 H5 页面携带 token + +### Summary +- 目标:在微信小程序内通过 web-view 打开指定 H5 地址时,让 H5 自动获得与小程序一致的登录态(token),并在 H5 内完成 Vuex/缓存写入与用户信息同步。 +- 约束(来自现状与确认):打开方式为 web-view;当前不方便改后端接口;倾向直接携带 Bearer token。 +- 推荐策略:优先把 token 放到 URL 的 fragment(`#` 之后)以避免出现在 HTTP 请求与 Referer/服务端日志里;H5 启动时从 fragment 解析 token,写入 `LOGIN_STATUS` 缓存并拉取用户信息,随后清理 URL 中的 token。 + +### Current State Analysis +- 小程序打开 H5 的通用入口:`utils/util.js: JumpPath`,当 url 包含 `http` 时在 MP/APP-PLUS 走 web-view 页面: + - [util.js](file:///c:/Users/Jone/Documents/HBuilderProjects/crmeb/utils/util.js#L162-L201) + - web-view 页面接收 `option.url` 并 `decodeURIComponent` 后赋给 ``: + - [pages/annex/web_view/index.vue](file:///c:/Users/Jone/Documents/HBuilderProjects/crmeb/pages/annex/web_view/index.vue#L1-L28) +- H5 端已有“从 URL query 自动登录”的机制,但目前只处理 `remote_token`: + - H5 `App.vue`:`if (!isLogin && option.query.hasOwnProperty('remote_token')) this.remoteRegister(...)` + - [App.vue](file:///c:/Users/Jone/Documents/HBuilderProjects/crmeb/App.vue#L88-L92) + - `remoteRegister` 调用 `GET /api/remote_register`(noAuth)换取 token 或跳转 URL: + - [api/public.js](file:///c:/Users/Jone/Documents/HBuilderProjects/crmeb/api/public.js#L231-L239) +- token 使用方式:请求层统一在 `utils/request.js` 注入 header `Authori-zation: Bearer `: + - [request.js](file:///c:/Users/Jone/Documents/HBuilderProjects/crmeb/utils/request.js#L53-L63) +- 登录态落地:`store/modules/app.js: LOGIN` 将 token 写入 `Cache.set(LOGIN_STATUS, token, time)`;并可配合 `getUserInfo()` 写入 uid/userInfo: + - [app.js](file:///c:/Users/Jone/Documents/HBuilderProjects/crmeb/store/modules/app.js#L89-L117) + +### Proposed Changes + +#### 1) 小程序侧:构造带 token 的 H5 URL(尽量放在 fragment) +- 修改文件:`utils/util.js` +- 修改点:在 `JumpPath` 的 `url.indexOf("http") != -1` 分支(MP/APP-PLUS)中,在跳转到 `/pages/annex/web_view/index` 之前对目标 url 做“携带 token”的包装。 +- 行为设计: + - 若用户未登录(`store.getters.isLogin` 为 false 或 `store.state.app.token` 为空),直接走现有登录流程(可复用 `libs/login.js: toLogin`),不打开 H5。 + - 若已登录: + - 优先把 token 附加在 hash 内:`https://h5.xxx.com/#/some/path?token=` + - 若目标 url 不含 `#`,则退化为 query:`https://h5.xxx.com/some/path?token=`(存在服务端日志/Referer 风险,属于“不得不”的兼容路径)。 + - 在把 url 作为参数传给 web_view 页面时,对整段 url 做 `encodeURIComponent`,避免 token 中的特殊字符以及 `&` 被小程序路由二次解析。 +- 预计新增/调整函数(放在 util.js 内部): + - `appendTokenToUrl(rawUrl, token): string`(只做字符串处理,不引入新依赖) + - `encodeForWebView(url): string`(统一 `encodeURIComponent`) +- 影响面: + - 任何通过 `this.$util.JumpPath('https://...')` 打开的 H5 链接,都将自动带上 token(仅在 MP/APP-PLUS 生效)。 + +#### 2) web-view 容器页:强制 decode 前提下保证传参完整 +- 修改文件:`pages/annex/web_view/index.vue` +- 修改点:保持现有 `decodeURIComponent(option.url)`,但要求所有调用方都传入 encode 后的 url。 +- 如果项目内存在“未 encode 直接拼接 url”的调用点(当前 `utils/util.js` 即如此),统一改为 encode 后再传。 + +#### 3) H5 侧:解析 token → 写入登录态 → 拉取用户信息 → 清理 URL +- 修改文件:`App.vue` +- 修改点:H5 `onLaunch` 内(`// #ifdef H5` 分支)补充 token 自动登录逻辑,优先级建议: + 1. 若当前已登录(`this.$store.getters.isLogin` 为 true),不处理外部 token(避免覆盖用户主动登录态)。 + 2. 仍保留现有 `remote_token` 分支逻辑(兼容已有能力)。 + 3. 新增 `token` 分支逻辑: + - 从 `option.query.token` 读取(query 方案) + - 若取不到,再从 `location.hash` 里解析 `token`(fragment 方案) + - 拿到 token 后: + - `this.$store.commit("LOGIN", { token, time: 0 })`(time=0 表示缓存不主动过期,后续由服务端 410xxx 兜底踢下线) + - 调用 `getUserInfo()`,成功后 `SETUID/UPDATE_USERINFO` + - 最后用 `history.replaceState` 把 URL 中的 token 移除(避免用户复制链接时携带 token) +- 需要补一个轻量解析方法(不引入库): + - `parseTokenFromHash(hash): string | ''`:兼容 `#/path?token=...` 和 `#/?token=...` 两种。 + +### Assumptions & Decisions +- H5 地址可能是 uni-app 默认 hash 路由(`/#/`);因此默认把 token 放在 fragment 内最安全。 +- 不改后端时,“直接 token”不可避免有泄露风险;通过 fragment + 清理 URL 将风险降到相对可接受: + - fragment 不会出现在 HTTP 请求行与一般服务端 access log + - Referer 通常不包含 fragment +- token 仍可能在以下场景泄露:用户截屏、设备调试、前端错误上报采集 `location.href` 等;因此上线前需确认前端埋点/监控不会上报完整 URL。 + +### Verification +- 本地/测试环境: + - 小程序端登录后,通过任意入口打开一个 H5 链接(走 `JumpPath`): + - web-view 打开的 H5 页面无需再次登录 + - H5 内 `store.getters.isLogin` 为 true,且请求头带 `Authori-zation: Bearer ...` + - `getUserInfo()` 可正常返回并写入 uid/userInfo + - 打开后检查 H5 当前地址:token 参数已被移除(history.replaceState 生效) +- 回归: + - 未登录时打开 H5 链接:应先跳登录,不应打开带 token 的 H5 + - H5 原有 `remote_token` 登录不受影响 + diff --git a/App.vue b/App.vue index 126fdcf..64c2429 100644 --- a/App.vue +++ b/App.vue @@ -1,333 +1,409 @@ - - - + + + diff --git a/api/activity.js b/api/activity.js index a2b597c..af4f9d5 100644 --- a/api/activity.js +++ b/api/activity.js @@ -417,5 +417,5 @@ export function getActivityModalListApi() { * 活动弹窗观看上报 */ export function getActivityModalRecordApi(data) { - return request.post("marketing/holiday_gift/record",data); + return request.post("marketing/holiday_gift/record",data, {noAuth: true}); } \ No newline at end of file diff --git a/api/public.js b/api/public.js index ee14c5d..3a87890 100644 --- a/api/public.js +++ b/api/public.js @@ -1,28 +1,28 @@ -// +---------------------------------------------------------------------- -// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] -// +---------------------------------------------------------------------- -// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. -// +---------------------------------------------------------------------- -// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 -// +---------------------------------------------------------------------- -// | Author: CRMEB Team -// +---------------------------------------------------------------------- - -import request from "@/utils/request.js"; -import wechat from "@/libs/wechat.js"; - -/** - * 获取微信sdk配置 - * @returns {*} - */ -export function getWechatConfig() { - return request.get( - "wechat/config", { - url: wechat.signLink() - }, { - noAuth: true - } - ); +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- + +import request from "@/utils/request.js"; +import wechat from "@/libs/wechat.js"; + +/** + * 获取微信sdk配置 + * @returns {*} + */ +export function getWechatConfig() { + return request.get( + "wechat/config", { + url: wechat.signLink() + }, { + noAuth: true + } + ); } /** @@ -56,16 +56,16 @@ export function wechatBindingPhone(data) { }); } - -/** - * code生成用户 - * @returns {*} - */ - -export function authType(data) { - return request.get("v2/routine/auth_type", data, { - noAuth: true - }); + +/** + * code生成用户 + * @returns {*} + */ + +export function authType(data) { + return request.get("v2/routine/auth_type", data, { + noAuth: true + }); } /** @@ -77,63 +77,63 @@ export function wechatAuthLogin(data) { noAuth: true }); } - -/** - * 获取登录授权login - * - */ -export function getLogo() { - return request.get('wechat/get_logo', {}, { - noAuth: true - }); -} - -/** - * 小程序用户登录 - * @param data object 小程序用户登陆信息 - */ -export function login(data) { - return request.post("wechat/mp_auth", data, { - noAuth: true - }); -} - -/** - * 静默授权 - * @param {Object} data - */ -export function silenceAuth(data) { - //#ifdef MP - return request.get("v2/wechat/silence_auth", data, { - noAuth: true - }); - //#endif - //#ifdef H5 - return request.get("v2/wechat/wx_silence_auth", data, { - noAuth: true - }); - //#endif -} - -/** - * 分享 - * @returns {*} - */ -export function getShare() { - return request.get("share", {}, { - noAuth: true - }); -} - -/** - * 获取关注海报 - * @returns {*} - */ -export function follow() { - return request.get("wechat/follow", {}, { - noAuth: true - }); -} + +/** + * 获取登录授权login + * + */ +export function getLogo() { + return request.get('wechat/get_logo', {}, { + noAuth: true + }); +} + +/** + * 小程序用户登录 + * @param data object 小程序用户登陆信息 + */ +export function login(data) { + return request.post("wechat/mp_auth", data, { + noAuth: true + }); +} + +/** + * 静默授权 + * @param {Object} data + */ +export function silenceAuth(data) { + //#ifdef MP + return request.get("v2/wechat/silence_auth", data, { + noAuth: true + }); + //#endif + //#ifdef H5 + return request.get("v2/wechat/wx_silence_auth", data, { + noAuth: true + }); + //#endif +} + +/** + * 分享 + * @returns {*} + */ +export function getShare() { + return request.get("share", {}, { + noAuth: true + }); +} + +/** + * 获取关注海报 + * @returns {*} + */ +export function follow() { + return request.get("wechat/follow", {}, { + noAuth: true + }); +} /** * 授权登录 * @returns {*} @@ -143,89 +143,89 @@ export function authLogin(data) { noAuth: true }); } - -/** - * 获取图片base64 - * @retins {*} - * */ -export function imageBase64(image, code) { - return request.post( - "image_base64", { - image: image, - code: code - }, { - noAuth: true - } - ); -} - -/** - * 自动复制口令功能 - * @returns {*} - */ -export function copyWords() { - return request.get("copy_words", {}, { - noAuth: true - }); -} - -/** - * 获取商城是否强制绑定手机号 - */ -export function getShopConfig() { - return request.get('v2/bind_status', {}, { - noAuth: true - }); -} - -/** - * 小程序绑定手机号 - * @param {Object} data - */ -export function getUserPhone(data) { - return request.post('v2/auth_bindind_phone', data, { - noAuth: true - }); -} - -/** - * 小程序用户登录 - * @param data object 小程序用户登陆信息 - */ -export function routineLogin(data) { - return request.get("v2/wechat/routine_auth", data, { - noAuth: true - }); -} - -/** - * 获取微信sdk配置 - * @returns {*} - */ -export function wechatAuthV2(code, spid) { - return request.get( - "v2/wechat/auth", { - code: code, - spread_spid: spid - }, { - noAuth: true - } - ); -} - -/** - * 获取组件底部菜单 - * @param data object 获取组件底部菜单 - */ -export function getNavigation(data) { - return request.get("navigation", data, { - noAuth: true - }); -} -export function getSubscribe() { - return request.get("subscribe", {}, { - noAuth: true - }); + +/** + * 获取图片base64 + * @retins {*} + * */ +export function imageBase64(image, code) { + return request.post( + "image_base64", { + image: image, + code: code + }, { + noAuth: true + } + ); +} + +/** + * 自动复制口令功能 + * @returns {*} + */ +export function copyWords() { + return request.get("copy_words", {}, { + noAuth: true + }); +} + +/** + * 获取商城是否强制绑定手机号 + */ +export function getShopConfig() { + return request.get('v2/bind_status', {}, { + noAuth: true + }); +} + +/** + * 小程序绑定手机号 + * @param {Object} data + */ +export function getUserPhone(data) { + return request.post('v2/auth_bindind_phone', data, { + noAuth: true + }); +} + +/** + * 小程序用户登录 + * @param data object 小程序用户登陆信息 + */ +export function routineLogin(data) { + return request.get("v2/wechat/routine_auth", data, { + noAuth: true + }); +} + +/** + * 获取微信sdk配置 + * @returns {*} + */ +export function wechatAuthV2(code, spid) { + return request.get( + "v2/wechat/auth", { + code: code, + spread_spid: spid + }, { + noAuth: true + } + ); +} + +/** + * 获取组件底部菜单 + * @param data object 获取组件底部菜单 + */ +export function getNavigation(data) { + return request.get("navigation", data, { + noAuth: true + }); +} +export function getSubscribe() { + return request.get("subscribe", {}, { + noAuth: true + }); } /** @@ -242,10 +242,10 @@ export function remoteRegister(data) { * 公共配置接口 * */ -export function systemConfigApi() { - return request.get("system/config", {}, { - noAuth: true - }); +export function systemConfigApi() { + return request.get("system/config", {}, { + noAuth: true + }); } /** diff --git a/components/BaseTextMore.vue b/components/BaseTextMore.vue index 3193a03..dad1db1 100644 --- a/components/BaseTextMore.vue +++ b/components/BaseTextMore.vue @@ -1,414 +1,414 @@ - - - - - \ No newline at end of file diff --git a/components/WaterfallsFlow/WaterfallsFlow.vue b/components/WaterfallsFlow/WaterfallsFlow.vue index d014c30..e3a8235 100644 --- a/components/WaterfallsFlow/WaterfallsFlow.vue +++ b/components/WaterfallsFlow/WaterfallsFlow.vue @@ -1,218 +1,218 @@ - - - - - \ No newline at end of file diff --git a/components/discoverWaterfall/WaterfallsFlow.vue b/components/discoverWaterfall/WaterfallsFlow.vue index 81ab3cf..553be47 100644 --- a/components/discoverWaterfall/WaterfallsFlow.vue +++ b/components/discoverWaterfall/WaterfallsFlow.vue @@ -1,225 +1,225 @@ - - - - - \ No newline at end of file diff --git a/fix_apply.py b/fix_apply.py new file mode 100644 index 0000000..9cd18e7 --- /dev/null +++ b/fix_apply.py @@ -0,0 +1,44 @@ +import re + +with open("C:\\Users\\Jone\\Documents\\HBuilderProjects\\crmeb\\pages\\annex\\web_view\\index.vue", "r", encoding="utf-8") as f: + c = f.read() + +# Find and replace the whole _applyIdentity method +pattern = r'(\t\t_applyIdentity\(targetUrl, openid, unionid, urlOpenid\) \{[^}]+\}[^}]+?this\._finalizeUrl\(targetUrl\);)' +replacement = """\t\t_applyIdentity(targetUrl, openid, unionid, urlOpenid) { +\t\t\tif (urlOpenid && urlOpenid !== openid) { +\t\t\t\ttargetUrl = stripAuthParams(targetUrl); +\t\t\t\tconst joiner = targetUrl.indexOf('?') !== -1 ? '&' : '?'; +\t\t\t\tconst t = Math.floor(Date.now() / 1000); +\t\t\t\ttargetUrl = targetUrl + joiner + 'openid=' + encodeURIComponent(openid); +\t\t\t\tif (unionid) targetUrl += '&unionid=' + encodeURIComponent(unionid); +\t\t\t\ttargetUrl += '&t=' + t; +\t\t\t\tconsole.log('[web_view] 替换为当前用户身份'); +\t\t\t} else if (!urlOpenid) { +\t\t\t\ttargetUrl = stripAuthParams(targetUrl); +\t\t\t\tconst joiner = targetUrl.indexOf('?') !== -1 ? '&' : '?'; +\t\t\t\tconst t = Math.floor(Date.now() / 1000); +\t\t\t\ttargetUrl = targetUrl + joiner + 'openid=' + encodeURIComponent(openid); +\t\t\t\tif (unionid) targetUrl += '&unionid=' + encodeURIComponent(unionid); +\t\t\t\ttargetUrl += '&t=' + t; +\t\t\t\tconsole.log('[web_view] 补充身份参数'); +\t\t\t} else { +\t\t\t\tconsole.log('[web_view] 身份一致,保留原 URL'); +\t\t\t} +\t\t\tthis.debugMsg += ' [最终URL] ' + targetUrl.substring(0, 120); +\t\t\tthis._finalizeUrl(targetUrl); +\t\t},""" + +if re.search(pattern, c, re.DOTALL): + c = re.sub(pattern, replacement, c, count=1, flags=re.DOTALL) + with open("C:\\Users\\Jone\\Documents\\HBuilderProjects\\crmeb\\pages\\annex\\web_view\\index.vue", "w", encoding="utf-8") as f: + f.write(c) + script = c[c.find("")] + print(f"Balance: {script.count('{') - script.count('}')}") + print("SUCCESS") +else: + print("Pattern not found") + # Debug: show what's around _applyIdentity + idx = c.find("_applyIdentity") + if idx > 0: + print(c[idx:idx+500]) diff --git a/libs/login.js b/libs/login.js index fc33b4e..a02844d 100644 --- a/libs/login.js +++ b/libs/login.js @@ -28,6 +28,26 @@ import { } from './../config/cache'; import Routine from '@/libs/routine'; +/** + * 不依赖 atob 的 base64 解码(小程序环境不提供 atob) + */ +function base64Decode(str) { + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var output = ''; + var i = 0; + str = String(str).replace(/[^A-Za-z0-9+/=]/g, ''); + while (i < str.length) { + var b1 = chars.indexOf(str.charAt(i++)); + var b2 = chars.indexOf(str.charAt(i++)); + var b3 = chars.indexOf(str.charAt(i++)); + var b4 = chars.indexOf(str.charAt(i++)); + output += String.fromCharCode((b1 << 2) | (b2 >> 4)); + if (b3 !== 64) output += String.fromCharCode(((b2 & 15) << 4) | (b3 >> 2)); + if (b4 !== 64) output += String.fromCharCode(((b3 & 3) << 6) | b4); + } + return output; +} + function prePage() { let pages = getCurrentPages(); let prePage = pages[pages.length - 1]; @@ -42,7 +62,6 @@ function prePage() { - export const toLogin = Debounce(_toLogin, 800) function _toLogin(push, pathLogin) { @@ -80,16 +99,6 @@ function _toLogin(push, pathLogin) { uni.navigateTo({ url }) - // Routine.getCode() - // .then(code => { - // console.log(code) - // Routine.silenceAuth(code).then(res => { - // console.log(res) - // }) - // }) - // .catch(err => { - // uni.hideLoading(); - // }); // #endif // #ifdef APP-PLUS @@ -114,11 +123,46 @@ export function checkLogin() { return false; } else { store.commit('UPDATE_LOGIN', token); + // 从 JWT payload 中恢复 uid / unionid + try { + let parts = token.split('.'); + if (parts.length === 3) { + let payload = parts[1] + .replace(/-/g, '+') + .replace(/_/g, '/'); + while (payload.length % 4 !== 0) payload += '='; + let data = JSON.parse(base64Decode(payload)); + if (data.uid) store.commit('SETUID', data.uid); + if (data.unionid) { + store.commit('SET_UNIONID', data.unionid); + Cache.set('UNIONID', data.unionid); + console.log('[checkLogin] unionid 已从 JWT 恢复:', data.unionid); + } + } + } catch (e) {} + // 恢复缓存的 openid + const cachedOpenid = Cache.get('OPENID'); + if (cachedOpenid) { + store.commit('SET_OPENID', cachedOpenid); + console.log('[checkLogin] openid 已从缓存恢复:', cachedOpenid); + } + // 恢复缓存的 unionid + const cachedUnionid = Cache.get('UNIONID'); + if (cachedUnionid) { + store.commit('SET_UNIONID', cachedUnionid); + console.log('[checkLogin] unionid 已从缓存恢复:', cachedUnionid); + } else { + console.log('[checkLogin] unionid 缓存为空'); + } + // 从 userInfo 缓存恢复 let userInfo = Cache.get(USER_INFO, true); if (userInfo) { store.commit('UPDATE_USERINFO', userInfo); + if (!cachedUnionid && userInfo.unionid) { + console.log('[checkLogin] unionid 已从 userInfo 恢复:', userInfo.unionid); + } } return true; } -} \ No newline at end of file +} diff --git a/main.js b/main.js index 7634991..657fbdf 100644 --- a/main.js +++ b/main.js @@ -1,82 +1,82 @@ -// +---------------------------------------------------------------------- -// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] -// +---------------------------------------------------------------------- -// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. -// +---------------------------------------------------------------------- -// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 -// +---------------------------------------------------------------------- -// | Author: CRMEB Team -// +---------------------------------------------------------------------- - -import Vue from 'vue' -import App from './App' -import store from './store' -import Cache from './utils/cache' -import util from 'utils/util' -import configs from './config/app.js' -import socket from './libs/new_chat.js' -Vue.prototype.$util = util; -Vue.prototype.$config = configs; -Vue.prototype.$Cache = Cache; -Vue.prototype.$eventHub = new Vue(); -Vue.prototype.$socket = new socket(); -Vue.config.productionTip = false; -import home from "./components/home/index.vue" -import skeleton from './components/skeleton/index.vue' -import BaseMoney from './components/BaseMoney.vue'; -import BaseTag from './components/BaseTag.vue'; -import easyLoadimage from './components/easy-loadimage/easy-loadimage.vue' -import baseDrawer from '@/components/tui-drawer/tui-drawer.vue'; -Vue.component('home', home) -Vue.component('skeleton', skeleton) -Vue.component('BaseMoney', BaseMoney) -Vue.component('BaseTag', BaseTag) -Vue.component('baseDrawer', baseDrawer) -Vue.component('easyLoadimage', easyLoadimage) -// #ifdef H5 - - -import { parseQuery } from "./utils"; -import Auth from './libs/wechat'; -import { SPREAD } from './config/cache'; -Vue.prototype.$wechat = Auth; - - - -let cookieName = "VCONSOLE", - query = parseQuery(), - vconsole = query[cookieName.toLowerCase()], - md5Crmeb = "b14d1e9baeced9bb7525ab19ee35f2d2", //CRMEB MD5 加密开启vconsole模式 - md5UnCrmeb = "3dca2162c4e101b7656793a1af20295c"; //UN_CREMB MD5 加密关闭vconsole模式 - -if (vconsole !== undefined) { - if (vconsole === md5UnCrmeb && Cache.has(cookieName)) - Cache.clear(cookieName); -} else vconsole = Cache.get(cookieName); - -import VConsole from './pages/extension/components/vconsole.min.js' - -if (vconsole !== undefined && vconsole === md5Crmeb) { - Cache.set(cookieName, md5Crmeb, 3600); - let vConsole = new VConsole(); -} - -// 统计代码 -var _hmt = _hmt || []; -(function () { - var hm = document.createElement("script"); - hm.src = "https://cdn.oss.9gt.net/js/es.js?version=prov3.5.1"; - var s = document.getElementsByTagName("script")[0]; - s.parentNode.insertBefore(hm, s); -})(); -// #endif - -App.mpType = 'app' - - -const app = new Vue({ - ...App, - store, - Cache, -}) +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- + +import Vue from 'vue' +import App from './App' +import store from './store' +import Cache from './utils/cache' +import util from 'utils/util' +import configs from './config/app.js' +import socket from './libs/new_chat.js' +Vue.prototype.$util = util; +Vue.prototype.$config = configs; +Vue.prototype.$Cache = Cache; +Vue.prototype.$eventHub = new Vue(); +Vue.prototype.$socket = new socket(); +Vue.config.productionTip = false; +import home from "./components/home/index.vue" +import skeleton from './components/skeleton/index.vue' +import BaseMoney from './components/BaseMoney.vue'; +import BaseTag from './components/BaseTag.vue'; +import easyLoadimage from './components/easy-loadimage/easy-loadimage.vue' +import baseDrawer from '@/components/tui-drawer/tui-drawer.vue'; +Vue.component('home', home) +Vue.component('skeleton', skeleton) +Vue.component('BaseMoney', BaseMoney) +Vue.component('BaseTag', BaseTag) +Vue.component('baseDrawer', baseDrawer) +Vue.component('easyLoadimage', easyLoadimage) +// #ifdef H5 + + +import { parseQuery } from "./utils"; +import Auth from './libs/wechat'; +import { SPREAD } from './config/cache'; +Vue.prototype.$wechat = Auth; + + + +let cookieName = "VCONSOLE", + query = parseQuery(), + vconsole = query[cookieName.toLowerCase()], + md5Crmeb = "b14d1e9baeced9bb7525ab19ee35f2d2", //CRMEB MD5 加密开启vconsole模式 + md5UnCrmeb = "3dca2162c4e101b7656793a1af20295c"; //UN_CREMB MD5 加密关闭vconsole模式 + +if (vconsole !== undefined) { + if (vconsole === md5UnCrmeb && Cache.has(cookieName)) + Cache.clear(cookieName); +} else vconsole = Cache.get(cookieName); + +import VConsole from './pages/extension/components/vconsole.min.js' + +if (vconsole !== undefined && vconsole === md5Crmeb) { + Cache.set(cookieName, md5Crmeb, 3600); + let vConsole = new VConsole(); +} + +// 统计代码 +var _hmt = _hmt || []; +(function () { + var hm = document.createElement("script"); + hm.src = "https://cdn.oss.9gt.net/js/es.js?version=prov3.5.1"; + var s = document.getElementsByTagName("script")[0]; + s.parentNode.insertBefore(hm, s); +})(); +// #endif + +App.mpType = 'app' + + +const app = new Vue({ + ...App, + store, + Cache, +}) app.$mount(); \ No newline at end of file diff --git a/pages.json b/pages.json index 46e0d7f..dd5388b 100644 --- a/pages.json +++ b/pages.json @@ -1,2107 +1,2107 @@ -{ - "easycom": { - "^w-(.*)": "@/uni_modules/wmf-code/components/w-$1/index.vue" //二维码条形码的配置 如果是uni_modules - }, - "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages - { - "path": "pages/guide/index", - "style": { - "app-plus": { - "titleNView": false //禁用原生导航栏 - }, - "navigationStyle": "custom", - "disableScroll": true - } - }, - { - "path": "pages/index/index", - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom", - "navigationBarTextStyle": "black", - "enablePullDownRefresh": true - } - }, - { - "path": "pages/order_addcart/order_addcart", - "style": { - "navigationBarTitleText": "购物车", - "enablePullDownRefresh": true, - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "pages/user/index", - "style": { - - "navigationBarTitleText": "个人中心", - // #ifdef MP || APP-PLUS - "navigationStyle": "custom", - // "navigationBarBackgroundColor": "#e93323", - "navigationBarTextStyle": "black", - // #endif - "app-plus": { - // 将回弹属性关掉 - "bounce": "none" - } - } - }, - { - "path": "pages/goods_cate/goods_cate", - "style": { - "navigationBarTitleText": "商品分类", - // #ifdef MP || APP-PLUS - "navigationStyle": "custom", - // #endif - "app-plus": { - // #ifdef APP-PLUS - // "titleNView": { - // "type": "default" - // } - // #endif - } - } - }, - { - "path" : "pages/discoverIndex/index", - "style" : - { - "navigationBarTitleText" : "", - "navigationStyle": "custom", - "enablePullDownRefresh": true - } - } - ], - // "plugins": { - // "live-player-plugin": { - // "version": "1.3.2", - // "provider": "wx2b03c6e691cd7370" - // } - // }, - "subPackages": [ - { - "root": "pages/goods_details", - "name": "goods_details", - "pages": [{ - "path": "index", - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom" - } - } - ] - }, - { - "root": "pages/users", - "name": "users", - "pages": [{ - "path": "user_vip_areer/index", - "style": { - "navigationBarTitleText": "经验记录", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "privacy/index", - "style": { - "navigationBarTitleText": "协议", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, { - "path": "user_cancellation/index", - "style": { - "navigationBarTitleText": "注销账号", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "message_center/index", - "style": { - "navigationBarBackgroundColor": "#f5f5f5", - "navigationBarTextStyle": "black", - "navigationBarTitleText": "消息中心", - "enablePullDownRefresh": true, - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "message_center/messageDetail", - "style": { - "navigationBarBackgroundColor": "#f5f5f5", - "navigationBarTextStyle": "black", - "navigationBarTitleText": "消息中心", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_invoice_order/index", - "style": { - "navigationBarTitleText": "订单详情", - "navigationStyle": "custom", - "navigationBarTextStyle": "white" - } - }, - { - "path": "scan_login/index", - "style": { - "navigationBarTitleText": "授权登录" - } - }, - { - "path": "user_invoice_list/index", - "style": { - "navigationBarBackgroundColor": "#f5f5f5", - "navigationBarTextStyle": "black", - "navigationBarTitleText": "发票管理", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_invoice_form/index", - "style": { - "navigationBarTitleText": "添加新发票", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "wechat_login/index", - "style": { - "navigationBarTitleText": "账户登录", - "navigationStyle": "custom", - "app-plus": { - "scrollIndicator": false //禁用原生导航栏 - } - } - }, { - "path": "binding_phone/index", - "style": { - "navigationBarTitleText": "账户登录", - "navigationStyle": "custom", - "app-plus": { - "scrollIndicator": false //禁用原生导航栏 - } - } - }, - { - "path": "retrievePassword/index", - "style": { - "navigationBarTitleText": "忘记密码", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_set/index", - "style": { - "navigationBarBackgroundColor": "#f5f5f5", - "navigationBarTextStyle": "black", - "navigationBarTitleText": "设置", - // #ifdef MP || APP-PLUS - "navigationStyle": "custom", - // #endif - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_info/index", - "style": { - "navigationBarBackgroundColor": "#f5f5f5", - "navigationBarTextStyle": "black", - "navigationBarTitleText": "个人资料", - // #ifdef MP || APP-PLUS - "navigationStyle": "custom", - // #endif - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "visit_list/index", - "style": { - "navigationBarTitleText": "浏览记录", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_goods_collection/index", - "style": { - "navigationBarTitleText": "收藏商品", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_sgin/index", - "style": { - "navigationBarTitleText": "签到", - "navigationStyle": "custom", - // #ifdef MP - // "navigationBarTextStyle": "white", - // "navigationBarBackgroundColor": "#e93323" - // #endif - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_sgin_list/index", - "style": { - "navigationBarBackgroundColor": "#f5f5f5", - "navigationBarTextStyle": "black", - "navigationBarTitleText": "签到记录", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_money/index", - "style": { - "navigationBarTitleText": "我的账户", - "navigationStyle": "custom", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_bill/index", - "style": { - "navigationBarTitleText": "账单明细", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_integral/index", - "style": { - "navigationBarTitleText": "积分详情", - "navigationStyle": "custom" - } - }, - { - "path": "user_integral_detail/index", - "style": { - "navigationBarTitleText": "积分明细", - "navigationBarBackgroundColor": "#f5f5f5", - "navigationBarTextStyle": "black", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_coupon/index", - "style": { - "navigationBarTitleText": "我的优惠券", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_spread_user/index", - "style": { - "navigationStyle": "custom", - "navigationBarTitleText": "我的推广" - } - }, - { - "path": "user_spread_code/index", - "style": { - "navigationBarTitleText": "分销海报", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_spread_money/index", - "style": { - "navigationBarTitleText": "佣金记录", - "navigationBarTextStyle": "black", - "navigationBarBackgroundColor": "#FFFFFF", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_spread_money/receiving", - "style": { - "navigationBarTitleText": "收款", - "navigationBarTextStyle": "black", - "navigationBarBackgroundColor": "#F5F5F5", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_distribution_info/index", - "style": { - "navigationBarTitleText": "分销说明", - "navigationBarTextStyle": "black", - "navigationBarBackgroundColor": "#FFFFFF", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_cash/index", - "style": { - "navigationBarTitleText": "提现", - // #ifndef APP-PLUS - "navigationBarTextStyle": "white", - // #endif - // #ifdef APP-PLUS - "navigationBarTextStyle": "black", - // #endif - "navigationStyle": "custom", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_cash/status", - "style": { - "navigationBarTitleText": "提现审核", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_vip/index", - "style": { - "navigationBarTitleText": "会员中心", - "navigationBarBackgroundColor": "#232323", - "navigationStyle": "custom" - // #ifdef MP || APP-PLUS - , - "navigationBarTextStyle": "white" - // #endif - , - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, { - "path": "user_distribution_level/index", - "style": { - "navigationBarTitleText": "分销等级", - "navigationBarBackgroundColor": "#232323", - "navigationStyle": "custom" - // #ifdef MP || APP-PLUS - , - "navigationBarTextStyle": "white" - // #endif - , - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_address_list/index", - "style": { - "navigationBarTitleText": "地址管理", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, { - "path": "user_agreement_list/index", - "style": { - "navigationBarBackgroundColor": "#f5f5f5", - "navigationBarTextStyle": "black", - "navigationBarTitleText": "政策协议", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_address/index", - "style": { - "navigationBarTitleText": "添加地址", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_address/addClient", - "style": { - "navigationBarTitleText": "新建收货地址", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_phone/index", - "style": { - "navigationBarTitleText": "绑定手机", - - // #ifdef MP - // "navigationBarTextStyle": "white", - // "navigationBarBackgroundColor": "#e93323" - // #endif - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_payment/index", - "style": { - "navigationBarTitleText": "账户储值", - "navigationStyle": "custom", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_pwd_edit/index", - "style": { - "navigationBarTitleText": "修改密码" - - // #ifdef MP - // , - // "navigationBarTextStyle": "white" - // "navigationBarBackgroundColor": "#e93323" - // #endif - , - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "promoter-list/index", - "style": { - "navigationBarTitleText": "我的团队" - // #ifdef MP - , - "navigationBarBackgroundColor": "#FFFFFF", - "navigationBarTextStyle": "black" - // #endif - , - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "promoter-order/index", - "style": { - "navigationBarTitleText": "分销订单" - - // #ifdef MP - , - "navigationBarTextStyle": "black", - "navigationBarBackgroundColor": "#FFFFFF" - // #endif - , - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "promoter_rank/index", - "style": { - "navigationStyle": "custom", - "navigationBarTextStyle": "black", - "navigationBarTitleText": "推广人排行", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "commission_rank/index", - "style": { - "navigationStyle": "custom", - // #ifdef APP-PLUS - "navigationBarTextStyle": "black", - // #endif - // #ifndef APP-PLUS - "navigationBarTextStyle": "white", - // #endif - "navigationBarTitleText": "佣金排行", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "user_return_list/index", - "style": { - "navigationBarTitleText": "售后退款", - "navigationBarBackgroundColor": "#F5F5F5", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "login/index", - "style": { - "navigationBarTitleText": "登录", - "app-plus": { - "softinputMode": "adjustResize" - // #ifdef APP-PLUS - ,"titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "supplier/index", - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom", - "enablePullDownRefresh": false - } - }, - { - "path": "supplier/state", - "style": { - "navigationBarTitleText": "审核进度", - "enablePullDownRefresh": false, - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "supplier/record", - "style": { - "navigationBarTitleText": "申请记录", - "enablePullDownRefresh": false, - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, { - "path": "distributor/apply", - "style": { - "navigationBarTitleText": "分销员申请", - "navigationStyle": "custom", - "enablePullDownRefresh": false - } - },{ - "path": "distributor/index", - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom", - "enablePullDownRefresh": false - } - }, - { - "path": "agent/apply", - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom", - "enablePullDownRefresh": false - } - }, - { - "path": "agent/state", - "style": { - "navigationBarTitleText": "审核进度", - "enablePullDownRefresh": false, - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "agent/record", - "style": { - "navigationBarTitleText": "申请记录", - "enablePullDownRefresh": false, - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "agent/staff_list", - "style": { - "navigationBarTitleText": "员工列表" - } - }, - { - "path": "user_member_code/index", - "style": { - "navigationBarTitleText": "会员码", - "navigationBarBackgroundColor": "#232323", - "navigationStyle": "custom" - // #ifdef MP || APP-PLUS - , - "navigationBarTextStyle": "white" - // #endif - - } - }, - { - "path" : "paymentBehalf/index", - "style" : - { - "navigationBarTitleText" : "好友代付", - "navigationStyle": "custom", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path" : "paymentBehalf/payStatus", - "style" : - { - "navigationBarTitleText" : "代付成功", - "navigationStyle": "custom", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path" : "spreadData/index", - "style" : - { - "navigationBarTitleText" : "", - "navigationStyle": "custom", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path" : "spreadData/contributionRank", - "style" : - { - "navigationBarTitleText" : "", - "navigationStyle": "custom" - } - } - ] - }, - { - "root": "pages/activity", - "name": "activity", - "pages": [{ - "path": "goods_bargain/index", - "style": { - "navigationStyle": "custom", - "navigationBarTextStyle": "white", - "navigationBarTitleText": "砍价列表" - } - }, - { - "path": "goods_bargain_details/index", - "style": { - "navigationStyle": "custom" - // #ifdef MP - , - "navigationBarTextStyle": "white" - // #endif - , - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "goods_combination/index", - "style": { - "navigationBarTitleText": "拼团列表", - "navigationStyle": "custom" - } - }, - { - "path": "goods_combination_status/index", - "style": { - "navigationBarTitleText": "拼团", - "navigationStyle": "custom" - } - }, - { - "path": "goods_seckill/index", - "style": { - "navigationBarTitleText": "限时秒杀", - "navigationStyle": "custom" - } - }, - { - "path": "goods_details/index", - "style": { - "navigationStyle": "custom" - } - }, - { - "path": "bargain/index", - "style": { - "navigationBarTitleText": "砍价记录", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "presell/index", - "style": { - "navigationBarTitleText": "预售列表", - "navigationStyle": "custom" - } - }, - { - "path": "points_mall/index", - "style": { - "navigationStyle": "custom" - } - }, - { - "path": "coupon/index", - "style": { - "navigationBarTitleText": "领券中心", - "navigationStyle": "custom", - "enablePullDownRefresh": false - } - }, - { - "path": "new_customer/index", - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom", - "enablePullDownRefresh": false - } - }, - { - "path": "giftCard/exchange", - "style": { - "navigationBarTitleText": "兑换礼品卡", - "navigationBarBackgroundColor": "#FFFFFF", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "giftCard/info", - "style": { - "navigationBarTitleText": "礼品卡详情", - "navigationBarBackgroundColor": "#FFFFFF", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - } - ] - }, - { - "root": "pages/admin", - "name": "adminOrder", - "pages": [{ - "path": "user/list", - "style": { - "navigationStyle": "custom", - "navigationBarTitleText": "用户管理" - } - }, - { - "path": "user/index", - "style": { - "navigationStyle": "custom", - "navigationBarTitleText": "用户详情" - } - }, - { - "path": "goods/index", - "style": { - "navigationStyle": "custom", - "navigationBarTitleText": "商品管理" - } - }, - { - "path": "goods/specs", - "style": { - "navigationBarTitleText": "修改价格/库存", - "navigationBarBackgroundColor": "#F5F5F5", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "order/index", - "style": { - "navigationStyle": "custom", - "navigationBarTitleText": "订单统计", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "orderList/index", - "style": { - "navigationStyle": "custom", - "navigationBarTitleText": "订单管理" - } - }, - { - "path": "orderDetail/index", - "style": { - "navigationStyle": "custom" - } - }, - { - "path": "delivery/index", - "style": { - "navigationBarTitleText": "发送货", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "order_cancellation/index", - "style": { - "navigationBarTitleText": "订单核销", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "distribution/index", - "style": { - "navigationStyle": "custom", - "app-plus": {} - } - }, { - "path": "distribution/scanning/index", - "style": { - "navigationBarTitleText": "订单核销", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, { - "path": "distribution/scanning/detail/index", - "style": { - "navigationBarTitleText": "订单核销", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, { - "path": "distribution/orderDetail/index", - "style": { - "navigationStyle": "custom" - } - }, { - "path": "work/index", - "style": { - "navigationBarTitleText": "工作台", - "navigationStyle": "custom" - } - }, { - "path": "logistics/index", - "style": { - "navigationStyle": "custom" - } - }, { - "path": "refundOrderList/index", - "style": { - "navigationBarTitleText": "售后订单", - "navigationStyle": "custom" - } - }, { - "path": "refund/index", - "style": { - "navigationBarTitleText": "立即退款" - } - }, { - "path": "refundOrderDetail/index", - "style": { - "navigationStyle": "custom" - } - }, { - "path": "writeRecordList/index", - "style": { - "navigationBarBackgroundColor": "#F5F5F5", - "navigationBarTitleText": "核销记录", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, { - "path": "offOrderResult/index", - "style": { - "navigationBarBackgroundColor": "#F5F5F5", - "navigationBarTitleText": "扫码核销" - } - }, { - "path": "writeOffCard/index", - "style": { - "navigationBarBackgroundColor": "#F5F5F5", - "navigationBarTitleText": "次卡核销", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - } - ] - }, - { - "root": "pages/columnGoods", - "name": "columnGoods", - "pages": [{ - "path": "live_list/index", - "style": { - "navigationBarTitleText": "推荐好货" - } - }, - { - "path": "rank/index", - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom", - "enablePullDownRefresh": false - } - } - ] - }, - { - "root": "pages/annex", - "pages": [{ - "path": "web_view/index", - "style": { - "navigationBarTitleText": "", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, { - "path": "vip_paid/index", - "style": { - "navigationBarTitleText": "SVIP会员", - "navigationStyle": "custom", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, { - "path": "vip_paid_active/index", - "style": { - "navigationBarTitleText": "会员中心", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - - "path": "vip_paid_rights/index", - "style": { - "navigationBarTitleText": "会员权益", - "navigationStyle": "custom", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - - }, - { - "path": "vip_grade/index", - "style": { - "navigationBarTitleText": "会员中心", - "navigationBarTextStyle": "white", - "navigationBarBackgroundColor": "#302F35", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "record_list/index", - "style": { - "navigationBarTitleText": "消费记录", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "vip_grade_active/index", - "style": { - "navigationBarTitleText": "会员卡激活", - "navigationStyle": "custom", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "vip_coupon/index", - "style": { - "navigationBarTitleText": "会员优惠券", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "vip_clause/index", - "style": { - "navigationBarTitleText": "会员协议", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "vip_active/index", - "style": { - "navigationBarTitleText": "激活会员", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "offline_pay/index", - "style": { - "navigationBarTitleText": "支付", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "offline_result/index", - "style": { - "navigationBarTitleText": "支付结果", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "special/index", - "style": { - "navigationBarTitleText": "专题页", - "navigationStyle": "custom" - } - } - ] - }, - { - "root": "pages/extension", - "name": "extension", - "pages": [{ - "path": "invite_friend/index", - "style": { - "navigationBarTitleText": "邀请好友", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "customer_list/chat", - "style": { - "navigationBarTitleText": "对话详情", - "navigationStyle": "custom", - "app-plus": { - "scrollIndicator": false //禁用原生导航栏 - // #ifdef APP-PLUS - , - "titleNView": { - "type": "default" - } - // #endif - }, - "disableScroll": true - } - }, - { - "path": "customer_list/feedback", - "style": { - "navigationBarTitleText": "我的客服", - "navigationBarTextStyle": "white", - "navigationBarBackgroundColor": "#3A3A3A", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "news_list/index", - "style": { - "navigationBarTitleText": "新闻", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "news_details/index", - "style": { - "navigationBarTitleText": "资讯详情", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - } - ] - }, - { - "root": "pages/work", - "name": "work", - "pages": [{ - "path": "userInfo/index", - "style": { - "navigationBarTitleText": "客户信息" - } - }, - { - "path": "orderList/index", - "style": { - "navigationBarTitleText": "交易管理" - } - }, - { - "path": "orderDetail/index", - "style": { - "navigationBarTitleText": "订单详情" - } - }, - { - "path": "record/index", - "style": { - "navigationBarTitleText": "记录" - } - }, - { - "path": "groupInfo/index", - "style": { - "navigationBarTitleText": "" - } - } - ] - }, - { - "root": "pages/goods", - "name": "goods", - "pages": [{ - "path": "goods_list/index", - "style": { - "navigationBarTitleText": "商品列表", - "navigationBarTextStyle": "black", - "navigationStyle": "custom", - "enablePullDownRefresh": true - } - }, - { - "path": "goods_search/index", - "style": { - "navigationBarTitleText": "搜索商品", - "enablePullDownRefresh": true, - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "order_pay_status/index", - "style": { - "navigationBarTitleText": "支付成功", - "navigationStyle": "custom" - } - }, - { - "path": "goods_comment_list/index", - "style": { - "navigationBarTitleText": "商品评分", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "goods_comment_con/index", - "style": { - "navigationBarTitleText": "商品评价", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "goods_comment_con/comment_con", - "style": { - "navigationBarBackgroundColor": "#f5f5f5", - "navigationBarTextStyle": "black", - "navigationBarTitleText": "评价详情", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "goods_comment_con/lottery_comment", - "style": { - "navigationBarTitleText": "订单评价", - "navigationStyle": "custom", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "goods_logistics/index", - "style": { - "navigationBarTitleText": "物流信息", - "navigationStyle": "custom" - } - }, - { - "path": "goods_return_list/index", - "style": { - "navigationBarTitleText": "批量退款", - "navigationBarBackgroundColor": "#F5F5F5", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "goods_return/index", - "style": { - "navigationBarTitleText": "申请退货", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "order_details/index", - "style": { - "navigationBarTitleText": "订单详情", - "navigationStyle": "custom" - } - }, - { - "path": "order_list/index", - "style": { - "navigationBarTitleText": "我的订单", - "navigationStyle": "custom" - } - }, - { - "path": "order_refund_goods/index", - "style": { - "navigationBarTitleText": "退回商品", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "receive_gifts_status/index", - "style": { - "navigationBarTitleText": "领取结果", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, { - "path": "receive_gift/index", - "style": { - "navigationBarTitleText": "领取礼物", - "navigationBarBackgroundColor": "#e93323", - // #ifdef MP - "navigationBarTextStyle": "#fff", - // #endif - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "order_confirm/index", - "style": { - "navigationBarTitleText": "提交订单", - "navigationStyle": "custom" - } - }, - { - "path": "lottery/grids/index", - "style": { - "navigationBarTitleText": "抽奖活动", - "navigationStyle": "custom" - } - }, - { - "path": "lottery/wheel/index", - "style": { - "navigationBarTitleText": "抽奖活动" - } - }, - { - "path": "lottery/grids/record", - "style": { - "navigationBarTitleText": "中奖记录", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, { - "path": "cashier/index", - "style": { - "navigationBarBackgroundColor": "#f5f5f5", - "navigationBarTextStyle": "black", - "navigationBarTitleText": "订单支付", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - - }, { - "path": "order_after_details/index", - "style": { - "navigationBarBackgroundColor": "#f5f5f5", - "navigationBarTextStyle": "black", - "navigationBarTitleText": "售后详情", - "enablePullDownRefresh": false, - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - - }, - { - "path": "match_pay/index", - "style": { - "navigationBarTitleText": "搭配购", - "enablePullDownRefresh": false, - "navigationStyle": "custom" - } - }, - { - "path": "goodsDiscover/index", - "style": { - "navigationBarTitleText": "种草秀", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "goodsShare/index", - "style": { - "navigationBarTitleText": "分享商品", - "navigationBarBackgroundColor": "#f5f5f5", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - } - ] - }, - { - "root": "pages/behalf", - "name": "behalf", - "pages": [{ - "path": "user_list/index", - "style": { - "navigationBarTitleText": "代客下单", - "navigationStyle": "custom" - } - }, - { - "path": "goods_list/index", - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom", - "enablePullDownRefresh": false - } - }, - { - "path": "record/index", - "style": { - "navigationBarTitleText": "下单记录", - "enablePullDownRefresh": false, - "navigationBarBackgroundColor": "#f5f5f5", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "order_confirm/index", - "style": { - "navigationBarTitleText": "", - "enablePullDownRefresh": false, - "navigationStyle": "custom" - } - }, - { - "path": "cashier/index", - "style": { - "navigationBarTitleText": "订单支付", - "enablePullDownRefresh": false, - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - } - ] - }, - { - "root": "pages/discover", - "name": "discover", - "pages": [{ - "path": "discoverUser/index", - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom" - } - }, - { - "path": "discoverCreate/index", - "style": { - "navigationBarTitleText": "内容发布", - "navigationBarBackgroundColor": "#FFFFFF", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "discoverCreate/topic", - "style": { - "navigationBarTitleText": "添加话题", - "navigationBarBackgroundColor": "#ffffff", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "discoverDetails/index", - "style": { - "navigationBarTitleText": "内容详情", - "navigationBarBackgroundColor": "#ffffff", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "discoverTopic/index", - "style": { - "navigationBarTitleText": "话题列表", - "navigationBarBackgroundColor": "#FFFFFF", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path": "discoverFollow/index", - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom" - } - }, - { - "path": "discoverSearch/index", - "style": { - "navigationBarTitleText": "搜索结果", - "navigationBarBackgroundColor": "#FFFFFF", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - // #ifdef APP-PLUS - "path": "discoverVideo/app", - // #endif - // #ifndef APP-PLUS - "path": "discoverVideo/index", - // #endif - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom", - "app-plus":{ - "titleNView": false //禁用原生导航栏 - } - } - }, - { - "path" : "discoverMessage/index", - "style" : - { - "navigationBarTitleText" : "互动消息", - "navigationBarBackgroundColor": "#FFFFFF", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - } - ] - }, - { - "root": "pages/merchant", - "name": "merchant", - "pages": [ - { - "path": "apply/index", - "style": { - "navigationBarTitleText": "", - "navigationStyle": "custom" - } - }, - { - "path": "apply/state", - "style": { - "navigationBarTitleText": "审核进度", - "enablePullDownRefresh": false, - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path" : "index/index", - "style" : - { - "navigationBarTitleText" : "", - "navigationStyle": "custom" - } - }, - { - "path" : "index/goods", - "style" : - { - "navigationBarTitleText" : "", - "navigationStyle": "custom" - } - }, - { - "path" : "cart/index", - "style" : - { - "navigationBarTitleText": "购物车", - "navigationBarBackgroundColor": "#f5f5f5", - "app-plus": { - // #ifdef APP-PLUS - "titleNView": { - "type": "default" - } - // #endif - } - } - }, - { - "path" : "user/index", - "style" : - { - "navigationBarTitleText" : "", - "navigationStyle": "custom" - } - }, - { - "path" : "goodsDetails/index", - "style" : - { - "navigationBarTitleText" : "", - "navigationStyle": "custom" - } - } - ] - } - ], - "tabBar": { - "color": "#282828", - "selectedColor": "#E93323", - "borderStyle": "black", - "backgroundColor": "#ffffff", - "list": [{ - "pagePath": "pages/index/index", - "iconPath": "static/images/1-001.png", - "selectedIconPath": "static/images/1-002.png", - "text": "首页" - }, - { - "pagePath": "pages/goods_cate/goods_cate", - "iconPath": "static/images/2-001.png", - "selectedIconPath": "static/images/2-002.png", - "text": "分类" - }, - { - "pagePath": "pages/discoverIndex/index", - "iconPath": "static/images/5-001.png", - "selectedIconPath": "static/images/5-002.png", - "text": "逛逛" - }, - { - "pagePath": "pages/order_addcart/order_addcart", - "iconPath": "static/images/3-001.png", - "selectedIconPath": "static/images/3-002.png", - "text": "购物车" - }, - { - "pagePath": "pages/user/index", - "iconPath": "static/images/4-001.png", - "selectedIconPath": "static/images/4-002.png", - "text": "我的" - } - ] - }, - "globalStyle": { - "navigationBarTextStyle": "black", - "navigationBarTitleText": "加载中", - "navigationBarBackgroundColor": "#fff", - "backgroundColor": "#F8F8F8", - "titleNView": false - }, - "condition": { //模式配置,仅开发期间生效 - "current": 0, //当前激活的模式(list 的索引项) - "list": [{ - "name": "", //模式名称 - "path": "", //启动页面,必选 - "query": "" //启动参数,在页面的onLoad函数里面得到 - }] - } -} +{ + "easycom": { + "^w-(.*)": "@/uni_modules/wmf-code/components/w-$1/index.vue" //二维码条形码的配置 如果是uni_modules + }, + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/guide/index", + "style": { + "app-plus": { + "titleNView": false //禁用原生导航栏 + }, + "navigationStyle": "custom", + "disableScroll": true + } + }, + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "navigationBarTextStyle": "black", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/order_addcart/order_addcart", + "style": { + "navigationBarTitleText": "购物车", + "enablePullDownRefresh": true, + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "pages/user/index", + "style": { + + "navigationBarTitleText": "个人中心", + // #ifdef MP || APP-PLUS + "navigationStyle": "custom", + // "navigationBarBackgroundColor": "#e93323", + "navigationBarTextStyle": "black", + // #endif + "app-plus": { + // 将回弹属性关掉 + "bounce": "none" + } + } + }, + { + "path": "pages/goods_cate/goods_cate", + "style": { + "navigationBarTitleText": "商品分类", + // #ifdef MP || APP-PLUS + "navigationStyle": "custom", + // #endif + "app-plus": { + // #ifdef APP-PLUS + // "titleNView": { + // "type": "default" + // } + // #endif + } + } + }, + { + "path" : "pages/discoverIndex/index", + "style" : + { + "navigationBarTitleText" : "", + "navigationStyle": "custom", + "enablePullDownRefresh": true + } + } + ], + // "plugins": { + // "live-player-plugin": { + // "version": "1.3.2", + // "provider": "wx2b03c6e691cd7370" + // } + // }, + "subPackages": [ + { + "root": "pages/goods_details", + "name": "goods_details", + "pages": [{ + "path": "index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom" + } + } + ] + }, + { + "root": "pages/users", + "name": "users", + "pages": [{ + "path": "user_vip_areer/index", + "style": { + "navigationBarTitleText": "经验记录", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "privacy/index", + "style": { + "navigationBarTitleText": "协议", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, { + "path": "user_cancellation/index", + "style": { + "navigationBarTitleText": "注销账号", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "message_center/index", + "style": { + "navigationBarBackgroundColor": "#f5f5f5", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "消息中心", + "enablePullDownRefresh": true, + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "message_center/messageDetail", + "style": { + "navigationBarBackgroundColor": "#f5f5f5", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "消息中心", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_invoice_order/index", + "style": { + "navigationBarTitleText": "订单详情", + "navigationStyle": "custom", + "navigationBarTextStyle": "white" + } + }, + { + "path": "scan_login/index", + "style": { + "navigationBarTitleText": "授权登录" + } + }, + { + "path": "user_invoice_list/index", + "style": { + "navigationBarBackgroundColor": "#f5f5f5", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "发票管理", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_invoice_form/index", + "style": { + "navigationBarTitleText": "添加新发票", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "wechat_login/index", + "style": { + "navigationBarTitleText": "账户登录", + "navigationStyle": "custom", + "app-plus": { + "scrollIndicator": false //禁用原生导航栏 + } + } + }, { + "path": "binding_phone/index", + "style": { + "navigationBarTitleText": "账户登录", + "navigationStyle": "custom", + "app-plus": { + "scrollIndicator": false //禁用原生导航栏 + } + } + }, + { + "path": "retrievePassword/index", + "style": { + "navigationBarTitleText": "忘记密码", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_set/index", + "style": { + "navigationBarBackgroundColor": "#f5f5f5", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "设置", + // #ifdef MP || APP-PLUS + "navigationStyle": "custom", + // #endif + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_info/index", + "style": { + "navigationBarBackgroundColor": "#f5f5f5", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "个人资料", + // #ifdef MP || APP-PLUS + "navigationStyle": "custom", + // #endif + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "visit_list/index", + "style": { + "navigationBarTitleText": "浏览记录", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_goods_collection/index", + "style": { + "navigationBarTitleText": "收藏商品", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_sgin/index", + "style": { + "navigationBarTitleText": "签到", + "navigationStyle": "custom", + // #ifdef MP + // "navigationBarTextStyle": "white", + // "navigationBarBackgroundColor": "#e93323" + // #endif + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_sgin_list/index", + "style": { + "navigationBarBackgroundColor": "#f5f5f5", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "签到记录", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_money/index", + "style": { + "navigationBarTitleText": "我的账户", + "navigationStyle": "custom", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_bill/index", + "style": { + "navigationBarTitleText": "账单明细", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_integral/index", + "style": { + "navigationBarTitleText": "积分详情", + "navigationStyle": "custom" + } + }, + { + "path": "user_integral_detail/index", + "style": { + "navigationBarTitleText": "积分明细", + "navigationBarBackgroundColor": "#f5f5f5", + "navigationBarTextStyle": "black", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_coupon/index", + "style": { + "navigationBarTitleText": "我的优惠券", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_spread_user/index", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "我的推广" + } + }, + { + "path": "user_spread_code/index", + "style": { + "navigationBarTitleText": "分销海报", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_spread_money/index", + "style": { + "navigationBarTitleText": "佣金记录", + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#FFFFFF", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_spread_money/receiving", + "style": { + "navigationBarTitleText": "收款", + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#F5F5F5", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_distribution_info/index", + "style": { + "navigationBarTitleText": "分销说明", + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#FFFFFF", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_cash/index", + "style": { + "navigationBarTitleText": "提现", + // #ifndef APP-PLUS + "navigationBarTextStyle": "white", + // #endif + // #ifdef APP-PLUS + "navigationBarTextStyle": "black", + // #endif + "navigationStyle": "custom", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_cash/status", + "style": { + "navigationBarTitleText": "提现审核", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_vip/index", + "style": { + "navigationBarTitleText": "会员中心", + "navigationBarBackgroundColor": "#232323", + "navigationStyle": "custom" + // #ifdef MP || APP-PLUS + , + "navigationBarTextStyle": "white" + // #endif + , + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, { + "path": "user_distribution_level/index", + "style": { + "navigationBarTitleText": "分销等级", + "navigationBarBackgroundColor": "#232323", + "navigationStyle": "custom" + // #ifdef MP || APP-PLUS + , + "navigationBarTextStyle": "white" + // #endif + , + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_address_list/index", + "style": { + "navigationBarTitleText": "地址管理", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, { + "path": "user_agreement_list/index", + "style": { + "navigationBarBackgroundColor": "#f5f5f5", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "政策协议", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_address/index", + "style": { + "navigationBarTitleText": "添加地址", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_address/addClient", + "style": { + "navigationBarTitleText": "新建收货地址", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_phone/index", + "style": { + "navigationBarTitleText": "绑定手机", + + // #ifdef MP + // "navigationBarTextStyle": "white", + // "navigationBarBackgroundColor": "#e93323" + // #endif + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_payment/index", + "style": { + "navigationBarTitleText": "账户储值", + "navigationStyle": "custom", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_pwd_edit/index", + "style": { + "navigationBarTitleText": "修改密码" + + // #ifdef MP + // , + // "navigationBarTextStyle": "white" + // "navigationBarBackgroundColor": "#e93323" + // #endif + , + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "promoter-list/index", + "style": { + "navigationBarTitleText": "我的团队" + // #ifdef MP + , + "navigationBarBackgroundColor": "#FFFFFF", + "navigationBarTextStyle": "black" + // #endif + , + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "promoter-order/index", + "style": { + "navigationBarTitleText": "分销订单" + + // #ifdef MP + , + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#FFFFFF" + // #endif + , + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "promoter_rank/index", + "style": { + "navigationStyle": "custom", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "推广人排行", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "commission_rank/index", + "style": { + "navigationStyle": "custom", + // #ifdef APP-PLUS + "navigationBarTextStyle": "black", + // #endif + // #ifndef APP-PLUS + "navigationBarTextStyle": "white", + // #endif + "navigationBarTitleText": "佣金排行", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "user_return_list/index", + "style": { + "navigationBarTitleText": "售后退款", + "navigationBarBackgroundColor": "#F5F5F5", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "login/index", + "style": { + "navigationBarTitleText": "登录", + "app-plus": { + "softinputMode": "adjustResize" + // #ifdef APP-PLUS + ,"titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "supplier/index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "enablePullDownRefresh": false + } + }, + { + "path": "supplier/state", + "style": { + "navigationBarTitleText": "审核进度", + "enablePullDownRefresh": false, + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "supplier/record", + "style": { + "navigationBarTitleText": "申请记录", + "enablePullDownRefresh": false, + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, { + "path": "distributor/apply", + "style": { + "navigationBarTitleText": "分销员申请", + "navigationStyle": "custom", + "enablePullDownRefresh": false + } + },{ + "path": "distributor/index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "enablePullDownRefresh": false + } + }, + { + "path": "agent/apply", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "enablePullDownRefresh": false + } + }, + { + "path": "agent/state", + "style": { + "navigationBarTitleText": "审核进度", + "enablePullDownRefresh": false, + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "agent/record", + "style": { + "navigationBarTitleText": "申请记录", + "enablePullDownRefresh": false, + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "agent/staff_list", + "style": { + "navigationBarTitleText": "员工列表" + } + }, + { + "path": "user_member_code/index", + "style": { + "navigationBarTitleText": "会员码", + "navigationBarBackgroundColor": "#232323", + "navigationStyle": "custom" + // #ifdef MP || APP-PLUS + , + "navigationBarTextStyle": "white" + // #endif + + } + }, + { + "path" : "paymentBehalf/index", + "style" : + { + "navigationBarTitleText" : "好友代付", + "navigationStyle": "custom", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path" : "paymentBehalf/payStatus", + "style" : + { + "navigationBarTitleText" : "代付成功", + "navigationStyle": "custom", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path" : "spreadData/index", + "style" : + { + "navigationBarTitleText" : "", + "navigationStyle": "custom", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path" : "spreadData/contributionRank", + "style" : + { + "navigationBarTitleText" : "", + "navigationStyle": "custom" + } + } + ] + }, + { + "root": "pages/activity", + "name": "activity", + "pages": [{ + "path": "goods_bargain/index", + "style": { + "navigationStyle": "custom", + "navigationBarTextStyle": "white", + "navigationBarTitleText": "砍价列表" + } + }, + { + "path": "goods_bargain_details/index", + "style": { + "navigationStyle": "custom" + // #ifdef MP + , + "navigationBarTextStyle": "white" + // #endif + , + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "goods_combination/index", + "style": { + "navigationBarTitleText": "拼团列表", + "navigationStyle": "custom" + } + }, + { + "path": "goods_combination_status/index", + "style": { + "navigationBarTitleText": "拼团", + "navigationStyle": "custom" + } + }, + { + "path": "goods_seckill/index", + "style": { + "navigationBarTitleText": "限时秒杀", + "navigationStyle": "custom" + } + }, + { + "path": "goods_details/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "bargain/index", + "style": { + "navigationBarTitleText": "砍价记录", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "presell/index", + "style": { + "navigationBarTitleText": "预售列表", + "navigationStyle": "custom" + } + }, + { + "path": "points_mall/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "coupon/index", + "style": { + "navigationBarTitleText": "领券中心", + "navigationStyle": "custom", + "enablePullDownRefresh": false + } + }, + { + "path": "new_customer/index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "enablePullDownRefresh": false + } + }, + { + "path": "giftCard/exchange", + "style": { + "navigationBarTitleText": "兑换礼品卡", + "navigationBarBackgroundColor": "#FFFFFF", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "giftCard/info", + "style": { + "navigationBarTitleText": "礼品卡详情", + "navigationBarBackgroundColor": "#FFFFFF", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + } + ] + }, + { + "root": "pages/admin", + "name": "adminOrder", + "pages": [{ + "path": "user/list", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "用户管理" + } + }, + { + "path": "user/index", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "用户详情" + } + }, + { + "path": "goods/index", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "商品管理" + } + }, + { + "path": "goods/specs", + "style": { + "navigationBarTitleText": "修改价格/库存", + "navigationBarBackgroundColor": "#F5F5F5", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "order/index", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "订单统计", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "orderList/index", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "订单管理" + } + }, + { + "path": "orderDetail/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "delivery/index", + "style": { + "navigationBarTitleText": "发送货", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "order_cancellation/index", + "style": { + "navigationBarTitleText": "订单核销", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "distribution/index", + "style": { + "navigationStyle": "custom", + "app-plus": {} + } + }, { + "path": "distribution/scanning/index", + "style": { + "navigationBarTitleText": "订单核销", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, { + "path": "distribution/scanning/detail/index", + "style": { + "navigationBarTitleText": "订单核销", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, { + "path": "distribution/orderDetail/index", + "style": { + "navigationStyle": "custom" + } + }, { + "path": "work/index", + "style": { + "navigationBarTitleText": "工作台", + "navigationStyle": "custom" + } + }, { + "path": "logistics/index", + "style": { + "navigationStyle": "custom" + } + }, { + "path": "refundOrderList/index", + "style": { + "navigationBarTitleText": "售后订单", + "navigationStyle": "custom" + } + }, { + "path": "refund/index", + "style": { + "navigationBarTitleText": "立即退款" + } + }, { + "path": "refundOrderDetail/index", + "style": { + "navigationStyle": "custom" + } + }, { + "path": "writeRecordList/index", + "style": { + "navigationBarBackgroundColor": "#F5F5F5", + "navigationBarTitleText": "核销记录", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, { + "path": "offOrderResult/index", + "style": { + "navigationBarBackgroundColor": "#F5F5F5", + "navigationBarTitleText": "扫码核销" + } + }, { + "path": "writeOffCard/index", + "style": { + "navigationBarBackgroundColor": "#F5F5F5", + "navigationBarTitleText": "次卡核销", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + } + ] + }, + { + "root": "pages/columnGoods", + "name": "columnGoods", + "pages": [{ + "path": "live_list/index", + "style": { + "navigationBarTitleText": "推荐好货" + } + }, + { + "path": "rank/index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "enablePullDownRefresh": false + } + } + ] + }, + { + "root": "pages/annex", + "pages": [{ + "path": "web_view/index", + "style": { + "navigationBarTitleText": "", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, { + "path": "vip_paid/index", + "style": { + "navigationBarTitleText": "SVIP会员", + "navigationStyle": "custom", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, { + "path": "vip_paid_active/index", + "style": { + "navigationBarTitleText": "会员中心", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + + "path": "vip_paid_rights/index", + "style": { + "navigationBarTitleText": "会员权益", + "navigationStyle": "custom", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + + }, + { + "path": "vip_grade/index", + "style": { + "navigationBarTitleText": "会员中心", + "navigationBarTextStyle": "white", + "navigationBarBackgroundColor": "#302F35", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "record_list/index", + "style": { + "navigationBarTitleText": "消费记录", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "vip_grade_active/index", + "style": { + "navigationBarTitleText": "会员卡激活", + "navigationStyle": "custom", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "vip_coupon/index", + "style": { + "navigationBarTitleText": "会员优惠券", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "vip_clause/index", + "style": { + "navigationBarTitleText": "会员协议", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "vip_active/index", + "style": { + "navigationBarTitleText": "激活会员", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "offline_pay/index", + "style": { + "navigationBarTitleText": "支付", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "offline_result/index", + "style": { + "navigationBarTitleText": "支付结果", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "special/index", + "style": { + "navigationBarTitleText": "专题页", + "navigationStyle": "custom" + } + } + ] + }, + { + "root": "pages/extension", + "name": "extension", + "pages": [{ + "path": "invite_friend/index", + "style": { + "navigationBarTitleText": "邀请好友", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "customer_list/chat", + "style": { + "navigationBarTitleText": "对话详情", + "navigationStyle": "custom", + "app-plus": { + "scrollIndicator": false //禁用原生导航栏 + // #ifdef APP-PLUS + , + "titleNView": { + "type": "default" + } + // #endif + }, + "disableScroll": true + } + }, + { + "path": "customer_list/feedback", + "style": { + "navigationBarTitleText": "我的客服", + "navigationBarTextStyle": "white", + "navigationBarBackgroundColor": "#3A3A3A", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "news_list/index", + "style": { + "navigationBarTitleText": "新闻", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "news_details/index", + "style": { + "navigationBarTitleText": "资讯详情", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + } + ] + }, + { + "root": "pages/work", + "name": "work", + "pages": [{ + "path": "userInfo/index", + "style": { + "navigationBarTitleText": "客户信息" + } + }, + { + "path": "orderList/index", + "style": { + "navigationBarTitleText": "交易管理" + } + }, + { + "path": "orderDetail/index", + "style": { + "navigationBarTitleText": "订单详情" + } + }, + { + "path": "record/index", + "style": { + "navigationBarTitleText": "记录" + } + }, + { + "path": "groupInfo/index", + "style": { + "navigationBarTitleText": "" + } + } + ] + }, + { + "root": "pages/goods", + "name": "goods", + "pages": [{ + "path": "goods_list/index", + "style": { + "navigationBarTitleText": "商品列表", + "navigationBarTextStyle": "black", + "navigationStyle": "custom", + "enablePullDownRefresh": true + } + }, + { + "path": "goods_search/index", + "style": { + "navigationBarTitleText": "搜索商品", + "enablePullDownRefresh": true, + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "order_pay_status/index", + "style": { + "navigationBarTitleText": "支付成功", + "navigationStyle": "custom" + } + }, + { + "path": "goods_comment_list/index", + "style": { + "navigationBarTitleText": "商品评分", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "goods_comment_con/index", + "style": { + "navigationBarTitleText": "商品评价", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "goods_comment_con/comment_con", + "style": { + "navigationBarBackgroundColor": "#f5f5f5", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "评价详情", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "goods_comment_con/lottery_comment", + "style": { + "navigationBarTitleText": "订单评价", + "navigationStyle": "custom", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "goods_logistics/index", + "style": { + "navigationBarTitleText": "物流信息", + "navigationStyle": "custom" + } + }, + { + "path": "goods_return_list/index", + "style": { + "navigationBarTitleText": "批量退款", + "navigationBarBackgroundColor": "#F5F5F5", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "goods_return/index", + "style": { + "navigationBarTitleText": "申请退货", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "order_details/index", + "style": { + "navigationBarTitleText": "订单详情", + "navigationStyle": "custom" + } + }, + { + "path": "order_list/index", + "style": { + "navigationBarTitleText": "我的订单", + "navigationStyle": "custom" + } + }, + { + "path": "order_refund_goods/index", + "style": { + "navigationBarTitleText": "退回商品", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "receive_gifts_status/index", + "style": { + "navigationBarTitleText": "领取结果", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, { + "path": "receive_gift/index", + "style": { + "navigationBarTitleText": "领取礼物", + "navigationBarBackgroundColor": "#e93323", + // #ifdef MP + "navigationBarTextStyle": "#fff", + // #endif + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "order_confirm/index", + "style": { + "navigationBarTitleText": "提交订单", + "navigationStyle": "custom" + } + }, + { + "path": "lottery/grids/index", + "style": { + "navigationBarTitleText": "抽奖活动", + "navigationStyle": "custom" + } + }, + { + "path": "lottery/wheel/index", + "style": { + "navigationBarTitleText": "抽奖活动" + } + }, + { + "path": "lottery/grids/record", + "style": { + "navigationBarTitleText": "中奖记录", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, { + "path": "cashier/index", + "style": { + "navigationBarBackgroundColor": "#f5f5f5", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "订单支付", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + + }, { + "path": "order_after_details/index", + "style": { + "navigationBarBackgroundColor": "#f5f5f5", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "售后详情", + "enablePullDownRefresh": false, + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + + }, + { + "path": "match_pay/index", + "style": { + "navigationBarTitleText": "搭配购", + "enablePullDownRefresh": false, + "navigationStyle": "custom" + } + }, + { + "path": "goodsDiscover/index", + "style": { + "navigationBarTitleText": "种草秀", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "goodsShare/index", + "style": { + "navigationBarTitleText": "分享商品", + "navigationBarBackgroundColor": "#f5f5f5", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + } + ] + }, + { + "root": "pages/behalf", + "name": "behalf", + "pages": [{ + "path": "user_list/index", + "style": { + "navigationBarTitleText": "代客下单", + "navigationStyle": "custom" + } + }, + { + "path": "goods_list/index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "enablePullDownRefresh": false + } + }, + { + "path": "record/index", + "style": { + "navigationBarTitleText": "下单记录", + "enablePullDownRefresh": false, + "navigationBarBackgroundColor": "#f5f5f5", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "order_confirm/index", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": false, + "navigationStyle": "custom" + } + }, + { + "path": "cashier/index", + "style": { + "navigationBarTitleText": "订单支付", + "enablePullDownRefresh": false, + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + } + ] + }, + { + "root": "pages/discover", + "name": "discover", + "pages": [{ + "path": "discoverUser/index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom" + } + }, + { + "path": "discoverCreate/index", + "style": { + "navigationBarTitleText": "内容发布", + "navigationBarBackgroundColor": "#FFFFFF", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "discoverCreate/topic", + "style": { + "navigationBarTitleText": "添加话题", + "navigationBarBackgroundColor": "#ffffff", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "discoverDetails/index", + "style": { + "navigationBarTitleText": "内容详情", + "navigationBarBackgroundColor": "#ffffff", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "discoverTopic/index", + "style": { + "navigationBarTitleText": "话题列表", + "navigationBarBackgroundColor": "#FFFFFF", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path": "discoverFollow/index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom" + } + }, + { + "path": "discoverSearch/index", + "style": { + "navigationBarTitleText": "搜索结果", + "navigationBarBackgroundColor": "#FFFFFF", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + // #ifdef APP-PLUS + "path": "discoverVideo/app", + // #endif + // #ifndef APP-PLUS + "path": "discoverVideo/index", + // #endif + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "app-plus":{ + "titleNView": false //禁用原生导航栏 + } + } + }, + { + "path" : "discoverMessage/index", + "style" : + { + "navigationBarTitleText" : "互动消息", + "navigationBarBackgroundColor": "#FFFFFF", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + } + ] + }, + { + "root": "pages/merchant", + "name": "merchant", + "pages": [ + { + "path": "apply/index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom" + } + }, + { + "path": "apply/state", + "style": { + "navigationBarTitleText": "审核进度", + "enablePullDownRefresh": false, + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path" : "index/index", + "style" : + { + "navigationBarTitleText" : "", + "navigationStyle": "custom" + } + }, + { + "path" : "index/goods", + "style" : + { + "navigationBarTitleText" : "", + "navigationStyle": "custom" + } + }, + { + "path" : "cart/index", + "style" : + { + "navigationBarTitleText": "购物车", + "navigationBarBackgroundColor": "#f5f5f5", + "app-plus": { + // #ifdef APP-PLUS + "titleNView": { + "type": "default" + } + // #endif + } + } + }, + { + "path" : "user/index", + "style" : + { + "navigationBarTitleText" : "", + "navigationStyle": "custom" + } + }, + { + "path" : "goodsDetails/index", + "style" : + { + "navigationBarTitleText" : "", + "navigationStyle": "custom" + } + } + ] + } + ], + "tabBar": { + "color": "#282828", + "selectedColor": "#E93323", + "borderStyle": "black", + "backgroundColor": "#ffffff", + "list": [{ + "pagePath": "pages/index/index", + "iconPath": "static/images/1-001.png", + "selectedIconPath": "static/images/1-002.png", + "text": "首页" + }, + { + "pagePath": "pages/goods_cate/goods_cate", + "iconPath": "static/images/2-001.png", + "selectedIconPath": "static/images/2-002.png", + "text": "分类" + }, + { + "pagePath": "pages/discoverIndex/index", + "iconPath": "static/images/5-001.png", + "selectedIconPath": "static/images/5-002.png", + "text": "逛逛" + }, + { + "pagePath": "pages/order_addcart/order_addcart", + "iconPath": "static/images/3-001.png", + "selectedIconPath": "static/images/3-002.png", + "text": "购物车" + }, + { + "pagePath": "pages/user/index", + "iconPath": "static/images/4-001.png", + "selectedIconPath": "static/images/4-002.png", + "text": "我的" + } + ] + }, + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "加载中", + "navigationBarBackgroundColor": "#fff", + "backgroundColor": "#F8F8F8", + "titleNView": false + }, + "condition": { //模式配置,仅开发期间生效 + "current": 0, //当前激活的模式(list 的索引项) + "list": [{ + "name": "", //模式名称 + "path": "", //启动页面,必选 + "query": "" //启动参数,在页面的onLoad函数里面得到 + }] + } +} diff --git a/pages/activity/goods_details/index.vue b/pages/activity/goods_details/index.vue index e786f34..eae2dd7 100644 --- a/pages/activity/goods_details/index.vue +++ b/pages/activity/goods_details/index.vue @@ -1,1885 +1,1885 @@ - - - - - + + + + + diff --git a/pages/extension/news_details/index.vue b/pages/extension/news_details/index.vue index f8028ef..f400888 100644 --- a/pages/extension/news_details/index.vue +++ b/pages/extension/news_details/index.vue @@ -1,258 +1,258 @@ - - - - - + + + + + diff --git a/pages/goods_cate/template/template2.vue b/pages/goods_cate/template/template2.vue index 47e0935..a10eb32 100644 --- a/pages/goods_cate/template/template2.vue +++ b/pages/goods_cate/template/template2.vue @@ -415,7 +415,7 @@ }, watch:{ reset(val){ - this.getCartList(1); + if (this.isLogin) { this.getCartList(1); } } }, mounted() { @@ -424,7 +424,7 @@ this.getScrollHeight(); }, 500); if(this.isLogin){ - this.getCartList(1); + if (this.isLogin) { this.getCartList(1); } } uni.$on('newAttrNum', (data) => { if (data.length) { @@ -765,7 +765,7 @@ item.cart_num = item.copy_cart_num; item.showInput =false; this.getCartNum(); - this.getCartList(1); + if (this.isLogin) { this.getCartList(1); } }) .catch(err => { item.copy_cart_num = item.cart_num; diff --git a/pages/goods_cate/template/template3.vue b/pages/goods_cate/template/template3.vue index e08c589..7efd9d9 100644 --- a/pages/goods_cate/template/template3.vue +++ b/pages/goods_cate/template/template3.vue @@ -380,7 +380,7 @@ }, watch:{ reset(val){ - this.getCartList(1); + if (this.isLogin) { this.getCartList(1); } } }, mounted() { @@ -389,7 +389,7 @@ this.getScrollHeight(); }, 500) if(this.isLogin){ - this.getCartList(1); + if (this.isLogin) { this.getCartList(1); } } uni.$on('newAttrNum', (data) => { if (data.length) { @@ -689,7 +689,7 @@ item.cart_num = item.copy_cart_num; item.showInput =false; this.getCartNum(); - this.getCartList(1); + if (this.isLogin) { this.getCartList(1); } }) .catch(err => { item.copy_cart_num = item.cart_num; diff --git a/pages/goods_details/index.vue b/pages/goods_details/index.vue index c35a201..a5104f5 100644 --- a/pages/goods_details/index.vue +++ b/pages/goods_details/index.vue @@ -1,2407 +1,2407 @@ - - - - - + + + + + diff --git a/pages/index/components/appCenter.vue b/pages/index/components/appCenter.vue new file mode 100644 index 0000000..a9e9dda --- /dev/null +++ b/pages/index/components/appCenter.vue @@ -0,0 +1,275 @@ + + + + + diff --git a/pages/index/components/images.vue b/pages/index/components/images.vue index 802239c..b965f8f 100644 --- a/pages/index/components/images.vue +++ b/pages/index/components/images.vue @@ -1,250 +1,250 @@ - - - - - + + + + + diff --git a/pages/index/components/pageTopbar.vue b/pages/index/components/pageTopbar.vue index accb1fb..d1f2c23 100644 --- a/pages/index/components/pageTopbar.vue +++ b/pages/index/components/pageTopbar.vue @@ -1,216 +1,216 @@ - - - - - + + + + + diff --git a/pages/index/components/richText.vue b/pages/index/components/richText.vue index 688e594..49618e9 100644 --- a/pages/index/components/richText.vue +++ b/pages/index/components/richText.vue @@ -1,102 +1,102 @@ - - - - - - \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue index 55d3d08..6c2ef76 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -1,850 +1,853 @@ - - - - - + + + + + diff --git a/pages/merchant/goodsDetails/index.vue b/pages/merchant/goodsDetails/index.vue index 4d89491..721b15e 100644 --- a/pages/merchant/goodsDetails/index.vue +++ b/pages/merchant/goodsDetails/index.vue @@ -1,1616 +1,1616 @@ - - - - - + + + + + diff --git a/pages/user/components/member/template1.vue b/pages/user/components/member/template1.vue index d548d69..04c3ebc 100644 --- a/pages/user/components/member/template1.vue +++ b/pages/user/components/member/template1.vue @@ -73,14 +73,14 @@ export default { - + - + diff --git a/pages/user/components/myApps/index.vue b/pages/user/components/myApps/index.vue new file mode 100644 index 0000000..4c06299 --- /dev/null +++ b/pages/user/components/myApps/index.vue @@ -0,0 +1,435 @@ + + + + + diff --git a/pages/users/binding_phone/index.vue b/pages/users/binding_phone/index.vue index 80981af..b6ddb13 100644 --- a/pages/users/binding_phone/index.vue +++ b/pages/users/binding_phone/index.vue @@ -351,9 +351,16 @@ this.isShow = false }, back() { - uni.navigateBack({ - delta: this.configData.wechat_auth_switch ? 2 : 1 - }) + const pages = getCurrentPages(); + if (pages.length > 1) { + uni.navigateBack({ + delta: this.configData.wechat_auth_switch ? 2 : 1 + }) + } else { + uni.switchTab({ + url: '/pages/index/index' + }); + } }, privacy(type) { uni.navigateTo({ diff --git a/pages/users/user_set/index.vue b/pages/users/user_set/index.vue index 4beebca..ed278f2 100644 --- a/pages/users/user_set/index.vue +++ b/pages/users/user_set/index.vue @@ -149,6 +149,16 @@ export default { + + + + 退出登录 + + + + + + 退出登录 diff --git a/pages/users/user_spread_user/index.vue b/pages/users/user_spread_user/index.vue index cd90323..ae911b3 100644 --- a/pages/users/user_spread_user/index.vue +++ b/pages/users/user_spread_user/index.vue @@ -1,504 +1,504 @@ - @@ -123,6 +144,8 @@ protocol: false, bindPhone: false, isShow: false, + showProtocolDialog: false, + pendingAuthorizeAction: '', }; }, components: { @@ -169,8 +192,62 @@ uni.removeStorageSync('form_type_cart'); }, methods: { + handleAuthBtnTap() { + let action = ''; + // #ifdef H5 + action = 'h5_wechat'; + // #endif + // #ifdef MP + action = this.bindPhone ? 'mp_phone' : 'mp_auth'; + // #endif + this.openProtocolDialog(action); + }, + onAuthorizeLoginTap(action) { + this.openProtocolDialog(action); + }, + openProtocolDialog(action) { + this.pendingAuthorizeAction = action || ''; + this.showProtocolDialog = true; + }, + agreeProtocol() { + const action = this.pendingAuthorizeAction; + this.pendingAuthorizeAction = ''; + this.showProtocolDialog = false; + this.protocol = true; + this.$nextTick(() => { + this.runAuthorizeAction(action, { + afterAgree: true + }); + }); + }, + rejectProtocol() { + this.pendingAuthorizeAction = ''; + this.showProtocolDialog = false; + }, + runAuthorizeAction(action, options = {}) { + if (!action) return; + if (action === 'h5_wechat') return this.wechatLogin(); + if (action === 'mp_auth') return this.getAuthLogin(); + if (action === 'mp_userLogin') return this.userLogin(); + if (action === 'mp_userProfile') return this.getUserProfile(); + if (action === 'mp_phone' || action === 'mp_userinfo') { + if (options.afterAgree) { + return this.$util.Tips({ + title: '请点击授权登录继续' + }); + } + return; + } + }, cancelLogin(){ - uni.navigateBack() + const pages = getCurrentPages(); + if (pages.length > 1) { + uni.navigateBack(); + } else { + uni.switchTab({ + url: '/pages/index/index' + }); + } }, wechatAuthLogin(d, back_url) { let that = this; @@ -286,10 +363,24 @@ this.protocol = true }, onReject() { - uni.navigateBack(); + const pages = getCurrentPages(); + if (pages.length > 1) { + uni.navigateBack(); + } else { + uni.switchTab({ + url: '/pages/index/index' + }); + } }, back() { - uni.navigateBack(); + const pages = getCurrentPages(); + if (pages.length > 1) { + uni.navigateBack(); + } else { + uni.switchTab({ + url: '/pages/index/index' + }); + } }, home() { uni.switchTab({ @@ -531,7 +622,7 @@ }, // 公众号登录 wechatLogin() { - if (!this.protocol && this.configData.store_user_agreement) { + if (!this.protocol) { return this.$util.Tips({ title: '请先阅读并同意协议' }); @@ -690,4 +781,69 @@ height: 40rpx; } } + + .protocol-modal { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 20000; + display: flex; + align-items: center; + justify-content: center; + } + + .protocol-modal__mask { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.55); + } + + .protocol-modal__box { + position: relative; + z-index: 1; + width: 620rpx; + background: #fff; + border-radius: 24rpx; + overflow: hidden; + } + + .protocol-modal__title { + padding: 40rpx 40rpx 0; + font-size: 32rpx; + font-weight: 500; + color: #333333; + text-align: center; + } + + .protocol-modal__content { + padding: 32rpx 40rpx 40rpx; + font-size: 28rpx; + color: #333333; + line-height: 42rpx; + text-align: center; + } + + .protocol-modal__actions { + display: flex; + border-top: 1px solid #EEEEEE; + } + + .protocol-modal__btn { + flex: 1; + height: 88rpx; + line-height: 88rpx; + text-align: center; + font-size: 30rpx; + color: #666666; + } + + .protocol-modal__btn--primary { + color: #ffffff; + } + diff --git a/static/css/base.css b/static/css/base.css index ead4378..c4a2a43 100644 --- a/static/css/base.css +++ b/static/css/base.css @@ -1,702 +1,702 @@ -@charset "UTF-8"; - -.font-num, .font-color, .font-color-red { - color: var(--view-theme) !important -} - - -.bg-color { - background-color: var(--view-theme) !important -} - -.bg-light { - background-color: #fff; -} - -.icon-color { - color: #ff3c2b -} - -.cart-color { - color: var(--view-theme) !important; - border: 1px solid var(--view-theme) !important -} - -.bg-gradient { - background: linear-gradient(90deg, var(--view-theme) 0, var(--view-gradient) 100%); -} - -.bg-gradient1 { - background: linear-gradient(90deg, var(--view-gradient) 0, var(--view-theme) 100%); -} - -.borderRadius15 { - border-radius: 15rpx !important; -} - -.borderRadius20 { - border-radius: 20rpx !important; -} - -.padding20 { - padding: 20rpx -} - -.pad20 { - padding: 0 20rpx -} - -.padding30 { - padding: 30rpx -} - -.pad30 { - padding: 0 30rpx -} - -.p_center { - text-align: center; -} - -uni-tabbar .uni-tabbar__reddot { - background-color: #FF448F; -} - -.break_word { - overflow-wrap: break-word; - white-space: normal; -} - -.white-nowrap { - white-space: nowrap; -} - -.text-white { - color: #fff; -} - -.acea-row { - display: flex; - flex-wrap: wrap -} - -.acea-row.row-middle { - align-items: center -} - -.acea-row.row-top { - align-items: flex-start -} - -.acea-row.row-bottom { - align-items: flex-end -} - -.acea-row.row-center { - justify-content: center -} - -.acea-row.row-right { - justify-content: flex-end -} - -.acea-row.row-left { - justify-content: flex-start -} - -.acea-row.row-between { - justify-content: space-between -} - -.acea-row.row-around { - justify-content: space-around; -} - -.acea-row.row-column-around { - flex-direction: column; - justify-content: space-around; -} - -.acea-row.row-column { - flex-direction: column -} - -.acea-row.row-column-between { - flex-direction: column; - justify-content: space-between -} - -.acea-row.row-center-wrapper { - align-items: center; - justify-content: center -} - -.acea-row.row-between-wrapper { - align-items: center; - justify-content: space-between -} - -.items-baseline { - align-items: baseline; -} - -.flex-1 { - flex: 1; -} - -.flex-aj-center { - display: flex; - align-items: center; - justify-content: center -} - -.h-full { - height: 100%; -} - -* { - box-sizing: border-box -} - -page { - font-size: 28rpx; - color: #333; - background-color: #f5f5f5; -} - -button { - padding: 0; - margin: 0; - line-height: normal; - background-color: #fff -} - -button::after { - border: 0; -} - -radio .wx-radio-input { - border-radius: 50%; - width: 34rpx; - height: 34rpx -} - -radio .uni-radio-input { - border-radius: 50%; - width: 34rpx; - height: 34rpx -} - -checkbox .wx-checkbox-input { - border-radius: 50%; - width: 34rpx; - height: 34rpx -} - -checkbox .wx-checkbox-input.wx-checkbox-input-checked::before { - font-size: 24rpx -} - -checkbox .uni-checkbox-input { - border-radius: 50%; - width: 34rpx; - height: 34rpx -} - -checkbox .uni-checkbox-input.uni-checkbox-input-disabled { - background-color: #e1e1e1 !important; - border: 1px solid #e1e1e1 !important; -} - -checkbox .uni-checkbox-input.uni-checkbox-input-checked::before { - font-size: 24rpx -} - -.classify checkbox .wx-checkbox-input { - border-radius: 4rpx !important; - width: 28rpx; - height: 28rpx; - margin-top: -4rpx; -} - -.classify checkbox .wx-checkbox-input.wx-checkbox-input-checked, -.user-list checkbox .wx-checkbox-input.wx-checkbox-input-checked { - border: 1px solid #477ef3 !important; - background-color: #477ef3 !important; - color: #fff !important -} - -.splitOrder checkbox .wx-checkbox-input.wx-checkbox-input-checked { - border: 1px solid #477ef3 !important; - background-color: #477ef3 !important; - color: #fff !important -} - -.splitOrder checkbox .uni-checkbox-input.uni-checkbox-input-checked { - border: 1px solid #477ef3 !important; - background-color: #477ef3 !important; - color: #fff !important -} - -.line1 { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap -} - -.line2 { - word-break: break-all; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden -} - -.line3 { - word-break: break-all; - display: -webkit-box; - -webkit-line-clamp: 3; - -webkit-box-orient: vertical; - overflow: hidden -} - -.mask { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #000; - opacity: .5; - z-index: 5 -} - -@keyframes load { - from { - transform: rotate(0) - } - - to { - transform: rotate(360deg) - } -} - -@-webkit-keyframes load { - from { - transform: rotate(0) - } - - to { - transform: rotate(360deg) - } -} - -.loadingpic { - animation: load 3s linear 1s infinite; - --webkit-animation: load 3s linear 1s infinite -} - -.loading-list { - animation: load linear 1s infinite; - -webkit-animation: load linear 1s infinite; - font-size: 40rpx; - margin-right: 22rpx -} - -.loading { - width: 100%; - height: 100rpx; - line-height: 100rpx; - align-items: center; - justify-content: center; - position: relative; - text-align: center -} - -.loading .line { - position: absolute; - width: 450rpx; - left: 150rpx; - top: 50rpx; - height: 1px; - border-top: 1px solid #eee -} - -.loading .text { - position: relative; - display: inline-block; - padding: 0 20rpx; - background: #fff; - z-index: 2; - color: #777 -} - -.loadingicon .loading { - animation: load linear 1s infinite; - font-size: 40rpx; - color: #ccc; -} - -.loadingicon { - width: 100%; - margin-top: 32rpx; - overflow: hidden; - color: #ccc; -} - -.uni-p-b-98 { - height: 100rpx; - /* 兼容 IOS<11.2 */ - height: calc(100rpx + constant(safe-area-inset-bottom)); - /* 兼容 IOS>11.2 */ - height: calc(100rpx + env(safe-area-inset-bottom)); -} - - - -/* 临时css 后期尽量不要用或者删除*/ -.sign-record .list .item .data { - height: 80rpx; - line-height: 80rpx; - padding: 0 30rpx; - font-size: 24rpx; - color: #666; -} - -.sign-record .list .item .listn { - background-color: #fff; - font-size: 24rpx; - color: #999; -} - -.sign-record .list .item .listn .itemn { - height: 120rpx; - border-bottom: 1rpx solid #eee; - padding-right: 30rpx; - padding-left: 30rpx; -} - -.sign-record .list .item .listn .itemn .name { - width: 390rpx; - font-size: 28rpx; - color: #282828; - margin-bottom: 10rpx; -} - -.sign-record .list .item .listn .itemn .num { - font-size: 36rpx; - color: #16ac57; -} - -.sign-record .list .item .listn .itemn .num.font-color { - color: #e93323 !important; -} - -.coupon-list { - padding: 0 30rpx; - margin-top: 25rpx; -} - -.coupon-list .item { - width: 100%; - height: 170rpx; - margin-bottom: 20rpx; - background: #FFFFFF; -} - -.coupon-list .item .money { - width: 188rpx; - height: 100%; - color: #FACC7D; - font-size: 32rpx; - font-weight: 600; - text-align: center; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; -} - -.coupon-list .item .moneyCon, -.coupons .list .item .moneyCon { - background-color: var(--view-theme); - height: 100%; -} - -.coupon-list .item .money, -.coupons .list .item .price { - background-repeat: no-repeat; - background-size: 100% 100%; - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAABVCAMAAAC1iNAIAAAAolBMVEUAAAD////////////////////////////////////////////////////////////////w8PD////x8fH////////////////////09PT4+Pj4+Pj5+fn29vb29vb39/f09PT09PT29vb09PT19fX19fX39/f19fX29vb29vb19fX19fX09PT19fX19fX29vb19fX29vb19fX09PT09PT19fUjCUKaAAAANHRSTlMAAQIDBAUGBwgJCgsMDQ4PEBEREhITFBojRERHUlNXZHJzc3d7fX1+iJSdycvN8fL5+/3+S5lxYgAABUVJREFUaN69Wmlj3CYQBXTflDLUSY/E6eFeSWo3/P+/1g8SC0jDsa4UPnrZHc313puRidZa/0OuOrSkoY+01vrvq8y2AkQTMfzTNXarBZRSsgwa/uMSs8UISiml1IB//vzXJf7SXqrtzOQrnoaDsRvy+JLkztasghq/9OnNZcndDBf4tS9PJye3k55dBSzg8dtT7dbcN6sUVF8hueW8NxsursdvTjPLBqmQI3GXX96fiI8KPaK60nC9BMwqpWAeh/qaUJdT2KwxXlyKj64pwb3O4sXZAIImF5aaEupCp5rOBZAKSy6IdlUAzGkwWZwIIDt8NCaGG1wxnkTt85I7udxf354MmrOquuF4cv1bMx7q1/dxNaPJ7fbyrt2uwXgKgDA0uTAcuajZLgp2AoDQDm2hGRN2/fZpfwn5KaWAo0qWCqy0XgUgKPkp6SaXdtyU9i3F3f9UIDj5wVjsy12sfxkDavNOAKEBfKyQiEy+YWjOJj9/TGGDuSIIIYR0NhktfWVVFyj5yZ7i5S4pIYSU4DzhNLTs7j4O4WMRKHcDGDu1K9s7DTcZyfUiYgCD7poA2ntCHSc/rNxt+9COS3C+Ltl55IeUO7goRpmThPWRMgAkh/yOEYEdfDrEPOcBCE5+vE6U+5ZKjJjnHAAp0+SHR0RxhoP2ATxxfEyTXxMQ8sAbVpTOzcXkKFnVOeRXxYQ8AEh7W3jJj/Qxjo8e+eHljs9OBsK2gTlsmIk0PkqVcZb19pANIMf8IuSXcTYXp1DVJV3GyS/b8OiPUTEAaSGD/LJD7fyanGcEQIqbX3TJIL90cW1lzbyCOAAI7aW4magAJ78l36wjPDr3Wxj5gRWiIzIcpGdhfx9gI9U7Y6tf1dtwYGeNQibIL31cjVe0vSlJt48tGthJtoc4+WWXFtkF3Bp2N2N2oKRDLj4Ga2vftat7t1D7w8FCs+VAsrjGPTxIp7hKXBel5UCO5amk1HVkWtvpDVowguXIAfvjcdNCSG5xYFBKKfLlCS0YGNKz8C2LY9t26X3TwnyPv19wlZ6f3PUZS5mZ7JUeCeUplX5YBAegac6s73VeJj8/JLYYdYr8zF54SVZZ5Rr+99eoSs8gP7OC58mLpaM2D4Y9oMrCx20FT2Umhq3JJb89BIVcJj6uQyEpIC/ShNRSKUUgqNJzyW8zXEI2W9QCgHz+AVfpRTb5cX+rFHTYAUNa1eTL7/iKaryXfrrcSG/n849bcnd/L0K1AnLX1pOvXtNKxDGAraj6QOg4Y77iGomvXoM59hnv8Tvwhdxhxto9eE0Ioc1s3e5z8WPyl6gfltHDx3K/g0RLiRSDcbtznhNEBF5B8mW5CYuX99Qnv3k/3Sl8wUBYy8FWK5VrxljKcyMlXbFXzeDKngpSQqYaJWz3mclYlQSSNrAI5jTSUnsFxdqtPhgfCmy9FBS8ZoSxw4GNJtJSh7az1eFrqiSrbCOMS35WVnfoaquLT3uFzOLlT28P5Gd1IaoSFMipjr2Fypb4B/Kz6BYCYFhalr+I26V4Dejjtwj5zcdXKEe3h/JVytt0zcsvEMPVGNnB3GDKG0QfG543Fj1Kn92IF/sNEK7T5VqfMLCo8DPd+vQQg5fACgYl0sGRMBGta5Ag9HG0pY4bkRWyLMuFA2VgIvT5hO0j4u96eofl6nCG5PrN54/vEoIB/Y2FYZhlkXSOvjxv64porf/EFQ31prsg0JeTKLP/T8HuGonWWr+LkwhWKZMLPtPdIKIU0VrrjzjCsEhLrSWyuea9kaZ5GzCitdbPgW6JtZQsbq4BL9NL5P35Dy6VtHEa3VHxAAAAAElFTkSuQmCC'); -} - -.coupon-list .item .money.moneyGray, -.coupons .list .item .price.moneyGray { - background-color: #ccc; -} - -.coupon-list .item .money .num { - font-size: 60rpx; - font-family: SemiBold; -} - -.num-fa-semi { - font-family: SemiBold; -} - -.coupon-list .item .text { - flex: 1; - padding: 0 32rpx 0 24rpx; - box-sizing: border-box; - background-color: #fff; -} - -.coupon-list .item .text .condition { - font-size: 28rpx; - color: #333333; - height: 40rpx; -} - -.coupon-list .item .text .data { - margin-top: 8rpx; - font-size: 20rpx; - color: #666666; - height: 28rpx; - display: flex; - flex-wrap: nowrap; -} - -.coupon-list .item .bnt { - padding: 0 24rpx; - height: 52rpx; - border-radius: 26rpx; - font-size: 22rpx; - text-align: center; - line-height: 52rpx; - color: #FACC7D; -} - -.coupon-list .item .text .data .bnt.gray { - background: #ccc !important; -} - -.coupon-list .item.svip .money { - background-color: #EDBB75; -} - -.coupon-list .item.svip .condition .line-title { - border-color: #EEC181; - background-color: #FEF7EC; - color: #EEC181; -} - -.coupon-list .item.svip .bg-color { - background: linear-gradient(90deg, #EDC98A 0%, #EDBB75 100%); -} - -.coupon-list .item.svip .bnt.gray { - background: #CCCCCC; -} - -.coupon-list .item.svip .line1 .image { - width: 30rpx; - height: 30rpx; - margin-right: 10rpx; - vertical-align: middle; - z-index: 0; -} - -.noCommodity { - border-top: 7rpx solid #f5f5f5 -} - -.noCommodity .pictrue { - width: 414rpx; - height: 336rpx; - margin: 30rpx auto 30rpx auto -} - -.noCommodity .pictrue image { - width: 100%; - height: 100% -} - -.pictrue_log { - width: 80rpx; - height: 40rpx; - border-radius: 20rpx 0 20rpx 0; - line-height: 40rpx; - font-size: 24rpx -} - -.pictrue_log_class { - background-color: var(--view-theme); - opacity: 1; - position: absolute; - top: 0; - left: 0; - color: #fff; - text-align: center; - z-index: 3 -} - -.pictrue_log_medium { - width: 80rpx; - height: 44rpx; - border-radius: 20rpx 0 20rpx 0; - line-height: 44rpx; - text-align: center; - font-size: 26rpx -} - -.pictrue_log_big { - width: 100rpx; - height: 46rpx; - line-height: 46rpx; - border-radius: 20rpx 0 20rpx 0; - font-size: 28rpx -} - -.bg-color-hui { - background: #bbb !important -} - -uni-checkbox:not([disabled]) .uni-checkbox-input:hover { - border-color: #d1d1d1; -} - -uni-toast .uni-toast { - font-size: 30rpx; -} - -.status_bar { - height: var(--status-bar-height); -} - -.uni-p-b-140 { - height: 140rpx; -} - -.page-footer ::v-deep.uni-badge--x { - position: absolute !important; - top: -8rpx; -} - -.page-footer ::v-deep.uni-badge { - right: unset !important; - top: unset !important; -} - -.page-footer ::v-deep.uni-badge-left-margin .uni-badge--error { - color: #fff !important; - background-color: var(--view-theme) !important; - z-index: 8; -} - -.authorize checkbox .wx-checkbox-input { - width: 30rpx; - height: 30rpx; - margin-bottom: 5rpx; -} - -.border-theme-label { - display: inline-flex; - display: flex; - align-items: center; - flex-wrap: nowrap; - height: 26rpx; - padding: 0 6rpx; - border: 1rpx solid var(--view-theme); - border-radius: 6rpx; - font-size: 18rpx; - color: var(--view-theme); -} - -.border-red-label { - display: inline-flex; - display: flex; - align-items: center; - flex-wrap: nowrap; - height: 26rpx; - padding: 0 6rpx; - border: 1rpx solid #E93323; - border-radius: 6rpx; - font-size: 18rpx; - color: #E93323; -} - -.brand-tag { - position: relative; - top: -4rpx; - display: inline-block; - height: 30rpx; - padding: 0 6rpx; - border-radius: 6rpx; - margin-right: 8rpx; - background: var(--view-theme); - vertical-align: middle; - font-size: 18rpx; - line-height: 30rpx; - color: #FFFFFF; -} - -.svip-label { - position: relative; - bottom: -4rpx; - display: flex; - align-items: center; - height: 26rpx; - border-radius: 14rpx; - background-color: #F7E9CD; - font-size: 22rpx; - font-weight: 500; -} - -.svip-label .text { - height: 26rpx; - line-height: 28rpx; - border-radius: 14rpx 0 8rpx 14rpx; - font-size: 18rpx; - background-color: #484643; - color: #FDDAA4; - padding: 0 8rpx; -} - -.rotating-db { - animation: rotatedb 4s linear infinite; -} - -@keyframes rotatedb { - 0% { - transform: scale(1); - } - - 25% { - transform: scale(0.97); - } - - 75% { - transform: scale(1.03); - } - - 100% { - transform: scale(1); - } -} - -.page-back { - position: fixed; - left: 20rpx; - top: 20rpx; - z-index: 999; - background-color: rgba(255, 255, 255, 0.2); - border-radius: 50%; - width: 50rpx; - height: 50rpx; - - -} - -.page-back .iconfont { - color: #fff; +@charset "UTF-8"; + +.font-num, .font-color, .font-color-red { + color: var(--view-theme) !important +} + + +.bg-color { + background-color: var(--view-theme) !important +} + +.bg-light { + background-color: #fff; +} + +.icon-color { + color: #ff3c2b +} + +.cart-color { + color: var(--view-theme) !important; + border: 1px solid var(--view-theme) !important +} + +.bg-gradient { + background: linear-gradient(90deg, var(--view-theme) 0, var(--view-gradient) 100%); +} + +.bg-gradient1 { + background: linear-gradient(90deg, var(--view-gradient) 0, var(--view-theme) 100%); +} + +.borderRadius15 { + border-radius: 15rpx !important; +} + +.borderRadius20 { + border-radius: 20rpx !important; +} + +.padding20 { + padding: 20rpx +} + +.pad20 { + padding: 0 20rpx +} + +.padding30 { + padding: 30rpx +} + +.pad30 { + padding: 0 30rpx +} + +.p_center { + text-align: center; +} + +uni-tabbar .uni-tabbar__reddot { + background-color: #FF448F; +} + +.break_word { + overflow-wrap: break-word; + white-space: normal; +} + +.white-nowrap { + white-space: nowrap; +} + +.text-white { + color: #fff; +} + +.acea-row { + display: flex; + flex-wrap: wrap +} + +.acea-row.row-middle { + align-items: center +} + +.acea-row.row-top { + align-items: flex-start +} + +.acea-row.row-bottom { + align-items: flex-end +} + +.acea-row.row-center { + justify-content: center +} + +.acea-row.row-right { + justify-content: flex-end +} + +.acea-row.row-left { + justify-content: flex-start +} + +.acea-row.row-between { + justify-content: space-between +} + +.acea-row.row-around { + justify-content: space-around; +} + +.acea-row.row-column-around { + flex-direction: column; + justify-content: space-around; +} + +.acea-row.row-column { + flex-direction: column +} + +.acea-row.row-column-between { + flex-direction: column; + justify-content: space-between +} + +.acea-row.row-center-wrapper { + align-items: center; + justify-content: center +} + +.acea-row.row-between-wrapper { + align-items: center; + justify-content: space-between +} + +.items-baseline { + align-items: baseline; +} + +.flex-1 { + flex: 1; +} + +.flex-aj-center { + display: flex; + align-items: center; + justify-content: center +} + +.h-full { + height: 100%; +} + +* { + box-sizing: border-box +} + +page { + font-size: 28rpx; + color: #333; + background-color: #f5f5f5; +} + +button { + padding: 0; + margin: 0; + line-height: normal; + background-color: #fff +} + +button::after { + border: 0; +} + +radio .wx-radio-input { + border-radius: 50%; + width: 34rpx; + height: 34rpx +} + +radio .uni-radio-input { + border-radius: 50%; + width: 34rpx; + height: 34rpx +} + +checkbox .wx-checkbox-input { + border-radius: 50%; + width: 34rpx; + height: 34rpx +} + +checkbox .wx-checkbox-input.wx-checkbox-input-checked::before { + font-size: 24rpx +} + +checkbox .uni-checkbox-input { + border-radius: 50%; + width: 34rpx; + height: 34rpx +} + +checkbox .uni-checkbox-input.uni-checkbox-input-disabled { + background-color: #e1e1e1 !important; + border: 1px solid #e1e1e1 !important; +} + +checkbox .uni-checkbox-input.uni-checkbox-input-checked::before { + font-size: 24rpx +} + +.classify checkbox .wx-checkbox-input { + border-radius: 4rpx !important; + width: 28rpx; + height: 28rpx; + margin-top: -4rpx; +} + +.classify checkbox .wx-checkbox-input.wx-checkbox-input-checked, +.user-list checkbox .wx-checkbox-input.wx-checkbox-input-checked { + border: 1px solid #477ef3 !important; + background-color: #477ef3 !important; + color: #fff !important +} + +.splitOrder checkbox .wx-checkbox-input.wx-checkbox-input-checked { + border: 1px solid #477ef3 !important; + background-color: #477ef3 !important; + color: #fff !important +} + +.splitOrder checkbox .uni-checkbox-input.uni-checkbox-input-checked { + border: 1px solid #477ef3 !important; + background-color: #477ef3 !important; + color: #fff !important +} + +.line1 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +.line2 { + word-break: break-all; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden +} + +.line3 { + word-break: break-all; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden +} + +.mask { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #000; + opacity: .5; + z-index: 5 +} + +@keyframes load { + from { + transform: rotate(0) + } + + to { + transform: rotate(360deg) + } +} + +@-webkit-keyframes load { + from { + transform: rotate(0) + } + + to { + transform: rotate(360deg) + } +} + +.loadingpic { + animation: load 3s linear 1s infinite; + --webkit-animation: load 3s linear 1s infinite +} + +.loading-list { + animation: load linear 1s infinite; + -webkit-animation: load linear 1s infinite; + font-size: 40rpx; + margin-right: 22rpx +} + +.loading { + width: 100%; + height: 100rpx; + line-height: 100rpx; + align-items: center; + justify-content: center; + position: relative; + text-align: center +} + +.loading .line { + position: absolute; + width: 450rpx; + left: 150rpx; + top: 50rpx; + height: 1px; + border-top: 1px solid #eee +} + +.loading .text { + position: relative; + display: inline-block; + padding: 0 20rpx; + background: #fff; + z-index: 2; + color: #777 +} + +.loadingicon .loading { + animation: load linear 1s infinite; + font-size: 40rpx; + color: #ccc; +} + +.loadingicon { + width: 100%; + margin-top: 32rpx; + overflow: hidden; + color: #ccc; +} + +.uni-p-b-98 { + height: 100rpx; + /* 兼容 IOS<11.2 */ + height: calc(100rpx + constant(safe-area-inset-bottom)); + /* 兼容 IOS>11.2 */ + height: calc(100rpx + env(safe-area-inset-bottom)); +} + + + +/* 临时css 后期尽量不要用或者删除*/ +.sign-record .list .item .data { + height: 80rpx; + line-height: 80rpx; + padding: 0 30rpx; + font-size: 24rpx; + color: #666; +} + +.sign-record .list .item .listn { + background-color: #fff; + font-size: 24rpx; + color: #999; +} + +.sign-record .list .item .listn .itemn { + height: 120rpx; + border-bottom: 1rpx solid #eee; + padding-right: 30rpx; + padding-left: 30rpx; +} + +.sign-record .list .item .listn .itemn .name { + width: 390rpx; + font-size: 28rpx; + color: #282828; + margin-bottom: 10rpx; +} + +.sign-record .list .item .listn .itemn .num { + font-size: 36rpx; + color: #16ac57; +} + +.sign-record .list .item .listn .itemn .num.font-color { + color: #e93323 !important; +} + +.coupon-list { + padding: 0 30rpx; + margin-top: 25rpx; +} + +.coupon-list .item { + width: 100%; + height: 170rpx; + margin-bottom: 20rpx; + background: #FFFFFF; +} + +.coupon-list .item .money { + width: 188rpx; + height: 100%; + color: #FACC7D; + font-size: 32rpx; + font-weight: 600; + text-align: center; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.coupon-list .item .moneyCon, +.coupons .list .item .moneyCon { + background-color: var(--view-theme); + height: 100%; +} + +.coupon-list .item .money, +.coupons .list .item .price { + background-repeat: no-repeat; + background-size: 100% 100%; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAABVCAMAAAC1iNAIAAAAolBMVEUAAAD////////////////////////////////////////////////////////////////w8PD////x8fH////////////////////09PT4+Pj4+Pj5+fn29vb29vb39/f09PT09PT29vb09PT19fX19fX39/f19fX29vb29vb19fX19fX09PT19fX19fX29vb19fX29vb19fX09PT09PT19fUjCUKaAAAANHRSTlMAAQIDBAUGBwgJCgsMDQ4PEBEREhITFBojRERHUlNXZHJzc3d7fX1+iJSdycvN8fL5+/3+S5lxYgAABUVJREFUaN69Wmlj3CYQBXTflDLUSY/E6eFeSWo3/P+/1g8SC0jDsa4UPnrZHc313puRidZa/0OuOrSkoY+01vrvq8y2AkQTMfzTNXarBZRSsgwa/uMSs8UISiml1IB//vzXJf7SXqrtzOQrnoaDsRvy+JLkztasghq/9OnNZcndDBf4tS9PJye3k55dBSzg8dtT7dbcN6sUVF8hueW8NxsursdvTjPLBqmQI3GXX96fiI8KPaK60nC9BMwqpWAeh/qaUJdT2KwxXlyKj64pwb3O4sXZAIImF5aaEupCp5rOBZAKSy6IdlUAzGkwWZwIIDt8NCaGG1wxnkTt85I7udxf354MmrOquuF4cv1bMx7q1/dxNaPJ7fbyrt2uwXgKgDA0uTAcuajZLgp2AoDQDm2hGRN2/fZpfwn5KaWAo0qWCqy0XgUgKPkp6SaXdtyU9i3F3f9UIDj5wVjsy12sfxkDavNOAKEBfKyQiEy+YWjOJj9/TGGDuSIIIYR0NhktfWVVFyj5yZ7i5S4pIYSU4DzhNLTs7j4O4WMRKHcDGDu1K9s7DTcZyfUiYgCD7poA2ntCHSc/rNxt+9COS3C+Ltl55IeUO7goRpmThPWRMgAkh/yOEYEdfDrEPOcBCE5+vE6U+5ZKjJjnHAAp0+SHR0RxhoP2ATxxfEyTXxMQ8sAbVpTOzcXkKFnVOeRXxYQ8AEh7W3jJj/Qxjo8e+eHljs9OBsK2gTlsmIk0PkqVcZb19pANIMf8IuSXcTYXp1DVJV3GyS/b8OiPUTEAaSGD/LJD7fyanGcEQIqbX3TJIL90cW1lzbyCOAAI7aW4magAJ78l36wjPDr3Wxj5gRWiIzIcpGdhfx9gI9U7Y6tf1dtwYGeNQibIL31cjVe0vSlJt48tGthJtoc4+WWXFtkF3Bp2N2N2oKRDLj4Ga2vftat7t1D7w8FCs+VAsrjGPTxIp7hKXBel5UCO5amk1HVkWtvpDVowguXIAfvjcdNCSG5xYFBKKfLlCS0YGNKz8C2LY9t26X3TwnyPv19wlZ6f3PUZS5mZ7JUeCeUplX5YBAegac6s73VeJj8/JLYYdYr8zF54SVZZ5Rr+99eoSs8gP7OC58mLpaM2D4Y9oMrCx20FT2Umhq3JJb89BIVcJj6uQyEpIC/ShNRSKUUgqNJzyW8zXEI2W9QCgHz+AVfpRTb5cX+rFHTYAUNa1eTL7/iKaryXfrrcSG/n849bcnd/L0K1AnLX1pOvXtNKxDGAraj6QOg4Y77iGomvXoM59hnv8Tvwhdxhxto9eE0Ioc1s3e5z8WPyl6gfltHDx3K/g0RLiRSDcbtznhNEBF5B8mW5CYuX99Qnv3k/3Sl8wUBYy8FWK5VrxljKcyMlXbFXzeDKngpSQqYaJWz3mclYlQSSNrAI5jTSUnsFxdqtPhgfCmy9FBS8ZoSxw4GNJtJSh7az1eFrqiSrbCOMS35WVnfoaquLT3uFzOLlT28P5Gd1IaoSFMipjr2Fypb4B/Kz6BYCYFhalr+I26V4Dejjtwj5zcdXKEe3h/JVytt0zcsvEMPVGNnB3GDKG0QfG543Fj1Kn92IF/sNEK7T5VqfMLCo8DPd+vQQg5fACgYl0sGRMBGta5Ag9HG0pY4bkRWyLMuFA2VgIvT5hO0j4u96eofl6nCG5PrN54/vEoIB/Y2FYZhlkXSOvjxv64porf/EFQ31prsg0JeTKLP/T8HuGonWWr+LkwhWKZMLPtPdIKIU0VrrjzjCsEhLrSWyuea9kaZ5GzCitdbPgW6JtZQsbq4BL9NL5P35Dy6VtHEa3VHxAAAAAElFTkSuQmCC'); +} + +.coupon-list .item .money.moneyGray, +.coupons .list .item .price.moneyGray { + background-color: #ccc; +} + +.coupon-list .item .money .num { + font-size: 60rpx; + font-family: SemiBold; +} + +.num-fa-semi { + font-family: SemiBold; +} + +.coupon-list .item .text { + flex: 1; + padding: 0 32rpx 0 24rpx; + box-sizing: border-box; + background-color: #fff; +} + +.coupon-list .item .text .condition { + font-size: 28rpx; + color: #333333; + height: 40rpx; +} + +.coupon-list .item .text .data { + margin-top: 8rpx; + font-size: 20rpx; + color: #666666; + height: 28rpx; + display: flex; + flex-wrap: nowrap; +} + +.coupon-list .item .bnt { + padding: 0 24rpx; + height: 52rpx; + border-radius: 26rpx; + font-size: 22rpx; + text-align: center; + line-height: 52rpx; + color: #FACC7D; +} + +.coupon-list .item .text .data .bnt.gray { + background: #ccc !important; +} + +.coupon-list .item.svip .money { + background-color: #EDBB75; +} + +.coupon-list .item.svip .condition .line-title { + border-color: #EEC181; + background-color: #FEF7EC; + color: #EEC181; +} + +.coupon-list .item.svip .bg-color { + background: linear-gradient(90deg, #EDC98A 0%, #EDBB75 100%); +} + +.coupon-list .item.svip .bnt.gray { + background: #CCCCCC; +} + +.coupon-list .item.svip .line1 .image { + width: 30rpx; + height: 30rpx; + margin-right: 10rpx; + vertical-align: middle; + z-index: 0; +} + +.noCommodity { + border-top: 7rpx solid #f5f5f5 +} + +.noCommodity .pictrue { + width: 414rpx; + height: 336rpx; + margin: 30rpx auto 30rpx auto +} + +.noCommodity .pictrue image { + width: 100%; + height: 100% +} + +.pictrue_log { + width: 80rpx; + height: 40rpx; + border-radius: 20rpx 0 20rpx 0; + line-height: 40rpx; + font-size: 24rpx +} + +.pictrue_log_class { + background-color: var(--view-theme); + opacity: 1; + position: absolute; + top: 0; + left: 0; + color: #fff; + text-align: center; + z-index: 3 +} + +.pictrue_log_medium { + width: 80rpx; + height: 44rpx; + border-radius: 20rpx 0 20rpx 0; + line-height: 44rpx; + text-align: center; + font-size: 26rpx +} + +.pictrue_log_big { + width: 100rpx; + height: 46rpx; + line-height: 46rpx; + border-radius: 20rpx 0 20rpx 0; + font-size: 28rpx +} + +.bg-color-hui { + background: #bbb !important +} + +uni-checkbox:not([disabled]) .uni-checkbox-input:hover { + border-color: #d1d1d1; +} + +uni-toast .uni-toast { + font-size: 30rpx; +} + +.status_bar { + height: var(--status-bar-height); +} + +.uni-p-b-140 { + height: 140rpx; +} + +.page-footer ::v-deep.uni-badge--x { + position: absolute !important; + top: -8rpx; +} + +.page-footer ::v-deep.uni-badge { + right: unset !important; + top: unset !important; +} + +.page-footer ::v-deep.uni-badge-left-margin .uni-badge--error { + color: #fff !important; + background-color: var(--view-theme) !important; + z-index: 8; +} + +.authorize checkbox .wx-checkbox-input { + width: 30rpx; + height: 30rpx; + margin-bottom: 5rpx; +} + +.border-theme-label { + display: inline-flex; + display: flex; + align-items: center; + flex-wrap: nowrap; + height: 26rpx; + padding: 0 6rpx; + border: 1rpx solid var(--view-theme); + border-radius: 6rpx; + font-size: 18rpx; + color: var(--view-theme); +} + +.border-red-label { + display: inline-flex; + display: flex; + align-items: center; + flex-wrap: nowrap; + height: 26rpx; + padding: 0 6rpx; + border: 1rpx solid #E93323; + border-radius: 6rpx; + font-size: 18rpx; + color: #E93323; +} + +.brand-tag { + position: relative; + top: -4rpx; + display: inline-block; + height: 30rpx; + padding: 0 6rpx; + border-radius: 6rpx; + margin-right: 8rpx; + background: var(--view-theme); + vertical-align: middle; + font-size: 18rpx; + line-height: 30rpx; + color: #FFFFFF; +} + +.svip-label { + position: relative; + bottom: -4rpx; + display: flex; + align-items: center; + height: 26rpx; + border-radius: 14rpx; + background-color: #F7E9CD; + font-size: 22rpx; + font-weight: 500; +} + +.svip-label .text { + height: 26rpx; + line-height: 28rpx; + border-radius: 14rpx 0 8rpx 14rpx; + font-size: 18rpx; + background-color: #484643; + color: #FDDAA4; + padding: 0 8rpx; +} + +.rotating-db { + animation: rotatedb 4s linear infinite; +} + +@keyframes rotatedb { + 0% { + transform: scale(1); + } + + 25% { + transform: scale(0.97); + } + + 75% { + transform: scale(1.03); + } + + 100% { + transform: scale(1); + } +} + +.page-back { + position: fixed; + left: 20rpx; + top: 20rpx; + z-index: 999; + background-color: rgba(255, 255, 255, 0.2); + border-radius: 50%; + width: 50rpx; + height: 50rpx; + + +} + +.page-back .iconfont { + color: #fff; } \ No newline at end of file diff --git a/static/css/unocss.css b/static/css/unocss.css index f61d39c..fddcf06 100644 --- a/static/css/unocss.css +++ b/static/css/unocss.css @@ -1,2802 +1,2802 @@ -.flex-between-center { - display: flex; - justify-content: space-between; - align-items: center; -} - -.flex-around-center { - display: flex; - justify-content: space-around; - align-items: center; -} - -.flex-center { - display: flex; - justify-content: center; - align-items: center; -} - -.flex-col { - display: flex; - flex-direction: column; -} - -.flex-x-center { - display: flex; - justify-content: center; -} - -.flex-y-center { - display: flex; - align-items: center; -} - -.self-center { - align-self: center; -} - -.grid-column-2 { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - grid-template-rows: none; -} - -.grid-column-3 { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - grid-template-rows: none; -} - -.grid-column-4 { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - grid-template-rows: none; -} - -.grid-column-5 { - display: grid; - grid-template-columns: repeat(5, minmax(0, 1fr)); - grid-template-rows: none; -} - -.abs-lb { - position: absolute; - left: 0; - bottom: 0; -} - -.abs-rb { - position: absolute; - right: 0; - bottom: 0; -} - -.abs-lt { - position: absolute; - left: 0; - top: 0; -} - -.abs-rt { - position: absolute; - right: 0; - top: 0; -} - -.abs-y-center { - position: absolute; - top: 50%; - --un-translate-y: -50%; - transform: translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) - translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) - rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) - rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) - scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) - scaleZ(var(--un-scale-z)); -} - -.fixed-lb { - position: fixed; - left: 0; - bottom: 0; -} - -.fixed-lt { - position: fixed; - left: 0; - top: 0; -} - -.abs-center { - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); -} - -.p-30rpx, -.p-30 { - padding: 30rpx; -} - -.px { - padding-left: 32rpx; - padding-right: 32rpx; -} - -.px-16rpx { - padding-left: 16rpx; - padding-right: 16rpx; -} - -.px-24rpx { - padding-left: 24rpx; - padding-right: 24rpx; -} - -.px-44rpx { - padding-left: 44rpx; - padding-right: 44rpx; -} - -.py-16rpx { - padding-top: 16rpx; - padding-bottom: 16rpx; -} - -.py-80 { - padding-top: 80rpx; - padding-bottom: 80rpx; -} - -.pb-26rpx { - padding-bottom: 26rpx; -} - -.pt-100rpx { - padding-top: 100rpx; -} - -.pt-10 { - padding-top: 10rpx; -} - -.pt-20, -.pt-20rpx { - padding-top: 20rpx; -} - -.pt-320rpx { - padding-top: 320rpx; -} - -.mb-40, -.mb-40rpx { - margin-bottom: 40rpx; -} - -.ml-20, -.ml-20rpx { - margin-left: 20rpx; -} - -.ml-50 { - margin-left: 50rpx; -} - -.ml-52 { - margin-left: 52rpx; -} - -.ml-70 { - margin-left: 70rpx; -} - -.mt-100rpx { - margin-top: 100rpx; -} - -.mt-200rpx { - margin-top: 200rpx; -} - -.mt-20, -.mt-20rpx { - margin-top: 20rpx; -} - -.mt-22 { - margin-top: 22rpx; -} - -.mt-60rpx { - margin-top: 60rpx; -} - -.mt-6, -.mt-6rpx { - margin-top: 6rpx; -} - -.mt-7, -.mt-7rpx { - margin-top: 7rpx; +.flex-between-center { + display: flex; + justify-content: space-between; + align-items: center; +} + +.flex-around-center { + display: flex; + justify-content: space-around; + align-items: center; +} + +.flex-center { + display: flex; + justify-content: center; + align-items: center; +} + +.flex-col { + display: flex; + flex-direction: column; +} + +.flex-x-center { + display: flex; + justify-content: center; +} + +.flex-y-center { + display: flex; + align-items: center; +} + +.self-center { + align-self: center; +} + +.grid-column-2 { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + grid-template-rows: none; +} + +.grid-column-3 { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + grid-template-rows: none; +} + +.grid-column-4 { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + grid-template-rows: none; +} + +.grid-column-5 { + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + grid-template-rows: none; +} + +.abs-lb { + position: absolute; + left: 0; + bottom: 0; +} + +.abs-rb { + position: absolute; + right: 0; + bottom: 0; +} + +.abs-lt { + position: absolute; + left: 0; + top: 0; +} + +.abs-rt { + position: absolute; + right: 0; + top: 0; +} + +.abs-y-center { + position: absolute; + top: 50%; + --un-translate-y: -50%; + transform: translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) + translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) + rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) + rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) + scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) + scaleZ(var(--un-scale-z)); +} + +.fixed-lb { + position: fixed; + left: 0; + bottom: 0; +} + +.fixed-lt { + position: fixed; + left: 0; + top: 0; +} + +.abs-center { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); +} + +.p-30rpx, +.p-30 { + padding: 30rpx; +} + +.px { + padding-left: 32rpx; + padding-right: 32rpx; +} + +.px-16rpx { + padding-left: 16rpx; + padding-right: 16rpx; +} + +.px-24rpx { + padding-left: 24rpx; + padding-right: 24rpx; +} + +.px-44rpx { + padding-left: 44rpx; + padding-right: 44rpx; +} + +.py-16rpx { + padding-top: 16rpx; + padding-bottom: 16rpx; +} + +.py-80 { + padding-top: 80rpx; + padding-bottom: 80rpx; +} + +.pb-26rpx { + padding-bottom: 26rpx; +} + +.pt-100rpx { + padding-top: 100rpx; +} + +.pt-10 { + padding-top: 10rpx; +} + +.pt-20, +.pt-20rpx { + padding-top: 20rpx; +} + +.pt-320rpx { + padding-top: 320rpx; +} + +.mb-40, +.mb-40rpx { + margin-bottom: 40rpx; +} + +.ml-20, +.ml-20rpx { + margin-left: 20rpx; +} + +.ml-50 { + margin-left: 50rpx; +} + +.ml-52 { + margin-left: 52rpx; +} + +.ml-70 { + margin-left: 70rpx; +} + +.mt-100rpx { + margin-top: 100rpx; +} + +.mt-200rpx { + margin-top: 200rpx; +} + +.mt-20, +.mt-20rpx { + margin-top: 20rpx; +} + +.mt-22 { + margin-top: 22rpx; +} + +.mt-60rpx { + margin-top: 60rpx; +} + +.mt-6, +.mt-6rpx { + margin-top: 6rpx; +} + +.mt-7, +.mt-7rpx { + margin-top: 7rpx; } .mt-76, .mt-76rpx{ margin-top: 76rpx; -} - -.mt-80, -.mt-80rpx { - margin-top: 80rpx; -} - -.mt-8, -.mt-8rpx { - margin-top: 8rpx; -} - -.inline { - display: inline; -} - -.block { - display: block; -} - -.inline-block { - display: inline-block; -} - -.hidden { - display: none; -} - -.bg--w111-000 { - background-color: rgba(0, 0, 0, 1); -} - -.bg--w111-bbb { - background-color: rgba(187, 187, 187, 1); -} - -.bg--w111-ccc { - background-color: rgba(204, 204, 204, 1); -} - -.bg--w111-d8d8d8 { - background-color: rgba(216, 216, 216, 1); -} - -.bg--w111-E93323 { - background-color: rgba(233, 51, 35, 1); -} - -.bg--w111-eee { - background-color: rgba(238, 238, 238, 1); -} - -.bg--w111-f5f5f5 { - background-color: rgba(245, 245, 245, 1); -} - -.bg--w111-F7E9CD { - background-color: rgba(247, 233, 205, 1); -} - -.bg--w111-FAAD14 { - background-color: rgba(250, 173, 20, 1); -} - -.bg--w111-FCEAE9 { - background-color: rgba(252, 234, 233, 1); -} - -.bg--w111-FCF6E5 { - background-color: rgba(252, 246, 229, 1); -} - -.bg--w111-FFF0D1 { - background-color: #fff0d1; -} - -.bg--w111-fff { - background-color: rgba(255, 255, 255, 1); -} - -.bg--w111-fff-s111-80 { - background-color: rgba(255, 255, 255, 0.8); -} - -.bg--w111-F6EDDE { - background-color: #f6edde; -} - -.bg--w111-f9f9f9 { - background-color: #f9f9f9; -} - -.bg-hui { - background-color: #ccc; -} - -.bg-primary-con { - background-color: var(--view-theme); -} - -.bg-primary-light { - background-color: var(--primary-theme-light); -} - -.b, -.border { - border-width: 1px; -} - -.border-b { - border-bottom-width: 1px; -} - -.b--w111-ccc { - border-color: rgba(204, 204, 204, 1); -} - -.rd-12rpx { - border-radius: 12rpx; -} - -.rd-14rpx { - border-radius: 14rpx; -} - -.rd-16 { - border-radius: 128rpx; -} - -.rd-16rpx { - border-radius: 16rpx; -} - -.rd-20px { - border-radius: 20px; -} - -.rd-20rpx { - border-radius: 20rpx; -} - -.rd-24 { - border-radius: 192rpx; -} - -.rd-24px { - border-radius: 24px; -} - -.rd-24rpx { - border-radius: 24rpx; -} - -.rd-28rpx { - border-radius: 28rpx; -} - -.rd-2rpx { - border-radius: 2rpx; -} - -.rd-30 { - border-radius: 240rpx; -} - -.rd-30rpx { - border-radius: 30rpx; -} - -.rd-32rpx { - border-radius: 32rpx; -} - -.rd-36px { - border-radius: 36px; -} - -.rd-36rpx { - border-radius: 36rpx; -} - -.rd-3px { - border-radius: 3px; -} - -.rd-40rpx { - border-radius: 40rpx; -} - -.rd-44rpx { - border-radius: 44rpx; -} - -.rd-4rpx { - border-radius: 4rpx; -} - -.rd-50-p111- { - border-radius: 50%; -} - -.rd-50rpx { - border-radius: 50rpx; -} - -.rd-6rpx { - border-radius: 6rpx; -} - -.rd-8px { - border-radius: 8px; -} - -.rd-8rpx { - border-radius: 8rpx; -} - -.rd-b-16rpx { - border-bottom-left-radius: 16rpx; - border-bottom-right-radius: 16rpx; -} - -.rd-b-20rpx { - border-bottom-left-radius: 20rpx; - border-bottom-right-radius: 20rpx; -} - -.rd-b-24rpx { - border-bottom-left-radius: 24rpx; - border-bottom-right-radius: 24rpx; -} - -.rd-b-32rpx { - border-bottom-left-radius: 32rpx; - border-bottom-right-radius: 32rpx; -} - -.rd-l-32rpx { - border-top-left-radius: 32rpx; - border-bottom-left-radius: 32rpx; -} - -.rd-r-32rpx { - border-top-right-radius: 32rpx; - border-bottom-right-radius: 32rpx; -} - -.rd-t-32rpx { - border-top-left-radius: 32rpx; - border-top-right-radius: 32rpx; -} - -.rd-t-8rpx { - border-top-left-radius: 8rpx; - border-top-right-radius: 8rpx; -} - -.rd-b-8rpx { - border-bottom-left-radius: 8rpx; - border-bottom-right-radius: 8rpx; -} - -.rd-t-16rpx { - border-top-left-radius: 16rpx; - border-top-right-radius: 16rpx; -} - -.rd-t-20rpx { - border-top-left-radius: 20rpx; - border-top-right-radius: 20rpx; -} - -.rd-t-24rpx { - border-top-left-radius: 24rpx; - border-top-right-radius: 24rpx; -} - -.rd-t-40rpx { - border-top-left-radius: 40rpx; - border-top-right-radius: 40rpx; -} - -.rd-rt-12rpx { - border-top-right-radius: 12rpx; -} - -.b-solid { - border-style: solid; -} - -.bg-red { - background-color: #e93323; -} - -.fs-24, -.text-24rpx { - font-size: 24rpx; -} - -.fs-28, -.text-28rpx { - font-size: 28rpx; -} - -.fs-30, -.text-30rpx { - font-size: 30rpx; -} - -.fs-38 { - font-size: 38rpx; -} - -.fw-400 { - font-weight: 400; -} - -.fw-500 { - font-weight: 500; -} - -.fw-600 { - font-weight: 600; -} - -.fw-700, -.fw-bold { - font-weight: 700; -} - -.lh-22rpx { - line-height: 22rpx; -} - -.lh-24rpx { - line-height: 24rpx; -} - -.lh-26rpx { - line-height: 26rpx; -} - -.lh-28rpx { - line-height: 28rpx; -} - -.lh-30rpx { - line-height: 30rpx; -} - -.lh-32rpx { - line-height: 32rpx; -} - -.lh-34rpx { - line-height: 34rpx; -} - -.lh-36rpx { - line-height: 36rpx; -} - -.lh-38rpx { - line-height: 38rpx; -} - -.lh-40rpx { - line-height: 40rpx; -} - -.lh-42rpx { - line-height: 42rpx; -} - -.lh-44rpx { - line-height: 44rpx; -} - -.lh-48rpx { - line-height: 48rpx; -} - -.lh-50rpx { - line-height: 50rpx; -} - -.lh-52rpx { - line-height: 52rpx; -} - -.lh-54rpx { - line-height: 54rpx; -} - -.lh-56rpx { - line-height: 56rpx; -} - -.lh-60rpx { - line-height: 60rpx; -} - -.lh-80rpx { - line-height: 80rpx; -} - -.lh-88rpx { - line-height: 88rpx; -} - -.line-through { - text-decoration-line: line-through; -} - -.text-center { - text-align: center; -} - -.text-right { - text-align: right; -} - -.text--w111-eee { - color: #eee; -} - -.text--w111-222 { - color: rgba(34, 34, 34, 1); -} - -.text--w111-282828 { - color: rgba(40, 40, 40, 1); -} - -.text--w111-333 { - color: rgba(51, 51, 51, 1); -} - -.text--w111-000 { - color: #000; -} - -.text--w111-3d3d3d { - color: rgba(61, 61, 61, 1); -} - -.text--w111-666 { - color: rgba(102, 102, 102, 1); -} - -.text--w111-763B04 { - color: rgba(118, 59, 4, 1); -} - -.text--w111-7E4B06 { - color: rgba(126, 75, 6, 1); -} - -.text--w111-888 { - color: rgba(136, 136, 136, 1); -} - -.text--w111-8e8e8e { - color: rgba(142, 142, 142, 1); -} - -.text--w111-999 { - color: rgba(153, 153, 153, 1); -} - -.text--w111-aaa { - color: rgba(170, 170, 170, 1); -} - -.text--w111-ccc { - color: #ccc; -} - -.text--w111-666 { - color: #666; -} - -.text--w111-b3b3b3 { - color: rgba(179, 179, 179, 1); -} - -.text--w111-e93323 { - color: rgba(233, 51, 35, 1); -} - -.text--w111-FAAD14 { - color: rgba(250, 173, 20, 1); -} - -.text--w111-FFD89C { - color: rgba(255, 216, 156, 1); -} - -.text--w111-fff { - color: rgba(255, 255, 255, 1); -} - -.text--w111-D48D2D { - color: #d48d2d; -} -.text--w111-CA790F { - color: #ca790f; -} -.text--w111-AE5A2A { - color: #ae5a2a; +} + +.mt-80, +.mt-80rpx { + margin-top: 80rpx; +} + +.mt-8, +.mt-8rpx { + margin-top: 8rpx; +} + +.inline { + display: inline; +} + +.block { + display: block; +} + +.inline-block { + display: inline-block; +} + +.hidden { + display: none; +} + +.bg--w111-000 { + background-color: rgba(0, 0, 0, 1); +} + +.bg--w111-bbb { + background-color: rgba(187, 187, 187, 1); +} + +.bg--w111-ccc { + background-color: rgba(204, 204, 204, 1); +} + +.bg--w111-d8d8d8 { + background-color: rgba(216, 216, 216, 1); +} + +.bg--w111-E93323 { + background-color: rgba(233, 51, 35, 1); +} + +.bg--w111-eee { + background-color: rgba(238, 238, 238, 1); +} + +.bg--w111-f5f5f5 { + background-color: rgba(245, 245, 245, 1); +} + +.bg--w111-F7E9CD { + background-color: rgba(247, 233, 205, 1); +} + +.bg--w111-FAAD14 { + background-color: rgba(250, 173, 20, 1); +} + +.bg--w111-FCEAE9 { + background-color: rgba(252, 234, 233, 1); +} + +.bg--w111-FCF6E5 { + background-color: rgba(252, 246, 229, 1); +} + +.bg--w111-FFF0D1 { + background-color: #fff0d1; +} + +.bg--w111-fff { + background-color: rgba(255, 255, 255, 1); +} + +.bg--w111-fff-s111-80 { + background-color: rgba(255, 255, 255, 0.8); +} + +.bg--w111-F6EDDE { + background-color: #f6edde; +} + +.bg--w111-f9f9f9 { + background-color: #f9f9f9; +} + +.bg-hui { + background-color: #ccc; +} + +.bg-primary-con { + background-color: var(--view-theme); +} + +.bg-primary-light { + background-color: var(--primary-theme-light); +} + +.b, +.border { + border-width: 1px; +} + +.border-b { + border-bottom-width: 1px; +} + +.b--w111-ccc { + border-color: rgba(204, 204, 204, 1); +} + +.rd-12rpx { + border-radius: 12rpx; +} + +.rd-14rpx { + border-radius: 14rpx; +} + +.rd-16 { + border-radius: 128rpx; +} + +.rd-16rpx { + border-radius: 16rpx; +} + +.rd-20px { + border-radius: 20px; +} + +.rd-20rpx { + border-radius: 20rpx; +} + +.rd-24 { + border-radius: 192rpx; +} + +.rd-24px { + border-radius: 24px; +} + +.rd-24rpx { + border-radius: 24rpx; +} + +.rd-28rpx { + border-radius: 28rpx; +} + +.rd-2rpx { + border-radius: 2rpx; +} + +.rd-30 { + border-radius: 240rpx; +} + +.rd-30rpx { + border-radius: 30rpx; +} + +.rd-32rpx { + border-radius: 32rpx; +} + +.rd-36px { + border-radius: 36px; +} + +.rd-36rpx { + border-radius: 36rpx; +} + +.rd-3px { + border-radius: 3px; +} + +.rd-40rpx { + border-radius: 40rpx; +} + +.rd-44rpx { + border-radius: 44rpx; +} + +.rd-4rpx { + border-radius: 4rpx; +} + +.rd-50-p111- { + border-radius: 50%; +} + +.rd-50rpx { + border-radius: 50rpx; +} + +.rd-6rpx { + border-radius: 6rpx; +} + +.rd-8px { + border-radius: 8px; +} + +.rd-8rpx { + border-radius: 8rpx; +} + +.rd-b-16rpx { + border-bottom-left-radius: 16rpx; + border-bottom-right-radius: 16rpx; +} + +.rd-b-20rpx { + border-bottom-left-radius: 20rpx; + border-bottom-right-radius: 20rpx; +} + +.rd-b-24rpx { + border-bottom-left-radius: 24rpx; + border-bottom-right-radius: 24rpx; +} + +.rd-b-32rpx { + border-bottom-left-radius: 32rpx; + border-bottom-right-radius: 32rpx; +} + +.rd-l-32rpx { + border-top-left-radius: 32rpx; + border-bottom-left-radius: 32rpx; +} + +.rd-r-32rpx { + border-top-right-radius: 32rpx; + border-bottom-right-radius: 32rpx; +} + +.rd-t-32rpx { + border-top-left-radius: 32rpx; + border-top-right-radius: 32rpx; +} + +.rd-t-8rpx { + border-top-left-radius: 8rpx; + border-top-right-radius: 8rpx; +} + +.rd-b-8rpx { + border-bottom-left-radius: 8rpx; + border-bottom-right-radius: 8rpx; +} + +.rd-t-16rpx { + border-top-left-radius: 16rpx; + border-top-right-radius: 16rpx; +} + +.rd-t-20rpx { + border-top-left-radius: 20rpx; + border-top-right-radius: 20rpx; +} + +.rd-t-24rpx { + border-top-left-radius: 24rpx; + border-top-right-radius: 24rpx; +} + +.rd-t-40rpx { + border-top-left-radius: 40rpx; + border-top-right-radius: 40rpx; +} + +.rd-rt-12rpx { + border-top-right-radius: 12rpx; +} + +.b-solid { + border-style: solid; +} + +.bg-red { + background-color: #e93323; +} + +.fs-24, +.text-24rpx { + font-size: 24rpx; +} + +.fs-28, +.text-28rpx { + font-size: 28rpx; +} + +.fs-30, +.text-30rpx { + font-size: 30rpx; +} + +.fs-38 { + font-size: 38rpx; +} + +.fw-400 { + font-weight: 400; +} + +.fw-500 { + font-weight: 500; +} + +.fw-600 { + font-weight: 600; +} + +.fw-700, +.fw-bold { + font-weight: 700; +} + +.lh-22rpx { + line-height: 22rpx; +} + +.lh-24rpx { + line-height: 24rpx; +} + +.lh-26rpx { + line-height: 26rpx; +} + +.lh-28rpx { + line-height: 28rpx; +} + +.lh-30rpx { + line-height: 30rpx; +} + +.lh-32rpx { + line-height: 32rpx; +} + +.lh-34rpx { + line-height: 34rpx; +} + +.lh-36rpx { + line-height: 36rpx; +} + +.lh-38rpx { + line-height: 38rpx; +} + +.lh-40rpx { + line-height: 40rpx; +} + +.lh-42rpx { + line-height: 42rpx; +} + +.lh-44rpx { + line-height: 44rpx; +} + +.lh-48rpx { + line-height: 48rpx; +} + +.lh-50rpx { + line-height: 50rpx; +} + +.lh-52rpx { + line-height: 52rpx; +} + +.lh-54rpx { + line-height: 54rpx; +} + +.lh-56rpx { + line-height: 56rpx; +} + +.lh-60rpx { + line-height: 60rpx; +} + +.lh-80rpx { + line-height: 80rpx; +} + +.lh-88rpx { + line-height: 88rpx; +} + +.line-through { + text-decoration-line: line-through; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.text--w111-eee { + color: #eee; +} + +.text--w111-222 { + color: rgba(34, 34, 34, 1); +} + +.text--w111-282828 { + color: rgba(40, 40, 40, 1); +} + +.text--w111-333 { + color: rgba(51, 51, 51, 1); +} + +.text--w111-000 { + color: #000; +} + +.text--w111-3d3d3d { + color: rgba(61, 61, 61, 1); +} + +.text--w111-666 { + color: rgba(102, 102, 102, 1); +} + +.text--w111-763B04 { + color: rgba(118, 59, 4, 1); +} + +.text--w111-7E4B06 { + color: rgba(126, 75, 6, 1); +} + +.text--w111-888 { + color: rgba(136, 136, 136, 1); +} + +.text--w111-8e8e8e { + color: rgba(142, 142, 142, 1); +} + +.text--w111-999 { + color: rgba(153, 153, 153, 1); +} + +.text--w111-aaa { + color: rgba(170, 170, 170, 1); +} + +.text--w111-ccc { + color: #ccc; +} + +.text--w111-666 { + color: #666; +} + +.text--w111-b3b3b3 { + color: rgba(179, 179, 179, 1); +} + +.text--w111-e93323 { + color: rgba(233, 51, 35, 1); +} + +.text--w111-FAAD14 { + color: rgba(250, 173, 20, 1); +} + +.text--w111-FFD89C { + color: rgba(255, 216, 156, 1); +} + +.text--w111-fff { + color: rgba(255, 255, 255, 1); +} + +.text--w111-D48D2D { + color: #d48d2d; +} +.text--w111-CA790F { + color: #ca790f; +} +.text--w111-AE5A2A { + color: #ae5a2a; } .text--w111-133667{ color: #133667; -} - -.text-primary-con { - color: var(--primary-theme-con); +} + +.text-primary-con { + color: var(--primary-theme-con); } .text-theme { color: var(--view-theme); -} - -.flex { - display: flex; -} - -.flex-1 { - flex: 1 1 0%; -} - -.flex-wrap { - flex-wrap: wrap; -} - -.grid-gap-10rpx { - grid-gap: 10rpx; - gap: 10rpx; -} - -.grid-gap-16rpx { - grid-gap: 16rpx; - gap: 16rpx; -} - -.grid-gap-18rpx { - grid-gap: 18rpx; - gap: 18rpx; -} - -.grid-gap-20rpx { - grid-gap: 20rpx; - gap: 20rpx; -} - -.grid-gap-22rpx { - grid-gap: 22rpx; - gap: 22rpx; -} - -.grid-gap-24rpx { - grid-gap: 24rpx; - gap: 24rpx; -} - -.grid-gap-30rpx { - grid-gap: 30rpx; - gap: 30rpx; -} - -.grid-gap-36rpx { - grid-gap: 36rpx; - gap: 36rpx; -} - -.grid-gap-38rpx { - grid-gap: 38rpx; - gap: 38rpx; -} - -.grid-gap-x-10rpx { - grid-column-gap: 10rpx; - -moz-column-gap: 10rpx; - column-gap: 10rpx; -} - -.grid-gap-x-20rpx { - grid-column-gap: 20rpx; - -moz-column-gap: 20rpx; - column-gap: 20rpx; -} - -.grid-gap-x-22rpx { - grid-column-gap: 22rpx; - -moz-column-gap: 22rpx; - column-gap: 22rpx; -} - -.grid-gap-x-38rpx { - grid-column-gap: 38rpx; - -moz-column-gap: 38rpx; - column-gap: 38rpx; -} - -.grid-gap-x-76rpx { - grid-column-gap: 76rpx; - -moz-column-gap: 76rpx; - column-gap: 76rpx; -} - -.grid-gap-y-20rpx { - grid-row-gap: 20rpx; - row-gap: 20rpx; -} - -.grid-gap-y-26rpx { - grid-row-gap: 26rpx; - row-gap: 26rpx; -} - -.grid-gap-y-32rpx { - grid-row-gap: 32rpx; - row-gap: 32rpx; -} - -.grid-gap-y-54rpx { - grid-row-gap: 54rpx; - row-gap: 54rpx; -} - -.absolute { - position: absolute; -} - -.fixed { - position: fixed; -} - -.relative { - position: relative; -} - -.h-100 { - height: 100rpx; -} - -.h-100-p111-, -.h-full { - height: 100%; -} - -.h-1000 { - height: 1000rpx; -} - -.h-104 { - height: 104rpx; -} - -.h-106 { - height: 106rpx; -} - -.h-108 { - height: 108rpx; -} - -.h-112 { - height: 112rpx; -} - -.h-114 { - height: 114rpx; -} - -.h-116 { - height: 116rpx; -} - -.h-120 { - height: 120rpx; -} - -.h-124 { - height: 124rpx; -} - -.h-128 { - height: 128rpx; -} - -.h-136 { - height: 136rpx; -} - -.h-140 { - height: 140rpx; -} - -.h-142 { - height: 142rpx; -} - -.h-148 { - height: 148rpx; -} - -.h-152 { - height: 152rpx; -} - -.h-158 { - height: 158rpx; -} - -.h-160 { - height: 160rpx; -} - -.h-164 { - height: 164rpx; -} - -.h-168 { - height: 168rpx; -} - -.h-170 { - height: 170rpx; -} - -.h-172 { - height: 172rpx; -} - -.h-176 { - height: 176rpx; -} - -.h-180 { - height: 180rpx; -} - -.h-190 { - height: 190rpx; -} - -.h-192 { - height: 192rpx; -} - -.h-198 { - height: 198rpx; -} - -.h-20 { - height: 20rpx; -} - -.h-200 { - height: 200rpx; -} - -.h-204 { - height: 204rpx; -} - -.h-206 { - height: 206rpx; -} - -.h-210 { - height: 210rpx; -} - -.h-212 { - height: 212rpx; -} - -.h-214 { - height: 214rpx; -} - -.h-216 { - height: 216rpx; -} - -.h-220 { - height: 220rpx; -} - -.h-222 { - height: 222rpx; -} - -.h-224 { - height: 224rpx; -} - -.h-24 { - height: 24rpx; -} - -.h-230 { - height: 230rpx; -} - -.h-240 { - height: 240rpx; -} - -.h-254 { - height: 254rpx; -} - -.h-26 { - height: 26rpx; -} - -.h-28 { - height: 28rpx; -} - -.h-280 { - height: 280rpx; -} - -.h-296 { - height: 296rpx; -} - -.h-3 { - height: 3rpx; -} - -.h-30 { - height: 30rpx; -} - -.h-32 { - height: 32rpx; -} - -.h-33 { - height: 33rpx; -} - -.h-338 { - height: 338rpx; -} - -.h-34, -.h-34rpx { - height: 34rpx; -} - -.h-338 { - height: 338rpx; -} - -.h-344 { - height: 344rpx; -} - -.h-36 { - height: 36rpx; -} - -.h-38 { - height: 38rpx; -} - -.h-4 { - height: 4rpx; -} - -.h-40 { - height: 40rpx; -} - -.h-400 { - height: 400rpx; -} - -.h-420 { - height: 420rpx; -} - -.h-42 { - height: 42rpx; -} - -.h-44 { - height: 44rpx; -} - -.h-46 { - height: 46rpx; -} - -.h-48 { - height: 48rpx; -} - -.h-50 { - height: 50rpx; -} - -.h-500 { - height: 500rpx; -} - -.h-54 { - height: 54rpx; -} - -.h-518 { - height: 518rpx; -} - -.h-52 { - height: 52rpx; -} - -.h-56 { - height: 56rpx; -} - -.h-560 { - height: 560rpx; -} - -.h-58 { - height: 58rpx; -} - -.h-6 { - height: 6rpx; -} - -.h-60 { - height: 60rpx; -} - -.h-64 { - height: 64rpx; -} - -.h-66 { - height: 66rpx; -} - -.h-604 { - height: 604rpx; -} - -.h-644 { - height: 644rpx; -} - -.h-650 { - height: 650rpx; -} - -.h-68 { - height: 68rpx; -} - -.h-70 { - height: 70rpx; -} - -.h-74 { - height: 74rpx; -} - -.h-76 { - height: 76rpx; -} - -.h-710 { - height: 710rpx; -} - -.h-72 { - height: 72rpx; -} - -.h-748 { - height: 748rpx; -} - -.h-750 { - height: 750rpx; -} - -.h-768 { - height: 768rpx; -} - -.h-78 { - height: 78rpx; -} - -.h-80 { - height: 80rpx; -} - -.h-800 { - height: 800rpx; -} - -.h-84 { - height: 84rpx; -} - -.h-86 { - height: 86rpx; -} - -.h-88 { - height: 88rpx; -} - -.h-90 { - height: 90rpx; -} - -.h-92 { - height: 92rpx; -} - -.h-96 { - height: 96rpx; -} - -.h-1000 { - height: 1000rpx; -} - -.h-1000 { - height: 1000rpx; -} - -.w-1 { - width: 1rpx; -} - -.w-100 { - width: 100rpx; -} - -.w-100-p111-, -.w-full { - width: 100%; -} - -.w-102 { - width: 102rpx; -} - -.w-104 { - width: 104rpx; -} - -.w-108 { - width: 108rpx; -} - -.w-110 { - width: 110rpx; -} - -.w-112 { - width: 112rpx; -} - -.w-116 { - width: 116rpx; -} - -.w-118 { - width: 118rpx; -} - -.w-120 { - width: 120rpx; -} - -.w-124 { - width: 124rpx; -} - -.w-128 { - width: 128rpx; -} - -.w-130 { - width: 130rpx; -} - -.w-132 { - width: 132rpx; -} - -.w-136 { - width: 136rpx; -} - -.w-138 { - width: 138rpx; -} - -.w-140 { - width: 140rpx; -} - -.w-142 { - width: 142rpx; -} - -.w-144 { - width: 144rpx; -} - -.w-148 { - width: 148rpx; -} - -.w-154 { - width: 154rpx; -} - -.w-160 { - width: 160rpx; -} - -.w-162 { - width: 162rpx; -} - -.w-164 { - width: 164rpx; -} - -.w-168 { - width: 168rpx; -} - -.w-172 { - width: 172rpx; -} - -.w-176 { - width: 176rpx; -} - -.w-18 { - width: 18rpx; -} - -.w-184 { - width: 184rpx; -} - -.w-28 { - width: 28rpx; -} - -.w-256 { - width: 256rpx; -} - -.w-264 { - width: 264rpx; -} - -.w-280 { - width: 280rpx; -} - -.w-282 { - width: 282rpx; -} - -.w-286 { - width: 286rpx; -} - -.w-180 { - width: 180rpx; -} - -.w-184 { - width: 184rpx; -} - -.w-186 { - width: 186rpx; -} - -.w-192 { - width: 192rpx; -} - -.w-198 { - width: 198rpx; -} - -.w-200 { - width: 200rpx; -} - -.w-204 { - width: 204rpx; -} - -.w-206 { - width: 206rpx; -} - -.w-208 { - width: 208rpx; -} - -.w-210 { - width: 210rpx; -} - -.w-216 { - width: 216rpx; -} - -.w-218 { - width: 218rpx; -} - -.w-222 { - width: 222rpx; -} - -.w-224 { - width: 224rpx; -} - -.w-234 { - width: 234rpx; -} - -.w-238 { - width: 238rpx; -} - -.w-24, -.w-24rpx { - width: 24rpx; -} - -.w-240 { - width: 240rpx; -} - -.w-244 { - width: 244rpx; -} - -.w-260 { - width: 260rpx; -} - -.w-278 { - width: 278rpx; -} - -.w-296 { - width: 296rpx; -} - -.w-30 { - width: 30rpx; -} - -.w-300 { - width: 300rpx; -} - -.w-308 { - width: 308rpx; -} - -.w-32 { - width: 32rpx; -} - -.w-320 { - width: 320rpx; -} - -.w-34 { - width: 34rpx; -} - -.w-316 { - width: 316rpx; -} - -.w-324 { - width: 324rpx; -} - -.w-360 { - width: 360rpx; -} - -.w-328 { - width: 328rpx; -} - -.w-33 { - width: 33rpx; -} - -.w-338 { - width: 338rpx; -} - -.w-340 { - width: 340rpx; -} - -.w-344 { - width: 344rpx; -} - -.w-346 { - width: 346rpx; -} - -.w-36 { - width: 36rpx; -} - -.w-40 { - width: 40rpx; -} - -.w-44 { - width: 44rpx; -} - -.w-360rpx, -.w-360 { - width: 360rpx; -} - -.w-382 { - width: 382rpx; -} - -.w-398 { - width: 398rpx; -} - -.w-400 { - width: 400rpx; -} - -.w-410 { - width: 410rpx; -} - -.w-414 { - width: 414rpx; -} - -.w-438 { - width: 438rpx; -} - -.w-444 { - width: 444rpx; -} - -.w-42 { - width: 42rpx; -} - -.w-422 { - width: 422rpx; -} - -.w-428 { - width: 428rpx; -} - -.w-430 { - width: 430rpx; -} - -.w-438 { - width: 438rpx; -} - -.w-468 { - width: 468rpx; -} - -.w-454 { - width: 454rpx; -} - -.w-460 { - width: 460rpx; -} - -.w-462 { - width: 462rpx; -} - -.w-464 { - width: 464rpx; -} - -.w-48 { - width: 48rpx; -} - -.w-498 { - width: 498rpx; -} - -.w-50-p111 { - width: 50%; -} - -.w-504 { - width: 504rpx; -} - -.w-508 { - width: 508rpx; -} - -.w-536 { - width: 536rpx; -} - -.w-538 { - width: 538rpx; -} - -.w-544 { - width: 544rpx; -} - -.w-52 { - width: 52rpx; -} - -.w-54 { - width: 54rpx; -} - -.w-56 { - width: 56rpx; -} - -.w-58 { - width: 58rpx; -} - -.w-528 { - width: 528rpx; -} - -.w-558 { - width: 558rpx; -} - -.w-560 { - width: 560rpx; -} - -.w-562 { - width: 562rpx; -} - -.w-590 { - width: 590rpx; -} - -.w-600 { - width: 600rpx; -} - -.w-608 { - width: 608rpx; -} - -.w-60 { - width: 60rpx; -} - -.w-64 { - width: 64rpx; -} - -.w-66 { - width: 66rpx; -} - -.w-662 { - width: 662rpx; -} - -.w-676 { - width: 676rpx; -} - -.w-678 { - width: 678rpx; -} - -.w-686 { - width: 686rpx; -} - -.w-690 { - width: 690rpx; -} - -.w-696 { - width: 696rpx; -} - -.w-710 { - width: 710rpx; -} - -.w-72 { - width: 72rpx; -} - -.w-74 { - width: 74rpx; -} - -.w-730 { - width: 730rpx; -} - -.w-76 { - width: 76rpx; -} - -.w-78 { - width: 78rpx; -} - -.w-80 { - width: 80rpx; -} - -.w-84 { - width: 84rpx; -} - -.w-88 { - width: 88rpx; -} - -.w-90 { - width: 90rpx; -} - -.w-92 { - width: 92rpx; -} - -.w-94 { - width: 94rpx; -} - -.w-96 { - width: 96rpx; -} - -.w-screen { - width: 100vw; -} - -.visible { - visibility: visible; -} - -.vertical-middle { - vertical-align: middle; -} - -.justify-end { - justify-content: flex-end; -} - -.justify-around { - justify-content: space-around; -} - -.justify-between { - justify-content: space-between; -} - -.items-start { - align-items: flex-start; -} - -.items-end { - align-items: flex-end; -} - -.items-center { - align-items: center; -} - -.items-baseline { - align-items: baseline; -} - -.bottom-30rpx { - bottom: 30rpx; -} - -.bottom-54rpx { - bottom: 54rpx; -} - -.left-0 { - left: 0; -} - -.right-15px { - right: 15px; -} - -.z-10 { - z-index: 10; -} - -.z-20 { - z-index: 20; -} - -.z-80 { - z-index: 80; -} - -.z-99 { - z-index: 99; -} - -.z-100 { - z-index: 100; -} -.z-101{ - z-index: 101; -} -.z-200{ - z-index: 200; -} - -.z-800 { - z-index: 800; -} - -.z-999 { - z-index: 999; -} - -.z-1000 { - z-index: 1000; -} - -.z-2000 { - z-index: 2000; -} - -.transition { - transition-property: color, background-color, border-color, outline-color, - text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, - -webkit-backdrop-filter; - transition-property: color, background-color, border-color, outline-color, - text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, - backdrop-filter; - transition-property: color, background-color, border-color, outline-color, - text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, - backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.ease-in-out { - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); -} - -.transform { - transform: translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) - translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) - rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) - rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) - scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) - scaleZ(var(--un-scale-z)); -} - -.pb-safe { - padding-bottom: env(safe-area-inset-bottom); -} - -.m-20 { - margin: 20rpx; -} - -.ml--4 { - margin-left: -4rpx; -} - -.ml-6 { - margin-left: 6rpx; -} - -.ml-60 { - margin-left: 60rpx; -} - -.ml-66 { - margin-left: 66rpx; -} - -.ml-12 { - margin-left: 12rpx; -} - -.ml-14 { - margin-left: 14rpx; -} - -.ml-16 { - margin-left: 16rpx; -} - -.ml-22 { - margin-left: 22rpx; -} - -.ml-24 { - margin-left: 24rpx; -} - -.ml-32 { - margin-left: 32rpx; -} - -.ml-38 { - margin-left: 38rpx; -} - -.ml-4 { - margin-left: 4rpx; -} - -.ml-40 { - margin-left: 40rpx; -} - -.ml-48 { - margin-left: 48rpx; -} - -.ml-8 { - margin-left: 8rpx; -} - -.mr-12 { - margin-right: 12rpx; -} - -.mr-14 { - margin-right: 14rpx; -} - -.mr-16 { - margin-right: 16rpx; -} - -.mr-20 { - margin-right: 20rpx; -} - -.mr-22 { - margin-right: 22rpx; -} - -.mr-24 { - margin-right: 24rpx; -} - -.mr-28 { - margin-right: 28rpx; -} - -.mr-30 { - margin-right: 30rpx; -} - -.mr-32 { - margin-right: 32rpx; -} - -.mr-38 { - margin-right: 38rpx; -} - -.mr-40 { - margin-right: 40rpx; -} - -.mr-52 { - margin-right: 52rpx; -} - -.mr-74 { - margin-right: 74rpx; -} - -.mr-8 { - margin-right: 8rpx; -} - -.mt-10 { - margin-top: 10rpx; -} - -.mt-12 { - margin-top: 12rpx; -} - -.mt-14 { - margin-top: 14rpx; -} - -.mt-16 { - margin-top: 16rpx; -} - -.mt-18 { - margin-top: 18rpx; -} - -.mt-160 { - margin-top: 160rpx; -} - -.mt-180 { - margin-top: 180rpx; -} - -.mt-24 { - margin-top: 24rpx; -} - -.mt-248 { - margin-top: 248rpx; -} - -.mt-26 { - margin-top: 26rpx; -} - -.mt-28 { - margin-top: 28rpx; -} - -.mt-30 { - margin-top: 30rpx; -} - -.mt-32 { - margin-top: 32rpx; -} - -.mt-34 { - margin-top: 34rpx; -} - -.mt-36 { - margin-top: 36rpx; -} - -.mt-38 { - margin-top: 38rpx; -} - -.mt-4 { - margin-top: 4rpx; -} - -.mt-40 { - margin-top: 40rpx; -} - -.mt-44 { - margin-top: 44rpx; -} - -.mt-48 { - margin-top: 48rpx; -} - -.mt-50 { - margin-top: 50rpx; -} - -.mt-52 { - margin-top: 52rpx; -} - -.mt-54 { - margin-top: 54rpx; -} - -.mt-64 { - margin-top: 64rpx; -} - -.mb-8 { - margin-bottom: 8rpx; -} - -.mb-10 { - margin-bottom: 10rpx; -} - -.mb-14 { - margin-bottom: 14rpx; -} - -.mb-16 { - margin-bottom: 16rpx; -} - -.mb-18 { - margin-bottom: 18rpx; -} - -.mb-20 { - margin-bottom: 20rpx; -} - -.mb-24 { - margin-bottom: 24rpx; -} - -.mb-26 { - margin-bottom: 26rpx; -} - -.mb-28 { - margin-bottom: 28rpx; -} - -.mb-30 { - margin-bottom: 30rpx; -} - -.mb-32 { - margin-bottom: 32rpx; -} - -.mb-34 { - margin-bottom: 34rpx; -} - -.mb-38 { - margin-bottom: 38rpx; -} - -.-mt-20{ - margin-top: -20rpx; -} - -.-mt-24{ - margin-top: -24rpx; -} - -.p-10 { - padding: 10rpx; -} - -.p-14 { - padding: 14rpx; -} - -.p-16 { - padding: 16rpx; -} - -.p-20 { - padding: 20rpx; -} - -.p-24 { - padding: 24rpx; -} - -.p-32 { - padding: 32rpx; -} - -.pl-10 { - padding-left: 10rpx; -} - -.pl-12 { - padding-left: 12rpx; -} - -.pl-14 { - padding-left: 14rpx; -} - -.pl-16 { - padding-left: 16rpx; -} - -.pl-18 { - padding-left: 18rpx; -} - -.pl-20 { - padding-left: 20rpx; -} - -.pl-24 { - padding-left: 24rpx; -} - -.pl-26 { - padding-left: 26rpx; -} - -.pl-28 { - padding-left: 28rpx; -} - -.pl-30 { - padding-left: 30rpx; -} - -.pl-32 { - padding-left: 32rpx; -} - -.pl-38 { - padding-left: 38rpx; -} - -.pl-4 { - padding-left: 4rpx; -} - -.pl-40 { - padding-left: 40rpx; -} - -.pl-44 { - padding-left: 44rpx; -} - -.pl-46 { - padding-left: 46rpx; -} - -.pl-48 { - padding-left: 48rpx; -} - -.pl-52 { - padding-left: 52rpx; -} - -.pl-56 { - padding-left: 56rpx; -} - -.pl-66 { - padding-left: 66rpx; -} - -.pl-76 { - padding-left: 76rpx; -} - -.pr-76 { - padding-right: 76rpx; -} - -.pl-6 { - padding-left: 6rpx; -} - -.pl-8 { - padding-left: 8rpx; -} - -.pr-8 { - padding-right: 8rpx; -} - -.pr-10 { - padding-right: 10rpx; -} - -.pr-12 { - padding-right: 12rpx; -} - -.pr-14 { - padding-right: 14rpx; -} - -.pr-16 { - padding-right: 16rpx; -} - -.pr-20 { - padding-right: 20rpx; -} - -.pr-24 { - padding-right: 24rpx; -} - -.pr-28 { - padding-right: 28rpx; -} - -.pr-30 { - padding-right: 30rpx; -} - -.pr-32 { - padding-right: 32rpx; -} - -.pr-36 { - padding-right: 36rpx; -} - -.pr-40 { - padding-right: 40rpx; -} - -.pr-46 { - padding-right: 46rpx; -} - -.pr-56 { - padding-right: 56rpx; -} - -.pt-6 { - padding-top: 6rpx; -} - -.pt-8 { - padding-top: 8rpx; -} - -.pt-50 { - padding-top: 50rpx; -} - -.pt-60 { - padding-top: 60rpx; -} - -.pt-12 { - padding-top: 12rpx; -} - -.pt-13 { - padding-top: 13rpx; -} - -.pt-14 { - padding-top: 14rpx; -} - -.pt-16 { - padding-top: 16rpx; -} - -.pt-18 { - padding-top: 18rpx; -} - -.pt-22 { - padding-top: 22rpx; -} - -.pt-24 { - padding-top: 24rpx; -} - -.pt-26 { - padding-top: 26rpx; -} - -.pt-28 { - padding-top: 28rpx; -} - -.pt-30 { - padding-top: 30rpx; -} - -.pt-32 { - padding-top: 32rpx; -} - -.pt-34 { - padding-top: 34rpx; -} - -.pt-36 { - padding-top: 36rpx; -} - -.pt-38 { - padding-top: 38rpx; -} - -.pt-4 { - padding-top: 4rpx; -} - -.pt-40 { - padding-top: 40rpx; -} - -.pt-42 { - padding-top: 42rpx; -} - -.pt-48 { - padding-top: 48rpx; -} - -.pt-6 { - padding-top: 6rpx; -} - -.pb-4 { - padding-bottom: 4rpx; -} - -.pb-44 { - padding-bottom: 44rpx; -} - -.pb-46 { - padding-bottom: 46rpx; -} - -.pb-10 { - padding-bottom: 10rpx; -} - -.pb-13 { - padding-bottom: 13rpx; -} - -.pb-14 { - padding-bottom: 14rpx; -} - -.pb-16 { - padding-bottom: 16rpx; -} - -.pb-20 { - padding-bottom: 20rpx; -} - -.pb-22 { - padding-bottom: 22rpx; -} - -.pb-24 { - padding-bottom: 24rpx; -} - -.pb-32 { - padding-bottom: 32rpx; -} - -.pb-36 { - padding-bottom: 36rpx; -} - -.pb-40 { - padding-bottom: 40rpx; -} - -.pb-50 { - padding-bottom: 50rpx; -} - -.pb-8 { - padding-bottom: 8rpx; -} - -.p-8-16 { - padding: 8rpx 16rpx; -} -.p-28-32{ - padding: 28rpx 32rpx; -} - -.mx-6 { - margin: 0 6rpx; -} - -.mx-10 { - margin: 0 10rpx; -} - -.mx-16 { - margin: 0 16rpx; -} - -.mx-20 { - margin: 0 20rpx; -} - -.mx-30 { - margin: 0 30rpx; -} - -.mx-32 { - margin: 0 32rpx; -} - -.mx-34 { - margin: 0 34rpx; -} - -.mx-38 { - margin: 0 38rpx; -} - -.mx-8 { - margin: 0 8rpx; -} - -.my-16 { - margin: 16rpx 0; -} - -.my-20 { - margin: 20rpx 0; -} - -.my-24 { - margin: 24rpx 0; -} - -.my-32 { - margin: 32rpx 0; -} - -.my-40 { - margin: 40rpx 0; -} - -.px-4 { - padding: 0 4rpx; -} - -.px-12 { - padding: 0 12rpx; -} - -.px-14 { - padding: 0 14rpx; -} - -.px-16 { - padding: 0 16rpx; -} - -.px-20 { - padding: 0 20rpx; -} - -.px-24 { - padding: 0 24rpx; -} - -.px-28 { - padding: 0 28rpx; -} - -.px-30 { - padding: 0 30rpx; -} - -.px-32 { - padding: 0 32rpx; -} - -.px-40 { - padding: 0 40rpx; -} - -.px-48 { - padding: 0 48rpx; -} - -.px-6 { - padding: 0 6rpx; -} - -.px-8 { - padding: 0 8rpx; -} - -.px-120 { - padding: 0 120rpx; -} - -.py-14 { - padding: 14rpx 0; -} - -.py-16 { - padding: 16rpx 0; -} - -.py-6{ - padding-top: 6rpx; - padding-bottom:6rpx; -} - -.py-24 { - padding: 24rpx 0; -} - -.py-28 { - padding: 28rpx 0; -} - -.py-30 { - padding: 30rpx 0; -} - -.py-32 { - padding: 32rpx 0; -} - -.py-60 { - padding: 60rpx 0; -} - -.py-78 { - padding: 78rpx 0; -} - -.py-82 { - padding: 82rpx 0; -} - -.fs-14 { - font-size: 14rpx; -} - -.fs-18 { - font-size: 18rpx; -} - -.fs-20 { - font-size: 20rpx; -} - -.fs-22 { - font-size: 22rpx; -} - -.fs-26 { - font-size: 26rpx; -} - -.fs-32 { - font-size: 32rpx; -} - -.fs-34 { - font-size: 34rpx; -} - -.fs-36 { - font-size: 36rpx; -} - -.fs-40 { - font-size: 40rpx; -} - -.fs-42 { - font-size: 42rpx; -} - -.fs-44 { - font-size: 44rpx; -} - -.fs-48 { - font-size: 48rpx; -} - -.fs-52 { - font-size: 52rpx; -} - -.fs-60 { - font-size: 60rpx; -} - -.fs-64 { - font-size: 64rpx; -} - -.fs-66 { - font-size: 66rpx; -} - -.fs-72 { - font-size: 72rpx; -} - -.text-line { - text-decoration: line-through; -} - -.Regular { - font-family: Regular; -} - -.SemiBold { - font-family: SemiBold; -} - -.space-line { - white-space: pre-line; -} - -.max-w-60{ - max-width: 60rpx; -} - -.max-w-160{ - max-width: 160rpx; -} -.max-w-260{ - max-width: 260rpx; -} +} + +.flex { + display: flex; +} + +.flex-1 { + flex: 1 1 0%; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.grid-gap-10rpx { + grid-gap: 10rpx; + gap: 10rpx; +} + +.grid-gap-16rpx { + grid-gap: 16rpx; + gap: 16rpx; +} + +.grid-gap-18rpx { + grid-gap: 18rpx; + gap: 18rpx; +} + +.grid-gap-20rpx { + grid-gap: 20rpx; + gap: 20rpx; +} + +.grid-gap-22rpx { + grid-gap: 22rpx; + gap: 22rpx; +} + +.grid-gap-24rpx { + grid-gap: 24rpx; + gap: 24rpx; +} + +.grid-gap-30rpx { + grid-gap: 30rpx; + gap: 30rpx; +} + +.grid-gap-36rpx { + grid-gap: 36rpx; + gap: 36rpx; +} + +.grid-gap-38rpx { + grid-gap: 38rpx; + gap: 38rpx; +} + +.grid-gap-x-10rpx { + grid-column-gap: 10rpx; + -moz-column-gap: 10rpx; + column-gap: 10rpx; +} + +.grid-gap-x-20rpx { + grid-column-gap: 20rpx; + -moz-column-gap: 20rpx; + column-gap: 20rpx; +} + +.grid-gap-x-22rpx { + grid-column-gap: 22rpx; + -moz-column-gap: 22rpx; + column-gap: 22rpx; +} + +.grid-gap-x-38rpx { + grid-column-gap: 38rpx; + -moz-column-gap: 38rpx; + column-gap: 38rpx; +} + +.grid-gap-x-76rpx { + grid-column-gap: 76rpx; + -moz-column-gap: 76rpx; + column-gap: 76rpx; +} + +.grid-gap-y-20rpx { + grid-row-gap: 20rpx; + row-gap: 20rpx; +} + +.grid-gap-y-26rpx { + grid-row-gap: 26rpx; + row-gap: 26rpx; +} + +.grid-gap-y-32rpx { + grid-row-gap: 32rpx; + row-gap: 32rpx; +} + +.grid-gap-y-54rpx { + grid-row-gap: 54rpx; + row-gap: 54rpx; +} + +.absolute { + position: absolute; +} + +.fixed { + position: fixed; +} + +.relative { + position: relative; +} + +.h-100 { + height: 100rpx; +} + +.h-100-p111-, +.h-full { + height: 100%; +} + +.h-1000 { + height: 1000rpx; +} + +.h-104 { + height: 104rpx; +} + +.h-106 { + height: 106rpx; +} + +.h-108 { + height: 108rpx; +} + +.h-112 { + height: 112rpx; +} + +.h-114 { + height: 114rpx; +} + +.h-116 { + height: 116rpx; +} + +.h-120 { + height: 120rpx; +} + +.h-124 { + height: 124rpx; +} + +.h-128 { + height: 128rpx; +} + +.h-136 { + height: 136rpx; +} + +.h-140 { + height: 140rpx; +} + +.h-142 { + height: 142rpx; +} + +.h-148 { + height: 148rpx; +} + +.h-152 { + height: 152rpx; +} + +.h-158 { + height: 158rpx; +} + +.h-160 { + height: 160rpx; +} + +.h-164 { + height: 164rpx; +} + +.h-168 { + height: 168rpx; +} + +.h-170 { + height: 170rpx; +} + +.h-172 { + height: 172rpx; +} + +.h-176 { + height: 176rpx; +} + +.h-180 { + height: 180rpx; +} + +.h-190 { + height: 190rpx; +} + +.h-192 { + height: 192rpx; +} + +.h-198 { + height: 198rpx; +} + +.h-20 { + height: 20rpx; +} + +.h-200 { + height: 200rpx; +} + +.h-204 { + height: 204rpx; +} + +.h-206 { + height: 206rpx; +} + +.h-210 { + height: 210rpx; +} + +.h-212 { + height: 212rpx; +} + +.h-214 { + height: 214rpx; +} + +.h-216 { + height: 216rpx; +} + +.h-220 { + height: 220rpx; +} + +.h-222 { + height: 222rpx; +} + +.h-224 { + height: 224rpx; +} + +.h-24 { + height: 24rpx; +} + +.h-230 { + height: 230rpx; +} + +.h-240 { + height: 240rpx; +} + +.h-254 { + height: 254rpx; +} + +.h-26 { + height: 26rpx; +} + +.h-28 { + height: 28rpx; +} + +.h-280 { + height: 280rpx; +} + +.h-296 { + height: 296rpx; +} + +.h-3 { + height: 3rpx; +} + +.h-30 { + height: 30rpx; +} + +.h-32 { + height: 32rpx; +} + +.h-33 { + height: 33rpx; +} + +.h-338 { + height: 338rpx; +} + +.h-34, +.h-34rpx { + height: 34rpx; +} + +.h-338 { + height: 338rpx; +} + +.h-344 { + height: 344rpx; +} + +.h-36 { + height: 36rpx; +} + +.h-38 { + height: 38rpx; +} + +.h-4 { + height: 4rpx; +} + +.h-40 { + height: 40rpx; +} + +.h-400 { + height: 400rpx; +} + +.h-420 { + height: 420rpx; +} + +.h-42 { + height: 42rpx; +} + +.h-44 { + height: 44rpx; +} + +.h-46 { + height: 46rpx; +} + +.h-48 { + height: 48rpx; +} + +.h-50 { + height: 50rpx; +} + +.h-500 { + height: 500rpx; +} + +.h-54 { + height: 54rpx; +} + +.h-518 { + height: 518rpx; +} + +.h-52 { + height: 52rpx; +} + +.h-56 { + height: 56rpx; +} + +.h-560 { + height: 560rpx; +} + +.h-58 { + height: 58rpx; +} + +.h-6 { + height: 6rpx; +} + +.h-60 { + height: 60rpx; +} + +.h-64 { + height: 64rpx; +} + +.h-66 { + height: 66rpx; +} + +.h-604 { + height: 604rpx; +} + +.h-644 { + height: 644rpx; +} + +.h-650 { + height: 650rpx; +} + +.h-68 { + height: 68rpx; +} + +.h-70 { + height: 70rpx; +} + +.h-74 { + height: 74rpx; +} + +.h-76 { + height: 76rpx; +} + +.h-710 { + height: 710rpx; +} + +.h-72 { + height: 72rpx; +} + +.h-748 { + height: 748rpx; +} + +.h-750 { + height: 750rpx; +} + +.h-768 { + height: 768rpx; +} + +.h-78 { + height: 78rpx; +} + +.h-80 { + height: 80rpx; +} + +.h-800 { + height: 800rpx; +} + +.h-84 { + height: 84rpx; +} + +.h-86 { + height: 86rpx; +} + +.h-88 { + height: 88rpx; +} + +.h-90 { + height: 90rpx; +} + +.h-92 { + height: 92rpx; +} + +.h-96 { + height: 96rpx; +} + +.h-1000 { + height: 1000rpx; +} + +.h-1000 { + height: 1000rpx; +} + +.w-1 { + width: 1rpx; +} + +.w-100 { + width: 100rpx; +} + +.w-100-p111-, +.w-full { + width: 100%; +} + +.w-102 { + width: 102rpx; +} + +.w-104 { + width: 104rpx; +} + +.w-108 { + width: 108rpx; +} + +.w-110 { + width: 110rpx; +} + +.w-112 { + width: 112rpx; +} + +.w-116 { + width: 116rpx; +} + +.w-118 { + width: 118rpx; +} + +.w-120 { + width: 120rpx; +} + +.w-124 { + width: 124rpx; +} + +.w-128 { + width: 128rpx; +} + +.w-130 { + width: 130rpx; +} + +.w-132 { + width: 132rpx; +} + +.w-136 { + width: 136rpx; +} + +.w-138 { + width: 138rpx; +} + +.w-140 { + width: 140rpx; +} + +.w-142 { + width: 142rpx; +} + +.w-144 { + width: 144rpx; +} + +.w-148 { + width: 148rpx; +} + +.w-154 { + width: 154rpx; +} + +.w-160 { + width: 160rpx; +} + +.w-162 { + width: 162rpx; +} + +.w-164 { + width: 164rpx; +} + +.w-168 { + width: 168rpx; +} + +.w-172 { + width: 172rpx; +} + +.w-176 { + width: 176rpx; +} + +.w-18 { + width: 18rpx; +} + +.w-184 { + width: 184rpx; +} + +.w-28 { + width: 28rpx; +} + +.w-256 { + width: 256rpx; +} + +.w-264 { + width: 264rpx; +} + +.w-280 { + width: 280rpx; +} + +.w-282 { + width: 282rpx; +} + +.w-286 { + width: 286rpx; +} + +.w-180 { + width: 180rpx; +} + +.w-184 { + width: 184rpx; +} + +.w-186 { + width: 186rpx; +} + +.w-192 { + width: 192rpx; +} + +.w-198 { + width: 198rpx; +} + +.w-200 { + width: 200rpx; +} + +.w-204 { + width: 204rpx; +} + +.w-206 { + width: 206rpx; +} + +.w-208 { + width: 208rpx; +} + +.w-210 { + width: 210rpx; +} + +.w-216 { + width: 216rpx; +} + +.w-218 { + width: 218rpx; +} + +.w-222 { + width: 222rpx; +} + +.w-224 { + width: 224rpx; +} + +.w-234 { + width: 234rpx; +} + +.w-238 { + width: 238rpx; +} + +.w-24, +.w-24rpx { + width: 24rpx; +} + +.w-240 { + width: 240rpx; +} + +.w-244 { + width: 244rpx; +} + +.w-260 { + width: 260rpx; +} + +.w-278 { + width: 278rpx; +} + +.w-296 { + width: 296rpx; +} + +.w-30 { + width: 30rpx; +} + +.w-300 { + width: 300rpx; +} + +.w-308 { + width: 308rpx; +} + +.w-32 { + width: 32rpx; +} + +.w-320 { + width: 320rpx; +} + +.w-34 { + width: 34rpx; +} + +.w-316 { + width: 316rpx; +} + +.w-324 { + width: 324rpx; +} + +.w-360 { + width: 360rpx; +} + +.w-328 { + width: 328rpx; +} + +.w-33 { + width: 33rpx; +} + +.w-338 { + width: 338rpx; +} + +.w-340 { + width: 340rpx; +} + +.w-344 { + width: 344rpx; +} + +.w-346 { + width: 346rpx; +} + +.w-36 { + width: 36rpx; +} + +.w-40 { + width: 40rpx; +} + +.w-44 { + width: 44rpx; +} + +.w-360rpx, +.w-360 { + width: 360rpx; +} + +.w-382 { + width: 382rpx; +} + +.w-398 { + width: 398rpx; +} + +.w-400 { + width: 400rpx; +} + +.w-410 { + width: 410rpx; +} + +.w-414 { + width: 414rpx; +} + +.w-438 { + width: 438rpx; +} + +.w-444 { + width: 444rpx; +} + +.w-42 { + width: 42rpx; +} + +.w-422 { + width: 422rpx; +} + +.w-428 { + width: 428rpx; +} + +.w-430 { + width: 430rpx; +} + +.w-438 { + width: 438rpx; +} + +.w-468 { + width: 468rpx; +} + +.w-454 { + width: 454rpx; +} + +.w-460 { + width: 460rpx; +} + +.w-462 { + width: 462rpx; +} + +.w-464 { + width: 464rpx; +} + +.w-48 { + width: 48rpx; +} + +.w-498 { + width: 498rpx; +} + +.w-50-p111 { + width: 50%; +} + +.w-504 { + width: 504rpx; +} + +.w-508 { + width: 508rpx; +} + +.w-536 { + width: 536rpx; +} + +.w-538 { + width: 538rpx; +} + +.w-544 { + width: 544rpx; +} + +.w-52 { + width: 52rpx; +} + +.w-54 { + width: 54rpx; +} + +.w-56 { + width: 56rpx; +} + +.w-58 { + width: 58rpx; +} + +.w-528 { + width: 528rpx; +} + +.w-558 { + width: 558rpx; +} + +.w-560 { + width: 560rpx; +} + +.w-562 { + width: 562rpx; +} + +.w-590 { + width: 590rpx; +} + +.w-600 { + width: 600rpx; +} + +.w-608 { + width: 608rpx; +} + +.w-60 { + width: 60rpx; +} + +.w-64 { + width: 64rpx; +} + +.w-66 { + width: 66rpx; +} + +.w-662 { + width: 662rpx; +} + +.w-676 { + width: 676rpx; +} + +.w-678 { + width: 678rpx; +} + +.w-686 { + width: 686rpx; +} + +.w-690 { + width: 690rpx; +} + +.w-696 { + width: 696rpx; +} + +.w-710 { + width: 710rpx; +} + +.w-72 { + width: 72rpx; +} + +.w-74 { + width: 74rpx; +} + +.w-730 { + width: 730rpx; +} + +.w-76 { + width: 76rpx; +} + +.w-78 { + width: 78rpx; +} + +.w-80 { + width: 80rpx; +} + +.w-84 { + width: 84rpx; +} + +.w-88 { + width: 88rpx; +} + +.w-90 { + width: 90rpx; +} + +.w-92 { + width: 92rpx; +} + +.w-94 { + width: 94rpx; +} + +.w-96 { + width: 96rpx; +} + +.w-screen { + width: 100vw; +} + +.visible { + visibility: visible; +} + +.vertical-middle { + vertical-align: middle; +} + +.justify-end { + justify-content: flex-end; +} + +.justify-around { + justify-content: space-around; +} + +.justify-between { + justify-content: space-between; +} + +.items-start { + align-items: flex-start; +} + +.items-end { + align-items: flex-end; +} + +.items-center { + align-items: center; +} + +.items-baseline { + align-items: baseline; +} + +.bottom-30rpx { + bottom: 30rpx; +} + +.bottom-54rpx { + bottom: 54rpx; +} + +.left-0 { + left: 0; +} + +.right-15px { + right: 15px; +} + +.z-10 { + z-index: 10; +} + +.z-20 { + z-index: 20; +} + +.z-80 { + z-index: 80; +} + +.z-99 { + z-index: 99; +} + +.z-100 { + z-index: 100; +} +.z-101{ + z-index: 101; +} +.z-200{ + z-index: 200; +} + +.z-800 { + z-index: 800; +} + +.z-999 { + z-index: 999; +} + +.z-1000 { + z-index: 1000; +} + +.z-2000 { + z-index: 2000; +} + +.transition { + transition-property: color, background-color, border-color, outline-color, + text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, + -webkit-backdrop-filter; + transition-property: color, background-color, border-color, outline-color, + text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, + backdrop-filter; + transition-property: color, background-color, border-color, outline-color, + text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, + backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.ease-in-out { + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} + +.transform { + transform: translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) + translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) + rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) + rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) + scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) + scaleZ(var(--un-scale-z)); +} + +.pb-safe { + padding-bottom: env(safe-area-inset-bottom); +} + +.m-20 { + margin: 20rpx; +} + +.ml--4 { + margin-left: -4rpx; +} + +.ml-6 { + margin-left: 6rpx; +} + +.ml-60 { + margin-left: 60rpx; +} + +.ml-66 { + margin-left: 66rpx; +} + +.ml-12 { + margin-left: 12rpx; +} + +.ml-14 { + margin-left: 14rpx; +} + +.ml-16 { + margin-left: 16rpx; +} + +.ml-22 { + margin-left: 22rpx; +} + +.ml-24 { + margin-left: 24rpx; +} + +.ml-32 { + margin-left: 32rpx; +} + +.ml-38 { + margin-left: 38rpx; +} + +.ml-4 { + margin-left: 4rpx; +} + +.ml-40 { + margin-left: 40rpx; +} + +.ml-48 { + margin-left: 48rpx; +} + +.ml-8 { + margin-left: 8rpx; +} + +.mr-12 { + margin-right: 12rpx; +} + +.mr-14 { + margin-right: 14rpx; +} + +.mr-16 { + margin-right: 16rpx; +} + +.mr-20 { + margin-right: 20rpx; +} + +.mr-22 { + margin-right: 22rpx; +} + +.mr-24 { + margin-right: 24rpx; +} + +.mr-28 { + margin-right: 28rpx; +} + +.mr-30 { + margin-right: 30rpx; +} + +.mr-32 { + margin-right: 32rpx; +} + +.mr-38 { + margin-right: 38rpx; +} + +.mr-40 { + margin-right: 40rpx; +} + +.mr-52 { + margin-right: 52rpx; +} + +.mr-74 { + margin-right: 74rpx; +} + +.mr-8 { + margin-right: 8rpx; +} + +.mt-10 { + margin-top: 10rpx; +} + +.mt-12 { + margin-top: 12rpx; +} + +.mt-14 { + margin-top: 14rpx; +} + +.mt-16 { + margin-top: 16rpx; +} + +.mt-18 { + margin-top: 18rpx; +} + +.mt-160 { + margin-top: 160rpx; +} + +.mt-180 { + margin-top: 180rpx; +} + +.mt-24 { + margin-top: 24rpx; +} + +.mt-248 { + margin-top: 248rpx; +} + +.mt-26 { + margin-top: 26rpx; +} + +.mt-28 { + margin-top: 28rpx; +} + +.mt-30 { + margin-top: 30rpx; +} + +.mt-32 { + margin-top: 32rpx; +} + +.mt-34 { + margin-top: 34rpx; +} + +.mt-36 { + margin-top: 36rpx; +} + +.mt-38 { + margin-top: 38rpx; +} + +.mt-4 { + margin-top: 4rpx; +} + +.mt-40 { + margin-top: 40rpx; +} + +.mt-44 { + margin-top: 44rpx; +} + +.mt-48 { + margin-top: 48rpx; +} + +.mt-50 { + margin-top: 50rpx; +} + +.mt-52 { + margin-top: 52rpx; +} + +.mt-54 { + margin-top: 54rpx; +} + +.mt-64 { + margin-top: 64rpx; +} + +.mb-8 { + margin-bottom: 8rpx; +} + +.mb-10 { + margin-bottom: 10rpx; +} + +.mb-14 { + margin-bottom: 14rpx; +} + +.mb-16 { + margin-bottom: 16rpx; +} + +.mb-18 { + margin-bottom: 18rpx; +} + +.mb-20 { + margin-bottom: 20rpx; +} + +.mb-24 { + margin-bottom: 24rpx; +} + +.mb-26 { + margin-bottom: 26rpx; +} + +.mb-28 { + margin-bottom: 28rpx; +} + +.mb-30 { + margin-bottom: 30rpx; +} + +.mb-32 { + margin-bottom: 32rpx; +} + +.mb-34 { + margin-bottom: 34rpx; +} + +.mb-38 { + margin-bottom: 38rpx; +} + +.-mt-20{ + margin-top: -20rpx; +} + +.-mt-24{ + margin-top: -24rpx; +} + +.p-10 { + padding: 10rpx; +} + +.p-14 { + padding: 14rpx; +} + +.p-16 { + padding: 16rpx; +} + +.p-20 { + padding: 20rpx; +} + +.p-24 { + padding: 24rpx; +} + +.p-32 { + padding: 32rpx; +} + +.pl-10 { + padding-left: 10rpx; +} + +.pl-12 { + padding-left: 12rpx; +} + +.pl-14 { + padding-left: 14rpx; +} + +.pl-16 { + padding-left: 16rpx; +} + +.pl-18 { + padding-left: 18rpx; +} + +.pl-20 { + padding-left: 20rpx; +} + +.pl-24 { + padding-left: 24rpx; +} + +.pl-26 { + padding-left: 26rpx; +} + +.pl-28 { + padding-left: 28rpx; +} + +.pl-30 { + padding-left: 30rpx; +} + +.pl-32 { + padding-left: 32rpx; +} + +.pl-38 { + padding-left: 38rpx; +} + +.pl-4 { + padding-left: 4rpx; +} + +.pl-40 { + padding-left: 40rpx; +} + +.pl-44 { + padding-left: 44rpx; +} + +.pl-46 { + padding-left: 46rpx; +} + +.pl-48 { + padding-left: 48rpx; +} + +.pl-52 { + padding-left: 52rpx; +} + +.pl-56 { + padding-left: 56rpx; +} + +.pl-66 { + padding-left: 66rpx; +} + +.pl-76 { + padding-left: 76rpx; +} + +.pr-76 { + padding-right: 76rpx; +} + +.pl-6 { + padding-left: 6rpx; +} + +.pl-8 { + padding-left: 8rpx; +} + +.pr-8 { + padding-right: 8rpx; +} + +.pr-10 { + padding-right: 10rpx; +} + +.pr-12 { + padding-right: 12rpx; +} + +.pr-14 { + padding-right: 14rpx; +} + +.pr-16 { + padding-right: 16rpx; +} + +.pr-20 { + padding-right: 20rpx; +} + +.pr-24 { + padding-right: 24rpx; +} + +.pr-28 { + padding-right: 28rpx; +} + +.pr-30 { + padding-right: 30rpx; +} + +.pr-32 { + padding-right: 32rpx; +} + +.pr-36 { + padding-right: 36rpx; +} + +.pr-40 { + padding-right: 40rpx; +} + +.pr-46 { + padding-right: 46rpx; +} + +.pr-56 { + padding-right: 56rpx; +} + +.pt-6 { + padding-top: 6rpx; +} + +.pt-8 { + padding-top: 8rpx; +} + +.pt-50 { + padding-top: 50rpx; +} + +.pt-60 { + padding-top: 60rpx; +} + +.pt-12 { + padding-top: 12rpx; +} + +.pt-13 { + padding-top: 13rpx; +} + +.pt-14 { + padding-top: 14rpx; +} + +.pt-16 { + padding-top: 16rpx; +} + +.pt-18 { + padding-top: 18rpx; +} + +.pt-22 { + padding-top: 22rpx; +} + +.pt-24 { + padding-top: 24rpx; +} + +.pt-26 { + padding-top: 26rpx; +} + +.pt-28 { + padding-top: 28rpx; +} + +.pt-30 { + padding-top: 30rpx; +} + +.pt-32 { + padding-top: 32rpx; +} + +.pt-34 { + padding-top: 34rpx; +} + +.pt-36 { + padding-top: 36rpx; +} + +.pt-38 { + padding-top: 38rpx; +} + +.pt-4 { + padding-top: 4rpx; +} + +.pt-40 { + padding-top: 40rpx; +} + +.pt-42 { + padding-top: 42rpx; +} + +.pt-48 { + padding-top: 48rpx; +} + +.pt-6 { + padding-top: 6rpx; +} + +.pb-4 { + padding-bottom: 4rpx; +} + +.pb-44 { + padding-bottom: 44rpx; +} + +.pb-46 { + padding-bottom: 46rpx; +} + +.pb-10 { + padding-bottom: 10rpx; +} + +.pb-13 { + padding-bottom: 13rpx; +} + +.pb-14 { + padding-bottom: 14rpx; +} + +.pb-16 { + padding-bottom: 16rpx; +} + +.pb-20 { + padding-bottom: 20rpx; +} + +.pb-22 { + padding-bottom: 22rpx; +} + +.pb-24 { + padding-bottom: 24rpx; +} + +.pb-32 { + padding-bottom: 32rpx; +} + +.pb-36 { + padding-bottom: 36rpx; +} + +.pb-40 { + padding-bottom: 40rpx; +} + +.pb-50 { + padding-bottom: 50rpx; +} + +.pb-8 { + padding-bottom: 8rpx; +} + +.p-8-16 { + padding: 8rpx 16rpx; +} +.p-28-32{ + padding: 28rpx 32rpx; +} + +.mx-6 { + margin: 0 6rpx; +} + +.mx-10 { + margin: 0 10rpx; +} + +.mx-16 { + margin: 0 16rpx; +} + +.mx-20 { + margin: 0 20rpx; +} + +.mx-30 { + margin: 0 30rpx; +} + +.mx-32 { + margin: 0 32rpx; +} + +.mx-34 { + margin: 0 34rpx; +} + +.mx-38 { + margin: 0 38rpx; +} + +.mx-8 { + margin: 0 8rpx; +} + +.my-16 { + margin: 16rpx 0; +} + +.my-20 { + margin: 20rpx 0; +} + +.my-24 { + margin: 24rpx 0; +} + +.my-32 { + margin: 32rpx 0; +} + +.my-40 { + margin: 40rpx 0; +} + +.px-4 { + padding: 0 4rpx; +} + +.px-12 { + padding: 0 12rpx; +} + +.px-14 { + padding: 0 14rpx; +} + +.px-16 { + padding: 0 16rpx; +} + +.px-20 { + padding: 0 20rpx; +} + +.px-24 { + padding: 0 24rpx; +} + +.px-28 { + padding: 0 28rpx; +} + +.px-30 { + padding: 0 30rpx; +} + +.px-32 { + padding: 0 32rpx; +} + +.px-40 { + padding: 0 40rpx; +} + +.px-48 { + padding: 0 48rpx; +} + +.px-6 { + padding: 0 6rpx; +} + +.px-8 { + padding: 0 8rpx; +} + +.px-120 { + padding: 0 120rpx; +} + +.py-14 { + padding: 14rpx 0; +} + +.py-16 { + padding: 16rpx 0; +} + +.py-6{ + padding-top: 6rpx; + padding-bottom:6rpx; +} + +.py-24 { + padding: 24rpx 0; +} + +.py-28 { + padding: 28rpx 0; +} + +.py-30 { + padding: 30rpx 0; +} + +.py-32 { + padding: 32rpx 0; +} + +.py-60 { + padding: 60rpx 0; +} + +.py-78 { + padding: 78rpx 0; +} + +.py-82 { + padding: 82rpx 0; +} + +.fs-14 { + font-size: 14rpx; +} + +.fs-18 { + font-size: 18rpx; +} + +.fs-20 { + font-size: 20rpx; +} + +.fs-22 { + font-size: 22rpx; +} + +.fs-26 { + font-size: 26rpx; +} + +.fs-32 { + font-size: 32rpx; +} + +.fs-34 { + font-size: 34rpx; +} + +.fs-36 { + font-size: 36rpx; +} + +.fs-40 { + font-size: 40rpx; +} + +.fs-42 { + font-size: 42rpx; +} + +.fs-44 { + font-size: 44rpx; +} + +.fs-48 { + font-size: 48rpx; +} + +.fs-52 { + font-size: 52rpx; +} + +.fs-60 { + font-size: 60rpx; +} + +.fs-64 { + font-size: 64rpx; +} + +.fs-66 { + font-size: 66rpx; +} + +.fs-72 { + font-size: 72rpx; +} + +.text-line { + text-decoration: line-through; +} + +.Regular { + font-family: Regular; +} + +.SemiBold { + font-family: SemiBold; +} + +.space-line { + white-space: pre-line; +} + +.max-w-60{ + max-width: 60rpx; +} + +.max-w-160{ + max-width: 160rpx; +} +.max-w-260{ + max-width: 260rpx; +} diff --git a/store/modules/app.js b/store/modules/app.js index 25d7807..3c85b11 100644 --- a/store/modules/app.js +++ b/store/modules/app.js @@ -21,11 +21,33 @@ import { } from '@/config/cache'; import Cache from '@/utils/cache'; +/** + * 不依赖 atob 的 base64 解码(小程序环境不提供 atob) + */ +function base64Decode(str) { + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var output = ''; + var i = 0; + str = String(str).replace(/[^A-Za-z0-9+/=]/g, ''); + while (i < str.length) { + var b1 = chars.indexOf(str.charAt(i++)); + var b2 = chars.indexOf(str.charAt(i++)); + var b3 = chars.indexOf(str.charAt(i++)); + var b4 = chars.indexOf(str.charAt(i++)); + output += String.fromCharCode((b1 << 2) | (b2 >> 4)); + if (b3 !== 64) output += String.fromCharCode(((b2 & 15) << 4) | (b3 >> 2)); + if (b4 !== 64) output += String.fromCharCode(((b3 & 3) << 6) | b4); + } + return output; +} + const state = { token: Cache.get(LOGIN_STATUS) || false, backgroundColor: "#fff", userInfo: Cache.get(USER_INFO) || {}, uid: Cache.get(UID) || 0, + openid: Cache.get('OPENID') || '', + unionid: Cache.get('UNIONID') || '', homeActive: false, phoneStatus: true, autoplay: Cache.get(NON_WIFI_AUTOPLAY) || false, @@ -89,11 +111,46 @@ const mutations = { LOGIN(state, opt) { state.token = opt.token; Cache.set(LOGIN_STATUS, opt.token, opt.time); + // 登录时自动提取 openid 缓存起来 + if (opt.token) { + try { + let parts = opt.token.split('.'); + if (parts.length !== 3) { + console.warn('[LOGIN] token 不是 JWT 格式,parts=' + parts.length); + } else { + let payload = parts[1] + .replace(/-/g, '+') + .replace(/_/g, '/'); + while (payload.length % 4 !== 0) payload += '='; + const data = JSON.parse(base64Decode(payload)); + if (data.openid) { + state.openid = data.openid; + Cache.set('OPENID', data.openid); + console.log('[LOGIN] openid 已缓存:', data.openid); + } else { + console.warn('[LOGIN] JWT payload 无 openid 字段:', JSON.stringify(data)); + } + if (data.unionid) { + state.unionid = data.unionid; + Cache.set('UNIONID', data.unionid); + console.log('[LOGIN] unionid 已缓存:', data.unionid); + } + } + } catch (e) { + console.error('[LOGIN] JWT 解码失败:', e.message, 'token前20位:', opt.token.substring(0, 20)); + } + } }, SETUID(state, val) { state.uid = val; Cache.set(UID, val); }, + SET_OPENID(state, val) { + state.openid = val || ''; + }, + SET_UNIONID(state, val) { + state.unionid = val || ''; + }, UPDATE_LOGIN(state, token) { state.token = token; }, @@ -102,8 +159,12 @@ const mutations = { Cache.clear(UID); Cache.clear(USER_INFO); Cache.clear('newcomerGift'); + Cache.clear('OPENID'); + Cache.clear('UNIONID'); state.token = undefined; - state.uid = undefined + state.uid = undefined; + state.openid = ''; + state.unionid = ''; state.userInfo = {} }, BACKGROUND_COLOR(state, color) { diff --git a/utils/propertyList.js b/utils/propertyList.js index 9aa5136..83e93ad 100644 --- a/utils/propertyList.js +++ b/utils/propertyList.js @@ -1,50 +1,50 @@ -let propertyList = [{ - label: "余额", - value: 0, - k: "now_money", - url: '/pages/users/user_money/index' - }, - { - label: "优惠券", - value: 1, - k: "couponCount", - url: '/pages/users/user_coupon/index' - }, - { - label: "积分", - value: 2, - k: "integral", - url: '/pages/users/user_integral/index' - }, - { - label: "收藏", - value: 3, - k: "collectProductCount", - url: '/pages/users/user_goods_collection/index' - }, - { - label: "浏览记录", - value: 5, - k: "visit_num", - url: '/pages/users/visit_list/index' - }, - { - label: "推广佣金", - value: 6, - k: "brokerage_price", - url: '/pages/users/user_spread_user/index' - }, - { - label: "推广人", - value: 7, - k: "spread_user_count", - url: '/pages/users/user_spread_user/index' - }, - { - label: "推广订单", - value: 8, - k: "spread_order_count", - url: '/pages/users/user_spread_user/index' - }, -]; +let propertyList = [{ + label: "余额", + value: 0, + k: "now_money", + url: '/pages/users/user_money/index' + }, + { + label: "优惠券", + value: 1, + k: "couponCount", + url: '/pages/users/user_coupon/index' + }, + { + label: "积分", + value: 2, + k: "integral", + url: '/pages/users/user_integral/index' + }, + { + label: "收藏", + value: 3, + k: "collectProductCount", + url: '/pages/users/user_goods_collection/index' + }, + { + label: "浏览记录", + value: 5, + k: "visit_num", + url: '/pages/users/visit_list/index' + }, + { + label: "推广佣金", + value: 6, + k: "brokerage_price", + url: '/pages/users/user_spread_user/index' + }, + { + label: "推广人", + value: 7, + k: "spread_user_count", + url: '/pages/users/user_spread_user/index' + }, + { + label: "推广订单", + value: 8, + k: "spread_order_count", + url: '/pages/users/user_spread_user/index' + }, +]; export default propertyList; \ No newline at end of file diff --git a/utils/util.js b/utils/util.js index 797b82e..da7bb4e 100644 --- a/utils/util.js +++ b/utils/util.js @@ -1,1267 +1,1366 @@ -// +---------------------------------------------------------------------- -// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] -// +---------------------------------------------------------------------- -// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. -// +---------------------------------------------------------------------- -// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 -// +---------------------------------------------------------------------- -// | Author: CRMEB Team -// +---------------------------------------------------------------------- - -import { - TOKENNAME, - HTTP_REQUEST_URL -} from '../config/app.js'; -import store from '../store'; -import { - customerType -} from '@/api/api.js' -// #ifdef APP-PLUS -import permision from "./permission.js" -// #endif -export default { - /** - * opt object | string - * to_url object | string - * 例: - * this.Tips('/pages/test/test'); 跳转不提示 - * this.Tips({title:'提示'},'/pages/test/test'); 提示并跳转 - * this.Tips({title:'提示'},{tab:1,url:'/pages/index/index'}); 提示并跳转值table上 - * tab=1 一定时间后跳转至 table上 - * tab=2 一定时间后跳转至非 table上 - * tab=3 一定时间后返回上页面 - * tab=4 关闭所有页面,打开到应用内的某个页面 - * tab=5 关闭当前页面,跳转到应用内的某个页面 - */ - Tips: function(opt, to_url) { - if (typeof opt == 'string') { - to_url = opt; - opt = {}; - } - let title = opt.title || '', - icon = opt.icon || 'none', - endtime = opt.endtime || 2000, - success = opt.success; - if (title) uni.showToast({ - title: title, - icon: icon, - duration: endtime, - success - }) - if (to_url != undefined) { - if (typeof to_url == 'object') { - let tab = to_url.tab || 1, - url = to_url.url || ''; - switch (tab) { - case 1: - //一定时间后跳转至 table - setTimeout(function() { - uni.switchTab({ - url: url - }) - }, endtime); - break; - case 2: - //跳转至非table页面 - setTimeout(function() { - uni.navigateTo({ - url: url, - }) - }, endtime); - break; - case 3: - //返回上页面 - setTimeout(function() { - // #ifndef H5 - uni.navigateBack({ - delta: parseInt(url), - }) - // #endif - // #ifdef H5 - history.back(); - // #endif - }, endtime); - break; - case 4: - //关闭所有页面,打开到应用内的某个页面 - setTimeout(function() { - uni.reLaunch({ - url: url, - }) - }, endtime); - break; - case 5: - //关闭当前页面,跳转到应用内的某个页面 - setTimeout(function() { - uni.redirectTo({ - url: url, - }) - }, endtime); - break; - } - - } else if (typeof to_url == 'function') { - setTimeout(function() { - to_url && to_url(); - }, endtime); - } else { - //没有提示时跳转不延迟 - setTimeout(function() { - uni.navigateTo({ - url: to_url, - }) - }, title ? endtime : 0); - } - } - }, - // 处理价格 - HandlePrice: function(num, type) { - let obj = [] - if (typeof num == 'number') { - obj = num.toString().split("."); - } else { - obj = num.split("."); - } - if (type) { - if (obj.length) { - return '.' + obj[1]; - } else { - return '' - } - } else { - return obj[0]; - } - }, - // 计算头部自定义导航高度; - getWXStatusHeight() { - // 获取距上 - const barTop = uni.getWindowInfo().statusBarHeight; - // #ifdef MP - // 获取胶囊按钮位置信息 - const menuButtonInfo = wx.getMenuButtonBoundingClientRect() || 0 - // 获取导航栏高度 - const barHeight = menuButtonInfo.height + (menuButtonInfo.top - barTop) * 2 - let barWidth = menuButtonInfo.width - // #endif - // #ifndef MP - // 获取导航栏高度 - const barHeight = parseInt(barTop) + 10; - let barWidth = '100%' - // #endif - return { - barHeight, - barTop, - barWidth - } - }, - /** - * 跳转路径封装函数 - * @param url 跳转路径 - * 选择跳转到其他小程序时,在h5也可以跳转路径 - */ - JumpPath: function(url) { - let arr = url.split('@APPID='); - if (arr.length > 1) { - //#ifdef MP - uni.navigateToMiniProgram({ - appId: arr[arr.length - 1], - path: arr[0], - envVersion: "release", - success: res => { - console.log("打开成功", res); - }, - fail: err => { - console.log('sgdhgf', err); - } - }) - //#endif - //#ifndef MP - this.Tips({ - title: 'h5与app端不支持跳转外部小程序' - }); - //#endif - } else { - if (url == '/pages/short_video/appSwiper/index' || url == '/pages/short_video/nvueSwiper/index') { - //#ifdef APP - url = '/pages/short_video/appSwiper/index' - //#endif - //#ifndef APP - url = '/pages/short_video/nvueSwiper/index' - //#endif - } - if (url.indexOf("http") != -1) { - // #ifdef H5 - // location.href = url; - window.open(url) - // #endif - // #ifdef MP || APP-PLUS - uni.navigateTo({ - url: `/pages/annex/web_view/index?url=${url}` - }); - // #endif - } else { - if (['/pages/goods_cate/goods_cate', - '/pages/order_addcart/order_addcart', - '/pages/user/index', - '/pages/index/index', - '/pages/discoverIndex/index' - ].includes(url)) { - uni.reLaunch({ - url: url - }) - } else { - uni.navigateTo({ - url: url - }) - } - } - } - }, - /** - * 移除数组中的某个数组并组成新的数组返回 - * @param array array 需要移除的数组 - * @param int index 需要移除的数组的键值 - * @param string | int 值 - * @return array - * - */ - ArrayRemove: function(array, index, value) { - const valueArray = []; - if (array instanceof Array) { - for (let i = 0; i < array.length; i++) { - if (typeof index == 'number' && array[index] != i) { - valueArray.push(array[i]); - } else if (typeof index == 'string' && array[i][index] != value) { - valueArray.push(array[i]); - } - } - } - return valueArray; - }, - /** - * 生成海报获取文字 - * @param string text 为传入的文本 - * @param int num 为单行显示的字节长度 - * @return array - */ - textByteLength: function(text, num) { - let strLength = 0; - let rows = 1; - let str = 0; - let arr = []; - for (let j = 0; j < text.length; j++) { - if (text.charCodeAt(j) > 255) { - strLength += 2; - if (strLength > rows * num) { - strLength++; - arr.push(text.slice(str, j)); - str = j; - rows++; - } - } else { - strLength++; - if (strLength > rows * num) { - arr.push(text.slice(str, j)); - str = j; - rows++; - } - } - } - arr.push(text.slice(str, text.length)); - return [strLength, arr, rows] // [处理文字的总字节长度,每行显示内容的数组,行数] - }, - - /** - * 获取分享海报 - * @param array arr2 海报素材 - * @param string store_name 素材文字 - * @param string price 价格 - * @param string ot_price 原始价格 - * @param function successFn 回调函数 - * - * - */ - PosterCanvas: function(fontColor, themeColor, siteName, arr2, store_name, price, ot_price, posterTitle, successFn) { - let that = this; - // uni.showLoading({ - // title: '海报生成中', - // mask: true - // }); - const ctx = uni.createCanvasContext('myCanvas'); - ctx.clearRect(0, 0, 0, 0); - - - /** - * 只能获取合法域名下的图片信息,本地调试无法获取 - * - */ - ctx.fillStyle = '#fff'; - ctx.fillRect(0, 0, 750, 1306); - uni.getImageInfo({ - src: arr2[0], - success: function(res) { - const WIDTH = res.width; - // const HEIGHT = res.height; - // ctx.drawImage(arr2[0], 0, 0, WIDTH, 1050); - ctx.save(); - ctx.setFillStyle(themeColor); - ctx.fillRect(0, 0, WIDTH, 108); - ctx.setFontSize(33) - ctx.setFillStyle('#fff'); - ctx.setTextAlign('center'); - ctx.fillText(posterTitle, WIDTH / 2, 65); - ctx.save(); - ctx.drawImage(arr2[1], 32, 141, 685, 685); - ctx.save(); - // ctx.setFillStyle(themeColor); - // ctx.fillRect(32, 847, 85, 40); - // ctx.setFontSize(30) - // ctx.setFillStyle('#fff'); - // ctx.setTextAlign('left'); - // ctx.fillText('商城', 43, 878); - // ctx.save(); - // ctx.setFontSize(36) - // ctx.setFillStyle('#000'); - // ctx.fillText(siteName, 140, 880); - // ctx.save(); - - // const CONTENT_ROW_LENGTH = 36; - const CONTENT_ROW_LENGTH = 35; - let [contentLeng, contentArray, contentRows] = that.textByteLength(store_name, - CONTENT_ROW_LENGTH); - if (contentRows > 2) { - contentRows = 2; - let textArray = contentArray.slice(0, 2); - textArray[textArray.length - 1] += '...'; - contentArray = textArray; - } - ctx.setTextAlign('left'); - ctx.setFontSize(38); - ctx.setFillStyle('#000'); - let contentHh = 38; - for (let m = 0; m < contentArray.length; m++) { - if (m) { - ctx.fillText(contentArray[m], 30, 900 + contentHh * m + 18); - } else { - ctx.fillText(contentArray[m], 30, 900 + contentHh * m); - } - } - ctx.save(); - ctx.setTextAlign('left') - ctx.setFontSize(32); - ctx.setFillStyle('#999'); - ctx.fillText('¥' + ot_price, 30, 1148 + contentHh); - var underline = function(ctx, text, x, y, size, color, thickness, offset) { - var width = ctx.measureText(text).width; - - switch (ctx.textAlign) { - case "center": - x -= (width / 2); - break; - case "right": - x -= width; - break; - } - - y += size + offset; - - ctx.beginPath(); - ctx.strokeStyle = color; - ctx.lineWidth = thickness; - ctx.moveTo(x, y); - ctx.lineTo(x + width, y); - ctx.stroke(); - } - underline(ctx, '¥' + ot_price, 30, 1146, 28, '#999', 2, 0); - ctx.save(); - ctx.setTextAlign('left') - ctx.setFontSize(54); - ctx.setFillStyle(fontColor); - ctx.fillText('¥' + price, 20, 1070 + contentHh); - ctx.save(); - ctx.setFillStyle('#F5F5F5'); - ctx.fillRect(0, 1222, WIDTH, 84); - ctx.setFontSize(28); - ctx.setFillStyle('#999'); - ctx.setTextAlign('center'); - ctx.fillText('长按识别图中的二维码查看商品详情', WIDTH / 2, 1272); - ctx.save(); - let r = 93; - let d = r * 2; - let cx = WIDTH - d - 30; - // let cy = 1112; - let cy = 1000; - ctx.arc(cx + r, cy + r, r, 0, 2 * Math.PI); - ctx.drawImage(arr2[2], cx, cy, d, d); - ctx.restore(); - // ctx.setTextAlign('left') - // ctx.setFontSize(28); - // ctx.setFillStyle('#999'); - // ctx.fillText('长按或扫描查看', 490, 1030 + contentHh); - ctx.draw(true, function() { - uni.canvasToTempFilePath({ - canvasId: 'myCanvas', - fileType: 'png', - // destWidth: WIDTH, - // destHeight: HEIGHT, - success: function(res) { - // uni.hideLoading(); - successFn && successFn(res.tempFilePath); - } - }) - }); - }, - fail: function(err) { - // uni.hideLoading(); - that.Tips({ - title: '无法获取图片信息' - }); - } - }) - }, - /** - * 获取砍价/拼团海报 - * @param array arr2 海报素材 背景图 - * @param string store_name 素材文字 - * @param string price 价格 - * @param string ot_price 原始价格 - * @param function successFn 回调函数 - * - * - */ - bargainPosterCanvas: function(arr2, title, label, msg, price, userData, typeText, successFn) { - let that = this; - const ctx = uni.createCanvasContext('myCanvas'); - ctx.clearRect(0, 0, 0, 0); - /** - * 只能获取合法域名下的图片信息,本地调试无法获取 - * - */ - uni.getImageInfo({ - src: arr2[0], - success: function(res) { - const wd = res.width; - const hg = res.height; - ctx.fillStyle = '#FFFFFF'; - ctx.fillRect(0, 0, wd, hg); - ctx.drawImage(arr2[0], 0, 0, wd, hg); - ctx.drawImage(arr2[3], wd * 0.032, hg * 0.0684, wd * 0.97, hg * 0.85); - - ctx.save(); - that.handleBorderRect(ctx, wd * (1 - 0.7733) / 2, hg * 0.2315, wd * 0.7733, wd * 0.7733, wd * 0.016) - ctx.clip(); - ctx.drawImage(arr2[1], wd * (1 - 0.7733) / 2, hg * 0.2315, wd * 0.7733, wd * 0.7733); - ctx.restore(); - - ctx.drawImage(arr2[2], wd * 0.70, hg * 0.78, wd * 0.18, wd * 0.18); - ctx.drawImage(arr2[6], wd * 0.112, hg * 0.8122, wd * 0.0346, wd * 0.0346); - - ctx.save(); - that.handleBorderRect(ctx, wd * 0.0746, hg * 0.0224, wd * 0.0693, wd * 0.0693, wd * 0.0693 / 2) - ctx.clip(); - ctx.fillStyle = '#FFFFFF'; - ctx.fillRect(wd * 0.0746, hg * 0.0224, wd * 0.0693, wd * 0.0693); - ctx.restore(); - - ctx.save(); - that.handleBorderRect(ctx, wd * 0.076, hg * 0.0232, wd * 0.0666, wd * 0.0666, wd * 0.0666 / 2) - ctx.clip(); - ctx.drawImage(arr2[5], wd * 0.076, hg * 0.0232, wd * 0.0666, wd * 0.0666); - ctx.restore(); - - ctx.font = '60px sans-serif' - ctx.setFontSize(60); - // 测量价格文本宽度 - const metrics = ctx.measureText(price) - ctx.drawImage(arr2[4], wd * 0.1546 + metrics.width + 24, hg * 0.7929, wd * 0.184, hg * 0.0491); - - // 价格 - ctx.setTextAlign('left'); - ctx.setTextBaseline('top'); - ctx.setFillStyle('#FF2F26'); - ctx.fillText(price, wd * 0.1546, hg * 0.7912); - //标题 - const CONTENT_ROW_LENGTH = 28; - let [contentLeng, contentArray, contentRows] = that.textByteLength(title, - CONTENT_ROW_LENGTH); - if (contentRows > 2) { - contentRows = 2; - let textArray = contentArray.slice(0, 2); - textArray[textArray.length - 1] += '…'; - contentArray = textArray; - } - ctx.setFillStyle('#333333'); - if (contentArray.length < 2) { - ctx.setFontSize(32); - } else { - ctx.setFontSize(32); - } - let contentHh = 12; - for (let m = 0; m < contentArray.length; m++) { - if (m) { - ctx.fillText(contentArray[m], wd * 0.112, hg * 0.1298 + contentHh * m + 36, wd * 0.624); - } else { - ctx.fillText(contentArray[m], wd * 0.112, hg * 0.1298, wd * 0.624); - } - } - // 标签内容 - // ctx.setTextAlign('left') - // ctx.setFontSize(16); - // ctx.setFillStyle('#FFF'); - // ctx.fillText('label', wd * labelx, hg * labely); - // ctx.save(); - // msg - ctx.setFillStyle('#666666'); - ctx.setFontSize(25); - ctx.fillText(msg, wd * 0.1146, hg * 0.8543); - // 邀请你 - ctx.setFillStyle('#FFFFFF'); - ctx.setFontSize(27); - ctx.fillText(userData.nickname + '邀请你' + typeText, wd * 0.1706, hg * 0.0318); - // 扫描二维码 - ctx.setFontSize(24); - ctx.setTextAlign('center'); - ctx.fillText('长按识别或扫描二维码进入', wd * 0.5, hg * 0.9482); - - ctx.draw(false, () => { - uni.canvasToTempFilePath({ - canvasId: 'myCanvas', - fileType: 'png', - quality: 1, - success: (res) => { - successFn && successFn(res.tempFilePath); - uni.hideLoading(); - } - }) - }); - }, - fail: function(err) { - uni.hideLoading(); - that.Tips({ - title: '无法获取图片信息' - }); - } - }) - }, - /** - * 图片圆角设置 - * @param string x x轴位置 - * @param string y y轴位置 - * @param string w 图片宽 - * @param string y 图片高 - * @param string r 圆角值 - */ - handleBorderRect(ctx, x, y, w, h, r) { - ctx.beginPath(); - // 左上角 - ctx.arc(x + r, y + r, r, Math.PI, 1.5 * Math.PI); - ctx.moveTo(x + r, y); - ctx.lineTo(x + w - r, y); - ctx.lineTo(x + w, y + r); - // 右上角 - ctx.arc(x + w - r, y + r, r, 1.5 * Math.PI, 2 * Math.PI); - ctx.lineTo(x + w, y + h - r); - ctx.lineTo(x + w - r, y + h); - // 右下角 - ctx.arc(x + w - r, y + h - r, r, 0, 0.5 * Math.PI); - ctx.lineTo(x + r, y + h); - ctx.lineTo(x, y + h - r); - // 左下角 - ctx.arc(x + r, y + h - r, r, 0.5 * Math.PI, Math.PI); - ctx.lineTo(x, y + r); - ctx.lineTo(x + r, y); - - ctx.fill(); - ctx.closePath(); - }, - /** - * 用户信息分享海报 - * @param array arr2 海报素材 1背景 0二维码 - * @param string nickname 昵称 - * @param string sitename 价格 - * @param function successFn 回调函数 - * - * - */ - userPosterCanvas: function(arr2, nickname, sitename, index, w, h, successFn) { - let that = this; - // uni.showLoading({ - // title: '海报生成中', - // mask: true - // }); - const ctx = uni.createCanvasContext('myCanvas' + index); - ctx.clearRect(0, 0, 0, 0); - /** - * 只能获取合法域名下的图片信息,本地调试无法获取 - * - */ - uni.getImageInfo({ - src: arr2[1], - success: function(res) { - // const WIDTH = res.width; - // const HEIGHT = res.height; - ctx.fillStyle = '#fff'; - ctx.fillRect(0, 0, w, h); - ctx.drawImage(arr2[1], 0, 0, w, h); - ctx.save(); - - - ctx.drawImage(arr2[0], w-86, 386, 70, 70); - ctx.save(); - - ctx.setFontSize(16); - ctx.setFillStyle('#333'); - ctx.fillText(nickname, 45, 414); - ctx.save(); - - - const CONTENT_ROW_LENGTH = 25; - const store_name = '邀请您加入' + sitename; - let [contentLeng, contentArray, contentRows] = that.textByteLength(store_name, - CONTENT_ROW_LENGTH); - if (contentRows > 2) { - contentRows = 2; - let textArray = contentArray.slice(0, 2); - textArray[textArray.length - 1] += '...'; - contentArray = textArray; - } - ctx.setTextAlign('left'); - ctx.setFillStyle('#999999'); - ctx.setFontSize(12); - - let contentHh = 38; - for (let m = 0; m < contentArray.length; m++) { - if (m) { - ctx.fillText(contentArray[m], 16, 456); - } else { - ctx.fillText(contentArray[m], 16, 440); - } - } - ctx.save(); - - that.handleBorderRect(ctx, 16, 396, 24, 24, 12) - ctx.clip(); - ctx.drawImage(arr2[2], 16, 396, 24, 24); - ctx.draw(true, function() { - uni.canvasToTempFilePath({ - canvasId: 'myCanvas' + index, - fileType: 'png', - quality: 1, - success: function(res) { - uni.hideLoading(); - successFn && successFn(res.tempFilePath); - } - }) - }); - }, - fail: function(err) { - uni.hideLoading(); - that.Tips({ - title: '' - }); - } - }) - }, - /* - * 单图上传 - * @param object opt - * @param callable successCallback 成功执行方法 data - * @param callable errorCallback 失败执行方法 - */ - uploadImageOne: function(opt, successCallback, errorCallback) { - let that = this; - if (typeof opt === 'string') { - let url = opt; - opt = {}; - opt.url = url; - } - let count = opt.count || 1, - sizeType = opt.sizeType || ['compressed'], - sourceType = opt.sourceType || ['album', 'camera'], - is_load = opt.is_load || true, - uploadUrl = opt.url || '', - inputName = opt.name || 'pics', - fileType = opt.fileType || 'image'; - uni.chooseImage({ - count: count, //最多可以选择的图片总数 - sizeType: sizeType, // 可以指定是原图还是压缩图,默认二者都有 - sourceType: sourceType, // 可以指定来源是相册还是相机,默认二者都有 - success: function(res) { - //启动上传等待中... - uni.showLoading({ - title: '图片上传中', - }); - uni.uploadFile({ - url: HTTP_REQUEST_URL + '/api/' + uploadUrl, - filePath: res.tempFilePaths[0], - fileType: fileType, - name: inputName, - formData: { - 'filename': inputName - }, - header: { - // #ifdef MP - "Content-Type": "multipart/form-data", - // #endif - [TOKENNAME]: 'Bearer ' + store.state.app.token - }, - success: function(res) { - uni.hideLoading(); - if (res.statusCode == 403) { - that.Tips({ - title: res.data - }); - } else if (res.statusCode == 413) { - that.Tips({ - title: '上传图片失败,请重新上传小尺寸图片' - }); - } else { - let data = res.data ? JSON.parse(res.data) : {}; - if (data.status == 200) { - successCallback && successCallback(data) - } else { - errorCallback && errorCallback(data); - that.Tips({ - title: data.msg - }); - } - } - }, - fail: function(res) { - uni.hideLoading(); - that.Tips({ - title: '上传图片失败' - }); - } - }) - } - }) - }, - /* - * 单图上传压缩版 - * @param object opt - * @param callable successCallback 成功执行方法 data - * @param callable errorCallback 失败执行方法 - */ - uploadImageChange: function(opt, successCallback, errorCallback, sizeCallback) { - let that = this; - if (typeof opt === 'string') { - let url = opt; - opt = {}; - opt.url = url; - } - let count = opt.count || 1, - sizeType = opt.sizeType || ['compressed'], - sourceType = opt.sourceType || ['album', 'camera'], - is_load = opt.is_load || true, - uploadUrl = opt.url || '', - inputName = opt.name || 'pics', - fileType = opt.fileType || 'image'; - uni.chooseImage({ - count: count, //最多可以选择的图片总数 - sizeType: sizeType, // 可以指定是原图还是压缩图,默认二者都有 - sourceType: sourceType, // 可以指定来源是相册还是相机,默认二者都有 - success: function(res) { - //启动上传等待中... - let imgSrc - let objImg = res.tempFilePaths; - objImg.forEach(item => { - uni.getImageInfo({ - src: item, - success(ress) { - uni.showLoading({ - title: '图片上传中', - }); - if (res.tempFiles[0].size <= 2097152) { - uploadImg(ress.path) - return - } - // uploadImg(canvasPath.tempFilePath) - let canvasWidth, canvasHeight, xs, maxWidth = 750 - xs = ress.width / ress.height // 宽高比例 - if (ress.width > maxWidth) { - canvasWidth = maxWidth // 这里是最大限制宽度 - canvasHeight = maxWidth / xs - } else { - canvasWidth = ress.width - canvasHeight = ress.height - } - sizeCallback && sizeCallback({ - w: canvasWidth, - h: canvasHeight - }) - let canvas = uni.createCanvasContext('canvas'); - canvas.width = canvasWidth - canvas.height = canvasHeight - canvas.clearRect(0, 0, canvasWidth, canvasHeight); - canvas.drawImage(ress.path, 0, 0, canvasWidth, canvasHeight) - canvas.save(); - // 这里的画布drawImage是一种异步属性 可能存在未绘制全就执行了draw的问题 so添加延迟 - setTimeout(e => { - canvas.draw(true, () => { - uni.canvasToTempFilePath({ - canvasId: 'canvas', - fileType: 'JPEG', - destWidth: canvasWidth, - destHeight: canvasHeight, - quality: 0.7, - success: function(canvasPath) { - uploadImg(canvasPath - .tempFilePath) - } - }) - }); - }, 200) - - - } - }) - }) - } - }) - - function uploadImg(filePath) { - uni.uploadFile({ - url: HTTP_REQUEST_URL + '/api/' + uploadUrl, - filePath, - fileType: fileType, - name: inputName, - formData: { - 'filename': inputName - }, - header: { - // #ifdef MP - "Content-Type": "multipart/form-data", - // #endif - [TOKENNAME]: 'Bearer ' + store.state.app.token - }, - success: function(res) { - uni.hideLoading(); - if (res.statusCode == 403) { - that.Tips({ - title: res.data - }); - } else { - let data = res.data ? JSON.parse(res.data) : {}; - if (data.status == 200) { - successCallback && successCallback(data) - } else { - errorCallback && errorCallback(data); - that.Tips({ - title: data.msg - }); - } - } - }, - fail: function(res) { - uni.hideLoading(); - that.Tips({ - title: '上传图片失败' - }); - } - }) - } - }, - - /** - * 处理客服不同的跳转; - * - */ - getCustomer(userInfo, url, storeInfo, show) { - let self = this; - customerType().then(res => { - let data = res.data; - if(data.customer_type == 0){ - uni.navigateTo({ - url: url || '/pages/extension/customer_list/chat' - }) - }else if(data.customer_type == 1){ - uni.makePhoneCall({ - phoneNumber: data.customer_phone - }); - }else if(data.customer_type == 2){ - // #ifdef H5 - return window.location.href = data.customer_url - // #endif - // #ifdef APP-PLUS - uni.getSystemInfo({ - success: (res) => { - switch (res.platform) { - case "android": - plus.runtime.openURL(data.customer_url); - break; - case "ios": - plus.runtime.openURL(encodeURI(data.customer_url)); - break; - } - } - }) - // #endif - // #ifdef MP-WEIXIN - uni.navigateTo({ - url: `/pages/annex/web_view/index?url=${data.customer_url}` - }); - // #endif - }else if(data.customer_type == 3){ - // #ifdef MP - wx.openCustomerServiceChat({ - extInfo: { - url: data.customer_url - }, - corpId: data.wechat_work_corpid, - showMessageCard: show ? true : false, - sendMessageTitle: show ? storeInfo.store_name : '', - sendMessagePath: show ? storeInfo.path : '', - sendMessageImg: show ? storeInfo.image : '', - success(res) {}, - fail(err) { - self.Tips({ - title: err.errMsg - }); - } - }) - // #endif - // #ifdef H5 - return window.location.href = data.customer_url - // #endif - // #ifdef APP-PLUS - uni.getSystemInfo({ - success: (res) => { - switch (res.platform) { - case "android": - plus.runtime.openURL(data.customer_url); - break; - case "ios": - plus.runtime.openURL(encodeURI(data.customer_url)); - break; - } - } - }) - // #endif - } - }).catch(err => { - self.Tips({ - title: err - }); - }) - }, - /** - * 小程序头像获取上传 - * @param uploadUrl 上传接口地址 - * @param filePath 上传文件路径 - * @param successCallback success回调 - * @param errorCallback err回调 - */ - uploadImgs(uploadUrl, filePath, successCallback, errorCallback) { - let that = this; - uni.uploadFile({ - url: HTTP_REQUEST_URL + '/api/' + uploadUrl, - filePath: filePath, - fileType: 'image', - name: 'pics', - formData: { - 'filename': 'pics' - }, - header: { - // #ifdef MP - "Content-Type": "multipart/form-data", - // #endif - [TOKENNAME]: 'Bearer ' + store.state.app.token - }, - success: (res) => { - uni.hideLoading(); - if (res.statusCode == 403) { - that.Tips({ - title: res.data - }); - } else if (res.statusCode == 413) { - that.Tips({ - title: '上传图片失败,请重新上传小尺寸图片' - }); - } else { - let data = res.data ? JSON.parse(res.data) : {}; - if (data.status == 200) { - successCallback && successCallback(data) - } else { - errorCallback && errorCallback(data); - that.Tips({ - title: data.msg - }); - } - } - }, - fail: (err) => { - uni.hideLoading(); - that.Tips({ - title: '上传图片失败' - }); - } - }) - }, - /** - * 小程序比较版本信息 - * @param v1 当前版本 - * @param v2 进行比较的版本 - * @return boolen - * - */ - compareVersion(v1, v2) { - v1 = v1.split('.') - v2 = v2.split('.') - const len = Math.max(v1.length, v2.length) - - while (v1.length < len) { - v1.push('0') - } - while (v2.length < len) { - v2.push('0') - } - - for (let i = 0; i < len; i++) { - const num1 = parseInt(v1[i]) - const num2 = parseInt(v2[i]) - - if (num1 > num2) { - return 1 - } else if (num1 < num2) { - return -1 - } - } - - return 0 - }, - /** - * 处理服务器扫码带进来的参数 - * @param string param 扫码携带参数 - * @param string k 整体分割符 默认为:& - * @param string p 单个分隔符 默认为:= - * @return object - * - */ - // #ifdef MP - getUrlParams: function(param, k, p) { - if (typeof param != 'string') return {}; - k = k ? k : '&'; //整体参数分隔符 - p = p ? p : '='; //单个参数分隔符 - var value = {}; - if (param.indexOf(k) !== -1) { - param = param.split(k); - for (var val in param) { - if (param[val].indexOf(p) !== -1) { - var item = param[val].split(p); - value[item[0]] = item[1]; - } - } - } else if (param.indexOf(p) !== -1) { - var item = param.split(p); - value[item[0]] = item[1]; - } else { - return param; - } - return value; - }, - // #endif - /* - * 合并数组 - */ - SplitArray(list, sp) { - if (typeof list != 'object') return []; - if (sp === undefined) sp = []; - for (var i = 0; i < list.length; i++) { - sp.push(list[i]); - } - return sp; - }, - trim(backUrlCRshlcICwGdGY) { - return String.prototype.trim.call(backUrlCRshlcICwGdGY); - }, - $h: { - //除法函数,用来得到精确的除法结果 - //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 - //调用:$h.Div(arg1,arg2) - //返回值:arg1除以arg2的精确结果 - Div: function(arg1, arg2) { - arg1 = parseFloat(arg1); - arg2 = parseFloat(arg2); - var t1 = 0, - t2 = 0, - r1, r2; - try { - t1 = arg1.toString().split(".")[1].length; - } catch (e) {} - try { - t2 = arg2.toString().split(".")[1].length; - } catch (e) {} - r1 = Number(arg1.toString().replace(".", "")); - r2 = Number(arg2.toString().replace(".", "")); - return this.Mul(r1 / r2, Math.pow(10, t2 - t1)); - }, - //加法函数,用来得到精确的加法结果 - //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 - //调用:$h.Add(arg1,arg2) - //返回值:arg1加上arg2的精确结果 - Add: function(arg1, arg2) { - arg2 = parseFloat(arg2); - var r1, r2, m; - try { - r1 = arg1.toString().split(".")[1].length - } catch (e) { - r1 = 0 - } - try { - r2 = arg2.toString().split(".")[1].length - } catch (e) { - r2 = 0 - } - m = Math.pow(100, Math.max(r1, r2)); - return (this.Mul(arg1, m) + this.Mul(arg2, m)) / m; - }, - //减法函数,用来得到精确的减法结果 - //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。 - //调用:$h.Sub(arg1,arg2) - //返回值:arg1减去arg2的精确结果 - Sub: function(arg1, arg2) { - arg1 = parseFloat(arg1); - arg2 = parseFloat(arg2); - var r1, r2, m, n; - try { - r1 = arg1.toString().split(".")[1].length - } catch (e) { - r1 = 0 - } - try { - r2 = arg2.toString().split(".")[1].length - } catch (e) { - r2 = 0 - } - m = Math.pow(10, Math.max(r1, r2)); - //动态控制精度长度 - n = (r1 >= r2) ? r1 : r2; - return ((this.Mul(arg1, m) - this.Mul(arg2, m)) / m).toFixed(n); - }, - //乘法函数,用来得到精确的乘法结果 - //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 - //调用:$h.Mul(arg1,arg2) - //返回值:arg1乘以arg2的精确结果 - Mul: function(arg1, arg2) { - arg1 = parseFloat(arg1); - arg2 = parseFloat(arg2); - var m = 0, - s1 = arg1.toString(), - s2 = arg2.toString(); - try { - m += s1.split(".")[1].length - } catch (e) {} - try { - m += s2.split(".")[1].length - } catch (e) {} - return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m); - }, - }, - // 获取地理位置; - $L: { - async getLocation() { - // #ifdef APP-PLUS - let status = await this.checkPermission(); - if (status !== 1) { - return; - } - // #endif - // #ifdef MP-WEIXIN || MP-TOUTIAO || MP-QQ - let status = await this.getSetting(); - if (status === 2) { - this.openSetting(); - return; - } - // #endif - - this.doGetLocation(); - }, - doGetLocation() { - uni.getLocation({ - success: (res) => { - uni.removeStorageSync('CACHE_LONGITUDE'); - uni.removeStorageSync('CACHE_LATITUDE'); - uni.setStorageSync('CACHE_LONGITUDE', res.longitude); - uni.setStorageSync('CACHE_LATITUDE', res.latitude); - }, - fail: (err) => { - // #ifdef MP-BAIDU - if (err.errCode === 202 || err.errCode === 10003) { // 202模拟器 10003真机 user deny - this.openSetting(); - } - // #endif - // #ifndef MP-BAIDU - if (err.errMsg.indexOf("auth deny") >= 0) { - uni.showToast({ - title: "访问位置被拒绝" - }) - } else { - uni.showToast({ - title: err.errMsg - }) - } - // #endif - } - }) - }, - getSetting: function() { - return new Promise((resolve, reject) => { - uni.getSetting({ - success: (res) => { - if (res.authSetting['scope.userLocation'] === undefined) { - resolve(0); - return; - } - if (res.authSetting['scope.userLocation']) { - resolve(1); - } else { - resolve(2); - } - } - }); - }); - }, - openSetting: function() { - uni.openSetting({ - success: (res) => { - if (res.authSetting && res.authSetting['scope.userLocation']) { - this.doGetLocation(); - } - }, - fail: (err) => {} - }) - }, - async checkPermission() { - let status = permision.isIOS ? await permision.requestIOS('location') : - await permision.requestAndroid('android.permission.ACCESS_FINE_LOCATION'); - - if (status === null || status === 1) { - status = 1; - } else if (status === 2) { - uni.showModal({ - content: "系统定位已关闭", - confirmText: "确定", - showCancel: false, - success: function(res) {} - }) - } else if (status.code) { - uni.showModal({ - content: status.message - }) - } else { - uni.showModal({ - content: "需要定位权限", - confirmText: "设置", - success: function(res) { - if (res.confirm) { - permision.gotoAppSetting(); - } - } - }) - } - return status; - }, - } - -} \ No newline at end of file +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- + +import { + TOKENNAME, + HTTP_REQUEST_URL, + TRUSTED_DOMAINS +} from '../config/app.js'; +import { LOGIN_STATUS } from '../config/cache.js'; +import store from '../store'; +import { toLogin } from '../libs/login'; +import { + customerType +} from '@/api/api.js' +// #ifdef APP-PLUS +import permision from "./permission.js" +// #endif + +/** + * 不依赖 atob 的 base64 解码(小程序环境不提供 atob) + */ +function base64Decode(str) { + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var output = ''; + var i = 0; + str = String(str).replace(/[^A-Za-z0-9+/=]/g, ''); + while (i < str.length) { + var b1 = chars.indexOf(str.charAt(i++)); + var b2 = chars.indexOf(str.charAt(i++)); + var b3 = chars.indexOf(str.charAt(i++)); + var b4 = chars.indexOf(str.charAt(i++)); + output += String.fromCharCode((b1 << 2) | (b2 >> 4)); + if (b3 !== 64) output += String.fromCharCode(((b2 & 15) << 4) | (b3 >> 2)); + if (b4 !== 64) output += String.fromCharCode(((b3 & 3) << 6) | b4); + } + return output; +} + +export default { + /** + * opt object | string + * to_url object | string + * 例: + * this.Tips('/pages/test/test'); 跳转不提示 + * this.Tips({title:'提示'},'/pages/test/test'); 提示并跳转 + * this.Tips({title:'提示'},{tab:1,url:'/pages/index/index'}); 提示并跳转值table上 + * tab=1 一定时间后跳转至 table上 + * tab=2 一定时间后跳转至非 table上 + * tab=3 一定时间后返回上页面 + * tab=4 关闭所有页面,打开到应用内的某个页面 + * tab=5 关闭当前页面,跳转到应用内的某个页面 + */ + Tips: function(opt, to_url) { + if (typeof opt == 'string') { + to_url = opt; + opt = {}; + } + let title = opt.title || '', + icon = opt.icon || 'none', + endtime = opt.endtime || 2000, + success = opt.success; + if (title) uni.showToast({ + title: title, + icon: icon, + duration: endtime, + success + }) + if (to_url != undefined) { + if (typeof to_url == 'object') { + let tab = to_url.tab || 1, + url = to_url.url || ''; + switch (tab) { + case 1: + //一定时间后跳转至 table + setTimeout(function() { + uni.switchTab({ + url: url + }) + }, endtime); + break; + case 2: + //跳转至非table页面 + setTimeout(function() { + uni.navigateTo({ + url: url, + }) + }, endtime); + break; + case 3: + //返回上页面 + setTimeout(function() { + // #ifndef H5 + uni.navigateBack({ + delta: parseInt(url), + }) + // #endif + // #ifdef H5 + history.back(); + // #endif + }, endtime); + break; + case 4: + //关闭所有页面,打开到应用内的某个页面 + setTimeout(function() { + uni.reLaunch({ + url: url, + }) + }, endtime); + break; + case 5: + //关闭当前页面,跳转到应用内的某个页面 + setTimeout(function() { + uni.redirectTo({ + url: url, + }) + }, endtime); + break; + } + + } else if (typeof to_url == 'function') { + setTimeout(function() { + to_url && to_url(); + }, endtime); + } else { + //没有提示时跳转不延迟 + setTimeout(function() { + uni.navigateTo({ + url: to_url, + }) + }, title ? endtime : 0); + } + } + }, + // 处理价格 + HandlePrice: function(num, type) { + let obj = [] + if (typeof num == 'number') { + obj = num.toString().split("."); + } else { + obj = num.split("."); + } + if (type) { + if (obj.length) { + return '.' + obj[1]; + } else { + return '' + } + } else { + return obj[0]; + } + }, + // 计算头部自定义导航高度; + getWXStatusHeight() { + // 获取距上 + const barTop = uni.getWindowInfo().statusBarHeight; + // #ifdef MP + // 获取胶囊按钮位置信息 + const menuButtonInfo = wx.getMenuButtonBoundingClientRect() || 0 + // 获取导航栏高度 + const barHeight = menuButtonInfo.height + (menuButtonInfo.top - barTop) * 2 + let barWidth = menuButtonInfo.width + // #endif + // #ifndef MP + // 获取导航栏高度 + const barHeight = parseInt(barTop) + 10; + let barWidth = '100%' + // #endif + return { + barHeight, + barTop, + barWidth + } + }, + /** + * 跳转路径封装函数 + * @param url 跳转路径 + * 选择跳转到其他小程序时,在h5也可以跳转路径 + */ + JumpPath: function(url) { + let arr = url.split('@APPID='); + if (arr.length > 1) { + //#ifdef MP + uni.navigateToMiniProgram({ + appId: arr[arr.length - 1], + path: arr[0], + envVersion: "release", + success: res => { + console.log("打开成功", res); + }, + fail: err => { + console.log('sgdhgf', err); + } + }) + //#endif + //#ifndef MP + this.Tips({ + title: 'h5与app端不支持跳转外部小程序' + }); + //#endif + } else { + if (url == '/pages/short_video/appSwiper/index' || url == '/pages/short_video/nvueSwiper/index') { + //#ifdef APP + url = '/pages/short_video/appSwiper/index' + //#endif + //#ifndef APP + url = '/pages/short_video/nvueSwiper/index' + //#endif + } + if (url.indexOf("http") != -1) { + // #ifdef H5 + // location.href = url; + window.open(url) + // #endif + // #ifdef MP || APP-PLUS + let openUrl = url; + let token = store.state.app.token; + if (token && url.indexOf('token=') === -1 && (url.indexOf(HTTP_REQUEST_URL) === 0 || (TRUSTED_DOMAINS || []).some(d => url.indexOf(d) === 0))) { + // 从 JWT payload 中提取 openid 和 unionid + let openid = store.state.app.openid; + let unionid = store.state.app.unionid || ''; + console.log('[GoUrl] store中 unionid=' + (store.state.app.unionid || '(空)')); + if (!openid) { + try { openid = uni.getStorageSync('OPENID'); } catch (e) {} + } + if (!unionid) { + try { + unionid = uni.getStorageSync('UNIONID'); + console.log('[GoUrl] 缓存中 unionid=' + (unionid || '(空)')); + } catch (e) {} + } + if ((!openid || !unionid) && token) { + try { + let parts = token.split('.'); + if (parts.length === 3) { + let payload = parts[1] + .replace(/-/g, '+') + .replace(/_/g, '/'); + while (payload.length % 4 !== 0) payload += '='; + const data = JSON.parse(base64Decode(payload)); + if (!openid) openid = data.openid || ''; + if (!unionid) unionid = data.unionid || ''; + console.log('[GoUrl] JWT中 unionid=' + (data.unionid || '(空)')); + } + } catch (e) {} + } + // 最后兜底:从用户信息缓存中读 unionid + if (!unionid) { + try { + const userInfo = uni.getStorageSync('user_info'); + if (userInfo) { + const info = typeof userInfo === 'string' ? JSON.parse(userInfo) : userInfo; + unionid = info.unionid || ''; + console.log('[GoUrl] userInfo中 unionid=' + (info.unionid || '(空)')); + } + } catch (e) {} + } + console.log('[GoUrl] 最终参数: openid=' + (openid || '(空)') + ', unionid=' + (unionid || '(空)') + ', t=' + Math.floor(Date.now() / 1000)); + if (!openid) { + // 先存目标路径,登录后自动跳回 web_view + Cache.set('login_back_url', '/pages/annex/web_view/index?url=' + encodeURIComponent(openUrl)); + toLogin(); + return; + } + const joiner = url.indexOf('?') !== -1 ? '&' : '?'; + const t = Math.floor(Date.now() / 1000); + openUrl = url + joiner + 'openid=' + encodeURIComponent(openid); + if (unionid) { + openUrl += '&unionid=' + encodeURIComponent(unionid); + } + openUrl += '&t=' + t; + } + uni.navigateTo({ + url: `/pages/annex/web_view/index?url=${encodeURIComponent(openUrl)}` + }); + // #endif + } else { + if (['/pages/goods_cate/goods_cate', + '/pages/order_addcart/order_addcart', + '/pages/user/index', + '/pages/index/index', + '/pages/discoverIndex/index' + ].includes(url)) { + uni.reLaunch({ + url: url + }) + } else { + uni.navigateTo({ + url: url + }) + } + } + } + }, + /** + * 移除数组中的某个数组并组成新的数组返回 + * @param array array 需要移除的数组 + * @param int index 需要移除的数组的键值 + * @param string | int 值 + * @return array + * + */ + ArrayRemove: function(array, index, value) { + const valueArray = []; + if (array instanceof Array) { + for (let i = 0; i < array.length; i++) { + if (typeof index == 'number' && array[index] != i) { + valueArray.push(array[i]); + } else if (typeof index == 'string' && array[i][index] != value) { + valueArray.push(array[i]); + } + } + } + return valueArray; + }, + /** + * 生成海报获取文字 + * @param string text 为传入的文本 + * @param int num 为单行显示的字节长度 + * @return array + */ + textByteLength: function(text, num) { + let strLength = 0; + let rows = 1; + let str = 0; + let arr = []; + for (let j = 0; j < text.length; j++) { + if (text.charCodeAt(j) > 255) { + strLength += 2; + if (strLength > rows * num) { + strLength++; + arr.push(text.slice(str, j)); + str = j; + rows++; + } + } else { + strLength++; + if (strLength > rows * num) { + arr.push(text.slice(str, j)); + str = j; + rows++; + } + } + } + arr.push(text.slice(str, text.length)); + return [strLength, arr, rows] // [处理文字的总字节长度,每行显示内容的数组,行数] + }, + + /** + * 获取分享海报 + * @param array arr2 海报素材 + * @param string store_name 素材文字 + * @param string price 价格 + * @param string ot_price 原始价格 + * @param function successFn 回调函数 + * + * + */ + PosterCanvas: function(fontColor, themeColor, siteName, arr2, store_name, price, ot_price, posterTitle, successFn) { + let that = this; + // uni.showLoading({ + // title: '海报生成中', + // mask: true + // }); + const ctx = uni.createCanvasContext('myCanvas'); + ctx.clearRect(0, 0, 0, 0); + + + /** + * 只能获取合法域名下的图片信息,本地调试无法获取 + * + */ + ctx.fillStyle = '#fff'; + ctx.fillRect(0, 0, 750, 1306); + uni.getImageInfo({ + src: arr2[0], + success: function(res) { + const WIDTH = res.width; + // const HEIGHT = res.height; + // ctx.drawImage(arr2[0], 0, 0, WIDTH, 1050); + ctx.save(); + ctx.setFillStyle(themeColor); + ctx.fillRect(0, 0, WIDTH, 108); + ctx.setFontSize(33) + ctx.setFillStyle('#fff'); + ctx.setTextAlign('center'); + ctx.fillText(posterTitle, WIDTH / 2, 65); + ctx.save(); + ctx.drawImage(arr2[1], 32, 141, 685, 685); + ctx.save(); + // ctx.setFillStyle(themeColor); + // ctx.fillRect(32, 847, 85, 40); + // ctx.setFontSize(30) + // ctx.setFillStyle('#fff'); + // ctx.setTextAlign('left'); + // ctx.fillText('商城', 43, 878); + // ctx.save(); + // ctx.setFontSize(36) + // ctx.setFillStyle('#000'); + // ctx.fillText(siteName, 140, 880); + // ctx.save(); + + // const CONTENT_ROW_LENGTH = 36; + const CONTENT_ROW_LENGTH = 35; + let [contentLeng, contentArray, contentRows] = that.textByteLength(store_name, + CONTENT_ROW_LENGTH); + if (contentRows > 2) { + contentRows = 2; + let textArray = contentArray.slice(0, 2); + textArray[textArray.length - 1] += '...'; + contentArray = textArray; + } + ctx.setTextAlign('left'); + ctx.setFontSize(38); + ctx.setFillStyle('#000'); + let contentHh = 38; + for (let m = 0; m < contentArray.length; m++) { + if (m) { + ctx.fillText(contentArray[m], 30, 900 + contentHh * m + 18); + } else { + ctx.fillText(contentArray[m], 30, 900 + contentHh * m); + } + } + ctx.save(); + ctx.setTextAlign('left') + ctx.setFontSize(32); + ctx.setFillStyle('#999'); + ctx.fillText('¥' + ot_price, 30, 1148 + contentHh); + var underline = function(ctx, text, x, y, size, color, thickness, offset) { + var width = ctx.measureText(text).width; + + switch (ctx.textAlign) { + case "center": + x -= (width / 2); + break; + case "right": + x -= width; + break; + } + + y += size + offset; + + ctx.beginPath(); + ctx.strokeStyle = color; + ctx.lineWidth = thickness; + ctx.moveTo(x, y); + ctx.lineTo(x + width, y); + ctx.stroke(); + } + underline(ctx, '¥' + ot_price, 30, 1146, 28, '#999', 2, 0); + ctx.save(); + ctx.setTextAlign('left') + ctx.setFontSize(54); + ctx.setFillStyle(fontColor); + ctx.fillText('¥' + price, 20, 1070 + contentHh); + ctx.save(); + ctx.setFillStyle('#F5F5F5'); + ctx.fillRect(0, 1222, WIDTH, 84); + ctx.setFontSize(28); + ctx.setFillStyle('#999'); + ctx.setTextAlign('center'); + ctx.fillText('长按识别图中的二维码查看商品详情', WIDTH / 2, 1272); + ctx.save(); + let r = 93; + let d = r * 2; + let cx = WIDTH - d - 30; + // let cy = 1112; + let cy = 1000; + ctx.arc(cx + r, cy + r, r, 0, 2 * Math.PI); + ctx.drawImage(arr2[2], cx, cy, d, d); + ctx.restore(); + // ctx.setTextAlign('left') + // ctx.setFontSize(28); + // ctx.setFillStyle('#999'); + // ctx.fillText('长按或扫描查看', 490, 1030 + contentHh); + ctx.draw(true, function() { + uni.canvasToTempFilePath({ + canvasId: 'myCanvas', + fileType: 'png', + // destWidth: WIDTH, + // destHeight: HEIGHT, + success: function(res) { + // uni.hideLoading(); + successFn && successFn(res.tempFilePath); + } + }) + }); + }, + fail: function(err) { + // uni.hideLoading(); + that.Tips({ + title: '无法获取图片信息' + }); + } + }) + }, + /** + * 获取砍价/拼团海报 + * @param array arr2 海报素材 背景图 + * @param string store_name 素材文字 + * @param string price 价格 + * @param string ot_price 原始价格 + * @param function successFn 回调函数 + * + * + */ + bargainPosterCanvas: function(arr2, title, label, msg, price, userData, typeText, successFn) { + let that = this; + const ctx = uni.createCanvasContext('myCanvas'); + ctx.clearRect(0, 0, 0, 0); + /** + * 只能获取合法域名下的图片信息,本地调试无法获取 + * + */ + uni.getImageInfo({ + src: arr2[0], + success: function(res) { + const wd = res.width; + const hg = res.height; + ctx.fillStyle = '#FFFFFF'; + ctx.fillRect(0, 0, wd, hg); + ctx.drawImage(arr2[0], 0, 0, wd, hg); + ctx.drawImage(arr2[3], wd * 0.032, hg * 0.0684, wd * 0.97, hg * 0.85); + + ctx.save(); + that.handleBorderRect(ctx, wd * (1 - 0.7733) / 2, hg * 0.2315, wd * 0.7733, wd * 0.7733, wd * 0.016) + ctx.clip(); + ctx.drawImage(arr2[1], wd * (1 - 0.7733) / 2, hg * 0.2315, wd * 0.7733, wd * 0.7733); + ctx.restore(); + + ctx.drawImage(arr2[2], wd * 0.70, hg * 0.78, wd * 0.18, wd * 0.18); + ctx.drawImage(arr2[6], wd * 0.112, hg * 0.8122, wd * 0.0346, wd * 0.0346); + + ctx.save(); + that.handleBorderRect(ctx, wd * 0.0746, hg * 0.0224, wd * 0.0693, wd * 0.0693, wd * 0.0693 / 2) + ctx.clip(); + ctx.fillStyle = '#FFFFFF'; + ctx.fillRect(wd * 0.0746, hg * 0.0224, wd * 0.0693, wd * 0.0693); + ctx.restore(); + + ctx.save(); + that.handleBorderRect(ctx, wd * 0.076, hg * 0.0232, wd * 0.0666, wd * 0.0666, wd * 0.0666 / 2) + ctx.clip(); + ctx.drawImage(arr2[5], wd * 0.076, hg * 0.0232, wd * 0.0666, wd * 0.0666); + ctx.restore(); + + ctx.font = '60px sans-serif' + ctx.setFontSize(60); + // 测量价格文本宽度 + const metrics = ctx.measureText(price) + ctx.drawImage(arr2[4], wd * 0.1546 + metrics.width + 24, hg * 0.7929, wd * 0.184, hg * 0.0491); + + // 价格 + ctx.setTextAlign('left'); + ctx.setTextBaseline('top'); + ctx.setFillStyle('#FF2F26'); + ctx.fillText(price, wd * 0.1546, hg * 0.7912); + //标题 + const CONTENT_ROW_LENGTH = 28; + let [contentLeng, contentArray, contentRows] = that.textByteLength(title, + CONTENT_ROW_LENGTH); + if (contentRows > 2) { + contentRows = 2; + let textArray = contentArray.slice(0, 2); + textArray[textArray.length - 1] += '…'; + contentArray = textArray; + } + ctx.setFillStyle('#333333'); + if (contentArray.length < 2) { + ctx.setFontSize(32); + } else { + ctx.setFontSize(32); + } + let contentHh = 12; + for (let m = 0; m < contentArray.length; m++) { + if (m) { + ctx.fillText(contentArray[m], wd * 0.112, hg * 0.1298 + contentHh * m + 36, wd * 0.624); + } else { + ctx.fillText(contentArray[m], wd * 0.112, hg * 0.1298, wd * 0.624); + } + } + // 标签内容 + // ctx.setTextAlign('left') + // ctx.setFontSize(16); + // ctx.setFillStyle('#FFF'); + // ctx.fillText('label', wd * labelx, hg * labely); + // ctx.save(); + // msg + ctx.setFillStyle('#666666'); + ctx.setFontSize(25); + ctx.fillText(msg, wd * 0.1146, hg * 0.8543); + // 邀请你 + ctx.setFillStyle('#FFFFFF'); + ctx.setFontSize(27); + ctx.fillText(userData.nickname + '邀请你' + typeText, wd * 0.1706, hg * 0.0318); + // 扫描二维码 + ctx.setFontSize(24); + ctx.setTextAlign('center'); + ctx.fillText('长按识别或扫描二维码进入', wd * 0.5, hg * 0.9482); + + ctx.draw(false, () => { + uni.canvasToTempFilePath({ + canvasId: 'myCanvas', + fileType: 'png', + quality: 1, + success: (res) => { + successFn && successFn(res.tempFilePath); + uni.hideLoading(); + } + }) + }); + }, + fail: function(err) { + uni.hideLoading(); + that.Tips({ + title: '无法获取图片信息' + }); + } + }) + }, + /** + * 图片圆角设置 + * @param string x x轴位置 + * @param string y y轴位置 + * @param string w 图片宽 + * @param string y 图片高 + * @param string r 圆角值 + */ + handleBorderRect(ctx, x, y, w, h, r) { + ctx.beginPath(); + // 左上角 + ctx.arc(x + r, y + r, r, Math.PI, 1.5 * Math.PI); + ctx.moveTo(x + r, y); + ctx.lineTo(x + w - r, y); + ctx.lineTo(x + w, y + r); + // 右上角 + ctx.arc(x + w - r, y + r, r, 1.5 * Math.PI, 2 * Math.PI); + ctx.lineTo(x + w, y + h - r); + ctx.lineTo(x + w - r, y + h); + // 右下角 + ctx.arc(x + w - r, y + h - r, r, 0, 0.5 * Math.PI); + ctx.lineTo(x + r, y + h); + ctx.lineTo(x, y + h - r); + // 左下角 + ctx.arc(x + r, y + h - r, r, 0.5 * Math.PI, Math.PI); + ctx.lineTo(x, y + r); + ctx.lineTo(x + r, y); + + ctx.fill(); + ctx.closePath(); + }, + /** + * 用户信息分享海报 + * @param array arr2 海报素材 1背景 0二维码 + * @param string nickname 昵称 + * @param string sitename 价格 + * @param function successFn 回调函数 + * + * + */ + userPosterCanvas: function(arr2, nickname, sitename, index, w, h, successFn) { + let that = this; + // uni.showLoading({ + // title: '海报生成中', + // mask: true + // }); + const ctx = uni.createCanvasContext('myCanvas' + index); + ctx.clearRect(0, 0, 0, 0); + /** + * 只能获取合法域名下的图片信息,本地调试无法获取 + * + */ + uni.getImageInfo({ + src: arr2[1], + success: function(res) { + // const WIDTH = res.width; + // const HEIGHT = res.height; + ctx.fillStyle = '#fff'; + ctx.fillRect(0, 0, w, h); + ctx.drawImage(arr2[1], 0, 0, w, h); + ctx.save(); + + + ctx.drawImage(arr2[0], w-86, 386, 70, 70); + ctx.save(); + + ctx.setFontSize(16); + ctx.setFillStyle('#333'); + ctx.fillText(nickname, 45, 414); + ctx.save(); + + + const CONTENT_ROW_LENGTH = 25; + const store_name = '邀请您加入' + sitename; + let [contentLeng, contentArray, contentRows] = that.textByteLength(store_name, + CONTENT_ROW_LENGTH); + if (contentRows > 2) { + contentRows = 2; + let textArray = contentArray.slice(0, 2); + textArray[textArray.length - 1] += '...'; + contentArray = textArray; + } + ctx.setTextAlign('left'); + ctx.setFillStyle('#999999'); + ctx.setFontSize(12); + + let contentHh = 38; + for (let m = 0; m < contentArray.length; m++) { + if (m) { + ctx.fillText(contentArray[m], 16, 456); + } else { + ctx.fillText(contentArray[m], 16, 440); + } + } + ctx.save(); + + that.handleBorderRect(ctx, 16, 396, 24, 24, 12) + ctx.clip(); + ctx.drawImage(arr2[2], 16, 396, 24, 24); + ctx.draw(true, function() { + uni.canvasToTempFilePath({ + canvasId: 'myCanvas' + index, + fileType: 'png', + quality: 1, + success: function(res) { + uni.hideLoading(); + successFn && successFn(res.tempFilePath); + } + }) + }); + }, + fail: function(err) { + uni.hideLoading(); + that.Tips({ + title: '' + }); + } + }) + }, + /* + * 单图上传 + * @param object opt + * @param callable successCallback 成功执行方法 data + * @param callable errorCallback 失败执行方法 + */ + uploadImageOne: function(opt, successCallback, errorCallback) { + let that = this; + if (typeof opt === 'string') { + let url = opt; + opt = {}; + opt.url = url; + } + let count = opt.count || 1, + sizeType = opt.sizeType || ['compressed'], + sourceType = opt.sourceType || ['album', 'camera'], + is_load = opt.is_load || true, + uploadUrl = opt.url || '', + inputName = opt.name || 'pics', + fileType = opt.fileType || 'image'; + uni.chooseImage({ + count: count, //最多可以选择的图片总数 + sizeType: sizeType, // 可以指定是原图还是压缩图,默认二者都有 + sourceType: sourceType, // 可以指定来源是相册还是相机,默认二者都有 + success: function(res) { + //启动上传等待中... + uni.showLoading({ + title: '图片上传中', + }); + uni.uploadFile({ + url: HTTP_REQUEST_URL + '/api/' + uploadUrl, + filePath: res.tempFilePaths[0], + fileType: fileType, + name: inputName, + formData: { + 'filename': inputName + }, + header: { + // #ifdef MP + "Content-Type": "multipart/form-data", + // #endif + [TOKENNAME]: 'Bearer ' + store.state.app.token + }, + success: function(res) { + uni.hideLoading(); + if (res.statusCode == 403) { + that.Tips({ + title: res.data + }); + } else if (res.statusCode == 413) { + that.Tips({ + title: '上传图片失败,请重新上传小尺寸图片' + }); + } else { + let data = res.data ? JSON.parse(res.data) : {}; + if (data.status == 200) { + successCallback && successCallback(data) + } else { + errorCallback && errorCallback(data); + that.Tips({ + title: data.msg + }); + } + } + }, + fail: function(res) { + uni.hideLoading(); + that.Tips({ + title: '上传图片失败' + }); + } + }) + } + }) + }, + /* + * 单图上传压缩版 + * @param object opt + * @param callable successCallback 成功执行方法 data + * @param callable errorCallback 失败执行方法 + */ + uploadImageChange: function(opt, successCallback, errorCallback, sizeCallback) { + let that = this; + if (typeof opt === 'string') { + let url = opt; + opt = {}; + opt.url = url; + } + let count = opt.count || 1, + sizeType = opt.sizeType || ['compressed'], + sourceType = opt.sourceType || ['album', 'camera'], + is_load = opt.is_load || true, + uploadUrl = opt.url || '', + inputName = opt.name || 'pics', + fileType = opt.fileType || 'image'; + uni.chooseImage({ + count: count, //最多可以选择的图片总数 + sizeType: sizeType, // 可以指定是原图还是压缩图,默认二者都有 + sourceType: sourceType, // 可以指定来源是相册还是相机,默认二者都有 + success: function(res) { + //启动上传等待中... + let imgSrc + let objImg = res.tempFilePaths; + objImg.forEach(item => { + uni.getImageInfo({ + src: item, + success(ress) { + uni.showLoading({ + title: '图片上传中', + }); + if (res.tempFiles[0].size <= 2097152) { + uploadImg(ress.path) + return + } + // uploadImg(canvasPath.tempFilePath) + let canvasWidth, canvasHeight, xs, maxWidth = 750 + xs = ress.width / ress.height // 宽高比例 + if (ress.width > maxWidth) { + canvasWidth = maxWidth // 这里是最大限制宽度 + canvasHeight = maxWidth / xs + } else { + canvasWidth = ress.width + canvasHeight = ress.height + } + sizeCallback && sizeCallback({ + w: canvasWidth, + h: canvasHeight + }) + let canvas = uni.createCanvasContext('canvas'); + canvas.width = canvasWidth + canvas.height = canvasHeight + canvas.clearRect(0, 0, canvasWidth, canvasHeight); + canvas.drawImage(ress.path, 0, 0, canvasWidth, canvasHeight) + canvas.save(); + // 这里的画布drawImage是一种异步属性 可能存在未绘制全就执行了draw的问题 so添加延迟 + setTimeout(e => { + canvas.draw(true, () => { + uni.canvasToTempFilePath({ + canvasId: 'canvas', + fileType: 'JPEG', + destWidth: canvasWidth, + destHeight: canvasHeight, + quality: 0.7, + success: function(canvasPath) { + uploadImg(canvasPath + .tempFilePath) + } + }) + }); + }, 200) + + + } + }) + }) + } + }) + + function uploadImg(filePath) { + uni.uploadFile({ + url: HTTP_REQUEST_URL + '/api/' + uploadUrl, + filePath, + fileType: fileType, + name: inputName, + formData: { + 'filename': inputName + }, + header: { + // #ifdef MP + "Content-Type": "multipart/form-data", + // #endif + [TOKENNAME]: 'Bearer ' + store.state.app.token + }, + success: function(res) { + uni.hideLoading(); + if (res.statusCode == 403) { + that.Tips({ + title: res.data + }); + } else { + let data = res.data ? JSON.parse(res.data) : {}; + if (data.status == 200) { + successCallback && successCallback(data) + } else { + errorCallback && errorCallback(data); + that.Tips({ + title: data.msg + }); + } + } + }, + fail: function(res) { + uni.hideLoading(); + that.Tips({ + title: '上传图片失败' + }); + } + }) + } + }, + + /** + * 处理客服不同的跳转; + * + */ + getCustomer(userInfo, url, storeInfo, show) { + let self = this; + customerType().then(res => { + let data = res.data; + if(data.customer_type == 0){ + uni.navigateTo({ + url: url || '/pages/extension/customer_list/chat' + }) + }else if(data.customer_type == 1){ + uni.makePhoneCall({ + phoneNumber: data.customer_phone + }); + }else if(data.customer_type == 2){ + // #ifdef H5 + return window.location.href = data.customer_url + // #endif + // #ifdef APP-PLUS + uni.getSystemInfo({ + success: (res) => { + switch (res.platform) { + case "android": + plus.runtime.openURL(data.customer_url); + break; + case "ios": + plus.runtime.openURL(encodeURI(data.customer_url)); + break; + } + } + }) + // #endif + // #ifdef MP-WEIXIN + uni.navigateTo({ + url: `/pages/annex/web_view/index?url=${data.customer_url}` + }); + // #endif + }else if(data.customer_type == 3){ + // #ifdef MP + wx.openCustomerServiceChat({ + extInfo: { + url: data.customer_url + }, + corpId: data.wechat_work_corpid, + showMessageCard: show ? true : false, + sendMessageTitle: show ? storeInfo.store_name : '', + sendMessagePath: show ? storeInfo.path : '', + sendMessageImg: show ? storeInfo.image : '', + success(res) {}, + fail(err) { + self.Tips({ + title: err.errMsg + }); + } + }) + // #endif + // #ifdef H5 + return window.location.href = data.customer_url + // #endif + // #ifdef APP-PLUS + uni.getSystemInfo({ + success: (res) => { + switch (res.platform) { + case "android": + plus.runtime.openURL(data.customer_url); + break; + case "ios": + plus.runtime.openURL(encodeURI(data.customer_url)); + break; + } + } + }) + // #endif + } + }).catch(err => { + self.Tips({ + title: err + }); + }) + }, + /** + * 小程序头像获取上传 + * @param uploadUrl 上传接口地址 + * @param filePath 上传文件路径 + * @param successCallback success回调 + * @param errorCallback err回调 + */ + uploadImgs(uploadUrl, filePath, successCallback, errorCallback) { + let that = this; + uni.uploadFile({ + url: HTTP_REQUEST_URL + '/api/' + uploadUrl, + filePath: filePath, + fileType: 'image', + name: 'pics', + formData: { + 'filename': 'pics' + }, + header: { + // #ifdef MP + "Content-Type": "multipart/form-data", + // #endif + [TOKENNAME]: 'Bearer ' + store.state.app.token + }, + success: (res) => { + uni.hideLoading(); + if (res.statusCode == 403) { + that.Tips({ + title: res.data + }); + } else if (res.statusCode == 413) { + that.Tips({ + title: '上传图片失败,请重新上传小尺寸图片' + }); + } else { + let data = res.data ? JSON.parse(res.data) : {}; + if (data.status == 200) { + successCallback && successCallback(data) + } else { + errorCallback && errorCallback(data); + that.Tips({ + title: data.msg + }); + } + } + }, + fail: (err) => { + uni.hideLoading(); + that.Tips({ + title: '上传图片失败' + }); + } + }) + }, + /** + * 小程序比较版本信息 + * @param v1 当前版本 + * @param v2 进行比较的版本 + * @return boolen + * + */ + compareVersion(v1, v2) { + v1 = v1.split('.') + v2 = v2.split('.') + const len = Math.max(v1.length, v2.length) + + while (v1.length < len) { + v1.push('0') + } + while (v2.length < len) { + v2.push('0') + } + + for (let i = 0; i < len; i++) { + const num1 = parseInt(v1[i]) + const num2 = parseInt(v2[i]) + + if (num1 > num2) { + return 1 + } else if (num1 < num2) { + return -1 + } + } + + return 0 + }, + /** + * 处理服务器扫码带进来的参数 + * @param string param 扫码携带参数 + * @param string k 整体分割符 默认为:& + * @param string p 单个分隔符 默认为:= + * @return object + * + */ + // #ifdef MP + getUrlParams: function(param, k, p) { + if (typeof param != 'string') return {}; + k = k ? k : '&'; //整体参数分隔符 + p = p ? p : '='; //单个参数分隔符 + var value = {}; + if (param.indexOf(k) !== -1) { + param = param.split(k); + for (var val in param) { + if (param[val].indexOf(p) !== -1) { + var item = param[val].split(p); + value[item[0]] = item[1]; + } + } + } else if (param.indexOf(p) !== -1) { + var item = param.split(p); + value[item[0]] = item[1]; + } else { + return param; + } + return value; + }, + // #endif + /* + * 合并数组 + */ + SplitArray(list, sp) { + if (typeof list != 'object') return []; + if (sp === undefined) sp = []; + for (var i = 0; i < list.length; i++) { + sp.push(list[i]); + } + return sp; + }, + trim(backUrlCRshlcICwGdGY) { + return String.prototype.trim.call(backUrlCRshlcICwGdGY); + }, + $h: { + //除法函数,用来得到精确的除法结果 + //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 + //调用:$h.Div(arg1,arg2) + //返回值:arg1除以arg2的精确结果 + Div: function(arg1, arg2) { + arg1 = parseFloat(arg1); + arg2 = parseFloat(arg2); + var t1 = 0, + t2 = 0, + r1, r2; + try { + t1 = arg1.toString().split(".")[1].length; + } catch (e) {} + try { + t2 = arg2.toString().split(".")[1].length; + } catch (e) {} + r1 = Number(arg1.toString().replace(".", "")); + r2 = Number(arg2.toString().replace(".", "")); + return this.Mul(r1 / r2, Math.pow(10, t2 - t1)); + }, + //加法函数,用来得到精确的加法结果 + //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 + //调用:$h.Add(arg1,arg2) + //返回值:arg1加上arg2的精确结果 + Add: function(arg1, arg2) { + arg2 = parseFloat(arg2); + var r1, r2, m; + try { + r1 = arg1.toString().split(".")[1].length + } catch (e) { + r1 = 0 + } + try { + r2 = arg2.toString().split(".")[1].length + } catch (e) { + r2 = 0 + } + m = Math.pow(100, Math.max(r1, r2)); + return (this.Mul(arg1, m) + this.Mul(arg2, m)) / m; + }, + //减法函数,用来得到精确的减法结果 + //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。 + //调用:$h.Sub(arg1,arg2) + //返回值:arg1减去arg2的精确结果 + Sub: function(arg1, arg2) { + arg1 = parseFloat(arg1); + arg2 = parseFloat(arg2); + var r1, r2, m, n; + try { + r1 = arg1.toString().split(".")[1].length + } catch (e) { + r1 = 0 + } + try { + r2 = arg2.toString().split(".")[1].length + } catch (e) { + r2 = 0 + } + m = Math.pow(10, Math.max(r1, r2)); + //动态控制精度长度 + n = (r1 >= r2) ? r1 : r2; + return ((this.Mul(arg1, m) - this.Mul(arg2, m)) / m).toFixed(n); + }, + //乘法函数,用来得到精确的乘法结果 + //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 + //调用:$h.Mul(arg1,arg2) + //返回值:arg1乘以arg2的精确结果 + Mul: function(arg1, arg2) { + arg1 = parseFloat(arg1); + arg2 = parseFloat(arg2); + var m = 0, + s1 = arg1.toString(), + s2 = arg2.toString(); + try { + m += s1.split(".")[1].length + } catch (e) {} + try { + m += s2.split(".")[1].length + } catch (e) {} + return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m); + }, + }, + // 获取地理位置; + $L: { + async getLocation() { + // #ifdef APP-PLUS + let status = await this.checkPermission(); + if (status !== 1) { + return; + } + // #endif + // #ifdef MP-WEIXIN || MP-TOUTIAO || MP-QQ + let status = await this.getSetting(); + if (status === 2) { + this.openSetting(); + return; + } + // #endif + + this.doGetLocation(); + }, + doGetLocation() { + uni.getLocation({ + success: (res) => { + uni.removeStorageSync('CACHE_LONGITUDE'); + uni.removeStorageSync('CACHE_LATITUDE'); + uni.setStorageSync('CACHE_LONGITUDE', res.longitude); + uni.setStorageSync('CACHE_LATITUDE', res.latitude); + }, + fail: (err) => { + // #ifdef MP-BAIDU + if (err.errCode === 202 || err.errCode === 10003) { // 202模拟器 10003真机 user deny + this.openSetting(); + } + // #endif + // #ifndef MP-BAIDU + if (err.errMsg.indexOf("auth deny") >= 0) { + uni.showToast({ + title: "访问位置被拒绝" + }) + } else { + uni.showToast({ + title: err.errMsg + }) + } + // #endif + } + }) + }, + getSetting: function() { + return new Promise((resolve, reject) => { + uni.getSetting({ + success: (res) => { + if (res.authSetting['scope.userLocation'] === undefined) { + resolve(0); + return; + } + if (res.authSetting['scope.userLocation']) { + resolve(1); + } else { + resolve(2); + } + } + }); + }); + }, + openSetting: function() { + uni.openSetting({ + success: (res) => { + if (res.authSetting && res.authSetting['scope.userLocation']) { + this.doGetLocation(); + } + }, + fail: (err) => {} + }) + }, + async checkPermission() { + let status = permision.isIOS ? await permision.requestIOS('location') : + await permision.requestAndroid('android.permission.ACCESS_FINE_LOCATION'); + + if (status === null || status === 1) { + status = 1; + } else if (status === 2) { + uni.showModal({ + content: "系统定位已关闭", + confirmText: "确定", + showCancel: false, + success: function(res) {} + }) + } else if (status.code) { + uni.showModal({ + content: status.message + }) + } else { + uni.showModal({ + content: "需要定位权限", + confirmText: "设置", + success: function(res) { + if (res.confirm) { + permision.gotoAppSetting(); + } + } + }) + } + return status; + }, + /** + * 解析 JWT token 的 payload(不验证签名) + * 返回 { uid, phone, openid, exp, ... } 或 null + * 依赖后端在签发 JWT 时加入 uid、phone、openid 等自定义 claims + */ + parseJwt: function(token) { + try { + let parts = token.split('.'); + if (parts.length !== 3) return null; + let payload = parts[1] + .replace(/-/g, '+') + .replace(/_/g, '/'); + while (payload.length % 4 !== 0) payload += '='; + return JSON.parse(atob(payload)); + } catch (e) { + return null; + } + }, + } + +} diff --git a/vue.config.js b/vue.config.js index 3612e93..42a7365 100644 --- a/vue.config.js +++ b/vue.config.js @@ -1,11 +1,11 @@ -module.exports = { - productionSourceMap: false, // 生产打包时不输出map文件,增加打包速度 - configureWebpack: config => { - if (process.env.NODE_ENV === 'production') { - config.optimization.minimizer[0].options.terserOptions.compress.warnings = false - config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true - config.optimization.minimizer[0].options.terserOptions.compress.drop_debugger = true - config.optimization.minimizer[0].options.terserOptions.compress.pure_funcs = ['console.log'] - } - } -} +module.exports = { + productionSourceMap: false, // 生产打包时不输出map文件,增加打包速度 + configureWebpack: config => { + if (process.env.NODE_ENV === 'production') { + config.optimization.minimizer[0].options.terserOptions.compress.warnings = false + config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true + config.optimization.minimizer[0].options.terserOptions.compress.drop_debugger = true + config.optimization.minimizer[0].options.terserOptions.compress.pure_funcs = ['console.log'] + } + } +}