Kaynağa Gözat

fix: 调整修改创建项目弹窗问题

jiaxing.liao 2 ay önce
ebeveyn
işleme
594b854b44

+ 14 - 1
src/renderer/src/locales/en_US.json

@@ -107,5 +107,18 @@
   "menu": "Menu",
   "line": "Line",
   "display": "Display",
-  "arc": "Arc"
+  "arc": "Arc",
+  "widthRequired": "width is required",
+  "heightRequired": "height is required",
+  "pathRequired": "project path is required",
+  "versionRequired": "version number is required",
+  "pclkRequired": "PCLK is required",
+  "VBPRequired": "VBP is required",
+  "VFPRequired": "VFP is required",
+  "HBPRequired": "HBP is required",
+  "HFPRequired": "HFP is required",
+  "HSYNCRequired": "HSYNC is required",
+  "VSYNCRequired": "VSYNC is required",
+  "HsyncWidthRequired": "HsyncWidth is required",
+  "VsyncWidthRequired": "VsyncWidth is required"
 }

+ 14 - 1
src/renderer/src/locales/zh_CN.json

@@ -107,5 +107,18 @@
   "menu": "菜单",
   "line": "线条",
   "display": "显示",
-  "arc": "圆弧"
+  "arc": "圆弧",
+  "widthRequired": "宽不能为空",
+  "heightRequired": "高不能为空",
+  "pathRequired": "项目路径不能为空",
+  "versionRequired": "版本号不能为空",
+  "pclkRequired": "PCLK不能为空",
+  "VBPRequired": "VBP不能为空",
+  "VFPRequired": "VFP不能为空",
+  "HBPRequired": "HBP不能为空",
+  "HFPRequired": "HFP 不能为空",
+  "HSYNCRequired": "HSYNC不能为空",
+  "VSYNCRequired": "VSYNC不能为空",
+  "HsyncWidthRequired": "HsyncWidth不能为空",
+  "VsyncWidthRequired": "VsyncWidth不能为空"
 }

+ 1 - 1
src/renderer/src/lvgl-widgets/button-matrix/Config.vue

@@ -12,7 +12,7 @@
       :key="rowIndex"
     >
       <div class="relative group/item" v-for="(_val, columnIndex) in row" :key="columnIndex">
-        <el-input v-model="modelValue[rowIndex][columnIndex]" />
+        <el-input spellcheck="false" v-model="modelValue[rowIndex][columnIndex]" />
         <div
           class="absolute top--7px right--4px cursor-pointer invisible group-hover/item:visible"
           @click="handleDeleteItem(rowIndex, columnIndex)"

+ 1 - 1
src/renderer/src/lvgl-widgets/dropdown/Config.vue

@@ -13,7 +13,7 @@
         :key="index"
       >
         <div class="w-full relative group/item">
-          <el-input v-model="modelValue[index]" />
+          <el-input spellcheck="false" v-model="modelValue[index]" />
           <div class="absolute top--7px right--4px cursor-pointer" @click="handleDeleteItem(index)">
             <LuX size="14px" />
           </div>

+ 2 - 2
src/renderer/src/lvgl-widgets/list/Config.vue

@@ -32,10 +32,10 @@
           </el-select>
         </el-form-item>
         <el-form-item label="文本">
-          <el-input v-model="formData.text"></el-input>
+          <el-input spellcheck="false" v-model="formData.text"></el-input>
         </el-form-item>
         <el-form-item v-if="formData.type === 'symbol'" label="图标">
-          <el-input readonly @click="handleShowSymbolModal">
+          <el-input spellcheck="false" readonly @click="handleShowSymbolModal">
             <template #prefix>
               <i class="lvgl-icon not-italic" v-html="getSymbol(formData.img_symbol)"></i>
             </template>

+ 6 - 1
src/renderer/src/lvgl-widgets/span-group/Config.vue

@@ -79,7 +79,12 @@
           </el-radio-group>
         </el-form-item>
         <el-form-item label="文本">
-          <el-input type="textarea" v-model="formData.text" placeholder="请输入文本" />
+          <el-input
+            spellcheck="false"
+            type="textarea"
+            v-model="formData.text"
+            placeholder="请输入文本"
+          />
         </el-form-item>
       </el-form>
       <template #footer>

+ 1 - 1
src/renderer/src/lvgl-widgets/table/Config.vue

@@ -29,7 +29,7 @@
       >
         <div class="w-full flex items-center gap-4px relative group/item">
           <div v-for="(_, columnIndex) in row" :key="`${rowIndex}_${columnIndex}`" class="relative">
-            <el-input v-model="row[columnIndex]" />
+            <el-input spellcheck="false" v-model="row[columnIndex]" />
             <div
               v-if="rowIndex === 0 && columnIndex !== 0"
               class="absolute top--4px right-0 cursor-pointer"

+ 1 - 1
src/renderer/src/lvgl-widgets/window/Config.vue

@@ -34,7 +34,7 @@
           <el-input-number style="width: 100%" v-model="formData.width" :min="1" :max="1000" />
         </el-form-item>
         <el-form-item v-if="formData.type === 'symbol'" label="图标">
-          <el-input readonly @click="handleShowSymbolModal">
+          <el-input spellcheck="false" readonly @click="handleShowSymbolModal">
             <template #prefix>
               <i class="lvgl-icon not-italic" v-html="getSymbol(formData.img_symbol)"></i>
             </template>

+ 6 - 1
src/renderer/src/views/designer/config/AnimationConfig.vue

@@ -25,7 +25,12 @@
               </div>
             </template>
             <div class="px-10px">
-              <el-input v-model="item.name" placeholder="动画名称" class="my-10px" />
+              <el-input
+                spellcheck="false"
+                v-model="item.name"
+                placeholder="动画名称"
+                class="my-10px"
+              />
               <el-card
                 v-for="(animationItem, index) in item.timeline"
                 :key="index"

+ 12 - 2
src/renderer/src/views/designer/config/LanguagesConfig.vue

@@ -25,7 +25,12 @@
               </div>
             </template>
             <el-card class="m-10px">
-              <el-input v-model="item.key" class="mt-10px mb-10px" placeholder="语言标识" />
+              <el-input
+                spellcheck="false"
+                v-model="item.key"
+                class="mt-10px mb-10px"
+                placeholder="语言标识"
+              />
               <div v-for="(languagesItem, index) in item.values" :key="index" class="mb-10px">
                 <div class="flex flex-wrap gap-5px items-center">
                   <el-select v-model="languagesItem.language" style="flex: 1">
@@ -36,7 +41,12 @@
                       :label="menu.label"
                     />
                   </el-select>
-                  <el-input v-model="languagesItem.value" style="flex: 1" placeholder="内容" />
+                  <el-input
+                    spellcheck="false"
+                    v-model="languagesItem.value"
+                    style="flex: 1"
+                    placeholder="内容"
+                  />
                   <el-select v-model="languagesItem.font" style="flex: 1" placeholder="字体">
                     <el-option
                       v-for="font in fonts"

+ 8 - 2
src/renderer/src/views/designer/config/VariableConfig.vue

@@ -46,7 +46,7 @@
                 </el-icon>
               </div>
               <div class="flex gap-10px mb-10px">
-                <el-input v-model="element.name" placeholder="变量名称" />
+                <el-input spellcheck="false" v-model="element.name" placeholder="变量名称" />
                 <el-select v-model="element.type" placeholder="变量类型">
                   <el-option
                     v-for="type in variableType"
@@ -56,7 +56,13 @@
                   />
                 </el-select>
               </div>
-              <el-input v-model="element.value" type="textarea" :rows="3" placeholder="初始值" />
+              <el-input
+                spellcheck="false"
+                v-model="element.value"
+                type="textarea"
+                :rows="3"
+                placeholder="初始值"
+              />
             </el-card>
           </div>
         </el-collapse-item>

+ 1 - 1
src/renderer/src/views/designer/config/property/components/ImageSelect.vue

@@ -21,7 +21,7 @@
       <el-button type="primary" :disabled="!selected" @click="handleConfirm">确定</el-button>
     </template>
   </el-dialog>
-  <el-input :model-value="selectedFile?.fileName" readonly>
+  <el-input spellcheck="false" :model-value="selectedFile?.fileName" readonly>
     <template #suffix>
       <LuX v-if="selectedFile" class="cursor-pointer" size="16px" @click="handleClear" />
     </template>

+ 111 - 49
src/renderer/src/views/designer/modals/projectModal/index.vue

@@ -26,8 +26,8 @@
               spellcheck="false"
             ></el-input>
           </el-form-item>
-          <el-form-item :label="$t('projectPath')" prop="path" required>
-            <el-input v-model="formData.path" readonly>
+          <el-form-item :label="$t('projectPath')" prop="path">
+            <el-input spellcheck="false" v-model="formData.path">
               <template #append>
                 <el-button @click="selectPath('path')" :disabled="mode === 'edit'"
                   ><LuFolder :size="16" :disabled="mode === 'edit'"
@@ -35,8 +35,8 @@
               </template>
             </el-input>
           </el-form-item>
-          <el-form-item :label="$t('codePath')" prop="codePath" required>
-            <el-input v-model="formData.codePath" readonly>
+          <el-form-item :label="$t('codePath')" prop="codePath">
+            <el-input spellcheck="false" v-model="formData.codePath">
               <template #append>
                 <el-button @click="selectPath('codePath')"
                   ><LuFolder :size="16" :disabled="mode === 'edit'"
@@ -44,7 +44,7 @@
               </template>
             </el-input>
           </el-form-item>
-          <el-form-item :label="$t('projectType')" prop="type" required>
+          <el-form-item :label="$t('projectType')" prop="type">
             <el-select v-model="formData.type" @change="handlChangeType">
               <el-option
                 v-for="item in typeOptions"
@@ -59,7 +59,7 @@
           <template v-if="formData.type === 'chip'">
             <el-row :gutter="12">
               <el-col :span="8">
-                <el-form-item :label="$t('chipModel')" prop="chip.model" required>
+                <el-form-item :label="$t('chipModel')" prop="chip.model">
                   <el-select v-model="formData.chip.model" @change="handleSelectChip">
                     <el-option
                       v-for="item in chipOptions"
@@ -71,7 +71,7 @@
                 </el-form-item>
               </el-col>
               <el-col :span="8">
-                <el-form-item :label="$t('flashSize')" prop="chip.flash_size.capacity" required>
+                <el-form-item :label="$t('flashSize')" prop="chip.flash_size.capacity">
                   <el-autocomplete
                     size="small"
                     style="width: 100%"
@@ -143,8 +143,8 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item :label="$t('interfaceType')">
-                    <el-select v-model="item.interface" prop="interface" required>
+                  <el-form-item :label="$t('interfaceType')" :prop="`screens.${index}.interface`">
+                    <el-select v-model="item.interface">
                       <el-option
                         v-for="item in getScreenOptions('interface')?.[index] || []"
                         :label="item"
@@ -154,7 +154,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item :label="$t('colorFormat')">
+                  <el-form-item :label="$t('colorFormat')" :prop="`screens.${index}.colorFormat`">
                     <el-select v-model="item.colorFormat">
                       <el-option
                         v-for="item in getScreenOptions('color_format')?.[index] || []"
@@ -165,7 +165,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item :label="$t('colorDepth')">
+                  <el-form-item :label="$t('colorDepth')" :prop="`screens.${index}.colorDepth`">
                     <el-select v-model="item.colorDepth">
                       <el-option
                         v-for="item in getScreenOptions('color_depth')?.[index] || []"
@@ -176,7 +176,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item label="PCLK">
+                  <el-form-item label="PCLK" :prop="`screens.${index}.params.PCLK`">
                     <el-input-number
                       controls-position="right"
                       style="width: 100%"
@@ -185,7 +185,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item label="VBP">
+                  <el-form-item label="VBP" :prop="`screens.${index}.params.VBP`">
                     <el-input-number
                       controls-position="right"
                       style="width: 100%"
@@ -194,7 +194,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item label="VFP">
+                  <el-form-item label="VFP" :prop="`screens.${index}.params.VFP`">
                     <el-input-number
                       controls-position="right"
                       style="width: 100%"
@@ -203,7 +203,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item label="HFP">
+                  <el-form-item label="HFP" :prop="`screens.${index}.params.HFP`">
                     <el-input-number
                       controls-position="right"
                       style="width: 100%"
@@ -212,7 +212,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item label="HSYNC">
+                  <el-form-item label="HSYNC" :prop="`screens.${index}.params.HSYNC`">
                     <el-input-number
                       controls-position="right"
                       style="width: 100%"
@@ -221,7 +221,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item label="VSYNC">
+                  <el-form-item label="VSYNC" :prop="`screens.${index}.params.VSYNC`">
                     <el-input-number
                       controls-position="right"
                       style="width: 100%"
@@ -230,7 +230,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item label="HsyncWidth">
+                  <el-form-item label="HsyncWidth" :prop="`screens.${index}.params.HsyncWidth`">
                     <el-input-number
                       controls-position="right"
                       style="width: 100%"
@@ -239,7 +239,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item label="VsyncWidth">
+                  <el-form-item label="VsyncWidth" :prop="`screens.${index}.params.VsyncWidth`">
                     <el-input-number
                       controls-position="right"
                       style="width: 100%"
@@ -291,7 +291,11 @@
                     :label="$t('screenIndexResolution', [index + 1])"
                     label-width="120px"
                   >
-                    <el-input :model-value="`${screen.width}x${screen.height}`" disabled />
+                    <el-input
+                      spellcheck="false"
+                      :model-value="`${screen.width}x${screen.height}`"
+                      disabled
+                    />
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">
@@ -343,7 +347,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item :label="$t('colorFormat')">
+                  <el-form-item :label="$t('colorFormat')" :prop="`screens.${index}.colorFormat`">
                     <el-select v-model="item.colorFormat">
                       <el-option
                         v-for="item in getAnalogDisplayOptions('color_format')?.[index] || []"
@@ -354,7 +358,7 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                  <el-form-item :label="$t('colorDepth')">
+                  <el-form-item :label="$t('colorDepth')" :prop="`screens.${index}.colorDepth`">
                     <el-select v-model="item.colorDepth">
                       <el-option
                         v-for="item in getAnalogDisplayOptions('color_depth')?.[index] || []"
@@ -370,8 +374,8 @@
           <el-divider />
           <el-row :gutter="12">
             <el-col :span="8">
-              <el-form-item :label="$t('version')">
-                <el-input v-model="formData.version" />
+              <el-form-item :label="$t('version')" prop="version">
+                <el-input spellcheck="false" v-model="formData.version" />
               </el-form-item>
             </el-col>
             <el-col :span="8">
@@ -383,13 +387,17 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item v-if="formData.resourcePackaging === 'c_bin'" :label="$t('binNumber')">
-                <el-input v-model.number="formData.binNum" />
+              <el-form-item
+                v-if="formData.resourcePackaging === 'c_bin'"
+                :label="$t('binNumber')"
+                prop="binNum"
+              >
+                <el-input spellcheck="false" v-model.number="formData.binNum" />
               </el-form-item>
             </el-col>
             <el-col :span="24">
               <el-form-item :label="$t('projectDesc')">
-                <el-input type="textarea" v-model="formData.description" />
+                <el-input spellcheck="false" type="textarea" v-model="formData.description" />
               </el-form-item>
             </el-col>
           </el-row>
@@ -414,12 +422,20 @@
       :modal="false"
       align-center
     >
-      <el-form>
-        <el-form-item :label="$t('width')">
-          <el-input v-model.number="customScreen.width" />
+      <el-form ref="resolutionFormRef" :model="customScreen" hide-required-asterisk>
+        <el-form-item
+          :label="$t('width')"
+          prop="width"
+          :rules="[{ required: true, message: $t('widthRequired') }]"
+        >
+          <el-input spellcheck="false" v-model.number="customScreen.width" />
         </el-form-item>
-        <el-form-item :label="$t('height')">
-          <el-input v-model.number="customScreen.height" />
+        <el-form-item
+          :label="$t('height')"
+          prop="height"
+          :rules="[{ required: true, message: $t('heightRequired') }]"
+        >
+          <el-input spellcheck="false" v-model.number="customScreen.height" />
         </el-form-item>
       </el-form>
       <template #footer>
@@ -437,6 +453,7 @@ import { LuFolder } from 'vue-icons-plus/lu'
 import { useProjectStore } from '@/store/modules/project'
 import { useRecentProject } from '@/store/modules/recentProject'
 import { useAppStore } from '@/store/modules/app'
+import { useLocalStorageState } from 'vue-hooks-plus'
 import { useI18n } from 'vue-i18n'
 import Recent from './Recent.vue'
 
@@ -449,6 +466,10 @@ const props = defineProps<{
   initHide?: boolean
 }>()
 
+const [projectPath, setProjectPath] = useLocalStorageState('projectPath', {
+  defaultValue: 'D:\\sunmicroDesignerProjects'
+})
+const [codePath, setCodePath] = useLocalStorageState('codePath', { defaultValue: '\\code' })
 const { t } = useI18n()
 const mode = ref<'add' | 'edit'>('add')
 const projectStore = useProjectStore()
@@ -463,8 +484,8 @@ const formData = reactive<
   version: '1.0.0',
   description: '',
   name: '',
-  path: 'D:\\sunmicroDesignerProjects',
-  codePath: '\\code',
+  path: projectPath.value || '',
+  codePath: codePath.value || '',
   type: 'chip',
   chip: {
     model: '',
@@ -512,17 +533,23 @@ const formData = reactive<
   videoFormats: []
 })
 
-watch(
-  () => recentProject.recentProjects,
-  () => {
-    formData.name = `projectName${(recentProject.recentProjects?.length || 0) + 1}`
-  },
-  {
-    immediate: true
-  }
-)
+/**
+ * 设置默认项目名
+ */
+const setProjectDefaultName = () => {
+  const list =
+    recentProject.recentProjects
+      ?.map((item) => Number(item.projectName.split('_')?.[1]))
+      ?.filter((n) => !Number.isNaN(n)) || []
+  const index = list.length ? Math.max(...list) + 1 : 1
+
+  formData.name = `projectName_${index}`
+}
+
+watch(() => recentProject.recentProjects, setProjectDefaultName, { immediate: true })
 
 const form = ref<FormInstance>()
+const resolutionFormRef = ref<FormInstance>()
 // 显示模态框
 const showModal = ref(!props.initHide)
 // 显示自定义屏幕模态框
@@ -561,11 +588,39 @@ const rules = computed(() => {
       }
     ],
     codePath: [{ required: true, message: t('codePathRequired'), trigger: 'blur' }],
+    path: [{ required: true, message: t('pathRequired'), trigger: 'blur' }],
+    version: [{ required: true, message: t('versionRequired'), trigger: 'blur' }],
     'chip.model': [{ required: true, message: t('chipIsRequired'), trigger: 'blur' }],
     'chip.flash_size.capacity': [
       { required: true, message: t('flashIsRequired'), trigger: 'blur' }
     ],
-    'chip.ram_size.capacity': [{ required: true, message: t('ramIsRequired'), trigger: 'blur' }]
+    'chip.ram_size.capacity': [{ required: true, message: t('ramIsRequired'), trigger: 'blur' }],
+    'screens.0.params.PCLK': [{ required: true, message: t('pclkRequired'), trigger: 'change' }],
+    'screens.0.params.VBP': [{ required: true, message: t('VBPRequired'), trigger: 'change' }],
+    'screens.0.params.VFP': [{ required: true, message: t('VFPRequired'), trigger: 'change' }],
+    'screens.0.params.HBP': [{ required: true, message: t('HBPRequired'), trigger: 'change' }],
+    'screens.0.params.HFP': [{ required: true, message: t('HFPRequired'), trigger: 'change' }],
+    'screens.0.params.HSYNC': [{ required: true, message: t('HSYNCRequired'), trigger: 'change' }],
+    'screens.0.params.VSYNC': [{ required: true, message: t('VSYNCRequired'), trigger: 'change' }],
+    'screens.0.params.HsyncWidth': [
+      { required: true, message: t('HsyncWidthRequired'), trigger: 'change' }
+    ],
+    'screens.0.params.VsyncWidth': [
+      { required: true, message: t('VsyncWidthRequired'), trigger: 'change' }
+    ],
+    'screens.1.params.PCLK': [{ required: true, message: t('pclkRequired'), trigger: 'change' }],
+    'screens.1.params.VBP': [{ required: true, message: t('VBPRequired'), trigger: 'change' }],
+    'screens.1.params.VFP': [{ required: true, message: t('VFPRequired'), trigger: 'change' }],
+    'screens.1.params.HBP': [{ required: true, message: t('HBPRequired'), trigger: 'change' }],
+    'screens.1.params.HFP': [{ required: true, message: t('HFPRequired'), trigger: 'change' }],
+    'screens.1.params.HSYNC': [{ required: true, message: t('HSYNCRequired'), trigger: 'change' }],
+    'screens.1.params.VSYNC': [{ required: true, message: t('VSYNCRequired'), trigger: 'change' }],
+    'screens.1.params.HsyncWidth': [
+      { required: true, message: t('HsyncWidthRequired'), trigger: 'change' }
+    ],
+    'screens.1.params.VsyncWidth': [
+      { required: true, message: t('VsyncWidthRequired'), trigger: 'change' }
+    ]
   }
 })
 
@@ -609,6 +664,7 @@ const handleSetResolution = (str: string, index: number) => {
 
 // 设置自定义分辨率
 const handleSetScreen = () => {
+  resolutionFormRef.value?.validate()
   if (!customScreen.value.width || !customScreen.value.height) return
 
   formData.screens[customScreen.value.index].width = customScreen.value.width
@@ -845,6 +901,9 @@ const handleSubmit = async () => {
     ElMessage.warning(t('selectBoard'))
     return
   }
+  // 记住项目路径
+  setProjectPath(formData.path)
+  setCodePath(formData.codePath)
 
   projectStore.createApp(formData)
   form.value?.resetFields()
@@ -858,10 +917,10 @@ const handleEdit = async () => {
 
 // 关闭弹窗
 const close = (done?: () => void) => {
-  if (!projectStore.project) {
-    ElMessage.warning(t('createProjectFirst'))
-    return
-  }
+  // if (!projectStore.project) {
+  //   ElMessage.warning(t('createProjectFirst'))
+  //   return
+  // }
 
   done?.()
   form.value?.resetFields()
@@ -873,8 +932,11 @@ defineExpose({
   create: async () => {
     mode.value = 'add'
     showModal.value = true
-    await nextTick()
     form.value?.resetFields()
+    await nextTick()
+    formData.path = projectPath.value || ''
+    formData.codePath = codePath.value || ''
+    setProjectDefaultName()
   },
   edit: () => {
     const data = klona(projectStore.project?.meta || {})

+ 1 - 1
src/renderer/src/views/designer/modals/settingModal/GeneralSettingModal.vue

@@ -21,7 +21,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="sunmicro.exe路径">
-        <el-input v-model="appStore.sunmicroPath">
+        <el-input spellcheck="false" v-model="appStore.sunmicroPath">
           <template #append>
             <el-button @click="selectPath"><LuFolder :size="16" /></el-button>
           </template>

+ 18 - 3
src/renderer/src/views/designer/sidebar/Resource.vue

@@ -10,7 +10,12 @@
       </template>
       <div class="w-full h-full flex flex-col">
         <div class="p-12px flex gap-8px shrink-0">
-          <el-input v-model="imageSearch" size="small" placeholder="输入搜索..." />
+          <el-input
+            spellcheck="false"
+            v-model="imageSearch"
+            size="small"
+            placeholder="输入搜索..."
+          />
         </div>
         <el-scrollbar class="flex-1">
           <ResourceItem
@@ -34,7 +39,12 @@
       </template>
       <div class="w-full h-full flex flex-col">
         <div class="p-12px flex gap-8px shrink-0">
-          <el-input v-model="fontSearch" size="small" placeholder="输入搜索..." />
+          <el-input
+            spellcheck="false"
+            v-model="fontSearch"
+            size="small"
+            placeholder="输入搜索..."
+          />
         </div>
         <el-scrollbar class="flex-1">
           <ResourceItem
@@ -58,7 +68,12 @@
       </template>
       <div class="w-full h-full flex flex-col">
         <div class="p-12px flex gap-8px shrink-0">
-          <el-input v-model="otherSearch" size="small" placeholder="输入搜索..." />
+          <el-input
+            spellcheck="false"
+            v-model="otherSearch"
+            size="small"
+            placeholder="输入搜索..."
+          />
         </div>
         <el-scrollbar class="flex-1">
           <ResourceItem

+ 2 - 2
src/renderer/src/views/designer/sidebar/components/EditBinModal.vue

@@ -6,10 +6,10 @@
         prop="name"
         :rules="[{ required: true, message: '名称不能为空', trigger: 'blur' }]"
       >
-        <el-input v-model="formData.name"></el-input>
+        <el-input spellcheck="false" v-model="formData.name"></el-input>
       </el-form-item>
       <el-form-item label="BIN路径">
-        <el-input v-model="formData.path"></el-input>
+        <el-input spellcheck="false" v-model="formData.path"></el-input>
       </el-form-item>
     </el-form>
     <template #footer>

+ 8 - 3
src/renderer/src/views/designer/sidebar/components/EditFontModal.vue

@@ -20,10 +20,10 @@
       hide-required-asterisk
     >
       <el-form-item label="文件名称" prop="fileName">
-        <el-input v-model="formData.fileName" />
+        <el-input spellcheck="false" v-model="formData.fileName" />
       </el-form-item>
       <el-form-item label="文件路径" prop="path">
-        <el-input v-model="formData.path" disabled />
+        <el-input spellcheck="false" v-model="formData.path" disabled />
       </el-form-item>
       <el-form-item label="文本范围" prop="range">
         <div>
@@ -42,7 +42,12 @@
         <el-select-v2 v-model="formData.codeRange" :options="rangeOptions" multiple />
       </el-form-item>
       <el-form-item label="自定义文本" prop="extText" v-if="formData.range.includes('custom')">
-        <el-input type="textarea" v-model="formData.extText" placeholder="请输入..." />
+        <el-input
+          spellcheck="false"
+          type="textarea"
+          v-model="formData.extText"
+          placeholder="请输入..."
+        />
       </el-form-item>
       <el-form-item label="BIN配置" prop="bin" v-if="projectStore.project?.bins?.length">
         <div class="w-full flex gap-12px">

+ 2 - 2
src/renderer/src/views/designer/sidebar/components/EditImageModal.vue

@@ -25,12 +25,12 @@
       <el-row :gutter="24">
         <el-col :span="12">
           <el-form-item label="文件名称" prop="fileName">
-            <el-input v-model="formData.fileName" />
+            <el-input spellcheck="false" v-model="formData.fileName" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="文件路径" prop="path">
-            <el-input v-model="formData.path" disabled />
+            <el-input spellcheck="false" v-model="formData.path" disabled />
           </el-form-item>
         </el-col>
         <el-col :span="12">

+ 1 - 1
src/renderer/src/views/designer/workspace/composite/eventEdit/ActionNode.vue

@@ -17,7 +17,7 @@
       </div>
       <!-- 字符串 -->
       <div v-if="node?.config?.data?.valueType === 'string'">
-        <el-input v-model="value" size="small" />
+        <el-input spellcheck="false" v-model="value" size="small" />
       </div>
       <!-- 数字 -->
       <div v-if="node?.config?.data?.valueType === 'number'">

+ 7 - 1
src/renderer/src/views/designer/workspace/composite/eventEdit/SelectPopover.vue

@@ -12,7 +12,13 @@
     <div>
       <div class="h-32px leading-32px pl-12px bg-bg-tertiary flex justify-between items-center">
         <span>{{ title }}</span>
-        <el-input v-model="search" style="width: 200px" placeholder="search..." size="small" />
+        <el-input
+          spellcheck="false"
+          v-model="search"
+          style="width: 200px"
+          placeholder="search..."
+          size="small"
+        />
       </div>
       <div class="my-12px flex flex-wrap gap-x-12px gap-y-8px">
         <div