device.js 7.8 KB

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