api.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. import {
  2. baseUrl,
  3. baseApiUrl
  4. } from './config.js';
  5. import * as common from './common.js' //引入common
  6. import * as db from './db.js' //引入common
  7. // 需要登陆的,都写到这里,否则就是不需要登陆的接口
  8. let methodsToken = ['getZhoujieDevice', 'getCameraPreviewUrl', 'addPollingConfig', 'delPollingConfig',
  9. 'getPollingConfig', 'getPollingDevicePreviewUrl', 'getCrCameraPreviewUrl', "getDeviceDetails",
  10. 'editPollingConfig', 'getCrOpenHoursHistoricalConfig', 'setCrOpenHoursConfig', 'getLatestEvent', 'getEventList',
  11. 'createTestEvent', 'editEvent'
  12. ];
  13. const post = (method, data, callback, type, orgurl) => {
  14. let userToken = '';
  15. let auth = '';
  16. // 判断token是否存在
  17. // console.log("method: ", method);
  18. if (methodsToken.indexOf(method) >= 0) {
  19. // 获取用户token
  20. let auth = db.get("auth");
  21. // console.log(auth);
  22. let nowdate = (new Date()) / 1000; //当前时间戳
  23. //新增用户判断是否登录逻辑begin
  24. common.isLogin();
  25. //新增用户判断是否登录逻辑end
  26. if (!auth || auth.createtime + auth.expires_in < nowdate) {
  27. common.toLogin();
  28. return false;
  29. } else {
  30. userToken = auth.token;
  31. }
  32. }
  33. if (type) {
  34. method = type + '/' + method
  35. } else {
  36. method = '/' + method
  37. }
  38. let realurl = baseApiUrl + method;
  39. if (orgurl) {
  40. realurl = baseUrl + orgurl;
  41. }
  42. uni.showLoading({
  43. title: '',
  44. icon: 'loading'
  45. });
  46. uni.request({
  47. url: realurl,
  48. data: data,
  49. header: {
  50. 'Accept': 'application/json',
  51. 'Content-Type': 'application/x-www-form-urlencoded',
  52. 'token': userToken,
  53. '__token__': userToken
  54. },
  55. method: 'POST',
  56. success: (response) => {
  57. uni.hideLoading();
  58. const result = response.data
  59. if (result.msg == 'Please login' || result.msg == '请登陆') {
  60. db.del("user");
  61. db.del("auth");
  62. console.log('未登陆')
  63. uni.showToast({
  64. title: result.msg,
  65. icon: 'none',
  66. duration: 2000,
  67. complete: function() {
  68. uni.reLaunch({
  69. url: '/pages/index/index',
  70. })
  71. }
  72. });
  73. }
  74. callback(result);
  75. },
  76. fail: (error) => {
  77. uni.hideLoading();
  78. if (error && error.response) {
  79. showError(error.response);
  80. }
  81. },
  82. });
  83. }
  84. // 上传图片
  85. export const uploadImage = (method, data = {}, callback, num = 9, type) => {
  86. if (type) {
  87. method = type + '/' + method
  88. } else {
  89. method = method
  90. }
  91. let userToken = '';
  92. let auth = db.get("auth");
  93. userToken = auth.token;
  94. uni.chooseImage({
  95. count: num,
  96. success: (res) => {
  97. uni.showLoading({
  98. title: '上传中...'
  99. });
  100. let tempFilePaths = res.tempFilePaths
  101. for (var i = 0; i < tempFilePaths.length; i++) {
  102. data.file = tempFilePaths[i]
  103. uni.uploadFile({
  104. url: baseApiUrl + method,
  105. filePath: tempFilePaths[i],
  106. fileType: 'image',
  107. name: 'file',
  108. headers: {
  109. 'Accept': 'application/json',
  110. 'Content-Type': 'multipart/form-data',
  111. 'token': userToken
  112. },
  113. formData: data,
  114. success: (uploadFileRes) => {
  115. callback(JSON.parse(uploadFileRes.data))
  116. },
  117. fail: (error) => {
  118. if (error && error.response) {
  119. common.showError(error.response);
  120. }
  121. },
  122. complete: () => {
  123. setTimeout(function() {
  124. uni.hideLoading();
  125. }, 250);
  126. },
  127. });
  128. }
  129. }
  130. });
  131. }
  132. const get = (url, callback) => {
  133. // uni.showLoading({
  134. // title: '加载中'
  135. // });
  136. let realurl = baseUrl + url;
  137. if (url.indexOf('http:') >= 0 || url.indexOf('https:') >= 0) {
  138. let realurl = url;
  139. }
  140. uni.request({
  141. url: realurl,
  142. header: {
  143. 'Accept': 'application/json',
  144. 'Content-Type': 'application/x-www-form-urlencoded', //自定义请求头信息
  145. },
  146. method: 'GET',
  147. success: (response) => {
  148. callback(response.data);
  149. },
  150. fail: (error) => {
  151. if (error && error.response) {
  152. showError(error.response);
  153. }
  154. },
  155. complete: () => {
  156. setTimeout(function() {
  157. uni.hideLoading();
  158. }, 250);
  159. }
  160. });
  161. }
  162. const showError = error => {
  163. let errorMsg = ''
  164. switch (error.status) {
  165. case 400:
  166. errorMsg = '请求参数错误'
  167. break
  168. case 401:
  169. errorMsg = '未授权,请登录'
  170. break
  171. case 403:
  172. errorMsg = '跨域拒绝访问'
  173. break
  174. case 404:
  175. errorMsg = `请求地址出错: ${error.config.url}`
  176. break
  177. case 408:
  178. errorMsg = '请求超时'
  179. break
  180. case 500:
  181. errorMsg = '服务器内部错误'
  182. break
  183. case 501:
  184. errorMsg = '服务未实现'
  185. break
  186. case 502:
  187. errorMsg = '网关错误'
  188. break
  189. case 503:
  190. errorMsg = '服务不可用'
  191. break
  192. case 504:
  193. errorMsg = '网关超时'
  194. break
  195. case 505:
  196. errorMsg = 'HTTP版本不受支持'
  197. break
  198. default:
  199. errorMsg = error.msg
  200. break
  201. }
  202. uni.showToast({
  203. title: errorMsg,
  204. icon: 'none',
  205. duration: 2000
  206. });
  207. }
  208. const syncget = (url, data) => {
  209. return new Promise(function(resolve, reject) {
  210. get(url + queryParams(data, true), (result) => {
  211. try {
  212. resolve(result);
  213. } catch (e) {
  214. reject(e);
  215. }
  216. })
  217. })
  218. }
  219. const syncpost = (f, m, d) => {
  220. return new Promise(function(resolve, reject) {
  221. post(f, d, (result) => {
  222. try {
  223. resolve(result);
  224. } catch (e) {
  225. reject(e);
  226. }
  227. }, m, m);
  228. })
  229. }
  230. // // 登录
  231. // export const third = (data, callback) => post('third', data, callback, 'discover/User');
  232. // // 用户绑定手机
  233. // export const bindphone = (data, callback) => post('bind', data, callback, 'discover/User');
  234. // // 修改用户信息
  235. // export const profile = (data, callback) => post('profile', data, callback, 'discover/User');
  236. // // 发送验证码
  237. // export const sendSmsVerify = (data, callback) => post('sendSmsVerify', data, callback, 'discover/User');
  238. // // 刷新用户
  239. // export const refreshUser = (data, callback) => post('refreshUser', data, callback, 'discover/User');
  240. // 注册
  241. export const register = (data, callback) => post('register', data, callback, 'discover/User');
  242. // 登录
  243. export const login = (data, callback) => post('login', data, callback, 'user/login');
  244. // 自动登录
  245. export const autoLogin = (data, callback) => post('dutyAutoLogin', data, callback, 'user');
  246. // 退出登录
  247. export const logout = (data, callback) => post('logout', data, callback, 'discover/User');
  248. // 上传头像
  249. export const upload = (data, callback) => post('upload', data, callback, 'discover/Ajax');
  250. // 获取层级数据【文物列表、区域列表】
  251. export const getZhoujieDevice = (data, callback) => post('getZhoujieDevice', data, callback, 'zhoujie/duty');
  252. // 获取文物下监控预览流url
  253. export const getCrCameraPreviewUrl = (data, callback) => post('getCrCameraPreviewUrl', data, callback,
  254. 'zhoujie/duty');
  255. /* 获取监控预览流url */
  256. export const getCameraPreviewUrl = (data, callback) => post('getCameraPreviewUrl', data, callback,
  257. 'zhoujie/duty');
  258. // 加入轮询
  259. export const addPollingConfig = (data, callback) => post('addPollingConfig', data, callback,
  260. 'zhoujie/duty');
  261. // 删除轮询
  262. export const delPollingConfig = (data, callback) => post('delPollingConfig', data, callback,
  263. 'zhoujie/duty');
  264. // 获取用户轮询配置
  265. export const getPollingConfig = (data, callback) => post('getPollingConfig', data, callback,
  266. 'zhoujie/duty');
  267. // 修改用户轮询配置
  268. export const editPollingConfig = (data, callback) => post('editPollingConfig', data, callback,
  269. 'zhoujie/duty');
  270. // 获取轮询设备监控点预览
  271. export const getPollingDevicePreviewUrl = (data, callback) => post('getPollingDevicePreviewUrl', data, callback,
  272. 'zhoujie/duty');
  273. // 获取设备详情
  274. export const getDeviceDetails = (data, callback) => post('getDeviceDetails', data, callback,
  275. 'zhoujie/duty');
  276. // 获取文物开放时段历史配置
  277. export const getCrOpenHoursHistoricalConfig = (data, callback) => post('getCrOpenHoursHistoricalConfig', data, callback,
  278. 'zhoujie/duty');
  279. // 修改文物开放时间
  280. export const setCrOpenHoursConfig = (data, callback) => post('setCrOpenHoursConfig', data, callback,
  281. 'zhoujie/duty');
  282. // 获取最新事件
  283. export const getLatestEvent = (data, callback) => post('getLatestEvent', data, callback,
  284. 'zhoujie/duty');
  285. // 获取事件列表
  286. export const postEventList = (data, callback) => post('getEventList', data, callback,
  287. 'zhoujie/duty');
  288. // 修改事件信息(误报)
  289. export const editEvent = (data, callback) => post('editEvent', data, callback,
  290. 'zhoujie/duty')
  291. // 绑定手机
  292. export const changeMobile = (data, callback) => post('changeMobile', data, callback, 'discover/User');
  293. /* 测试监控视频链接 */
  294. export const getUrltoPlay = (data, callback) => get(
  295. 'culturalrelicplate/work_log/getPreviewUrl' +
  296. queryParams(data, true), callback)
  297. /* 监控编码 */
  298. export const getMonitorList = (data, callback) => get(
  299. "culturalrelicplate/work_log/getCameraList" +
  300. queryParams(data, true), callback)
  301. /* 事件信息 */
  302. export const getEventList = (data, callback) => get(
  303. "culturalrelicplate/work_log/getEvent" +
  304. queryParams(data, true), callback)
  305. export const getEvent = (data, callback) => get(
  306. "culturalrelicplate/work_log/getEventDetails" +
  307. queryParams(data, true), callback)
  308. export const saveedit = (data, callback) => post('saveedit', data, callback, 'culturalrelicplate/work_log/editEvent');
  309. function queryParams(data = {}, isPrefix = true, arrayFormat = 'brackets') {
  310. let prefix = isPrefix ? '?' : ''
  311. let _result = []
  312. if (['indices', 'brackets', 'repeat', 'comma'].indexOf(arrayFormat) == -1) arrayFormat = 'brackets';
  313. for (let key in data) {
  314. let value = data[key]
  315. // 去掉为空的参数
  316. if (['', undefined, null].indexOf(value) >= 0) {
  317. continue;
  318. }
  319. if (value.length > 0) {
  320. value = value.replace(/%/g, "%25");
  321. value = value.replace(/\&/g, "%26");
  322. value = value.replace(/\+/g, "%2B");
  323. }
  324. // 如果值为数组,另行处理
  325. if (value.constructor === Array) {
  326. // e.g. {ids: [1, 2, 3]}
  327. switch (arrayFormat) {
  328. case 'indices':
  329. // 结果: ids[0]=1&ids[1]=2&ids[2]=3
  330. for (let i = 0; i < value.length; i++) {
  331. _result.push(key + '[' + i + ']=' + value[i])
  332. }
  333. break;
  334. case 'brackets':
  335. // 结果: ids[]=1&ids[]=2&ids[]=3
  336. value.forEach(_value => {
  337. _result.push(key + '[]=' + _value)
  338. })
  339. break;
  340. case 'repeat':
  341. // 结果: ids=1&ids=2&ids=3
  342. value.forEach(_value => {
  343. _result.push(key + '=' + _value)
  344. })
  345. break;
  346. case 'comma':
  347. // 结果: ids=1,2,3
  348. let commaStr = "";
  349. value.forEach(_value => {
  350. commaStr += (commaStr ? "," : "") + _value;
  351. })
  352. _result.push(key + '=' + commaStr)
  353. break;
  354. default:
  355. value.forEach(_value => {
  356. _result.push(key + '[]=' + _value)
  357. })
  358. }
  359. } else {
  360. _result.push(key + '=' + value)
  361. }
  362. }
  363. return _result.length ? prefix + _result.join('&') : ''
  364. }
  365. //取CMS配置
  366. // export const getConfig = async (params = {}) => await syncget('addons/cms/api.common/init', params);