lex-xin пре 3 година
родитељ
комит
3032412022
10 измењених фајлова са 1409 додато и 6 уклоњено
  1. 1141 3
      package-lock.json
  2. 3 0
      package.json
  3. 75 0
      src/helpers/request.ts
  4. 2 1
      src/main.ts
  5. 86 0
      src/permission.ts
  6. 1 1
      src/router.ts
  7. 7 0
      src/state.ts
  8. 3 0
      src/utils/auth.ts
  9. 7 1
      vite.config.ts
  10. 84 0
      yarn.lock

Разлика између датотеке није приказан због своје велике величине
+ 1141 - 3
package-lock.json


+ 3 - 0
package.json

@@ -10,7 +10,10 @@
   "dependencies": {
     "@vitejs/plugin-legacy": "^1.7.1",
     "@vitejs/plugin-vue-jsx": "^1.3.7",
+    "clean-deep": "^3.4.0",
     "dayjs": "^1.10.7",
+    "element-plus": "^2.0.2",
+    "umi-request": "^1.4.0",
     "vue": "^3.2.25",
     "vue-router": "^4.0.12"
   },

+ 75 - 0
src/helpers/request.ts

@@ -0,0 +1,75 @@
+import { extend } from 'umi-request'
+import { ElMessage } from 'element-plus'
+import cleanDeep from 'clean-deep'
+// import { setLogout } from 'src/actions/users'
+// import store from 'src/store'
+
+export interface SearchInitParams {
+  rows?: string | number;
+  page?: string | number;
+}
+
+export interface InitSearchRespones {
+  data: {
+    rows: any[],
+    [key: string]: any
+  },
+  [key: string]: any
+}
+
+const request = extend({
+  requestType: 'form',
+  timeout: 10000
+})
+
+request.interceptors.request.use((url, options: any) => {
+  const Authorization = (localStorage.getItem('Authorization') || '')
+  const tenantId = (localStorage.getItem('tenantId') || '')
+  const organId = (localStorage.getItem('organId') || '')
+  const authHeaders: any = {}
+  if (Authorization && !['/api-auth/usernameLogin', '/api-auth/smsLogin', '/api-auth/code/sendSms'].includes(url)) {
+    authHeaders.Authorization = Authorization
+  }
+  if (tenantId) {
+    authHeaders.tenantId = tenantId
+  }
+  if (organId) {
+    authHeaders.organId = organId
+  }
+  return {
+    url,
+    options: {
+      ...options,
+      params: cleanDeep(options.params),
+      headers: {
+        ...options.headers,
+        ...authHeaders
+      }
+    }
+  }
+})
+
+request.interceptors.response.use(async (res, options) => {
+  const url = new URL(res.url)
+  if (res.status > 299 || res.status < 200) {
+    const msg = '服务器错误,状态码' + res.status
+    ElMessage.error(msg)
+    throw new Error(msg)
+  }
+  const data = await res.clone().json()
+  if (data.code !== 200 && data.errCode !== 0) {
+    const msg = data.msg || '处理失败,请重试'
+    // const state: any = store.getState()
+    // if (data.code === 401 && state.user.status === 'login' && url.pathname !== '/api-auth/exit') {
+    //   const { dispatch }: any = store
+    //   dispatch(setLogout())
+    // }
+    if (!(data.code === 403 || data.code === 401)) {
+      ElMessage.error(msg)
+    }
+    throw new Error(msg)
+  }
+  return res
+})
+
+export default request

+ 2 - 1
src/main.ts

@@ -1,7 +1,8 @@
 import { createApp } from 'vue'
 import App from './App.vue'
-import { router } from './router'
+import router from './router'
 
+import './permission'
 
 createApp(App)
   .use(router).mount('#app')

+ 86 - 0
src/permission.ts

@@ -0,0 +1,86 @@
+// import Vue from 'vue'
+import router from "./router";
+// import store from './store'
+import { ElMessage } from "element-plus";
+// import NProgress from "nprogress"; // progress bar
+// import "nprogress/nprogress.css"; // progress bar style
+import { getToken } from "./utils/auth";
+// import getPageTitle from '@/utils/get-page-title'
+
+// NProgress.configure({ showSpinner: false }); // NProgress Configuration
+
+const whiteList = ["/login"]; // no redirect whitelist
+
+// let isOpen = false
+
+// router.onError((error: any) => {
+//   if (error instanceof Error) {
+//     const isChunkLoadFailed = error.name.indexOf('chunk')
+//     const targetPath = router.history.pending.fullPath;
+//     if (isChunkLoadFailed && !isOpen) {
+//       isOpen = true
+//       router.app.$confirm("网站有更新请点击确定刷新页面?", "更新提示", {
+//         confirmButtonText: "确定",
+//         cancelButtonText: "取消",
+//         type: "warning"
+//       })
+//         .then(() => {
+//           location.hash = targetPath
+//           window.location.reload()
+//         })
+//         .catch(() => {
+//           return
+//         });
+//     }
+//   }
+// });
+
+router.beforeEach(async (to, from, next) => {
+  // from.query = to.query
+  // start progress bar
+  // NProgress.start();
+  const hasToken = getToken();
+  if (hasToken) {
+    if (to.path === "/login") {
+      // 如果有tonken直接跳转到首页
+      next({ path: "/" });
+
+      // NProgress.done();
+    } else {
+      const hasGetUserInfo = store.getters.phone;
+      // 有名字 说明有用户信息 跳走
+      if (hasGetUserInfo) {
+        next();
+      } else {
+        try {
+          // 异步获取用户信息
+          await store.dispatch("user/getInfo");
+          
+          next({ ...to, replace: true });
+        } catch (error: any) {
+          // remove token and go to login page to re-login
+          await store.dispatch("user/resetToken");
+          if (error.msg) {
+            ElMessage.error(error.msg);
+          }
+          next(`/login`);
+          // NProgress.done();
+        }
+      }
+    }
+  } else {
+    /* has no token*/
+    if (whiteList.indexOf(to.path) !== -1) {
+      // in the free login whitelist, go directly
+      next();
+    } else {
+      // other pages that do not have permission to access are redirected to the login page.
+      next(`/login`);
+    }
+  }
+});
+
+router.afterEach(() => {
+  // finish progress bar
+  // NProgress.done();
+});

+ 1 - 1
src/router.ts

@@ -2,7 +2,7 @@ import { createRouter, createWebHashHistory } from 'vue-router'
 // import VueRouter from 'vue-router'
 import routes from './routes'
 
-export const router = createRouter({
+export default createRouter({
   history: createWebHashHistory(),
   routes
 })

+ 7 - 0
src/state.ts

@@ -0,0 +1,7 @@
+import { reactive } from 'vue'
+
+const state = reactive({
+  
+})
+
+export default state

+ 3 - 0
src/utils/auth.ts

@@ -0,0 +1,3 @@
+export const getToken = () => {
+  return localStorage.getItem('Authorization')
+}

+ 7 - 1
vite.config.ts

@@ -1,7 +1,7 @@
+const { resolve } = require('path')
 import { defineConfig } from "vite";
 import vue from "@vitejs/plugin-vue";
 import { VitePWA } from 'vite-plugin-pwa'
-import { hostname } from "os";
 const vueJsx = require('@vitejs/plugin-vue-jsx')
 const legacy = require('@vitejs/plugin-legacy')
 
@@ -9,6 +9,12 @@ const proxyUrl = "https://test.dayaedu.com/"; // test 环境
 // https://vitejs.dev/config/
 export default defineConfig({
   base: "./",
+  // '/src': resolve(__dirname, './src')
+  resolve: {
+    alias: {
+      '@': resolve(__dirname, './src')
+    }
+  },
   plugins: [
     vue(),
     vueJsx(),

+ 84 - 0
yarn.lock

@@ -1439,6 +1439,15 @@ character-parser@^2.2.0:
   dependencies:
     is-regex "^1.0.3"
 
+clean-deep@^3.4.0:
+  version "3.4.0"
+  resolved "https://registry.npmmirror.com/clean-deep/-/clean-deep-3.4.0.tgz#c465c4de1003ae13a1a859e6c69366ab96069f75"
+  integrity sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==
+  dependencies:
+    lodash.isempty "^4.4.0"
+    lodash.isplainobject "^4.0.6"
+    lodash.transform "^4.6.0"
+
 color-convert@^1.9.0:
   version "1.9.3"
   resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -1583,6 +1592,13 @@ emmet@^2.3.0:
     "@emmetio/abbreviation" "^2.2.3"
     "@emmetio/css-abbreviation" "^2.1.4"
 
+encoding@^0.1.11:
+  version "0.1.13"
+  resolved "https://registry.npmmirror.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
+  dependencies:
+    iconv-lite "^0.6.2"
+
 entities@^2.0.0:
   version "2.2.0"
   resolved "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
@@ -1950,6 +1966,13 @@ htmlparser2@^7.1.2:
     domutils "^2.8.0"
     entities "^3.0.1"
 
+iconv-lite@^0.6.2:
+  version "0.6.3"
+  resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
 idb@^6.1.4:
   version "6.1.5"
   resolved "https://registry.npmmirror.com/idb/-/idb-6.1.5.tgz#dbc53e7adf1ac7c59f9b2bf56e00b4ea4fce8c7b"
@@ -2081,6 +2104,11 @@ is-shared-array-buffer@^1.0.1:
   resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
   integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
 
+is-stream@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
+
 is-stream@^2.0.0:
   version "2.0.1"
   resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
@@ -2107,6 +2135,14 @@ is-weakref@^1.0.1:
   dependencies:
     call-bind "^1.0.2"
 
+isomorphic-fetch@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.npmmirror.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+  integrity sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==
+  dependencies:
+    node-fetch "^1.0.1"
+    whatwg-fetch ">=0.10.0"
+
 jake@^10.6.1:
   version "10.8.2"
   resolved "https://registry.npmmirror.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b"
@@ -2205,11 +2241,26 @@ lodash.debounce@^4.0.8:
   resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
   integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
 
+lodash.isempty@^4.4.0:
+  version "4.4.0"
+  resolved "https://registry.npmmirror.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
+  integrity sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==
+
+lodash.isplainobject@^4.0.6:
+  version "4.0.6"
+  resolved "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+  integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
+
 lodash.sortby@^4.7.0:
   version "4.7.0"
   resolved "https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
   integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==
 
+lodash.transform@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.npmmirror.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0"
+  integrity sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==
+
 lodash@^4.17.20:
   version "4.17.21"
   resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
@@ -2269,6 +2320,14 @@ nanoid@^3.2.0:
   resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c"
   integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==
 
+node-fetch@^1.0.1:
+  version "1.7.3"
+  resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+  integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
+  dependencies:
+    encoding "^0.1.11"
+    is-stream "^1.0.1"
+
 node-releases@^2.0.1:
   version "2.0.2"
   resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01"
@@ -2455,6 +2514,13 @@ punycode@^2.1.0:
   resolved "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
   integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
 
+qs@^6.9.1:
+  version "6.10.3"
+  resolved "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e"
+  integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==
+  dependencies:
+    side-channel "^1.0.4"
+
 queue-microtask@^1.2.2:
   version "1.2.3"
   resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
@@ -2581,6 +2647,11 @@ safe-buffer@~5.1.1:
   resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
   integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
 
+"safer-buffer@>= 2.1.2 < 3.0.0":
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
 semver@7.0.0:
   version "7.0.0"
   resolved "https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
@@ -2790,6 +2861,14 @@ typescript@^4.5.4:
   resolved "https://registry.npmmirror.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
   integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
 
+umi-request@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.npmmirror.com/umi-request/-/umi-request-1.4.0.tgz#ed0e54e47f043d2be06e691477f0890383f9dd8a"
+  integrity sha512-OknwtQZddZHi0Ggi+Vr/olJ7HNMx4AzlywyK0W3NZBT7B0stjeZ9lcztA85dBgdAj3KVk8uPJPZSnGaDjELhrA==
+  dependencies:
+    isomorphic-fetch "^2.2.1"
+    qs "^6.9.1"
+
 unbox-primitive@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
@@ -3041,6 +3120,11 @@ webidl-conversions@^4.0.2:
   resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
   integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
 
+whatwg-fetch@>=0.10.0:
+  version "3.6.2"
+  resolved "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
+  integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
+
 whatwg-url@^7.0.0:
   version "7.1.0"
   resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"

Неке датотеке нису приказане због велике количине промена