device.js 7.3 KB

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