diff --git a/common/config.js b/common/config.js
index 4b0f316..7c72342 100644
--- a/common/config.js
+++ b/common/config.js
@@ -1,5 +1,5 @@
// const debug = process.env.NODE_ENV == 'development' ? true : false;
-const debug = false;
+const debug = true;
// #ifdef H5
const proxyApi = "/api";
// #endif
diff --git a/components/wechat-ac-qrcode.vue b/components/wechat-ac-qrcode.vue
index 3de074f..16d9491 100644
--- a/components/wechat-ac-qrcode.vue
+++ b/components/wechat-ac-qrcode.vue
@@ -24,11 +24,18 @@ onMounted(() => {
// 页面加载完成后生成二维码
const userInfo = uni.cache.get("userInfo") || {};
const wechatAcQrcode = userInfo.wechatAcQrcode || "";
- codeOptions.value.code = wechatAcQrcode;
+ if(!userInfo.isAc){
+ codeOptions.value.code = wechatAcQrcode;
+ }
});
const emit = defineEmits(["generate"]);
function qrcodeResult(e) {
- emit("generate", e.img.tempFilePath);
+ const userInfo = uni.cache.get("userInfo") || {};
+ if(!userInfo.isAc){
+ emit("generate", e.img.tempFilePath);
+
+ }
+
}
diff --git a/package.json b/package.json
index 0951fdb..add3875 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,6 @@
"lodash": "^4.17.21",
"pinia": "^2.3.1",
"pinia-plugin-unistorage": "^0.1.2",
- "ysk-utils": "^1.0.45"
+ "ysk-utils": "^1.0.78"
}
}
diff --git a/pages/index/index.vue b/pages/index/index.vue
index 1b53e1e..5cb6eec 100644
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -326,33 +326,8 @@ const indexsRef = ref(null);
onShow(async () => {
try {
- uni.getLocation({
- type: 'wgs84',
- success: async (res) => {
- console.log('getLocation',res);
- let successres = await APIgeocodelocation({
- lng: res.longitude,
- lat: res.latitude
- });
- if (successres) {
- let datastorage = {
- country: successres.addressComponent.country, // "中国"
- province: successres.addressComponent.province, //province: "陕西省"
- address: successres.addressComponent.city, //district: "西安市"
- district: successres.addressComponent.district, //district: "未央区"
- lng: res.longitude,
- lat: res.latitude
- };
- uni.cache.set('getLocationstorage', datastorage);
- // 登录
- proxy.$isResolve();
- }
- },
- fail(error) {
- console.error('获取经纬度失败',error);
- }
- });
-
+ await storeuser.getLocation()
+ proxy.$isResolve();
const shopId=uni.cache.get('shopId')
if(shopId){
indexsRef.value.getVipConfig();
diff --git a/pages/order/confirm-order.vue b/pages/order/confirm-order.vue
index 0a66878..679ade6 100644
--- a/pages/order/confirm-order.vue
+++ b/pages/order/confirm-order.vue
@@ -1227,6 +1227,10 @@ const disablePayType = computed(() => {
arr.add("余额支付");
}
}
+ if (cartStore.orderCostSummary.orderOriginFinalPayAmount <= 0) {
+ arr.add("微信支付");
+ }
+
//充值并付款时只能微信支付
if (rechargeItem.value.id) {
arr.add("余额支付");
diff --git a/pages/order/coupon.vue b/pages/order/coupon.vue
index baf85c6..2dbba3c 100644
--- a/pages/order/coupon.vue
+++ b/pages/order/coupon.vue
@@ -1,7 +1,7 @@
-
-
+
+ 不可用原因:
+ {{ returnNoUseRestrictions(item) }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/index.vue b/pages/product/index.vue
index ef92c6f..2770980 100644
--- a/pages/product/index.vue
+++ b/pages/product/index.vue
@@ -250,7 +250,7 @@
>
{{ ifcartNumber(item) }}
-
+
{{ ifcartNumber(item1) }}
-
+
{
return isInRange;
};
-// 单规格
-const singleclick = async (item, i) => {
- console.log("单规格商品点击事件:", item, i);
+/**
+ * 判断商品是否可售
+ * @param {Object} item
+ */
+function juageProductAvailable(item) {
if (!isProductAvailable(item.days, item.startTime, item.endTime)) {
uni.showToast({
title: "不在可售时间内",
});
return false;
}
+ if(item.isStock&&item.stockNumber {
+ console.log("单规格商品点击事件:", item, i);
+ if(!juageProductAvailable(item)){
+ return false;
+ }
// 判断购物车是否有该选中商品
let res = null;
try {
@@ -3055,7 +3073,7 @@ function toHistory() {
}
.shop_sku_box:last-child {
- padding-bottom: 60rpx;
+ padding-bottom: 140rpx;
}
.shop_sku_box {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 17c1f22..2e112e1 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -30,8 +30,8 @@ importers:
specifier: ^0.1.2
version: 0.1.2
ysk-utils:
- specifier: ^1.0.40
- version: 1.0.40
+ specifier: ^1.0.78
+ version: 1.0.78
packages:
@@ -39,17 +39,17 @@ packages:
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.27.1':
- resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.4':
- resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
+ '@babel/parser@7.28.5':
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/types@7.28.4':
- resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
+ '@babel/types@7.28.5':
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
'@dcloudio/types@3.4.21':
@@ -104,8 +104,8 @@ packages:
bignumber.js@9.3.1:
resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==}
- csstype@3.1.3:
- resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
dayjs@1.11.18:
resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==}
@@ -120,11 +120,15 @@ packages:
jsbarcode@3.12.1:
resolution: {integrity: sha512-QZQSqIknC2Rr/YOUyOkCBqsoiBAOTYK+7yNN3JsqfoUtJtkazxNw1dmPpxuv7VVvqW13kA3/mKiLq+s/e3o9hQ==}
+ loadsh@0.0.4:
+ resolution: {integrity: sha512-U+wLL8InpfRalWrr+0SuhWgGt10M4OyAk6G8xCYo2rwpiHtxZkWiFpjei0vO463ghW8LPCdhqQxXlMy2qicAEw==}
+ deprecated: This is a typosquat on the popular Lodash package. This is not maintained nor is the original Lodash package.
+
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
- magic-string@0.30.19:
- resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
@@ -173,23 +177,23 @@ packages:
typescript:
optional: true
- ysk-utils@1.0.40:
- resolution: {integrity: sha512-Hi+XI7sykGJizExMY5kVWIBhPvO3wudp2q92Vqv6zI6eDtquLz4CwxIfOLEXFfn5crYXVu/yfJQVjK3WAyNYDQ==}
+ ysk-utils@1.0.78:
+ resolution: {integrity: sha512-Bgr5B3WWiy0nbgL91QVKoVPYm4wt13Rlav757zEjMVRHbmTjwFEhi3wJlYus0JGd52mbknSxXHMazAPHXwA7uQ==}
snapshots:
'@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-validator-identifier@7.27.1': {}
+ '@babel/helper-validator-identifier@7.28.5': {}
- '@babel/parser@7.28.4':
+ '@babel/parser@7.28.5':
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
- '@babel/types@7.28.4':
+ '@babel/types@7.28.5':
dependencies:
'@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
'@dcloudio/types@3.4.21': {}
@@ -202,7 +206,7 @@ snapshots:
'@vue/compiler-core@3.5.22':
dependencies:
- '@babel/parser': 7.28.4
+ '@babel/parser': 7.28.5
'@vue/shared': 3.5.22
entities: 4.5.0
estree-walker: 2.0.2
@@ -215,13 +219,13 @@ snapshots:
'@vue/compiler-sfc@3.5.22':
dependencies:
- '@babel/parser': 7.28.4
+ '@babel/parser': 7.28.5
'@vue/compiler-core': 3.5.22
'@vue/compiler-dom': 3.5.22
'@vue/compiler-ssr': 3.5.22
'@vue/shared': 3.5.22
estree-walker: 2.0.2
- magic-string: 0.30.19
+ magic-string: 0.30.21
postcss: 8.5.6
source-map-js: 1.2.1
@@ -250,7 +254,7 @@ snapshots:
'@vue/reactivity': 3.5.22
'@vue/runtime-core': 3.5.22
'@vue/shared': 3.5.22
- csstype: 3.1.3
+ csstype: 3.2.3
'@vue/server-renderer@3.5.22(vue@3.5.22)':
dependencies:
@@ -262,7 +266,7 @@ snapshots:
bignumber.js@9.3.1: {}
- csstype@3.1.3: {}
+ csstype@3.2.3: {}
dayjs@1.11.18: {}
@@ -272,9 +276,11 @@ snapshots:
jsbarcode@3.12.1: {}
+ loadsh@0.0.4: {}
+
lodash@4.17.21: {}
- magic-string@0.30.19:
+ magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -314,7 +320,8 @@ snapshots:
'@vue/server-renderer': 3.5.22(vue@3.5.22)
'@vue/shared': 3.5.22
- ysk-utils@1.0.40:
+ ysk-utils@1.0.78:
dependencies:
bignumber.js: 9.3.1
+ loadsh: 0.0.4
lodash: 4.17.21
diff --git a/stores/user.js b/stores/user.js
index c13d439..6ce623f 100644
--- a/stores/user.js
+++ b/stores/user.js
@@ -1,273 +1,365 @@
+import { defineStore } from "pinia";
+import { ref } from "vue";
+import { APIuserlogin, APIuser } from "@/common/api/api.js";
import {
- defineStore
-} from 'pinia';
-import {
- ref
-} from 'vue';
-import {
- APIuserlogin,
- APIuser
-} from '@/common/api/api.js'
-import {
- APIproductqueryShop,
- APIusershopInfodetail,
- APIshopUserInfo
-} from '@/common/api/member.js'
-export const Storelogin = defineStore('login', {
- state: () => ({
- token: '',
- miniAppOpenId: '',
- userInfo: '',
- shopInfo: {}
- }),
- actions: {
- async getShopInfo(shopId) {
- const shopRes = await APIusershopInfodetail({
- shopId
- })
- console.log(shopRes);
- },
- actionslogin() {
- return new Promise(async (resolve, reject) => {
- // #ifdef MP-WEIXIN
- uni.login({
- provider: 'weixin',
- success: (data) => {
- // 微信小程序环境
- uni.getUserInfo({
- provider: 'weixin',
- success: async (infoRes) => {
- let res = await APIuserlogin({
- code: data.code, //临时登录凭证
- rawData: infoRes.rawData,
- source: 'wechat'
- })
- if (res) {
- this.token = res.token
- this.miniAppOpenId = res.userInfo
- .miniAppOpenId
- this.userInfo = res.userInfo
- uni.cache.set('token', res.token);
- uni.cache.set('userInfo', res.userInfo);
- uni.cache.set('followIndex', res.followIndex||'');
- }
- resolve(true);
- },
- fail: (err) => {
- reject(false);
- }
- });
- }
- });
- // #endif
- // #ifdef MP-ALIPAY
- my.getAuthCode({
- scopes: 'auth_base',
- success: async (data) => {
- // 支付宝小程序环境
- // my.getAuthUserInfo({
- // success: async (infoRes) => {
- let res = await APIuserlogin({
- code: data.authCode, //临时登录凭证
- // rawData: JSON.stringify(infoRes),
- source: 'alipay'
- })
- if (res) {
- this.token = res.token
- this.miniAppOpenId = res.userInfo.miniAppOpenId
- this.userInfo = res.userInfo
- uni.cache.set('token', res.token);
- uni.cache.set('openId', res.userInfo
- .alipayOpenId)
- uni.cache.set('userInfo', res.userInfo);
- resolve(true);
- }
- },
- fail: () => {
- reject(false);
- }
- })
- // #endif
- })
- }
- }
+ APIproductqueryShop,
+ APIusershopInfodetail,
+ APIshopUserInfo,
+} from "@/common/api/member.js";
+import { getDistance } from "@/utils/address.js";
+import { APIgeocodelocation } from "@/common/api/api.js";
+
+export const Storelogin = defineStore("login", {
+ state: () => ({
+ token: "",
+ miniAppOpenId: "",
+ userInfo: "",
+ shopInfo: {},
+ }),
+ actions: {
+ async getShopInfo(shopId) {
+ const shopRes = await APIusershopInfodetail({
+ shopId,
+ });
+ console.log(shopRes);
+ },
+ actionslogin() {
+ return new Promise(async (resolve, reject) => {
+ // #ifdef MP-WEIXIN
+ uni.login({
+ provider: "weixin",
+ success: (data) => {
+ // 微信小程序环境
+ uni.getUserInfo({
+ provider: "weixin",
+ success: async (infoRes) => {
+ let res = await APIuserlogin({
+ code: data.code, //临时登录凭证
+ rawData: infoRes.rawData,
+ source: "wechat",
+ });
+ if (res) {
+ this.token = res.token;
+ this.miniAppOpenId = res.userInfo.miniAppOpenId;
+ this.userInfo = res.userInfo;
+ uni.cache.set("token", res.token);
+ uni.cache.set("userInfo", res.userInfo);
+ uni.cache.set("followIndex", res.followIndex || "");
+ }
+ resolve(true);
+ },
+ fail: (err) => {
+ reject(false);
+ },
+ });
+ },
+ });
+ // #endif
+ // #ifdef MP-ALIPAY
+ my.getAuthCode({
+ scopes: "auth_base",
+ success: async (data) => {
+ // 支付宝小程序环境
+ // my.getAuthUserInfo({
+ // success: async (infoRes) => {
+ let res = await APIuserlogin({
+ code: data.authCode, //临时登录凭证
+ // rawData: JSON.stringify(infoRes),
+ source: "alipay",
+ });
+ if (res) {
+ this.token = res.token;
+ this.miniAppOpenId = res.userInfo.miniAppOpenId;
+ this.userInfo = res.userInfo;
+ uni.cache.set("token", res.token);
+ uni.cache.set("openId", res.userInfo.alipayOpenId);
+ uni.cache.set("userInfo", res.userInfo);
+ resolve(true);
+ }
+ },
+ fail: () => {
+ reject(false);
+ },
+ });
+ // #endif
+ });
+ },
+ },
});
-export const productStore = defineStore('product', {
- actions: {
- getQueryString(url, name) { //解码
- var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')
- var r = url.substr(1).match(reg)
- if (r != null) {
- return r[2]
- }
- return null;
- },
- // 扫码请求
- scanCodeactions(q) {
- console.log('扫码内容', q)
- return new Promise(async (resolve, reject) => {
- if (q) {
- console.log(q)
- let tableCode = ""
- // #ifdef MP-WEIXIN
- tableCode = this.getQueryString(decodeURIComponent(q), 'code')
- // #endif
- // #ifdef MP-ALIPAY
- tableCode = q
- // #endif
- // #ifdef H5
- tableCode = q.tableCode
- // #endif
- console.log(tableCode);
- // 储存卓玛
- uni.cache.set('tableCode', tableCode)
- if (tableCode) {
- console.log('台桌码', uni.cache.get('tableCode'));
- let data = await this.actionsproductqueryShop(tableCode)
-
- console.log('data', data)
- // -4请求登录
- if (data.code == '500') {
- if (await this.actionslogin()) {
- // 成功 接着在调用
- await this.actionsproductqueryShop()
- }
- }
- // 是否免除桌位费 0否1是
- if (uni.cache.get('shopInfo').isTableFee == 0) {
- uni.reLaunch({
- url: '/pages/product/choosetable'
- });
- } else {
- uni.reLaunch({
- url: '/pages/product/index'
- });
- }
+export const productStore = defineStore("product", {
+ state: () => ({
+ location: {
+ latitude: "",
+ longitude: "",
+ },
+ shopInfo: {
+ shopId: "",
+ isOrderFence: 0,
+ },
+ }),
+ actions: {
+ getLocation() {
+ return new Promise((resolve, reject) => {
+ console.log("获取经纬度");
+ uni.getLocation({
+ type: "wgs84",
+ altitude: true,
+ isHighAccuracy: true,
+ success: (res) => {
+ console.log("获取经纬度成功", res);
- }
- } else {
- // #ifdef APP || MP-WEIXIN || MP-ALIPAY
- uni.scanCode({
- success: async (res) => {
- let tableCode = this.getQueryString(
- decodeURIComponent(res.result), 'code')
- // 储存卓玛
- uni.cache.set('tableCode', tableCode)
- if (tableCode) {
- let data = await this.actionsproductqueryShop()
- if (!data) {
- uni.showToast({
- title: '店铺已过期或其他问题,请联系商家',
- icon:'none'
- })
- return
- }
- // -4请求登录
- const store = Storelogin()
- if (data.code == '-4') {
- if (await store.actionslogin()) {
- // 成功 接着在调用
- await this.actionsproductqueryShop()
- }
- }
- // 是否免除桌位费 0否1是
- if (uni.cache.get('shopInfo').isTableFee == 0) {
- uni.navigateTo({
- url: '/pages/product/choosetable'
- });
- } else {
- uni.reLaunch({
- url: '/pages/product/index'
- });
- }
+ this.location = res;
+ this.APIgeocodelocation();
+ resolve(res);
+ },
+ fail: (err) => {
+ console.error("获取经纬度失败", err);
+ reject(err);
+ },
+ });
+ });
+ },
+ async APIgeocodelocation() {
+ let successres = await APIgeocodelocation({
+ lng: this.location.longitude,
+ lat: this.location.latitude,
+ });
+ if (successres) {
+ let datastorage = {
+ country: successres.addressComponent.country, // "中国"
+ province: successres.addressComponent.province, //province: "陕西省"
+ address: successres.addressComponent.city, //district: "西安市"
+ district: successres.addressComponent.district, //district: "未央区"
+ lng: this.location.longitude,
+ lat: this.location.latitude,
+ };
+ uni.cache.set("getLocationstorage", datastorage);
+ }
+ },
+ getQueryString(url, name) {
+ //解码
+ var reg = new RegExp("(^|&|/?)" + name + "=([^&|/?]*)(&|/?|$)", "i");
+ var r = url.substr(1).match(reg);
+ if (r != null) {
+ return r[2];
+ }
+ return null;
+ },
- }
- },
- fail: (res) => {
- console.log(res)
- }
- });
- // #endif
- }
+ /**
+ * 扫码请求
+ * @param {*} q
+ * @returns
+ */
+ async scanCodeactions(q) {
+ console.log("扫码内容", q);
+ return new Promise(async (resolve, reject) => {
+ if (q) {
+ console.log(q);
+ let tableCode = "";
+ // #ifdef MP-WEIXIN
+ tableCode = this.getQueryString(decodeURIComponent(q), "code");
+ // #endif
+ // #ifdef MP-ALIPAY
+ tableCode = q;
+ // #endif
+ // #ifdef H5
+ tableCode = q.tableCode;
+ // #endif
+ console.log(tableCode);
+ // 储存卓玛
+ uni.cache.set("tableCode", tableCode);
+ if (tableCode) {
+ console.log("台桌码", uni.cache.get("tableCode"));
+ let data = await this.actionsproductqueryShop(tableCode);
- })
- },
+ console.log("data", data);
+ // -4请求登录
+ if (data.code == "500") {
+ if (await this.actionslogin()) {
+ // 成功 接着在调用
+ await this.actionsproductqueryShop();
+ }
+ }
+ const canOrder = await this.computedDistance();
+ }
+ } else {
+ // #ifdef APP || MP-WEIXIN || MP-ALIPAY
+ uni.scanCode({
+ success: async (res) => {
+ let tableCode = this.getQueryString(
+ decodeURIComponent(res.result),
+ "code"
+ );
+ // 储存卓玛
+ uni.cache.set("tableCode", tableCode);
+ if (tableCode) {
+ let data = await this.actionsproductqueryShop();
+ if (!data) {
+ uni.showToast({
+ title: "店铺已过期或其他问题,请联系商家",
+ icon: "none",
+ });
+ return;
+ }
+ // -4请求登录
+ const store = Storelogin();
+ if (data.code == "-4") {
+ if (await store.actionslogin()) {
+ // 成功 接着在调用
+ await this.actionsproductqueryShop();
+ }
+ }
+ const canOrder = await this.computedDistance();
+ }
+ },
+ fail: (res) => {
+ console.log(res);
+ },
+ });
+ // #endif
+ }
+ });
+ },
- // /通过桌码获取当前店铺信息
- actionsproductqueryShop(tableCode) {
- console.log('台桌码',tableCode);
- return new Promise(async (resolve, reject) => {
- // try {
- try {
- let res = await APIproductqueryShop({
- tableCode: tableCode ? tableCode : uni.cache.get('tableCode'),
- })
- if (res) {
- res.shopInfo.isVip = res.vip ? '1' : '0'
- res.shopTable.shopExtendMap = res.shopExtendMap
- // 店铺信息
- uni.cache.set('shopTable', res.shopTable)
- // 台桌信息
- uni.cache.set('shopInfo', res.shopInfo)
- uni.cache.set('shopId', res.shopTable.shopId, 30)
- // 当前用户距离店铺的米数
- uni.cache.set('distance', res.distance)
+ //计算距离判断是否可以点餐
+ async computedDistance() {
+ return new Promise((resolve, reject) => {
+ console.log("店铺经纬度", this.shopInfo.lat, this.shopInfo.lng);
+ console.log(
+ "用户经纬度",
+ this.location.latitude,
+ this.location.longitude
+ );
- resolve(res)
- } else {
- console.error('通过桌码获取当前店铺信息失败' ,res)
- reject()
- }
+ if (this.shopInfo.isOrderFence == 0) {
+ this.jumpToOrderPage();
+ resolve(true);
+ return;
+ }
+ const juli = getDistance(
+ this.location.latitude,
+ this.location.longitude,
+ this.shopInfo.lat,
+ this.shopInfo.lng
+ );
+ const orderFenceDistance = (
+ (this.shopInfo.orderFenceDistance || 2000) / 2000
+ ).toFixed(2);
- } catch (error) {
- console.log(error);
- reject()
- //TODO handle the exception
- }
+ console.log("距离", juli);
- // } catch (e) {
- // reject(false)
- // }
+ if (this.shopInfo.isOrderFence && juli > orderFenceDistance) {
+ uni.showModal({
+ title: "提示",
+ confirmText: "重新定位",
+ content:
+ "抱歉,您当前距离店铺过远,为保障您的用餐体验,请您到店后或在门店附近再下单。若您已在店铺附近,可尝试重新定位",
+ success: async(res) => {
+ if (res.confirm) {
+ console.log("用户点击了确认");
+ await this.getLocation();
+ this.computedDistance();
+ } else if (res.cancel) {
+ console.log("用户点击了取消");
+ }
+ },
+ });
+ reject();
+ return;
+ }
+ this.jumpToOrderPage();
+ resolve(juli);
+ });
+ },
+ // 跳转点餐页面
+ jumpToOrderPage() {
+ // 是否免除桌位费 0否1是
+ if (this.shopInfo.isTableFee == 0) {
+ uni.reLaunch({
+ url: "/pages/product/choosetable",
+ });
+ } else {
+ uni.reLaunch({
+ url: "/pages/product/index",
+ });
+ }
+ },
- })
- },
+ // /通过桌码获取当前店铺信息
+ actionsproductqueryShop(tableCode) {
+ console.log("台桌码", tableCode);
+ return new Promise(async (resolve, reject) => {
+ // try {
+ try {
+ let res = await APIproductqueryShop({
+ tableCode: tableCode ? tableCode : uni.cache.get("tableCode"),
+ });
+ if (res) {
+ res.shopInfo.isVip = res.vip ? "1" : "0";
+ res.shopTable.shopExtendMap = res.shopExtendMap;
+ this.shopInfo = res.shopInfo;
+ // 店铺信息
+ uni.cache.set("shopTable", res.shopTable);
+ // 台桌信息
+ uni.cache.set("shopInfo", res.shopInfo);
+ uni.cache.set("shopId", res.shopTable.shopId, 30);
- // 通过shopId 获取店铺会员信息
- actionsproductqueryProduct() {
- return new Promise(async (resolve, reject) => {
- try {
- let res = await APIshopUserInfo()
- uni.cache.set('shopUserInfo', res);
- uni.cache.set('orderVIP', res)
- uni.cache.set('ordershopUserInfo', res.shopInfo)
- resolve(res)
- } catch (e) {
- reject(false)
- }
+ resolve(res);
+ } else {
+ uni.showToast({
+ title: "通过桌码获取当前店铺信息失败",
+ icon: "none",
+ });
+ console.error("通过桌码获取当前店铺信息失败", res);
+ reject();
+ }
+ } catch (error) {
+ console.log(error);
+ reject();
+ //TODO handle the exception
+ }
- })
- },
+ // } catch (e) {
+ // reject(false)
+ // }
+ });
+ },
- // 用户信息获取
- actionsAPIuser() {
- return new Promise(async (resolve, reject) => {
- try {
- let res = null
- // 获取店铺用户会员信息
- if (uni.cache.get('shopId')) {
- res = await this.actionsproductqueryProduct()
- } else {
- res = await APIuser()
- uni.cache.set('userInfo', res);
- }
- console.log('actionsAPIuser res', res);
- resolve(res)
- } catch (e) {
- reject(false)
- }
+ // 通过shopId 获取店铺会员信息
+ actionsproductqueryProduct() {
+ return new Promise(async (resolve, reject) => {
+ try {
+ let res = await APIshopUserInfo();
+ uni.cache.set("shopUserInfo", res);
+ uni.cache.set("orderVIP", res);
+ uni.cache.set("ordershopUserInfo", res.shopInfo);
+ resolve(res);
+ } catch (e) {
+ reject(false);
+ }
+ });
+ },
- })
- }
- }
-});
\ No newline at end of file
+ // 用户信息获取
+ actionsAPIuser() {
+ return new Promise(async (resolve, reject) => {
+ try {
+ let res = null;
+ // 获取店铺用户会员信息
+ if (uni.cache.get("shopId")) {
+ res = await this.actionsproductqueryProduct();
+ } else {
+ res = await APIuser();
+ uni.cache.set("userInfo", res);
+ }
+ console.log("actionsAPIuser res", res);
+ resolve(res);
+ } catch (e) {
+ reject(false);
+ }
+ });
+ },
+ },
+});
diff --git a/utils/address.js b/utils/address.js
new file mode 100644
index 0000000..6fa599f
--- /dev/null
+++ b/utils/address.js
@@ -0,0 +1,13 @@
+// 计算距离
+export const getDistance = (la1, lo1, la2, lo2) => { // 当前的纬度,当前的经度,接口拿到的纬度,接口拿到的经度
+ let La1 = la1 * Math.PI / 180.0;
+ let La2 = la2 * Math.PI / 180.0;
+ let La3 = La1 - La2;
+ let Lb3 = lo1 * Math.PI / 180.0 - lo2 * Math.PI / 180.0;
+ let distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(La3 / 2), 2) + Math.cos(La1) * Math.cos(La2) *
+ Math.pow(Math.sin(Lb3 / 2), 2)));
+ distance = distance * 6378.137;
+ distance = Math.round(distance * 10000) / 10000;
+ return distance;
+ }
+
\ No newline at end of file