app.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. /**
  2. * jquery全局函数封装
  3. */
  4. (function ($) {
  5. /**
  6. * Jquery类方法
  7. */
  8. $.fn.extend({
  9. superForm: function (option) {
  10. // 默认选项
  11. var options = $.extend(true, {}, {
  12. buildData: $.noop,
  13. validation: $.noop,
  14. success: $.noop
  15. }, option);
  16. // 表单元素
  17. var $form = $(this), $btnSubmit = $('.j-submit');
  18. $form.validator({
  19. onValid: function (validity) {
  20. $(validity.field).next('.am-alert').hide();
  21. },
  22. /**
  23. * 显示错误信息
  24. * @param validity
  25. */
  26. onInValid: function (validity) {
  27. var $field = $(validity.field)
  28. , $group = $field.parent()
  29. , $alert = $group.find('.am-alert');
  30. if ($field.data('validationMessage') !== undefined) {
  31. // 使用自定义的提示信息 或 插件内置的提示信息
  32. var msg = $field.data('validationMessage') || this.getValidationMessage(validity);
  33. if (!$alert.length) {
  34. $alert = $('<div class="am-alert am-alert-danger"></div>').hide().appendTo($group);
  35. }
  36. $alert.html(msg).show();
  37. }
  38. },
  39. submit: function () {
  40. // console.log($form);
  41. // return false;
  42. var _this=this;
  43. // layer.confirm('是否确认提交?', {
  44. // icon: 1, //会出现正确的图片
  45. // btn: ['确定', '取消'] //按钮
  46. // }, function (index) {
  47. if (_this.isFormValid() === true) {
  48. // 自定义验证
  49. if (options.validation.call(true) === false) {
  50. return false;
  51. }
  52. // 禁用按钮, 防止二次提交
  53. $btnSubmit.attr('disabled', true);
  54. // 表单提交
  55. $form.ajaxSubmit({
  56. type: 'post',
  57. dataType: 'json',
  58. data: options.buildData.call(true),
  59. success: function (result) {
  60. if (options.success === $.noop) {
  61. result.code === 1 ? $.show_success(result.msg, result.url)
  62. : $.show_error(result.msg);
  63. } else {
  64. options.success.call(true, result);
  65. }
  66. $btnSubmit.attr('disabled', false);
  67. }
  68. });
  69. }
  70. // });
  71. return false;
  72. }
  73. });
  74. },
  75. /**
  76. * 删除元素
  77. */
  78. delete: function (index, url, msg) {
  79. $(this).click(function () {
  80. var param = {};
  81. param[index] = $(this).attr('data-id');
  82. layer.confirm(msg ? msg : '确定要删除吗?', {title: '友情提示'}
  83. , function (index) {
  84. var load=layer.load();
  85. $.post(url, param, function (result) {
  86. result.code === 1 ? $.show_success(result.msg, result.url)
  87. : $.show_error(result.msg);
  88. layer.close(load);
  89. });
  90. layer.close(index);
  91. }
  92. );
  93. });
  94. },
  95. /**
  96. * 选择图片文件
  97. * @param option
  98. */
  99. selectImages: function (option) {
  100. var $this = this
  101. // 配置项
  102. , defaults = {
  103. name: 'iFile' // input name
  104. , imagesList: '.uploader-list' // 图片列表容器
  105. , imagesItem: '.file-item' // 图片元素容器
  106. , imagesTpl: 'tpl-file-item' // 图片元素模板
  107. , imageDelete: '.file-item-delete' // 删除按钮元素
  108. , multiple: false // 是否多选
  109. , limit: null // 图片数量 (如果存在done回调函数则无效)
  110. , done: null // 选择完成后的回调函数
  111. ,maxSize:5*1024
  112. , type: []
  113. }
  114. , options = $.extend({}, defaults, option);
  115. // 显示文件库 选择文件
  116. $this.fileLibrary({
  117. type: options.type
  118. , done: function (data, $touch) {
  119. // 判断回调参数是否存在, 否则执行默认
  120. if (typeof options.done === 'function') {
  121. return options.done(data, $touch);
  122. }
  123. // 新增图片列表
  124. var list = options.multiple ? data : [data[0]];
  125. var $html = $(template(options.imagesTpl, {list: list, name: options.name}))
  126. , $imagesList = $this.next(options.imagesList);
  127. if (
  128. options.limit > 0
  129. && $imagesList.find(options.imagesItem).length + list.length > options.limit
  130. ) {
  131. layer.msg('图片数量不能大于' + options.limit + '张', {anim: 6});
  132. return false;
  133. }
  134. // 注册删除事件
  135. $html.find(options.imageDelete).click(function () {
  136. $(this).parents(options.imagesItem).remove();
  137. });
  138. // 渲染html
  139. options.multiple ? $imagesList.append($html) : $imagesList.html($html);
  140. }
  141. ,maxSize:options.maxSize
  142. });
  143. },
  144. /**
  145. * 封装:ajaxSubmit
  146. * @param option
  147. */
  148. myAjaxSubmit: function (option) {
  149. var $this = this;
  150. var options = $.extend({}, {
  151. type: 'post'
  152. , dataType: 'json'
  153. , url: ''
  154. , data: {}
  155. , success: $.noop
  156. }, option);
  157. $this.ajaxSubmit({
  158. type: options.type,
  159. dataType: options.dataType,
  160. url: options.url,
  161. data: options.data,
  162. success: function (result) {
  163. result.code === 1 ? $.show_success(result.msg, result.url)
  164. : $.show_error(result.msg);
  165. }
  166. });
  167. }
  168. });
  169. /**
  170. * Jquery全局函数
  171. */
  172. $.extend({
  173. /**
  174. * 对象转URL
  175. */
  176. urlEncode: function (data) {
  177. var _result = [];
  178. for (var key in data) {
  179. var value = null;
  180. if (data.hasOwnProperty(key)) value = data[key];
  181. if (value.constructor === Array) {
  182. value.forEach(function (_value) {
  183. _result.push(key + "[]=" + _value);
  184. });
  185. } else {
  186. _result.push(key + '=' + value);
  187. }
  188. }
  189. return _result.join('&');
  190. },
  191. /**
  192. * 操作成功弹框提示
  193. * @param msg
  194. * @param url
  195. */
  196. show_success: function (msg, url) {
  197. layer.msg(msg, {
  198. icon: 1
  199. , time: 1200
  200. // , anim: 1
  201. , shade: 0.5
  202. , end: function () {
  203. (url !== undefined && url.length > 0) ? window.location = url : window.location.reload();
  204. }
  205. });
  206. },
  207. /**
  208. * 操作失败弹框提示
  209. * @param msg
  210. * @param reload
  211. */
  212. show_error: function (msg, reload) {
  213. var time = reload ? 1200 : 0;
  214. layer.alert(msg, {
  215. title: '提示'
  216. , icon: 2
  217. , time: time
  218. , anim: 6
  219. , end: function () {
  220. reload && window.location.reload();
  221. }
  222. });
  223. },
  224. /**
  225. * 文件上传 (单文件)
  226. * 支持同一页面多个上传元素
  227. * $.uploadImage({
  228. * pick: '.upload-file', // 上传按钮
  229. * list: '.uploader-list' // 缩略图容器
  230. * });
  231. */
  232. uploadImage: function (option) {
  233. // 文件大小
  234. var maxSize = option.maxSize !== undefined ? option.maxSize : 2
  235. // 初始化Web Uploader
  236. , uploader = WebUploader.create({
  237. // 选完文件后,是否自动上传。
  238. auto: true,
  239. // 允许重复上传
  240. duplicate: true,
  241. // 文件接收服务端。
  242. server: STORE_URL + '/upload/image',
  243. // 选择文件的按钮。可选。
  244. // 内部根据当前运行是创建,可能是input元素,也可能是flash.
  245. pick: {
  246. id: option.pick,
  247. multiple: false
  248. },
  249. // 文件上传域的name
  250. fileVal: 'iFile',
  251. // 图片上传前不进行压缩
  252. compress: false,
  253. // 文件总数量
  254. // fileNumLimit: 1,
  255. // 文件大小2m => 2097152
  256. fileSingleSizeLimit: maxSize * 1024 * 1024,
  257. // 只允许选择图片文件。
  258. accept: {
  259. title: 'Images',
  260. extensions: 'gif,jpg,jpeg,bmp,png',
  261. mimeTypes: 'image/*'
  262. },
  263. // 缩略图配置
  264. thumb: {
  265. quality: 100,
  266. crop: false,
  267. allowMagnify: false
  268. },
  269. // 文件上传header扩展
  270. headers: {
  271. 'Accept': 'application/json, text/javascript, */*; q=0.01',
  272. 'X-Requested-With': 'XMLHttpRequest'
  273. }
  274. });
  275. // 验证大小
  276. uploader.on('error', function (type) {
  277. // console.log(type);
  278. if (type === "F_DUPLICATE") {
  279. // console.log("请不要重复选择文件!");
  280. } else if (type === "F_EXCEED_SIZE") {
  281. alert("文件大小不可超过" + maxSize + "m 哦!换个小点的文件吧!");
  282. }
  283. });
  284. // 当有文件添加进来的时候
  285. uploader.on('fileQueued', function (file) {
  286. var $uploadFile = $('#rt_' + file.source.ruid).parent()
  287. , $list = $uploadFile.next(option.list)
  288. , $li = $(
  289. '<div id="' + file.id + '" class="file-item thumbnail">' +
  290. '<img>' +
  291. '<input type="hidden" name="' + $uploadFile.data('name') + '" value="">' +
  292. '<i class="iconfont icon-shanchu file-item-delete"></i>' +
  293. '</div>'
  294. ),
  295. $img = $li.find('img'),
  296. $delete = $li.find('.file-item-delete');
  297. // 删除文件
  298. $delete.on('click', function () {
  299. uploader.removeFile(file);
  300. $delete.parent().remove();
  301. });
  302. // $list为容器jQuery实例
  303. $list.empty().append($li);
  304. // 创建缩略图
  305. // 如果为非图片文件,可以不用调用此方法。
  306. // thumbnailWidth x thumbnailHeight 为 100 x 100
  307. uploader.makeThumb(file, function (error, src) {
  308. if (error) {
  309. $img.replaceWith('<span>不能预览</span>');
  310. return;
  311. }
  312. $img.attr('src', src);
  313. }, 1, 1);
  314. });
  315. // 文件上传成功,给item添加成功class, 用样式标记上传成功。
  316. uploader.on('uploadSuccess', function (file, response) {
  317. if (response.code === 1) {
  318. var $item = $('#' + file.id);
  319. $item.addClass('upload-state-done')
  320. .children('input[type=hidden]').val(response.data.path);
  321. } else
  322. uploader.uploadError(file);
  323. });
  324. // 文件上传失败
  325. uploader.on('uploadError', function (file) {
  326. uploader.uploadError(file);
  327. });
  328. // 显示上传出错信息
  329. uploader.uploadError = function (file) {
  330. var $li = $('#' + file.id),
  331. $error = $li.find('div.error');
  332. // 避免重复创建
  333. if (!$error.length) {
  334. $error = $('<div class="error"></div>').appendTo($li);
  335. }
  336. $error.text('上传失败');
  337. };
  338. },
  339. /**
  340. * 显示模态对话框
  341. * @param option
  342. */
  343. showModal: function (option) {
  344. var options = $.extend({}, {
  345. title: ''
  346. , area: '340px'
  347. , closeBtn: 1
  348. , content: ''
  349. , btn: ['确定', '取消']
  350. , btnAlign: 'r'
  351. , success: $.noop
  352. , yes: $.noop
  353. , uCheck: false
  354. }, option);
  355. var $content;
  356. layer.open({
  357. type: 1
  358. , title: options.title
  359. , closeBtn: options.closeBtn
  360. , area: options.area
  361. , offset: options.offset
  362. , anim: 1
  363. , shade: 0.3
  364. , btn: options.btn
  365. , btnAlign: options.btnAlign
  366. , content: options.content
  367. , success: function (layero) {
  368. $content = layero.find('.layui-layer-content');
  369. if (options.uCheck) {
  370. $content.find("input[type='checkbox'],input[type='radio']").uCheck();
  371. }
  372. options.success.call(true, $content);
  373. }
  374. , yes: function (index) {
  375. if (options.yes.call(true, $content)) {
  376. layer.close(index);
  377. }
  378. }
  379. });
  380. },
  381. /**
  382. * 获取指定天数的日期
  383. * @param day
  384. * @returns {string}
  385. */
  386. getDay: function (day) {
  387. var today = new Date();
  388. var targetdaySeconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
  389. today.setTime(targetdaySeconds); //注意,这行是关键代码
  390. return today.getFullYear() + "-" + $.doHandleMonth(today.getMonth() + 1) + "-" + $.doHandleMonth(today.getDate());
  391. },
  392. /**
  393. * 月份补0
  394. * @param month
  395. * @returns {*}
  396. */
  397. doHandleMonth: function (month) {
  398. return (month.toString().length === 1) ? ("0" + month) : month;
  399. },
  400. /**
  401. * 二维数据查找
  402. * @param array
  403. * @param key
  404. * @param value
  405. * @returns {*}
  406. */
  407. arrayFilterMultiple: function (array, key, value) {
  408. for (var index in array) {
  409. if (array[index][key] == value) return index;
  410. }
  411. return false;
  412. }
  413. });
  414. })(jQuery);
  415. /**
  416. * app.js
  417. */
  418. $(function () {
  419. /**
  420. * 点击侧边开关 (一级)
  421. */
  422. $('.switch-button').on('click', function () {
  423. var header = $('.tpl-header'), wrapper = $('.tpl-content-wrapper'), leftSidebar = $('.left-sidebar');
  424. if (leftSidebar.css('left') !== "0px") {
  425. header.removeClass('active') && wrapper.removeClass('active') && leftSidebar.css('left', 0);
  426. } else {
  427. header.addClass('active') && wrapper.addClass('active') && leftSidebar.css('left', -280);
  428. }
  429. });
  430. /**
  431. * 侧边栏开关 (二级)
  432. */
  433. $('.sidebar-nav-sub-title').click(function () {
  434. $(this).toggleClass('active');
  435. });
  436. // 刷新按钮
  437. $('.refresh-button').click(function () {
  438. window.location.reload();
  439. });
  440. // 删除图片 (数据库已有的)
  441. $('.file-item-delete').click(function () {
  442. var $this = $(this)
  443. , noClick = $this.data('noClick')
  444. , name = $this.data('name');
  445. if (noClick) {
  446. return false;
  447. }
  448. layer.confirm('您确定要删除该' + (name ? name : '图片') + '吗?', {
  449. title: '友情提示'
  450. }, function (index) {
  451. $this.parents(".file-item").remove();
  452. layer.close(index);
  453. });
  454. });
  455. });