vr-shopxo-plugin/shopxo/public/static/admin/default/js/index.js

626 lines
25 KiB
JavaScript
Raw Normal View History

/**
* 独立弹窗层级处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2023-02-15
* @desc description
* @param {[string]} key [窗口可以]
*/
function LayerPagesLevelHandle (key) {
var index = 0;
var $content = $('#ifcontent');
$content.find('.window-layer-alone-layer').each(function () {
var temp_index = parseInt($(this).css('z-index') || 0);
if (temp_index > index) {
index = temp_index
}
});
$content.find('.window-layer .window-layer-seat').show();
var $layer = $content.find('.window-layer.iframe-item-key-' + key);
$layer.css({ 'z-index': index + 1, 'position': 'fixed' });
$layer.find('.window-layer-seat').hide();
}
/**
* 展开菜单
* @author kevin
* @blog http://gong.gg/
* @version 1.0.0
* @date 2023-12-06
* @desc description
*/
function OpenMenu () {
$('.menu-scaling-submit').addClass('open-menu');
$('.menu-scaling-submit').animate({ left: '135px' }, 300);
$('.menu-scaling-submit').removeClass('icon-stretch').addClass('icon-shrink');
$('#admin-offcanvas').addClass('open-child-menu');
$('#admin-offcanvas').animate({ width: '203px' }, 300);
$('#ifcontent').animate({ paddingLeft: '203px' }, 300);
$('header.admin-header').animate({ left: '203px' }, 300);
}
/**
* 收起菜单
* @author kevin
* @blog http://gong.gg/
* @version 1.0.0
* @date 2023-12-06
* @desc description
*/
function CloseMenu () {
$('.menu-scaling-submit').removeClass('open-menu');
$('.menu-scaling-submit').animate({ left: '30px' }, 300);
$('.menu-scaling-submit').removeClass('icon-shrink').addClass('icon-stretch');
$('#admin-offcanvas').removeClass('open-child-menu');
$('#admin-offcanvas').animate({ width: '80px' }, 300);
$('#ifcontent').animate({ paddingLeft: '80px' }, 300);
$('header.admin-header').animate({ left: '80px' }, 300);
}
/**
* 关闭tabs工具
* @author kevin
* @blog http://gong.gg/
* @version 1.0.0
* @date 2023-12-06
* @desc description
*/
function IframeCloseNavTabsRightTools () {
$('.tabs-list .tabs-tool').dropdown('close');
}
$(function () {
// 左侧菜单箭头方向回调处理
$('#admin-offcanvas li.admin-parent').on('open.collapse.amui', function () {
$(this).find('a i').toggleClass('top-menu-more-icon-rotate');
}).on('close.collapse.amui', function () {
$(this).find('a i').toggleClass('top-menu-more-icon-rotate');
});
// url加载
$(document).on('click', '.common-left-menu li a, .admin-header-right-list li a.new-window', function () {
var url = $(this).data('url') || null;
var type = $(this).data('type');
var key = $(this).data('key');
var name = $(this).data('node-name') || $(this).find('.nav-name').text();
AdminTopNavIframeAddHandle(url, name, key, type);
});
// 顶级左侧菜单选择
$(document).on('click', '.must-menu-list .common-left-menu li a', function (event) {
$('.common-left-menu li a').removeClass('common-left-menu-active');
$(this).addClass('common-left-menu-active');
if (window.innerWidth > 641) {
if ($(this).parent().find('ul').length > 0) {
OpenMenu();
$('.child-menu-list').find('ul.second').addClass('am-hide');
$('.child-menu-list').find('#power-menu-' + $(this).data('id')).removeClass('am-hide');
$('.child-menu-list .menu-name').text($(this).text().trim());
$('.menu-scaling-submit').removeClass('am-hide');
// 获取下级菜单第一个并打开
$('.child-menu-list').find('#power-menu-' + $(this).data('id') + '>li>a').addClass('am-collapsed');
$('.child-menu-list').find('#power-menu-' + $(this).data('id') + '>li>a i').removeClass('left-menu-more-icon-rotate');
$('.child-menu-list').find('#power-menu-' + $(this).data('id') + '>li>ul').removeClass('am-in');
$('.child-menu-list').find('#power-menu-' + $(this).data('id') + ' li:eq(0)>a').trigger('click');
if (!$('.child-menu-list').find('#power-menu-' + $(this).data('id') + ' li:eq(0)>a').hasClass('am-collapsed')) {
$('.child-menu-list').find('#power-menu-' + $(this).data('id') + ' li:eq(0)>ul li:eq(0) a').trigger('click');
} else {
if ($(this).parent().find('ul').length <= 0) {
$('.child-menu-list').find('#power-menu-' + $(this).data('id') + ' li:eq(0)>ul li:eq(0) a').trigger('click');
}
}
} else {
CloseMenu();
$('.menu-scaling-submit').addClass('am-hide');
}
}
});
// 二级右侧菜单选择(全部包含下级菜单)
$(document).on('click', '.child-menu-list .common-left-menu li a', function () {
$(this).parent().parent().find('a').removeClass('common-left-menu-active');
$(this).addClass('common-left-menu-active');
});
// 二级菜单开关
$(document).on('click', '.menu-scaling-submit', function () {
$('.must-menu-list .common-left-menu>li').each((k, v) => {
if ($(v).find('a').hasClass('common-left-menu-active') && $(v).find('ul.am-list').length > 0) {
if ($('#admin-offcanvas').hasClass('open-child-menu')) {
CloseMenu();
} else {
OpenMenu();
}
}
})
});
// 浏览器窗口实时事件
$(window).resize(function () {
var data_status = $('.menu-scaling-submit').hasClass('open-menu');
// 小屏幕关闭左侧导航
if ($(document).width() <= 640) {
$('#admin-offcanvas').css({ 'width': 'inherit' });
$('#ifcontent').css({ 'padding-left': 0 });
$('header.admin-header').css({ 'left': 0 });
} else {
if (data_status) {
$('#admin-offcanvas').css({ 'width': '203px' });
$('#ifcontent').css({ 'padding-left': '203px' });
$('header.admin-header').css({ 'left': '203px' });
} else {
$('#admin-offcanvas').css({ 'width': '80px' });
$('#ifcontent').css({ 'padding-left': '80px' });
$('header.admin-header').css({ 'left': '80px' });
}
}
});
// 页面切换
var window_layer_alone_layer_warning_timer = null;
// 是否第一次加载菜单
var is_reload_menu_status = 0;
$(document).on('click', '.header-menu-open-pages-list ul li', function (event) {
// 选中当前页面
$('.header-menu-open-pages-list ul li').removeClass('am-active');
$(this).addClass('am-active');
var key = $(this).data('key');
var $content = $('#ifcontent');
// 显示当前页面
$content.find('.window-layer').not('.window-layer-alone-layer').hide();
if ($('#ifcontent .iframe-item-key-' + key).length > 0) {
var $current_iframe = $('#ifcontent .iframe-item-key-' + key);
$current_iframe.show();
// 窗口存在独立
if ($current_iframe.hasClass('window-layer-alone-layer')) {
// 窗口存在独立则警告窗口提示
var count = 0;
clearInterval(window_layer_alone_layer_warning_timer);
window_layer_alone_layer_warning_timer = setInterval(function () {
if (count > 10) {
clearInterval(window_layer_alone_layer_warning_timer);
} else {
$current_iframe.css('box-shadow', 'rgb(0 0 0 / 30%) 1px 1px ' + (count % 2 == 0 ? '12px' : '24px'));
count++;
}
}, 50);
// 设置层级
LayerPagesLevelHandle(key);
} else {
// 非独立窗口则隐藏所有页面占位
$content.find('.window-layer .window-layer-seat').hide();
}
} else {
var url = $(this).data('url');
var type = $(this).data('type');
var key = $(this).data('key');
var name = $(this).data('name');
AdminTopNavIframeAddHandle(url, name, key, type);
}
if (window.innerWidth > 641) {
// 菜单跟随切换
$('.menu-list').find('a').removeClass('common-left-menu-active');
$('.menu-list').find("[data-key='" + key + "']").each((k, v) => {
var menu_id_level_list = '';
if ($(v).data('parent')) {
menu_id_level_list = $(v).data('parent').toString().split('|');
$('.menu-list').find('.menu-parent-items-' + menu_id_level_list[0]).addClass('common-left-menu-active');
// 菜单打开
OpenMenu();
$('.menu-scaling-submit').removeClass('am-hide');
$('.child-menu-list').find('ul.second').addClass('am-hide');
$('.child-menu-list').find('#power-menu-' + menu_id_level_list[0]).removeClass('am-hide');
$('.child-menu-list .menu-name').text($('.menu-list').find('.menu-parent-items-' + menu_id_level_list[0]).text().trim());
// 打开菜单并展开折叠
if (menu_id_level_list.length > 1) {
$('#power-menu-' + menu_id_level_list[1]).collapse('open');
}
} else {
// 菜单关闭
CloseMenu();
$('.menu-scaling-submit').addClass('am-hide');
}
$(v).addClass('common-left-menu-active');
})
var offset_scroll_top = $('.menu-list').find('.must-menu-scroll').scrollTop();
var $menu_active = $('.menu-list').find('a.common-left-menu-active');
if ($menu_active.length > 0) {
$('.must-menu-list-am-active').css({ 'display': 'block' });
var offset_top = $('.menu-list a.common-left-menu-active').parent().offset().top - ($('.must-menu-list-am-active').hasClass('is_logo') ? $('.menu-logo').height() : 0);
if (is_reload_menu_status == 0 || (event.originalEvent && event.originalEvent.isTrusted)) {
$('.must-menu-scroll').animate({
scrollTop: offset_top + offset_scroll_top,
}, 300);
is_reload_menu_status = 1;
}
$('.must-menu-list-am-active').animate({
'top': offset_top + offset_scroll_top
}, 300);
} else {
$('.must-menu-list-am-active').css({ 'top': 0, 'display': 'none' });
}
}
// 存储tabs标签数据
AdminMenuNavTabsMemoryHandle();
});
// 页面移除
$(document).on('click', '.header-menu-open-pages-list ul li a', function () {
// 移除当前页面
var $parent = $(this).parent();
var key = $parent.data('key');
$parent.remove();
$('#ifcontent .iframe-item-key-' + key).remove();
// 当tabs没有了时工具箱隐藏
if ($('.header-menu-open-pages-list ul li').length == 0) {
$('.tabs-tool').addClass('am-hide')
}
// 当前没有选中的导航则模拟点击最后一个选中
if ($('.header-menu-open-pages-list ul li.am-active').length == 0) {
$('.header-menu-open-pages-list ul li:last').trigger('click');
}
// 无页面则添加默认初始化页面
if ($('.header-menu-open-pages-list ul li').length == 0) {
$('#ifcontent .window-layer').show();
$('.menu-list').find('a').removeClass('common-left-menu-active');
$('.menu-home').addClass('common-left-menu-active');
CloseMenu();
}
return false;
});
// tabs页面操作工具
$(document).on('click', '.tabs-list .tabs-tool ul li a', function () {
// 移除当前页面
var $nav_list = $(this).parents('.tabs-list').find('.header-menu-open-pages-list ul li');
// 获取当前点击的key
var key = $(this).data('key');
if (key == 'nav-refresh') {
// 刷新
var nav_key = null;
$nav_list.each((k, v) => {
if ($(v).hasClass('am-active')) {
nav_key = $(v).data('key');
}
});
if (nav_key) {
$('#ifcontent .window-layer').each((k, v) => {
if ($(v).data('key') == nav_key) {
if ($(v).find('iframe').attr('src', $(v).find('iframe').attr('src')));
}
});
}
$(this).parents('.tabs-tool').dropdown('close');
} else if (key == 'nav-close') {
// 关闭
$nav_list.each((k, v) => {
if ($(v).hasClass('am-active')) {
$(v).find('a').click();
}
});
if ($('.header-menu-open-pages-list ul li').length == 0) {
$('.menu-list').find('a').removeClass('common-left-menu-active');
$('.menu-home').addClass('common-left-menu-active');
CloseMenu();
}
} else if (key == 'nav-close-other') {
// 关闭其他
$nav_list.each((k, v) => {
if (!$(v).hasClass('am-active')) {
$(v).find('a').click();
}
});
$(this).parents('.tabs-tool').dropdown('close');
} else if (key == 'nav-close-all') {
// 关闭所有
$nav_list.each((k, v) => {
$(v).find('a').click();
});
$('.menu-list').find('a').removeClass('common-left-menu-active');
$('.menu-home').addClass('common-left-menu-active');
CloseMenu();
}
// 存储tabs标签数据
AdminMenuNavTabsMemoryHandle();
});
$('.tabs-tool').on('open.dropdown.amui', function (e) {
var self = $(this);
var tabs_lsit = $('.tabs-list .header-menu-open-pages-list ul li');
tabs_lsit.each((i, item) => {
if ($(item).hasClass('am-active') && $(item).data('key') == '-') {
self.find('ul li').each((c, child) => {
if ($(child).find('a').data('key') == 'nav-close' || $(child).find('a').data('key') == 'nav-close-all') {
$(child).addClass('am-hide');
} else {
$(child).removeClass('am-hide');
}
})
return false;
} else {
self.find('ul li').removeClass('am-hide');
}
})
});
// 双击为独立窗口
$(document).on('dblclick', '.header-menu-open-pages-list ul li', function () {
var key = $(this).data('key') || null;
// 判断是否为首页
if (key != '-') {
// 增加独立窗口类
$('.iframe-item-key-' + key).addClass('window-layer-alone-layer').show();
// 设置层级
LayerPagesLevelHandle(key);
}
});
// 窗口切换
$(document).on('click', '#ifcontent .window-layer', function () {
if ($(this).hasClass('window-layer-alone-layer')) {
LayerPagesLevelHandle($(this).data('key'));
} else {
// 非独立窗口则隐藏所有页面占位
$('#ifcontent .window-layer .window-layer-seat').hide();
}
});
// 独立窗口刷新
$(document).on('click', '.window-layer-alone-layer .window-layer-tab-bar .refresh', function () {
var $parent = $(this).parents('.window-layer');
if ($parent.find('iframe').attr('src', $parent.find('iframe').attr('src')));
});
// 收回独立窗口
$(document).on('click', '.window-layer-alone-layer .window-layer-tab-bar .recovery', function () {
// 移除class和样式
$(this).parents('.window-layer').removeClass('window-layer-alone-layer').css({ 'position': '', 'left': '', 'top': '', 'box-shadow': '', 'width': '', 'height': '', 'z-index': '' });
// 显示已选中页面
var key = $('.header-menu-open-pages-list ul li.am-active').data('key') || null;
if (key != null) {
$('#ifcontent .window-layer').not('.window-layer-alone-layer').hide();
$('#ifcontent .iframe-item-key-' + key).show();
}
// 阻止事件
return false;
});
// 移除独立窗口
$(document).on('click', '.window-layer-alone-layer .window-layer-tab-bar .close', function () {
// 移除当前页面
var $parent = $(this).parents('.window-layer');
var key = $parent.data('key');
$parent.remove();
$('.header-menu-open-pages-list ul li.nav-item-key-' + key).remove();
// 当前没有选中的导航则模拟点击最后一个选中
if ($('.header-menu-open-pages-list ul li.am-active').length == 0) {
$('.header-menu-open-pages-list ul li:last').trigger('click');
}
// 无页面则添加默认初始化页面
if ($('.header-menu-open-pages-list ul li').length == 0) {
$('#ifcontent .window-layer').show();
}
return false;
});
// 弹窗拖拽
$(document).on('mousedown', '.window-layer-alone-layer .window-layer-tab-bar', function (pe) {
var is_move = true;
var $content = $('#ifcontent');
var $layer = $(this).parents('.window-layer');
var $layer_seat = $layer.find('.window-layer-seat');
var header_height = $('header.admin-header').height();
var menu_width = parseInt($content.css('padding-left') || 0);
var width = $layer.outerWidth();
var height = $layer.outerHeight();
var win_width = $content.width() + menu_width;
var win_height = $content.height() + header_height;
var abs_x = pe.pageX - $layer.offset().left;
var abs_y = pe.pageY - $layer.offset().top;
// 设置层级
LayerPagesLevelHandle($layer.data('key'));
$layer_seat.show();
$(document).mousemove(function (event) {
if (is_move) {
// 左
var left = event.pageX - abs_x
if (left < menu_width) {
left = menu_width
} else if (left > win_width - width) {
left = win_width - width;
}
// 上
var top = event.pageY - abs_y;
if (top < header_height) {
top = header_height;
}
if (top > win_height - height) {
top = win_height - height
}
// 设置层级
var index = 0;
$layer.parent().find('.window-layer-alone-layer').each(function () {
var temp_index = parseInt($(this).css('z-index') || 0);
if (temp_index > index) {
index = temp_index
}
});
$layer.css({ 'left': left, 'top': top, 'margin': 0, 'position': 'fixed', 'z-index': index + 1 });
};
}).mouseup(function () {
if (is_move) {
$layer_seat.hide();
}
is_move = false;
}).mouseleave(function () {
if (is_move) {
$layer_seat.hide();
}
is_move = false;
});
return false;
});
// 独立窗口拉动大小
$(document).on('mousedown', '.window-layer-alone-layer .window-layer-resize-bar div[class^="window-layer-resize-item-"]', function (pe) {
var is_move = true;
var $content = $('#ifcontent');
var $layer = $(this).parents('.window-layer');
var $layer_seat = $layer.find('.window-layer-seat');
var py = pe.pageY;
var px = pe.pageX;
var resize_bar_type = $(this).data('type');
var p_init_y = $layer.css('top').replace('px', '');
var p_init_x = $layer.css('left').replace('px', '');
var p_init_height = $layer.height();
var p_init_width = $layer.width();
var header_height = $('header.admin-header').height();
var menu_width = parseInt($content.css('padding-left') || 0);
var win_width = $content.width() + menu_width;
var win_height = $content.height();
var limit_min_width = 500;
var limit_min_height = 300;
// 设置层级
LayerPagesLevelHandle($layer.data('key'));
$layer_seat.show();
$(document).mousemove(function (event) {
if (is_move) {
var hh = parseInt(event.pageY) - parseInt(py);
var ww = parseInt(event.pageX) - parseInt(px);
var temp_y = hh + parseInt(p_init_y);
var temp_x = ww + parseInt(p_init_x);
if (temp_y < header_height) {
temp_y = header_height;
}
// 高度
var height = 0;
if (['left-top', 'top', 'right-top'].indexOf(resize_bar_type) != -1) {
height = parseInt(p_init_height) - hh;
}
if (['left-bottom', 'bottom', 'right-bottom'].indexOf(resize_bar_type) != -1) {
height = parseInt(p_init_height) + hh;
}
if (height > win_height) {
height = win_height;
}
if (height < limit_min_height) {
height = limit_min_height;
}
// 宽度
var width = 0;
if (['left-top', 'left', 'left-bottom'].indexOf(resize_bar_type) != -1) {
width = parseInt(p_init_width) - ww;
}
if (['right-top', 'right', 'right-bottom'].indexOf(resize_bar_type) != -1) {
width = parseInt(p_init_width) + ww;
}
if (width > win_width) {
width = win_width;
}
if (width < limit_min_width) {
width = limit_min_width;
}
// 不允许超出外边距范围
if (event.pageY - header_height <= 0 || event.pageY >= win_height + header_height) {
return false;
}
if (event.pageX >= win_width) {
return false;
}
if (event.pageX <= menu_width) {
return false;
}
// 根据类型设置样式
switch (resize_bar_type) {
case 'left-top':
$layer.css({
top: temp_y + 'px',
height: height + 'px',
left: temp_x + 'px',
width: width + 'px'
});
break;
case 'top':
$layer.css({
top: temp_y + 'px',
height: height + 'px'
});
break;
case 'right-top':
$layer.css({
top: temp_y + 'px',
height: height + 'px',
width: width + 'px'
});
break;
case 'left':
$layer.css({
left: temp_x + 'px',
width: width + 'px'
});
break;
case 'right':
$layer.css({
width: width + 'px'
});
break;
case 'left-bottom':
$layer.css({
height: height + 'px',
left: temp_x + 'px',
width: width + 'px'
});
break;
case 'bottom':
$layer.css({
height: height + 'px'
});
break;
case 'right-bottom':
$layer.css({
height: height + 'px',
width: width + 'px'
});
break;
}
}
}).mouseup(function () {
if (is_move) {
$layer_seat.hide();
}
is_move = false;
}).mouseleave(function () {
if (is_move) {
$layer_seat.hide();
}
is_move = false;
});
return false;
});
// 监听顶部tabs记忆展示
AdminMenuNavTabsMemoryView();
// 清除选项卡的缓存
$(document).on('click', '.clear-cache-html', function () {
var key = AdminMenuNavTabsMemoryKey();
var key_data = localStorage.getItem(key) || null;
if(key_data != null) {
key_data = JSON.parse(key_data);
if (key_data.length <= 1) {
localStorage.removeItem(key);
setTimeout(function() {
window.location.reload();
}, 1500);
}
}
});
});