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}){
|
|
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":"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"}
|
|
@@ -11,44 +11,44 @@ const COOKIE_NAMES = {
|
|
|
11
11
|
applicationXwwwFormUrlencoded: "application/x-www-form-urlencoded"
|
|
12
12
|
};
|
|
13
13
|
var logger = {
|
|
14
|
-
info: (e,
|
|
15
|
-
process.env.NODE_ENV !== "production" && console.info(
|
|
14
|
+
info: (e, n) => {
|
|
15
|
+
process.env.NODE_ENV !== "production" && console.info(n, e);
|
|
16
16
|
},
|
|
17
|
-
debug: (e,
|
|
18
|
-
process.env.NODE_ENV !== "production" && console.debug(
|
|
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 = (
|
|
25
|
-
if (
|
|
26
|
-
let
|
|
27
|
-
if (
|
|
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,
|
|
31
|
-
let
|
|
32
|
-
if (
|
|
33
|
-
let e = new URLSearchParams(
|
|
34
|
-
|
|
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 =
|
|
36
|
+
let o = n?.headers;
|
|
37
37
|
logger.info({
|
|
38
|
-
url:
|
|
38
|
+
url: i,
|
|
39
39
|
headers: o
|
|
40
40
|
}, "GET");
|
|
41
|
-
let s = await fetch(
|
|
41
|
+
let s = await fetch(i, {
|
|
42
42
|
method: "GET",
|
|
43
43
|
headers: o,
|
|
44
|
-
cache:
|
|
44
|
+
cache: n?.useCache ? "force-cache" : "default"
|
|
45
45
|
});
|
|
46
46
|
if (s.ok) {
|
|
47
|
-
let e = Object.fromEntries(s.headers.entries()),
|
|
47
|
+
let e = Object.fromEntries(s.headers.entries()), n = {
|
|
48
48
|
...await s.json(),
|
|
49
49
|
headers: e
|
|
50
50
|
};
|
|
51
|
-
return logger.debug(
|
|
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,
|
|
60
|
-
let o = getBaseUrl(e), s =
|
|
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()),
|
|
71
|
+
let e = Object.fromEntries(u.headers.entries()), n = {
|
|
72
72
|
...await u.json(),
|
|
73
73
|
headers: e
|
|
74
74
|
};
|
|
75
|
-
return logger.debug(
|
|
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,
|
|
85
|
-
let
|
|
86
|
-
if (
|
|
87
|
-
if (
|
|
88
|
-
|
|
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(
|
|
92
|
-
}, iPost = async (e,
|
|
93
|
-
let
|
|
94
|
-
if (
|
|
95
|
-
if (
|
|
96
|
-
|
|
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(
|
|
100
|
-
}, iPostSuccess = async (e,
|
|
101
|
-
let
|
|
102
|
-
return
|
|
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:
|
|
111
|
-
|
|
110
|
+
async login({ username: e, password: n }) {
|
|
111
|
+
return await iPost("login", { data: {
|
|
112
112
|
username: e,
|
|
113
|
-
password:
|
|
114
|
-
} })
|
|
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:
|
|
120
|
-
|
|
119
|
+
async register({ username: e, password: n, validateCode: r, nickname: a }) {
|
|
120
|
+
let o = await iPost("register", { data: {
|
|
121
121
|
username: e,
|
|
122
|
-
password:
|
|
123
|
-
|
|
124
|
-
|
|
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
|
|
143
|
-
return e?.channelNo && (
|
|
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
|
|
147
|
-
return e.showChildren !== void 0 && (
|
|
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
|
|
151
|
-
return e.showChildren !== void 0 && (
|
|
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
|
|
155
|
-
return e.showChildren !== void 0 && (
|
|
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
|
|
289
|
-
return e?.cateCode && (
|
|
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":"AAyCA,MAAa,eAAe;CAC1B,iBAAiB;CACjB,YAAY;CACZ,kBAAkB;CAClB,kBAAkB;CAClB,aAAa;CACb,YAAY;CACb,EAIY,mBAAmB;CAC9B,iBAAiB;CACjB,mBAAmB;CACnB,+BAA+B;CAChC;AA0BD,IAAM,SAAS;CACb,OAAO,GAAc,MAAgB;AACnC,EAAA,QAAA,IAAA,aAA6B,gBAAc,QAAQ,KAAK,GAAK,EAAI;;CAEnE,QAAQ,GAAc,MAAgB;AACpC,EAAA,QAAA,IAAA,aAA6B,gBAAc,QAAQ,MAAM,GAAK,EAAI;;CAEpE,QAAQ,MAAiB;AACvB,UAAQ,MAAM,EAAI;;CAErB;AAKD,MAAa,gBAAgB,MAAwC;AACnE,KAAI,EAAQ,KAAK;EACf,IAAM,IAAW,EAAQ,IAAI,aAAa,WAAW;AACrD,MAAI,KAAY,EAAS,SAAS,EAChC,QAAO,KAAK,MAAM,EAAS;;;AAMjC,IAAM,cAAc,MAEX,GADS,QAAQ,IAAI,YAAY,gBACtB,KAAK,KAInB,MAAM,OACV,GACA,MAC4B;CAC5B,IAAI,IAAM,WAAW,EAAQ;AAC7B,KAAI,GAAM,MAAM;EACd,IAAM,IAAS,IAAI,gBAAgB,EAAK,KAAK;AAC7C,OAAO,IAAI;;CAEb,IAAM,IAAQ,GAAM;AACpB,QAAO,KAAK;EAAE;EAAK,SAAS;EAAO,EAAE,MAAM;CAC3C,IAAM,IAAM,MAAM,MAAM,GAAK;EAC3B,QAAQ;EACR,SAAS;EACT,OAAO,GAAM,WAAW,gBAAgB;EACzC,CAAC;AAEF,KAAI,EAAI,IAAI;EACV,IAAM,IAAa,OAAO,YAAY,EAAI,QAAQ,SAAS,CAAC,EACtD,IAAS;GAAE,GAAI,MAAM,EAAI,MAAM;GAAG,SAAS;GAAY;AAE7D,SADA,OAAO,MAAM,GAAQ,aAAa,EAC3B;;CAET,IAAM,IAAM;EAAE,MAAM,EAAI;EAAQ,SAAS;EAAO,KAAK,EAAI;EAAY;AAErE,QADA,OAAO,MAAM,EAAI,EACV;GAIH,OAAO,OACX,GACA,MAC4B;CAC5B,IAAM,IAAM,WAAW,EAAQ,EACzB,IAAO,GAAM,QAAQ,EAAE,EACzBA,GACE,IAAe,IAAI,QAAQ,GAAM,QAAQ;AAO/C,CANM,aAAgB,WAIpB,IAAO,KAHP,IAAO,KAAK,UAAU,EAAK,EAC3B,EAAa,IAAI,gBAAkB,iBAAiB,gBAAgB,GAItE,OAAO,KAAK;EAAO;EAAK,SAAS;EAAc,EAAE,OAAO;CACxD,IAAM,IAAM,MAAM,MAAM,GAAK;EAC3B,QAAQ;EACR,SAAS;EACT;EACD,CAAC;AAEF,KAAI,EAAI,IAAI;EACV,IAAM,IAAa,OAAO,YAAY,EAAI,QAAQ,SAAS,CAAC,EACtD,IAAS;GAAE,GAAI,MAAM,EAAI,MAAM;GAAG,SAAS;GAAY;AAE7D,SADA,OAAO,MAAM,GAAQ,cAAc,EAC5B;;CAET,IAAM,IAAM;EAAE,MAAM,EAAI;EAAQ,SAAS;EAAO,KAAK,EAAI;EAAY;AAErE,QADA,OAAO,MAAM,EAAI,EACV;;AAIT,MAAa,OAAO,OAClB,GACA,MAC2B;CAC3B,IAAM,IAAM,MAAM,IAAO,GAAK,EAAK;AACnC,KAAI,EAAI,QACN,QAAO,EAAI;AAEb,KAAI,GAAM,WAAW;AACnB,IAAK,UAAU,EAAI,OAAO,qBAAqB;AAC/C;;AAEF,OAAM,MAAM,EAAI,OAAO,qBAAqB;GAIjC,QAAQ,OACnB,GACA,MAC2B;CAC3B,IAAM,IAAM,MAAM,KAAQ,GAAK,EAAK;AACpC,KAAI,EAAI,QACN,QAAO,EAAI;AAEb,KAAI,GAAM,WAAW;AACnB,IAAK,UAAU,EAAI,OAAO,sBAAsB;AAChD;;AAEF,OAAM,MAAM,EAAI,OAAO,sBAAsB;GAIlC,eAAe,OAC1B,GACA,MACqB;CACrB,IAAM,IAAM,MAAM,KAAK,GAAK,EAAK;AAMjC,QALI,EAAI,WACF,GAAM,eAAa,EAAK,YAAY,EAAI,OAAO,UAAU,EACtD,OAEL,GAAM,aAAW,EAAK,UAAU,EAAI,OAAO,sBAAsB,EAC9D;;AC7MT,IAAa,aAAb,MAAwB;CACpB,UAAmC;CAEnC,cAAc;CAGd,YAAY,GAAyB;AAEjC,SADA,KAAK,UAAU,GACR;;CAKX,MAAM,MAAM,EAAE,aAAU,eAA2F;AAI/G,MAHA,MAAM,MAAM,SAAS,EACjB,MAAM;GAAE;GAAU;GAAU,EAC/B,CAAC,EACE,KAAK,QACL,QAAO,aAAa,KAAK,QAAQ;;CAKzC,MAAM,SAAwB;AAC1B,QAAM,MAAM,SAAS;;CAYzB,MAAM,SAAS,EAAE,aAAU,aAAU,eAA8G;AAI/I,MAHA,MAAM,MAAM,YAAY,EACpB,MAAM;GAAE;GAAU;GAAU;GAAU,EACzC,CAAC,EACE,KAAK,QACL,QAAO,aAAa,KAAK,QAAQ;;CAUzC,MAAM,UAAU,GAAmC;AAI/C,SAHe,MAAM,MAAc,YAAY,EAC3C,MAAM,EAAE,YAAS,EACpB,CAAC,KACgB;;CAMtB,MAAM,gBAAgB,GAAoC;AAItD,SAHe,MAAM,KAAc,iBAAiB,EAChD,MAAM,EAAE,aAAU,EACrB,CAAC,IACe;;CAKrB,MAAM,eAA4C;AAC9C,SAAQ,MAAM,KAAyB,eAAe,IAAK,EAAE;;CAGjE,MAAM,YAAY,GAA8H;AAK5I,SAAO,KAAkB,eAJY;GACjC,SAAS,OAAO,GAAQ,WAAW,GAAK;GACxC,gBAAgB,OAAO,GAAQ,kBAAkB,GAAM;GAC1D,CAC4C;;CAGjD,MAAM,aAAa,GAA+F;EAC9G,IAAMC,IAA+B,EAAE;AAGvC,SAFI,GAAQ,cAAW,EAAK,YAAY,EAAO,YAC3C,GAAQ,iBAAiB,KAAA,MAAW,EAAK,eAAe,OAAO,EAAO,aAAa,GAC/E,MAAM,KAAwB,gBAAgB,EAAK,IAAK,EAAE;;CAGtE,MAAM,gBAAgB,GAAkG;EACpH,IAAMA,IAA+B,EAAE,WAAW,EAAO,WAAW;AAEpE,SADI,EAAO,iBAAiB,KAAA,MAAW,EAAK,eAAe,OAAO,EAAO,aAAa,GAC/E,KAAiB,mBAAmB,EAAK;;CAGpD,MAAM,gBAAgB,GAAkG;EACpH,IAAMA,IAA+B,EAAE,WAAW,EAAO,WAAW;AAEpE,SADI,EAAO,iBAAiB,KAAA,MAAW,EAAK,eAAe,OAAO,EAAO,aAAa,GAC/E,KAAiB,mBAAmB,EAAK;;CAGpD,MAAM,iBAAiB,GAA4F;EAC/G,IAAMA,IAA+B,EAAE,KAAK,EAAO,KAAK;AAExD,SADI,EAAO,iBAAiB,KAAA,MAAW,EAAK,eAAe,OAAO,EAAO,aAAa,GAC/E,KAAiB,oBAAoB,EAAK;;CAKrD,MAAM,kBAAkB,GAAoD;AACxE,SAAO,KAAqB,qBAAqB,EAAE,MAAM,EAAE,UAAO,EAAE,CAAC;;CAGzE,MAAM,oBAAoB,GAAwH;AAC9I,SAAO,KAA+B,uBAAuB,EAAE,MAAM;GAAE,GAAG;GAAQ,QAAQ,OAAO,EAAO,OAAO;GAAE,UAAU,OAAO,EAAO,SAAS;GAAE,EAAE,CAAC;;CAG3J,MAAM,2BAA2B,GAAmG;AAChI,SAAO,KAA+B,8BAA8B,EAAE,MAAM;GAAE,GAAG;GAAQ,QAAQ,OAAO,EAAO,OAAO;GAAE,UAAU,OAAO,EAAO,SAAS;GAAE,EAAE,CAAC;;CAGlK,MAAM,yBAAyB,GAAuE;AAClG,SAAQ,MAAM,KAA4B,4BAA4B,EAAE,MAAM,EAAE,SAAS,EAAO,SAAS,EAAE,CAAC,IAAK,EAAE;;CAKvH,MAAM,eAAe,GAAiD;AAClE,SAAO,KAAkB,kBAAkB,EAAE,MAAM,EAAE,UAAO,EAAE,CAAC;;CAGnE,MAAM,iBAAiB,GAAqH;AACxI,SAAO,KAA4B,oBAAoB,EAAE,MAAM;GAAE,GAAG;GAAQ,QAAQ,OAAO,EAAO,OAAO;GAAE,UAAU,OAAO,EAAO,SAAS;GAAE,EAAE,CAAC;;CAGrJ,MAAM,0BAA0B,GAAgG;AAC5H,SAAO,KAA4B,6BAA6B,EAAE,MAAM;GAAE,GAAG;GAAQ,QAAQ,OAAO,EAAO,OAAO;GAAE,UAAU,OAAO,EAAO,SAAS;GAAE,EAAE,CAAC;;CAG9J,MAAM,sBAAsB,GAAoE;AAC5F,SAAQ,MAAM,KAAyB,yBAAyB,EAAE,MAAM,EAAE,SAAS,EAAO,SAAS,EAAE,CAAC,IAAK,EAAE;;CAKjH,MAAM,gBAAgB,GAAoD;AACtE,SAAO,KAAmB,mBAAmB,EAAE,MAAM,EAAE,YAAS,EAAE,CAAC;;CAGvE,MAAM,kBAAkB,GAAsH;AAC1I,SAAO,KAA6B,qBAAqB,EAAE,MAAM;GAAE,GAAG;GAAQ,QAAQ,OAAO,EAAO,OAAO;GAAE,UAAU,OAAO,EAAO,SAAS;GAAE,EAAE,CAAC;;CAGvJ,MAAM,yBAAyB,GAAiG;AAC5H,SAAO,KAA6B,4BAA4B,EAAE,MAAM;GAAE,GAAG;GAAQ,QAAQ,OAAO,EAAO,OAAO;GAAE,UAAU,OAAO,EAAO,SAAS;GAAE,EAAE,CAAC;;CAG9J,MAAM,uBAAuB,GAAqE;AAC9F,SAAQ,MAAM,KAA0B,0BAA0B,EAAE,MAAM,EAAE,SAAS,EAAO,SAAS,EAAE,CAAC,IAAK,EAAE;;CAKnH,MAAM,gBAAgB,GAAoD;AACtE,SAAO,KAAmB,mBAAmB,EAAE,MAAM,EAAE,YAAS,EAAE,CAAC;;CAGvE,MAAM,kBAAkB,GAAsH;AAC1I,SAAO,KAA6B,qBAAqB,EAAE,MAAM;GAAE,GAAG;GAAQ,QAAQ,OAAO,EAAO,OAAO;GAAE,UAAU,OAAO,EAAO,SAAS;GAAE,EAAE,CAAC;;CAGvJ,MAAM,yBAAyB,GAAiG;AAC5H,SAAO,KAA6B,4BAA4B,EAAE,MAAM;GAAE,GAAG;GAAQ,QAAQ,OAAO,EAAO,OAAO;GAAE,UAAU,OAAO,EAAO,SAAS;GAAE,EAAE,CAAC;;CAG9J,MAAM,uBAAuB,GAAqE;AAC9F,SAAQ,MAAM,KAA0B,0BAA0B,EAAE,MAAM,EAAE,SAAS,EAAO,SAAS,EAAE,CAAC,IAAK,EAAE;;CAKnH,MAAM,mBAAmB,GAA0D;AAC/E,SAAO,KAAsB,sBAAsB,EAAE,MAAM,EAAE,eAAY,EAAE,CAAC;;CAGhF,MAAM,qBAAqB,GAAyH;AAChJ,SAAO,KAAgC,wBAAwB,EAAE,MAAM;GAAE,GAAG;GAAQ,QAAQ,OAAO,EAAO,OAAO;GAAE,UAAU,OAAO,EAAO,SAAS;GAAE,EAAE,CAAC;;CAG7J,MAAM,4BAA4B,GAAoG;AAClI,SAAO,KAAgC,+BAA+B,EAAE,MAAM;GAAE,GAAG;GAAQ,QAAQ,OAAO,EAAO,OAAO;GAAE,UAAU,OAAO,EAAO,SAAS;GAAE,EAAE,CAAC;;CAGpK,MAAM,0BAA0B,GAAwE;AACpG,SAAQ,MAAM,KAA6B,6BAA6B,EAAE,MAAM,EAAE,SAAS,EAAO,SAAS,EAAE,CAAC,IAAK,EAAE;;CAKzH,MAAM,eAAe,GAAqF;AACtG,SAAQ,MAAM,KAAqB,kBAAkB,EAAE,MAAM,EAAE,GAAG,GAAQ,EAAE,CAAC,IAAK,EAAE;;CAGxF,MAAM,cAAc,GAAoD;AACpE,SAAO,MAAM,aAAa,iBAAiB,EAA4B;;CAG3E,MAAM,UAAU,GAA2G;AACvH,SAAO,MAAM,aAAa,aAAa,EAA4B;;CAGvE,MAAM,gBAAgB,GAAsD;AACxE,SAAO,MAAM,aAAa,mBAAmB,EAA4B;;CAK7E,MAAM,iBAA4C;AAC9C,SAAQ,MAAM,KAAuB,iBAAiB,IAAK,EAAE;;CAGjE,MAAM,gBAAgB,GAA4C;AAC9D,SAAQ,MAAM,KAAwB,mBAAmB,EAAE,MAAM,IAAQ,EAAE,OAAO,OAAO,EAAM,EAAE,GAAG,EAAE,EAAE,CAAC,IAAK,EAAE;;CAGpH,MAAM,WAAW,GAA+G;AAC5H,SAAO,MAAM,aAAa,cAAc,EAA4B;;CAKxE,MAAM,mBAAmB,GAAoD;AACzE,SAAO,KAAsB,sBAAsB,EAAE,MAAM,EAAE,SAAM,EAAE,CAAC;;CAI1E,MAAM,mBAA6C;AAC/C,SAAQ,MAAM,KAAsB,kBAAkB,IAAK,EAAE;;CAIjE,MAAM,mBAAkD;AACpD,SAAQ,MAAM,KAA2B,kBAAkB,IAAK,EAAE;;CAItE,MAAM,kBAAkB,GAAoF;EACxG,IAAMA,IAA+B,EAAE;AAGvC,SAFI,GAAQ,aAAU,EAAK,WAAW,EAAO,WACzC,GAAQ,UAAU,KAAA,MAAW,EAAK,QAAQ,OAAO,EAAO,MAAM,GAC1D,MAAM,KAAuB,oBAAoB,EAAE,SAAM,CAAC,IAAK,EAAE;;CAI7E,MAAM,YAAY,GAAkH;AAChI,SAAO,KAA0B,eAAe,EAAE,MAAM;GAAE,GAAG;GAAQ,QAAQ,OAAO,EAAO,OAAO;GAAE,UAAU,OAAO,EAAO,SAAS;GAAE,EAAE,CAAC;;;AAIlJ,MAAa,aAAa,IAAI,YAAY"}
|
|
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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"}
|
package/dist/types/client.d.ts
CHANGED
|
@@ -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
|
/**
|