ict.shenzhi/Assets/Scripts/UIManager/Panel/ApiPanel.cs

236 lines
8.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using static InterfaceManager;
using static WindowManager; //窗口管理器
/// <summary>
/// API面板
/// </summary>
public class ApiPanel : PanelBasic
{
/// <summary>
/// 智能提示按钮
/// </summary>
public Toggle intellisense_button;
/// <summary>
/// 全部提示按钮
/// </summary>
public Toggle all_prompts_button;
/// <summary>
/// 搜索框
/// </summary>
public TMP_InputField search_input_field;
/// <summary>
/// 智能提示面板
/// </summary>
public RectTransform intellisense_panel;
/// <summary>
/// 全部提示面板
/// </summary>
public RectTransform all_prompts_panel;
/// <summary>
/// 智能提示容器
/// </summary>
public RectTransform intellisense_api_item_content;
/// <summary>
/// 所有提示容器
/// </summary>
public RectTransform all_api_item_content;
/// <summary>
/// 预制体
/// </summary>
public ApiItem api_item_prefab;
/// <summary>
/// 实例对象列表
/// </summary>
public List<ApiItem> api_items = new List<ApiItem>();
private ApiDetailPanel api_detail_panel;
protected override void Awake()
{
base.Awake();
}
/// <summary>
/// 面板初始化
/// </summary>
public void Init(ApiDetailPanel api_detail_panel)
{
this.api_detail_panel = api_detail_panel;
intellisense_button.onValueChanged.AddListener(OnIntellisense);
all_prompts_button.onValueChanged.AddListener(OnAllPromps);
search_input_field.onValueChanged.AddListener(OnSearch);
if (api_item_prefab == null) api_item_prefab = Resources.Load<ApiItem>("Prefabs/UIItem/ApiItem");
//智能提示所选api
if (GameManager.current_main_menu_type == MainMenuType.)
{
CallForTest.instance.currentTaskData.task_steplist.ForEach(a =>
{
for (int i = 0; i < a.apiDetailList.Count; i++)
{
//对应组件和公共类
if (a.apiDetailList[i].apiType.ToString() == ((int)GameManager.current_component_type).ToString() || a.apiDetailList[i].apiType == "4")
{
var _item = Instantiate(api_item_prefab, intellisense_api_item_content);
_item.Init(a.apiDetailList[i], api_detail_panel);
api_items.Add(_item);
}
}
});
}
}
private void Start()
{
//全部提示配置api
string url = InterfaceManager.IdAddress + ":8080/component/scene/getComponentApiListNonAuth?appId=" + CallForTest.instance.Appid;
//string url = "D:\\UserFiles/Api24.1.23.json";
StartCoroutine(Get(url, true,(_data) =>
{
var jb = JObject.Parse(_data);
if (jb["code"].ToObject<int>() == 200)
{
if (jb["data"].ToArray().Length > 0)
{
string appfileUrl = "";
if (GameManager.current_main_menu_type == MainMenuType. || GameManager.current_main_menu_type == MainMenuType.)
{
var appfile = jb["data"][0]["apiFiles"].ToList().Find(type => type["type"].ToString() == CallForTest.instance.currentTaskData.programDto.programLanguage);
if (appfile != null)
{
appfileUrl = appfile["fileUrl"].ToString();
}
}
else if (GameManager.current_main_menu_type == MainMenuType.)
{
var appfile = jb["data"][0]["apiFiles"].ToList().Find(type => type["type"].ToString() == "Python");
if (appfile != null)
{
appfileUrl = appfile["fileUrl"].ToString();
}
}
if (!string.IsNullOrEmpty(appfileUrl))
{
StartCoroutine(Get(appfileUrl,false, txt =>
{
var _api_item_data = new List<ApiDetail>();
JArray.Parse(txt).ToList().ForEach(item =>
{
ApiDetail apiDetail = new ApiDetail();
apiDetail.apiName = item["apiName"].ToString();
apiDetail.apiFunction = item["apiFunction"].ToString();
apiDetail.apiClass = item["apiClass"].ToString();
apiDetail.apiType = item["apiType"].ToString();
apiDetail.apiUrl = item["apiUrl"].ToString();
apiDetail.apiDescription = item["apiDescription"].ToString();
apiDetail.apiParametersObj = JsonConvert.DeserializeObject<List<ApiParameters>>(item["apiParameters"].ToString());
apiDetail.apiReturnValuesObj = JsonConvert.DeserializeObject<List<ApiReturnValues>>(item["apiReturnValues"].ToString());
_api_item_data.Add(apiDetail);
});
for (int i = 0; i < _api_item_data.Count; i++)
{
//对应组件和公共类
if (_api_item_data[i].apiType.ToString() == ((int)GameManager.current_component_type).ToString() || _api_item_data[i].apiType == "4")
{
var _item = Instantiate(api_item_prefab, all_api_item_content);
_item.Init(_api_item_data[i], api_detail_panel);
api_items.Add(_item);
}
}
}));
}
}
}
else
{
Debug.LogError("获取api失败" + jb["msg"].ToString());
ConsolePanel.ConsoleOutput("获取api失败" + jb["msg"].ToString(), "error");
}
}));
}
/// <summary>
/// 智能提示
/// </summary>
public void OnIntellisense(bool _active)
{
//主窗口和小窗使用同一个脚本但是在不同Canvas下所以界面切换时根据当前状态使用不同的Canvas管理器
if (max_screen)
{
api_detail_panel.OnNagetive(); //切换提示时同时关闭Api详情
intellisense_panel.gameObject.SetActive(_active);
}
else
{
//小窗口
WindowManager.Instance.SwitchResolution(WindowManager.ScreenResolution.MID_SCREEN);
intellisense_panel.gameObject.SetActive(_active);
}
}
/// <summary>
/// 全部提示
/// </summary>
public void OnAllPromps(bool _active)
{
if (max_screen)
{
api_detail_panel.OnNagetive(); //切换提示时同时关闭Api详情
all_prompts_panel.gameObject.SetActive(_active);
}
else
{
WindowManager.Instance.SwitchResolution(WindowManager.ScreenResolution.MID_SCREEN);
all_prompts_panel.gameObject.SetActive(_active);
}
}
public void OnSearch(string _text)
{
if (string.IsNullOrEmpty(_text))
{
api_items.ForEach(x => x.gameObject.SetActive(true));
}
else
{
api_items.ForEach(x => x.gameObject.SetActive(x.api_item_data.apiName.Contains(_text)));
}
}
protected override void OnPanelClosed()
{
base.OnPanelClosed();
if (max_screen)
{
api_detail_panel.OnNagetive(); //关闭Api面板时同时关闭Api详情
}
else
{
}
}
}