Files
swiftadmin/public/static/js/common.js
2022-08-19 19:48:37 +08:00

403 lines
14 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.
/**
* SAPHP 前端CommonJS
* 默认提供一些基础的页面交互操作
* 注插件开发请勿直接将JS代码写入此文件
*/
layui.use(['jquery','form','upload'], function(){
let $ = layui.$;
let form = layui.form;
let layer = layui.layer;
let upload = layui.upload;
// 注册为全局对象
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 = '/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;
})
}
}
})
})
// 监听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);
}
})
})