diff --git a/docs/en/studio/release-notes.md b/docs/en/studio/release-notes.md index 13e206127e..6bcb82790f 100644 --- a/docs/en/studio/release-notes.md +++ b/docs/en/studio/release-notes.md @@ -9,7 +9,45 @@ This document contains **brief release notes** for each ABP Studio release. Release notes only include **major features** and **visible enhancements**. Therefore, they don't include all the development done in the related version. -## 2.1.4 (2025-12-30) Latest +## 2.2.1 (2026-02-20) Latest + +* Added `abp run` and `abp watch` commands to Studio CLI. +* Added "Start and wait for ready" option in Solution Runner. +* Added Angular support to standard solution and module templates, with Angular templates upgraded to v21. +* Updated ABP Framework to `10.1.0` and LeptonX to `5.0.3`. +* Fixed various Solution Runner issues, including tooltips, log rendering, and stability problems. + +## 2.1.9 (2026-01-30) + +* Fixed MCP server CLI output problem. + +## 2.1.8 (2026-01-29) + +* Added Studio MCP server support to allow AI monitoring of applications linked to ABP Studio. +* Added `Open with > Cursor` option. +* Improved task failure handling and related log visibility. +* Fixed various Solution Runner issues, including memory/crash and log scrolling problems. + +## 2.1.7 (2026-01-23) + +* Added management UI for custom solution commands. +* Showed logs of background jobs. +* Updated Aspire to version `13.1`. + +## 2.1.6 (2026-01-13) + +* Enhanced runnable task logs window. +* Fixed tooltip line-height problem. + +## 2.1.5 (2026-01-13) + +* Added `version` command to Studio CLI. +* Updated ABP Framework to `10.0.2` and LeptonX to `5.0.2`. +* Fixed microservice solution build errors for Blazor Server and Angular. +* Improved Solution Runner behavior to avoid re-running applications after build errors. +* Replaced "Clear Cookies" with "Clear site data" in the tools section. + +## 2.1.4 (2025-12-30) * Fixed books sample for blazor-webapp tiered solution. * Fixed K8s cluster deployment issues for microservices. diff --git a/docs/en/studio/version-mapping.md b/docs/en/studio/version-mapping.md index d3fe945967..5a70c5b916 100644 --- a/docs/en/studio/version-mapping.md +++ b/docs/en/studio/version-mapping.md @@ -11,6 +11,7 @@ This document provides a general overview of the relationship between various ve | **ABP Studio Version** | **ABP Version of Startup Template** | |------------------------|---------------------------| +| 2.2.1 | 10.1.0 | | 2.1.5 - 2.1.9 | 10.0.2 | | 2.1.0 - 2.1.4 | 10.0.1 | | 2.0.0 to 2.0.2 | 10.0.0 | diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryForm/JQueryFormScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryForm/JQueryFormScriptContributor.cs deleted file mode 100644 index cde8e83a59..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryForm/JQueryFormScriptContributor.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections.Generic; -using Volo.Abp.AspNetCore.Mvc.UI.Bundling; -using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery; -using Volo.Abp.Modularity; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.JQueryForm; - -[DependsOn(typeof(JQueryScriptContributor))] -public class JQueryFormScriptContributor : BundleContributor -{ - public override void ConfigureBundle(BundleConfigurationContext context) - { - context.Files.AddIfNotContains("/libs/jquery-form/jquery.form.min.js"); - } -} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs index 4bb1d80fef..728becdf6d 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs @@ -4,7 +4,6 @@ using Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDatepicker; using Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDaterangepicker; using Volo.Abp.AspNetCore.Mvc.UI.Packages.DatatablesNetBs5; using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery; -using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQueryForm; using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQueryValidationUnobtrusive; using Volo.Abp.AspNetCore.Mvc.UI.Packages.Lodash; using Volo.Abp.AspNetCore.Mvc.UI.Packages.Luxon; @@ -21,7 +20,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling; typeof(BootstrapScriptContributor), typeof(LodashScriptContributor), typeof(JQueryValidationUnobtrusiveScriptContributor), - typeof(JQueryFormScriptContributor), typeof(Select2ScriptContributor), typeof(DatatablesNetBs5ScriptContributor), typeof(Sweetalert2ScriptContributor), diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js index 7a2c08ca7e..3280408261 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js @@ -1,5 +1,5 @@ (function ($) { - if (!$ || !$.fn.ajaxForm) { + if (!$) { return; } @@ -87,11 +87,64 @@ userOptions.complete && userOptions.complete.apply(this, arguments); }; - return $form.ajaxForm(options); + $form.off("submit.abpAjaxForm").on("submit.abpAjaxForm", function (e) { + e.preventDefault(); + + var formEl = $form[0]; + + var formData = new FormData(formEl); + var arr = $form.serializeArray(); + + if (options.beforeSubmit && options.beforeSubmit.call(formEl, arr, $form) === false) { + return; + } + + var method = (options.method || $form.attr("method") || "POST").toUpperCase(); + var url = $form.attr("action") || window.location.href; + + var ajaxOptions = { + url: url, + type: method, + dataType: options.dataType, + timeout: options.timeout, + headers: { + "X-Requested-With": "XMLHttpRequest" + } + }; + + if (method === "GET") { + var query = $.param(arr); + if (query) { + url += (url.indexOf("?") >= 0 ? "&" : "?") + query; + } + ajaxOptions.url = url; + } else { + ajaxOptions.data = formData; + ajaxOptions.processData = false; + ajaxOptions.contentType = false; + } + + var jqXhrForComplete = null; + $.ajax(ajaxOptions) + .done(function (data, statusText, jqXhr) { + jqXhrForComplete = jqXhr; + options.success && options.success.call(formEl, data, statusText, jqXhr, $form); + }) + .fail(function (jqXhr, statusText, errorThrown) { + jqXhrForComplete = jqXhr; + options.error && options.error.call(formEl, jqXhr, statusText, errorThrown); + }) + .always(function (dataOrJqXhr, statusText, jqXhrOrError) { + var jqXhr = jqXhrForComplete || (dataOrJqXhr && dataOrJqXhr.status !== undefined ? dataOrJqXhr : jqXhrOrError); + options.complete && options.complete.call(formEl, jqXhr, statusText, $form); + }); + }); + + return $form; }; $.fn.abpAjaxForm.defaults = { method: 'POST' }; -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml index 4b3d2a67dc..a8f72584f0 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml @@ -3,11 +3,14 @@ @using Volo.Abp.Account.Localization @using Volo.Abp.Account.Web.Pages.Account @using Volo.Abp.AspNetCore.Mvc.UI.Theming +@using Volo.Abp.AspNetCore.Mvc.UI.Layout @inject IThemeManager ThemeManager +@inject IPageLayout PageLayout @inject IHtmlLocalizer L @model ManageModel @{ Layout = ThemeManager.CurrentTheme.GetApplicationLayout(); + PageLayout.Content.Title = L["MyAccount"].Value; } @section scripts { diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index a40c61cd90..0b7d31d8c1 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -16,7 +16,6 @@ "@abp/bootstrap-daterangepicker": "~10.1.0", "@abp/datatables.net-bs5": "~10.1.0", "@abp/font-awesome": "~10.1.0", - "@abp/jquery-form": "~10.1.0", "@abp/jquery-validation-unobtrusive": "~10.1.0", "@abp/lodash": "~10.1.0", "@abp/luxon": "~10.1.0", diff --git a/npm/packs/bootstrap-daterangepicker/package.json b/npm/packs/bootstrap-daterangepicker/package.json index 58ea46786c..65c6b65947 100644 --- a/npm/packs/bootstrap-daterangepicker/package.json +++ b/npm/packs/bootstrap-daterangepicker/package.json @@ -10,6 +10,7 @@ "access": "public" }, "dependencies": { + "@abp/moment": "~10.1.0-rc.2", "bootstrap-daterangepicker": "^3.1.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431",