{"version":3,"sources":["E:/tool/HBuilderX.5.02.2026030616-alpha/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-console/src/runtime/app/socket.ts","App.uvue","utils/request.uts","E:/tool/HBuilderX.5.02.2026030616-alpha/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-console/src/runtime/utils.ts","utils/api/location.uts","pages/myEdit/setting.uvue","pages/login/login.uvue","pages/myEdit/my.uvue","E:/tool/HBuilderX.5.02.2026030616-alpha/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-console/src/runtime/app/index.ts","main.uts","components/u-floating/u-floating.vue","static/imagesInfo/bg-color.png.uts","static/imagesInfo/bg-color.png.ts","static/imagesInfo/bg-icon.png.uts","static/imagesInfo/bg-icon.png.ts","utils/api/masterInfoApi.uts","utils/api/order.uts","utils/api/workbenches.uts","pages/homepage/console.uvue","pages/account/account.uvue","pages/homepage/setOrderTime.uvue","utils/api/login.uts","pages/homepage/serviceProject.uvue","pages/login/merchantRecuitment.uvue","pages/order/orderStatisics.uvue","pages/order/appraise.uvue","utils/api/tool.uts","pages/order/orderDetail.uvue"],"sourcesContent":["/// \n\nimport { currentPageCaptureScreenshot } from '../utils'\n\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 // 接收 hx 消息,处理截屏请求\n socket.onMessage((result) => {\n if (typeof result['data'] == 'string') {\n // @ts-expect-error\n const message = JSON.parse(result['data'] as string)!\n if ((message['type'] as string) == 'screencap') {\n const id = message['id'] as string\n currentPageCaptureScreenshot(\n message['fullPage'] as boolean,\n (base64: string, error: string) => {\n // @ts-expect-error\n socket.send({\n data: JSON.stringify({\n id,\n base64,\n error,\n }),\n } as SendSocketMessageOptions)\n }\n )\n }\n }\n resolve(null)\n })\n })\n}\n","\r\n\r\n","// uni-app x UTS 标准请求封装 | APP 直接访问,WEB 需代理跨域\r\n// 修复:URL 格式错误、Header 类型错误、平台判断错误\r\n\r\n// 定义请求配置类型\r\nexport type RequestOptions = {\r\n\turl : string\r\n\tmethod ?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'\r\n\tparams ?: any | null\r\n\tdata ?: any | null\r\n\tshowLoading ?: boolean\r\n\tloadingMsg ?: string\r\n}\r\n\r\n// 平台判断工具(运行期判断,兼容所有平台)\r\nclass PlatformUtil {\r\n\t// 获取平台信息(使用 uniPlatform,uni-app x 推荐方式)\r\n\tstatic getPlatform() : string {\r\n\t\ttry {\r\n\t\t\tconst appBaseInfo = uni.getAppBaseInfo()\r\n\t\t\tif (appBaseInfo.uniPlatform != null && appBaseInfo.uniPlatform.length > 0) {\r\n\t\t\t\treturn appBaseInfo.uniPlatform\r\n\t\t\t}\r\n\t\t\t// 降级方案:尝试 getSystemInfoSync\r\n\t\t\tconst systemInfo = uni.getSystemInfoSync()\r\n\t\t\tif (systemInfo.platform != null && systemInfo.platform.length > 0) {\r\n\t\t\t\treturn systemInfo.platform\r\n\t\t\t}\r\n\t\t\treturn ''\r\n\t\t} catch (e) {\r\n\t\t\treturn ''\r\n\t\t}\r\n\t}\r\n\r\n\t// 是否为 App 端(Android 或 iOS)\r\n\tstatic isApp() : boolean {\r\n\t\tconst platform = this.getPlatform()\r\n\t\treturn platform === 'app' || platform === 'android' || platform === 'ios'\r\n\t}\r\n\r\n\t// 是否为 Web 端(H5)\r\n\tstatic isH5() : boolean {\r\n\t\tconst platform = this.getPlatform()\r\n\t\treturn platform === 'web'\r\n\t}\r\n\r\n\t// 是否为微信小程序\r\n\tstatic isMpWeixin() : boolean {\r\n\t\tconst platform = this.getPlatform()\r\n\t\treturn platform === 'mp-weixin'\r\n\t}\r\n\r\n\t// 是否为小程序(通用)\r\n\tstatic isMiniProgram() : boolean {\r\n\t\tconst platform = this.getPlatform()\r\n\t\treturn platform.startsWith('mp-')\r\n\t}\r\n}\r\n\r\nfunction toUTSJSONObject(input : any | null) : any | null {\r\n\tif (input == null) return null\r\n\tif (typeof input !== 'object') return null\r\n\r\n\ttry {\r\n\t\t// 通过 JSON 归一化为普通对象,避免 UTS 中遍历/动态索引的兼容问题\r\n\t\treturn JSON.parse(JSON.stringify(input)) as UTSJSONObject\r\n\t} catch (e) {\r\n\t\treturn null\r\n\t}\r\n}\r\n\r\n// 核心请求方法,APP 端直接访问,WEB 端自动代理前缀\r\nexport function request(options : RequestOptions | null) : Promise {\r\n\treturn new Promise((resolve, reject) => {\r\n\t\tif (options == null) {\r\n\t\t\treject(new Error('请求参数不能为空'))\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// 1. 处理URL\r\n\t\tlet url = options.url\r\n\t\tif (typeof url !== 'string' || url.length === 0) {\r\n\t\t\treject(new Error('请求地址不能为空'))\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// 2. 根据平台处理 URL\r\n\t\tif (PlatformUtil.isH5()) {\r\n\t\t\tconst proxyPrefix = '/dev'\r\n\t\t\tconst isProxy = typeof url === 'string' && url.length >= proxyPrefix.length && url.substring(0, proxyPrefix.length) === proxyPrefix\r\n\t\t\tconst isHttp = typeof url === 'string' && (url.indexOf('http') === 0)\r\n\t\t\tif (!isProxy && !isHttp) {\r\n\t\t\t\tconst isSlash = typeof url === 'string' && url.indexOf('/') === 0\r\n\t\t\t\tif (!isSlash) {\r\n\t\t\t\t\turl = '/' + url\r\n\t\t\t\t}\r\n\t\t\t\turl = proxyPrefix + url\r\n\r\n\t\t\t}\r\n\t\t} else if (PlatformUtil.isApp()) {\r\n\t\t\tconst isHttpUrl =\r\n\t\t\t\t(typeof url === 'string' && url.indexOf('http://') === 0) ||\r\n\t\t\t\t(typeof url === 'string' && url.indexOf('https://') === 0)\r\n\t\t\tif (!isHttpUrl) {\r\n\t\t\t\treject(new Error('App 端请求地址必须是完整的 http:// 或 https:// URL,当前:' + url))\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// 3. 处理请求方法(保持字面量,避免 toUpperCase 造成类型丢失)\r\n\t\tconst method = (options.method ?? 'GET') as string\r\n\r\n\t\t// 4. 最终 URL\r\n\t\tconst finalUrl = url\r\n\r\n\t\t// 5. 构建请求头\r\n\t\t// if (PlatformUtil.isH5()) {\r\n\t\t// \tconst header = mapToUTSJSONObject(headerMap);\r\n\t\t// } else if (PlatformUtil.isApp()) { \r\n\t\t// \tconst header = UTSJSONObject(); \r\n\t\t// \theader['Content-Type'] = 'application/json'\r\n\t\t// \t}\r\n\t\t// 获取 token\r\n\t\t// const token = uni.getStorageSync('token') as string\r\n\t\t// if (typeof token === 'string' && token.length > 0) {\r\n\t\t// \theader['Authorization'] = 'Bearer ' + token\r\n\t\t// }\r\n\t\t// const headerMap = new Map()\r\n\t\t// \theaderMap.set('Content-Type', 'application/json')\r\n\t\tconst token = uni.getStorageSync('token') as string | null\r\n\t\t// \tif (token.length > 0) headerMap.set('Authorization', 'Bearer ' + token)\r\n\t\t// \tconst tenantId = uni.getStorageSync('tenantId') as string | null\r\n\t\t// \theaderMap.set('tenant-id', tenantId ?? 'default')\r\n\t\t// \theaderMap.set('terminal', uni.getSystemInfoSync().platform)\r\n\t\t// \tconst header = mapToUTSJSONObject(headerMap)\r\n\t\t// 获取 tenantId\r\n\t\tconst tenantIdOrigin = uni.getStorageSync('tenantId')\r\n\t\tlet tenantValue = 'default'\r\n\t\tif (typeof tenantIdOrigin === 'string') {\r\n\t\t\tif (tenantIdOrigin != null && (tenantIdOrigin as string).length > 0) {\r\n\t\t\t\ttenantValue = tenantIdOrigin as string\r\n\t\t\t}\r\n\t\t}\r\n\t\t// \theader['tenant-id'] = tenantValue\r\n\r\n\t\t// \t// 获取平台信息\r\n\t\t// \ttry {\r\n\t\t// \t\tconst systemInfo = uni.getSystemInfoSync()\r\n\t\t// \t\tif (typeof systemInfo.platform === 'string' && systemInfo.platform.length > 0) {\r\n\t\t// \t\t\theader['terminal'] = systemInfo.platform\r\n\t\t// \t\t} else {\r\n\t\t// \t\t\theader['terminal'] = 'unknown'\r\n\t\t// \t\t}\r\n\t\t// \t} catch (e) {\r\n\t\t// \t\theader['terminal'] = 'unknown'\r\n\t\t// \t}\r\n\t\tconst header = {\r\n\t\t\t'tenant-id': tenantValue ?? 'default',\r\n\t\t\t'terminal': uni.getSystemInfoSync().platform,\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t\t'Authorization': token != null ? `Bearer ${token}` : '' // 添加 token\r\n\t\t} as UTSJSONObject\r\n\r\n\t\t// 6. 处理请求数据(UTS 下 uni.request 期望 Map?)\r\n\t\t// GET 参数通过 data 传递,由框架负责拼接到 query,避免手动遍历拼接导致的 UTS 编译问题\r\n\t\tconst requestData = method === 'GET' ? toUTSJSONObject(options.params) : toUTSJSONObject(options.data)\r\n\r\n\t\t// 7. 处理加载提示\r\n\t\tconst showLoading = typeof options.showLoading === 'boolean' ? options.showLoading : true\r\n\t\tconst loadingMsg = typeof options.loadingMsg === 'string' ? options.loadingMsg : '加载中'\r\n\r\n\t\tif (showLoading) {\r\n\t\t\tuni.showLoading({ title: loadingMsg, mask: true })\r\n\t\t}\r\n\r\n\t\t// 8. 发起请求\r\n\t\tuni.request({\r\n\t\t\turl: finalUrl,\r\n\t\t\tmethod: method,\r\n\t\t\tdata: requestData,\r\n\t\t\theader: header,\r\n\t\t\ttimeout: 30000,\r\n\t\t\tdataType: 'json',\r\n\t\t\tresponseType: 'text',\r\n\t\t\tsuccess: (res) => {\r\n\t\t\t\tuni.hideLoading()\r\n\t\t\t\tif (res.statusCode >= 200 && res.statusCode < 300) {\r\n\t\t\t\t\tresolve(res.data ?? {})\r\n\t\t\t\t} else {\r\n\t\t\t\t\treject(new Error(`请求失败:HTTP ${res.statusCode}`))\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfail: (err) => {\r\n\t\t\t\tuni.hideLoading()\r\n\t\t\t\t__f__('error','at utils/request.uts:194','Request failed:', err)\r\n\r\n\t\t\t\t// 详细错误日志\r\n\t\t\t\t__f__('error','at utils/request.uts:197','Error code:', err.errCode)\r\n\t\t\t\t__f__('error','at utils/request.uts:198','Error message:', err.errMsg)\r\n\t\t\t\t__f__('error','at utils/request.uts:199','Error subject:', err.errSubject)\r\n\r\n\t\t\t\t// 根据错误码给出具体错误信息 [15]\r\n\t\t\t\tlet errorMsg = '网络异常,请重试'\r\n\t\t\t\tif (err.errCode === 600009) {\r\n\t\t\t\t\terrorMsg = 'URL 格式不合法,请检查请求地址是否正确(App端必须使用完整URL)'\r\n\t\t\t\t} else if (err.errCode === 600003) {\r\n\t\t\t\t\terrorMsg = '网络中断,请检查网络连接'\r\n\t\t\t\t} else if (err.errCode === 600008) {\r\n\t\t\t\t\terrorMsg = '请求数据格式错误'\r\n\t\t\t\t} else if (err.errCode === 600001) {\r\n\t\t\t\t\terrorMsg = '请求超时,请检查网络状况'\r\n\t\t\t\t} else if (typeof err.errMsg === 'string' && err.errMsg.length > 0) {\r\n\t\t\t\t\terrorMsg = err.errMsg\r\n\t\t\t\t}\r\n\r\n\t\t\t\treject(new Error(errorMsg))\r\n\t\t\t}\r\n\t\t})\r\n\t})\r\n}","export type SendFn = ((msg: string) => void) | null\n\nexport type currentPageCaptureScreenshotCallBack = (\n base64: string,\n error: string\n) => void\n\nexport function currentPageCaptureScreenshot(\n fullPage: boolean,\n callback: currentPageCaptureScreenshotCallBack\n) {\n const pages = getCurrentPages() as UniPage[]\n const currentPage = pages[pages.length - 1]\n currentPage.vm?.$viewToTempFilePath({\n wholeContent: fullPage,\n overwrite: true,\n success: (res) => {\n const fileManager = uni.getFileSystemManager()\n // @ts-expect-error\n fileManager.readFile({\n encoding: 'base64',\n filePath: res.tempFilePath,\n success(readFileRes) {\n callback(readFileRes.data as string, '')\n },\n fail(err) {\n callback('', `captureScreenshot fail: ${JSON.stringify(err)}`)\n },\n } as ReadFileOptions)\n },\n fail: (err) => {\n callback('', `captureScreenshot fail: ${JSON.stringify(err)}`)\n },\n })\n}\n","type QQMapApi = {\n\tIP_LOCATION: string\n\tGEOCODER: string\n\tDISTANCE: string\n\tSCAN_QR_CODE: string\n}\n\ntype QQMapConfig = {\n\tKEY: string\n\tAPI: QQMapApi\n}\n\ntype LocationPoint = {\n\tlongitude: number\n\tlatitude: number\n}\n\ntype LocationResult = {\n\tcode: number\n\tdata?: UTSJSONObject\n\tmessage: string\n\tresult?: any\n}\n\nconst QQ_MAP: QQMapConfig = {\n\tKEY: 'SIFBZ-2UJEZ-FZIXF-TAVLV-6GWVK-ZEBZX',\n\tAPI: {\n\t\tIP_LOCATION: 'https://apis.map.qq.com/ws/location/v1/ip',\n\t\tGEOCODER: 'https://apis.map.qq.com/ws/geocoder/v1/',\n\t\tDISTANCE: 'https://apis.map.qq.com/ws/distance/v1/',\n\t\tSCAN_QR_CODE: 'https://apis.map.qq.com/ws/barcode/v1/scan',\n\t}\n}\n\nconst showLocationSettingModal = () : void => {\n\tuni.showModal({\n\t\ttitle: '提示',\n\t\tcontent: '请先开启定位权限后重试',\n\t\tshowCancel: false,\n\t\tconfirmText: '我知道了',\n\t})\n}\n\nconst buildLocationData = (point: LocationPoint, num: number) : UTSJSONObject => {\n\treturn {\n\t\tlocation: {\n\t\t\tlongitude: point.longitude,\n\t\t\tlatitude: point.latitude,\n\t\t},\n\t\tnum: num,\n\t} as UTSJSONObject\n}\n\n/**\n * 扫描二维码\n */\nexport const scanQRCode = async () : Promise => {\n\treturn new Promise((resolve: (value: any) => void, reject: (reason?: any) => void) => {\n\t\tuni.scanCode({\n\t\t\tscanType: ['qrCode', 'barCode'],\n\t\t\tsuccess: (res) => {\n\t\t\t\tresolve((res.result as string | null) ?? '')\n\t\t\t},\n\t\t\tfail: (err) => {\n\t\t\t\treject(err)\n\t\t\t}\n\t\t})\n\t})\n}\n\n/**\n * 请求位置授权\n */\nexport const requestLocationAuth = async () : Promise => {\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n}\n\n/**\n * 发起定位相关请求\n */\nexport const requestJsonp = async (url: string, params: UTSJSONObject | null) : Promise => {\n\ttry {\n\t\tconst requestParams = params ?? ({} as UTSJSONObject)\n\t\treturn await new Promise((resolve: (value: any) => void, reject: (reason?: any) => void) => {\n\t\t\tuni.request({\n\t\t\t\turl: url,\n\t\t\t\tmethod: 'GET',\n\t\t\t\tdata: requestParams,\n\t\t\t\tsuccess: (res) => {\n\t\t\t\t\tconst response = res.data as UTSJSONObject | null\n\t\t\t\t\tif (response == null) {\n\t\t\t\t\t\treject(new Error('定位服务响应为空'))\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tconst status = (response['status'] as number | null) ?? 0\n\t\t\t\t\tif (status === 0) {\n\t\t\t\t\t\tresolve(response['result'] ?? response)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\treject(response)\n\t\t\t\t},\n\t\t\t\tfail: (err) => {\n\t\t\t\t\treject(err)\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t} catch (error) {\n\t\t__f__('error','at utils/api/location.uts:126','定位请求错误:', error)\n\t\treturn null\n\t}\n}\n\n/**\n * 通过城市名字搜索\n */\nexport const getCityNameInfo = async (cityName: string = '') : Promise => {\n\ttry {\n\t\tconst params = {\n\t\t\taddress: cityName,\n\t\t\tkey: QQ_MAP.KEY,\n\t\t} as UTSJSONObject\n\t\tconst res = await requestJsonp(QQ_MAP.API.GEOCODER, params) as UTSJSONObject | null\n\t\tif (res == null) {\n\t\t\treturn null\n\t\t}\n\t\treturn {\n\t\t\tarea_code: ((res['ad_info'] as UTSJSONObject | null)?.['adcode'] as string | null) ?? '',\n\t\t\tcity: ((res['address_components'] as UTSJSONObject | null)?.['city'] as string | null) ?? '',\n\t\t\tlatitude: ((res['location'] as UTSJSONObject | null)?.['lat'] as number | null) ?? 0,\n\t\t\tlongitude: ((res['location'] as UTSJSONObject | null)?.['lng'] as number | null) ?? 0,\n\t\t} as UTSJSONObject\n\t} catch (error) {\n\t\t__f__('error','at utils/api/location.uts:151','城市定位请求错误:', error)\n\t\treturn null\n\t}\n}\n\n/**\n * 初始化微信配置\n */\nexport const initWxConfig = async () : Promise => {\n\treturn Promise.resolve({\n\t\tcode: 200,\n\t\tmessage: '当前平台无需微信初始化',\n\t} as UTSJSONObject)\n}\n\n/**\n * 获取当前位置信息\n */\nexport const getCurrentLocation = async () : Promise => {\n\treturn new Promise((resolve: (value: LocationResult) => void, reject: (reason?: any) => void) => {\n\t\tlet hasResolved = false\n\t\tconst fallbackToIpLocation = async () : Promise => {\n\t\t\tif (hasResolved) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst locationData = await requestJsonp(QQ_MAP.API.IP_LOCATION, {\n\t\t\t\t\tkey: QQ_MAP.KEY,\n\t\t\t\t} as UTSJSONObject) as UTSJSONObject | null\n\t\t\t\tconst location = locationData?.['location'] as UTSJSONObject | null\n\t\t\t\tif (location != null) {\n\t\t\t\t\thasResolved = true\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tcode: 200,\n\t\t\t\t\t\tdata: buildLocationData({\n\t\t\t\t\t\t\tlongitude: (location['lng'] as number | null) ?? 0,\n\t\t\t\t\t\t\tlatitude: (location['lat'] as number | null) ?? 0,\n\t\t\t\t\t\t}, 1),\n\t\t\t\t\t\tmessage: '获取IP定位成功',\n\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treject({ code: 202, message: '获取位置失败' } as UTSJSONObject)\n\t\t\t} catch (e) {\n\t\t\t\treject({ code: 202, message: 'IP定位异常' } as UTSJSONObject)\n\t\t\t}\n\t\t}\n\t\tconst timeoutInfo = setTimeout(() => {\n\t\t\tfallbackToIpLocation()\n\t\t}, 3000)\n\n\t\tuni.getLocation({\n\t\t\ttype: 'gcj02',\n\t\t\tsuccess: (res) => {\n\t\t\t\tif (hasResolved) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\thasResolved = true\n\t\t\t\tclearTimeout(timeoutInfo)\n\t\t\t\tconst point: LocationPoint = {\n\t\t\t\t\tlongitude: res.longitude,\n\t\t\t\t\tlatitude: res.latitude,\n\t\t\t\t}\n\t\t\t\tuni.setStorageSync('locationInfo', point)\n\t\t\t\tresolve({\n\t\t\t\t\tcode: 200,\n\t\t\t\t\tdata: buildLocationData(point, 2),\n\t\t\t\t\tmessage: '获取位置成功',\n\t\t\t\t})\n\t\t\t},\n\t\t\tfail: () => {\n\t\t\t\tclearTimeout(timeoutInfo)\n\t\t\t\tshowLocationSettingModal()\n\t\t\t\treject({\n\t\t\t\t\tcode: 202,\n\t\t\t\t\tmessage: '获取位置失败',\n\t\t\t\t} as UTSJSONObject)\n\t\t\t},\n\t\t})\n\t})\n}\n\n/**\n * 解析地理位置信息\n */\nexport const parseLocation = async (location: UTSJSONObject) : Promise => {\n\ttry {\n\t\tconst latitude = (location['latitude'] as number | null) ?? 0\n\t\tconst longitude = (location['longitude'] as number | null) ?? 0\n\t\tconst geoLocation = await requestJsonp(QQ_MAP.API.GEOCODER, {\n\t\t\tkey: QQ_MAP.KEY,\n\t\t\tlocation: `${latitude},${longitude}`,\n\t\t} as UTSJSONObject)\n\t\tuni.setStorageSync('userAddress', geoLocation)\n\t\treturn {\n\t\t\tcode: 200,\n\t\t\tdata: {\n\t\t\t\tgeoLocation: geoLocation,\n\t\t\t} as UTSJSONObject,\n\t\t\tmessage: '解析地址成功',\n\t\t}\n\t} catch (error) {\n\t\treturn {\n\t\t\tcode: 500,\n\t\t\tmessage: '解析地址失败',\n\t\t}\n\t}\n}\n\n/**\n * 计算两点间距离\n */\nexport const calculateDistance = async (startPoint: UTSJSONObject, endPoint: UTSJSONObject) : Promise => {\n\ttry {\n\t\tconst startLatitude = (startPoint['latitude'] as number | null) ?? 0\n\t\tconst startLongitude = (startPoint['longitude'] as number | null) ?? 0\n\t\tconst endLatitude = (endPoint['latitude'] as number | null) ?? 0\n\t\tconst endLongitude = (endPoint['longitude'] as number | null) ?? 0\n\t\tconst result = await requestJsonp(QQ_MAP.API.DISTANCE, {\n\t\t\tfrom: `${startLatitude},${startLongitude}`,\n\t\t\tto: `${endLatitude},${endLongitude}`,\n\t\t\tkey: QQ_MAP.KEY,\n\t\t\tmode: 'driving',\n\t\t} as UTSJSONObject) as UTSJSONObject | null\n\n\t\tconst elements = result?.['elements'] as UTSArray | null\n\t\tif (elements != null && elements.length > 0) {\n\t\t\tconst firstElement = elements[0]\n\t\t\treturn {\n\t\t\t\tcode: 200,\n\t\t\t\tdata: {\n\t\t\t\t\tdistance: (firstElement['distance'] as number | null) ?? 0,\n\t\t\t\t} as UTSJSONObject,\n\t\t\t\tresult: result,\n\t\t\t\tmessage: '计算距离成功',\n\t\t\t}\n\t\t}\n\t\tthrow new Error('无效的距离数据')\n\t} catch (error) {\n\t\treturn {\n\t\t\tcode: 202,\n\t\t\tmessage: '计算距离失败',\n\t\t}\n\t}\n}\n\n/**\n * 格式化数字为千分位\n */\nexport const formatThousands = (number: number = 0) : string => {\n\treturn number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n}\n\n/**\n * 手机号码脱敏处理\n */\nexport const maskPhoneNumber = (phone: string = '') : string => {\n\treturn phone.length > 0 ? phone.replace(/(\\d{3})\\d{6}(\\d{2})/, '$1******$2') : ''\n}\n\n/**\n * 拨打电话\n */\nexport const makePhoneCall = (phoneNumber: string) : Promise => {\n\tconst phone = phoneNumber.length > 0 ? phoneNumber : '19806196313'\n\treturn new Promise((resolve: (value: any) => void, reject: (reason?: any) => void) => {\n\t\tuni.makePhoneCall({\n\t\t\tphoneNumber: phone,\n\t\t\tsuccess: () => {\n\t\t\t\tresolve({\n\t\t\t\t\tcode: 200,\n\t\t\t\t\tmessage: '拨号成功',\n\t\t\t\t})\n\t\t\t},\n\t\t\tfail: (err) => {\n\t\t\t\treject({\n\t\t\t\t\tcode: 500,\n\t\t\t\t\tmessage: '拨号失败',\n\t\t\t\t\terror: err,\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\t})\n}\n","\r\n \r\n \r\n \r\n 账号安全\r\n \r\n \r\n \r\n 意见反馈\r\n \r\n \r\n \r\n 关于我们\r\n \r\n \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\r\n\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\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{ codeText }}\r\n\t\t\t\t\r\n\t\t\t\r\n\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\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《用户协议》\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\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\t\t\r\n\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\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\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《用户协议》\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\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\t1、在您使用软件及服务的过程中,向您提供相关基本功能,我们将根据合法、正当、必要的原则,收集或使用必要的个人信息;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t2、基于您的授权,我们可能会获取您的地理位置、相册、相机等相关软件权限;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t3、我们会采取符合标准的技术措施和数据安全措施来保护您的个人信息安全;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t4、您可以查询,更正,管理您的个人信息,我们也提供账户注销的渠道;\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\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\t\r\n\r\n\r\n\r\n\r\n\n","\r\n\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\t\t\r\n\t\t\t\t\tV{{ userInfo['level'] }}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t成长值 {{ userInfo['growthValue'] }}\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\t还差{{ userInfo['nextLevelGap'] }}成长值可升至V{{ userInfo['nextLevel'] }}\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\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tV1\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tV2\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\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\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\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t60\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\t\r\n\t\t\t\t\r\n\t\t\t\t\t21\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\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\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\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\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{{ tool.name }}\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\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单次最高可奖200元\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\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\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团队成员100人\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\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寻找城市合伙人\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\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\r\n\r\n\t\r\n\r\n\r\n\r\n\r\n","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 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","import 'E:/tool/HBuilderX.5.02.2026030616-alpha/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-console/src/runtime/app/index.ts';import App from './App.uvue'\r\nimport { createSSRApp } from 'vue'\r\nexport function createApp() {\r\n\tconst app = createSSRApp(App)\r\n\treturn {\r\n\t\tapp\r\n\t}\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 = \"小丁到家\"\n override appid: string = \"__UNI__9F955ED\"\n override versionName: string = \"1.0.0\"\n override versionCode: string = \"100\"\n override uniCompilerVersion: string = \"5.04\"\n \n constructor() { super() }\n}\n\nimport GenPagesHomepageConsoleClass from './pages/homepage/console.uvue'\nimport GenPagesMyEditMyClass from './pages/myEdit/my.uvue'\nimport GenPagesOrderOrderClass from './pages/order/order.uvue'\nimport GenPagesAccountAccountClass from './pages/account/account.uvue'\nimport GenPagesHomepageSetOrderTimeClass from './pages/homepage/setOrderTime.uvue'\nimport GenPagesLoginLoginClass from './pages/login/login.uvue'\nimport GenPagesHomepageServiceProjectClass from './pages/homepage/serviceProject.uvue'\nimport GenPagesMyEditMyEditClass from './pages/myEdit/myEdit.uvue'\nimport GenPagesLoginVerifyManagerClass from './pages/login/verifyManager.uvue'\nimport GenPagesLoginFullWebviewPageClass from './pages/login/full-webview-page.uvue'\nimport GenPagesLoginMerchantRecuitmentClass from './pages/login/merchantRecuitment.uvue'\nimport GenPagesMyEditSettingClass from './pages/myEdit/setting.uvue'\nimport GenPagesOrderOrderStatisicsClass from './pages/order/orderStatisics.uvue'\nimport GenPagesOrderAppraiseClass from './pages/order/appraise.uvue'\nimport GenPagesLoginCheckMiddleClass from './pages/login/checkMiddle.uvue'\nimport GenPagesOrderOrderDetailClass from './pages/order/orderDetail.uvue'\nimport GenPagesAccountAccountListClass from './pages/account/accountList.uvue'\nimport GenPagesMapMapClass from './pages/map/map.uvue'\nfunction definePageRoutes() {\n__uniRoutes.push({ path: \"pages/homepage/console\", component: GenPagesHomepageConsoleClass, meta: { isQuit: true } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"控制台\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/myEdit/my\", component: GenPagesMyEditMyClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/order/order\", component: GenPagesOrderOrderClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"订单\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/account/account\", component: GenPagesAccountAccountClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"账户\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/homepage/setOrderTime\", component: GenPagesHomepageSetOrderTimeClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"接单时间\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/login/login\", component: GenPagesLoginLoginClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/homepage/serviceProject\", component: GenPagesHomepageServiceProjectClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"服务项目\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/myEdit/myEdit\", component: GenPagesMyEditMyEditClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"个人信息\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/login/verifyManager\", component: GenPagesLoginVerifyManagerClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/login/full-webview-page\", component: GenPagesLoginFullWebviewPageClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/login/merchantRecuitment\", component: GenPagesLoginMerchantRecuitmentClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"商户招募\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/myEdit/setting\", component: GenPagesMyEditSettingClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"设置\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/order/orderStatisics\", component: GenPagesOrderOrderStatisicsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"数据统计\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/order/appraise\", component: GenPagesOrderAppraiseClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"客户评价\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/login/checkMiddle\", component: GenPagesLoginCheckMiddleClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"商户招募\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/order/orderDetail\", component: GenPagesOrderOrderDetailClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"查看订单\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/account/accountList\", component: GenPagesAccountAccountListClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"全部账单\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/map/map\", component: GenPagesMapMapClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"\"]]) } as UniPageRoute)\n}\nconst __uniTabBar: Map | null = _uM([[\"selectedColor\",\"#000000\"],[\"backgroundColor\",\"#ffffff\"],[\"list\",[_uM([[\"pagePath\",\"pages/homepage/console\"],[\"iconPath\",\"static/iconInfo/noactive/homepage.png\"],[\"selectedIconPath\",\"static/iconInfo/active/homepage.png\"],[\"text\",\"控制台\"]]),_uM([[\"pagePath\",\"pages/order/order\"],[\"iconPath\",\"static/iconInfo/noactive/order.png\"],[\"selectedIconPath\",\"static/iconInfo/active/order.png\"],[\"text\",\"订单\"]]),_uM([[\"pagePath\",\"pages/account/account\"],[\"iconPath\",\"static/iconInfo/noactive/account.png\"],[\"selectedIconPath\",\"static/iconInfo/active/account.png\"],[\"text\",\"账户\"]]),_uM([[\"pagePath\",\"pages/myEdit/my\"],[\"iconPath\",\"static/iconInfo/noactive/myhome.png\"],[\"selectedIconPath\",\"static/iconInfo/active/myhome.png\"],[\"text\",\"我的\"]])]]])\nconst __uniLaunchPage: Map = _uM([[\"url\",\"pages/homepage/console\"],[\"style\",_uM([[\"navigationBarTitleText\",\"控制台\"]])]])\nfunction defineAppConfig(){\n __uniConfig.entryPagePath = '/pages/homepage/console'\n __uniConfig.globalStyle = _uM([[\"navigationBarTextStyle\",\"black\"],[\"navigationBarTitleText\",\"小丁到家--上门按摩\"],[\"navigationBarBackgroundColor\",\"#F8F8F8\"],[\"backgroundColor\",\"#F8F8F8\"]])\n __uniConfig.getTabBarConfig = ():Map | null => _uM([[\"selectedColor\",\"#000000\"],[\"backgroundColor\",\"#ffffff\"],[\"list\",[_uM([[\"pagePath\",\"pages/homepage/console\"],[\"iconPath\",\"static/iconInfo/noactive/homepage.png\"],[\"selectedIconPath\",\"static/iconInfo/active/homepage.png\"],[\"text\",\"控制台\"]]),_uM([[\"pagePath\",\"pages/order/order\"],[\"iconPath\",\"static/iconInfo/noactive/order.png\"],[\"selectedIconPath\",\"static/iconInfo/active/order.png\"],[\"text\",\"订单\"]]),_uM([[\"pagePath\",\"pages/account/account\"],[\"iconPath\",\"static/iconInfo/noactive/account.png\"],[\"selectedIconPath\",\"static/iconInfo/active/account.png\"],[\"text\",\"账户\"]]),_uM([[\"pagePath\",\"pages/myEdit/my\"],[\"iconPath\",\"static/iconInfo/noactive/myhome.png\"],[\"selectedIconPath\",\"static/iconInfo/active/myhome.png\"],[\"text\",\"我的\"]])]]])\n __uniConfig.tabBar = __uniConfig.getTabBarConfig()\n __uniConfig.conditionUrl = ''\n __uniConfig.uniIdRouter = _uM()\n \n __uniConfig.ready = true\n}\n","\r\n\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n","export default \"/static/imagesInfo/bg-color.png\";\n//# sourceMappingURL=bg-color.png.uts.map","export default \"/static/imagesInfo/bg-color.png\"","export default \"/static/imagesInfo/bg-icon.png\";\n//# sourceMappingURL=bg-icon.png.uts.map","export default \"/static/imagesInfo/bg-icon.png\"","import { request } from '../request.uts'\r\n// 基础 URL 配置\r\n\r\nconst BASE_URL = 'https://dev.xiaodingyun.cn'\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// 获取技师详情信息\r\nexport function getCoachDetaile() : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/client/v3/user/checkCoachReview`,\r\n\t\tmethod: \"GET\"\r\n\t})\r\n}\r\n\r\n// 申请成为技师base-info\r\nexport function fetchBaseInfo(data : any) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/client/v3/coach/account/base-info`,\r\n\t\tmethod: \"POST\",\r\n\t\tdata: data\r\n\t})\r\n}\r\n\r\n/**\r\n * 提交实名认证信息\r\n * @param {Object} data - 实名认证信息\r\n * @param {string} data.name - 真实姓名\r\n * @param {string} data.idCard - 身份证号码\r\n * @param {string} data.idCardFrontUrl - 身份证正面照片URL\r\n * @param {string} data.idCardBackUrl - 身份证背面照片URL\r\n * @returns {Promise} 提交结果\r\n */\r\nexport function submitRealName(data : any) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/account/real-name`,\r\n\t\tmethod: \"POST\",\r\n\t\tdata: data\r\n\t})\r\n}\r\n\r\n// 修改商户基本信息\r\nexport function editRealName(data : any) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/account/update-basic-info`,\r\n\t\tmethod: \"POST\",\r\n\t\tdata: data\r\n\t})\r\n}\r\n\r\n\r\n/**\r\n * 提交技师资质认证信息\r\n * @param {Object} data - 资质认证信息\r\n * @param {string} data.certificateUrl - 资格证书照片URL\r\n * @param {string} data.certificateNo - 资格证书编号\r\n * @param {string} data.mobile - 手机号\r\n * @returns {Promise} 提交结果\r\n */\r\nexport function submitQualification(data : any) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/account/qualification`,\r\n\t\tmethod: \"POST\",\r\n\t\tdata: data\r\n\t})\r\n}\r\n\r\n// 获取标签列表\r\nexport function getCoachFlagList() : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/account/coach-tag`,\r\n\t\tmethod: \"GET\"\r\n\t})\r\n}\r\n\r\n// 更新接单位置\r\nexport function updateLocation(data : any) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/account/location`,\r\n\t\tmethod: \"POST\",\r\n\t\tdata: data\r\n\t})\r\n}\r\n\r\n/**\r\n * 获取技师二维码\r\n * @returns {Promise<{qrcode: string}>} 技师二维码信息\r\n */\r\nexport function getCoachQrcode() : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/account/qrcode`,\r\n\t\tmethod: \"GET\"\r\n\t})\r\n}\r\n\r\n\r\n\r\n// 一键报警\r\nexport function orderAlarm() : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/orders/alerts`,\r\n\t\tmethod: \"GET\"\r\n\t})\r\n}\r\n\r\n// 获取当前区域配置\r\nexport function getAreaConfig(params : any) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/wallet/withdraw-fee-rate`,\r\n\t\tmethod: \"GET\",\r\n\t\tparams: params\r\n\t})\r\n}\r\n\r\n\r\n\r\n// 消息通知\r\nexport function getNotice(params : any) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/inform/inform`,\r\n\t\tmethod: \"GET\",\r\n\t\tparams: params\r\n\t})\r\n}","import { request } from '../request.uts'\r\n// 基础 URL 配置\r\n\r\nconst BASE_URL = 'https://dev.xiaodingyun.cn'\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * 获取商户评论列表\r\n */\r\nexport function transRecords(data : UTSJSONObject) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/wallet/trans-records/${data?.id ?? ''}`,\r\n\t\tmethod: \"GET\"\r\n\t})\r\n}\r\n\r\n/**\r\n * 获取商户评论列表\r\n */\r\nexport function getCommentList(data : UTSJSONObject) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/ordercomments/${data?.id ?? ''}`,\r\n\t\tmethod: \"GET\"\r\n\t})\r\n}\r\n\r\n/**\r\n * 获取商户评论统计数据\r\n */\r\nexport function getCommentData(data : UTSJSONObject) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/ordercomments/statistics/${data?.id ?? ''}`,\r\n\t\tmethod: \"GET\"\r\n\t})\r\n}\r\n// 开通/关闭项目并设置路费\r\nexport function toggleProject(data : any) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/projects/open`,\r\n\t\tmethod: \"POST\",\r\n\t\tdata: data\r\n\t})\r\n}\r\n\r\n// 获取订单列表\r\nexport function getOrderList(params : UTSJSONObject) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/orders`,\r\n\t\tmethod: \"GET\",\r\n\t\tparams\r\n\t})\r\n}\r\n\r\n// 商户订单详情\r\nexport function getOrderDetaile(data : UTSJSONObject) : Promise {\r\n\treturn request({\r\n\t\turl: `${BASE_URL}/api/coach/v3/orders/detail/${data?.id ?? ''}`,\r\n\t\tmethod: \"GET\",\r\n\t\tparams: data\r\n\t})\r\n}\r\n\r\n/**\r\n * 商户开始服务\r\n * @param {Object} data - 服务相关数据\r\n * @param {string|number} data.order_id - 订单ID\r\n * @param {string} [data.start_time] - 服务开始时间\r\n * @param {string} [data.service_notes] - 服务备注\r\n * @returns {Promise