@cgboiler/core 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,3 @@
1
- 'use strict';var o=require('localforage');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var o__default=/*#__PURE__*/_interopDefault(o);o__default.default.config({name:"cgx",storeName:"cgx_store",driver:[o__default.default.INDEXEDDB,o__default.default.LOCALSTORAGE]});var s=async(r,t)=>{try{await o__default.default.setItem(r,t);}catch(e){console.error("Error saving data:",e);}},g=async r=>{try{return await o__default.default.getItem(r)}catch(t){return console.error("Error getting data:",t),null}},m=async r=>{try{await o__default.default.removeItem(r);}catch(t){console.error("Error removing data:",t);}},S=async()=>{try{await o__default.default.clear();}catch(r){console.error("Error clearing data:",r);}};var n="user_info",T=async r=>{await s(n,r);},u=async r=>{let t=await p();await s(n,{...t,token:r});},l=async()=>(await g(n))?.token,p=async()=>await g(n)||{},P=async r=>{let t=await p();await s(n,{...t,...r});},E=async()=>{await m(n);};var F=async(r,t={})=>{let{params:e,...c}=t,a=e?"?"+Object.entries(e).map(([I,w])=>`${I}=${encodeURIComponent(String(w))}`).join("&"):"",f=r+a,h=await l(),i=await fetch(f,{...c,headers:{"Content-Type":"application/json",token:h||"",...c.headers}});if(!i.ok)throw new Error(`HTTP error! status: ${i.status}`);return await i.json()};var y=()=>{let t=new URLSearchParams(window.location.search).get("token");if(console.log("tokenFromSearch: ",t),t)return t;let e=window.location.hash;if(e){let a=(e.startsWith("#")?e.substring(1):e).match(/\?(.*)/);if(a&&a[1])return new URLSearchParams(a[1]).get("token")}return null},O=async()=>{let r=y();r&&await u(r);};exports.clearStorage=S;exports.clearUserInfo=E;exports.getStorage=g;exports.getUserInfo=p;exports.getUserToken=l;exports.initApp=O;exports.initUserInfo=T;exports.removeStorage=m;exports.setStorage=s;exports.setUserToken=u;exports.updateUserInfo=P;exports.useFetch=F;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var n=require('localforage');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var n__default=/*#__PURE__*/_interopDefault(n);n__default.default.config({name:"cgx",storeName:"cgx_store",driver:[n__default.default.INDEXEDDB,n__default.default.LOCALSTORAGE]});var o=async(t,r)=>{try{await n__default.default.setItem(t,r);}catch(e){console.error("Error saving data:",e);}},i=async t=>{try{return await n__default.default.getItem(t)}catch(r){return console.error("Error getting data:",r),null}},m=async t=>{try{await n__default.default.removeItem(t);}catch(r){console.error("Error removing data:",r);}},v=async()=>{try{await n__default.default.clear();}catch(t){console.error("Error clearing data:",t);}};var c="user_info",C=async t=>{await o(c,t);},A=async t=>{let r=await d();await o(c,{...r,token:t});},l=async()=>(await i(c))?.token,d=async()=>await i(c)||{},h=async t=>{let r=await d();await o(c,{...r,...t});},O=async()=>{await m(c);};var u=async(t,r={})=>{let{params:e,...s}=r,a=e?"?"+Object.entries(e).map(([S,x])=>`${S}=${encodeURIComponent(String(x))}`).join("&"):"",g=t+a,f=await l(),p=await fetch(g,{...s,headers:{"Content-Type":"application/json",token:f||"",...s.headers}});if(!p.ok)throw new Error(`HTTP error! status: ${p.status}`);return await p.json()};var U=t=>{let e=new URLSearchParams(window.location.search).get(t);if(e)return e;let s=window.location.hash;if(s){let g=(s.startsWith("#")?s.substring(1):s).match(/\?(.*)/);if(g&&g[1])return new URLSearchParams(g[1]).get(t)}return null},j=async()=>{let t=U("token"),r=U("user_id");(t||r)&&await h({...t&&{token:t},...r&&{userId:r}});};var y="https://wflow.cgboiler.com/v1",w="userListCache",I="userListVersionCache",R=t=>u(`${y}/oa/org/depts/users`,{params:{onlyVersion:t}}),E=()=>u(`${y}/oa/org/depts/users`),L=async()=>{let t=await i(w),r=await i(I),s=(await R(true)).version;if(t&&r===s)return t;{let a=await E();return await o(w,a.data),await o(I,a.version),a.data}},B=async t=>(await L()).find(e=>e.id===t);
2
+ exports.clearStorage=v;exports.clearUserInfo=O;exports.fetchAllUser=E;exports.fetchUserVersion=R;exports.getStorage=i;exports.getUserById=B;exports.getUserInfo=d;exports.getUserList=L;exports.getUserToken=l;exports.initApp=j;exports.initUserInfo=C;exports.removeStorage=m;exports.setStorage=o;exports.setUserToken=A;exports.updateUserInfo=h;exports.useFetch=u;//# sourceMappingURL=index.cjs.map
2
3
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/storage.ts","../src/utils/user.ts","../src/utils/fetch.ts","../src/utils/initApp.ts"],"names":["localforage","setStorage","key","value","error","getStorage","removeStorage","clearStorage","USER_INFO_KEY","initUserInfo","info","setUserToken","token","userInfo","getUserInfo","getUserToken","updateUserInfo","currentInfo","clearUserInfo","useFetch","url","config","params","restConfig","queryString","finalUrl","response","getTokenFromUrl","tokenFromSearch","hash","queryStringMatch","initApp","urlToken"],"mappings":"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","file":"index.cjs","sourcesContent":["import localforage from 'localforage';\n\n// 配置localforage\nlocalforage.config({\n name: 'cgx',\n storeName: 'cgx_store',\n driver: [\n localforage.INDEXEDDB,\n localforage.LOCALSTORAGE,\n ],\n});\n\n// 存储数据\nexport const setStorage = async (key: string, value: any) => {\n try {\n await localforage.setItem(key, value);\n } catch (error) {\n console.error('Error saving data:', error);\n }\n};\n\n// 获取数据\nexport const getStorage = async <T>(key: string): Promise<T | null> => {\n try {\n const value = await localforage.getItem<T>(key);\n return value;\n } catch (error) {\n console.error('Error getting data:', error);\n return null;\n }\n};\n\n// 删除数据\nexport const removeStorage = async (key: string) => {\n try {\n await localforage.removeItem(key);\n } catch (error) {\n console.error('Error removing data:', error);\n }\n};\n\n// 清空所有数据\nexport const clearStorage = async () => {\n try {\n await localforage.clear();\n } catch (error) {\n console.error('Error clearing data:', error);\n }\n};","/**\n * 用户信息管理模块\n */\nimport { getStorage, setStorage, removeStorage } from './storage';\n\ninterface UserInfo {\n token?: string;\n [key: string]: any;\n}\n\nconst USER_INFO_KEY = 'user_info';\n\n/**\n * 初始化用户信息\n * @param info 用户信息对象\n */\nexport const initUserInfo = async (info: UserInfo) => {\n await setStorage(USER_INFO_KEY, info);\n};\n\n/**\n * 设置用户token\n * @param token 用户token\n */\nexport const setUserToken = async (token: string) => {\n const userInfo = await getUserInfo();\n await setStorage(USER_INFO_KEY, { ...userInfo, token });\n};\n\n/**\n * 获取用户token\n * @returns 用户token\n */\nexport const getUserToken = async (): Promise<string | undefined> => {\n const userInfo = await getStorage<UserInfo>(USER_INFO_KEY);\n return userInfo?.token;\n};\n\n/**\n * 获取用户信息\n * @returns 用户信息对象\n */\nexport const getUserInfo = async (): Promise<UserInfo> => {\n const userInfo = await getStorage<UserInfo>(USER_INFO_KEY);\n return userInfo || {};\n};\n\n/**\n * 更新用户信息\n * @param info 要更新的用户信息字段\n */\nexport const updateUserInfo = async (info: Partial<UserInfo>) => {\n const currentInfo = await getUserInfo();\n await setStorage(USER_INFO_KEY, { ...currentInfo, ...info });\n};\n\n/**\n * 清除用户信息\n */\nexport const clearUserInfo = async () => {\n await removeStorage(USER_INFO_KEY);\n};","import { getUserToken } from './user';\n\ninterface FetchConfig extends RequestInit {\n params?: Record<string, any>;\n}\n\nexport const useFetch = async <T>(url: string, config: FetchConfig = {}) => {\n const { params, ...restConfig } = config;\n\n // 处理查询参数\n const queryString = params\n ? '?' +\n Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)\n .join('&')\n : '';\n\n const finalUrl = url + queryString;\n\n // 从 user.ts 获取 token\n const token = await getUserToken();\n\n // 发送请求\n const response = await fetch(finalUrl, {\n ...restConfig,\n headers: {\n 'Content-Type': 'application/json',\n token: token || '',\n ...restConfig.headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n return data as T;\n};\n","import { getUserInfo, setUserToken } from './user';\n\nexport interface UserInfo {\n // 用户信息接口\n token: string;\n}\n\n// 从URL中获取token参数\nconst getTokenFromUrl = (): string | null => {\n const urlParamsSearch = new URLSearchParams(window.location.search);\n const tokenFromSearch = urlParamsSearch.get('token');\n\n console.log('tokenFromSearch: ', tokenFromSearch);\n if (tokenFromSearch) {\n return tokenFromSearch;\n }\n\n // Check hash fragment\n const hash = window.location.hash;\n if (hash) {\n // Remove the leading # if present\n const hashContent = hash.startsWith('#') ? hash.substring(1) : hash;\n // Check if the hash content contains a query string part\n const queryStringMatch = hashContent.match(/\\?(.*)/);\n if (queryStringMatch && queryStringMatch[1]) {\n const urlParamsHash = new URLSearchParams(queryStringMatch[1]);\n return urlParamsHash.get('token');\n }\n }\n\n return null;\n};\n\n// 初始化应用\nexport const initApp = async () => {\n // 从URL中获取token参数并更新用户信息\n const urlToken = getTokenFromUrl();\n if (urlToken) {\n await setUserToken(urlToken);\n }\n};\n"]}
1
+ {"version":3,"sources":["../src/utils/storage.ts","../src/utils/user.ts","../src/utils/fetch.ts","../src/utils/initApp.ts","../src/utils/userList.ts"],"names":["localforage","setStorage","key","value","error","getStorage","removeStorage","clearStorage","USER_INFO_KEY","initUserInfo","info","setUserToken","token","userInfo","getUserInfo","getUserToken","updateUserInfo","currentInfo","clearUserInfo","useFetch","url","config","params","restConfig","queryString","finalUrl","response","getUrlParam","paramName","paramFromSearch","hash","queryStringMatch","initApp","userId","BASE_URL","USER_LIST_STORAGE_KEY","USER_LIST_VERSION_STORAGE_KEY","fetchUserVersion","onlyVersion","fetchAllUser","getUserList","cachedUserList","cachedVersion","latestVersion","userListResponse","getUserById","user"],"mappings":"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","file":"index.cjs","sourcesContent":["import localforage from 'localforage';\n\n// 配置localforage\nlocalforage.config({\n name: 'cgx',\n storeName: 'cgx_store',\n driver: [\n localforage.INDEXEDDB,\n localforage.LOCALSTORAGE,\n ],\n});\n\n// 存储数据\nexport const setStorage = async (key: string, value: any) => {\n try {\n await localforage.setItem(key, value);\n } catch (error) {\n console.error('Error saving data:', error);\n }\n};\n\n// 获取数据\nexport const getStorage = async <T>(key: string): Promise<T | null> => {\n try {\n const value = await localforage.getItem<T>(key);\n return value;\n } catch (error) {\n console.error('Error getting data:', error);\n return null;\n }\n};\n\n// 删除数据\nexport const removeStorage = async (key: string) => {\n try {\n await localforage.removeItem(key);\n } catch (error) {\n console.error('Error removing data:', error);\n }\n};\n\n// 清空所有数据\nexport const clearStorage = async () => {\n try {\n await localforage.clear();\n } catch (error) {\n console.error('Error clearing data:', error);\n }\n};","/**\n * 用户信息管理模块\n */\nimport { getStorage, setStorage, removeStorage } from './storage';\n\nexport interface UserInfo {\n token?: string;\n userId?: string;\n [key: string]: any;\n}\n\nconst USER_INFO_KEY = 'user_info';\n\n/**\n * 初始化用户信息\n * @param info 用户信息对象\n */\nexport const initUserInfo = async (info: UserInfo) => {\n await setStorage(USER_INFO_KEY, info);\n};\n\n/**\n * 设置用户token\n * @param token 用户token\n */\nexport const setUserToken = async (token: string) => {\n const userInfo = await getUserInfo();\n await setStorage(USER_INFO_KEY, { ...userInfo, token });\n};\n\n/**\n * 获取用户token\n * @returns 用户token\n */\nexport const getUserToken = async (): Promise<string | undefined> => {\n const userInfo = await getStorage<UserInfo>(USER_INFO_KEY);\n return userInfo?.token;\n};\n\n/**\n * 获取用户信息\n * @returns 用户信息对象\n */\nexport const getUserInfo = async (): Promise<UserInfo> => {\n const userInfo = await getStorage<UserInfo>(USER_INFO_KEY);\n return userInfo || {};\n};\n\n/**\n * 更新用户信息\n * @param info 要更新的用户信息字段\n */\nexport const updateUserInfo = async (info: Partial<UserInfo>) => {\n const currentInfo = await getUserInfo();\n await setStorage(USER_INFO_KEY, { ...currentInfo, ...info });\n};\n\n/**\n * 清除用户信息\n */\nexport const clearUserInfo = async () => {\n await removeStorage(USER_INFO_KEY);\n};","import { getUserToken } from './user';\n\ninterface FetchConfig extends RequestInit {\n params?: Record<string, any>;\n}\n\nexport const useFetch = async <T>(url: string, config: FetchConfig = {}) => {\n const { params, ...restConfig } = config;\n\n // 处理查询参数\n const queryString = params\n ? '?' +\n Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)\n .join('&')\n : '';\n\n const finalUrl = url + queryString;\n\n // 从 user.ts 获取 token\n const token = await getUserToken();\n\n // 发送请求\n const response = await fetch(finalUrl, {\n ...restConfig,\n headers: {\n 'Content-Type': 'application/json',\n token: token || '',\n ...restConfig.headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n return data as T;\n};\n","import { updateUserInfo } from './user';\n\n// 从URL中获取指定参数\nconst getUrlParam = (paramName: string): string | null => {\n // 检查search参数\n const urlParamsSearch = new URLSearchParams(window.location.search);\n const paramFromSearch = urlParamsSearch.get(paramName);\n if (paramFromSearch) {\n return paramFromSearch;\n }\n\n // 检查hash片段\n const hash = window.location.hash;\n if (hash) {\n const hashContent = hash.startsWith('#') ? hash.substring(1) : hash;\n const queryStringMatch = hashContent.match(/\\?(.*)/);\n if (queryStringMatch && queryStringMatch[1]) {\n const urlParamsHash = new URLSearchParams(queryStringMatch[1]);\n return urlParamsHash.get(paramName);\n }\n }\n\n return null;\n};\n\n// 初始化应用\nexport const initApp = async () => {\n const token = getUrlParam('token');\n const userId = getUrlParam('user_id');\n \n if (token || userId) {\n await updateUserInfo({ \n ...(token && { token }),\n ...(userId && { userId })\n });\n }\n};\n","import { useFetch } from './fetch';\nimport { getStorage, setStorage } from './storage';\n\nconst BASE_URL = 'https://wflow.cgboiler.com/v1'\n\ninterface User {\n companyId: string;\n id: string;\n name: string;\n deptId: string;\n mainDept: boolean;\n deptName: string;\n pinyin: string;\n py: string;\n type: null; // Or a more specific type if known\n avatar: string;\n gender: string;\n phone: string;\n email: string;\n position: string;\n status: number;\n selected: null; // Or a more specific type if known\n}\n\ninterface UserListResponse {\n data: User[];\n version: string;\n}\n\nconst USER_LIST_STORAGE_KEY = 'userListCache';\nconst USER_LIST_VERSION_STORAGE_KEY = 'userListVersionCache';\n\n/**\n * 获取用户列表,可选择是否只获取版本号\n * @param onlyVersion 是否只获取版本号\n * @returns 用户列表或只包含版本号\n */\nexport const fetchUserVersion = (onlyVersion: boolean) => {\n return useFetch<UserListResponse>(\n `${BASE_URL}/oa/org/depts/users`,\n { params: { onlyVersion } }\n );\n};\n\n/**\n * 获取所有用户列表\n * @returns 所有用户列表\n */\nexport const fetchAllUser = () => {\n return useFetch<UserListResponse>(\n `${BASE_URL}/oa/org/depts/users`\n );\n};\n\n/**\n * 获取并缓存用户列表\n * @returns 用户列表\n */\nexport const getUserList = async (): Promise<User[]> => {\n const cachedUserList = await getStorage<User[]>(USER_LIST_STORAGE_KEY);\n const cachedVersion = await getStorage<string>(USER_LIST_VERSION_STORAGE_KEY);\n\n const latestVersionResponse = await fetchUserVersion(true);\n const latestVersion = latestVersionResponse.version;\n\n if (cachedUserList && cachedVersion === latestVersion) {\n return cachedUserList;\n } else {\n const userListResponse = await fetchAllUser();\n await setStorage(USER_LIST_STORAGE_KEY, userListResponse.data);\n await setStorage(USER_LIST_VERSION_STORAGE_KEY, userListResponse.version);\n return userListResponse.data;\n }\n};\n\n/**\n * 根据用户ID查询用户信息\n * @param userId 用户ID\n * @returns 匹配的用户信息或 undefined\n */\nexport const getUserById = async (userId: string): Promise<User | undefined> => {\n const userList = await getUserList();\n return userList.find(user => user.id === userId);\n};"]}
package/dist/index.d.cts CHANGED
@@ -3,9 +3,6 @@ interface FetchConfig extends RequestInit {
3
3
  }
4
4
  declare const useFetch: <T>(url: string, config?: FetchConfig) => Promise<T>;
5
5
 
6
- interface UserInfo$1 {
7
- token: string;
8
- }
9
6
  declare const initApp: () => Promise<void>;
10
7
 
11
8
  declare const setStorage: (key: string, value: any) => Promise<void>;
@@ -15,6 +12,7 @@ declare const clearStorage: () => Promise<void>;
15
12
 
16
13
  interface UserInfo {
17
14
  token?: string;
15
+ userId?: string;
18
16
  [key: string]: any;
19
17
  }
20
18
  /**
@@ -47,4 +45,49 @@ declare const updateUserInfo: (info: Partial<UserInfo>) => Promise<void>;
47
45
  */
48
46
  declare const clearUserInfo: () => Promise<void>;
49
47
 
50
- export { type UserInfo$1 as UserInfo, clearStorage, clearUserInfo, getStorage, getUserInfo, getUserToken, initApp, initUserInfo, removeStorage, setStorage, setUserToken, updateUserInfo, useFetch };
48
+ interface User {
49
+ companyId: string;
50
+ id: string;
51
+ name: string;
52
+ deptId: string;
53
+ mainDept: boolean;
54
+ deptName: string;
55
+ pinyin: string;
56
+ py: string;
57
+ type: null;
58
+ avatar: string;
59
+ gender: string;
60
+ phone: string;
61
+ email: string;
62
+ position: string;
63
+ status: number;
64
+ selected: null;
65
+ }
66
+ interface UserListResponse {
67
+ data: User[];
68
+ version: string;
69
+ }
70
+ /**
71
+ * 获取用户列表,可选择是否只获取版本号
72
+ * @param onlyVersion 是否只获取版本号
73
+ * @returns 用户列表或只包含版本号
74
+ */
75
+ declare const fetchUserVersion: (onlyVersion: boolean) => Promise<UserListResponse>;
76
+ /**
77
+ * 获取所有用户列表
78
+ * @returns 所有用户列表
79
+ */
80
+ declare const fetchAllUser: () => Promise<UserListResponse>;
81
+ /**
82
+ * 获取并缓存用户列表
83
+ * @returns 用户列表
84
+ */
85
+ declare const getUserList: () => Promise<User[]>;
86
+ /**
87
+ * 根据用户ID查询用户信息
88
+ * @param userId 用户ID
89
+ * @returns 匹配的用户信息或 undefined
90
+ */
91
+ declare const getUserById: (userId: string) => Promise<User | undefined>;
92
+
93
+ export { type UserInfo, clearStorage, clearUserInfo, fetchAllUser, fetchUserVersion, getStorage, getUserById, getUserInfo, getUserList, getUserToken, initApp, initUserInfo, removeStorage, setStorage, setUserToken, updateUserInfo, useFetch };
package/dist/index.d.ts CHANGED
@@ -3,9 +3,6 @@ interface FetchConfig extends RequestInit {
3
3
  }
4
4
  declare const useFetch: <T>(url: string, config?: FetchConfig) => Promise<T>;
5
5
 
6
- interface UserInfo$1 {
7
- token: string;
8
- }
9
6
  declare const initApp: () => Promise<void>;
10
7
 
11
8
  declare const setStorage: (key: string, value: any) => Promise<void>;
@@ -15,6 +12,7 @@ declare const clearStorage: () => Promise<void>;
15
12
 
16
13
  interface UserInfo {
17
14
  token?: string;
15
+ userId?: string;
18
16
  [key: string]: any;
19
17
  }
20
18
  /**
@@ -47,4 +45,49 @@ declare const updateUserInfo: (info: Partial<UserInfo>) => Promise<void>;
47
45
  */
48
46
  declare const clearUserInfo: () => Promise<void>;
49
47
 
50
- export { type UserInfo$1 as UserInfo, clearStorage, clearUserInfo, getStorage, getUserInfo, getUserToken, initApp, initUserInfo, removeStorage, setStorage, setUserToken, updateUserInfo, useFetch };
48
+ interface User {
49
+ companyId: string;
50
+ id: string;
51
+ name: string;
52
+ deptId: string;
53
+ mainDept: boolean;
54
+ deptName: string;
55
+ pinyin: string;
56
+ py: string;
57
+ type: null;
58
+ avatar: string;
59
+ gender: string;
60
+ phone: string;
61
+ email: string;
62
+ position: string;
63
+ status: number;
64
+ selected: null;
65
+ }
66
+ interface UserListResponse {
67
+ data: User[];
68
+ version: string;
69
+ }
70
+ /**
71
+ * 获取用户列表,可选择是否只获取版本号
72
+ * @param onlyVersion 是否只获取版本号
73
+ * @returns 用户列表或只包含版本号
74
+ */
75
+ declare const fetchUserVersion: (onlyVersion: boolean) => Promise<UserListResponse>;
76
+ /**
77
+ * 获取所有用户列表
78
+ * @returns 所有用户列表
79
+ */
80
+ declare const fetchAllUser: () => Promise<UserListResponse>;
81
+ /**
82
+ * 获取并缓存用户列表
83
+ * @returns 用户列表
84
+ */
85
+ declare const getUserList: () => Promise<User[]>;
86
+ /**
87
+ * 根据用户ID查询用户信息
88
+ * @param userId 用户ID
89
+ * @returns 匹配的用户信息或 undefined
90
+ */
91
+ declare const getUserById: (userId: string) => Promise<User | undefined>;
92
+
93
+ export { type UserInfo, clearStorage, clearUserInfo, fetchAllUser, fetchUserVersion, getStorage, getUserById, getUserInfo, getUserList, getUserToken, initApp, initUserInfo, removeStorage, setStorage, setUserToken, updateUserInfo, useFetch };
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
- import o from'localforage';o.config({name:"cgx",storeName:"cgx_store",driver:[o.INDEXEDDB,o.LOCALSTORAGE]});var s=async(r,t)=>{try{await o.setItem(r,t);}catch(e){console.error("Error saving data:",e);}},g=async r=>{try{return await o.getItem(r)}catch(t){return console.error("Error getting data:",t),null}},m=async r=>{try{await o.removeItem(r);}catch(t){console.error("Error removing data:",t);}},S=async()=>{try{await o.clear();}catch(r){console.error("Error clearing data:",r);}};var n="user_info",T=async r=>{await s(n,r);},u=async r=>{let t=await p();await s(n,{...t,token:r});},l=async()=>(await g(n))?.token,p=async()=>await g(n)||{},P=async r=>{let t=await p();await s(n,{...t,...r});},E=async()=>{await m(n);};var F=async(r,t={})=>{let{params:e,...c}=t,a=e?"?"+Object.entries(e).map(([I,w])=>`${I}=${encodeURIComponent(String(w))}`).join("&"):"",f=r+a,h=await l(),i=await fetch(f,{...c,headers:{"Content-Type":"application/json",token:h||"",...c.headers}});if(!i.ok)throw new Error(`HTTP error! status: ${i.status}`);return await i.json()};var y=()=>{let t=new URLSearchParams(window.location.search).get("token");if(console.log("tokenFromSearch: ",t),t)return t;let e=window.location.hash;if(e){let a=(e.startsWith("#")?e.substring(1):e).match(/\?(.*)/);if(a&&a[1])return new URLSearchParams(a[1]).get("token")}return null},O=async()=>{let r=y();r&&await u(r);};export{S as clearStorage,E as clearUserInfo,g as getStorage,p as getUserInfo,l as getUserToken,O as initApp,T as initUserInfo,m as removeStorage,s as setStorage,u as setUserToken,P as updateUserInfo,F as useFetch};//# sourceMappingURL=index.js.map
1
+ import n from'localforage';n.config({name:"cgx",storeName:"cgx_store",driver:[n.INDEXEDDB,n.LOCALSTORAGE]});var o=async(t,r)=>{try{await n.setItem(t,r);}catch(e){console.error("Error saving data:",e);}},i=async t=>{try{return await n.getItem(t)}catch(r){return console.error("Error getting data:",r),null}},m=async t=>{try{await n.removeItem(t);}catch(r){console.error("Error removing data:",r);}},v=async()=>{try{await n.clear();}catch(t){console.error("Error clearing data:",t);}};var c="user_info",C=async t=>{await o(c,t);},A=async t=>{let r=await d();await o(c,{...r,token:t});},l=async()=>(await i(c))?.token,d=async()=>await i(c)||{},h=async t=>{let r=await d();await o(c,{...r,...t});},O=async()=>{await m(c);};var u=async(t,r={})=>{let{params:e,...s}=r,a=e?"?"+Object.entries(e).map(([S,x])=>`${S}=${encodeURIComponent(String(x))}`).join("&"):"",g=t+a,f=await l(),p=await fetch(g,{...s,headers:{"Content-Type":"application/json",token:f||"",...s.headers}});if(!p.ok)throw new Error(`HTTP error! status: ${p.status}`);return await p.json()};var U=t=>{let e=new URLSearchParams(window.location.search).get(t);if(e)return e;let s=window.location.hash;if(s){let g=(s.startsWith("#")?s.substring(1):s).match(/\?(.*)/);if(g&&g[1])return new URLSearchParams(g[1]).get(t)}return null},j=async()=>{let t=U("token"),r=U("user_id");(t||r)&&await h({...t&&{token:t},...r&&{userId:r}});};var y="https://wflow.cgboiler.com/v1",w="userListCache",I="userListVersionCache",R=t=>u(`${y}/oa/org/depts/users`,{params:{onlyVersion:t}}),E=()=>u(`${y}/oa/org/depts/users`),L=async()=>{let t=await i(w),r=await i(I),s=(await R(true)).version;if(t&&r===s)return t;{let a=await E();return await o(w,a.data),await o(I,a.version),a.data}},B=async t=>(await L()).find(e=>e.id===t);
2
+ export{v as clearStorage,O as clearUserInfo,E as fetchAllUser,R as fetchUserVersion,i as getStorage,B as getUserById,d as getUserInfo,L as getUserList,l as getUserToken,j as initApp,C as initUserInfo,m as removeStorage,o as setStorage,A as setUserToken,h as updateUserInfo,u as useFetch};//# sourceMappingURL=index.js.map
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/storage.ts","../src/utils/user.ts","../src/utils/fetch.ts","../src/utils/initApp.ts"],"names":["localforage","setStorage","key","value","error","getStorage","removeStorage","clearStorage","USER_INFO_KEY","initUserInfo","info","setUserToken","token","userInfo","getUserInfo","getUserToken","updateUserInfo","currentInfo","clearUserInfo","useFetch","url","config","params","restConfig","queryString","finalUrl","response","getTokenFromUrl","tokenFromSearch","hash","queryStringMatch","initApp","urlToken"],"mappings":"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","file":"index.js","sourcesContent":["import localforage from 'localforage';\n\n// 配置localforage\nlocalforage.config({\n name: 'cgx',\n storeName: 'cgx_store',\n driver: [\n localforage.INDEXEDDB,\n localforage.LOCALSTORAGE,\n ],\n});\n\n// 存储数据\nexport const setStorage = async (key: string, value: any) => {\n try {\n await localforage.setItem(key, value);\n } catch (error) {\n console.error('Error saving data:', error);\n }\n};\n\n// 获取数据\nexport const getStorage = async <T>(key: string): Promise<T | null> => {\n try {\n const value = await localforage.getItem<T>(key);\n return value;\n } catch (error) {\n console.error('Error getting data:', error);\n return null;\n }\n};\n\n// 删除数据\nexport const removeStorage = async (key: string) => {\n try {\n await localforage.removeItem(key);\n } catch (error) {\n console.error('Error removing data:', error);\n }\n};\n\n// 清空所有数据\nexport const clearStorage = async () => {\n try {\n await localforage.clear();\n } catch (error) {\n console.error('Error clearing data:', error);\n }\n};","/**\n * 用户信息管理模块\n */\nimport { getStorage, setStorage, removeStorage } from './storage';\n\ninterface UserInfo {\n token?: string;\n [key: string]: any;\n}\n\nconst USER_INFO_KEY = 'user_info';\n\n/**\n * 初始化用户信息\n * @param info 用户信息对象\n */\nexport const initUserInfo = async (info: UserInfo) => {\n await setStorage(USER_INFO_KEY, info);\n};\n\n/**\n * 设置用户token\n * @param token 用户token\n */\nexport const setUserToken = async (token: string) => {\n const userInfo = await getUserInfo();\n await setStorage(USER_INFO_KEY, { ...userInfo, token });\n};\n\n/**\n * 获取用户token\n * @returns 用户token\n */\nexport const getUserToken = async (): Promise<string | undefined> => {\n const userInfo = await getStorage<UserInfo>(USER_INFO_KEY);\n return userInfo?.token;\n};\n\n/**\n * 获取用户信息\n * @returns 用户信息对象\n */\nexport const getUserInfo = async (): Promise<UserInfo> => {\n const userInfo = await getStorage<UserInfo>(USER_INFO_KEY);\n return userInfo || {};\n};\n\n/**\n * 更新用户信息\n * @param info 要更新的用户信息字段\n */\nexport const updateUserInfo = async (info: Partial<UserInfo>) => {\n const currentInfo = await getUserInfo();\n await setStorage(USER_INFO_KEY, { ...currentInfo, ...info });\n};\n\n/**\n * 清除用户信息\n */\nexport const clearUserInfo = async () => {\n await removeStorage(USER_INFO_KEY);\n};","import { getUserToken } from './user';\n\ninterface FetchConfig extends RequestInit {\n params?: Record<string, any>;\n}\n\nexport const useFetch = async <T>(url: string, config: FetchConfig = {}) => {\n const { params, ...restConfig } = config;\n\n // 处理查询参数\n const queryString = params\n ? '?' +\n Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)\n .join('&')\n : '';\n\n const finalUrl = url + queryString;\n\n // 从 user.ts 获取 token\n const token = await getUserToken();\n\n // 发送请求\n const response = await fetch(finalUrl, {\n ...restConfig,\n headers: {\n 'Content-Type': 'application/json',\n token: token || '',\n ...restConfig.headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n return data as T;\n};\n","import { getUserInfo, setUserToken } from './user';\n\nexport interface UserInfo {\n // 用户信息接口\n token: string;\n}\n\n// 从URL中获取token参数\nconst getTokenFromUrl = (): string | null => {\n const urlParamsSearch = new URLSearchParams(window.location.search);\n const tokenFromSearch = urlParamsSearch.get('token');\n\n console.log('tokenFromSearch: ', tokenFromSearch);\n if (tokenFromSearch) {\n return tokenFromSearch;\n }\n\n // Check hash fragment\n const hash = window.location.hash;\n if (hash) {\n // Remove the leading # if present\n const hashContent = hash.startsWith('#') ? hash.substring(1) : hash;\n // Check if the hash content contains a query string part\n const queryStringMatch = hashContent.match(/\\?(.*)/);\n if (queryStringMatch && queryStringMatch[1]) {\n const urlParamsHash = new URLSearchParams(queryStringMatch[1]);\n return urlParamsHash.get('token');\n }\n }\n\n return null;\n};\n\n// 初始化应用\nexport const initApp = async () => {\n // 从URL中获取token参数并更新用户信息\n const urlToken = getTokenFromUrl();\n if (urlToken) {\n await setUserToken(urlToken);\n }\n};\n"]}
1
+ {"version":3,"sources":["../src/utils/storage.ts","../src/utils/user.ts","../src/utils/fetch.ts","../src/utils/initApp.ts","../src/utils/userList.ts"],"names":["localforage","setStorage","key","value","error","getStorage","removeStorage","clearStorage","USER_INFO_KEY","initUserInfo","info","setUserToken","token","userInfo","getUserInfo","getUserToken","updateUserInfo","currentInfo","clearUserInfo","useFetch","url","config","params","restConfig","queryString","finalUrl","response","getUrlParam","paramName","paramFromSearch","hash","queryStringMatch","initApp","userId","BASE_URL","USER_LIST_STORAGE_KEY","USER_LIST_VERSION_STORAGE_KEY","fetchUserVersion","onlyVersion","fetchAllUser","getUserList","cachedUserList","cachedVersion","latestVersion","userListResponse","getUserById","user"],"mappings":"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","file":"index.js","sourcesContent":["import localforage from 'localforage';\n\n// 配置localforage\nlocalforage.config({\n name: 'cgx',\n storeName: 'cgx_store',\n driver: [\n localforage.INDEXEDDB,\n localforage.LOCALSTORAGE,\n ],\n});\n\n// 存储数据\nexport const setStorage = async (key: string, value: any) => {\n try {\n await localforage.setItem(key, value);\n } catch (error) {\n console.error('Error saving data:', error);\n }\n};\n\n// 获取数据\nexport const getStorage = async <T>(key: string): Promise<T | null> => {\n try {\n const value = await localforage.getItem<T>(key);\n return value;\n } catch (error) {\n console.error('Error getting data:', error);\n return null;\n }\n};\n\n// 删除数据\nexport const removeStorage = async (key: string) => {\n try {\n await localforage.removeItem(key);\n } catch (error) {\n console.error('Error removing data:', error);\n }\n};\n\n// 清空所有数据\nexport const clearStorage = async () => {\n try {\n await localforage.clear();\n } catch (error) {\n console.error('Error clearing data:', error);\n }\n};","/**\n * 用户信息管理模块\n */\nimport { getStorage, setStorage, removeStorage } from './storage';\n\nexport interface UserInfo {\n token?: string;\n userId?: string;\n [key: string]: any;\n}\n\nconst USER_INFO_KEY = 'user_info';\n\n/**\n * 初始化用户信息\n * @param info 用户信息对象\n */\nexport const initUserInfo = async (info: UserInfo) => {\n await setStorage(USER_INFO_KEY, info);\n};\n\n/**\n * 设置用户token\n * @param token 用户token\n */\nexport const setUserToken = async (token: string) => {\n const userInfo = await getUserInfo();\n await setStorage(USER_INFO_KEY, { ...userInfo, token });\n};\n\n/**\n * 获取用户token\n * @returns 用户token\n */\nexport const getUserToken = async (): Promise<string | undefined> => {\n const userInfo = await getStorage<UserInfo>(USER_INFO_KEY);\n return userInfo?.token;\n};\n\n/**\n * 获取用户信息\n * @returns 用户信息对象\n */\nexport const getUserInfo = async (): Promise<UserInfo> => {\n const userInfo = await getStorage<UserInfo>(USER_INFO_KEY);\n return userInfo || {};\n};\n\n/**\n * 更新用户信息\n * @param info 要更新的用户信息字段\n */\nexport const updateUserInfo = async (info: Partial<UserInfo>) => {\n const currentInfo = await getUserInfo();\n await setStorage(USER_INFO_KEY, { ...currentInfo, ...info });\n};\n\n/**\n * 清除用户信息\n */\nexport const clearUserInfo = async () => {\n await removeStorage(USER_INFO_KEY);\n};","import { getUserToken } from './user';\n\ninterface FetchConfig extends RequestInit {\n params?: Record<string, any>;\n}\n\nexport const useFetch = async <T>(url: string, config: FetchConfig = {}) => {\n const { params, ...restConfig } = config;\n\n // 处理查询参数\n const queryString = params\n ? '?' +\n Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)\n .join('&')\n : '';\n\n const finalUrl = url + queryString;\n\n // 从 user.ts 获取 token\n const token = await getUserToken();\n\n // 发送请求\n const response = await fetch(finalUrl, {\n ...restConfig,\n headers: {\n 'Content-Type': 'application/json',\n token: token || '',\n ...restConfig.headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n return data as T;\n};\n","import { updateUserInfo } from './user';\n\n// 从URL中获取指定参数\nconst getUrlParam = (paramName: string): string | null => {\n // 检查search参数\n const urlParamsSearch = new URLSearchParams(window.location.search);\n const paramFromSearch = urlParamsSearch.get(paramName);\n if (paramFromSearch) {\n return paramFromSearch;\n }\n\n // 检查hash片段\n const hash = window.location.hash;\n if (hash) {\n const hashContent = hash.startsWith('#') ? hash.substring(1) : hash;\n const queryStringMatch = hashContent.match(/\\?(.*)/);\n if (queryStringMatch && queryStringMatch[1]) {\n const urlParamsHash = new URLSearchParams(queryStringMatch[1]);\n return urlParamsHash.get(paramName);\n }\n }\n\n return null;\n};\n\n// 初始化应用\nexport const initApp = async () => {\n const token = getUrlParam('token');\n const userId = getUrlParam('user_id');\n \n if (token || userId) {\n await updateUserInfo({ \n ...(token && { token }),\n ...(userId && { userId })\n });\n }\n};\n","import { useFetch } from './fetch';\nimport { getStorage, setStorage } from './storage';\n\nconst BASE_URL = 'https://wflow.cgboiler.com/v1'\n\ninterface User {\n companyId: string;\n id: string;\n name: string;\n deptId: string;\n mainDept: boolean;\n deptName: string;\n pinyin: string;\n py: string;\n type: null; // Or a more specific type if known\n avatar: string;\n gender: string;\n phone: string;\n email: string;\n position: string;\n status: number;\n selected: null; // Or a more specific type if known\n}\n\ninterface UserListResponse {\n data: User[];\n version: string;\n}\n\nconst USER_LIST_STORAGE_KEY = 'userListCache';\nconst USER_LIST_VERSION_STORAGE_KEY = 'userListVersionCache';\n\n/**\n * 获取用户列表,可选择是否只获取版本号\n * @param onlyVersion 是否只获取版本号\n * @returns 用户列表或只包含版本号\n */\nexport const fetchUserVersion = (onlyVersion: boolean) => {\n return useFetch<UserListResponse>(\n `${BASE_URL}/oa/org/depts/users`,\n { params: { onlyVersion } }\n );\n};\n\n/**\n * 获取所有用户列表\n * @returns 所有用户列表\n */\nexport const fetchAllUser = () => {\n return useFetch<UserListResponse>(\n `${BASE_URL}/oa/org/depts/users`\n );\n};\n\n/**\n * 获取并缓存用户列表\n * @returns 用户列表\n */\nexport const getUserList = async (): Promise<User[]> => {\n const cachedUserList = await getStorage<User[]>(USER_LIST_STORAGE_KEY);\n const cachedVersion = await getStorage<string>(USER_LIST_VERSION_STORAGE_KEY);\n\n const latestVersionResponse = await fetchUserVersion(true);\n const latestVersion = latestVersionResponse.version;\n\n if (cachedUserList && cachedVersion === latestVersion) {\n return cachedUserList;\n } else {\n const userListResponse = await fetchAllUser();\n await setStorage(USER_LIST_STORAGE_KEY, userListResponse.data);\n await setStorage(USER_LIST_VERSION_STORAGE_KEY, userListResponse.version);\n return userListResponse.data;\n }\n};\n\n/**\n * 根据用户ID查询用户信息\n * @param userId 用户ID\n * @returns 匹配的用户信息或 undefined\n */\nexport const getUserById = async (userId: string): Promise<User | undefined> => {\n const userList = await getUserList();\n return userList.find(user => user.id === userId);\n};"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cgboiler/core",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",