This repository has been archived on 2024-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
yoshop/web/assets/store/js/app.js
2020-04-25 22:20:29 +08:00

468 lines
17 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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);
});
});
});