Explorar o código

修改用户存储本地功能

zyf hai 1 mes
pai
achega
b32e72366e
Modificáronse 2 ficheiros con 60 adicións e 98 borrados
  1. 49 10
      src/components/App.tsx
  2. 11 88
      src/script/service.ts

+ 49 - 10
src/components/App.tsx

@@ -5,6 +5,31 @@ import { initView } from 'dingtalk-docs-cool-app';
 import { Typography, Button, Card, Select, Input, Spin } from 'dingtalk-design-desktop';
 import './style.css';
 
+const TOKEN_KEY = 'julefood_token';
+const USER_INFO_KEY = 'julefood_user_info';
+
+function saveToken(token: string): void {
+  localStorage.setItem(TOKEN_KEY, token);
+}
+
+function getToken(): string {
+  return localStorage.getItem(TOKEN_KEY) || '';
+}
+
+function saveUserInfo(userInfo: UserInfo): void {
+  localStorage.setItem(USER_INFO_KEY, JSON.stringify(userInfo));
+}
+
+function getUserInfo(): UserInfo | null {
+  const str = localStorage.getItem(USER_INFO_KEY);
+  return str ? JSON.parse(str) : null;
+}
+
+function clearAuth(): void {
+  localStorage.removeItem(TOKEN_KEY);
+  localStorage.removeItem(USER_INFO_KEY);
+}
+
 interface ApiParam {
   paramName: string;
   paramDesc: string;
@@ -54,7 +79,9 @@ function App() {
 
   const loadApiList = useCallback(async () => {
     try {
-      const list = await Dingdocs.script.runWithTimeout('getApiList', 120000);
+      const token = getToken();
+      const userInfo = getUserInfo();
+      const list = await Dingdocs.script.runWithTimeout('getApiList', 120000, token, userInfo?.userId);
       setApiList(list);
     } catch (error: any) {
       console.error('加载 API 列表失败:', error);
@@ -102,11 +129,11 @@ function App() {
       const authResult = await Dingdocs.base.host.getAuthCode(corpId);
       const authCode = authResult.code;
       
-      const user = await Dingdocs.script.runWithTimeout('login', 120000, authCode);
-      setUserInfo(user);
-      
-      const token = await Dingdocs.script.runWithTimeout('getToken', 120000);
-      await handleConfigPermission(token);
+      const result = await Dingdocs.script.runWithTimeout('login', 120000, authCode);
+      setUserInfo(result.userInfo);
+      saveUserInfo(result.userInfo);
+      saveToken(result.token);
+      await handleConfigPermission(result.token);
     } catch (error: any) {
       console.error('自动登录失败:', error);
       setError(error.message || '登录失败');
@@ -154,6 +181,9 @@ function App() {
     setCallLoading(true);
     setResult('');
     
+    const token = getToken();
+    const userInfo = getUserInfo();
+    
     const apiItem = {
       ...currentApi,
       aiTableId: customTableId || currentApi.aiTableId,
@@ -165,7 +195,7 @@ function App() {
     };
     
     try {
-      const response: ApiResponse = await Dingdocs.script.runWithTimeout('callApi', 120000, apiItem);
+      const response: ApiResponse = await Dingdocs.script.runWithTimeout('callApi', 120000, apiItem, token, userInfo?.userId);
       setResult(JSON.stringify(response, null, 2));
     } catch (error: any) {
       setResult(`调用失败: ${error.message}`);
@@ -181,9 +211,18 @@ function App() {
         setError('');
         
         try {
-          await handleAutoLogin();
-          await loadApiList();
-          loadDocumentInfo();
+          const savedToken = getToken();
+          const savedUserInfo = getUserInfo();
+          
+          if (savedToken && savedUserInfo) {
+            setUserInfo(savedUserInfo);
+            await loadApiList();
+            loadDocumentInfo();
+          } else {
+            await handleAutoLogin();
+            await loadApiList();
+            loadDocumentInfo();
+          }
         } catch (error: any) {
           console.error('初始化失败:', error);
           setError(error.message || '初始化失败');

+ 11 - 88
src/script/service.ts

@@ -49,55 +49,6 @@ interface ApiResponse {
   data?: any;
 }
 
-const TOKEN_KEY = 'julefood_token';
-const USER_INFO_KEY = 'julefood_user_info';
-
-function saveToken(token: string): void {
-  localStorage.setItem(TOKEN_KEY, token);
-}
-
-function getToken(): string {
-  return localStorage.getItem(TOKEN_KEY) || '';
-}
-
-function removeToken(): void {
-  localStorage.removeItem(TOKEN_KEY);
-}
-
-function saveUserInfo(userInfo: UserInfo): void {
-  const jsonStr = JSON.stringify(userInfo);
-  console.log('[DEBUG] saveUserInfo - saving:', jsonStr);
-  localStorage.setItem(USER_INFO_KEY, jsonStr);
-  const saved = localStorage.getItem(USER_INFO_KEY);
-  console.log('[DEBUG] saveUserInfo - verified saved:', saved);
-}
-
-function getUserInfo(): UserInfo | null {
-  const str = localStorage.getItem(USER_INFO_KEY);
-  console.log('[DEBUG] getUserInfo - raw value:', str);
-  if (!str) {
-    console.warn('[DEBUG] getUserInfo - localStorage is empty');
-    return null;
-  }
-  try {
-    const result = JSON.parse(str);
-    console.log('[DEBUG] getUserInfo - parsed userId:', result?.userId);
-    return result;
-  } catch (e) {
-    console.error('[DEBUG] getUserInfo - JSON parse failed:', e);
-    return null;
-  }
-}
-
-function removeUserInfo(): void {
-  localStorage.removeItem(USER_INFO_KEY);
-}
-
-function clearAuth(): void {
-  removeToken();
-  removeUserInfo();
-}
-
 const apiClient = axios.create({
   baseURL: BASE_URL,
   timeout: 30000,
@@ -106,28 +57,7 @@ const apiClient = axios.create({
   },
 });
 
-apiClient.interceptors.request.use(
-  (config) => {
-    const token = getToken();
-    if (token) {
-      config.headers['token'] = token;
-    }
-    return config;
-  },
-  (error) => {
-    return Promise.reject(error);
-  }
-);
-
-apiClient.interceptors.response.use(
-  (response) => response,
-  (error) => {
-    console.error('API 请求错误:', error);
-    return Promise.reject(error);
-  }
-);
-
-async function login(authCode: string): Promise<UserInfo> {
+async function login(authCode: string): Promise<{ token: string; userInfo: UserInfo }> {
   const response = await axios.post<LoginResponse>(
     `${BASE_URL}/sys_user/ddh5/login`,
     {
@@ -139,8 +69,6 @@ async function login(authCode: string): Promise<UserInfo> {
   
   if (response.data.code === 200) {
     const token = response.data.result.token;
-    saveToken(token);
-    
     const userInfoStr = response.data.result.user_info;
     let userInfo: UserInfo;
     try {
@@ -159,18 +87,16 @@ async function login(authCode: string): Promise<UserInfo> {
       console.error('解析用户信息失败:', e);
       userInfo = { userId: '', name: '用户' };
     }
-    saveUserInfo(userInfo);
-    return userInfo;
+    return { token, userInfo };
   } else {
     throw new Error(response.data.msg || '登录失败');
   }
 }
 
-async function getApiList(): Promise<ApiItem[]> {
-  const userInfo = getUserInfo();
-  const userId = userInfo?.userId || '';
+async function getApiList(token: string, userId: string): Promise<ApiItem[]> {
   const response = await apiClient.get('/auth/user/api_asset', {
-    params: { userId }
+    params: { userId },
+    headers: { token }
   });
   const applyList = response.data?.data || [];
   
@@ -185,18 +111,17 @@ async function getApiList(): Promise<ApiItem[]> {
   return Array.from(uniqueMap.values());
 }
 
-async function callApi(apiItem: Record<string, any>): Promise<ApiResponse> {
+async function callApi(apiItem: Record<string, any>, token: string, userId: string): Promise<ApiResponse> {
   const params = { ...apiItem };
   params.apiParamAuth = params.apiParamAuth.map((p: any) => ({
     paramName: p.paramName,
     value: p.value
   }));
-  
-  const userInfo = getUserInfo();
-  params.userId = userInfo?.userId || '';
-  console.log('[DEBUG] callApi - userId:', params.userId, 'userInfo:', userInfo);
+  params.userId = userId;
 
-  const response = await apiClient.post('/ding/add', params);
+  const response = await apiClient.post('/ding/add', params, {
+    headers: { token }
+  });
   return response.data;
 }
 
@@ -224,10 +149,8 @@ async function getDocumentInfo() {
 }
 
 DingdocsScript.registerScript('login', login);
-DingdocsScript.registerScript('getToken', getToken);
 DingdocsScript.registerScript('getApiList', getApiList);
 DingdocsScript.registerScript('callApi', callApi);
 DingdocsScript.registerScript('getDocumentInfo', getDocumentInfo);
-DingdocsScript.registerScript('clearAuth', clearAuth);
 
-export {};
+export {};