fix: 后端接口对接,问题修复。

This commit is contained in:
tianyongbao
2026-01-12 18:48:03 +08:00
parent 2e9609292e
commit 6d1a6ded2d
8 changed files with 281 additions and 55 deletions

View File

@@ -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',
},
// 已读一条消息

View File

@@ -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

View File

@@ -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)
}

View File

@@ -75,7 +75,7 @@
正常</nut-tag
>
<nut-tag class="tagErr font_28 m_r_15" v-else-if="item.status == 2">
{{ item.warnCodeInfo.warnDescription }}</nut-tag
{{ item.warnCodeInfo?.warnDescription }}</nut-tag
>
<nut-tag
class="font_28 m_r_15"
@@ -116,7 +116,7 @@
:class="
!item.up
? ''
: alarmJudgeCode(item.warnCodeInfo.warnCode, 7)
: alarmJudgeCode(item.warnCodeInfo?.warnCode, 7)
? 'c_E22323'
: ''
"
@@ -143,8 +143,8 @@
:class="
!item.up
? ''
: alarmJudgeCode(item.warnCodeInfo.warnCode, 9) ||
alarmJudgeCode(item.warnCodeInfo.warnCode, 8)
: alarmJudgeCode(item.warnCodeInfo?.warnCode, 9) ||
alarmJudgeCode(item.warnCodeInfo?.warnCode, 8)
? 'c_E22323'
: ''
"
@@ -169,7 +169,7 @@
:class="
!item.up
? ''
: alarmJudgeCode(item.warnCodeInfo.warnCode, 10)
: alarmJudgeCode(item.warnCodeInfo?.warnCode, 10)
? 'c_E22323'
: ''
"
@@ -803,7 +803,10 @@ function getDeviceList() {
}
// 查询塘口下设备列表
pondDeviceInfo({ id }).then((res: any) => {
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") {

View File

@@ -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;

View File

@@ -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<number>(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,
});

View File

@@ -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({

186
src/utils/api-helper.ts Normal file
View File

@@ -0,0 +1,186 @@
/**
* API辅助工具
* 提供统一的参数处理和响应适配
*/
/**
* 构建请求URL
* 根据新接口规范不再需要拼接rootuserid参数
* @param url 基础URL
* @param params 查询参数对象(可选)
* @returns 完整的URL
*/
export function buildUrl(url: string, params?: Record<string, any>): 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<string, any> = {}
/**
* 添加参数
* @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<string, any>): this {
Object.entries(params).forEach(([key, value]) => {
this.add(key, value)
})
return this
}
/**
* 构建最终参数对象
* @returns 参数对象
*/
build(): Record<string, any> {
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,
}