| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /*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<UserInfo> {
- const response = await axios.post<LoginResponse>(
- `${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<ApiItem[]> {
- 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<string, any>): Promise<ApiResponse> {
- 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;
- }
- async function getDocumentInfo() {
- try {
- const base = DingdocsScript.base;
-
- const uuid = (base as any).getDentryUuid?.() || (base as any).getDocUuid?.() || (base as any).getUuid?.() || '';
- const sheets = (base as any).getSheets?.() || (base as any).getSheetList?.() || [];
- const activeSheet = (base as any).getActiveSheet?.() || (base as any).getCurrentSheet?.();
- const currentSheet = (activeSheet as any)?.getName?.() || (activeSheet as any)?.name || '';
-
- return {
- uuid: uuid || '',
- sheetsCount: sheets.length,
- currentSheet
- };
- } catch (error: any) {
- return {
- uuid: '',
- sheetsCount: 0,
- currentSheet: ''
- };
- }
- }
- function getToken(): string {
- return token;
- }
- DingdocsScript.registerScript('login', login);
- DingdocsScript.registerScript('getToken', getToken);
- DingdocsScript.registerScript('getApiList', getApiList);
- DingdocsScript.registerScript('callApi', callApi);
- DingdocsScript.registerScript('getDocumentInfo', getDocumentInfo);
- export {};
|