icms-api 0.1.8 → 0.1.10

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.
@@ -1,2 +1,2 @@
1
- const e={IBOOT_DEVICE_ID:`dvid`,IBOOT_LANG:`lang`,IBOOT_WEBSITE_ID:`wid`,IBOOT_WEBSITE_NO:`wno`,IBOOT_TOKEN:`token`,IBOOT_USER:`user`},t=`Content-Type`,n={applicationJson:`application/json`,multipartFormData:`multipart/form-data`,applicationXwwwFormUrlencoded:`application/x-www-form-urlencoded`};var r={info:(e,t)=>{process.env.NODE_ENV!==`production`&&console.info(t,e)},debug:(e,t)=>{process.env.NODE_ENV!==`production`&&console.debug(t,e)},error:e=>{console.error(e)}};const i=t=>{if(t.get){let n=t.get(e.IBOOT_USER);if(n&&n.length>0)return JSON.parse(n)}};var a=e=>`${process.env.BASE_URL||`/api/services`}?m=${e}`,o=async(e,t)=>{let n=a(e);if(t?.data){let e=new URLSearchParams(t.data);n+=`&${e}`}let i=t?.headers;r.info({url:n,headers:i},`GET`);let o=await fetch(n,{method:`GET`,headers:i,cache:t?.useCache?`force-cache`:`default`});if(o.ok){let e=Object.fromEntries(o.headers.entries()),t={...await o.json(),headers:e};return r.debug(t,`GET_RESULT`),t}let s={code:o.status,success:!1,msg:o.statusText};return r.error(s),s},s=async(e,t)=>{let i=t?.data??{},a,o=new Headers(t?.headers);i instanceof FormData?a=i:(a=JSON.stringify(i),o.set(`Content-Type`,n.applicationJson)),r.info({url:e,headers:o},`POST`);let s=await fetch(e,{method:`POST`,headers:o,body:a});if(s.ok){let e=Object.fromEntries(s.headers.entries()),t={...await s.json(),headers:e};return r.debug(t,`POST_RESULT`),t}let c={code:s.status,success:!1,msg:s.statusText};return r.error(c),c};const c=async(e,t)=>{let n=await o(e,t);if(n.success)return n.data;if(t?.showError){t.showError(n.msg??`Get request error!`);return}throw Error(n.msg??`Get request error!`)},l=async(e,t)=>{let n=await s(e,t);if(n.success)return n.data;if(t?.showError){t.showError(n.msg??`Post request error!`);return}throw Error(n.msg??`Post request error!`)},u=async(e,t)=>{let n=await s(e,t);return n.success?(t?.showSuccess&&t.showSuccess(n.msg??`SUCCESS`),!0):(t?.showError&&t.showError(n.msg??`Post request error!`),!1)};var d=class{cookies=null;constructor(){}setICookies(e){return this.cookies=e,this}async login({username:e,password:t}){if(await l(`login`,{data:{username:e,password:t}}),this.cookies)return i(this.cookies)}async logout(){await l(`logout`)}async register({username:e,password:t,nickname:n}){if(await l(`register`,{data:{username:e,password:t,nickname:n}}),this.cookies)return i(this.cookies)}async checkRegistered(e){return await c(`checkRegister`,{data:{username:e}})??!1}async loadI18nList(){return await c(`loadI18nList`)??[]}async loadWebsite(e){return c(`loadWebsite`,{showNav:String(e?.showNav??!0),showFriendLink:String(e?.showFriendLink??!1)})}async loadChannels(e){let t={};return e?.channelNo&&(t.channelNo=e.channelNo),e?.showChildren!==void 0&&(t.showChildren=String(e.showChildren)),await c(`loadChannels`,t)??[]}async loadChannelById(e){let t={channelId:e.channelId};return e.showChildren!==void 0&&(t.showChildren=String(e.showChildren)),c(`loadChannelById`,t)}async loadChannelByNo(e){let t={channelNo:e.channelNo};return e.showChildren!==void 0&&(t.showChildren=String(e.showChildren)),c(`loadChannelByNo`,t)}async loadChannelByUri(e){let t={uri:e.uri};return e.showChildren!==void 0&&(t.showChildren=String(e.showChildren)),c(`loadChannelByUri`,t)}async loadProductDetail(e){return c(`loadProductDetail`,{data:{proId:e}})}async loadProductPageInfo(e){return c(`loadProductPageInfo`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadProductPageInfoByGroup(e){return c(`loadProductPageInfoByGroup`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadProductListByGroupId(e){return await c(`loadProductListByGroupId`,{data:{groupId:e.groupId}})??[]}async loadNewsDetail(e){return c(`loadNewsDetail`,{data:{newId:e}})}async loadNewsPageInfo(e){return c(`loadNewsPageInfo`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadNewsPageInfoByGroupId(e){return c(`loadNewsPageInfoByGroupId`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadNewsListByGroupId(e){return await c(`loadNewsListByGroupId`,{data:{groupId:e.groupId}})??[]}async loadPhotoDetail(e){return c(`loadPhotoDetail`,{data:{photoId:e}})}async loadPhotoPageInfo(e){return c(`loadPhotoPageInfo`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadPhotoPageInfoByGroup(e){return c(`loadPhotoPageInfoByGroup`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadPhotoListByGroupId(e){return await c(`loadPhotoListByGroupId`,{data:{groupId:e.groupId}})??[]}async loadVideoDetail(e){return c(`loadVideoDetail`,{data:{videoId:e}})}async loadVideoPageInfo(e){return c(`loadVideoPageInfo`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadVideoPageInfoByGroup(e){return c(`loadVideoPageInfoByGroup`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadVideoListByGroupId(e){return await c(`loadVideoListByGroupId`,{data:{groupId:e.groupId}})??[]}async loadActivityDetail(e){return c(`loadActivityDetail`,{data:{activityId:e}})}async loadActivityPageInfo(e){return c(`loadActivityPageInfo`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadActivityPageInfoByGroup(e){return c(`loadActivityPageInfoByGroup`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadActivityListByGroupId(e){return await c(`loadActivityListByGroupId`,{data:{groupId:e.groupId}})??[]}async loadReviewList(e){return await c(`loadReviewList`,{data:{...e}})??[]}async submitComment(e){return await u(`submitComment`,e)}async subscribe(e){return await u(`subscribe`,e)}async submitContactUs(e){return await u(`submitContactUs`,e)}async loadLinkGroups(){return await c(`loadLinkGroups`)??[]}async loadFriendLinks(e){return await c(`loadFriendLinks`,{data:e?{count:String(e)}:{}})??[]}async submitLink(e){return await u(`submitLink`,e)}async getSpecDescription(e){return c(`getSpecDescription`,{data:{code:e}})}async loadGoodsTagList(){return await c(`getGoodsTagList`)??[]}async loadGoodsShelves(){return await c(`getGoodsShelves`)??[]}async loadCategoryGoods(e){let t={};return e?.cateCode&&(t.cateCode=e.cateCode),e?.count!==void 0&&(t.count=String(e.count)),await c(`getCategoryGoods`,{data:t})??[]}async searchGoods(e){return c(`searchGoods`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}};const f=new d;exports.ICMSClient=d,exports.icmsClient=f;
1
+ const e={IBOOT_DEVICE_ID:`dvid`,IBOOT_LANG:`lang`,IBOOT_WEBSITE_ID:`wid`,IBOOT_WEBSITE_NO:`wno`,IBOOT_TOKEN:`token`,IBOOT_USER:`user`},t=`Content-Type`,n={applicationJson:`application/json`,multipartFormData:`multipart/form-data`,applicationXwwwFormUrlencoded:`application/x-www-form-urlencoded`};var r={info:(e,t)=>{process.env.NODE_ENV!==`production`&&console.info(t,e)},debug:(e,t)=>{process.env.NODE_ENV!==`production`&&console.debug(t,e)},error:e=>{console.error(e)}};const i=t=>{if(t.get){let n=t.get(e.IBOOT_USER);if(n&&n.length>0)return JSON.parse(n)}};var a=e=>`${process.env.BASE_URL||`/api/services`}?m=${e}`,o=async(e,t)=>{let n=a(e);if(t?.data){let e=new URLSearchParams(t.data);n+=`&${e}`}let i=t?.headers;r.info({url:n,headers:i},`GET`);let o=await fetch(n,{method:`GET`,headers:i,cache:t?.useCache?`force-cache`:`default`});if(o.ok){let e=Object.fromEntries(o.headers.entries()),t={...await o.json(),headers:e};return r.debug(t,`GET_RESULT`),t}let s={code:o.status,success:!1,msg:o.statusText};return r.error(s),s},s=async(e,t)=>{let i=t?.data??{},a,o=new Headers(t?.headers);i instanceof FormData?a=i:(a=JSON.stringify(i),o.set(`Content-Type`,n.applicationJson)),r.info({url:e,headers:o},`POST`);let s=await fetch(e,{method:`POST`,headers:o,body:a});if(s.ok){let e=Object.fromEntries(s.headers.entries()),t={...await s.json(),headers:e};return r.debug(t,`POST_RESULT`),t}let c={code:s.status,success:!1,msg:s.statusText};return r.error(c),c};const c=async(e,t)=>{let n=await o(e,t);if(n.success)return n.data;if(t?.showError){t.showError(n.msg??`Get request error!`);return}throw Error(n.msg??`Get request error!`)},l=async(e,t)=>{let n=await s(e,t);if(n.success)return n.data;if(t?.showError){t.showError(n.msg??`Post request error!`);return}throw Error(n.msg??`Post request error!`)},u=async(e,t)=>{let n=await s(e,t);return n.success?(t?.showSuccess&&t.showSuccess(n.msg??`SUCCESS`),!0):(t?.showError&&t.showError(n.msg??`Post request error!`),!1)};var d=class{cookies=null;constructor(){}setICookies(e){return this.cookies=e,this}async login({username:e,password:t}){if(await l(`login`,{data:{username:e,password:t}}),this.cookies)return i(this.cookies)}async logout(){await l(`logout`)}async register({username:e,password:t,nickname:n}){if(await l(`register`,{data:{username:e,password:t,nickname:n}}),this.cookies)return i(this.cookies)}async sendVCode(e){return await l(`sendcode`,{data:{account:e}})===1}async checkRegistered(e){return await c(`checkRegister`,{data:{username:e}})??!1}async loadI18nList(){return await c(`loadI18nList`)??[]}async loadWebsite(e){return c(`loadWebsite`,{showNav:String(e?.showNav??!0),showFriendLink:String(e?.showFriendLink??!1)})}async loadChannels(e){let t={};return e?.channelNo&&(t.channelNo=e.channelNo),e?.showChildren!==void 0&&(t.showChildren=String(e.showChildren)),await c(`loadChannels`,t)??[]}async loadChannelById(e){let t={channelId:e.channelId};return e.showChildren!==void 0&&(t.showChildren=String(e.showChildren)),c(`loadChannelById`,t)}async loadChannelByNo(e){let t={channelNo:e.channelNo};return e.showChildren!==void 0&&(t.showChildren=String(e.showChildren)),c(`loadChannelByNo`,t)}async loadChannelByUri(e){let t={uri:e.uri};return e.showChildren!==void 0&&(t.showChildren=String(e.showChildren)),c(`loadChannelByUri`,t)}async loadProductDetail(e){return c(`loadProductDetail`,{data:{proId:e}})}async loadProductPageInfo(e){return c(`loadProductPageInfo`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadProductPageInfoByGroup(e){return c(`loadProductPageInfoByGroup`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadProductListByGroupId(e){return await c(`loadProductListByGroupId`,{data:{groupId:e.groupId}})??[]}async loadNewsDetail(e){return c(`loadNewsDetail`,{data:{newId:e}})}async loadNewsPageInfo(e){return c(`loadNewsPageInfo`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadNewsPageInfoByGroupId(e){return c(`loadNewsPageInfoByGroupId`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadNewsListByGroupId(e){return await c(`loadNewsListByGroupId`,{data:{groupId:e.groupId}})??[]}async loadPhotoDetail(e){return c(`loadPhotoDetail`,{data:{photoId:e}})}async loadPhotoPageInfo(e){return c(`loadPhotoPageInfo`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadPhotoPageInfoByGroup(e){return c(`loadPhotoPageInfoByGroup`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadPhotoListByGroupId(e){return await c(`loadPhotoListByGroupId`,{data:{groupId:e.groupId}})??[]}async loadVideoDetail(e){return c(`loadVideoDetail`,{data:{videoId:e}})}async loadVideoPageInfo(e){return c(`loadVideoPageInfo`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadVideoPageInfoByGroup(e){return c(`loadVideoPageInfoByGroup`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadVideoListByGroupId(e){return await c(`loadVideoListByGroupId`,{data:{groupId:e.groupId}})??[]}async loadActivityDetail(e){return c(`loadActivityDetail`,{data:{activityId:e}})}async loadActivityPageInfo(e){return c(`loadActivityPageInfo`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadActivityPageInfoByGroup(e){return c(`loadActivityPageInfoByGroup`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}async loadActivityListByGroupId(e){return await c(`loadActivityListByGroupId`,{data:{groupId:e.groupId}})??[]}async loadReviewList(e){return await c(`loadReviewList`,{data:{...e}})??[]}async submitComment(e){return await u(`submitComment`,e)}async subscribe(e){return await u(`subscribe`,e)}async submitContactUs(e){return await u(`submitContactUs`,e)}async loadLinkGroups(){return await c(`loadLinkGroups`)??[]}async loadFriendLinks(e){return await c(`loadFriendLinks`,{data:e?{count:String(e)}:{}})??[]}async submitLink(e){return await u(`submitLink`,e)}async getSpecDescription(e){return c(`getSpecDescription`,{data:{code:e}})}async loadGoodsTagList(){return await c(`getGoodsTagList`)??[]}async loadGoodsShelves(){return await c(`getGoodsShelves`)??[]}async loadCategoryGoods(e){let t={};return e?.cateCode&&(t.cateCode=e.cateCode),e?.count!==void 0&&(t.count=String(e.count)),await c(`getCategoryGoods`,{data:t})??[]}async searchGoods(e){return c(`searchGoods`,{data:{...e,pageNo:String(e.pageNo),pageSize:String(e.pageSize)}})}};const f=new d;exports.ICMSClient=d,exports.icmsClient=f;
2
2
  //# sourceMappingURL=icms-api.client.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"icms-api.client.cjs.js","names":["body: string | FormData","data: Record<string, string>"],"sources":["../src/client-helper.ts","../src/client.ts"],"sourcesContent":["/**\r\n * 客户端 HTTP 辅助函数\r\n * 从 @rock.chen/icms-http-client/web-client 内联,\r\n * 避免引入 pino/pino-pretty/sonic-boom 等 Node.js 服务端模块\r\n */\r\n\r\n// ---- 类型 ----\r\n\r\n/** Cookie 读写接口 */\r\nexport interface ICookies {\r\n get(key: string): string | undefined;\r\n set?(key: string, value: string): void;\r\n delete?(key: string): void;\r\n}\r\n\r\n/** API 返回模型 */\r\nexport interface ResultModel<T = unknown> {\r\n code: number;\r\n success: boolean;\r\n msg: string;\r\n data?: T;\r\n headers?: Record<string, string>;\r\n}\r\n\r\n/** GET 请求参数 */\r\nexport interface ClientGetParams {\r\n data?: Record<string, string>;\r\n headers?: Record<string, string>;\r\n useCache?: boolean;\r\n showError?: (msg: string) => void;\r\n}\r\n\r\n/** POST 请求参数 */\r\nexport interface ClientPostParams {\r\n data?: Record<string, unknown> | FormData;\r\n headers?: Record<string, string>;\r\n showError?: (msg: string) => void;\r\n showSuccess?: (msg: string) => void;\r\n}\r\n\r\n/** Cookie 名称常量 */\r\nexport const COOKIE_NAMES = {\r\n IBOOT_DEVICE_ID: \"dvid\",\r\n IBOOT_LANG: \"lang\",\r\n IBOOT_WEBSITE_ID: \"wid\",\r\n IBOOT_WEBSITE_NO: \"wno\",\r\n IBOOT_TOKEN: \"token\",\r\n IBOOT_USER: \"user\",\r\n} as const;\r\n\r\n/** Content-Type 常量 */\r\nexport const CONTENT_TYPE_KEY = \"Content-Type\";\r\nexport const CONTENT_TYPE_MAP = {\r\n applicationJson: \"application/json\",\r\n multipartFormData: \"multipart/form-data\",\r\n applicationXwwwFormUrlencoded: \"application/x-www-form-urlencoded\",\r\n} as const;\r\n\r\n/** 用户信息 */\r\nexport interface User {\r\n id: string;\r\n name: string;\r\n userType: number;\r\n username?: string;\r\n nickname?: string;\r\n sex?: number;\r\n headImg?: string;\r\n lastLoginTime?: string;\r\n tokenExpired?: string;\r\n deviceId?: string;\r\n status?: number;\r\n accountType?: number;\r\n enabled?: boolean;\r\n userFrom?: number;\r\n needToReview?: boolean;\r\n socketOnline?: boolean;\r\n createTime?: string;\r\n mustChangePwd?: boolean;\r\n}\r\n\r\n// ---- Logger(浏览器 console 实现,唔引入 pino) ----\r\n\r\nconst logger = {\r\n info: (msg: unknown, tag: string) => {\r\n if (process.env.NODE_ENV !== \"production\") console.info(tag, msg);\r\n },\r\n debug: (msg: unknown, tag: string) => {\r\n if (process.env.NODE_ENV !== \"production\") console.debug(tag, msg);\r\n },\r\n error: (msg: unknown) => {\r\n console.error(msg);\r\n },\r\n};\r\n\r\n// ---- 函数 ----\r\n\r\n/** 从 cookie 中读取已登录用户信息 */\r\nexport const getLoginUser = (cookies: ICookies): User | undefined => {\r\n if (cookies.get) {\r\n const userjson = cookies.get(COOKIE_NAMES.IBOOT_USER);\r\n if (userjson && userjson.length > 0) {\r\n return JSON.parse(userjson);\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nconst getBaseUrl = (urlName: string) => {\r\n const baseUrl = process.env.BASE_URL || \"/api/services\";\r\n return `${baseUrl}?m=${urlName}`;\r\n};\r\n\r\n/** 客户端 GET 请求 */\r\nconst get = async <T>(\r\n urlName: string,\r\n opts?: ClientGetParams,\r\n): Promise<ResultModel<T>> => {\r\n let url = getBaseUrl(urlName);\r\n if (opts?.data) {\r\n const params = new URLSearchParams(opts.data);\r\n url += `&${params}`;\r\n }\r\n const heads = opts?.headers;\r\n logger.info({ url, headers: heads }, \"GET\");\r\n const res = await fetch(url, {\r\n method: \"GET\",\r\n headers: heads,\r\n cache: opts?.useCache ? \"force-cache\" : \"default\",\r\n });\r\n\r\n if (res.ok) {\r\n const headersMap = Object.fromEntries(res.headers.entries());\r\n const result = { ...(await res.json()), headers: headersMap };\r\n logger.debug(result, \"GET_RESULT\");\r\n return result;\r\n }\r\n const msg = { code: res.status, success: false, msg: res.statusText };\r\n logger.error(msg);\r\n return msg;\r\n};\r\n\r\n/** 客户端 POST 请求 */\r\nconst post = async <T>(\r\n urlName: string,\r\n opts?: ClientPostParams,\r\n): Promise<ResultModel<T>> => {\r\n const data = opts?.data ?? {};\r\n let body: string | FormData;\r\n const proxyHeaders = new Headers(opts?.headers);\r\n if (!(data instanceof FormData)) {\r\n body = JSON.stringify(data);\r\n proxyHeaders.set(CONTENT_TYPE_KEY, CONTENT_TYPE_MAP.applicationJson);\r\n } else {\r\n body = data;\r\n }\r\n logger.info({ url: urlName, headers: proxyHeaders }, \"POST\");\r\n const res = await fetch(urlName, {\r\n method: \"POST\",\r\n headers: proxyHeaders,\r\n body,\r\n });\r\n\r\n if (res.ok) {\r\n const headersMap = Object.fromEntries(res.headers.entries());\r\n const result = { ...(await res.json()), headers: headersMap };\r\n logger.debug(result, \"POST_RESULT\");\r\n return result;\r\n }\r\n const msg = { code: res.status, success: false, msg: res.statusText };\r\n logger.error(msg);\r\n return msg;\r\n};\r\n\r\n/** GET 请求快捷方法(自动解包 data) */\r\nexport const iGet = async <T>(\r\n url: string,\r\n opts?: ClientGetParams,\r\n): Promise<T | undefined> => {\r\n const res = await get<T>(url, opts);\r\n if (res.success) {\r\n return res.data as T;\r\n }\r\n if (opts?.showError) {\r\n opts.showError(res.msg ?? \"Get request error!\");\r\n return;\r\n }\r\n throw Error(res.msg ?? \"Get request error!\");\r\n};\r\n\r\n/** POST 请求快捷方法(自动解包 data) */\r\nexport const iPost = async <T>(\r\n url: string,\r\n opts?: ClientPostParams,\r\n): Promise<T | undefined> => {\r\n const res = await post<T>(url, opts);\r\n if (res.success) {\r\n return res.data;\r\n }\r\n if (opts?.showError) {\r\n opts.showError(res.msg ?? \"Post request error!\");\r\n return;\r\n }\r\n throw Error(res.msg ?? \"Post request error!\");\r\n};\r\n\r\n/** POST 请求,返回 boolean */\r\nexport const iPostSuccess = async (\r\n url: string,\r\n opts?: ClientPostParams,\r\n): Promise<boolean> => {\r\n const res = await post(url, opts);\r\n if (res.success) {\r\n if (opts?.showSuccess) opts.showSuccess(res.msg ?? \"SUCCESS\");\r\n return true;\r\n }\r\n if (opts?.showError) opts.showError(res.msg ?? \"Post request error!\");\r\n return false;\r\n};\r\n","import type { Member, FriendLink, LinkGroup, I18NWebsite, Webchannel, WebsiteInfo } from \"./types/site\"\r\nimport type { ProductContent } from \"./types/cms-product\"\r\nimport type { PageInfo, PageParams } from \"./types/cms-base\"\r\nimport type { NewsContent } from \"./types/cms-news\"\r\nimport type { PhotoContent } from \"./types/cms-photo\"\r\nimport type { VideoContent } from \"./types/cms-video\"\r\nimport type { ActivityContent } from \"./types/cms-activity\"\r\nimport type { Reviews, SubscribeUser, ContactUs } from \"./types/cms-message\"\r\nimport type { SpecDescription, GoodsItem, GoodsCategory, GoodsTag } from \"./types/cms-mall\"\r\nimport { getLoginUser, ICookies, iGet, iPost, iPostSuccess } from \"./client-helper\"\r\n\r\n\r\nexport class ICMSClient {\r\n private cookies: ICookies | null = null\r\n\r\n constructor() {\r\n }\r\n\r\n setICookies(c: ICookies): ICMSClient {\r\n this.cookies = c;\r\n return this;\r\n }\r\n\r\n // ========== 用户认证 ==========\r\n\r\n async login({ username, password }: Readonly<{ username: string, password: string }>): Promise<Member | undefined> {\r\n await iPost('login', {\r\n data: { username, password }\r\n })\r\n if (this.cookies) {\r\n return getLoginUser(this.cookies)\r\n }\r\n return undefined\r\n }\r\n\r\n async logout(): Promise<void> {\r\n await iPost('logout');\r\n }\r\n\r\n // ========== 用户注册 ==========\r\n\r\n /**\r\n * 注册 C 端会员(手机号/邮箱 + 密码)\r\n * @param username 手机号或邮箱\r\n * @param password 密码\r\n * @param nickname 昵称(可选)\r\n * @returns 注册成功且已登录时返回 Member,否则 undefined\r\n */\r\n async register({ username, password, nickname }: Readonly<{ username: string, password: string, nickname?: string }>): Promise<Member | undefined> {\r\n await iPost('register', {\r\n data: { username, password, nickname }\r\n })\r\n if (this.cookies) {\r\n return getLoginUser(this.cookies)\r\n }\r\n return undefined\r\n }\r\n\r\n /**\r\n * 检查用户名(手机号/邮箱)是否已注册\r\n */\r\n async checkRegistered(username: string): Promise<boolean> {\r\n const result = await iGet<boolean>('checkRegister', {\r\n data: { username }\r\n })\r\n return result ?? false\r\n }\r\n\r\n // ========== 网站信息 ==========\r\n\r\n async loadI18nList(): Promise<Array<I18NWebsite>> {\r\n return (await iGet<Array<I18NWebsite>>(\"loadI18nList\")) ?? []\r\n }\r\n\r\n async loadWebsite(params?: Readonly<{ showNav?: boolean; showFriendLink?: boolean; showI18NList?: boolean }>): Promise<WebsiteInfo | undefined> {\r\n const data: Record<string, string> = {\r\n showNav: String(params?.showNav ?? true),\r\n showFriendLink: String(params?.showFriendLink ?? false),\r\n }\r\n return iGet<WebsiteInfo>(\"loadWebsite\", data)\r\n }\r\n\r\n async loadChannels(params?: Readonly<{ channelNo?: string; showChildren?: boolean }>): Promise<Array<Webchannel>> {\r\n const data: Record<string, string> = {}\r\n if (params?.channelNo) data.channelNo = params.channelNo\r\n if (params?.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return (await iGet<Array<Webchannel>>(\"loadChannels\", data)) ?? []\r\n }\r\n\r\n async loadChannelById(params: Readonly<{ channelId: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { channelId: params.channelId }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelById\", data)\r\n }\r\n\r\n async loadChannelByNo(params: Readonly<{ channelNo: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { channelNo: params.channelNo }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelByNo\", data)\r\n }\r\n\r\n async loadChannelByUri(params: Readonly<{ uri: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { uri: params.uri }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelByUri\", data)\r\n }\r\n\r\n // ========== 产品 ==========\r\n\r\n async loadProductDetail(proId: string): Promise<ProductContent | undefined> {\r\n return iGet<ProductContent>(\"loadProductDetail\", { data: { proId } })\r\n }\r\n\r\n async loadProductPageInfo(params: Readonly<{ channelId?: string; keyword?: string } & PageParams>): Promise<PageInfo<ProductContent> | undefined> {\r\n return iGet<PageInfo<ProductContent>>(\"loadProductPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadProductPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<ProductContent> | undefined> {\r\n return iGet<PageInfo<ProductContent>>(\"loadProductPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadProductListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<ProductContent>> {\r\n return (await iGet<Array<ProductContent>>(\"loadProductListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 图文 ==========\r\n\r\n async loadNewsDetail(newId: string): Promise<NewsContent | undefined> {\r\n return iGet<NewsContent>(\"loadNewsDetail\", { data: { newId } })\r\n }\r\n\r\n async loadNewsPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<NewsContent> | undefined> {\r\n return iGet<PageInfo<NewsContent>>(\"loadNewsPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadNewsPageInfoByGroupId(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<NewsContent> | undefined> {\r\n return iGet<PageInfo<NewsContent>>(\"loadNewsPageInfoByGroupId\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadNewsListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<NewsContent>> {\r\n return (await iGet<Array<NewsContent>>(\"loadNewsListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 相册 ==========\r\n\r\n async loadPhotoDetail(photoId: string): Promise<PhotoContent | undefined> {\r\n return iGet<PhotoContent>(\"loadPhotoDetail\", { data: { photoId } })\r\n }\r\n\r\n async loadPhotoPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<PhotoContent> | undefined> {\r\n return iGet<PageInfo<PhotoContent>>(\"loadPhotoPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadPhotoPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<PhotoContent> | undefined> {\r\n return iGet<PageInfo<PhotoContent>>(\"loadPhotoPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadPhotoListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<PhotoContent>> {\r\n return (await iGet<Array<PhotoContent>>(\"loadPhotoListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 视频 ==========\r\n\r\n async loadVideoDetail(videoId: string): Promise<VideoContent | undefined> {\r\n return iGet<VideoContent>(\"loadVideoDetail\", { data: { videoId } })\r\n }\r\n\r\n async loadVideoPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<VideoContent> | undefined> {\r\n return iGet<PageInfo<VideoContent>>(\"loadVideoPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadVideoPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<VideoContent> | undefined> {\r\n return iGet<PageInfo<VideoContent>>(\"loadVideoPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadVideoListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<VideoContent>> {\r\n return (await iGet<Array<VideoContent>>(\"loadVideoListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 活动 ==========\r\n\r\n async loadActivityDetail(activityId: string): Promise<ActivityContent | undefined> {\r\n return iGet<ActivityContent>(\"loadActivityDetail\", { data: { activityId } })\r\n }\r\n\r\n async loadActivityPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<ActivityContent> | undefined> {\r\n return iGet<PageInfo<ActivityContent>>(\"loadActivityPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadActivityPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<ActivityContent> | undefined> {\r\n return iGet<PageInfo<ActivityContent>>(\"loadActivityPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadActivityListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<ActivityContent>> {\r\n return (await iGet<Array<ActivityContent>>(\"loadActivityListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 评论/订阅/联系 ==========\r\n\r\n async loadReviewList(params: Readonly<{ entityNo?: string; rowCount?: string }>): Promise<Array<Reviews>> {\r\n return (await iGet<Array<Reviews>>(\"loadReviewList\", { data: { ...params } })) ?? []\r\n }\r\n\r\n async submitComment(data: Readonly<Partial<Reviews>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitComment\", data as Record<string, any>)\r\n }\r\n\r\n async subscribe(data: Readonly<Pick<SubscribeUser, 'email'> & Partial<Pick<SubscribeUser, 'nickname'>>>): Promise<boolean> {\r\n return await iPostSuccess(\"subscribe\", data as Record<string, any>)\r\n }\r\n\r\n async submitContactUs(data: Readonly<Partial<ContactUs>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitContactUs\", data as Record<string, any>)\r\n }\r\n\r\n // ========== 友链 ==========\r\n\r\n async loadLinkGroups(): Promise<Array<LinkGroup>> {\r\n return (await iGet<Array<LinkGroup>>(\"loadLinkGroups\")) ?? []\r\n }\r\n\r\n async loadFriendLinks(count?: number): Promise<Array<FriendLink>> {\r\n return (await iGet<Array<FriendLink>>(\"loadFriendLinks\", { data: count ? { count: String(count) } : {} })) ?? []\r\n }\r\n\r\n async submitLink(data: Readonly<Pick<FriendLink, 'name' | 'url'> & Partial<Pick<FriendLink, 'description'>>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitLink\", data as Record<string, any>)\r\n }\r\n\r\n // ========== 商城 ==========\r\n\r\n async getSpecDescription(code: string): Promise<SpecDescription | undefined> {\r\n return iGet<SpecDescription>(\"getSpecDescription\", { data: { code } })\r\n }\r\n\r\n /** 获取商品标签字典 */\r\n async loadGoodsTagList(): Promise<Array<GoodsTag>> {\r\n return (await iGet<Array<GoodsTag>>(\"getGoodsTagList\")) ?? []\r\n }\r\n\r\n /** 获取所有货架(类目)列表 */\r\n async loadGoodsShelves(): Promise<Array<GoodsCategory>> {\r\n return (await iGet<Array<GoodsCategory>>(\"getGoodsShelves\")) ?? []\r\n }\r\n\r\n /** 获取指定货架的商品列表 */\r\n async loadCategoryGoods(params?: Readonly<{ cateCode: string; count?: number }>): Promise<Array<GoodsItem>> {\r\n const data: Record<string, string> = {}\r\n if (params?.cateCode) data.cateCode = params.cateCode\r\n if (params?.count !== undefined) data.count = String(params.count)\r\n return (await iGet<Array<GoodsItem>>(\"getCategoryGoods\", { data })) ?? []\r\n }\r\n\r\n /** 分页搜索商品 */\r\n async searchGoods(params: Readonly<{ cateCode?: string; keyword?: string } & PageParams>): Promise<PageInfo<GoodsItem> | undefined> {\r\n return iGet<PageInfo<GoodsItem>>(\"searchGoods\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n}\r\n\r\nexport const icmsClient = new ICMSClient()\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"icms-api.client.cjs.js","names":["body: string | FormData","data: Record<string, string>"],"sources":["../src/client-helper.ts","../src/client.ts"],"sourcesContent":["/**\r\n * 客户端 HTTP 辅助函数\r\n * 从 @rock.chen/icms-http-client/web-client 内联,\r\n * 避免引入 pino/pino-pretty/sonic-boom 等 Node.js 服务端模块\r\n */\r\n\r\n// ---- 类型 ----\r\n\r\n/** Cookie 读写接口 */\r\nexport interface ICookies {\r\n get(key: string): string | undefined;\r\n set?(key: string, value: string): void;\r\n delete?(key: string): void;\r\n}\r\n\r\n/** API 返回模型 */\r\nexport interface ResultModel<T = unknown> {\r\n code: number;\r\n success: boolean;\r\n msg: string;\r\n data?: T;\r\n headers?: Record<string, string>;\r\n}\r\n\r\n/** GET 请求参数 */\r\nexport interface ClientGetParams {\r\n data?: Record<string, string>;\r\n headers?: Record<string, string>;\r\n useCache?: boolean;\r\n showError?: (msg: string) => void;\r\n}\r\n\r\n/** POST 请求参数 */\r\nexport interface ClientPostParams {\r\n data?: Record<string, unknown> | FormData;\r\n headers?: Record<string, string>;\r\n showError?: (msg: string) => void;\r\n showSuccess?: (msg: string) => void;\r\n}\r\n\r\n/** Cookie 名称常量 */\r\nexport const COOKIE_NAMES = {\r\n IBOOT_DEVICE_ID: \"dvid\",\r\n IBOOT_LANG: \"lang\",\r\n IBOOT_WEBSITE_ID: \"wid\",\r\n IBOOT_WEBSITE_NO: \"wno\",\r\n IBOOT_TOKEN: \"token\",\r\n IBOOT_USER: \"user\",\r\n} as const;\r\n\r\n/** Content-Type 常量 */\r\nexport const CONTENT_TYPE_KEY = \"Content-Type\";\r\nexport const CONTENT_TYPE_MAP = {\r\n applicationJson: \"application/json\",\r\n multipartFormData: \"multipart/form-data\",\r\n applicationXwwwFormUrlencoded: \"application/x-www-form-urlencoded\",\r\n} as const;\r\n\r\n/** 用户信息 */\r\nexport interface User {\r\n id: string;\r\n name: string;\r\n userType: number;\r\n username?: string;\r\n nickname?: string;\r\n sex?: number;\r\n headImg?: string;\r\n lastLoginTime?: string;\r\n tokenExpired?: string;\r\n deviceId?: string;\r\n status?: number;\r\n accountType?: number;\r\n enabled?: boolean;\r\n userFrom?: number;\r\n needToReview?: boolean;\r\n socketOnline?: boolean;\r\n createTime?: string;\r\n mustChangePwd?: boolean;\r\n}\r\n\r\n// ---- Logger(浏览器 console 实现,唔引入 pino) ----\r\n\r\nconst logger = {\r\n info: (msg: unknown, tag: string) => {\r\n if (process.env.NODE_ENV !== \"production\") console.info(tag, msg);\r\n },\r\n debug: (msg: unknown, tag: string) => {\r\n if (process.env.NODE_ENV !== \"production\") console.debug(tag, msg);\r\n },\r\n error: (msg: unknown) => {\r\n console.error(msg);\r\n },\r\n};\r\n\r\n// ---- 函数 ----\r\n\r\n/** 从 cookie 中读取已登录用户信息 */\r\nexport const getLoginUser = (cookies: ICookies): User | undefined => {\r\n if (cookies.get) {\r\n const userjson = cookies.get(COOKIE_NAMES.IBOOT_USER);\r\n if (userjson && userjson.length > 0) {\r\n return JSON.parse(userjson);\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nconst getBaseUrl = (urlName: string) => {\r\n const baseUrl = process.env.BASE_URL || \"/api/services\";\r\n return `${baseUrl}?m=${urlName}`;\r\n};\r\n\r\n/** 客户端 GET 请求 */\r\nconst get = async <T>(\r\n urlName: string,\r\n opts?: ClientGetParams,\r\n): Promise<ResultModel<T>> => {\r\n let url = getBaseUrl(urlName);\r\n if (opts?.data) {\r\n const params = new URLSearchParams(opts.data);\r\n url += `&${params}`;\r\n }\r\n const heads = opts?.headers;\r\n logger.info({ url, headers: heads }, \"GET\");\r\n const res = await fetch(url, {\r\n method: \"GET\",\r\n headers: heads,\r\n cache: opts?.useCache ? \"force-cache\" : \"default\",\r\n });\r\n\r\n if (res.ok) {\r\n const headersMap = Object.fromEntries(res.headers.entries());\r\n const result = { ...(await res.json()), headers: headersMap };\r\n logger.debug(result, \"GET_RESULT\");\r\n return result;\r\n }\r\n const msg = { code: res.status, success: false, msg: res.statusText };\r\n logger.error(msg);\r\n return msg;\r\n};\r\n\r\n/** 客户端 POST 请求 */\r\nconst post = async <T>(\r\n urlName: string,\r\n opts?: ClientPostParams,\r\n): Promise<ResultModel<T>> => {\r\n const data = opts?.data ?? {};\r\n let body: string | FormData;\r\n const proxyHeaders = new Headers(opts?.headers);\r\n if (!(data instanceof FormData)) {\r\n body = JSON.stringify(data);\r\n proxyHeaders.set(CONTENT_TYPE_KEY, CONTENT_TYPE_MAP.applicationJson);\r\n } else {\r\n body = data;\r\n }\r\n logger.info({ url: urlName, headers: proxyHeaders }, \"POST\");\r\n const res = await fetch(urlName, {\r\n method: \"POST\",\r\n headers: proxyHeaders,\r\n body,\r\n });\r\n\r\n if (res.ok) {\r\n const headersMap = Object.fromEntries(res.headers.entries());\r\n const result = { ...(await res.json()), headers: headersMap };\r\n logger.debug(result, \"POST_RESULT\");\r\n return result;\r\n }\r\n const msg = { code: res.status, success: false, msg: res.statusText };\r\n logger.error(msg);\r\n return msg;\r\n};\r\n\r\n/** GET 请求快捷方法(自动解包 data) */\r\nexport const iGet = async <T>(\r\n url: string,\r\n opts?: ClientGetParams,\r\n): Promise<T | undefined> => {\r\n const res = await get<T>(url, opts);\r\n if (res.success) {\r\n return res.data as T;\r\n }\r\n if (opts?.showError) {\r\n opts.showError(res.msg ?? \"Get request error!\");\r\n return;\r\n }\r\n throw Error(res.msg ?? \"Get request error!\");\r\n};\r\n\r\n/** POST 请求快捷方法(自动解包 data) */\r\nexport const iPost = async <T>(\r\n url: string,\r\n opts?: ClientPostParams,\r\n): Promise<T | undefined> => {\r\n const res = await post<T>(url, opts);\r\n if (res.success) {\r\n return res.data;\r\n }\r\n if (opts?.showError) {\r\n opts.showError(res.msg ?? \"Post request error!\");\r\n return;\r\n }\r\n throw Error(res.msg ?? \"Post request error!\");\r\n};\r\n\r\n/** POST 请求,返回 boolean */\r\nexport const iPostSuccess = async (\r\n url: string,\r\n opts?: ClientPostParams,\r\n): Promise<boolean> => {\r\n const res = await post(url, opts);\r\n if (res.success) {\r\n if (opts?.showSuccess) opts.showSuccess(res.msg ?? \"SUCCESS\");\r\n return true;\r\n }\r\n if (opts?.showError) opts.showError(res.msg ?? \"Post request error!\");\r\n return false;\r\n};\r\n","import type { Member, FriendLink, LinkGroup, I18NWebsite, Webchannel, WebsiteInfo } from \"./types/site\"\r\nimport type { ProductContent } from \"./types/cms-product\"\r\nimport type { PageInfo, PageParams } from \"./types/cms-base\"\r\nimport type { NewsContent } from \"./types/cms-news\"\r\nimport type { PhotoContent } from \"./types/cms-photo\"\r\nimport type { VideoContent } from \"./types/cms-video\"\r\nimport type { ActivityContent } from \"./types/cms-activity\"\r\nimport type { Reviews, SubscribeUser, ContactUs } from \"./types/cms-message\"\r\nimport type { SpecDescription, GoodsItem, GoodsCategory, GoodsTag } from \"./types/cms-mall\"\r\nimport { getLoginUser, ICookies, iGet, iPost, iPostSuccess } from \"./client-helper\"\r\n\r\n\r\nexport class ICMSClient {\r\n private cookies: ICookies | null = null\r\n\r\n constructor() {\r\n }\r\n\r\n setICookies(c: ICookies): ICMSClient {\r\n this.cookies = c;\r\n return this;\r\n }\r\n\r\n // ========== 用户认证 ==========\r\n\r\n async login({ username, password }: Readonly<{ username: string, password: string }>): Promise<Member | undefined> {\r\n await iPost('login', {\r\n data: { username, password }\r\n })\r\n if (this.cookies) {\r\n return getLoginUser(this.cookies)\r\n }\r\n return undefined\r\n }\r\n\r\n async logout(): Promise<void> {\r\n await iPost('logout');\r\n }\r\n\r\n // ========== 用户注册 ==========\r\n\r\n /**\r\n * 注册 C 端会员(手机号/邮箱 + 密码)\r\n * @param username 手机号或邮箱\r\n * @param password 密码\r\n * @param nickname 昵称(可选)\r\n * @returns 注册成功且已登录时返回 Member,否则 undefined\r\n */\r\n async register({ username, password, nickname }: Readonly<{ username: string, password: string, nickname?: string }>): Promise<Member | undefined> {\r\n await iPost('register', {\r\n data: { username, password, nickname }\r\n })\r\n if (this.cookies) {\r\n return getLoginUser(this.cookies)\r\n }\r\n return undefined\r\n }\r\n\r\n /**\r\n * 发送邮箱验证码(注册/找回密码用)\r\n * @param account 邮箱地址\r\n * @returns 是否发送成功\r\n */\r\n async sendVCode(account: string): Promise<boolean> {\r\n const result = await iPost<number>('sendcode', {\r\n data: { account }\r\n })\r\n return result === 1\r\n }\r\n\r\n /**\r\n * 检查用户名(手机号/邮箱)是否已注册\r\n */\r\n async checkRegistered(username: string): Promise<boolean> {\r\n const result = await iGet<boolean>('checkRegister', {\r\n data: { username }\r\n })\r\n return result ?? false\r\n }\r\n\r\n // ========== 网站信息 ==========\r\n\r\n async loadI18nList(): Promise<Array<I18NWebsite>> {\r\n return (await iGet<Array<I18NWebsite>>(\"loadI18nList\")) ?? []\r\n }\r\n\r\n async loadWebsite(params?: Readonly<{ showNav?: boolean; showFriendLink?: boolean; showI18NList?: boolean }>): Promise<WebsiteInfo | undefined> {\r\n const data: Record<string, string> = {\r\n showNav: String(params?.showNav ?? true),\r\n showFriendLink: String(params?.showFriendLink ?? false),\r\n }\r\n return iGet<WebsiteInfo>(\"loadWebsite\", data)\r\n }\r\n\r\n async loadChannels(params?: Readonly<{ channelNo?: string; showChildren?: boolean }>): Promise<Array<Webchannel>> {\r\n const data: Record<string, string> = {}\r\n if (params?.channelNo) data.channelNo = params.channelNo\r\n if (params?.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return (await iGet<Array<Webchannel>>(\"loadChannels\", data)) ?? []\r\n }\r\n\r\n async loadChannelById(params: Readonly<{ channelId: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { channelId: params.channelId }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelById\", data)\r\n }\r\n\r\n async loadChannelByNo(params: Readonly<{ channelNo: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { channelNo: params.channelNo }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelByNo\", data)\r\n }\r\n\r\n async loadChannelByUri(params: Readonly<{ uri: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { uri: params.uri }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelByUri\", data)\r\n }\r\n\r\n // ========== 产品 ==========\r\n\r\n async loadProductDetail(proId: string): Promise<ProductContent | undefined> {\r\n return iGet<ProductContent>(\"loadProductDetail\", { data: { proId } })\r\n }\r\n\r\n async loadProductPageInfo(params: Readonly<{ channelId?: string; keyword?: string } & PageParams>): Promise<PageInfo<ProductContent> | undefined> {\r\n return iGet<PageInfo<ProductContent>>(\"loadProductPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadProductPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<ProductContent> | undefined> {\r\n return iGet<PageInfo<ProductContent>>(\"loadProductPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadProductListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<ProductContent>> {\r\n return (await iGet<Array<ProductContent>>(\"loadProductListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 图文 ==========\r\n\r\n async loadNewsDetail(newId: string): Promise<NewsContent | undefined> {\r\n return iGet<NewsContent>(\"loadNewsDetail\", { data: { newId } })\r\n }\r\n\r\n async loadNewsPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<NewsContent> | undefined> {\r\n return iGet<PageInfo<NewsContent>>(\"loadNewsPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadNewsPageInfoByGroupId(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<NewsContent> | undefined> {\r\n return iGet<PageInfo<NewsContent>>(\"loadNewsPageInfoByGroupId\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadNewsListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<NewsContent>> {\r\n return (await iGet<Array<NewsContent>>(\"loadNewsListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 相册 ==========\r\n\r\n async loadPhotoDetail(photoId: string): Promise<PhotoContent | undefined> {\r\n return iGet<PhotoContent>(\"loadPhotoDetail\", { data: { photoId } })\r\n }\r\n\r\n async loadPhotoPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<PhotoContent> | undefined> {\r\n return iGet<PageInfo<PhotoContent>>(\"loadPhotoPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadPhotoPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<PhotoContent> | undefined> {\r\n return iGet<PageInfo<PhotoContent>>(\"loadPhotoPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadPhotoListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<PhotoContent>> {\r\n return (await iGet<Array<PhotoContent>>(\"loadPhotoListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 视频 ==========\r\n\r\n async loadVideoDetail(videoId: string): Promise<VideoContent | undefined> {\r\n return iGet<VideoContent>(\"loadVideoDetail\", { data: { videoId } })\r\n }\r\n\r\n async loadVideoPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<VideoContent> | undefined> {\r\n return iGet<PageInfo<VideoContent>>(\"loadVideoPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadVideoPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<VideoContent> | undefined> {\r\n return iGet<PageInfo<VideoContent>>(\"loadVideoPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadVideoListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<VideoContent>> {\r\n return (await iGet<Array<VideoContent>>(\"loadVideoListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 活动 ==========\r\n\r\n async loadActivityDetail(activityId: string): Promise<ActivityContent | undefined> {\r\n return iGet<ActivityContent>(\"loadActivityDetail\", { data: { activityId } })\r\n }\r\n\r\n async loadActivityPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<ActivityContent> | undefined> {\r\n return iGet<PageInfo<ActivityContent>>(\"loadActivityPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadActivityPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<ActivityContent> | undefined> {\r\n return iGet<PageInfo<ActivityContent>>(\"loadActivityPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadActivityListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<ActivityContent>> {\r\n return (await iGet<Array<ActivityContent>>(\"loadActivityListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 评论/订阅/联系 ==========\r\n\r\n async loadReviewList(params: Readonly<{ entityNo?: string; rowCount?: string }>): Promise<Array<Reviews>> {\r\n return (await iGet<Array<Reviews>>(\"loadReviewList\", { data: { ...params } })) ?? []\r\n }\r\n\r\n async submitComment(data: Readonly<Partial<Reviews>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitComment\", data as Record<string, any>)\r\n }\r\n\r\n async subscribe(data: Readonly<Pick<SubscribeUser, 'email'> & Partial<Pick<SubscribeUser, 'nickname'>>>): Promise<boolean> {\r\n return await iPostSuccess(\"subscribe\", data as Record<string, any>)\r\n }\r\n\r\n async submitContactUs(data: Readonly<Partial<ContactUs>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitContactUs\", data as Record<string, any>)\r\n }\r\n\r\n // ========== 友链 ==========\r\n\r\n async loadLinkGroups(): Promise<Array<LinkGroup>> {\r\n return (await iGet<Array<LinkGroup>>(\"loadLinkGroups\")) ?? []\r\n }\r\n\r\n async loadFriendLinks(count?: number): Promise<Array<FriendLink>> {\r\n return (await iGet<Array<FriendLink>>(\"loadFriendLinks\", { data: count ? { count: String(count) } : {} })) ?? []\r\n }\r\n\r\n async submitLink(data: Readonly<Pick<FriendLink, 'name' | 'url'> & Partial<Pick<FriendLink, 'description'>>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitLink\", data as Record<string, any>)\r\n }\r\n\r\n // ========== 商城 ==========\r\n\r\n async getSpecDescription(code: string): Promise<SpecDescription | undefined> {\r\n return iGet<SpecDescription>(\"getSpecDescription\", { data: { code } })\r\n }\r\n\r\n /** 获取商品标签字典 */\r\n async loadGoodsTagList(): Promise<Array<GoodsTag>> {\r\n return (await iGet<Array<GoodsTag>>(\"getGoodsTagList\")) ?? []\r\n }\r\n\r\n /** 获取所有货架(类目)列表 */\r\n async loadGoodsShelves(): Promise<Array<GoodsCategory>> {\r\n return (await iGet<Array<GoodsCategory>>(\"getGoodsShelves\")) ?? []\r\n }\r\n\r\n /** 获取指定货架的商品列表 */\r\n async loadCategoryGoods(params?: Readonly<{ cateCode: string; count?: number }>): Promise<Array<GoodsItem>> {\r\n const data: Record<string, string> = {}\r\n if (params?.cateCode) data.cateCode = params.cateCode\r\n if (params?.count !== undefined) data.count = String(params.count)\r\n return (await iGet<Array<GoodsItem>>(\"getCategoryGoods\", { data })) ?? []\r\n }\r\n\r\n /** 分页搜索商品 */\r\n async searchGoods(params: Readonly<{ cateCode?: string; keyword?: string } & PageParams>): Promise<PageInfo<GoodsItem> | undefined> {\r\n return iGet<PageInfo<GoodsItem>>(\"searchGoods\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n}\r\n\r\nexport const icmsClient = new ICMSClient()\r\n"],"mappings":"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"}
@@ -123,6 +123,9 @@ var ICMSClient = class {
123
123
  nickname: a
124
124
  } }), this.cookies) return getLoginUser(this.cookies);
125
125
  }
126
+ async sendVCode(e) {
127
+ return await iPost("sendcode", { data: { account: e } }) === 1;
128
+ }
126
129
  async checkRegistered(e) {
127
130
  return await iGet("checkRegister", { data: { username: e } }) ?? !1;
128
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"icms-api.client.es.js","names":["body: string | FormData","data: Record<string, string>"],"sources":["../src/client-helper.ts","../src/client.ts"],"sourcesContent":["/**\r\n * 客户端 HTTP 辅助函数\r\n * 从 @rock.chen/icms-http-client/web-client 内联,\r\n * 避免引入 pino/pino-pretty/sonic-boom 等 Node.js 服务端模块\r\n */\r\n\r\n// ---- 类型 ----\r\n\r\n/** Cookie 读写接口 */\r\nexport interface ICookies {\r\n get(key: string): string | undefined;\r\n set?(key: string, value: string): void;\r\n delete?(key: string): void;\r\n}\r\n\r\n/** API 返回模型 */\r\nexport interface ResultModel<T = unknown> {\r\n code: number;\r\n success: boolean;\r\n msg: string;\r\n data?: T;\r\n headers?: Record<string, string>;\r\n}\r\n\r\n/** GET 请求参数 */\r\nexport interface ClientGetParams {\r\n data?: Record<string, string>;\r\n headers?: Record<string, string>;\r\n useCache?: boolean;\r\n showError?: (msg: string) => void;\r\n}\r\n\r\n/** POST 请求参数 */\r\nexport interface ClientPostParams {\r\n data?: Record<string, unknown> | FormData;\r\n headers?: Record<string, string>;\r\n showError?: (msg: string) => void;\r\n showSuccess?: (msg: string) => void;\r\n}\r\n\r\n/** Cookie 名称常量 */\r\nexport const COOKIE_NAMES = {\r\n IBOOT_DEVICE_ID: \"dvid\",\r\n IBOOT_LANG: \"lang\",\r\n IBOOT_WEBSITE_ID: \"wid\",\r\n IBOOT_WEBSITE_NO: \"wno\",\r\n IBOOT_TOKEN: \"token\",\r\n IBOOT_USER: \"user\",\r\n} as const;\r\n\r\n/** Content-Type 常量 */\r\nexport const CONTENT_TYPE_KEY = \"Content-Type\";\r\nexport const CONTENT_TYPE_MAP = {\r\n applicationJson: \"application/json\",\r\n multipartFormData: \"multipart/form-data\",\r\n applicationXwwwFormUrlencoded: \"application/x-www-form-urlencoded\",\r\n} as const;\r\n\r\n/** 用户信息 */\r\nexport interface User {\r\n id: string;\r\n name: string;\r\n userType: number;\r\n username?: string;\r\n nickname?: string;\r\n sex?: number;\r\n headImg?: string;\r\n lastLoginTime?: string;\r\n tokenExpired?: string;\r\n deviceId?: string;\r\n status?: number;\r\n accountType?: number;\r\n enabled?: boolean;\r\n userFrom?: number;\r\n needToReview?: boolean;\r\n socketOnline?: boolean;\r\n createTime?: string;\r\n mustChangePwd?: boolean;\r\n}\r\n\r\n// ---- Logger(浏览器 console 实现,唔引入 pino) ----\r\n\r\nconst logger = {\r\n info: (msg: unknown, tag: string) => {\r\n if (process.env.NODE_ENV !== \"production\") console.info(tag, msg);\r\n },\r\n debug: (msg: unknown, tag: string) => {\r\n if (process.env.NODE_ENV !== \"production\") console.debug(tag, msg);\r\n },\r\n error: (msg: unknown) => {\r\n console.error(msg);\r\n },\r\n};\r\n\r\n// ---- 函数 ----\r\n\r\n/** 从 cookie 中读取已登录用户信息 */\r\nexport const getLoginUser = (cookies: ICookies): User | undefined => {\r\n if (cookies.get) {\r\n const userjson = cookies.get(COOKIE_NAMES.IBOOT_USER);\r\n if (userjson && userjson.length > 0) {\r\n return JSON.parse(userjson);\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nconst getBaseUrl = (urlName: string) => {\r\n const baseUrl = process.env.BASE_URL || \"/api/services\";\r\n return `${baseUrl}?m=${urlName}`;\r\n};\r\n\r\n/** 客户端 GET 请求 */\r\nconst get = async <T>(\r\n urlName: string,\r\n opts?: ClientGetParams,\r\n): Promise<ResultModel<T>> => {\r\n let url = getBaseUrl(urlName);\r\n if (opts?.data) {\r\n const params = new URLSearchParams(opts.data);\r\n url += `&${params}`;\r\n }\r\n const heads = opts?.headers;\r\n logger.info({ url, headers: heads }, \"GET\");\r\n const res = await fetch(url, {\r\n method: \"GET\",\r\n headers: heads,\r\n cache: opts?.useCache ? \"force-cache\" : \"default\",\r\n });\r\n\r\n if (res.ok) {\r\n const headersMap = Object.fromEntries(res.headers.entries());\r\n const result = { ...(await res.json()), headers: headersMap };\r\n logger.debug(result, \"GET_RESULT\");\r\n return result;\r\n }\r\n const msg = { code: res.status, success: false, msg: res.statusText };\r\n logger.error(msg);\r\n return msg;\r\n};\r\n\r\n/** 客户端 POST 请求 */\r\nconst post = async <T>(\r\n urlName: string,\r\n opts?: ClientPostParams,\r\n): Promise<ResultModel<T>> => {\r\n const data = opts?.data ?? {};\r\n let body: string | FormData;\r\n const proxyHeaders = new Headers(opts?.headers);\r\n if (!(data instanceof FormData)) {\r\n body = JSON.stringify(data);\r\n proxyHeaders.set(CONTENT_TYPE_KEY, CONTENT_TYPE_MAP.applicationJson);\r\n } else {\r\n body = data;\r\n }\r\n logger.info({ url: urlName, headers: proxyHeaders }, \"POST\");\r\n const res = await fetch(urlName, {\r\n method: \"POST\",\r\n headers: proxyHeaders,\r\n body,\r\n });\r\n\r\n if (res.ok) {\r\n const headersMap = Object.fromEntries(res.headers.entries());\r\n const result = { ...(await res.json()), headers: headersMap };\r\n logger.debug(result, \"POST_RESULT\");\r\n return result;\r\n }\r\n const msg = { code: res.status, success: false, msg: res.statusText };\r\n logger.error(msg);\r\n return msg;\r\n};\r\n\r\n/** GET 请求快捷方法(自动解包 data) */\r\nexport const iGet = async <T>(\r\n url: string,\r\n opts?: ClientGetParams,\r\n): Promise<T | undefined> => {\r\n const res = await get<T>(url, opts);\r\n if (res.success) {\r\n return res.data as T;\r\n }\r\n if (opts?.showError) {\r\n opts.showError(res.msg ?? \"Get request error!\");\r\n return;\r\n }\r\n throw Error(res.msg ?? \"Get request error!\");\r\n};\r\n\r\n/** POST 请求快捷方法(自动解包 data) */\r\nexport const iPost = async <T>(\r\n url: string,\r\n opts?: ClientPostParams,\r\n): Promise<T | undefined> => {\r\n const res = await post<T>(url, opts);\r\n if (res.success) {\r\n return res.data;\r\n }\r\n if (opts?.showError) {\r\n opts.showError(res.msg ?? \"Post request error!\");\r\n return;\r\n }\r\n throw Error(res.msg ?? \"Post request error!\");\r\n};\r\n\r\n/** POST 请求,返回 boolean */\r\nexport const iPostSuccess = async (\r\n url: string,\r\n opts?: ClientPostParams,\r\n): Promise<boolean> => {\r\n const res = await post(url, opts);\r\n if (res.success) {\r\n if (opts?.showSuccess) opts.showSuccess(res.msg ?? \"SUCCESS\");\r\n return true;\r\n }\r\n if (opts?.showError) opts.showError(res.msg ?? \"Post request error!\");\r\n return false;\r\n};\r\n","import type { Member, FriendLink, LinkGroup, I18NWebsite, Webchannel, WebsiteInfo } from \"./types/site\"\r\nimport type { ProductContent } from \"./types/cms-product\"\r\nimport type { PageInfo, PageParams } from \"./types/cms-base\"\r\nimport type { NewsContent } from \"./types/cms-news\"\r\nimport type { PhotoContent } from \"./types/cms-photo\"\r\nimport type { VideoContent } from \"./types/cms-video\"\r\nimport type { ActivityContent } from \"./types/cms-activity\"\r\nimport type { Reviews, SubscribeUser, ContactUs } from \"./types/cms-message\"\r\nimport type { SpecDescription, GoodsItem, GoodsCategory, GoodsTag } from \"./types/cms-mall\"\r\nimport { getLoginUser, ICookies, iGet, iPost, iPostSuccess } from \"./client-helper\"\r\n\r\n\r\nexport class ICMSClient {\r\n private cookies: ICookies | null = null\r\n\r\n constructor() {\r\n }\r\n\r\n setICookies(c: ICookies): ICMSClient {\r\n this.cookies = c;\r\n return this;\r\n }\r\n\r\n // ========== 用户认证 ==========\r\n\r\n async login({ username, password }: Readonly<{ username: string, password: string }>): Promise<Member | undefined> {\r\n await iPost('login', {\r\n data: { username, password }\r\n })\r\n if (this.cookies) {\r\n return getLoginUser(this.cookies)\r\n }\r\n return undefined\r\n }\r\n\r\n async logout(): Promise<void> {\r\n await iPost('logout');\r\n }\r\n\r\n // ========== 用户注册 ==========\r\n\r\n /**\r\n * 注册 C 端会员(手机号/邮箱 + 密码)\r\n * @param username 手机号或邮箱\r\n * @param password 密码\r\n * @param nickname 昵称(可选)\r\n * @returns 注册成功且已登录时返回 Member,否则 undefined\r\n */\r\n async register({ username, password, nickname }: Readonly<{ username: string, password: string, nickname?: string }>): Promise<Member | undefined> {\r\n await iPost('register', {\r\n data: { username, password, nickname }\r\n })\r\n if (this.cookies) {\r\n return getLoginUser(this.cookies)\r\n }\r\n return undefined\r\n }\r\n\r\n /**\r\n * 检查用户名(手机号/邮箱)是否已注册\r\n */\r\n async checkRegistered(username: string): Promise<boolean> {\r\n const result = await iGet<boolean>('checkRegister', {\r\n data: { username }\r\n })\r\n return result ?? false\r\n }\r\n\r\n // ========== 网站信息 ==========\r\n\r\n async loadI18nList(): Promise<Array<I18NWebsite>> {\r\n return (await iGet<Array<I18NWebsite>>(\"loadI18nList\")) ?? []\r\n }\r\n\r\n async loadWebsite(params?: Readonly<{ showNav?: boolean; showFriendLink?: boolean; showI18NList?: boolean }>): Promise<WebsiteInfo | undefined> {\r\n const data: Record<string, string> = {\r\n showNav: String(params?.showNav ?? true),\r\n showFriendLink: String(params?.showFriendLink ?? false),\r\n }\r\n return iGet<WebsiteInfo>(\"loadWebsite\", data)\r\n }\r\n\r\n async loadChannels(params?: Readonly<{ channelNo?: string; showChildren?: boolean }>): Promise<Array<Webchannel>> {\r\n const data: Record<string, string> = {}\r\n if (params?.channelNo) data.channelNo = params.channelNo\r\n if (params?.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return (await iGet<Array<Webchannel>>(\"loadChannels\", data)) ?? []\r\n }\r\n\r\n async loadChannelById(params: Readonly<{ channelId: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { channelId: params.channelId }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelById\", data)\r\n }\r\n\r\n async loadChannelByNo(params: Readonly<{ channelNo: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { channelNo: params.channelNo }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelByNo\", data)\r\n }\r\n\r\n async loadChannelByUri(params: Readonly<{ uri: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { uri: params.uri }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelByUri\", data)\r\n }\r\n\r\n // ========== 产品 ==========\r\n\r\n async loadProductDetail(proId: string): Promise<ProductContent | undefined> {\r\n return iGet<ProductContent>(\"loadProductDetail\", { data: { proId } })\r\n }\r\n\r\n async loadProductPageInfo(params: Readonly<{ channelId?: string; keyword?: string } & PageParams>): Promise<PageInfo<ProductContent> | undefined> {\r\n return iGet<PageInfo<ProductContent>>(\"loadProductPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadProductPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<ProductContent> | undefined> {\r\n return iGet<PageInfo<ProductContent>>(\"loadProductPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadProductListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<ProductContent>> {\r\n return (await iGet<Array<ProductContent>>(\"loadProductListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 图文 ==========\r\n\r\n async loadNewsDetail(newId: string): Promise<NewsContent | undefined> {\r\n return iGet<NewsContent>(\"loadNewsDetail\", { data: { newId } })\r\n }\r\n\r\n async loadNewsPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<NewsContent> | undefined> {\r\n return iGet<PageInfo<NewsContent>>(\"loadNewsPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadNewsPageInfoByGroupId(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<NewsContent> | undefined> {\r\n return iGet<PageInfo<NewsContent>>(\"loadNewsPageInfoByGroupId\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadNewsListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<NewsContent>> {\r\n return (await iGet<Array<NewsContent>>(\"loadNewsListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 相册 ==========\r\n\r\n async loadPhotoDetail(photoId: string): Promise<PhotoContent | undefined> {\r\n return iGet<PhotoContent>(\"loadPhotoDetail\", { data: { photoId } })\r\n }\r\n\r\n async loadPhotoPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<PhotoContent> | undefined> {\r\n return iGet<PageInfo<PhotoContent>>(\"loadPhotoPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadPhotoPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<PhotoContent> | undefined> {\r\n return iGet<PageInfo<PhotoContent>>(\"loadPhotoPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadPhotoListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<PhotoContent>> {\r\n return (await iGet<Array<PhotoContent>>(\"loadPhotoListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 视频 ==========\r\n\r\n async loadVideoDetail(videoId: string): Promise<VideoContent | undefined> {\r\n return iGet<VideoContent>(\"loadVideoDetail\", { data: { videoId } })\r\n }\r\n\r\n async loadVideoPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<VideoContent> | undefined> {\r\n return iGet<PageInfo<VideoContent>>(\"loadVideoPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadVideoPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<VideoContent> | undefined> {\r\n return iGet<PageInfo<VideoContent>>(\"loadVideoPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadVideoListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<VideoContent>> {\r\n return (await iGet<Array<VideoContent>>(\"loadVideoListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 活动 ==========\r\n\r\n async loadActivityDetail(activityId: string): Promise<ActivityContent | undefined> {\r\n return iGet<ActivityContent>(\"loadActivityDetail\", { data: { activityId } })\r\n }\r\n\r\n async loadActivityPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<ActivityContent> | undefined> {\r\n return iGet<PageInfo<ActivityContent>>(\"loadActivityPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadActivityPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<ActivityContent> | undefined> {\r\n return iGet<PageInfo<ActivityContent>>(\"loadActivityPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadActivityListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<ActivityContent>> {\r\n return (await iGet<Array<ActivityContent>>(\"loadActivityListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 评论/订阅/联系 ==========\r\n\r\n async loadReviewList(params: Readonly<{ entityNo?: string; rowCount?: string }>): Promise<Array<Reviews>> {\r\n return (await iGet<Array<Reviews>>(\"loadReviewList\", { data: { ...params } })) ?? []\r\n }\r\n\r\n async submitComment(data: Readonly<Partial<Reviews>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitComment\", data as Record<string, any>)\r\n }\r\n\r\n async subscribe(data: Readonly<Pick<SubscribeUser, 'email'> & Partial<Pick<SubscribeUser, 'nickname'>>>): Promise<boolean> {\r\n return await iPostSuccess(\"subscribe\", data as Record<string, any>)\r\n }\r\n\r\n async submitContactUs(data: Readonly<Partial<ContactUs>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitContactUs\", data as Record<string, any>)\r\n }\r\n\r\n // ========== 友链 ==========\r\n\r\n async loadLinkGroups(): Promise<Array<LinkGroup>> {\r\n return (await iGet<Array<LinkGroup>>(\"loadLinkGroups\")) ?? []\r\n }\r\n\r\n async loadFriendLinks(count?: number): Promise<Array<FriendLink>> {\r\n return (await iGet<Array<FriendLink>>(\"loadFriendLinks\", { data: count ? { count: String(count) } : {} })) ?? []\r\n }\r\n\r\n async submitLink(data: Readonly<Pick<FriendLink, 'name' | 'url'> & Partial<Pick<FriendLink, 'description'>>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitLink\", data as Record<string, any>)\r\n }\r\n\r\n // ========== 商城 ==========\r\n\r\n async getSpecDescription(code: string): Promise<SpecDescription | undefined> {\r\n return iGet<SpecDescription>(\"getSpecDescription\", { data: { code } })\r\n }\r\n\r\n /** 获取商品标签字典 */\r\n async loadGoodsTagList(): Promise<Array<GoodsTag>> {\r\n return (await iGet<Array<GoodsTag>>(\"getGoodsTagList\")) ?? []\r\n }\r\n\r\n /** 获取所有货架(类目)列表 */\r\n async loadGoodsShelves(): Promise<Array<GoodsCategory>> {\r\n return (await iGet<Array<GoodsCategory>>(\"getGoodsShelves\")) ?? []\r\n }\r\n\r\n /** 获取指定货架的商品列表 */\r\n async loadCategoryGoods(params?: Readonly<{ cateCode: string; count?: number }>): Promise<Array<GoodsItem>> {\r\n const data: Record<string, string> = {}\r\n if (params?.cateCode) data.cateCode = params.cateCode\r\n if (params?.count !== undefined) data.count = String(params.count)\r\n return (await iGet<Array<GoodsItem>>(\"getCategoryGoods\", { data })) ?? []\r\n }\r\n\r\n /** 分页搜索商品 */\r\n async searchGoods(params: Readonly<{ cateCode?: string; keyword?: string } & PageParams>): Promise<PageInfo<GoodsItem> | undefined> {\r\n return iGet<PageInfo<GoodsItem>>(\"searchGoods\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n}\r\n\r\nexport const icmsClient = new ICMSClient()\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"icms-api.client.es.js","names":["body: string | FormData","data: Record<string, string>"],"sources":["../src/client-helper.ts","../src/client.ts"],"sourcesContent":["/**\r\n * 客户端 HTTP 辅助函数\r\n * 从 @rock.chen/icms-http-client/web-client 内联,\r\n * 避免引入 pino/pino-pretty/sonic-boom 等 Node.js 服务端模块\r\n */\r\n\r\n// ---- 类型 ----\r\n\r\n/** Cookie 读写接口 */\r\nexport interface ICookies {\r\n get(key: string): string | undefined;\r\n set?(key: string, value: string): void;\r\n delete?(key: string): void;\r\n}\r\n\r\n/** API 返回模型 */\r\nexport interface ResultModel<T = unknown> {\r\n code: number;\r\n success: boolean;\r\n msg: string;\r\n data?: T;\r\n headers?: Record<string, string>;\r\n}\r\n\r\n/** GET 请求参数 */\r\nexport interface ClientGetParams {\r\n data?: Record<string, string>;\r\n headers?: Record<string, string>;\r\n useCache?: boolean;\r\n showError?: (msg: string) => void;\r\n}\r\n\r\n/** POST 请求参数 */\r\nexport interface ClientPostParams {\r\n data?: Record<string, unknown> | FormData;\r\n headers?: Record<string, string>;\r\n showError?: (msg: string) => void;\r\n showSuccess?: (msg: string) => void;\r\n}\r\n\r\n/** Cookie 名称常量 */\r\nexport const COOKIE_NAMES = {\r\n IBOOT_DEVICE_ID: \"dvid\",\r\n IBOOT_LANG: \"lang\",\r\n IBOOT_WEBSITE_ID: \"wid\",\r\n IBOOT_WEBSITE_NO: \"wno\",\r\n IBOOT_TOKEN: \"token\",\r\n IBOOT_USER: \"user\",\r\n} as const;\r\n\r\n/** Content-Type 常量 */\r\nexport const CONTENT_TYPE_KEY = \"Content-Type\";\r\nexport const CONTENT_TYPE_MAP = {\r\n applicationJson: \"application/json\",\r\n multipartFormData: \"multipart/form-data\",\r\n applicationXwwwFormUrlencoded: \"application/x-www-form-urlencoded\",\r\n} as const;\r\n\r\n/** 用户信息 */\r\nexport interface User {\r\n id: string;\r\n name: string;\r\n userType: number;\r\n username?: string;\r\n nickname?: string;\r\n sex?: number;\r\n headImg?: string;\r\n lastLoginTime?: string;\r\n tokenExpired?: string;\r\n deviceId?: string;\r\n status?: number;\r\n accountType?: number;\r\n enabled?: boolean;\r\n userFrom?: number;\r\n needToReview?: boolean;\r\n socketOnline?: boolean;\r\n createTime?: string;\r\n mustChangePwd?: boolean;\r\n}\r\n\r\n// ---- Logger(浏览器 console 实现,唔引入 pino) ----\r\n\r\nconst logger = {\r\n info: (msg: unknown, tag: string) => {\r\n if (process.env.NODE_ENV !== \"production\") console.info(tag, msg);\r\n },\r\n debug: (msg: unknown, tag: string) => {\r\n if (process.env.NODE_ENV !== \"production\") console.debug(tag, msg);\r\n },\r\n error: (msg: unknown) => {\r\n console.error(msg);\r\n },\r\n};\r\n\r\n// ---- 函数 ----\r\n\r\n/** 从 cookie 中读取已登录用户信息 */\r\nexport const getLoginUser = (cookies: ICookies): User | undefined => {\r\n if (cookies.get) {\r\n const userjson = cookies.get(COOKIE_NAMES.IBOOT_USER);\r\n if (userjson && userjson.length > 0) {\r\n return JSON.parse(userjson);\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nconst getBaseUrl = (urlName: string) => {\r\n const baseUrl = process.env.BASE_URL || \"/api/services\";\r\n return `${baseUrl}?m=${urlName}`;\r\n};\r\n\r\n/** 客户端 GET 请求 */\r\nconst get = async <T>(\r\n urlName: string,\r\n opts?: ClientGetParams,\r\n): Promise<ResultModel<T>> => {\r\n let url = getBaseUrl(urlName);\r\n if (opts?.data) {\r\n const params = new URLSearchParams(opts.data);\r\n url += `&${params}`;\r\n }\r\n const heads = opts?.headers;\r\n logger.info({ url, headers: heads }, \"GET\");\r\n const res = await fetch(url, {\r\n method: \"GET\",\r\n headers: heads,\r\n cache: opts?.useCache ? \"force-cache\" : \"default\",\r\n });\r\n\r\n if (res.ok) {\r\n const headersMap = Object.fromEntries(res.headers.entries());\r\n const result = { ...(await res.json()), headers: headersMap };\r\n logger.debug(result, \"GET_RESULT\");\r\n return result;\r\n }\r\n const msg = { code: res.status, success: false, msg: res.statusText };\r\n logger.error(msg);\r\n return msg;\r\n};\r\n\r\n/** 客户端 POST 请求 */\r\nconst post = async <T>(\r\n urlName: string,\r\n opts?: ClientPostParams,\r\n): Promise<ResultModel<T>> => {\r\n const data = opts?.data ?? {};\r\n let body: string | FormData;\r\n const proxyHeaders = new Headers(opts?.headers);\r\n if (!(data instanceof FormData)) {\r\n body = JSON.stringify(data);\r\n proxyHeaders.set(CONTENT_TYPE_KEY, CONTENT_TYPE_MAP.applicationJson);\r\n } else {\r\n body = data;\r\n }\r\n logger.info({ url: urlName, headers: proxyHeaders }, \"POST\");\r\n const res = await fetch(urlName, {\r\n method: \"POST\",\r\n headers: proxyHeaders,\r\n body,\r\n });\r\n\r\n if (res.ok) {\r\n const headersMap = Object.fromEntries(res.headers.entries());\r\n const result = { ...(await res.json()), headers: headersMap };\r\n logger.debug(result, \"POST_RESULT\");\r\n return result;\r\n }\r\n const msg = { code: res.status, success: false, msg: res.statusText };\r\n logger.error(msg);\r\n return msg;\r\n};\r\n\r\n/** GET 请求快捷方法(自动解包 data) */\r\nexport const iGet = async <T>(\r\n url: string,\r\n opts?: ClientGetParams,\r\n): Promise<T | undefined> => {\r\n const res = await get<T>(url, opts);\r\n if (res.success) {\r\n return res.data as T;\r\n }\r\n if (opts?.showError) {\r\n opts.showError(res.msg ?? \"Get request error!\");\r\n return;\r\n }\r\n throw Error(res.msg ?? \"Get request error!\");\r\n};\r\n\r\n/** POST 请求快捷方法(自动解包 data) */\r\nexport const iPost = async <T>(\r\n url: string,\r\n opts?: ClientPostParams,\r\n): Promise<T | undefined> => {\r\n const res = await post<T>(url, opts);\r\n if (res.success) {\r\n return res.data;\r\n }\r\n if (opts?.showError) {\r\n opts.showError(res.msg ?? \"Post request error!\");\r\n return;\r\n }\r\n throw Error(res.msg ?? \"Post request error!\");\r\n};\r\n\r\n/** POST 请求,返回 boolean */\r\nexport const iPostSuccess = async (\r\n url: string,\r\n opts?: ClientPostParams,\r\n): Promise<boolean> => {\r\n const res = await post(url, opts);\r\n if (res.success) {\r\n if (opts?.showSuccess) opts.showSuccess(res.msg ?? \"SUCCESS\");\r\n return true;\r\n }\r\n if (opts?.showError) opts.showError(res.msg ?? \"Post request error!\");\r\n return false;\r\n};\r\n","import type { Member, FriendLink, LinkGroup, I18NWebsite, Webchannel, WebsiteInfo } from \"./types/site\"\r\nimport type { ProductContent } from \"./types/cms-product\"\r\nimport type { PageInfo, PageParams } from \"./types/cms-base\"\r\nimport type { NewsContent } from \"./types/cms-news\"\r\nimport type { PhotoContent } from \"./types/cms-photo\"\r\nimport type { VideoContent } from \"./types/cms-video\"\r\nimport type { ActivityContent } from \"./types/cms-activity\"\r\nimport type { Reviews, SubscribeUser, ContactUs } from \"./types/cms-message\"\r\nimport type { SpecDescription, GoodsItem, GoodsCategory, GoodsTag } from \"./types/cms-mall\"\r\nimport { getLoginUser, ICookies, iGet, iPost, iPostSuccess } from \"./client-helper\"\r\n\r\n\r\nexport class ICMSClient {\r\n private cookies: ICookies | null = null\r\n\r\n constructor() {\r\n }\r\n\r\n setICookies(c: ICookies): ICMSClient {\r\n this.cookies = c;\r\n return this;\r\n }\r\n\r\n // ========== 用户认证 ==========\r\n\r\n async login({ username, password }: Readonly<{ username: string, password: string }>): Promise<Member | undefined> {\r\n await iPost('login', {\r\n data: { username, password }\r\n })\r\n if (this.cookies) {\r\n return getLoginUser(this.cookies)\r\n }\r\n return undefined\r\n }\r\n\r\n async logout(): Promise<void> {\r\n await iPost('logout');\r\n }\r\n\r\n // ========== 用户注册 ==========\r\n\r\n /**\r\n * 注册 C 端会员(手机号/邮箱 + 密码)\r\n * @param username 手机号或邮箱\r\n * @param password 密码\r\n * @param nickname 昵称(可选)\r\n * @returns 注册成功且已登录时返回 Member,否则 undefined\r\n */\r\n async register({ username, password, nickname }: Readonly<{ username: string, password: string, nickname?: string }>): Promise<Member | undefined> {\r\n await iPost('register', {\r\n data: { username, password, nickname }\r\n })\r\n if (this.cookies) {\r\n return getLoginUser(this.cookies)\r\n }\r\n return undefined\r\n }\r\n\r\n /**\r\n * 发送邮箱验证码(注册/找回密码用)\r\n * @param account 邮箱地址\r\n * @returns 是否发送成功\r\n */\r\n async sendVCode(account: string): Promise<boolean> {\r\n const result = await iPost<number>('sendcode', {\r\n data: { account }\r\n })\r\n return result === 1\r\n }\r\n\r\n /**\r\n * 检查用户名(手机号/邮箱)是否已注册\r\n */\r\n async checkRegistered(username: string): Promise<boolean> {\r\n const result = await iGet<boolean>('checkRegister', {\r\n data: { username }\r\n })\r\n return result ?? false\r\n }\r\n\r\n // ========== 网站信息 ==========\r\n\r\n async loadI18nList(): Promise<Array<I18NWebsite>> {\r\n return (await iGet<Array<I18NWebsite>>(\"loadI18nList\")) ?? []\r\n }\r\n\r\n async loadWebsite(params?: Readonly<{ showNav?: boolean; showFriendLink?: boolean; showI18NList?: boolean }>): Promise<WebsiteInfo | undefined> {\r\n const data: Record<string, string> = {\r\n showNav: String(params?.showNav ?? true),\r\n showFriendLink: String(params?.showFriendLink ?? false),\r\n }\r\n return iGet<WebsiteInfo>(\"loadWebsite\", data)\r\n }\r\n\r\n async loadChannels(params?: Readonly<{ channelNo?: string; showChildren?: boolean }>): Promise<Array<Webchannel>> {\r\n const data: Record<string, string> = {}\r\n if (params?.channelNo) data.channelNo = params.channelNo\r\n if (params?.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return (await iGet<Array<Webchannel>>(\"loadChannels\", data)) ?? []\r\n }\r\n\r\n async loadChannelById(params: Readonly<{ channelId: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { channelId: params.channelId }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelById\", data)\r\n }\r\n\r\n async loadChannelByNo(params: Readonly<{ channelNo: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { channelNo: params.channelNo }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelByNo\", data)\r\n }\r\n\r\n async loadChannelByUri(params: Readonly<{ uri: string; showChildren?: boolean }>): Promise<Webchannel | undefined> {\r\n const data: Record<string, string> = { uri: params.uri }\r\n if (params.showChildren !== undefined) data.showChildren = String(params.showChildren)\r\n return iGet<Webchannel>(\"loadChannelByUri\", data)\r\n }\r\n\r\n // ========== 产品 ==========\r\n\r\n async loadProductDetail(proId: string): Promise<ProductContent | undefined> {\r\n return iGet<ProductContent>(\"loadProductDetail\", { data: { proId } })\r\n }\r\n\r\n async loadProductPageInfo(params: Readonly<{ channelId?: string; keyword?: string } & PageParams>): Promise<PageInfo<ProductContent> | undefined> {\r\n return iGet<PageInfo<ProductContent>>(\"loadProductPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadProductPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<ProductContent> | undefined> {\r\n return iGet<PageInfo<ProductContent>>(\"loadProductPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadProductListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<ProductContent>> {\r\n return (await iGet<Array<ProductContent>>(\"loadProductListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 图文 ==========\r\n\r\n async loadNewsDetail(newId: string): Promise<NewsContent | undefined> {\r\n return iGet<NewsContent>(\"loadNewsDetail\", { data: { newId } })\r\n }\r\n\r\n async loadNewsPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<NewsContent> | undefined> {\r\n return iGet<PageInfo<NewsContent>>(\"loadNewsPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadNewsPageInfoByGroupId(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<NewsContent> | undefined> {\r\n return iGet<PageInfo<NewsContent>>(\"loadNewsPageInfoByGroupId\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadNewsListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<NewsContent>> {\r\n return (await iGet<Array<NewsContent>>(\"loadNewsListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 相册 ==========\r\n\r\n async loadPhotoDetail(photoId: string): Promise<PhotoContent | undefined> {\r\n return iGet<PhotoContent>(\"loadPhotoDetail\", { data: { photoId } })\r\n }\r\n\r\n async loadPhotoPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<PhotoContent> | undefined> {\r\n return iGet<PageInfo<PhotoContent>>(\"loadPhotoPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadPhotoPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<PhotoContent> | undefined> {\r\n return iGet<PageInfo<PhotoContent>>(\"loadPhotoPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadPhotoListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<PhotoContent>> {\r\n return (await iGet<Array<PhotoContent>>(\"loadPhotoListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 视频 ==========\r\n\r\n async loadVideoDetail(videoId: string): Promise<VideoContent | undefined> {\r\n return iGet<VideoContent>(\"loadVideoDetail\", { data: { videoId } })\r\n }\r\n\r\n async loadVideoPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<VideoContent> | undefined> {\r\n return iGet<PageInfo<VideoContent>>(\"loadVideoPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadVideoPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<VideoContent> | undefined> {\r\n return iGet<PageInfo<VideoContent>>(\"loadVideoPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadVideoListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<VideoContent>> {\r\n return (await iGet<Array<VideoContent>>(\"loadVideoListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 活动 ==========\r\n\r\n async loadActivityDetail(activityId: string): Promise<ActivityContent | undefined> {\r\n return iGet<ActivityContent>(\"loadActivityDetail\", { data: { activityId } })\r\n }\r\n\r\n async loadActivityPageInfo(params: Readonly<{ channelNo?: string; keyword?: string } & PageParams>): Promise<PageInfo<ActivityContent> | undefined> {\r\n return iGet<PageInfo<ActivityContent>>(\"loadActivityPageInfo\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadActivityPageInfoByGroup(params: Readonly<{ groupId: string } & PageParams>): Promise<PageInfo<ActivityContent> | undefined> {\r\n return iGet<PageInfo<ActivityContent>>(\"loadActivityPageInfoByGroup\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n\r\n async loadActivityListByGroupId(params: Readonly<{ groupId: string }>): Promise<Array<ActivityContent>> {\r\n return (await iGet<Array<ActivityContent>>(\"loadActivityListByGroupId\", { data: { groupId: params.groupId } })) ?? []\r\n }\r\n\r\n // ========== 评论/订阅/联系 ==========\r\n\r\n async loadReviewList(params: Readonly<{ entityNo?: string; rowCount?: string }>): Promise<Array<Reviews>> {\r\n return (await iGet<Array<Reviews>>(\"loadReviewList\", { data: { ...params } })) ?? []\r\n }\r\n\r\n async submitComment(data: Readonly<Partial<Reviews>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitComment\", data as Record<string, any>)\r\n }\r\n\r\n async subscribe(data: Readonly<Pick<SubscribeUser, 'email'> & Partial<Pick<SubscribeUser, 'nickname'>>>): Promise<boolean> {\r\n return await iPostSuccess(\"subscribe\", data as Record<string, any>)\r\n }\r\n\r\n async submitContactUs(data: Readonly<Partial<ContactUs>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitContactUs\", data as Record<string, any>)\r\n }\r\n\r\n // ========== 友链 ==========\r\n\r\n async loadLinkGroups(): Promise<Array<LinkGroup>> {\r\n return (await iGet<Array<LinkGroup>>(\"loadLinkGroups\")) ?? []\r\n }\r\n\r\n async loadFriendLinks(count?: number): Promise<Array<FriendLink>> {\r\n return (await iGet<Array<FriendLink>>(\"loadFriendLinks\", { data: count ? { count: String(count) } : {} })) ?? []\r\n }\r\n\r\n async submitLink(data: Readonly<Pick<FriendLink, 'name' | 'url'> & Partial<Pick<FriendLink, 'description'>>>): Promise<boolean> {\r\n return await iPostSuccess(\"submitLink\", data as Record<string, any>)\r\n }\r\n\r\n // ========== 商城 ==========\r\n\r\n async getSpecDescription(code: string): Promise<SpecDescription | undefined> {\r\n return iGet<SpecDescription>(\"getSpecDescription\", { data: { code } })\r\n }\r\n\r\n /** 获取商品标签字典 */\r\n async loadGoodsTagList(): Promise<Array<GoodsTag>> {\r\n return (await iGet<Array<GoodsTag>>(\"getGoodsTagList\")) ?? []\r\n }\r\n\r\n /** 获取所有货架(类目)列表 */\r\n async loadGoodsShelves(): Promise<Array<GoodsCategory>> {\r\n return (await iGet<Array<GoodsCategory>>(\"getGoodsShelves\")) ?? []\r\n }\r\n\r\n /** 获取指定货架的商品列表 */\r\n async loadCategoryGoods(params?: Readonly<{ cateCode: string; count?: number }>): Promise<Array<GoodsItem>> {\r\n const data: Record<string, string> = {}\r\n if (params?.cateCode) data.cateCode = params.cateCode\r\n if (params?.count !== undefined) data.count = String(params.count)\r\n return (await iGet<Array<GoodsItem>>(\"getCategoryGoods\", { data })) ?? []\r\n }\r\n\r\n /** 分页搜索商品 */\r\n async searchGoods(params: Readonly<{ cateCode?: string; keyword?: string } & PageParams>): Promise<PageInfo<GoodsItem> | undefined> {\r\n return iGet<PageInfo<GoodsItem>>(\"searchGoods\", { data: { ...params, pageNo: String(params.pageNo), pageSize: String(params.pageSize) } })\r\n }\r\n}\r\n\r\nexport const icmsClient = new ICMSClient()\r\n"],"mappings":"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"}
@@ -44,11 +44,11 @@ var k = {
44
44
  IBOOT_WEBSITE_NO: "wno",
45
45
  IBOOT_TOKEN: "token",
46
46
  IBOOT_USER: "user"
47
- }, Y = "Content-Type", M = {
47
+ }, K = "Content-Type", M = {
48
48
  applicationJson: "application/json",
49
49
  multipartFormData: "multipart/form-data",
50
50
  applicationXwwwFormUrlencoded: "application/x-www-form-urlencoded"
51
- }, nr = "zh-CN", K = {
51
+ }, nr = "zh-CN", $ = {
52
52
  DEVICE_ID: "Device-Id",
53
53
  LANG: "Lang",
54
54
  WEBSITE_ID: "Website-Id",
@@ -64,7 +64,7 @@ var k = {
64
64
  sameSite: "strict"
65
65
  }), ir = (e) => {
66
66
  if (e.get) {
67
- let t = e.get(K.DEVICE_ID), n = e.get(K.LANG), r = e.get(K.WEBSITE_ID), i = e.get(K.WEBSITE_NO), a = {};
67
+ let t = e.get($.DEVICE_ID), n = e.get($.LANG), r = e.get($.WEBSITE_ID), i = e.get($.WEBSITE_NO), a = {};
68
68
  return t && t.length > 0 && (a.deviceId = t), n && n.length > 0 && (a.lang = n), r && r.length > 0 && (a.websiteId = r), i && i.length > 0 && (a.websiteNo = i), a;
69
69
  }
70
70
  throw Error("The get method of IStorage has not been implemented.");
@@ -173,7 +173,7 @@ var k = {
173
173
  "User-From": this.userFrom,
174
174
  "Api-Key": this.apiKey
175
175
  };
176
- return n[Y] = M.applicationXwwwFormUrlencoded, this.lang && this.lang.length > 0 && (n.Lang = this.lang), this.websiteId && this.websiteId.length > 0 && (n["Web-Id"] = this.websiteId), this.websiteNo && this.websiteNo.length > 0 && (n["Web-No"] = this.websiteNo), t && (t.token && t.token.length > 0 && t.username && t.username.length > 0 && (n.Authorization = t.token, n.Username = t.username), t.xcsrf && (n[t.xcsrf.csrfHeader] = t.xcsrf.csrfToken)), n.Sign = await this.sign(e), n;
176
+ return n[K] = M.applicationXwwwFormUrlencoded, this.lang && this.lang.length > 0 && (n.Lang = this.lang), this.websiteId && this.websiteId.length > 0 && (n["Web-Id"] = this.websiteId), this.websiteNo && this.websiteNo.length > 0 && (n["Web-No"] = this.websiteNo), t && (t.token && t.token.length > 0 && t.username && t.username.length > 0 && (n.Authorization = t.token, n.Username = t.username), t.xcsrf && (n[t.xcsrf.csrfHeader] = t.xcsrf.csrfToken)), n.Sign = await this.sign(e), n;
177
177
  }
178
178
  async helloIboot() {
179
179
  if (this.helloMethod.length <= 0) return this.apiKey;
@@ -181,7 +181,7 @@ var k = {
181
181
  "Res-Type": "json",
182
182
  "Api-Key": this.apiKey
183
183
  };
184
- t[Y] = M.applicationXwwwFormUrlencoded;
184
+ t[K] = M.applicationXwwwFormUrlencoded;
185
185
  let n = {
186
186
  url: e,
187
187
  headers: t
@@ -245,7 +245,7 @@ var k = {
245
245
  urlParams: c,
246
246
  token: n
247
247
  });
248
- a && s && (l[Y] = `multipart/form-data; boundary=${s}`);
248
+ a && s && (l[K] = `multipart/form-data; boundary=${s}`);
249
249
  let u = this.getApiUrl(e), f = {
250
250
  url: u,
251
251
  headers: l,
@@ -1457,7 +1457,7 @@ function Ir() {
1457
1457
  }
1458
1458
  })(Ve)), Ve;
1459
1459
  }
1460
- var Ke = {}, Ye = { exports: {} }, Ct;
1460
+ var $e = {}, Ke = { exports: {} }, Ct;
1461
1461
  function Ar() {
1462
1462
  return Ct || (Ct = 1, (() => {
1463
1463
  var e = { 226: function(e, t) {
@@ -1477,7 +1477,7 @@ function Ar() {
1477
1477
  return typeof e === u ? e.replace(/[^\d\.]/g, a).split(".")[0] : r;
1478
1478
  }, J = function(e, t) {
1479
1479
  if (typeof e === u) return e = e.replace(/^\s\s*/, a), typeof t === c ? e : e.substring(0, w);
1480
- }, X = function(e, t) {
1480
+ }, Y = function(e, t) {
1481
1481
  for (var n = 0, i, a, o, c, u, d; n < t.length && !u;) {
1482
1482
  var f = t[n], p = t[n + 1];
1483
1483
  for (i = a = 0; i < f.length && !u && f[i];) if (u = f[i++].exec(e), u) for (o = 0; o < p.length; o++) d = u[++a], c = p[o], typeof c === l && c.length > 0 ? c.length === 2 ? typeof c[1] == s ? this[c[0]] = c[1].call(this, d) : this[c[0]] = c[1] : c.length === 3 ? typeof c[1] === s && !(c[1].exec && c[1].test) ? this[c[0]] = d ? c[1].call(this, d, c[2]) : r : this[c[0]] = d ? d.replace(c[1], c[2]) : r : c.length === 4 && (this[c[0]] = d ? c[3].call(this, d.replace(c[1], c[2])) : r) : this[c] = d || r;
@@ -2368,24 +2368,24 @@ function Ar() {
2368
2368
  ],
2369
2369
  [p, g]
2370
2370
  ]
2371
- }, Z = function(e, t) {
2372
- if (typeof e === l && (t = e, e = r), !(this instanceof Z)) return new Z(e, t).getResult();
2371
+ }, X = function(e, t) {
2372
+ if (typeof e === l && (t = e, e = r), !(this instanceof X)) return new X(e, t).getResult();
2373
2373
  var i = typeof n !== c && n.navigator ? n.navigator : r, o = e || (i && i.userAgent ? i.userAgent : a), v = i && i.userAgentData ? i.userAgentData : r, x = t ? H(Cn, t) : Cn, S = i && i.userAgent == o;
2374
2374
  return this.getBrowser = function() {
2375
2375
  var e = {};
2376
- return e[p] = r, e[g] = r, X.call(e, o, x.browser), e[d] = yn(e[g]), S && i && i.brave && typeof i.brave.isBrave == s && (e[p] = "Brave"), e;
2376
+ return e[p] = r, e[g] = r, Y.call(e, o, x.browser), e[d] = yn(e[g]), S && i && i.brave && typeof i.brave.isBrave == s && (e[p] = "Brave"), e;
2377
2377
  }, this.getCPU = function() {
2378
2378
  var e = {};
2379
- return e[_] = r, X.call(e, o, x.cpu), e;
2379
+ return e[_] = r, Y.call(e, o, x.cpu), e;
2380
2380
  }, this.getDevice = function() {
2381
2381
  var e = {};
2382
- return e[h] = r, e[f] = r, e[m] = r, X.call(e, o, x.device), S && !e[m] && v && v.mobile && (e[m] = y), S && e[f] == "Macintosh" && i && typeof i.standalone !== c && i.maxTouchPoints && i.maxTouchPoints > 2 && (e[f] = "iPad", e[m] = b), e;
2382
+ return e[h] = r, e[f] = r, e[m] = r, Y.call(e, o, x.device), S && !e[m] && v && v.mobile && (e[m] = y), S && e[f] == "Macintosh" && i && typeof i.standalone !== c && i.maxTouchPoints && i.maxTouchPoints > 2 && (e[f] = "iPad", e[m] = b), e;
2383
2383
  }, this.getEngine = function() {
2384
2384
  var e = {};
2385
- return e[p] = r, e[g] = r, X.call(e, o, x.engine), e;
2385
+ return e[p] = r, e[g] = r, Y.call(e, o, x.engine), e;
2386
2386
  }, this.getOS = function() {
2387
2387
  var e = {};
2388
- return e[p] = r, e[g] = r, X.call(e, o, x.os), S && !e[p] && v && v.platform != "Unknown" && (e[p] = v.platform.replace(/chrome os/i, _n).replace(/macos/i, vn)), e;
2388
+ return e[p] = r, e[g] = r, Y.call(e, o, x.os), S && !e[p] && v && v.platform != "Unknown" && (e[p] = v.platform.replace(/chrome os/i, _n).replace(/macos/i, vn)), e;
2389
2389
  }, this.getResult = function() {
2390
2390
  return {
2391
2391
  ua: this.getUA(),
@@ -2401,11 +2401,11 @@ function Ar() {
2401
2401
  return o = typeof e === u && e.length > w ? J(e, w) : e, this;
2402
2402
  }, this.setUA(o), this;
2403
2403
  };
2404
- Z.VERSION = i, Z.BROWSER = W([
2404
+ X.VERSION = i, X.BROWSER = W([
2405
2405
  p,
2406
2406
  g,
2407
2407
  d
2408
- ]), Z.CPU = W([_]), Z.DEVICE = W([
2408
+ ]), X.CPU = W([_]), X.DEVICE = W([
2409
2409
  f,
2410
2410
  h,
2411
2411
  m,
@@ -2415,16 +2415,16 @@ function Ar() {
2415
2415
  b,
2416
2416
  S,
2417
2417
  C
2418
- ]), Z.ENGINE = Z.OS = W([p, g]), typeof t === c ? typeof n !== c && (n.UAParser = Z) : (e.exports && (t = e.exports = Z), t.UAParser = Z);
2419
- var Q = typeof n !== c && (n.jQuery || n.Zepto);
2420
- if (Q && !Q.ua) {
2421
- var $ = new Z();
2422
- Q.ua = $.getResult(), Q.ua.get = function() {
2423
- return $.getUA();
2424
- }, Q.ua.set = function(e) {
2425
- $.setUA(e);
2426
- var t = $.getResult();
2427
- for (var n in t) Q.ua[n] = t[n];
2418
+ ]), X.ENGINE = X.OS = W([p, g]), typeof t === c ? typeof n !== c && (n.UAParser = X) : (e.exports && (t = e.exports = X), t.UAParser = X);
2419
+ var Z = typeof n !== c && (n.jQuery || n.Zepto);
2420
+ if (Z && !Z.ua) {
2421
+ var Q = new X();
2422
+ Z.ua = Q.getResult(), Z.ua.get = function() {
2423
+ return Q.getUA();
2424
+ }, Z.ua.set = function(e) {
2425
+ Q.setUA(e);
2426
+ var t = Q.getResult();
2427
+ for (var n in t) Z.ua[n] = t[n];
2428
2428
  };
2429
2429
  }
2430
2430
  })(typeof window == "object" ? window : this);
@@ -2440,8 +2440,8 @@ function Ar() {
2440
2440
  }
2441
2441
  return a.exports;
2442
2442
  }
2443
- typeof n < "u" && (n.ab = {}.dirname + "/"), Ye.exports = n(226);
2444
- })()), Ye.exports;
2443
+ typeof n < "u" && (n.ab = {}.dirname + "/"), Ke.exports = n(226);
2444
+ })()), Ke.exports;
2445
2445
  }
2446
2446
  var Lt;
2447
2447
  function kt() {
@@ -2480,9 +2480,9 @@ function kt() {
2480
2480
  function o({ headers: e }) {
2481
2481
  return a(e.get("user-agent") || void 0);
2482
2482
  }
2483
- })(Ke)), Ke;
2483
+ })($e)), $e;
2484
2484
  }
2485
- var Je = {}, Ut;
2485
+ var Ye = {}, Ut;
2486
2486
  function Or() {
2487
2487
  return Ut || (Ut = 1, (function(e) {
2488
2488
  Object.defineProperty(e, "__esModule", { value: !0 }), Object.defineProperty(e, "URLPattern", {
@@ -2492,7 +2492,7 @@ function Or() {
2492
2492
  }
2493
2493
  });
2494
2494
  let t = typeof URLPattern > "u" ? void 0 : URLPattern;
2495
- })(Je)), Je;
2495
+ })(Ye)), Ye;
2496
2496
  }
2497
2497
  var Dt;
2498
2498
  function xr() {
@@ -2509,11 +2509,11 @@ function xr() {
2509
2509
  })(ve, ve.exports)), ve.exports;
2510
2510
  }
2511
2511
  xr();
2512
- var et = /* @__PURE__ */ ((e) => (e[e.login = 0] = "login", e[e.logout = 1] = "logout", e))(et || {}), $e = {
2512
+ var et = /* @__PURE__ */ ((e) => (e[e.login = 0] = "login", e[e.logout = 1] = "logout", e))(et || {}), Je = {
2513
2513
  login: "login",
2514
2514
  logout: "logout",
2515
2515
  unknown: ""
2516
- }, Jr = class {
2516
+ }, Yr = class {
2517
2517
  config;
2518
2518
  http;
2519
2519
  adapter;
@@ -2538,7 +2538,7 @@ var et = /* @__PURE__ */ ((e) => (e[e.login = 0] = "login", e[e.logout = 1] = "l
2538
2538
  }
2539
2539
  async processRequest(e) {
2540
2540
  let t = e.url.searchParams, n = t.get("m") ?? "unknown", r = {
2541
- ...$e,
2541
+ ...Je,
2542
2542
  ...this.config.APIMAP
2543
2543
  }[n], i = e.cookies;
2544
2544
  if (this.http.setHttpOptsToCookies(i), !r || r.length === 0) return this.createErrorResponse(404, "API not found", i);
@@ -2550,7 +2550,7 @@ var et = /* @__PURE__ */ ((e) => (e[e.login = 0] = "login", e[e.logout = 1] = "l
2550
2550
  }, "processRequest");
2551
2551
  let s = e.method;
2552
2552
  if (s === "GET") {
2553
- let n = { ...t };
2553
+ let n = new URLSearchParams(t);
2554
2554
  n.delete("m");
2555
2555
  let i = await this.http.get({
2556
2556
  url: r,
@@ -2593,7 +2593,7 @@ var et = /* @__PURE__ */ ((e) => (e[e.login = 0] = "login", e[e.logout = 1] = "l
2593
2593
  }
2594
2594
  createResponse({ url: e, result: t, config: n, req: r }) {
2595
2595
  let i = {};
2596
- i[Y] = M.applicationJson;
2596
+ i[K] = M.applicationJson;
2597
2597
  let a = {
2598
2598
  status: t.success ? 200 : t.code,
2599
2599
  headers: i,
@@ -2603,11 +2603,11 @@ var et = /* @__PURE__ */ ((e) => (e[e.login = 0] = "login", e[e.logout = 1] = "l
2603
2603
  };
2604
2604
  if (t.success) {
2605
2605
  switch (e) {
2606
- case $e[et[0]]:
2606
+ case Je[et[0]]:
2607
2607
  let e = t.data;
2608
2608
  ar(e, a);
2609
2609
  break;
2610
- case $e[et[1]]:
2610
+ case Je[et[1]]:
2611
2611
  a.cleanCookies = (e) => ur(e);
2612
2612
  break;
2613
2613
  }
@@ -2622,7 +2622,7 @@ var et = /* @__PURE__ */ ((e) => (e[e.login = 0] = "login", e[e.logout = 1] = "l
2622
2622
  }
2623
2623
  createErrorResponse(e, t, n) {
2624
2624
  let r = {};
2625
- return r[Y] = M.applicationJson, {
2625
+ return r[K] = M.applicationJson, {
2626
2626
  status: e,
2627
2627
  headers: r,
2628
2628
  cookies: n ? this.setCookies(n) : {},
@@ -3023,6 +3023,7 @@ var ICMSServer = class {
3023
3023
  }, APIMAP = {
3024
3024
  register: "guest/register",
3025
3025
  checkRegister: "guest/checkRegister",
3026
+ sendcode: "guest/sendVCode",
3026
3027
  loadI18nList: "guest/site/i18nList",
3027
3028
  loadWebsite: "guest/site/currentWebSite",
3028
3029
  loadChannels: "guest/site/getChannelListByNo",
@@ -3058,7 +3059,7 @@ var ICMSServer = class {
3058
3059
  submitLink: "guest/site/addLink",
3059
3060
  getSpecDescription: "guest/site/shop/getSpecDescription"
3060
3061
  };
3061
- const icmsRouter = async ({ request: e, routeAdapter: t, storage: n }) => await new Jr({
3062
+ const icmsRouter = async ({ request: e, routeAdapter: t, storage: n }) => await new Yr({
3062
3063
  config: {
3063
3064
  userType: Zt.TYPE_C,
3064
3065
  APIMAP,