Files
swiftadmin/public/static/js/common.js
2022-11-28 19:11:12 +08:00

467 lines
16 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.
/**
* 前端CommonJS
* 默认提供一些基础的页面交互操作
* 注插件开发请勿直接将JS代码写入此文件
*/
layui.use(['jquery','form','upload','table','dropdown'], function(){
let $ = layui.$;
let form = layui.form;
let layer = layui.layer;
let table = layui.table;
let upload = layui.upload;
let dropdown = layui.dropdown;
/**
* 短消息下拉框
* @param count
*/
window.bellMessage = function (count) {
let msg = dropdown.render({
elem: '#notice'
, trigger: 'hover'
, align: 'center'
, data: [{
title: !count ? '暂无消息' : '您有<b class="msg">' + count + '</b>条未读消息'
}], ready: function (elemPanel, elem) {
}
, click: function (data, othis) {
let elem = $('.layui-nav-tree li [lay-href="/user/message"]');
$(elem).parents('.layui-nav-item').addClass('layui-nav-itemed');
$(elem).trigger('click');
}
});
}
// 注册为全局对象
window.Home = {
screen: function(){
let width =$(window).width()
if(width > 1200){
return 3; //大屏幕
} else if(width > 992){
return 2; //中屏幕
} else if(width > 768){
return 1; //小屏幕
} else {
return 0; //超小屏幕
}
},
event: {
closeDialog:function(that) {
that = that || this;
let _type = $(that).parents(".layui-layer").attr("type");
if (typeof _type === "undefined") {
parent.layer.close(parent.layer.getFrameIndex(window.name));
}else {
let layerId = $(that).parents(".layui-layer").attr("id").substring(11);
layer.close(layerId);
}
}
},
// cookie
Cookie : { // 获取cookies
'Set': function (name, value, days) {
let exp = new Date();
exp.setTime(exp.getTime() + days * 24 * 60 * 60 * 1000);
let arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
document.cookie = name + "=" + escape(value) + ";path=/;expires=" + exp.toUTCString();
},
'Get': function (name) {
let arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
if (arr != null) {
return unescape(arr[2]);
return null;
}
},
'Del': function (name) {
let exp = new Date();
exp.setTime(exp.getTime() - 1);
let cval = this.Get(name);
if (cval != null) {
document.cookie = name + "=" + escape(cval) + ";path=/;expires=" + exp.toUTCString();
}
}
}
}
// 监听全局form表单
form.on('submit(submitIframe)', function(data){
let that = $(this), _form = that.parents('form'),
_url = _form.attr("action") || false,
_close = that.data("close") || undefined,
_reload = that.data('reload');
$.post(_url,
data.field,function(res){
if(res.code === 200){
top.layer.msg(res.msg);
switch (_reload) {
case 'top':
top.location.reload();
break;
case 'parent':
parent.location.reload();
break;
case 'self':
location.reload();
break;
default:
}
if (typeof res.url !== 'undefined' && res.url) {
location.href = res.url;
}
// 默认关闭
if (_close === undefined) {
Home.event.closeDialog(that);
}
}
else{
top.layui.layer.msg(res.msg,'error');
}
try {
/**
* token重载下
* 框架也需要更新
*/
if (typeof res.data.__token__ !== 'undefined') {
$('input#__token__').val(res.data.__token__);
}
} catch (e) {}
}, 'json');
return false;
})
/**
* 监听form表单搜索
*/
form.on('submit(formSearch)', function (data) {
var field = data.field;
for (const key in field) {
if (!field[key]) {
delete field[key];
}
}
layui.table.reload('lay-tableList', {
page: {curr: 1},
where: field
});
})
// 监听全局事件
$(document).on("click", "*[sa-event]", function () {
let name = $(this).attr("sa-event");
let obj = Home.event[name];
obj && obj.call(this, $(this));
});
var uploadURL = '/index/user/upload';
layui.each($('*[lay-upload]'), function (index, elem) {
var that = $(this),
name = $(elem).attr('lay-upload') || undefined,
type = $(elem).data('type') || 'normal',
size = $(elem).data('size') || 51200, // 限制最大5M
accept = $(elem).data('accept') || 'images',
multiple = $(elem).data('multiple') || false,
callback = $(elem).attr('callback') || undefined;
// 文件上传函数
var uploadFiles = {
normal: function (res, name) {
$('input.' + name).prop('value', res.url);
$('img.' + name).prop('src', res.url);
},
images: function (res, name) {
var o = $('img.' + name);
o.prop('src', res.url);
o.parent('div').removeClass('layui-hide');
$('input.' + name).val(res.url);
$(elem).find('p,i,hr').addClass('layui-hide');
},
multiple: function (res, name) {
var index = $('.layui-imagesbox .layui-input-inline');
index = index.length ? index.length - 1 : 0;
var html = '<div class="layui-input-inline">';
html += '<img src="' + res.url + '" >';
html += '<input type="text" name="' + name + '[' + index + '][src]" class="layui-hide" value="' + res.url + '">';
html += '<input type="text" name="' + name + '[' + index + '][title]" class="layui-input" placeholder="图片简介">';
html += '<span class="layui-badge layui-badge-red" onclick="layui.$(this).parent().remove();">删除</span></div>';
$(elem).parent().before(html);
}
}
// 执行上传操作
upload.render({
elem: elem
, url: uploadURL
, method: 'post'
, size: size
, accept: 'file'
, before: function (res) {
// 关闭按钮点击
that.prop("disabled", true);
}, done: function (res, index, file) {
that.prop("disabled", false);
if (res.code === 200 && res.url !== '') {
if (typeof res.chunkId != 'undefined' ) {
layer.close(window[res.chunkId]);
}
layer.msg(res.msg);
uploadFiles[type](res, name);
} else {
// 错误消息
layer.error(res.msg);
that.prop("disabled", false);
}
}
})
})
// 全局监听打开窗口
$(document).on('click',"*[lay-open]",function(){
let clickthis = $(this),
config = {
url: clickthis.data('url') || undefined,
object: clickthis.data('object') || 'self',
type: clickthis.data('type') || 2,
area: clickthis.data('area') || "auto",
offset: clickthis.data('offset') || "25%",
title: clickthis.data('title') || false,
maxmin: clickthis.data('maxmin') || false,
auto: clickthis.data('auto') || "undefined",
iframeAuto: false
}
let firstURL = config.url.substring(0, 1);
if (firstURL && firstURL === '#') {
config.type = 1;
config.url = $(config.url).html();
}
if (config.area !== "auto") {
config.area = config.area.split(',');
if (config.area.length === 2 && config.area[1] === '100%') {
config.offset = 0;
if (typeof config.url == 'object') {
config.url = config.url[0];
}
} else if (config.area.length === 1) {
config.iframeAuto = true;
}
}
var layObject = self;
if (config.object === 'top') {
layObject = top;
} else if (config.object === 'parent') {
layObject = parent;
}
// 打开窗口
layObject.layer.open({
type: config.type,
area: config.area,
title: config.title,
offset: config.offset,
maxmin: config.maxmin,
shadeClose: true,
scrollbar: true,
content: config.url,
success:function(layero,index){
config.iframeAuto && layer.iframeAuto(index);
// 页面层才渲染
if (config.type === 1) {
layui.form.render();
layui.form.on("submit(submitPage)",function(post){
let that = $(this), _pageUrl = that.parents('form').attr('action');
// 开始POST提交数据
$.post(_pageUrl,
post.field, function(res){
if (res.code === 200) {
Home.event.closeDialog(that);
if ($(that).data('reload')) {
location.reload();
}
layer.msg(res.msg);
} else {
layer.msg(res.msg,'error');
}
}, 'json');
return false;
})
}
}
})
})
$(document).on("click", "*[lay-batch]", function (obj) {
var othis = $(this)
, tableId = othis.data("table") || null
, fields = othis.data("field") || undefined
, list = table.checkStatus(tableId);
var field = ['id'];
if (typeof fields !== 'undefined') {
field = field.concat(fields.split(','));
}
if (list.data.length === 0) {
layer.msg('请勾选数据', 'error');
return false;
}
var data = {};
for (var n in field) {
var e = field[n];
field[e] = [];
for (var i in list.data) {
field[e].push(list.data[i][e]);
}
data[e] = field[e];
}
layer.confirm('确定执行批量操作', function (index) {
$.ajax({
url: othis.data("url"),
type: 'post',
data: data,
dataType: 'json',
success: function (res) {
if (res.code === 200) {
layer.msg(res.msg);
table.reload(tableId);
} else {
layer.msg(res.msg, 'error');
}
}
})
layer.close(index);
})
})
// 监听ajax操作
$(document).on("click","*[lay-ajax]",function(obj) {
let clickthis = $(this),config = {
url : clickthis.attr('data-url')|| "undefined",
type : clickthis.data('type') || 'post',
dataType : clickthis.data('dataType') || 'json',
timeout : clickthis.data('timeout') || '6000',
tableId : clickthis.data('table') || clickthis.data('batch'),
reload : clickthis.data('reload'),
jump : clickthis.data('jump') || false,
confirm : clickthis.data('confirm'),
}, defer = $.Deferred();
// 定义初始化对象
let data = {}
// 获取拼接参数
, packet = clickthis.attr("data-data") || null
, object = clickthis.attr("data-object") || undefined;
if (config.confirm !== undefined) {
config.confirm = config.confirm || '确定执行此操作吗?';
layer.confirm(config.confirm, function(index){
runAjax(config);
layer.close(index);
},function(index){
layer.close(index);
return false;
})
}
// 传递类数据
if (typeof object !== "undefined") {
object = object.split(',');
for (let i = 0; i < object.length; i++) {
let ele = object[i].split(":");
let val = $('.'+ele[1]).val();
data[ele[0]] = val;
}
}
// 传递对象数据
if (packet !== 'null') {
packet = new Function("return "+packet)();
data = $.extend({},data,packet);
}
// 传递input表单数据
let input = clickthis.data('input') || undefined;
if (typeof input !== undefined) {
let attribute = layui.$('.'+input).val();
}
// 回调函数
let runAjax = function(config) {
// 执行AJAX操作
$.ajax({
url: config.url,
type: config.type,
dataType: config.dataType,
timeout: config.timeout,
data: data,
// 需要支持跨域访问
xhrFields: {
withCredentials: true
},
crossDomain: true,
success: function(res) {
if (res.code === 200) {
layer.msg(res.msg);
if (typeof res.data.text !== 'undefined') {
$(clickthis).text(res.data.text);
}
switch (config.reload) {
case 'top':
top.location.reload();
break;
case 'parent':
parent.location.reload();
break;
case 'self':
location.reload();
break;
default:
}
if (typeof (config.tableId) !== "undefined") {
layui.table.reload(config.tableId);
}
} else {
layer.msg(res.msg,'error');
}
},
error: function(res) {
layer.msg('Access methods failure','error');
}
})
}
if (!config.confirm) {
runAjax(config);
}
})
})