{"version":3,"sources":["../../../../../../../HBuilderX/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-console/src/runtime/app/socket.ts","uni_modules/ak-req/ak-req.uts","../../../../../../../HBuilderX/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-console/src/runtime/app/index.ts","App.uvue","uni_modules/i18n/index.uts","uni_modules/ak-req/interface.uts","ak/config.uts","utils/utils.uts","components/supadb/aksupa.uts","components/supadb/aksupainstance.uts","types/mall-types.uts","pages/sense/types.uts","utils/sapi.uts","utils/store.uts","main.uts","pages/user/types.uts","utils/supabaseService.uts","pages/mall/consumer/index.uvue","pages/mall/consumer/category.uvue","pages/mall/consumer/messages.uvue","pages/mall/consumer/cart.uvue","pages/mall/consumer/profile.uvue","pages/mall/consumer/settings.uvue","pages/mall/consumer/wallet.uvue","pages/mall/consumer/withdraw.uvue","pages/mall/consumer/coupons.uvue","pages/mall/consumer/favorites.uvue","pages/mall/consumer/footprint.uvue","pages/mall/consumer/address-list.uvue","pages/mall/consumer/address-edit.uvue","pages/mall/consumer/checkout.uvue","pages/mall/consumer/payment.uvue","pages/mall/consumer/orders.uvue","pages/mall/consumer/order-detail.uvue","pages/mall/consumer/logistics.uvue","pages/mall/consumer/review.uvue","pages/mall/consumer/refund.uvue","pages/mall/consumer/chat.uvue","pages/mall/consumer/subscription/followed-shops.uvue","pages/mall/consumer/points/index.uvue","pages/mall/consumer/red-packets/index.uvue","pages/mall/consumer/bank-cards/index.uvue","pages/mall/consumer/bank-cards/add.uvue"],"sourcesContent":["/// \n// 之所以又写了一份,是因为外层的socket,connectSocket的时候必须传入multiple:true\n// 但是android又不能传入,目前代码里又不能写条件编译之类的。\nexport function initRuntimeSocket(\n hosts: string,\n port: string,\n id: string\n): Promise {\n if (hosts == '' || port == '' || id == '') return Promise.resolve(null)\n return hosts\n .split(',')\n .reduce>(\n (\n promise: Promise,\n host: string\n ): Promise => {\n return promise.then((socket): Promise => {\n if (socket != null) return Promise.resolve(socket)\n return tryConnectSocket(host, port, id)\n })\n },\n Promise.resolve(null)\n )\n}\n\nconst SOCKET_TIMEOUT = 500\nfunction tryConnectSocket(\n host: string,\n port: string,\n id: string\n): Promise {\n return new Promise((resolve, reject) => {\n const socket = uni.connectSocket({\n url: `ws://${host}:${port}/${id}`,\n fail() {\n resolve(null)\n },\n })\n const timer = setTimeout(() => {\n // @ts-expect-error\n socket.close({\n code: 1006,\n reason: 'connect timeout',\n } as CloseSocketOptions)\n resolve(null)\n }, SOCKET_TIMEOUT)\n\n socket.onOpen((e) => {\n clearTimeout(timer)\n resolve(socket)\n })\n socket.onClose((e) => {\n clearTimeout(timer)\n resolve(null)\n })\n socket.onError((e) => {\n clearTimeout(timer)\n resolve(null)\n })\n })\n}\n","import { AkReqUploadOptions, AkReqOptions, AkReqResponse, AkReqError } from './interface.uts';\r\nimport { SUPA_URL, IS_TEST_MODE } from '@/ak/config.uts';\r\n\r\n// token 持久化 key\r\nconst ACCESS_TOKEN_KEY = 'akreq_access_token';\r\nconst REFRESH_TOKEN_KEY = 'akreq_refresh_token';\r\nconst EXPIRES_AT_KEY = 'akreq_expires_at';\r\n\r\n// 优化:用静态变量缓存 token,只有 set/clear 时同步 storage\r\nlet _accessToken : string | null = null;\r\nlet _refreshToken : string | null = null;\r\nlet _expiresAt : number | null = null;\r\n\r\nexport class AkReq {\r\n\tstatic setToken(token : string, refreshToken : string, expiresAt : number) {\r\n\t\t_accessToken = token;\r\n\t\t_refreshToken = refreshToken;\r\n\t\t_expiresAt = expiresAt;\r\n\t\tuni.setStorageSync(ACCESS_TOKEN_KEY, token);\r\n\t\tuni.setStorageSync(REFRESH_TOKEN_KEY, refreshToken);\r\n\t\tuni.setStorageSync(EXPIRES_AT_KEY, expiresAt);\r\n\t}\r\n\tstatic getToken() : string | null {\r\n\t\tif (_accessToken != null) return _accessToken;\r\n\t\tconst t = uni.getStorageSync(ACCESS_TOKEN_KEY) as string | null;\r\n\t\t_accessToken = t;\r\n\t\treturn t;\r\n\t}\r\n\tstatic getRefreshToken() : string | null {\r\n\t\tif (_refreshToken != null) return _refreshToken;\r\n\t\tconst t = uni.getStorageSync(REFRESH_TOKEN_KEY) as string | null;\r\n\t\t_refreshToken = t;\r\n\t\treturn t;\r\n\t} static getExpiresAt() : number | null {\r\n\t\tconst val = _expiresAt;\r\n\t\tif (val != null) return val;\r\n\t\tconst t = uni.getStorageSync(EXPIRES_AT_KEY) as number | null;\r\n\t\t_expiresAt = t;\r\n\t\treturn t;\r\n\t}\r\n\tstatic clearToken() {\r\n\t\t_accessToken = null;\r\n\t\t_refreshToken = null;\r\n\t\t_expiresAt = null;\r\n\t\tuni.removeStorageSync(ACCESS_TOKEN_KEY);\r\n\t\tuni.removeStorageSync(REFRESH_TOKEN_KEY);\r\n\t\tuni.removeStorageSync(EXPIRES_AT_KEY);\r\n\t}\t// 判断 token 是否即将过期(提前5分钟刷新)\r\n\tstatic isTokenExpiring() : boolean {\r\n\t\tconst expiresAt = this.getExpiresAt();\r\n\t\tif (expiresAt === null || expiresAt == 0) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tconst now = Math.floor(Date.now() / 1000);\r\n\t\treturn (expiresAt - now) < 300; // 提前5分钟刷新\r\n\t}\r\n\r\n\t// 自动刷新 token,返回 true=已刷新,false=未刷新\r\n\tstatic async refreshTokenIfNeeded(apikey ?: string) : Promise {\r\n\t\t// 没有 access_token 直接返回,不刷新\r\n\t\tconst accessToken = this.getToken();\r\n\t\tif (accessToken === null || accessToken === \"\") {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (!this.isTokenExpiring()) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tconst refreshToken = this.getRefreshToken();\r\n\t\tif (refreshToken === null || refreshToken === \"\") {\r\n\t\t\tthis.clearToken();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t// 构造 header,必须带 apikey\r\n\t\tlet headers = {} as UTSJSONObject;\r\n\t\tif (apikey !== null && apikey !== \"\") {\r\n\t\t\theaders = Object.assign({}, headers, { 'apikey': apikey }) as UTSJSONObject;\r\n\t\t} try {\r\n\t\t\tconst res = await this.request({\r\n\t\t\t\turl: SUPA_URL + '/auth/v1/token?grant_type=refresh_token',\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\tdata: ({ refresh_token: refreshToken } as UTSJSONObject),\r\n\t\t\t\theaders: headers,\r\n\t\t\t\tcontentType: 'application/json'\r\n\t\t\t}, true); // skipRefresh=true,避免递归\r\n\t\t\tconst data = res.data as UTSJSONObject | null;\r\n\t\t\tlet accessToken : string | null = null;\r\n\t\t\tlet refreshTokenNew : string | null = null;\r\n\t\t\tlet expiresAt : number | null = null;\r\n\t\t\tif (data != null && typeof data.getString === 'function' && typeof data.getNumber === 'function') {\r\n\t\t\t\taccessToken = data.getString('access_token');\r\n\t\t\t\trefreshTokenNew = data.getString('refresh_token');\r\n\t\t\t\texpiresAt = data.getNumber('expires_at');\r\n\t\t\t}\r\n\t\t\tif (accessToken !== null && refreshTokenNew !== null && expiresAt !== null) {\r\n\t\t\t\tthis.setToken(accessToken, refreshTokenNew, expiresAt);\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\tthis.clearToken();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tthis.clearToken();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t// options: AkReqOptions, skipRefresh: boolean = false\r\n\tstatic async request(options : AkReqOptions, skipRefresh ?: boolean) : Promise> {\r\n\t\t// 自动刷新 token\r\n\t\tif (skipRefresh != true) {\r\n\t\t\tlet apikey : string | null = null;\r\n\t\t\tconst headersObj = options.headers;\r\n\t\t\tif (headersObj != null && typeof headersObj.getString === 'function') {\r\n\t\t\t\tapikey = headersObj.getString('apikey');\r\n\t\t\t}\r\n\t\t\tawait this.refreshTokenIfNeeded(apikey);\r\n\t\t}\r\n\r\n\t\t// 统一 header,自动带上 Authorization/Content-Type/Accept\r\n\t\tlet headers = options.headers ?? ({} as UTSJSONObject);\r\n\t\tconst token = this.getToken();\r\n\t\tif (token != null && token != \"\") {\r\n\t\t\theaders = Object.assign({}, headers, { Authorization: `Bearer ${token}` }) as UTSJSONObject;\r\n\t\t}\r\n\t\tlet contentType = options.contentType ?? '';\r\n\t\tif (headers != null && typeof headers.getString === 'function') {\r\n\t\t\tconst headerContentType = headers.getString('Content-Type');\r\n\t\t\tif (headerContentType != null) {\r\n\t\t\t\tcontentType = headerContentType;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (contentType != null && contentType != \"\") {\r\n\t\t\theaders = Object.assign({}, headers, { 'Content-Type': contentType }) as UTSJSONObject;\r\n\t\t}\r\n\t\t// 默认 Accept\r\n\t\theaders = Object.assign({ Accept: 'application/json' } as UTSJSONObject, headers) as UTSJSONObject;\r\n\r\n\t\tconst timeout = options.timeout ?? 10000;\r\n\t\tconst maxRetry = Math.max(0, options.retryCount ?? 0);\r\n\t\tconst baseDelay = Math.max(0, options.retryDelayMs ?? 300);\r\n\r\n\t\tconst doOnce = (): Promise> => {\r\n\t\t\treturn new Promise>((resolve) => {\r\n\t\t\t\tuni.request({\r\n\t\t\t\t\turl: options.url,\r\n\t\t\t\t\tmethod: options.method ?? 'GET',\r\n\t\t\t\t\tdata: options.data,\r\n\t\t\t\t\theader: headers,\r\n\t\t\t\t\ttimeout: timeout,\r\n\t\t\t\t\tsuccess: (res) => {\r\n\t\t\t\t\t\t// HEAD 请求特殊处理:没有响应体,只有 headers\r\n\t\t\t\t\t\tif (options.method == 'HEAD') {\r\n\t\t\t\t\t\t\tconst result = AkReq.createResponse(\r\n\t\t\t\t\t\t\t\tres.statusCode,\r\n\t\t\t\t\t\t\t\t[] as Array,\r\n\t\t\t\t\t\t\t\tres.header as UTSJSONObject\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tresolve(result);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// 兼容 res.data 可能为 string 或 UTSJSONObject 或 UTSArray\r\n\t\t\t\t\t\tlet data : UTSJSONObject | Array | null;\r\n\t\t\t\t\t\tif (typeof res.data == 'string') {\r\n\t\t\t\t\t\t\tconst strData = res.data as string;\r\n\t\t\t\t\t\t\tif (strData.length > 0 && /[^\\s]/.test(strData)) {\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\tdata = JSON.parse(strData) as UTSJSONObject;\r\n\t\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\t\t// 非 JSON 响应(例如纯文本/空响应/数字等),保持原始字符串,避免 JSON.parse 崩溃\r\n\t\t\t\t\t\t\t\t\tdata = new UTSJSONObject({ raw: strData });\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tdata = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else if (Array.isArray(res.data)) {\r\n\t\t\t\t\t\t\tdata = res.data as UTSJSONObject[];\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tconst objData = res.data as UTSJSONObject | null;\r\n\t\t\t\t\t\t\tdata = objData;\r\n\t\t\t\t\t\t\tif (objData != null) {\r\n\t\t\t\t\t\t\t\tconst accessToken = objData.getString('access_token');\r\n\t\t\t\t\t\t\t\tconst refreshTokenNew = objData.getString('refresh_token');\r\n\t\t\t\t\t\t\t\tconst expiresAt = objData.getNumber('expires_at');\r\n\t\t\t\t\t\t\t\tif (accessToken !== null && refreshTokenNew !== null && expiresAt !== null) {\r\n\t\t\t\t\t\t\t\t\tAkReq.setToken(accessToken, refreshTokenNew, expiresAt);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tconst result = AkReq.createResponse(\r\n\t\t\t\t\t\t\tres.statusCode,\r\n\t\t\t\t\t\t\tdata ?? {},\r\n\t\t\t\t\t\t\tres.header as UTSJSONObject\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tresolve(result);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfail: (err) => {\r\n\t\t\t\t\t\tconst result = AkReq.createResponse(\r\n\t\t\t\t\t\t\terr.errCode,\r\n\t\t\t\t\t\t\terr.data ?? {},\r\n\t\t\t\t\t\t\t{} as UTSJSONObject,\r\n\t\t\t\t\t\t\tnew UniError('uni-request', err.errCode, err.errMsg ?? 'request fail')\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tresolve(result);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tlet attempt = 0;\r\n\t\tlet lastRes: AkReqResponse | null = null;\r\n\t\twhile (attempt <= maxRetry) {\r\n\t\t\tconst res = await doOnce();\r\n\t\t\tlastRes = res;\r\n\t\t\t// 仅网络失败/超时(errCode 非 0 且 status 非 2xx/3xx)时重试\r\n\t\t\tconst status = res.status ?? 0;\r\n\t\t\tconst isOk = status >= 200 && status < 400;\r\n\t\t\tif (isOk) return res;\r\n\t\t\tif (attempt === maxRetry) break;\r\n\t\t\t// 简单退避\r\n\t\t\tconst delay = baseDelay * Math.pow(2, attempt);\r\n await new Promise((r) => { setTimeout(() => { r(); }, delay); });\r\n\t\t\tattempt++;\r\n\t\t}\r\n\t\tconst finalRes = lastRes!!;\r\n\t\t// 全局处理 401 未授权:在非 refresh 场景下,清理 token。\r\n\t\t// 测试模式下不强制跳登录页,避免影响任意跳转调试。\r\n\t\tif ((finalRes.status === 401) && (skipRefresh !== true)) {\r\n\t\t\ttry {\r\n\t\t\t\tthis.clearToken();\r\n\t\t\t\tuni.showToast({ title: '未授权或登录已过期,请重新登录', icon: 'none' });\r\n\t\t\t} catch (e) {}\r\n\t\t\ttry {\r\n\t\t\t\t// 动态读取配置,避免 ak-req 模块与业务工程强耦合\r\n\t\t\t\t// const cfg = require('@/ak/config.uts') as any\r\n\t\t\t\t// const isTest = cfg != null ? (cfg.IS_TEST_MODE === true) : false\r\n const isTest = IS_TEST_MODE\r\n\t\t\t\t// if (!isTest) {\r\n\t\t\t\t// \tuni.reLaunch({ url: '/pages/user/login' });\r\n\t\t\t\t// }\r\n\t\t\t} catch (e) {\r\n\t\t\t\t// try { uni.reLaunch({ url: '/pages/user/login' }); } catch (e2) {}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn finalRes;\r\n\t}\r\n\r\n\t// 新增 upload 方法,支持 uni.uploadFile,自动带 token/apikey\t\r\n\tstatic async upload(options : AkReqUploadOptions) : Promise> {\r\n\t\t// 上传前尝试刷新 token(若即将过期)。优先从 options.headers 或 apikey 字段获取 apikey\r\n\t\tlet apikey: string | null = null;\r\n\t\tconst hdr = options.headers;\r\n\t\tif (hdr != null && typeof hdr.getString === 'function') {\r\n\t\t\tapikey = hdr.getString('apikey');\r\n\t\t}\r\n if (apikey == null && options.apikey != null) apikey = options.apikey;\r\n await this.refreshTokenIfNeeded(apikey != null ? apikey : null);\r\n\r\n\t\tlet headers = options.headers ?? ({} as UTSJSONObject);\r\n\t\tconst token = this.getToken();\r\n\t\tif (token != null && token !== \"\") {\r\n\t\t\theaders = Object.assign({}, headers, { Authorization: `Bearer ${token}` }) as UTSJSONObject;\r\n\t\t}\r\n if (apikey != null && apikey !== \"\") {\r\n\t\t\theaders = Object.assign({}, headers, { apikey: apikey }) as UTSJSONObject;\r\n\t\t}\r\n\t\t// 默认 Accept\r\n\t\theaders = Object.assign({ Accept: 'application/json' } as UTSJSONObject, headers) as UTSJSONObject;\r\n\r\n\t\tconst timeout = options.timeout ?? 10000;\r\n\t\tconst maxRetry = Math.max(0, options.retryCount ?? 0);\r\n\t\tconst baseDelay = Math.max(0, options.retryDelayMs ?? 300);\r\n\r\n\t\tconst doOnce = (): Promise> => {\r\n\t\t\treturn new Promise>((resolve) => {\r\n\t\tconst task = uni.uploadFile({\r\n\t\t\turl: options.url,\r\n\t\t\tfilePath: options.filePath,\r\n\t\t\tname: options.name,\r\n\t\t\tformData: options.formData ?? {},\r\n\t\t\theader: headers,\r\n\t\t\ttimeout: timeout,\r\n\t\t\tsuccess: (res : UploadFileSuccess) => {\r\n\t\t\t\tlet parsed: UTSJSONObject | null = null;\r\n\t\t\t\ttry {\r\n\t\t\t\t\tparsed = JSON.parse(res.data) as UTSJSONObject;\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tparsed = null;\r\n\t\t\t\t}\r\n\t\t\t\tif (parsed != null) {\r\n\t\t\t\t\tconst accessToken = parsed.getString('access_token');\r\n\t\t\t\t\tconst refreshTokenNew = parsed.getString('refresh_token');\r\n\t\t\t\t\tconst expiresAt = parsed.getNumber('expires_at');\r\n\t\t\t\t\tif (accessToken !== null && refreshTokenNew !== null && expiresAt !== null) {\r\n\t\t\t\t\t\tAkReq.setToken(accessToken, refreshTokenNew, expiresAt);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tconst result = AkReq.createResponse(\r\n\t\t\t\t\tres.statusCode,\r\n\t\t\t\t\tparsed ?? {},\r\n\t\t\t\t\theaders\r\n\t\t\t\t);\r\n\t\t\t\tresolve(result);\r\n\t\t\t},\r\n\t\t\tfail: (err) => {\r\n\t\t\t\tconst result = AkReq.createResponse(\r\n\t\t\t\t\terr.errCode,\r\n\t\t\t\t\terr.data ?? {},\r\n\t\t\t\t\t{} as UTSJSONObject,\r\n\t\t\t\t\tnew UniError('uni-upload', err.errCode, err.errMsg ?? 'upload fail')\r\n\t\t\t\t);\r\n\t\t\t\tresolve(result);\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (options.onProgress != null && task != null) {\r\n\t\t\tconst progressCallback = (res: OnProgressUpdateResult) => {\r\n\t\t\t\tconst percent = res.progress as number; // 0-100\r\n\t\t\t\tconst sent = res.totalBytesSent as number | null;\r\n\t\t\t\tconst expected = res.totalBytesExpectedToSend as number | null;\r\n\t\t\t\tif (options.onProgress != null) {\r\n\t\t\t\t\toptions.onProgress(percent, sent, expected);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\ttask.onProgressUpdate(progressCallback);\r\n\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tlet attempt = 0;\r\n\t\tlet lastRes: AkReqResponse | null = null;\r\n\t\twhile (attempt <= maxRetry) {\r\n\t\t\tconst res = await doOnce();\r\n\t\t\tlastRes = res;\r\n\t\t\tconst status = res.status ?? 0;\r\n\t\t\tconst isOk = status >= 200 && status < 400;\r\n\t\t\tif (isOk) return res;\r\n\t\t\tif (attempt === maxRetry) break;\r\n\t\t\tconst delay = baseDelay * Math.pow(2, attempt);\r\n\t\t\tawait new Promise((resolve) => {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t}, delay);\r\n\t\t\t});\r\n\t\t\tattempt++;\r\n\t\t}\r\n\t\treturn lastRes!!;\r\n\t}\r\n\t// 辅助方法:创建 AkReqResponse 对象,避免类型推断问题\r\n\tstatic createResponse(\r\n\t\tstatus: number,\r\n\t\tdata: T | Array ,\r\n\t\theaders: UTSJSONObject,\r\n\t\terror: UniError | null = null,\r\n\t\ttotal: number | null = null,\r\n\t\tpage: number | null = null,\r\n\t\tlimit: number | null = null,\r\n\t\thasmore: boolean | null = null,\r\n\t\torigin: any | null = null\r\n\t): AkReqResponse {\r\n\t\treturn {\r\n\t\t\tstatus,\r\n\t\t\tdata,\r\n\t\t\theaders,\r\n\t\t\terror,\r\n\t\t\ttotal,\r\n\t\t\tpage,\r\n\t\t\tlimit,\r\n\t\t\thasmore,\r\n\t\t\torigin\r\n\t\t};\r\n\t}\r\n\r\n\t// 新增:支持类型转换的请求方法\r\n\tstatic async requestAs(options : AkReqOptions, skipRefresh ?: boolean) : Promise>> {\r\n\t\tconst response = await this.request(options, skipRefresh);\r\n\t\t\r\n\t\t// 如果原始 data 是 null,直接返回 null\r\n\t\t// if (response.data == null) {\r\n\t\t// \treturn {\r\n\t\t// \t\tstatus: response.status,\r\n\t\t// \t\tdata: null,\r\n\t\t// \t\theaders: response.headers,\r\n\t\t// \t\terror: response.error,\r\n\t\t// \t\ttotal: response.total,\r\n\t\t// \t\tpage: response.page,\r\n\t\t// \t\tlimit: response.limit,\r\n\t\t// \t\thasmore: response.hasmore,\r\n\t\t// \t\torigin: response.origin\r\n\t\t// \t} as AkReqResponse>;\r\n\t\t// }\r\n\t\t\r\n\t\t// 尝试类型转换\r\n\t\tlet convertedData: T | null = null;\r\n\t\ttry {\r\n\r\n\t\t\tif (response.data instanceof UTSJSONObject) {\r\n\t\t\t\tconvertedData = response.data.parse();\r\n\t\t\t} else if (Array.isArray(response.data)) {\r\n\t\t\t\tconst convertedArray: Array = [];\r\n\t\t\t\tconst dataArray = response.data;\r\n\t\t\t\tfor (let i = 0; i < dataArray.length; i++) {\r\n\t\t\t\t\tconst item = dataArray[i];\r\n\t\t\t\t\tif (item instanceof UTSJSONObject) {\r\n\t\t\t\t\t\tconst parsed = item.parse();\r\n\t\t\t\t\t\tif (parsed != null) {\r\n\t\t\t\t\t\t\tconvertedArray.push(parsed);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconvertedArray.push(item);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tconvertedData = convertedArray as T;\r\n\t\t\t}\r\n\r\n\t\t\t\r\n\r\n\r\n\r\n\t\t} catch (e) {\r\n\t\t\t__f__('warn','at uni_modules/ak-req/ak-req.uts:419','类型转换失败,使用原始 UTSJSONObject:', e);\r\n\t\t\t// 转换失败时,返回原始 UTSJSONObject\r\n\t\t\tconvertedData = response.data as T;\r\n\t\t}\r\n\t\t const aaa = {\r\n\t\t\tstatus: response.status,\r\n\t\t\tdata: convertedData!!,\r\n\t\t\theaders: response.headers,\r\n\t\t\terror: response.error,\r\n\t\t\ttotal: response.total,\r\n\t\t\tpage: response.page,\r\n\t\t\tlimit: response.limit,\r\n\t\t\thasmore: response.hasmore,\r\n\t\t\torigin: response.origin\r\n\t\t} ;\r\n\t\treturn aaa\r\n\t}\r\n}\r\n\r\nexport default AkReq;","import { initRuntimeSocket } from './socket'\n\nexport function initRuntimeSocketService(): Promise {\n const hosts: string = process.env.UNI_SOCKET_HOSTS\n const port: string = process.env.UNI_SOCKET_PORT\n const id: string = process.env.UNI_SOCKET_ID\n if (hosts == '' || port == '' || id == '') return Promise.resolve(false)\n let socketTask: SocketTask | null = null\n __registerWebViewUniConsole(\n (): string => {\n return process.env.UNI_CONSOLE_WEBVIEW_EVAL_JS_CODE\n },\n (data: string) => {\n socketTask?.send({\n data,\n } as SendSocketMessageOptions)\n }\n )\n return Promise.resolve()\n .then((): Promise => {\n return initRuntimeSocket(hosts, port, id).then((socket): boolean => {\n if (socket == null) {\n return false\n }\n socketTask = socket\n return true\n })\n })\n .catch((): boolean => {\n return false\n })\n}\n\ninitRuntimeSocketService()\n","\r\n\r\n\r\n","// i18n 国际化配置\r\n// 这是一个简化的 i18n 实现,用于支持多语言切换\r\n\r\n// 语言资源\r\nconst messages: UTSJSONObject = new UTSJSONObject()\r\n\r\n// 默认语言\r\nconst defaultLocale = 'zh-CN'\r\n\r\n// 当前语言(响应式)\r\nlet currentLocale = defaultLocale\r\n\r\n// 翻译函数\r\nfunction t(key: string, values: UTSJSONObject | null = null, locale: string | null = null): string {\r\n\tconst targetLocale = locale ?? currentLocale\r\n\t// 这里应该从 messages 中获取翻译,简化实现直接返回 key\r\n\t// 实际项目中应该加载语言资源文件\r\n\treturn key\r\n}\r\n\r\n// 创建响应式 locale 对象\r\nclass LocaleWrapper {\r\n get value(): string {\r\n return currentLocale\r\n }\r\n set value(newLocale: string) {\r\n currentLocale = newLocale\r\n }\r\n}\r\nconst localeObj = new LocaleWrapper()\r\n\r\n// I18n Global Context\r\nclass I18nGlobal {\r\n\tt(key: string, values: UTSJSONObject | null = null, locale: string | null = null): string {\r\n\t\treturn t(key, values, locale)\r\n\t}\r\n\tlocale: LocaleWrapper = localeObj\r\n}\r\n\r\n// I18n Instance\r\nclass I18nInstance {\r\n\tglobal: I18nGlobal = new I18nGlobal()\r\n}\r\n\r\n// 导出 i18n 对象\r\nconst i18n = new I18nInstance()\r\nexport default i18n\r\n","// ak-req 类型定义\r\nexport type AkReqOptions = {\r\n url: string;\r\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' |'HEAD';\r\n data?: UTSJSONObject | Array;\r\n headers?: UTSJSONObject;\r\n timeout?: number;\r\n contentType?: string; // 新增,支持顶级 contentType\r\n // 可选:重试设置(仅网络错误/超时触发)。默认重试 0 次\r\n retryCount?: number; // 最大重试次数,默认 0\r\n retryDelayMs?: number; // 首次重试延迟,默认 300ms,指数退避\r\n};\r\n// 上传参数类型定义\r\nexport type AkReqUploadOptions = {\r\n url: string,\r\n filePath: string,\r\n name: string,\r\n formData?: UTSJSONObject,\r\n headers?: UTSJSONObject,\r\n apikey?: string,\r\n timeout?: number,\r\n // 进度回调,0-100(注意:H5/APP 平台支持不同)\r\n onProgress?: (progress: number, transferredBytes?: number, totalBytes?: number) => void,\r\n // 可选:重试设置(仅网络错误/超时触发)。默认 0\r\n retryCount?: number,\r\n retryDelayMs?: number\r\n};\r\n\r\nexport type AkReqResponse = {\r\n status: number;\r\n data: T | Array | null; // 支持 null\r\n headers: UTSJSONObject;\r\n error: UniError | null;\r\n total:number |null;\r\n page: number |null;\r\n limit: number |null;\r\n hasmore:boolean |null;\r\n origin: any | null;\r\n};\r\n\r\nexport class AkReqError extends Error {\r\n code: number;\r\n constructor(message: string, code: number = 0) {\r\n super(message);\r\n this.code = code;\r\n this.name = 'AkReqError';\r\n }\r\n}\r\n","// Supabase 配置\r\n// 内网环境 - 本地部署的 Supabase\r\n// IP: 192.168.1.62\r\n// Kong HTTP Port: 8000\r\n\r\n//export const SUPA_URL: string = 'http://192.168.1.61:18000'\r\n//export const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlLTEiLCJpYXQiOjE3Njk2NzY0OTgsImV4cCI6MTkyNzM1NjQ5OH0.ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'\r\nexport const SUPA_URL: string = 'http://192.168.1.61:18000'\r\nexport const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlLTEiLCJpYXQiOjE3Njk2NzY0OTgsImV4cCI6MTkyNzM1NjQ5OH0.ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'\r\n\r\n// WebSocket 实时连接(内网使用 ws:// 而非 wss://)\r\nexport const WS_URL: string = 'ws://192.168.1.61:18000/realtime/v1/websocket'\r\n//export const WS_URL: string = 'ws://localhost:18000/realtime/v1/websocket'\r\n\r\n// 备用配置(已注释,如需切换可取消注释)\r\n// 开发环境 - 其他内网地址\r\n// export const SUPA_URL: string = 'http://192.168.0.150:8080'\r\n// export const SUPA_KEY: string = 'your-anon-key'\r\n// export const WS_URL: string = 'ws://192.168.0.150:8080/realtime/v1/websocket'\r\n\r\n// 生产环境 - Supabase 云服务(已注释)\r\n// export const SUPA_URL: string = 'https://ak3.oulog.com'\r\n// export const SUPA_KEY: string = 'your-anon-key'\r\n// export const WS_URL: string = 'wss://ak3.oulog.com/realtime/v1/websocket'\r\n\r\n// 指向你的 Supabase 服务(开发/私有部署)\r\n// export const SUPA_URL: string = 'http://192.168.1.64:3000'\r\n// export const SUPA_KEY: string = 'your-anon-key'\r\n// export const WS_URL: string = 'ws://192.168.1.64:3000/realtime/v1'\r\n\r\n// 路由配置\r\nexport const HOME_REDIRECT: string = '/pages/mall/consumer/index'\r\nexport const TABORPAGE: string = '/pages/mall/consumer/index'\r\n\r\n// 测试模式:放开任意跳转(禁用启动页/登录/401 的强制重定向)\r\nexport const IS_TEST_MODE: boolean = true","// 通用 UTSJSONObject 转任意 type 的函数\r\n// UTS 2024\r\n\r\nimport i18n from '@/uni_modules/i18n/index.uts';\r\n\r\n/**\r\n * 切换应用语言设置\r\n * @param locale 语言代码,如 'zh-CN' 或 'en-US'\r\n */\r\nexport function switchLocale(locale: string) {\r\n // 设置存储\r\n uni.setStorageSync('uVueI18nLocale', locale);\r\n \r\n // 设置 i18n 语言\r\n try {\r\n if (i18n != null && i18n.global != null) {\r\n i18n.global.locale.value = locale;\r\n }\r\n } catch (err) {\r\n __f__('error','at utils/utils.uts:20','Failed to switch locale:', err);\r\n }\r\n}\r\n\r\n/**\r\n * 获取当前语言设置\r\n * @returns 当前语言代码\r\n */\r\nexport function getCurrentLocale(): string {\r\n const locale = uni.getStorageSync('uVueI18nLocale') as string;\r\n if (locale == null || locale == '') {\r\n return 'zh-CN';\r\n }\r\n return locale;\r\n}\r\n\r\n/**\r\n * 确保语言设置正确初始化\r\n */\r\nexport function ensureLocaleInitialized() {\r\n const currentLocale = getCurrentLocale();\r\n if (currentLocale == null || currentLocale == '') {\r\n switchLocale('zh-CN');\r\n }\r\n}\r\n/**\r\n * 将任意错误对象转换为标准的 UniError\r\n * @param error 任意类型的错误对象\r\n * @param defaultMessage 默认错误消息\r\n * @returns 标准化的 UniError 对象\r\n */\r\nexport function toUniError(error: any, defaultMessage: string = '操作失败'): UniError {\r\n // 如果已经是 UniError,直接返回\r\n if (error instanceof UniError) {\r\n return error\r\n }\r\n let errorMessage = defaultMessage\r\n let errorCode = -1\r\n \r\n try {\r\n // 如果是普通 Error 对象\r\n if (error instanceof Error) {\r\n errorMessage = error.message != null && error.message != '' ? error.message : defaultMessage\r\n }\r\n // 如果是字符串\r\n else if (typeof error === 'string') {\r\n errorMessage = error\r\n } // 如果是对象,尝试提取错误信息\r\n else if (error != null && typeof error === 'object') {\r\n const errorObj = error as UTSJSONObject\r\n let message: string = ''\r\n \r\n // 逐个检查字段,避免使用 || 操作符\r\n if (errorObj['message'] != null) {\r\n const msgValue = errorObj['message']\r\n if (typeof msgValue === 'string') {\r\n message = msgValue\r\n }\r\n } else if (errorObj['errMsg'] != null) {\r\n const msgValue = errorObj['errMsg']\r\n if (typeof msgValue === 'string') {\r\n message = msgValue\r\n }\r\n } else if (errorObj['error'] != null) {\r\n const msgValue = errorObj['error']\r\n if (typeof msgValue === 'string') {\r\n message = msgValue\r\n }\r\n } else if (errorObj['details'] != null) {\r\n const msgValue = errorObj['details']\r\n if (typeof msgValue === 'string') {\r\n message = msgValue\r\n }\r\n } else if (errorObj['msg'] != null) {\r\n const msgValue = errorObj['msg']\r\n if (typeof msgValue === 'string') {\r\n message = msgValue\r\n }\r\n }\r\n \r\n if (message != '') {\r\n errorMessage = message\r\n }\r\n \r\n // 尝试提取错误码\r\n let code: number = 0\r\n if (errorObj['code'] != null) {\r\n const codeValue = errorObj['code']\r\n if (typeof codeValue === 'number') {\r\n code = codeValue\r\n }\r\n } else if (errorObj['errCode'] != null) {\r\n const codeValue = errorObj['errCode']\r\n if (typeof codeValue === 'number') {\r\n code = codeValue\r\n }\r\n } else if (errorObj['status'] != null) {\r\n const codeValue = errorObj['status']\r\n if (typeof codeValue === 'number') {\r\n code = codeValue\r\n }\r\n }\r\n \r\n if (code != 0) {\r\n errorCode = code\r\n }\r\n }\r\n } catch (e) {\r\n __f__('error','at utils/utils.uts:128','Error converting to UniError:', e)\r\n errorMessage = defaultMessage\r\n }\r\n // 创建标准 UniError\r\n const uniError = new UniError('AppError', errorCode, errorMessage)\r\n return uniError\r\n}\r\n\r\n/**\r\n * 响应式状态管理\r\n * @returns 响应式状态对象\r\n */\r\nexport function responsiveState() {\r\n const screenInfo = uni.getSystemInfoSync()\r\n const screenWidth = screenInfo.screenWidth\r\n \r\n return {\r\n isLargeScreen: screenWidth >= 768,\r\n isSmallScreen: screenWidth < 576,\r\n screenWidth: screenWidth,\r\n cardColumns: screenWidth >= 768 ? 3 : screenWidth >= 576 ? 2 : 1\r\n }\r\n}\r\n\r\nexport function goToLogin(redirectUrl?: string | null) {\r\n try {\r\n const target = redirectUrl != null && redirectUrl.length > 0 ? redirectUrl : ''\r\n if (target.length > 0) {\r\n const redirect = encodeURIComponent(target)\r\n uni.navigateTo({ url: `/pages/user/login?redirect=${redirect}` })\r\n } else {\r\n uni.navigateTo({ url: '/pages/user/login' })\r\n }\r\n } catch (e) {\r\n uni.navigateTo({ url: '/pages/user/login' })\r\n }\r\n}\r\n\r\n/**\r\n * 兼容 UTS Android 的剪贴板写入\r\n * @param text 要写入剪贴板的文本\r\n */\r\nexport function setClipboard(text: string): void {\r\n\r\n\r\n\r\n}\r\n\r\n/**\r\n * 格式化时间,显示为相对时间(如:刚刚,几小时前)\r\n * @param dateStr ISO 格式的日期字符串\r\n * @returns 格式化后的相对时间字符串\r\n */\r\nexport function formatTime(dateStr: string): string {\r\n if (dateStr == '') return ''\r\n try {\r\n const date = new Date(dateStr)\r\n const now = new Date()\r\n const diff = now.getTime() - date.getTime()\r\n const hours = Math.floor(diff / (1000 * 60 * 60))\r\n \r\n if (hours < 1) {\r\n return '刚刚'\r\n } else if (hours < 24) {\r\n return `${hours}小时前`\r\n } else {\r\n return `${Math.floor(hours / 24)}天前`\r\n }\r\n } catch (e) {\r\n __f__('error','at utils/utils.uts:197','formatTime error:', e)\r\n return dateStr.replace('T', ' ').split('.')[0]\r\n }\r\n}\r\n\r\n","import { AkReqResponse, AkReqUploadOptions, AkReq } from '@/uni_modules/ak-req/index.uts'\r\nimport type { AkReqOptions } from '@/uni_modules/ak-req/index.uts'\r\nimport { toUniError } from '@/utils/utils.uts'\r\n\r\nexport type AkSupaSignInResult = {\r\n\taccess_token : string;\r\n\trefresh_token : string;\r\n\texpires_at : number;\r\n\tuser : UTSJSONObject | null;\r\n\ttoken_type ?: string;\r\n\texpires_in ?: number;\r\n\traw : UTSJSONObject;\r\n}\r\n\r\n// Count 选项枚举\r\nexport type CountOption = 'exact' | 'planned' | 'estimated';\r\n\r\n// 定义查询选项类型,兼容 UTS\r\nexport type AkSupaSelectOptions = {\r\n\tlimit ?: number;\r\n\torder ?: string;\r\n\tgetcount ?: string; // 保持向后兼容\r\n\tcount ?: CountOption; // 新增:更清晰的 count 选项\r\n\thead ?: boolean; // 新增:head 模式,只返回元数据\r\n\tcolumns ?: string;\r\n\tsingle ?: boolean; // 新增,支持 single-object\r\n\trangeFrom ?: number; // 新增:range 分页起始位置\r\n\trangeTo ?: number; // 新增:range 分页结束位置\r\n};\r\n\r\n// 新增:order方法参数类型\r\nexport type OrderOptions = {\r\n\tascending ?: boolean;\r\n};\r\n\r\n// 新增类型定义,便于 getSession 返回类型复用\r\nexport type AkSupaSessionInfo = {\r\n\tsession : AkSupaSignInResult | null;\r\n\tuser : UTSJSONObject | null;\r\n};\r\n\r\n// 链式请求构建器\r\n// 强类型条件定义\r\ntype AkSupaCondition = {\r\n\tfield : string; // 已经 encodeURIComponent 过\r\n\top : string;\r\n\tvalue : any;\r\n\tlogic : string; // 'and' | 'or'\r\n};\r\n\r\nexport class AkSupaQueryBuilder {\r\n\tprivate _supa : AkSupa;\r\n\tprivate _table : string;\r\n\tprivate _filter : UTSJSONObject | null = null;\r\n\tprivate _options : AkSupaSelectOptions = {};\r\n\tprivate _values : UTSJSONObject | Array | null = null;\r\n\tprivate _single : boolean = false;\r\n\tprivate _conditions : Array = [];\r\n\tprivate _nextLogic : string = 'and';\r\n\t// 新增:记录当前操作类型\r\n\tprivate _action : 'select' | 'insert' | 'update' | 'delete' | 'rpc' | null = null;\r\n\tprivate _orString : string | null = null; // 新增:支持 or 字符串\r\n\tprivate _rpcFunction : string | null = null;\r\n\tprivate _rpcParams : UTSJSONObject | null = null;\r\n\tprivate _page : number = 1; // 新增:当前页码\r\n\r\n\tconstructor(supa : AkSupa, table : string) {\r\n\t\tthis._supa = supa;\r\n\t\tthis._table = table;\r\n\t}\r\n\r\n\t// 链式条件方法\r\n\teq(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'eq', value); }\r\n\tneq(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'neq', value); }\r\n\tgt(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'gt', value); }\r\n\tgte(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'gte', value); }\r\n\tlt(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'lt', value); }\r\n\tlte(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'lte', value); }\r\n\tlike(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'like', value); }\r\n\tilike(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'ilike', value); }\r\n\tin(field : string, value : any[]) : AkSupaQueryBuilder { return this._addCond(field, 'in', value); }\r\n\tis(field : string, value : any | null) : AkSupaQueryBuilder { return this._addCond(field, 'is', value); }\r\n\tcontains(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'cs', value); }\r\n\tcontainedBy(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'cd', value); }\r\n\tnot(field : string, opOrValue : any, value: any | null = null) : AkSupaQueryBuilder {\r\n\t\tif (value != null) {\r\n\t\t\t// 三元形式:field, operator, value\r\n\t\t\t// 例如 not('badge', 'is', null) -> badge=not.is.null\r\n\t\t\tconst combinedOp = 'not.' + opOrValue;\r\n\t\t\t// 将 null 转换为字符串 'null',避免构造对象时缺少 value 属性\r\n\t\t\tlet safeValue = value;\r\n\t\t\tif (value === null) {\r\n\t\t\t\tsafeValue = 'null';\r\n\t\t\t}\r\n\t\t\treturn this._addCond(field, combinedOp, safeValue);\r\n\t\t} else {\r\n\t\t\t// 二元形式:field, value\r\n\t\t\tlet safeValue = opOrValue;\r\n\t\t\tif (opOrValue === null) {\r\n\t\t\t\tsafeValue = 'null';\r\n\t\t\t}\r\n\t\t\treturn this._addCond(field, 'not', safeValue);\r\n\t\t}\r\n\t}\r\n\r\n\tand() : AkSupaQueryBuilder { this._nextLogic = 'and'; return this; }\r\n\tor(str ?: string) : AkSupaQueryBuilder {\r\n\t\tif (typeof str == 'string') {\r\n\t\t\tthis._orString = str;\r\n\t\t} else {\r\n\t\t\tthis._nextLogic = 'or';\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprivate _addCond(afield : string, op : string, value : any | null) : AkSupaQueryBuilder {\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:117','add cond:', op, afield, value)\r\n\t\tconst field = encodeURIComponent(afield)!!\r\n\t\t// 将 null 转换为字符串 'null',避免构造对象时缺少 value 属性\r\n\t\tlet safeValue = value;\r\n\t\tif (value === null) {\r\n\t\t\tsafeValue = 'null';\r\n\t\t}\r\n\t\tthis._conditions.push({ field, op, value: safeValue, logic: this._nextLogic });\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:125',this._conditions)\r\n\t\tthis._nextLogic = 'and';\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// 支持原有 where 方式\r\n\twhere(filter : UTSJSONObject) : AkSupaQueryBuilder {\r\n\t\tthis._filter = filter;\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpage(page : number) : AkSupaQueryBuilder {\r\n\t\tthis._page = page;\r\n\t\t// 如果已设置 limit,则自动设置 range\r\n\t\tlet limit = 0;\r\n\t\tif (typeof this._options.limit == 'number') {\r\n\t\t\tlimit = this._options.limit ?? 0;\r\n\t\t}\r\n\t\tif (limit > 0) {\r\n\t\t\tconst from = (page - 1) * limit;\r\n\t\t\tconst to = from + limit - 1;\r\n\t\t\tthis.range(from, to);\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\tlimit(limit : number) : AkSupaQueryBuilder {\r\n\t\tthis._options.limit = limit;\r\n\t\t// 总是为 limit 设置对应的 range,确保限制生效\r\n\t\tconst from = (this._page - 1) * limit;\r\n\t\tconst to = from + limit - 1;\r\n\t\tthis.range(from, to);\r\n\t\treturn this;\r\n\t}\r\n\r\n\torder(order : string, options ?: OrderOptions) : AkSupaQueryBuilder {\r\n\t\tif (options != null && options.ascending == false) {\r\n\t\t\tthis._options.order = order + '.desc';\r\n\t\t} else {\r\n\t\t\tthis._options.order = order + '.asc';\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\tcolumns(columns : string) : AkSupaQueryBuilder {\r\n\t\tthis._options.columns = columns;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// 新增:专门的 count 方法\r\n\tcount(option : CountOption = 'exact') : AkSupaQueryBuilder {\r\n\t\tthis._options.count = option;\r\n\t\tthis._options.head = true; // count 操作默认使用 head 模式\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// 新增:便捷的 count 方法\r\n\tcountExact() : AkSupaQueryBuilder {\r\n\t\treturn this.count('exact');\r\n\t}\r\n\r\n\tcountEstimated() : AkSupaQueryBuilder {\r\n\t\treturn this.count('estimated');\r\n\t}\r\n\r\n\tcountPlanned() : AkSupaQueryBuilder {\r\n\t\treturn this.count('planned');\r\n\t}\r\n\r\n\t// 新增:head 模式方法\r\n\thead(enable : boolean = true) : AkSupaQueryBuilder {\r\n\t\tthis._options.head = enable;\r\n\t\treturn this;\r\n\t}\r\n\r\n\tvalues(values : UTSJSONObject) : AkSupaQueryBuilder {\r\n\t\tthis._values = values;\r\n\t\treturn this;\r\n\t}\r\n\tsingle() : AkSupaQueryBuilder {\r\n\t\tthis._single = true;\r\n\t\treturn this;\r\n\t}\r\n\trange(from : number, to : number) : AkSupaQueryBuilder {\r\n\t\tthis._options.rangeFrom = from;\r\n\t\tthis._options.rangeTo = to;\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:209','设置 range:', from, 'to', to);\r\n\t\treturn this;\r\n\t}\r\n\t// 将 _conditions 强类型直接转换为 Supabase/PostgREST 查询字符串(不再用 UTSJSONObject 做中转)\r\n\tprivate _buildFilter() : string | null {\r\n\t\tif (this._conditions.length == 0 && (this._orString==null || this._orString == \"\")) {\r\n\t\t\t// 兼容 where(filter) 方式\r\n\t\t\tif (this._filter == null) return null;\r\n\t\t\t// 兼容旧的 UTSJSONObject filter\r\n\t\t\treturn buildSupabaseFilterQuery(this._filter);\r\n\t\t}\r\n\r\n\t\t// 先分组 and/or,全部用 AkSupaCondition 强类型\r\n\t\tconst ands: AkSupaCondition[] = [];\r\n\t\tconst ors: AkSupaCondition[] = [];\r\n\t\tfor (const c of this._conditions) {\r\n\t\t\tif (c.logic == \"or\") {\r\n\t\t\t\tors.push(c);\r\n\t\t\t} else {\r\n\t\t\t\tands.push(c);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst params: string[] = [];\r\n\t\t// 处理 and 条件\r\n\t\tfor (const cond of ands) {\r\n\t\t\tconst k = cond.field;\r\n\t\t\tconst op = cond.op;\r\n\t\t\tconst val = cond.value;\r\n\t\t\tif ((op == 'in' || op == 'not.in') && Array.isArray(val)) {\r\n\t\t\t\tparams.push(`${k}=${op}.(${val.map(x => typeof x == 'object' ? encodeURIComponent(JSON.stringify(x)) : encodeURIComponent(x.toString())).join(',')})`);\r\n\t\t\t} else if ((op == 'is' || op == 'not.is') && (val == null || val == 'null')) {\r\n\t\t\t\tparams.push(`${k}=${op}.null`);\r\n\t\t\t} else {\r\n\t\t\t\tconst opvalstr: string = (typeof val == 'object') ? JSON.stringify(val) : (val as string);\r\n\t\t\t\tparams.push(`${k}=${op}.${encodeURIComponent(opvalstr)}`);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// 处理 or 条件\r\n\t\tif (ors.length > 0) {\r\n\t\t\tconst orStr = ors.map(o => {\r\n\t\t\t\tconst k = o.field;\r\n\t\t\t\tconst op = o.op;\r\n\t\t\t\tconst val = o.value;\r\n\t\t\t\tif (op == \"in\" && Array.isArray(val)) {\r\n\t\t\t\t\treturn `${k}.in.(${val.map(x => encodeURIComponent(x as string)).join(\",\")})`;\r\n\t\t\t\t}\r\n\t\t\t\tif (op == \"is\" && (val == null)) {\r\n\t\t\t\t\treturn `${k}.is.null`;\r\n\t\t\t\t}\r\n\t\t\t\treturn `${k}.${op}.${encodeURIComponent(val as string)}`;\r\n\t\t\t}).join(\",\");\r\n\t\t\tparams.push(`or=(${orStr})`);\r\n\t\t}\r\n\t\tif (this._orString!=null && this._orString !== \"\") {\r\n\t\t\tparams.push(`or=(${encodeURIComponent(this._orString!!)})`);\r\n\t\t}\r\n\t\treturn params.length > 0 ? params.join('&') : null;\r\n\t}\r\n\r\n\tselect(columns : string = \"*\", opt : UTSJSONObject | null = null) : AkSupaQueryBuilder {\r\n\t\tthis._action = 'select';\r\n\t\tif (columns != null) {\r\n\t\t\tthis._options.columns = columns;\r\n\t\t}\r\n\t\tif (opt != null) {\r\n\t\t\t// 合并 opt 到 this._options\r\n\t\t\tObject.assign(this._options, opt);\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\tinsert(values : UTSJSONObject | Array) : AkSupaQueryBuilder {\r\n\t\tthis._action = 'insert';\r\n\t\t// 检查是否为空\r\n\t\tif (Array.isArray(values)) {\r\n\t\t\tif (values.length == 0) throw toUniError('No values set for insert', 'Insert操作缺少数据');\r\n\t\t} else {\r\n\t\t\tif (UTSJSONObject.keys(values).length == 0) throw toUniError('No values set for insert', 'Insert操作缺少数据');\r\n\t\t}\r\n\t\tthis._values = values;\r\n\t\treturn this;\r\n\t}\r\n\tupdate(values : UTSJSONObject) : AkSupaQueryBuilder {\r\n\t\tthis._action = 'update';\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:293','ak update', this._action)\r\n\t\tif (UTSJSONObject.keys(values).length == 0) throw toUniError('No values set for update', '更新操作缺少数据');\r\n\t\tthis._values = values;\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:296','ak update', values)\r\n\t\treturn this;\r\n\t}\r\n\tdelete() : AkSupaQueryBuilder {\r\n\t\tthis._action = 'delete';\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:301','delete action now')\r\n\t\tconst filter = this._buildFilter();\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:303',filter)\r\n\t\tif (filter == null) throw toUniError('No filter set for delete', '删除操作缺少筛选条件');\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:305','delete action')\r\n\t\treturn this;\r\n\t}\r\n\r\n\trpc(functionName : string, params ?: UTSJSONObject) : AkSupaQueryBuilder {\r\n\t\tthis._action = 'rpc';\r\n\t\tthis._rpcFunction = functionName;\r\n\t\tthis._rpcParams = params;\r\n\t\treturn this;\r\n\t}\r\n\t// 链式请求最终执行方法 - 返回 UTSJSONObject\r\n\tasync execute() : Promise> {\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:317','execute')\r\n\t\tconst filter = this._buildFilter();\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:319','execute', filter)\r\n\t\tlet res : any;\r\n\t\tswitch (this._action) {\r\n\t\t\tcase 'select': {\r\n\t\t\t\t// 传递 single 状态到 options\r\n\t\t\t\tif (this._single) {\r\n\t\t\t\t\tthis._options.single = true;\r\n\t\t\t\t\t// 如果是 single 请求,自动设置 limit 为 1\r\n\t\t\t\t\tif (this._options.limit == null) {\r\n\t\t\t\t\t\tthis._options.limit = 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//__f__('log','at components/supadb/aksupa.uts:330',this._options)\r\n\t\t\t\t}\t\t\t\t// 保证分页统计\r\n\t\t\t\tif (this._options.limit != null) {\r\n\t\t\t\t\tif (this._options.getcount == null && this._options.count == null) {\r\n\t\t\t\t\t\tthis._options.count = 'exact'; // 优先使用新的 count 选项\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tres = await this._supa.select(this._table, filter, this._options);\r\n\t\t\t\t// 解析 content-range header\r\n\t\t\t\tlet total = 0;\r\n\t\t\t\tlet hasmore = false;\r\n\t\t\t\tconst page = this._page;\r\n\t\t\t\tlet resdata = res.data\r\n\t\t\t\tlet limit = 0;\r\n\t\t\t\tif (typeof this._options.limit == 'number') {\r\n\t\t\t\t\tlimit = this._options.limit ?? 0;\r\n\t\t\t\t} else if (Array.isArray(resdata)) {\r\n\t\t\t\t\tlimit = resdata.length;\r\n\t\t\t\t}\r\n\t\t\t\tlet contentRange : string | null = null;\r\n\t\t\t\tif (res.headers != null) {\r\n\t\t\t\t\tlet theheader = res.headers as UTSJSONObject\r\n\t\t\t\t\tif (typeof theheader.get == 'function') {\r\n\r\n\t\t\t\t\t\tcontentRange = theheader.get('content-range') as string | null;\r\n\t\t\t\t\t} else if (typeof theheader['content-range'] == 'string') {\r\n\t\t\t\t\t\tcontentRange = theheader['content-range'] as string;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (contentRange != null) {\r\n\t\t\t\t\tconst match = /\\/(\\d+)$/.exec(contentRange);\r\n\t\t\t\t\tif (match != null) {\r\n\t\t\t\t\t\ttotal = parseInt(match[1] ?? \"0\");\r\n\t\t\t\t\t\thasmore = (page * limit) < total;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (total == 0) {\r\n\t\t\t\t\tif (typeof res['count'] == 'number') {\r\n\t\t\t\t\t\ttotal = res['count'] as number ?? 0;\r\n\t\t\t\t\t} else if (Array.isArray(resdata)) {\r\n\t\t\t\t\t\ttotal = resdata.length;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttotal = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (!hasmore) hasmore = (page * limit) < total;\t\t\t\t// 如果是 head 模式,只返回 count 信息\r\n\t\t\t\tif (this._options.head == true) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tdata: null, // head 模式不返回数据\r\n\t\t\t\t\t\ttotal,\r\n\t\t\t\t\t\tpage,\r\n\t\t\t\t\t\tlimit,\r\n\t\t\t\t\t\thasmore: false, // head 模式不需要分页信息\r\n\t\t\t\t\t\torigin: res,\r\n\t\t\t\t\t\tstatus: res.status,\r\n\t\t\t\t\t\theaders: res.headers,\r\n\t\t\t\t\t\terror: res.error\r\n\t\t\t\t\t} as AkReqResponse;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tdata: res.data,\r\n\t\t\t\t\ttotal,\r\n\t\t\t\t\tpage,\r\n\t\t\t\t\tlimit,\r\n\t\t\t\t\thasmore,\r\n\t\t\t\t\torigin: res,\r\n\t\t\t\t\tstatus: res.status,\r\n\t\t\t\t\theaders: res.headers,\r\n\t\t\t\t\terror: res.error\r\n\t\t\t\t} as AkReqResponse;\r\n\t\t\t}\r\n\t\t\tcase 'insert': {\r\n\t\t\t\tconst insertValues = this._values;\r\n\t\t\t\tif (insertValues == null) throw toUniError('No values set for insert', '插入操作缺少数据');\r\n\t\t\t\tres = await this._supa.insert(this._table, insertValues);\r\n\t\t\t\tbreak;\r\n\t\t\t} case 'update': {\r\n\t\t\t\tconst updateValues = this._values;\r\n\t\t\t\tif (updateValues == null) throw toUniError('No values set for update', '更新操作缺少数据');\r\n\t\t\t\tif (filter == null) throw toUniError('No filter set for update', '更新操作缺少筛选条件');\r\n\t\t\t\t// Update操作只支持单个对象,不支持数组\r\n\t\t\t\tif (Array.isArray(updateValues)) throw toUniError('Update does not support array values', '更新操作不支持数组数据');\r\n\t\t\t\tres = await this._supa.update(this._table, filter, updateValues as UTSJSONObject);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase 'delete': {\r\n\t\t\t\tif (filter == null) throw toUniError('No filter set for delete', '删除操作缺少筛选条件');\r\n\t\t\t\tres = await this._supa.delete(this._table, filter);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase 'rpc': {\r\n\t\t\t\tif (this._rpcFunction == null) throw toUniError('No RPC function specified', 'RPC调用缺少函数名');\r\n\t\t\t\tres = await this._supa.rpc(this._rpcFunction as string, this._rpcParams);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tdefault: {\r\n\t\t\t\tres = await this._supa.select(this._table, filter, this._options);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// 保证 data 字段存在(不能赋null,赋空对象或空字符串)\r\n\t\tif (res[\"data\"] == null) res[\"data\"] = {};\r\n\t\treturn res;\r\n\t}\t// 新增:支持类型转换的执行方法\r\n\tasync executeAs() : Promise>> {\r\n\t\tconst result = await this.execute();\r\n\r\n\t\t// 如果原始 data 是 null,直接返回 null\r\n\t\tif (result.data == null) {\r\n\t\t\tconst aaa = {\r\n\t\t\t\tstatus: result.status,\r\n\t\t\t\tdata: null,\r\n\t\t\t\theaders: result.headers,\r\n\t\t\t\terror: result.error,\r\n\t\t\t\ttotal: result.total,\r\n\t\t\t\tpage: result.page,\r\n\t\t\t\tlimit: result.limit,\r\n\t\t\t\thasmore: result.hasmore,\r\n\t\t\t\torigin: result.origin\r\n\t\t\t}\r\n\t\t\treturn aaa;\r\n\t\t}\r\n\r\n\t\t// 尝试类型转换\r\n\t\tlet convertedData : T | Array | null = null;\r\n\r\n\t\ttry {\r\n\t\t\tif (Array.isArray(result.data)) {\r\n\t\t\t\t// 处理数组数据\r\n\t\t\t\tconst dataArray = result.data;\r\n\t\t\t\tconst convertedArray : Array = [];\r\n\t\t\t\t//__f__('log','at components/supadb/aksupa.uts:461',convertedArray)\r\n\t\t\t\tfor (let i = 0; i < dataArray.length; i++) {\r\n\t\t\t\t\tconst item = dataArray[i];\r\n\t\t\t\t\tif (item instanceof UTSJSONObject) {\r\n\r\n\t\t\t\t\t\t// //__f__('log','at components/supadb/aksupa.uts:466',item)\r\n\t\t\t\t\t\tconst parsed = item.parse();\r\n\t\t\t\t\t\t// //__f__('log','at components/supadb/aksupa.uts:468','ak parsed')\r\n\r\n\r\n\r\n\r\n\t\t\t\t\t\tif (parsed != null) {\r\n\t\t\t\t\t\t\tconvertedArray.push(parsed);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t__f__('warn','at components/supadb/aksupa.uts:476','转换失败,使用原始对象:', item);\r\n\t\t\t\t\t\t\tconvertedArray.push(item as T);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// 将普通对象转换为 UTSJSONObject 后再 parse\r\n\t\t\t\t\t\tconst jsonObj = new UTSJSONObject(item);\r\n\r\n\t\t\t\t\t\tconst parsed = jsonObj.parse();\r\n\r\n\r\n\r\n\r\n\t\t\t\t\t\tif (parsed != null) {\r\n\t\t\t\t\t\t\tconvertedArray.push(parsed);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t__f__('warn','at components/supadb/aksupa.uts:492','转换失败,使用原始对象:', item);\r\n\t\t\t\t\t\t\tconvertedArray.push(item as T);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tconvertedData = convertedArray;\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// 处理单个对象\r\n\t\t\t\tconst convertedArray : Array = [];\r\n\t\t\t\tif (result.data instanceof UTSJSONObject) {\r\n\t\t\t\t\tconst parsed = result.data.parse();\r\n\r\n\t\t\t\t\tif (parsed != null) {\r\n\t\t\t\t\t\tconvertedArray.push(parsed);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t//__f__('log','at components/supadb/aksupa.uts:509','转换失败:', result.data)\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst jsonObj = new UTSJSONObject(result.data);\r\n\t\t\t\t\tconst parsed = jsonObj.parse();\r\n\t\t\t\t\tif (parsed != null) {\r\n\t\t\t\t\t\tconvertedArray.push(parsed);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t//__f__('log','at components/supadb/aksupa.uts:518','转换失败:', result.data)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tconvertedData = convertedArray;\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\t__f__('warn','at components/supadb/aksupa.uts:524','数据类型转换失败,使用原始数据:', e);\r\n\t\t\t__f__('log','at components/supadb/aksupa.uts:525',result.data)\r\n\t\t\t// 转换失败时,使用原始数据\r\n\t\t\tconvertedData = result.data as T | Array;\r\n\t\t}\r\n\t\tresult.data = convertedData\r\n\t\tconst aaa = result as AkReqResponse\r\n\t\t// const aaa = {\r\n\t\t// \tstatus: result.status,\r\n\t\t// \tdata: convertedData,\r\n\t\t// \theaders: result.headers,\r\n\t\t// \terror: result.error,\r\n\t\t// \ttotal: result.total,\r\n\t\t// \tpage: result.page,\r\n\t\t// \tlimit: result.limit,\r\n\t\t// \thasmore: result.hasmore,\r\n\t\t// \torigin: result.origin\r\n\t\t// } \r\n\t\treturn aaa;\r\n\r\n\t}\r\n}\r\n\r\n// 新增:链式 Storage 上传\r\nexport class AkSupaStorageUploadBuilder {\r\n\tprivate _supa : AkSupa;\r\n\tprivate _bucket : string = '';\r\n\tprivate _path : string = '';\r\n private _file : string = '';\r\n\tprivate _options : UTSJSONObject = {};\r\n\r\n\tconstructor(supa : AkSupa, bucket : string) {\r\n\t\tthis._supa = supa;\r\n\t\tthis._bucket = bucket;\r\n\t}\r\n\r\n\tpath(path : string) : AkSupaStorageUploadBuilder {\r\n\t\tthis._path = path;\r\n\t\treturn this;\r\n\t}\r\n\r\n file(file : string) : AkSupaStorageUploadBuilder {\r\n\t\tthis._file = file;\r\n\t\treturn this;\r\n\t}\r\n\r\n\toptions(options : UTSJSONObject) : AkSupaStorageUploadBuilder {\r\n\t\tthis._options = options;\r\n\t\treturn this;\r\n\t}\r\n\tasync upload() : Promise> {\r\n if (this._bucket == '' || this._path == '' || this._file == '') {\r\n\t\t\tthrow toUniError('bucket, path, file are required', '上传文件缺少必要参数');\r\n\t\t}\r\n\t\tconst url = `${this._supa.baseUrl}/storage/v1/object/${this._bucket}/${this._path}`;\r\n\t\tconst apikey = this._supa.apikey;\r\n\t\t// 适配 uni.uploadFile\r\n\t\tconst uploadOptions : AkReqUploadOptions = {\r\n\t\t\turl,\r\n\t\t\tfilePath: this._file, // 这里假设 file 是本地路径\r\n\t\t\tname: 'file', // 默认字段名\r\n\t\t\theaders: {},\r\n\t\t\tapikey,\r\n\t\t\tformData: this._options\r\n\t\t};\r\n\t\treturn await AkReq.upload(uploadOptions);\r\n\t}\r\n}\r\n\r\n// 新增:明确的 StorageBucket 类,支持链式 upload\r\nclass AkSupaStorageBucket {\r\n\tprivate supa : AkSupa;\r\n\tprivate bucket : string;\r\n\tconstructor(supa : AkSupa, bucket : string) {\r\n\t\tthis.supa = supa;\r\n\t\tthis.bucket = bucket;\r\n\t}\r\n\tasync upload(path : string, filePath : string, options ?: UTSJSONObject) : Promise> {\r\n\t\tconst url = `${this.supa.baseUrl}/storage/v1/object/${this.bucket}/${path}`;\r\n\t\tlet headers : UTSJSONObject = { apikey: this.supa.apikey };\r\n\t\tconst formData : UTSJSONObject = {};\r\n\t\tif (options != null && typeof options == 'object') {\r\n\t\t\tif (typeof options.get == 'function' && options.get('x-upsert') != null) {\r\n\t\t\t\theaders['x-upsert'] = options.get('x-upsert');\r\n\t\t\t}\r\n\t\t\tconst keys = UTSJSONObject.keys(options);\r\n\t\t\tfor (let i = 0; i < keys.length; i++) {\r\n\t\t\t\tconst k = keys[i];\r\n\t\t\t\tif (k != 'x-upsert') formData[k] = options.get(k);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst token = AkReq.getToken();\r\n\t\tif (token != null && !(token == '')) {\r\n\t\t\theaders['Authorization'] = `Bearer ${token}`;\r\n\t\t}\r\n\t\treturn await AkReq.upload({\r\n\t\t\turl,\r\n\t\t\tfilePath,\r\n\t\t\tname: 'file',\r\n\t\t\tapikey: this.supa.apikey,\r\n\t\t\tformData,\r\n\t\t\theaders\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport class AkSupaStorageApi {\r\n\tprivate _supa : AkSupa;\r\n\tconstructor(supa : AkSupa) {\r\n\t\tthis._supa = supa;\r\n\t}\r\n\tfrom(bucket : string) : AkSupaStorageBucket {\r\n\t\treturn new AkSupaStorageBucket(this._supa, bucket);\r\n\t}\r\n}\r\n\r\nexport class AkSupa {\r\n\tbaseUrl : string;\r\n\tapikey : string;\r\n\tsession : AkSupaSignInResult | null = null;\r\n\tuser : UTSJSONObject | null = null;\r\n\tstorage : AkSupaStorageApi;\r\n\r\n\tconstructor(baseUrl : string, apikey : string) {\r\n\t\tthis.baseUrl = baseUrl;\r\n\t\tthis.apikey = apikey;\r\n\t\tthis.storage = new AkSupaStorageApi(this);\r\n\t\t// [CHANGE][2026-01-30] hydrate user/session from persisted token (see docs: components/supadb/docs/CHANGELOG.md)\r\n\t\ttry {\r\n\t\t\tthis.hydrateSessionFromStorage();\r\n\t\t} catch (e) {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\t// [CHANGE][2026-01-30] hydrate user from /auth/v1/user when token exists in storage\r\n\tasync hydrateSessionFromStorage() : Promise {\r\n\t\ttry {\r\n\t\t\tconst token = AkReq.getToken();\r\n\t\t\tif (token == null || token == '') return false;\r\n\t\t\tconst res = await AkReq.request({\r\n\t\t\t\turl: this.baseUrl + '/auth/v1/user',\r\n\t\t\t\tmethod: 'GET',\r\n\t\t\t\theaders: {\r\n\t\t\t\t\tapikey: this.apikey,\r\n\t\t\t\t\tAuthorization: `Bearer ${token}`,\r\n\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t} as UTSJSONObject\r\n\t\t\t}, false);\r\n\t\t\tconst status = res.status ?? 0;\r\n\t\t\tif (!(status >= 200 && status < 400)) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tlet user: UTSJSONObject | null = null;\r\n\t\t\ttry {\r\n\t\t\t\tuser = new UTSJSONObject(res.data);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tuser = null;\r\n\t\t\t}\r\n\t\t\tif (user == null) return false;\r\n\t\t\tthis.user = user;\r\n\t\t\t// 仅补齐最小 session 结构,供 getSession / UI 判断登录态使用\r\n\t\t\tif (this.session == null) {\r\n\t\t\t\tthis.session = {\r\n\t\t\t\t\taccess_token: token,\r\n\t\t\t\t\trefresh_token: AkReq.getRefreshToken() ?? '',\r\n\t\t\t\t\texpires_at: AkReq.getExpiresAt() ?? 0,\r\n\t\t\t\t\tuser: user,\r\n\t\t\t\t\ttoken_type: 'bearer',\r\n\t\t\t\t\texpires_in: 0,\r\n\t\t\t\t\traw: user\r\n\t\t\t\t} as AkSupaSignInResult;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t} catch (e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tasync resetPassword(email : string) : Promise {\r\n\t\tconst res = await AkReq.request({\r\n\t\t\turl: this.baseUrl + '/auth/v1/recover',\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\tapikey: this.apikey,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t} as UTSJSONObject,\r\n\t\t\tdata: { email } as UTSJSONObject,\r\n\t\t\tcontentType: 'application/json'\r\n\t\t}, false);\r\n\r\n\t\t// Supabase returns 200 when the reset email is sent successfully\r\n\t\treturn res.status == 200;\r\n\t}\r\n\tasync signOut() {\r\n\t\tthis.session = null\r\n\t\tthis.user = null\r\n\t}\r\n\tasync signIn(email : string, password : string) : Promise {\r\n\t\t// 提前检查 apikey 配置是否为占位符,避免发送无效请求导致 401\r\n\t\tif (this.apikey == null || this.apikey.trim() === '' || this.apikey === 'your-anon-key') {\r\n\t\t\tthrow new Error('Supabase 配置错误:请在 ak/config.uts 中设置 SUPA_KEY(当前为占位符)');\r\n\t\t}\r\n\t\tconst res = await AkReq.request({\r\n\t\t\turl: this.baseUrl + '/auth/v1/token?grant_type=password',\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\tapikey: this.apikey,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t} as UTSJSONObject,\r\n\t\t\tdata: { email, password } as UTSJSONObject,\r\n\t\t\tcontentType: 'application/json'\r\n\t\t}, false);\r\n\t\t// 如果响应不是 2xx(例如 401),提取后端错误信息并抛出,便于上层显示具体原因\r\n\t\tconst status = res.status ?? 0;\r\n\t\tif (!(status >= 200 && status < 400)) {\r\n\t\t\tlet msg = 'user.login.login_failed';\r\n\t\t\ttry {\r\n\t\t\t\tif (res.data != null) {\r\n\t\t\t\t\tconst obj = new UTSJSONObject(res.data);\r\n\t\t\t\t\tmsg = obj.getString('message') ?? obj.getString('error') ?? obj.getString('msg') ?? obj.getString('description') ?? obj.getString('error_description') ?? msg;\r\n\t\t\t\t}\r\n\t\t\t} catch (e) {\r\n\t\t\t\t// ignore\r\n\t\t\t}\r\n\t\t\tthrow new Error(msg);\r\n\t\t}\r\n\t\t// 解析成功的返回体\r\n\t\tlet data: UTSJSONObject;\r\n\t\ttry {\r\n\t\t\tdata = new UTSJSONObject(res.data);\r\n\t\t} catch (e) {\r\n\t\t\tdata = new UTSJSONObject({});\r\n\t\t}\r\n\t\tconst access_token = data.getString('access_token') ?? '';\r\n\t\tconst refresh_token = data.getString('refresh_token') ?? '';\r\n\t\tconst expires_at = data.getNumber('expires_at') ?? 0;\r\n\t\tconst user = data.getJSON('user');\r\n\t\tAkReq.setToken(access_token, refresh_token, expires_at);\r\n\t\tconst session : AkSupaSignInResult = {\r\n\t\t\taccess_token: access_token,\r\n\t\t\trefresh_token: refresh_token,\r\n\t\t\texpires_at: expires_at,\r\n\t\t\tuser: user,\r\n\t\t\ttoken_type: data.getString('token_type') ?? '',\r\n\t\t\texpires_in: data.getNumber('expires_in') ?? 0,\r\n\t\t\traw: data\r\n\t\t};\r\n\t\tthis.session = session;\r\n\t\tthis.user = user;\r\n\t\treturn session;\r\n\t}\r\n\r\n\t/**\r\n\t * 获取当前 session 和 user\r\n\t */\r\n\tgetSession() : AkSupaSessionInfo {\r\n\t\treturn {\r\n\t\t\tsession: this.session,\r\n\t\t\tuser: this.user\r\n\t\t};\r\n\t}\r\n\r\n\tasync signUp(email : string, password : string) : Promise {\r\n\t\tconst res = await AkReq.request({\r\n\t\t\turl: this.baseUrl + '/auth/v1/signup',\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\tapikey: this.apikey,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t} as UTSJSONObject,\r\n\t\t\tdata: { email, password } as UTSJSONObject,\r\n\t\t\tcontentType: 'application/json'\r\n\t\t}, false);\r\n\t\treturn res.data as UTSJSONObject;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * 查询表数据(GET方式,支持多条件、limit等,filter自动转为supabase风格query)\r\n\t * filter 支持:\r\n\t * { usr_id: { lt: 800 }, name: { ilike: '%foo%' }, status: 'active', age: { gte: 18, lte: 30 } }\r\n\t * 操作符支持 eq, neq, lt, lte, gt, gte, like, ilike, in, is, not, contains, containedBy, range, fts, plfts, phfts, wfts\r\n\t */\r\nasync select(table : string, filter ?: string | null, options ?: AkSupaSelectOptions) : Promise> {\r\n\tlet url = this.baseUrl + '/rest/v1/' + table;\r\n\tlet headers = {\r\n\t\tapikey: this.apikey,\r\n\t\t'Content-Type': 'application/json',\r\n\t\tAuthorization: `Bearer ${AkReq.getToken() ?? ''}`\r\n\t} as UTSJSONObject;\r\n\tlet params : string[] = [];\r\n\tif (options != null) {\r\n\t\tif (options.columns != null && !(options.columns == \"\")) params.push('select=' + encodeURIComponent(options.columns ?? \"\"));\r\n\t\tif (options.limit != null) {\r\n\t\t\tparams.push('limit=' + options.limit);\r\n\t\t\t//__f__('log','at components/supadb/aksupa.uts:820','设置 limit 参数:', options.limit);\r\n\t\t}\r\n\t\tif (options.order != null && !(options.order == \"\")) params.push('order=' + encodeURIComponent(options.order ?? \"\"));\r\n\t\tif (options.rangeFrom != null && options.rangeTo != null) {\r\n\t\t\theaders['Range'] = `${options.rangeFrom}-${options.rangeTo}`;\r\n\t\t\theaders['Range-Unit'] = 'items';\r\n\t\t\t//__f__('log','at components/supadb/aksupa.uts:826','设置 Range 头部:', `${options.rangeFrom}-${options.rangeTo}`);\r\n\t\t}\r\n\r\n\t\t// 向后兼容:支持旧的 getcount 参数\r\n\t\tlet countOption = options.count ?? options.getcount;\r\n\t\tif (countOption != null) {\r\n\t\t\theaders['Prefer'] = `count=${countOption}`;\r\n\t\t}\r\n\t\t// 新增:head 模式支持\r\n\t\tif (options.head == true) {\r\n\t\t\t//__f__('log','at components/supadb/aksupa.uts:836','使用 head 模式,只返回元数据');\r\n\t\t\t// HEAD 请求用于只获取 count,不返回数据\r\n\t\t\tif (headers['Prefer'] != null) {\r\n\t\t\t\theaders['Prefer'] = (headers['Prefer'] as string) + ',return=minimal';\r\n\t\t\t} else {\r\n\t\t\t\theaders['Prefer'] = 'return=minimal';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (options.single == true) {\r\n\t\t\t//__f__('log','at components/supadb/aksupa.uts:846','使用 single() 模式');\r\n\t\t\tif (headers['Prefer'] != null) {\r\n\t\t\t\theaders['Prefer'] = (headers['Prefer'] as string) + ',return=representation,single-object';\r\n\t\t\t} else {\r\n\t\t\t\theaders['Prefer'] = 'return=representation,single-object';\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// 确保有 select 参数\r\n\t\tif (options.columns == null) {\r\n\t\t\tparams.push('select=*');\r\n\t\t} else if (options.columns == \"\") {\r\n\t\t\tparams.push('select=*');\r\n\t\t}\r\n\t} else {\r\n\t\tparams.push('select=*');\r\n\t}\r\n\t// 直接用 string filter\r\n\tif (filter!=null && filter !== \"\") {\r\n\t\tparams.push(filter!!);\r\n\t}\r\n\tif (params.length > 0) {\r\n\t\turl += '?' + params.join('&');\r\n\t}\r\n\r\n\t//__f__('log','at components/supadb/aksupa.uts:871',url)\r\n\r\n\t// 确定HTTP方法:如果是head模式,使用HEAD方法\r\n\tlet httpMethod: 'GET' | 'HEAD' = 'GET';\r\n\tif (options != null && options.head == true) {\r\n\t\thttpMethod = 'HEAD';\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:877','使用 HEAD 方法进行 count 查询');\r\n\t}\r\n\r\n\tlet reqOptions : AkReqOptions = {\r\n\t\turl,\r\n\t\tmethod: httpMethod,\r\n\t\theaders\r\n\t};\r\n\treturn await this.requestWithAutoRefresh(reqOptions);\r\n}\r\n\r\nasync select_uts(table : string, filter ?: UTSJSONObject | null, options ?: AkSupaSelectOptions) : Promise> {\r\n\tconst filter_str = buildSupabaseFilterQuery(filter)\r\n\treturn this.select(table,filter_str,options)\r\n}\r\n\t/**\r\n\t * 插入表数据\r\n\t * @param table 表名\r\n\t * @param row 插入对象\r\n\t * @returns 插入结果\r\n\t */\r\n\tasync insert(table : string, row : UTSJSONObject | Array) : Promise> {\r\n\t\tconst url = this.baseUrl + '/rest/v1/' + table;\r\n\t\tconst headers = {\r\n\t\t\tapikey: this.apikey,\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t\tAuthorization: `Bearer ${AkReq.getToken() ?? ''}`,\r\n\t\t\tPrefer: 'return=representation'\r\n\t\t} as UTSJSONObject;\r\n\r\n\t\t// 如果是数组,直接传递;如果是单个对象,也直接传递\r\n\t\t// Supabase REST API 原生支持两种格式\r\n\t\tlet reqOptions : AkReqOptions = {\r\n\t\t\turl,\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders,\r\n\t\t\tdata: row, // 可以是单个对象或数组\r\n\t\t\tcontentType: 'application/json'\r\n\t\t};\r\n\t\treturn await this.requestWithAutoRefresh(reqOptions);\r\n\t}\r\n\r\n\t/**\r\n\t * 更新表数据\r\n\t * @param table 表名\r\n\t * @param filter 过滤条件对象\r\n\t * @param values 更新内容对象\r\n\t * @returns 更新结果\r\n\t */\r\nasync update(table : string, filter : string | null, values : UTSJSONObject) : Promise> {\r\n\tlet url = this.baseUrl + '/rest/v1/' + table;\r\n\tif (filter!=null && filter !== \"\") {\r\n\t\turl += '?' + filter;\r\n\t}\r\n\tconst headers = {\r\n\t\tapikey: this.apikey,\r\n\t\t'Content-Type': 'application/json',\r\n\t\tAuthorization: `Bearer ${AkReq.getToken() ?? ''}`,\r\n\t\tPrefer: 'return=representation'\r\n\t} as UTSJSONObject;\r\n\tlet reqOptions : AkReqOptions = {\r\n\t\turl,\r\n\t\tmethod: 'PATCH',\r\n\t\theaders,\r\n\t\tdata: values,\r\n\t\tcontentType: 'application/json'\r\n\t};\r\n\treturn await this.requestWithAutoRefresh(reqOptions);\r\n}\r\n\r\n\t/**\r\n\t * 删除表数据\r\n\t * @param table 表名\r\n\t * @param filter 过滤条件对象\r\n\t * @returns 删除结果\r\n\t */\r\nasync delete(table : string, filter : string | null) : Promise> {\r\n\tlet url = this.baseUrl + '/rest/v1/' + table;\r\n\tif (filter!=null && filter !== \"\") {\r\n\t\turl += '?' + filter;\r\n\t}\r\n\tconst headers = {\r\n\t\tapikey: this.apikey,\r\n\t\t'Content-Type': 'application/json',\r\n\t\tAuthorization: `Bearer ${AkReq.getToken() ?? ''}`,\r\n\t\tPrefer: 'return=representation'\r\n\t} as UTSJSONObject;\r\n\tlet reqOptions : AkReqOptions = {\r\n\t\turl,\r\n\t\tmethod: 'DELETE',\r\n\t\theaders,\r\n\t\tcontentType: 'application/json'\r\n\t};\r\n\treturn await this.requestWithAutoRefresh(reqOptions);\r\n}\r\n\r\n\t/**\r\n\t * 调用 Supabase/PostgREST RPC (function)\r\n\t * @param functionName 函数名\r\n\t * @param params 参数对象\r\n\t * @returns AkReqResponse\r\n\t */\r\n\tasync rpc(functionName : string, params ?: UTSJSONObject) : Promise> {\r\n\t\tconst url = `${this.baseUrl}/rest/v1/rpc/${functionName}`;\r\n\t\tconst headers = {\r\n\t\t\tapikey: this.apikey,\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t\tAuthorization: `Bearer ${AkReq.getToken() ?? ''}`\r\n\t\t} as UTSJSONObject;\r\n\t\tlet reqOptions : AkReqOptions = {\r\n\t\t\turl,\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders,\r\n\t\t\tdata: params ?? {},\r\n\t\t\tcontentType: 'application/json'\r\n\t\t};\r\n\t\treturn await this.requestWithAutoRefresh(reqOptions);\r\n\t}\r\n\t/**\r\n\t * 兼容 supabase-js 风格\r\n\t * @param tableName 表名\r\n\t */\r\n\tfrom(tableName : string) : AkSupaQueryBuilder {\r\n\t\treturn new AkSupaQueryBuilder(this, tableName);\r\n\t}\r\n\r\n /**\r\n * 创建实时订阅通道 (兼容 Supabase Realtime 接口,目前使用轮询模拟)\r\n * @param topic 通道名称,如 public:table\r\n */\r\n channel(topic: string): AkSupaRealtimeChannel {\r\n return new AkSupaRealtimeChannel(this, topic);\r\n }\r\n \r\n /**\r\n * 移除通道\r\n */\r\n removeChannel(channel: AkSupaRealtimeChannel): Promise {\r\n channel.unsubscribe();\r\n return Promise.resolve('ok');\r\n }\r\n\t// AkSupa类内新增:自动刷新session\r\n\tasync refreshSession() : Promise {\r\n\t\tif (this.session == null || this.session?.refresh_token == null) return false;\r\n\t\ttry {\r\n\t\t\tconst res = await AkReq.request({\r\n\t\t\t\turl: this.baseUrl + '/auth/v1/token?grant_type=refresh_token',\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\theaders: {\r\n\t\t\t\t\tapikey: this.apikey,\r\n\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t} as UTSJSONObject,\r\n\t\t\t\tdata: { refresh_token: this.session?.refresh_token } as UTSJSONObject,\r\n\t\t\t\tcontentType: 'application/json'\r\n\t\t\t}, false);\r\n\t\t\tif (res.status == 200 && (res.data != null)) {\r\n\t\t\t\tconst data = res.data as UTSJSONObject;\r\n\t\t\t\tconst access_token = data.getString('access_token') ?? '';\r\n\t\t\t\tconst refresh_token = data.getString('refresh_token') ?? '';\r\n\t\t\t\tconst expires_at = data.getNumber('expires_at') ?? 0;\r\n\t\t\t\tconst user = data.getJSON('user');\r\n\t\t\t\tthis.session = {\r\n\t\t\t\t\taccess_token,\r\n\t\t\t\t\trefresh_token,\r\n\t\t\t\t\texpires_at,\r\n\t\t\t\t\tuser,\r\n\t\t\t\t\ttoken_type: data.getString('token_type') ?? '',\r\n\t\t\t\t\texpires_in: data.getNumber('expires_in') ?? 0,\r\n\t\t\t\t\traw: data\r\n\t\t\t\t};\r\n\t\t\t\tthis.user = user;\r\n\t\t\t\t// 更新本地token\r\n\t\t\t\tAkReq.setToken(access_token, refresh_token, expires_at);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t} catch (e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t// AkSupa类内新增:自动刷新封装\r\n\tasync requestWithAutoRefresh(reqOptions : AkReqOptions, isRetry = false) : Promise> {\r\n\t\tlet res = await AkReq.request(reqOptions, false);\r\n\t\t// JWT过期:Supabase风格\r\n\t\tconst isJwtExpired = (res.status == 401); //res != null && res.data != null && typeof res.data == 'object' && (res.data as UTSJSONObject)?.getString('code') == 'PGRST301';\r\n\t\t// 401未授权\r\n\t\tconst isUnauthorized = (res.status == 401);\r\n\t\tif ((isJwtExpired || isUnauthorized) && !isRetry) {\r\n\t\t\tconst ok = await this.refreshSession();\r\n\t\t\tif (ok) {\r\n\t\t\t\tlet headers = reqOptions.headers\r\n\t\t\t\tif (headers == null) {\r\n\t\t\t\t\theaders = new UTSJSONObject()\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof headers.set == 'function') {\r\n\t\t\t\t\theaders.set('Authorization', `Bearer ${AkReq.getToken() ?? ''}`)\r\n\t\t\t\t\treqOptions.headers = headers\r\n\t\t\t\t}\r\n\r\n\t\t\t\tres = await AkReq.request(reqOptions, false);\r\n\t\t\t} else {\r\n\t\t\t\tuni.removeStorageSync('user_id');\r\n\t\t\t\tuni.removeStorageSync('token');\r\n\r\n\t\t\t\t//uni.reLaunch({ url: '/pages/user/login' });\r\n __f__('log','at components/supadb/aksupa.uts:1083','登录已过期,请重新登录');\r\n\t\t\t\tthrow toUniError('登录已过期,请重新登录', '用户认证失败');\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n}\r\n\r\n// 工具函数:将 UTSJSONObject filter 转为 Supabase/PostgREST 查询字符串\r\nfunction buildSupabaseFilterQuery(filter : UTSJSONObject | null) : string {\r\n\t//__f__('log','at components/supadb/aksupa.uts:1093',filter)\r\n\tif (filter == null) return \"\";\r\n\t// 类型保护:如果不是 UTSJSONObject,自动包裹\r\n\tif (typeof filter.get !== 'function') {\r\n\t\ttry {\r\n\t\t\tfilter = new UTSJSONObject(filter as any)\r\n\t\t} catch (e) {\r\n\t\t\t__f__('warn','at components/supadb/aksupa.uts:1100','filter 不是 UTSJSONObject,且无法转换', filter)\r\n\t\t\treturn ''\r\n\t\t}\r\n\t}\r\n\tconst params : string[] = [];\r\n\tconst keys : string[] = UTSJSONObject.keys(filter);\r\n\tfor (let i = 0; i < keys.length; i++) {\r\n\t\tconst k = keys[i];\r\n\t\tconst v = filter.get(k);\r\n\t\tif (k == 'or' && typeof v == 'string') {\r\n\t\t\tparams.push(`or=(${v})`);\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (v != null && typeof v == 'object' && typeof (v as UTSJSONObject).get == 'function') {\r\n\t\t\tconst vObj = v as UTSJSONObject;\r\n\t\t\tconst opKeys = UTSJSONObject.keys(vObj);\r\n\t\t\tfor (let j = 0; j < opKeys.length; j++) {\r\n\t\t\t\tconst op = opKeys[j];\r\n\t\t\t\tconst opVal = vObj.get(op);\r\n\t\t\t\tif ((op == 'in' || op == 'not.in') && Array.isArray(opVal)) {\r\n\t\t\t\t\tparams.push(`${k}=${op}.(${opVal.map(x => typeof x == 'object' ? encodeURIComponent(JSON.stringify(x)) : encodeURIComponent(x.toString())).join(',')})`);\r\n\t\t\t\t} else if (op == 'is' && (opVal == null || opVal == 'null')) {\r\n\t\t\t\t\tparams.push(`${k}=is.null`);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst opvalstr : string = (typeof opVal == 'object') ? JSON.stringify(opVal) : (opVal as string);\r\n\t\t\t\t\tparams.push(`${k}=${op}.${encodeURIComponent(opvalstr)}`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (v != null && typeof v == 'object') {\r\n\t\t\tconst vObj = v as UTSJSONObject;\r\n\t\t\tconst opKeys = UTSJSONObject.keys(vObj);\r\n\t\t\tfor (let j = 0; j < opKeys.length; j++) {\r\n\t\t\t\tconst op = opKeys[j];\r\n\t\t\t\tconst opVal = vObj.get(op);\r\n\t\t\t\tparams.push(`${k}=${op}.${encodeURIComponent(!(opVal == null) ? (typeof opVal == 'object' ? JSON.stringify(opVal) : opVal.toString()) : '')}`);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tparams.push(`${k}=eq.${encodeURIComponent(!(v == null) ? v.toString() : '')}`);\r\n\t\t}\r\n\t}\r\n\treturn params.join('&');\r\n}\r\n\r\n/**\r\n * 创建 Supabase 客户端实例\r\n * @param url 项目 URL\r\n * @param key 项目匿名密钥 (Anon Key)\r\n */\r\nexport function createClient(url : string, key : string) : AkSupa {\r\n\treturn new AkSupa(url, key);\r\n}\r\n\r\n// 模拟 Realtime Channel 类 (Polling Fallback)\r\nexport class AkSupaRealtimeChannel {\r\n private _supa: AkSupa;\r\n private _topic: string;\r\n private _timer: number = 0;\r\n private _callback: ((payload: any) => void) | null = null;\r\n private _table: string = '';\r\n private _lastTime: string = new Date().toISOString(); \r\n private _isSubscribed: boolean = false;\r\n\r\n constructor(supa: AkSupa, topic: string) {\r\n this._supa = supa;\r\n this._topic = topic;\r\n }\r\n\r\n // 绑定事件 (仅支持 postgres_changes INSERT)\r\n on(type: string, filter: UTSJSONObject, callback: (payload: any) => void): AkSupaRealtimeChannel {\r\n // 解析 table\r\n const table = filter.getString('table');\r\n if (table != null) {\r\n this._table = table;\r\n }\r\n this._callback = callback;\r\n return this;\r\n }\r\n\r\n // 开始订阅\r\n subscribe(callback?: (status: string, err: any | null) => void): AkSupaRealtimeChannel {\r\n if (this._isSubscribed) return this;\r\n this._isSubscribed = true;\r\n \r\n // 初始回调\r\n if (callback != null) {\r\n callback('SUBSCRIBED', null);\r\n }\r\n\r\n // 如果没有指定 table,无法轮询\r\n if (this._table == '') {\r\n __f__('warn','at components/supadb/aksupa.uts:1190','Realtime check: No table specified for polling.');\r\n return this;\r\n }\r\n\r\n // 开始轮询 (每3秒)\r\n this._timer = setInterval(() => {\r\n this._checkUpdates();\r\n }, 3000);\r\n\r\n return this;\r\n }\r\n\r\n // 停止订阅\r\n unsubscribe() {\r\n if (this._timer > 0) {\r\n clearInterval(this._timer);\r\n this._timer = 0;\r\n }\r\n this._isSubscribed = false;\r\n }\r\n\r\n // 检查更新\r\n private async _checkUpdates() {\r\n if (!this._isSubscribed || this._table == '') return;\r\n \r\n try {\r\n const now = new Date().toISOString();\r\n \r\n const res = await this._supa\r\n .from(this._table)\r\n .select('*')\r\n .gt('created_at', this._lastTime)\r\n .order('created_at', { ascending: true })\r\n .execute();\r\n \r\n if (res.error == null && res.data != null) {\r\n let list: any[] = [];\r\n if (Array.isArray(res.data)) {\r\n list = res.data as any[];\r\n }\r\n \r\n if (list.length > 0) {\r\n // 更新最后时间\r\n const lastItem = list[list.length - 1];\r\n let lastTimeStr: string | null = null;\r\n \r\n if (lastItem instanceof UTSJSONObject) {\r\n lastTimeStr = lastItem.getString('created_at');\r\n } else {\r\n // 尝试转 json\r\n const j = JSON.parse(JSON.stringify(lastItem)) as UTSJSONObject;\r\n lastTimeStr = j.getString('created_at');\r\n }\r\n \r\n if (lastTimeStr != null) {\r\n this._lastTime = lastTimeStr;\r\n } else {\r\n this._lastTime = now;\r\n }\r\n\r\n // 触发回调\r\n if (this._callback != null) {\r\n // 模拟 Realtime payload\r\n list.forEach(item => {\r\n const payload = {\r\n new: item,\r\n eventType: 'INSERT',\r\n old: null\r\n };\r\n this._callback?.(payload);\r\n });\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n __f__('error','at components/supadb/aksupa.uts:1265','Realtime polling error:', e);\r\n }\r\n }\r\n}\r\n\r\nexport default AkSupa;\r\n","// /components/supadb/aksupainstance.uts\r\nimport { createClient } from './aksupa.uts'\r\nimport { SUPA_URL, SUPA_KEY } from '@/ak/config.uts'\r\n\r\n// 创建单一真实的 Supabase 客户端实例 (使用 config.uts 配置)\r\n// Create single source of truth client using config\r\nconst supaInstance = createClient(SUPA_URL, SUPA_KEY)\r\n\r\n// 导出默认实例 (供 login.uvue 等使用)\r\nexport default supaInstance\r\n\r\n// 导出命名实例 'supabase' (供 store.uts 使用)\r\nexport const supabase = supaInstance\r\n\r\n// 导出 isSupabaseReady 状态\r\nexport const isSupabaseReady = true\r\n\r\n// 兼容 ensureSupabaseReady\r\nexport async function ensureSupabaseReady() {\r\n return true\r\n}\r\n\r\n// 检查连接状态的函数\r\nexport function checkConnection() {\r\n return Promise.resolve(true)\r\n}\r\n\r\n// 兼容 supaReady Promise\r\nexport const supaReady = Promise.resolve(true)\r\n\r\n// 如果有其他需要导出的函数,可以这样导出:\r\nexport function initializeSupabase(url: string, key: string) {\r\n return createClient(url, key)\r\n}\r\n","// 电商商城系统类型定义 - UTS Android 兼容\r\n\r\n// 用户类型\r\nexport type UserType = {\r\n\tid: string\r\n\tphone: string\r\n\temail: string | null\r\n\tnickname: string | null\r\n\tavatar_url: string | null\r\n\tgender: number\r\n\tuser_type: number\r\n\tstatus: number\r\n\tcreated_at: string\r\n}\r\n\r\n// 商城用户扩展信息类型\r\nexport type MallUserProfileType = {\r\n\tid: string\r\n\tuser_id: string\r\n\tuser_type: number\r\n\tstatus: number\r\n\treal_name: string | null\r\n\tid_card: string | null\r\n\tcredit_score: number\r\n\tmall_role: string\r\n\tverification_status: number\r\n\tverification_data: UTSJSONObject | null\r\n\tbusiness_license: string | null\r\n\tshop_category: string | null\r\n\tservice_areas: UTSJSONObject | null\r\n\temergency_contact: string | null\r\n\tpreferences: UTSJSONObject | null\r\n\tcreated_at: string\r\n\tupdated_at: string\r\n}\r\n\r\n// 用户地址类型\r\nexport type UserAddressType = {\r\n\tid: string\r\n\tuser_id: string\r\n\treceiver_name: string\r\n\treceiver_phone: string\r\n\tprovince: string\r\n\tcity: string\r\n\tdistrict: string\r\n\taddress_detail: string\r\n\tpostal_code: string | null\r\n\tis_default: boolean\r\n\tlabel: string | null\r\n\tcoordinates: string | null\r\n\tdelivery_instructions: string | null\r\n\tbusiness_hours: string | null\r\n\tstatus: number\r\n\tcreated_at: string\r\n\tupdated_at: string\r\n}\r\n\r\n// 商家类型\r\nexport type MerchantType = {\r\n\tid: string\r\n\tuser_id: string\r\n\tshop_name: string\r\n\tshop_logo: string | null\r\n\tshop_banner: string | null\r\n\tshop_description: string | null\r\n\tcontact_name: string\r\n\tcontact_phone: string\r\n\tshop_status: number\r\n\trating: number\r\n\ttotal_sales: number\r\n\tcreated_at: string\r\n}\r\n\r\n// 商品类型\r\nexport type ProductType = {\r\n\tid: string\r\n\tmerchant_id: string\r\n\tcategory_id: string\r\n\tname: string\r\n\tdescription: string | null\r\n\timages: Array\r\n\tprice: number\r\n\toriginal_price: number | null\r\n\tstock: number\r\n\tsales: number\r\n\tstatus: number\r\n\tcreated_at: string\r\n\t// 药品相关字段\r\n\tspecification?: string | null // 规格说明\r\n\tusage?: string | null // 用法用量\r\n\tside_effects?: string | null // 副作用\r\n\tprecautions?: string | null // 注意事项\r\n\texpiry_date?: string | null // 有效期\r\n\tstorage_conditions?: string | null // 储存条件\r\n\tapproval_number?: string | null // 批准文号\r\n\ttags?: Array | null // 商品标签\r\n}\r\n\r\n// 商品SKU类型\r\nexport type ProductSkuType = {\r\n\tid: string\r\n\tproduct_id: string\r\n\tsku_code: string\r\n\tspecifications: UTSJSONObject | null\r\n\tprice: number\r\n\tstock: number\r\n\timage_url: string | null\r\n\tstatus: number\r\n}\r\n\r\n// 购物车类型\r\nexport type CartItemType = {\r\n\tid: string\r\n\tuser_id: string\r\n\tproduct_id: string\r\n\tsku_id: string\r\n\tquantity: number\r\n\tselected: boolean\r\n\tproduct: ProductType | null\r\n\tsku: ProductSkuType | null\r\n}\r\n\r\n// 订单类型\r\nexport type OrderType = {\r\n\tid: string\r\n\torder_no: string\r\n\tuser_id: string\r\n\tmerchant_id: string\r\n\tstatus: number\r\n\ttotal_amount: number\r\n\tdiscount_amount: number\r\n\tdelivery_fee: number\r\n\tactual_amount: number\r\n\tpayment_method: number | null\r\n\tpayment_status: number\r\n\tdelivery_address: UTSJSONObject\r\n\tcreated_at: string\r\n}\r\n\r\n// 订单商品类型\r\nexport type OrderItemType = {\r\n\tid: string\r\n\torder_id: string\r\n\tproduct_id: string\r\n\tsku_id: string\r\n\tproduct_name: string\r\n\tsku_specifications: UTSJSONObject | null\r\n\tprice: number\r\n\tquantity: number\r\n\ttotal_amount: number\r\n}\r\n\r\n// 配送员类型\r\nexport type DeliveryDriverType = {\r\n\tid: string\r\n\tuser_id: string\r\n\treal_name: string\r\n\tid_card: string\r\n\tdriver_license: string | null\r\n\tvehicle_type: number\r\n\tvehicle_number: string | null\r\n\twork_status: number\r\n\tcurrent_location: UTSJSONObject | null\r\n\tservice_areas: Array\r\n\trating: number\r\n\ttotal_orders: number\r\n\tauth_status: number\r\n\tcreated_at: string\r\n\tupdated_at: string\r\n}\r\n\r\n// 配送任务类型\r\nexport type DeliveryTaskType = {\r\n\tid: string\r\n\torder_id: string\r\n\tdriver_id: string | null\r\n\tpickup_address: UTSJSONObject\r\n\tdelivery_address: UTSJSONObject\r\n\tdistance: number | null\r\n\testimated_time: number | null\r\n\tdelivery_fee: number\r\n\tstatus: number\r\n\tpickup_time: string | null\r\n\tdelivered_time: string | null\r\n\tdelivery_code: string | null\r\n\tremark: string | null\r\n\tcreated_at: string\r\n\tupdated_at: string\r\n}\r\n\r\n// 优惠券模板类型\r\nexport type CouponTemplateType = {\r\n\tid: string\r\n\tname: string\r\n\tdescription: string | null\r\n\tcoupon_type: number\r\n\tdiscount_type: number\r\n\tdiscount_value: number\r\n\tmin_order_amount: number\r\n\tmax_discount_amount: number | null\r\n\ttotal_quantity: number | null\r\n\tper_user_limit: number\r\n\tusage_limit: number\r\n\tmerchant_id: string | null\r\n\tcategory_ids: Array\r\n\tproduct_ids: Array\r\n\tuser_type_limit: number | null\r\n\tstart_time: string\r\n\tend_time: string\r\n\tstatus: number\r\n\tcreated_at: string\r\n}\r\n\r\n// 用户优惠券类型\r\nexport type UserCouponType = {\r\n\tid: string\r\n\tuser_id: string\r\n\ttemplate_id: string\r\n\tcoupon_code: string\r\n\tstatus: number\r\n\tused_at: string | null\r\n\torder_id: string | null\r\n\treceived_at: string\r\n\texpire_at: string\r\n}\r\n\r\n// 分页数据类型\r\nexport type PageDataType = {\r\n\tdata: Array\r\n\ttotal: number\r\n\tpage: number\r\n\tpageSize: number\r\n\thasMore: boolean\r\n}\r\n\r\n// API响应类型\r\nexport type ApiResponseType = {\r\n\tsuccess: boolean\r\n\tdata: T | null\r\n\tmessage: string\r\n\tcode: number\r\n}\r\n\r\n// 订单状态枚举\r\nexport const ORDER_STATUS = {\r\n\tPENDING_PAYMENT: 1,\r\n\tPAID: 2,\r\n\tSHIPPED: 3,\r\n\tDELIVERED: 4,\r\n\tCOMPLETED: 5,\r\n\tCANCELLED: 6,\r\n\tREFUNDING: 7,\r\n\tREFUNDED: 8\r\n}\r\n\r\n// 优惠券类型枚举\r\nexport const COUPON_TYPE = {\r\n\tDISCOUNT_AMOUNT: 1, // 满减券\r\n\tDISCOUNT_PERCENT: 2, // 折扣券\r\n\tFREE_SHIPPING: 3, // 免运费券\r\n\tNEWBIE: 4, // 新人券\r\n\tMEMBER: 5, // 会员券\r\n\tCATEGORY: 6, // 品类券\r\n\tMERCHANT: 7, // 商家券\r\n\tLIMITED_TIME: 8 // 限时券\r\n}\r\n\r\n// 支付方式枚举\r\nexport const PAYMENT_METHOD = {\r\n\tWECHAT: 1,\r\n\tALIPAY: 2,\r\n\tUNIONPAY: 3,\r\n\tBALANCE: 4\r\n}\r\n\r\n// 配送状态枚举\r\nexport const DELIVERY_STATUS = {\r\n\tPENDING: 1,\r\n\tASSIGNED: 2,\r\n\tPICKED_UP: 3,\r\n\tIN_TRANSIT: 4,\r\n\tDELIVERED: 5,\r\n\tFAILED: 6\r\n}\r\n\r\n// 用户类型枚举\r\nexport const MALL_USER_TYPE = {\r\n\tCONSUMER: 1, // 消费者\r\n\tMERCHANT: 2, // 商家\r\n\tDELIVERY: 3, // 配送员\r\n\tSERVICE: 4, // 客服\r\n\tADMIN: 5 // 管理员\r\n}\r\n\r\n// 用户状态枚举\r\nexport const USER_STATUS = {\r\n\tNORMAL: 1, // 正常\r\n\tFROZEN: 2, // 冻结\r\n\tCANCELLED: 3, // 注销\r\n\tPENDING: 4 // 待审核\r\n} as const\r\n\r\n// 认证状态枚举\r\nexport const VERIFICATION_STATUS = {\r\n\tUNVERIFIED: 0, // 未认证\r\n\tVERIFIED: 1, // 已认证\r\n\tFAILED: 2 // 认证失败\r\n}\r\n\r\n// 地址标签枚举\r\nexport const ADDRESS_LABEL = {\r\n\tHOME: 'home', // 家\r\n\tOFFICE: 'office', // 公司\r\n\tSCHOOL: 'school', // 学校\r\n\tOTHER: 'other' // 其他\r\n}\r\n\r\n// 收藏类型枚举\r\nexport const FAVORITE_TYPE = {\r\n\tPRODUCT: 'product', // 商品\r\n\tSHOP: 'shop' // 店铺\r\n}\r\n\r\n// =========================\r\n// 订阅相关类型与枚举\r\n// =========================\r\n\r\n// 订阅周期枚举\r\nexport const SUBSCRIPTION_PERIOD = {\r\n\tMONTHLY: 'monthly',\r\n\tYEARLY: 'yearly'\r\n}\r\n\r\n// 订阅状态枚举\r\nexport const SUBSCRIPTION_STATUS = {\r\n\tTRIAL: 'trial',\r\n\tACTIVE: 'active',\r\n\tPAST_DUE: 'past_due',\r\n\tCANCELED: 'canceled',\r\n\tEXPIRED: 'expired'\r\n}\r\n\r\n// 软件订阅方案类型\r\nexport type SubscriptionPlanType = {\r\n\tid: string\r\n\tplan_code: string\r\n\tname: string\r\n\tdescription: string | null\r\n\tfeatures: UTSJSONObject | null // { featureKey: description }\r\n\tprice: number // 单位:元(或分,取决于后端;前端以显示为准)\r\n\tcurrency: string | null // 'CNY' | 'USD' ...\r\n\tbilling_period: string // 'monthly' | 'yearly'\r\n\ttrial_days: number | null\r\n\tis_active: boolean\r\n\tsort_order?: number | null\r\n\tcreated_at?: string\r\n\tupdated_at?: string\r\n}\r\n\r\n// 用户订阅记录类型\r\nexport type UserSubscriptionType = {\r\n\tid: string\r\n\tuser_id: string\r\n\tplan_id: string\r\n\tstatus: string\r\n\tstart_date: string\r\n\tend_date: string | null\r\n\tnext_billing_date: string | null\r\n\tauto_renew: boolean\r\n\tcancel_at_period_end?: boolean | null\r\n\tmetadata?: UTSJSONObject | null\r\n\tcreated_at?: string\r\n\tupdated_at?: string\r\n}\r\n\r\n// 用户基础信息类型 (兼容 pages/user/types.uts)\r\nexport type UserProfile = {\r\n id?: string;\r\n username: string;\r\n email: string;\r\n gender?: string;\r\n birthday?: string;\r\n height_cm?: number;\r\n weight_kg?: number;\r\n bio?: string;\r\n avatar_url?: string;\r\n preferred_language?: string;\r\n role?: string;\r\n school_id?: string;\r\n grade_id?: string;\r\n class_id?: string;\r\n created_at?: string;\r\n updated_at?: string;\r\n}\r\n\r\nexport type UserStats = {\r\n trainings: number;\r\n points: number;\r\n streak: number;\r\n}\r\n","// 设备信息类型\r\nexport type DeviceInfo = {\r\n\tid: string\r\n\tdevice_name?: string\r\n\tstatus?: string // 'online' | 'offline' | 其他状态\r\n\tuser_id?: string\r\n\t// 可根据实际需求添加更多字段\r\n}\r\n\r\n// 设备查询参数类型\r\nexport type DeviceParams = {\r\n\tuser_id: string\r\n\t// 可根据实际需求添加更多查询参数\r\n}\r\n","import supabase, { supaReady } from '@/components/supadb/aksupainstance.uts'\r\nimport type { UserProfile } from '@/types/mall-types.uts'\r\n\r\n/**\r\n * 确保用户资料存在,如果不存在则创建基础资料\r\n * @param sessionUser 会话用户对象 (UTSJSONObject)\r\n * @returns 创建的用户资料,如果创建失败则返回 null\r\n */\r\nexport async function ensureUserProfile(sessionUser: UTSJSONObject): Promise {\r\n\ttry {\r\n\t\tawait supaReady\r\n \r\n\t\t// 从 sessionUser 中获取用户ID和邮箱\r\n\t\tconst userId = sessionUser.getString('id')\r\n\t\tconst email = sessionUser.getString('email') ?? ''\r\n\t\t\r\n\t\tif (userId == null || userId === '') {\r\n\t\t\t__f__('error','at utils/sapi.uts:18','无法获取用户ID')\r\n\t\t\treturn null\r\n\t\t}\r\n\t\t\r\n\t\t// 检查用户是否已存在(ak_users 通过 auth_id 关联 auth.users.id)\r\n\t\tconst checkRes = await supabase.from('ak_users')\r\n\t\t\t.select('*', {})\r\n\t\t\t.eq('auth_id', userId)\r\n\t\t\t.single()\r\n\t\t\t.execute()\r\n\t\t\r\n\t\t__f__('log','at utils/sapi.uts:29','ensureUserProfile check ak_users:', {\r\n\t\t\tstatus: checkRes.status,\r\n\t\t\thasData: checkRes.data != null\r\n\t\t})\r\n\t\t\r\n\t\tif (checkRes.status >= 200 && checkRes.status < 300 && checkRes.data != null) {\r\n\t\t\t// 用户已存在,返回现有资料(H5 下 checkRes.data 可能是 plain object,不一定是 UTSJSONObject)\r\n\t\t\tconst data = checkRes.data\r\n\t\t\tlet existingUser: UTSJSONObject\r\n\t\t\tif (data instanceof UTSJSONObject) {\r\n\t\t\t\texistingUser = data\r\n\t\t\t} else {\r\n\t\t\t\texistingUser = new UTSJSONObject(data)\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tid: existingUser.getString('id') ?? '',\r\n\t\t\t\tusername: existingUser.getString('username') ?? '',\r\n\t\t\t\temail: existingUser.getString('email') ?? email,\r\n\t\t\t\tgender: existingUser.getString('gender'),\r\n\t\t\t\tbirthday: existingUser.getString('birthday'),\r\n\t\t\t\theight_cm: existingUser.getNumber('height_cm'),\r\n\t\t\t\tweight_kg: existingUser.getNumber('weight_kg'),\r\n\t\t\t\tbio: existingUser.getString('bio'),\r\n\t\t\t\tavatar_url: existingUser.getString('avatar_url'),\r\n\t\t\t\tpreferred_language: existingUser.getString('preferred_language'),\r\n\t\t\t\trole: existingUser.getString('role') ?? 'consumer',\r\n\t\t\t\tcreated_at: existingUser.getString('created_at'),\r\n\t\t\t\tupdated_at: existingUser.getString('updated_at')\r\n\t\t\t} as UserProfile\r\n\t\t}\r\n\t\t\r\n\t\t// 用户不存在,创建新用户资料\r\n\t\tconst newUserData = new UTSJSONObject()\r\n\t\tnewUserData.set('id', userId)\r\n\t\tnewUserData.set('email', email)\r\n\t\tnewUserData.set('username', email.split('@')[0] ?? 'user') // 默认用户名为邮箱前缀\r\n\t\t\r\n\t\tconst insertRes = await supabase.from('ak_users')\r\n\t\t\t.insert(newUserData)\r\n\t\t\t.select('*', {})\r\n\t\t\t.single()\r\n\t\t\t.execute()\r\n\t\t\r\n\t\t__f__('log','at utils/sapi.uts:72','ensureUserProfile insert ak_users status:', insertRes.status)\r\n\t\t\r\n\t\tif (insertRes.status >= 200 && insertRes.status < 300 && insertRes.data != null) {\r\n\t\t\tconst rawData = insertRes.data\r\n\t\t\tconst newUser = (rawData instanceof UTSJSONObject)\r\n\t\t\t\t? (rawData as UTSJSONObject)\r\n\t\t\t\t: new UTSJSONObject(rawData)\r\n\t\t\treturn {\r\n\t\t\t\tid: newUser.getString('id') ?? '',\r\n\t\t\t\tusername: newUser.getString('username') ?? '',\r\n\t\t\t\temail: newUser.getString('email') ?? email,\r\n\t\t\t\tgender: newUser.getString('gender'),\r\n\t\t\t\tbirthday: newUser.getString('birthday'),\r\n\t\t\t\theight_cm: newUser.getNumber('height_cm'),\r\n\t\t\t\tweight_kg: newUser.getNumber('weight_kg'),\r\n\t\t\t\tbio: newUser.getString('bio'),\r\n\t\t\t\tavatar_url: newUser.getString('avatar_url'),\r\n\t\t\t\tpreferred_language: newUser.getString('preferred_language'),\r\n\t\t\t\trole: newUser.getString('role') ?? 'consumer',\r\n\t\t\t\tcreated_at: newUser.getString('created_at'),\r\n\t\t\t\tupdated_at: newUser.getString('updated_at')\r\n\t\t\t} as UserProfile\r\n\t\t} else {\r\n\t\t\t__f__('error','at utils/sapi.uts:95','创建用户资料失败:', insertRes.status)\r\n\t\t\treturn null\r\n\t\t}\r\n\t} catch (error) {\r\n\t\t__f__('error','at utils/sapi.uts:99','ensureUserProfile 异常:', error)\r\n\t\treturn null\r\n\t}\r\n}\r\n","import supa, { supaReady } from '@/components/supadb/aksupainstance.uts'\r\nimport type { UserProfile, UserStats } from '@/types/mall-types.uts'\r\nimport type { DeviceInfo } from '@/pages/sense/types.uts'\r\nimport { SenseDataService, type DeviceParams } from '@/pages/sense/senseDataService.uts'\r\nimport { reactive } from 'vue'\r\nimport { ensureUserProfile } from './sapi.uts'\r\n\r\n// 设备状态类型\r\nexport type DeviceState = {\r\n\tdevices : Array\r\n\tcurrentDevice : DeviceInfo | null\r\n\tisLoading : boolean\r\n\tlastUpdated : number | null\r\n}\r\n\r\n//定义一个大写的State类型\r\nexport type State = {\r\n\tglobalNum : number\r\n\tuserProfile ?: UserProfile\r\n\tisLoggedIn : boolean // 新增字段\r\n\tdeviceState : DeviceState // 新增设备状态\r\n\t// 如有需要,可增加更多属性\r\n}\r\n\r\n// 实例化为state\r\nexport const state = reactive({\r\n\tglobalNum: 0,\r\n\tuserProfile: { username: '', email: '' },\r\n\tisLoggedIn: false,\r\n\tdeviceState: {\r\n\t\tdevices: [],\r\n\t\tcurrentDevice: null,\r\n\t\tisLoading: false,\r\n\t\tlastUpdated: null\r\n\t} as DeviceState\r\n} as State)\r\n// 定义修改属性值的方法\r\nexport const setGlobalNum = (num : number) => {\r\n\tstate.globalNum = num\r\n}\r\n// 新增:设置登录状态的方法\r\nexport const setIsLoggedIn = (val : boolean) => {\r\n\tstate.isLoggedIn = val\r\n}\r\n// 定义全局设置用户信息的方法\r\nexport const setUserProfile = (profile : UserProfile) => {\r\n\tstate.userProfile = profile\r\n}\r\n\r\n// 获取当前用户信息(含补全 profile)\r\nexport async function getCurrentUser() : Promise {\r\n\ttry {\r\n\t\tawait supaReady\r\n\t} catch (_) {}\r\n\r\n\tconst sessionInfo = supa.getSession()\r\n\tif (sessionInfo.user == null) {\r\n\t\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\t\tstate.isLoggedIn = false // 未登录\r\n\t\treturn null\r\n\t}\r\n\tconst userId = sessionInfo.user?.getString(\"id\")\r\n\tif (userId == null) {\r\n\t\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\t\tstate.isLoggedIn = false // 未登录\r\n\t\treturn null\r\n\t}\t// 查询 ak_users 表补全 profile\r\n\tconst res = await supa.from('ak_users').select('*', {}).eq('id', userId).execute()\r\n\t__f__('log','at utils/store.uts:69',res)\r\n\tif (res.status >= 200 && res.status < 300 && (res.data != null)) {\r\n\t\tlet user : UTSJSONObject | null = null;\r\n\t\tconst data = res.data as any;\r\n\t\tif (Array.isArray(data)) {\r\n\t\t\tif (data.length > 0) {\r\n\t\t\t\tuser = data[0] as UTSJSONObject;\r\n\t\t\t}\r\n\t\t} else if (data != null) {\r\n\t\t\tuser = data as UTSJSONObject;\r\n\t\t} __f__('log','at utils/store.uts:79',user)\r\n\t\tif (user == null) {\r\n\t\t\t__f__('log','at utils/store.uts:81','用户资料为空,尝试创建基础资料...')\t\t\t// 如果用户资料为空,尝试创建基础用户资料\r\n\t\t\tconst sessionUser = sessionInfo.user\r\n\t\t\tif (sessionUser != null) {\r\n\t\t\t\tconst createdProfile = await ensureUserProfile(sessionUser)\r\n\t\t\t\tif (createdProfile != null) {\r\n\t\t\t\t\tstate.userProfile = createdProfile\r\n\t\t\t\t\tstate.isLoggedIn = true\r\n\t\t\t\t\treturn createdProfile\r\n\t\t\t\t} else {\r\n\t\t\t\t\t__f__('error','at utils/store.uts:90','创建用户资料失败')\r\n\t\t\t\t\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\t\t\t\t\tstate.isLoggedIn = false\r\n\t\t\t\t\treturn null\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t__f__('error','at utils/store.uts:96','会话用户信息为空')\r\n\t\t\t\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\t\t\t\tstate.isLoggedIn = false\r\n\t\t\t\treturn null\r\n\t\t\t}\r\n\t\t}\r\n\t\t__f__('log','at utils/store.uts:102',user)\r\n\t\t// 直接用 getString/getNumber,无需兜底属性\t\t\r\n\t\tconst profile : UserProfile = {\r\n\t\t\tid: user.getString('id'),\r\n\t\t\tusername: user.getString('username') ?? \"\",\r\n\t\t\temail: user.getString('email') ?? \"\",\r\n\t\t\tgender: user.getString('gender'),\r\n\t\t\tbirthday: user.getString('birthday'),\r\n\t\t\theight_cm: user.getNumber('height_cm'),\r\n\t\t\tweight_kg: user.getNumber('weight_kg'),\r\n\t\t\tbio: user.getString('bio'),\r\n\t\t\tavatar_url: user.getString('avatar_url'),\r\n\t\t\tpreferred_language: user.getString('preferred_language'),\r\n\t\t\trole: user.getString('role'),\r\n\t\t\tschool_id: user.getString('school_id'),\r\n\t\t\tgrade_id: user.getString('grade_id'),\r\n\t\t\tclass_id: user.getString('class_id')\r\n\t\t}\r\n\t\tstate.userProfile = profile\r\n\t\tstate.isLoggedIn = true // 登录成功\r\n\t\treturn profile\r\n\t} else {\r\n\t\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\t\tstate.isLoggedIn = false // 未登录\r\n\t\treturn null\r\n\t}\r\n}\r\n\r\n// 登出并清空用户信息\r\nexport function logout() {\r\n\tsupa.signOut()\r\n\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\tstate.isLoggedIn = false // 登出\r\n}\r\n\r\n// 获取当前用户ID(优先级:state.userProfile.id > session > localStorage)\r\nexport function getCurrentUserId() : string {\r\n\ttry {\r\n\t\tconst profile = state.userProfile\r\n\t\tif (profile != null && profile.id != null) {\r\n\t\t\tconst profileId = profile.id\r\n\t\t\tif (profileId != null) {\r\n\t\t\t\treturn profileId\r\n\t\t\t}\r\n\t\t}\r\n\t} catch (e) { }\r\n\ttry {\r\n\t\tconst session = supa.getSession()\r\n\t\tif (session != null) {\r\n\t\t\tconst curuser = session.user\r\n\t\t\tconst userId = curuser?.getString('id')\r\n\t\t\tif (userId != null) return userId\r\n\t\t}\r\n\t} catch (e) { }\r\n\treturn ''\r\n}\r\n\r\n// 获取当前用户的class_id\r\nexport function getCurrentUserClassId() : string | null {\r\n\ttry {\r\n\t\tconst profile = state.userProfile\r\n\t\tif (profile != null && profile.class_id != null) {\r\n\t\t\treturn profile.class_id\r\n\t\t}\r\n\t} catch (e) {\r\n\t\t__f__('error','at utils/store.uts:167','获取用户class_id失败:', e)\r\n\t}\r\n\treturn null\r\n}\r\n\r\n// User store API for component compatibility\r\nexport function getUserStore() {\r\n\treturn {\r\n\t\tgetUserId() : string | null {\r\n\t\t\tconst sessionInfo = supa.getSession()\r\n\t\t\treturn sessionInfo.user?.getString(\"id\") ?? null\r\n\t\t},\r\n\r\n\t\tgetUserName() : string | null {\r\n\t\t\treturn state.userProfile?.username ?? null\r\n\t\t},\r\n\r\n\t\tgetUserRole() : string | null {\r\n\t\t\t// Default role logic - can be enhanced based on your needs\r\n\t\t\tconst sessionInfo = supa.getSession()\r\n\t\t\tif (sessionInfo.user == null) return null\r\n\r\n\t\t\t// You can add role detection logic here\r\n\t\t\t// For now, return a default role\r\n\t\t\treturn 'teacher' // or determine from user profile/database\r\n\t\t},\r\n\r\n\t\tgetProfile() : UserProfile | null {\r\n\t\t\treturn state.userProfile\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// ========== 设备状态管理方法 ==========\r\n\r\n/**\r\n * 设置设备加载状态\r\n */\r\nexport const setDeviceLoading = (loading : boolean) => {\r\n\tstate.deviceState.isLoading = loading\r\n}\r\n\r\n/**\r\n * 设置设备列表\r\n */\r\nexport const setDevices = (devices : Array) => {\r\n\tstate.deviceState.devices = devices\r\n\tstate.deviceState.lastUpdated = Date.now()\r\n}\r\n\r\n/**\r\n * 添加设备到列表\r\n */\r\nexport const addDevice = (device : DeviceInfo) => {\r\n\tconst existingIndex = state.deviceState.devices.findIndex(d => d.id === device.id)\r\n\tif (existingIndex >= 0) {\r\n\t\t// 更新现有设备\r\n\t\tstate.deviceState.devices[existingIndex] = device\r\n\t} else {\r\n\t\t// 添加新设备\r\n\t\tstate.deviceState.devices.push(device)\r\n\t}\r\n\tstate.deviceState.lastUpdated = Date.now()\r\n}\r\n\r\n/**\r\n * 从列表中移除设备\r\n */\r\nexport const removeDevice = (deviceId : string) => {\r\n\tconst index = state.deviceState.devices.findIndex(d => d.id === deviceId)\r\n\tif (index >= 0) {\r\n\t\tstate.deviceState.devices.splice(index, 1)\r\n\t\t// 如果移除的是当前设备,清空当前设备\r\n\t\tif (state.deviceState.currentDevice?.id === deviceId) {\r\n\t\t\tstate.deviceState.currentDevice = null\r\n\t\t}\r\n\t\tstate.deviceState.lastUpdated = Date.now()\r\n\t}\r\n}\r\n\r\n/**\r\n * 更新设备信息\r\n */\r\nexport const updateDevice = (device : DeviceInfo) => {\r\n\tconst index = state.deviceState.devices.findIndex(d => d.id === device.id)\r\n\tif (index >= 0) {\r\n\t\tstate.deviceState.devices[index] = device\r\n\t\t// 如果更新的是当前设备,也更新当前设备\r\n\t\tif (state.deviceState.currentDevice?.id === device.id) {\r\n\t\t\tstate.deviceState.currentDevice = device\r\n\t\t}\r\n\t\tstate.deviceState.lastUpdated = Date.now()\r\n\t}\r\n}\r\n\r\n/**\r\n * 设置当前选中的设备\r\n */\r\nexport const setCurrentDevice = (device : DeviceInfo | null) => {\r\n\tstate.deviceState.currentDevice = device\r\n}\r\n\r\n/**\r\n * 根据设备ID获取设备信息\r\n */\r\nexport const getDeviceById = (deviceId : string) : DeviceInfo | null => {\r\n\treturn state.deviceState.devices.find(d => d.id === deviceId) ?? null\r\n}\r\n\r\n/**\r\n * 获取在线设备列表\r\n */\r\nexport const getOnlineDevices = () : Array => {\r\n\treturn state.deviceState.devices.filter(d => d.status === 'online')\r\n}\r\n\r\n/**\r\n * 从服务器加载设备列表\r\n */\r\nexport const loadDevices = async (forceRefresh : boolean) : Promise => {\r\n\tconst userId = getCurrentUserId()\r\n\tif (userId == null || userId === '') {\r\n\t\t__f__('log','at utils/store.uts:289','用户未登录,无法加载设备列表')\r\n\t\treturn false\r\n\t}\r\n\r\n\t// 如果不是强制刷新且数据较新(5分钟内),直接返回\r\n\tconst now = Date.now()\r\n\tconst lastUpdated = state.deviceState.lastUpdated\r\n\tif (forceRefresh == false && lastUpdated != null && (now - lastUpdated < 5 * 60 * 1000)) {\r\n\t\t__f__('log','at utils/store.uts:297','设备数据较新,跳过刷新')\r\n\t\treturn true\r\n\t}\r\n\tsetDeviceLoading(true)\r\n\ttry {\r\n\t\tconst result = await SenseDataService.getDevices({ user_id: userId })\r\n\t\tif (result.error === null && result.data != null) {\r\n\t\t\tconst devices = result.data as Array\r\n\t\t\tsetDevices(devices)\r\n\t\t\t__f__('log','at utils/store.uts:306',`加载设备列表成功,共${devices.length}个设备`)\r\n\t\t\treturn true\r\n\t\t} else {\r\n\t\t\t__f__('log','at utils/store.uts:309','加载设备列表失败:', result.error?.message ?? '未知错误')\r\n\t\t\treturn false\r\n\t\t}\r\n\t} catch (error) {\r\n\t\t__f__('log','at utils/store.uts:313','加载设备列表异常:', error)\r\n\t\treturn false\r\n\t} finally {\r\n\t\tsetDeviceLoading(false)\r\n\t}\r\n}\r\n\r\n/**\r\n * 从服务器加载设备列表 - 带默认参数的重载版本\r\n */\r\nexport const loadDevicesWithDefault = async () : Promise => {\r\n\treturn await loadDevices(false)\r\n}\r\n\r\n/**\r\n * 绑定新设备\r\n */\r\nexport const bindNewDevice = async (deviceData : UTSJSONObject) : Promise => {\r\n\tconst userId = getCurrentUserId()\r\n\tif (userId == null) {\r\n\t\t__f__('log','at utils/store.uts:333','用户未登录,无法绑定设备')\r\n\t\treturn false\r\n\t}\r\n\r\n\t// 确保设备数据中包含用户ID\r\n\tdeviceData.set('user_id', userId)\r\n\ttry {\r\n\t\tconst result = await SenseDataService.bindDevice(deviceData)\r\n\t\tif (result.error === null && result.data != null) {\r\n\t\t\t// 添加到本地状态\r\n\t\t\taddDevice(result.data as DeviceInfo)\r\n\t\t\tconst deviceName = (result.data as DeviceInfo).device_name ?? '未知设备'\r\n\t\t\t__f__('log','at utils/store.uts:345','设备绑定成功:', deviceName)\r\n\t\t\treturn true\r\n\t\t} else {\r\n\t\t\t__f__('log','at utils/store.uts:348','设备绑定失败:', result.error?.message ?? '未知错误')\r\n\t\t\treturn false\r\n\t\t}\r\n\t} catch (error) {\r\n\t\t__f__('log','at utils/store.uts:352','设备绑定异常:', error)\r\n\t\treturn false\r\n\t}\r\n}\r\n\r\n/**\r\n * 解绑设备\r\n */\r\nexport const unbindDevice = async (deviceId : string) : Promise => {\r\n\ttry {\r\n\t\tconst result = await SenseDataService.unbindDevice(deviceId)\r\n\t\tif (result.error === null) {\r\n\t\t\t// 从本地状态中移除\r\n\t\t\tremoveDevice(deviceId)\r\n\t\t\t__f__('log','at utils/store.uts:366','设备解绑成功')\r\n\t\t\treturn true\r\n\t\t} else {\r\n\t\t\t__f__('log','at utils/store.uts:369','设备解绑失败:', result.error?.message ?? '未知错误')\r\n\t\t\treturn false\r\n\t\t}\r\n\t} catch (error) {\r\n\t\t__f__('log','at utils/store.uts:373','设备解绑异常:', error)\r\n\t\treturn false\r\n\t}\r\n}\r\n\r\n/**\r\n * 更新设备配置\r\n */\r\nexport const updateDeviceConfig = async (deviceId : string, configData : UTSJSONObject) : Promise => {\r\n\ttry {\r\n\t\tconst result = await SenseDataService.updateDevice(deviceId, configData)\r\n\t\tif (result.error === null && result.data != null) {\r\n\t\t\t// 更新本地状态\r\n\t\t\tupdateDevice(result.data as DeviceInfo)\r\n\t\t\t__f__('log','at utils/store.uts:387','设备配置更新成功')\r\n\t\t\treturn true\r\n\t\t} else {\r\n\t\t\t__f__('log','at utils/store.uts:390','设备配置更新失败:', result.error?.message ?? '未知错误')\r\n\t\t\treturn false\r\n\t\t}\r\n\t} catch (error) {\r\n\t\t__f__('log','at utils/store.uts:394','设备配置更新异常:', error)\r\n\t\treturn false\r\n\t}\r\n}\r\n\r\n// ========== 设备管理 API ==========\r\n\r\n/**\r\n * 获取设备管理相关的API\r\n */\r\nexport function getDeviceStore() {\r\n\treturn {\r\n\t\t// 获取设备状态\r\n\t\tgetDevices() : Array {\r\n\t\t\treturn state.deviceState.devices\r\n\t\t},\r\n\r\n\t\tgetCurrentDevice() : DeviceInfo | null {\r\n\t\t\treturn state.deviceState.currentDevice\r\n\t\t},\r\n\r\n\t\tisLoading() : boolean {\r\n\t\t\treturn state.deviceState.isLoading\r\n\t\t},\r\n\t\tgetLastUpdated() : number | null {\r\n\t\t\treturn state.deviceState.lastUpdated\r\n\t\t},\r\n\r\n\t\t// 设备操作方法\r\n\t\tasync loadDevices(forceRefresh : boolean) : Promise {\r\n\t\t\treturn await loadDevices(forceRefresh)\r\n\t\t},\r\n\r\n\t\tasync refreshDevices() : Promise {\r\n\t\t\treturn await loadDevicesWithDefault()\r\n\t\t},\r\n\r\n\t\tasync bindDevice(deviceData : UTSJSONObject) : Promise {\r\n\t\t\treturn await bindNewDevice(deviceData)\r\n\t\t},\r\n\r\n\t\tasync unbindDevice(deviceId : string) : Promise {\r\n\t\t\treturn await unbindDevice(deviceId)\r\n\t\t},\r\n\r\n\t\tasync updateDevice(deviceId : string, configData : UTSJSONObject) : Promise {\r\n\t\t\treturn await updateDeviceConfig(deviceId, configData)\r\n\t\t},\r\n\r\n\t\t// 设备查询方法\r\n\t\tgetDeviceById(deviceId : string) : DeviceInfo | null {\r\n\t\t\treturn getDeviceById(deviceId)\r\n\t\t},\r\n\r\n\t\tgetOnlineDevices() : Array {\r\n\t\t\treturn getOnlineDevices()\r\n\t\t},\r\n\r\n\t\t// 设备选择\r\n\t\tsetCurrentDevice(device : DeviceInfo | null) {\r\n\t\t\tsetCurrentDevice(device)\r\n\t\t}\r\n\t}\r\n}","import 'D:/HBuilderX/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-console/src/runtime/app/index.ts';// 简化的main.uts,移除i18n依赖\r\nimport { createSSRApp } from 'vue'\r\nimport App from './App.uvue'\r\nimport i18n from '@/uni_modules/i18n/index.uts'\r\n\r\nexport function createApp() {\r\n const app = createSSRApp(App)\r\n \r\n // 注册 i18n 全局属性,使组件可以使用 $t 方法\r\n\tapp.config.globalProperties.$t = (key: string, values?: any, locale?: string): string => {\r\n\t\tif (i18n.global == null) {\r\n\t\t\t__f__('error','at main.uts:12','i18n is not initialized')\r\n\t\t\treturn key\r\n\t\t}\r\n const params = values as UTSJSONObject | null\r\n\t\tconst res = i18n.global.t(key, params, locale)\r\n if (res.length > 0) {\r\n return res\r\n }\r\n return key\r\n\t}\r\n \r\n return { app }\r\n}\r\n\nexport function main(app: IApp) {\n definePageRoutes();\n defineAppConfig();\n (createApp()['app'] as VueApp).mount(app, GenUniApp());\n}\n\nexport class UniAppConfig extends io.dcloud.uniapp.appframe.AppConfig {\n override name: string = \"mall\"\n override appid: string = \"__UNI__YOUR_APP_ID__\"\n override versionName: string = \"1.0.0\"\n override versionCode: string = \"100\"\n override uniCompilerVersion: string = \"4.87\"\n \n constructor() { super() }\n}\n\nimport GenPagesUserLoginClass from './pages/user/login.uvue'\nimport GenPagesUserBootClass from './pages/user/boot.uvue'\nimport GenPagesUserRegisterClass from './pages/user/register.uvue'\nimport GenPagesUserForgotPasswordClass from './pages/user/forgot-password.uvue'\nimport GenPagesUserTermsClass from './pages/user/terms.uvue'\nimport GenPagesUserCenterClass from './pages/user/center.uvue'\nimport GenPagesUserProfileClass from './pages/user/profile.uvue'\nimport GenPagesUserChangePasswordClass from './pages/user/change-password.uvue'\nimport GenPagesUserBindPhoneClass from './pages/user/bind-phone.uvue'\nimport GenPagesUserBindEmailClass from './pages/user/bind-email.uvue'\nimport GenPagesMallConsumerIndexClass from './pages/mall/consumer/index.uvue'\nimport GenPagesMallConsumerCategoryClass from './pages/mall/consumer/category.uvue'\nimport GenPagesMallConsumerMessagesClass from './pages/mall/consumer/messages.uvue'\nimport GenPagesMallConsumerCartClass from './pages/mall/consumer/cart.uvue'\nimport GenPagesMallConsumerProfileClass from './pages/mall/consumer/profile.uvue'\nimport GenPagesMallConsumerSettingsClass from './pages/mall/consumer/settings.uvue'\nimport GenPagesMallConsumerWalletClass from './pages/mall/consumer/wallet.uvue'\nimport GenPagesMallConsumerWithdrawClass from './pages/mall/consumer/withdraw.uvue'\nimport GenPagesMallConsumerSearchClass from './pages/mall/consumer/search.uvue'\nimport GenPagesMallConsumerProductDetailClass from './pages/mall/consumer/product-detail.uvue'\nimport GenPagesMallConsumerShopDetailClass from './pages/mall/consumer/shop-detail.uvue'\nimport GenPagesMallConsumerCouponsClass from './pages/mall/consumer/coupons.uvue'\nimport GenPagesMallConsumerFavoritesClass from './pages/mall/consumer/favorites.uvue'\nimport GenPagesMallConsumerFootprintClass from './pages/mall/consumer/footprint.uvue'\nimport GenPagesMallConsumerAddressListClass from './pages/mall/consumer/address-list.uvue'\nimport GenPagesMallConsumerAddressEditClass from './pages/mall/consumer/address-edit.uvue'\nimport GenPagesMallConsumerCheckoutClass from './pages/mall/consumer/checkout.uvue'\nimport GenPagesMallConsumerPaymentClass from './pages/mall/consumer/payment.uvue'\nimport GenPagesMallConsumerPaymentSuccessClass from './pages/mall/consumer/payment-success.uvue'\nimport GenPagesMallConsumerOrdersClass from './pages/mall/consumer/orders.uvue'\nimport GenPagesMallConsumerOrderDetailClass from './pages/mall/consumer/order-detail.uvue'\nimport GenPagesMallConsumerLogisticsClass from './pages/mall/consumer/logistics.uvue'\nimport GenPagesMallConsumerReviewClass from './pages/mall/consumer/review.uvue'\nimport GenPagesMallConsumerRefundClass from './pages/mall/consumer/refund.uvue'\nimport GenPagesMallConsumerApplyRefundClass from './pages/mall/consumer/apply-refund.uvue'\nimport GenPagesMallConsumerRefundReviewClass from './pages/mall/consumer/refund-review.uvue'\nimport GenPagesMallConsumerChatClass from './pages/mall/consumer/chat.uvue'\nimport GenPagesMallConsumerSubscriptionPlanListClass from './pages/mall/consumer/subscription/plan-list.uvue'\nimport GenPagesMallConsumerSubscriptionPlanDetailClass from './pages/mall/consumer/subscription/plan-detail.uvue'\nimport GenPagesMallConsumerSubscriptionSubscribeCheckoutClass from './pages/mall/consumer/subscription/subscribe-checkout.uvue'\nimport GenPagesMallConsumerSubscriptionMySubscriptionsClass from './pages/mall/consumer/subscription/my-subscriptions.uvue'\nimport GenPagesMallConsumerSubscriptionFollowedShopsClass from './pages/mall/consumer/subscription/followed-shops.uvue'\nimport GenPagesMallConsumerPointsIndexClass from './pages/mall/consumer/points/index.uvue'\nimport GenPagesMallConsumerRedPacketsIndexClass from './pages/mall/consumer/red-packets/index.uvue'\nimport GenPagesMallConsumerBankCardsIndexClass from './pages/mall/consumer/bank-cards/index.uvue'\nimport GenPagesMallConsumerBankCardsAddClass from './pages/mall/consumer/bank-cards/add.uvue'\nfunction definePageRoutes() {\n__uniRoutes.push({ path: \"pages/user/login\", component: GenPagesUserLoginClass, meta: { isQuit: true } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"用户登录\"],[\"navigationStyle\",\"custom\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/boot\", component: GenPagesUserBootClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/register\", component: GenPagesUserRegisterClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"注册\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/forgot-password\", component: GenPagesUserForgotPasswordClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"忘记密码\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/terms\", component: GenPagesUserTermsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"用户协议与隐私政策\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/center\", component: GenPagesUserCenterClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"用户中心\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/profile\", component: GenPagesUserProfileClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"个人资料\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/change-password\", component: GenPagesUserChangePasswordClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"修改密码\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/bind-phone\", component: GenPagesUserBindPhoneClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"绑定手机\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/bind-email\", component: GenPagesUserBindEmailClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"绑定邮箱\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/index\", component: GenPagesMallConsumerIndexClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"首页\"],[\"navigationStyle\",\"custom\"],[\"enablePullDownRefresh\",false]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/category\", component: GenPagesMallConsumerCategoryClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"分类\"],[\"navigationStyle\",\"custom\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/messages\", component: GenPagesMallConsumerMessagesClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"消息\"],[\"enablePullDownRefresh\",true]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/cart\", component: GenPagesMallConsumerCartClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"购物车\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/profile\", component: GenPagesMallConsumerProfileClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/settings\", component: GenPagesMallConsumerSettingsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"设置\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/wallet\", component: GenPagesMallConsumerWalletClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的钱包\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/withdraw\", component: GenPagesMallConsumerWithdrawClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"余额提现\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/search\", component: GenPagesMallConsumerSearchClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"搜索\"],[\"navigationStyle\",\"custom\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/product-detail\", component: GenPagesMallConsumerProductDetailClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"商品详情\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/shop-detail\", component: GenPagesMallConsumerShopDetailClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"店铺详情\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/coupons\", component: GenPagesMallConsumerCouponsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的优惠券\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/favorites\", component: GenPagesMallConsumerFavoritesClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的收藏\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/footprint\", component: GenPagesMallConsumerFootprintClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的足迹\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/address-list\", component: GenPagesMallConsumerAddressListClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"收货地址\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/address-edit\", component: GenPagesMallConsumerAddressEditClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"编辑地址\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/checkout\", component: GenPagesMallConsumerCheckoutClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"确认订单\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/payment\", component: GenPagesMallConsumerPaymentClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"收银台\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/payment-success\", component: GenPagesMallConsumerPaymentSuccessClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"支付成功\"],[\"navigationStyle\",\"custom\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/orders\", component: GenPagesMallConsumerOrdersClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的订单\"],[\"enablePullDownRefresh\",true]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/order-detail\", component: GenPagesMallConsumerOrderDetailClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"订单详情\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/logistics\", component: GenPagesMallConsumerLogisticsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"物流详情\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/review\", component: GenPagesMallConsumerReviewClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"评价晒单\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/refund\", component: GenPagesMallConsumerRefundClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"退款/售后\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/apply-refund\", component: GenPagesMallConsumerApplyRefundClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"申请售后\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/refund-review\", component: GenPagesMallConsumerRefundReviewClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"服务评价\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/chat\", component: GenPagesMallConsumerChatClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"客服聊天\"],[\"navigationStyle\",\"custom\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/subscription/plan-list\", component: GenPagesMallConsumerSubscriptionPlanListClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"软件订阅\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/subscription/plan-detail\", component: GenPagesMallConsumerSubscriptionPlanDetailClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"订阅详情\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/subscription/subscribe-checkout\", component: GenPagesMallConsumerSubscriptionSubscribeCheckoutClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"确认订阅\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/subscription/my-subscriptions\", component: GenPagesMallConsumerSubscriptionMySubscriptionsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的订阅\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/subscription/followed-shops\", component: GenPagesMallConsumerSubscriptionFollowedShopsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"关注店铺\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/points/index\", component: GenPagesMallConsumerPointsIndexClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"积分管理\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/red-packets/index\", component: GenPagesMallConsumerRedPacketsIndexClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的红包\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/bank-cards/index\", component: GenPagesMallConsumerBankCardsIndexClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"银行卡管理\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/bank-cards/add\", component: GenPagesMallConsumerBankCardsAddClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"添加银行卡\"]]) } as UniPageRoute)\n}\nconst __uniTabBar: Map | null = _uM([[\"color\",\"#999999\"],[\"selectedColor\",\"#ff5000\"],[\"backgroundColor\",\"#ffffff\"],[\"borderStyle\",\"black\"],[\"list\",[_uM([[\"pagePath\",\"pages/mall/consumer/index\"],[\"text\",\"首页\"],[\"iconPath\",\"static/tabbar/home.png\"],[\"selectedIconPath\",\"static/tabbar/home-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/category\"],[\"text\",\"分类\"],[\"iconPath\",\"static/tabbar/category.png\"],[\"selectedIconPath\",\"static/tabbar/category-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/messages\"],[\"text\",\"消息\"],[\"iconPath\",\"static/tabbar/messages.png\"],[\"selectedIconPath\",\"static/tabbar/messages-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/cart\"],[\"text\",\"购物车\"],[\"iconPath\",\"static/tabbar/cart.png\"],[\"selectedIconPath\",\"static/tabbar/cart-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/profile\"],[\"text\",\"我的\"],[\"iconPath\",\"static/tabbar/profile.png\"],[\"selectedIconPath\",\"static/tabbar/profile-active.png\"]])]]])\nconst __uniLaunchPage: Map = _uM([[\"url\",\"pages/user/login\"],[\"style\",_uM([[\"navigationBarTitleText\",\"用户登录\"],[\"navigationStyle\",\"custom\"]])]])\nfunction defineAppConfig(){\n __uniConfig.entryPagePath = '/pages/user/login'\n __uniConfig.globalStyle = _uM([[\"navigationBarTextStyle\",\"black\"],[\"navigationBarTitleText\",\"mall\"],[\"navigationBarBackgroundColor\",\"#FFFFFF\"],[\"backgroundColor\",\"#F8F8F8\"]])\n __uniConfig.getTabBarConfig = ():Map | null => _uM([[\"color\",\"#999999\"],[\"selectedColor\",\"#ff5000\"],[\"backgroundColor\",\"#ffffff\"],[\"borderStyle\",\"black\"],[\"list\",[_uM([[\"pagePath\",\"pages/mall/consumer/index\"],[\"text\",\"首页\"],[\"iconPath\",\"static/tabbar/home.png\"],[\"selectedIconPath\",\"static/tabbar/home-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/category\"],[\"text\",\"分类\"],[\"iconPath\",\"static/tabbar/category.png\"],[\"selectedIconPath\",\"static/tabbar/category-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/messages\"],[\"text\",\"消息\"],[\"iconPath\",\"static/tabbar/messages.png\"],[\"selectedIconPath\",\"static/tabbar/messages-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/cart\"],[\"text\",\"购物车\"],[\"iconPath\",\"static/tabbar/cart.png\"],[\"selectedIconPath\",\"static/tabbar/cart-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/profile\"],[\"text\",\"我的\"],[\"iconPath\",\"static/tabbar/profile.png\"],[\"selectedIconPath\",\"static/tabbar/profile-active.png\"]])]]])\n __uniConfig.tabBar = __uniConfig.getTabBarConfig()\n __uniConfig.conditionUrl = ''\n __uniConfig.uniIdRouter = new Map()\n \n __uniConfig.ready = true\n}\n","// 用户基础信息类型\r\nexport type UserProfile ={\r\n id?: string;\r\n username: string;\r\n email: string;\r\n gender?: string;\r\n birthday?: string;\r\n height_cm?: number;\r\n weight_kg?: number;\r\n bio?: string;\r\n avatar_url?: string;\r\n preferred_language?: string;\r\n role?:string;\r\n school_id?: string; // 所属学校ID\r\n grade_id?: string; // 所属年级ID \r\n class_id?: string; // 所属班级ID\r\n}\r\n\r\n// 语言选项类型 - 对应 ak_languages 表\r\nexport type LanguageOption = {\r\n id: string; // UUID\r\n code: string; // 语言代码,如 'zh-CN', 'en-US'\r\n name: string; // 英文名称\r\n native_name: string; // 本地语言名称\r\n}\r\n\r\nexport type UserStats = {\r\n trainings: number;\r\n points: number;\r\n streak: number;\r\n}","import supa from '@/components/supadb/aksupainstance.uts'\r\nimport type { AkReqResponse } from '@/uni_modules/ak-req/index.uts'\r\n\r\n// 使用单例 Supabase 客户端\r\n// const supa = createClient(SUPA_URL, SUPA_KEY)\r\n\r\n// 类型定义\r\nexport interface Brand {\r\n id: string\r\n name: string\r\n logo_url: string\r\n description: string\r\n}\r\n\r\nexport interface Category {\r\n id: string\r\n name: string\r\n icon: string\r\n description: string\r\n color: string\r\n created_at?: string\r\n}\r\n\r\nexport interface Product {\r\n id: string\r\n category_id: string\r\n merchant_id: string\r\n name: string\r\n subtitle?: string\r\n description?: string\r\n base_price: number\r\n market_price?: number\r\n cost_price?: number\r\n main_image_url?: string\r\n image_urls?: string // JSON string array\r\n video_urls?: string // JSON string array\r\n sale_count?: number\r\n view_count?: number\r\n total_stock?: number\r\n available_stock?: number\r\n is_hot?: boolean\r\n is_new?: boolean\r\n is_featured?: boolean\r\n status?: number\r\n rating_avg?: number\r\n rating_count?: number\r\n tags?: string // array string in DB\r\n attributes?: string // JSON string\r\n created_at?: string\r\n updated_at?: string\r\n // Alias fields for compatibility\r\n price?: number\r\n original_price?: number\r\n stock?: number\r\n sales?: number\r\n images?: string\r\n cover?: string\r\n // View fields\r\n brand_name?: string\r\n category_name?: string\r\n shop_name?: string\r\n merchant_name?: string\r\n}\r\n\r\nexport interface Shop {\r\n id: string\r\n merchant_id: string\r\n shop_name: string\r\n shop_logo?: string\r\n shop_banner?: string\r\n description?: string\r\n contact_name?: string\r\n contact_phone?: string\r\n rating_avg?: number\r\n total_sales?: number\r\n product_count?: number\r\n total_sales_count?: number\r\n created_at?: string\r\n}\r\n\r\nexport type CartItem = {\r\n id: string\r\n user_id: string\r\n product_id: string\r\n sku_id?: string\r\n merchant_id?: string\r\n quantity: number\r\n selected: boolean\r\n product_name?: string\r\n product_image?: string\r\n product_price?: number\r\n product_specification?: string\r\n shop_id?: string\r\n shop_name?: string\r\n created_at?: string\r\n updated_at?: string\r\n}\r\n\r\nexport interface UserAddress {\r\n id: string\r\n user_id: string\r\n recipient_name: string\r\n phone: string\r\n province: string\r\n city: string\r\n district: string\r\n detail_address: string\r\n postal_code?: string\r\n is_default: boolean\r\n label?: string\r\n created_at?: string\r\n updated_at?: string\r\n}\r\n\r\nexport type UserCoupon = {\r\n id: string\r\n user_id: string\r\n template_id: string\r\n coupon_code: string\r\n status: number // 1: unused, 2: used, 3: expired\r\n received_at: string\r\n expire_at: string\r\n used_at?: string\r\n // join fields from template or view\r\n template_name?: string\r\n amount?: number\r\n min_spend?: number\r\n name?: string\r\n title?: string\r\n}\r\n\r\nexport type ChatRoom = {\r\n id: string\r\n user_id: string\r\n merchant_id: string\r\n shop_name: string\r\n shop_logo?: string\r\n last_message?: string\r\n last_message_at?: string\r\n unread_count: number\r\n is_top: boolean\r\n created_at?: string\r\n updated_at?: string\r\n}\r\n\r\nexport interface Notification {\r\n id: string\r\n user_id: string\r\n type: string\r\n title: string\r\n content: string\r\n icon_url?: string\r\n link_url?: string\r\n is_read: boolean\r\n extra_data?: string\r\n created_at?: string\r\n}\r\n\r\nexport interface ChatMessage {\r\n id: string\r\n session_id?: string\r\n sender_id?: string\r\n receiver_id?: string\r\n content: string\r\n msg_type: string\r\n is_read: boolean\r\n is_from_user: boolean\r\n extra_data?: string\r\n created_at?: string\r\n}\r\n\r\nexport interface PaginatedResponse {\r\n data: T[]\r\n total: number\r\n page: number\r\n limit: number\r\n hasmore: boolean\r\n}\r\n\r\nexport interface ProductSku {\r\n id: string\r\n product_id: string\r\n sku_code: string\r\n specifications: string // JSON string\r\n price: number\r\n market_price?: number\r\n cost_price?: number\r\n stock?: number\r\n warning_stock?: number\r\n image_url?: string\r\n weight?: number\r\n status?: number\r\n created_at?: string\r\n}\r\n\r\nexport type AddAddressParams = {\r\n recipient_name: string\r\n phone: string\r\n province: string\r\n city: string\r\n district: string\r\n detail_address: string\r\n postal_code?: string\r\n is_default?: boolean\r\n label?: string\r\n}\r\n\r\nexport type UpdateAddressParams = {\r\n recipient_name?: string\r\n phone?: string\r\n province?: string\r\n city?: string\r\n district?: string\r\n detail_address?: string\r\n postal_code?: string\r\n is_default?: boolean\r\n label?: string\r\n}\r\n\r\nexport type CreateOrderParams = {\r\n merchant_id: string\r\n product_amount: number\r\n shipping_fee: number\r\n total_amount: number\r\n shipping_address: any\r\n items: any[]\r\n}\r\n\r\nexport type ShopOrderParams = {\r\n shipping_address: any\r\n shopGroups: any[]\r\n deliveryFee: number\r\n discountAmount: number\r\n}\r\n\r\nexport type ShopOrderResponse = {\r\n success: boolean\r\n orderIds: string[]\r\n error?: string\r\n}\r\n\r\nexport type RefundResponse = {\r\n success: boolean\r\n message: string\r\n}\r\n\r\nexport type ConfirmReceiptResponse = {\r\n success: boolean\r\n error?: string\r\n}\r\n\r\nclass SupabaseService {\r\n // 获取当前用户ID\r\n public getCurrentUserId(): string | null {\r\n try {\r\n // 1. 优先从 Supabase 会话获取\r\n const session = supa.getSession()\r\n if (session != null && session.user != null) {\r\n return session.user.getString('id')\r\n }\r\n \r\n // 2. 尝试从 Storage 恢复 Session (针对 App 重启后内存丢失的情况)\r\n // 注意:这里无法异步调用 hydrate,所以只能依赖 UI 层或 init 层的预加载\r\n // 但我们可以返回本地存储 ID 作为 fallback,前提是 Token 有效\r\n \r\n // 后备:尝试从本地存储获取\r\n const userId = uni.getStorageSync('user_id')\r\n return userId != null ? userId as string : null\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:270','获取用户ID失败:', e)\r\n return null\r\n }\r\n }\r\n\r\n // 确保会话有效 (异步)\r\n async ensureSession(): Promise {\r\n let session = supa.getSession()\r\n if (session.user == null) {\r\n __f__('log','at utils/supabaseService.uts:279','Session user is null, attempting to hydrate from storage...')\r\n await supa.hydrateSessionFromStorage()\r\n session = supa.getSession()\r\n }\r\n \r\n if (session.user != null) {\r\n // 同步 user_id 到 storage 保持一致\r\n const uid = session.user!!.getString('id')\r\n if (uid != null) {\r\n uni.setStorageSync('user_id', uid)\r\n return uid\r\n }\r\n }\r\n return this.getCurrentUserId()\r\n }\r\n\r\n // 获取所有分类\r\n async getCategories(): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_categories')\r\n .select('*')\r\n .order('name', { ascending: true })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:305','获取分类失败:', response.error)\r\n return []\r\n }\r\n \r\n return response.data as Category[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:311','获取分类异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取所有品牌\r\n async getBrands(): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_brands')\r\n .select('*')\r\n .eq('is_active', true)\r\n .order('name', { ascending: true })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:327','获取品牌失败:', response.error)\r\n return []\r\n }\r\n \r\n return response.data as Brand[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:333','获取品牌异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取指定分类的商品\r\n async getProductsByCategory(\r\n categoryId: string, \r\n page: number = 1, \r\n limit: number = 20\r\n ): Promise> {\r\n try {\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*', { count: 'exact' })\r\n .eq('category_id', categoryId)\r\n .eq('status', 1) \r\n .order('sale_count', { ascending: false })\r\n .page(page)\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:356','获取商品失败:', response.error)\r\n return {\r\n data: [] as Product[],\r\n total: 0,\r\n page,\r\n limit,\r\n hasmore: false\r\n }\r\n }\r\n \r\n return {\r\n data: response.data as Product[],\r\n total: response.total ?? 0,\r\n page,\r\n limit,\r\n hasmore: response.hasmore ?? false\r\n }\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:374','获取商品异常:', error)\r\n return {\r\n data: [] as Product[],\r\n total: 0,\r\n page,\r\n limit,\r\n hasmore: false\r\n }\r\n }\r\n }\r\n\r\n // 根据商品ID获取SKU列表\r\n async getProductSkus(productId: string): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_product_skus')\r\n .select('*')\r\n .eq('product_id', productId)\r\n .eq('status', 1)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:396','获取商品SKU失败:', response.error)\r\n return []\r\n }\r\n \r\n return response.data as ProductSku[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:402','获取商品SKU异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 搜索商品\r\n async searchProducts(\r\n keyword: string, \r\n page: number = 1, \r\n limit: number = 20,\r\n sortBy: string = 'sales',\r\n ascending: boolean = false\r\n ): Promise> {\r\n try {\r\n let query = supa\r\n .from('ml_products_detail_view')\r\n .select('*', { count: 'exact' })\r\n .eq('status', 1)\r\n .or(`name.ilike.%${keyword}%,description.ilike.%${keyword}%,subtitle.ilike.%${keyword}%,brand_name.ilike.%${keyword}%`)\r\n \r\n // 根据sortBy和ascending设置排序\r\n if (sortBy === 'price') {\r\n query = query.order('base_price', { ascending })\r\n } else if (sortBy === 'sales' || sortBy === 'sale_count') {\r\n query = query.order('sale_count', { ascending: false }) // 销量总是降序\r\n } else {\r\n // 默认按销量降序\r\n query = query.order('sale_count', { ascending: false })\r\n }\r\n \r\n const response = await query\r\n .page(page)\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:438','搜索商品失败:', response.error)\r\n return {\r\n data: [] as Product[],\r\n total: 0,\r\n page,\r\n limit,\r\n hasmore: false\r\n }\r\n }\r\n \r\n return {\r\n data: response.data as Product[],\r\n total: response.total ?? 0,\r\n page,\r\n limit,\r\n hasmore: response.hasmore ?? false\r\n }\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:456','搜索商品异常:', error)\r\n return {\r\n data: [] as Product[],\r\n total: 0,\r\n page,\r\n limit,\r\n hasmore: false\r\n }\r\n }\r\n }\r\n\r\n // 搜索店铺\r\n async searchShops(\r\n keyword: string,\r\n page: number = 1,\r\n limit: number = 20\r\n ): Promise> {\r\n try {\r\n const response = await supa\r\n .from('ml_shops')\r\n .select('*', { count: 'exact' })\r\n .eq('status', 1)\r\n .ilike('shop_name', `%${keyword}%`)\r\n .order('product_count', { ascending: false })\r\n .page(page)\r\n .limit(limit)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:485','搜索店铺失败:', response.error)\r\n return { data: [] as Shop[], total: 0, page, limit, hasmore: false }\r\n }\r\n\r\n // 映射数据确保类型安全\r\n const shops: Shop[] = []\r\n const dataList = response.data as any[]\r\n for (let i = 0; i < dataList.length; i++) {\r\n shops.push(dataList[i] as Shop)\r\n }\r\n\r\n return {\r\n data: shops,\r\n total: response.total ?? 0,\r\n page,\r\n limit,\r\n hasmore: response.hasmore ?? false\r\n }\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:504','搜索店铺异常:', error)\r\n return { data: [] as Shop[], total: 0, page, limit, hasmore: false }\r\n }\r\n }\r\n\r\n // 获取单个商品详情\r\n async getProductById(productId: string): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*')\r\n .eq('id', productId)\r\n .single()\r\n .executeAs()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:520','获取商品详情失败:', response.error)\r\n return null\r\n }\r\n \r\n return response.data as Product\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:526','获取商品详情异常:', error)\r\n return null\r\n }\r\n }\r\n\r\n // --- 关注店铺相关 ---\r\n\r\n // 检查是否已关注店铺\r\n async isShopFollowed(shopId: string, userId: string): Promise {\r\n try {\r\n const res = await supa\r\n .from('ml_shop_follows')\r\n .select('id', { count: 'exact' })\r\n .eq('shop_id', shopId)\r\n .eq('user_id', userId)\r\n .limit(1)\r\n .execute()\r\n \r\n return (res.total != null && res.total! > 0)\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:546','Check follow error:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 关注店铺\r\n async followShop(shopId: string, userId: string): Promise {\r\n try {\r\n const res = await supa\r\n .from('ml_shop_follows')\r\n .insert({\r\n user_id: userId,\r\n shop_id: shopId\r\n })\r\n .execute()\r\n \r\n return res.error == null\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:564','Follow shop error:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 取消关注\r\n async unfollowShop(shopId: string, userId: string): Promise {\r\n try {\r\n const res = await supa\r\n .from('ml_shop_follows')\r\n .eq('shop_id', shopId)\r\n .eq('user_id', userId)\r\n .delete()\r\n .execute()\r\n \r\n return res.error == null\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:581','Unfollow shop error:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 获取我关注的店铺列表\r\n async getFollowedShops(userId: string): Promise {\r\n try {\r\n // 关联查询店铺信息\r\n const res = await supa\r\n .from('ml_shop_follows')\r\n .select('*, ml_shops(*)') \r\n .eq('user_id', userId)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:598','getFollowedShops error:', res.error)\r\n return []\r\n }\r\n \r\n return res.data as any[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:604','getFollowedShops exception:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 根据商户ID获取店铺信息\r\n async getShopByMerchantId(merchantId: string): Promise {\r\n try {\r\n // 1. Try querying by merchant_id\r\n let response = await supa\r\n .from('ml_shops')\r\n .select('*')\r\n .eq('merchant_id', merchantId)\r\n .limit(1)\r\n .execute()\r\n \r\n if (response.error == null && response.data != null && (response.data as any[]).length > 0) {\r\n return (response.data as any[])[0] as Shop\r\n }\r\n\r\n // 2. Fallback: Try querying by id (Maybe the passed ID is the Shop ID?)\r\n __f__('log','at utils/supabaseService.uts:625','getShopByMerchantId: merchant_id not found, trying id...', merchantId)\r\n response = await supa\r\n .from('ml_shops')\r\n .select('*')\r\n .eq('id', merchantId)\r\n .limit(1)\r\n .execute()\r\n\r\n if (response.error == null && response.data != null && (response.data as any[]).length > 0) {\r\n __f__('log','at utils/supabaseService.uts:634','Found shop by ID instead of MerchantID')\r\n // Fix the merchant_id reference if we found it by ID\r\n const shop = (response.data as any[])[0] as Shop\r\n return shop\r\n }\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:641','获取店铺信息失败:', response.error)\r\n }\r\n return null\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:645','获取店铺信息异常:', error)\r\n return null\r\n }\r\n }\r\n\r\n // 根据商户ID获取商品列表\r\n async getProductsByMerchantId(merchantId: string, page: number = 1, limit: number = 20): Promise> {\r\n try {\r\n __f__('log','at utils/supabaseService.uts:653','getProductsByMerchantId querying for:', merchantId)\r\n \r\n // 1. Try fetching from view strictly first\r\n let query = supa\r\n .from('ml_products_detail_view')\r\n .select('*', { count: 'exact' })\r\n .eq('merchant_id', merchantId)\r\n // .eq('status', 1) // Temporarily disabled status check to see if products exist at all\r\n .order('created_at', { ascending: false })\r\n .page(page)\r\n .limit(limit)\r\n \r\n const response = await query.execute()\r\n \r\n // 检查视图结果:如果有错误 OR 数据为空,都尝试去查原始表\r\n if (response.error != null || (response.data != null && (response.data as any[]).length === 0)) {\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:670','获取商户商品失败 (View):', response.error)\r\n } else {\r\n __f__('log','at utils/supabaseService.uts:672','View returned 0 products, trying raw table fallback...')\r\n }\r\n \r\n // Fallback: Try raw table\r\n __f__('log','at utils/supabaseService.uts:676','Falling back to raw ml_products table...')\r\n const query2 = supa\r\n .from('ml_products')\r\n .select('*', { count: 'exact' })\r\n .eq('merchant_id', merchantId)\r\n // .eq('status', 1) // Also disabled here\r\n .order('created_at', { ascending: false })\r\n .page(page)\r\n .limit(limit)\r\n \r\n const res2 = await query2.execute()\r\n if (res2.error != null) {\r\n __f__('error','at utils/supabaseService.uts:688','获取商户商品失败 (Raw):', res2.error)\r\n return {data:[] as Product[], total:0, page, limit, hasmore:false}\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:692',`Fallback (Raw) found: ${(res2.data as any[]).length} products`)\r\n \r\n // Map raw data to Product interface (manually if needed for extra safety)\r\n const mappedData: Product[] = []\r\n const rawData = res2.data as any[]\r\n for(let i = 0; i < rawData.length; i++) {\r\n mappedData.push(rawData[i] as Product)\r\n }\r\n\r\n return {\r\n data: mappedData,\r\n total: res2.total ?? 0,\r\n page,\r\n limit,\r\n hasmore: res2.hasmore ?? false\r\n }\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:710',`Merchant products found: ${(response.data as any[]).length}`)\r\n return {\r\n data: response.data as Product[],\r\n total: response.total ?? 0,\r\n page,\r\n limit,\r\n hasmore: response.hasmore ?? false\r\n }\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:719','获取商户商品异常:', error)\r\n return {\r\n data: [] as Product[],\r\n total: 0,\r\n page,\r\n limit,\r\n hasmore: false\r\n }\r\n }\r\n }\r\n\r\n // 获取热销商品(按销量排序)\r\n async getHotProducts(limit: number = 10): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*')\r\n .eq('is_hot', true)\r\n .eq('status', 1)\r\n .order('sale_count', { ascending: false })\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:743','获取热销商品失败:', response.error)\r\n return []\r\n }\r\n \r\n return response.data as Product[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:749','获取热销商品异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取按价格排序的商品(升序:从低到高)\r\n async getProductsByPrice(limit: number = 10, ascending: boolean = true): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*')\r\n .eq('status', 1)\r\n .order('base_price', { ascending })\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:766','获取价格排序商品失败:', response.error)\r\n return []\r\n }\r\n \r\n return response.data as Product[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:772','获取价格排序商品异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取新品(按创建时间排序,最新的在前)\r\n async getProductsByNewest(limit: number = 10): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*')\r\n .eq('is_new', true) \r\n .eq('status', 1)\r\n .order('published_at', { ascending: false }) // Use published_at for newest\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:790','获取新品失败:', response.error)\r\n return []\r\n }\r\n \r\n return response.data as Product[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:796','获取新品异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取推荐商品(is_featured=true)\r\n async getRecommendedProducts(limit: number = 10): Promise {\r\n try {\r\n // 查询 is_featured = true 的商品\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*')\r\n .eq('is_featured', true)\r\n .eq('status', 1)\r\n .order('sale_count', { ascending: false })\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:815','获取推荐商品失败:', response.error)\r\n return []\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:819','推荐商品查询结果条数:', (response.data as any[])?.length ?? 0)\r\n const data = response.data as Product[]\r\n return data ?? []\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:823','获取推荐商品异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取特价商品(这里假设没有specific flag, just use logic or tag if exists, defaulting to hot for now or just skip)\r\n // Modify to use compatible logic if badge column doesn't exist\r\n async getDiscountProducts(limit: number = 10): Promise {\r\n return [] as Product[] // 暂无特价字段\r\n }\r\n\r\n // 获取当前用户的购物车商品(关联商品和店铺信息)\r\n async getCartItems(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('warn','at utils/supabaseService.uts:839','用户未登录,无法获取购物车')\r\n return []\r\n }\r\n\r\n // 查询购物车表,并关联商品表(使用内联关联)\r\n // 注意:使用 !inner 进行内连接,或者 left join (默认)\r\n // 修改查询语法以符合 PostgREST 规范\r\n // 尝试简化查询,先只查购物车,再查商品,避免复杂的嵌套查询导致 400 错误\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:855','获取购物车失败:', response.error)\r\n return []\r\n }\r\n \r\n const cartData = response.data as any[]\r\n // __f__('log','at utils/supabaseService.uts:860','Raw Cart Data:', JSON.stringify(cartData))\r\n \r\n if (cartData == null || cartData.length === 0) {\r\n return []\r\n }\r\n\r\n // 收集所有 product_id 和 sku_id\r\n const productIds: string[] = []\r\n const skuIds: string[] = []\r\n for (let i = 0; i < cartData.length; i++) {\r\n let item = cartData[i]\r\n let pid: string = ''\r\n let sid: string = ''\r\n if (item instanceof UTSJSONObject) {\r\n pid = item.getString('product_id') ?? ''\r\n sid = item.getString('sku_id') ?? ''\r\n } else {\r\n const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n pid = itemObj.getString('product_id') ?? ''\r\n sid = itemObj.getString('sku_id') ?? ''\r\n }\r\n if (pid !== '' && !productIds.includes(pid)) {\r\n productIds.push(pid)\r\n }\r\n if (sid !== '' && !skuIds.includes(sid)) {\r\n skuIds.push(sid)\r\n }\r\n }\r\n\r\n // 批量查询商品详情 (使用视图关联店铺信息,修复字段名 specification -> attributes)\r\n const productMap = new Map()\r\n \r\n if (productIds.length > 0) {\r\n // Convert string array to any array for .in()\r\n const productIdsAny: any[] = []\r\n for(let i=0; i()\r\n if (skuIds.length > 0) {\r\n const skuIdsAny: any[] = []\r\n for(let i=0; i 0) {\r\n productPrice = skuPrice\r\n }\r\n const skuImg = sku.getString('image_url')\r\n if (skuImg != null && skuImg !== '') {\r\n productImage = skuImg\r\n }\r\n \r\n const specRaw = sku.get('specifications')\r\n if (specRaw != null) {\r\n // 优先使用SKU的规格\r\n if (typeof specRaw === 'string') {\r\n productSpec = specRaw\r\n } else if (specRaw instanceof UTSJSONObject) {\r\n const keys = UTSJSONObject.keys(specRaw)\r\n const parts: string[] = []\r\n for(let k = 0; k < keys.length; k++) {\r\n let val = specRaw.get(keys[k])\r\n if (val != null) {\r\n parts.push(`${keys[k]}: ${val}`)\r\n }\r\n }\r\n productSpec = parts.join('; ')\r\n } else {\r\n try {\r\n let jsonStr = JSON.stringify(specRaw)\r\n productSpec = jsonStr.replace(/[\"{}]/g, '').replace(/,/g, '; ')\r\n } catch (e) {}\r\n }\r\n }\r\n } else {\r\n const sObj = JSON.parse(JSON.stringify(sku)) as UTSJSONObject\r\n const skuPrice = sObj.getNumber('price') ?? 0\r\n if (skuPrice > 0) productPrice = skuPrice\r\n\r\n const skuImg = sObj.getString('image_url') ?? ''\r\n if (skuImg !== '') productImage = skuImg\r\n\r\n const specRaw = sObj.get('specifications')\r\n if (specRaw != null) {\r\n // 优先使用SKU的规格\r\n if (typeof specRaw === 'string') {\r\n productSpec = specRaw\r\n } else if (specRaw instanceof UTSJSONObject) {\r\n const keys = UTSJSONObject.keys(specRaw)\r\n const parts: string[] = []\r\n for(let k = 0; k < keys.length; k++) {\r\n let val = specRaw.get(keys[k])\r\n if (val != null) {\r\n parts.push(`${keys[k]}: ${val}`)\r\n }\r\n }\r\n productSpec = parts.join('; ')\r\n } else {\r\n try {\r\n let jsonStr = JSON.stringify(specRaw)\r\n productSpec = jsonStr.replace(/[\"{}]/g, '').replace(/,/g, '; ')\r\n } catch (e) {}\r\n }\r\n }\r\n }\r\n }\r\n\r\n \r\n \r\n let shopIdStr = merchantId != '' ? merchantId : 'unknown_shop'\r\n\r\n \r\n cartItems.push({\r\n id: itemId,\r\n user_id: userIdVal,\r\n product_id: productId,\r\n sku_id: skuId,\r\n merchant_id: merchantId,\r\n quantity: quantity,\r\n selected: selected,\r\n product_name: productName,\r\n product_image: productImage,\r\n product_price: productPrice,\r\n product_specification: productSpec,\r\n shop_id: shopIdStr,\r\n shop_name: shopNameStr,\r\n created_at: createdAt,\r\n updated_at: updatedAt\r\n } as CartItem)\r\n }\r\n }\r\n \r\n return cartItems\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1170','获取购物车异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取用户通知 (系统、活动、订单)\r\n async getUserNotifications(type: string | null = null): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return []\r\n\r\n let query = supa\r\n .from('ml_notifications')\r\n .select('*')\r\n .eq('user_id', userId)\r\n \r\n if (type != null) {\r\n query = query.eq('type', type)\r\n }\r\n \r\n const response = await query.order('created_at', { ascending: false }).execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1193','获取通知失败:', response.error)\r\n return []\r\n }\r\n return response.data as Notification[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:1198','获取通知异常:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 获取聊天会话列表\r\n async getChatRooms(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return []\r\n\r\n const response = await supa\r\n .from('ml_chat_rooms')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .order('updated_at', { ascending: false })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1217','获取聊天会话失败:', response.error)\r\n return []\r\n }\r\n return response.data as ChatRoom[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:1222','获取聊天会话异常:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 获取用户聊天消息\r\n async getUserChatMessages(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return []\r\n\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .select('*')\r\n .or(`sender_id.eq.${userId},receiver_id.eq.${userId}`)\r\n .order('created_at', { ascending: false })\r\n .limit(50)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1242','获取聊天记录失败:', response.error)\r\n return []\r\n }\r\n return response.data as ChatMessage[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:1247','获取聊天记录异常:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 获取与特定商家的聊天记录\r\n async getChatMessages(merchantId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return []\r\n\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .select('*')\r\n .or(`and(sender_id.eq.${userId},receiver_id.eq.${merchantId}),and(sender_id.eq.${merchantId},receiver_id.eq.${userId})`)\r\n .order('created_at', { ascending: false })\r\n .limit(50)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1267','获取聊天记录失败:', response.error)\r\n return []\r\n }\r\n return response.data as ChatMessage[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:1272','获取聊天记录异常:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 发送聊天消息\r\n async sendChatMessage(content: string, toId: string | null = null, type: string = 'text'): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n const payload = {\r\n sender_id: userId,\r\n content: content,\r\n msg_type: type,\r\n is_from_user: true,\r\n created_at: new Date().toISOString()\r\n } as UTSJSONObject\r\n if (toId != null) {\r\n payload.set('receiver_id', toId)\r\n }\r\n\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .insert(payload)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1300','发送消息失败:', response.error)\r\n return false\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:1305','发送消息异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 模拟客服回复\r\n async simulateServiceReply(content: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .insert({\r\n receiver_id: userId,\r\n content: content,\r\n msg_type: 'text',\r\n is_from_user: false,\r\n created_at: new Date().toISOString()\r\n })\r\n .execute()\r\n return response.error == null\r\n } catch (e) {\r\n return false\r\n }\r\n }\r\n\r\n // 添加商品到购物车\r\n async addToCart(productId: string, quantity: number = 1, skuId?: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1337','用户未登录,无法添加商品到购物车')\r\n return false\r\n }\r\n \r\n const realSkuId = (skuId != null && skuId.length > 0) ? skuId : null\r\n\r\n // 检查商品是否已在购物车中\r\n // 注意:必须处理 sku_id 为空的情况,使用 is.null 过滤器\r\n let query = supa\r\n .from('ml_shopping_cart')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .eq('product_id', productId)\r\n \r\n if (realSkuId != null) {\r\n query = query.eq('sku_id', realSkuId)\r\n } else {\r\n query = query.is('sku_id', null)\r\n }\r\n\r\n const existingResponse = await query.single().execute()\r\n\r\n let existingItem: any | null = null\r\n \r\n if (existingResponse.data != null) {\r\n const rawData = existingResponse.data as any\r\n if (Array.isArray(rawData)) {\r\n if (rawData.length > 0) {\r\n existingItem = rawData[0]\r\n }\r\n } else {\r\n existingItem = rawData\r\n }\r\n }\r\n\r\n let response: AkReqResponse\r\n if (existingItem != null) {\r\n // 商品已存在,更新数量\r\n __f__('log','at utils/supabaseService.uts:1375','Found existing cart item:', JSON.stringify(existingItem))\r\n\r\n // 确保 existingItem.id 存在\r\n let itemId: string | null = null\r\n let itemQty: any | null = null\r\n\r\n if (existingItem instanceof UTSJSONObject) {\r\n itemId = existingItem.getString('id')\r\n itemQty = existingItem.getNumber('quantity')\r\n } else {\r\n const obj = JSON.parse(JSON.stringify(existingItem)) as UTSJSONObject\r\n itemId = obj.getString('id')\r\n itemQty = obj.getNumber('quantity')\r\n }\r\n\r\n if (itemId != null) {\r\n let currentQty = 0\r\n if (typeof itemQty === 'number') {\r\n currentQty = itemQty as number\r\n } else {\r\n const qStr = `${itemQty ?? 0}`\r\n currentQty = parseInt(qStr)\r\n }\r\n const newQty = currentQty + quantity\r\n\r\n response = await supa\r\n .from('ml_shopping_cart')\r\n .update({\r\n quantity: newQty,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', itemId)\r\n .execute()\r\n } else {\r\n __f__('error','at utils/supabaseService.uts:1409','购物车已有商品但缺少ID,无法更新. Data:', JSON.stringify(existingItem))\r\n return false\r\n }\r\n } else {\r\n // 商品不存在,添加新记录\r\n response = await supa\r\n .from('ml_shopping_cart')\r\n .insert({\r\n user_id: userId,\r\n product_id: productId,\r\n sku_id: realSkuId,\r\n quantity: quantity,\r\n selected: true,\r\n created_at: new Date().toISOString(),\r\n updated_at: new Date().toISOString()\r\n })\r\n .execute()\r\n }\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1429','添加商品到购物车失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1435','添加商品到购物车异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 更新购物车商品数量\r\n async updateCartItemQuantity(cartItemId: string, quantity: number): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1445','用户未登录,无法更新购物车')\r\n return false\r\n }\r\n\r\n if (quantity < 1) {\r\n // 数量小于1时删除商品\r\n return await this.deleteCartItem(cartItemId)\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .update({\r\n quantity: quantity,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', cartItemId)\r\n .eq('user_id', userId)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1465','更新购物车商品数量失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1471','更新购物车商品数量异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 更新购物车商品选中状态\r\n async updateCartItemSelection(cartItemId: string, selected: boolean): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1481','用户未登录,无法更新购物车')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .update({\r\n selected: selected,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', cartItemId)\r\n .eq('user_id', userId)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1496','更新购物车商品选中状态失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1502','更新购物车商品选中状态异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 批量更新购物车商品选中状态\r\n async batchUpdateCartItemSelection(cartItemIds: string[], selected: boolean): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1512','用户未登录,无法更新购物车')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .update({\r\n selected: selected,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('user_id', userId)\r\n .in('id', cartItemIds as any[])\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1527','批量更新购物车商品选中状态失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1533','批量更新购物车商品选中状态异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 删除购物车商品\r\n async deleteCartItem(cartItemId: string): Promise {\r\n return true\r\n /*\r\n try {\r\n __f__('log','at utils/supabaseService.uts:1543','正在执行删除购物车商品,ID:', cartItemId)\r\n const userId = this.getCurrentUserId()\r\n if (!userId) {\r\n __f__('error','at utils/supabaseService.uts:1546','用户未登录,无法删除购物车商品')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .eq('id', cartItemId)\r\n .eq('user_id', userId)\r\n .delete()\r\n .execute()\r\n\r\n if (response.error) {\r\n __f__('error','at utils/supabaseService.uts:1558','删除购物车商品失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1564','删除购物车商品异常:', error)\r\n return false\r\n }\r\n */\r\n }\r\n\r\n // 批量删除购物车商品\r\n async batchDeleteCartItems(cartItemIds: string[]): Promise {\r\n return true\r\n /*\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (!userId) {\r\n __f__('error','at utils/supabaseService.uts:1577','用户未登录,无法删除购物车商品')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .eq('user_id', userId)\r\n .in('id', cartItemIds)\r\n .delete()\r\n .execute()\r\n\r\n if (response.error) {\r\n __f__('error','at utils/supabaseService.uts:1589','批量删除购物车商品失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1595','批量删除购物车商品异常:', error)\r\n return false\r\n }\r\n */\r\n }\r\n\r\n // 清空购物车\r\n async clearCart(): Promise {\r\n return true\r\n /*\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (!userId) {\r\n __f__('error','at utils/supabaseService.uts:1608','用户未登录,无法清空购物车')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .eq('user_id', userId)\r\n .delete()\r\n .execute()\r\n\r\n if (response.error) {\r\n __f__('error','at utils/supabaseService.uts:1619','清空购物车失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1625','清空购物车异常:', error)\r\n return false\r\n }\r\n */\r\n }\r\n\r\n // 获取当前用户的所有地址\r\n async getAddresses(): Promise {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('warn','at utils/supabaseService.uts:1635','[getAddresses] 用户未登录,无法获取地址')\r\n return []\r\n }\r\n\r\n try {\r\n __f__('log','at utils/supabaseService.uts:1640','[getAddresses] 查询地址, userId:', userId)\r\n \r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .order('is_default', { ascending: false })\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n \r\n __f__('log','at utils/supabaseService.uts:1650','[getAddresses] response.error:', response.error)\r\n __f__('log','at utils/supabaseService.uts:1651','[getAddresses] response.data:', JSON.stringify(response.data))\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1654','[getAddresses] 获取地址失败:', response.error)\r\n return []\r\n }\r\n \r\n const data = response.data\r\n if (data == null) {\r\n return []\r\n }\r\n \r\n const result: UserAddress[] = []\r\n const rawData = data as any[]\r\n for (let i = 0; i < rawData.length; i++) {\r\n const item = rawData[i]\r\n let itemObj: UTSJSONObject\r\n if (item instanceof UTSJSONObject) {\r\n itemObj = item as UTSJSONObject\r\n } else {\r\n itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n }\r\n \r\n const addrObj = new UTSJSONObject()\r\n addrObj.set('id', itemObj.getString('id') ?? '')\r\n addrObj.set('user_id', itemObj.getString('user_id') ?? '')\r\n addrObj.set('recipient_name', itemObj.getString('receiver_name') ?? itemObj.getString('recipient_name') ?? '')\r\n addrObj.set('phone', itemObj.getString('receiver_phone') ?? itemObj.getString('phone') ?? '')\r\n addrObj.set('province', itemObj.getString('province') ?? '')\r\n addrObj.set('city', itemObj.getString('city') ?? '')\r\n addrObj.set('district', itemObj.getString('district') ?? '')\r\n addrObj.set('detail_address', itemObj.getString('address_detail') ?? itemObj.getString('detail_address') ?? '')\r\n addrObj.set('is_default', itemObj.getBoolean('is_default') ?? false)\r\n result.push(addrObj as UserAddress)\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:1687','[getAddresses] 返回地址数量:', result.length)\r\n return result\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1690','[getAddresses] 获取地址异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 根据ID获取地址详情\r\n async getAddressById(addressId: string): Promise {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('warn','at utils/supabaseService.uts:1699','用户未登录,无法获取地址')\r\n return null\r\n }\r\n\r\n try {\r\n const query = supa\r\n .from('ml_user_addresses')\r\n .select('*, recipient_name:receiver_name, phone:receiver_phone, detail_address:address_detail')\r\n .eq('id', addressId)\r\n .eq('user_id', userId)\r\n .single()\r\n \r\n const response = await query.execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1714','获取地址详情失败:', response.error)\r\n return null\r\n }\r\n \r\n return response.data as UserAddress\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1720','获取地址详情异常:', error)\r\n return null\r\n }\r\n }\r\n\r\n // 添加新地址\r\n async addAddress(address: AddAddressParams): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1730','用户未登录,无法添加地址')\r\n return false\r\n }\r\n\r\n // 如果设置为默认地址,需要先取消其他默认地址\r\n if (address.is_default == true) {\r\n await this.clearDefaultAddress(userId)\r\n }\r\n\r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .insert({\r\n user_id: userId,\r\n receiver_name: address.recipient_name,\r\n receiver_phone: address.phone,\r\n province: address.province,\r\n city: address.city,\r\n district: address.district,\r\n address_detail: address.detail_address,\r\n postal_code: address.postal_code ?? null,\r\n is_default: address.is_default ?? false,\r\n created_at: new Date().toISOString(),\r\n updated_at: new Date().toISOString()\r\n })\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1757','添加地址失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1763','添加地址异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 更新地址\r\n async updateAddress(addressId: string, address: UpdateAddressParams): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1773','用户未登录,无法更新地址')\r\n return false\r\n }\r\n\r\n // 如果设置为默认地址,需要先取消其他默认地址\r\n if (address.is_default == true) {\r\n await this.clearDefaultAddress(userId)\r\n }\r\n \r\n // 构造更新数据,映射字段名到数据库列名\r\n const updateData = {}\r\n if (address.recipient_name != null) updateData['receiver_name'] = address.recipient_name\r\n if (address.phone != null) updateData['receiver_phone'] = address.phone\r\n if (address.province != null) updateData['province'] = address.province\r\n if (address.city != null) updateData['city'] = address.city\r\n if (address.district != null) updateData['district'] = address.district\r\n if (address.detail_address != null) updateData['address_detail'] = address.detail_address\r\n if (address.postal_code != null) updateData['postal_code'] = address.postal_code\r\n if (address.is_default != null) updateData['is_default'] = address.is_default\r\n if (address.label != null) updateData['label'] = address.label\r\n updateData['updated_at'] = new Date().toISOString()\r\n\r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .update(updateData)\r\n .eq('id', addressId)\r\n .eq('user_id', userId)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1803','更新地址失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1809','更新地址异常:', error)\r\n return false\r\n }\r\n }\r\n \r\n // 确认收货\r\n async confirmReceipt(orderId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n return { success: false, error: '用户未登录' }\r\n }\r\n\r\n const response = await supa\r\n .from('ml_orders')\r\n .update({\r\n order_status: 4, // 4: 已完成\r\n delivered_at: new Date().toISOString(),\r\n completed_at: new Date().toISOString(), // 也更新完成时间\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', orderId)\r\n .eq('user_id', userId)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n return { success: false, error: response.error.message }\r\n }\r\n \r\n return { success: true }\r\n } catch (e: any) {\r\n return { success: false, error: e.message }\r\n }\r\n }\r\n\r\n // 删除地址\r\n async deleteAddress(addressId: string): Promise {\r\n try {\r\n __f__('log','at utils/supabaseService.uts:1847','正在执行删除地址,ID:', addressId)\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1850','用户未登录,无法删除地址')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .eq('id', addressId)\r\n .eq('user_id', userId)\r\n .delete()\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1862','删除地址失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1868','删除地址异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 清除默认地址(内部使用)\r\n private async clearDefaultAddress(userId: string): Promise {\r\n try {\r\n await supa\r\n .from('ml_user_addresses')\r\n .update({\r\n is_default: false,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('user_id', userId)\r\n .eq('is_default', true)\r\n .execute()\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1886','清除默认地址异常:', error)\r\n }\r\n }\r\n\r\n // 获取用户资料\r\n async getUserProfile(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return null\r\n \r\n // 联合查询 auth user 和 profile\r\n // 由于 Supabase auth table 不可直接访问,这里查询 ml_user_profiles\r\n const response = await supa\r\n .from('ml_user_profiles')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .single()\r\n .execute()\r\n \r\n if (response.error != null) {\r\n // 如果不存在 profile,可能只有 auth user,这里暂时返回空或创建默认\r\n return null\r\n }\r\n return response.data\r\n } catch (e) {\r\n return null\r\n }\r\n }\r\n \r\n // 创建订单\r\n async createOrder(orderData: CreateOrderParams): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1920','CreateOrder: User not logged in')\r\n return null\r\n }\r\n \r\n const orderNo = 'ML' + Date.now() + Math.floor(Math.random() * 1000)\r\n \r\n let merchantId = orderData.merchant_id\r\n if (merchantId == null || merchantId == '' || merchantId == 'unknown') {\r\n merchantId = userId\r\n }\r\n \r\n let shippingAddrStr = '{}'\r\n if (orderData.shipping_address != null) {\r\n if (typeof orderData.shipping_address === 'string') {\r\n shippingAddrStr = orderData.shipping_address\r\n } else {\r\n shippingAddrStr = JSON.stringify(orderData.shipping_address)\r\n }\r\n }\r\n \r\n const orderPayload = new UTSJSONObject()\r\n orderPayload.set('user_id', userId)\r\n orderPayload.set('merchant_id', merchantId)\r\n orderPayload.set('order_no', orderNo)\r\n orderPayload.set('product_amount', orderData.product_amount)\r\n orderPayload.set('shipping_fee', orderData.shipping_fee)\r\n orderPayload.set('total_amount', orderData.total_amount)\r\n orderPayload.set('paid_amount', 0)\r\n orderPayload.set('shipping_address', shippingAddrStr)\r\n orderPayload.set('order_status', 1)\r\n orderPayload.set('payment_status', 1)\r\n orderPayload.set('shipping_status', 1)\r\n orderPayload.set('created_at', new Date().toISOString())\r\n orderPayload.set('updated_at', new Date().toISOString())\r\n \r\n __f__('log','at utils/supabaseService.uts:1955','[CreateOrder] 插入订单数据:', JSON.stringify(orderPayload))\r\n __f__('log','at utils/supabaseService.uts:1956','[CreateOrder] 期望的订单号:', orderNo)\r\n \r\n const orderResponse = await supa\r\n .from('ml_orders')\r\n .insert(orderPayload)\r\n .execute()\r\n \r\n __f__('log','at utils/supabaseService.uts:1963','[CreateOrder] insert 完成')\r\n __f__('log','at utils/supabaseService.uts:1964','[CreateOrder] orderResponse.error:', orderResponse.error)\r\n \r\n if (orderResponse.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1967','[CreateOrder] 创建订单失败:', orderResponse.error)\r\n return null\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:1971','[CreateOrder] 开始查询新创建的订单, order_no:', orderNo)\r\n \r\n const queryResponse = await supa\r\n .from('ml_orders')\r\n .select('id, order_no')\r\n .eq('order_no', orderNo)\r\n .execute()\r\n \r\n __f__('log','at utils/supabaseService.uts:1979','[CreateOrder] queryResponse.error:', queryResponse.error)\r\n __f__('log','at utils/supabaseService.uts:1980','[CreateOrder] queryResponse.data:', JSON.stringify(queryResponse.data))\r\n \r\n if (queryResponse.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1983','[CreateOrder] 查询订单失败:', queryResponse.error)\r\n return null\r\n }\r\n \r\n const queryData = queryResponse.data as any\r\n let orderId = ''\r\n \r\n if (Array.isArray(queryData) && queryData.length > 0) {\r\n const firstItem = queryData[0] as Record\r\n orderId = firstItem['id'] as string\r\n __f__('log','at utils/supabaseService.uts:1993','[CreateOrder] 找到新创建的订单, id:', orderId)\r\n } else {\r\n __f__('error','at utils/supabaseService.uts:1995','[CreateOrder] 未找到新创建的订单,插入可能失败')\r\n return null\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:1999','[CreateOrder] 订单创建成功, orderId:', orderId)\r\n \r\n const orderItems: UTSJSONObject[] = []\r\n const rawItems = orderData.items as any[]\r\n \r\n for(let i = 0; i < rawItems.length; i++) {\r\n let item: UTSJSONObject\r\n const rawItem = rawItems[i]\r\n item = rawItem as UTSJSONObject\r\n\r\n const itemJson = new UTSJSONObject()\r\n \r\n let pId = item.get('product_id')\r\n if (pId == null) {\r\n pId = item.get('id')\r\n }\r\n \r\n itemJson.set('order_id', orderId)\r\n itemJson.set('product_id', pId)\r\n \r\n const skuIdVal = item.get('sku_id')\r\n if (skuIdVal != null && skuIdVal !== '') {\r\n itemJson.set('sku_id', skuIdVal)\r\n }\r\n \r\n itemJson.set('product_name', item.get('product_name') ?? '')\r\n \r\n const sName = item.get('sku_name')\r\n itemJson.set('sku_name', sName ?? '')\r\n \r\n const specVal = item.get('specifications')\r\n let skuSnapshot = '{}'\r\n if (specVal != null) {\r\n if (typeof specVal === 'string') {\r\n skuSnapshot = specVal as string\r\n } else {\r\n skuSnapshot = JSON.stringify(specVal)\r\n }\r\n }\r\n itemJson.set('sku_snapshot', skuSnapshot)\r\n itemJson.set('specifications', skuSnapshot)\r\n \r\n const img1 = item.get('product_image')\r\n const img2 = item.get('image_url')\r\n let imgUrl = (img1 ?? img2 ?? '') as string\r\n while (imgUrl.indexOf('`') >= 0) {\r\n imgUrl = imgUrl.replace('`', '')\r\n }\r\n itemJson.set('image_url', imgUrl)\r\n\r\n const iPrice = item.getNumber('price') ?? 0\r\n const iQty = item.getNumber('quantity') ?? 1\r\n itemJson.set('price', iPrice)\r\n itemJson.set('quantity', iQty)\r\n itemJson.set('total_amount', iPrice * iQty)\r\n itemJson.set('created_at', new Date().toISOString())\r\n \r\n orderItems.push(itemJson)\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2059','[CreateOrder] 插入订单项数量:', orderItems.length)\r\n __f__('log','at utils/supabaseService.uts:2060','[CreateOrder] 订单项数据:', JSON.stringify(orderItems))\r\n \r\n const itemsResponse = await supa\r\n .from('ml_order_items')\r\n .insert(orderItems)\r\n .execute()\r\n \r\n if (itemsResponse.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2068','[CreateOrder] 创建订单项失败:', itemsResponse.error)\r\n __f__('error','at utils/supabaseService.uts:2069','[CreateOrder] 错误详情:', JSON.stringify(itemsResponse.error))\r\n __f__('log','at utils/supabaseService.uts:2070','[CreateOrder] 订单主表已创建,但订单项插入失败,返回订单ID')\r\n return orderId\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2074','[CreateOrder] 订单项创建成功')\r\n \r\n const cartItemIds: string[] = []\r\n for(let i = 0; i < rawItems.length; i++) {\r\n const item = rawItems[i] as UTSJSONObject\r\n const iid = item.getString('id')\r\n if (iid != null && iid.length > 10) {\r\n cartItemIds.push(iid)\r\n }\r\n }\r\n \r\n if (cartItemIds.length > 0) {\r\n await this.batchDeleteCartItems(cartItemIds)\r\n }\r\n \r\n return orderId\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:2091','[CreateOrder] 创建订单异常:', error)\r\n return null\r\n }\r\n }\r\n\r\n // 批量通过店铺创建订单\r\n async createOrdersByShop(params: ShopOrderParams): Promise {\r\n try {\r\n const orderIds: string[] = []\r\n const groups = params.shopGroups as any[]\r\n \r\n let grandTotal = 0.0\r\n for(let k = 0; k < groups.length; k++) {\r\n const g = groups[k] as UTSJSONObject\r\n // 安全获取 items 数组\r\n const gItemsRaw = g.get('items')\r\n if (gItemsRaw == null) continue\r\n const gItems = gItemsRaw as any[]\r\n \r\n for(let gi = 0; gi < gItems.length; gi++) {\r\n const it = gItems[gi] as UTSJSONObject\r\n const itPrice = it.getNumber('price') ?? 0\r\n const itQty = it.getNumber('quantity') ?? 1\r\n grandTotal += itPrice * itQty\r\n }\r\n }\r\n \r\n // 为每个店铺创建一个订单\r\n for (let i = 0; i < groups.length; i++) {\r\n const group = groups[i] as UTSJSONObject\r\n const shopItemsRaw = group.get('items')\r\n if (shopItemsRaw == null) continue\r\n const shopItems = shopItemsRaw as any[]\r\n \r\n let productAmount = 0.0\r\n for(let j = 0; j < shopItems.length; j++) {\r\n const sItem = shopItems[j] as UTSJSONObject\r\n const siPrice = sItem.getNumber('price') ?? 0\r\n const siQty = sItem.getNumber('quantity') ?? 1\r\n productAmount += siPrice * siQty\r\n }\r\n \r\n // 简单平摊运费和优惠 (实际逻辑可能更复杂)\r\n const ratio = grandTotal > 0 ? (productAmount / grandTotal) : 0\r\n const shopShippingFee = params.deliveryFee * ratio\r\n const shopDiscount = params.discountAmount * ratio\r\n const shopTotal = productAmount + shopShippingFee - shopDiscount\r\n \r\n const mId = group.getString('merchant_id')\r\n const sId = group.getString('shopId')\r\n const shopName = group.getString('shopName')\r\n\r\n const orderId = await this.createOrder({\r\n merchant_id: (mId != null && mId != '') ? mId : (sId ?? ''), // 兼容旧字段\r\n product_amount: productAmount,\r\n shipping_fee: shopShippingFee,\r\n total_amount: shopTotal,\r\n shipping_address: params.shipping_address,\r\n items: shopItems\r\n })\r\n \r\n if (orderId != null) {\r\n orderIds.push(orderId)\r\n } else {\r\n return { success: false, orderIds, error: `店铺 ${shopName} 订单创建失败` }\r\n }\r\n }\r\n \r\n return { success: true, orderIds }\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2161','批量创建订单异常:', e)\r\n return { success: false, orderIds: [], error: '系统异常' }\r\n }\r\n }\r\n\r\n // 获取订单列表\r\n async getOrders(status: number = 0): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n let query = supa\r\n .from('ml_orders')\r\n .select(`\r\n *,\r\n ml_order_items (*)\r\n `)\r\n .eq('user_id', userId)\r\n .order('created_at', { ascending: false })\r\n \r\n if (status > 0) {\r\n query = query.eq('order_status', status)\r\n }\r\n \r\n const response = await query.execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2191','获取订单列表失败:', response.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n const data = response.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n return data as any[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:2203','获取订单列表异常:', error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n \r\n // 获取订单详情\r\n async getOrderDetail(orderId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return null\r\n \r\n const response = await supa\r\n .from('ml_orders')\r\n .select(`\r\n *,\r\n ml_order_items (*)\r\n `)\r\n .eq('id', orderId)\r\n .eq('user_id', userId)\r\n .single()\r\n .execute()\r\n \r\n if (response.error != null) {\r\n return null\r\n }\r\n return response.data\r\n } catch (e) {\r\n return null\r\n }\r\n }\r\n\r\n // 支付订单\r\n async payOrder(orderId: string, paymentMethod: string, amount: number): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:2240','[payOrder] 用户未登录')\r\n return false\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2244','[payOrder] 开始更新订单状态, orderId:', orderId, 'userId:', userId)\r\n \r\n const updatePayload = new UTSJSONObject()\r\n updatePayload.set('order_status', 2)\r\n updatePayload.set('payment_status', 1)\r\n updatePayload.set('payment_method', paymentMethod)\r\n updatePayload.set('payment_time', new Date().toISOString())\r\n updatePayload.set('paid_amount', amount)\r\n updatePayload.set('updated_at', new Date().toISOString())\r\n \r\n __f__('log','at utils/supabaseService.uts:2254','[payOrder] 更新数据:', JSON.stringify(updatePayload))\r\n \r\n const response = await supa\r\n .from('ml_orders')\r\n .update(updatePayload)\r\n .eq('id', orderId)\r\n .eq('user_id', userId)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2264','[payOrder] 更新订单失败:', response.error)\r\n return false\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2268','[payOrder] 订单状态更新成功')\r\n\r\n if (paymentMethod === 'balance') {\r\n __f__('log','at utils/supabaseService.uts:2271','[payOrder] 余额支付,暂不扣减余额')\r\n }\r\n\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2276','[payOrder] 支付异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 根据ID获取订单信息\r\n async getOrderById(orderId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:2286','[getOrderById] 用户未登录')\r\n return null\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2290','[getOrderById] 查询订单, orderId:', orderId)\r\n \r\n const response = await supa\r\n .from('ml_orders')\r\n .select('*')\r\n .eq('id', orderId)\r\n .eq('user_id', userId)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2300','[getOrderById] 查询订单失败:', response.error)\r\n return null\r\n }\r\n \r\n const data = response.data as any[]\r\n if (data == null || data.length === 0) {\r\n __f__('log','at utils/supabaseService.uts:2306','[getOrderById] 未找到订单')\r\n return null\r\n }\r\n \r\n const orderRaw = data[0]\r\n let orderObj: UTSJSONObject\r\n if (orderRaw instanceof UTSJSONObject) {\r\n orderObj = orderRaw as UTSJSONObject\r\n } else {\r\n orderObj = JSON.parse(JSON.stringify(orderRaw)) as UTSJSONObject\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2318','[getOrderById] 订单数据:', JSON.stringify(orderObj))\r\n return orderObj\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2321','[getOrderById] 查询异常:', e)\r\n return null\r\n }\r\n }\r\n\r\n // 提交售后申请\r\n async createRefund(data: any): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return { success: false, message: '请先登录' }\r\n \r\n const d = data as UTSJSONObject\r\n const orderId = d.getString('order_id')\r\n const refundType = d.getNumber('refund_type')\r\n const refundReason = d.getString('refund_reason')\r\n const refundAmount = d.getNumber('refund_amount')\r\n const description = d.getString('description')\r\n const images = d.getArray('images')\r\n\r\n const payload = {\r\n user_id: userId,\r\n order_id: orderId,\r\n refund_no: 'REF' + Date.now() + Math.floor(Math.random() * 1000),\r\n refund_type: refundType,\r\n refund_reason: refundReason,\r\n refund_amount: refundAmount,\r\n description: description ?? '',\r\n images: images ?? ([] as any[]),\r\n status: 1 // Pending\r\n }\r\n \r\n const response = await supa\r\n .from('ml_refunds')\r\n .insert(payload)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2358','提交售后失败:', response.error)\r\n return { success: false, message: '提交失败: ' + (response.error.message ?? '未知错误') }\r\n }\r\n \r\n return { success: true, message: '申请提交成功' }\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2364','提交售后异常:', e)\r\n return { success: false, message: '系统异常' }\r\n }\r\n }\r\n\r\n // 再次购买\r\n async rePurchase(order: any): Promise {\r\n try {\r\n // 将 order 转换为 UTSJSONObject 以安全访问属性\r\n const orderObj = order as UTSJSONObject\r\n // 尝试获取 ml_order_items 或 items\r\n let itemsKey = 'ml_order_items'\r\n let itemsRaw = orderObj.get(itemsKey)\r\n \r\n if (itemsRaw == null) {\r\n itemsKey = 'items'\r\n itemsRaw = orderObj.get(itemsKey)\r\n }\r\n \r\n if (itemsRaw == null) return false\r\n \r\n // 断言为数组\r\n const items = itemsRaw as any[]\r\n if (items.length === 0) return false\r\n\r\n // 简单的循环添加,实际项目中可以优化为批量插入\r\n for (let i = 0; i < items.length; i++) {\r\n // 同样,item 也是 UTSJSONObject 或支持访问的对象\r\n const item = items[i] as UTSJSONObject\r\n const productId = item.getString('product_id') \r\n const skuId = item.getString('sku_id')\r\n // 数量可能是数字或字符串\r\n const quantity = item.getNumber('quantity') ?? 1\r\n \r\n if (productId != null) {\r\n await this.addToCart(productId, quantity, skuId ?? null)\r\n }\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2404','rePurchase error', e)\r\n return false\r\n }\r\n }\r\n\r\n // 申请售后 (Legacy/Simple update)\r\n async applyRefund(orderId: string, reason: string): Promise {\r\n try {\r\n // 更新订单状态为 退款中 (6)\r\n const response = await supa\r\n .from('ml_orders')\r\n .update({\r\n order_status: 6,\r\n cancel_reason: reason,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', orderId)\r\n .execute()\r\n \r\n return response.error === null\r\n } catch (e) {\r\n return false\r\n }\r\n }\r\n\r\n // 获取售后记录列表\r\n async getRefunds(statusList: number[] = [], page: number = 1, pageSize: number = 10): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n let query = supa\r\n .from('ml_refunds')\r\n .select(`\r\n *,\r\n order:ml_orders!inner (\r\n order_no,\r\n created_at,\r\n ml_order_items (\r\n product_id,\r\n product_name,\r\n image_url\r\n )\r\n )\r\n `)\r\n .eq('user_id', userId)\r\n .order('created_at', { ascending: false })\r\n\r\n if (statusList.length > 0) {\r\n // 显式转换为 any[] 以匹配 .in 方法的参数要求\r\n const anyList = statusList as any[]\r\n query = query.in('status', anyList)\r\n }\r\n\r\n query = query.range((page - 1) * pageSize, page * pageSize - 1)\r\n\r\n const response = await query.execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2466','获取售后列表失败:', response.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n const data = response.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n return data\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2479','获取售后列表异常:', e)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 获取用户钱包余额\r\n async getUserBalance(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n __f__('log','at utils/supabaseService.uts:2489','[Supabase] getUserBalance userId:', userId)\r\n if (userId == null) return 0\r\n \r\n // 优先查 ml_user_wallets\r\n const walletRes = await supa\r\n .from('ml_user_wallets')\r\n .select('balance')\r\n .eq('user_id', userId!)\r\n .single()\r\n .execute()\r\n \r\n if (walletRes.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2501','[Supabase] getUserBalance error:', walletRes.error)\r\n } else {\r\n __f__('log','at utils/supabaseService.uts:2503','[Supabase] getUserBalance data:', walletRes.data)\r\n }\r\n\r\n if (walletRes.error == null && walletRes.data != null) {\r\n let data = walletRes.data\r\n // 如果是数组,取第一项\r\n if (Array.isArray(data)) {\r\n const arr = data as any[]\r\n if (arr.length > 0) {\r\n data = arr[0]\r\n }\r\n }\r\n\r\n let val:number = 0\r\n if (data instanceof UTSJSONObject) {\r\n val = data.getNumber('balance') ?? 0\r\n // 尝试字符串转换,防止精度丢失导致转为string\r\n if (val === 0 && data.getString('balance') != null) {\r\n val = parseFloat(data.getString('balance')!)\r\n }\r\n return val\r\n } else {\r\n // 对于 Map 或 loose object\r\n const jsonObj = JSON.parse(JSON.stringify(data)) as UTSJSONObject\r\n val = jsonObj.getNumber('balance') ?? 0\r\n if (val === 0 && jsonObj.getString('balance') != null) {\r\n val = parseFloat(jsonObj.getString('balance')!)\r\n }\r\n return val\r\n }\r\n }\r\n\r\n __f__('log','at utils/supabaseService.uts:2535','[Supabase] Wallet table empty, checking profile...')\r\n\r\n // Fallback to profile\r\n const profile = await this.getUserProfile()\r\n if (profile != null) {\r\n if (profile instanceof UTSJSONObject) {\r\n return profile.getNumber('balance') ?? 0\r\n } else {\r\n const pObj = JSON.parse(JSON.stringify(profile)) as UTSJSONObject\r\n return pObj.getNumber('balance') ?? 0\r\n }\r\n }\r\n return 0\r\n } catch(e) {\r\n __f__('error','at utils/supabaseService.uts:2549','[Supabase] getUserBalance exception:', e)\r\n return 0\r\n }\r\n }\r\n \r\n // 获取用户积分\r\n async getUserPoints(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n __f__('log','at utils/supabaseService.uts:2558','[Supabase] getUserPoints userId:', userId)\r\n if (userId == null) return 0\r\n \r\n // 查 ml_user_points\r\n const res = await supa\r\n .from('ml_user_points')\r\n .select('points')\r\n .eq('user_id', userId!)\r\n .single()\r\n .execute()\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2570','[Supabase] getUserPoints error:', res.error)\r\n } else {\r\n __f__('log','at utils/supabaseService.uts:2572','[Supabase] getUserPoints data:', res.data)\r\n }\r\n\r\n if (res.error == null && res.data != null) {\r\n let data = res.data\r\n // 如果是数组,取第一项\r\n if (Array.isArray(data)) {\r\n const arr = data as any[]\r\n if (arr.length > 0) {\r\n data = arr[0]\r\n }\r\n }\r\n\r\n if (data instanceof UTSJSONObject) {\r\n return data.getNumber('points') ?? 0\r\n } else {\r\n // 尝试转为 UTSJSONObject\r\n const jsonObj = JSON.parse(JSON.stringify(data)) as UTSJSONObject\r\n const val = jsonObj.getNumber('points')\r\n if (val != null) return val\r\n\r\n return 0\r\n }\r\n }\r\n \r\n // Fallback check profile if needed\r\n const profile = await this.getUserProfile()\r\n if (profile != null) {\r\n if (profile instanceof UTSJSONObject) {\r\n return profile.getNumber('points') ?? 0\r\n } else {\r\n const pObj = JSON.parse(JSON.stringify(profile)) as UTSJSONObject\r\n return pObj.getNumber('points') ?? 0\r\n }\r\n }\r\n \r\n return 0\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2610','[Supabase] getUserPoints exception:', e)\r\n return 0\r\n }\r\n }\r\n\r\n // 获取钱包交易记录\r\n async getTransactions(page: number = 1, limit: number = 20): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n const from = (page - 1) * limit\r\n const to = from + limit - 1\r\n\r\n const response = await supa\r\n .from('ml_wallet_transactions')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .order('created_at', { ascending: false })\r\n .range(from, to)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2636','获取交易记录失败:', response.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n const data = response.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n return data as any[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2649','获取交易记录异常:', e)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n \r\n // 获取积分记录\r\n async getPointRecords(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n const res = await supa\r\n .from('ml_point_records')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n \r\n if (res.error != null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n const data = res.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n return data as any[]\r\n } catch (e) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 获取用户红包\r\n async getUserRedPackets(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n const res = await supa\r\n .from('ml_user_red_packets')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n\r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2704','获取红包失败:', res.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n const data = res.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n return data as any[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2715','获取红包异常:', e)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 获取用户银行卡\r\n async getUserBankCards(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n const res = await supa\r\n .from('ml_user_bank_cards')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n\r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2738','获取银行卡失败:', res.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n const data = res.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n return data as any[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2749','获取银行卡异常:', e)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 余额充值 (调用 RPC)\r\n async rechargeBalance(amount: number): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n const res = await supa.rpc('recharge_wallet', { \r\n p_user_id: userId,\r\n p_amount: amount \r\n })\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2767','充值失败RPC:', res.error)\r\n return false\r\n }\r\n \r\n // 简单判断: 如果没有error且data里success为true\r\n const data = res.data\r\n if (data instanceof UTSJSONObject) {\r\n return data.getBoolean('success') ?? false\r\n }\r\n // 如果返回不是对象,作为失败处理\r\n return false\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2779','充值异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 余额提现 (调用 RPC)\r\n async withdrawBalance(amount: number): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n const res = await supa.rpc('withdraw_wallet', { \r\n p_user_id: userId,\r\n p_amount: amount \r\n })\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2796','提现失败RPC:', res.error)\r\n return false\r\n }\r\n \r\n const data = res.data\r\n if (data instanceof UTSJSONObject) {\r\n return data.getBoolean('success') ?? false\r\n }\r\n return false\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2806','提现异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 添加银行卡\r\n async addBankCard(card: UTSJSONObject): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n // 补全 user_id\r\n card.set('user_id', userId)\r\n \r\n const res = await supa\r\n .from('ml_user_bank_cards')\r\n .insert(card)\r\n .execute()\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2826','添加银行卡失败:', res.error)\r\n return false\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2831','添加银行卡异常:', e)\r\n return false\r\n }\r\n }\r\n \r\n // 删除银行卡\r\n async deleteBankCard(cardId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n const res = await supa\r\n .from('ml_user_bank_cards')\r\n .eq('id', cardId)\r\n .eq('user_id', userId!)\r\n .delete()\r\n .execute()\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2850','删除银行卡失败:', res.error)\r\n return false\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2855','删除银行卡异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 收藏相关\r\n async checkFavorite(productId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n __f__('log','at utils/supabaseService.uts:2864',`[CheckFav] Checking for User: ${userId}, Product: ${productId}`)\r\n \r\n if (userId == null) return false\r\n \r\n const response = await supa\r\n .from('ml_user_favorites')\r\n .select('*') // Select all to verify data\r\n .eq('user_id', userId!)\r\n .eq('target_id', productId)\r\n .eq('target_type', 1) // 1 for product\r\n .limit(1)\r\n .execute()\r\n \r\n // __f__('log','at utils/supabaseService.uts:2877',`[CheckFav] Response: ${JSON.stringify(response)}`)\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2880',`[CheckFav] Error: ${JSON.stringify(response.error)}`)\r\n return false\r\n }\r\n \r\n const data = response.data\r\n if (Array.isArray(data)) {\r\n if ((data as any[]).length > 0) {\r\n // Double check: ensure the returned item actually matches the product ID\r\n // This guards against potential query filter failures\r\n const item = data[0]\r\n let targetId = ''\r\n if (item instanceof UTSJSONObject) {\r\n targetId = item.getString('target_id') ?? ''\r\n } else {\r\n const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n targetId = itemObj.getString('target_id') ?? ''\r\n }\r\n \r\n if (targetId !== '' && targetId !== productId) {\r\n __f__('error','at utils/supabaseService.uts:2899',`[CheckFav] ID Mismatch! Query ${productId}, Got ${targetId}`)\r\n return false\r\n }\r\n \r\n return true\r\n }\r\n } else if (data instanceof UTSJSONObject) {\r\n // Handle single object return case (though limit(1) usually returns array)\r\n let targetId = data.getString('target_id') ?? ''\r\n if (targetId !== '' && targetId !== productId) {\r\n return false\r\n }\r\n return true\r\n }\r\n \r\n return false\r\n } catch(e) {\r\n __f__('error','at utils/supabaseService.uts:2916',`[CheckFav] Exception: ${e}`)\r\n return false\r\n }\r\n }\r\n \r\n async toggleFavorite(productId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n __f__('log','at utils/supabaseService.uts:2926',`[ToggleFav] Toggling for ${productId}`)\r\n \r\n // Check if exists\r\n const exists = await this.checkFavorite(productId)\r\n __f__('log','at utils/supabaseService.uts:2930',`[ToggleFav] Current status: ${exists}`)\r\n \r\n if (exists) {\r\n // Delete\r\n const response = await supa\r\n .from('ml_user_favorites')\r\n .eq('user_id', userId!)\r\n .eq('target_id', productId)\r\n .eq('target_type', 1)\r\n .delete()\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2943','取消收藏失败:', response.error)\r\n return true // 仍然是收藏状态\r\n }\r\n return false // 已取消收藏\r\n } else {\r\n // Add\r\n const response = await supa\r\n .from('ml_user_favorites')\r\n .insert({\r\n user_id: userId,\r\n target_id: productId,\r\n target_type: 1,\r\n created_at: new Date().toISOString()\r\n })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2960','添加收藏失败:', response.error)\r\n return false // 添加失败,仍未收藏\r\n }\r\n return true // 已收藏\r\n }\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2966','切换收藏状态异常:', e)\r\n // 发生异常时,尝试查询当前状态返回\r\n return await this.checkFavorite(productId)\r\n }\r\n }\r\n \r\n async getFavorites(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n // 第一步:查询收藏列表\r\n const response = await supa\r\n .from('ml_user_favorites')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .eq('target_type', 1)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n const favorites = response.data as any[]\r\n if (favorites == null || favorites.length === 0) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n // 第二步:收集商品ID\r\n const productIds: string[] = []\r\n for (let i = 0; i < favorites.length; i++) {\r\n let item: any = favorites[i]\r\n let pid = ''\r\n if (item instanceof UTSJSONObject) {\r\n pid = item.getString('target_id') ?? ''\r\n } else {\r\n const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n pid = itemObj.getString('target_id') ?? ''\r\n }\r\n if (pid !== '') productIds.push(pid)\r\n }\r\n \r\n if (productIds.length === 0) return []\r\n \r\n // 第三步:批量查询商品详情\r\n const anyProductIds = productIds as any[]\r\n const productRes = await supa\r\n .from('ml_products')\r\n .select('id, name, main_image_url, base_price, sale_count')\r\n .in('id', anyProductIds)\r\n .execute()\r\n \r\n if (productRes.error != null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n const products = productRes.data as any[]\r\n const productMap = new Map()\r\n \r\n for (let i = 0; i < products.length; i++) {\r\n // 显式声明类型为 any\r\n let p: any = products[i]\r\n let pid = ''\r\n if (p instanceof UTSJSONObject) {\r\n pid = p.getString('id') ?? ''\r\n } else {\r\n const pObj = JSON.parse(JSON.stringify(p)) as UTSJSONObject\r\n pid = pObj.getString('id') ?? ''\r\n }\r\n if (pid !== '') productMap.set(pid, p)\r\n }\r\n \r\n // 第四步:组合数据\r\n const result: any[] = []\r\n for (let i = 0; i < favorites.length; i++) {\r\n let item: any = favorites[i]\r\n let newItem: UTSJSONObject\r\n \r\n if (item instanceof UTSJSONObject) {\r\n // Deep copy to ensure we have a fresh object to modify\r\n newItem = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n } else {\r\n newItem = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n }\r\n \r\n let targetId = newItem.getString('target_id')\r\n // Careful with null targetId\r\n if (targetId != null) {\r\n const product = productMap.get(targetId as string)\r\n if (product != null) {\r\n newItem.set('ml_products', product)\r\n result.push(newItem)\r\n }\r\n }\r\n }\r\n \r\n return result\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3069','获取收藏列表异常:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 获取足迹列表\r\n async getFootprints(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('log','at utils/supabaseService.uts:3079','[getFootprints] 用户未登录')\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n __f__('log','at utils/supabaseService.uts:3084','[getFootprints] 查询足迹, userId:', userId)\r\n\r\n // 1. 获取足迹记录\r\n const response = await supa\r\n .from('ml_user_footprints')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .order('updated_at', { ascending: false })\r\n .limit(50)\r\n .execute()\r\n\r\n __f__('log','at utils/supabaseService.uts:3095','[getFootprints] 足迹查询 error:', response.error)\r\n __f__('log','at utils/supabaseService.uts:3096','[getFootprints] 足迹查询 data:', JSON.stringify(response.data))\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3099','[getFootprints] 获取足迹失败:', response.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n const footprints = response.data as any[]\r\n if (footprints == null || footprints.length === 0) {\r\n __f__('log','at utils/supabaseService.uts:3106','[getFootprints] 没有足迹记录')\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n __f__('log','at utils/supabaseService.uts:3111','[getFootprints] 足迹记录数量:', footprints.length)\r\n\r\n // 2. 收集商品ID\r\n const productIds: string[] = []\r\n for (let i = 0; i < footprints.length; i++) {\r\n let item = footprints[i]\r\n let pid = ''\r\n if (item instanceof UTSJSONObject) {\r\n pid = item.getString('product_id') ?? ''\r\n } else {\r\n const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n pid = itemObj.getString('product_id') ?? ''\r\n }\r\n if (pid !== '' && !productIds.includes(pid)) productIds.push(pid)\r\n }\r\n\r\n if (productIds.length === 0) return []\r\n \r\n const productIdsAny: any[] = []\r\n for(let i=0; i()\r\n for(let i=0; i {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('log','at utils/supabaseService.uts:3243','[addFootprint] 用户未登录')\r\n return false\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:3247','[addFootprint] 添加足迹, userId:', userId, 'productId:', productId)\r\n \r\n // 检查是否已存在\r\n const checkRes = await supa\r\n .from('ml_user_footprints')\r\n .select('id')\r\n .eq('user_id', userId!)\r\n .eq('product_id', productId)\r\n .execute()\r\n \r\n __f__('log','at utils/supabaseService.uts:3257','[addFootprint] 检查结果 error:', checkRes.error)\r\n __f__('log','at utils/supabaseService.uts:3258','[addFootprint] 检查结果 data:', JSON.stringify(checkRes.data))\r\n\r\n const checkData = checkRes.data as any[]\r\n const exists = checkData != null && Array.isArray(checkData) && checkData.length > 0\r\n \r\n if (checkRes.error == null && exists) {\r\n __f__('log','at utils/supabaseService.uts:3264','[addFootprint] 足迹已存在,更新时间')\r\n // 更新时间\r\n const updateRes = await supa\r\n .from('ml_user_footprints')\r\n .update({ updated_at: new Date().toISOString() })\r\n .eq('user_id', userId!)\r\n .eq('product_id', productId)\r\n .execute()\r\n __f__('log','at utils/supabaseService.uts:3272','[addFootprint] 更新结果 error:', updateRes.error)\r\n } else {\r\n __f__('log','at utils/supabaseService.uts:3274','[addFootprint] 足迹不存在,插入新记录')\r\n // 插入新记录\r\n const insertPayload = new UTSJSONObject()\r\n insertPayload.set('user_id', userId!)\r\n insertPayload.set('product_id', productId)\r\n insertPayload.set('created_at', new Date().toISOString())\r\n insertPayload.set('updated_at', new Date().toISOString())\r\n \r\n const insertRes = await supa\r\n .from('ml_user_footprints')\r\n .insert(insertPayload)\r\n .execute()\r\n __f__('log','at utils/supabaseService.uts:3286','[addFootprint] 插入结果 error:', insertRes.error)\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3290','[addFootprint] 添加足迹异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n async getAddressList(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: UserAddress[] = []\r\n return empty\r\n }\r\n\r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .select('*, recipient_name:receiver_name, phone:receiver_phone, detail_address:address_detail')\r\n .eq('user_id', userId!)\r\n .order('is_default', { ascending: false })\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3312','获取地址列表失败:', response.error)\r\n const empty: UserAddress[] = []\r\n return empty\r\n }\r\n return response.data as UserAddress[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3318','获取地址列表异常:', e)\r\n const empty: UserAddress[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 设置默认地址\r\n async setDefaultAddress(addressId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:3329','用户未登录,无法设置默认地址')\r\n return false\r\n }\r\n\r\n // 先取消所有默认地址\r\n await this.clearDefaultAddress(userId!)\r\n\r\n // 设置新的默认地址\r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .update({\r\n is_default: true,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', addressId)\r\n .eq('user_id', userId!)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3348','设置默认地址失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:3354','设置默认地址异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 获取用户优惠券列表\r\n async getUserCoupons(status: number = 1): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: UserCoupon[] = []\r\n return empty\r\n }\r\n\r\n // 假设有一个视图或者直接关联 ml_user_coupons 和 ml_coupon_templates\r\n // 这里简化处理,尝试直接从 ml_user_coupons 读取,并且加入 template 信息\r\n // 如果没有 view,可能需要改为两个查询或者使用 left join\r\n const response = await supa\r\n .from('ml_user_coupons')\r\n .select(`\r\n *,\r\n template:ml_coupon_templates(name, amount, min_spend)\r\n `)\r\n .eq('user_id', userId!)\r\n .eq('status', status)\r\n .order('expire_at', { ascending: true })\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3383','获取优惠券失败:', response.error)\r\n const empty: UserCoupon[] = []\r\n return empty\r\n }\r\n\r\n // 映射数据,将 template 的字段展平\r\n const coupons: UserCoupon[] = []\r\n const rawData = response.data as any[]\r\n for (let i = 0; i < rawData.length; i++) {\r\n const item = rawData[i]\r\n let template: any | null = null\r\n let itemId = ''\r\n let itemUserId = ''\r\n let itemTmplId = ''\r\n let itemCode = ''\r\n let itemStatus = 0\r\n let itemRecv = ''\r\n let itemExpire = ''\r\n \r\n if (item instanceof UTSJSONObject) {\r\n template = item.get('template') as any | null\r\n itemId = item.getString('id') ?? ''\r\n itemUserId = item.getString('user_id') ?? ''\r\n itemTmplId = item.getString('template_id') ?? ''\r\n itemCode = item.getString('coupon_code') ?? ''\r\n itemStatus = item.getNumber('status') ?? 0\r\n itemRecv = item.getString('received_at') ?? ''\r\n itemExpire = item.getString('expire_at') ?? ''\r\n } else {\r\n const iObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n template = iObj.get('template') as any | null\r\n itemId = iObj.getString('id') ?? ''\r\n itemUserId = iObj.getString('user_id') ?? ''\r\n itemTmplId = iObj.getString('template_id') ?? ''\r\n itemCode = iObj.getString('coupon_code') ?? ''\r\n itemStatus = iObj.getNumber('status') ?? 0\r\n itemRecv = iObj.getString('received_at') ?? ''\r\n itemExpire = iObj.getString('expire_at') ?? ''\r\n }\r\n \r\n if (template == null) template = new UTSJSONObject()\r\n \r\n let tName = ''\r\n let tAmount = 0\r\n let tMin = 0\r\n \r\n if (template instanceof UTSJSONObject) {\r\n tName = template.getString('name') ?? '优惠券'\r\n tAmount = template.getNumber('amount') ?? 0\r\n tMin = template.getNumber('min_spend') ?? 0\r\n } else {\r\n const tObj = JSON.parse(JSON.stringify(template)) as UTSJSONObject\r\n tName = tObj.getString('name') ?? '优惠券'\r\n tAmount = tObj.getNumber('amount') ?? 0\r\n tMin = tObj.getNumber('min_spend') ?? 0\r\n }\r\n\r\n const couponObj = new UTSJSONObject()\r\n couponObj.set('id', itemId)\r\n couponObj.set('user_id', itemUserId)\r\n couponObj.set('template_id', itemTmplId)\r\n couponObj.set('coupon_code', itemCode)\r\n couponObj.set('status', itemStatus)\r\n couponObj.set('received_at', itemRecv)\r\n couponObj.set('expire_at', itemExpire)\r\n couponObj.set('template_name', tName)\r\n couponObj.set('amount', tAmount)\r\n couponObj.set('min_spend', tMin)\r\n \r\n coupons.push(couponObj as UserCoupon)\r\n }\r\n\r\n return coupons\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3457','获取优惠券异常:', e)\r\n const empty: UserCoupon[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 获取可用优惠券数量\r\n async getUserCouponCount(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return 0\r\n\r\n const response = await supa\r\n .from('ml_user_coupons')\r\n .select('id', { count: 'exact' })\r\n .eq('user_id', userId!)\r\n .eq('status', 1) // 1: unused\r\n .gt('expire_at', new Date().toISOString()) // 未过期\r\n .limit(1) // Limit to 1 to reduce data transfer, we only want the count\r\n .execute()\r\n\r\n if (response.error != null) {\r\n return 0\r\n }\r\n return response.total ?? 0\r\n } catch (e) {\r\n return 0\r\n }\r\n }\r\n\r\n // 获取店铺/商品可用优惠券\r\n async getAvailableCoupons(merchantId: string): Promise {\r\n return this.fetchShopCoupons(merchantId)\r\n }\r\n\r\n // ALIAS for Cache busting: 获取店铺优惠券\r\n async fetchShopCoupons(merchantId: string): Promise {\r\n try {\r\n // 查询该商家的优惠券 + 平台通用券 (merchant_id is null)\r\n // 注意:这里简化逻辑,实际可能需要联合查询用户是否已领取\r\n const response = await supa\r\n .from('ml_coupon_templates')\r\n .select('*')\r\n .or(`merchant_id.eq.${merchantId},merchant_id.is.null`)\r\n .eq('status', 1)\r\n .gt('end_time', new Date().toISOString())\r\n .order('discount_value', { ascending: false })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3507','Fetch coupons failed:', response.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n const data = response.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n return data as any[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3519','Fetch coupons error:', e)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 领取优惠券\r\n async claimCoupon(templateId: string, userId: string): Promise {\r\n return this.claimShopCoupon(templateId, userId)\r\n }\r\n\r\n // ALIAS for Cache busting\r\n async claimShopCoupon(templateId: string, userId: string): Promise {\r\n try {\r\n __f__('log','at utils/supabaseService.uts:3533','Claiming coupon templateId:', templateId, 'userId:', userId)\r\n\r\n // 1. Fetch template details to get merchant_id and validity\r\n const tmplRes = await supa\r\n .from('ml_coupon_templates')\r\n .select('*')\r\n .eq('id', templateId)\r\n .limit(1)\r\n .execute()\r\n \r\n if (tmplRes.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3544','Claim Coupon: Template query error', tmplRes.error)\r\n return false\r\n }\r\n\r\n // Null check for data\r\n if (tmplRes.data == null) {\r\n __f__('error','at utils/supabaseService.uts:3550','Claim Coupon: Template data response is null')\r\n return false\r\n }\r\n \r\n const dataList = tmplRes.data as any[]\r\n if (dataList.length === 0) {\r\n __f__('error','at utils/supabaseService.uts:3556','Claim Coupon: Template not found (empty list)')\r\n return false\r\n }\r\n\r\n const template = dataList[0]\r\n \r\n // Safe property access\r\n let validDays = 0\r\n let endTimeStr: string | null = null\r\n let merchantId: string | null = null\r\n \r\n if (template instanceof UTSJSONObject) {\r\n validDays = template.getNumber('valid_days') ?? 0\r\n endTimeStr = template.getString('end_time')\r\n merchantId = template.getString('merchant_id')\r\n } else {\r\n const tJson = JSON.parse(JSON.stringify(template)) as UTSJSONObject\r\n validDays = tJson.getNumber('valid_days') ?? 0\r\n endTimeStr = tJson.getString('end_time')\r\n merchantId = tJson.getString('merchant_id')\r\n }\r\n \r\n // Calculate expire_at\r\n let expireAt = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString()\r\n if (validDays > 0) {\r\n expireAt = new Date(Date.now() + (validDays * 24 * 60 * 60 * 1000)).toISOString()\r\n } else if (endTimeStr != null && endTimeStr !== '') {\r\n expireAt = endTimeStr\r\n }\r\n \r\n // Handle UUID fields: Empty string is not valid UUID, must be null\r\n if (merchantId != null && merchantId.length === 0) {\r\n merchantId = null\r\n }\r\n\r\n // 2. Insert into user coupons with merchant_id\r\n const insertData = {\r\n user_id: userId,\r\n template_id: templateId,\r\n merchant_id: merchantId, // Important for shop filtering: null for platform coupons\r\n coupon_code: 'C' + Date.now() + Math.floor(Math.random() * 1000), \r\n status: 1, \r\n expire_at: expireAt,\r\n received_at: new Date().toISOString()\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:3602','Claim Coupon Insert Payload:', JSON.stringify(insertData))\r\n\r\n const response = await supa\r\n .from('ml_user_coupons')\r\n .insert(insertData)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3610','Claim Coupon: Insert failed:', JSON.stringify(response.error))\r\n // 尝试降级:如果 merchant_id 报错,尝试不带 merchant_id (仅调试用,或兼容旧表结构)\r\n if (JSON.stringify(response.error).includes('merchant_id')) {\r\n __f__('log','at utils/supabaseService.uts:3613','Retrying without merchant_id...')\r\n const fallbackData = {\r\n user_id: userId,\r\n template_id: templateId,\r\n coupon_code: 'C' + Date.now() + Math.random().toString().substring(2,6),\r\n status: 1,\r\n expire_at: expireAt,\r\n received_at: new Date().toISOString()\r\n }\r\n const res2 = await supa.from('ml_user_coupons').insert(fallbackData).execute()\r\n if (res2.error == null) return true\r\n }\r\n return false\r\n }\r\n return true\r\n } catch(e) {\r\n __f__('error','at utils/supabaseService.uts:3629','Claim coupon error:', e)\r\n return false\r\n }\r\n }\r\n\r\n // ==========================================\r\n // 聊天相关方法\r\n // ==========================================\r\n\r\n // 获取特定会话的消息历史\r\n async getChatMessages(merchantId: string, page: number = 1, pageSize: number = 20): Promise {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: ChatMessage[] = []\r\n return empty\r\n }\r\n \r\n // 计算分页 range\r\n const fromIndex = (page - 1) * pageSize\r\n const toIndex = fromIndex + pageSize - 1\r\n\r\n try {\r\n // 使用 or 组合条件查询:(sender_id=me AND receiver_id=merchant) OR (sender_id=merchant AND receiver_id=me)\r\n // 注意:Supabase postgrest-js 的 .or() 语法如果是针对同一列很简单,针对复杂逻辑用 string syntax\r\n // 这里简化处理,如果不加 userId 过滤,全靠 RLS\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .select('*')\r\n .or(`sender_id.eq.${merchantId},receiver_id.eq.${merchantId}`)\r\n .order('created_at', { ascending: false })\r\n .range(fromIndex, toIndex)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3663','getChatMessages error:', response.error)\r\n const empty: ChatMessage[] = []\r\n return empty\r\n }\r\n \r\n const data = response.data\r\n if (data == null) {\r\n const empty: ChatMessage[] = []\r\n return empty\r\n }\r\n\r\n return data as ChatMessage[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3676','getChatMessages exception:', e)\r\n const empty: ChatMessage[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 发送消息\r\n async sendMessage(merchantId: string, content: string, msgType: string = 'text'): Promise {\r\n // 确保 session 有效\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:3687',\"sendMessage failed: user not logged in or session lost\")\r\n return false\r\n }\r\n\r\n try {\r\n // Debug check\r\n // const session = supa.getSession()\r\n // __f__('log','at utils/supabaseService.uts:3694',\"Sending check: UserID\", userId, \"AuthID:\", session.user?.getString('id'))\r\n \r\n const msg = {\r\n sender_id: userId!,\r\n receiver_id: merchantId,\r\n content: content,\r\n msg_type: msgType,\r\n is_read: false,\r\n is_from_user: true\r\n }\r\n \r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .insert(msg)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3711','sendMessage error:', response.error)\r\n return false\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3716','sendMessage exception:', e)\r\n return false\r\n }\r\n }\r\n \r\n // 标记会话已读\r\n async markRead(merchantId: string): Promise {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n try {\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .update({ is_read: true })\r\n .eq('sender_id', merchantId)\r\n .eq('receiver_id', userId)\r\n .eq('is_read', false)\r\n .execute() \r\n\r\n if (response.error != null) return false\r\n } catch (e) { return false }\r\n return true\r\n }\r\n}\r\n\r\n// 导出单例实例\r\nexport const supabaseService = new SupabaseService()\r\n\r\n// 默认导出\r\nexport default supabaseService\r\n","\r\n\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t请输入药品名称、症状或品牌\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🔳\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t📷\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t搜索\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n \r\n\r\n\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ category.icon }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{{ category.name }}\r\n\t\t\t\t\t\t{{ category.description }}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n \r\n\t\t\t\t\t\r\n \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t🏢\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{{ brand.name }}\r\n\t\t\t\t\t\r\n \r\n\r\n\t\t\t\r\n\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t热销\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ product.name }}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t¥\r\n\t\t\t\t\t\t\t\t\t{{ product.base_price }}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t product.base_price\">\r\n\t\t\t\t\t\t\t\t\t¥{{ product.market_price }}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{{ product.brand_name ?? product.shop_name ?? '自营' }}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t已售{{ product.sale_count }}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t+\r\n\t\t\t\t\t\t\t\t\t加入购物车\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n \r\n\t\t\t\t\r\n\t\t\t\t\t正在加载更多商品...\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n \r\n \r\n \r\n \r\n 请输入药品名称、症状或品牌\r\n \r\n \r\n \r\n 🔳\r\n \r\n\r\n \r\n \r\n 📷\r\n \r\n \r\n \r\n \r\n 搜索\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ item.icon }}\r\n {{ item.name }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0\" class=\"product-grid\">\r\n \r\n 热销\r\n \r\n \r\n {{ product.name }}\r\n \r\n \r\n \r\n ¥\r\n {{ product.base_price }}\r\n \r\n product.base_price\">\r\n ¥{{ product.market_price }}\r\n \r\n \r\n \r\n \r\n {{ product.brand_name ?? product.shop_name ?? '自营' }}\r\n \r\n 已售{{ product.sale_count }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 💊\r\n 暂无相关药品\r\n 该分类下暂无商品,敬请期待\r\n \r\n \r\n \r\n \r\n 上拉加载更多\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t消息中心\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🧹\r\n\t\t\t\t\t\t一键已读\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{ tab.name }}\r\n\t\t\t\t\t 0\" class=\"tab-badge\">{{ tab.unread > 99 ? '99+' : tab.unread }}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ message.icon }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ message.content }}\r\n\t\t\t\t\t\t\t{{ message.lastMessage }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ tag }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t💡\r\n\t\t\t\t\t温馨提示:请勿相信任何要求转账、付款的信息,谨防诈骗\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t📢\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{{ message.content }}\r\n\t\t\t\t\t\t重要\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t📦\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{{ message.content }}\r\n\t\t\t\t\t\t订单号: {{ message.order_no }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ message.statusText }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🎁\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{{ message.content }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ message.coupon }}优惠券\r\n\t\t\t\t\t\t\t有效期至 {{ message.expiry }}\r\n\t\t\t\t\t\t\t{{ message.claimed ? '已领取' : '点击领取' }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t💬\r\n\t\t\t\t暂无消息\r\n\t\t\t\t暂时没有新消息\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t购物车\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{{ isManageMode ? '✓' : '⚙️' }}\r\n\t\t\t\t\t\t{{ isManageMode ? '完成' : '管理' }}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t🛒\r\n\t\t\t\t购物车是空的\r\n\t\t\t\t快去挑选喜欢的商品吧\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t✓\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{{ item.name }}\r\n\t\t\t\t\t\t\t\t{{ item.spec }}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n 0\" class=\"cart-action-bar\">\r\n \r\n \r\n \r\n ✓\r\n \r\n 全选\r\n \r\n \r\n \r\n \r\n \r\n 合计:\r\n ¥{{ totalPrice }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t 0\" class=\"recommend-section\">\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{{ product.name }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t¥{{ product.price }}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t+\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n","\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ userInfo.nickname != '' ? userInfo.nickname : userInfo.phone }}\r\n \r\n \r\n 积分\r\n {{ userStats.points }}\r\n \r\n \r\n \r\n 余额\r\n ¥{{ userStats.balance }}\r\n \r\n \r\n \r\n 券\r\n {{ serviceCounts.coupons }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ⚙️\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n 我的服务\r\n \r\n \r\n 🎫\r\n 优惠券\r\n 0\" class=\"service-badge\">{{ serviceCounts.coupons }}\r\n \r\n \r\n 📍\r\n 收货地址\r\n \r\n \r\n ❤️\r\n 我的收藏\r\n 0\" class=\"service-badge\">{{ serviceCounts.favorites }}\r\n \r\n\r\n \r\n 👣\r\n 浏览足迹\r\n \r\n \r\n 🔄\r\n 退款/售后\r\n \r\n \r\n 📝\r\n 评价\r\n \r\n \r\n ⭐\r\n 关注店铺\r\n \r\n \r\n 📱\r\n 软件订阅\r\n \r\n \r\n \r\n\r\n \r\n \r\n 我的订单\r\n \r\n \r\n 📋\r\n 全部\r\n 0\" class=\"tab-badge\">{{ orderCounts.total }}\r\n \r\n \r\n 💰\r\n 待支付\r\n 0\" class=\"tab-badge\">{{ orderCounts.pending }}\r\n \r\n \r\n 🚚\r\n 待发货\r\n 0\" class=\"tab-badge\">{{ orderCounts.toship }}\r\n \r\n \r\n 📦\r\n 待收货\r\n 0\" class=\"tab-badge\">{{ orderCounts.shipped }}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n 暂无相关订单记录\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ getOrderTitle(order) }}\r\n ¥{{ order.actual_amount }}\r\n {{ formatTime(order.created_at) }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n 消费统计\r\n \r\n {{ period.label }}\r\n \r\n \r\n \r\n \r\n ¥{{ currentStats.total_amount }}\r\n 总消费\r\n \r\n \r\n {{ currentStats.order_count }}\r\n 订单数\r\n \r\n \r\n ¥{{ currentStats.avg_amount }}\r\n 平均消费\r\n \r\n \r\n {{ currentStats.save_amount }}\r\n 节省金额\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\t\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t账户设置\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t👤\r\n\t\t\t\t\t\t个人资料\r\n\t\t\t\t\t\t›\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t📍\r\n\t\t\t\t\t\t收货地址\r\n\t\t\t\t\t\t›\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🔒\r\n\t\t\t\t\t\t修改密码\r\n\t\t\t\t\t\t›\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t📱\r\n\t\t\t\t\t\t手机绑定\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{{ userInfo.phone ? '已绑定' : '未绑定' }}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t›\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t📧\r\n\t\t\t\t\t\t邮箱绑定\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{{ userInfo.email ? '已绑定' : '未绑定' }}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t›\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t消息通知\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🔔\r\n\t\t\t\t\t\t订单消息\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🎁\r\n\t\t\t\t\t\t促销活动\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t⭐\r\n\t\t\t\t\t\t评价提醒\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t隐私设置\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t👁️\r\n\t\t\t\t\t\t隐藏购物记录\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🔍\r\n\t\t\t\t\t\t允许通过手机号找到我\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t💬\r\n\t\t\t\t\t\t接收商家消息\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t通用设置\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🗑️\r\n\t\t\t\t\t\t清除缓存\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ cacheSize }}\r\n\t\t\t\t\t\t\t›\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🌐\r\n\t\t\t\t\t\t语言设置\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ currentLanguage }}\r\n\t\t\t\t\t\t\t›\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🎨\r\n\t\t\t\t\t\t主题设置\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ currentTheme }}\r\n\t\t\t\t\t\t\t›\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t我的服务\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t📝\r\n\t\t\t\t\t\t我的评价\r\n\t\t\t\t\t\t›\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t关于我们\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tℹ️\r\n\t\t\t\t\t\t关于商城\r\n\t\t\t\t\t\t›\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t📜\r\n\t\t\t\t\t\t用户协议\r\n\t\t\t\t\t\t›\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🛡️\r\n\t\t\t\t\t\t隐私政策\r\n\t\t\t\t\t\t›\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t🔄\r\n\t\t\t\t\t\t检查更新\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ appVersion }}\r\n\t\t\t\t\t\t\t›\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t客服与反馈\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t💬\r\n\t\t\t\t\t\t联系客服\r\n\t\t\t\t\t\t›\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t📝\r\n\t\t\t\t\t\t意见反馈\r\n\t\t\t\t\t\t›\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t⭐\r\n\t\t\t\t\t\t给个好评\r\n\t\t\t\t\t\t›\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t注销账号\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\t\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t账户余额\r\n\t\t\t\t\t\t¥{{ balance.toFixed(2) }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t累计充值\r\n\t\t\t\t\t\t\t¥{{ stats.totalRecharge.toFixed(2) }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t累计消费\r\n\t\t\t\t\t\t\t¥{{ stats.totalConsume.toFixed(2) }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t累计提现\r\n\t\t\t\t\t\t\t¥{{ stats.totalWithdraw.toFixed(2) }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t🎫\r\n\t\t\t\t\t\t\t\t优惠券\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t🧧\r\n\t\t\t\t\t\t\t\t红包\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t⭐\r\n\t\t\t\t\t\t\t\t积分\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t💳\r\n\t\t\t\t\t\t\t\t银行卡\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t安全提示\r\n\t\t\t\t\t\t1. 请妥善保管您的支付密码\r\n\t\t\t\t\t\t2. 不要向他人透露您的账户信息\r\n\t\t\t\t\t\t3. 定期修改密码以确保账户安全\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t💰\r\n\t\t\t\t\t\t\t暂无交易记录\r\n\t\t\t\t\t\t\t快去使用钱包功能吧\r\n\t\t\t\t\t\t\r\n\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{{ getTransactionIcon(transaction.type) }}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{{ getTransactionTitle(transaction.type) }}\r\n\t\t\t\t\t\t\t\t\t\t{{ formatTime(transaction.created_at) }}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t 0, expense: transaction.amount < 0 }]\">\r\n\t\t\t\t\t\t\t\t\t\t{{ transaction.amount > 0 ? '+' : '' }}¥{{ Math.abs(transaction.amount).toFixed(2) }}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t余额: ¥{{ transaction.current_balance.toFixed(2) }}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t加载中...\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t 0\" class=\"no-more\">\r\n\t\t\t\t\t\t\t没有更多记录了\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n 提现至\r\n \r\n \r\n \r\n {{ selectedBank?.bank_name }}\r\n 储蓄卡\r\n 尾号 {{ getTailNumber(selectedBank?.card_number) }}\r\n \r\n \r\n 请选择到账银行卡\r\n \r\n >\r\n \r\n\r\n \r\n 提现金额\r\n \r\n ¥\r\n \r\n \r\n \r\n 当前可提现余额 ¥{{ balance }}\r\n 全部提现\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n \r\n 🎫\r\n 暂无优惠券\r\n \r\n \r\n \r\n \r\n {{ coupon.amount }}\r\n 优惠券\r\n \r\n \r\n {{ coupon.title }}\r\n 有效期至: {{ coupon.expiry }}\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n \r\n ❤️\r\n 暂无收藏商品\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ product.name }}\r\n ¥{{ product.price }}\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n \r\n 📍\r\n 暂无收货地址\r\n \r\n \r\n \r\n \r\n \r\n {{ getFullAddress(item) }}\r\n \r\n \r\n \r\n 📝\r\n \r\n \r\n 🗑️\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n \r\n \r\n 收货人\r\n \r\n \r\n \r\n 手机号码\r\n \r\n \r\n \r\n 所在地区\r\n \r\n \r\n \r\n 详细地址\r\n \r\n \r\n \r\n \r\n \r\n \r\n 智能填写\r\n \r\n 示例:张三 13800138000 北京市朝阳区三里屯SOHO A座\r\n \r\n \r\n 标签\r\n \r\n {{ tag }}\r\n \r\n \r\n \r\n 设为默认收货地址\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n {{ getFullAddress(selectedAddress!!) }}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t请选择收货地址\r\n\t\t\t\t\t›\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n \r\n\t\t\t\t 0\" class=\"debug-info\">\r\n\t\t\t\t\t共 {{ checkoutItems.length }} 件商品\r\n\t\t\t\t\r\n\r\n\t\t\t\t 0\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ item.product_name }}\r\n {{ formatSpecs(item.sku_specifications) }}\r\n \r\n ¥{{ item.price }}\r\n ×{{ item.quantity }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n 配送方式\r\n 快递 免邮\r\n \r\n \r\n 小计: \r\n ¥{{ getGroupTotal(group) }}\r\n \r\n \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t暂无商品信息\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t配送方式\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{{ option.name }}\r\n\t\t\t\t\t\t¥{{ option.price }}\r\n\t\t\t\t\t\t✓\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t优惠券\r\n\t\t\t\t\r\n\t\t\t\t\t{{ selectedCoupon.template?.name ?? '已选择优惠券 (¥' + (selectedCoupon.template?.discount_value ?? 0) + ')' }}\r\n\t\t\t\t\t选择优惠券\r\n\t\t\t\t\t›\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t价格明细\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t商品总价\r\n\t\t\t\t\t\t¥{{ totalAmount.toFixed(2) }}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t运费\r\n\t\t\t\t\t\t+¥{{ deliveryFee.toFixed(2) }}\r\n\t\t\t\t\t\r\n\t\t\t\t\t 0\" class=\"price-row\">\r\n\t\t\t\t\t\t优惠减免\r\n\t\t\t\t\t\t-¥{{ discountAmount.toFixed(2) }}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t应付金额\r\n\t\t\t\t\t\t¥{{ actualAmount.toFixed(2) }}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t合计:\r\n\t\t\t\t¥{{ actualAmount.toFixed(2) }}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\r\n\t\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t价格明细\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t商品总价\r\n\t\t\t\t\t\t¥{{ productAmount.toFixed(2) }}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t运费\r\n\t\t\t\t\t\t+¥{{ deliveryFee.toFixed(2) }}\r\n\t\t\t\t\t\r\n\t\t\t\t\t 0\" class=\"price-row\">\r\n\t\t\t\t\t\t优惠减免\r\n\t\t\t\t\t\t-¥{{ discountAmount.toFixed(2) }}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t应付金额\r\n\t\t\t\t\t\t¥{{ amount.toFixed(2) }}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t订单号: {{ orderNo }}\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t选择支付方式\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ getMethodIcon(method.id) }}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{{ method.name }}\r\n\t\t\t\t\t\t\t\t{{ method.description }}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t✓\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t 0\" class=\"balance-section\">\r\n\t\t\t\t\r\n\t\t\t\t\t账户余额\r\n\t\t\t\t\t¥{{ userBalance.toFixed(2) }}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t余额不足,请选择其他支付方式\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t请输入支付密码\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t index\" class=\"password-dot-text\">●\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t忘记密码?\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t需支付:\r\n\t\t\t\t¥{{ amount.toFixed(2) }}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{ num }}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t0\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t⌫\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n","\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ tab.name }}\r\n 0\" class=\"tab-count\">{{ tab.count }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 📦\r\n 暂无订单\r\n 去逛逛,发现心仪的商品\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ product.name }}\r\n {{ product.spec }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 商品合计\r\n ¥{{ order.product_amount }}\r\n \r\n \r\n 运费\r\n ¥{{ order.shipping_fee }}\r\n \r\n \r\n 实付款\r\n ¥{{ order.total_amount }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 加载中...\r\n \r\n \r\n 0\" class=\"no-more\">\r\n 没有更多订单了\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","\r\n\r\n \r\n \r\n \r\n \r\n \r\n {{ getStatusIcon() }}\r\n \r\n \r\n {{ getStatusText() }}\r\n {{ getStatusDesc() }}\r\n \r\n \r\n\r\n \r\n = 2\" class=\"delivery-info card\">\r\n \r\n \r\n 📍\r\n \r\n \r\n {{ deliveryAddress?.name ?? '' }}\r\n {{ deliveryAddress?.phone ?? '' }}\r\n \r\n {{ getFullAddress(deliveryAddress as any) }}\r\n \r\n \r\n \r\n \r\n 物流单号:\r\n {{ deliveryInfo?.tracking_no ?? '' }}\r\n 复制\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ item.product_name }}\r\n {{ getSpecText(item.specifications) }}\r\n \r\n ¥{{ item.price }}\r\n ×{{ item.quantity }}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n 订单编号\r\n {{ order?.order_no ?? '' }} 📄\r\n \r\n \r\n 下单时间\r\n {{ formatTime(order?.created_at ?? '') }}\r\n \r\n \r\n 支付方式\r\n {{ getPaymentMethodText(order?.payment_method as any) }}\r\n \r\n \r\n 支付时间\r\n {{ formatTime(order?.paid_at ?? '') }}\r\n \r\n \r\n 发货时间\r\n {{ formatTime(order?.shipped_at ?? '') }}\r\n \r\n \r\n 完成时间\r\n {{ formatTime(order?.completed_at ?? '') }}\r\n \r\n \r\n\r\n \r\n \r\n \r\n 商品总额\r\n ¥{{ order?.product_amount ?? 0 }}\r\n \r\n \r\n 运费\r\n +¥{{ order?.shipping_fee != null ? order?.shipping_fee : 0 }}\r\n \r\n 0\">\r\n 优惠金额\r\n -¥{{ order?.discount_amount ?? 0 }}\r\n \r\n \r\n 实付金额\r\n ¥{{ order?.total_amount ?? 0 }}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n 🎧\r\n 客服\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ item.desc }}\r\n {{ item.time }}\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\t\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t订单号: {{ order?.order_no }}\r\n\t\t\t\t下单时间: {{ formatTime(order?.created_at) }}\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t评分\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t⭐\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{{ getRatingText(ratings[index]) }}\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{{ contents[index]?.length ?? 0 }}/500\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t上传图片(可选)\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t+\r\n\t\t\t\t\t\t\t\t添加图片\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t匿名评价\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t评价内容对其他用户不可见\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t店铺评价\r\n\t\t\t\t\r\n\t\t\t\t\t商品描述相符\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t⭐\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t物流服务\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t⭐\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t服务态度\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t⭐\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t评价须知\r\n\t\t\t\t1. 评价后不可修改,请谨慎评价\r\n\t\t\t\t2. 上传图片需为真实商品照片\r\n\t\t\t\t3. 恶意评价将被删除并限制评价功能\r\n\t\t\t\t4. 优质评价可获得积分奖励\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\t\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t全部\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t处理中\r\n\t\t\t\t 0\" class=\"tab-badge\">{{ tabCounts.processing }}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t已完成\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t🔄\r\n\t\t\t\t暂无售后记录\r\n\t\t\t\t您可以在订单详情中申请售后\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t订单号: {{ refund.order?.order_no }}\r\n\t\t\t\t\t{{ formatTime(refund.order?.created_at) }}\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{{ getProductName(refund) }}\r\n\t\t\t\t\t\t原因: {{ refund.refund_reason }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t退款金额:\r\n\t\t\t\t\t\t\t¥{{ refund.refund_amount }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t 0\" class=\"timeline\">\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{ step.title }}\r\n\t\t\t\t\t\t\t{{ step.time }}\r\n\t\t\t\t\t\t\t{{ step.desc }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t加载中...\r\n\t\t\t\r\n\t\t\t 0\" class=\"no-more\">\r\n\t\t\t\t没有更多了\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n","\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 客服 小美 已接入,请描述您的问题\r\n \r\n \r\n \r\n \r\n 今天 14:30\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ headerTitle }}\r\n \r\n {{ message.content }}\r\n {{ message.time }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ message.content }}\r\n {{ message.time }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 😊\r\n 📷\r\n ➕\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ emoji }}\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n\r\n 0\">\r\n \r\n \r\n \r\n {{ shop.shop_name }}\r\n {{ shop.description != null ? shop.description : '暂无介绍' }}\r\n \r\n ⭐ {{ shop.rating_avg }}\r\n 销量: {{ shop.total_sales }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 暂无关注的店铺\r\n \r\n \r\n \r\n \r\n 加载中...\r\n \r\n \r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n \r\n \r\n 积分明细\r\n \r\n \r\n 加载中...\r\n \r\n \r\n \r\n 暂无积分记录\r\n \r\n \r\n \r\n \r\n \r\n {{ item.description ?? getTypeText(item.type) }}\r\n {{ formatTime(item.created_at) }}\r\n \r\n \r\n 0, negative: item.points < 0 }\">\r\n {{ item.points > 0 ? '+' : '' }}{{ item.points }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n\r\n \r\n 加载中...\r\n \r\n\r\n \r\n \r\n 暂无相关红包\r\n \r\n \r\n \r\n ¥{{ item.amount }}\r\n 无门槛\r\n \r\n \r\n \r\n {{ item.name }}\r\n 有效期至 {{ formatTime(item.expire_at) }}\r\n \r\n \r\n \r\n {{ getStatusText(item.status) }}\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n **** **** ****\r\n {{ card.card_no_last4 }}\r\n \r\n \r\n ✕\r\n \r\n \r\n \r\n \r\n \r\n +\r\n 添加银行卡\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n","\r\n \r\n \r\n \r\n 持卡人\r\n \r\n \r\n \r\n 卡号\r\n \r\n \r\n \r\n 银行\r\n \r\n \r\n \r\n 手机号\r\n \r\n \r\n \r\n \r\n 设为默认卡\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n"],"names":[],"mappings":"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"}