@page "/exam/create" @using AutoMapper @using Entities.Contracts @using Newtonsoft.Json @using TechHelper.Client.Pages.Common @using TechHelper.Client.Pages.Exam.ExamView @using TechHelper.Client.Services @using Blazored.TextEditor @using Entities.DTO @using TechHelper.Client.Exam @inject ILogger Logger @inject ISnackbar Snackbar; @using Microsoft.AspNetCore.Components @using System.Globalization; @using TechHelper.Client.Pages.Editor @inject IDialogService DialogService 文本编辑器 载入 发布 指派 Test GlobalExamInfo @if (_parsedExam.Errors.Any()) { foreach (var item in _parsedExam.Errors) { @item.Message } } @code { [CascadingParameter] private Task authenticationStateTask { get; set; } private ExamQuestionDto selectedAssignmentQuestion = new ExamQuestionDto(); private BlazoredTextEditor _textEditor = new BlazoredTextEditor(); private ExamEx _parsedExam = new ExamEx(); private ExamDto ExamContent = new ExamDto(); private ExamParserConfig _examParserConfig { get; set; } = new ExamParserConfig(); private string EditorText = ""; [Inject] private ILocalStorageService LocalStorageService { get; set; } [Inject] public IMapper Mapper { get; set; } protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); } private async void OpenEditor() { var parameters = new DialogParameters { { x => x.TextEditor, _textEditor } }; parameters.Add("EditorText", EditorText); var dialog = await DialogService.ShowAsync("TextEditor", parameters); var result = await dialog.Result; if (!result.Canceled) { _textEditor = result.Data as BlazoredTextEditor ?? new BlazoredTextEditor(); await ParseExam(); } StateHasChanged(); } private async void OpenPublish() { var parameters = new DialogParameters { { x => x.Exam, ExamContent } }; var dialog = await DialogService.ShowAsync("PublishExam", parameters); var result = await dialog.Result; if (!result.Canceled) { await Publish(); } StateHasChanged(); } private async void HandleClickedStruct(ExamQuestionDto dto) { var parameters = new DialogParameters { { x => x.Questions, dto } }; var dialog = await DialogService.ShowAsync("Edit_Question", parameters); var result = await dialog.Result; if (!result.Canceled) { } StateHasChanged(); } [Inject] public ICommonService commonService { get; set; } private async Task ParseExam() { var plainText = await _textEditor.GetText(); EditorText = plainText; if (!string.IsNullOrWhiteSpace(plainText)) { try { var exampar = new ExamParser(_examParserConfig, commonService); _parsedExam = exampar.ParseExamPaper(plainText); Snackbar.Add("试卷解析成功。", Severity.Success); Snackbar.Add($"{_parsedExam.Errors}。", Severity.Success); StateHasChanged(); ExamContent = Mapper.Map(_parsedExam); ExamContent.SeqIndex(); } catch (Exception ex) { Console.WriteLine($"Error parsing exam paper: {ex.Message}"); Console.WriteLine($"Stack Trace: {ex.StackTrace}"); Snackbar.Add($"解析试卷时发生错误:{ex.Message}", Severity.Error); } } else { Snackbar.Add("试卷文本为空,无法解析。", Severity.Warning); } StateHasChanged(); } [Inject] public IExamService examService { get; set; } public async Task Publish() { var apiRespon = await examService.SaveParsedExam(ExamContent); Snackbar.Add(apiRespon.Message); } public async Task OpenTest() { Dictionary Note = new Dictionary { { "Hello", (Color.Surface, "World") }, { "My", (Color.Surface, "App") }, }; var json = JsonConvert.SerializeObject(Note); Console.WriteLine(json); var res = JsonConvert.DeserializeObject>(json); } private async void HandleGlobalInfo() { var parameters = new DialogParameters { { x => x.Assignment, ExamContent } }; var dialog = await DialogService.ShowAsync("Exam_GlobalInfo", parameters); var result = await dialog.Result; if (!result.Canceled) { } StateHasChanged(); } }