using UnityEngine; using UnityEngine.UI; using QFramework; using System.Collections.Generic; using ChivaXR; using System.Collections; namespace QFramework { public class QuestionSetPanelData : UIPanelData { } public partial class QuestionSetPanel : UIPanel { public string[] capital = new string[] { "A", "B", "C", "D", "E", "F", "G" }; public List optionSetItems = new List(); protected override void OnInit(IUIData uiData = null) { mData = uiData as QuestionSetPanelData ?? new QuestionSetPanelData(); InitQuesiongPanelData(); AddOptionBtn.onClick.AddListener(() => { OptionSetItem tmpOptionSetItem = AddOptionSetItem(); if (OptionTypeDropdown.captionText.text != "多选") { tmpOptionSetItem.m_Toggle.group = OptionConent.GetComponent(); } }); OptionTypeDropdown.onValueChanged.AddListener(OnOptionTypeDropdownClick); NextBtn.onClick.AddListener(OnNextBtnClick); PreviousBtn.onClick.AddListener(OnPreviousBtnClick); ExitBtn.onClick.AddListener(OnExitBtnClick); } protected override void OnOpen(IUIData uiData = null) { } protected override void OnShow() { } protected override void OnHide() { } protected override void OnClose() { } public void InitQuesiongPanelData() { DAL.Instance.Get().ReadStepMsgInfoFromTable(OperateSetting.Instance.m_CourseName + "_题库"); QuestionInfo tmpQuestionInfo = DAL.Instance.Get().GetQuestionInfoByStepId(ProcessManagement.Instance.currentStepID); if (tmpQuestionInfo != null) { //设置题目类型 OptionTypeDropdown.value = OptionTypeDropdown.options.IndexOf(OptionTypeDropdown.options.Find(t => t.text == tmpQuestionInfo.QuestionType)); OptionTypeDropdown.captionText.text = tmpQuestionInfo.QuestionType; //设置题目 TopicInputField.text = tmpQuestionInfo.Topic; //设置选项 var optionArr = tmpQuestionInfo.Options.Split(';'); //题型判断 if (tmpQuestionInfo.QuestionType == "单选" || tmpQuestionInfo.QuestionType == "多选") { //单选和多选 for (int i = 0; i < optionArr.Length; i++) { OptionSetItem optionSetItem = AddOptionSetItem(-1, optionArr[i]); if (tmpQuestionInfo.QuestionType == "单选") { optionSetItem.GetComponent().group = OptionConent.GetComponent(); } if (tmpQuestionInfo.Answer.Contains(optionArr[i].Split('、')[0])) { optionSetItem.GetComponent().isOn = true; } } }else { if (tmpQuestionInfo.Answer == "对") { optionSetItems[0].GetComponent().isOn = true; } else { optionSetItems[1].GetComponent().isOn = true; } } } } /// /// 添加选项 /// /// /// private OptionSetItem AddOptionSetItem(int index = -1, string option = "") { var tempOptionSetItem = Instantiate(OptionSetItem.gameObject, OptionConent.transform); tempOptionSetItem.SetActive(true); OptionSetItem optionSetItem = tempOptionSetItem.GetComponent(); optionSetItem.OptionInputField.text = option; optionSetItems.Add(optionSetItem); LayoutRebuilder.ForceRebuildLayoutImmediate(OptionConent.GetComponent()); return optionSetItem; } /// /// 题型选项 /// /// private void OnOptionTypeDropdownClick(int option) { ClearAllData(); if (OptionTypeDropdown.captionText.text == "多选") { OptionConent.GetComponent().allowSwitchOff = true; foreach (var item in optionSetItems) item.m_Toggle.group = null; AddOptionBtn.gameObject.SetActive(true); } else if (OptionTypeDropdown.captionText.text == "判断") { for (int i = 0; i < 2; i++) { if (i == 0) AddOptionSetItem(-1, "对"); else AddOptionSetItem(-1, "错"); } foreach (var item in optionSetItems) item.m_Toggle.group = OptionConent.GetComponent(); OptionConent.GetComponent().allowSwitchOff = false; AddOptionBtn.gameObject.SetActive(false); } else { foreach (var item in optionSetItems) item.m_Toggle.group = OptionConent.GetComponent(); OptionConent.GetComponent().allowSwitchOff = false; AddOptionBtn.gameObject.SetActive(true); } LayoutRebuilder.ForceRebuildLayoutImmediate(OptionConent.GetComponent()); } /// /// 下一步 /// private void OnNextBtnClick() { if (OnSaveData()) { ClearAllData(); ProcessManagement.Instance.JumpProcessState(ProcessManagement.Instance.currentStepID + 1); ProcessManagement.Instance.ActiveCurrentProcess(); InitQuesiongPanelData(); } } /// /// 下一步 /// private void OnPreviousBtnClick() { if (OnSaveData()) { ClearAllData(); ProcessManagement.Instance.JumpProcessState(ProcessManagement.Instance.currentStepID - 1); ProcessManagement.Instance.ActiveCurrentProcess(); InitQuesiongPanelData(); } } /// /// 退出 /// private void OnExitBtnClick() { CloseSelf(); } private void ClearAllData() { for (int i = 0; i < optionSetItems.Count; i++) { Destroy(optionSetItems[i].gameObject); } optionSetItems.Clear(); } /// /// 保存 /// private bool OnSaveData() { QuestionInfo questionInfo = GetPanelQuestionSetInfo(); if (string.IsNullOrEmpty(questionInfo.Answer)) { StartCoroutine(ShowWrongMsg("选项不能为空")); return false; } DAL.Instance.Get().SetQuestionInfo(questionInfo); return true; } /// /// 获取面板上配置的试题信息 /// /// private QuestionInfo GetPanelQuestionSetInfo() { QuestionInfo questionInfo = new QuestionInfo(); questionInfo.StepId = ProcessManagement.Instance.currentStepID.ToString(); questionInfo.QuestionType = OptionTypeDropdown.captionText.text; questionInfo.Topic = TopicInputField.text; if (questionInfo.QuestionType != "判断") { string optionStr = string.Empty; for (int i = 0; i < optionSetItems.Count; i++) { string[] tmpOptions = optionSetItems[i].OptionInputField.text.Split('、'); if (tmpOptions.Length > 1) { optionStr += capital[i] + "、" + tmpOptions[1]; } else { optionStr += capital[i] + "、" + tmpOptions[0]; } if (i != optionSetItems.Count - 1) optionStr += ";"; } questionInfo.Options = optionStr; } if (questionInfo.QuestionType == "判断") { if (optionSetItems.Count != 0) { if (optionSetItems[0].m_Toggle.isOn) questionInfo.Answer = "对"; if (optionSetItems[1].m_Toggle.isOn) questionInfo.Answer = "错"; } } else { string answerStr = string.Empty; for (int i = 0; i < optionSetItems.Count; i++) { if (optionSetItems[i].m_Toggle.isOn) { answerStr += capital[i]; } } questionInfo.Answer = answerStr; } return questionInfo; } private IEnumerator ShowWrongMsg(string wrongMsg) { WrongText.text = wrongMsg; yield return new WaitForSeconds(2f); WrongText.text = ""; } } }