|
@@ -0,0 +1,87 @@
|
|
|
+
|
|
|
+import { useUserStoreWithOut, UserInterface } from "@/stores/modules/user";
|
|
|
+import { getAuthCode } from "dingtalk-jsapi";
|
|
|
+import { getStoreObject, getStoreString, setStoreObject } from '@/utils/common'
|
|
|
+import reqest from "@/utils/request";
|
|
|
+import { useDictStoreWithOut } from "@/utils/dict";
|
|
|
+
|
|
|
+const USERINFO_KEY: string = '_userInfo';
|
|
|
+const TOKEN_KEY: string = 'ACCESS_TOKEN'
|
|
|
+
|
|
|
+const initUserInfoHandler = async () => {
|
|
|
+ const userStore = useUserStoreWithOut();
|
|
|
+ const userInfoObject = getStoreObject(USERINFO_KEY);
|
|
|
+ if (getStoreString(TOKEN_KEY) && userInfoObject) {
|
|
|
+ userStore.setUser(userInfoObject);
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ try {
|
|
|
+ const code: string = (await getDDAuthCode()) as string;
|
|
|
+ const userIdResult = await getUserIdByDD({ code });
|
|
|
+ if (userIdResult && userIdResult?.data) {
|
|
|
+ setStoreObject(TOKEN_KEY, userIdResult?.data.accessToken);
|
|
|
+ useDictStoreWithOut();
|
|
|
+ const userResult = await getUserInfoById();
|
|
|
+ if (userResult && userResult?.data) {
|
|
|
+ const userInfo: UserInterface = {
|
|
|
+ id: userResult?.data.user.id,
|
|
|
+ avatar: userResult?.data.user.avatar,
|
|
|
+ nickname: userResult?.data.user.nickname,
|
|
|
+ deptId: userResult?.data.user.deptId,
|
|
|
+ deptName: userResult?.data.user.deptName,
|
|
|
+ signatureUrl: userResult?.data.user.signatureUrl,
|
|
|
+ };
|
|
|
+ userStore.setUser(userInfo);
|
|
|
+ setStoreObject(USERINFO_KEY, userInfo);
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } catch (err: any) {
|
|
|
+ console.error("获取用户Error:" + JSON.stringify(err));
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+};
|
|
|
+function getDDAuthCode() {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ getAuthCode({
|
|
|
+ corpId: "ding65143abf9aeea2ec",
|
|
|
+ success: (res: any) => {
|
|
|
+ const { code } = res;
|
|
|
+ if (code) {
|
|
|
+ resolve(code);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fail: (ex: any) => {
|
|
|
+ reject(ex);
|
|
|
+ },
|
|
|
+ complete: () => {},
|
|
|
+ });
|
|
|
+ });
|
|
|
+}
|
|
|
+interface UserIdParam {
|
|
|
+ code: string;
|
|
|
+}
|
|
|
+const getUserIdByDD = async (data: Required<UserIdParam>) => {
|
|
|
+ return reqest.post(
|
|
|
+ `/app-api/system/auth/login-ding?code=${data.code}`,
|
|
|
+ null,
|
|
|
+ {
|
|
|
+ headers: {
|
|
|
+ isAuth: false,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ );
|
|
|
+};
|
|
|
+//@ts-ignore
|
|
|
+const getUserInfoById = async () => {
|
|
|
+ return reqest.get("/admin-api/system/auth/get-permission-info");
|
|
|
+};
|
|
|
+export const getUserInfoPromise = () => {
|
|
|
+ return new Promise(async (resolve, reject) => {
|
|
|
+ resolve(await initUserInfoHandler());
|
|
|
+ })
|
|
|
+}
|