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,
+}