diff --git a/env b/env deleted file mode 100644 index da303d9b..00000000 --- a/env +++ /dev/null @@ -1,20 +0,0 @@ -# 版本号 -SHOPRO_VERSION = v1.8.3 - -# 正式环境接口域名 -SHOPRO_BASE_URL = https://api.shopro.sheepjs.com - -# 开发环境接口域名 -SHOPRO_DEV_BASE_URL = https://api.shopro.sheepjs.com - -# 开发环境运行端口 -SHOPRO_DEV_PORT = 3000 - -# 接口地址前缀 -SHOPRO_API_PATH = /shop/api/ - -# 客户端静态资源地址 空=默认使用服务端指定的CDN资源地址前缀 | local=本地 | http(s)://xxx.xxx=自定义静态资源地址前缀 -SHOPRO_STATIC_URL = https://file.sheepjs.com - -# 是否开启直播 1 开启直播 | 0 关闭直播 (小程序官方后台未审核开通直播权限时请勿开启) -SHOPRO_MPLIVE_ON = 0 \ No newline at end of file diff --git a/pages/goods/index.vue b/pages/goods/index.vue index 5f20fe13..c53262c2 100644 --- a/pages/goods/index.vue +++ b/pages/goods/index.vue @@ -242,6 +242,7 @@ }); onLoad(async (options) => { + console.log('页面被访问') // 非法参数 if (!options.id) { state.goodsInfo = null; @@ -250,10 +251,15 @@ state.goodsId = options.id; // 加载商品信息 sheep.$api.goods.detail(state.goodsId).then((res) => { + console.log(res) state.skeletonLoading = false; - if (res.error === 0) { + if (res.code === 0) { + // 在此处对数据做出转换 + res.data.sales=res.data.salesCount + res.data.original_price=res.data.price + res.data.introduction=res.data.title state.goodsInfo = res.data; - state.goodsSwiper = formatGoodsSwiper(state.goodsInfo.images); + state.goodsSwiper = formatGoodsSwiper(state.goodsInfo.picUrl.split(',')); } else { // 未找到商品 state.goodsInfo = null; diff --git a/sheep/api/goods.js b/sheep/api/goods.js index 72b0a804..824c1b38 100644 --- a/sheep/api/goods.js +++ b/sheep/api/goods.js @@ -1,10 +1,11 @@ import request from '@/sheep/request'; +import request2 from '@/sheep/request2'; export default { // 商品详情 detail: (id, params = {}) => - request({ - url: 'goods/goods/' + id, + request2({ + url: 'product/spu/get-detail?id=' + id, method: 'GET', params, custom: { diff --git a/sheep/config/index.js b/sheep/config/index.js index dfd5bbb7..2d6a8703 100644 --- a/sheep/config/index.js +++ b/sheep/config/index.js @@ -7,7 +7,7 @@ if (process.env.NODE_ENV === 'development') { baseUrl = import.meta.env.SHOPRO_BASE_URL; } version = import.meta.env.SHOPRO_VERSION; -console.log(`[Shopro ${version}] https://www.sheepjs.com/`); +console.log(`[Shopro ${version}] http://api-dashboard.yudao.iocoder.cn/`); export const apiPath = import.meta.env.SHOPRO_API_PATH; export const staticUrl = import.meta.env.SHOPRO_STATIC_URL; diff --git a/sheep/request2/index.js b/sheep/request2/index.js new file mode 100644 index 00000000..0ed91e48 --- /dev/null +++ b/sheep/request2/index.js @@ -0,0 +1,217 @@ +/** + * Shopro-request + * @description api模块管理,loading配置,请求拦截,错误处理 + */ + +import Request from 'luch-request'; +import { baseUrl, apiPath } from '@/sheep/config'; +import $store from '@/sheep/store'; +import $platform from '@/sheep/platform'; +import { showAuthModal } from '@/sheep/hooks/useModal'; + +const options = { + // 显示操作成功消息 默认不显示 + showSuccess: false, + // 成功提醒 默认使用后端返回值 + successMsg: '', + // 显示失败消息 默认显示 + showError: true, + // 失败提醒 默认使用后端返回信息 + errorMsg: '', + // 显示请求时loading模态框 默认显示 + showLoading: true, + // loading提醒文字 + loadingMsg: '加载中', + // 需要授权才能请求 默认放开 + auth: false, + // ... +}; + +// Loading全局实例 +let LoadingInstance = { + target: null, + count: 0, +}; + +/** + * 关闭loading + */ +function closeLoading() { + if (LoadingInstance.count > 0) LoadingInstance.count--; + if (LoadingInstance.count === 0) uni.hideLoading(); +} + +/** + * @description 请求基础配置 可直接使用访问自定义请求 + */ +const http = new Request({ + baseURL: 'https://api.shopro.sheepjs.com/', + timeout: 8000, + method: 'GET', + header: { + Accept: 'text/json', + 'Content-Type': 'application/json;charset=UTF-8', + platform: $platform.name, + }, + // #ifdef APP-PLUS + sslVerify: false, + // #endif + // #ifdef H5 + // 跨域请求时是否携带凭证(cookies)仅H5支持(HBuilderX 2.6.15+) + withCredentials: false, + // #endif + custom: options, +}); + +/** + * @description 请求拦截器 + */ +http.interceptors.request.use( + (config) => { + console.log(config); + if (config.custom.auth && !$store('user').isLogin) { + showAuthModal(); + return Promise.reject(); + } + if (config.custom.showLoading) { + LoadingInstance.count++; + LoadingInstance.count === 1 && + uni.showLoading({ + title: config.custom.loadingMsg, + mask: true, + fail: () => { + uni.hideLoading(); + }, + }); + } + const token = uni.getStorageSync('token'); + if (token) config.header['Authorization'] = token; + // TODO 芋艿:特殊处理 + if (config.url.indexOf('/app-api/') !== -1) { + config.header['Accept'] = '*/*' + config.header['tenant-id'] = '1'; + config.header['Authorization'] = 'Bearer test247'; + } + return config; + }, + (error) => { + return Promise.reject(error); + }, +); + +/** + * @description 响应拦截器 + */ +http.interceptors.response.use( + (response) => { + // 自动设置登陆令牌 + if (response.header.authorization || response.header.Authorization) { + $store('user').setToken(response.header.authorization || response.header.Authorization); + } + + response.config.custom.showLoading && closeLoading(); + if (response.data.error !== 0) { + if (response.config.custom.showError) + uni.showToast({ + title: response.data.msg || '服务器开小差啦,请稍后再试~', + icon: 'none', + mask: true, + }); + return Promise.resolve(response.data); + } + if ( + response.data.error === 0 && + response.data.msg !== '' && + response.config.custom.showSuccess + ) { + uni.showToast({ + title: response.config.custom.successMsg || response.data.msg, + icon: 'none', + }); + } + return Promise.resolve(response.data); + }, + (error) => { + const userStore = $store('user'); + const isLogin = userStore.isLogin; + let errorMessage = '网络请求出错'; + if (error !== undefined) { + switch (error.statusCode) { + case 400: + errorMessage = '请求错误'; + break; + case 401: + if (isLogin) { + errorMessage = '您的登陆已过期'; + } else { + errorMessage = '请先登录'; + } + userStore.logout(true); + showAuthModal(); + break; + case 403: + errorMessage = '拒绝访问'; + break; + case 404: + errorMessage = '请求出错'; + break; + case 408: + errorMessage = '请求超时'; + break; + case 429: + errorMessage = '请求频繁, 请稍后再访问'; + break; + case 500: + errorMessage = '服务器开小差啦,请稍后再试~'; + break; + case 501: + errorMessage = '服务未实现'; + break; + case 502: + errorMessage = '网络错误'; + break; + case 503: + errorMessage = '服务不可用'; + break; + case 504: + errorMessage = '网络超时'; + break; + case 505: + errorMessage = 'HTTP版本不受支持'; + break; + } + if (error.errMsg.includes('timeout')) errorMessage = '请求超时'; + // #ifdef H5 + if (error.errMsg.includes('Network')) + errorMessage = window.navigator.onLine ? '服务器异常' : '请检查您的网络连接'; + // #endif + } + + if (error && error.config) { + if (error.config.custom.showError === false) { + uni.showToast({ + title: error.data?.msg || errorMessage, + icon: 'none', + mask: true, + }); + } + error.config.custom.showLoading && closeLoading(); + } + + return false; + }, +); + +const request = (config) => { + if (config.url[0] !== '/') { + config.url = '/app-api/' + config.url; + } + // TODO 芋艿:额外拼接 + if (config.url.indexOf('/app-api/') >= 0) { + config.url = 'http://api-dashboard.yudao.iocoder.cn' + config.url; // 调用【云端】 + // config.url = 'http://127.0.0.1:48080' + config.url; // 调用【本地】 + } + return http.middleware(config); +}; + +export default request; diff --git a/sheep/router/index.js b/sheep/router/index.js index 86796e5a..e4c18c56 100644 --- a/sheep/router/index.js +++ b/sheep/router/index.js @@ -58,10 +58,10 @@ const _go = ( } // 页面登录拦截 - if (nextRoute.meta?.auth && !$store('user').isLogin) { - showAuthModal(); - return; - } + // if (nextRoute.meta?.auth && !$store('user').isLogin) { + // showAuthModal(); + // return; + // } url = page; if (!isEmpty(query)) {