Browse Source

fix:1、站点文件最大传输大小改为以M为单位;2、广告列表总数查找修改;3、系统目录表初始化将车载机相关菜单去掉

Zhenghanjv 2 months ago
parent
commit
6d16b25073

+ 7 - 6
Platform/AI.Platform.Page/Pages/Media/Media.razor

@@ -7,7 +7,7 @@
     <div  class="filter_box">
         <div class="filter_row">
             <span>文件名</span><Input Placeholder="请输入要查找的文件名" @bind-Value="filterData.searchFileName" Style="width:30%" />
-             <span>上传人</span><Input Placeholder="上传人" @bind-Value="filterData.searchMediaUploader" Style="width:30%" />
+            <span>操作人</span><Input Placeholder="操作人" @bind-Value="filterData.searchMediaUploader" Style="width:30%" />
         </div>
         
         <div class="filter_row">
@@ -35,12 +35,13 @@
         </div>
 
         <div class="filter_row">
-            <span>有效时间段</span><RangePicker TValue="DateTime?[]" OnChange="@(date => onDateChage(date,1))" />
-            <span>更新时间</span><RangePicker TValue="DateTime?[]" OnChange="@(date => onDateChage(date, 2))" />
+            <span>有效时间段</span><RangePicker TValue="DateTime?[]" OnChange="@(date => onDateChage(date, 1))" style="width:30%" />
+            <span>更新时间</span><RangePicker TValue="DateTime?[]" OnChange="@(date => onDateChage(date, 2))" style="width:30%" />
         </div>
         
-        <div class="filter_row" style="justify-content:start">
-            <span style="margin-right:5%">播放时段</span><RangePicker TValue="DateTime?[]" OnChange="@(date => onDateChage(date, 3))" Picker="DatePickerType.Time" Format="@("HH")"/>
+        <div class="filter_row">
+            <span>播放时段</span><RangePicker TValue="DateTime?[]" OnChange="@(date => onDateChage(date, 3))" Picker="DatePickerType.Time" Format="@("HH")" style="width:30%" />
+            <span>油站</span><Input Placeholder="油站" @bind-Value="filterData.searchSiteName" Style="width:30%" />
         </div>
 
         <div class="filter_row" style="justify-content:start">
@@ -58,7 +59,7 @@
     OnChange="OnChange">
         <ColumnDefinitions Context="row">
             <PropertyColumn Property="c => c.FileName" Title="文件名" />
-            <PropertyColumn Property="c => c.MediaUploader" Title="上传人" />
+            <PropertyColumn Property="c => c.MediaUploader" Title="操作人" />
             <PropertyColumn Property="c => c.SiteName" Title="油站" />
             <PropertyColumn Property="c=>c.MediaState" Title="文件状态">
                 @{

+ 11 - 3
Platform/AI.Platform.Page/Pages/Media/Media.razor.cs

@@ -2,6 +2,7 @@
 using AI.Platform.Core.Entity.Media;
 using AI.Platform.Core.Entity.Site;
 using AI.Platform.Page.Pages.Media.Model;
+using AI.Platform.Page.Pages.Site;
 using AI.Platform.Page.Pages.Site.Model;
 using AntDesign;
 using AntDesign.TableModels;
@@ -98,6 +99,7 @@ public partial class Media
     /// <returns></returns>
     private async Task ShowDialog(int type, MediaInfoModel? media)
     {
+        await searchSitesAsync();
         model = new MediaDialogModel();
         model.Type = type;
         model.siteInfos = Sites;
@@ -230,7 +232,8 @@ public partial class Media
             .WhereIF(filterData.searchMediaState != null && filterData.searchMediaState != -1, media => media.MediaState == filterData.searchMediaState)
             .WhereIF(filterData.searchStartTime != null && filterData.searchEndTime != null, media => media.StartTime >= filterData.searchStartTime && media.EndTime <= filterData.searchEndTime)
             .WhereIF(filterData.searchEffecitiveTime != null && filterData.searchFailureTime != null, media => media.EffectiveTime >= filterData.searchEffecitiveTime && media.FailureTime <= filterData.searchFailureTime)
-            .WhereIF(filterData.searchStartEditTime != null && filterData.searchEndEditTime != null, media => media.EditTime >= filterData.searchStartEditTime && media.EditTime <= filterData.searchEndEditTime);
+            .WhereIF(filterData.searchStartEditTime != null && filterData.searchEndEditTime != null, media => media.EditTime >= filterData.searchStartEditTime && media.EditTime <= filterData.searchEndEditTime)
+            .WhereIF(filterData.searchSiteName != null && filterData.searchSiteName.IsNotNullOrEmpty(), (media, site) => site.Name.Contains(filterData.searchSiteName));
 
         if (filterData.searchMachineStateList.IsNotNullOrEmpty())
         {
@@ -238,7 +241,7 @@ public partial class Media
             foreach (var state in filterData.searchMachineStateList)
             {
                 var jsonQuoted = $"\"{state}\"";
-                expressionable.Or(m => m.MachineState.Contains(jsonQuoted));
+                expressionable.Or(media => media.MachineState.Contains(jsonQuoted));
             }
             query = query.Where(expressionable.ToExpression());
         }
@@ -270,6 +273,7 @@ public partial class Media
             .Take(filterData.pageSize)
             .ToListAsync();
 
+        await searchSitesAsync();
         Loading = false;
     }
 
@@ -350,7 +354,6 @@ public partial class Media
         {
             await NavigationManager.RedirectLogin(IJSRuntime);
             await Query();
-            await searchSitesAsync();
         }
     }
 
@@ -423,5 +426,10 @@ public partial class Media
         /// </summary>
         public DateTime? searchEndEditTime { set; get; }
 
+        /// <summary>
+        /// 根据绑定油站查找
+        /// </summary>
+        public string? searchSiteName { set; get; }
+
     }
 }

+ 3 - 3
Platform/AI.Platform.Page/Pages/Media/UpdateMediaDialog.razor

@@ -24,7 +24,7 @@
 
                         <div class="filter_colume">
                             <div class="filter_row_around">
-                                <span>上传人</span><Input Placeholder="上传人" @bind-Value="Model.MediaUploader" Style="width:80%" Disabled />
+                                <span>操作人</span><Input Placeholder="操作人" @bind-Value="Model.MediaUploader" Style="width:80%" Disabled />
                             </div>
                             <ValidationMessage For="@(() => Model.MediaUploader)" style="color:red" />
                         </div>
@@ -265,7 +265,7 @@
     {
         // if (e.Value is not IBrowserFile file) return;
         var siteinfo = Model.siteInfos.Find(it => it.Id == Model.BusinessUnitID);
-        if (siteinfo != null && e.File.Size > siteinfo.MaxSize)
+        if (siteinfo != null && e.File.Size > siteinfo.MaxSize * 1024 * 1024)
         {
             Message.Error("上传文件超过限制大小");
             return;
@@ -375,7 +375,7 @@
                 var siteinfo = Model.siteInfos.Find(it => it.Id.ToString().Equals(value));
                 if (siteinfo != null)
                 {
-                    if(selectedFile != null && selectedFile.Size > siteinfo.MaxSize)
+                    if (selectedFile != null && selectedFile.Size > siteinfo.MaxSize * 1024 * 1024)
                     {
                         Message.Error("上传文件超过限制大小");
                         selectedFile = null;

+ 1 - 1
Platform/AI.Platform.Page/Pages/Site/Model/SiteModel.cs

@@ -100,7 +100,7 @@ namespace AI.Platform.Page.Pages.Site.Model
         /// <summary>
         /// 上传文件大小
         /// </summary>
-        public long MaxSize { get; set; } = 31457280; //30M
+        public long MaxSize { get; set; } = 30; //30M
 
         public SiteEntity ToCompany()
         {

+ 4 - 2
Platform/AI.Platform.Page/Pages/Site/Screen.razor.cs

@@ -82,6 +82,7 @@ public partial class Screen
     /// <returns></returns>
     private async Task ShowDialog(int type, SnInfo? snInfo)
     {
+        await searchSitesAsync();
         model = new ScrrenDialogModel();
         model.Type = type;
         model.Sites = Sites;
@@ -170,7 +171,8 @@ public partial class Screen
             .Take(filterData.pageSize)
             .ToListAsync();
 
-            Loading = false;
+        await searchSitesAsync();
+        Loading = false;
     }
 
     Func<PaginationTotalContext, string> showTotal = ctx => $"总数 {ctx.Total} ";
@@ -218,7 +220,7 @@ public partial class Screen
         {
             await NavigationManager.RedirectLogin(IJSRuntime);
             await Query();
-            await searchSitesAsync();
+            
         }
     }
 

+ 40 - 58
Platform/AI.Platform.Page/Pages/Site/Site.razor.cs

@@ -76,6 +76,7 @@ public partial class Site
     /// <returns></returns>
     private async Task ShowDialog(int type, SiteOutput? media)
     {
+        await searchSitesAsync();
         model = new StateDialogModel();
         model.Type = type;
         model.Sites = Sites;
@@ -104,7 +105,7 @@ public partial class Site
             case 2:
                 SiteEntity siteEntity = model.ToCompany();
                 await _Repository.Context.Updateable(siteEntity).
-                    UpdateColumns(it => new { it.Name,it.Address, it.Contact})
+                    UpdateColumns(it => new { it.Name,it.Address, it.Contact,it.ParentId})
                     .ExecuteCommandAsync();
                 break;
             case 3:
@@ -148,24 +149,28 @@ public partial class Site
         if (Global.CurrentUser.Account != "admin")
         {
             long siteID = Global.CurrentUser.SiteId;
-            string countSql = $@"
-                    WITH RECURSIVE site_tree AS(
-                               SELECT id,parent_id
-                               FROM site_entity
-                               WHERE id = @siteID
-                               UNION ALL
-                               SELECT s.id,s.parent_id
-                               FROM site_entity s
-                               INNER JOIN site_tree t ON s.parent_id = t.id
-                    )
-                    SELECT 
-                        st.id  AS Id,st.parent_id AS ParentID,
-                        p.name AS ParentName
-                    FROM site_tree st
-                    LEFT JOIN site_entity p ON st.parent_id = p.id
-                    {whereClause};
-            ";
-            Total = await _Repository.Context.Ado.GetIntAsync(countSql, new { siteID, searchName });
+            //string countSql = $@"
+            //        WITH RECURSIVE site_tree AS(
+            //                   SELECT id,parent_id
+            //                   FROM site_entity
+            //                   WHERE id = @siteID
+            //                   UNION ALL
+            //                   SELECT s.id,s.parent_id
+            //                   FROM site_entity s
+            //                   INNER JOIN site_tree t ON s.parent_id = t.id
+            //        )
+            //        SELECT 
+            //            st.id  AS Id,st.parent_id AS ParentID,
+            //            p.name AS ParentName
+            //        FROM site_tree st
+            //        LEFT JOIN site_entity p ON st.parent_id = p.id
+            //        {whereClause};
+            //";
+            //Total = await _Repository.Context.Ado.GetIntAsync(countSql, new { siteID, searchName });
+            Total = await _Repository.AsQueryable()
+                .Where(it => it.Id == siteID || it.ParentId == siteID)
+                .WhereIF(filterData.siteName.IsNotNullOrEmpty(), it => it.Name.Contains(filterData.siteName))
+                .CountAsync();
 
             string dataSql = $@"
                     WITH RECURSIVE site_tree AS(
@@ -191,15 +196,19 @@ public partial class Site
         else
         {
             //,st.name,st.address,st.contact,st.create_time
-            string countSql = $@"
-                    SELECT 
-                        st.id,st.parent_id,
-                        p.name AS ParentName
-                    FROM site_entity st
-                    LEFT JOIN site_entity p ON st.parent_id = p.id
-                    {whereClause};
-            ";
-            Total = await _Repository.Context.Ado.GetIntAsync(countSql, new {  searchName });
+            //string countSql = $@"
+            //        SELECT 
+            //            st.id,st.parent_id,
+            //            p.name AS ParentName
+            //        FROM site_entity st
+            //        LEFT JOIN site_entity p ON st.parent_id = p.id
+            //        {whereClause};
+            //";
+
+            //Total = await _Repository.Context.Ado.GetIntAsync(countSql, new {  searchName });
+            Total = await _Repository.AsQueryable()
+                .WhereIF(filterData.siteName.IsNotNullOrEmpty(), it => it.Name.Contains(filterData.siteName))
+                .CountAsync();
 
             string dataSql = $@"
                     SELECT 
@@ -214,7 +223,8 @@ public partial class Site
             _DataSource = await _Repository.Context.Ado.SqlQueryAsync<SiteOutput>(dataSql, new { searchName, pageSize, offset });
         }
 
-            Loading = false;
+        await searchSitesAsync();
+        Loading = false;
     }
 
     Func<PaginationTotalContext, string> showTotal = ctx => $"总数 {ctx.Total} ";
@@ -238,15 +248,6 @@ public partial class Site
     {
         if (Global.CurrentUser.Account == "admin")
         {
-            //string dataSql = $@"
-            //        SELECT 
-            //            st.id AS Id,st.name AS Name
-            //            p.name AS ParentName
-            //        FROM site_entity st
-            //        LEFT JOIN site_entity p ON st.parent_id = p.id;
-            //";
-            //Sites = await _Repository.Context.Ado.SqlQueryAsync<SiteInfo>(dataSql);
-
             Sites = await _Repository.AsQueryable()
                 .Where(it => it.ParentId == 0)
                 .Select<SiteInfo>()
@@ -254,25 +255,6 @@ public partial class Site
         }
         else
         {
-            //long siteID = Global.CurrentUser.SiteId;
-            //string dataSql = $@"
-            //        WITH RECURSIVE site_tree AS(
-            //                   SELECT id,parent_id,name,address,contact,create_time
-            //                   FROM site_entity
-            //                   WHERE id = @siteID
-            //                   UNION ALL
-            //                   SELECT s.id,s.parent_id,s.name,s.address,s.address,s.address
-            //                   FROM site_entity s
-            //                   INNER JOIN site_tree t ON s.parent_id = t.id
-            //        )
-            //        SELECT 
-            //            st.id AS Id,st.parent_id AS ParentID,st.name AS Name ,st.address AS Address,st.contact AS Contact,st.create_time AS CreateTime,
-            //            p.name AS ParentName
-            //        FROM site_tree st
-            //        LEFT JOIN site_entity p ON st.parent_id = p.id;
-            //";
-            //Sites = await _Repository.Context.Ado.SqlQueryAsync<SiteInfo>(dataSql, new { siteID });
-
             Sites = await _Repository.AsQueryable()
                 .Where(it => it.Id == Global.CurrentUser.SiteId)
                 .Select<SiteInfo>()
@@ -291,7 +273,7 @@ public partial class Site
         {
             await NavigationManager.RedirectLogin(IJSRuntime);
             await Query();
-            await searchSitesAsync();
+           
         }
     }
 

+ 1 - 1
Platform/AI.Platform.Page/Pages/Site/UpdateSiteDialog.razor

@@ -45,7 +45,7 @@
                             <div class="filter_row_around">
                                 <span>联系方式</span><Input Placeholder="联系方式" @bind-Value="Model.Contact" Style="width:80%" />
                             </div>
-                            <ValidationMessage For="@(() => Model.Address)" style="color:red" />
+                            <ValidationMessage For="@(() => Model.Contact)" style="color:red" />
                         </div>
 
                         <div class="filter_colume">

+ 2 - 1
Platform/AI.Platform.Tool/Configuration/DataBase.json

@@ -10,7 +10,8 @@
       {
         "ConfigId": "0", //默认库标识-禁止修改
         "DbType": "MySql", //MySql、SqlServer、Sqlite、Oracle、PostgreSQL、Dm、Kdbndp、Oscar、MySqlConnector、Access、OpenGauss、QuestDB、HG、ClickHouse、GBase、Odbc、Custom
-        "ConnectionString": "Data Source=localhost;Port=3306;Initial Catalog=thesystem;Persist Security Info=True;User ID=root;Password=123456;Pooling=True;charset=utf8mb4;MAX Pool Size=200;Min Pool Size=1;Connection Lifetime=30;AllowLoadLocalInfile=true;", // 库连接字符串
+        //"ConnectionString": "Data Source=localhost;Port=3306;Initial Catalog=media;Persist Security Info=True;User ID=root;Password=123456;Pooling=True;charset=utf8mb4;MAX Pool Size=200;Min Pool Size=1;Connection Lifetime=30;AllowLoadLocalInfile=true;", // 库连接字符串
+        "ConnectionString": "Data Source=localhost;Port=3307;Initial Catalog=media;Persist Security Info=True;User ID=root;Password=Wayne@123;Pooling=True;charset=utf8mb4;MAX Pool Size=200;Min Pool Size=1;Connection Lifetime=30;AllowLoadLocalInfile=true;", // 库连接字符串
         //"ConnectionString": "Data Source=./thesystem.db",
         "DbSettings": {
           "EnableDiffLog": true, //启用库表差异日志

+ 27 - 27
Platform/AI.Platform.Tool/Entity/System/SystemMenu.cs

@@ -78,33 +78,33 @@ public class SystemMenuSeedData : ISeedData<SystemMenu>
         [
             new SystemMenu() { Id = 1, ParentId = 0, Path="/", Name="主页", Key="home", Necessary=true, Icon="home", Sort=0, Enabled=true, CreateTime = DateTime.Now },
             new SystemMenu() { Id = 2, ParentId = 0, Path="/system", Name="系统管理", Key="system", Icon="setting", Sort=999, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 3, ParentId = 2, Path="/system/setting", Name="系统设置", Key="system.setting", Icon="desktop", Sort=0, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 4, ParentId = 2, Path="/system/user", Name="用户管理", Key="system.user", Icon="idcard", Sort=1, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 5, ParentId = 2, Path="/system/role", Name="角色管理", Key="system.role", Icon="user", Sort=2, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 6, ParentId = 2, Path="/system/department", Name="部门管理", Key="system.department", Icon="apartment", Sort=3, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 7, ParentId = 2, Path="/system/dictionary", Name="字典管理", Key="system.dictionary", Icon="api", Sort=4, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 8, ParentId = 2, Path="/system/menu", Name="菜单管理", Key="system.menu", Icon="menu", Sort=5, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 9, ParentId = 2, Path="/system/area", Name="区域管理", Key="system.area", Icon="block", Sort=6, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 10, ParentId = 2, Path="/system/alllog", Name="日志管理", Key="system.alllog", Icon="file", Sort=7, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 11, ParentId = 10, Path="/system/alllog/log", Name="日志管理", Key="system.log", Icon="file-exclamation", Sort=0, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 12, ParentId = 10, Path="/system/alllog/apilog", Name="接口日志管理", Key="system.apilog", Icon="file-text", Sort=1, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 13, ParentId = 10, Path="/system/alllog/loginlog", Name="登录日志管理", Key="system.loginlog", Icon="file", Sort=2, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 14, ParentId = 2, Path="/system/apidoc", Name="接口文档", Key="system.apidoc", Icon="file-markdown", Sort=8, Enabled=true, CreateTime = DateTime.Now },
-
-            new SystemMenu() { Id = 15, ParentId = 0, Path="/app", Name="应用管理", Key="app", Icon="appstore", Sort=1, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 16, ParentId = 15, Path="/app/product", Name="产品管理", Key="app.product", Icon="shopping", Sort=0, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 17, ParentId = 15, Path="/app/order", Name="订单管理", Key="app.order", Icon="snippets", Sort=1, Enabled=true, CreateTime = DateTime.Now },
-
-            new SystemMenu() { Id = 19, ParentId = 0, Path="/report", Name="报表管理", Key="report", Icon="appstore", Sort=1, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 18, ParentId = 19, Path="/report/shiftSettlementDailyReport", Name="班结日报表", Key="report.shiftSettlementDailyReport", Icon="snippets", Sort=1, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 20, ParentId = 19, Path="/report/shiftSalesReport", Name="班次销售报表", Key="report.shiftSalesReport", Icon="snippets", Sort=1, Enabled=true, CreateTime = DateTime.Now },
-
-            new SystemMenu() { Id = 21, ParentId = 0, Path="/media", Name="媒体管理", Key="media", Icon="appstore", Sort=1, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 22, ParentId = 21, Path="/media/list", Name="广告列表", Key="media.list", Icon="snippets", Sort=1, Enabled=true, CreateTime = DateTime.Now },
-
-            new SystemMenu() { Id = 23, ParentId = 0, Path="/site", Name="站点管理", Key="site", Icon="appstore", Sort=1, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 24, ParentId = 23, Path="/site/list", Name="站点列表", Key="site.list", Icon="snippets", Sort=1, Enabled=true, CreateTime = DateTime.Now },
-            new SystemMenu() { Id = 25, ParentId = 23, Path="/site/screen", Name="设备管理", Key="site.screen", Icon="snippets", Sort=1, Enabled=true, CreateTime = DateTime.Now }
+            //new SystemMenu() { Id = 3, ParentId = 2, Path="/system/setting", Name="系统设置", Key="system.setting", Icon="desktop", Sort=0, Enabled=false, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 3, ParentId = 2, Path="/system/user", Name="用户管理", Key="system.user", Icon="idcard", Sort=1, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 4, ParentId = 2, Path="/system/role", Name="角色管理", Key="system.role", Icon="user", Sort=2, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 5, ParentId = 2, Path="/system/department", Name="部门管理", Key="system.department", Icon="apartment", Sort=3, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 6, ParentId = 2, Path="/system/dictionary", Name="字典管理", Key="system.dictionary", Icon="api", Sort=4, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 7, ParentId = 2, Path="/system/menu", Name="菜单管理", Key="system.menu", Icon="menu", Sort=5, Enabled=true, CreateTime = DateTime.Now },
+            //new SystemMenu() { Id = 9, ParentId = 2, Path="/system/area", Name="区域管理", Key="system.area", Icon="block", Sort=6, Enabled=false, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 8, ParentId = 2, Path="/system/alllog", Name="日志管理", Key="system.alllog", Icon="file", Sort=7, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 9, ParentId = 8, Path="/system/alllog/log", Name="日志管理", Key="system.log", Icon="file-exclamation", Sort=0, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 10, ParentId = 8, Path="/system/alllog/apilog", Name="接口日志管理", Key="system.apilog", Icon="file-text", Sort=1, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 11, ParentId = 8, Path="/system/alllog/loginlog", Name="登录日志管理", Key="system.loginlog", Icon="file", Sort=2, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 12, ParentId = 2, Path="/system/apidoc", Name="接口文档", Key="system.apidoc", Icon="file-markdown", Sort=8, Enabled=true, CreateTime = DateTime.Now },
+
+            //new SystemMenu() { Id = 15, ParentId = 0, Path="/app", Name="应用管理", Key="app", Icon="appstore", Sort=1, Enabled=false, CreateTime = DateTime.Now },
+            //new SystemMenu() { Id = 16, ParentId = 15, Path="/app/product", Name="产品管理", Key="app.product", Icon="shopping", Sort=0, Enabled=false, CreateTime = DateTime.Now },
+            //new SystemMenu() { Id = 17, ParentId = 15, Path="/app/order", Name="订单管理", Key="app.order", Icon="snippets", Sort=1, Enabled=false, CreateTime = DateTime.Now },
+
+            //new SystemMenu() { Id = 19, ParentId = 0, Path="/report", Name="报表管理", Key="report", Icon="appstore", Sort=1, Enabled=false, CreateTime = DateTime.Now },
+            //new SystemMenu() { Id = 18, ParentId = 19, Path="/report/shiftSettlementDailyReport", Name="班结日报表", Key="report.shiftSettlementDailyReport", Icon="snippets", Sort=1, Enabled=false, CreateTime = DateTime.Now },
+            //new SystemMenu() { Id = 20, ParentId = 19, Path="/report/shiftSalesReport", Name="班次销售报表", Key="report.shiftSalesReport", Icon="snippets", Sort=1, Enabled=false, CreateTime = DateTime.Now },
+
+            new SystemMenu() { Id = 13, ParentId = 0, Path="/media", Name="媒体管理", Key="media", Icon="appstore", Sort=1, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 14, ParentId = 13, Path="/media/list", Name="广告列表", Key="media.list", Icon="snippets", Sort=1, Enabled=true, CreateTime = DateTime.Now },
+
+            new SystemMenu() { Id = 15, ParentId = 0, Path="/site", Name="站点管理", Key="site", Icon="appstore", Sort=1, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 16, ParentId = 15, Path="/site/list", Name="站点列表", Key="site.list", Icon="snippets", Sort=1, Enabled=true, CreateTime = DateTime.Now },
+            new SystemMenu() { Id = 17, ParentId = 15, Path="/site/screen", Name="设备管理", Key="site.screen", Icon="snippets", Sort=1, Enabled=true, CreateTime = DateTime.Now }
 
             
         ];

+ 0 - 1
Platform/AI.Platform.Tool/Entity/System/SystemRoleMenu.cs

@@ -46,6 +46,5 @@ public class SystemRoleMenuSeedData : ISeedData<SystemRoleMenu>
             new SystemRoleMenu() { RoleId= 1, MenuId=15},
             new SystemRoleMenu() { RoleId= 1, MenuId=16},
             new SystemRoleMenu() { RoleId= 1, MenuId=17},
-            new SystemRoleMenu() { RoleId= 2, MenuId=1},
         ];
 }

+ 3 - 4
Platform/AI.Platform.Tool/Entity/System/SystemUser.cs

@@ -146,16 +146,15 @@ public class SystemUserSeedData : ISeedData<SystemUser>
     public IEnumerable<SystemUser> Generate()
         =>
         [
-            new SystemUser() { Id = 1, Account = "admin", Password = "e10adc3949ba59abbe56e057f20f883e", Enabled=true, Avatar="/assets/default_avatar.png", NickName="超级管理员", Mobile="13789756548", AreaIds="37,82,85", Email="asdfkuhuasd@163.com", RoleId=1, DepartmentId=1, CreateTime = DateTime.Now },
-            new SystemUser() { Id = 2, Account = "david111", Password = "e10adc3949ba59abbe56e057f20f883e", Enabled=true, Avatar="/assets/default_avatar.png",  NickName="用户1", Mobile="15364878984", Email="12312323@sina.com", RoleId=2, DepartmentId=1,CreateTime = DateTime.Now },
+            new SystemUser() { Id = 1, Account = "admin", Password = "e10adc3949ba59abbe56e057f20f883e", Enabled=true, Avatar="/assets/default_avatar.png", NickName="超级管理员", Mobile="13789756548", AreaIds="37,82,85", Email="asdfkuhuasd@163.com", RoleId=1, DepartmentId=1, CreateTime = DateTime.Now }
         ];
 }
 
 public class LoginInput
 {
-    [Required] public string Account { get; set; } = "admin";
+    [Required] public string Account { get; set; }
 
-    [Required] public string Password { get; set; } = "123456";
+    [Required] public string Password { get; set; }
 
     public string Mobile { get; set; }
 

+ 1 - 1
Platform/AI.Platform.Web/AI.Platform.Web.csproj.user

@@ -5,7 +5,7 @@
   </PropertyGroup>
   <PropertyGroup>
     <ActiveDebugProfile>http</ActiveDebugProfile>
-    <NameOfLastUsedPublishProfile>FolderProfile</NameOfLastUsedPublishProfile>
+    <NameOfLastUsedPublishProfile>C:\myFiles\code\dotNetCoreProjects\AI\Platform\AI.Platform.Web\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
     <Controller_SelectedScaffolderID>MvcControllerEmptyScaffolder</Controller_SelectedScaffolderID>
     <Controller_SelectedScaffolderCategoryPath>root/Common/MVC/Controller</Controller_SelectedScaffolderCategoryPath>
   </PropertyGroup>

+ 2 - 2
Platform/AI.Platform.Web/Components/Pages/Account/Login/Login.razor

@@ -9,12 +9,12 @@
             <Tabs ActiveKey="@context.LoginType">
                 <TabPane Key="1" Tab="账号登录">
                     <FormItem>
-                        <AntDesign.Input Placeholder="账号: admin" Size="InputSize.Large" @bind-Value="@context.Account">
+                        <AntDesign.Input Placeholder="账号" Size="InputSize.Large" @bind-Value="@context.Account">
                             <Prefix><Icon Type="user" /></Prefix>
                         </AntDesign.Input>
                     </FormItem>
                     <FormItem>
-                        <AntDesign.Input Placeholder="密码: 123456" Size="InputSize.Large" @bind-Value="@context.Password" Type="InputType.Password">
+                        <AntDesign.Input Placeholder="密码" Size="InputSize.Large" @bind-Value="@context.Password" Type="InputType.Password">
                             <Prefix><Icon Type="lock" /></Prefix>
                         </AntDesign.Input>
                     </FormItem>

+ 6 - 1
Platform/AI.Platform.Web/Components/Pages/Management/User/User.razor

@@ -85,8 +85,13 @@
     //     </Select>
     // </FormItem>
 
-    private void StartEdit(SystemUser row)
+    private async void StartEdit(SystemUser row)
     {
+        Roles = _role.GetList(x => x.Enabled == true);
+
+        Departments = _department.GetList(x => x.Enabled == true);
+        await searchSitesAsync();
+
         var data = row ?? new();
         ModalRef<bool> modalRef = default;
         IForm form = default;

+ 298 - 297
Platform/AI.Platform.Web/Components/Pages/Management/User/User.razor.cs

@@ -1,103 +1,104 @@
-using AI.Platform.Core;
-using AI.Platform.Core.Entity.Site;
-using AI.Platform.Core.Util;
-using AI.Platform.Page.Pages.Site;
-using AI.Platform.Page.Pages.Site.Model;
-using AI.Platform.Web.Components.Pages.Management.User.Model;
-using AntDesign;
-using AntDesign.TableModels;
-using Microsoft.AspNetCore.Components;
-using Microsoft.JSInterop;
-using SqlSugar;
-using System.Data.Common;
-using SiteInfo = AI.Platform.Web.Components.Pages.Management.User.Model.SiteInfo;
-
-namespace AI.Platform.Web.Components.Pages.Management.User;
-
-public partial class User
-{
-    protected override async Task OnAfterRenderAsync(bool firstRender)
-    {
-        if (firstRender)
-        {
-            await NavigationManager.RedirectLogin(IJSRuntime);
-            //await Query();
-
-            var area = await _area.AsQueryable()
-                .OrderBy(x => x.Sort)
-                .ToTreeAsync(x => x.Children, x => x.ParentCode, 0, x => x.Id);
-            Areas = area.Select(ConvertToAreaItem).ToList();
-
-            Roles = _role.GetList(x => x.Enabled == true);
-
-            Departments = _department.GetList(x => x.Enabled == true);
-
-            await searchSitesAsync();
-        }
-    }
-
-    private CascaderNode ConvertToAreaItem(SystemArea area)
-    {
-        return new CascaderNode
-        {
-            Value = area.Id.ToString(),
-            Label = area.AreaName,
-            Children = area.Children?.Select(ConvertToAreaItem).ToArray()
-        };
-    }
-
-    /// <summary>
-    /// 查
-    /// </summary>
-    /// <returns></returns>
-    private async Task Query()
-    {
-        Loading = true;
-
-        RefAsync<int> total = 0;
-        var list = await _repository.AsQueryable()
-            .LeftJoin<SystemRole>((c, u) => c.RoleId == u.Id)
-            .LeftJoin<SystemDepartment>((c, u, d) => c.DepartmentId == d.Id)
-            .WhereIF(!string.IsNullOrWhiteSpace(Q_Account), (c, u, d) => c.Account.Contains(Q_Account))
-            .OrderByDescending((c, u, d) => c.Id)
-            .Select((c, u, d) => new SystemUser {
-                Id = c.Id,
-                Avatar = c.Avatar,
-                Account = c.Account,
-                NickName = c.NickName,
-                RoleId = c.RoleId,
-                RoleName = u.Name,
-                DepartmentId = c.DepartmentId,
-                DepartmentName = d.Name,
-                Mobile = c.Mobile,
-                Email = c.Email,
-                Address = c.Address,
-                Enabled = c.Enabled,
-                Signature = c.Signature,
-                AreaIds = c.AreaIds,
-                CreateTime = c.CreateTime
-            })
-            .ToPageListAsync(Pi, Ps, total);
-        list.ForEach(x => {
-            if (!string.IsNullOrWhiteSpace(x.AreaIds))
-            {
-                var ids = x.AreaIds?.Split(',');
-                x.LastAreadId = ids[^1].Trim();
-
-                var area = _area.AsQueryable()
-                    .Where(item => SqlFunc.SplitIn(x.AreaIds, item.Id.ToString()))
-                    .Select(item => item.AreaName)
-                    .ToArray();
-                x.Area = $"{string.Join(" ", area)} {x.Address}";
-            }
-        });
-        Total = total.Value;
-        DataSource = list;
-
-        Loading = false;
-    }
-
-
+using AI.Platform.Core;
+using AI.Platform.Core.Entity.Site;
+using AI.Platform.Core.Util;
+using AI.Platform.Page.Pages.Site;
+using AI.Platform.Page.Pages.Site.Model;
+using AI.Platform.Web.Components.Pages.Management.User.Model;
+using AntDesign;
+using AntDesign.TableModels;
+using Microsoft.AspNetCore.Components;
+using Microsoft.JSInterop;
+using SqlSugar;
+using System.Data.Common;
+using SiteInfo = AI.Platform.Web.Components.Pages.Management.User.Model.SiteInfo;
+
+namespace AI.Platform.Web.Components.Pages.Management.User;
+
+public partial class User
+{
+    protected override async Task OnAfterRenderAsync(bool firstRender)
+    {
+        if (firstRender)
+        {
+            await NavigationManager.RedirectLogin(IJSRuntime);
+            //await Query();
+
+            var area = await _area.AsQueryable()
+                .OrderBy(x => x.Sort)
+                .ToTreeAsync(x => x.Children, x => x.ParentCode, 0, x => x.Id);
+            Areas = area.Select(ConvertToAreaItem).ToList();
+
+            Roles = _role.GetList(x => x.Enabled == true);
+
+            Departments = _department.GetList(x => x.Enabled == true);
+
+            await searchSitesAsync();
+        }
+    }
+
+    private CascaderNode ConvertToAreaItem(SystemArea area)
+    {
+        return new CascaderNode
+        {
+            Value = area.Id.ToString(),
+            Label = area.AreaName,
+            Children = area.Children?.Select(ConvertToAreaItem).ToArray()
+        };
+    }
+
+    /// <summary>
+    /// 查
+    /// </summary>
+    /// <returns></returns>
+    private async Task Query()
+    {
+        Loading = true;
+
+        RefAsync<int> total = 0;
+        var list = await _repository.AsQueryable()
+            .LeftJoin<SystemRole>((c, u) => c.RoleId == u.Id)
+            .LeftJoin<SystemDepartment>((c, u, d) => c.DepartmentId == d.Id)
+            .WhereIF(!string.IsNullOrWhiteSpace(Q_Account), (c, u, d) => c.Account.Contains(Q_Account))
+            .OrderByDescending((c, u, d) => c.Id)
+            .Select((c, u, d) => new SystemUser {
+                Id = c.Id,
+                Avatar = c.Avatar,
+                Account = c.Account,
+                NickName = c.NickName,
+                RoleId = c.RoleId,
+                RoleName = u.Name,
+                DepartmentId = c.DepartmentId,
+                DepartmentName = d.Name,
+                Mobile = c.Mobile,
+                Email = c.Email,
+                Address = c.Address,
+                Enabled = c.Enabled,
+                Signature = c.Signature,
+                AreaIds = c.AreaIds,
+                CreateTime = c.CreateTime
+            })
+            .ToPageListAsync(Pi, Ps, total);
+        list.ForEach(x => {
+            if (!string.IsNullOrWhiteSpace(x.AreaIds))
+            {
+                var ids = x.AreaIds?.Split(',');
+                x.LastAreadId = ids[^1].Trim();
+
+                var area = _area.AsQueryable()
+                    .Where(item => SqlFunc.SplitIn(x.AreaIds, item.Id.ToString()))
+                    .Select(item => item.AreaName)
+                    .ToArray();
+                x.Area = $"{string.Join(" ", area)} {x.Address}";
+            }
+        });
+        Total = total.Value;
+        DataSource = list;
+
+        await searchSitesAsync();
+        Loading = false;
+    }
+
+
     private async Task searchSitesAsync()
     {
         if(Global.CurrentUser.Account == "admin")
@@ -140,204 +141,204 @@ public partial class User
                 .ToListAsync();
         }
         
-    }
-
-    /// <summary>
-    /// 增/改
-    /// </summary>
-    /// <param name="data"></param>
-    /// <returns></returns>
-    private async Task<bool> InsertOrUpdate(SystemUser data)
-    {
-        if (data.Id == 0)
-        {
-            if (data.Password != data.ConfirmPassword)
-            {
-                MessageService.Error("两次输入密码不一致");
-                return false;
-            }
-
-            if (await _repository.AsQueryable().AnyAsync(x => x.Account.ToLower() == data.Account.ToLower() || x.NickName.ToLower() == data.NickName.ToLower()))
-            {
-                MessageService.Error("该账号名已存在");
-                return false;
-            }
-            data.Password = Crypto.MD5Encrypt(data.Password);
-            return await _repository.AsInsertable(data).ExecuteCommandAsync() > 0;
-        }
-        else
-        {
-            if (await _repository.AsQueryable().AnyAsync(x => x.NickName.ToLower() == data.NickName.ToLower() && x.Id != data.Id))
-            {
-                MessageService.Error("该账号名已存在");
-                return false;
-            }
-
-            var res = await _repository.AsUpdateable()
-                .SetColumns(x => x.NickName == data.NickName)
-                .SetColumns(x => x.RoleId == data.RoleId)
-                .SetColumns(x => x.DepartmentId == data.DepartmentId)
-                .SetColumns(x => x.Mobile == data.Mobile)
-                .SetColumns(x => x.Email == data.Email)
-                .SetColumns(x => x.Address == data.Address)
-                .SetColumns(x => x.Enabled == data.Enabled)
-                .SetColumns(x => x.Signature == data.Signature)
-                .SetColumns(x => x.AreaIds == AreadIds)
-                .SetColumns(x => x.SiteId == data.SiteId)
-                .Where(x => x.Id == data.Id)
-                .ExecuteCommandAsync() > 0;
-            return res;
-        }
-    }
-
-    /// <summary>
-    /// 删除
-    /// </summary>
-    /// <param name="row"></param>
-    /// <returns></returns>
-    private async Task Delete(SystemUser row)
-    {
-        if (row.Account.ToLower().Contains("admin"))
-        {
-            MessageService.Error("不能删除超级管理员");
-            return;
-        }
-
-        if (!await Comfirm($"确认删除 [{row.Account}] ?")) return;
-
-        var flag = await _repository.AsUpdateable()
-            .SetColumns(x => x.IsDelete == true)
-            .Where(x => x.Id == row.Id)
-            .ExecuteCommandAsync() > 0;
-
-        _Table.ReloadData(Pi, Ps);
-    }
-
-    /// <summary>
-    /// 重置查询
-    /// </summary>
-    private async Task ResetQuery()
-    {
-        Q_Account = string.Empty;
-        Pi = 1;
-        await Query();
-    }
-
-    /// <summary>
-    /// 表格使用它来初始化,不要在页面初始化时调用,否则会导致重复加载
-    /// </summary>
-    /// <param name="query"></param>
-    /// <returns></returns>
-    private async Task OnChange(QueryModel<SystemUser> query)
-        => await Query();
-
-    private async Task Search()
-    {
-        Pi = 1;
-        await Query();
-    }
-
-    private void OnChange(CascaderNode[] selectedNodes)
-    {
-        AreadIds = string.Join(",", selectedNodes.Select(x => x.Value));
-    }
-
-    private void CheckedChanged(SystemUser row)
-    {
-        _repository.AsUpdateable()
-            .SetColumns(x => x.Enabled == row.Enabled)
-            .Where(x => x.Id == row.Id)
-            .ExecuteCommand();
-        //_table.ReloadData();
-    }
-
-    /// <summary>
-    /// 注入实例
-    /// </summary>
-    [Inject] private SqlSugarRepository<SystemUser> _repository { get; set; }
-
+    }
+
+    /// <summary>
+    /// 增/改
+    /// </summary>
+    /// <param name="data"></param>
+    /// <returns></returns>
+    private async Task<bool> InsertOrUpdate(SystemUser data)
+    {
+        if (data.Id == 0)
+        {
+            if (data.Password != data.ConfirmPassword)
+            {
+                MessageService.Error("两次输入密码不一致");
+                return false;
+            }
+
+            if (await _repository.AsQueryable().AnyAsync(x => x.Account.ToLower() == data.Account.ToLower() || x.NickName.ToLower() == data.NickName.ToLower()))
+            {
+                MessageService.Error("该账号名已存在");
+                return false;
+            }
+            data.Password = Crypto.MD5Encrypt(data.Password);
+            return await _repository.AsInsertable(data).ExecuteCommandAsync() > 0;
+        }
+        else
+        {
+            if (await _repository.AsQueryable().AnyAsync(x => x.NickName.ToLower() == data.NickName.ToLower() && x.Id != data.Id))
+            {
+                MessageService.Error("该账号名已存在");
+                return false;
+            }
+
+            var res = await _repository.AsUpdateable()
+                .SetColumns(x => x.NickName == data.NickName)
+                .SetColumns(x => x.RoleId == data.RoleId)
+                .SetColumns(x => x.DepartmentId == data.DepartmentId)
+                .SetColumns(x => x.Mobile == data.Mobile)
+                .SetColumns(x => x.Email == data.Email)
+                .SetColumns(x => x.Address == data.Address)
+                .SetColumns(x => x.Enabled == data.Enabled)
+                .SetColumns(x => x.Signature == data.Signature)
+                .SetColumns(x => x.AreaIds == AreadIds)
+                .SetColumns(x => x.SiteId == data.SiteId)
+                .Where(x => x.Id == data.Id)
+                .ExecuteCommandAsync() > 0;
+            return res;
+        }
+    }
+
+    /// <summary>
+    /// 删除
+    /// </summary>
+    /// <param name="row"></param>
+    /// <returns></returns>
+    private async Task Delete(SystemUser row)
+    {
+        if (row.Account.ToLower().Contains("admin"))
+        {
+            MessageService.Error("不能删除超级管理员");
+            return;
+        }
+
+        if (!await Comfirm($"确认删除 [{row.Account}] ?")) return;
+
+        var flag = await _repository.AsUpdateable()
+            .SetColumns(x => x.IsDelete == true)
+            .Where(x => x.Id == row.Id)
+            .ExecuteCommandAsync() > 0;
+
+        _Table.ReloadData(Pi, Ps);
+    }
+
+    /// <summary>
+    /// 重置查询
+    /// </summary>
+    private async Task ResetQuery()
+    {
+        Q_Account = string.Empty;
+        Pi = 1;
+        await Query();
+    }
+
+    /// <summary>
+    /// 表格使用它来初始化,不要在页面初始化时调用,否则会导致重复加载
+    /// </summary>
+    /// <param name="query"></param>
+    /// <returns></returns>
+    private async Task OnChange(QueryModel<SystemUser> query)
+        => await Query();
+
+    private async Task Search()
+    {
+        Pi = 1;
+        await Query();
+    }
+
+    private void OnChange(CascaderNode[] selectedNodes)
+    {
+        AreadIds = string.Join(",", selectedNodes.Select(x => x.Value));
+    }
+
+    private void CheckedChanged(SystemUser row)
+    {
+        _repository.AsUpdateable()
+            .SetColumns(x => x.Enabled == row.Enabled)
+            .Where(x => x.Id == row.Id)
+            .ExecuteCommand();
+        //_table.ReloadData();
+    }
+
+    /// <summary>
+    /// 注入实例
+    /// </summary>
+    [Inject] private SqlSugarRepository<SystemUser> _repository { get; set; }
+
     /// <summary>
     /// 站点信息
-    /// </summary>
-    [Inject] SqlSugarRepository<SiteEntity> _SiteRepository { get; set; }
-    /// <summary>
-    /// 
-    /// </summary>
-    [Inject] private SqlSugarRepository<SystemRole> _role { get; set; }
-    /// <summary>
-    /// 
-    /// </summary>
-    [Inject] private SqlSugarRepository<SystemArea> _area { get; set; }
-    /// <summary>
-    /// 
-    /// </summary>
-    [Inject] private SqlSugarRepository<SystemDepartment> _department { get; set; }
-    /// <summary>
-    /// 
-    /// </summary>
-    [Inject] NavigationManager NavigationManager { get; set; }
-    /// <summary>
-    /// 
-    /// </summary>
-    [Inject] IJSRuntime IJSRuntime { get; set; }
-    /// <summary>
-    /// 账号
-    /// </summary>
-    private string Q_Account { get; set; }
-    /// <summary>
-    /// 
-    /// </summary>
-    private string AreadIds { get; set; }
-    /// <summary>
-    /// 
-    /// </summary>
-    private List<CascaderNode> Areas { get; set; } = new List<CascaderNode>();
-    /// <summary>
-    ///
-    /// </summary>
-    private ITable _Table;
-    /// <summary>
-    ///
-    /// </summary>
-    private IEnumerable<SystemUser> SelectedRows = [];
-    /// <summary>
-    ///
-    /// </summary>
-    private List<SystemUser> DataSource;
-    /// <summary>
-    ///
-    /// </summary>
-    private int Pi = 1;
-    /// <summary>
-    ///
-    /// </summary>
-    private int Ps = 20;
-    /// <summary>
-    ///
-    /// </summary>
-    private int Total;
-    /// <summary>
-    ///
-    /// </summary>
-    private List<SystemRole> Roles;
-    /// <summary>
-    ///
-    /// </summary>
-    private List<SystemDepartment> Departments;
-
+    /// </summary>
+    [Inject] SqlSugarRepository<SiteEntity> _SiteRepository { get; set; }
+    /// <summary>
+    /// 
+    /// </summary>
+    [Inject] private SqlSugarRepository<SystemRole> _role { get; set; }
+    /// <summary>
+    /// 
+    /// </summary>
+    [Inject] private SqlSugarRepository<SystemArea> _area { get; set; }
+    /// <summary>
+    /// 
+    /// </summary>
+    [Inject] private SqlSugarRepository<SystemDepartment> _department { get; set; }
+    /// <summary>
+    /// 
+    /// </summary>
+    [Inject] NavigationManager NavigationManager { get; set; }
+    /// <summary>
+    /// 
+    /// </summary>
+    [Inject] IJSRuntime IJSRuntime { get; set; }
+    /// <summary>
+    /// 账号
+    /// </summary>
+    private string Q_Account { get; set; }
+    /// <summary>
+    /// 
+    /// </summary>
+    private string AreadIds { get; set; }
+    /// <summary>
+    /// 
+    /// </summary>
+    private List<CascaderNode> Areas { get; set; } = new List<CascaderNode>();
+    /// <summary>
+    ///
+    /// </summary>
+    private ITable _Table;
+    /// <summary>
+    ///
+    /// </summary>
+    private IEnumerable<SystemUser> SelectedRows = [];
+    /// <summary>
+    ///
+    /// </summary>
+    private List<SystemUser> DataSource;
+    /// <summary>
+    ///
+    /// </summary>
+    private int Pi = 1;
+    /// <summary>
+    ///
+    /// </summary>
+    private int Ps = 20;
+    /// <summary>
+    ///
+    /// </summary>
+    private int Total;
+    /// <summary>
+    ///
+    /// </summary>
+    private List<SystemRole> Roles;
+    /// <summary>
+    ///
+    /// </summary>
+    private List<SystemDepartment> Departments;
+
     /// <summary>
     /// 站点
-    /// </summary>
-    private List<SiteInfo> Sites;
-
-    /// <summary>
-    ///
-    /// </summary>
-    private bool Loading = false;
-    /// <summary>
-    ///
-    /// </summary>
-    Func<PaginationTotalContext, string> ShowTotal => x => $"总共 {Total} 条";
-}
-
-
+    /// </summary>
+    private List<SiteInfo> Sites;
+
+    /// <summary>
+    ///
+    /// </summary>
+    private bool Loading = false;
+    /// <summary>
+    ///
+    /// </summary>
+    Func<PaginationTotalContext, string> ShowTotal => x => $"总共 {Total} 条";
+}
+
+

+ 18 - 18
Platform/AI.Platform.Web/Properties/PublishProfiles/FolderProfile.pubxml

@@ -1,19 +1,19 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
-<Project>
-  <PropertyGroup>
-    <DeleteExistingFiles>true</DeleteExistingFiles>
-    <ExcludeApp_Data>false</ExcludeApp_Data>
-    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
-    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
-    <LastUsedPlatform>Any CPU</LastUsedPlatform>
-    <PublishProvider>FileSystem</PublishProvider>
-    <PublishUrl>C:\cw\fabu</PublishUrl>
-    <WebPublishMethod>FileSystem</WebPublishMethod>
-    <_TargetId>Folder</_TargetId>
-    <SiteUrlToLaunchAfterPublish />
-    <TargetFramework>net10.0</TargetFramework>
-    <ProjectGuid>22cdb11a-e496-4644-b5ea-05b6b27ac1de</ProjectGuid>
-    <SelfContained>false</SelfContained>
-  </PropertyGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
+<Project>
+  <PropertyGroup>
+    <DeleteExistingFiles>true</DeleteExistingFiles>
+    <ExcludeApp_Data>false</ExcludeApp_Data>
+    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
+    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+    <LastUsedPlatform>Any CPU</LastUsedPlatform>
+    <PublishProvider>FileSystem</PublishProvider>
+    <PublishUrl>C:\myFiles\app\ai\media</PublishUrl>
+    <WebPublishMethod>FileSystem</WebPublishMethod>
+    <_TargetId>Folder</_TargetId>
+    <SiteUrlToLaunchAfterPublish />
+    <TargetFramework>net10.0</TargetFramework>
+    <ProjectGuid>22cdb11a-e496-4644-b5ea-05b6b27ac1de</ProjectGuid>
+    <SelfContained>false</SelfContained>
+  </PropertyGroup>
 </Project>

+ 8 - 8
Platform/AI.Platform.Web/Properties/PublishProfiles/FolderProfile.pubxml.user

@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
-<Project>
-  <PropertyGroup>
-    <_PublishTargetUrl>C:\cw\fabu</_PublishTargetUrl>
-    <History>True|2025-12-25T10:16:18.6992882Z||;True|2025-08-25T10:08:14.1232117+08:00||;True|2025-08-22T16:26:40.0147072+08:00||;True|2025-08-22T16:25:57.5185136+08:00||;True|2025-04-02T14:51:07.1200071+08:00||;False|2025-04-02T14:50:55.4938980+08:00||;True|2025-04-01T08:36:14.9112624+08:00||;True|2025-04-01T08:28:18.4167044+08:00||;True|2025-03-20T15:50:57.5209888+08:00||;False|2025-03-20T15:50:45.6177809+08:00||;True|2025-03-20T14:41:59.3232972+08:00||;True|2025-03-20T11:40:01.9580488+08:00||;True|2025-03-19T17:21:53.3554807+08:00||;True|2025-03-19T13:14:14.4450027+08:00||;True|2025-03-19T13:07:38.4478249+08:00||;False|2025-03-19T13:07:29.8280515+08:00||;True|2025-03-19T12:25:53.1978222+08:00||;False|2025-03-19T12:25:42.7434616+08:00||;True|2025-03-19T11:52:55.8870021+08:00||;</History>
-    <LastFailureDetails />
-  </PropertyGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
+<Project>
+  <PropertyGroup>
+    <_PublishTargetUrl>C:\myFiles\app\ai\media</_PublishTargetUrl>
+    <History>True|2026-01-30T07:53:57.4055289Z||;True|2025-12-25T18:16:18.6992882+08:00||;True|2025-08-25T10:08:14.1232117+08:00||;True|2025-08-22T16:26:40.0147072+08:00||;True|2025-08-22T16:25:57.5185136+08:00||;True|2025-04-02T14:51:07.1200071+08:00||;False|2025-04-02T14:50:55.4938980+08:00||;True|2025-04-01T08:36:14.9112624+08:00||;True|2025-04-01T08:28:18.4167044+08:00||;True|2025-03-20T15:50:57.5209888+08:00||;False|2025-03-20T15:50:45.6177809+08:00||;True|2025-03-20T14:41:59.3232972+08:00||;True|2025-03-20T11:40:01.9580488+08:00||;True|2025-03-19T17:21:53.3554807+08:00||;True|2025-03-19T13:14:14.4450027+08:00||;True|2025-03-19T13:07:38.4478249+08:00||;False|2025-03-19T13:07:29.8280515+08:00||;True|2025-03-19T12:25:53.1978222+08:00||;False|2025-03-19T12:25:42.7434616+08:00||;True|2025-03-19T11:52:55.8870021+08:00||;</History>
+    <LastFailureDetails />
+  </PropertyGroup>
 </Project>