Browse Source

Merge branch 'iteration-login'

lex 1 year ago
parent
commit
335c8bb8b5

+ 22 - 0
src/api/user.ts

@@ -0,0 +1,22 @@
+import request from '@/utils/request';
+
+/**
+ * 用户登录
+ * @param prams 登录参数
+ */
+export const userLogin = (params: any) => {
+  return request.post('/api-auth/usernameLogin', {
+    requestType: 'form',
+    data: params
+  });
+};
+
+/**
+ * 获取用户信息
+ * returns user
+ */
+export const getUserInfo = () => {
+  return request.get('/api-app/user/getUserInfo', {
+    requestType: 'form'
+  });
+};

+ 0 - 1
src/components/layout/index.tsx

@@ -16,7 +16,6 @@ export default defineComponent({
     const showModalTone = ref(false);
     const showModalTime = ref(false);
     const initMoveable = async () => {
-      console.log(document.querySelector('.wrap'));
       if (document.querySelector('.wrap')) {
         const moveable = new Moveable(document.querySelector('.wrap') as any, {
           target: document.querySelector('#moveNPopover') as any,

+ 1 - 2
src/main.ts

@@ -6,7 +6,6 @@ import { setupNaive } from './plugins';
 import { setupStore } from './store';
 import 'dayjs/locale/zh-cn';
 import './styles/index.less';
-import { useLoadingBar } from 'naive-ui';
 
 async function setupApp() {
   // app loading
@@ -25,7 +24,7 @@ async function setupApp() {
 
   dayjs.locale('zh-ch');
 
-  app.use(router);
+  // app.use(router);
 
   await router.isReady();
 

+ 20 - 29
src/store/modules/users.ts

@@ -1,6 +1,8 @@
 import { defineStore } from 'pinia';
+import { store } from '@/store';
 import { ACCESS_TOKEN, CURRENT_USER, IM_TOKEN } from '@/store/mutation-types';
 import { storage } from '@/utils/storage';
+import { userLogin, getUserInfo } from '@/api/user';
 
 export interface IUserState {
   token: string;
@@ -51,31 +53,17 @@ export const useUserStore = defineStore('user-store', {
     // 登录
     async login(userInfo: any) {
       try {
-        if (userInfo.username !== 'admin' || userInfo.password !== '123456') {
-          return Promise.reject({ msg: '用户名或密码错误' });
-        }
-        // const response = (await login(userInfo)) as any;
-        // const { data, code } = response;
-        // if (code === ResultEnum.SUCCESS) {
+        const { data } = await userLogin(userInfo);
+        const userToken =
+          data.authentication.token_type +
+          ' ' +
+          data.authentication.access_token;
         const ex = 7 * 24 * 60 * 60 * 1000;
-        storage.set(ACCESS_TOKEN, 'bearer test1121121212121212', ex);
-        storage.set(
-          CURRENT_USER,
-          {
-            name: '王天奇',
-            avatar: ''
-          },
-          ex
-        );
-        //   this.setToken(data.token_type + ' ' + data.access_token);
-        //   this.setImToken(data.imToken);
-        //   this.setUserInfo(data);
-        // }
-        this.setToken('bearer test1121121212121212');
-        this.setUserInfo({
-          name: '王天奇',
-          avatar: ''
-        });
+        storage.set(ACCESS_TOKEN, userToken, ex);
+        // storage.get(IM_TOKEN, data.imToken);
+
+        this.setToken(userToken);
+        // this.setImToken(data.imToken);
         return Promise.resolve();
       } catch (e) {
         return Promise.reject(e);
@@ -83,10 +71,9 @@ export const useUserStore = defineStore('user-store', {
     },
 
     // 获取用户信息
-    getInfo() {
+    async getInfo() {
       // const that = this;
       return new Promise((resolve, reject) => {
-        // getUserInfo()
         //   .then(res => {
         //     const result = res.data;
         //     this..setUserInfo(result);
@@ -97,6 +84,9 @@ export const useUserStore = defineStore('user-store', {
         //     reject(error);
         //   });
         try {
+          // getUserInfo().then((res: any) => {
+          //   console.log(res, 'res');
+          // });
           resolve(true);
         } catch {
           reject();
@@ -108,12 +98,13 @@ export const useUserStore = defineStore('user-store', {
     async logout() {
       this.setUserInfo('');
       storage.remove(ACCESS_TOKEN);
+      storage.remove(CURRENT_USER);
       return Promise.resolve('');
     }
   }
 });
 
 // Need to be used outside the setup
-// export function useUserStoreWidthOut() {
-//   return useUserStore(store);
-// }
+export function useUserStoreWidthOut() {
+  return useUserStore(store);
+}

+ 1 - 0
src/types.d.ts

@@ -3,5 +3,6 @@ export {};
 declare global {
   interface Window {
     $loadingBar: any;
+    $message: any;
   }
 }

+ 96 - 0
src/utils/request.ts

@@ -0,0 +1,96 @@
+import { extend } from 'umi-request';
+import cleanDeep from 'clean-deep';
+import { useUserStore } from '../store/modules/users';
+import router from '@/router';
+
+export interface SearchInitParams {
+  rows?: string | number;
+  page?: string | number;
+}
+
+const request = extend({
+  // requestType: 'form',
+  hideLoading: true, // 默认都不显示加载
+  timeout: 20000,
+  timeoutMessage: '请求超时'
+});
+
+request.interceptors.request.use(
+  (url, options: any) => {
+    if (!options.hideLoading) {
+      window.$message.loading('加载中...');
+    }
+
+    const userStore = useUserStore();
+    const Authorization = userStore.getToken || '';
+    const authHeaders: any = {};
+    if (
+      Authorization &&
+      !['/api-oauth/userlogin', '/api-auth/open/sendSms'].includes(url)
+    ) {
+      authHeaders.Authorization = Authorization;
+    }
+
+    return {
+      url,
+      options: {
+        ...options,
+        params: cleanDeep(options.params),
+        data: cleanDeep(options.data),
+        headers: {
+          ...options.headers,
+          ...authHeaders
+        }
+      }
+    };
+  },
+  { global: false }
+);
+
+request.interceptors.response.use(
+  async (res: any) => {
+    const userStore = useUserStore();
+    if (res.status > 299 || res.status < 200) {
+      const msg = '服务器错误,状态码' + res.status;
+      window.$message.error(msg);
+      throw new Error(msg);
+    }
+    const data = await res.clone().json();
+    if (
+      data.code === 401 ||
+      data.code === 4001 ||
+      data.code == 403 ||
+      data.code == 5000
+    ) {
+      userStore.logout(); // 删除登录 - 清除缓存
+      router.replace('/login');
+      location.reload();
+      return;
+    }
+    // if (
+    //   (((data.code < 200 && data.code != 100) ||
+    //     (data.code >= 300 && data.code != 100)) &&
+    //     data.code != 0 &&
+    //     data.code == 5200) ||
+    //   data.code == 5400 ||
+    //   (data.code >= 5000 && data.code < 6000) ||
+    //   data.code == -1
+    // ) {
+    //   const str = res.message || `请求失败code码为${data.code}`;
+    //   window.$message.error(str);
+    //   throw new Error(str);
+    // }
+
+    if (data.code !== 200 && data.errCode !== 0) {
+      const msg = data.msg || data.message || '处理失败,请重试';
+      if (!(data.code === 403 || data.code === 401)) {
+        window.$message.error(msg);
+      }
+      throw new Error(msg);
+    }
+    return res;
+  },
+  { global: false }
+);
+
+export default request;

+ 18 - 16
src/views/login/components/pwdLogin.tsx

@@ -20,15 +20,17 @@ import { useUserStore } from '/src/store/modules/users';
 interface FormState {
   username: string;
   password: string;
-  grant_type: string;
-  loginType: string;
-  client_id: string;
-  client_secret: string;
+  grant_type?: string;
+  loginType?: string;
+  client_id?: string;
+  client_secret?: string;
+  clientId?: string;
+  clientSecret?: string;
 }
 
 export default defineComponent({
   name: 'codeLogin',
-  setup(props, { emit }) {
+  setup() {
     const router = useRouter();
     const route = useRoute();
     const formRef = ref();
@@ -39,8 +41,8 @@ export default defineComponent({
     const showPwd = ref(false);
     const userStore = useUserStore();
     const formInline = reactive({
-      username: 'admin',
-      password: '123456',
+      username: '13810952948',
+      password: 'klx2948',
       isCaptcha: true
     });
 
@@ -48,16 +50,18 @@ export default defineComponent({
       formRef.value.validate(async (errors: any) => {
         if (!errors) {
           const { username, password } = formInline;
-          message.loading('登录中...');
+          // message.loading('登录中...');
           loading.value = true;
 
           const params: FormState = {
             username,
             password,
-            loginType: 'password',
-            grant_type: 'password',
-            client_id: 'jmedu-backend',
-            client_secret: 'jmedu-backend'
+            // loginType: 'password',
+            // grant_type: 'password',
+            // client_id: 'teacher',
+            // client_secret: 'teacher'
+            clientId: 'teacher',
+            clientSecret: 'teacher'
           };
 
           try {
@@ -83,10 +87,7 @@ export default defineComponent({
             //   // message.info(some.msg || "登录失败");
             // }
           } catch (e: any) {
-            message.destroyAll();
-            loading.value = false;
-            message.error(e.msg);
-            console.log(e);
+            console.log(e, 'e');
           } finally {
             loading.value = false;
           }
@@ -167,6 +168,7 @@ export default defineComponent({
               onClick={handleSubmit}
               size="large"
               disabled={loading.value}
+              loading={loading.value}
               block>
               立即登录
             </NButton>

+ 8 - 7
vite.config.ts

@@ -12,6 +12,7 @@ function resolve(dir: string) {
 }
 // https://vitejs.dev/config/
 // https://github.com/vitejs/vite/issues/1930 .env
+const proxyUrl = 'https://dev.colexiu.com/';
 export default defineConfig({
   base: './',
   plugins: [
@@ -37,12 +38,12 @@ export default defineConfig({
     port: 5002,
     strictPort: true,
     cors: true,
-    https: false
-    // proxy: {
-    //   '/api-oauth': {
-    //     target: proxyUrl,
-    //     changeOrigin: true
-    //   }
-    // }
+    https: false,
+    proxy: {
+      '/api-auth': {
+        target: proxyUrl,
+        changeOrigin: true
+      }
+    }
   }
 });