Cyrus Zhou 11 месяцев назад
Родитель
Сommit
e3176306d8
26 измененных файлов с 2780 добавлено и 5 удалено
  1. 86 0
      Admin.NET/Admin.NET.Core/Entity/SysLang.cs
  2. 25 0
      Admin.NET/Admin.NET.Core/Enum/DirectionEnum.cs
  3. 51 0
      Admin.NET/Admin.NET.Core/Enum/WeekEnum.cs
  4. 114 0
      Admin.NET/Admin.NET.Core/SeedData/SysLangSeedData.cs
  5. 7 0
      Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs
  6. 109 0
      Admin.NET/Admin.NET.Core/Service/Lang/Dto/SysLangDto.cs
  7. 418 0
      Admin.NET/Admin.NET.Core/Service/Lang/Dto/SysLangInput.cs
  8. 118 0
      Admin.NET/Admin.NET.Core/Service/Lang/Dto/SysLangOutput.cs
  9. 111 0
      Admin.NET/Admin.NET.Core/Service/Lang/SysLangService.cs
  10. 1 0
      Web/src/api-services/api.ts
  11. 513 0
      Web/src/api-services/apis/sys-lang-api.ts
  12. 94 0
      Web/src/api-services/models/add-sys-lang-input.ts
  13. 57 0
      Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-lang-output.ts
  14. 57 0
      Web/src/api-services/models/admin-result-sys-lang.ts
  15. 26 0
      Web/src/api-services/models/delete-sys-lang-input.ts
  16. 23 0
      Web/src/api-services/models/direction-enum.ts
  17. 44 0
      Web/src/api-services/models/move-db-column-input.ts
  18. 106 0
      Web/src/api-services/models/page-sys-lang-input.ts
  19. 63 0
      Web/src/api-services/models/sql-sugar-paged-list-sys-lang-output.ts
  20. 136 0
      Web/src/api-services/models/sys-lang-output.ts
  21. 136 0
      Web/src/api-services/models/sys-lang.ts
  22. 100 0
      Web/src/api-services/models/update-sys-lang-input.ts
  23. 28 0
      Web/src/api-services/models/week-enum.ts
  24. 9 5
      Web/src/layout/navBars/topBar/user.vue
  25. 177 0
      Web/src/views/system/lang/component/editDialog.vue
  26. 171 0
      Web/src/views/system/lang/index.vue

+ 86 - 0
Admin.NET/Admin.NET.Core/Entity/SysLang.cs

@@ -0,0 +1,86 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Core;
+
+[SugarTable(null, "语言配置")]
+[SysTable]
+[SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
+[SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
+public class SysLang : EntityBase
+{
+    /// <summary>
+    /// 语言名称
+    /// </summary>
+    [SugarColumn( ColumnDescription = "语言名称")]
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 语言代码(如 zh_CN)
+    /// </summary>
+    [SugarColumn(ColumnDescription = "语言代码")]
+    public string Code { get; set; }
+
+    /// <summary>
+    /// ISO 语言代码
+    /// </summary>
+    [SugarColumn(ColumnDescription = "ISO 语言代码")]
+    public string IsoCode { get; set; }
+
+    /// <summary>
+    /// URL 语言代码
+    /// </summary>
+    [SugarColumn(ColumnDescription = "URL 语言代码")]
+    public string UrlCode { get; set; }
+
+    /// <summary>
+    /// 书写方向(1=从左到右,2=从右到左)
+    /// </summary>
+    [SugarColumn(ColumnDescription = "书写方向",DefaultValue ="1")]
+    public DirectionEnum Direction { get; set; }= DirectionEnum.Ltr;
+
+    /// <summary>
+    /// 日期格式(如 YYYY-MM-DD)
+    /// </summary>
+    [SugarColumn(ColumnDescription = "日期格式")]
+    public string DateFormat { get; set; }
+
+    /// <summary>
+    /// 时间格式(如 HH:MM:SS)
+    /// </summary>
+    [SugarColumn(ColumnDescription = "时间格式")]
+    public string TimeFormat { get; set; }
+
+    /// <summary>
+    /// 每周起始日(如 0=星期日,1=星期一)
+    /// </summary>
+    [SugarColumn(ColumnDescription = "每周起始日", DefaultValue ="7")]
+    public WeekEnum WeekStart { get; set; }= WeekEnum.Sunday;
+
+    /// <summary>
+    /// 分组符号(如 ,)
+    /// </summary>
+    [SugarColumn( ColumnDescription = "分组符号")]
+    public string Grouping { get; set; }
+
+    /// <summary>
+    /// 小数点符号
+    /// </summary>
+    [SugarColumn(ColumnDescription = "小数点符号")]
+    public string DecimalPoint { get; set; }
+
+    /// <summary>
+    /// 千分位分隔符
+    /// </summary>
+    [SugarColumn( ColumnDescription = "千分位分隔符")]
+    public string? ThousandsSep { get; set; }
+
+    /// <summary>
+    /// 是否启用
+    /// </summary>
+    [SugarColumn( ColumnDescription = "是否启用")]
+    public bool Active { get; set; }
+}

+ 25 - 0
Admin.NET/Admin.NET.Core/Enum/DirectionEnum.cs

@@ -0,0 +1,25 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 书写方向枚举
+/// </summary>
+[Description("书写方向枚举")]
+public enum DirectionEnum
+{
+    /// <summary>
+    /// 从左到右
+    /// </summary>
+    [Description("从左到右")]
+    Ltr=1,
+    /// <summary>
+    /// 从右到左
+    /// </summary>
+    [Description("从右到左")]
+    Rtl=2
+}

+ 51 - 0
Admin.NET/Admin.NET.Core/Enum/WeekEnum.cs

@@ -0,0 +1,51 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 周枚举
+/// </summary>
+[Description("周枚举")]
+public enum WeekEnum
+{
+    /// <summary>
+    /// 周一
+    /// </summary>
+    [Description("周一")]
+    Monday = 1,
+    /// <summary>
+    /// 周二
+    /// </summary>
+    [Description("周二")]
+    Tuesday = 2,
+    /// <summary>
+    /// 周三
+    /// </summary>
+    [Description("周三")]
+    Wednesday = 3,
+    /// <summary>
+    /// 周四
+    /// </summary>
+    [Description("周四")]
+    Thursday = 4,
+    /// <summary>
+    /// 周五
+    /// </summary>
+    [Description("周五")]
+    Friday = 5,
+    /// <summary>
+    /// 周六
+    /// </summary>
+    [Description("周六")]
+    Saturday = 6,
+    /// <summary>
+    /// 周日
+    /// </summary>
+    [Description("周日")]
+    Sunday = 7,
+
+}

+ 114 - 0
Admin.NET/Admin.NET.Core/SeedData/SysLangSeedData.cs

@@ -0,0 +1,114 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
+
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 系统字典类型表种子数据
+/// </summary>
+public class SysLangSeedData : ISqlSugarEntitySeedData<SysLang>
+{
+    /// <summary>
+    /// 种子数据
+    /// </summary>
+    /// <returns></returns>
+    public IEnumerable<SysLang> HasData()
+    {
+        return new[]
+        {
+            new SysLang{ Id=1300000000001,Name="Chinese (Simplified) / 简体中文", Code="zh_CN", IsoCode="zh_CN", UrlCode="zh-cn", Direction=DirectionEnum.Ltr, DateFormat="%Y年%m月%d日", TimeFormat="%H时%M分%S秒",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=true},
+            new SysLang{ Id=1300000000002,Name="Chinese (HK) / 繁體中文", Code="zh_HK", IsoCode="zh_HK", UrlCode="zh-hk", Direction=DirectionEnum.Ltr, DateFormat="%Y年%m月%d日 %A", TimeFormat="%I時%M分%S秒",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=true},
+            new SysLang{ Id=1300000000003,Name="Chinese (Traditional) / 繁體中文", Code="zh_TW", IsoCode="zh_TW", UrlCode="zh-tw", Direction=DirectionEnum.Ltr, DateFormat="%Y年%m月%d日", TimeFormat="%H時%M分%S秒",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=true},
+            new SysLang{ Id=1300000000004,Name="Italian / Italiano", Code="it_IT", IsoCode="it", UrlCode="it", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=true},
+            new SysLang{ Id=1300000000005,Name="English (US)", Code="en_US", IsoCode="en", UrlCode="en", Direction=DirectionEnum.Ltr, DateFormat="%m/%d/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000006,Name="Amharic / አምሃርኛ", Code="am_ET", IsoCode="am_ET", UrlCode="am-et", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%I:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000007,Name="Arabic / الْعَرَبيّة", Code="ar_001", IsoCode="ar", UrlCode="ar", Direction=DirectionEnum.Rtl, DateFormat="%d %b, %Y", TimeFormat="%I:%M:%S",WeekStart=WeekEnum.Saturday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000008,Name="Arabic (Syria) / الْعَرَبيّة", Code="ar_SY", IsoCode="ar_SY", UrlCode="ar-sy", Direction=DirectionEnum.Rtl, DateFormat="%d %b, %Y", TimeFormat="%I:%M:%S",WeekStart=WeekEnum.Saturday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000009,Name="Azerbaijani / Azərbaycanca", Code="az_AZ", IsoCode="az", UrlCode="az", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000010,Name="Basque / Euskara", Code="eu_ES", IsoCode="eu_ES", UrlCode="eu-es", Direction=DirectionEnum.Ltr, DateFormat="%a, %Y.eko %bren %da", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[]",DecimalPoint=",",ThousandsSep="null",Active=false},
+            new SysLang{ Id=1300000000011,Name="Bengali / বাংলা", Code="bn_IN", IsoCode="bn_IN", UrlCode="bn-in", Direction=DirectionEnum.Ltr, DateFormat="%A %d %b %Y", TimeFormat="%I:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[]",DecimalPoint=",",ThousandsSep="null",Active=false},
+            new SysLang{ Id=1300000000012,Name="Bosnian / bosanski jezik", Code="bs_BA", IsoCode="bs", UrlCode="bs", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000013,Name="Bulgarian / български език", Code="bg_BG", IsoCode="bg", UrlCode="bg", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H,%M,%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep="null",Active=false},
+            new SysLang{ Id=1300000000014,Name="Catalan / Català", Code="ca_ES", IsoCode="ca_ES", UrlCode="ca-es", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000015,Name="Croatian / hrvatski jezik", Code="hr_HR", IsoCode="hr", UrlCode="hr", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000016,Name="Czech / Čeština", Code="cs_CZ", IsoCode="cs_CZ", UrlCode="cs-cz", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000017,Name="Danish / Dansk", Code="da_DK", IsoCode="da_DK", UrlCode="da-dk", Direction=DirectionEnum.Ltr, DateFormat="%d-%m-%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000018,Name="Dutch (BE) / Nederlands (BE)", Code="nl_BE", IsoCode="nl_BE", UrlCode="nl-be", Direction=DirectionEnum.Ltr, DateFormat="%d-%m-%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000019,Name="Dutch / Nederlands", Code="nl_NL", IsoCode="nl", UrlCode="nl", Direction=DirectionEnum.Ltr, DateFormat="%d-%m-%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000020,Name="English (AU)", Code="en_AU", IsoCode="en_AU", UrlCode="en-au", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000021,Name="English (CA)", Code="en_CA", IsoCode="en_CA", UrlCode="en-ca", Direction=DirectionEnum.Ltr, DateFormat="%Y-%m-%d", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000022,Name="English (UK)", Code="en_GB", IsoCode="en_GB", UrlCode="en-gb", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000023,Name="English (IN)", Code="en_IN", IsoCode="en_IN", UrlCode="en-in", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,2,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000024,Name="Estonian / Eesti keel", Code="et_EE", IsoCode="et", UrlCode="et", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000025,Name="Finnish / Suomi", Code="fi_FI", IsoCode="fi", UrlCode="fi", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H.%M.%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000026,Name="French (BE) / Français (BE)", Code="fr_BE", IsoCode="fr_BE", UrlCode="fr-be", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000027,Name="French (CA) / Français (CA)", Code="fr_CA", IsoCode="fr_CA", UrlCode="fr-ca", Direction=DirectionEnum.Ltr, DateFormat="%Y-%m-%d", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000028,Name="French (CH) / Français (CH)", Code="fr_CH", IsoCode="fr_CH", UrlCode="fr-ch", Direction=DirectionEnum.Ltr, DateFormat="%d. %m. %Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep="'",Active=false},
+            new SysLang{ Id=1300000000029,Name="French / Français", Code="fr_FR", IsoCode="fr", UrlCode="fr", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000030,Name="Galician / Galego", Code="gl_ES", IsoCode="gl", UrlCode="gl", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[]",DecimalPoint=",",ThousandsSep="null",Active=false},
+            new SysLang{ Id=1300000000031,Name="Georgian / ქართული ენა", Code="ka_GE", IsoCode="ka", UrlCode="ka", Direction=DirectionEnum.Ltr, DateFormat="%m/%d/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000032,Name="German / Deutsch", Code="de_DE", IsoCode="de", UrlCode="de", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000033,Name="German (CH) / Deutsch (CH)", Code="de_CH", IsoCode="de_CH", UrlCode="de-ch", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,3]",DecimalPoint=".",ThousandsSep="'",Active=false},
+            new SysLang{ Id=1300000000034,Name="Greek / Ελληνικά", Code="el_GR", IsoCode="el_GR", UrlCode="el-gr", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%I:%M:%S %p",WeekStart=WeekEnum.Monday,Grouping="[]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000035,Name="Gujarati / ગુજરાતી", Code="gu_IN", IsoCode="gu", UrlCode="gu", Direction=DirectionEnum.Ltr, DateFormat="%A %d %b %Y", TimeFormat="%I:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000036,Name="Hebrew / עִבְרִי", Code="he_IL", IsoCode="he", UrlCode="he", Direction=DirectionEnum.Rtl, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000037,Name="Hindi / हिंदी", Code="hi_IN", IsoCode="hi", UrlCode="hi", Direction=DirectionEnum.Ltr, DateFormat="%A %d %b %Y", TimeFormat="%I:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000038,Name="Hungarian / Magyar", Code="hu_HU", IsoCode="hu", UrlCode="hu", Direction=DirectionEnum.Ltr, DateFormat="%Y-%m-%d", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000039,Name="Indonesian / Bahasa Indonesia", Code="id_ID", IsoCode="id", UrlCode="id", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000040,Name="Japanese / 日本語", Code="ja_JP", IsoCode="ja", UrlCode="ja", Direction=DirectionEnum.Ltr, DateFormat="%Y年%m月%d日", TimeFormat="%H時%M分%S秒",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000041,Name="Kabyle / Taqbaylit", Code="kab_DZ", IsoCode="kab", UrlCode="kab", Direction=DirectionEnum.Ltr, DateFormat="%m/%d/%Y", TimeFormat="%I:%M:%S %p",WeekStart=WeekEnum.Saturday,Grouping="[]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000042,Name="Khmer / ភាសាខ្មែរ", Code="km_KH", IsoCode="km", UrlCode="km", Direction=DirectionEnum.Ltr, DateFormat="%d %B %Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000043,Name="Korean (KP) / 한국어 (KP)", Code="ko_KP", IsoCode="ko_KP", UrlCode="ko-kp", Direction=DirectionEnum.Ltr, DateFormat="%m/%d/%Y", TimeFormat="%I:%M:%S %p",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000044,Name="Korean (KR) / 한국어 (KR)", Code="ko_KR", IsoCode="ko_KR", UrlCode="ko-kr", Direction=DirectionEnum.Ltr, DateFormat="%Y년 %m월 %d일", TimeFormat="%H시 %M분 %S초",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000045,Name="Lao / ພາສາລາວ", Code="lo_LA", IsoCode="lo", UrlCode="lo", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000046,Name="Latvian / latviešu valoda", Code="lv_LV", IsoCode="lv", UrlCode="lv", Direction=DirectionEnum.Ltr, DateFormat="%Y.%m.%d.", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000047,Name="Lithuanian / Lietuvių kalba", Code="lt_LT", IsoCode="lt", UrlCode="lt", Direction=DirectionEnum.Ltr, DateFormat="%Y-%m-%d", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000048,Name="Luxembourgish", Code="lb_LU", IsoCode="lb", UrlCode="lb", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000049,Name="Macedonian / македонски јазик", Code="mk_MK", IsoCode="mk", UrlCode="mk", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000050,Name="Malayalam / മലയാളം", Code="ml_IN", IsoCode="ml", UrlCode="ml", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000051,Name="Mongolian / монгол", Code="mn_MN", IsoCode="mn", UrlCode="mn", Direction=DirectionEnum.Ltr, DateFormat="%Y-%m-%d", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep="'",Active=false},
+            new SysLang{ Id=1300000000052,Name="Malay / Bahasa Melayu", Code="ms_MY", IsoCode="ms", UrlCode="ms", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000053,Name="Norwegian Bokmål / Norsk bokmål", Code="nb_NO", IsoCode="nb_NO", UrlCode="nb-no", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000054,Name="Persian / فارسی", Code="fa_IR", IsoCode="fa", UrlCode="fa", Direction=DirectionEnum.Rtl, DateFormat="%Y/%m/%d", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Saturday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000055,Name="Polish / Język polski", Code="pl_PL", IsoCode="pl", UrlCode="pl", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[]",DecimalPoint=",",ThousandsSep="null",Active=false},
+            new SysLang{ Id=1300000000056,Name="Portuguese (AO) / Português (AO)", Code="pt_AO", IsoCode="pt_AO", UrlCode="pt-ao", Direction=DirectionEnum.Ltr, DateFormat="%d-%m-%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[]",DecimalPoint=",",ThousandsSep="null",Active=false},
+            new SysLang{ Id=1300000000057,Name="Portuguese (BR) / Português (BR)", Code="pt_BR", IsoCode="pt_BR", UrlCode="pt-br", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000058,Name="Portuguese / Português", Code="pt_PT", IsoCode="pt", UrlCode="pt", Direction=DirectionEnum.Ltr, DateFormat="%d-%m-%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[]",DecimalPoint=",",ThousandsSep="null",Active=false},
+            new SysLang{ Id=1300000000059,Name="Romanian / română", Code="ro_RO", IsoCode="ro", UrlCode="ro", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000060,Name="Russian / русский язык", Code="ru_RU", IsoCode="ru", UrlCode="ru", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000061,Name="Serbian (Cyrillic) / српски", Code="sr_RS", IsoCode="sr_RS", UrlCode="sr-rs", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y.", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[]",DecimalPoint=",",ThousandsSep="null",Active=false},
+            new SysLang{ Id=1300000000062,Name="Serbian (Latin) / srpski", Code="sr@latin", IsoCode="sr@latin", UrlCode="sr@latin", Direction=DirectionEnum.Ltr, DateFormat="%m/%d/%Y", TimeFormat="%I:%M:%S %p",WeekStart=WeekEnum.Sunday,Grouping="[]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000063,Name="Slovak / Slovenský jazyk", Code="sk_SK", IsoCode="sk", UrlCode="sk", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000064,Name="Slovenian / slovenščina", Code="sl_SI", IsoCode="sl", UrlCode="sl", Direction=DirectionEnum.Ltr, DateFormat="%d. %m. %Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000065,Name="Spanish (AR) / Español (AR)", Code="es_AR", IsoCode="es_AR", UrlCode="es-ar", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000066,Name="Spanish (BO) / Español (BO)", Code="es_BO", IsoCode="es_BO", UrlCode="es-bo", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000067,Name="Spanish (CL) / Español (CL)", Code="es_CL", IsoCode="es_CL", UrlCode="es-cl", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000068,Name="Spanish (CO) / Español (CO)", Code="es_CO", IsoCode="es_CO", UrlCode="es-co", Direction=DirectionEnum.Ltr, DateFormat="%d-%m-%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000069,Name="Spanish (CR) / Español (CR)", Code="es_CR", IsoCode="es_CR", UrlCode="es-cr", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000070,Name="Spanish (DO) / Español (DO)", Code="es_DO", IsoCode="es_DO", UrlCode="es-do", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%I:%M:%S %p",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000071,Name="Spanish (EC) / Español (EC)", Code="es_EC", IsoCode="es_EC", UrlCode="es-ec", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000072,Name="Spanish (GT) / Español (GT)", Code="es_GT", IsoCode="es_GT", UrlCode="es-gt", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000073,Name="Spanish (MX) / Español (MX)", Code="es_MX", IsoCode="es_MX", UrlCode="es-mx", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000074,Name="Spanish (PA) / Español (PA)", Code="es_PA", IsoCode="es_PA", UrlCode="es-pa", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000075,Name="Spanish (PE) / Español (PE)", Code="es_PE", IsoCode="es_PE", UrlCode="es-pe", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000076,Name="Spanish (PY) / Español (PY)", Code="es_PY", IsoCode="es_PY", UrlCode="es-py", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000077,Name="Spanish (UY) / Español (UY)", Code="es_UY", IsoCode="es_UY", UrlCode="es-uy", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000078,Name="Spanish (VE) / Español (VE)", Code="es_VE", IsoCode="es_VE", UrlCode="es-ve", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000079,Name="Spanish / Español", Code="es_ES", IsoCode="es", UrlCode="es", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000080,Name="Swedish / Svenska", Code="sv_SE", IsoCode="sv", UrlCode="sv", Direction=DirectionEnum.Ltr, DateFormat="%Y-%m-%d", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000081,Name="Thai / ภาษาไทย", Code="th_TH", IsoCode="th", UrlCode="th", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Sunday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000082,Name="Tagalog / Filipino", Code="tl_PH", IsoCode="tl", UrlCode="tl", Direction=DirectionEnum.Ltr, DateFormat="%m/%d/%y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000083,Name="Turkish / Türkçe", Code="tr_TR", IsoCode="tr", UrlCode="tr", Direction=DirectionEnum.Ltr, DateFormat="%d-%m-%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000084,Name="Ukrainian / українська", Code="uk_UA", IsoCode="uk", UrlCode="uk", Direction=DirectionEnum.Ltr, DateFormat="%d.%m.%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=" ",Active=false},
+            new SysLang{ Id=1300000000085,Name="Vietnamese / Tiếng Việt", Code="vi_VN", IsoCode="vi", UrlCode="vi", Direction=DirectionEnum.Ltr, DateFormat="%d/%m/%Y", TimeFormat="%H:%M:%S",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000086,Name="Albanian / Shqip", Code="sq_AL", IsoCode="sq", UrlCode="sq", Direction=DirectionEnum.Ltr, DateFormat="%Y-%b-%d", TimeFormat="%I.%M.%S.",WeekStart=WeekEnum.Monday,Grouping="[3,0]",DecimalPoint=",",ThousandsSep=".",Active=false},
+            new SysLang{ Id=1300000000087,Name="Telugu / తెలుగు", Code="te_IN", IsoCode="te", UrlCode="te", Direction=DirectionEnum.Ltr, DateFormat="%B %d %A %Y", TimeFormat="%p%I.%M.%S",WeekStart=WeekEnum.Sunday,Grouping="[]",DecimalPoint=".",ThousandsSep=",",Active=false},
+            new SysLang{ Id=1300000000088,Name="Burmese / ဗမာစာ", Code="my_MM", IsoCode="my", UrlCode="mya", Direction=DirectionEnum.Ltr, DateFormat="%Y %b %d %A", TimeFormat="%I:%M:%S %p",WeekStart=WeekEnum.Sunday,Grouping="[3,3]",DecimalPoint=".",ThousandsSep=",",Active=false},
+        };
+    }
+}

+ 7 - 0
Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs

@@ -172,6 +172,13 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             new SysMenu{ Id=1300200090301, Pid=1300200090101, Title="编辑", Permission="sysTenantConfig:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1300200090401, Pid=1300200090101, Title="增加", Permission="sysTenantConfig:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1300200090501, Pid=1300200090101, Title="删除", Permission="sysTenantConfig:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            
+            // 语言管理
+            new SysMenu{ Id=1300200100101, Pid=1300200000101, Title="语言管理", Path="/system/lang", Name="sysLang", Component="/system/lang/index", Icon="iconfont icon-zhongyingwen", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2025-06-28 00:00:00"), OrderNo=190 },
+            new SysMenu{ Id=1300200100201, Pid=1300200100101, Title="查询", Permission="sysLang:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1300200100301, Pid=1300200100101, Title="编辑", Permission="sysLang:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1300200100401, Pid=1300200100101, Title="增加", Permission="sysLang:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1300200100501, Pid=1300200100101, Title="删除", Permission="sysLang:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
             // 系统监控
             new SysMenu{ Id=1300300070101, Pid=1300300000101, Title="系统监控", Path="/platform/server", Name="sysServer", Component="/system/server/index", Icon="ele-Monitor", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=150 },

+ 109 - 0
Admin.NET/Admin.NET.Core/Service/Lang/Dto/SysLangDto.cs

@@ -0,0 +1,109 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 语言输出参数
+/// </summary>
+public class SysLangDto
+{
+    /// <summary>
+    /// 主键Id
+    /// </summary>
+    public long Id { get; set; }
+    
+    /// <summary>
+    /// 语言名称
+    /// </summary>
+    public string Name { get; set; }
+    
+    /// <summary>
+    /// 语言代码
+    /// </summary>
+    public string Code { get; set; }
+    
+    /// <summary>
+    /// ISO 语言代码
+    /// </summary>
+    public string IsoCode { get; set; }
+    
+    /// <summary>
+    /// URL 语言代码
+    /// </summary>
+    public string UrlCode { get; set; }
+    
+    /// <summary>
+    /// 书写方向
+    /// </summary>
+    public DirectionEnum Direction { get; set; }
+    
+    /// <summary>
+    /// 日期格式
+    /// </summary>
+    public string DateFormat { get; set; }
+    
+    /// <summary>
+    /// 时间格式
+    /// </summary>
+    public string TimeFormat { get; set; }
+    
+    /// <summary>
+    /// 每周起始日
+    /// </summary>
+    public WeekEnum WeekStart { get; set; }
+    
+    /// <summary>
+    /// 分组符号
+    /// </summary>
+    public string Grouping { get; set; }
+    
+    /// <summary>
+    /// 小数点符号
+    /// </summary>
+    public string DecimalPoint { get; set; }
+    
+    /// <summary>
+    /// 千分位分隔符
+    /// </summary>
+    public string? ThousandsSep { get; set; }
+    
+    /// <summary>
+    /// 是否启用
+    /// </summary>
+    public bool Active { get; set; }
+    
+    /// <summary>
+    /// 创建时间
+    /// </summary>
+    public DateTime? CreateTime { get; set; }
+    
+    /// <summary>
+    /// 更新时间
+    /// </summary>
+    public DateTime? UpdateTime { get; set; }
+    
+    /// <summary>
+    /// 创建者Id
+    /// </summary>
+    public long? CreateUserId { get; set; }
+    
+    /// <summary>
+    /// 创建者姓名
+    /// </summary>
+    public string? CreateUserName { get; set; }
+    
+    /// <summary>
+    /// 修改者Id
+    /// </summary>
+    public long? UpdateUserId { get; set; }
+    
+    /// <summary>
+    /// 修改者姓名
+    /// </summary>
+    public string? UpdateUserName { get; set; }
+    
+}

+ 418 - 0
Admin.NET/Admin.NET.Core/Service/Lang/Dto/SysLangInput.cs

@@ -0,0 +1,418 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 语言基础输入参数
+/// </summary>
+public class SysLangBaseInput
+{
+    /// <summary>
+    /// 主键Id
+    /// </summary>
+    public virtual long? Id { get; set; }
+    
+    /// <summary>
+    /// 语言名称
+    /// </summary>
+    [Required(ErrorMessage = "语言名称不能为空")]
+    public virtual string Name { get; set; }
+    
+    /// <summary>
+    /// 语言代码
+    /// </summary>
+    [Required(ErrorMessage = "语言代码不能为空")]
+    public virtual string Code { get; set; }
+    
+    /// <summary>
+    /// ISO 语言代码
+    /// </summary>
+    [Required(ErrorMessage = "ISO 语言代码不能为空")]
+    public virtual string IsoCode { get; set; }
+    
+    /// <summary>
+    /// URL 语言代码
+    /// </summary>
+    [Required(ErrorMessage = "URL 语言代码不能为空")]
+    public virtual string UrlCode { get; set; }
+    
+    /// <summary>
+    /// 书写方向
+    /// </summary>
+    [Required(ErrorMessage = "书写方向不能为空")]
+    public virtual DirectionEnum Direction { get; set; }
+    
+    /// <summary>
+    /// 日期格式
+    /// </summary>
+    [Required(ErrorMessage = "日期格式不能为空")]
+    public virtual string DateFormat { get; set; }
+    
+    /// <summary>
+    /// 时间格式
+    /// </summary>
+    [Required(ErrorMessage = "时间格式不能为空")]
+    public virtual string TimeFormat { get; set; }
+    
+    /// <summary>
+    /// 每周起始日
+    /// </summary>
+    [Required(ErrorMessage = "每周起始日不能为空")]
+    public virtual WeekEnum? WeekStart { get; set; }
+    
+    /// <summary>
+    /// 分组符号
+    /// </summary>
+    [Required(ErrorMessage = "分组符号不能为空")]
+    public virtual string Grouping { get; set; }
+    
+    /// <summary>
+    /// 小数点符号
+    /// </summary>
+    [Required(ErrorMessage = "小数点符号不能为空")]
+    public virtual string DecimalPoint { get; set; }
+    
+    /// <summary>
+    /// 千分位分隔符
+    /// </summary>
+    public virtual string? ThousandsSep { get; set; }
+    
+    /// <summary>
+    /// 是否启用
+    /// </summary>
+    [Required(ErrorMessage = "是否启用不能为空")]
+    public virtual bool? Active { get; set; }
+    
+}
+
+/// <summary>
+/// 多语言分页查询输入参数
+/// </summary>
+public class PageSysLangInput : BasePageInput
+{
+    /// <summary>
+    /// 语言名称
+    /// </summary>
+    public string Name { get; set; }
+    
+    /// <summary>
+    /// 语言代码
+    /// </summary>
+    public string Code { get; set; }
+    
+    /// <summary>
+    /// ISO 语言代码
+    /// </summary>
+    public string IsoCode { get; set; }
+    
+    /// <summary>
+    /// URL 语言代码
+    /// </summary>
+    public string UrlCode { get; set; }
+    
+    /// <summary>
+    /// 是否启用
+    /// </summary>
+    public bool? Active { get; set; }
+    
+    /// <summary>
+    /// 选中主键列表
+    /// </summary>
+     public List<long> SelectKeyList { get; set; }
+}
+
+/// <summary>
+/// 多语言增加输入参数
+/// </summary>
+public class AddSysLangInput
+{
+    /// <summary>
+    /// 语言名称
+    /// </summary>
+    [Required(ErrorMessage = "语言名称不能为空")]
+    [MaxLength(255, ErrorMessage = "语言名称字符长度不能超过255")]
+    public string Name { get; set; }
+    
+    /// <summary>
+    /// 语言代码
+    /// </summary>
+    [Required(ErrorMessage = "语言代码不能为空")]
+    [MaxLength(255, ErrorMessage = "语言代码字符长度不能超过255")]
+    public string Code { get; set; }
+    
+    /// <summary>
+    /// ISO 语言代码
+    /// </summary>
+    [Required(ErrorMessage = "ISO 语言代码不能为空")]
+    [MaxLength(255, ErrorMessage = "ISO 语言代码字符长度不能超过255")]
+    public string IsoCode { get; set; }
+    
+    /// <summary>
+    /// URL 语言代码
+    /// </summary>
+    [Required(ErrorMessage = "URL 语言代码不能为空")]
+    [MaxLength(255, ErrorMessage = "URL 语言代码字符长度不能超过255")]
+    public string UrlCode { get; set; }
+    
+    /// <summary>
+    /// 书写方向
+    /// </summary>
+    [Required(ErrorMessage = "书写方向不能为空")]
+    public DirectionEnum Direction { get; set; }
+    
+    /// <summary>
+    /// 日期格式
+    /// </summary>
+    [Required(ErrorMessage = "日期格式不能为空")]
+    [MaxLength(255, ErrorMessage = "日期格式字符长度不能超过255")]
+    public string DateFormat { get; set; }
+    
+    /// <summary>
+    /// 时间格式
+    /// </summary>
+    [Required(ErrorMessage = "时间格式不能为空")]
+    [MaxLength(255, ErrorMessage = "时间格式字符长度不能超过255")]
+    public string TimeFormat { get; set; }
+    
+    /// <summary>
+    /// 每周起始日
+    /// </summary>
+    [Required(ErrorMessage = "每周起始日不能为空")]
+    public WeekEnum? WeekStart { get; set; }
+    
+    /// <summary>
+    /// 分组符号
+    /// </summary>
+    [Required(ErrorMessage = "分组符号不能为空")]
+    [MaxLength(255, ErrorMessage = "分组符号字符长度不能超过255")]
+    public string Grouping { get; set; }
+    
+    /// <summary>
+    /// 小数点符号
+    /// </summary>
+    [Required(ErrorMessage = "小数点符号不能为空")]
+    [MaxLength(255, ErrorMessage = "小数点符号字符长度不能超过255")]
+    public string DecimalPoint { get; set; }
+    
+    /// <summary>
+    /// 千分位分隔符
+    /// </summary>
+    [MaxLength(255, ErrorMessage = "千分位分隔符字符长度不能超过255")]
+    public string? ThousandsSep { get; set; }
+    
+    /// <summary>
+    /// 是否启用
+    /// </summary>
+    [Required(ErrorMessage = "是否启用不能为空")]
+    public bool? Active { get; set; }
+    
+}
+
+/// <summary>
+/// 多语言删除输入参数
+/// </summary>
+public class DeleteSysLangInput
+{
+    /// <summary>
+    /// 主键Id
+    /// </summary>
+    [Required(ErrorMessage = "主键Id不能为空")]
+    public long? Id { get; set; }
+    
+}
+
+/// <summary>
+/// 多语言更新输入参数
+/// </summary>
+public class UpdateSysLangInput
+{
+    /// <summary>
+    /// 主键Id
+    /// </summary>    
+    [Required(ErrorMessage = "主键Id不能为空")]
+    public long? Id { get; set; }
+    
+    /// <summary>
+    /// 语言名称
+    /// </summary>    
+    [Required(ErrorMessage = "语言名称不能为空")]
+    [MaxLength(255, ErrorMessage = "语言名称字符长度不能超过255")]
+    public string Name { get; set; }
+    
+    /// <summary>
+    /// 语言代码
+    /// </summary>    
+    [Required(ErrorMessage = "语言代码不能为空")]
+    [MaxLength(255, ErrorMessage = "语言代码字符长度不能超过255")]
+    public string Code { get; set; }
+    
+    /// <summary>
+    /// ISO 语言代码
+    /// </summary>    
+    [Required(ErrorMessage = "ISO 语言代码不能为空")]
+    [MaxLength(255, ErrorMessage = "ISO 语言代码字符长度不能超过255")]
+    public string IsoCode { get; set; }
+    
+    /// <summary>
+    /// URL 语言代码
+    /// </summary>    
+    [Required(ErrorMessage = "URL 语言代码不能为空")]
+    [MaxLength(255, ErrorMessage = "URL 语言代码字符长度不能超过255")]
+    public string UrlCode { get; set; }
+    
+    /// <summary>
+    /// 书写方向
+    /// </summary>    
+    [Required(ErrorMessage = "书写方向不能为空")]
+    public DirectionEnum Direction { get; set; }
+    
+    /// <summary>
+    /// 日期格式
+    /// </summary>    
+    [Required(ErrorMessage = "日期格式不能为空")]
+    [MaxLength(255, ErrorMessage = "日期格式字符长度不能超过255")]
+    public string DateFormat { get; set; }
+    
+    /// <summary>
+    /// 时间格式
+    /// </summary>    
+    [Required(ErrorMessage = "时间格式不能为空")]
+    [MaxLength(255, ErrorMessage = "时间格式字符长度不能超过255")]
+    public string TimeFormat { get; set; }
+    
+    /// <summary>
+    /// 每周起始日
+    /// </summary>    
+    [Required(ErrorMessage = "每周起始日不能为空")]
+    public WeekEnum? WeekStart { get; set; }
+    
+    /// <summary>
+    /// 分组符号
+    /// </summary>    
+    [Required(ErrorMessage = "分组符号不能为空")]
+    [MaxLength(255, ErrorMessage = "分组符号字符长度不能超过255")]
+    public string Grouping { get; set; }
+    
+    /// <summary>
+    /// 小数点符号
+    /// </summary>    
+    [Required(ErrorMessage = "小数点符号不能为空")]
+    [MaxLength(255, ErrorMessage = "小数点符号字符长度不能超过255")]
+    public string DecimalPoint { get; set; }
+    
+    /// <summary>
+    /// 千分位分隔符
+    /// </summary>    
+    [MaxLength(255, ErrorMessage = "千分位分隔符字符长度不能超过255")]
+    public string? ThousandsSep { get; set; }
+    
+    /// <summary>
+    /// 是否启用
+    /// </summary>    
+    [Required(ErrorMessage = "是否启用不能为空")]
+    public bool? Active { get; set; }
+    
+}
+
+/// <summary>
+/// 多语言主键查询输入参数
+/// </summary>
+public class QueryByIdSysLangInput : DeleteSysLangInput
+{
+}
+
+/// <summary>
+/// 多语言数据导入实体
+/// </summary>
+[ExcelImporter(SheetIndex = 1, IsOnlyErrorRows = true)]
+public class ImportSysLangInput : BaseImportInput
+{
+    /// <summary>
+    /// 语言名称
+    /// </summary>
+    [ImporterHeader(Name = "*语言名称")]
+    [ExporterHeader("*语言名称", Format = "", Width = 25, IsBold = true)]
+    public string Name { get; set; }
+    
+    /// <summary>
+    /// 语言代码
+    /// </summary>
+    [ImporterHeader(Name = "*语言代码")]
+    [ExporterHeader("*语言代码", Format = "", Width = 25, IsBold = true)]
+    public string Code { get; set; }
+    
+    /// <summary>
+    /// ISO 语言代码
+    /// </summary>
+    [ImporterHeader(Name = "*ISO 语言代码")]
+    [ExporterHeader("*ISO 语言代码", Format = "", Width = 25, IsBold = true)]
+    public string IsoCode { get; set; }
+    
+    /// <summary>
+    /// URL 语言代码
+    /// </summary>
+    [ImporterHeader(Name = "*URL 语言代码")]
+    [ExporterHeader("*URL 语言代码", Format = "", Width = 25, IsBold = true)]
+    public string UrlCode { get; set; }
+    
+    /// <summary>
+    /// 书写方向
+    /// </summary>
+    [ImporterHeader(Name = "*书写方向")]
+    [ExporterHeader("*书写方向", Format = "", Width = 25, IsBold = true)]
+    public DirectionEnum Direction { get; set; }
+    
+    /// <summary>
+    /// 日期格式
+    /// </summary>
+    [ImporterHeader(Name = "*日期格式")]
+    [ExporterHeader("*日期格式", Format = "", Width = 25, IsBold = true)]
+    public string DateFormat { get; set; }
+    
+    /// <summary>
+    /// 时间格式
+    /// </summary>
+    [ImporterHeader(Name = "*时间格式")]
+    [ExporterHeader("*时间格式", Format = "", Width = 25, IsBold = true)]
+    public string TimeFormat { get; set; }
+    
+    /// <summary>
+    /// 每周起始日
+    /// </summary>
+    [ImporterHeader(Name = "*每周起始日")]
+    [ExporterHeader("*每周起始日", Format = "", Width = 25, IsBold = true)]
+    public WeekEnum? WeekStart { get; set; }
+    
+    /// <summary>
+    /// 分组符号
+    /// </summary>
+    [ImporterHeader(Name = "*分组符号")]
+    [ExporterHeader("*分组符号", Format = "", Width = 25, IsBold = true)]
+    public string Grouping { get; set; }
+    
+    /// <summary>
+    /// 小数点符号
+    /// </summary>
+    [ImporterHeader(Name = "*小数点符号")]
+    [ExporterHeader("*小数点符号", Format = "", Width = 25, IsBold = true)]
+    public string DecimalPoint { get; set; }
+    
+    /// <summary>
+    /// 千分位分隔符
+    /// </summary>
+    [ImporterHeader(Name = "千分位分隔符")]
+    [ExporterHeader("千分位分隔符", Format = "", Width = 25, IsBold = true)]
+    public string? ThousandsSep { get; set; }
+    
+    /// <summary>
+    /// 是否启用
+    /// </summary>
+    [ImporterHeader(Name = "*是否启用")]
+    [ExporterHeader("*是否启用", Format = "", Width = 25, IsBold = true)]
+    public bool? Active { get; set; }
+    
+}

+ 118 - 0
Admin.NET/Admin.NET.Core/Service/Lang/Dto/SysLangOutput.cs

@@ -0,0 +1,118 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 语言输出参数
+/// </summary>
+public class SysLangOutput
+{
+    /// <summary>
+    /// 主键Id
+    /// </summary>
+    public long Id { get; set; }    
+    
+    /// <summary>
+    /// 语言名称
+    /// </summary>
+    public string Name { get; set; }    
+    
+    /// <summary>
+    /// 语言代码
+    /// </summary>
+    public string Code { get; set; }    
+    
+    /// <summary>
+    /// ISO 语言代码
+    /// </summary>
+    public string IsoCode { get; set; }    
+    
+    /// <summary>
+    /// URL 语言代码
+    /// </summary>
+    public string UrlCode { get; set; }    
+    
+    /// <summary>
+    /// 书写方向
+    /// </summary>
+    public DirectionEnum Direction { get; set; }    
+    
+    /// <summary>
+    /// 日期格式
+    /// </summary>
+    public string DateFormat { get; set; }    
+    
+    /// <summary>
+    /// 时间格式
+    /// </summary>
+    public string TimeFormat { get; set; }
+
+    /// <summary>
+    /// 每周起始日
+    /// </summary>
+    public WeekEnum WeekStart { get; set; }
+
+    /// <summary>
+    /// 分组符号
+    /// </summary>
+    public string Grouping { get; set; }    
+    
+    /// <summary>
+    /// 小数点符号
+    /// </summary>
+    public string DecimalPoint { get; set; }    
+    
+    /// <summary>
+    /// 千分位分隔符
+    /// </summary>
+    public string? ThousandsSep { get; set; }    
+    
+    /// <summary>
+    /// 是否启用
+    /// </summary>
+    public bool Active { get; set; }    
+    
+    /// <summary>
+    /// 创建时间
+    /// </summary>
+    public DateTime? CreateTime { get; set; }    
+    
+    /// <summary>
+    /// 更新时间
+    /// </summary>
+    public DateTime? UpdateTime { get; set; }    
+    
+    /// <summary>
+    /// 创建者Id
+    /// </summary>
+    public long? CreateUserId { get; set; }    
+    
+    /// <summary>
+    /// 创建者姓名
+    /// </summary>
+    public string? CreateUserName { get; set; }    
+    
+    /// <summary>
+    /// 修改者Id
+    /// </summary>
+    public long? UpdateUserId { get; set; }    
+    
+    /// <summary>
+    /// 修改者姓名
+    /// </summary>
+    public string? UpdateUserName { get; set; }    
+    
+}
+
+/// <summary>
+/// 多语言数据导入模板实体
+/// </summary>
+public class ExportSysLangOutput : ImportSysLangInput
+{
+    [ImporterHeader(IsIgnore = true)]
+    [ExporterHeader(IsIgnore = true)]
+    public override string Error { get; set; }
+}

+ 111 - 0
Admin.NET/Admin.NET.Core/Service/Lang/SysLangService.cs

@@ -0,0 +1,111 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 语言服务 🧩
+/// </summary>
+[ApiDescriptionSettings(Order = 100, Description = "语言服务")]
+public partial class SysLangService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<SysLang> _sysLangRep;
+
+    public SysLangService(SqlSugarRepository<SysLang> sysLangRep)
+    {
+        _sysLangRep = sysLangRep;
+    }
+
+    /// <summary>
+    /// 分页查询语言 🔖
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("分页查询语言")]
+    [ApiDescriptionSettings(Name = "Page"), HttpPost]
+    public async Task<SqlSugarPagedList<SysLangOutput>> Page(PageSysLangInput input)
+    {
+        input.Keyword = input.Keyword?.Trim();
+        var query = _sysLangRep.AsQueryable()
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Name.Contains(input.Keyword) || u.Code.Contains(input.Keyword) || u.IsoCode.Contains(input.Keyword) || u.UrlCode.Contains(input.Keyword))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Code), u => u.Code.Contains(input.Code.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.IsoCode), u => u.IsoCode.Contains(input.IsoCode.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.UrlCode), u => u.UrlCode.Contains(input.UrlCode.Trim()))
+            .Select<SysLangOutput>();
+        return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 获取语言详情 ℹ️
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("获取语言详情")]
+    [ApiDescriptionSettings(Name = "Detail"), HttpGet]
+    public async Task<SysLang> Detail([FromQuery] QueryByIdSysLangInput input)
+    {
+        return await _sysLangRep.GetFirstAsync(u => u.Id == input.Id);
+    }
+
+    /// <summary>
+    /// 增加语言 ➕
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("增加语言")]
+    [ApiDescriptionSettings(Name = "Add"), HttpPost]
+    public async Task<long> Add(AddSysLangInput input)
+    {
+        var entity = input.Adapt<SysLang>();
+        return await _sysLangRep.InsertAsync(entity) ? entity.Id : 0;
+    }
+
+    /// <summary>
+    /// 更新语言 ✏️
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("更新语言")]
+    [ApiDescriptionSettings(Name = "Update"), HttpPost]
+    public async Task Update(UpdateSysLangInput input)
+    {
+        var entity = input.Adapt<SysLang>();
+        await _sysLangRep.AsUpdateable(entity)
+        .ExecuteCommandAsync();
+    }
+
+    /// <summary>
+    /// 删除语言 ❌
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("删除语言")]
+    [ApiDescriptionSettings(Name = "Delete"), HttpPost]
+    public async Task Delete(DeleteSysLangInput input)
+    {
+        var entity = await _sysLangRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+        await _sysLangRep.DeleteAsync(entity);   //真删除
+    }
+
+    /// <summary>
+    /// 获取下拉列表数据 🔖
+    /// </summary>
+    /// <returns></returns>
+    [DisplayName("获取下拉列表数据")]
+    [ApiDescriptionSettings(Name = "DropdownData"), HttpPost]
+    public async Task<dynamic> DropdownData()
+    {
+        var data = await _sysLangRep.Context.Queryable<SysLang>()
+            .Where(m => m.Active == true)
+            .Select(u => new
+            {
+                Value = u.UrlCode,
+                Label = $"{u.Name}"
+            }).ToListAsync();
+        return data;
+    }
+}

+ 1 - 0
Web/src/api-services/api.ts

@@ -27,6 +27,7 @@ export * from './apis/sys-email-api';
 export * from './apis/sys-enum-api';
 export * from './apis/sys-file-api';
 export * from './apis/sys-job-api';
+export * from './apis/sys-lang-api';
 export * from './apis/sys-ldap-api';
 export * from './apis/sys-log-diff-api';
 export * from './apis/sys-log-ex-api';

+ 513 - 0
Web/src/api-services/apis/sys-lang-api.ts

@@ -0,0 +1,513 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';
+import { Configuration } from '../configuration';
+// Some imports not used depending on template conditions
+// @ts-ignore
+import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
+import { AddSysLangInput } from '../models';
+import { AdminResultInt64 } from '../models';
+import { AdminResultObject } from '../models';
+import { AdminResultSqlSugarPagedListSysLangOutput } from '../models';
+import { AdminResultSysLang } from '../models';
+import { DeleteSysLangInput } from '../models';
+import { PageSysLangInput } from '../models';
+import { UpdateSysLangInput } from '../models';
+/**
+ * SysLangApi - axios parameter creator
+ * @export
+ */
+export const SysLangApiAxiosParamCreator = function (configuration?: Configuration) {
+    return {
+        /**
+         * 
+         * @summary 增加语言 ➕
+         * @param {AddSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysLangAddPost: async (body?: AddSysLangInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysLang/add`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+            // authentication Bearer required
+
+            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
+
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
+            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @summary 删除语言 ❌
+         * @param {DeleteSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysLangDeletePost: async (body?: DeleteSysLangInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysLang/delete`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+            // authentication Bearer required
+
+            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
+
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
+            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @summary 获取语言详情 ℹ️
+         * @param {number} id 主键Id
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysLangDetailGet: async (id: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'id' is not null or undefined
+            if (id === null || id === undefined) {
+                throw new RequiredError('id','Required parameter id was null or undefined when calling apiSysLangDetailGet.');
+            }
+            const localVarPath = `/api/sysLang/detail`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+            // authentication Bearer required
+
+            if (id !== undefined) {
+                localVarQueryParameter['Id'] = id;
+            }
+
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @summary 获取下拉列表数据 🔖
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysLangDropdownDataPost: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysLang/dropdownData`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+            // authentication Bearer required
+
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @summary 分页查询语言 🔖
+         * @param {PageSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysLangPagePost: async (body?: PageSysLangInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysLang/page`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+            // authentication Bearer required
+
+            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
+
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
+            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @summary 更新语言 ✏️
+         * @param {UpdateSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysLangUpdatePost: async (body?: UpdateSysLangInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysLang/update`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+            // authentication Bearer required
+
+            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
+
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
+            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
+    }
+};
+
+/**
+ * SysLangApi - functional programming interface
+ * @export
+ */
+export const SysLangApiFp = function(configuration?: Configuration) {
+    return {
+        /**
+         * 
+         * @summary 增加语言 ➕
+         * @param {AddSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangAddPost(body?: AddSysLangInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultInt64>>> {
+            const localVarAxiosArgs = await SysLangApiAxiosParamCreator(configuration).apiSysLangAddPost(body, options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
+        /**
+         * 
+         * @summary 删除语言 ❌
+         * @param {DeleteSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangDeletePost(body?: DeleteSysLangInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
+            const localVarAxiosArgs = await SysLangApiAxiosParamCreator(configuration).apiSysLangDeletePost(body, options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
+        /**
+         * 
+         * @summary 获取语言详情 ℹ️
+         * @param {number} id 主键Id
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangDetailGet(id: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysLang>>> {
+            const localVarAxiosArgs = await SysLangApiAxiosParamCreator(configuration).apiSysLangDetailGet(id, options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
+        /**
+         * 
+         * @summary 获取下拉列表数据 🔖
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangDropdownDataPost(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
+            const localVarAxiosArgs = await SysLangApiAxiosParamCreator(configuration).apiSysLangDropdownDataPost(options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
+        /**
+         * 
+         * @summary 分页查询语言 🔖
+         * @param {PageSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangPagePost(body?: PageSysLangInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSqlSugarPagedListSysLangOutput>>> {
+            const localVarAxiosArgs = await SysLangApiAxiosParamCreator(configuration).apiSysLangPagePost(body, options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
+        /**
+         * 
+         * @summary 更新语言 ✏️
+         * @param {UpdateSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangUpdatePost(body?: UpdateSysLangInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
+            const localVarAxiosArgs = await SysLangApiAxiosParamCreator(configuration).apiSysLangUpdatePost(body, options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
+    }
+};
+
+/**
+ * SysLangApi - factory interface
+ * @export
+ */
+export const SysLangApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+    return {
+        /**
+         * 
+         * @summary 增加语言 ➕
+         * @param {AddSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangAddPost(body?: AddSysLangInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultInt64>> {
+            return SysLangApiFp(configuration).apiSysLangAddPost(body, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @summary 删除语言 ❌
+         * @param {DeleteSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangDeletePost(body?: DeleteSysLangInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
+            return SysLangApiFp(configuration).apiSysLangDeletePost(body, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @summary 获取语言详情 ℹ️
+         * @param {number} id 主键Id
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangDetailGet(id: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysLang>> {
+            return SysLangApiFp(configuration).apiSysLangDetailGet(id, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @summary 获取下拉列表数据 🔖
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangDropdownDataPost(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
+            return SysLangApiFp(configuration).apiSysLangDropdownDataPost(options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @summary 分页查询语言 🔖
+         * @param {PageSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangPagePost(body?: PageSysLangInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSqlSugarPagedListSysLangOutput>> {
+            return SysLangApiFp(configuration).apiSysLangPagePost(body, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @summary 更新语言 ✏️
+         * @param {UpdateSysLangInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLangUpdatePost(body?: UpdateSysLangInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
+            return SysLangApiFp(configuration).apiSysLangUpdatePost(body, options).then((request) => request(axios, basePath));
+        },
+    };
+};
+
+/**
+ * SysLangApi - object-oriented interface
+ * @export
+ * @class SysLangApi
+ * @extends {BaseAPI}
+ */
+export class SysLangApi extends BaseAPI {
+    /**
+     * 
+     * @summary 增加语言 ➕
+     * @param {AddSysLangInput} [body] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysLangApi
+     */
+    public async apiSysLangAddPost(body?: AddSysLangInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultInt64>> {
+        return SysLangApiFp(this.configuration).apiSysLangAddPost(body, options).then((request) => request(this.axios, this.basePath));
+    }
+    /**
+     * 
+     * @summary 删除语言 ❌
+     * @param {DeleteSysLangInput} [body] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysLangApi
+     */
+    public async apiSysLangDeletePost(body?: DeleteSysLangInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
+        return SysLangApiFp(this.configuration).apiSysLangDeletePost(body, options).then((request) => request(this.axios, this.basePath));
+    }
+    /**
+     * 
+     * @summary 获取语言详情 ℹ️
+     * @param {number} id 主键Id
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysLangApi
+     */
+    public async apiSysLangDetailGet(id: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultSysLang>> {
+        return SysLangApiFp(this.configuration).apiSysLangDetailGet(id, options).then((request) => request(this.axios, this.basePath));
+    }
+    /**
+     * 
+     * @summary 获取下拉列表数据 🔖
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysLangApi
+     */
+    public async apiSysLangDropdownDataPost(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
+        return SysLangApiFp(this.configuration).apiSysLangDropdownDataPost(options).then((request) => request(this.axios, this.basePath));
+    }
+    /**
+     * 
+     * @summary 分页查询语言 🔖
+     * @param {PageSysLangInput} [body] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysLangApi
+     */
+    public async apiSysLangPagePost(body?: PageSysLangInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultSqlSugarPagedListSysLangOutput>> {
+        return SysLangApiFp(this.configuration).apiSysLangPagePost(body, options).then((request) => request(this.axios, this.basePath));
+    }
+    /**
+     * 
+     * @summary 更新语言 ✏️
+     * @param {UpdateSysLangInput} [body] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysLangApi
+     */
+    public async apiSysLangUpdatePost(body?: UpdateSysLangInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
+        return SysLangApiFp(this.configuration).apiSysLangUpdatePost(body, options).then((request) => request(this.axios, this.basePath));
+    }
+}

+ 94 - 0
Web/src/api-services/models/add-sys-lang-input.ts

@@ -0,0 +1,94 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { DirectionEnum } from './direction-enum';
+import { WeekEnum } from './week-enum';
+/**
+ * 多语言增加输入参数
+ * @export
+ * @interface AddSysLangInput
+ */
+export interface AddSysLangInput {
+    /**
+     * 语言名称
+     * @type {string}
+     * @memberof AddSysLangInput
+     */
+    name: string;
+    /**
+     * 语言代码
+     * @type {string}
+     * @memberof AddSysLangInput
+     */
+    code: string;
+    /**
+     * ISO 语言代码
+     * @type {string}
+     * @memberof AddSysLangInput
+     */
+    isoCode: string;
+    /**
+     * URL 语言代码
+     * @type {string}
+     * @memberof AddSysLangInput
+     */
+    urlCode: string;
+    /**
+     * 
+     * @type {DirectionEnum}
+     * @memberof AddSysLangInput
+     */
+    direction: DirectionEnum;
+    /**
+     * 日期格式
+     * @type {string}
+     * @memberof AddSysLangInput
+     */
+    dateFormat: string;
+    /**
+     * 时间格式
+     * @type {string}
+     * @memberof AddSysLangInput
+     */
+    timeFormat: string;
+    /**
+     * 
+     * @type {WeekEnum}
+     * @memberof AddSysLangInput
+     */
+    weekStart: WeekEnum;
+    /**
+     * 分组符号
+     * @type {string}
+     * @memberof AddSysLangInput
+     */
+    grouping: string;
+    /**
+     * 小数点符号
+     * @type {string}
+     * @memberof AddSysLangInput
+     */
+    decimalPoint: string;
+    /**
+     * 千分位分隔符
+     * @type {string}
+     * @memberof AddSysLangInput
+     */
+    thousandsSep?: string | null;
+    /**
+     * 是否启用
+     * @type {boolean}
+     * @memberof AddSysLangInput
+     */
+    active: boolean;
+}

+ 57 - 0
Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-lang-output.ts

@@ -0,0 +1,57 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SqlSugarPagedListSysLangOutput } from './sql-sugar-paged-list-sys-lang-output';
+/**
+ * 全局返回结果
+ * @export
+ * @interface AdminResultSqlSugarPagedListSysLangOutput
+ */
+export interface AdminResultSqlSugarPagedListSysLangOutput {
+    /**
+     * 状态码
+     * @type {number}
+     * @memberof AdminResultSqlSugarPagedListSysLangOutput
+     */
+    code?: number;
+    /**
+     * 类型success、warning、error
+     * @type {string}
+     * @memberof AdminResultSqlSugarPagedListSysLangOutput
+     */
+    type?: string | null;
+    /**
+     * 错误信息
+     * @type {string}
+     * @memberof AdminResultSqlSugarPagedListSysLangOutput
+     */
+    message?: string | null;
+    /**
+     * 
+     * @type {SqlSugarPagedListSysLangOutput}
+     * @memberof AdminResultSqlSugarPagedListSysLangOutput
+     */
+    result?: SqlSugarPagedListSysLangOutput;
+    /**
+     * 附加数据
+     * @type {any}
+     * @memberof AdminResultSqlSugarPagedListSysLangOutput
+     */
+    extras?: any | null;
+    /**
+     * 时间
+     * @type {Date}
+     * @memberof AdminResultSqlSugarPagedListSysLangOutput
+     */
+    time?: Date;
+}

+ 57 - 0
Web/src/api-services/models/admin-result-sys-lang.ts

@@ -0,0 +1,57 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SysLang } from './sys-lang';
+/**
+ * 全局返回结果
+ * @export
+ * @interface AdminResultSysLang
+ */
+export interface AdminResultSysLang {
+    /**
+     * 状态码
+     * @type {number}
+     * @memberof AdminResultSysLang
+     */
+    code?: number;
+    /**
+     * 类型success、warning、error
+     * @type {string}
+     * @memberof AdminResultSysLang
+     */
+    type?: string | null;
+    /**
+     * 错误信息
+     * @type {string}
+     * @memberof AdminResultSysLang
+     */
+    message?: string | null;
+    /**
+     * 
+     * @type {SysLang}
+     * @memberof AdminResultSysLang
+     */
+    result?: SysLang;
+    /**
+     * 附加数据
+     * @type {any}
+     * @memberof AdminResultSysLang
+     */
+    extras?: any | null;
+    /**
+     * 时间
+     * @type {Date}
+     * @memberof AdminResultSysLang
+     */
+    time?: Date;
+}

+ 26 - 0
Web/src/api-services/models/delete-sys-lang-input.ts

@@ -0,0 +1,26 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+/**
+ * 多语言删除输入参数
+ * @export
+ * @interface DeleteSysLangInput
+ */
+export interface DeleteSysLangInput {
+    /**
+     * 主键Id
+     * @type {number}
+     * @memberof DeleteSysLangInput
+     */
+    id: number;
+}

+ 23 - 0
Web/src/api-services/models/direction-enum.ts

@@ -0,0 +1,23 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+/**
+ * 书写方向枚举<br />&nbsp;从左到右 Ltr = 1<br />&nbsp;从右到左 Rtl = 2<br />
+ * @export
+ * @enum {string}
+ */
+export enum DirectionEnum {
+    NUMBER_1 = 1,
+    NUMBER_2 = 2
+}
+

+ 44 - 0
Web/src/api-services/models/move-db-column-input.ts

@@ -0,0 +1,44 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+/**
+ * 
+ * @export
+ * @interface MoveDbColumnInput
+ */
+export interface MoveDbColumnInput {
+    /**
+     * 数据库配置ID
+     * @type {string}
+     * @memberof MoveDbColumnInput
+     */
+    configId?: string | null;
+    /**
+     * 目标表名
+     * @type {string}
+     * @memberof MoveDbColumnInput
+     */
+    tableName?: string | null;
+    /**
+     * 要移动的列名
+     * @type {string}
+     * @memberof MoveDbColumnInput
+     */
+    columnName?: string | null;
+    /**
+     * 移动到该列后方(为空时移动到首列)
+     * @type {string}
+     * @memberof MoveDbColumnInput
+     */
+    afterColumnName?: string | null;
+}

+ 106 - 0
Web/src/api-services/models/page-sys-lang-input.ts

@@ -0,0 +1,106 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { Filter } from './filter';
+import { Search } from './search';
+/**
+ * 多语言分页查询输入参数
+ * @export
+ * @interface PageSysLangInput
+ */
+export interface PageSysLangInput {
+    /**
+     * 
+     * @type {Search}
+     * @memberof PageSysLangInput
+     */
+    search?: Search;
+    /**
+     * 模糊查询关键字
+     * @type {string}
+     * @memberof PageSysLangInput
+     */
+    keyword?: string | null;
+    /**
+     * 
+     * @type {Filter}
+     * @memberof PageSysLangInput
+     */
+    filter?: Filter;
+    /**
+     * 当前页码
+     * @type {number}
+     * @memberof PageSysLangInput
+     */
+    page?: number;
+    /**
+     * 页码容量
+     * @type {number}
+     * @memberof PageSysLangInput
+     */
+    pageSize?: number;
+    /**
+     * 排序字段
+     * @type {string}
+     * @memberof PageSysLangInput
+     */
+    field?: string | null;
+    /**
+     * 排序方向
+     * @type {string}
+     * @memberof PageSysLangInput
+     */
+    order?: string | null;
+    /**
+     * 降序排序
+     * @type {string}
+     * @memberof PageSysLangInput
+     */
+    descStr?: string | null;
+    /**
+     * 语言名称
+     * @type {string}
+     * @memberof PageSysLangInput
+     */
+    name?: string | null;
+    /**
+     * 语言代码
+     * @type {string}
+     * @memberof PageSysLangInput
+     */
+    code?: string | null;
+    /**
+     * ISO 语言代码
+     * @type {string}
+     * @memberof PageSysLangInput
+     */
+    isoCode?: string | null;
+    /**
+     * URL 语言代码
+     * @type {string}
+     * @memberof PageSysLangInput
+     */
+    urlCode?: string | null;
+    /**
+     * 是否启用
+     * @type {boolean}
+     * @memberof PageSysLangInput
+     */
+    active?: boolean | null;
+    /**
+     * 选中主键列表
+     * @type {Array<number>}
+     * @memberof PageSysLangInput
+     */
+    selectKeyList?: Array<number> | null;
+}

+ 63 - 0
Web/src/api-services/models/sql-sugar-paged-list-sys-lang-output.ts

@@ -0,0 +1,63 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SysLangOutput } from './sys-lang-output';
+/**
+ * 分页泛型集合
+ * @export
+ * @interface SqlSugarPagedListSysLangOutput
+ */
+export interface SqlSugarPagedListSysLangOutput {
+    /**
+     * 页码
+     * @type {number}
+     * @memberof SqlSugarPagedListSysLangOutput
+     */
+    page?: number;
+    /**
+     * 页容量
+     * @type {number}
+     * @memberof SqlSugarPagedListSysLangOutput
+     */
+    pageSize?: number;
+    /**
+     * 总条数
+     * @type {number}
+     * @memberof SqlSugarPagedListSysLangOutput
+     */
+    total?: number;
+    /**
+     * 总页数
+     * @type {number}
+     * @memberof SqlSugarPagedListSysLangOutput
+     */
+    totalPages?: number;
+    /**
+     * 当前页集合
+     * @type {Array<SysLangOutput>}
+     * @memberof SqlSugarPagedListSysLangOutput
+     */
+    items?: Array<SysLangOutput> | null;
+    /**
+     * 是否有上一页
+     * @type {boolean}
+     * @memberof SqlSugarPagedListSysLangOutput
+     */
+    hasPrevPage?: boolean;
+    /**
+     * 是否有下一页
+     * @type {boolean}
+     * @memberof SqlSugarPagedListSysLangOutput
+     */
+    hasNextPage?: boolean;
+}

+ 136 - 0
Web/src/api-services/models/sys-lang-output.ts

@@ -0,0 +1,136 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { DirectionEnum } from './direction-enum';
+import { WeekEnum } from './week-enum';
+/**
+ * 语言输出参数
+ * @export
+ * @interface SysLangOutput
+ */
+export interface SysLangOutput {
+    /**
+     * 主键Id
+     * @type {number}
+     * @memberof SysLangOutput
+     */
+    id?: number;
+    /**
+     * 语言名称
+     * @type {string}
+     * @memberof SysLangOutput
+     */
+    name?: string | null;
+    /**
+     * 语言代码
+     * @type {string}
+     * @memberof SysLangOutput
+     */
+    code?: string | null;
+    /**
+     * ISO 语言代码
+     * @type {string}
+     * @memberof SysLangOutput
+     */
+    isoCode?: string | null;
+    /**
+     * URL 语言代码
+     * @type {string}
+     * @memberof SysLangOutput
+     */
+    urlCode?: string | null;
+    /**
+     * 
+     * @type {DirectionEnum}
+     * @memberof SysLangOutput
+     */
+    direction?: DirectionEnum;
+    /**
+     * 日期格式
+     * @type {string}
+     * @memberof SysLangOutput
+     */
+    dateFormat?: string | null;
+    /**
+     * 时间格式
+     * @type {string}
+     * @memberof SysLangOutput
+     */
+    timeFormat?: string | null;
+    /**
+     * 
+     * @type {WeekEnum}
+     * @memberof SysLangOutput
+     */
+    weekStart?: WeekEnum;
+    /**
+     * 分组符号
+     * @type {string}
+     * @memberof SysLangOutput
+     */
+    grouping?: string | null;
+    /**
+     * 小数点符号
+     * @type {string}
+     * @memberof SysLangOutput
+     */
+    decimalPoint?: string | null;
+    /**
+     * 千分位分隔符
+     * @type {string}
+     * @memberof SysLangOutput
+     */
+    thousandsSep?: string | null;
+    /**
+     * 是否启用
+     * @type {boolean}
+     * @memberof SysLangOutput
+     */
+    active?: boolean;
+    /**
+     * 创建时间
+     * @type {Date}
+     * @memberof SysLangOutput
+     */
+    createTime?: Date | null;
+    /**
+     * 更新时间
+     * @type {Date}
+     * @memberof SysLangOutput
+     */
+    updateTime?: Date | null;
+    /**
+     * 创建者Id
+     * @type {number}
+     * @memberof SysLangOutput
+     */
+    createUserId?: number | null;
+    /**
+     * 创建者姓名
+     * @type {string}
+     * @memberof SysLangOutput
+     */
+    createUserName?: string | null;
+    /**
+     * 修改者Id
+     * @type {number}
+     * @memberof SysLangOutput
+     */
+    updateUserId?: number | null;
+    /**
+     * 修改者姓名
+     * @type {string}
+     * @memberof SysLangOutput
+     */
+    updateUserName?: string | null;
+}

+ 136 - 0
Web/src/api-services/models/sys-lang.ts

@@ -0,0 +1,136 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { DirectionEnum } from './direction-enum';
+import { WeekEnum } from './week-enum';
+/**
+ * 
+ * @export
+ * @interface SysLang
+ */
+export interface SysLang {
+    /**
+     * 雪花Id
+     * @type {number}
+     * @memberof SysLang
+     */
+    id?: number;
+    /**
+     * 创建时间
+     * @type {Date}
+     * @memberof SysLang
+     */
+    createTime?: Date;
+    /**
+     * 更新时间
+     * @type {Date}
+     * @memberof SysLang
+     */
+    updateTime?: Date | null;
+    /**
+     * 创建者Id
+     * @type {number}
+     * @memberof SysLang
+     */
+    createUserId?: number | null;
+    /**
+     * 创建者姓名
+     * @type {string}
+     * @memberof SysLang
+     */
+    createUserName?: string | null;
+    /**
+     * 修改者Id
+     * @type {number}
+     * @memberof SysLang
+     */
+    updateUserId?: number | null;
+    /**
+     * 修改者姓名
+     * @type {string}
+     * @memberof SysLang
+     */
+    updateUserName?: string | null;
+    /**
+     * 语言名称
+     * @type {string}
+     * @memberof SysLang
+     */
+    name?: string | null;
+    /**
+     * 语言代码(如 zh_CN)
+     * @type {string}
+     * @memberof SysLang
+     */
+    code?: string | null;
+    /**
+     * ISO 语言代码
+     * @type {string}
+     * @memberof SysLang
+     */
+    isoCode?: string | null;
+    /**
+     * URL 语言代码
+     * @type {string}
+     * @memberof SysLang
+     */
+    urlCode?: string | null;
+    /**
+     * 
+     * @type {DirectionEnum}
+     * @memberof SysLang
+     */
+    direction?: DirectionEnum;
+    /**
+     * 日期格式(如 YYYY-MM-DD)
+     * @type {string}
+     * @memberof SysLang
+     */
+    dateFormat?: string | null;
+    /**
+     * 时间格式(如 HH:MM:SS)
+     * @type {string}
+     * @memberof SysLang
+     */
+    timeFormat?: string | null;
+    /**
+     * 
+     * @type {WeekEnum}
+     * @memberof SysLang
+     */
+    weekStart?: WeekEnum;
+    /**
+     * 分组符号(如 ,)
+     * @type {string}
+     * @memberof SysLang
+     */
+    grouping?: string | null;
+    /**
+     * 小数点符号
+     * @type {string}
+     * @memberof SysLang
+     */
+    decimalPoint?: string | null;
+    /**
+     * 千分位分隔符
+     * @type {string}
+     * @memberof SysLang
+     */
+    thousandsSep?: string | null;
+    /**
+     * 是否启用
+     * @type {boolean}
+     * @memberof SysLang
+     */
+    active?: boolean;
+}

+ 100 - 0
Web/src/api-services/models/update-sys-lang-input.ts

@@ -0,0 +1,100 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { DirectionEnum } from './direction-enum';
+import { WeekEnum } from './week-enum';
+/**
+ * 多语言更新输入参数
+ * @export
+ * @interface UpdateSysLangInput
+ */
+export interface UpdateSysLangInput {
+    /**
+     * 主键Id
+     * @type {number}
+     * @memberof UpdateSysLangInput
+     */
+    id: number;
+    /**
+     * 语言名称
+     * @type {string}
+     * @memberof UpdateSysLangInput
+     */
+    name: string;
+    /**
+     * 语言代码
+     * @type {string}
+     * @memberof UpdateSysLangInput
+     */
+    code: string;
+    /**
+     * ISO 语言代码
+     * @type {string}
+     * @memberof UpdateSysLangInput
+     */
+    isoCode: string;
+    /**
+     * URL 语言代码
+     * @type {string}
+     * @memberof UpdateSysLangInput
+     */
+    urlCode: string;
+    /**
+     * 
+     * @type {DirectionEnum}
+     * @memberof UpdateSysLangInput
+     */
+    direction: DirectionEnum;
+    /**
+     * 日期格式
+     * @type {string}
+     * @memberof UpdateSysLangInput
+     */
+    dateFormat: string;
+    /**
+     * 时间格式
+     * @type {string}
+     * @memberof UpdateSysLangInput
+     */
+    timeFormat: string;
+    /**
+     * 
+     * @type {WeekEnum}
+     * @memberof UpdateSysLangInput
+     */
+    weekStart: WeekEnum;
+    /**
+     * 分组符号
+     * @type {string}
+     * @memberof UpdateSysLangInput
+     */
+    grouping: string;
+    /**
+     * 小数点符号
+     * @type {string}
+     * @memberof UpdateSysLangInput
+     */
+    decimalPoint: string;
+    /**
+     * 千分位分隔符
+     * @type {string}
+     * @memberof UpdateSysLangInput
+     */
+    thousandsSep?: string | null;
+    /**
+     * 是否启用
+     * @type {boolean}
+     * @memberof UpdateSysLangInput
+     */
+    active: boolean;
+}

+ 28 - 0
Web/src/api-services/models/week-enum.ts

@@ -0,0 +1,28 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+/**
+ * 周枚举<br />&nbsp;周一 Monday = 1<br />&nbsp;周二 Tuesday = 2<br />&nbsp;周三 Wednesday = 3<br />&nbsp;周四 Thursday = 4<br />&nbsp;周五 Friday = 5<br />&nbsp;周六 Saturday = 6<br />&nbsp;周日 Sunday = 7<br />
+ * @export
+ * @enum {string}
+ */
+export enum WeekEnum {
+    NUMBER_1 = 1,
+    NUMBER_2 = 2,
+    NUMBER_3 = 3,
+    NUMBER_4 = 4,
+    NUMBER_5 = 5,
+    NUMBER_6 = 6,
+    NUMBER_7 = 7
+}
+

+ 9 - 5
Web/src/layout/navBars/topBar/user.vue

@@ -18,9 +18,10 @@
 			</div>
 			<template #dropdown>
 				<el-dropdown-menu>
-					<el-dropdown-item command="zh-cn" :disabled="state.disabledI18n === 'zh-cn'">简体中文</el-dropdown-item>
-					<el-dropdown-item command="en" :disabled="state.disabledI18n === 'en'">English</el-dropdown-item>
-					<el-dropdown-item command="zh-tw" :disabled="state.disabledI18n === 'zh-tw'">繁體中文</el-dropdown-item>
+					<el-dropdown-item v-for="lang in state.languages" :key="lang.value" :command="lang.value"
+						:disabled="lang.value === state.disabledI18n">
+						{{ lang.label }}
+					</el-dropdown-item>
 				</el-dropdown-menu>
 			</template>
 		</el-dropdown>
@@ -103,7 +104,7 @@ import Push from 'push.js';
 import { signalR } from '/@/views/system/onlineUser/signalR';
 import { Avatar, CircleCloseFilled, Loading, Lock, Switch } from '@element-plus/icons-vue';
 import { clearAccessAfterReload, getAPI } from '/@/utils/axios-utils';
-import { SysAuthApi, SysNoticeApi } from '/@/api-services/api';
+import { SysAuthApi, SysNoticeApi, SysLangApi } from '/@/api-services/api';
 import { auth } from '/@/utils/authFunction';
 
 // 引入组件
@@ -127,6 +128,7 @@ const state = reactive({
 	disabledI18n: 'zh-cn',
 	disabledSize: 'large',
 	noticeList: [] as any, // 站内信列表
+	languages: [] as any, // 语言列表
 });
 // 设置分割样式
 const layoutUserFlexNum = computed(() => {
@@ -198,7 +200,7 @@ const onHandleCommandClick = (path: string) => {
 			.then(async () => {
 				clearAccessAfterReload();
 			})
-			.catch(() => {});
+			.catch(() => { });
 	} else if (path === 'changeTenant') {
 		changeTenantRef.value?.openDialog();
 	} else {
@@ -252,6 +254,8 @@ onMounted(async () => {
 			Push.clear();
 		}
 	});
+	var langRes = await getAPI(SysLangApi).apiSysLangDropdownDataPost();
+	state.languages = langRes.data.result ?? [];
 	// 加载未读的站内信
 	var res = await getAPI(SysNoticeApi).apiSysNoticeUnReadListGet();
 	state.noticeList = res.data.result ?? [];

+ 177 - 0
Web/src/views/system/lang/component/editDialog.vue

@@ -0,0 +1,177 @@
+<script lang="ts" name="sysLang" setup>
+import { ref, reactive, onMounted } from "vue";
+import { ElMessage } from "element-plus";
+import type { FormRules } from "element-plus";
+import { formatDate } from '/@/utils/formatTime';
+import { getAPI } from '/@/utils/axios-utils';
+import { SysLangApi } from '/@/api-services/api';
+
+//父级传递来的函数,用于回调
+const emit = defineEmits(["reloadTable"]);
+const ruleFormRef = ref();
+
+const state = reactive({
+	title: '',
+	loading: false,
+	showDialog: false,
+	ruleForm: {} as any,
+	stores: {},
+	dropdownData: {} as any,
+});
+
+// 自行添加其他规则
+const rules = ref<FormRules>({
+	name: [{ required: true, message: '请选择语言名称!', trigger: 'blur', },],
+	code: [{ required: true, message: '请选择语言代码!', trigger: 'blur', },],
+	isoCode: [{ required: true, message: '请选择ISO 语言代码!', trigger: 'blur', },],
+	urlCode: [{ required: true, message: '请选择URL 语言代码!', trigger: 'blur', },],
+	direction: [{ required: true, message: '请选择书写方向!', trigger: 'blur', },],
+	dateFormat: [{ required: true, message: '请选择日期格式!', trigger: 'blur', },],
+	timeFormat: [{ required: true, message: '请选择时间格式!', trigger: 'blur', },],
+	weekStart: [{ required: true, message: '请选择每周起始日!', trigger: 'blur', },],
+	grouping: [{ required: true, message: '请选择分组符号!', trigger: 'blur', },],
+	decimalPoint: [{ required: true, message: '请选择小数点符号!', trigger: 'blur', },],
+	active: [{ required: true, message: '请选择是否启用!', trigger: 'blur', },],
+});
+
+// 页面加载时
+onMounted(async () => {
+});
+
+// 打开弹窗
+const openDialog = async (row: any, title: string) => {
+	state.title = title;
+	row = row ?? { direction: 1, weekStart: 7, active: false };
+	state.ruleForm = row.id ? await getAPI(SysLangApi).apiSysLangDetailGet(row.id).then(res => res.data.result) : JSON.parse(JSON.stringify(row));
+	state.showDialog = true;
+};
+
+// 关闭弹窗
+const closeDialog = () => {
+	emit("reloadTable");
+	state.showDialog = false;
+};
+
+// 提交
+const submit = async () => {
+	ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
+		if (isValid) {
+			if (state.ruleForm.id != undefined && state.ruleForm.id > 0) {
+				await getAPI(SysLangApi).apiSysLangUpdatePost(state.ruleForm);
+			} else {
+				await getAPI(SysLangApi).apiSysLangAddPost(state.ruleForm);
+			}
+			closeDialog();
+		} else {
+			ElMessage({
+				message: `表单有${Object.keys(fields).length}处验证失败,请修改后再提交`,
+				type: "error",
+			});
+		}
+	});
+};
+
+//将属性或者函数暴露给父组件
+defineExpose({ openDialog });
+</script>
+<template>
+	<div class="sysLang-container">
+		<el-dialog v-model="state.showDialog" :width="800" draggable :close-on-click-modal="false">
+			<template #header>
+				<div style="color: #fff">
+					<span>{{ state.title }}</span>
+				</div>
+			</template>
+			<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
+				<el-row :gutter="35">
+					<el-form-item v-show="false">
+						<el-input v-model="state.ruleForm.id" />
+					</el-form-item>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="语言名称" prop="name">
+							<el-input v-model="state.ruleForm.name" placeholder="请输入语言名称" maxlength="255"
+								show-word-limit clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="语言代码" prop="code">
+							<el-input v-model="state.ruleForm.code" placeholder="请输入语言代码" maxlength="255"
+								show-word-limit clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="ISO 语言代码" prop="isoCode">
+							<el-input v-model="state.ruleForm.isoCode" placeholder="请输入ISO 语言代码" maxlength="255"
+								show-word-limit clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="URL 语言代码" prop="urlCode">
+							<el-input v-model="state.ruleForm.urlCode" placeholder="请输入URL 语言代码" maxlength="255"
+								show-word-limit clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="书写方向" prop="direction">
+							<g-sys-dict v-model="state.ruleForm.direction" code="DirectionEnum" render-as="select"
+								placeholder="请选书写方向" clearable filterable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="日期格式" prop="dateFormat">
+							<el-input v-model="state.ruleForm.dateFormat" placeholder="请输入日期格式" maxlength="255"
+								show-word-limit clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="时间格式" prop="timeFormat">
+							<el-input v-model="state.ruleForm.timeFormat" placeholder="请输入时间格式" maxlength="255"
+								show-word-limit clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="每周起始日" prop="weekStart">
+							<g-sys-dict v-model="state.ruleForm.weekStart" code="WeekEnum" render-as="select"
+								placeholder="请选每周起始日" clearable filterable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="分组符号" prop="grouping">
+							<el-input v-model="state.ruleForm.grouping" placeholder="请输入分组符号" maxlength="255"
+								show-word-limit clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="小数点符号" prop="decimalPoint">
+							<el-input v-model="state.ruleForm.decimalPoint" placeholder="请输入小数点符号" maxlength="255"
+								show-word-limit clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="千分位分隔符" prop="thousandsSep">
+							<el-input v-model="state.ruleForm.thousandsSep" placeholder="请输入千分位分隔符" maxlength="255"
+								show-word-limit clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="是否启用" prop="active">
+							<el-switch v-model="state.ruleForm.active" active-text="是" inactive-text="否" />
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="() => state.showDialog = false">取 消</el-button>
+					<el-button @click="submit" type="primary" v-reclick="1000">确 定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+<style lang="scss" scoped>
+:deep(.el-select),
+:deep(.el-input-number) {
+	width: 100%;
+}
+</style>

+ 171 - 0
Web/src/views/system/lang/index.vue

@@ -0,0 +1,171 @@
+<script lang="ts" setup name="sysLang">
+import { ref, reactive, onMounted } from "vue";
+import { auth } from '/@/utils/authFunction';
+import { ElMessageBox, ElMessage } from "element-plus";
+import { getAPI } from '/@/utils/axios-utils';
+import { SysLangApi } from '/@/api-services/api';
+import editDialog from '/@/views/system/lang/component/editDialog.vue'
+import ModifyRecord from '/@/components/table/modifyRecord.vue';
+
+const editDialogRef = ref();
+const state = reactive({
+  exportLoading: false,
+  tableLoading: false,
+  stores: {},
+  showAdvanceQueryUI: false,
+  dropdownData: {} as any,
+  selectData: [] as any[],
+  tableQueryParams: {} as any,
+  tableParams: {
+    page: 1,
+    pageSize: 20,
+    total: 0,
+    field: 'active', // 默认的排序字段
+    order: 'descending', // 排序方向
+    descStr: 'descending', // 降序排序的关键字符
+  },
+  tableData: [],
+});
+
+// 页面加载时
+onMounted(async () => {
+});
+
+// 查询操作
+const handleQuery = async (params: any = {}) => {
+  state.tableLoading = true;
+  state.tableParams = Object.assign(state.tableParams, params);
+  const result = await  getAPI(SysLangApi).apiSysLangPagePost(Object.assign(state.tableQueryParams, state.tableParams)).then(res => res.data.result);
+  state.tableParams.total = result?.total;
+  state.tableData = result?.items ?? [];
+  state.tableLoading = false;
+};
+
+// 列排序
+const sortChange = async (column: any) => {
+  state.tableParams.field = column.prop;
+  state.tableParams.order = column.order;
+  await handleQuery();
+};
+
+// 删除
+const delSysLang = (row: any) => {
+  ElMessageBox.confirm(`确定要删除吗?`, "提示", {
+    confirmButtonText: "确定",
+    cancelButtonText: "取消",
+    type: "warning",
+  }).then(async () => {
+    await getAPI(SysLangApi).apiSysLangDeletePost({ id: row.id });
+    handleQuery();
+    ElMessage.success("删除成功");
+  }).catch(() => {});
+};
+
+handleQuery();
+</script>
+<template>
+  <div class="sysLang-container" v-loading="state.exportLoading">
+    <el-card shadow="hover" :body-style="{ paddingBottom: '0' }"> 
+      <el-form :model="state.tableQueryParams" ref="queryForm" labelWidth="90">
+        <el-row>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+            <el-form-item label="关键字">
+              <el-input v-model="state.tableQueryParams.keyword" clearable placeholder="请输入模糊查询关键字"/>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+            <el-form-item label="语言名称">
+              <el-input v-model="state.tableQueryParams.name" clearable placeholder="请输入语言名称"/>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+            <el-form-item label="语言代码">
+              <el-input v-model="state.tableQueryParams.code" clearable placeholder="请输入语言代码"/>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+            <el-form-item label="ISO 语言代码">
+              <el-input v-model="state.tableQueryParams.isoCode" clearable placeholder="请输入ISO 语言代码"/>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+            <el-form-item label="URL 语言代码">
+              <el-input v-model="state.tableQueryParams.urlCode" clearable placeholder="请输入URL 语言代码"/>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+            <el-form-item label="是否启用">
+              <el-input v-model="state.tableQueryParams.active" clearable placeholder="请输入是否启用"/>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+            <el-form-item >
+              <el-button-group style="display: flex; align-items: center;">
+                <el-button type="primary"  icon="ele-Search" @click="handleQuery" v-auth="'sysLang:page'" v-reclick="1000"> 查询 </el-button>
+                <el-button type="danger" style="margin-left:5px;" icon="ele-Delete" @click="batchDelSysLang" :disabled="state.selectData.length == 0" v-auth="'sysLang:batchDelete'"> 删除 </el-button>
+                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="editDialogRef.openDialog(null, '新增多语言')" v-auth="'sysLang:add'"> 新增 </el-button>
+              </el-button-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-card>
+    <el-card class="full-table" shadow="hover" style="margin-top: 5px">
+      <el-table :data="state.tableData" style="width: 100%" v-loading="state.tableLoading" tooltip-effect="light" row-key="id" @sort-change="sortChange" border>
+        <el-table-column type="index" label="序号" width="55" align="center"/>
+        <el-table-column prop='name' label='语言名称' sortable='custom' show-overflow-tooltip />
+        <el-table-column prop='code' label='语言代码' sortable='custom' show-overflow-tooltip />
+        <el-table-column prop='isoCode' label='ISO 语言代码' sortable='custom' show-overflow-tooltip />
+        <el-table-column prop='urlCode' label='URL 语言代码' sortable='custom' show-overflow-tooltip />
+        <el-table-column prop='direction' label='书写方向' sortable='custom' show-overflow-tooltip  >
+          <template #default="scope">
+						<g-sys-dict v-model="scope.row.direction" code="DirectionEnum" />
+					</template>
+        </el-table-column>
+        <el-table-column prop='dateFormat' label='日期格式' sortable='custom' show-overflow-tooltip />
+        <el-table-column prop='timeFormat' label='时间格式' sortable='custom' show-overflow-tooltip />
+        <el-table-column prop='weekStart' label='每周起始日' sortable='custom' show-overflow-tooltip >
+          <template #default="scope">
+						<g-sys-dict v-model="scope.row.weekStart" code="WeekEnum" />
+					</template>
+        </el-table-column>
+        <el-table-column prop='grouping' label='分组符号' sortable='custom' show-overflow-tooltip />
+        <el-table-column prop='decimalPoint' label='小数点符号' sortable='custom' show-overflow-tooltip />
+        <el-table-column prop='thousandsSep' label='千分位分隔符' sortable='custom' show-overflow-tooltip />
+        <el-table-column prop='active' label='是否启用' sortable='custom' show-overflow-tooltip>
+          <template #default="scope">
+            <el-tag v-if="scope.row.active"> 是 </el-tag>
+            <el-tag type="danger" v-else> 否 </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
+          <template #default="scope">
+            <ModifyRecord :data="scope.row" />
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip v-if="auth('sysLang:update') || auth('sysLang:delete')">
+          <template #default="scope">
+            <el-button icon="ele-Edit" size="small" text type="primary" @click="editDialogRef.openDialog(scope.row, '编辑多语言')" v-auth="'sysLang:update'"> 编辑 </el-button>
+            <el-button icon="ele-Delete" size="small" text type="primary" @click="delSysLang(scope.row)" v-auth="'sysLang:delete'"> 删除 </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination 
+              v-model:currentPage="state.tableParams.page"
+              v-model:page-size="state.tableParams.pageSize"
+              @size-change="(val: any) => handleQuery({ pageSize: val })"
+              @current-change="(val: any) => handleQuery({ page: val })"
+              layout="total, sizes, prev, pager, next, jumper"
+              :page-sizes="[10, 20, 50, 100, 200, 500]"
+              :total="state.tableParams.total"
+              size="small"
+              background />
+      <editDialog ref="editDialogRef" @reloadTable="handleQuery" />
+    </el-card>
+  </div>
+</template>
+<style scoped>
+:deep(.el-input), :deep(.el-select), :deep(.el-input-number) {
+  width: 100%;
+}
+</style>