icms-api 0.1.11 → 0.1.13

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=a(e),o=t?.data??{},s,c=new Headers(t?.headers);o instanceof FormData?s=o:(s=JSON.stringify(o),c.set(`Content-Type`,n.applicationJson)),r.info({url:i,headers:c},`POST`);let l=await fetch(i,{method:`POST`,headers:c,body:s});if(l.ok){let e=Object.fromEntries(l.headers.entries()),t={...await l.json(),headers:e};return r.debug(t,`POST_RESULT`),t}let u={code:l.status,success:!1,msg:l.statusText};return r.error(u),u};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;
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=a(e),o=t?.data??{},s,c=new Headers(t?.headers);o instanceof FormData?s=o:(s=JSON.stringify(o),c.set(`Content-Type`,n.applicationJson)),r.info({url:i,headers:c},`POST`);let l=await fetch(i,{method:`POST`,headers:c,body:s});if(l.ok){let e=Object.fromEntries(l.headers.entries()),t={...await l.json(),headers:e};return r.debug(t,`POST_RESULT`),t}let u={code:l.status,success:!1,msg:l.statusText};return r.error(u),u};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}){return await l(`login`,{data:{username:e,password:t}})}async logout(){await l(`logout`)}async register({username:e,password:t,validateCode:n,nickname:r}){let a=await l(`register`,{data:{username:e,password:t,validateCode:n,nickname:r}});if(a&&typeof a==`object`)return a;if(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 url = getBaseUrl(urlName);\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: url, headers: proxyHeaders }, \"POST\");\r\n const res = await fetch(url, {\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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"}
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 url = getBaseUrl(urlName);\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: url, headers: proxyHeaders }, \"POST\");\r\n const res = await fetch(url, {\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 // 浏览器端直接返回接口数据(token/user cookie 为 HttpOnly,前端无法读取)\r\n return await iPost<Member>('login', {\r\n data: { username, password }\r\n })\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 validateCode 邮箱验证码(发送验证码后填写)\r\n * @param nickname 昵称(可选)\r\n * @returns 注册成功且已登录时返回 Member,否则 undefined\r\n */\r\n async register({ username, password, validateCode, nickname }: Readonly<{ username: string, password: string, validateCode: string, nickname?: string }>): Promise<Member | undefined> {\r\n const result = await iPost<Member>('register', {\r\n data: { username, password, validateCode, nickname }\r\n })\r\n // register 接口通常只返回 \"success\",若返回对象(Member)直接使用,否则交给页面 fallback 登录\r\n if (result && typeof result === 'object') {\r\n return result\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":"AAyCA,MAAa,EAAe,CAC1B,gBAAiB,OACjB,WAAY,OACZ,iBAAkB,MAClB,iBAAkB,MAClB,YAAa,QACb,WAAY,OACb,CAGY,EAAmB,eACnB,EAAmB,CAC9B,gBAAiB,mBACjB,kBAAmB,sBACnB,8BAA+B,oCAChC,CA0BD,IAAM,EAAS,CACb,MAAO,EAAc,IAAgB,CACnC,QAAA,IAAA,WAA6B,cAAc,QAAQ,KAAK,EAAK,EAAI,EAEnE,OAAQ,EAAc,IAAgB,CACpC,QAAA,IAAA,WAA6B,cAAc,QAAQ,MAAM,EAAK,EAAI,EAEpE,MAAQ,GAAiB,CACvB,QAAQ,MAAM,EAAI,EAErB,CAKD,MAAa,EAAgB,GAAwC,CACnE,GAAI,EAAQ,IAAK,CACf,IAAM,EAAW,EAAQ,IAAI,EAAa,WAAW,CACrD,GAAI,GAAY,EAAS,OAAS,EAChC,OAAO,KAAK,MAAM,EAAS,GAMjC,IAAM,EAAc,GAEX,GADS,QAAQ,IAAI,UAAY,gBACtB,KAAK,IAInB,EAAM,MACV,EACA,IAC4B,CAC5B,IAAI,EAAM,EAAW,EAAQ,CAC7B,GAAI,GAAM,KAAM,CACd,IAAM,EAAS,IAAI,gBAAgB,EAAK,KAAK,CAC7C,GAAO,IAAI,IAEb,IAAM,EAAQ,GAAM,QACpB,EAAO,KAAK,CAAE,MAAK,QAAS,EAAO,CAAE,MAAM,CAC3C,IAAM,EAAM,MAAM,MAAM,EAAK,CAC3B,OAAQ,MACR,QAAS,EACT,MAAO,GAAM,SAAW,cAAgB,UACzC,CAAC,CAEF,GAAI,EAAI,GAAI,CACV,IAAM,EAAa,OAAO,YAAY,EAAI,QAAQ,SAAS,CAAC,CACtD,EAAS,CAAE,GAAI,MAAM,EAAI,MAAM,CAAG,QAAS,EAAY,CAE7D,OADA,EAAO,MAAM,EAAQ,aAAa,CAC3B,EAET,IAAM,EAAM,CAAE,KAAM,EAAI,OAAQ,QAAS,GAAO,IAAK,EAAI,WAAY,CAErE,OADA,EAAO,MAAM,EAAI,CACV,GAIH,EAAO,MACX,EACA,IAC4B,CAC5B,IAAM,EAAM,EAAW,EAAQ,CACzB,EAAO,GAAM,MAAQ,EAAE,CACzBA,EACE,EAAe,IAAI,QAAQ,GAAM,QAAQ,CACzC,aAAgB,SAIpB,EAAO,GAHP,EAAO,KAAK,UAAU,EAAK,CAC3B,EAAa,IAAI,eAAkB,EAAiB,gBAAgB,EAItE,EAAO,KAAK,CAAO,MAAK,QAAS,EAAc,CAAE,OAAO,CACxD,IAAM,EAAM,MAAM,MAAM,EAAK,CAC3B,OAAQ,OACR,QAAS,EACT,OACD,CAAC,CAEF,GAAI,EAAI,GAAI,CACV,IAAM,EAAa,OAAO,YAAY,EAAI,QAAQ,SAAS,CAAC,CACtD,EAAS,CAAE,GAAI,MAAM,EAAI,MAAM,CAAG,QAAS,EAAY,CAE7D,OADA,EAAO,MAAM,EAAQ,cAAc,CAC5B,EAET,IAAM,EAAM,CAAE,KAAM,EAAI,OAAQ,QAAS,GAAO,IAAK,EAAI,WAAY,CAErE,OADA,EAAO,MAAM,EAAI,CACV,GAIT,MAAa,EAAO,MAClB,EACA,IAC2B,CAC3B,IAAM,EAAM,MAAM,EAAO,EAAK,EAAK,CACnC,GAAI,EAAI,QACN,OAAO,EAAI,KAEb,GAAI,GAAM,UAAW,CACnB,EAAK,UAAU,EAAI,KAAO,qBAAqB,CAC/C,OAEF,MAAM,MAAM,EAAI,KAAO,qBAAqB,EAIjC,EAAQ,MACnB,EACA,IAC2B,CAC3B,IAAM,EAAM,MAAM,EAAQ,EAAK,EAAK,CACpC,GAAI,EAAI,QACN,OAAO,EAAI,KAEb,GAAI,GAAM,UAAW,CACnB,EAAK,UAAU,EAAI,KAAO,sBAAsB,CAChD,OAEF,MAAM,MAAM,EAAI,KAAO,sBAAsB,EAIlC,EAAe,MAC1B,EACA,IACqB,CACrB,IAAM,EAAM,MAAM,EAAK,EAAK,EAAK,CAMjC,OALI,EAAI,SACF,GAAM,aAAa,EAAK,YAAY,EAAI,KAAO,UAAU,CACtD,KAEL,GAAM,WAAW,EAAK,UAAU,EAAI,KAAO,sBAAsB,CAC9D,KC7MT,IAAa,EAAb,KAAwB,CACpB,QAAmC,KAEnC,aAAc,EAGd,YAAY,EAAyB,CAEjC,MADA,MAAK,QAAU,EACR,KAKX,MAAM,MAAM,CAAE,WAAU,YAA2F,CAE/G,OAAO,MAAM,EAAc,QAAS,CAChC,KAAM,CAAE,WAAU,WAAU,CAC/B,CAAC,CAGN,MAAM,QAAwB,CAC1B,MAAM,EAAM,SAAS,CAazB,MAAM,SAAS,CAAE,WAAU,WAAU,eAAc,YAAoI,CACnL,IAAM,EAAS,MAAM,EAAc,WAAY,CAC3C,KAAM,CAAE,WAAU,WAAU,eAAc,WAAU,CACvD,CAAC,CAEF,GAAI,GAAU,OAAO,GAAW,SAC5B,OAAO,EAEX,GAAI,KAAK,QACL,OAAO,EAAa,KAAK,QAAQ,CAUzC,MAAM,UAAU,EAAmC,CAI/C,OAHe,MAAM,EAAc,WAAY,CAC3C,KAAM,CAAE,UAAS,CACpB,CAAC,GACgB,EAMtB,MAAM,gBAAgB,EAAoC,CAItD,OAHe,MAAM,EAAc,gBAAiB,CAChD,KAAM,CAAE,WAAU,CACrB,CAAC,EACe,GAKrB,MAAM,cAA4C,CAC9C,OAAQ,MAAM,EAAyB,eAAe,EAAK,EAAE,CAGjE,MAAM,YAAY,EAA8H,CAK5I,OAAO,EAAkB,cAJY,CACjC,QAAS,OAAO,GAAQ,SAAW,GAAK,CACxC,eAAgB,OAAO,GAAQ,gBAAkB,GAAM,CAC1D,CAC4C,CAGjD,MAAM,aAAa,EAA+F,CAC9G,IAAMC,EAA+B,EAAE,CAGvC,OAFI,GAAQ,YAAW,EAAK,UAAY,EAAO,WAC3C,GAAQ,eAAiB,IAAA,KAAW,EAAK,aAAe,OAAO,EAAO,aAAa,EAC/E,MAAM,EAAwB,eAAgB,EAAK,EAAK,EAAE,CAGtE,MAAM,gBAAgB,EAAkG,CACpH,IAAMA,EAA+B,CAAE,UAAW,EAAO,UAAW,CAEpE,OADI,EAAO,eAAiB,IAAA,KAAW,EAAK,aAAe,OAAO,EAAO,aAAa,EAC/E,EAAiB,kBAAmB,EAAK,CAGpD,MAAM,gBAAgB,EAAkG,CACpH,IAAMA,EAA+B,CAAE,UAAW,EAAO,UAAW,CAEpE,OADI,EAAO,eAAiB,IAAA,KAAW,EAAK,aAAe,OAAO,EAAO,aAAa,EAC/E,EAAiB,kBAAmB,EAAK,CAGpD,MAAM,iBAAiB,EAA4F,CAC/G,IAAMA,EAA+B,CAAE,IAAK,EAAO,IAAK,CAExD,OADI,EAAO,eAAiB,IAAA,KAAW,EAAK,aAAe,OAAO,EAAO,aAAa,EAC/E,EAAiB,mBAAoB,EAAK,CAKrD,MAAM,kBAAkB,EAAoD,CACxE,OAAO,EAAqB,oBAAqB,CAAE,KAAM,CAAE,QAAO,CAAE,CAAC,CAGzE,MAAM,oBAAoB,EAAwH,CAC9I,OAAO,EAA+B,sBAAuB,CAAE,KAAM,CAAE,GAAG,EAAQ,OAAQ,OAAO,EAAO,OAAO,CAAE,SAAU,OAAO,EAAO,SAAS,CAAE,CAAE,CAAC,CAG3J,MAAM,2BAA2B,EAAmG,CAChI,OAAO,EAA+B,6BAA8B,CAAE,KAAM,CAAE,GAAG,EAAQ,OAAQ,OAAO,EAAO,OAAO,CAAE,SAAU,OAAO,EAAO,SAAS,CAAE,CAAE,CAAC,CAGlK,MAAM,yBAAyB,EAAuE,CAClG,OAAQ,MAAM,EAA4B,2BAA4B,CAAE,KAAM,CAAE,QAAS,EAAO,QAAS,CAAE,CAAC,EAAK,EAAE,CAKvH,MAAM,eAAe,EAAiD,CAClE,OAAO,EAAkB,iBAAkB,CAAE,KAAM,CAAE,QAAO,CAAE,CAAC,CAGnE,MAAM,iBAAiB,EAAqH,CACxI,OAAO,EAA4B,mBAAoB,CAAE,KAAM,CAAE,GAAG,EAAQ,OAAQ,OAAO,EAAO,OAAO,CAAE,SAAU,OAAO,EAAO,SAAS,CAAE,CAAE,CAAC,CAGrJ,MAAM,0BAA0B,EAAgG,CAC5H,OAAO,EAA4B,4BAA6B,CAAE,KAAM,CAAE,GAAG,EAAQ,OAAQ,OAAO,EAAO,OAAO,CAAE,SAAU,OAAO,EAAO,SAAS,CAAE,CAAE,CAAC,CAG9J,MAAM,sBAAsB,EAAoE,CAC5F,OAAQ,MAAM,EAAyB,wBAAyB,CAAE,KAAM,CAAE,QAAS,EAAO,QAAS,CAAE,CAAC,EAAK,EAAE,CAKjH,MAAM,gBAAgB,EAAoD,CACtE,OAAO,EAAmB,kBAAmB,CAAE,KAAM,CAAE,UAAS,CAAE,CAAC,CAGvE,MAAM,kBAAkB,EAAsH,CAC1I,OAAO,EAA6B,oBAAqB,CAAE,KAAM,CAAE,GAAG,EAAQ,OAAQ,OAAO,EAAO,OAAO,CAAE,SAAU,OAAO,EAAO,SAAS,CAAE,CAAE,CAAC,CAGvJ,MAAM,yBAAyB,EAAiG,CAC5H,OAAO,EAA6B,2BAA4B,CAAE,KAAM,CAAE,GAAG,EAAQ,OAAQ,OAAO,EAAO,OAAO,CAAE,SAAU,OAAO,EAAO,SAAS,CAAE,CAAE,CAAC,CAG9J,MAAM,uBAAuB,EAAqE,CAC9F,OAAQ,MAAM,EAA0B,yBAA0B,CAAE,KAAM,CAAE,QAAS,EAAO,QAAS,CAAE,CAAC,EAAK,EAAE,CAKnH,MAAM,gBAAgB,EAAoD,CACtE,OAAO,EAAmB,kBAAmB,CAAE,KAAM,CAAE,UAAS,CAAE,CAAC,CAGvE,MAAM,kBAAkB,EAAsH,CAC1I,OAAO,EAA6B,oBAAqB,CAAE,KAAM,CAAE,GAAG,EAAQ,OAAQ,OAAO,EAAO,OAAO,CAAE,SAAU,OAAO,EAAO,SAAS,CAAE,CAAE,CAAC,CAGvJ,MAAM,yBAAyB,EAAiG,CAC5H,OAAO,EAA6B,2BAA4B,CAAE,KAAM,CAAE,GAAG,EAAQ,OAAQ,OAAO,EAAO,OAAO,CAAE,SAAU,OAAO,EAAO,SAAS,CAAE,CAAE,CAAC,CAG9J,MAAM,uBAAuB,EAAqE,CAC9F,OAAQ,MAAM,EAA0B,yBAA0B,CAAE,KAAM,CAAE,QAAS,EAAO,QAAS,CAAE,CAAC,EAAK,EAAE,CAKnH,MAAM,mBAAmB,EAA0D,CAC/E,OAAO,EAAsB,qBAAsB,CAAE,KAAM,CAAE,aAAY,CAAE,CAAC,CAGhF,MAAM,qBAAqB,EAAyH,CAChJ,OAAO,EAAgC,uBAAwB,CAAE,KAAM,CAAE,GAAG,EAAQ,OAAQ,OAAO,EAAO,OAAO,CAAE,SAAU,OAAO,EAAO,SAAS,CAAE,CAAE,CAAC,CAG7J,MAAM,4BAA4B,EAAoG,CAClI,OAAO,EAAgC,8BAA+B,CAAE,KAAM,CAAE,GAAG,EAAQ,OAAQ,OAAO,EAAO,OAAO,CAAE,SAAU,OAAO,EAAO,SAAS,CAAE,CAAE,CAAC,CAGpK,MAAM,0BAA0B,EAAwE,CACpG,OAAQ,MAAM,EAA6B,4BAA6B,CAAE,KAAM,CAAE,QAAS,EAAO,QAAS,CAAE,CAAC,EAAK,EAAE,CAKzH,MAAM,eAAe,EAAqF,CACtG,OAAQ,MAAM,EAAqB,iBAAkB,CAAE,KAAM,CAAE,GAAG,EAAQ,CAAE,CAAC,EAAK,EAAE,CAGxF,MAAM,cAAc,EAAoD,CACpE,OAAO,MAAM,EAAa,gBAAiB,EAA4B,CAG3E,MAAM,UAAU,EAA2G,CACvH,OAAO,MAAM,EAAa,YAAa,EAA4B,CAGvE,MAAM,gBAAgB,EAAsD,CACxE,OAAO,MAAM,EAAa,kBAAmB,EAA4B,CAK7E,MAAM,gBAA4C,CAC9C,OAAQ,MAAM,EAAuB,iBAAiB,EAAK,EAAE,CAGjE,MAAM,gBAAgB,EAA4C,CAC9D,OAAQ,MAAM,EAAwB,kBAAmB,CAAE,KAAM,EAAQ,CAAE,MAAO,OAAO,EAAM,CAAE,CAAG,EAAE,CAAE,CAAC,EAAK,EAAE,CAGpH,MAAM,WAAW,EAA+G,CAC5H,OAAO,MAAM,EAAa,aAAc,EAA4B,CAKxE,MAAM,mBAAmB,EAAoD,CACzE,OAAO,EAAsB,qBAAsB,CAAE,KAAM,CAAE,OAAM,CAAE,CAAC,CAI1E,MAAM,kBAA6C,CAC/C,OAAQ,MAAM,EAAsB,kBAAkB,EAAK,EAAE,CAIjE,MAAM,kBAAkD,CACpD,OAAQ,MAAM,EAA2B,kBAAkB,EAAK,EAAE,CAItE,MAAM,kBAAkB,EAAoF,CACxG,IAAMA,EAA+B,EAAE,CAGvC,OAFI,GAAQ,WAAU,EAAK,SAAW,EAAO,UACzC,GAAQ,QAAU,IAAA,KAAW,EAAK,MAAQ,OAAO,EAAO,MAAM,EAC1D,MAAM,EAAuB,mBAAoB,CAAE,OAAM,CAAC,EAAK,EAAE,CAI7E,MAAM,YAAY,EAAkH,CAChI,OAAO,EAA0B,cAAe,CAAE,KAAM,CAAE,GAAG,EAAQ,OAAQ,OAAO,EAAO,OAAO,CAAE,SAAU,OAAO,EAAO,SAAS,CAAE,CAAE,CAAC,GAIlJ,MAAa,EAAa,IAAI"}
@@ -11,44 +11,44 @@ const COOKIE_NAMES = {
11
11
  applicationXwwwFormUrlencoded: "application/x-www-form-urlencoded"
12
12
  };
13
13
  var logger = {
14
- info: (e, r) => {
15
- process.env.NODE_ENV !== "production" && console.info(r, e);
14
+ info: (e, n) => {
15
+ process.env.NODE_ENV !== "production" && console.info(n, e);
16
16
  },
17
- debug: (e, r) => {
18
- process.env.NODE_ENV !== "production" && console.debug(r, e);
17
+ debug: (e, n) => {
18
+ process.env.NODE_ENV !== "production" && console.debug(n, e);
19
19
  },
20
20
  error: (e) => {
21
21
  console.error(e);
22
22
  }
23
23
  };
24
- const getLoginUser = (r) => {
25
- if (r.get) {
26
- let i = r.get(COOKIE_NAMES.IBOOT_USER);
27
- if (i && i.length > 0) return JSON.parse(i);
24
+ const getLoginUser = (n) => {
25
+ if (n.get) {
26
+ let r = n.get(COOKIE_NAMES.IBOOT_USER);
27
+ if (r && r.length > 0) return JSON.parse(r);
28
28
  }
29
29
  };
30
- var getBaseUrl = (e) => `${process.env.BASE_URL || "/api/services"}?m=${e}`, get = async (e, r) => {
31
- let a = getBaseUrl(e);
32
- if (r?.data) {
33
- let e = new URLSearchParams(r.data);
34
- a += `&${e}`;
30
+ var getBaseUrl = (e) => `${process.env.BASE_URL || "/api/services"}?m=${e}`, get = async (e, n) => {
31
+ let i = getBaseUrl(e);
32
+ if (n?.data) {
33
+ let e = new URLSearchParams(n.data);
34
+ i += `&${e}`;
35
35
  }
36
- let o = r?.headers;
36
+ let o = n?.headers;
37
37
  logger.info({
38
- url: a,
38
+ url: i,
39
39
  headers: o
40
40
  }, "GET");
41
- let s = await fetch(a, {
41
+ let s = await fetch(i, {
42
42
  method: "GET",
43
43
  headers: o,
44
- cache: r?.useCache ? "force-cache" : "default"
44
+ cache: n?.useCache ? "force-cache" : "default"
45
45
  });
46
46
  if (s.ok) {
47
- let e = Object.fromEntries(s.headers.entries()), r = {
47
+ let e = Object.fromEntries(s.headers.entries()), n = {
48
48
  ...await s.json(),
49
49
  headers: e
50
50
  };
51
- return logger.debug(r, "GET_RESULT"), r;
51
+ return logger.debug(n, "GET_RESULT"), n;
52
52
  }
53
53
  let c = {
54
54
  code: s.status,
@@ -56,8 +56,8 @@ var getBaseUrl = (e) => `${process.env.BASE_URL || "/api/services"}?m=${e}`, get
56
56
  msg: s.statusText
57
57
  };
58
58
  return logger.error(c), c;
59
- }, post = async (e, a) => {
60
- let o = getBaseUrl(e), s = a?.data ?? {}, c, l = new Headers(a?.headers);
59
+ }, post = async (e, i) => {
60
+ let o = getBaseUrl(e), s = i?.data ?? {}, c, l = new Headers(i?.headers);
61
61
  s instanceof FormData ? c = s : (c = JSON.stringify(s), l.set("Content-Type", CONTENT_TYPE_MAP.applicationJson)), logger.info({
62
62
  url: o,
63
63
  headers: l
@@ -68,11 +68,11 @@ var getBaseUrl = (e) => `${process.env.BASE_URL || "/api/services"}?m=${e}`, get
68
68
  body: c
69
69
  });
70
70
  if (u.ok) {
71
- let e = Object.fromEntries(u.headers.entries()), r = {
71
+ let e = Object.fromEntries(u.headers.entries()), n = {
72
72
  ...await u.json(),
73
73
  headers: e
74
74
  };
75
- return logger.debug(r, "POST_RESULT"), r;
75
+ return logger.debug(n, "POST_RESULT"), n;
76
76
  }
77
77
  let d = {
78
78
  code: u.status,
@@ -81,25 +81,25 @@ var getBaseUrl = (e) => `${process.env.BASE_URL || "/api/services"}?m=${e}`, get
81
81
  };
82
82
  return logger.error(d), d;
83
83
  };
84
- const iGet = async (e, r) => {
85
- let i = await get(e, r);
86
- if (i.success) return i.data;
87
- if (r?.showError) {
88
- r.showError(i.msg ?? "Get request error!");
84
+ const iGet = async (e, n) => {
85
+ let r = await get(e, n);
86
+ if (r.success) return r.data;
87
+ if (n?.showError) {
88
+ n.showError(r.msg ?? "Get request error!");
89
89
  return;
90
90
  }
91
- throw Error(i.msg ?? "Get request error!");
92
- }, iPost = async (e, r) => {
93
- let i = await post(e, r);
94
- if (i.success) return i.data;
95
- if (r?.showError) {
96
- r.showError(i.msg ?? "Post request error!");
91
+ throw Error(r.msg ?? "Get request error!");
92
+ }, iPost = async (e, n) => {
93
+ let r = await post(e, n);
94
+ if (r.success) return r.data;
95
+ if (n?.showError) {
96
+ n.showError(r.msg ?? "Post request error!");
97
97
  return;
98
98
  }
99
- throw Error(i.msg ?? "Post request error!");
100
- }, iPostSuccess = async (e, r) => {
101
- let i = await post(e, r);
102
- return i.success ? (r?.showSuccess && r.showSuccess(i.msg ?? "SUCCESS"), !0) : (r?.showError && r.showError(i.msg ?? "Post request error!"), !1);
99
+ throw Error(r.msg ?? "Post request error!");
100
+ }, iPostSuccess = async (e, n) => {
101
+ let r = await post(e, n);
102
+ return r.success ? (n?.showSuccess && n.showSuccess(r.msg ?? "SUCCESS"), !0) : (n?.showError && n.showError(r.msg ?? "Post request error!"), !1);
103
103
  };
104
104
  var ICMSClient = class {
105
105
  cookies = null;
@@ -107,21 +107,24 @@ var ICMSClient = class {
107
107
  setICookies(e) {
108
108
  return this.cookies = e, this;
109
109
  }
110
- async login({ username: e, password: r }) {
111
- if (await iPost("login", { data: {
110
+ async login({ username: e, password: n }) {
111
+ return await iPost("login", { data: {
112
112
  username: e,
113
- password: r
114
- } }), this.cookies) return getLoginUser(this.cookies);
113
+ password: n
114
+ } });
115
115
  }
116
116
  async logout() {
117
117
  await iPost("logout");
118
118
  }
119
- async register({ username: e, password: r, nickname: i }) {
120
- if (await iPost("register", { data: {
119
+ async register({ username: e, password: n, validateCode: r, nickname: a }) {
120
+ let o = await iPost("register", { data: {
121
121
  username: e,
122
- password: r,
123
- nickname: i
124
- } }), this.cookies) return getLoginUser(this.cookies);
122
+ password: n,
123
+ validateCode: r,
124
+ nickname: a
125
+ } });
126
+ if (o && typeof o == "object") return o;
127
+ if (this.cookies) return getLoginUser(this.cookies);
125
128
  }
126
129
  async sendVCode(e) {
127
130
  return await iPost("sendcode", { data: { account: e } }) === 1;
@@ -139,20 +142,20 @@ var ICMSClient = class {
139
142
  });
140
143
  }
141
144
  async loadChannels(e) {
142
- let r = {};
143
- return e?.channelNo && (r.channelNo = e.channelNo), e?.showChildren !== void 0 && (r.showChildren = String(e.showChildren)), await iGet("loadChannels", r) ?? [];
145
+ let n = {};
146
+ return e?.channelNo && (n.channelNo = e.channelNo), e?.showChildren !== void 0 && (n.showChildren = String(e.showChildren)), await iGet("loadChannels", n) ?? [];
144
147
  }
145
148
  async loadChannelById(e) {
146
- let r = { channelId: e.channelId };
147
- return e.showChildren !== void 0 && (r.showChildren = String(e.showChildren)), iGet("loadChannelById", r);
149
+ let n = { channelId: e.channelId };
150
+ return e.showChildren !== void 0 && (n.showChildren = String(e.showChildren)), iGet("loadChannelById", n);
148
151
  }
149
152
  async loadChannelByNo(e) {
150
- let r = { channelNo: e.channelNo };
151
- return e.showChildren !== void 0 && (r.showChildren = String(e.showChildren)), iGet("loadChannelByNo", r);
153
+ let n = { channelNo: e.channelNo };
154
+ return e.showChildren !== void 0 && (n.showChildren = String(e.showChildren)), iGet("loadChannelByNo", n);
152
155
  }
153
156
  async loadChannelByUri(e) {
154
- let r = { uri: e.uri };
155
- return e.showChildren !== void 0 && (r.showChildren = String(e.showChildren)), iGet("loadChannelByUri", r);
157
+ let n = { uri: e.uri };
158
+ return e.showChildren !== void 0 && (n.showChildren = String(e.showChildren)), iGet("loadChannelByUri", n);
156
159
  }
157
160
  async loadProductDetail(e) {
158
161
  return iGet("loadProductDetail", { data: { proId: e } });
@@ -285,8 +288,8 @@ var ICMSClient = class {
285
288
  return await iGet("getGoodsShelves") ?? [];
286
289
  }
287
290
  async loadCategoryGoods(e) {
288
- let r = {};
289
- return e?.cateCode && (r.cateCode = e.cateCode), e?.count !== void 0 && (r.count = String(e.count)), await iGet("getCategoryGoods", { data: r }) ?? [];
291
+ let n = {};
292
+ return e?.cateCode && (n.cateCode = e.cateCode), e?.count !== void 0 && (n.count = String(e.count)), await iGet("getCategoryGoods", { data: n }) ?? [];
290
293
  }
291
294
  async searchGoods(e) {
292
295
  return iGet("searchGoods", { data: {
@@ -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 url = getBaseUrl(urlName);\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: url, headers: proxyHeaders }, \"POST\");\r\n const res = await fetch(url, {\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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"}
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 url = getBaseUrl(urlName);\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: url, headers: proxyHeaders }, \"POST\");\r\n const res = await fetch(url, {\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 // 浏览器端直接返回接口数据(token/user cookie 为 HttpOnly,前端无法读取)\r\n return await iPost<Member>('login', {\r\n data: { username, password }\r\n })\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 validateCode 邮箱验证码(发送验证码后填写)\r\n * @param nickname 昵称(可选)\r\n * @returns 注册成功且已登录时返回 Member,否则 undefined\r\n */\r\n async register({ username, password, validateCode, nickname }: Readonly<{ username: string, password: string, validateCode: string, nickname?: string }>): Promise<Member | undefined> {\r\n const result = await iPost<Member>('register', {\r\n data: { username, password, validateCode, nickname }\r\n })\r\n // register 接口通常只返回 \"success\",若返回对象(Member)直接使用,否则交给页面 fallback 登录\r\n if (result && typeof result === 'object') {\r\n return result\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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"}
@@ -18,15 +18,17 @@ export declare class ICMSClient {
18
18
  }>): Promise<Member | undefined>;
19
19
  logout(): Promise<void>;
20
20
  /**
21
- * 注册 C 端会员(手机号/邮箱 + 密码)
21
+ * 注册 C 端会员(手机号/邮箱 + 密码 + 邮箱验证码)
22
22
  * @param username 手机号或邮箱
23
23
  * @param password 密码
24
+ * @param validateCode 邮箱验证码(发送验证码后填写)
24
25
  * @param nickname 昵称(可选)
25
26
  * @returns 注册成功且已登录时返回 Member,否则 undefined
26
27
  */
27
- register({ username, password, nickname }: Readonly<{
28
+ register({ username, password, validateCode, nickname }: Readonly<{
28
29
  username: string;
29
30
  password: string;
31
+ validateCode: string;
30
32
  nickname?: string;
31
33
  }>): Promise<Member | undefined>;
32
34
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "icms-api",
3
3
  "private": false,
4
- "version": "0.1.11",
4
+ "version": "0.1.13",
5
5
  "description": "对iCMS内容管理系统API的封装,使用该API能快速使用iCMS搭建您的WebApp!",
6
6
  "type": "module",
7
7
  "main": "./dist/icms-api.cjs.js",