From 0886965aa6b5dc837143a75d9095422fff4b398d Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 13 十一月 2018 17:23:10 +0800
Subject: [PATCH] 4709 【1.3】【前端】法宝界面拆分

---
 System/Treasure/TreasureCollectBriefInfoBehaviour.cs |    2 
 System/Treasure/TreasureExhibitionBehaviour.cs       |    2 
 System/Treasure/DemonTreasureWin.cs.meta             |   12 
 System/Chat/ChatCenter.cs                            |    2 
 System/Treasure/FairyTreasureWin.cs                  |   70 ++++
 System/Treasure/TreasureLevelUpWin.cs                |  315 +++-----------------
 System/MainInterfacePanel/PowerAddWin.cs             |    2 
 System/MainInterfacePanel/FlyingShoesTask.cs         |    4 
 System/Treasure/TreasureBaseWin.cs                   |  288 +++++++++++++++++++
 System/WindowJump/WindowJumpMgr.cs                   |    8 
 System/MainInterfacePanel/CoinTaskTipModel.cs        |    4 
 System/MainInterfacePanel/PlayerTaskDatas.cs         |    2 
 System/WorldMap/LocalMapTreasure.cs                  |    2 
 System/Treasure/FairyTreasureCollectPanelPattern3.cs |    4 
 System/Treasure/TreasureDemonBehaviour.cs            |    5 
 System/Treasure/FairyTreasureCollectPanelPattern5.cs |    8 
 System/Treasure/DemonTreasureWin.cs                  |   70 ++++
 System/BossShow/BossShowModel.cs                     |    4 
 System/Treasure/FairyTreasureWin.cs.meta             |   12 
 System/Treasure/TreasureSelectWin.cs                 |    2 
 System/Treasure/UI3DTreasureSelectStage.cs           |    1 
 System/Treasure/TreasureBaseWin.cs.meta              |   12 
 System/Treasure/FairyTreasureCollectPanel.cs         |   18 +
 System/Achievement/AchievementModel.cs               |   30 +-
 24 files changed, 576 insertions(+), 303 deletions(-)

diff --git a/System/Achievement/AchievementModel.cs b/System/Achievement/AchievementModel.cs
index dd15d84..91c9b4a 100644
--- a/System/Achievement/AchievementModel.cs
+++ b/System/Achievement/AchievementModel.cs
@@ -179,7 +179,7 @@
                 switch (config.Type)
                 {
                     case 3:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
                         WindowCenter.Instance.Open<MainInterfaceWin>();
 
                         var hasTask = taskmodel.GetQuestState(config.Condition[0]) != -1;
@@ -234,7 +234,7 @@
                                 else
                                 {
                                     taskmodel.DailyBountyMove();
-                                    WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                                    WindowCenter.Instance.Close<TreasureBaseWin>();
                                     WindowCenter.Instance.Open<MainInterfaceWin>();
                                 }
                             }
@@ -243,7 +243,7 @@
                     case 1:
                         if (PlayerDatas.Instance.baseData.LV < GeneralDefine.achievementEarlierStageLevel)
                         {
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
                             WindowCenter.Instance.Open<MainInterfaceWin>();
                             taskmodel.AutomaticTripToTask(taskmodel.currentMission);
                         }
@@ -257,7 +257,7 @@
                         break;
                     case 4:
                     case 86:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
                         var mapModel = ModelCenter.Instance.GetModel<MapModel>();
                         var pointId = mapModel.GetRecommendHangPoint();
                         var mapEventConfig = Config.Instance.Get<MapEventPointConfig>(pointId);
@@ -265,12 +265,12 @@
                         WindowCenter.Instance.Open<LocalMapWin>();
                         break;
                     case 36:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
                         WindowCenter.Instance.Open<MainInterfaceWin>();
                         MapTransferUtility.Instance.MoveToNPC(config.Condition[0]);
                         break;
                     case 37:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
                         WindowCenter.Instance.Open<MainInterfaceWin>();
                         MapTransferUtility.Instance.MoveToLocalMapPosition(config.Condition2.Vector3Parse());
                         break;
@@ -292,7 +292,7 @@
                         {
                             if (PlayerDatas.Instance.baseData.LV < GeneralDefine.achievementEarlierStageLevel)
                             {
-                                WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                                WindowCenter.Instance.Close<TreasureBaseWin>();
                                 WindowCenter.Instance.Open<MainInterfaceWin>();
                                 taskmodel.AutomaticTripToTask(taskmodel.currentMission);
                             }
@@ -333,7 +333,7 @@
                         else
                         {
                             AchievementGoto.guideAchievementId = _achievementId;
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
 
                             playerPack.SetLookIndex(guid82);
                             WindowCenter.Instance.Close<MainInterfaceWin>();
@@ -358,7 +358,7 @@
                         {
                             AchievementGoto.guideAchievementId = _achievementId;
                             playerPack.SetLookIndex(guid83);
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
                             WindowCenter.Instance.Close<MainInterfaceWin>();
                             WindowCenter.Instance.Open<KnapSackWin>();
                         }
@@ -379,7 +379,7 @@
                         }
                         else
                         {
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
 
                             playerPack.SetLookIndex(guid84);
                             WindowCenter.Instance.Close<MainInterfaceWin>();
@@ -402,7 +402,7 @@
                         }
                         else
                         {
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
 
                             playerPack.SetLookIndex(guid85);
                             WindowCenter.Instance.Close<MainInterfaceWin>();
@@ -417,7 +417,7 @@
                         }
                         else
                         {
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
 
                             playerPack.SetLookIndex(guid90);
                             WindowCenter.Instance.Close<MainInterfaceWin>();
@@ -425,7 +425,7 @@
                         }
                         break;
                     case 109:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
 
                         var skillId = SkillConfig.FindSkillByJob(config.Condition, PlayerDatas.Instance.baseData.Job);
                         if (skillId != 0)
@@ -483,7 +483,7 @@
                                 }
                                 treasureModel.currentCategory = TreasureCategory.Human;
                                 treasureModel.selectedTreasure = treasureId;
-                                if (!WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+                                if (!WindowCenter.Instance.IsOpen<TreasureBaseWin>())
                                 {
                                     WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.TreasureCollectSoul);
                                 }
@@ -491,7 +491,7 @@
                         }
                         break;
                     default:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
 
                         WindowCenter.Instance.Open<MainInterfaceWin>();
                         break;
diff --git a/System/BossShow/BossShowModel.cs b/System/BossShow/BossShowModel.cs
index 502a120..98eef9d 100644
--- a/System/BossShow/BossShowModel.cs
+++ b/System/BossShow/BossShowModel.cs
@@ -80,10 +80,10 @@
                 ActiveBossShowCam(true);
                 CameraController.Instance.CameraObject.enabled = false;
 
-                if (WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+                if (WindowCenter.Instance.IsOpen<TreasureBaseWin>())
                 {
                     WindowJumpMgr.Instance.ClearJumpData();
-                    WindowCenter.Instance.CloseImmediately<TreasureLevelUpWin>();
+                    WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                     WindowCenter.Instance.CloseImmediately<TreasureSelectWin>();
                     WindowCenter.Instance.Open<MainInterfaceWin>();
                 }
diff --git a/System/Chat/ChatCenter.cs b/System/Chat/ChatCenter.cs
index 20cc9ed..1e11ab1 100644
--- a/System/Chat/ChatCenter.cs
+++ b/System/Chat/ChatCenter.cs
@@ -779,7 +779,7 @@
         private void CheckChatFloatOpen()
         {
             if (WindowCenter.Instance.ExitAnyFullScreenOrMaskWin() && !WindowCenter.Instance.IsOpen<LoadingWin>()
-                && StageManager.Instance.CurrentStage is DungeonStage && !WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+                && StageManager.Instance.CurrentStage is DungeonStage && !WindowCenter.Instance.IsOpen<TreasureBaseWin>())
             {
                 if (!WindowCenter.Instance.IsOpen<ChatFloatWin>())
                 {
diff --git a/System/MainInterfacePanel/CoinTaskTipModel.cs b/System/MainInterfacePanel/CoinTaskTipModel.cs
index 6c62199..408416c 100644
--- a/System/MainInterfacePanel/CoinTaskTipModel.cs
+++ b/System/MainInterfacePanel/CoinTaskTipModel.cs
@@ -114,7 +114,7 @@
     private IEnumerator PopupPanel()
     {
         yield return WaitingForSecondConst.WaitMS1500;
-        if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing || WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+        if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing || WindowCenter.Instance.IsOpen<TreasureBaseWin>())
         {
             yield break;
         }
@@ -136,7 +136,7 @@
     private IEnumerator FairyAuTaskPanel()
     {
         yield return WaitingForSecondConst.WaitMS1500;
-        if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing || WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+        if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing || WindowCenter.Instance.IsOpen<TreasureBaseWin>())
         {
             yield break;
         }
diff --git a/System/MainInterfacePanel/FlyingShoesTask.cs b/System/MainInterfacePanel/FlyingShoesTask.cs
index 6f4d306..175840b 100644
--- a/System/MainInterfacePanel/FlyingShoesTask.cs
+++ b/System/MainInterfacePanel/FlyingShoesTask.cs
@@ -189,7 +189,7 @@
                         {
                             treasureModel.selectedTreasure = _treasureId;
                             treasureModel.openFromTaskId = Task_ID;
-                            WindowCenter.Instance.Open<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Open<TreasureBaseWin>();
                         }
                         return;
                     }
@@ -211,7 +211,7 @@
                         {
                             treasureModel.selectedTreasure = _treasureId;
                             treasureModel.openFromTaskId = Task_ID;
-                            WindowCenter.Instance.Open<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Open<TreasureBaseWin>();
                         }
                     }
                     break;
diff --git a/System/MainInterfacePanel/PlayerTaskDatas.cs b/System/MainInterfacePanel/PlayerTaskDatas.cs
index fd76410..e70ecba 100644
--- a/System/MainInterfacePanel/PlayerTaskDatas.cs
+++ b/System/MainInterfacePanel/PlayerTaskDatas.cs
@@ -1295,7 +1295,7 @@
             yield break;
         }
 
-        if (WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+        if (WindowCenter.Instance.IsOpen<TreasureBaseWin>())
         {
             yield break;
         }
diff --git a/System/MainInterfacePanel/PowerAddWin.cs b/System/MainInterfacePanel/PowerAddWin.cs
index acb494c..a5b9a37 100644
--- a/System/MainInterfacePanel/PowerAddWin.cs
+++ b/System/MainInterfacePanel/PowerAddWin.cs
@@ -121,7 +121,7 @@
         void CheckPosition()
         {
             var type = WindowType.None;
-            if (WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+            if (WindowCenter.Instance.IsOpen<TreasureBaseWin>())
             {
                 type = WindowType.TreasureLevelUp;
             }
diff --git a/System/Treasure/DemonTreasureWin.cs b/System/Treasure/DemonTreasureWin.cs
new file mode 100644
index 0000000..8c484fc
--- /dev/null
+++ b/System/Treasure/DemonTreasureWin.cs
@@ -0,0 +1,70 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Tuesday, November 13, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI {
+
+    public class DemonTreasureWin : Window
+    {
+        [SerializeField] TreasureDemonBehaviour m_TreasureDemonBehaviour;
+
+        TreasureModel model
+        {
+            get { return ModelCenter.Instance.GetModel<TreasureModel>(); }
+        }
+        #region Built-in
+        protected override void BindController()
+        {
+        }
+
+        protected override void AddListeners()
+        {
+        }
+
+        protected override void OnPreOpen()
+        {
+            UI3DTreasureSelectStage.Instance.SetStartState();
+        }
+
+        protected override void OnActived()
+        {
+            base.OnActived();
+            model.treasureSelectedEvent += TreasureSelectedEvent;
+            m_TreasureDemonBehaviour.Display(model.selectedTreasure, true);
+        }
+
+        protected override void OnAfterOpen()
+        {
+            
+        }
+
+        protected override void OnPreClose()
+        {
+            model.treasureSelectedEvent -= TreasureSelectedEvent;
+            model.SetTreasureUnlockShow(TreasureCategory.Demon, 0);
+        }
+
+        protected override void OnAfterClose()
+        {
+        }
+        #endregion
+
+        private void TreasureSelectedEvent(int obj)
+        {
+            m_TreasureDemonBehaviour.Display(model.selectedTreasure, false);
+        }
+
+    }
+
+}
+
+
+
+
diff --git a/System/Treasure/DemonTreasureWin.cs.meta b/System/Treasure/DemonTreasureWin.cs.meta
new file mode 100644
index 0000000..c08e49e
--- /dev/null
+++ b/System/Treasure/DemonTreasureWin.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9a3ed68d5cc690a458ae6f67f431841b
+timeCreated: 1542095044
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/Treasure/FairyTreasureCollectPanel.cs b/System/Treasure/FairyTreasureCollectPanel.cs
index eb0b92e..079ca25 100644
--- a/System/Treasure/FairyTreasureCollectPanel.cs
+++ b/System/Treasure/FairyTreasureCollectPanel.cs
@@ -12,8 +12,10 @@
 {
     public class FairyTreasureCollectPanel : MonoBehaviour
     {
-
+        [SerializeField] Image m_TreasureNameIcon;
+        [SerializeField] PositionTween m_NameTween;
         [SerializeField] TreasureContainer[] m_TreasureContainers;
+        
 
         public void Display(int _treasureId, bool _tween = false)
         {
@@ -33,6 +35,20 @@
                 }
             }
 
+            var config = Config.Instance.Get<TreasureConfig>(_treasureId);
+            if (config != null)
+            {
+                m_TreasureNameIcon.SetSprite(config.TreasureNameIcon);
+            }
+
+            if (_tween)
+            {
+                m_NameTween.Play();
+            }
+            else
+            {
+                m_NameTween.SetEndState();
+            }
         }
 
         public void Dispose()
diff --git a/System/Treasure/FairyTreasureCollectPanelPattern3.cs b/System/Treasure/FairyTreasureCollectPanelPattern3.cs
index ea250cf..7316355 100644
--- a/System/Treasure/FairyTreasureCollectPanelPattern3.cs
+++ b/System/Treasure/FairyTreasureCollectPanelPattern3.cs
@@ -130,7 +130,7 @@
                         FuncOpen.Instance.ProcessorFuncErrorTip(124);
                         return;
                     }
-                    WindowCenter.Instance.CloseImmediately<TreasureLevelUpWin>();
+                    WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                     WindowCenter.Instance.Open<TreasureFindHostWin>();
                     break;
             }
@@ -145,7 +145,7 @@
             }
             if (show)
             {
-                WindowCenter.Instance.CloseImmediately<TreasureLevelUpWin>();
+                WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                 WindowCenter.Instance.Open<MainInterfaceWin>();
             }
             show = false;
diff --git a/System/Treasure/FairyTreasureCollectPanelPattern5.cs b/System/Treasure/FairyTreasureCollectPanelPattern5.cs
index 9d3587a..e71fe04 100644
--- a/System/Treasure/FairyTreasureCollectPanelPattern5.cs
+++ b/System/Treasure/FairyTreasureCollectPanelPattern5.cs
@@ -182,7 +182,7 @@
         private void DisplayFurnacesHole()
         {
             m_ContainerHoles.gameObject.SetActive(treasure.state == TreasureState.Collected);
-            if (treasure.state == TreasureState.Collected)
+            if (treasure.state == TreasureState.Collected && treasure.stage == 0)
             {
                 var _list = model.GetFurnacesAchievements();
                 for (int i = 0; i < m_FurnacesIcons.Length; i++)
@@ -218,7 +218,7 @@
                     m_FurnacesIcons[i].gameObject.SetActive(achievement != null && achievement.completed);
                 }
             }
-            else
+            if (treasure.state == TreasureState.Collected && treasure.stage >= 1)
             {
                 for (int i = 0; i < m_FurnacesIcons.Length; i++)
                 {
@@ -257,7 +257,7 @@
             {
                 TreasureStageUpTriggerWin.screenShotCut = _tex;
                 WindowJumpMgr.Instance.ClearJumpData();
-                WindowCenter.Instance.CloseImmediately<TreasureLevelUpWin>();
+                WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                 WindowCenter.Instance.Open<TreasureStageUpTriggerWin>(true);
                 WindowCenter.Instance.Open<MainInterfaceWin>();
                 if (WindowCenter.Instance.IsOpen<DialogueDuidanceWin>())
@@ -439,7 +439,7 @@
 
         private void GotoStove()
         {
-            WindowCenter.Instance.CloseImmediately<TreasureLevelUpWin>();
+            WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
             WindowCenter.Instance.Close<MainInterfaceWin>();
             WindowCenter.Instance.Open<BlastFurnaceWin>();
         }
diff --git a/System/Treasure/FairyTreasureWin.cs b/System/Treasure/FairyTreasureWin.cs
new file mode 100644
index 0000000..94702c7
--- /dev/null
+++ b/System/Treasure/FairyTreasureWin.cs
@@ -0,0 +1,70 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Tuesday, November 13, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI {
+
+    public class FairyTreasureWin : Window
+    {
+        [SerializeField] FairyTreasureCollectPanel m_TreasureFairyBehaviour;
+
+        TreasureModel model
+        {
+            get { return ModelCenter.Instance.GetModel<TreasureModel>(); }
+        }
+        #region Built-in
+        protected override void BindController()
+        {
+        }
+
+        protected override void AddListeners()
+        {
+        }
+
+        protected override void OnPreOpen()
+        {
+            UI3DTreasureSelectStage.Instance.SetStartState();
+        }
+
+        protected override void OnActived()
+        {
+            base.OnActived();
+            model.treasureSelectedEvent += TreasureSelectedEvent;
+            m_TreasureFairyBehaviour.Dispose();
+            m_TreasureFairyBehaviour.Display(model.selectedTreasure, true);
+        }
+
+        protected override void OnAfterOpen()
+        {
+            
+        }
+
+        protected override void OnPreClose()
+        {
+            m_TreasureFairyBehaviour.Dispose();
+            model.treasureSelectedEvent -= TreasureSelectedEvent;
+        }
+
+        protected override void OnAfterClose()
+        {
+        }
+        #endregion
+        private void TreasureSelectedEvent(int obj)
+        {
+            m_TreasureFairyBehaviour.Dispose();
+            m_TreasureFairyBehaviour.Display(model.selectedTreasure, false);
+        }
+    }
+
+}
+
+
+
+
diff --git a/System/Treasure/FairyTreasureWin.cs.meta b/System/Treasure/FairyTreasureWin.cs.meta
new file mode 100644
index 0000000..6c47012
--- /dev/null
+++ b/System/Treasure/FairyTreasureWin.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e51dda432d4101d459487613d8918b7e
+timeCreated: 1542095817
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/Treasure/TreasureBaseWin.cs b/System/Treasure/TreasureBaseWin.cs
new file mode 100644
index 0000000..497684f
--- /dev/null
+++ b/System/Treasure/TreasureBaseWin.cs
@@ -0,0 +1,288 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Tuesday, November 13, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using TableConfig;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI
+{
+
+    public class TreasureBaseWin : Window
+    {
+        [SerializeField] RectTransform m_DisplayContainer;
+        [SerializeField] Image m_TreasureTitle;
+        [SerializeField] DragSelectComponent m_DragSelect;
+        [SerializeField] Button m_Left;
+        [SerializeField] Button m_Right;
+        [SerializeField] Button m_Back;
+
+        public static event Func<int, bool> allowSelectTreasure;
+        public static event Func<int> allowBack;
+        public static event Action<int> prepareSelectTreasure;
+        public static event Action prepareBack;
+
+        bool backToSelectWindow = false;
+
+        TreasureModel model
+        {
+            get { return ModelCenter.Instance.GetModel<TreasureModel>(); }
+        }
+        #region Built-in
+        protected override void BindController()
+        {
+        }
+
+        protected override void AddListeners()
+        {
+            m_Left.onClick.AddListener(Left);
+            m_Right.onClick.AddListener(Right);
+            m_Back.onClick.AddListener(Back);
+        }
+
+        protected override void OnPreOpen()
+        {
+            backToSelectWindow = false;
+            m_DisplayContainer.gameObject.SetActive(false);
+            if (UI3DTreasureSelectStage.Instance.IsOpen)
+            {
+                if (UI3DTreasureSelectStage.Instance.jumpTreasure != 0)
+                {
+                    model.selectedTreasure = UI3DTreasureSelectStage.Instance.jumpTreasure;
+                }
+                else
+                {
+                    model.selectedTreasure = UI3DTreasureSelectStage.Instance.selectTreasure;
+                }
+            }
+        }
+
+        protected override void OnAfterOpen()
+        {
+            UI3DTreasureSelectStage.Instance.OnCameraCloserComplete += OnCameraCloserComplete;
+            UI3DTreasureSelectStage.Instance.OnCameraBackComplete += OnCameraBackComplete;
+            m_DragSelect.onDragComplete += OnDragComplete;
+            model.treasureSelectedEvent += TreasureSelectedEvent;
+
+            CameraManager.uiCamera.enabled = true;
+            if (!UI3DTreasureSelectStage.Instance.IsOpen)
+            {
+                UI3DTreasureSelectStage.Instance.Open(true, model.currentCategory);
+                var _list = model.GetTreasureCategory(model.currentCategory);
+                var _index = _list.FindIndex((x) =>
+                {
+                    return x == model.selectedTreasure;
+                });
+                UI3DTreasureSelectStage.Instance.GotoImmediatly(_index);
+                OnCameraCloserComplete();
+            }
+            else if (UI3DTreasureSelectStage.Instance.CloserComplete)
+            {
+                OnCameraCloserComplete();
+            }
+        }
+
+        protected override void OnPreClose()
+        {
+            CloseSubWindows();
+
+            UI3DTreasureSelectStage.Instance.OnCameraCloserComplete -= OnCameraCloserComplete;
+            UI3DTreasureSelectStage.Instance.OnCameraBackComplete -= OnCameraBackComplete;
+            m_DragSelect.onDragComplete -= OnDragComplete;
+            model.treasureSelectedEvent -= TreasureSelectedEvent;
+
+            if (!backToSelectWindow)
+            {
+                UI3DTreasureSelectStage.Instance.Close();
+            }
+        }
+
+        protected override void OnAfterClose()
+        {
+        }
+        #endregion
+
+        private void TreasureSelectedEvent(int treasureId)
+        {
+            DisplaySelects();
+            var list = model.GetTreasureCategory(model.currentCategory);
+            var index = list.FindIndex((x) =>
+            {
+                return x == treasureId;
+            });
+            if (index != -1)
+            {
+                UI3DTreasureSelectStage.Instance.GotoImmediatly(index);
+            }
+        }
+
+        private void OnCameraCloserComplete()
+        {
+            if (WindowCenter.Instance.IsOpen<EffectToFaBaoWin>())
+            {
+                WindowCenter.Instance.CloseImmediately<EffectToFaBaoWin>();
+            }
+            CloseSubWindows();
+            m_DisplayContainer.gameObject.SetActive(true);
+            switch (model.currentCategory)
+            {
+                case TreasureCategory.Human:
+                    m_TreasureTitle.SetSprite("XT_FB_45");
+                    m_Left.image.SetSprite("XT_FB_33");
+                    m_Right.image.SetSprite("XT_FB_34");
+                    WindowCenter.Instance.Open<TreasureLevelUpWin>();
+                    break;
+                case TreasureCategory.Demon:
+                    m_TreasureTitle.SetSprite("XT_FB_46");
+                    m_Left.image.SetSprite("XT_FB_35");
+                    m_Right.image.SetSprite("XT_FB_36");
+                    WindowCenter.Instance.Open<DemonTreasureWin>();
+                    break;
+                case TreasureCategory.Fairy:
+                    m_TreasureTitle.SetSprite("XT_FB_47");
+                    m_Left.image.SetSprite("XT_FB_33");
+                    m_Right.image.SetSprite("XT_FB_34");
+                    WindowCenter.Instance.Open<FairyTreasureWin>();
+                    break;
+            }
+            DisplaySelects();
+        }
+
+        private void DisplaySelects()
+        {
+            var leftRifht = Config.Instance.Get<TreasureConfig>(model.selectedTreasure + 1);
+            m_Right.gameObject.SetActive(leftRifht != null);
+            leftRifht = Config.Instance.Get<TreasureConfig>(model.selectedTreasure - 1);
+            m_Left.gameObject.SetActive(leftRifht != null);
+        }
+
+        private void OnCameraBackComplete()
+        {
+            backToSelectWindow = true;
+            CloseImmediately();
+        }
+
+        private void OnDragComplete(int result)
+        {
+            if (result > 0)
+            {
+                Right();
+            }
+            else if (result < 0)
+            {
+                Left();
+            }
+        }
+
+        private void Left()
+        {
+            var selectTreasure = model.selectedTreasure - 1;
+            if (!AllowSelectTreasure(selectTreasure))
+            {
+                return;
+            }
+            if (prepareSelectTreasure != null)
+            {
+                prepareSelectTreasure(selectTreasure);
+            }
+            model.selectedTreasure = selectTreasure;
+        }
+
+        private void Right()
+        {
+            var selectTreasure = model.selectedTreasure + 1;
+            if (!AllowSelectTreasure(selectTreasure))
+            {
+                return;
+            }
+            if (prepareSelectTreasure != null)
+            {
+                prepareSelectTreasure(selectTreasure);
+            }
+            model.selectedTreasure = selectTreasure;
+        }
+
+        private void Back()
+        {
+            var returnCode = 0;
+            if (allowBack != null)
+            {
+                returnCode = allowBack();
+            }
+            if (returnCode != 0)
+            {
+                return;
+            }
+            if (PlayerDatas.Instance.baseData.LV < model.treasureBackLvLimit
+                            && !WindowJumpMgr.Instance.IsJumpState)
+            {
+                StartBack();
+                return;
+            }
+            if (!WindowJumpMgr.Instance.IsJumpState && model.openFromTreasureList)
+            {
+                StartBack();
+                return;
+            }
+            if (!WindowJumpMgr.Instance.IsJumpState && model.exitRecord >= 4)
+            {
+                StartBack();
+                model.exitRecord = 0;
+                return;
+            }
+            model.openFromTreasureList = false;
+            CloseImmediately();
+            if (!WindowJumpMgr.Instance.IsJumpState)
+            {
+                model.exitRecord++;
+                WindowCenter.Instance.Open<MainInterfaceWin>();
+            }
+        }
+
+        void StartBack()
+        {
+            if (prepareBack != null)
+            {
+                prepareBack();
+            }
+            model.openFromTreasureList = false;
+            CloseSubWindows();
+            m_DisplayContainer.gameObject.SetActive(false);
+            WindowCenter.Instance.Open<TreasureSelectWin>(true);
+            UI3DTreasureSelectStage.Instance.StartBack();
+        }
+
+        private bool AllowSelectTreasure(int treasureId)
+        {
+            Treasure treasure;
+            if (!model.TryGetTreasure(treasureId, out treasure))
+            {
+                return false;
+            }
+            if (allowSelectTreasure != null && !allowSelectTreasure(treasureId))
+            {
+                return false;
+            }
+            return true;
+        }
+
+        private void CloseSubWindows()
+        {
+            var childrens = WindowConfig.Get().FindChildWindows("TreasureBaseWin");
+            foreach (var window in childrens)
+            {
+                WindowCenter.Instance.Close(window);
+            }
+        }
+    }
+
+}
+
+
+
+
diff --git a/System/Treasure/TreasureBaseWin.cs.meta b/System/Treasure/TreasureBaseWin.cs.meta
new file mode 100644
index 0000000..e780902
--- /dev/null
+++ b/System/Treasure/TreasureBaseWin.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8caae764204324b49a5cdc5ee43c33c4
+timeCreated: 1542077271
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/Treasure/TreasureCollectBriefInfoBehaviour.cs b/System/Treasure/TreasureCollectBriefInfoBehaviour.cs
index 8edc2ca..38f7319 100644
--- a/System/Treasure/TreasureCollectBriefInfoBehaviour.cs
+++ b/System/Treasure/TreasureCollectBriefInfoBehaviour.cs
@@ -384,7 +384,7 @@
                 model.selectedTreasure = displayTreasureId;
                 model.currentCategory = (TreasureCategory)config.Category;
                 model.openFromTreasureCollect = true;
-                WindowCenter.Instance.Open<TreasureLevelUpWin>();
+                WindowCenter.Instance.Open<TreasureBaseWin>();
             }
         }
 
diff --git a/System/Treasure/TreasureDemonBehaviour.cs b/System/Treasure/TreasureDemonBehaviour.cs
index 53ead53..242865e 100644
--- a/System/Treasure/TreasureDemonBehaviour.cs
+++ b/System/Treasure/TreasureDemonBehaviour.cs
@@ -9,6 +9,7 @@
 {
     public class TreasureDemonBehaviour : MonoBehaviour
     {
+        [SerializeField] Image m_TreasureNameIcon;
         [SerializeField] Text m_TreasureDescription;
         [SerializeField] RectTransform m_ContainerFightPower;
         [SerializeField] Text m_FightPower;
@@ -24,6 +25,7 @@
 
         [SerializeField] PositionTween m_DescriptionTween;
         [SerializeField] PositionTween m_SkillTween;
+        [SerializeField] PositionTween m_NameTween;
 
         TreasureModel m_Model;
         TreasureModel model
@@ -74,11 +76,13 @@
                 m_SkillTween.SetStartState();
                 m_DescriptionTween.Play();
                 m_SkillTween.Play();
+                m_NameTween.Play();
             }
             else
             {
                 m_DescriptionTween.SetEndState();
                 m_SkillTween.SetEndState();
+                m_NameTween.SetEndState();
             }
 
             var config = Config.Instance.Get<TreasureConfig>(_id);
@@ -91,6 +95,7 @@
             m_GetBtn.gameObject.SetActive(m_Treasure.state == TreasureState.Collecting);
             m_RecommondPower.gameObject.SetActive(m_Treasure.state != TreasureState.Collected);
             m_ContainerFightPower.gameObject.SetActive(m_Treasure.state == TreasureState.Collected);
+            m_TreasureNameIcon.SetSprite(config.TreasureNameIcon);
 
             if (m_Treasure.state == TreasureState.Locked)
             {
diff --git a/System/Treasure/TreasureExhibitionBehaviour.cs b/System/Treasure/TreasureExhibitionBehaviour.cs
index 6a028a9..07a0525 100644
--- a/System/Treasure/TreasureExhibitionBehaviour.cs
+++ b/System/Treasure/TreasureExhibitionBehaviour.cs
@@ -58,7 +58,7 @@
             {
                 return;
             }
-            if (_window is TreasureSelectWin || _window is TreasureLevelUpWin)
+            if (_window is TreasureSelectWin || _window is TreasureBaseWin)
             {
                 if (!m_NewTreasureEffect.IsPlaying)
                 {
diff --git a/System/Treasure/TreasureLevelUpWin.cs b/System/Treasure/TreasureLevelUpWin.cs
index acecb48..3167699 100644
--- a/System/Treasure/TreasureLevelUpWin.cs
+++ b/System/Treasure/TreasureLevelUpWin.cs
@@ -17,8 +17,6 @@
     {
         [SerializeField] TreasureAnimation m_TreasureAnimation;
         [SerializeField] RectTransform m_DisplayContainer;
-        [SerializeField] Image m_TreasureTitle;
-        [SerializeField] DragSelectComponent m_DragSelect;
 
         [SerializeField] RectTransform m_ContainerUnGet;
         [SerializeField] RectTransform m_ContainerLockDetail;
@@ -54,16 +52,6 @@
         [SerializeField] RectTransform m_ContainerPotential;
         [SerializeField] TreasurePotentialPanel m_TreasurePotential;
 
-        [SerializeField] TreasureDemonBehaviour m_TreasureDemonBehaviour;
-        [SerializeField] FairyTreasureCollectPanel m_TreasureFairyBehaviour;
-
-        [SerializeField] RectTransform m_ContainerSelect;
-        [SerializeField] Image m_LeftRedpoint;
-        [SerializeField] Image m_RightRedpoint;
-        [SerializeField] Button m_LeftBtn;
-        [SerializeField] Button m_RightBtn;
-        [SerializeField] Button m_BackBtn;
-
         TreasureModel m_Model;
         TreasureModel model
         {
@@ -95,9 +83,7 @@
 
         Treasure m_Treasure;
 
-        bool m_CorrectClose = false;
         bool m_OnLevelUpStage = false;
-        bool m_Init = false;
         bool m_NewBieGuide = false;
 
         int mainTaskId = 0;
@@ -118,44 +104,29 @@
 
         protected override void AddListeners()
         {
-            m_BackBtn.onClick.AddListener(OnBack);
             m_GetTreasureBtn.onClick.AddListener(OnGetTreasure);
             m_LevelUpBtn.onClick.AddListener(OnLevelUp);
-            m_LeftBtn.onClick.AddListener(OnLeftBtn);
-            m_RightBtn.onClick.AddListener(OnRightBtn);
             m_Controller.OnRefreshCell += OnRefreshCell;
         }
 
         protected override void OnPreOpen()
         {
-            m_Init = false;
-            if (UI3DTreasureSelectStage.Instance.IsOpen)
-            {
-                if (UI3DTreasureSelectStage.Instance.jumpTreasure != 0)
-                {
-                    model.selectedTreasure = UI3DTreasureSelectStage.Instance.jumpTreasure;
-                }
-                else
-                {
-                    model.selectedTreasure = UI3DTreasureSelectStage.Instance.selectTreasure;
-                }
-            }
-            m_DisplayContainer.gameObject.SetActive(false);
+            m_DisplayContainer.gameObject.SetActive(true);
             m_ContainerSkillShow.gameObject.SetActive(false);
             m_ContainerTip.gameObject.SetActive(false);
-            m_CorrectClose = false;
+
             m_OnLevelUpStage = false;
             m_NewBieGuide = false;
             model.treasureStepUpShow = false;
             m_TreasureAnimation.stepComplete = true;
             beforePlayerLv = PlayerDatas.Instance.baseData.LV;
+
             model.SetTreasureUnlockShow(TreasureCategory.Human, 0);
         }
 
-        protected override void OnAfterOpen()
+        protected override void OnActived()
         {
-            UI3DTreasureSelectStage.Instance.OnCameraCloserComplete += OnCameraCloserComplete;
-            UI3DTreasureSelectStage.Instance.OnCameraBackComplete += OnCameraBackComplete;
+            base.OnActived();
             PlayerTaskDatas.CardLevelChange += CardLevelChange;
             model.treasureLevelProgressUpdateEvent += TreasureLevelProgressUpdateEvent;
             model.treasureSelectedEvent += TreasureSelectedEvent;
@@ -169,39 +140,23 @@
             m_Slider.slider.onValueChanged.AddListener(OnSliderValueUpdate);
             NewBieCenter.Instance.guideCompletedEvent += GuideCompletedEvent;
             FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
-            model.skillLevelUpRedpointUpdate += SkillLevelUpRedpointUpdate;
-            m_DragSelect.onDragComplete += onDragComplete;
-
-            CameraManager.uiCamera.enabled = true;
-            if (!UI3DTreasureSelectStage.Instance.IsOpen)
-            {
-                UI3DTreasureSelectStage.Instance.Open(true, model.currentCategory);
-                var _list = model.GetTreasureCategory(model.currentCategory);
-                var _index = _list.FindIndex((x) =>
-                {
-                    return x == model.selectedTreasure;
-                });
-                UI3DTreasureSelectStage.Instance.GotoImmediatly(_index);
-                OnCameraCloserComplete();
-            }
-            else if (UI3DTreasureSelectStage.Instance.CloserComplete && !m_Init)
-            {
-                OnCameraCloserComplete();
-            }
             model.treasureStateChangeEvent += TreasureStateChangeEvent;
-
+            TreasureBaseWin.allowSelectTreasure += AllowSelectTreasure;
+            TreasureBaseWin.prepareSelectTreasure += PrepareSelectTreasure;
+            TreasureBaseWin.allowBack += AllowBack;
+            TreasureBaseWin.prepareBack += PrepareBack;
             mainTaskId = 0;
+
+            Display();
         }
 
-        protected override void OnActived()
+        protected override void OnAfterOpen()
         {
-            base.OnActived();
+            
         }
 
         protected override void OnPreClose()
         {
-            UI3DTreasureSelectStage.Instance.OnCameraCloserComplete -= OnCameraCloserComplete;
-            UI3DTreasureSelectStage.Instance.OnCameraBackComplete -= OnCameraBackComplete;
             model.treasureLevelProgressUpdateEvent -= TreasureLevelProgressUpdateEvent;
             PlayerTaskDatas.CardLevelChange -= CardLevelChange;
             model.treasureSelectedEvent -= TreasureSelectedEvent;
@@ -215,19 +170,16 @@
             NewBieCenter.Instance.guideCompletedEvent -= GuideCompletedEvent;
             model.treasureStateChangeEvent -= TreasureStateChangeEvent;
             FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
-            m_DragSelect.onDragComplete -= onDragComplete;
-            model.skillLevelUpRedpointUpdate -= SkillLevelUpRedpointUpdate;
+            TreasureBaseWin.allowSelectTreasure -= AllowSelectTreasure;
+            TreasureBaseWin.prepareSelectTreasure -= PrepareSelectTreasure;
+            TreasureBaseWin.allowBack -= AllowBack;
+            TreasureBaseWin.prepareBack -= PrepareBack;
             m_Slider.slider.onValueChanged.RemoveAllListeners();
             m_TreasurePotential.Dispose();
             m_AchievementScroll.Dispose();
-            m_TreasureFairyBehaviour.Dispose();
             if (FunctionalGuideCenter.Instance.ExistUnderwayGuide(65))
             {
                 FunctionalGuideCenter.Instance.RemoveGuide(65);
-            }
-            if (!m_CorrectClose)
-            {
-                UI3DTreasureSelectStage.Instance.Close();
             }
             if (m_TreasureAnimation.step == TreasureAnimation.TreasureShowStep.FirstUnLock)
             {
@@ -260,32 +212,11 @@
             if (_id == model.selectedTreasure && _treasure != null
                 && _treasure.state == TreasureState.Collecting && model.serverInited)
             {
-                UpdateStage();
-                if (WindowCenter.Instance.IsOpen<EffectToFaBaoWin>())
-                {
-                    WindowCenter.Instance.CloseImmediately<EffectToFaBaoWin>();
-                }
+                Display();
             }
         }
 
-        private void OnCameraCloserComplete()
-        {
-            m_Init = true;
-            m_DisplayContainer.gameObject.SetActive(true);
-            UpdateStage();
-            if (WindowCenter.Instance.IsOpen<EffectToFaBaoWin>())
-            {
-                WindowCenter.Instance.CloseImmediately<EffectToFaBaoWin>();
-            }
-        }
-
-        private void OnCameraBackComplete()
-        {
-            m_CorrectClose = true;
-            CloseImmediately();
-        }
-
-        private void UpdateStage(int _state = 0)
+        private void Display(int _state = 0)
         {
             m_TreasureAnimation.selectTreasureId = model.selectedTreasure;
             model.TryGetTreasure(model.selectedTreasure, out m_Treasure);
@@ -294,71 +225,9 @@
             model.cacheGotAchievements.Clear();
             var _config = Config.Instance.Get<TreasureConfig>(m_Treasure.id);
             m_TreasureProperty.treasureNameTween.SetEndState();
-            switch (model.currentCategory)
-            {
-                case TreasureCategory.Human:
-                    beforePlayerLv = PlayerDatas.Instance.baseData.LV;
-                    m_TreasureDemonBehaviour.gameObject.SetActive(false);
-                    m_TreasureFairyBehaviour.gameObject.SetActive(false);
-                    model.treasureStepUpShow = false;
-                    SelectHumanTreasure(_state);
-                    m_TreasureTitle.SetSprite("XT_FB_45");
-                    m_LeftBtn.image.SetSprite("XT_FB_33");
-                    m_RightBtn.image.SetSprite("XT_FB_34");
-                    break;
-                case TreasureCategory.Demon:
-                    HideHuman();
-                    m_TreasureAnimation.SetDisplayEnd();
-                    m_TreasureAnimation.TreasureTween();
-                    m_TreasureAnimation.stepComplete = true;
-                    model.treasureStepUpShow = false;
-                    m_TreasureProperty.containerName.gameObject.SetActive(true);
-                    m_TreasureDemonBehaviour.gameObject.SetActive(true);
-                    m_TreasureFairyBehaviour.gameObject.SetActive(false);
-                    m_TreasureDemonBehaviour.Display(m_Treasure.id, _state == 0);
-                    if (_state == 0)
-                    {
-                        m_TreasureProperty.treasureNameTween.Play();
-                    }
-                    m_TreasureTitle.SetSprite("XT_FB_46");
-                    m_LeftBtn.image.SetSprite("XT_FB_35");
-                    m_RightBtn.image.SetSprite("XT_FB_36");
-                    break;
-                case TreasureCategory.Fairy:
-                    HideHuman();
-                    m_TreasureAnimation.SetDisplayEnd();
-                    m_TreasureAnimation.TreasureTween();
-                    m_TreasureAnimation.stepComplete = true;
-                    model.treasureStepUpShow = false;
-                    m_TreasureDemonBehaviour.gameObject.SetActive(false);
-                    m_TreasureProperty.containerName.gameObject.SetActive(true);
-                    m_TreasureFairyBehaviour.gameObject.SetActive(true);
-                    m_TreasureFairyBehaviour.Dispose();
-                    m_TreasureFairyBehaviour.Display(m_Treasure.id, _state == 0);
-                    if (_state == 0)
-                    {
-                        m_TreasureProperty.treasureNameTween.Play();
-                    }
-                    m_TreasureTitle.SetSprite("XT_FB_47");
-                    m_LeftBtn.image.SetSprite("XT_FB_33");
-                    m_RightBtn.image.SetSprite("XT_FB_34");
-                    break;
-            }
-
-            var _leftRifht = Config.Instance.Get<TreasureConfig>(model.selectedTreasure + 1);
-            m_RightBtn.gameObject.SetActive(_leftRifht != null);
-            _leftRifht = Config.Instance.Get<TreasureConfig>(model.selectedTreasure - 1);
-            m_LeftBtn.gameObject.SetActive(_leftRifht != null);
-            var skillLevelUpRedpointTreasure = model.GetSkillLevelUpRedpointTreasure();
-            m_LeftRedpoint.gameObject.SetActive(false);
-            m_RightRedpoint.gameObject.SetActive(false);
-        }
-
-        private void HideHuman()
-        {
-            m_ContainerUnGet.gameObject.SetActive(false);
-            m_ContainerPotential.gameObject.SetActive(false);
-            m_ContainerLevelUp.gameObject.SetActive(false);
+            beforePlayerLv = PlayerDatas.Instance.baseData.LV;
+            model.treasureStepUpShow = false;
+            SelectHumanTreasure(_state);
         }
 
         private void SelectHumanTreasure(int _state = 0)
@@ -434,7 +303,7 @@
                             && FuncOpen.Instance.IsFuncOpen(82) && !model.GetSpAnim(m_Treasure.id))
                         {
                             m_TreasureAnimation.step = TreasureAnimation.TreasureShowStep.FirstPotential;
-                            UpdateStage(2);
+                            Display(2);
                             return;
                         }
                     }
@@ -451,7 +320,7 @@
                     && !model.GetSpAnim(m_Treasure.id))
                 {
                     m_TreasureAnimation.step = TreasureAnimation.TreasureShowStep.FirstPotential;
-                    UpdateStage(2);
+                    Display(2);
                 }
             }
         }
@@ -519,68 +388,11 @@
 
         private void TreasureSelectedEvent(int _id)
         {
-            if (!m_TreasureAnimation.stepComplete)
-            {
-                return;
-            }
-            var _list = model.GetTreasureCategory(model.currentCategory);
-            var _index = _list.FindIndex((x) =>
-            {
-                return x == _id;
-            });
-            if (_index != -1)
-            {
-                m_OnLevelUpStage = false;
-                UI3DTreasureSelectStage.Instance.GotoImmediatly(_index);
-                UpdateStage(1);
-            }
+            Display(1);
         }
 
-        private void onDragComplete(int _value)
+        private bool AllowSelectTreasure(int treasureId)
         {
-            if (_value > 0)
-            {
-                OnRightBtn();
-            }
-            else if (_value < 0)
-            {
-                OnLeftBtn();
-            }
-        }
-
-        private void OnLeftBtn()
-        {
-            if (CheckSelectTreasureFunc(model.selectedTreasure - 1))
-            {
-                model.openFromTaskId = 0;
-                if (FunctionalGuideCenter.Instance.ExistUnderwayGuide(65))
-                {
-                    FunctionalGuideCenter.Instance.RemoveGuide(65);
-                }
-                model.selectedTreasure = model.selectedTreasure - 1;
-            }
-        }
-
-        private void OnRightBtn()
-        {
-            if (CheckSelectTreasureFunc(model.selectedTreasure + 1))
-            {
-                model.openFromTaskId = 0;
-                if (FunctionalGuideCenter.Instance.ExistUnderwayGuide(65))
-                {
-                    FunctionalGuideCenter.Instance.RemoveGuide(65);
-                }
-                model.selectedTreasure = model.selectedTreasure + 1;
-            }
-        }
-
-        private bool CheckSelectTreasureFunc(int _id)
-        {
-            Treasure _treasure;
-            if (!model.TryGetTreasure(_id, out _treasure))
-            {
-                return false;
-            }
             if (model.TreasureStageUpLimit(model.selectedTreasure))
             {
                 return false;
@@ -588,49 +400,31 @@
             return m_TreasureAnimation.stepComplete && !model.treasureStepUpShow && !m_NewBieGuide;
         }
 
-        private void OnBack()
+        private void PrepareSelectTreasure(int treasureId)
         {
-            if (!m_TreasureAnimation.stepComplete || model.treasureStepUpShow || m_NewBieGuide)
+            model.openFromTaskId = 0;
+            if (FunctionalGuideCenter.Instance.ExistUnderwayGuide(65))
             {
-                return;
-            }
-            if (model.TreasureStageUpLimit(model.selectedTreasure))
-            {
-                return;
-            }
-            if (PlayerDatas.Instance.baseData.LV < model.treasureBackLvLimit
-                && !WindowJumpMgr.Instance.IsJumpState)
-            {
-                StartBack();
-                return;
-            }
-            if (!WindowJumpMgr.Instance.IsJumpState && model.openFromTreasureList)
-            {
-                StartBack();
-                return;
-            }
-            if (!WindowJumpMgr.Instance.IsJumpState && model.exitRecord >= 4)
-            {
-                StartBack();
-                model.exitRecord = 0;
-                return;
-            }
-            model.openFromTreasureList = false;
-            CloseImmediately();
-            if (!WindowJumpMgr.Instance.IsJumpState)
-            {
-                model.exitRecord++;
-                WindowCenter.Instance.Open<MainInterfaceWin>();
+                FunctionalGuideCenter.Instance.RemoveGuide(65);
             }
         }
 
-        void StartBack()
+        private int AllowBack()
+        {
+            if (!m_TreasureAnimation.stepComplete || model.treasureStepUpShow || m_NewBieGuide)
+            {
+                return 1;
+            }
+            if (model.TreasureStageUpLimit(model.selectedTreasure))
+            {
+                return 1;
+            }
+            return 0;
+        }
+
+        private void PrepareBack()
         {
             model.SetTreasureUnlockShow(TreasureCategory.Human, 0);
-            model.openFromTreasureList = false;
-            m_DisplayContainer.gameObject.SetActive(false);
-            WindowCenter.Instance.Open<TreasureSelectWin>(true);
-            UI3DTreasureSelectStage.Instance.StartBack();
         }
 
         private void OnGetTreasure()
@@ -750,7 +544,7 @@
         private void AchievementCompletedEvent(int _id)
         {
             var config = Config.Instance.Get<TreasureConfig>(model.selectedTreasure);
-            if (!m_Init || config == null || (TreasureCategory)config.Category != TreasureCategory.Human
+            if (config == null || (TreasureCategory)config.Category != TreasureCategory.Human
                 || m_Treasure.state != TreasureState.Collected || m_Treasure.IsHighestStage)
             {
                 return;
@@ -836,7 +630,7 @@
                     else if (FuncOpen.Instance.IsFuncOpen(82) && !model.GetSpAnim(m_Treasure.id))
                     {
                         m_TreasureAnimation.step = TreasureAnimation.TreasureShowStep.FirstPotential;
-                        UpdateStage(2);
+                        Display(2);
                     }
                     break;
                 case TreasureAnimation.TreasureShowStep.FirstUnLock:
@@ -864,13 +658,13 @@
                 if (m_Treasure.IsHighestStage && FuncOpen.Instance.IsFuncOpen(82))
                 {
                     m_TreasureAnimation.step = TreasureAnimation.TreasureShowStep.FirstPotential;
-                    UpdateStage(2);
+                    Display(2);
                 }
                 else
                 {
                     if (mainTaskId != 0)
                     {
-                        CloseImmediately();
+                        WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                         WindowCenter.Instance.Open<MainInterfaceWin>();
                         task.AutomaticTripToTask(mainTaskId);
                     }
@@ -995,8 +789,8 @@
                     break;
                 case TreasureStageUnlock.Treasure:
                     WindowJumpMgr.Instance.ClearJumpData();
+                    WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                     WindowCenter.Instance.Open<MainInterfaceWin>();
-                    CloseImmediately();
                     break;
                 case TreasureStageUnlock.TreasureSoul:
                     TreasureSoulActiveWin.treasureSoulId = stage.treasureSoul;
@@ -1019,7 +813,7 @@
             {
                 TreasureStageUpTriggerWin.screenShotCut = _tex;
                 WindowJumpMgr.Instance.ClearJumpData();
-                CloseImmediately();
+                WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                 WindowCenter.Instance.Open<TreasureStageUpTriggerWin>(true);
                 WindowCenter.Instance.Open<MainInterfaceWin>();
                 if (WindowCenter.Instance.IsOpen<DialogueDuidanceWin>())
@@ -1218,13 +1012,6 @@
             }
         }
 
-        private void SkillLevelUpRedpointUpdate()
-        {
-            var skillLevelUpRedpointTreasure = model.GetSkillLevelUpRedpointTreasure();
-            m_LeftRedpoint.gameObject.SetActive(false);
-            m_RightRedpoint.gameObject.SetActive(false);
-        }
-
         protected override void LateUpdate()
         {
             base.LateUpdate();
@@ -1251,7 +1038,7 @@
         public void PreviewAnimation()
         {
             m_TreasureAnimation.step = TreasureAnimation.TreasureShowStep.FirstPotential;
-            UpdateStage(2);
+            Display(2);
         }
 
         [ContextMenu("娴嬭瘯鍔熻兘寮�鍚�")]
diff --git a/System/Treasure/TreasureSelectWin.cs b/System/Treasure/TreasureSelectWin.cs
index 580163c..252db53 100644
--- a/System/Treasure/TreasureSelectWin.cs
+++ b/System/Treasure/TreasureSelectWin.cs
@@ -169,7 +169,7 @@
             WindowJumpMgr.Instance.ClearJumpData();
             m_CorrectClose = true;
             CameraManager.uiCamera.enabled = false;
-            WindowCenter.Instance.Open<TreasureLevelUpWin>();
+            WindowCenter.Instance.Open<TreasureBaseWin>();
             CloseImmediately();
         }
 
diff --git a/System/Treasure/UI3DTreasureSelectStage.cs b/System/Treasure/UI3DTreasureSelectStage.cs
index 9da5c32..57da7a0 100644
--- a/System/Treasure/UI3DTreasureSelectStage.cs
+++ b/System/Treasure/UI3DTreasureSelectStage.cs
@@ -426,6 +426,7 @@
             {
                 StopCoroutine(preloadCoroutine);
                 preloadCoroutine = null;
+                Preloading = false;
             }
 
             if (!m_PreloadDict.ContainsKey(currentCategory) && !_closer)
diff --git a/System/WindowJump/WindowJumpMgr.cs b/System/WindowJump/WindowJumpMgr.cs
index c025af1..67d5cbe 100644
--- a/System/WindowJump/WindowJumpMgr.cs
+++ b/System/WindowJump/WindowJumpMgr.cs
@@ -503,7 +503,7 @@
                 SetJumpLogic<TreasureSoulWin>(_tagWinSearchModel.TABID);
                 break;
             case JumpUIType.TreasureCollectSoul:
-                SetJumpLogic<TreasureLevelUpWin>(0);
+                SetJumpLogic<TreasureBaseWin>(0);
                 break;
             case JumpUIType.Kylin:
                 dungeonModel.currentDungeon = new Dungeon(31190, 0);
@@ -617,7 +617,7 @@
             case JumpUIType.LLBT:
                 treasureModel.currentCategory = TreasureCategory.Fairy;
                 treasureModel.selectedTreasure = int.Parse(_tagWinSearchModel.SelectActive);
-                SetJumpLogic<TreasureLevelUpWin>(_tagWinSearchModel.TABID);
+                SetJumpLogic<TreasureBaseWin>(_tagWinSearchModel.TABID);
                 break;
             case JumpUIType.FYZJTyp1:
             case JumpUIType.FYZJTyp2:
@@ -625,7 +625,7 @@
             case JumpUIType.SHLTyp2:
                 treasureModel.currentCategory = TreasureCategory.Demon;
                 treasureModel.selectedTreasure = int.Parse(_tagWinSearchModel.SelectActive);
-                SetJumpLogic<TreasureLevelUpWin>(_tagWinSearchModel.TABID);
+                SetJumpLogic<TreasureBaseWin>(_tagWinSearchModel.TABID);
                 break;
 
             case JumpUIType.DhszTs:
@@ -640,7 +640,7 @@
             case JumpUIType.StfTs:
                 treasureModel.currentCategory = TreasureCategory.Human;
                 treasureModel.selectedTreasure = int.Parse(_tagWinSearchModel.SelectActive);
-                SetJumpLogic<TreasureLevelUpWin>(_tagWinSearchModel.TABID);
+                SetJumpLogic<TreasureBaseWin>(_tagWinSearchModel.TABID);
                 break;
             case JumpUIType.FirstRecharge:
                 SetJumpLogic<FirstRechargeWin>(_tagWinSearchModel.TABID, true);
diff --git a/System/WorldMap/LocalMapTreasure.cs b/System/WorldMap/LocalMapTreasure.cs
index 6e82bc7..b0787b3 100644
--- a/System/WorldMap/LocalMapTreasure.cs
+++ b/System/WorldMap/LocalMapTreasure.cs
@@ -55,7 +55,7 @@
 
             model.selectedTreasure = treasureId;
             model.currentCategory = TreasureCategory.Human;
-            WindowCenter.Instance.Open<TreasureLevelUpWin>();
+            WindowCenter.Instance.Open<TreasureBaseWin>();
         }
 
     }

--
Gitblit v1.8.0