diff --git a/src/api/config.ts b/src/api/config.ts index 9c9467d..6692159 100644 --- a/src/api/config.ts +++ b/src/api/config.ts @@ -51,7 +51,7 @@ const API_PATHS = { // 塘口列表模式1 POND_LIST: { v1: '/fishery/pond/list', - v2: '/fishery/pond/list', + v2: '/fishery/pond/list_mode1', }, // 塘口列表模式2 POND_LIST_MODE2: { @@ -79,27 +79,22 @@ const API_PATHS = { POND: { // 新增塘口 ADD: { - v1: '/fishery/pond', v2: '/fishery/pond', }, // 修改塘口 UPDATE: { - v1: '/api/pond/update', v2: '/fishery/pond', }, // 删除塘口 DELETE: { - v1: '/api/pond/delete', v2: '/fishery/pond', }, // 鱼类列表 FISH_LIST: { - v1: '/fishery/fish/list', v2: '/fishery/fish/list', }, // 塘口基本数据 BASE_INFO: { - v1: '/api/pond/base_info', v2: '/fishery/pond', }, // 塘口下设备信息 @@ -124,7 +119,7 @@ const API_PATHS = { // 设备列表 LIST_ALL: { v1: '/api/device/list_all_device', - v2: '/fishery/device/list', + v2: '/fishery/device/list_all_device', }, // 设备详情 INFO: { @@ -168,7 +163,6 @@ const API_PATHS = { }, // 检测设备是否在线 CHECK_STATUS: { - v1: '/api/device/check_device_status', v2: '/iot/device/status', }, // 盐度设置 @@ -183,7 +177,6 @@ const API_PATHS = { }, // 添加水质检测仪 ADD_DETECTOR: { - v1: '/api/device/add_device_detector', v2: '/iot/device/add_device_detector', }, // 设置溶解氧/水温告警 @@ -209,7 +202,7 @@ const API_PATHS = { // 添加控制一体机 ADD_CONTROLLER: { v1: '/api/device/add_device_controller', - v2: '/fishery/device/controller', + v2: '/iot/device/add_device_controller', }, // 启停溶解氧 SET_OXY_OPEN: { @@ -329,17 +322,14 @@ const API_PATHS = { MESSAGE: { // 充值记录 PAY: { - v1: '/api/message/page_pay', v2: '/fishery/payOrder/list', }, // 报警记录 WARN: { - v1: '/api/message/page_warn', v2: '/fishery/messageWarn/list', }, // 开关记录 SWITCH: { - v1: '/api/message/page_op_record', v2: '/fishery/messageOpRecord/list', }, // 已读一条消息 diff --git a/src/api/home.ts b/src/api/home.ts index 872a48b..b2a8c78 100644 --- a/src/api/home.ts +++ b/src/api/home.ts @@ -4,14 +4,12 @@ import Taro from '@tarojs/taro'; // 塘口模式1 export function getPond1() { - // 从本地存储获取手机号 - const userKeyword = Taro.getStorageSync('Phone'); - const queryParams = { + const userId = Taro.getStorageSync("UserId"); + return httpService.get(API.HOME.POND_LIST(), { params: { - userKeyword: userKeyword || undefined + rootUserId: userId || undefined } - }; - return httpService.get(API.HOME.POND_LIST(), { params: queryParams }); + }); } // 塘口模式2 diff --git a/src/api/pond.ts b/src/api/pond.ts index 311567d..e627c41 100644 --- a/src/api/pond.ts +++ b/src/api/pond.ts @@ -23,5 +23,6 @@ export function pondBaseInfo(data){ } // 塘口下设备信息 export function pondDeviceInfo(data){ - return httpService.post(API.POND.DEVICE_INFO(), {data}) + // 后端接口:GET /devices/{pondId},使用路径参数 + return httpService.get(API.POND.DEVICE_INFO() + '/' + data.id) } \ No newline at end of file diff --git a/src/components/other/index.vue b/src/components/other/index.vue index 6bf0c12..18cf598 100644 --- a/src/components/other/index.vue +++ b/src/components/other/index.vue @@ -75,7 +75,7 @@ 正常 - {{ item.warnCodeInfo.warnDescription }} { - if (res.statusCode == 200) { + console.log('塘口设备接口返回:', res); + if (res.code == 200) { + console.log('检测仪列表:', res.data.listDetector); + console.log('控制器列表:', res.data.listController); setTimeout(() => { if ( res.data && @@ -827,9 +830,9 @@ function getDeviceList() { oxyIds.push(item.id); let num = 3; const devCount = Number(item.deviceCount) + Number(item.switchCount); - const msg = item.warnCodeInfo.warnDescription; - const showPh = !alarmJudgeCode(item.warnCodeInfo.warnCode, 1); - const showSa = !alarmJudgeCode(item.warnCodeInfo.warnCode, 2); + const msg = item.warnCodeInfo?.warnDescription || ''; + const showPh = !alarmJudgeCode(item.warnCodeInfo?.warnCode, 1); + const showSa = !alarmJudgeCode(item.warnCodeInfo?.warnCode, 2); if (msg) { item.isPh = showPh; item.isSa = showSa; @@ -847,10 +850,10 @@ function getDeviceList() { item.num = num; item.status = Number(item.deviceCount) == 0 ? 0 : msg ? 2 : 1; // 判断设备是否离线,异常、断电 0 6 15 - const code0 = alarmJudgeCode(item.warnCodeInfo.warnCode, 0); - const code6 = alarmJudgeCode(item.warnCodeInfo.warnCode, 6); - const code11 = alarmJudgeCode(item.warnCodeInfo.warnCode, 15); - const code17 = alarmJudgeCode(item.warnCodeInfo.warnCode, 17); + const code0 = alarmJudgeCode(item.warnCodeInfo?.warnCode, 0); + const code6 = alarmJudgeCode(item.warnCodeInfo?.warnCode, 6); + const code11 = alarmJudgeCode(item.warnCodeInfo?.warnCode, 15); + const code17 = alarmJudgeCode(item.warnCodeInfo?.warnCode, 17); item.up = true; if (code0 || code6 || code11 || code17) { item.up = false; @@ -860,6 +863,7 @@ function getDeviceList() { keepNightOpen.value = res.data.keepNightOpen; doList.value = res.data.listDetector; controlList.value = res.data.listController; + console.log('赋值后 controlList:', controlList.value); if (res.data.listDetector && res.data.listDetector.length > 0) { firstDoId.value = res.data.listDetector[0].id ? res.data.listDetector[0].id @@ -935,7 +939,7 @@ function selectCharts(e) { } getDeviceHistory(); pondDeviceInfo({ id }).then((res: any) => { - if (res.statusCode == 200) { + if (res.code == 200) { const oxyIds = []; // setTimeout(() => { // showTour.value = res.data.length == 0 ? true : false; @@ -949,9 +953,9 @@ function selectCharts(e) { res.data.listDetector.forEach((item: any) => { oxyIds.push(item.id); let num = 3; - const msg = item.warnCodeInfo.warnDescription; - const showPh = !alarmJudgeCode(item.warnCodeInfo.warnCode, 1); - const showSa = !alarmJudgeCode(item.warnCodeInfo.warnCode, 2); + const msg = item.warnCodeInfo?.warnDescription || ''; + const showPh = !alarmJudgeCode(item.warnCodeInfo?.warnCode, 1); + const showSa = !alarmJudgeCode(item.warnCodeInfo?.warnCode, 2); if (msg) { item.isPh = showPh; item.isSa = showSa; @@ -974,10 +978,10 @@ function selectCharts(e) { // } // 判断设备是否离线,异常、断电 0 6 11 - const code0 = alarmJudgeCode(item.warnCodeInfo.warnCode, 0); - const code6 = alarmJudgeCode(item.warnCodeInfo.warnCode, 6); - const code11 = alarmJudgeCode(item.warnCodeInfo.warnCode, 15); - const code17 = alarmJudgeCode(item.warnCodeInfo.warnCode, 17); + const code0 = alarmJudgeCode(item.warnCodeInfo?.warnCode, 0); + const code6 = alarmJudgeCode(item.warnCodeInfo?.warnCode, 6); + const code11 = alarmJudgeCode(item.warnCodeInfo?.warnCode, 15); + const code17 = alarmJudgeCode(item.warnCodeInfo?.warnCode, 17); item.up = true; if (code0 || code6 || code11 || code17) { item.up = false; @@ -1812,6 +1816,7 @@ function setParamsCtr(id) { }); } function switchRes(list, index, type) { + console.log('switchRes 调用:', { list, index, type }); if (list.length > 0) { const info = list.filter((res) => res.index == index); if (type == "img") { diff --git a/src/home/updatePond.vue b/src/home/updatePond.vue index a9542f9..99e7d4a 100644 --- a/src/home/updatePond.vue +++ b/src/home/updatePond.vue @@ -480,7 +480,8 @@ function getDeviceList() { } // 设备列表 function getDevicesList() { - allDeviceList({ type: 1 }).then((res: any) => { + const userId = Taro.getStorageSync("UserId"); + allDeviceList({ type: 1,rootUserId:userId }).then((res: any) => { if (res.code == 200) { res.data.forEach((r: any) => { r.open = true; diff --git a/src/my/addController.vue b/src/my/addController.vue index f519864..e4b23c7 100644 --- a/src/my/addController.vue +++ b/src/my/addController.vue @@ -386,7 +386,31 @@ definePageConfig({ const instance = Taro.getCurrentInstance(); const r = instance.router.params.params; const page = instance.router.params.page; -const params = r ? JSON.parse(r) : undefined; + +console.log('URL参数原始值', r); +let params: any = undefined; +try { + if (r) { + // URL解码后再解析JSON + const decodedParams = decodeURIComponent(r); + console.log('URL解码后', decodedParams); + params = JSON.parse(decodedParams); + console.log('解析后的参数', params); + } else { + console.error('未获取到params参数'); + } +} catch (e) { + console.error('参数解析失败', e, '原始参数:', r); + // 参数解析失败,显示提示后返回 + Taro.showModal({ + title: '提示', + content: '参数错误,请重新进入', + showCancel: false, + success: () => { + Taro.navigateBack(); + } + }); +} const check = `https://www.yuceyun.cn/wechat/check.png`; const check_a = `https://www.yuceyun.cn/wechat/check_a.png`; const r_v = `https://www.yuceyun.cn/wechat/r_v.png`; @@ -434,14 +458,22 @@ const waterType = ref(1); /** ----------------metod start------------------ */ // 监测设备在线状态 function getCheckDevice() { + if (!params) { + console.error('params参数为空'); + state.show = true; + state.msg = '参数错误'; + return; + } + const data = { devicetype: params.devType, serialnum: params.devNum, }; + console.log('检查设备状态', data); isLoading.value = true; checkDeviceStatus(data) .then((res: any) => { - if (res.statusCode == 200) { + if (res.code == 200) { status.value = res.data; if (status.value == 0) { state.show = true; @@ -454,6 +486,9 @@ function getCheckDevice() { } else if (status.value == 8) { state.show = true; state.msg = "设备禁用"; + } else { + state.show = true; + state.msg = "设备异常"; } } }) @@ -462,6 +497,12 @@ function getCheckDevice() { }); } function next() { + if (!params) { + state.show = true; + state.msg = '参数错误'; + return; + } + const num = current.value; if (num == 4) { // 验证参数,发起添加设备请求 @@ -502,8 +543,9 @@ function next() { listPutPondPartId: listPutPondPartId.value, isOxygenUsed:isHave.value==1?true:false }; + console.log('添加设备数据', data); addDeviceController(data).then((res) => { - if (res.statusCode == 200) { + if (res.code == 200) { Taro.redirectTo({ url: "/my/addDevSuccess?name=添加测控一体机&page=" + page, }); diff --git a/src/pages/main/home.vue b/src/pages/main/home.vue index 2ee0f89..89824f2 100644 --- a/src/pages/main/home.vue +++ b/src/pages/main/home.vue @@ -766,7 +766,7 @@ Taro.useUnload(() => { // 查询公告 function getNotice(openType = 0) { noticeList().then((res) => { - if (res.statusCode == 200) { + if (res.code == 200) { const nList: any = []; noticeRows.value = res.data.sort(sortByField("priority", false)); if (noticeRows.value.length > 0) { @@ -860,9 +860,10 @@ function getWarnMsg() { pageSize: 10, pageNum: 1, }); - msgWarn(warnParams.value).then((res: any) => { - if (res.statusCode == 200) { - const unReadCount = Number(res.data.unReadCount); + const userId = Taro.getStorageSync("UserId"); + msgWarn({ ...warnParams.value, userId }).then((res: any) => { + if (res.code == 200) { + const unReadCount = res.rows ? res.rows.filter(item => !item.isRead).length : 0; if (unReadCount) { Taro.setTabBarBadge({ index: 1, // tabBar的位置,从0开始计数 @@ -921,10 +922,11 @@ function changeMode() { } // 塘口模式1 function pond1() { + const userId = Taro.getStorageSync("UserId"); getPond1().then((res: any) => { if (res.code == 200) { const pondIds = []; - const rows = res.rows || []; + const rows = res.data || []; rows.forEach((item: any) => { pondIds.push(item.id); let num = 3; @@ -988,9 +990,10 @@ function addDevice() { } // 加载设备列表 function loadDeviceList() { + const userId = Taro.getStorageSync("UserId"); const pondId = mode.value == 1 ? selPond.value : selPond_2.value; - allDeviceList({ type: 1 }).then((res) => { - if (res.statusCode == 200) { + allDeviceList({ type: 1 ,rootUserId:userId}).then((res) => { + if (res.code == 200) { if (res.data.length > 0) { res.data.forEach((r) => { r.disabled = false; @@ -1093,7 +1096,7 @@ function onconfirm(list) { }; bandDeviceToPond(data) .then((res) => { - if (res.statusCode == 200) { + if (res.code == 200) { state.show = true; state.msg = "操作成功"; pond2(); @@ -1129,7 +1132,7 @@ function goScan() { success: (res) => { const result = res.result; deviceScan({ qrcode: result }).then((v) => { - if (v.statusCode == 200) { + if (v.code == 200) { params.devType = String(v.data.deviceType); params.devNum = v.data.serialNum; @@ -1195,7 +1198,7 @@ function toLogin() { // 查询设备到期 function getDeviceDead() { deviceDead().then((res) => { - if (res.statusCode == 200) { + if (res.code == 200) { deadList.value = res.data; // if(res.data.length>0){ // Taro.showModal({ diff --git a/src/utils/api-helper.ts b/src/utils/api-helper.ts new file mode 100644 index 0000000..616f644 --- /dev/null +++ b/src/utils/api-helper.ts @@ -0,0 +1,186 @@ +/** + * API辅助工具 + * 提供统一的参数处理和响应适配 + */ + +/** + * 构建请求URL + * 根据新接口规范,不再需要拼接rootuserid参数 + * @param url 基础URL + * @param params 查询参数对象(可选) + * @returns 完整的URL + */ +export function buildUrl(url: string, params?: Record): string { + // 新版Java接口不需要拼接rootuserid + // 认证信息通过header传递 + if (!params || Object.keys(params).length === 0) { + return url + } + + const queryString = Object.entries(params) + .filter(([_, value]) => value !== undefined && value !== null) + .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) + .join('&') + + return queryString ? `${url}?${queryString}` : url +} + +/** + * 响应数据适配器 + * 处理C#和Java后端返回格式的差异 + */ +export class ResponseAdapter { + /** + * 适配响应数据 + * @param response 原始响应数据 + * @returns 标准化后的响应数据 + */ + static adapt(response: any): any { + if (!response) return response + + // 如果已经是标准格式,直接返回 + if (this.isStandardFormat(response)) { + return response + } + + // 处理可能的格式差异 + // Java后端可能使用 code 而不是 statusCode + if (response.code !== undefined && response.statusCode === undefined) { + response.statusCode = response.code + } + + // Java后端可能使用 message 而不是 errors + if (response.message !== undefined && response.errors === undefined) { + response.errors = response.message + } + + return response + } + + /** + * 检查是否为标准格式 + * @param response 响应数据 + * @returns 是否为标准格式 + */ + private static isStandardFormat(response: any): boolean { + return response.statusCode !== undefined && response.data !== undefined + } + + /** + * 判断响应是否成功 + * @param response 响应数据 + * @returns 是否成功 + */ + static isSuccess(response: any): boolean { + const adapted = this.adapt(response) + return adapted.statusCode === 200 || adapted.code === 200 + } + + /** + * 获取响应数据 + * @param response 响应数据 + * @returns 数据内容 + */ + static getData(response: any): any { + const adapted = this.adapt(response) + return adapted.data + } + + /** + * 获取错误信息 + * @param response 响应数据 + * @returns 错误信息 + */ + static getError(response: any): string { + const adapted = this.adapt(response) + return adapted.errors || adapted.message || '系统异常' + } +} + +/** + * 请求参数构建器 + * 简化API调用时的参数构建 + */ +export class ParamsBuilder { + private params: Record = {} + + /** + * 添加参数 + * @param key 参数名 + * @param value 参数值 + * @returns this + */ + add(key: string, value: any): this { + if (value !== undefined && value !== null) { + this.params[key] = value + } + return this + } + + /** + * 批量添加参数 + * @param params 参数对象 + * @returns this + */ + addAll(params: Record): this { + Object.entries(params).forEach(([key, value]) => { + this.add(key, value) + }) + return this + } + + /** + * 构建最终参数对象 + * @returns 参数对象 + */ + build(): Record { + return { ...this.params } + } +} + +/** + * API路径生成器 + * 用于处理RESTful风格的路径参数 + */ +export class PathBuilder { + private path: string + + constructor(basePath: string) { + this.path = basePath + } + + /** + * 添加路径段 + * @param segment 路径段 + * @returns this + */ + append(segment: string | number): this { + this.path = `${this.path}/${segment}` + return this + } + + /** + * 添加多个路径段 + * @param segments 路径段数组 + * @returns this + */ + appendAll(...segments: (string | number)[]): this { + segments.forEach(segment => this.append(segment)) + return this + } + + /** + * 构建最终路径 + * @returns 路径字符串 + */ + build(): string { + return this.path + } +} + +export default { + buildUrl, + ResponseAdapter, + ParamsBuilder, + PathBuilder, +}