Переглянути джерело

Merge branch '工具库更改' into feature/检修流程序列

# Conflicts:
#	OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/OperateStep.cs
CHIVA\bj 5 місяців тому
батько
коміт
b2808c2ca9
23 змінених файлів з 1285 додано та 188 видалено
  1. 186 8
      Framework/Scripts/Proxys/ToolConfigProxy.cs
  2. 4 1
      Framework/Scripts/UI/PCController/OperateSetting.cs
  3. 102 0
      Framework/SimulationToolDev/CVR_Interactable/Example/Scripts/OperationData-Example/OPTrigger_SelectToolElemet.cs
  4. 11 0
      Framework/SimulationToolDev/CVR_Interactable/Example/Scripts/OperationData-Example/OPTrigger_SelectToolElemet.cs.meta
  5. 8 8
      Framework/SimulationToolDev/OperationDriver/OperationData-Example/TriggerMode/OpTrigger_Toolbackpack/OpTrigger_ToolPack.cs
  6. 0 6
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/ImageAndTextNameSetPanel/ImageOptionSetItem.cs
  7. 1 1
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel.Designer.cs
  8. 10 9
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel.cs
  9. 1 1
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/ExamInfo.Designer.cs
  10. 9 7
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/OperateStep.Designer.cs
  11. 23 1
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/OperateStep.cs
  12. 1 1
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/OperateStep/FistStepItem.Designer.cs
  13. 1 1
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/OperateStep/SecondStepItem.Designer.cs
  14. 1 1
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/PracticeResult.Designer.cs
  15. 1 1
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/ScoreInfo.Designer.cs
  16. 1 1
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/StartTips.Designer.cs
  17. 1 1
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/StudyPanel.Designer.cs
  18. 1 1
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/SubmitResult.Designer.cs
  19. 124 32
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/ToolLibraryForm.cs
  20. 51 9
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/ToolLibraryForm/ToolLibrarySelectElement.cs
  21. 95 37
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/ToolLibraryForm/ToolLibrarySelectElement/ToolItemPrefab.cs
  22. 16 2
      OperationUIFrame/OperationUIFrameV2/Scripts/UI/ToolLibraryForm/ToolTypeElement.cs
  23. 637 59
      OperationUIFrame/OperationUIFrameV2/UIPrefabs/PC_OperatePanel.prefab

+ 186 - 8
Framework/Scripts/Proxys/ToolConfigProxy.cs

@@ -1,4 +1,5 @@
-  using System.Collections;
+using QFramework;
+using System.Collections;
 using System.Collections.Generic;
 using System.IO;
 using UnityEngine;
@@ -9,11 +10,31 @@ public class ToolConfigProxy : DataProxy
 
     Dictionary<string,Sprite> m_DicToolSprites;
 
+    /// <summary>
+    /// 目前工具间里的已经选择的所有工具信息
+    /// </summary>
+    public List<ToolConfigInfo> m_CurrentToolRoomConfigInfos;
+
+    /// <summary>
+    /// 临时缓存保存使用
+    /// </summary>
+    public List<ToolConfigInfo> m_TmpToolRoomConfigInfos;
+
+    /// <summary>
+    /// 工具包中选择的工具
+    /// </summary>
+    private List<ToolConfigInfo> m_CurrentToolKitSelectToolConfigInfos;
+
     /// <summary>
     /// 默认工具信息表加载路径
     /// </summary>
     string m_ToolConfigPath;
 
+    /// <summary>
+    ///  目前题库类型
+    /// </summary>
+    public ToolLibraryType m_CurrentToolLibraryType;
+
     public override void OnRegister()
     {
         base.OnRegister();
@@ -23,6 +44,12 @@ public class ToolConfigProxy : DataProxy
         m_ToolConfigPath = Path.Combine(GlobalConfig.toolConfigTablePath, "工具信息表.xlsx");
 
         m_ToolConfigInfos = ExcelHelper.ReadInfoFromExcel<ToolConfigInfo>(m_ToolConfigPath, 1);
+
+        m_TmpToolRoomConfigInfos = new List<ToolConfigInfo>();
+
+        m_CurrentToolRoomConfigInfos = new List<ToolConfigInfo>();
+
+        m_CurrentToolKitSelectToolConfigInfos = new List<ToolConfigInfo>();
     }
 
     public override void OnRemove()
@@ -32,6 +59,118 @@ public class ToolConfigProxy : DataProxy
         m_ToolConfigInfos.Clear();
     }
 
+    /// <summary>
+    /// 从m_CurrentToolRoomConfigInfos中查找对应数据信息
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    public ToolConfigInfo GetToolConfigInfoFromCTRSTCIsById(int id)
+    {
+        return m_TmpToolRoomConfigInfos.Find(t => t.id == id.ToString());
+    }
+
+    /// <summary>
+    /// 获取工具间中的所有数据
+    /// </summary>
+    /// <returns></returns>
+    public List<ToolConfigInfo> GetAllToolConfigInfoFromCTRSTCIs()
+    {
+        return m_CurrentToolRoomConfigInfos;
+    }
+
+    /// <summary>
+    /// 从m_CurrentToolRoomConfigInfos中查找并删除对应数据信息
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    public bool RemoveToolConfigInfoFromCTRSTCIsById(int id)
+    {
+        ToolConfigInfo tmpConfigInfo = GetToolConfigInfoFromCTRSTCIsById(id);
+
+        if (tmpConfigInfo != null)
+        {
+            m_CurrentToolRoomConfigInfos.Remove(tmpConfigInfo);
+
+            return true;
+        }
+
+        return  false;
+    }
+
+    /// <summary>
+    /// 向m_CurrentToolRoomConfigInfos中添加数据信息
+    /// </summary>
+    /// <param name="toolConfigInfo"></param>
+    public void AddToolConfigInfoToCTRSTCIs(ToolConfigInfo toolConfigInfo)
+    {
+        m_TmpToolRoomConfigInfos.Add(toolConfigInfo);
+    }
+
+    /// <summary>
+    /// 清除m_CurrentToolRoomConfigInfos数据信息
+    /// </summary>
+    /// <param name="toolConfigInfo"></param>
+    public void ClearToolConfigInfoToCTRSTCIs()
+    {
+        m_TmpToolRoomConfigInfos.Clear();
+    }
+
+    /// <summary>
+    /// 从m_CurrentToolKitSelectToolConfigInfos中查找对应数据信息
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    public ToolConfigInfo GetToolConfigInfoFromCTKSTCIsById(int id)
+    {
+        return m_CurrentToolKitSelectToolConfigInfos.Find(t => t.id == id.ToString());
+    }
+
+    /// <summary>
+    /// 获取工具包中的所有数据
+    /// </summary>
+    /// <returns></returns>
+    public List<ToolConfigInfo> GetAllToolConfigInfoFromCTKSTCIs()
+    {
+        return m_CurrentToolKitSelectToolConfigInfos;
+    }
+
+    /// <summary>
+    /// 从m_CurrentToolKitSelectToolConfigInfos中查找并删除对应数据信息
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    public bool RemoveToolConfigInfoFromCTKSTCIsById(int id)
+    {
+        ToolConfigInfo tmpConfigInfo = GetToolConfigInfoFromCTKSTCIsById(id);
+
+        if (tmpConfigInfo != null)
+        {
+            m_CurrentToolKitSelectToolConfigInfos.Remove(tmpConfigInfo);
+
+            return true;
+        }
+
+        return false;
+    }
+
+    /// <summary>
+    /// 向m_CurrentToolKitSelectToolConfigInfos中添加数据信息
+    /// </summary>
+    /// <param name="toolConfigInfo"></param>
+    public void AddToolConfigInfoToCTKSTCIs(ToolConfigInfo toolConfigInfo)
+    {
+        m_CurrentToolKitSelectToolConfigInfos.Add(toolConfigInfo);
+    }
+
+    /// <summary>
+    /// 清除m_CurrentToolKitSelectToolConfigInfos数据信息
+    /// </summary>
+    /// <param name="toolConfigInfo"></param>
+    public void ClearToolConfigInfoToCTKSTCIs()
+    {
+        m_CurrentToolKitSelectToolConfigInfos.Clear();
+    }
+
     /// <summary>
     /// 获取所有的工具类型
     /// </summary>
@@ -82,17 +221,17 @@ public class ToolConfigProxy : DataProxy
     /// </summary>
     /// <param name="toolType"></param>
     /// <returns></returns>
-    public List<ToolConfigInfo> GetToolConfigInfosByToolType(string toolType)
+    public List<ToolConfigInfo> GetToolConfigInfosByToolType(List<ToolConfigInfo> toolConfigInfos,string toolType)
     {
         List<ToolConfigInfo> tmpList = new List<ToolConfigInfo>();  
 
-        if (m_ToolConfigInfos != null) tmpList = m_ToolConfigInfos.FindAll(tool => tool.toolType == toolType);
+        if (toolConfigInfos != null) tmpList = toolConfigInfos.FindAll(tool => tool.toolType == toolType);
         
         return tmpList;
     }
 
     /// <summary>
-    /// 获取所有工具根据工具类型和工具名称
+    /// 获取所有工具根据工具类型和工具名称(从工具间中筛选)
     /// </summary>
     /// <param name="toolType"></param>
     /// <param name="toolName"></param>
@@ -103,11 +242,11 @@ public class ToolConfigProxy : DataProxy
 
         if (string.IsNullOrEmpty(toolName) && !string.IsNullOrEmpty(toolType))
         {
-            toolConfigInfos = GetToolConfigInfosByToolType(toolType);
+            toolConfigInfos = GetToolConfigInfosByToolType(m_ToolConfigInfos, toolType);
         }
         else if (string.IsNullOrEmpty(toolType) && !string.IsNullOrEmpty(toolName))
         {
-            toolConfigInfos = GetToolConfigInfosByToolNameSearch(toolName);
+            toolConfigInfos = GetToolConfigInfosByToolNameSearch(m_ToolConfigInfos,toolName);
         }
         else if (!string.IsNullOrEmpty(toolName) && !string.IsNullOrEmpty(toolType))
         {
@@ -121,16 +260,46 @@ public class ToolConfigProxy : DataProxy
         return toolConfigInfos;
     }
 
+    /// <summary>
+    /// 从背包中筛选
+    /// </summary>
+    /// <param name="toolType"></param>
+    /// <param name="toolName"></param>
+    /// <returns></returns>
+    public List<ToolConfigInfo> GetToolToolKitConfigInfosByToolTypeAndName(string toolType, string toolName)
+    {
+        List<ToolConfigInfo> toolConfigInfos = new List<ToolConfigInfo>();
+
+        if (string.IsNullOrEmpty(toolName) && !string.IsNullOrEmpty(toolType))
+        {
+            toolConfigInfos = GetToolConfigInfosByToolType(m_CurrentToolRoomConfigInfos, toolType);
+        }
+        else if (string.IsNullOrEmpty(toolType) && !string.IsNullOrEmpty(toolName))
+        {
+            toolConfigInfos = GetToolConfigInfosByToolNameSearch(m_CurrentToolRoomConfigInfos, toolName);
+        }
+        else if (!string.IsNullOrEmpty(toolName) && !string.IsNullOrEmpty(toolType))
+        {
+            toolConfigInfos = m_CurrentToolRoomConfigInfos.FindAll(tool => tool.toolType == toolType && tool.toolName.Contains(toolName));
+        }
+        else
+        {
+            toolConfigInfos = m_CurrentToolRoomConfigInfos;
+        }
+
+        return toolConfigInfos;
+    }
+
     /// <summary>
     /// 获取所有工具更具工具名的模糊搜索
     /// </summary>
     /// <param name="searchStr"></param>
     /// <returns></returns>
-    public List<ToolConfigInfo> GetToolConfigInfosByToolNameSearch(string searchStr)
+    public List<ToolConfigInfo> GetToolConfigInfosByToolNameSearch(List<ToolConfigInfo> toolConfigInfos, string searchStr)
     {
         List<ToolConfigInfo> tmpList = new List<ToolConfigInfo>();
 
-        if (m_ToolConfigInfos != null) tmpList = m_ToolConfigInfos.FindAll(tool => tool.toolName.Contains(searchStr));
+        if (toolConfigInfos != null) tmpList = toolConfigInfos.FindAll(tool => tool.toolName.Contains(searchStr));
 
         return tmpList;
     }
@@ -159,6 +328,15 @@ public class ToolConfigProxy : DataProxy
         return m_ToolConfigInfos.Find(t => t.toolName == _toolName);
     }
 
+    /// <summary>
+    /// 设置工具背包的工具
+    /// </summary>
+    /// <param name="toolConfigInfos">工具信息</param>
+    public void SetCurrrentToolRoomToolConfigInfos(List<ToolConfigInfo> toolConfigInfos)
+    {
+        m_CurrentToolRoomConfigInfos = toolConfigInfos;
+    }
+
     /// <summary>
     /// 根据工具名查找工具精灵
     /// </summary>

+ 4 - 1
Framework/Scripts/UI/PCController/OperateSetting.cs

@@ -67,8 +67,11 @@ public class OperateSetting : MonoSingleton<OperateSetting>
 
     public ToolPackUILogic ToolPackUILogic;
 
+    /// <summary>
+    /// 工具包中的工具
+    /// </summary>
     [HideInInspector]
-    public List<ToolConfig> m_ToolLibraryToolConfigs;
+    public List<ToolConfig> m_ToolKitToolConfigs;
 
     /// <summary>
     /// 当前步骤正确的工具名称

+ 102 - 0
Framework/SimulationToolDev/CVR_Interactable/Example/Scripts/OperationData-Example/OPTrigger_SelectToolElemet.cs

@@ -0,0 +1,102 @@
+using ChivaXR.Op;
+using ChivaXR.VR;
+using QFramework;
+using Sirenix.OdinInspector;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class OPTrigger_SelectToolElemet : OperationData_TriggerMode
+{
+    [LabelText("需要选择的工具组")]
+    [ValueDropdown("GetToolNames", DropdownTitle = "需要选择的工具组")]
+    public List<string> choseToolNames = new List<string>();
+
+    ToolConfigProxy m_ToolConfigProxy;
+
+    private bool isFinish;
+
+    public override void SetDataStateValue(float value)
+    {
+        
+    }
+
+    protected override void OnOperationDataStatusChanged(OperationDataStatus status)
+    {
+        base.OnOperationDataStatusChanged(status);
+
+        switch (status)
+        {
+            case OperationDataStatus.InActive:
+
+
+                break;
+            case OperationDataStatus.Listening:
+
+                if (UIKit.GetPanel<ToolLibraryForm>() == null)
+                {
+                    UIKit.OpenPanel<ToolLibraryForm>(new ToolLibraryFormData()
+                    {
+                        toolLibraryType = ToolLibraryType.ToolRoom,
+                        selectAction = Check
+                    });
+                }
+
+                break;
+        }
+
+
+    }
+
+    public override bool TriggerCondition()
+    {
+       
+
+        return isFinish;
+    }
+
+    private IEnumerable GetToolNames()
+    {
+        ToolConfigProxy toolConfigProxy = DAL.Instance.Get<ToolConfigProxy>();
+
+        List<string> tmpToolNames = toolConfigProxy.GetAllToolCofigInfoName();
+
+        if (tmpToolNames == null || tmpToolNames.Count == 0)
+        {
+            Debug.LogError("请检查表格配置文件!!!");
+        }
+
+        return tmpToolNames;
+    }
+
+    private void Check()
+    {
+        m_ToolConfigProxy = DAL.Instance.Get<ToolConfigProxy>();
+
+        if (OperateSetting.Instance.m_CurrentOperationMode == OperationMode.Practice)
+        {
+            List<ToolConfigInfo> tmpToolConfigInfos = m_ToolConfigProxy.GetAllToolConfigInfoFromCTRSTCIs();
+
+            if (tmpToolConfigInfos.Count != choseToolNames.Count)
+            {
+                return;
+            }
+            else
+            {
+                foreach (var toolName in choseToolNames)
+                {
+                    if (tmpToolConfigInfos.Find(t => t.toolName == toolName) == null)
+                    {
+                        isFinish = false;
+                        return;
+                    }
+                }
+
+            }
+        }
+
+        isFinish = true;
+
+        UIKit.ClosePanel<ToolLibraryForm>();
+    }
+}

+ 11 - 0
Framework/SimulationToolDev/CVR_Interactable/Example/Scripts/OperationData-Example/OPTrigger_SelectToolElemet.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2430a9104af4d124c90baf8d1d300a02
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 8
Framework/SimulationToolDev/OperationDriver/OperationData-Example/TriggerMode/OpTrigger_Toolbackpack/OpTrigger_ToolPack.cs

@@ -361,22 +361,22 @@ public class OpTrigger_ToolPack : OperationData_TriggerMode
         {
             if (!IsGetRightTool())
             {
-                UIKit.GetPanel<PC_OperatePanel>().OperateStep.ToolLibraryBtn.OpenPrompt();
+                UIKit.GetPanel<PC_OperatePanel>().OperateStep.ToolBackPackBtn.OpenPrompt();
             }
             else
             {
-                UIKit.GetPanel<PC_OperatePanel>().OperateStep.ToolLibraryBtn.ClosePrompt();
+                UIKit.GetPanel<PC_OperatePanel>().OperateStep.ToolBackPackBtn.ClosePrompt();
             }
         }
         else
         {
-            UIKit.GetPanel<PC_OperatePanel>().OperateStep.ToolLibraryBtn.ClosePrompt();
+            UIKit.GetPanel<PC_OperatePanel>().OperateStep.ToolBackPackBtn.ClosePrompt();
         }
 
 
         if (useTool && choseToolNames.Count != 0)
         {
-            if (OperateSetting.Instance.m_ToolLibraryToolConfigs.Count != choseToolNames.Count)
+            if (OperateSetting.Instance.m_ToolKitToolConfigs.Count != choseToolNames.Count)
             {
                 if (Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
                 {
@@ -387,7 +387,7 @@ public class OpTrigger_ToolPack : OperationData_TriggerMode
 
             foreach (var toolName in choseToolNames)
             {
-                ToolConfig tmpToolConfig = OperateSetting.Instance.m_ToolLibraryToolConfigs.Find(tool => tool.toolName == toolName);
+                ToolConfig tmpToolConfig = OperateSetting.Instance.m_ToolKitToolConfigs.Find(tool => tool.toolName == toolName);
 
                 if (tmpToolConfig == null)
                 {
@@ -399,7 +399,7 @@ public class OpTrigger_ToolPack : OperationData_TriggerMode
                 }
             }
         }
-        else if (choseToolNames.Count == 0 && OperateSetting.Instance.m_ToolLibraryToolConfigs.Count != 0)
+        else if (choseToolNames.Count == 0 && OperateSetting.Instance.m_ToolKitToolConfigs.Count != 0)
         {
             if (Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
             {
@@ -442,14 +442,14 @@ public class OpTrigger_ToolPack : OperationData_TriggerMode
     {
         if (!useTool) return true;
 
-        if (OperateSetting.Instance.m_ToolLibraryToolConfigs.Count != choseToolNames.Count)
+        if (OperateSetting.Instance.m_ToolKitToolConfigs.Count != choseToolNames.Count)
         {
             return false;
         }
 
         foreach (var toolName in choseToolNames)
         {
-            ToolConfig tmpToolConfig = OperateSetting.Instance.m_ToolLibraryToolConfigs.Find(tool => tool.toolName == toolName);
+            ToolConfig tmpToolConfig = OperateSetting.Instance.m_ToolKitToolConfigs.Find(tool => tool.toolName == toolName);
 
             if (tmpToolConfig == null)
             {

+ 0 - 6
OperationUIFrame/OperationUIFrameV2/Scripts/UI/ImageAndTextNameSetPanel/ImageOptionSetItem.cs

@@ -73,13 +73,7 @@ namespace QFramework
 				m_PictureName = tmpFilePaths[0].GetFileName();
 				string tmpPicturePath = "Config/题库图文图片/" + m_PictureName;
 				ClickBtn.GetComponent<Image>().sprite = LoadHelper.LoadSpriteFromStreamming(tmpPicturePath);
-
 			}
-
-            Debug.LogError(tmpFilePaths[0].Contains(Application.streamingAssetsPath));
-			Debug.LogError(tmpFilePaths[0].GetFileName());
-
-			//File.Copy(tmpFilePaths[0],Application.streamingAssetsPath + "/Config/题库图文图片/" + tmpFilePaths[0].GetFileName() + ".png");
 		}
 
 		/// <summary>

+ 1 - 1
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel.Designer.cs

@@ -5,7 +5,7 @@ using QFramework;
 
 namespace QFramework
 {
-	// Generate Id:5580ade9-3b1b-4996-b6c4-da02ba364b28
+	// Generate Id:d750b441-020e-43fc-8545-e8e18b2c997b
 	public partial class PC_OperatePanel
 	{
 		public const string Name = "PC_OperatePanel";

+ 10 - 9
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel.cs

@@ -115,6 +115,7 @@ namespace QFramework
                     OperateStep.HelpBtn.gameObject.SetActive(false);
                     OperateStep.AutoPlayBtn.gameObject.SetActive(true);
                     OperateStep.ToolLibraryBtn.gameObject.SetActive(false);
+                    OperateStep.ToolBackPackBtn.gameObject.SetActive(false);
                     OperateStep.EndExam.gameObject.SetActive(false);
                     //操作记录
                     OperateStep.OperateLogBtn.gameObject.SetActive(false);
@@ -130,7 +131,8 @@ namespace QFramework
                     operateName = "操作步骤";
                     OperateStep.HelpBtn.gameObject.SetActive(true);
                     OperateStep.AutoPlayBtn.gameObject.SetActive(false);
-                    OperateStep.ToolLibraryBtn.gameObject.SetActive(true);
+                    OperateStep.ToolLibraryBtn.gameObject.SetActive(false);
+                    OperateStep.ToolBackPackBtn.gameObject.SetActive(true);
                     OperateStep.EndExam.gameObject.SetActive(false);
                     break;
                 case OperationMode.Exam:
@@ -138,7 +140,8 @@ namespace QFramework
                     TitleTextLayoutGroup.gameObject.SetActive(false);
                     OperateStep.HelpBtn.gameObject.SetActive(false);
                     OperateStep.AutoPlayBtn.gameObject.SetActive(false);
-                    OperateStep.ToolLibraryBtn.gameObject.SetActive(true);
+                    OperateStep.ToolLibraryBtn.gameObject.SetActive(false);
+                    OperateStep.ToolBackPackBtn.gameObject.SetActive(true);
                     OperateStep.EndExam.gameObject.SetActive(true);
                     OperateStep.SubtitleBg.gameObject.SetActive(false);
                     break;
@@ -169,8 +172,6 @@ namespace QFramework
 
             OperateStep.gameObject.SetActive(true);
 
-            //OperateStep.SetTitle(operateName);
-
             OperateStep.GenerateFirstStepItemList(tmpDicStepMsgInfos);
 
             if (OperateSetting.Instance.m_CurrentOperationMode == OperationMode.Learn)
@@ -261,15 +262,15 @@ namespace QFramework
             //当前步骤ID
             CurrentStepID = stepID + 1;
             //刷新工具列表
-            if (UIKit.GetPanel<ToolLibraryForm>() == null)
-            {
-                UIKit.OpenPanel<ToolLibraryForm>().Hide();
-            }
+            //if (UIKit.GetPanel<ToolLibraryForm>() == null)
+            //{
+            //    UIKit.OpenPanel<ToolLibraryForm>().Hide();
+            //}
 
             //流程进度
             OperateStep.ScheduleText.text = "<color=#20C7E3CC>" + CurrentStepID + "</color>" + "<color=#FFFFFF66>/" + ProcessManagement.Instance.processes.Count + "</color>";
 
-            UIKit.GetPanel<ToolLibraryForm>().RefrushAllChoseTool();
+            //UIKit.GetPanel<ToolLibraryForm>().RefrushAllChoseTool();
             //刷新列表
             if (OperateSetting.Instance.m_CurrentOperationMode != OperationMode.Learn)
             {

+ 1 - 1
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/ExamInfo.Designer.cs

@@ -1,5 +1,5 @@
 /****************************************************************************
- * 2024.9 CHIVA
+ * 2025.6 LXD
  ****************************************************************************/
 
 using UnityEngine;

+ 9 - 7
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/OperateStep.Designer.cs

@@ -1,5 +1,5 @@
 /****************************************************************************
- * 2024.9 CHIVA
+ * 2025.6 LXD
  ****************************************************************************/
 
 using UnityEngine;
@@ -24,19 +24,20 @@ namespace QFramework
 		[SerializeField] public UnityEngine.UI.Image BottomImage;
 		[SerializeField] public UnityEngine.UI.Button PlayBtn;
 		[SerializeField] public UnityEngine.UI.Button PauseBtn;
+		[SerializeField] public UnityEngine.UI.Image SubtitleBg;
+		[SerializeField] public RollingByTime SubtitleMask;
+		[SerializeField] public UnityEngine.UI.Text SubtitleText;
 		[SerializeField] public UnityEngine.UI.Button OperateLogBtn;
 		[SerializeField] public DownBGButton BtnPrefab;
 		[SerializeField] public DownBGButton HelpBtn;
 		[SerializeField] public DownBGButton ToolLibraryBtn;
+		[SerializeField] public DownBGButton ToolBackPackBtn;
 		[SerializeField] public DownBGButton AutoPlayBtn;
 		[SerializeField] public DownBGButton EndExam;
 		[SerializeField] public UnityEngine.UI.Image HeadPortraitBg;
 		[SerializeField] public UnityEngine.UI.Text HeadPortraitText;
 		[SerializeField] public UnityEngine.UI.Text UserName;
 		[SerializeField] public UnityEngine.UI.Text ScheduleText;
-		[SerializeField] public UnityEngine.UI.Image SubtitleBg;
-		[SerializeField] public RollingByTime SubtitleMask;
-		[SerializeField] public UnityEngine.UI.Text SubtitleText;
 
 		public void Clear()
 		{
@@ -54,19 +55,20 @@ namespace QFramework
 			BottomImage = null;
 			PlayBtn = null;
 			PauseBtn = null;
+			SubtitleBg = null;
+			SubtitleMask = null;
+			SubtitleText = null;
 			OperateLogBtn = null;
 			BtnPrefab = null;
 			HelpBtn = null;
 			ToolLibraryBtn = null;
+			ToolBackPackBtn = null;
 			AutoPlayBtn = null;
 			EndExam = null;
 			HeadPortraitBg = null;
 			HeadPortraitText = null;
 			UserName = null;
 			ScheduleText = null;
-			SubtitleBg = null;
-			SubtitleMask = null;
-			SubtitleText = null;
 		}
 
 		public override string ComponentName

+ 23 - 1
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/OperateStep.cs

@@ -33,6 +33,8 @@ namespace QFramework
             HelpBtn.Button.onClick.AddListener(OnHelpBtnClick);
             HelpBtn.isToggle = true;
             ToolLibraryBtn.Button.onClick.AddListener(OnToolLibraryBtnClick);
+            ToolBackPackBtn.Button.onClick.AddListener(OnToolBackPackBtnClick);
+
             AutoPlayBtn.Button.onClick.AddListener(OnAutoPlayBtnClick);
             AutoPlayBtn.isToggle = true;
             EndExam.Button.onClick.AddListener(OnEndExamBtnClick);
@@ -127,13 +129,33 @@ namespace QFramework
             UIKit.GetPanel<PC_OperatePanel>().SubmitResult.gameObject.SetActive(true);
         }
 
+        /// <summary>
+        /// 工具背包
+        /// </summary>
+        private void OnToolBackPackBtnClick()
+        {
+            ToolLibraryForm tmpToolLibraryForm = UIKit.GetPanel<ToolLibraryForm>();
+
+            if (tmpToolLibraryForm == null)
+            {
+                UIKit.OpenPanel<ToolLibraryForm>(UILevel.PopUI,new ToolLibraryFormData() { toolLibraryType = ToolLibraryType.ToolKit});
+            }
+            else if (tmpToolLibraryForm != null && !tmpToolLibraryForm.isActiveAndEnabled)
+            {
+                UIKit.ShowPanel<ToolLibraryForm>();
+            }
+        }
+
+        /// <summary>
+        /// 工具库点击
+        /// </summary>
         private void OnToolLibraryBtnClick()
         {
             ToolLibraryForm tmpToolLibraryForm = UIKit.GetPanel<ToolLibraryForm>();
 
             if (tmpToolLibraryForm == null)
             { 
-                UIKit.OpenPanel<ToolLibraryForm>(UILevel.PopUI);
+                UIKit.OpenPanel<ToolLibraryForm>(UILevel.PopUI, new ToolLibraryFormData() { toolLibraryType = ToolLibraryType.ToolRoom });
             }
             else if (tmpToolLibraryForm != null && !tmpToolLibraryForm.isActiveAndEnabled)
             {

+ 1 - 1
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/OperateStep/FistStepItem.Designer.cs

@@ -1,5 +1,5 @@
 /****************************************************************************
- * 2024.9 CHIVA
+ * 2025.6 LXD
  ****************************************************************************/
 
 using UnityEngine;

+ 1 - 1
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/OperateStep/SecondStepItem.Designer.cs

@@ -1,5 +1,5 @@
 /****************************************************************************
- * 2024.9 CHIVA
+ * 2025.6 LXD
  ****************************************************************************/
 
 using UnityEngine;

+ 1 - 1
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/PracticeResult.Designer.cs

@@ -1,5 +1,5 @@
 /****************************************************************************
- * 2024.9 CHIVA
+ * 2025.6 LXD
  ****************************************************************************/
 
 using UnityEngine;

+ 1 - 1
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/ScoreInfo.Designer.cs

@@ -1,5 +1,5 @@
 /****************************************************************************
- * 2024.9 CHIVA
+ * 2025.6 LXD
  ****************************************************************************/
 
 using UnityEngine;

+ 1 - 1
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/StartTips.Designer.cs

@@ -1,5 +1,5 @@
 /****************************************************************************
- * 2024.9 CHIVA
+ * 2025.6 LXD
  ****************************************************************************/
 
 using UnityEngine;

+ 1 - 1
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/StudyPanel.Designer.cs

@@ -1,5 +1,5 @@
 /****************************************************************************
- * 2024.9 CHIVA
+ * 2025.6 LXD
  ****************************************************************************/
 
 using UnityEngine;

+ 1 - 1
OperationUIFrame/OperationUIFrameV2/Scripts/UI/PC_OperatePanel/SubmitResult.Designer.cs

@@ -1,5 +1,5 @@
 /****************************************************************************
- * 2024.9 CHIVA
+ * 2025.6 LXD
  ****************************************************************************/
 
 using UnityEngine;

+ 124 - 32
OperationUIFrame/OperationUIFrameV2/Scripts/UI/ToolLibraryForm.cs

@@ -3,41 +3,96 @@ using UnityEngine.UI;
 using QFramework;
 using System.Collections.Generic;
 using I2.Loc;
+using System;
 
 namespace QFramework
 {
+    public enum  ToolLibraryType
+    {
+        /// <summary>
+        /// 工具间
+        /// </summary>
+        ToolRoom,
+        /// <summary>
+        /// 工具包
+        /// </summary>
+        ToolKit
+    }
+
     public class ToolLibraryFormData : UIPanelData
     {
+        /// <summary>
+        /// 开启的工具库类型
+        /// </summary>
+        public ToolLibraryType toolLibraryType = ToolLibraryType.ToolRoom;
+
+        /// <summary>
+        /// 正常情况下不用使用该回调,这是为ToolLibrarySelectElement单加的模式
+        /// </summary>
+        public Action selectAction;
     }
     public partial class ToolLibraryForm : UIPanel
     {
-        public List<int> m_CurrentSelectToolIDs = new List<int>();
-
         public List<Sprite> m_Sprites = new List<Sprite>();
 
+        public ToolConfigProxy m_ToolConfigProxy;
+
         protected override void OnInit(IUIData uiData = null)
         {
             mData = uiData as ToolLibraryFormData ?? new ToolLibraryFormData();
 
+            m_ToolConfigProxy = DAL.Instance.Get<ToolConfigProxy>();
+
             CloseBtn.onClick.AddListener(OnCloseBtnClick);
 
             ToolLibrarySelectElement.InitData();
+
             ToolLibrarySelectElement.TitleText.text = ScriptLocalization.tooltype.all;
+
+            m_ToolConfigProxy.m_CurrentToolLibraryType = mData.toolLibraryType;
+
+            CloseBtn.gameObject.SetActive(mData.selectAction == null);
+
+           
         }
 
         protected override void OnOpen(IUIData uiData = null)
         {
-            ToolLibrarySelectElement.OpenUI();
+            mData = uiData as ToolLibraryFormData ?? new ToolLibraryFormData();
+
+            switch (m_ToolConfigProxy.m_CurrentToolLibraryType)
+            {
+                case ToolLibraryType.ToolRoom:
+
+                    m_ToolConfigProxy.m_TmpToolRoomConfigInfos = m_ToolConfigProxy.GetAllToolConfigInfoFromCTRSTCIs();
+
+                    ToolLibrarySelectElement.OpenToolRoomUI();
+                    break;
+                case ToolLibraryType.ToolKit:
+                    ToolLibrarySelectElement.OpenToolKitUI();
+                    break;
+                default:
+                    break;
+            }
+
             ToolTypeElement.RefrushTypeBtn();
             transform.transform.SetAsLastSibling();
         }
 
         protected override void OnShow()
         {
-            ToolLibrarySelectElement.ShowUI();
-            //刷新工具列表为全部
-            ToolTypeElement.RefrushTypeBtn();
-            transform.transform.SetAsLastSibling();
+            //工具包
+            if (mData.toolLibraryType == ToolLibraryType.ToolKit)
+            {
+
+            }
+            else if (mData.toolLibraryType == ToolLibraryType.ToolRoom)
+            {
+                ToolLibrarySelectElement.ShowUI();
+                //刷新工具列表为全部
+                ToolTypeElement.RefrushTypeBtn();
+                transform.transform.SetAsLastSibling();
+            }
         }
 
         protected override void OnHide()
@@ -72,21 +127,35 @@ namespace QFramework
         /// </summary>
         public void OnCloseBtnClick()
         {
-            ToolConfigProxy tmpProxy = DAL.Instance.Get<ToolConfigProxy>();
-            m_CurrentSelectToolIDs.Clear();
-
-            foreach (var item in tmpProxy.GetAllToolConfigInfos())
+            switch (m_ToolConfigProxy.m_CurrentToolLibraryType)
             {
-                foreach (var selectTool in OperateSetting.Instance.m_ToolLibraryToolConfigs)
-                {
-                    if (selectTool.toolName == item.toolName)
+                case ToolLibraryType.ToolRoom:
+
+
+                    break;
+                case ToolLibraryType.ToolKit:
+
+                    m_ToolConfigProxy.ClearToolConfigInfoToCTKSTCIs();
+
+                    foreach (var item in m_ToolConfigProxy.GetAllToolConfigInfos())
                     {
-                        m_CurrentSelectToolIDs.Add(int.Parse(item.id));
+                        foreach (var selectTool in OperateSetting.Instance.m_ToolKitToolConfigs)
+                        {
+                            if (selectTool.toolName == item.toolName)
+                            {
+                                ToolConfigInfo tmpToolConfigInfo = m_ToolConfigProxy.GetTooConfigInfoByToolName(item.toolName);
+
+                                m_ToolConfigProxy.AddToolConfigInfoToCTKSTCIs(tmpToolConfigInfo);
+                            }
+                        }
                     }
-                }
+
+                    break;
+                default:
+                    break;
             }
 
-            UIKit.HidePanel<ToolLibraryForm>();
+            UIKit.ClosePanel<ToolLibraryForm>();
         }
 
         /// <summary>
@@ -94,34 +163,57 @@ namespace QFramework
         /// </summary>
         public void OnConfirmBtnClick()
         {
-            List<ToolConfig> tmpToolConfigs = new List<ToolConfig>();
+            switch (m_ToolConfigProxy.m_CurrentToolLibraryType)
+            {
+                case ToolLibraryType.ToolRoom:
+
+                    m_ToolConfigProxy.SetCurrrentToolRoomToolConfigInfos(m_ToolConfigProxy.m_TmpToolRoomConfigInfos);
+
+                    break;
+                case ToolLibraryType.ToolKit:
+
+                    break;
+                default:
+                    break;
 
-            ToolConfigProxy tmpProxy = DAL.Instance.Get<ToolConfigProxy>();
+            }
+
+            List<ToolConfig> tmpToolConfigs = new List<ToolConfig>();
 
-            foreach (var item in m_CurrentSelectToolIDs)
+            foreach (var item in m_ToolConfigProxy.GetAllToolConfigInfoFromCTKSTCIs())
             {
-                ToolConfig tmpToolConfig = new ToolConfig();
+                if (m_ToolConfigProxy.GetToolConfigInfoFromCTRSTCIsById(int.Parse(item.id)) != null)
+                {
+                    ToolConfig tmpToolConfig = new ToolConfig();
 
-                ToolConfigInfo toolConfigInfo = tmpProxy.GetTooConfigInfoById(item);
+                    ToolConfigInfo toolConfigInfo = m_ToolConfigProxy.GetTooConfigInfoById(int.Parse(item.id));
 
-                tmpToolConfig.toolName = toolConfigInfo.toolName;
-                tmpToolConfig.toolImg = tmpProxy.GetSpriteByToolName(tmpToolConfig.toolName);
-                tmpToolConfig.en_toolName = toolConfigInfo.en_toolName;
-                tmpToolConfig.en_toolType = toolConfigInfo.en_toolType;
-                tmpToolConfig.en_toolDescription = toolConfigInfo.en_toolDescription;
-                tmpToolConfigs.Add(tmpToolConfig);
+                    tmpToolConfig.toolName = toolConfigInfo.toolName;
+                    tmpToolConfig.toolImg = m_ToolConfigProxy.GetSpriteByToolName(tmpToolConfig.toolName);
+                    tmpToolConfig.en_toolName = toolConfigInfo.en_toolName;
+                    tmpToolConfig.en_toolType = toolConfigInfo.en_toolType;
+                    tmpToolConfig.en_toolDescription = toolConfigInfo.en_toolDescription;
+                    tmpToolConfigs.Add(tmpToolConfig);
+                }
             }
 
-            OperateSetting.Instance.m_ToolLibraryToolConfigs = tmpToolConfigs;
+            OperateSetting.Instance.m_ToolKitToolConfigs = tmpToolConfigs;
 
             UIKit.OpenPanel<ToolDisplayForm>(new ToolDisplayFormData() { m_ToolConfigs = tmpToolConfigs });
-            UIKit.HidePanel<ToolLibraryForm>();
+
+            if (mData.selectAction != null)
+            {
+                mData.selectAction?.Invoke();
+            }else
+            {
+                UIKit.ClosePanel<ToolLibraryForm>();
+            }
         }
 
         public void RefrushAllChoseTool()
         {
-            m_CurrentSelectToolIDs.Clear();
-            OperateSetting.Instance.m_ToolLibraryToolConfigs.Clear();
+            m_ToolConfigProxy.ClearToolConfigInfoToCTKSTCIs();
+            OperateSetting.Instance.m_ToolKitToolConfigs.Clear();
             UIKit.OpenPanel<ToolDisplayForm>(new ToolDisplayFormData() { m_ToolConfigs = null });
         }
     }

+ 51 - 9
OperationUIFrame/OperationUIFrameV2/Scripts/UI/ToolLibraryForm/ToolLibrarySelectElement.cs

@@ -18,6 +18,8 @@ namespace QFramework
 
         List<ToolConfigInfo> m_NeedHightToolConfigInfos;
 
+        ToolConfigProxy m_ToolConfigProxy;
+
         /// <summary>
         /// 뎠품돨女鑒
         /// </summary>
@@ -46,16 +48,34 @@ namespace QFramework
             ClearBtn.onClick.AddListener(OnClearBtnClick);
 
             ConfirmBtn.onClick.AddListener(OnConfirmBtnClick);
+
+            m_ToolConfigProxy = DAL.Instance.Get<ToolConfigProxy>();
         }
 
-        public void OpenUI()
+        /// <summary>
+        /// 댔역교관UI
+        /// </summary>
+        public void OpenToolKitUI()
         {
             if (!OperateSetting.Instance.ToolPackUILogic.GetHint()) return;
 
             ShowHighter();
+
+            if (m_ToolConfigProxy.GetAllToolConfigInfoFromCTKSTCIs().Count != 0)
+            {
+                ShowTargetPage(1);
+            }
+        }
+
+        /// <summary>
+        /// 댔역묏야쇌UI
+        /// </summary>
+        public void OpenToolRoomUI()
+        {
             ShowTargetPage(1);
         }
 
+
         public void ShowUI()
         {
             if (!OperateSetting.Instance.ToolPackUILogic.GetHint()) return;
@@ -67,13 +87,12 @@ namespace QFramework
         public void ShowHighter()
         {
             ToolLibraryForm tmpLibraryForm = UIKit.GetPanel<ToolLibraryForm>();
-            ToolConfigProxy tmpProxy = DAL.Instance.Get<ToolConfigProxy>();
 
             m_NeedHightToolConfigInfos = new List<ToolConfigInfo>();
 
             foreach (var item in OperateSetting.Instance.m_CurrentStepRightToolNames)
             {
-                ToolConfigInfo tmpInfo = tmpProxy.GetTooConfigInfoByToolName(item);
+                ToolConfigInfo tmpInfo = m_ToolConfigProxy.GetTooConfigInfoByToolName(item);
 
                 ToolConfigInfo tmpToolConfigInfo = m_ToolConfigInfos.Find(t => t.id == tmpInfo.id);
                 m_ToolConfigInfos.Remove(tmpToolConfigInfo);
@@ -88,17 +107,25 @@ namespace QFramework
         /// </summary>
         public void InitData()
         {
-            ToolConfigProxy tmpToolConfigProxy = DAL.Instance.Get<ToolConfigProxy>();
+            m_ToolConfigProxy = DAL.Instance.Get<ToolConfigProxy>();
 
             for (int i = 0; i < 18; i++)
             {
                 GameObject tmpObj = Instantiate(ToolItemPrefab.gameObject, Content);
-
                 toolItemPrefabs.Add(tmpObj.GetComponent<ToolItemPrefab>());
             }
 
-            SetData(tmpToolConfigProxy.GetAllToolConfigInfos());
-
+            switch (m_ToolConfigProxy.m_CurrentToolLibraryType)
+            {
+                case ToolLibraryType.ToolRoom:
+                    SetData(m_ToolConfigProxy.m_TmpToolRoomConfigInfos);
+                    break;
+                case ToolLibraryType.ToolKit:
+                    SetData(m_ToolConfigProxy.GetAllToolConfigInfoFromCTRSTCIs());
+                    break;
+                default:
+                    break;
+            }
         }
 
         public void SetData(List<ToolConfigInfo> toolConfigInfos)
@@ -163,7 +190,22 @@ namespace QFramework
         {
             ToolConfigProxy toolConfigProxy = DAL.Instance.Get<ToolConfigProxy>();
 
-            m_ToolConfigInfos = toolConfigProxy.GetToolConfigInfosByToolTypeAndName(UIKit.GetPanel<ToolLibraryForm>().ToolTypeElement.curentType, inputStr);
+            switch (m_ToolConfigProxy.m_CurrentToolLibraryType)
+            {
+                case ToolLibraryType.ToolRoom:
+
+                    m_ToolConfigInfos = toolConfigProxy.GetToolConfigInfosByToolTypeAndName(UIKit.GetPanel<ToolLibraryForm>().ToolTypeElement.curentType, inputStr);
+                    
+                    break;
+                case ToolLibraryType.ToolKit:
+
+                    m_ToolConfigInfos = toolConfigProxy.GetToolToolKitConfigInfosByToolTypeAndName(UIKit.GetPanel<ToolLibraryForm>().ToolTypeElement.curentType, inputStr);
+
+                    break;
+                default:
+                    break;
+            }
+
             SetData(m_ToolConfigInfos);
         }
 
@@ -237,7 +279,7 @@ namespace QFramework
 
         public void OnClearBtnClick()
         {
-            UIKit.GetPanel<ToolLibraryForm>().m_CurrentSelectToolIDs.Clear();
+            DAL.Instance.Get<ToolConfigProxy>().ClearToolConfigInfoToCTKSTCIs();
 
             ShowTargetPage(m_CurrentPage);
         }

+ 95 - 37
OperationUIFrame/OperationUIFrameV2/Scripts/UI/ToolLibraryForm/ToolLibrarySelectElement/ToolItemPrefab.cs

@@ -26,33 +26,37 @@ namespace QFramework
 
         public ToolConfigInfo m_ToolConfigInfo;
 
-        private UnityEngine.Coroutine m_Coroutine;
-
         private BtnState m_CurrentBtnState;
 
+        private ToolConfigProxy m_ToolConfigProxy;
+
         private void Start()
         {
             GetComponent<Button>().onClick.AddListener(OnToolButtonClick);
         }
 
-        private IObservable<BaseEventData> OnSelect()
-        {
-            throw new NotImplementedException();
-        }
-
         public void SetData(ToolConfigInfo toolConfigInfo)
         {
             m_ToolConfigInfo = toolConfigInfo;
 
-            ToolLibraryForm toolLibraryForm = UIKit.GetPanel<ToolLibraryForm>();
+            m_ToolConfigProxy = DAL.Instance.Get<ToolConfigProxy>();
 
-            if (toolLibraryForm.m_CurrentSelectToolIDs.Contains(int.Parse(m_ToolConfigInfo.id)))
+            switch (m_ToolConfigProxy.m_CurrentToolLibraryType)
             {
-                SetButtonState(BtnState.select);
-            }
-            else
-            {
-                SetButtonState(BtnState.normal);
+                case ToolLibraryType.ToolRoom:
+
+                    if (m_ToolConfigProxy.GetToolConfigInfoFromCTRSTCIsById(int.Parse(toolConfigInfo.id)) != null) SetButtonState(BtnState.select);
+                    else SetButtonState(BtnState.normal);
+
+                    break;
+                case ToolLibraryType.ToolKit:
+
+                    if (m_ToolConfigProxy.GetToolConfigInfoFromCTKSTCIsById(int.Parse(toolConfigInfo.id))!= null) SetButtonState(BtnState.select);
+                    else SetButtonState(BtnState.normal);
+
+                    break;
+                default:
+                    break;
             }
 
             SetToolIcon();
@@ -66,10 +70,28 @@ namespace QFramework
             #endregion
 
 
-            //如果已经选择
-            if (toolLibraryForm.m_CurrentSelectToolIDs.Contains(int.Parse(m_ToolConfigInfo.id)))
+            switch (m_ToolConfigProxy.m_CurrentToolLibraryType)
             {
-                SetButtonState(BtnState.select);
+                case ToolLibraryType.ToolRoom:
+
+                    //如果已经选择
+                    if (m_ToolConfigProxy.GetToolConfigInfoFromCTRSTCIsById(int.Parse(m_ToolConfigInfo.id)) != null)
+                    {
+                        SetButtonState(BtnState.select);
+                    }
+
+                    break;
+                case ToolLibraryType.ToolKit:
+
+                    //如果已经选择
+                    if (m_ToolConfigProxy.GetToolConfigInfoFromCTKSTCIsById(int.Parse(m_ToolConfigInfo.id)) != null)
+                    {
+                        SetButtonState(BtnState.select);
+                    }
+
+                    break;
+                default:
+                    break;
             }
 
             //如果打开提示
@@ -91,31 +113,69 @@ namespace QFramework
 
             toolLibraryForm?.ToolMessageElement.ShowToolInfo(m_ToolConfigInfo);
 
-            if (toolLibraryForm.m_CurrentSelectToolIDs.Contains(int.Parse(m_ToolConfigInfo.id)))
+            switch (m_ToolConfigProxy.m_CurrentToolLibraryType)
             {
-                toolLibraryForm.m_CurrentSelectToolIDs.Remove(int.Parse(m_ToolConfigInfo.id));
+                case ToolLibraryType.ToolRoom:
 
-                SetButtonState(BtnState.normal);
+                    if (m_ToolConfigProxy.GetToolConfigInfoFromCTRSTCIsById(int.Parse(m_ToolConfigInfo.id)) != null)
+                    {
+                        if (GetIsNeedHighter())
+                        {
+                            ShowHighter(true);
+                        }
 
-                if (OperateSetting.Instance.ToolPackUILogic.GetHint())
-                {
-                    if (GetIsNeedHighter())
+                        m_ToolConfigProxy.RemoveToolConfigInfoFromCTRSTCIsById(int.Parse(m_ToolConfigInfo.id));
+                        SetButtonState(BtnState.normal);
+                    }
+                    else
                     {
-                        ShowHighter(true);
+                        ToolConfigInfo tmpToolConfigInfo = m_ToolConfigProxy.GetTooConfigInfoById(int.Parse(m_ToolConfigInfo.id));
+                        m_ToolConfigProxy.AddToolConfigInfoToCTRSTCIs(tmpToolConfigInfo);
+                        SetButtonState(BtnState.select);
                     }
-                }
-            }
-            else
-            {
-                toolLibraryForm.m_CurrentSelectToolIDs.Add(int.Parse(m_ToolConfigInfo.id));
 
-                if (OperateSetting.Instance.ToolPackUILogic.GetHint())
-                {
-                    ShowHighter(false);
-                }
+                    break;
+                case ToolLibraryType.ToolKit:
+
+                    if (m_ToolConfigProxy.GetToolConfigInfoFromCTKSTCIsById(int.Parse(m_ToolConfigInfo.id)) != null)
+                    {
+                        m_ToolConfigProxy.RemoveToolConfigInfoFromCTKSTCIsById(int.Parse(m_ToolConfigInfo.id));
+                        SetButtonState(BtnState.normal);
+                    }
+                    else
+                    {
+                        ToolConfigInfo tmpToolConfigInfo = m_ToolConfigProxy.GetTooConfigInfoById(int.Parse(m_ToolConfigInfo.id));
+                        m_ToolConfigProxy.AddToolConfigInfoToCTKSTCIs(tmpToolConfigInfo);
+                        SetButtonState(BtnState.select);
+                    }
 
-                SetButtonState(BtnState.select);
+                    break;
+                default:
+                    break;
             }
+
+            //if (m_ToolConfigProxy.GetToolConfigInfoFromCTKSTCIsById(int.Parse(m_ToolConfigInfo.id)) != null)
+            //{
+            //    if (OperateSetting.Instance.ToolPackUILogic.GetHint())
+            //    {
+            //        if (GetIsNeedHighter())
+            //        {
+            //            ShowHighter(true);
+            //        }
+            //    }
+            //}
+            //else
+            //{
+
+            //    m_ToolConfigProxy.AddToolConfigInfoToCTKSTCIs(m_ToolConfigProxy.GetToolConfigInfoFromCTKSTCIsById(int.Parse(m_ToolConfigInfo.id)));
+
+            //    if (OperateSetting.Instance.ToolPackUILogic.GetHint())
+            //    {
+            //        ShowHighter(false);
+            //    }
+
+            //    SetButtonState(BtnState.select);
+            //}
         }
 
         public void SetShowToolInfo()
@@ -130,9 +190,7 @@ namespace QFramework
         /// </summary>
         private void SetToolIcon()
         {
-            ToolConfigProxy toolConfigProxy = DAL.Instance.Get<ToolConfigProxy>();
-
-            ToolIcon.sprite = toolConfigProxy.GetSpriteByToolName(m_ToolConfigInfo.toolName);
+            ToolIcon.sprite = m_ToolConfigProxy.GetSpriteByToolName(m_ToolConfigInfo.toolName);
         }
 
         public void OnPointEnter()

+ 16 - 2
OperationUIFrame/OperationUIFrameV2/Scripts/UI/ToolLibraryForm/ToolTypeElement.cs

@@ -96,9 +96,23 @@ namespace QFramework
 
             ChangBtnGroupState(curentType);
 
-            List<ToolConfigInfo> tmpToolConfigInfos;
+            List<ToolConfigInfo> tmpToolConfigInfos = new List<ToolConfigInfo>();
 
-            tmpToolConfigInfos = tmpToolConfigProxy.GetToolConfigInfosByToolTypeAndName(curentType, UIKit.GetPanel<ToolLibraryForm>().ToolLibrarySelectElement.SearchInputField.text);
+            switch (tmpToolConfigProxy.m_CurrentToolLibraryType)
+            {
+                case ToolLibraryType.ToolRoom:
+
+                    tmpToolConfigInfos = tmpToolConfigProxy.GetToolConfigInfosByToolTypeAndName(curentType, UIKit.GetPanel<ToolLibraryForm>().ToolLibrarySelectElement.SearchInputField.text);
+
+                    break;
+                case ToolLibraryType.ToolKit:
+
+                    tmpToolConfigInfos = tmpToolConfigProxy.GetToolToolKitConfigInfosByToolTypeAndName(curentType,UIKit.GetPanel<ToolLibraryForm>().ToolLibrarySelectElement.SearchInputField.text);
+
+                    break;
+                default:
+                    break;
+            }
 
             UIKit.GetPanel<ToolLibraryForm>().ToolLibrarySelectElement.SetData(tmpToolConfigInfos);
         }

+ 637 - 59
OperationUIFrame/OperationUIFrameV2/UIPrefabs/PC_OperatePanel.prefab

@@ -317,7 +317,7 @@ RectTransform:
   - {fileID: 4112798851261557581}
   - {fileID: 3332119968730703472}
   m_Father: {fileID: 3996751866356890438}
-  m_RootOrder: 3
+  m_RootOrder: 4
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
@@ -3597,7 +3597,7 @@ RectTransform:
   - {fileID: 3631619018895126077}
   - {fileID: 9220195329770722693}
   m_Father: {fileID: 5937661528918436544}
-  m_RootOrder: 5
+  m_RootOrder: 4
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -4325,6 +4325,81 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &1283578622307613080
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6525219100594397421}
+  - component: {fileID: 4376026617540381168}
+  - component: {fileID: 3018188158729969018}
+  m_Layer: 5
+  m_Name: PromptIcon
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &6525219100594397421
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1283578622307613080}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 5270166560972114613}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 118, y: 45}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4376026617540381168
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1283578622307613080}
+  m_CullTransparentMesh: 0
+--- !u!114 &3018188158729969018
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1283578622307613080}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: -3592251023943376180, guid: c8c709b3849a552459d805ab3a1016e3,
+    type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
 --- !u!1 &1359116330659365367
 GameObject:
   m_ObjectHideFlags: 0
@@ -4473,6 +4548,170 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &1382750477171708210
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5270166560972114613}
+  - component: {fileID: 1937909510105554881}
+  - component: {fileID: 5108399344299156328}
+  - component: {fileID: 7143229464513666475}
+  - component: {fileID: 2163664679872319579}
+  - component: {fileID: 9070152929112600477}
+  m_Layer: 5
+  m_Name: ToolBackPackBtn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5270166560972114613
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1382750477171708210}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 8431982910122911666}
+  - {fileID: 4690495068339113261}
+  - {fileID: 8606074286178054783}
+  - {fileID: 6525219100594397421}
+  m_Father: {fileID: 3996751866356890438}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 118, y: 45}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1937909510105554881
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1382750477171708210}
+  m_CullTransparentMesh: 0
+--- !u!114 &5108399344299156328
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1382750477171708210}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0, g: 0, b: 0, a: 0}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 776f629a4c02a2746b51409b704f02b4, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!114 &7143229464513666475
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1382750477171708210}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 5108399344299156328}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &2163664679872319579
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1382750477171708210}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1505a3e801c2552418096985593d4746, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_BtnName: "\u5DE5\u5177\u5E93"
+  m_NormalIcon: {fileID: 21300000, guid: 2c07f9270e2471a47b36a31f1392ba9a, type: 3}
+  m_HoverIcon: {fileID: 21300000, guid: c29970e4344ee8e4e85dbe0150de915b, type: 3}
+  m_SelectIcon: {fileID: 21300000, guid: b196fbc68213c734488f087758dd1b07, type: 3}
+  m_NormalColor: {r: 0.99215686, g: 0.99215686, b: 0.99215686, a: 0.78039217}
+  m_HoverColor: {r: 1, g: 1, b: 1, a: 1}
+  m_SelectColor: {r: 0.92941177, g: 0.53333336, b: 0.09411765, a: 1}
+  m_NormalFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+  m_HoverFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+  m_SelectFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+  isToggle: 0
+--- !u!114 &9070152929112600477
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1382750477171708210}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0d51f3a7c41ab0346b49ae50d456bece, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  MarkType: 0
+  CustomComponentName: HelpBtn
+  ComponentGeneratePath: 
+  CustomComment: 
+  mComponentName: DownBGButton
 --- !u!1 &1441077428125601365
 GameObject:
   m_ObjectHideFlags: 0
@@ -5177,7 +5416,7 @@ RectTransform:
   - {fileID: 1479329931361206601}
   - {fileID: 7496846978124364511}
   m_Father: {fileID: 5937661528918436544}
-  m_RootOrder: 6
+  m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -5631,7 +5870,6 @@ GameObject:
   - component: {fileID: 4922745312523913940}
   - component: {fileID: 7584956565697318907}
   - component: {fileID: -7679864437989238778}
-  - component: {fileID: 4778384032308920012}
   - component: {fileID: 8003666371237531374}
   m_Layer: 5
   m_Name: StartTips
@@ -5660,7 +5898,7 @@ RectTransform:
   - {fileID: 8922285082026378132}
   - {fileID: 8232831647091677057}
   m_Father: {fileID: 5937661528918436544}
-  m_RootOrder: 9
+  m_RootOrder: 8
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -5693,23 +5931,6 @@ MonoBehaviour:
   StartInfo: {fileID: 6582076778981104734}
   StartTipsInfo: {fileID: 2193633642444391031}
   TipsCloseBtn: {fileID: 8400390701310303612}
---- !u!114 &4778384032308920012
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2277631227511143721}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 0d51f3a7c41ab0346b49ae50d456bece, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  MarkType: 0
-  CustomComponentName: StartTips
-  ComponentGeneratePath: 
-  CustomComment: 
-  mComponentName: UnityEngine.CanvasGroup
 --- !u!225 &8003666371237531374
 CanvasGroup:
   m_ObjectHideFlags: 0
@@ -6528,7 +6749,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "\u5DE5\u5177\u5E93"
+  m_Text: "\u5DE5\u5177\u95F4"
 --- !u!114 &7149922715369371895
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -6692,7 +6913,7 @@ RectTransform:
   - {fileID: 3026581704027024504}
   - {fileID: 2034866953079108813}
   m_Father: {fileID: 3996751866356890438}
-  m_RootOrder: 4
+  m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
@@ -8142,7 +8363,7 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: 1
---- !u!1 &3419607304384266226
+--- !u!1 &3394259102054683291
 GameObject:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
@@ -8150,59 +8371,133 @@ GameObject:
   m_PrefabAsset: {fileID: 0}
   serializedVersion: 6
   m_Component:
-  - component: {fileID: 6260684498261801223}
-  - component: {fileID: 8744086820096431188}
-  - component: {fileID: 4069285895636987839}
-  - component: {fileID: 8826974383224089088}
-  - component: {fileID: 6452999068180347439}
+  - component: {fileID: 8431982910122911666}
+  - component: {fileID: 5173601696117333756}
+  - component: {fileID: 4351306627504678299}
   m_Layer: 5
-  m_Name: Text
+  m_Name: SelectArea
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6260684498261801223
+  m_IsActive: 0
+--- !u!224 &8431982910122911666
 RectTransform:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3419607304384266226}
+  m_GameObject: {fileID: 3394259102054683291}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
-  m_Father: {fileID: 6133160858731787273}
+  m_Father: {fileID: 5270166560972114613}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 1, y: 0.5}
-  m_AnchorMax: {x: 1, y: 0.5}
-  m_AnchoredPosition: {x: 8, y: 0}
-  m_SizeDelta: {x: 68, y: 30}
-  m_Pivot: {x: 0, y: 0.5}
---- !u!222 &8744086820096431188
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5173601696117333756
 CanvasRenderer:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3419607304384266226}
+  m_GameObject: {fileID: 3394259102054683291}
   m_CullTransparentMesh: 0
---- !u!114 &4069285895636987839
+--- !u!114 &4351306627504678299
 MonoBehaviour:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3419607304384266226}
+  m_GameObject: {fileID: 3394259102054683291}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 0.990566, g: 0.990566, b: 0.990566, a: 0.78039217}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: f572b7acdd46c7c4a87973fd1c7e3196, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!1 &3419607304384266226
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6260684498261801223}
+  - component: {fileID: 8744086820096431188}
+  - component: {fileID: 4069285895636987839}
+  - component: {fileID: 8826974383224089088}
+  - component: {fileID: 6452999068180347439}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &6260684498261801223
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3419607304384266226}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 6133160858731787273}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
+  m_AnchoredPosition: {x: 8, y: 0}
+  m_SizeDelta: {x: 68, y: 30}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &8744086820096431188
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3419607304384266226}
+  m_CullTransparentMesh: 0
+--- !u!114 &4069285895636987839
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3419607304384266226}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.990566, g: 0.990566, b: 0.990566, a: 0.78039217}
   m_RaycastTarget: 1
   m_Maskable: 1
   m_OnCullStateChanged:
@@ -9649,6 +9944,138 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   m_HorizontalFit: 2
   m_VerticalFit: 0
+--- !u!1 &4100811227662103287
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1457252525369314623}
+  - component: {fileID: 154407533828028012}
+  - component: {fileID: 2380627644381222161}
+  - component: {fileID: 1969718208585390230}
+  - component: {fileID: 4484805157731928460}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1457252525369314623
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4100811227662103287}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 4690495068339113261}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
+  m_AnchoredPosition: {x: 8, y: 0}
+  m_SizeDelta: {x: 0, y: 30}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &154407533828028012
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4100811227662103287}
+  m_CullTransparentMesh: 0
+--- !u!114 &2380627644381222161
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4100811227662103287}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.99215686, g: 0.99215686, b: 0.99215686, a: 0.78039217}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+    m_FontSize: 17
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 1
+    m_MaxSize: 40
+    m_Alignment: 3
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u5DE5\u5177\u5305"
+--- !u!114 &1969718208585390230
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4100811227662103287}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  mTerm: toolkit
+  mTermSecondary: 
+  PrimaryTermModifier: 0
+  SecondaryTermModifier: 0
+  TermPrefix: 
+  TermSuffix: 
+  LocalizeOnAwake: 1
+  IgnoreRTL: 0
+  MaxCharactersInRTL: 0
+  IgnoreNumbersInRTL: 1
+  CorrectAlignmentForRTL: 1
+  AddSpacesToJoinedLanguages: 0
+  AllowLocalizedParameters: 1
+  TranslatedObjects: []
+  LocalizeEvent:
+    m_PersistentCalls:
+      m_Calls: []
+  AlwaysForceLocalize: 0
+  LocalizeCallBack:
+    Target: {fileID: 0}
+    MethodName: 
+  mGUI_ShowReferences: 0
+  mGUI_ShowTems: 1
+  mGUI_ShowCallback: 0
+  mLocalizeTarget: {fileID: 0}
+  mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text
+--- !u!114 &4484805157731928460
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4100811227662103287}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalFit: 2
+  m_VerticalFit: 0
 --- !u!1 &4125604218355242711
 GameObject:
   m_ObjectHideFlags: 0
@@ -10044,6 +10471,80 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   scrollview: {fileID: 270643271180574912}
+--- !u!1 &4382537951684330856
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8606074286178054783}
+  - component: {fileID: 5881226935832798370}
+  - component: {fileID: 8213599523179106997}
+  m_Layer: 5
+  m_Name: Line
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8606074286178054783
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4382537951684330856}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 5270166560972114613}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 0}
+  m_AnchoredPosition: {x: 0, y: 1.5}
+  m_SizeDelta: {x: 0, y: 3}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5881226935832798370
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4382537951684330856}
+  m_CullTransparentMesh: 0
+--- !u!114 &8213599523179106997
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4382537951684330856}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 776f629a4c02a2746b51409b704f02b4, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
 --- !u!1 &4458014759072258169
 GameObject:
   m_ObjectHideFlags: 0
@@ -11055,7 +11556,7 @@ RectTransform:
   - {fileID: 738827904464874878}
   - {fileID: 3583031758018330686}
   m_Father: {fileID: 5937661528918436544}
-  m_RootOrder: 4
+  m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 1, y: 1}
@@ -12123,8 +12624,9 @@ RectTransform:
   - {fileID: 8695666795943990804}
   - {fileID: 3832599344791639967}
   - {fileID: 5388564051140459057}
+  - {fileID: 4919306754663186500}
   m_Father: {fileID: 5937661528918436544}
-  m_RootOrder: 3
+  m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0.5}
   m_AnchorMax: {x: 0, y: 0.5}
@@ -12194,19 +12696,20 @@ MonoBehaviour:
   BottomImage: {fileID: 7592058356707018868}
   PlayBtn: {fileID: 1447756477387640454}
   PauseBtn: {fileID: 6605819935583771773}
+  SubtitleBg: {fileID: 705615606031942045}
+  SubtitleMask: {fileID: 1485844128724128966}
+  SubtitleText: {fileID: 639125689688842731}
   OperateLogBtn: {fileID: 515063179654277925}
   BtnPrefab: {fileID: 8406303922268797849}
   HelpBtn: {fileID: 4638903202169998952}
   ToolLibraryBtn: {fileID: 3355486909981075256}
+  ToolBackPackBtn: {fileID: 2163664679872319579}
   AutoPlayBtn: {fileID: 1594443530775498608}
   EndExam: {fileID: 4805380361755657439}
   HeadPortraitBg: {fileID: 2541165987695690569}
   HeadPortraitText: {fileID: 1879935657863090162}
   UserName: {fileID: 9134542656545873048}
   ScheduleText: {fileID: 951661861643714039}
-  SubtitleBg: {fileID: 705615606031942045}
-  SubtitleMask: {fileID: 1485844128724128966}
-  SubtitleText: {fileID: 639125689688842731}
 --- !u!1 &5773382537844675809
 GameObject:
   m_ObjectHideFlags: 0
@@ -12470,7 +12973,6 @@ RectTransform:
   m_Children:
   - {fileID: 9020418009363576861}
   - {fileID: 244895649399475673}
-  - {fileID: 4919306754663186500}
   - {fileID: 4314881067965048231}
   - {fileID: 4366126687401179268}
   - {fileID: 1032962305134131580}
@@ -14024,6 +14526,7 @@ RectTransform:
   m_Children:
   - {fileID: 1015133840648486069}
   - {fileID: 3577774132439171834}
+  - {fileID: 5270166560972114613}
   - {fileID: 4056381284791150215}
   - {fileID: 7746784864264408786}
   - {fileID: 8028946224031322923}
@@ -14373,7 +14876,7 @@ RectTransform:
   - {fileID: 3396386238433973968}
   - {fileID: 6398039157307350565}
   m_Father: {fileID: 5937661528918436544}
-  m_RootOrder: 7
+  m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -15069,7 +15572,7 @@ RectTransform:
   m_Children:
   - {fileID: 8292886593563432003}
   m_Father: {fileID: 5937661528918436544}
-  m_RootOrder: 8
+  m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -15208,13 +15711,13 @@ RectTransform:
   - {fileID: 7614934389744500225}
   - {fileID: 3996751866356890438}
   - {fileID: 8353630631165453099}
-  m_Father: {fileID: 5937661528918436544}
-  m_RootOrder: 2
+  m_Father: {fileID: 4314881067965048231}
+  m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 0}
-  m_AnchoredPosition: {x: 0, y: 22.5}
-  m_SizeDelta: {x: 0, y: 45}
+  m_AnchoredPosition: {x: 810.03, y: -44.51526}
+  m_SizeDelta: {x: 1620.0554, y: 45}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &3852933177492169861
 CanvasRenderer:
@@ -16653,6 +17156,81 @@ MonoBehaviour:
   mGUI_ShowCallback: 0
   mLocalizeTarget: {fileID: 0}
   mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text
+--- !u!1 &8379960974191125264
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4690495068339113261}
+  - component: {fileID: 8728202948493801089}
+  - component: {fileID: 1078392566116001477}
+  m_Layer: 5
+  m_Name: Icon
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &4690495068339113261
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8379960974191125264}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 1457252525369314623}
+  m_Father: {fileID: 5270166560972114613}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 0, y: 0.5}
+  m_AnchoredPosition: {x: 20, y: 0}
+  m_SizeDelta: {x: 19, y: 18}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &8728202948493801089
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8379960974191125264}
+  m_CullTransparentMesh: 0
+--- !u!114 &1078392566116001477
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8379960974191125264}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 2c07f9270e2471a47b36a31f1392ba9a, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
 --- !u!1 &8388804362385496921
 GameObject:
   m_ObjectHideFlags: 0
@@ -17092,7 +17670,7 @@ RectTransform:
   - {fileID: 397093932542958240}
   - {fileID: 5154205227774001951}
   m_Father: {fileID: 3996751866356890438}
-  m_RootOrder: 2
+  m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}