/*global DingdocsScript*/ import type {} from 'dingtalk-docs-cool-app'; import axios from 'axios'; const BASE_URL = 'https://openapi.julefood.cn:8082/api'; interface UserInfo { userId: string; name?: string; avatar?: string; mobile?: string; jobnumber?: string; department?: number[]; permissions?: string[]; [key: string]: any; } interface LoginResponse { code: number; result: { user_info: string; expiration_time: string; token: string; }; msg: string; } interface ApiParam { paramName: string; paramDesc: string; exampleValue?: string; valueList?: string[]; value?: string; } interface ApiItem { id: string; apiName: string; url: string; description: string; aiTableId: string; aiTablename: string; apiParamAuth: ApiParam[]; } interface ApiResponse { code: number; msg: string; data?: any; } let token: string = ''; let currentUserInfo: UserInfo | null = null; const apiClient = axios.create({ baseURL: BASE_URL, timeout: 30000, headers: { 'Content-Type': 'application/json', }, }); apiClient.interceptors.request.use( (config) => { 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 { const response = await axios.post( `${BASE_URL}/sys_user/ddh5/login`, { code: authCode, app_id: 'dingqo0h82jhq5ewv9ow' }, { timeout: 30000 } ); if (response.data.code === 200) { token = response.data.result.token; const userInfoStr = response.data.result.user_info; try { const parsedUserInfo = JSON.parse(userInfoStr); currentUserInfo = { userId: parsedUserInfo.userid || parsedUserInfo.id || '', name: parsedUserInfo.name || '', avatar: parsedUserInfo.avatar, mobile: parsedUserInfo.mobile, jobnumber: parsedUserInfo.jobnumber, department: parsedUserInfo.department, permissions: parsedUserInfo.permissions, ...parsedUserInfo }; } catch (e) { console.error('解析用户信息失败:', e); currentUserInfo = { userId: '', name: '用户' }; } return currentUserInfo!; } else { throw new Error(response.data.msg || '登录失败'); } } async function getApiList(): Promise { const userId = currentUserInfo?.userId || ''; const response = await apiClient.get('/auth/user/api_asset', { params: { userId } }); const applyList = response.data?.data || []; const uniqueMap = new Map(); applyList.forEach((item: any) => { const apiId = item.apiId; if (!uniqueMap.has(apiId) && item.status !== 2) { uniqueMap.set(apiId, item); } }); return Array.from(uniqueMap.values()); } async function callApi(apiItem: Record): Promise { const params = { ...apiItem }; params.apiParamAuth = params.apiParamAuth.map((p: any) => ({ paramName: p.paramName, value: p.value })); params.userId = currentUserInfo?.userId || ''; const response = await apiClient.post('/ding/add', params); return response.data; } function getDocumentInfo() { try { const base = DingdocsScript.base; const uuid = base.getDentryUuid?.() || base.getDocUuid?.() || base.getUuid?.() || ''; console.log('文档UUID获取结果:', uuid); const sheets = base.getSheets?.() || base.getSheetList?.() || []; console.log('表格列表:', sheets); const activeSheet = base.getActiveSheet?.() || base.getCurrentSheet?.(); const currentSheet = activeSheet?.getName?.() || activeSheet?.name || '无'; console.log('当前表格:', currentSheet); return { uuid: uuid || '未知', sheetsCount: sheets.length, currentSheet }; } catch (error: any) { console.error('获取文档信息失败:', error); return { uuid: '未知', sheetsCount: 0, currentSheet: '无' }; } } DingdocsScript.registerScript('login', login); DingdocsScript.registerScript('getApiList', getApiList); DingdocsScript.registerScript('callApi', callApi); DingdocsScript.registerScript('getDocumentInfo', getDocumentInfo); export {};