Parcourir la source

完成多域名支持改造

lushuncheng il y a 6 ans
Parent
commit
24918fe920
13 fichiers modifiés avec 11280 ajouts et 7639 suppressions
  1. 3 1
      .gitignore
  2. 10 4
      .npmrc
  3. 3 1
      components/footer.vue
  4. 2 2
      components/header.vue
  5. 101 0
      middleware/initialize.js
  6. 101 76
      nuxt.config.js
  7. 10888 7334
      package-lock.json
  8. 6 6
      package.json
  9. 3 1
      pages/user/_id.vue
  10. 0 7
      plugins/axios.js
  11. 48 46
      plugins/deviceType.js
  12. 63 115
      plugins/nuxtAxios.js
  13. 52 46
      store/index.js

+ 3 - 1
.gitignore

@@ -95,4 +95,6 @@ build/Release
 # https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
 node_modules
 .DS_Store
-nuxt.config.js
+.gradle
+branches
+domainConfig.js

+ 10 - 4
.npmrc

@@ -1,4 +1,10 @@
-phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/
-chromedriver_cdnurl=https://npm.taobao.org/mirrors/chromedriver/
-sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
-electron_mirror=https://npm.taobao.org/mirrors/electron/
+phantomjs_cdnurl=hhttps://cdn.npm.taobao.org/dist/phantomjs/
+chromedriver_cdnurl=https://cdn.npm.taobao.org/dist/chromedriver/
+operadriver_cdnurl=https://cdn.npm.taobao.org/dist/operadriver
+SASS_BINARY_SITE=https://cdn.npm.taobao.org/dist/node-sass
+ELECTRON_MIRROR=https://cdn.npm.taobao.org/dist/electron/
+ELECTRON_BUILDER_BINARIES_MIRROR=https://cdn.npm.taobao.org/dist/electron-builder-binaries/
+sass_binary_site=https://cdn.npm.taobao.org/dist/node-sass
+electron_mirror=https://cdn.npm.taobao.org/dist/electron/
+electron_builder_binaries_mirror=https://cdn.npm.taobao.org/dist/electron-builder-binaries/
+registry=https://registry.npm.taobao.org/

+ 3 - 1
components/footer.vue

@@ -64,6 +64,7 @@ export default {
   data() {
     return {
       baseUrl: "",
+      jishuBaseUrl: "",
       isCity: false,
       isBusiness: false,
       isDirection: false,
@@ -89,7 +90,8 @@ export default {
     }
   },
   created() {
-    this.baseUrl = process.env.baseUrl;
+    this.baseUrl = this.$store.state.domainConfig.siteUrl;
+    this.jishuBaseUrl = this.$store.state.domainConfig.jishuinUrl;
   }
 };
 </script>

+ 2 - 2
components/header.vue

@@ -314,8 +314,8 @@ export default {
     }
   },
   created() {
-    this.baseUrl = process.env.baseUrl;
-    this.jishuBaseUrl = process.env.jishuBaseUrl;
+    this.baseUrl = this.$store.state.domainConfig.siteUrl;
+    this.jishuBaseUrl = this.$store.state.domainConfig.jishuinUrl;
   }
 };
 </script>

+ 101 - 0
middleware/initialize.js

@@ -0,0 +1,101 @@
+export default function(context) {
+  console.log("initialize.........");
+  let proto = "https";
+  let url = "";
+  let cookies = "";
+  // Server-side
+  if (process.server) {
+    console.log("server side............");
+    const { req } = context;
+    let host = req.headers.host;
+    let proto = "https";
+    if (req.headers["x-forwarded-proto"]) {
+      proto = req.headers["x-forwarded-proto"];
+    } else if (req.headers["x-scheme"]) {
+      proto = req.headers["x-scheme"];
+    } else if (host.indexOf("local.") != -1) {
+      proto = "http";
+    }
+    url = proto + "://" + host;
+    cookies = req.headers.cookie;
+  }
+  // Client-side
+  if (process.client) {
+    console.log("client side............");
+    url = document.location.href;
+    let proto = "http";
+    if (url.indexOf("https://") != -1) {
+      proto = "https";
+    }
+    cookies = document.cookie;
+  }
+  let regx = new RegExp(
+    "((?<branch>[a-z0-9_\\-]+)\\.)?(?<env>(www|prod|test|local))\\.proginn\\.com(\\:(?<port>\\d+))?",
+    "gim"
+  );
+  console.log(regx);
+  console.log(url);
+  let groups = regx.exec(url).groups;
+  let api = "";
+  let jishuinUrl = "";
+  let rooterUrl = "";
+  let siteUrl = "";
+  if (groups) {
+    let { branch, env, port } = groups;
+    switch (env) {
+      case "www":
+        api = "https://www.proginn.com";
+        siteUrl = "https://www.proginn.com";
+        jishuinUrl = "https://jishuin.proginn.com";
+        rooterUrl = "https://rooter.proginn.com";
+        break;
+      case "test":
+        api = "https://" + branch + ".test.proginn.com";
+        siteUrl = "https://" + branch + ".test.proginn.com";
+        jishuinUrl = "https://" + branch + ".test-jishuin.proginn.com";
+        rooterUrl = "https://" + branch + ".test-rooter.proginn.com";
+        break;
+      case "local":
+        if (port && port != "80") {
+          api = "http://local.proginn.com:" + port;
+          siteUrl = "http://local.proginn.com:" + port;
+          jishuinUrl = "http://local-jishuin.proginn.com";
+          rooterUrl = "http://local-rooter.proginn.com";
+        } else {
+          api = "http://local.proginn.com";
+          siteUrl = "http://local.proginn.com";
+          jishuinUrl = "http://local-jishuin.proginn.com";
+          rooterUrl = "http://local-rooter.proginn.com";
+        }
+        break;
+      case "prod":
+        api = "https://" + branch + ".prod.proginn.com";
+        siteUrl = "https://" + branch + ".prod.proginn.com";
+        jishuinUrl = "https://" + branch + ".prod-jishuin.proginn.com";
+        rooterUrl = "https://" + branch + ".prod-rooter.proginn.com";
+        break;
+      default:
+        // 按生产处理
+        api = "https://www.proginn.com";
+        siteUrl = "https://www.proginn.com";
+        jishuinUrl = "https://jishuin.proginn.com";
+        rooterUrl = "https://rooter.proginn.com";
+        break;
+    }
+  } else {
+    // 按生产处理
+    api = "https://www.proginn.com";
+    siteUrl = "https://www.proginn.com";
+    jishuinUrl = "https://jishuin.proginn.com";
+    rooterUrl = "https://rooter.proginn.com";
+  }
+  context.store.commit("updateDomainConfig", {
+    api: api,
+    siteUrl: siteUrl,
+    jishuinUrl: jishuinUrl,
+    rooterUrl: rooterUrl
+  });
+  context.store.commit("updateDeviceType", context.app.$deviceType || {});
+  context.store.commit("updateIsPC", context.app.$deviceType.pc || false);
+  context.store.commit("updateIsWeixin", context.app.$deviceType.wx || false);
+}

+ 101 - 76
nuxt.config.js

@@ -1,73 +1,79 @@
-const pkg = require('./package');
-const cheerio = require('cheerio')
+const pkg = require("./package");
 
 module.exports = {
-  mode: 'universal',
-  
+  mode: "universal",
+
   env: {
-    baseUrl: process.env.NODE_ENV == 'development' ? 'https://dev.test.proginn.com' : 'https://www.proginn.com',
+    baseUrl:
+      process.env.NODE_ENV == "development"
+        ? "https://dev.test.proginn.com"
+        : "https://www.proginn.com",
     jishuBaseUrl:
-      process.env.NODE_ENV == 'development'
-        ? 'https://dev.test-jishuin.proginn.com'
-        : 'https://jishuin.proginn.com'
+      process.env.NODE_ENV == "development"
+        ? "https://dev.test-jishuin.proginn.com"
+        : "https://jishuin.proginn.com"
   },
-  
+
   /**
    * 打包文件
    */
   build: {
-    vendor: [ 'element-ui' ],
+    vendor: ["element-ui"]
   },
-  
+
   server: {
     host: `0.0.0.0`,
     port: 3000
   },
-  
+
   /*
-  ** Headers of the page
-  */
+   ** Headers of the page
+   */
   head: {
-    title: '程序员客栈',
+    title: "程序员客栈",
     meta: [
-      { charset: 'utf-8' },
-      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
-      { name: 'baidu-site-verification', content: '7IbkIN9Kwp' },
-      { 'http-equiv': 'X-UA-Compatible', content: 'IE=edge,chrome=1' },
+      { charset: "utf-8" },
+      { name: "viewport", content: "width=device-width, initial-scale=1" },
+      { name: "baidu-site-verification", content: "7IbkIN9Kwp" },
+      { "http-equiv": "X-UA-Compatible", content: "IE=edge,chrome=1" },
       // hid: 'x', 可在页面内覆盖这里
-      { name: 'robots', content: 'noindex,follow' },
-      { name: 'description', content: pkg.description },
-      { 'http-equiv': 'Cache-Control', content: 'no-transform' },
-      { 'http-equiv': 'Cache-Control', content: 'no-siteapp' }
+      { name: "robots", content: "noindex,follow" },
+      { name: "description", content: pkg.description },
+      { "http-equiv": "Cache-Control", content: "no-transform" },
+      { "http-equiv": "Cache-Control", content: "no-siteapp" }
     ],
-    link: [ { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' } ]
+    link: [{ rel: "icon", type: "image/x-icon", href: "/favicon.ico" }]
   },
-  
+
   /*
-  ** Customize the progress-bar color
-  */
-  loading: { color: '#fff' },
-  
+   ** Customize the progress-bar color
+   */
+  loading: { color: "#fff" },
+
   /*
-  ** Global CSS
-  */
-  css: [ '@/assets/css/common.css', '@/assets/css/special.css', 'swiper/dist/css/swiper.css' ],
-  
+   ** Global CSS
+   */
+  css: [
+    "@/assets/css/common.css",
+    "@/assets/css/special.css",
+    "swiper/dist/css/swiper.css"
+  ],
+
   /*
-  ** Plugins to load before mounting the App
-  */
+   ** Plugins to load before mounting the App
+   */
   plugins: [
-    'plugins/common',
-    'plugins/element',
+    "plugins/common",
+    "plugins/element",
     // 'plugins/http',
-    'plugins/nuxtAxios',
-    'plugins/deviceType',
+    "plugins/nuxtAxios",
+    "plugins/deviceType",
     {
-      src: 'plugins/rem',
+      src: "plugins/rem",
       ssr: false
     },
     {
-      src: 'plugins/vconsole',
+      src: "plugins/vconsole",
       ssr: false
     },
     {
@@ -80,11 +86,11 @@ module.exports = {
     }
   ],
   /*
-  ** Axios module configuration
-  */
+   ** Axios module configuration
+   */
   axios: {
     // See http://github.com/nuxt-community/axios-module#options
-    proxy: process.env.NODE_ENV === 'development',
+    proxy: process.env.NODE_ENV === "development",
     // http: true,
     progress: true,
     // baseURL: process.env.BASE_URL || '',
@@ -98,54 +104,73 @@ module.exports = {
    * Proxy
    */
   proxy: [
-    [ '/api', { target: 'https://dev.test.proginn.com', changeOrigin: true } ],
-    [ '/file/proxyUpload', { target: 'https://dev.test.proginn.com', changeOrigin: true } ],
-    [ '/file/prepareUpload', { target: 'https://dev.test.proginn.com', changeOrigin: true } ],
-    [ '/file/uploadCallback', { target: 'https://dev.test.proginn.com', changeOrigin: true } ],
+    ["/api", { target: "https://dev.test.proginn.com", changeOrigin: true }],
+    [
+      "/file/proxyUpload",
+      { target: "https://dev.test.proginn.com", changeOrigin: true }
+    ],
+    [
+      "/file/prepareUpload",
+      { target: "https://dev.test.proginn.com", changeOrigin: true }
+    ],
+    [
+      "/file/uploadCallback",
+      { target: "https://dev.test.proginn.com", changeOrigin: true }
+    ],
     // [ '/programmerinnfile', { target: 'https://v0.api.upyun.com', changeOrigin: true } ],
-    [ '/upload_image', { target: 'https://dev.test-jishuin.proginn.com', changeOrigin: true } ],
-    [ '/image', { target: 'https://stacdn.proginn.com', changeOrigin: true } ]
+    [
+      "/upload_image",
+      { target: "https://dev.test-jishuin.proginn.com", changeOrigin: true }
+    ],
+    ["/image", { target: "https://stacdn.proginn.com", changeOrigin: true }]
   ],
-  
+
   /*
-  ** Nuxt.js modules
-  */
-  modules: [ '@nuxtjs/axios', '@nuxtjs/proxy' ],
-  
+   ** Nuxt.js modules
+   */
+  modules: ["@nuxtjs/axios", "@nuxtjs/proxy"],
+
   /*
-  ** Build configuration
-  */
+   ** Build configuration
+   */
   build: {
     /*
-    ** You can extend webpack config here
-    */
-    extractCSS: { //提取html中的 css到文件
+     ** You can extend webpack config here
+     */
+    extractCSS: {
+      //提取html中的 css到文件
       splitChunks: {
         cacheGroups: {
           styles: {
-            name: 'styles',
+            name: "styles",
             test: /\.(css|vue|scss|less)$/,
-            chunks: 'all',
+            chunks: "all",
             enforce: true
           }
         }
       }
     },
+    optimization: {
+      splitChunks: {
+        chunks: "all",
+        automaticNameDelimiter: ".",
+        name: undefined,
+        cacheGroups: {}
+      }
+    },
     extend(config, ctx) {
-      console.log(config);
+      config.optimization = {
+        splitChunks: {
+          chunks: "all",
+          automaticNameDelimiter: ".",
+          name: undefined,
+          cacheGroups: {}
+        }
+      };
+      //console.log(config);
     }
   },
-  
-  // hooks: {
-  //   render: {
-  //     route(url, result, context) {
-  //       if (context.nuxt.state.deviceType.spider) {
-  //         const doc = cheerio.load(result.html);
-  //         doc(`body script`).remove();
-  //         doc(`head style`).remove();
-  //         result.html = doc.html();
-  //       }
-  //     },
-  //   }
-  // },
+  router: {
+    middleware: "initialize"
+  }
 };

Fichier diff supprimé car celui-ci est trop grand
+ 10888 - 7334
package-lock.json


+ 6 - 6
package.json

@@ -2,7 +2,7 @@
   "name": "proginn-frontend",
   "version": "1.0.0",
   "description": "proginn ssr project",
-  "author": "zweizhao",
+  "author": "proginn",
   "private": true,
   "scripts": {
     "build_release": "cross-env nuxt build",
@@ -17,8 +17,6 @@
     "@nuxtjs/axios": "^5.3.6",
     "@nuxtjs/proxy": "^1.3.1",
     "better-scroll": "^2.0.0-beta.2",
-    "cross-env": "^5.2.0",
-    "css-loader": "^2.1.1",
     "dayjs": "^1.8.15",
     "element-ui": "^2.12.0",
     "hljs": "^6.2.3",
@@ -26,11 +24,8 @@
     "js-cookie": "^2.2.1",
     "mint-ui": "^2.2.13",
     "moment": "^2.24.0",
-    "node-sass": "^4.12.0",
     "nuxt": "^2.6.3",
     "qs": "^6.8.0",
-    "sass-loader": "^7.1.0",
-    "style-loader": "^0.23.1",
     "vconsole": "^3.3.4",
     "vue-awesome-swiper": "^3.1.3",
     "vue-quill-editor": "^3.0.6"
@@ -39,6 +34,11 @@
     "cheerio": "^1.0.0-rc.3",
     "less": "^3.9.0",
     "less-loader": "^5.0.0",
+    "sass-loader": "^7.1.0",
+    "style-loader": "^0.23.1",
+    "node-sass": "^4.12.0",
+    "cross-env": "^5.2.0",
+    "css-loader": "^3.4.0",
     "nodemon": "^1.18.9"
   }
 }

+ 3 - 1
pages/user/_id.vue

@@ -121,6 +121,7 @@ export default {
   data() {
     return {
       baseUrl: "",
+      jishuBaseUrl: "",
       list: [],
       currentPage: 1,
       isLoading: false,
@@ -298,7 +299,8 @@ export default {
     }
   },
   created() {
-    this.baseUrl = process.env.baseUrl;
+    this.baseUrl = this.$store.state.domainConfig.siteUrl;
+    this.jishuBaseUrl = this.$store.state.domainConfig.jishuinUrl;
   }
 };
 </script>

+ 0 - 7
plugins/axios.js

@@ -1,18 +1,11 @@
 import axios from 'axios'
 const instance = axios.create({
-  // baseURL: process.env.BASE_URL || '',
   timeout: 15000,
   withCredentials: true
 });
 // Add a request interceptor
 instance.interceptors.request.use(function (config) {
   // Do something before request is sent
-  // const referer = config.headers.referer;
-  // const url = config.url;
-  // if (referer && !(/https?/.test(url))) {
-  //   config.url = referer.split('/').slice(0, 3).join('/') + url;
-  // }
-  // console.log('axios url', config)
   return config;
 }, function (error = {}) {
   console.log('request Error', error);

+ 48 - 46
plugins/deviceType.js

@@ -1,72 +1,74 @@
-export default function ({ req }, inject) {
-  let deviceType = {}
-  deviceType.ios = false
-  deviceType.android = false
-  deviceType.pc = false
-  deviceType.ios = false
-  deviceType.wx = false
-  deviceType.app = false
-  deviceType.spider = false
-  
-  let cookie = '', ua = ''
-  
+export default function({ req }, inject) {
+  console.log("devicetype...............");
+  let deviceType = {};
+  deviceType.ios = false;
+  deviceType.android = false;
+  deviceType.pc = false;
+  deviceType.ios = false;
+  deviceType.wx = false;
+  deviceType.app = false;
+  deviceType.spider = false;
+
+  let cookie = "",
+    ua = "";
+
   /** 通过UA判断设备类型 **/
   if (req && req.headers) {
-    ua = req && req.headers && req.headers[ 'user-agent' ] || ''
+    ua = (req && req.headers && req.headers["user-agent"]) || "";
   } else if (window && window.navigator) {
-    ua = window.navigator.userAgent
+    ua = window.navigator.userAgent;
   }
   if (/(iPhone|iPad|iPod|iOS)/i.test(ua)) {
-    deviceType.ios = true
+    deviceType.ios = true;
   } else if (/(Android)/i.test(ua)) {
-    deviceType.android = true
+    deviceType.android = true;
   } else {
-    deviceType.pc = true
+    deviceType.pc = true;
   }
-  
+
   /** 通过cookie 判断是不是APP **/
   if (req && req.headers) {
-    cookie = req.headers.cookie || ''
+    cookie = req.headers.cookie || "";
   } else if (document) {
-    cookie = document.cookie
+    cookie = document.cookie;
   }
-  
-  deviceType.app = judgeHasX_APP(cookie)
-  
+
+  deviceType.app = judgeHasX_APP(cookie);
+
   /** 判断是不是 微信 **/
   if (/(MicroMessenger)/i.test(ua)) {
-    deviceType.wx = true
+    deviceType.wx = true;
   }
-  
+
   /**  判断是不是 蜘蛛 **/
   if (/(spider)/i.test(ua)) {
-    deviceType.spider = true
+    deviceType.spider = true;
   }
-  
-  deviceType.isMobile = function () {
-    return deviceType.ios || deviceType.android
-  }
-  
-  deviceType.isPC = function () {
-    return deviceType.pc
-  }
-  
-  deviceType.isWx = function () {
-    return deviceType.wx
-  }
-  
+
+  deviceType.isMobile = function() {
+    return deviceType.ios || deviceType.android;
+  };
+
+  deviceType.isPC = function() {
+    return deviceType.pc;
+  };
+
+  deviceType.isWx = function() {
+    return deviceType.wx;
+  };
+
   function judgeHasX_APP(cookiedata) {
-    var cookies = cookiedata ? cookiedata.split('; ') : [];
+    var cookies = cookiedata ? cookiedata.split("; ") : [];
     var i = 0;
     for (; i < cookies.length; i++) {
-      var parts = cookies[ i ].split('=');
+      var parts = cookies[i].split("=");
       var name = parts[0].replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);
-      if (name === 'x_app') {
-        return true
+      if (name === "x_app") {
+        return true;
       }
     }
-    return false
+    return false;
   }
-  inject && inject('deviceType', deviceType)
-  return deviceType
+  inject && inject("deviceType", deviceType);
+  return deviceType;
 }

+ 63 - 115
plugins/nuxtAxios.js

@@ -1,137 +1,85 @@
-import Vue from 'vue';
-import qs from 'qs';
+import Vue from "vue";
+import qs from "qs";
 
-export default function({ $axios, redirect, req, ...args }) {
-	$axios.onRequest((config) => {
-		const contentType = config.headers['Content-Type'];
-		const isUpload = contentType === 'multipart/form-data' || contentType === 'application/json';
-		if (!isUpload) {
-			config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
-		}
-		console.log('Before, making request to ', config.url, config.baseURL);
-		const referer = (req && req.headers && req.headers.host) || (config.headers.common && config.headers.common.referer);
-		const proto = (referer && referer.indexOf('local.proginn.com') !==-1) ? "http://" : "https://"
-		const baseUrl = /https?/.test(referer) ? referer : proto + referer;
-		const url = config.url;
-		// if (referer && !(/https?/.test(url))) {
-		if (typeof window === 'undefined') {
-			// server http
-			config.url = baseUrl + url;
-			config.baseURL = baseUrl;
-		} else {
-			// client http
-			config.url = /https?/.test(url) ? `/${url.split('/').slice(3).join('/')}` : url;
-			config.baseURL = '';
-		}
-		// stringify post data
-		if (config.method === 'post' && !isUpload) {
-			const data = config.data;
-			console.log(data);
-			if (typeof data != 'string') {
-				// const cookie = config.headers.cookie || config.headers.common.cookie || '';
-				let urlParams = [];
-				for (const key in data) {
-					if (data.hasOwnProperty(key)) {
-						const element = encodeURIComponent(data[key]);
-						urlParams.push(`${key}=${element}`);
-					}
-				}
-				config.data = urlParams.join('&');
-			}
-		}
-		console.log('After, making request to ', config.url, config.baseURL);
-		return config;
-	});
+export default function({ $axios, redirect, req, store, app, ...args }) {
+  $axios.onRequest(config => {
+    const contentType = config.headers["Content-Type"];
+    const isUpload =
+      contentType === "multipart/form-data" ||
+      contentType === "application/json";
+    if (!isUpload) {
+      config.headers["Content-Type"] = "application/x-www-form-urlencoded";
+    }
+    console.log("Before, making request to ", config.url, config.baseURL);
+    config.baseURL = store.state.domainConfig.api;
 
-	$axios.onResponse((res) => {
-		const data = res.data;
-    /**
-     * 设备判断
-     */
-    const getDeviceType = function() {
-      const strCookie = process.server
-        ? req.headers.cookie
-        : document.cookie;
-      //将多cookie切割为多个名/值对
-      const arrCookie = strCookie.split("; ");
-      let xAPP = "";
-      //遍历cookie数组,处理每个cookie对
-      for(let i=0; i<arrCookie.length; i++){
-        const arr = arrCookie[i].split("=");
-        //找到名称为x_app的cookie,并返回它的值
-        if ("x_app" === arr[0]){
-          xAPP = arr[1];
-          break;
+    // stringify post data
+    if (config.method === "post" && !isUpload) {
+      const data = config.data;
+      console.log("stringify req data............");
+      console.log(JSON.stringify(data));
+      if (typeof data != "string") {
+        let urlParams = [];
+        for (const key in data) {
+          if (data.hasOwnProperty(key)) {
+            const element = encodeURIComponent(data[key]);
+            urlParams.push(`${key}=${element}`);
+          }
         }
-      }
-      if (xAPP.toLowerCase().indexOf('ios') !== -1) { //判断iPhone|iPad|iPod|iOS APP
-        return 'ios';
-      } else if (xAPP.toLowerCase().indexOf('android') !== -1) { //判断Android app
-        return 'android';
-      } else { // pc OR H5 todo 判断UA,精准识别是H5还是PC
-        return 'pc';
+        config.data = urlParams.join("&");
       }
     }
-    console.log('res:::::::::')
+    console.log("After, making request to ", config.url, config.baseURL);
+    return config;
+  });
+
+  $axios.onResponse(res => {
+    const data = res.data;
+    console.log("res:::::::::");
+    console.log(app.$deviceType);
     // console.log(res);
-    console.log(res.config)
-    console.log(data)
-		// req && req.url && needLogin(req.url)
-    let needLogin = false
-    if (res.config && res.config.data && typeof res.config.data === 'string') {
-      const queryData = res.config.data
-      //将多cookie切割为多个名/值对
+    console.log(res.config.url);
+    console.log(JSON.stringify(data));
+    // req && req.url && needLogin(req.url)
+    let needLogin = false;
+    if (res.config && res.config.data && typeof res.config.data === "string") {
+      const queryData = res.config.data;
+      // 将请求入参重新解析
       const arrQuery = queryData.split("&");
-      //遍历cookie数组,处理每个cookie对
-      for(let i=0; i<arrQuery.length; i++){
+      // 遍历每个入参,看有没有needLogin参数,并且参数是true, 表示该接口如果服务器端返回未登录,则强制跳到登录页面
+      for (let i = 0; i < arrQuery.length; i++) {
         const arr = arrQuery[i].split("=");
-        //找到名称为x_app的cookie,并返回它的值
-        if ("needLogin" === arr[0] && (arr[1] === 'true' || arr[1] === true)){
+        //找到名称needLogin
+        if ("needLogin" === arr[0] && (arr[1] === "true" || arr[1] === true)) {
           needLogin = true;
           break;
         }
       }
     }
-		if (data.status === 1 || data.filename || data.sign) {
-		} else if (needLogin && data.status === -99) {
-      const deviceType = getDeviceType();
-      if (deviceType === 'ios' || deviceType === 'android') {
+    if (data.status === 1 || data.filename || data.sign) {
+    } else if (needLogin && data.status === -99) {
+      if (app.$deviceType.app) {
         if (process.server) {
-          redirect('proginn://login')
+          redirect("proginn://login");
         } else {
-          location.href = 'proginn://login'
+          location.href = "proginn://login";
         }
       } else {
         if (process.server) {
-          redirect('https://www.proginn.com/?loginbox=show')
+          redirect(store.state.domainConfig.siteUrl + "/?loginbox=show");
         } else {
-          location.href = 'https://www.proginn.com/?loginbox=show'
+          location.href = store.state.domainConfig.siteUrl + "/?loginbox=show";
         }
       }
-			console.log(req && req.url);
-			// if (req && req.url && needLogin(req.url)) {
-			//     redirect('/?loginbox=show');
-			// }
-			// return {code: '401', message: '请登录!'};
-		} else {
-			// if (!Vue.hasMessage) {
-      console.log(data)
-			  Vue.prototype.$message.closeAll()
-				Vue.prototype.$message.error(data.info || '')
-				// Vue.hasMessage = true
-				// setTimeout(() => {
-				// 	Vue.hasMessage = false
-				// }, 3000)
-			// }
-			// return data;
-		}
-		return res;
-	});
-	$axios.onError((error) => {
-		console.log('err', error);
-		//   const code = parseInt(error.response && error.response.status)
-		//   if (code === 400) {
-		//     redirect('/400')
-		//   }
-	});
+      console.log(req && req.url);
+    } else {
+      console.log(JSON.stringify(data));
+      Vue.prototype.$message.closeAll();
+      Vue.prototype.$message.error(data.info || "");
+    }
+    return res;
+  });
+  $axios.onError(error => {
+    console.log("err", error);
+  });
 }

+ 52 - 46
store/index.js

@@ -1,50 +1,56 @@
-import Vue from 'vue'
-import Vuex from 'vuex'
-Vue.use(Vuex)
-
-const store = () => new Vuex.Store({
-  state: {
-    isPC: -1,
-    isWeixin: false,
-    userinfo: {},
-    wxConfig: {},
-    regPhone: /^(0|86|17951)?(13[0-9]|15[012356789]|166|17[35678]|18[0-9]|14[57])[0-9]{8}$/,
-    regEmail: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,
-    regSpecialChar: /[&¥%\/\*]+/,
-    deviceType: {
-    
-    }
+export const state = () => ({
+  isPC: -1,
+  isWeixin: false,
+  userinfo: {},
+  wxConfig: {},
+  regPhone: /^(0|86|17951)?(13[0-9]|15[012356789]|166|17[35678]|18[0-9]|14[57])[0-9]{8}$/,
+  regEmail: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,
+  regSpecialChar: /[&¥%\/\*]+/,
+  deviceType: {},
+  domainConfig: {
+    api: "",
+    siteUrl: "",
+    rooterUrl: "",
+    jishuinUrl: ""
+  }
+});
+export const getters = {
+  isLogin(state) {
+    return state.userinfo && !!state.userinfo.nickname;
+  }
+};
+export const mutations = {
+  updateDomainConfig(state, config) {
+    console.log("update-----------store-----------");
+    console.log(config);
+    state.domainConfig = {
+      api: config.api,
+      siteUrl: config.siteUrl,
+      jishuinUrl: config.jishuinUrl,
+      rooterUrl: config.rooterUrl
+    };
+  },
+  updateUserinfo(state, payload) {
+    state.userinfo = payload.userinfo;
   },
-  getters: {
-    isLogin(state) {
-      return state.userinfo && !!state.userinfo.nickname
-    }
+  updateIsPC(state, payload) {
+    state.isPC = payload.isPC;
   },
-  mutations: {
-    updateUserinfo(state, payload) {
-      state.userinfo = payload.userinfo
-    },
-    updateIsPC(state, payload) {
-      state.isPC = payload.isPC
-    },
-    updateIsWeixin(state, payload) {
-      state.isWeixin = payload.isWeixin
-    },
-    updateDeviceType(state, payload) {
-      state.deviceType = payload
-    },
-    updateWxConfig(state, payload) {
-      state.wxConfig = {
-        ...state.wxConfig,
-        ...payload.wxConfig,
-      }
-    }
+  updateIsWeixin(state, payload) {
+    state.isWeixin = payload.isWeixin;
   },
-  actions: {
-    async nuxtServerInit({commit}, {app}) {
-      commit('updateDeviceType', app.$deviceType || {})
-    }
+  updateDeviceType(state, payload) {
+    state.deviceType = payload;
+  },
+  updateWxConfig(state, payload) {
+    state.wxConfig = {
+      ...state.wxConfig,
+      ...payload.wxConfig
+    };
+  }
+};
+export const actions = {
+  async nuxtServerInit({ commit }, { app }) {
+    commit("updateDeviceType", app.$deviceType || {});
   }
-})
-
-export default store
+};