|
|
@@ -19,14 +19,14 @@
|
|
|
<el-form-item :label="$t('projectName')" prop="name" required>
|
|
|
<el-input v-model="formData.name" :placeholder="$t('pleaseEnter')"></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="项目路径" prop="path" required>
|
|
|
+ <el-form-item :label="$t('projectPath')" prop="path" required>
|
|
|
<el-input v-model="formData.path" readonly>
|
|
|
<template #append>
|
|
|
<el-button @click="selectPath"><LuFolder :size="16" /></el-button>
|
|
|
</template>
|
|
|
</el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="项目类型" prop="type" required>
|
|
|
+ <el-form-item :label="$t('projectType')" prop="type" required>
|
|
|
<el-select v-model="formData.type" @change="handlChangeType">
|
|
|
<el-option
|
|
|
v-for="item in typeOptions"
|
|
|
@@ -41,7 +41,7 @@
|
|
|
<template v-if="formData.type === 'chip'">
|
|
|
<el-row :gutter="12">
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="芯片型号" prop="chip.model" required>
|
|
|
+ <el-form-item :label="$t('chipModel')" prop="chip.model" required>
|
|
|
<el-select v-model="formData.chip.model" @change="handleSelectChip">
|
|
|
<el-option
|
|
|
v-for="item in chipOptions"
|
|
|
@@ -53,7 +53,7 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="闪存大小" prop="chip.flash_size.capacity" required>
|
|
|
+ <el-form-item :label="$t('flashSize')" prop="chip.flash_size.capacity" required>
|
|
|
<el-autocomplete
|
|
|
size="small"
|
|
|
style="width: 100%"
|
|
|
@@ -74,7 +74,7 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="内存大小" prop="chip.ram_size.capacity" required>
|
|
|
+ <el-form-item :label="$t('ramSize')" prop="chip.ram_size.capacity" required>
|
|
|
<el-autocomplete
|
|
|
size="small"
|
|
|
style="width: 100%"
|
|
|
@@ -102,20 +102,20 @@
|
|
|
fill="#6cf"
|
|
|
@change="handleChangeScreenTypeByChip"
|
|
|
>
|
|
|
- <el-radio-button label="单屏" value="single" />
|
|
|
- <el-radio-button label="双屏" value="dual" />
|
|
|
+ <el-radio-button :label="$t('singleScreen')" value="single" />
|
|
|
+ <el-radio-button :label="$t('doubleScreen')" value="dual" />
|
|
|
</el-radio-group>
|
|
|
</div>
|
|
|
<div v-for="(item, index) in formData.screens" :key="index">
|
|
|
- <el-divider border-style="dashed">屏幕{{ index + 1 }}</el-divider>
|
|
|
+ <el-divider border-style="dashed">{{ $t('screenIndex', [index + 1]) }}</el-divider>
|
|
|
<el-row :gutter="12">
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="分辨率">
|
|
|
+ <el-form-item :label="$t('resolution')">
|
|
|
<el-select
|
|
|
:model-value="`${item.width}x${item.height}`"
|
|
|
@change="(val) => handleSetResolution(val, index)"
|
|
|
>
|
|
|
- <el-option label="自定义" value="custom" />
|
|
|
+ <el-option :label="$t('custom')" value="custom" />
|
|
|
<el-option
|
|
|
v-for="item in getScreenOptions('resolutions')?.[index] || []"
|
|
|
:label="item"
|
|
|
@@ -125,7 +125,7 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="接口类型">
|
|
|
+ <el-form-item :label="$t('interfaceType')">
|
|
|
<el-select v-model="item.interface" prop="interface" required>
|
|
|
<el-option
|
|
|
v-for="item in getScreenOptions('interface')?.[index] || []"
|
|
|
@@ -136,7 +136,7 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="颜色格式">
|
|
|
+ <el-form-item :label="$t('colorFormat')">
|
|
|
<el-select v-model="item.colorFormat">
|
|
|
<el-option
|
|
|
v-for="item in getScreenOptions('color_format')?.[index] || []"
|
|
|
@@ -147,7 +147,7 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="颜色深度">
|
|
|
+ <el-form-item :label="$t('colorDepth')">
|
|
|
<el-select v-model="item.colorDepth">
|
|
|
<el-option
|
|
|
v-for="item in getScreenOptions('color_depth')?.[index] || []"
|
|
|
@@ -203,8 +203,12 @@
|
|
|
<!-- 板卡配置 -->
|
|
|
<template v-if="formData.type === 'board'">
|
|
|
<div class="flex items-center justify-end gap-12px mb-12px">
|
|
|
- <el-input style="width: 160px" placeholder="请输入型号查询" v-model="query" />
|
|
|
- <el-button @click="searchBoard">搜索</el-button>
|
|
|
+ <el-input
|
|
|
+ style="width: 160px"
|
|
|
+ :placeholder="$t('pleaseEnterModelQuery')"
|
|
|
+ v-model="query"
|
|
|
+ />
|
|
|
+ <el-button @click="searchBoard">{{ $t('search') }}</el-button>
|
|
|
</div>
|
|
|
<div class="max-h-300px overflow-y-auto overflow-x-hidden">
|
|
|
<el-row :gutter="12">
|
|
|
@@ -216,7 +220,7 @@
|
|
|
>
|
|
|
<el-image class="w-full h-full" :src="item.pic_path">
|
|
|
<template #error>
|
|
|
- <div class="text-center text-#fff">图片加载失败</div>
|
|
|
+ <div class="text-center text-#fff">{{ $t('imageLoadError') }}</div>
|
|
|
</template>
|
|
|
</el-image>
|
|
|
<div class="absolute w-full h-40px left-0 bottom-0 bg-#ccc truncate text-#fff">
|
|
|
@@ -227,16 +231,18 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</div>
|
|
|
- <div class="my-12px text-text-secondary">当前选择:{{ formData.board.model }}</div>
|
|
|
+ <div class="my-12px text-text-secondary">
|
|
|
+ {{ $t('currentSelectModel', [formData.board.model]) }}
|
|
|
+ </div>
|
|
|
<el-row :gutter="12">
|
|
|
<template v-for="(screen, index) in formData.screens">
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item :label="`屏幕${index + 1}分辨率`" label-width="120px">
|
|
|
+ <el-form-item :label="$t('screenIndexResolution', [index + 1])" label-width="120px">
|
|
|
<el-input :model-value="`${screen.width}x${screen.height}`" disabled />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item :label="`屏幕${index + 1}颜色深度`" label-width="120px">
|
|
|
+ <el-form-item :label="$t('screenIndexColorDepth', [index + 1])" label-width="120px">
|
|
|
<el-select v-model="screen.colorDepth">
|
|
|
<el-option
|
|
|
v-for="item in colorDepthOptions[index] || []"
|
|
|
@@ -258,20 +264,20 @@
|
|
|
fill="#6cf"
|
|
|
@change="handleChangeScreenTypeByAnalog"
|
|
|
>
|
|
|
- <el-radio-button label="单屏" value="single" />
|
|
|
- <el-radio-button label="双屏" value="dual" />
|
|
|
+ <el-radio-button :label="$t('singleScreen')" value="single" />
|
|
|
+ <el-radio-button :label="$t('doubleScreen')" value="dual" />
|
|
|
</el-radio-group>
|
|
|
</div>
|
|
|
<div v-for="(item, index) in formData.screens" :key="index">
|
|
|
- <el-divider border-style="dashed">屏幕{{ index + 1 }}</el-divider>
|
|
|
+ <el-divider border-style="dashed">{{ $t('screenIndex', [index + 1]) }}</el-divider>
|
|
|
<el-row :gutter="12">
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="分辨率">
|
|
|
+ <el-form-item :label="$t('resolution')">
|
|
|
<el-select
|
|
|
:model-value="`${item.width}x${item.height}`"
|
|
|
@change="(val) => handleSetResolution(val, index)"
|
|
|
>
|
|
|
- <el-option label="自定义" value="custom" />
|
|
|
+ <el-option :label="$t('custom')" value="custom" />
|
|
|
<el-option
|
|
|
v-for="item in getAnalogDisplayOptions('resolutions')?.[index] || []"
|
|
|
:label="item"
|
|
|
@@ -281,7 +287,7 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="颜色格式">
|
|
|
+ <el-form-item :label="$t('colorFormat')">
|
|
|
<el-select v-model="item.colorFormat">
|
|
|
<el-option
|
|
|
v-for="item in getAnalogDisplayOptions('color_format')?.[index] || []"
|
|
|
@@ -292,7 +298,7 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="颜色深度">
|
|
|
+ <el-form-item :label="$t('colorDepth')">
|
|
|
<el-select v-model="item.colorDepth">
|
|
|
<el-option
|
|
|
v-for="item in getAnalogDisplayOptions('color_depth')?.[index] || []"
|
|
|
@@ -308,25 +314,25 @@
|
|
|
<el-divider />
|
|
|
<el-row :gutter="12">
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="版本号">
|
|
|
+ <el-form-item :label="$t('version')">
|
|
|
<el-input v-model="formData.version" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="打包方式">
|
|
|
+ <el-form-item :label="$t('packageType')">
|
|
|
<el-select v-model="formData.resourcePackaging">
|
|
|
- <el-option label="C源码" value="c" />
|
|
|
- <el-option label="C源码+BIN" value="c_bin" />
|
|
|
+ <el-option :label="$t('cCode')" value="c" />
|
|
|
+ <el-option :label="$t('cCodeBin')" value="c_bin" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item v-if="formData.resourcePackaging === 'c_bin'" label="BIN数量">
|
|
|
+ <el-form-item v-if="formData.resourcePackaging === 'c_bin'" :label="$t('binNumber')">
|
|
|
<el-input v-model.number="formData.binNum" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="24">
|
|
|
- <el-form-item label="项目描述">
|
|
|
+ <el-form-item :label="$t('projectDesc')">
|
|
|
<el-input type="textarea" v-model="formData.description" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
@@ -335,27 +341,27 @@
|
|
|
</el-scrollbar>
|
|
|
|
|
|
<template #footer>
|
|
|
- <el-button @click="showModal = false">取消</el-button>
|
|
|
- <el-button type="primary" @click="handleSubmit">创建</el-button>
|
|
|
+ <el-button @click="showModal = false">{{ $t('cancel') }}</el-button>
|
|
|
+ <el-button type="primary" @click="handleSubmit">{{ $t('create') }}</el-button>
|
|
|
</template>
|
|
|
|
|
|
<el-dialog
|
|
|
- title="自定义屏幕"
|
|
|
+ :title="$t('customResolution')"
|
|
|
v-model="showScreenModal"
|
|
|
width="440px"
|
|
|
:modal="false"
|
|
|
align-center
|
|
|
>
|
|
|
<el-form>
|
|
|
- <el-form-item label="宽">
|
|
|
+ <el-form-item :label="$t('width')">
|
|
|
<el-input v-model.number="customScreen.width" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="高">
|
|
|
+ <el-form-item :label="$t('height')">
|
|
|
<el-input v-model.number="customScreen.height" />
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<template #footer>
|
|
|
- <el-button type="primary" @click="handleSetScreen">确定</el-button>
|
|
|
+ <el-button type="primary" @click="handleSetScreen">{{ $t('confirm') }}</el-button>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
</el-dialog>
|
|
|
@@ -367,11 +373,14 @@ import type { FormInstance } from 'element-plus'
|
|
|
import { computed, reactive, ref, defineExpose } from 'vue'
|
|
|
import { LuFolder } from 'vue-icons-plus/lu'
|
|
|
import { useProjectStore } from '@/store/modules/project'
|
|
|
+import { useAppStore } from '@/store/modules/app'
|
|
|
+import { useI18n } from 'vue-i18n'
|
|
|
|
|
|
import chipConfig from '@/config/multi_chip_config.json'
|
|
|
import boardConfig from '@/config/board_card_config.json'
|
|
|
import displayConfig from '@/config/analog_display_config.json'
|
|
|
|
|
|
+const { t } = useI18n()
|
|
|
const formData = reactive<
|
|
|
AppMeta & {
|
|
|
path: string
|
|
|
@@ -428,6 +437,7 @@ const formData = reactive<
|
|
|
})
|
|
|
|
|
|
const projectStore = useProjectStore()
|
|
|
+const appStore = useAppStore()
|
|
|
|
|
|
const form = ref<FormInstance>()
|
|
|
// 显示模态框
|
|
|
@@ -441,11 +451,14 @@ const customScreen = ref({
|
|
|
index: 0
|
|
|
})
|
|
|
// 项目类型选项
|
|
|
-const typeOptions = [
|
|
|
- { label: '芯片', value: 'chip' },
|
|
|
- { label: '板卡', value: 'board' },
|
|
|
- { label: '模拟显示', value: 'analog_display' }
|
|
|
-]
|
|
|
+const typeOptions = computed(() => {
|
|
|
+ console.log(appStore.lang)
|
|
|
+ return [
|
|
|
+ { label: t('chip'), value: 'chip' },
|
|
|
+ { label: t('board'), value: 'board' },
|
|
|
+ { label: t('analogDisplay'), value: 'analog_display' }
|
|
|
+ ]
|
|
|
+})
|
|
|
|
|
|
// 切换项目类型
|
|
|
const handlChangeType = (type: string) => {
|