Browse Source

初始化

落日晚风 1 year ago
parent
commit
150e56fce3
6 changed files with 233 additions and 29 deletions
  1. 0 20
      env
  2. 8 2
      pages/goods/index.vue
  3. 3 2
      sheep/api/goods.js
  4. 1 1
      sheep/config/index.js
  5. 217 0
      sheep/request2/index.js
  6. 4 4
      sheep/router/index.js

+ 0 - 20
env

@@ -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

+ 8 - 2
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;

+ 3 - 2
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: {

+ 1 - 1
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;

+ 217 - 0
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;

+ 4 - 4
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)) {