From 737dec3c384f394fd6f9849b4480b697d1ba35d5 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期二, 17 三月 2026 09:16:44 +0800
Subject: [PATCH] chore: 提交所有当前改动

---
 Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Web/src/views/EditView.vue |   86 ++++++++++++++++++++++++++++++++++++-------
 1 files changed, 72 insertions(+), 14 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Web/src/views/EditView.vue b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Web/src/views/EditView.vue
index 043fe13..cf81d0f 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Web/src/views/EditView.vue
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Web/src/views/EditView.vue
@@ -1,4 +1,4 @@
-<template>
+锘�<template>
   <div>
     <div v-if="loading" class="loading-container">
       <el-icon class="loading-icon" :size="40"><Loading /></el-icon>
@@ -98,6 +98,21 @@
                 </el-col>
               </el-row>
 
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="鍗忚妯℃澘" prop="protocolTemplateId">
+                    <el-select v-model="form.protocolTemplateId" style="width: 100%">
+                      <el-option
+                        v-for="tpl in protocolTemplates"
+                        :key="tpl.id"
+                        :label="`${tpl.name} (${tpl.id})`"
+                        :value="tpl.id"
+                      />
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+
               <!-- 鍐呭瓨閰嶇疆 -->
               <el-divider content-position="left">
                 <h3>鍐呭瓨閰嶇疆</h3>
@@ -105,7 +120,7 @@
 
               <el-row :gutter="20">
                 <el-col :span="8">
-                  <el-form-item label="M鍖哄煙澶у皬">
+                  <el-form-item label="M鍖哄ぇ灏�">
                     <el-input-number
                       v-model="form.mRegionSize"
                       :min="0"
@@ -114,7 +129,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item label="I鍖哄煙澶у皬">
+                  <el-form-item label="I鍖哄ぇ灏�">
                     <el-input-number
                       v-model="form.iRegionSize"
                       :min="0"
@@ -123,7 +138,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item label="Q鍖哄煙澶у皬">
+                  <el-form-item label="Q鍖哄ぇ灏�">
                     <el-input-number
                       v-model="form.qRegionSize"
                       :min="0"
@@ -135,11 +150,16 @@
 
               <el-row :gutter="20">
                 <el-col :span="8">
-                  <el-form-item label="DB鍧楁暟閲�">
-                    <el-input-number
-                      v-model="form.dbBlockCount"
-                      :min="0"
+                  <el-form-item label="DB鍧楀垪琛�">
+                    <el-select
+                      v-model="form.dbBlockNumbers"
+                      multiple
+                      filterable
+                      allow-create
+                      default-first-option
+                      :reserve-keyword="false"
                       style="width: 100%"
+                      placeholder="杈撳叆鍧楀彿鍚庡洖杞︼紝渚嬪 50銆�900銆�901"
                     />
                   </el-form-item>
                 </el-col>
@@ -194,7 +214,7 @@
 import type { FormInstance, FormRules } from 'element-plus'
 import { Edit, Back, Loading } from '@element-plus/icons-vue'
 import * as api from '../api'
-import type { InstanceConfig, MemoryRegionConfig, SiemensPLCType } from '../types'
+import type { InstanceConfig, MemoryRegionConfig, ProtocolTemplate, SiemensPLCType } from '../types'
 
 const router = useRouter()
 const route = useRoute()
@@ -207,9 +227,11 @@
   port: 102,
   activationKey: '',
   autoStart: false,
+  protocolTemplateId: '',
   mRegionSize: 1024,
-  dbBlockCount: 100,
-  dbBlockSize: 1024,
+  dbBlockCount: 0,
+  dbBlockNumbers: [] as Array<number | string>,
+  dbBlockSize: 65536,
   iRegionSize: 256,
   qRegionSize: 256,
   tRegionCount: 64,
@@ -220,6 +242,7 @@
 const errorMsg = ref('')
 const submitting = ref(false)
 const isRunning = ref(false)
+const protocolTemplates = ref<ProtocolTemplate[]>([])
 
 const id = route.params.id as string
 
@@ -232,12 +255,17 @@
   ],
   port: [
     { required: true, message: '璇疯緭鍏ョ洃鍚鍙�', trigger: 'blur' },
-    { type: 'number', min: 1, max: 65535, message: '绔彛蹇呴』鍦�1-65535涔嬮棿', trigger: 'blur' }
+    { type: 'number', min: 1, max: 65535, message: '绔彛蹇呴』鍦� 1-65535 涔嬮棿', trigger: 'blur' }
+  ],
+  protocolTemplateId: [
+    { required: true, message: '璇烽�夋嫨鍗忚妯℃澘', trigger: 'change' }
   ]
 }
 
 onMounted(async () => {
   try {
+    protocolTemplates.value = await api.getProtocolTemplates()
+
     // 鑾峰彇瀹炰緥鐘舵��
     const state = await api.getInstance(id)
     if (!state) {
@@ -263,8 +291,10 @@
       port: config.port,
       activationKey: config.activationKey,
       autoStart: config.autoStart,
+      protocolTemplateId: config.protocolTemplateId || '',
       mRegionSize: config.memoryConfig.mRegionSize,
-      dbBlockCount: config.memoryConfig.dbBlockCount,
+      dbBlockCount: 0,
+      dbBlockNumbers: toDbBlockNumbers(config.memoryConfig.dbBlockNumbers, config.memoryConfig.dbBlockCount),
       dbBlockSize: config.memoryConfig.dbBlockSize,
       iRegionSize: config.memoryConfig.iRegionSize,
       qRegionSize: config.memoryConfig.qRegionSize,
@@ -288,9 +318,16 @@
     submitting.value = true
 
     try {
+      const dbBlockNumbers = normalizeDbBlockNumbers(form.value.dbBlockNumbers)
+      if (dbBlockNumbers.length === 0) {
+        ElMessage.error('璇疯嚦灏戦厤缃竴涓狣B鍧楀彿锛屼緥濡� 50,900,901')
+        return
+      }
+
       const memoryConfig: MemoryRegionConfig = {
         mRegionSize: form.value.mRegionSize > 0 ? form.value.mRegionSize : 1024,
-        dbBlockCount: form.value.dbBlockCount > 0 ? form.value.dbBlockCount : 100,
+        dbBlockCount: 0,
+        dbBlockNumbers,
         dbBlockSize: form.value.dbBlockSize > 0 ? form.value.dbBlockSize : 1024,
         iRegionSize: form.value.iRegionSize > 0 ? form.value.iRegionSize : 256,
         qRegionSize: form.value.qRegionSize > 0 ? form.value.qRegionSize : 256,
@@ -305,6 +342,7 @@
         port: form.value.port,
         activationKey: form.value.activationKey,
         autoStart: form.value.autoStart,
+        protocolTemplateId: form.value.protocolTemplateId,
         memoryConfig
       }
 
@@ -324,6 +362,26 @@
     }
   })
 }
+
+function normalizeDbBlockNumbers(input: Array<number | string>): number[] {
+  return Array.from(new Set(
+    input
+      .map(x => Number(String(x).trim()))
+      .filter(x => Number.isInteger(x) && x > 0)
+  )).sort((a, b) => a - b)
+}
+
+function toDbBlockNumbers(dbBlockNumbers: number[] | undefined, dbBlockCount: number): Array<number | string> {
+  if (dbBlockNumbers && dbBlockNumbers.length > 0) {
+    return dbBlockNumbers
+  }
+
+  if (dbBlockCount > 0) {
+    return Array.from({ length: dbBlockCount }, (_, idx) => idx + 1)
+  }
+
+  return []
+}
 </script>
 
 <style scoped>

--
Gitblit v1.9.3