device.js 6.9 KB

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