From bc8f9f4976e16b5e634a5d95bda4c0ccb5a6e6c8 Mon Sep 17 00:00:00 2001
From: "HDM58\\hdm58" <hdm58@qq.com>
Date: Fri, 25 Aug 2023 17:38:25 +0800
Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9Etab=E9=A1=B5?=
 =?UTF-8?q?=E9=9D=A2=E5=88=87=E6=8D=A2=E6=95=88=E6=9E=9C=EF=BC=8C=E5=A2=9E?=
 =?UTF-8?q?=E5=BC=BA=E9=A1=B5=E9=9D=A2=E4=BD=93=E9=AA=8C=202=E3=80=81?=
 =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8A=A5=E9=94=80=E6=97=B6=E6=8A=A5=E9=94=80?=
 =?UTF-8?q?=E6=97=B6=E9=97=B4=E8=87=AA=E5=8A=A8=E8=BD=AC=E6=A0=BC=E5=BC=8F?=
 =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/finance/controller/Api.php             |  2 +-
 app/home/view/index/index.html             |  4 +-
 public/static/assets/gougu/css/layout.css  | 57 ++++++++++++++++------
 public/static/assets/gougu/module/admin.js | 46 ++++++++++++++---
 4 files changed, 83 insertions(+), 26 deletions(-)

diff --git a/app/finance/controller/Api.php b/app/finance/controller/Api.php
index dfd0a4a..14a412d 100644
--- a/app/finance/controller/Api.php
+++ b/app/finance/controller/Api.php
@@ -51,7 +51,7 @@ class Api extends BaseController
 				//发送消息通知
 				$detail = Expense::where(['id' => $param['id']])->find();
 				$msg=[
-					'create_time'=>date('Y-m-d H:i:s',(int)$detail['create_time']),
+					'create_time'=>$detail['create_time'],
 					'title'=>'报销',
 					'action_id'=>$detail['id']
 				];
diff --git a/app/home/view/index/index.html b/app/home/view/index/index.html
index d18100f..c81bbc0 100644
--- a/app/home/view/index/index.html
+++ b/app/home/view/index/index.html
@@ -140,7 +140,7 @@
             <!-- 主体内容 -->
             <div class="layui-body" id="GouguAppBody">
                 <div class="gg-tab-page layui-show" id="tabItem0">
-                    <iframe id="0" data-frameid="0" title="勾股OA" name="myiframe" src="{:url('/home/index/main')}" frameborder="0" align="left" width="100%" height="100%" scrolling="yes"></iframe>
+                    <iframe id="0" data-frameid="0" title="勾股OA" name="myiframe" src="{:url('/home/index/main')}" frameborder="0" data-timestamp="0" align="left" width="100%" height="100%" scrolling="yes"></iframe>
                 </div>
             </div>
             <!-- 辅助元素,用于移动设备下遮罩 -->
@@ -170,7 +170,7 @@
 				}
 			}
 		}
-		
+		admin.loading();
 		$('.layui-side-scroll').hover(function(){
 			$(this).removeClass('no-scroll');
 		},function(){
diff --git a/public/static/assets/gougu/css/layout.css b/public/static/assets/gougu/css/layout.css
index 891be68..bee3f65 100644
--- a/public/static/assets/gougu/css/layout.css
+++ b/public/static/assets/gougu/css/layout.css
@@ -22,6 +22,48 @@
 .gg-layout .layui-logo,
 .gg-layout .layui-logo a {color: #f1f1f1; text-align:center;}
 
+/** tab过场动画 **/
+.tab-loading{ position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 666666; display: block; width: 100%; height: 100%; background-color: #fafafa;}
+.tab-loader {position: absolute;top: calc(50% - 1.6em);left: calc(50% - 1.6em); width: 3.2em; height: 3.2em; transform: rotate(165deg);}
+.tab-loader:before,.tab-loader:after {content: ""; position: absolute; top: 50%; left: 50%; display: block; width: 0.6em; height: 0.6em; border-radius: 0.3em; transform: translate(-50%, -50%);}
+.tab-loader:before { animation: before 2s infinite;}
+.tab-loader:after {animation: after 2s infinite;}
+
+@keyframes before {
+  0% {
+    width: 0.6em;
+    box-shadow: 1.6em -0.6em rgba(225, 20, 98, 0.88), -1.6em 0.6em rgba(111, 202, 220, 0.88);
+  }
+  35% {
+    width: 3.2em;
+    box-shadow: 0 -0.6em rgba(225, 20, 98, 0.88), 0 0.6em rgba(111, 202, 220, 0.88);
+  }
+  70% {
+    width: 0.6em;
+    box-shadow: -1em -0.6em rgba(225, 20, 98, 0.88), 1.6em 0.6em rgba(111, 202, 220, 0.88);
+  }
+  100% {
+    box-shadow: 1em -0.6em rgba(225, 20, 98, 0.88), -1.6em 0.6em rgba(111, 202, 220, 0.88);
+  }
+}
+@keyframes after {
+  0% {
+    height: 0.6em;
+    box-shadow: 0.6em 1.6em rgba(61, 184, 143, 0.88), -0.6em -1.6em rgba(233, 169, 32, 0.88);
+  }
+  35% {
+    height: 3.2em;
+    box-shadow: 0.6em 0 rgba(61, 184, 143, 0.88), -0.6em 0 rgba(233, 169, 32, 0.88);
+  }
+  70% {
+    height: 0.6em;
+    box-shadow: 0.6em -1.6em rgba(61, 184, 143, 0.88), -0.6em 1.6em rgba(233, 169, 32, 0.88);
+  }
+  100% {
+    box-shadow: 0.6em 1.6em rgba(61, 184, 143, 0.88), -0.6em -1.6em rgba(233, 169, 32, 0.88);
+  }
+}
+
 .layui-side-menu {box-shadow: 1px 0 2px 0 rgba(0, 0, 0, .05);background-color: #001529; color: #fff}
 .layui-side-menu .layui-side-scroll {width: 100%;}
 .layui-side-menu .layui-side-scroll.no-scroll{overflow-y:hidden;}
@@ -66,7 +108,6 @@
 .layui-side-white .layui-nav-tree .layui-nav-child dd a:hover{background-color:#ffffff;color: #187FDD;}
 .layui-side-white .layui-nav-tree .layui-nav-bar{background-color: #187FDD;width:3px;left:inherit;right:0}
 
-
 .layui-side-blue{background-color:#192A5E; color: #C5C9D2}
 .layui-side-blue .layui-logo {background-color: #122150;border-bottom: 1px solid #122150;}
 .layui-side-blue .layui-nav .layui-nav-item a{color: #C5C9D2}
@@ -199,18 +240,4 @@
 }
 .side-spread-sm .gg-body-shade {
     display: block;
-}
-
-.gg-tab-page.layui-show {animation:moveTop .4s;-webkit-animation:moveTop .4s;animation-fill-mode:both;-webkit-animation-fill-mode:both;position:relative;height:100%;-webkit-overflow-scrolling:touch;}
-@keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px);}
-    100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}
-}
-@-o-keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px);}
-    100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}
-}
-@-moz-keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px);}
-    100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}
-}
-@-webkit-keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px);}
-    100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}
 }
\ No newline at end of file
diff --git a/public/static/assets/gougu/module/admin.js b/public/static/assets/gougu/module/admin.js
index 3008f4e..e2eb568 100644
--- a/public/static/assets/gougu/module/admin.js
+++ b/public/static/assets/gougu/module/admin.js
@@ -1,11 +1,31 @@
 layui.define(['element'], function (exports) {
 	var element = layui.element;
 	var tab = {
-		/*新增一个Tab页面
-		* @id,tab页面唯一标识,可是标签中data-id的属性值
-		* @url,tab页面地址
-		* @name,tab页面标题,
-		*/
+        // tab动画加载效果
+        loading: function() {
+            let load = '<div class="tab-loading"><div class="tab-loader"></div></div>';
+            let $iframe = $('#GouguAppBody').find('.gg-tab-page.layui-show iframe');
+            if (!$iframe.next().length) {
+                $iframe.parent().append(load);
+                let tabLoad = $iframe.parent().find('.tab-loading');
+				let tab_timestamp =  $iframe.data('timestamp');
+				let timestamp = new Date().getTime();
+				//console.log(tab_timestamp);
+				if(timestamp-tab_timestamp<666){
+					$iframe.on('load', function() {
+						tabLoad.fadeOut(666, function() {
+							tabLoad.remove();
+						});
+					})
+				}
+				else{
+					tabLoad.fadeOut(666, function() {
+						tabLoad.remove();
+					});
+				}
+            }
+        },
+		//历史tab预加载
 		tabTem: function (id, url, title) {
 			element.tabAdd('gg-admin-tab', {
 				id: id,
@@ -14,8 +34,13 @@ layui.define(['element'], function (exports) {
 			});
 			$('#GouguAppBody').append('<div class="gg-tab-page" title="'+title+'" id="tabItem' + id + '" data-id="' + id + '" data-url="' + url + '"></div>');
 		},
+		/*新增一个Tab页面
+		* @id,tab页面唯一标识,可是标签中data-id的属性值
+		* @url,tab页面地址
+		* @name,tab页面标题,
+		*/
 		tabAdd: function (id, url, title) {
-			var thetabs = $('#pageTabUl').find('li');
+			let thetabs = $('#pageTabUl').find('li');
 			if (thetabs.length > 12) {
 				layer.tips('点击LOGO快速关闭已开的TAB页面', $('.layui-logo'));
 			}
@@ -28,7 +53,9 @@ layui.define(['element'], function (exports) {
 				url:url,
 				title: '<span class="gg-tab-active"></span>' + title
 			});
-			$('#GouguAppBody').append('<div class="gg-tab-page" title="'+title+'" id="tabItem' + id + '" data-id="' + id + '"><iframe id="' + id + '" data-frameid="' + id + '" src="' + url + '" frameborder="0" align="left" width="100%" height="100%" scrolling="yes"></iframe></div>');
+			// 获取当前时间戳(毫秒数)
+			let timestamp = new Date().getTime();
+			$('#GouguAppBody').append('<div class="gg-tab-page" title="'+title+'" id="tabItem'+id+'" data-id="'+id +'"><iframe id="'+id+'" data-frameid="'+id+'" data-timestamp="'+timestamp+'" src="'+url+'" frameborder="0" align="left" width="100%" height="100%" scrolling="yes"></iframe></div>');
 			this.tabChange(id);
 		},
 		//从子页面打开新的Tab页面,防止id重复,使用时间戳作为唯一标识
@@ -190,7 +217,9 @@ layui.define(['element'], function (exports) {
 		let id = thisPage.data('id');
 		let url = thisPage.data('url');
 		if(thisPage.find('iframe').length==0){
-			thisPage.html('<iframe id="' + id + '" data-frameid="' + id + '" src="' + url + '" frameborder="0" align="left" width="100%" height="100%" scrolling="yes"></iframe>');
+			// 获取当前时间戳(毫秒数)
+			let timestamp = new Date().getTime();
+			thisPage.html('<iframe id="'+id+'" data-frameid="'+id+'" data-timestamp="'+timestamp+'" src="'+url+'" frameborder="0" align="left" width="100%" height="100%" scrolling="yes"></iframe>');
 		}
 		tab.tabFollow(id);
 		$('#GouguAppBody').find('.gg-tab-page').removeClass('layui-show');
@@ -198,6 +227,7 @@ layui.define(['element'], function (exports) {
 		if(data.index==0){
 			tab.refresh(0);
 		}
+		tab.loading();
 		tab.tabRoll("auto", data.index);
 		tab.tabCookie();
 	});