浏览代码

更新粤政易登录

libushang 6 月之前
父节点
当前提交
e7d830fd03
共有 8 个文件被更改,包括 111 次插入5 次删除
  1. 12 1
      src/api/login.ts
  2. 1 1
      src/permission.ts
  3. 10 0
      src/router/index.ts
  4. 18 1
      src/store/modules/user.ts
  5. 36 1
      src/types/components.d.ts
  6. 1 1
      src/views/login.vue
  7. 3 0
      src/views/noyzyuser.vue
  8. 30 0
      src/views/yzylogin.vue

+ 12 - 1
src/api/login.ts

@@ -50,7 +50,7 @@ export function register(data: any) {
 /**
  * 注销
  */
-export function logout() {
+export function logout(): AxiosPromise<any> {
   return request({
     url: '/api/auth/logout',
     method: 'post'
@@ -105,3 +105,14 @@ export function getTenantList(): AxiosPromise<TenantInfo> {
     method: 'get'
   });
 }
+
+
+export function yzyLogin(code) {
+  return request({
+    url: '/api/auth/yzylogin',
+    method: 'post',
+    data: {
+      code
+    }
+  });
+}

+ 1 - 1
src/permission.ts

@@ -10,7 +10,7 @@ import useSettingsStore from '@/store/modules/settings';
 import usePermissionStore from '@/store/modules/permission';
 
 NProgress.configure({ showSpinner: false });
-const whiteList = ['/login', '/register', '/social-callback'];
+const whiteList = ['/login', '/yzylogin', '/register', '/social-callback'];
 
 router.beforeEach(async (to, from, next) => {
   NProgress.start();

+ 10 - 0
src/router/index.ts

@@ -47,6 +47,16 @@ export const constantRoutes: RouteRecordRaw[] = [
     component: () => import('@/views/login.vue'),
     hidden: true
   },
+  {
+    path: '/yzylogin',
+    component: () => import('@/views/yzylogin.vue'),
+    hidden: true
+  },
+  {
+    path: '/noyzyuser',
+    component: () => import('@/views/noyzyuser.vue'),
+    hidden: true
+  },
   {
     path: '/register',
     component: () => import('@/views/register.vue'),

+ 18 - 1
src/store/modules/user.ts

@@ -1,6 +1,6 @@
 import { to } from 'await-to-js';
 import { getToken, removeToken, setToken } from '@/utils/auth';
-import { login as loginApi, logout as logoutApi, getInfo as getUserInfo } from '@/api/login';
+import { login as loginApi, logout as logoutApi, getInfo as getUserInfo, yzyLogin as yzyLoginApi } from '@/api/login';
 import { LoginData } from '@/api/types';
 import defAva from '@/assets/images/profile.jpg';
 import store from '@/store';
@@ -31,6 +31,22 @@ export const useUserStore = defineStore('user', () => {
     return Promise.reject(err);
   };
 
+  /**
+   * 粤政易登录
+   * @param userInfo
+   * @returns
+   */
+  const yzyLogin = async (code: string): Promise<void> => {
+    const [err, res] = await to(yzyLoginApi(code));
+    if (res) {
+      const data = res.data;
+      setToken(data.access_token);
+      token.value = data.access_token;
+      return Promise.resolve();
+    }
+    return Promise.reject(err);
+  };
+
   // 获取用户信息
   const getInfo = async (): Promise<void> => {
     const [err, res] = await to(getUserInfo());
@@ -78,6 +94,7 @@ export const useUserStore = defineStore('user', () => {
     roles,
     permissions,
     login,
+    yzyLogin,
     getInfo,
     logout,
     setAvatar

+ 36 - 1
src/types/components.d.ts

@@ -19,14 +19,23 @@ declare module 'vue' {
     Dialog: typeof import('./../components/Dialog/index.vue')['default']
     DictTag: typeof import('./../components/DictTag/index.vue')['default']
     Editor: typeof import('./../components/Editor/index.vue')['default']
+    ElAnchor: typeof import('element-plus/es')['ElAnchor']
+    ElAnchorLink: typeof import('element-plus/es')['ElAnchorLink']
     ElAutocomplete: typeof import('element-plus/es')['ElAutocomplete']
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElButton: typeof import('element-plus/es')['ElButton']
+    ElCard: typeof import('element-plus/es')['ElCard']
+    ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
+    ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
     ElCol: typeof import('element-plus/es')['ElCol']
+    ElCollapse: typeof import('element-plus/es')['ElCollapse']
+    ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
     ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
-    ElColumn: typeof import('element-plus/es')['ElColumn']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
+    ElContainer: typeof import('element-plus/es')['ElContainer']
     ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
+    ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
+    ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
     ElDialog: typeof import('element-plus/es')['ElDialog']
     ElDivider: typeof import('element-plus/es')['ElDivider']
     ElDrawer: typeof import('element-plus/es')['ElDrawer']
@@ -36,22 +45,45 @@ declare module 'vue' {
     ElEmpty: typeof import('element-plus/es')['ElEmpty']
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
+    ElHeader: typeof import('element-plus/es')['ElHeader']
     ElIcon: typeof import('element-plus/es')['ElIcon']
+    ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
+    ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
+    ElLink: typeof import('element-plus/es')['ElLink']
+    ElMain: typeof import('element-plus/es')['ElMain']
     ElMenu: typeof import('element-plus/es')['ElMenu']
     ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
+    ElOption: typeof import('element-plus/es')['ElOption']
     ElPagination: typeof import('element-plus/es')['ElPagination']
     ElPopover: typeof import('element-plus/es')['ElPopover']
     ElRadio: typeof import('element-plus/es')['ElRadio']
+    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
     ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
+    ElSegmented: typeof import('element-plus/es')['ElSegmented']
+    ElSelect: typeof import('element-plus/es')['ElSelect']
+    ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
+    ElSkeletonItem: typeof import('element-plus/es')['ElSkeletonItem']
+    ElSlider: typeof import('element-plus/es')['ElSlider']
+    ElSpace: typeof import('element-plus/es')['ElSpace']
+    ElStep: typeof import('element-plus/es')['ElStep']
+    ElSteps: typeof import('element-plus/es')['ElSteps']
     ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
     ElSwitch: typeof import('element-plus/es')['ElSwitch']
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
+    ElTabPane: typeof import('element-plus/es')['ElTabPane']
+    ElTabs: typeof import('element-plus/es')['ElTabs']
+    ElTag: typeof import('element-plus/es')['ElTag']
     ElText: typeof import('element-plus/es')['ElText']
+    ElTimeline: typeof import('element-plus/es')['ElTimeline']
+    ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
+    ElTree: typeof import('element-plus/es')['ElTree']
+    ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
+    ElUpload: typeof import('element-plus/es')['ElUpload']
     ExcelEditor: typeof import('./../components/ExcelEditor/index.vue')['default']
     FileUpload: typeof import('./../components/FileUpload/index.vue')['default']
     FooterSection: typeof import('./../components/FooterSection/index.vue')['default']
@@ -62,6 +94,9 @@ declare module 'vue' {
     HikvisionPlayer: typeof import('./../components/HKVideo/hikvision-player.vue')['default']
     HKVideo: typeof import('./../components/HKVideo/index.vue')['default']
     IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
+    IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
+    IEpCaretTop: typeof import('~icons/ep/caret-top')['default']
+    IEpUploadFilled: typeof import('~icons/ep/upload-filled')['default']
     IFrame: typeof import('./../components/iFrame/index.vue')['default']
     ImagePreview: typeof import('./../components/ImagePreview/index.vue')['default']
     ImageUpload: typeof import('./../components/ImageUpload/index.vue')['default']

+ 1 - 1
src/views/login.vue

@@ -209,7 +209,7 @@ const handleTab = (tab) => {
   if(tab == 1) {
     // const redirect_uri = encodeURIComponent(import.meta.env.YZY_REDIRECT_URI);
     // const tyrz_url = import.meta.env.YZY_TYRZ_URL + redirect_uri;
-    const redirect_uri = encodeURIComponent("http://19.155.220.206:8086/tyrz/login");
+    const redirect_uri = encodeURIComponent("http://19.155.220.206:8086/tyrz/login?redirect="+redirect.value);
     const tyrz_url = "https://xtbg.digitalgd.com.cn/zwrz/rz/sso/oauth/authorize?response_type=code&scope=all&client_id=zwrz_mmzhyj&redirect_uri="+redirect_uri;
     window.location.href = tyrz_url;
   }

+ 3 - 0
src/views/noyzyuser.vue

@@ -0,0 +1,3 @@
+<template>
+    当前粤政易账号没有匹配到系统用户
+    </template>

+ 30 - 0
src/views/yzylogin.vue

@@ -0,0 +1,30 @@
+<template>
+粤政易登录中...
+</template>
+
+<script setup lang="ts">
+import { useUserStore } from '@/store/modules/user';
+import { to } from 'await-to-js';
+
+const route = useRoute();
+const router = useRouter();
+const userStore = useUserStore();
+const code = ref('');
+const loading = ref(true);
+const redirect = ref(undefined);
+
+onMounted(async() => {
+    code.value = route.query && route.query.code as string;
+    redirect.value = route.query && route.query.redirect;
+
+    loading.value = true;
+    const [err] = await to(userStore.yzyLogin(code.value));
+      if (!err) {
+        const redirectUrl = redirect.value || '/';
+        await router.push(redirectUrl);
+        loading.value = false;
+      } else {
+        loading.value = false;
+      }
+})
+</script>