DFS_Shuo_Chen il y a 2 semaines
Parent
commit
79298401be

+ 49 - 0
EasyTemplate.Page/Components/IdSelector/BoardIdSelector.razor

@@ -0,0 +1,49 @@
+<div class="modal-backdrop fade show" style="background-color: rgba(0,0,0,0.5);"></div>
+<div class="modal fade show" tabindex="-1" style="display: block;">
+    <div class="modal-dialog modal-xl">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">选择主板ID (1-72)</h5>
+                <button type="button" class="btn-close" @onclick="OnCancel"></button>
+            </div>
+            <div class="modal-body">
+                <div class="container-fluid">
+                    <div class="row">
+                        @for (int i = 1; i <= 72; i++)
+                        {
+                            var isUsed = usedBoardIds.Contains(i);
+                            var item = i;
+                            <div class="col-1 mb-2">
+                                <button class="btn w-100 @(isUsed ? "btn-secondary disabled" : "btn-outline-primary")" 
+                                        disabled="@isUsed"
+                                        @onclick="() => OnSelect(item)"
+                                        style="font-size: 0.7rem; padding: 0.25rem 0.5rem;">
+                                    @item
+                                </button>
+                            </div>
+                        }
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" @onclick="OnCancel">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+@code {
+    [Parameter] public List<int> usedBoardIds { get; set; } = new();
+    [Parameter] public EventCallback<int> OnSelected { get; set; }
+    [Parameter] public EventCallback OnCancelled { get; set; }
+
+    private async Task OnSelect(int id)
+    {
+        await OnSelected.InvokeAsync(id);
+    }
+
+    private async Task OnCancel()
+    {
+        await OnCancelled.InvokeAsync();
+    }
+}

+ 48 - 0
EasyTemplate.Page/Components/IdSelector/EngineIdSelector.razor

@@ -0,0 +1,48 @@
+<div class="modal-backdrop fade show" style="background-color: rgba(0,0,0,0.5);"></div>
+<div class="modal fade show" tabindex="-1" style="display: block;">
+    <div class="modal-dialog modal-lg">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">选择油机ID (1-36)</h5>
+                <button type="button" class="btn-close" @onclick="OnCancel"></button>
+            </div>
+            <div class="modal-body">
+                <div class="container-fluid">
+                    <div class="row">
+                        @for (int i = 1; i <= 36; i++)
+                        {
+                            var isUsed = usedEngineIds.Contains(i);
+                            var item = i;
+                            <div class="col-2 mb-2">
+                                <button class="btn w-100 @(isUsed ? "btn-secondary disabled" : "btn-outline-primary")" 
+                                        disabled="@isUsed"
+                                        @onclick="() => OnSelect(item)">
+                                    @item
+                                </button>
+                            </div>
+                        }
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" @onclick="OnCancel">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+@code {
+    [Parameter] public List<int> usedEngineIds { get; set; } = new();
+    [Parameter] public EventCallback<int> OnSelected { get; set; }
+    [Parameter] public EventCallback OnCancelled { get; set; }
+
+    private async Task OnSelect(int id)
+    {
+        await OnSelected.InvokeAsync(id);
+    }
+
+    private async Task OnCancel()
+    {
+        await OnCancelled.InvokeAsync();
+    }
+}

+ 49 - 0
EasyTemplate.Page/Components/IdSelector/NozzleIdSelector.razor

@@ -0,0 +1,49 @@
+<div class="modal-backdrop fade show" style="background-color: rgba(0,0,0,0.5);"></div>
+<div class="modal fade show" tabindex="-1" style="display: block;">
+    <div class="modal-dialog modal-xl">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">选择油枪ID (1-144)</h5>
+                <button type="button" class="btn-close" @onclick="OnCancel"></button>
+            </div>
+            <div class="modal-body">
+                <div class="container-fluid">
+                    <div class="row">
+                        @for (int i = 1; i <= 144; i++)
+                        {
+                            var isUsed = usedNozzleIds.Contains(i);
+                            var item = i;
+                            <div class="col-1 mb-1">
+                                <button class="btn w-100 @(isUsed ? "btn-secondary disabled" : "btn-outline-primary")" 
+                                        disabled="@isUsed"
+                                        @onclick="() => OnSelect(item)"
+                                        style="font-size: 0.6rem; padding: 0.15rem 0.3rem;">
+                                    @item
+                                </button>
+                            </div>
+                        }
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" @onclick="OnCancel">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+@code {
+    [Parameter] public List<int> usedNozzleIds { get; set; } = new();
+    [Parameter] public EventCallback<int> OnSelected { get; set; }
+    [Parameter] public EventCallback OnCancelled { get; set; }
+
+    private async Task OnSelect(int id)
+    {
+        await OnSelected.InvokeAsync(id);
+    }
+
+    private async Task OnCancel()
+    {
+        await OnCancelled.InvokeAsync();
+    }
+}

+ 128 - 6
EasyTemplate.Page/Pages/EngineSetting/UnifiedSetting.razor

@@ -1,6 +1,7 @@
 @page "/setting/unifiedsetting"
 @using EasyTemplate.Service
 @using EasyTemplate.Tool.Entity.App
+@using EasyTemplate.Page.Components.IdSelector
 @inject NozzleService nozzleService
 @inject IJSRuntime JSRuntime
 
@@ -57,8 +58,9 @@
                         </li>
                         @for (int i = 1; i <= totalPages_Engine; i++)
                         {
+                            var item = i;
                             <li class="page-item @(currentPage_Engine == i ? "active" : "")">
-                                <a class="page-link" @onclick="() => ChangePage_Engine(i)">@i</a>
+                                <a class="page-link" @onclick="() => ChangePage_Engine(item)">@item</a>
                             </li>
                         }
                         <li class="page-item @(currentPage_Engine == totalPages_Engine ? "disabled" : "")">
@@ -120,8 +122,9 @@
                         </li>
                         @for (int i = 1; i <= totalPages_Board; i++)
                         {
+                            var item = i;
                             <li class="page-item @(currentPage_Board == i ? "active" : "")">
-                                <a class="page-link" @onclick="() => ChangePage_Board(i)">@i</a>
+                                <a class="page-link" @onclick="() => ChangePage_Board(item)">@item</a>
                             </li>
                         }
                         <li class="page-item @(currentPage_Board == totalPages_Board ? "disabled" : "")">
@@ -175,8 +178,9 @@
                         </li>
                         @for (int i = 1; i <= totalPages_Nozzle; i++)
                         {
+                            var item = i;
                             <li class="page-item @(currentPage_Nozzle == i ? "active" : "")">
-                                <a class="page-link" @onclick="() => ChangePage_Nozzle(i)">@i</a>
+                                <a class="page-link" @onclick="() => ChangePage_Nozzle(item)">@item</a>
                             </li>
                         }
                         <li class="page-item @(currentPage_Nozzle == totalPages_Nozzle ? "disabled" : "")">
@@ -200,7 +204,12 @@
             <div class="modal-body">
                 <div class="mb-3">
                     <label class="form-label">油机ID</label>
-                    <input class="form-control" @bind="currentEngine.EngineId" disabled="@isEngineEditMode" />
+                    <div class="input-group">
+                        <input class="form-control" @bind="currentEngine.EngineId" disabled="@isEngineEditMode" />
+                        <button class="btn btn-outline-secondary" type="button" @onclick="ShowEngineIdSelector" disabled="@isEngineEditMode">
+                            <i class="fas fa-list"></i> 选择
+                        </button>
+                    </div>
                 </div>
                 <div class="mb-3">
                     <label class="form-label">工厂ID</label>
@@ -243,7 +252,12 @@
                 </div>
                 <div class="mb-3">
                     <label class="form-label">主板ID</label>
-                    <input class="form-control" @bind="currentBoard.BoardId" disabled="@isBoardEditMode" />
+                    <div class="input-group">
+                        <input class="form-control" @bind="currentBoard.BoardId" disabled="@isBoardEditMode" />
+                        <button class="btn btn-outline-secondary" type="button" @onclick="ShowBoardIdSelector" disabled="@isBoardEditMode">
+                            <i class="fas fa-list"></i> 选择
+                        </button>
+                    </div>
                 </div>
                 <div class="mb-3">
                     <label class="form-label">IP地址</label>
@@ -269,7 +283,12 @@
             <div class="modal-body">
                 <div class="mb-3">
                     <label class="form-label">油枪ID</label>
-                    <input type="number" class="form-control" @bind="currentNozzle.NozzleId" disabled="@isNozzleEditMode" />
+                    <div class="input-group">
+                        <input type="number" class="form-control" @bind="currentNozzle.NozzleId" disabled="@isNozzleEditMode" />
+                        <button class="btn btn-outline-secondary" type="button" @onclick="ShowNozzleIdSelector" disabled="@isNozzleEditMode">
+                            <i class="fas fa-list"></i> 选择
+                        </button>
+                    </div>
                 </div>
                 <div class="mb-3">
                     <label class="form-label">所属主板ID</label>
@@ -746,4 +765,107 @@
             }
         }
     }
+    
+    // ID选择器相关状态
+    private bool showEngineIdSelector = false;
+    private bool showBoardIdSelector = false;
+    private bool showNozzleIdSelector = false;
+    
+    // 显示ID选择器
+    private void ShowEngineIdSelector()
+    {
+        showEngineIdSelector = true;
+        StateHasChanged();
+    }
+    
+    private void ShowBoardIdSelector()
+    {
+        showBoardIdSelector = true;
+        StateHasChanged();
+    }
+    
+    private void ShowNozzleIdSelector()
+    {
+        showNozzleIdSelector = true;
+        StateHasChanged();
+    }
+    
+    // ID选择回调
+    private void OnEngineIdSelected(int id)
+    {
+        currentEngine.EngineId = id;
+        showEngineIdSelector = false;
+        StateHasChanged();
+    }
+    
+    private void OnBoardIdSelected(int id)
+    {
+        currentBoard.BoardId = id;
+        showBoardIdSelector = false;
+        StateHasChanged();
+    }
+    
+    private void OnNozzleIdSelected(int id)
+    {
+        currentNozzle.NozzleId = id;
+        showNozzleIdSelector = false;
+        StateHasChanged();
+    }
+    
+    // 取消选择
+    private void CancelEngineIdSelection()
+    {
+        showEngineIdSelector = false;
+        StateHasChanged();
+    }
+    
+    private void CancelBoardIdSelection()
+    {
+        showBoardIdSelector = false;
+        StateHasChanged();
+    }
+    
+    private void CancelNozzleIdSelection()
+    {
+        showNozzleIdSelector = false;
+        StateHasChanged();
+    }
+    
+    // 获取已使用的ID列表
+    private List<int> GetUsedEngineIds()
+    {
+        return engines?.Select(e => e.EngineId).ToList() ?? new List<int>();
+    }
+    
+    private List<int> GetUsedBoardIds()
+    {
+        return allBoards?.Select(b => b.BoardId).ToList() ?? new List<int>();
+    }
+    
+    private List<int> GetUsedNozzleIds()
+    {
+        return allNozzles?.Select(n => n.NozzleId).ToList() ?? new List<int>();
+    }
+}
+
+<!-- ID选择器组件 -->
+@if (showEngineIdSelector)
+{
+    <EngineIdSelector usedEngineIds="GetUsedEngineIds()" 
+                      OnSelected="OnEngineIdSelected" 
+                      OnCancelled="CancelEngineIdSelection" />
+}
+
+@if (showBoardIdSelector)
+{
+    <BoardIdSelector usedBoardIds="GetUsedBoardIds()" 
+                     OnSelected="OnBoardIdSelected" 
+                     OnCancelled="CancelBoardIdSelection" />
+}
+
+@if (showNozzleIdSelector)
+{
+    <NozzleIdSelector usedNozzleIds="GetUsedNozzleIds()" 
+                      OnSelected="OnNozzleIdSelected" 
+                      OnCancelled="CancelNozzleIdSelection" />
 }