caipan_shop_admin/public/static/manager/js/common.js

880 lines
36 KiB
JavaScript
Raw Normal View History

2022-05-25 11:35:57 +00:00
const _token = '';
let insTb;
let Tools = {
getInsTb: function () {
return insTb;
},
setInsTb: function (ins) {
insTb = ins;
}
}
layui.use(['jquery', 'form', 'layer', 'miniTab', 'laytpl', 'table', 'skuTable'], function () {
let $ = layui.jquery, form = layui.form, layer = layui.layer,
miniTab = layui.miniTab,
skuTable = layui.skuTable,
table = layui.table;
let modifyUrl = $('#row-modify').data('url');
miniTab.listen();
//页面加载时,根据需要加载富文本编辑器
if ($('.editor').length) {
editor();
}
//监听配置页面提交
form.on('submit(saveConfig)', function (data) {
let url = $(data.elem).data('url');
$.post(url, data.field, function (res) {
layer.msg(res.msg);
if (res.code === 0) {
setTimeout(function () {
//关闭当前弹出层
miniTab.deleteCurrentByIframe();
}, 1000)
}
});
return false;
});
//监听提交
form.on('submit(saveBtn)', function (data) {
let url = $(data.elem).data('url');
let isTab = $(data.elem).data('tab');
let index = layer.load(2);
$.post(url, data.field, function (res) {
layer.close(index);
layer.msg(res.msg);
if (res.code === 0) {
if (isTab) {
//关闭tab
setTimeout(function () {
miniTab.deleteCurrentByIframe();
}, 1000)
} else {
//刷新父级列表
parent.layui.$('[data-table-refresh]').trigger("click");
setTimeout(function () {
//关闭当前弹出层
let iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
}, 1000)
}
}
});
return false;
});
//监听关闭
form.on('submit(close)', function () {
let iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
return false;
});
//监听单元格编辑
table.on('edit(table-container-filter)', function (obj) {
let insTb = Tools.getInsTb();
$.post(modifyUrl, {id: obj.data.id, field: obj.field, value: obj.value}, function (res) {
layer.msg(res.msg)
if (res.code !== 0 || obj.field === 'sort') {
refreshTab(insTb);
}
})
});
//监听状态改变
form.on('switch(changeStatus)', function (obj) {
let val = obj.elem.checked ? 1 : 0;
let insTb = Tools.getInsTb();
$.post(modifyUrl, {id: this.value, field: this.name, value: val}, function (res) {
layer.msg(res.msg)
if (res.code !== 0) {
setTimeout(function () {
refreshTab(insTb);
}, 1000)
}
})
});
// 监听搜索操作
form.on('submit(data-search-btn)', function (data) {
//执行搜索重载
table.reload('table-container', {
page: {curr: 1}
, where: {searchParams: data.field}
}, 'data');
return false;
});
//监听工具条 注意区别toolbar和tool toolbar是表头上的工具条 tool是行中的工具条
table.on('toolbar(table-container)', function (obj) {
let layEvent = obj.event;
let insTb = Tools.getInsTb();
let url = $($(this).context).data('href')
let title = $($(this).context).data('title')
let width = $($(this).context).data('width') ? $($(this).context).data('width') : '100%';
let height = $($(this).context).data('height') ? $($(this).context).data('height') : '100%';
// debugger;
switch (layEvent) {
// toolbar 删除
case 'del':
let checkStatus = table.checkStatus('table-container');
if (checkStatus.data.length <= 0) {
layer.msg('请先选择数据');
return false;
}
let selected = checkStatus.data;
let ids = [];
$.each(selected, function (index, val) {
ids.push(val.id);
})
delRow(url, ids, insTb);
return false;
// toolbar 刷新
case 'refresh':
refreshTab(insTb);
return false;
// toolbar 搜索
case 'search':
let search = $('.table-search-fieldset');
if (search.hasClass('div-show')) {
search.css('display', 'none').removeClass('div-show');
} else {
search.css('display', 'block').addClass('div-show');
}
return false;
// 其他 默认为打开弹出层
default:
if (layEvent !== 'LAYTABLE_COLS' && layEvent !== 'LAYTABLE_EXPORT') {
openLayer(url, title, width, height);
return false;
}
}
});
//监听行工具条
table.on('tool(table-container)', function (obj) {
let data = obj.data;
let layEvent = obj.event;
let url = $($(this).context).data('href');
let title = $($(this).context).data('title');
let width = $($(this).context).data('width') ? $($(this).context).data('width') : '100%';
let height = $($(this).context).data('height') ? $($(this).context).data('height') : '100%';
let insTb = Tools.getInsTb();
switch (layEvent) {
// 行 删除
case 'del':
let ids = [data.id];
delRow(url, ids, insTb);
return false;
//其他 默认为打开弹出层
default:
openLayer(url, title, width, height);
return false;
}
});
/** 图片预览 **/
$('body').on('click', '.layui-layer-photos', function () {
layer.photos({
photos: '.layui-layer-photos' // 指向图片的父容器
,anim: 5 //0-6的选择指定弹出图片动画类型默认随机(3.0之前的版本用shift参数)
});
})
});
//富文本编辑器单页面可以添加多个需要使用不同的ID TODO 使用的原CMS操作
function editor() {
layui.use(['jquery', 'wangEditor'], function () {
let $ = layui.jquery, E = layui.wangEditor;
if ($('.editor').length) {
$.each($('.editor'), function (i) {
var wang = new E(this);
var $text1 = $(this).parent().find('textarea');
wang.customConfig.onchange = function (html) {
// 监控变化,同步更新到 textarea
$text1.val(html)
}
wang.customConfig.pasteTextHandle = function (content) {
if (content == '' && !content) return '';//其中content就是你zhantie过来的原始的文本
return removeFormatWrd(content);
};
function removeFormatWrd(html) {
// console.log(html)
// html = html.replace(/<xml>[\s\S]*?<\/xml>/ig, '');
// html = html.replace(/<style>[\s\S]*?<\/style>/ig, '');
// html = html.replace(/<\/?[^>]*>/g, '');
// html = html.replace(/[ | ]*\n/g, '\n');
// html = html.replace(/&nbsp;/ig, '');
//上面代码是不要任何样式,纯文本
//下面代码,保留从相关文档中的粘贴过来时的样式
html = html.replace(/<\/?SPANYES[^>]*>/gi, "");// Remove all SPAN tags
html = html.replace(/<(\w[^>]*) class=([^|>]*)([^>]*)/gi, "<$1$3"); // Remove Class attributes
html = html.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3"); // Remove Style attributes
html = html.replace(/<(\w[^>]*) lang=([^|>]*)([^>]*)/gi, "<$1$3");// Remove Lang attributes
html = html.replace(/<?xml[^>]*>/gi, "");// Remove XML elements and declarations
html = html.replace(/<\/?\w+:[^>]*>/gi, "");// Remove Tags with XML namespace declarations: <o:p></o:p>
html = html.replace(/ /, "");// Replace the
html = html.replace(/<xml>[\s\S]*?<\/xml>/ig, '');
html = html.replace(/<html>[\s\S]*?<\/html>/ig, '');
html = html.replace(/<head>[\s\S]*?<\/head>/ig, '');
html = html.replace(/<style>[\s\S]*?<\/style>/ig, '');
html = html.replace(/<html<body/ig, '<html><body');
html = html.replace(/<\/html<body>/ig, '</body></html>');
html = html.replace(/\n(\n)*( )*(\n)*\n/gi, '\n');
return html;
}
wang.customConfig.menus = [
'head', // 标题
'bold', // 粗体
'fontSize', // 字号
'fontName', // 字体
'italic', // 斜体
'underline', // 下划线
'strikeThrough', // 删除线
'foreColor', // 文字颜色
'backColor', // 背景颜色
'link', // 插入链接
'list', // 列表
'justify', // 对齐方式
'quote', // 引用
'emoticon', // 表情
'image', // 插入图片
'table', // 表格
'video', // 插入视频
'code', // 插入代码
'undo', // 撤销
'redo', // 重复
]
// 隐藏“网络图片”tab
wang.customConfig.showLinkImg = true
wang.customConfig.uploadFileName = 'wang_img[]'
wang.customConfig.showLinkVideo = true
wang.customConfig.uploadImgHooks = {
before: function (xhr, editor, files) {
// 图片上传之前触发
// xhr 是 XMLHttpRequst 对象editor 是编辑器对象files 是选择的图片文件
// 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传
},
success: function (xhr, editor, result) {
// 图片上传并返回结果,图片插入成功之后触发
// xhr 是 XMLHttpRequst 对象editor 是编辑器对象result 是服务器端返回的结果
},
fail: function (xhr, editor, result) {
// 图片上传并返回结果,但图片插入错误时触发
// xhr 是 XMLHttpRequst 对象editor 是编辑器对象result 是服务器端返回的结果
},
error: function (xhr, editor) {
// 图片上传出错时触发
// xhr 是 XMLHttpRequst 对象editor 是编辑器对象
},
timeout: function (xhr, editor) {
// 图片上传超时时触发
// xhr 是 XMLHttpRequst 对象editor 是编辑器对象
},
// 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式,可使用该配置
// (但是,服务器端返回的必须是一个 JSON 格式字符串!!!否则会报错)
customInsert: function (insertImg, result, editor) {
// 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!)
// insertImg 是插入图片的函数editor 是编辑器对象result 是服务器端返回的结果
// console.log(result);
if (result.errno == 0) {
if (result.data.length > 0) {
$.each(result.data, function (i, val) {
insertImg(val);
})
}
} else {
// 错误提示
layer.msg(result.data[0])
}
}
}
wang.customConfig.uploadImgParams = {_token: _token}
wang.customConfig.uploadVideoParams = {_token: _token}
//上传视频
wang.customConfig.uploadVideoServer = "/manager/upload/video.html"
wang.customConfig.uploadVideoHooks = {
customInsert: function (insertImg, result, editor) {
var url = result.data.src;//获取后台返回的url
insertImg(url);
}
};
wang.customConfig.uploadImgServer = '/manager/upload/wangImage.html'
wang.customConfig.customAlert = function (info) {
// info 是需要提示的内容
layer.msg(info)
}
wang.create();
wang.txt.html($text1.val())
$text1.val(wang.txt.html())
editorSelector = '.editor';
$(editorSelector + " .w-e-toolbar").eq(i).append('<div class="w-e-menu"><a class="_wangEditor_btn_fullscreen" onclick="window.wangEditor.fullscreen.toggleFullscreen(this)">全屏</a></div>');
window.wangEditor.fullscreen = {
// editor create之后调用
toggleFullscreen: function (editorSelector) {
$(editorSelector).closest('.editor-text').toggleClass('fullscreen-editor')
if ($(editorSelector).text() == '全屏') {
$(editorSelector).text('退出全屏');
} else {
$(editorSelector).text('全屏');
}
},
charu: function (obj) {
insertHtmlAtCaret('<img src="' + $(obj).attr('src') + '">', $(obj).closest('.editor').find('.w-e-text'))
$(obj).closest('.editor').find('.w-e-panel-container').remove();
}
};
$(editorSelector + " .w-e-toolbar").eq(i).append('<div class="w-e-menu"><a class="_wangEditor_btn_viewsource' + i + '" data-id="' + i + '" onclick="window.wangEditor.viewsource.toggleViewsource(this)">源码</a></div>');
window.wangEditor.viewsource = {
toggleViewsource: function (editorSelector) {
$('.editor').each(function (i) {
if ($(editorSelector).attr('data-id') == i) {
if ($(editorSelector).text() == '源码') {
$(editorSelector).text('返回');
$(this).addClass('active')
$(this).parent().find('textarea.layui-textarea').removeClass('layui-hide')
} else {
$(editorSelector).text('源码');
$(this).removeClass('active')
$(this).parent().find('textarea.layui-textarea').addClass('layui-hide')
}
}
})
}, recovery: function (editorSelector) {
$('.editor').each(function (i) {
if ($(editorSelector).text() == '返回') {
editorHtml = $(editorSelector).closest('.editor').find('.w-e-text').html().replace(/&lt;/ig, "<").replace(/&gt;/ig, ">").replace(/&nbsp;/ig, " ");
$(editorSelector).text('源码');
$(editorSelector).closest('.editor').find('.w-e-text').html(editorHtml);
$(editorSelector).closest('.editor').parent().find('textarea').val(editorHtml)
}
})
}
};
$(editorSelector + " .w-e-toolbar").eq(i).append('<div class="w-e-menu"><a class="_wangEditor_btn_eliminate' + i + '" data-id="' + i + '" onclick="window.wangEditor.eliminate.toggleViewsource(this)">清除格式</a></div>');
window.wangEditor.eliminate = {
toggleViewsource: function (editorSelector) {
$('.editor').each(function (i) {
if ($(editorSelector).attr('data-id') == i) {
var str = $(editorSelector).closest('.editor').find('.w-e-text').html();
str = str.replace(/<xml>[\s\S]*?<\/xml>/ig, '');
str = str.replace(/<style>[\s\S]*?<\/style>/ig, '');
str = str.replace(/<\/?[^>]*>/g, '');
str = str.replace(/[ | ]*\n/g, '\n');
str = str.replace(/&nbsp;/ig, '');
$(editorSelector).closest('.editor').find('.w-e-text').html(str);
}
})
}
};
var that = $(this)
that.removeClass('active');
that.parent().find('textarea').addClass('layui-hide')
that.parent().find('textarea').on('input propertychange', function () {
that.find('.w-e-text').html($(this).val())
})
});
}
})
getblur();
}
let fwqpage = 2;
function renderSku(productId, productTypeId, multiSpec) {
layui.use(['skuTable'], function () {
let skuTable = layui.skuTable;
window.skuTableObj = skuTable.render({
isAttributeElemId: 'fairy-is-attribute',
productTypeElemId: 'fairy-product-type',
attributeTableElemId: 'fairy-attribute-table',
specTableElemId: 'fairy-spec-table',
skuTableElemId: 'fairy-sku-table',
//商品规格模式 0单规格 1多规格
mode: multiSpec,
//是否开启sku表行合并
rowspan: true,
//图片上传接口
uploadUrl: '/manager/mall/sku/upload',
//获取商品类型接口
productTypeUrl: '/manager/mall/sku/spuTypeData',
//获取商品类型下的规格和属性接口
attrSpecUrl: '/manager/mall/sku/attrSpecData?product_id='+productId,
//创建规格接口
specCreateUrl: '/manager/mall/sku/specCreate',
//删除规格接口
specDeleteUrl: '/manager/mall/sku/specDelete',
//创建规格值接口
specValueCreateUrl: '/manager/mall/sku/specValueCreate',
//删除规格值接口
specValueDeleteUrl: '/manager/mall/sku/specValueDelete',
//单规格SKU表配置
singleSkuTableConfig: {
thead: [
// {title: '销售价(元)', icon: 'layui-icon-cols'},
{title: '价钱(元)', icon: 'layui-icon-cols'},
{title: '库存', icon: 'layui-icon-cols'},
{title: '默认', icon: ''},
{title: '状态', icon: ''},
],
tbody: [
// {type: 'input', field: 'skus[price]', value: '0', verify: 'required|number', reqtext: '销售价不能为空'},
{type: 'input', field: 'skus[original_price]', value: '0', verify: 'required|number', reqtext: '价钱不能为空'},
{type: 'input', field: 'skus[stock]', value: '0', verify: 'required|number', reqtext: '库存不能为空'},
{type: 'select', field: 'skus[is_default]', option: [{key: '是', value: '1'}], verify: 'required ', reqtext: '默认SKU不能为空'},
// {type: 'select', field: 'skus[is_default]', option: [{key: '是', value: '1'},{key: '否', value: '0'}], verify: 'required', reqtext: '默认SKU不能为空'},
{type: 'select', field: 'skus[status]', option: [{key: '启用', value: '1'}], verify: 'required', reqtext: '状态不能为空'},
// {type: 'select', field: 'skus[status]', option: [{key: '启用', value: '1'}, {key: '禁用', value: '0'}], verify: 'required', reqtext: '状态不能为空'},
]
},
//多规格SKU表配置
multipleSkuTableConfig: {
thead: [
{title: '图片', icon: ''},
{title: '销售价(元)', icon: 'layui-icon-cols'},
{title: '原价(元)', icon: 'layui-icon-cols'},
{title: '库存', icon: 'layui-icon-cols'},
{title: '默认SKU', icon: ''},
{title: '状态', icon: ''},
],
tbody: [
{type: 'image', field: 'picture', value: '', verify: '', reqtext: ''},
{type: 'hide', field: 'id', value: '', verify: '', reqtext: ''},
{type: 'hide', field: 'coding', value: '', verify: '', reqtext: ''},
{type: 'input', field: 'price', value: '0', verify: 'required|number', reqtext: '销售价不能为空'},
{type: 'input', field: 'original_price', value: '0', verify: 'required|number', reqtext: '原价不能为空'},
{type: 'input', field: 'stock', value: '0', verify: 'required|number', reqtext: '库存不能为空'},
{
type: 'select',
field: 'is_default',
option: [{key: '否', value: '0'}, {key: '是', value: '1'}],
verify: '',
reqtext: ''
},
{
type: 'select',
field: 'status',
option: [{key: '启用', value: '1'}, {key: '禁用', value: '0'}],
verify: '',
reqtext: ''
},
]
},
// ========================================== 回显时相关配置参数 ========================================== //
//商品id
productId: productId,
//商品类型id
productTypeId: productTypeId,
//sku数据接口
// skuDataUrl: '/static/manager/js/mall/json/skuData.json',
skuDataUrl: '/manager/mall/sku/skuData',
});
})
// return skuTableObj;
}
function getImgList(id) {
layui.use(['jquery'], function () {
let $ = layui.jquery
var html = '';
var pageBtn = '';
fwqpage = 1;
$.ajax('/manager/file/list', {
data: {
type: 'img',
page: fwqpage,
size: 20
},
headers: {
'X-CSRF-TOKEN': _token
},
dataType: 'json',//服务器返回json格式数据
type: 'post',//HTTP请求类型
timeout: 10000,//超时时间设置为10秒
success: function (data) {
if (data.code == 0) {
if (data.data.length > 0) {
$.each(data.data, function (i, item) {
html += '<span><img src="' + item.src + '" onclick="window.wangEditor.fullscreen.charu(this)"></span>'
})
$('#' + id).closest('.editor').find('.w-e-serverImgs .top-box').append(html)
if (data.data.length >= 20) {
pageBtn = '<a href="javascript:;" data-id="' + id + '" onclick="getImgMore(this)">加载更多</a>';
$('#' + id).closest('.editor').find('.w-e-serverImgs .lower-box').append(pageBtn)
}
} else {
layer.msg(data.msg)
}
}
},
error: function (xhr, type, errorThrown) {
}
});
})
}
function getImgMore(obj) {
layui.use(['jquery'], function () {
let $ = layui.jquery
let html = '';
let pageBtn = '';
let id = $(obj).attr('data-id');
$.ajax('/manager/file/list', {
data: {
type: 'img',
page: fwqpage,
size: 20
},
headers: {
'X-CSRF-TOKEN': _token
},
dataType: 'json',//服务器返回json格式数据
type: 'post',//HTTP请求类型
timeout: 10000,//超时时间设置为10秒
success: function (data) {
if (data.code == 0) {
if (data.data.length > 0) {
$.each(data.data, function (i, item) {
html += '<span><img src="' + item.src + '" onclick="window.wangEditor.fullscreen.charu(this)"></span>'
})
$('#' + id).closest('.editor').find('.w-e-serverImgs .top-box').append(html)
if (data.data.length < 20) {
pageBtn = '没有了';
$('#' + id).closest('.editor').find('.w-e-serverImgs .lower-box').html(pageBtn)
} else {
fwqpage++
}
} else {
layer.msg(data.msg)
}
}
},
error: function (xhr, type, errorThrown) {
}
});
})
}
var sel, range;
var textContent;
function getblur() {
layui.use(['jquery'], function () {
let $ = layui.jquery
$('.editor .w-e-text').click(function () {
sel = window.getSelection();
range = sel.getRangeAt(0);
//range.deleteContents();
})
})
}
function insertHtmlAtCaret(html, obj) {
layui.use(['jquery'], function () {
let $ = layui.jquery
if (window.getSelection) {
// IE9 and non-IE
if (sel != undefined) {
if (sel.getRangeAt && sel.rangeCount) {
var el = document.createElement("div");
el.innerHTML = html;
var frag = document.createDocumentFragment(), node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
// Preserve the selection
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
}
} else {
$(obj).append(html)
}
} else if (document.selection && document.selection.type != "Control") {
// IE < 9
document.selection.createRange().pasteHTML(html);
}
textContent = $(obj).html();//这个也很重要。因为如果不写可能就会覆盖了原来内容替换成你添加的。或者是干脆不显示了。textContent是全局变量是你输入的内容。
$(obj).closest('.editor').parent().find('textarea').val(textContent)
})
}
function limitContentLength(elm, len) {
layui.use(['jquery'], function () {
let $ = layui.jquery
var newString = $(elm).val().slice(0, len);
$(elm).val(newString);
})
}
/**
* 弹窗重新渲染的内容
* @param filter lay-filter
* @param iconName 图标名称自动识别fontClass/unicode
*/
function alertRender() {
layui.use(['jquery', 'form', 'iconPickerFa'], function () {
var form = layui.form, iconPicker = layui.iconPickerFa, $ = layui.jquery
form.render();
iconPicker.render({
// 选择器推荐使用input
elem: '#iconPicker',
// 数据类型fontClass/unicode推荐使用fontClass
type: 'fontClass',
// 是否开启搜索true/false
search: true,
// 是否开启分页
page: true,
// 每页显示数量默认12
limit: 12,
// 点击回调
click: function (data) {
},
// 渲染成功后的回调
success: function (d) {
$('#iconPicker').val('iconpicker');
}
});
var iconStr = $('#iconPicker').val();
if (iconStr) {
iconPicker.checkIcon('iconPicker', iconStr);
} else {
iconPicker.checkIcon('iconPicker', 'layui-icon-star-fill');
}
})
layui.use(['jquery'], function () {
let $ = layui.jquery
setTimeout(function () {
$(window).trigger("resize");
}, 100)
})
}
//打开弹出层
function openLayer(url, title, width = '100%', height = '100%') {
layui.use(['jquery', 'layer'], function () {
let $ = layui.jquery, layer = layui.layer;
let index = layer.open({
title: title,
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: [width, height],
content: url,
});
$(window).on("resize", function () {
layer.full(index);
});
})
}
//删除行
function delRow(url, ids, instance, msg) {
layui.use(['jquery', 'layer'], function () {
let $ = layui.jquery, layer = layui.layer;
msg = (msg === null || msg === undefined) ? '确认删除吗?' : msg;
let index = layer.confirm(msg, {
btn: ['确认', '取消'], //按钮
title: '操作提示',
}, function () {
$.post(url, {ids: ids}, function (res) {
layer.close(index)
layer.msg(res.msg)
if (res.code === 0) {
instance.reload();
}
})
}, function () {
layer.close(index)
return false;
});
})
}
// 刷新Tab
function refreshTab(insTb) {
insTb.reload();
}
// 获取文件访问路径
function getFileRequestUrl(url) {
let ele = document.getElementById('fileDomain');
let fileDomain = '';
if (ele) {
fileDomain = ele.getAttribute('data-oss');
}
if (url !== undefined && url.length > 4) {
let prefix = url.substr(0, 4);
if (prefix === 'http') {
return url;
} else {
return fileDomain + url;
}
} else {
return url;
}
}
/**
* 和PHP一样的时间戳格式化函数
* @param {string} format 格式
* @param {int} timestamp 要格式化的时间 默认为当前时间 (10位数)
* @return {string} 格式化的时间字符串
*/
function date(format, timestamp){
var jsdate=((timestamp) ? new Date(timestamp*1000) : new Date());
var pad = function(n, c){
if((n = n + "").length < c){
return new Array(++c - n.length).join("0") + n;
} else {
return n;
}
};
var txt_weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var txt_ordin = {1:"st", 2:"nd", 3:"rd", 21:"st", 22:"nd", 23:"rd", 31:"st"};
var txt_months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var f = {
// Day
d: function(){return pad(f.j(), 2)},
D: function(){return f.l().substr(0,3)},
j: function(){return jsdate.getDate()},
l: function(){return txt_weekdays[f.w()]},
N: function(){return f.w() + 1},
S: function(){return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'},
w: function(){return jsdate.getDay()},
z: function(){return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0},
// Week
W: function(){
var a = f.z(), b = 364 + f.L() - a;
var nd2, nd = (new Date(jsdate.getFullYear() + "/1/1").getDay() || 7) - 1;
if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b){
return 1;
} else{
if(a <= 2 && nd >= 4 && a >= (6 - nd)){
nd2 = new Date(jsdate.getFullYear() - 1 + "/12/31");
return date("W", Math.round(nd2.getTime()/1000));
} else{
return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
}
}
},
// Month
F: function(){return txt_months[f.n()]},
m: function(){return pad(f.n(), 2)},
M: function(){return f.F().substr(0,3)},
n: function(){return jsdate.getMonth() + 1},
t: function(){
var n;
if( (n = jsdate.getMonth() + 1) == 2 ){
return 28 + f.L();
} else{
if( n & 1 && n < 8 || !(n & 1) && n > 7 ){
return 31;
} else{
return 30;
}
}
},
// Year
L: function(){var y = f.Y();return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0},
//o not supported yet
Y: function(){return jsdate.getFullYear()},
y: function(){return (jsdate.getFullYear() + "").slice(2)},
// Time
a: function(){return jsdate.getHours() > 11 ? "pm" : "am"},
A: function(){return f.a().toUpperCase()},
B: function(){
// peter paul koch:
var off = (jsdate.getTimezoneOffset() + 60)*60;
var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;
var beat = Math.floor(theSeconds/86.4);
if (beat > 1000) beat -= 1000;
if (beat < 0) beat += 1000;
if ((String(beat)).length == 1) beat = "00"+beat;
if ((String(beat)).length == 2) beat = "0"+beat;
return beat;
},
g: function(){return jsdate.getHours() % 12 || 12},
G: function(){return jsdate.getHours()},
h: function(){return pad(f.g(), 2)},
H: function(){return pad(jsdate.getHours(), 2)},
i: function(){return pad(jsdate.getMinutes(), 2)},
s: function(){return pad(jsdate.getSeconds(), 2)},
//u not supported yet
// Timezone
//e not supported yet
//I not supported yet
O: function(){
var t = pad(Math.abs(jsdate.getTimezoneOffset()/60*100), 4);
if (jsdate.getTimezoneOffset() > 0) t = "-" + t; else t = "+" + t;
return t;
},
P: function(){var O = f.O();return (O.substr(0, 3) + ":" + O.substr(3, 2))},
//T not supported yet
//Z not supported yet
// Full Date/Time
c: function(){return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P()},
//r not supported yet
U: function(){return Math.round(jsdate.getTime()/1000)}
};
return format.replace(/[\]?[a-zA-Z]/g, function(t){
let ret = '';
if (f[t]) {
ret = f[t]();
}
return ret;
});
}
function refreshBtn() {
layui.use(['jquery'], function () {
let $ = layui.jquery;
$('[data-table-refresh]').trigger("click");
})
}