common.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. /**
  2. * EMA 公共工具模块
  3. */
  4. var Common = {
  5. /**
  6. * 获取请求头(包含token)
  7. */
  8. getHeaders: function() {
  9. var token = localStorage.getItem('token');
  10. var headers = {};
  11. if (token) {
  12. // 添加Bearer Token认证
  13. headers['token'] = token;
  14. }
  15. return headers;
  16. },
  17. /**
  18. * Ajax请求封装
  19. * @param {Object} options 请求配置
  20. */
  21. ajax: function(options) {
  22. var layer = layui.layer;
  23. var token = localStorage.getItem('token');
  24. // 获取请求类型
  25. var requestType = (options.type || 'GET').toUpperCase();
  26. // 构建请求配置
  27. var ajaxOptions = {
  28. url: Config.getApiUrl(options.url || ''),
  29. type: requestType,
  30. dataType: 'json',
  31. headers: this.getHeaders(),
  32. beforeSend: function(xhr) {
  33. // 确保token在请求头中
  34. if (token) {
  35. xhr.setRequestHeader('token', token);
  36. }
  37. if (options.loading !== false) {
  38. layer.load(2, { shade: [0.3, '#000'] });
  39. }
  40. },
  41. complete: function() {
  42. if (options.loading !== false) {
  43. layer.closeAll('loading');
  44. }
  45. },
  46. success: function(res) {
  47. if (res.code === 401 || res.code === 403 || (res.msg && res.msg.indexOf('登录') !== -1)) {
  48. layer.msg('登录已过期,请重新登录', { icon: 2 }, function() {
  49. localStorage.clear();
  50. parent.location.href = '../index.html';
  51. });
  52. return;
  53. }
  54. options.success && options.success(res);
  55. },
  56. error: function(xhr) {
  57. var msg = '请求失败';
  58. if (xhr.status === 401) {
  59. layer.msg('登录已过期,请重新登录', { icon: 2 }, function() {
  60. localStorage.clear();
  61. parent.location.href = '../index.html';
  62. });
  63. return;
  64. } else if (xhr.status === 404) {
  65. msg = '接口不存在';
  66. } else if (xhr.status === 500) {
  67. msg = '服务器错误';
  68. } else if (xhr.status === 0) {
  69. msg = '网络连接失败,请检查网络';
  70. }
  71. options.error && options.error(xhr) || layer.msg(msg, { icon: 2 });
  72. }
  73. };
  74. // POST/PUT 请求使用 JSON 格式放入请求体
  75. if (requestType === 'POST' || requestType === 'PUT') {
  76. ajaxOptions.contentType = 'application/json;charset=UTF-8';
  77. if (options.data) {
  78. ajaxOptions.data = JSON.stringify(options.data);
  79. } else {
  80. ajaxOptions.data = '{}';
  81. }
  82. } else {
  83. // GET/DELETE 请求数据作为查询参数
  84. ajaxOptions.data = options.data;
  85. }
  86. $.ajax(ajaxOptions);
  87. },
  88. /**
  89. * GET请求
  90. */
  91. get: function(url, data, success, error) {
  92. var options = { url: url, type: 'GET' };
  93. if (typeof data === 'function') {
  94. options.success = data;
  95. } else {
  96. options.data = data;
  97. options.success = success;
  98. }
  99. options.error = error;
  100. this.ajax(options);
  101. },
  102. /**
  103. * POST请求
  104. */
  105. post: function(url, data, success, error) {
  106. this.ajax({
  107. url: url,
  108. type: 'POST',
  109. data: data,
  110. success: success,
  111. error: error
  112. });
  113. },
  114. /**
  115. * PUT请求
  116. */
  117. put: function(url, data, success, error) {
  118. this.ajax({
  119. url: url,
  120. type: 'PUT',
  121. data: data,
  122. success: success,
  123. error: error
  124. });
  125. },
  126. /**
  127. * DELETE请求
  128. */
  129. del: function(url, success, error) {
  130. this.ajax({
  131. url: url,
  132. type: 'DELETE',
  133. success: success,
  134. error: error
  135. });
  136. },
  137. /**
  138. * 打开弹窗
  139. * @param {Object} options 配置
  140. */
  141. open: function(options) {
  142. var layer = layui.layer;
  143. var defaults = {
  144. type: 2,
  145. shade: 0.3,
  146. anim: -1,
  147. maxmin: true,
  148. moveOut: true
  149. };
  150. return layer.open($.extend(defaults, options));
  151. },
  152. /**
  153. * 确认对话框
  154. */
  155. confirm: function(content, callback) {
  156. var layer = layui.layer;
  157. layer.confirm(content, { icon: 3, title: '提示' }, function(index) {
  158. callback && callback();
  159. layer.close(index);
  160. });
  161. },
  162. /**
  163. * 成功提示
  164. */
  165. success: function(msg, callback) {
  166. var layer = layui.layer;
  167. layer.msg(msg, { icon: 1 }, callback);
  168. },
  169. /**
  170. * 失败提示
  171. */
  172. error: function(msg, callback) {
  173. var layer = layui.layer;
  174. layer.msg(msg, { icon: 2 }, callback);
  175. },
  176. /**
  177. * 获取URL参数
  178. */
  179. getQueryString: function(name) {
  180. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  181. var r = window.location.search.substr(1).match(reg);
  182. return r != null ? decodeURIComponent(r[2]) : null;
  183. },
  184. /**
  185. * 格式化日期
  186. */
  187. formatDate: function(date, format) {
  188. if (!date) return '';
  189. date = typeof date === 'string' ? new Date(date.replace(/-/g, '/')) : date;
  190. format = format || 'yyyy-MM-dd HH:mm:ss';
  191. var o = {
  192. 'M+': date.getMonth() + 1,
  193. 'd+': date.getDate(),
  194. 'H+': date.getHours(),
  195. 'h+': date.getHours() % 12 || 12,
  196. 'm+': date.getMinutes(),
  197. 's+': date.getSeconds(),
  198. 'q+': Math.floor((date.getMonth() + 3) / 3),
  199. 'S': date.getMilliseconds()
  200. };
  201. if (/(y+)/.test(format)) {
  202. format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  203. }
  204. for (var k in o) {
  205. if (new RegExp('(' + k + ')').test(format)) {
  206. format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
  207. }
  208. }
  209. return format;
  210. },
  211. /**
  212. * 获取状态标签
  213. */
  214. getStatusBadge: function(status, map) {
  215. map = map || { '1': '正常', '0': '停用' };
  216. var config = {
  217. '1': { class: 'layui-btn-xs', color: 'green' },
  218. '0': { class: 'layui-btn-xs layui-btn-primary', color: 'gray' }
  219. };
  220. var text = map[status] || status;
  221. var c = config[status] || config['0'];
  222. return '<span class="layui-badge-' + c.color + ' ' + c.class + '">' + text + '</span>';
  223. },
  224. /**
  225. * 获取用户信息
  226. */
  227. getUserInfo: function() {
  228. var userInfo = localStorage.getItem('userInfo');
  229. return userInfo ? JSON.parse(userInfo) : null;
  230. },
  231. /**
  232. * 检查登录状态
  233. */
  234. checkLogin: function() {
  235. var token = localStorage.getItem('token');
  236. if (!token) {
  237. parent.location.href = '../index.html';
  238. return false;
  239. }
  240. return true;
  241. }
  242. };
  243. /**
  244. * 表格渲染封装
  245. */
  246. var TableRender = {
  247. /**
  248. * 获取表格请求头
  249. */
  250. getTableHeaders: function() {
  251. var token = localStorage.getItem('token');
  252. var headers = {};
  253. if (token) {
  254. headers['Authorization'] = 'Bearer ' + token;
  255. }
  256. return headers;
  257. },
  258. /**
  259. * 初始化表格
  260. */
  261. init: function(options) {
  262. var table = layui.table;
  263. var defaults = {
  264. method: 'POST',
  265. contentType: 'application/json',
  266. headers: this.getTableHeaders(),
  267. request: {
  268. pageName: 'pageNumber',
  269. limitName: 'pageSize'
  270. },
  271. response: {
  272. statusName: 'code',
  273. statusCode: 200,
  274. msgName: 'msg',
  275. dataName: 'data',
  276. countName: 'total'
  277. },
  278. parseData: function(res) {
  279. return {
  280. code: res.code,
  281. msg: res.msg,
  282. count: res.data ? res.data.totalRow : 0,
  283. data: res.data ? res.data.list : []
  284. };
  285. },
  286. before: function(req) {
  287. // layui table 会在请求前调用此方法
  288. var token = localStorage.getItem('token');
  289. if (token) {
  290. req.headers = req.headers || {};
  291. req.headers['Authorization'] = 'Bearer ' + token;
  292. }
  293. }
  294. };
  295. return table.render($.extend(defaults, options));
  296. },
  297. /**
  298. * 重新加载表格
  299. */
  300. reload: function(tableId, options) {
  301. var table = layui.table;
  302. var defaultOptions = {
  303. where: {},
  304. page: { curr: 1 }
  305. };
  306. table.reload(tableId, $.extend(defaultOptions, options));
  307. }
  308. };