device.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. /**
  2. * 设备管理相关API
  3. */
  4. import {
  5. http,
  6. Method
  7. } from '@/utils/request.js';
  8. import storage from "@/utils/storage.js";
  9. import api from "@/config/api.js";
  10. import config from "@/config/config.js";
  11. // const request = http.request;
  12. const userInfo = storage.getUserInfo()
  13. /**
  14. * 登录wvp获取token
  15. */
  16. export function loginWvp() {
  17. return uni.request({
  18. url: `${api.wvpServer}/api/user/login?username=${config.wvpUsername}&password=${config.wvpPassword}`,
  19. method: Method.GET,
  20. needToken: false,
  21. });
  22. }
  23. /**
  24. * 获取通道列表
  25. */
  26. export async function getChannels(deviceId) {
  27. try {
  28. // 登录获取token
  29. const loginRes = await loginWvp();
  30. console.log("WVP登录结果 code:", loginRes.code);
  31. console.log("WVP登录结果 msg:", loginRes.msg);
  32. console.log("WVP登录结果 data:", loginRes.data);
  33. // uni.request 返回格式: [err, res]
  34. if (!loginRes.data.data) {
  35. // 处理错误
  36. console.error('登录失败', loginRes);
  37. throw new Error('登录失败');
  38. }
  39. const response = loginRes.data;
  40. console.log("WVP登录响应数据:", response);
  41. if (response.code === 0) {
  42. console.log("WVP登录成功");
  43. storage.setWvpAccessToken(response.data.accessToken);
  44. // 查询通道列表
  45. const channelsRes = await uni.request({
  46. url: `${api.wvpServer}/api/device/query/devices/${deviceId}/channels`,
  47. method: Method.GET,
  48. data: {
  49. page: 1,
  50. count: 10,
  51. online: true,
  52. },
  53. header: {
  54. 'Access-Token': `${storage.getWvpAccessToken()}`,
  55. },
  56. });
  57. console.log("获取通道结果:", channelsRes);
  58. return channelsRes;
  59. } else {
  60. console.error("WVP登录失败,响应码:", response.code, "消息:", response.msg);
  61. throw new Error(`WVP登录失败: ${response.msg || '未知错误'}`);
  62. }
  63. } catch (error) {
  64. console.error("获取通道失败", error);
  65. throw error;
  66. }
  67. }
  68. /**
  69. * 开始点播
  70. */
  71. export async function playStart(deviceId, channelId) {
  72. return await uni.request({
  73. url: `${api.wvpServer}/api/play/start/${deviceId}/${channelId}`,
  74. method: Method.GET,
  75. header: {
  76. 'Access-Token': `${storage.getWvpAccessToken()}`,
  77. },
  78. })
  79. }
  80. /**
  81. * 暂停点播
  82. */
  83. export async function pause(deviceId, channelId) {
  84. return await uni.request({
  85. url: `${api.wvpServer}/api/play/stop/${deviceId}/${channelId}`,
  86. method: Method.GET,
  87. header: {
  88. 'Access-Token': `${storage.getWvpAccessToken()}`,
  89. },
  90. })
  91. }
  92. /**
  93. * 获取设备概览数据
  94. * @param {string} fieldId - 地块ID,可选
  95. * @returns {Promise} 设备概览数据
  96. */
  97. export function fetchDeviceOverview(fieldId) {
  98. const params = {};
  99. console.log("userInfo请求:",userInfo);
  100. if (userInfo.userid) params.userId = userInfo.userid;
  101. if (fieldId) params.fieldId = fieldId;
  102. return http.request({
  103. url: '/base/device/overview',
  104. method: Method.POST,
  105. needToken: true,
  106. data: params
  107. });
  108. }
  109. /**
  110. * 根据设备类型获取设备列表
  111. * @param {string} type - 设备类型(monitor-监控设备,sensor-采集设备,control-控制设备,irrigation-灌溉设备,tractor-农机设备)
  112. * @param {Object} params - 查询参数
  113. * @returns {Promise} 设备列表
  114. */
  115. export function fetchDevicesByType(params) {
  116. if (userInfo.userid) params.userId = userInfo.userid;
  117. return http.request({
  118. url: `/base/device/typeList`,
  119. method: Method.POST,
  120. needToken: true,
  121. data: params
  122. });
  123. }
  124. /**
  125. * 获取所有设备列表
  126. * @param {Object} params - 查询参数
  127. * @param {number} params.pageNum - 页码
  128. * @param {number} params.pageSize - 每页数量
  129. * @param {string} params.deviceName - 设备名称,可选
  130. * @param {string} params.deviceTypeId - 设备类型ID,可选
  131. * @param {number} params.status - 设备状态,可选
  132. * @returns {Promise} 设备列表
  133. */
  134. export function fetchDeviceList(params = {}) {
  135. return http.request({
  136. url: 'uniapp/device/list',
  137. method: Method.GET,
  138. needToken: true,
  139. params: params
  140. });
  141. }
  142. /**
  143. * 获取设备详情
  144. * @param {number} id - 设备ID
  145. * @returns {Promise} 设备详情
  146. */
  147. export function getDeviceDetail(id) {
  148. return http.request({
  149. url: `uniapp/device/${id}`,
  150. needToken: true,
  151. method: Method.GET
  152. });
  153. }
  154. /**
  155. * 获取设备采集器详情(包含气象/土壤数据和告警信息)
  156. * @param {number} id - 设备编码
  157. * @param {string} code - 设备编码,可选,用于判断设备类型
  158. * @returns {Promise} 设备详情数据
  159. */
  160. export function getDeviceCollectorDetail(deviceId, code) {
  161. return http.request({
  162. url: `/base/device/collector/detail/${deviceId}`,
  163. method: Method.GET,
  164. needToken: true,
  165. params: code ? { code } : {}
  166. });
  167. }
  168. /**
  169. * 添加设备
  170. * @param {Object} data - 设备信息
  171. * @returns {Promise} 添加结果
  172. */
  173. export function addDevice(data) {
  174. return http.request({
  175. url: 'uniapp/device',
  176. method: Method.POST,
  177. needToken: true,
  178. data: data
  179. });
  180. }
  181. /**
  182. * 更新设备信息
  183. * @param {Object} data - 设备信息
  184. * @returns {Promise} 更新结果
  185. */
  186. export function updateDevice(data) {
  187. return http.request({
  188. url: 'uniapp/device',
  189. method: Method.PUT,
  190. needToken: true,
  191. data: data
  192. });
  193. }
  194. /**
  195. * 删除设备
  196. * @param {number|number[]} ids - 设备ID或ID数组
  197. * @returns {Promise} 删除结果
  198. */
  199. export function deleteDevice(ids) {
  200. const idStr = Array.isArray(ids) ? ids.join(',') : ids;
  201. return http.request({
  202. url: `uniapp/device/${idStr}`,
  203. needToken: true,
  204. method: Method.DELETE
  205. });
  206. }
  207. /**
  208. * 根据用户ID获取关联的设备列表
  209. * @param {Object} params - 查询参数
  210. * @returns {Promise} 设备列表
  211. */
  212. export function fetchUserDeviceList(params = {}) {
  213. const user = storage.getUserInfo();
  214. return http.request({
  215. url: 'uniapp/device/user/list',
  216. method: Method.GET,
  217. params: {
  218. ...params,
  219. userId: user.userId
  220. },
  221. needToken: true,
  222. });
  223. }
  224. /**
  225. * 根据地块ID获取设备列表
  226. * @param {string} fieldId - 地块ID
  227. * @param {Object} params - 其他查询参数
  228. * @returns {Promise} 设备列表
  229. */
  230. export function fetchFieldDeviceList(fieldId, params = {}) {
  231. return http.request({
  232. url: 'uniapp/device/list',
  233. method: Method.GET,
  234. params: {
  235. ...params,
  236. fieldId: fieldId
  237. },
  238. needToken: true
  239. });
  240. }
  241. /**
  242. * 获取设备类型统计数据
  243. * @param {string} fieldId - 地块ID,可选
  244. * @returns {Promise} 设备类型统计数据
  245. */
  246. export function fetchDeviceTypeStats(fieldId) {
  247. const params = {};
  248. if (fieldId) params.fieldId = fieldId;
  249. return http.request({
  250. url: 'uniapp/device/stats/type',
  251. method: Method.GET,
  252. params: params,
  253. needToken: true,
  254. });
  255. }