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

880 lines
36 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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");
})
}