@page "/exam/create" @using AutoMapper @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 @if (_edit) { } else { 配置 ParseExam } 文本编辑器 载入 发布 指派 @if (_parsedExam.Errors.Any()) { foreach (var item in _parsedExam.Errors) { @item.Message } } @code { [CascadingParameter] private Task authenticationStateTask { get; set; } private AssignmentQuestionDto selectedAssignmentQuestion = new AssignmentQuestionDto(); private IReadOnlyCollection _selected; private bool _open = false; private bool _edit = false; private void ToggleDrawer() { _open = !_open; _edit = false; } private BlazoredTextEditor _textEditor = new BlazoredTextEditor(); private AssignmentEx _parsedExam = new AssignmentEx(); private AssignmentDto ExamContent = new AssignmentDto(); private ExamParserConfig _examParserConfig { get; set; } = new ExamParserConfig(); private string EditorText = ""; [Inject] public IMapper Mapper { get; set; } 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(AssignmentQuestionDto dto) { // _open = true; // _edit = true; // StateHasChanged(); 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(); } private async Task ParseExam() { var plainText = await _textEditor.GetText(); EditorText = plainText; if (!string.IsNullOrWhiteSpace(plainText)) { try { var exampar = new ExamParser(_examParserConfig); _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); } } @* *@ @* *@