468 lines
17 KiB
JavaScript
468 lines
17 KiB
JavaScript
|
/**
|
|||
|
* jquery全局函数封装
|
|||
|
*/
|
|||
|
(function ($) {
|
|||
|
/**
|
|||
|
* Jquery类方法
|
|||
|
*/
|
|||
|
$.fn.extend({
|
|||
|
|
|||
|
superForm: function (option) {
|
|||
|
// 默认选项
|
|||
|
var options = $.extend(true, {}, {
|
|||
|
buildData: $.noop,
|
|||
|
validation: $.noop,
|
|||
|
success: $.noop
|
|||
|
}, option);
|
|||
|
// 表单元素
|
|||
|
var $form = $(this), $btnSubmit = $('.j-submit');
|
|||
|
$form.validator({
|
|||
|
onValid: function (validity) {
|
|||
|
$(validity.field).next('.am-alert').hide();
|
|||
|
},
|
|||
|
/**
|
|||
|
* 显示错误信息
|
|||
|
* @param validity
|
|||
|
*/
|
|||
|
onInValid: function (validity) {
|
|||
|
var $field = $(validity.field)
|
|||
|
, $group = $field.parent()
|
|||
|
, $alert = $group.find('.am-alert');
|
|||
|
if ($field.data('validationMessage') !== undefined) {
|
|||
|
// 使用自定义的提示信息 或 插件内置的提示信息
|
|||
|
var msg = $field.data('validationMessage') || this.getValidationMessage(validity);
|
|||
|
if (!$alert.length) {
|
|||
|
$alert = $('<div class="am-alert am-alert-danger"></div>').hide().appendTo($group);
|
|||
|
}
|
|||
|
$alert.html(msg).show();
|
|||
|
}
|
|||
|
},
|
|||
|
submit: function () {
|
|||
|
if (this.isFormValid() === true) {
|
|||
|
// 自定义验证
|
|||
|
if (options.validation.call(true) === false) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
// 禁用按钮, 防止二次提交
|
|||
|
$btnSubmit.attr('disabled', true);
|
|||
|
// 表单提交
|
|||
|
$form.ajaxSubmit({
|
|||
|
type: 'post',
|
|||
|
dataType: 'json',
|
|||
|
data: options.buildData.call(true),
|
|||
|
success: function (result) {
|
|||
|
if (options.success === $.noop) {
|
|||
|
result.code === 1 ? $.show_success(result.msg, result.url)
|
|||
|
: $.show_error(result.msg);
|
|||
|
} else {
|
|||
|
options.success.call(true, result);
|
|||
|
}
|
|||
|
$btnSubmit.attr('disabled', false);
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* 删除元素
|
|||
|
*/
|
|||
|
delete: function (index, url, msg) {
|
|||
|
$(this).click(function () {
|
|||
|
var param = {};
|
|||
|
param[index] = $(this).attr('data-id');
|
|||
|
layer.confirm(msg ? msg : '确定要删除吗?', {title: '友情提示'}
|
|||
|
, function (index) {
|
|||
|
$.post(url, param, function (result) {
|
|||
|
result.code === 1 ? $.show_success(result.msg, result.url)
|
|||
|
: $.show_error(result.msg);
|
|||
|
});
|
|||
|
layer.close(index);
|
|||
|
}
|
|||
|
);
|
|||
|
});
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* 选择图片文件
|
|||
|
* @param option
|
|||
|
*/
|
|||
|
selectImages: function (option) {
|
|||
|
var $this = this
|
|||
|
// 配置项
|
|||
|
, defaults = {
|
|||
|
name: 'iFile' // input name
|
|||
|
, imagesList: '.uploader-list' // 图片列表容器
|
|||
|
, imagesItem: '.file-item' // 图片元素容器
|
|||
|
, imageDelete: '.file-item-delete' // 删除按钮元素
|
|||
|
, multiple: false // 是否多选
|
|||
|
, limit: null // 图片数量 (如果存在done回调函数则无效)
|
|||
|
, done: null // 选择完成后的回调函数
|
|||
|
}
|
|||
|
, options = $.extend({}, defaults, option);
|
|||
|
// 显示文件库 选择文件
|
|||
|
$this.fileLibrary({
|
|||
|
type: 'image'
|
|||
|
, done: function (data, $touch) {
|
|||
|
// 判断回调参数是否存在, 否则执行默认
|
|||
|
if (typeof options.done === 'function') {
|
|||
|
return options.done(data, $touch);
|
|||
|
}
|
|||
|
// 新增图片列表
|
|||
|
var list = options.multiple ? data : [data[0]];
|
|||
|
var $html = $(template('tpl-file-item', {list: list, name: options.name}))
|
|||
|
, $imagesList = $this.next(options.imagesList);
|
|||
|
if (
|
|||
|
options.limit > 0
|
|||
|
&& $imagesList.find(options.imagesItem).length + list.length > options.limit
|
|||
|
) {
|
|||
|
layer.msg('图片数量不能大于' + options.limit + '张', {anim: 6});
|
|||
|
return false;
|
|||
|
}
|
|||
|
// 注册删除事件
|
|||
|
$html.find(options.imageDelete).click(function () {
|
|||
|
$(this).parent().remove();
|
|||
|
});
|
|||
|
// 渲染html
|
|||
|
options.multiple ? $imagesList.append($html) : $imagesList.html($html);
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* 封装:ajaxSubmit
|
|||
|
* @param option
|
|||
|
*/
|
|||
|
myAjaxSubmit: function (option) {
|
|||
|
var $this = this;
|
|||
|
var options = $.extend({}, {
|
|||
|
type: 'post'
|
|||
|
, dataType: 'json'
|
|||
|
, url: ''
|
|||
|
, data: {}
|
|||
|
, success: $.noop
|
|||
|
}, option);
|
|||
|
$this.ajaxSubmit({
|
|||
|
type: options.type,
|
|||
|
dataType: options.dataType,
|
|||
|
url: options.url,
|
|||
|
data: options.data,
|
|||
|
success: function (result) {
|
|||
|
result.code === 1 ? $.show_success(result.msg, result.url)
|
|||
|
: $.show_error(result.msg);
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
/**
|
|||
|
* Jquery全局函数
|
|||
|
*/
|
|||
|
$.extend({
|
|||
|
|
|||
|
/**
|
|||
|
* 对象转URL
|
|||
|
*/
|
|||
|
urlEncode: function (data) {
|
|||
|
var _result = [];
|
|||
|
for (var key in data) {
|
|||
|
var value = null;
|
|||
|
if (data.hasOwnProperty(key)) value = data[key];
|
|||
|
if (value.constructor === Array) {
|
|||
|
value.forEach(function (_value) {
|
|||
|
_result.push(key + "=" + _value);
|
|||
|
});
|
|||
|
} else {
|
|||
|
_result.push(key + '=' + value);
|
|||
|
}
|
|||
|
}
|
|||
|
return _result.join('&');
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* 操作成功弹框提示
|
|||
|
* @param msg
|
|||
|
* @param url
|
|||
|
*/
|
|||
|
show_success: function (msg, url) {
|
|||
|
layer.msg(msg, {
|
|||
|
icon: 1
|
|||
|
, time: 1200
|
|||
|
// , anim: 1
|
|||
|
, shade: 0.5
|
|||
|
, end: function () {
|
|||
|
(url !== undefined && url.length > 0) ? window.location = url : window.location.reload();
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* 操作失败弹框提示
|
|||
|
* @param msg
|
|||
|
* @param reload
|
|||
|
*/
|
|||
|
show_error: function (msg, reload) {
|
|||
|
var time = reload ? 1200 : 0;
|
|||
|
layer.alert(msg, {
|
|||
|
title: '提示'
|
|||
|
, icon: 2
|
|||
|
, time: time
|
|||
|
, anim: 6
|
|||
|
, end: function () {
|
|||
|
reload && window.location.reload();
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* 文件上传 (单文件)
|
|||
|
* 支持同一页面多个上传元素
|
|||
|
* $.uploadImage({
|
|||
|
* pick: '.upload-file', // 上传按钮
|
|||
|
* list: '.uploader-list' // 缩略图容器
|
|||
|
* });
|
|||
|
*/
|
|||
|
uploadImage: function (option) {
|
|||
|
// 文件大小
|
|||
|
var maxSize = option.maxSize !== undefined ? option.maxSize : 2
|
|||
|
// 初始化Web Uploader
|
|||
|
, uploader = WebUploader.create({
|
|||
|
// 选完文件后,是否自动上传。
|
|||
|
auto: true,
|
|||
|
// 允许重复上传
|
|||
|
duplicate: true,
|
|||
|
// 文件接收服务端。
|
|||
|
server: STORE_URL + '/upload/image',
|
|||
|
// 选择文件的按钮。可选。
|
|||
|
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
|
|||
|
pick: {
|
|||
|
id: option.pick,
|
|||
|
multiple: false
|
|||
|
},
|
|||
|
// 文件上传域的name
|
|||
|
fileVal: 'iFile',
|
|||
|
// 图片上传前不进行压缩
|
|||
|
compress: false,
|
|||
|
// 文件总数量
|
|||
|
// fileNumLimit: 1,
|
|||
|
// 文件大小2m => 2097152
|
|||
|
fileSingleSizeLimit: maxSize * 1024 * 1024,
|
|||
|
// 只允许选择图片文件。
|
|||
|
accept: {
|
|||
|
title: 'Images',
|
|||
|
extensions: 'gif,jpg,jpeg,bmp,png',
|
|||
|
mimeTypes: 'image/*'
|
|||
|
},
|
|||
|
// 缩略图配置
|
|||
|
thumb: {
|
|||
|
quality: 100,
|
|||
|
crop: false,
|
|||
|
allowMagnify: false
|
|||
|
},
|
|||
|
// 文件上传header扩展
|
|||
|
headers: {
|
|||
|
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
|||
|
'X-Requested-With': 'XMLHttpRequest'
|
|||
|
}
|
|||
|
});
|
|||
|
// 验证大小
|
|||
|
uploader.on('error', function (type) {
|
|||
|
// console.log(type);
|
|||
|
if (type === "F_DUPLICATE") {
|
|||
|
// console.log("请不要重复选择文件!");
|
|||
|
} else if (type === "F_EXCEED_SIZE") {
|
|||
|
alert("文件大小不可超过" + maxSize + "m 哦!换个小点的文件吧!");
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
// 当有文件添加进来的时候
|
|||
|
uploader.on('fileQueued', function (file) {
|
|||
|
var $uploadFile = $('#rt_' + file.source.ruid).parent()
|
|||
|
, $list = $uploadFile.next(option.list)
|
|||
|
, $li = $(
|
|||
|
'<div id="' + file.id + '" class="file-item thumbnail">' +
|
|||
|
'<img>' +
|
|||
|
'<input type="hidden" name="' + $uploadFile.data('name') + '" value="">' +
|
|||
|
'<i class="iconfont icon-shanchu file-item-delete"></i>' +
|
|||
|
'</div>'
|
|||
|
),
|
|||
|
$img = $li.find('img'),
|
|||
|
$delete = $li.find('.file-item-delete');
|
|||
|
// 删除文件
|
|||
|
$delete.on('click', function () {
|
|||
|
uploader.removeFile(file);
|
|||
|
$delete.parent().remove();
|
|||
|
});
|
|||
|
// $list为容器jQuery实例
|
|||
|
$list.empty().append($li);
|
|||
|
// 创建缩略图
|
|||
|
// 如果为非图片文件,可以不用调用此方法。
|
|||
|
// thumbnailWidth x thumbnailHeight 为 100 x 100
|
|||
|
uploader.makeThumb(file, function (error, src) {
|
|||
|
if (error) {
|
|||
|
$img.replaceWith('<span>不能预览</span>');
|
|||
|
return;
|
|||
|
}
|
|||
|
$img.attr('src', src);
|
|||
|
}, 1, 1);
|
|||
|
});
|
|||
|
// 文件上传成功,给item添加成功class, 用样式标记上传成功。
|
|||
|
uploader.on('uploadSuccess', function (file, response) {
|
|||
|
if (response.code === 1) {
|
|||
|
var $item = $('#' + file.id);
|
|||
|
$item.addClass('upload-state-done')
|
|||
|
.children('input[type=hidden]').val(response.data.path);
|
|||
|
} else
|
|||
|
uploader.uploadError(file);
|
|||
|
});
|
|||
|
// 文件上传失败
|
|||
|
uploader.on('uploadError', function (file) {
|
|||
|
uploader.uploadError(file);
|
|||
|
});
|
|||
|
// 显示上传出错信息
|
|||
|
uploader.uploadError = function (file) {
|
|||
|
var $li = $('#' + file.id),
|
|||
|
$error = $li.find('div.error');
|
|||
|
// 避免重复创建
|
|||
|
if (!$error.length) {
|
|||
|
$error = $('<div class="error"></div>').appendTo($li);
|
|||
|
}
|
|||
|
$error.text('上传失败');
|
|||
|
};
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* 显示模态对话框
|
|||
|
* @param option
|
|||
|
*/
|
|||
|
showModal: function (option) {
|
|||
|
var options = $.extend({}, {
|
|||
|
title: ''
|
|||
|
, area: '340px'
|
|||
|
, closeBtn: 1
|
|||
|
, content: ''
|
|||
|
, btn: ['确定', '取消']
|
|||
|
, btnAlign: 'r'
|
|||
|
, success: $.noop
|
|||
|
, yes: $.noop
|
|||
|
, uCheck: false
|
|||
|
}, option);
|
|||
|
|
|||
|
var $content;
|
|||
|
layer.open({
|
|||
|
type: 1
|
|||
|
, title: options.title
|
|||
|
, closeBtn: options.closeBtn
|
|||
|
, area: options.area
|
|||
|
, offset: 'auto'
|
|||
|
, anim: 1
|
|||
|
, shade: 0.3
|
|||
|
, btn: options.btn
|
|||
|
, btnAlign: options.btnAlign
|
|||
|
, content: options.content
|
|||
|
, success: function (layero) {
|
|||
|
$content = layero.find('.layui-layer-content');
|
|||
|
if (options.uCheck) {
|
|||
|
$content.find("input[type='checkbox'],input[type='radio']").uCheck();
|
|||
|
}
|
|||
|
options.success.call(true, $content);
|
|||
|
}
|
|||
|
, yes: function (index) {
|
|||
|
if (options.yes.call(true, $content)) {
|
|||
|
layer.close(index);
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* 获取指定天数的日期
|
|||
|
* @param day
|
|||
|
* @returns {string}
|
|||
|
*/
|
|||
|
getDay: function (day) {
|
|||
|
var today = new Date();
|
|||
|
var targetdaySeconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
|
|||
|
today.setTime(targetdaySeconds); //注意,这行是关键代码
|
|||
|
return today.getFullYear() + "-" + $.doHandleMonth(today.getMonth() + 1) + "-" + $.doHandleMonth(today.getDate());
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* 月份补0
|
|||
|
* @param month
|
|||
|
* @returns {*}
|
|||
|
*/
|
|||
|
doHandleMonth: function (month) {
|
|||
|
return (month.toString().length === 1) ? ("0" + month) : month;
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* 二维数据查找
|
|||
|
* @param array
|
|||
|
* @param key
|
|||
|
* @param value
|
|||
|
* @returns {*}
|
|||
|
*/
|
|||
|
arrayFilterMultiple: function (array, key, value) {
|
|||
|
for (var index in array) {
|
|||
|
if (array[index][key] == value) return index;
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
});
|
|||
|
|
|||
|
})(jQuery);
|
|||
|
|
|||
|
/**
|
|||
|
* app.js
|
|||
|
*/
|
|||
|
$(function () {
|
|||
|
|
|||
|
/**
|
|||
|
* 点击侧边开关 (一级)
|
|||
|
*/
|
|||
|
$('.switch-button').on('click', function () {
|
|||
|
var header = $('.tpl-header'), wrapper = $('.tpl-content-wrapper'), leftSidebar = $('.left-sidebar');
|
|||
|
if (leftSidebar.css('left') !== "0px") {
|
|||
|
header.removeClass('active') && wrapper.removeClass('active') && leftSidebar.css('left', 0);
|
|||
|
} else {
|
|||
|
header.addClass('active') && wrapper.addClass('active') && leftSidebar.css('left', -280);
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
/**
|
|||
|
* 侧边栏开关 (二级)
|
|||
|
*/
|
|||
|
$('.sidebar-nav-sub-title').click(function () {
|
|||
|
$(this).toggleClass('active');
|
|||
|
});
|
|||
|
|
|||
|
// 刷新按钮
|
|||
|
$('.refresh-button').click(function () {
|
|||
|
window.location.reload();
|
|||
|
});
|
|||
|
|
|||
|
// 删除图片 (数据库已有的)
|
|||
|
$('.file-item-delete').click(function () {
|
|||
|
var $this = $(this)
|
|||
|
, noClick = $this.data('noClick')
|
|||
|
, name = $this.data('name');
|
|||
|
|
|||
|
if (noClick) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
layer.confirm('您确定要删除该' + (name ? name : '图片') + '吗?', {
|
|||
|
title: '友情提示'
|
|||
|
}, function (index) {
|
|||
|
$this.parent().remove();
|
|||
|
layer.close(index);
|
|||
|
});
|
|||
|
});
|
|||
|
|
|||
|
});
|