wanshenmean
2026-03-13 58376d519aeb76ef78d38b737c0c57f8d982fb52
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
@page
@model EditModel
@{
    ViewData["Title"] = $"编辑实例 - {Model.Input.Id}";
}
 
<div class="row justify-content-center">
    <div class="col-lg-8">
        <div class="card shadow">
            <div class="card-header bg-warning text-dark">
                <h4 class="mb-0">
                    <i class="bi bi-pencil-square me-2"></i>编辑实例: @Model.Input.Id
                </h4>
            </div>
            <div class="card-body">
                @if (Model.IsRunning)
                {
                    <div class="alert alert-warning d-flex align-items-center" role="alert">
                        <i class="bi bi-exclamation-triangle-fill flex-shrink-0 me-2"></i>
                        <div>
                            <strong>警告:</strong> 实例正在运行中。某些配置修改可能需要重启实例才能生效。
                        </div>
                    </div>
                }
 
                <form method="post" id="editForm">
                    <div asp-validation-summary="ModelOnly" class="alert alert-danger" role="alert"></div>
 
                    <!-- 基本信息 -->
                    <h5 class="mb-3">
                        <i class="bi bi-info-circle me-2"></i>基本信息
                    </h5>
 
                    <div class="row mb-3">
                        <div class="col-md-6">
                            <label class="form-label">实例ID</label>
                            <input type="text" class="form-control" value="@Model.Input.Id" disabled />
                            <small class="text-muted">实例ID不可修改</small>
                        </div>
                        <div class="col-md-6">
                            <label asp-for="Input.Name" class="form-label required">实例名称</label>
                            <input asp-for="Input.Name" class="form-control" />
                            <span asp-validation-for="Input.Name" class="text-danger"></span>
                        </div>
                    </div>
 
                    <div class="row mb-3">
                        <div class="col-md-6">
                            <label asp-for="Input.PLCType" class="form-label required">PLC型号</label>
                            @if (Model.IsRunning)
                            {
                                <select asp-for="Input.PLCType" class="form-select" disabled>
                                    <option value="0">S7-200 Smart</option>
                                    <option value="1">S7-1200</option>
                                    <option value="2">S7-1500</option>
                                    <option value="3">S7-300</option>
                                    <option value="4">S7-400</option>
                                </select>
                                <small class="text-muted">运行中不可修改</small>
                            }
                            else
                            {
                                <select asp-for="Input.PLCType" class="form-select">
                                    <option value="0">S7-200 Smart</option>
                                    <option value="1">S7-1200</option>
                                    <option value="2">S7-1500</option>
                                    <option value="3">S7-300</option>
                                    <option value="4">S7-400</option>
                                </select>
                            }
                            <span asp-validation-for="Input.PLCType" class="text-danger"></span>
                        </div>
                        <div class="col-md-6">
                            <label asp-for="Input.Port" class="form-label required">监听端口</label>
                            @if (Model.IsRunning)
                            {
                                <input asp-for="Input.Port" class="form-control" type="number" min="1" max="65535" disabled />
                                <small class="text-muted">运行中不可修改</small>
                            }
                            else
                            {
                                <input asp-for="Input.Port" class="form-control" type="number" min="1" max="65535" />
                            }
                            <span asp-validation-for="Input.Port" class="text-danger"></span>
                        </div>
                    </div>
 
                    <div class="row mb-3">
                        <div class="col-md-6">
                            <label asp-for="Input.ActivationKey" class="form-label">HSL激活码</label>
                            <input asp-for="Input.ActivationKey" class="form-control" placeholder="可选" />
                            <span asp-validation-for="Input.ActivationKey" class="text-danger"></span>
                        </div>
                        <div class="col-md-6">
                            <label asp-for="Input.AutoStart" class="form-label">自动启动</label>
                            <div class="form-check mt-2">
                                <input asp-for="Input.AutoStart" class="form-check-input" />
                                <label asp-for="Input.AutoStart" class="form-check-label">
                                    服务器启动时自动启动此实例
                                </label>
                            </div>
                        </div>
                    </div>
 
                    <hr class="my-4">
 
                    <!-- 内存配置 -->
                    <div class="d-flex justify-content-between align-items-center mb-3">
                        <h5 class="mb-0">
                            <i class="bi bi-memory me-2"></i>内存配置
                        </h5>
                        <button type="button" class="btn btn-outline-secondary btn-sm" onclick="resetMemoryConfig()">
                            <i class="bi bi-arrow-counterclockwise me-1"></i>重置为默认值
                        </button>
                    </div>
 
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label asp-for="Input.MRegionSize" class="form-label">M区域大小</label>
                            <input asp-for="Input.MRegionSize" class="form-control" type="number" min="0" placeholder="1024" />
                            <span asp-validation-for="Input.MRegionSize" class="text-danger"></span>
                        </div>
                        <div class="col-md-4">
                            <label asp-for="Input.IRegionSize" class="form-label">I区域大小</label>
                            <input asp-for="Input.IRegionSize" class="form-control" type="number" min="0" placeholder="256" />
                            <span asp-validation-for="Input.IRegionSize" class="text-danger"></span>
                        </div>
                        <div class="col-md-4">
                            <label asp-for="Input.QRegionSize" class="form-label">Q区域大小</label>
                            <input asp-for="Input.QRegionSize" class="form-control" type="number" min="0" placeholder="256" />
                            <span asp-validation-for="Input.QRegionSize" class="text-danger"></span>
                        </div>
                    </div>
 
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label asp-for="Input.DBBlockCount" class="form-label">DB块数量</label>
                            <input asp-for="Input.DBBlockCount" class="form-control" type="number" min="0" placeholder="100" />
                            <span asp-validation-for="Input.DBBlockCount" class="text-danger"></span>
                        </div>
                        <div class="col-md-4">
                            <label asp-for="Input.DBBlockSize" class="form-label">DB块大小</label>
                            <input asp-for="Input.DBBlockSize" class="form-control" type="number" min="0" placeholder="1024" />
                            <span asp-validation-for="Input.DBBlockSize" class="text-danger"></span>
                        </div>
                        <div class="col-md-2">
                            <label asp-for="Input.TRegionCount" class="form-label">定时器数量</label>
                            <input asp-for="Input.TRegionCount" class="form-control" type="number" min="0" placeholder="64" />
                            <span asp-validation-for="Input.TRegionCount" class="text-danger"></span>
                        </div>
                        <div class="col-md-2">
                            <label asp-for="Input.CRegionCount" class="form-label">计数器数量</label>
                            <input asp-for="Input.CRegionCount" class="form-control" type="number" min="0" placeholder="64" />
                            <span asp-validation-for="Input.CRegionCount" class="text-danger"></span>
                        </div>
                    </div>
 
                    <hr class="my-4">
 
                    <!-- 提交按钮 -->
                    <div class="d-flex justify-content-between">
                        <a asp-page="/Index" class="btn btn-secondary">
                            <i class="bi bi-x-lg me-1"></i>取消
                        </a>
                        <button type="submit" class="btn btn-primary">
                            <i class="bi bi-check-lg me-1"></i>保存修改
                        </button>
                    </div>
                </form>
            </div>
        </div>
 
        <!-- 当前状态卡片 -->
        @if (Model.CurrentInstance != null)
        {
            <div class="card mt-4">
                <div class="card-header">
                    <h6 class="mb-0">
                        <i class="bi bi-activity me-2"></i>当前状态
                    </h6>
                </div>
                <div class="card-body">
                    <div class="row">
                        <div class="col-md-4">
                            <strong>状态:</strong>
                            <span class="badge @GetStatusBadgeClass(Model.CurrentInstance.Status)">
                                @GetStatusText(Model.CurrentInstance.Status)
                            </span>
                        </div>
                        <div class="col-md-4">
                            <strong>客户端数:</strong> @Model.CurrentInstance.ClientCount
                        </div>
                        <div class="col-md-4">
                            <strong>总请求数:</strong> @Model.CurrentInstance.TotalRequests
                        </div>
                    </div>
                </div>
            </div>
        }
    </div>
</div>
 
@{
    string GetStatusBadgeClass(WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus status)
    {
        return status switch
        {
            WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus.Running => "bg-success",
            WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus.Stopped => "bg-secondary",
            WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus.Starting => "bg-info",
            WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus.Stopping => "bg-warning",
            WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus.Error => "bg-danger",
            _ => "bg-secondary"
        };
    }
 
    string GetStatusText(WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus status)
    {
        return status switch
        {
            WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus.Running => "运行中",
            WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus.Stopped => "已停止",
            WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus.Starting => "启动中",
            WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus.Stopping => "停止中",
            WIDESEAWCS_S7Simulator.Core.Enums.InstanceStatus.Error => "错误",
            _ => status.ToString()
        };
    }
}
 
@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
 
<script>
    function resetMemoryConfig() {
        document.querySelector('#Input_MRegionSize').value = '1024';
        document.querySelector('#Input_IRegionSize').value = '256';
        document.querySelector('#Input_QRegionSize').value = '256';
        document.querySelector('#Input_DBBlockCount').value = '100';
        document.querySelector('#Input_DBBlockSize').value = '1024';
        document.querySelector('#Input_TRegionCount').value = '64';
        document.querySelector('#Input_CRegionCount').value = '64';
    }
</script>
}