|
|
@@ -6,6 +6,12 @@
|
|
|
let tabContainer = '';
|
|
|
let frameContainer = '';
|
|
|
let height = '700px';//以这种形式出现的iframe,必须设置高度,不能设置100%
|
|
|
+
|
|
|
+ //已经打开的tab
|
|
|
+ let openTabs = [];
|
|
|
+ let breadcrumb = [];
|
|
|
+ let breadcrumbMap = new Map();
|
|
|
+
|
|
|
//入口方法
|
|
|
$.fn[pluginName] = function (options) {
|
|
|
let self = $(this);
|
|
|
@@ -23,7 +29,7 @@
|
|
|
this.options = $.extend(true, {}, this.default, options);
|
|
|
tabContainer = $('#'+this.options.tabContainer);
|
|
|
frameContainer = $('#'+this.options.frameContainer);
|
|
|
- console.log(this.options,tabContainer,frameContainer);
|
|
|
+ // console.log(this.options,tabContainer,frameContainer);
|
|
|
this.init();
|
|
|
}
|
|
|
//默认配置
|
|
|
@@ -64,7 +70,7 @@
|
|
|
BaseIframe.prototype.template = {
|
|
|
nav_tabs: '<ul class="nav nav-tabs page-header-tab" id="page-tabs"></ul>',
|
|
|
nav_item: '<li class="nav-item"></li>',
|
|
|
- nav_a: '<a href="javascript:;" class="nav-link " data-toggle="pill" role="tab" aria-selected="false" data-id="{0}" data-index="{1}" name="{2}" url="{3}">{2}</a>',//这里不能用id,id会追加代码到a标签内
|
|
|
+ nav_a: '<a href="javascript:void(0);" class="nav-link " data-toggle="pill" role="tab" aria-selected="false" data-id="{0}" data-index="{1}" name="{2}" url="{3}">{2}</a>',//这里不能用id,id会追加代码到a标签内
|
|
|
div_content:
|
|
|
' <div class="row clearfix">\n' +
|
|
|
' <div class="col-md-12 ">\n' +
|
|
|
@@ -131,24 +137,33 @@
|
|
|
let data = this.options.data;
|
|
|
//如果是当前页或者配置了一次性全部加载,否则点击tab页时加载
|
|
|
for (let i = 0; i < data.length; i++) {
|
|
|
+ // console.log(data[i].url);
|
|
|
+ openTabs.push({id:data[i].id});
|
|
|
+ // 同时处理顶部 breadcrumb,breadcrumb 根据 iframe name 区分
|
|
|
+ breadcrumbMap.set(data[i].id,[]);
|
|
|
if (this.options.loadAll || this.options.showIndex == i) {
|
|
|
if (data[i].url) {
|
|
|
- // 添加iframe
|
|
|
- let iframe = $(this.template.iframe.format(data[i].id, i, data[i].text, data[i].url, height));
|
|
|
+ // 添加iframe,name 也是设置id
|
|
|
+ let iframe = $(this.template.iframe.format(data[i].id, i, data[i].id, data[i].url, height));
|
|
|
frameContainer.find("#iframe-content").append(iframe);
|
|
|
} else {
|
|
|
console.error("id=" + data[i].id + "的iframe页未指定url");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ console.log("初始化breadcrumbMap--",breadcrumbMap)
|
|
|
//存在数据时候,设置active
|
|
|
if (data.length > 1) {
|
|
|
frameContainer.find("#iframe-content iframe").eq(this.options.showIndex).css("display", "inline");
|
|
|
- tabContainer.find('#page-tabs a').eq(this.options.showIndex).addClass('active');
|
|
|
- console.log(tabContainer.find('#page-tabs a').eq(this.options.showIndex))
|
|
|
+ let dataId = tabContainer.find('#page-tabs a').eq(this.options.showIndex).addClass('active').attr("data-id");
|
|
|
+ // console.log(tabContainer.find('#page-tabs a').eq(this.options.showIndex))
|
|
|
+ breadcrumb = breadcrumbMap.get(dataId);
|
|
|
+ console.log("设置当前的breadcrumb-1=",breadcrumbMap)
|
|
|
} else {
|
|
|
frameContainer.find("#iframe-content iframe").eq(0).css("display", "inline");
|
|
|
- tabContainer.find('#page-tabs a').eq(0).addClass('active');
|
|
|
+ let dataId = tabContainer.find('#page-tabs a').eq(0).addClass('active').attr("data-id");
|
|
|
+ breadcrumb = breadcrumbMap.get(dataId);
|
|
|
+ console.log("设置当前的breadcrumb-2=",breadcrumbMap)
|
|
|
}
|
|
|
//绑定事件
|
|
|
BaseIframe.prototype.eventses();
|
|
|
@@ -157,26 +172,30 @@
|
|
|
* 添加Iframe
|
|
|
* */
|
|
|
BaseIframe.prototype.openIframe = function (context) {
|
|
|
- let {dataId, dataUrl, menuName, dataIndex} = context;
|
|
|
+ let {dataId, dataUrl, dataIndex} = context;
|
|
|
// 获取标识数据
|
|
|
let flag = true;
|
|
|
if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false;
|
|
|
frameContainer.find("#iframe-content iframe").each(function () {
|
|
|
- console.log('id', $(this).data('id'));
|
|
|
- console.log('url', dataUrl);
|
|
|
+ // console.log('id', $(this).data('id'));
|
|
|
+ // console.log('url', dataUrl);
|
|
|
if ($(this).data('id') == dataId) {
|
|
|
flag = false;
|
|
|
}
|
|
|
});
|
|
|
if (flag) {
|
|
|
- let iframe = $(this.template.iframe.format(dataId, dataIndex, menuName, dataUrl, height,));
|
|
|
+ //name 也是用id
|
|
|
+ let iframe = $(this.template.iframe.format(dataId, dataIndex, dataId, dataUrl, height));
|
|
|
frameContainer.find("#iframe-content").append(iframe);
|
|
|
}
|
|
|
- BaseIframe.prototype.hidden_a(menuName);
|
|
|
+ //打开页面时候,切换
|
|
|
+ breadcrumb = breadcrumbMap.get(dataId);
|
|
|
+ console.log('切换tab',dataId,breadcrumbMap);
|
|
|
+ BaseIframe.prototype.showBreadcrumb();
|
|
|
+ BaseIframe.prototype.hidden_a(dataId);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**点击事件*/
|
|
|
BaseIframe.prototype.eventses = function () {
|
|
|
//关闭按钮
|
|
|
@@ -189,14 +208,14 @@
|
|
|
});
|
|
|
//切换tab
|
|
|
tabContainer.find("#page-tabs a").click(function () {
|
|
|
- console.log("点击a: ", this);
|
|
|
+ // console.log("点击a: ", this);
|
|
|
let dataId = $(this).data('id');
|
|
|
// var menuName = $(this).text();
|
|
|
- let menuName = $(this).attr('name');
|
|
|
+ // let menuName = $(this).attr('name');
|
|
|
let dataUrl = $(this).attr('url');
|
|
|
let dataIndex = $(this).data('index');
|
|
|
BaseIframe.prototype.openIframe({
|
|
|
- dataUrl, menuName, dataIndex, dataId
|
|
|
+ dataUrl, dataIndex, dataId
|
|
|
});
|
|
|
});
|
|
|
|
|
|
@@ -204,6 +223,17 @@
|
|
|
|
|
|
//新增一个Iframe页
|
|
|
BaseIframe.prototype.addIframe = function (obj) {
|
|
|
+ let bAdd = false;
|
|
|
+ for(let i=0;i<openTabs.length;i++){
|
|
|
+ if(obj.id=== openTabs[i].id){
|
|
|
+ bAdd = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(bAdd){
|
|
|
+ console.log('已添加过标签');
|
|
|
+ return;
|
|
|
+ }
|
|
|
let _index = $('#page-tabs a').length;
|
|
|
let nav_a = $(this.template.nav_a.format(obj.id,_index,obj.text,obj.url));
|
|
|
//如果可关闭,插入关闭图标,并绑定关闭事件
|
|
|
@@ -216,10 +246,13 @@
|
|
|
nav_item.append(nav_a);
|
|
|
tabContainer.find('#page-tabs').append(nav_item);
|
|
|
BaseIframe.prototype.eventses();
|
|
|
-
|
|
|
+ //添加标签记录
|
|
|
+ openTabs.push({id:obj.id});
|
|
|
+ // 同时处理顶部 breadcrumb,breadcrumb 根据 iframe name 区分
|
|
|
+ breadcrumbMap.set(obj.id,[]);
|
|
|
//自动切换到当前页面
|
|
|
BaseIframe.prototype.openIframe({
|
|
|
- dataUrl:obj.url, menuName:obj.text, dataIndex:_index, dataId:obj.id
|
|
|
+ dataUrl:obj.url, dataIndex:_index, dataId:obj.id
|
|
|
});
|
|
|
}
|
|
|
|
|
|
@@ -244,13 +277,19 @@
|
|
|
BaseIframe.prototype.remove = function (obj) {
|
|
|
frameContainer.find("#iframe-content iframe[data-id='" + obj + "']").remove();
|
|
|
tabContainer.find("#page-tabs a[data-id='" + obj + "']").parent().remove();
|
|
|
+ for (let i=0;i<openTabs.length;i++){
|
|
|
+ if(obj === openTabs[i].id){
|
|
|
+ openTabs.splice(i,1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
//设置一个显示的元素
|
|
|
tabContainer.find('#page-tabs a').eq(0).addClass('active');
|
|
|
frameContainer.find("#iframe-content iframe").eq(0).css("display", "inline");
|
|
|
if (tabContainer.find('#page-tabs a').length > 0) {
|
|
|
let a = tabContainer.find('#page-tabs a').eq(0);//todo 找到第一个a标签取出数据
|
|
|
this.openIframe({
|
|
|
- dataUrl: a.attr('url'), menuName: a.attr('name'), dataIndex: a.data('index'), dataId: a.data('id')
|
|
|
+ dataUrl: a.attr('url'),dataIndex: a.data('index'), dataId: a.data('id')
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
@@ -264,9 +303,54 @@
|
|
|
BaseIframe.prototype.openIframe(dataUrl, tabId, dataIndex);
|
|
|
}
|
|
|
|
|
|
+ BaseIframe.prototype.showBreadcrumb = function(callback){
|
|
|
+ $(".breadcrumb").html('');
|
|
|
+ breadcrumb.forEach((value, index, array)=>{
|
|
|
+ let _breadcrumb_item_li = '<li class="breadcrumb-item"><a name="{2}" href="javascript:void(0);">{1}</a></li>';
|
|
|
+ let _breadcrumb_item = $(_breadcrumb_item_li.format(value.url, value.name, value.index));
|
|
|
+ $(".breadcrumb").append(_breadcrumb_item);
|
|
|
+ _breadcrumb_item.click(()=>{
|
|
|
+ if(value.index == breadcrumb[breadcrumb.length-1].index) return;
|
|
|
+ let _id = BaseIframe.prototype.getCurrentIframeId();
|
|
|
+ console.log({
|
|
|
+ dataUrl:value.url, indexName:value.name, dataIndex:value.index, dataId:_id
|
|
|
+ });
|
|
|
+ let _frame = window.frames[_id];
|
|
|
+ _frame.history.go(-(breadcrumb.length-value.index));
|
|
|
+ if(callback)
|
|
|
+ callback(value);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ BaseIframe.prototype.setBreadcrumb = function(item){
|
|
|
+ let {index} = item;
|
|
|
+ let hasIndex = false;
|
|
|
+ let spliceIndex = 0;
|
|
|
+ for (let i=0;i<breadcrumb.length;i++){
|
|
|
+ if(index === breadcrumb[i].index){
|
|
|
+ hasIndex = true;
|
|
|
+ spliceIndex =i;
|
|
|
+ // console.log(index,i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(hasIndex){
|
|
|
+ console.log("splice1",spliceIndex)
|
|
|
+ breadcrumb.splice(spliceIndex+1,breadcrumb.length-1);
|
|
|
+ }else{
|
|
|
+ console.log("splice2",item.url, item.name, item.index)
|
|
|
+ breadcrumb.push(item);
|
|
|
+ }
|
|
|
+ BaseIframe.prototype.showBreadcrumb((value)=>{
|
|
|
+ BaseIframe.prototype.setBreadcrumb(value);
|
|
|
+ });
|
|
|
+ console.log(breadcrumb);
|
|
|
+ }
|
|
|
+
|
|
|
//获取当前活动iframe页的ID
|
|
|
BaseIframe.prototype.getCurrentIframeId = function () {
|
|
|
- var id = tabContainer.find("#page-tabs .active a").attr("name");
|
|
|
+ let id = tabContainer.find("#page-tabs .active").attr("data-id");
|
|
|
console.log('id', id);
|
|
|
return id;
|
|
|
}
|