I18n dev 275 (#1892)

* feat: 适配I18N

---------

Co-authored-by: pixelmaxQM <flipped_aurora@163.com>
This commit is contained in:
krank
2024-09-30 21:52:13 +08:00
committed by GitHub
co-authored by pixelmaxQM
parent 894e6d0886
commit b06367cb2a
27 changed files with 3803 additions and 2571 deletions
+18 -24
View File
@@ -6,6 +6,7 @@
:action="`${getBaseUrl()}/fileUploadAndDownload/upload?noSave=1`"
:on-error="uploadError"
:on-success="uploadSuccess"
:on-remove="uploadRemove"
:show-file-list="true"
:limit="limit"
:accept="accept"
@@ -20,7 +21,7 @@
<script setup>
import { ref, watch } from 'vue'
import { ref } from 'vue'
import { ElMessage } from 'element-plus'
import { getBaseUrl } from '@/utils/format'
@@ -29,10 +30,6 @@ defineOptions({
})
const props = defineProps({
modelValue: {
type: Array,
default: () => []
},
limit: {
type: Number,
default: 3
@@ -43,23 +40,15 @@ const props = defineProps({
},
})
const fullscreenLoading = ref(false)
const fileList = ref(props.modelValue)
const model = defineModel({ type: Array })
const emits = defineEmits(['update:modelValue', 'on-success', 'on-error'])
const fileList = ref(model.value)
watch(fileList.value, (val) => {
emits('update:modelValue', val)
})
const emits = defineEmits(['on-success', 'on-error'])
watch(
() => props.modelValue,
value => {
fileList.value = value
},
{ immediate: true }
)
const uploadSuccess = (res) => {
const { data,code } = res
if(code !== 0){
@@ -70,16 +59,21 @@ const uploadSuccess = (res) => {
fileList.value.pop()
return
}
if (data.file) {
fileList.value.push({
name: data.file.name,
url: data.file.url
})
fullscreenLoading.value = false
}
model.value.push({
name: data.file.name,
url: data.file.url
})
emits('on-success', res)
}
const uploadRemove = (file) => {
const index = model.value.indexOf(file)
if (index > -1) {
model.value.splice(index, 1)
fileList.value = model.value
}
}
const uploadError = (err) => {
ElMessage({
type: 'error',
+801 -283
View File
File diff suppressed because it is too large Load Diff
+892 -613
View File
File diff suppressed because it is too large Load Diff
+895 -613
View File
File diff suppressed because it is too large Load Diff
+9 -7
View File
@@ -1,28 +1,28 @@
<template>
<div>
<warning-bar title="需要提前配置email配置文件,为防止不必要的垃圾邮件,在线体验功能不开放此功能体验。" />
<warning-bar :title="t('view.plugins.emailConfigNote')" />
<div class="gva-form-box">
<el-form
ref="emailForm"
label-position="right"
label-width="80px"
label-width="140px"
:model="form"
>
<el-form-item label="目标邮箱">
<el-form-item :label="t('view.plugins.targetEmail')">
<el-input v-model="form.to" />
</el-form-item>
<el-form-item label="邮件">
<el-form-item :label="t('view.plugins.email')">
<el-input v-model="form.subject" />
</el-form-item>
<el-form-item label="邮件内容">
<el-form-item :label="t('view.plugins.emailContent')">
<el-input
v-model="form.body"
type="textarea"
/>
</el-form-item>
<el-form-item>
<el-button @click="sendTestEmail">发送测试邮件</el-button>
<el-button @click="sendEmail">发送邮件</el-button>
<el-button @click="sendTestEmail">{{ t('view.plugins.sendTestEmail') }}</el-button>
<el-button @click="sendEmail">{{ t('view.plugins.sendEmail') }}</el-button>
</el-form-item>
</el-form>
</div>
@@ -35,7 +35,9 @@ import WarningBar from '@/components/warningBar/warningBar.vue'
import { emailTest } from '@/plugin/email/api/email.js'
import { ElMessage } from 'element-plus'
import { reactive, ref } from 'vue'
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
defineOptions({
name: 'Email',
})
+23 -20
View File
@@ -19,56 +19,59 @@
</template>
<script setup>
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const notices = [
{
type : 'primary',
typeTitle : "公告",
title : "授权费将在从六月一日起结束第一价格梯度,进入第二价格梯度。",
typeTitle : t('view.dashboard.announcement'),
title : t('view.dashboard.noticeList.notice1'),
},
{
type : 'success',
typeTitle : "通知",
title : "授权后将进入专属飞书群,获取官方辅助。",
typeTitle : t('view.dashboard.notification'),
title : t('view.dashboard.noticeList.notice2'),
},
{
type : 'warning',
typeTitle : "警告",
title : "授权可获得插件市场极大优惠价格。",
typeTitle : t('general.warning'),
title : t('view.dashboard.noticeList.notice3'),
},
{
type : 'danger',
typeTitle : "违规",
title : "未授权商用将有可能被资源采集工具爬取并追责。",
typeTitle : t('view.dashboard.violation'),
title : t('view.dashboard.noticeList.notice4'),
},
{
type : 'info',
typeTitle : "信息",
title : "再次感谢您对开源事业的支持",
typeTitle : t('view.dashboard.information'),
title : t('view.dashboard.noticeList.notice5'),
},
{
type : 'primary',
typeTitle : "公告",
title : "让创意更有价值。",
typeTitle : t('view.dashboard.announcement'),
title : t('view.dashboard.noticeList.notice6'),
},
{
type : 'success',
typeTitle : "通知",
title : "让劳动更有意义。",
typeTitle : t('view.dashboard.notification'),
title : t('view.dashboard.noticeList.notice7'),
},
{
type : 'warning',
typeTitle : "警告",
title : "让思维更有深度。",
typeTitle : t('general.warning'),
title : t('view.dashboard.noticeList.notice8'),
},
{
type : 'danger',
typeTitle : "错误",
title : "让生活更有趣味。",
typeTitle : t('view.dashboard.error'),
title : t('view.dashboard.noticeList.notice9'),
},
{
type : 'info',
typeTitle : "信息",
title : "让公司更有活力。",
typeTitle : t('view.dashboard.information'),
title : t('view.dashboard.noticeList.notice10'),
}
]
</script>
@@ -6,19 +6,23 @@
<template>
<div>
<el-table :data="tableData" stripe style="width: 100%">
<el-table-column prop="ranking" label="排名" width="80" align="center" />
<el-table-column prop="title" label="插件标题" show-overflow-tooltip>
<el-table-column prop="ranking" :label="t('view.dashboard.components.table.ranking')" width="80" align="center" />
<el-table-column prop="title" :label="t('view.dashboard.components.table.PluginTitle')" show-overflow-tooltip>
<template #default="{ row }">
<a class="text-active" :href="row.link" target="_blank">{{ row.title }}</a>
</template>
</el-table-column>
<el-table-column prop="click_num" label="关注度" width="100" />
<el-table-column prop="hot" label="热度值" width="100" />
<el-table-column prop="click_num" :label="t('view.dashboard.components.table.attention')" width="100" />
<el-table-column prop="hot" :label="t('view.dashboard.components.table.heat')" width="100" />
</el-table>
</div>
</template>
<script setup>
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const tableData = [
{
ranking: 1,
@@ -9,7 +9,7 @@
<div class="w-8 h-8 rounded bg-gray-200 dark:bg-slate-500 flex items-center justify-center group-hover:bg-blue-400 group-hover:text-white">
<el-icon><component :is="item.icon" /></el-icon>
</div>
<div class="text-xs mt-2 text-gray-700 dark:text-gray-300">
<div class="text-xs mt-2 text-gray-700 dark:text-gray-300 text-center">
{{ item.title }}
</div>
</div>
@@ -19,7 +19,7 @@
<div class="w-8 h-8 rounded bg-gray-200 dark:bg-slate-500 flex items-center justify-center group-hover:bg-blue-400 group-hover:text-white">
<el-icon><component :is="item.icon" /></el-icon>
</div>
<div class="text-xs mt-2 text-gray-700 dark:text-gray-300">
<div class="text-xs mt-2 text-gray-700 dark:text-gray-300 text-center">
{{ item.title }}
</div>
</div>
@@ -38,35 +38,39 @@ const toPath = (item) => {
const openLink = (item) => {
window.open(item.path, '_blank')
}
const shortcuts = [
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const shortcuts = [
{
icon : Menu,
title : "菜单管理",
title :t('view.dashboard.grids.menuManage'),
path : "menu",
},
{
icon : Link,
title : "API管理",
title : t('view.dashboard.grids.apiManage'),
path : "api",
},
{
icon : Service,
title : "角色管理",
title : t('view.dashboard.grids.roleManage'),
path : "authority",
},
{
icon : User,
title : "用户管理",
title : t('view.dashboard.grids.userManage'),
path : "user",
},
{
icon : Files,
title : "自动化包",
title : t('view.dashboard.grids.automationPackage'),
path: "autoPkg",
},
{
icon : Memo,
title : "自动代码",
title : t('view.dashboard.grids.autoCode'),
path: "autoCode",
}
]
@@ -74,12 +78,12 @@ const openLink = (item) => {
const recentVisits = [
{
icon : Reading,
title : "授权购买",
title : t('view.dashboard.grids.licensePurchase'),
path: "https://gin-vue-admin.com/empower/index.html",
},
{
icon : Document,
title : "插件市场",
title : t('view.dashboard.grids.pluginMarket'),
path: "https://plugin.gin-vue-admin.com/#/layout/home",
}
]
+18 -16
View File
@@ -12,27 +12,29 @@
</template>
<script setup>
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const wikis = [
{
title: t('view.dashboard.grids.ginDoc'),
url : 'https://gin-gonic.com/'
},
{
title : t('view.dashboard.grids.gvaDoc'),
url : 'https://www.gin-vue-admin.com/'
},
{
title : t('view.dashboard.grids.githubRepo'),
url : 'https://github.com/flipped-aurora/gin-vue-admin'
},{
title : t('view.dashboard.grids.pluginMarket'),
url : 'https://plugin.gin-vue-admin.com/'
},
{
title: 'Vue3',
url : 'https://v3.cn.vuejs.org/guide/introduction.html'
},
{
title: 'GIN 文档',
url : 'https://gin-gonic.com/'
},
{
title : "GVA 文档",
url : 'https://www.gin-vue-admin.com/'
},
{
title : "插件市场",
url : 'https://plugin.gin-vue-admin.com/'
},
{
title : "github 仓库",
url : 'https://github.com/flipped-aurora/gin-vue-admin'
}
]
</script>
+3 -3
View File
@@ -191,9 +191,9 @@ const closeDrawer = () => {
}
}
const deleteCustomer = async(row) => {
ElMessageBox.confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
ElMessageBox.confirm(t('general.deleteConfirm'), t('general.hint'), {
confirmButtonText: t('general.confirm'),
cancelButtonText: t('general.cancel'),
type: 'warning'
}).then(async() => {
const res = await deleteExaCustomer({ ID: row.ID })
@@ -52,17 +52,17 @@
</div>
</template>
<el-form ref="drawerForm" :model="formData" :rules="rules" label-width="110px">
<el-form-item label="字典名(中)" prop="name">
<el-input v-model="formData.name" placeholder="请输入字典名(中)" clearable :style="{ width: '100%' }" />
<el-form-item :label="t('view.dictionary.sysDictionary.dictName')" prop="name">
<el-input v-model="formData.name" :placeholder="t('view.dictionary.sysDictionary.enterDictName')" clearable :style="{ width: '100%' }" />
</el-form-item>
<el-form-item label="字典名(英)" prop="type">
<el-input v-model="formData.type" placeholder="请输入字典名(英)" clearable :style="{ width: '100%' }" />
<el-form-item :label="t('view.dictionary.sysDictionary.dictNameEn')" prop="type">
<el-input v-model="formData.type" :placeholder="t('view.dictionary.sysDictionary.enterDictNameEn')" clearable :style="{ width: '100%' }" />
</el-form-item>
<el-form-item label="状态" prop="status" required>
<el-form-item :label="t('view.dictionary.sysDictionary.status')" prop="status" required>
<el-switch v-model="formData.status" :active-text="t('general.enable')" :inactive-text="t('general.disable')" />
</el-form-item>
<el-form-item label="描述" prop="desc">
<el-input v-model="formData.desc" placeholder="请输入描述" clearable :style="{ width: '100%' }" />
<el-form-item :label="t('view.systemTools.autoPkg.description')" prop="desc">
<el-input v-model="formData.desc" :placeholder="t('view.dictionary.sysDictionary.enterDescription')" clearable :style="{ width: '100%' }" />
</el-form-item>
</el-form>
</el-drawer>
+1 -1
View File
@@ -313,7 +313,7 @@
<div>
<span> {{ t('menu.highlightMenu') }} </span>
<el-tooltip
content="注:当到达此路由时候,指定左侧菜单指定name会处于活跃状态(亮起),可为空,为空则为本路由Name。"
:content="t('authority.routeNote')"
placement="top"
effect="light"
>
@@ -252,9 +252,9 @@ const handleSelectionChange = (val) => {
multipleSelection.value = val
}
const onDelete = async() => {
ElMessageBox.confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
ElMessageBox.confirm(t('general.deleteConfirm'), t('general.hint'), {
confirmButtonText: t('general.confirm'),
cancelButtonText: t('general.cancel'),
type: 'warning'
}).then(async() => {
const ids = []
File diff suppressed because it is too large Load Diff
@@ -18,19 +18,19 @@
</el-table-column>
<el-table-column
align="left"
:label="t('autoCode.structName')"
:label="t('view.systemTools.autoCode.structName')"
min-width="150"
prop="structName"
/>
<el-table-column
align="left"
:label="t('autoCode.structChineseName')"
:label="t('view.systemTools.autoCode.structChineseName')"
min-width="150"
prop="structCNName"
/>
<el-table-column
align="left"
:label="t('autoCode.tableName')"
:label="t('view.systemTools.autoCode.tableName')"
min-width="150"
prop="tableName"
/>
@@ -58,7 +58,7 @@
:disabled="scope.row.flag === 1"
@click="addFuncBtn(scope.row)"
>
增加方法
{{ t('view.systemTools.autoPkg.addMethod') }}
</el-button>
<el-button
type="primary"
@@ -97,18 +97,18 @@
width="600px"
>
<el-form :inline="true" :model="formData" label-width="80px">
<el-form-item label="选项:">
<el-form-item :label="t('view.systemTools.autoPkg.options')">
<el-checkbox
v-model="formData.deleteApi"
label="删除接口"
:label="t('view.systemTools.autoPkg.deleteInterface')"
/>
<el-checkbox
v-model="formData.deleteMenu"
label="删除菜单"
:label="t('view.systemTools.autoPkg.deleteMenu')"
/>
<el-checkbox
v-model="formData.deleteTable"
label="删除表"
:label="t('view.systemTools.autoPkg.deleteTable')"
@change="deleteTableCheck"
/>
</el-form-item>
@@ -116,15 +116,15 @@
<template #footer>
<div class="dialog-footer">
<el-button @click="closeDialog">
取 消
{{t('general.close')}}
</el-button>
<el-popconfirm
title="此操作将回滚生成文件和勾选项目, 是否继续?"
:title="t('view.systemTools.autoPkg.rollbackOperationNote')"
@confirm="enterDialog"
>
<template #reference>
<el-button type="primary">
确 定
{{t('general.confirm')}}
</el-button>
</template>
</el-popconfirm>
@@ -140,51 +140,51 @@
>
<template #header>
<div class="flex justify-between items-center">
<span class="text-lg">操作栏</span>
<span class="text-lg">{{ t('view.systemTools.autoCode.actionBar') }}</span>
<div>
<el-button
type="primary"
@click="runFunc"
>
生成
{{ t('view.systemTools.autoPkg.generate') }}
</el-button>
<el-button
type="primary"
@click="closeFunc"
>
取消
{{ t('general.cancel') }}
</el-button>
</div>
</div>
</template>
<div class="">
<el-form label-position="top" :model="autoFunc" label-width="80px">
<el-form-item label="包名:">
<el-input v-model="autoFunc.package" placeholder="请输入包名" disabled />
<el-form-item :label="t('view.systemTools.autoPkg.packageName')">
<el-input v-model="autoFunc.package" :placeholder="t('view.systemTools.autoPkg.enterPackageNameNote')" disabled />
</el-form-item>
<el-form-item label="结构体名:">
<el-input v-model="autoFunc.structName" placeholder="请输入结构体名" disabled />
<el-form-item :label="t('view.systemTools.structName')">
<el-input v-model="autoFunc.structName" :placeholder="t('view.systemTools.autoCode.entStructName')" disabled />
</el-form-item>
<el-form-item label="前端文件名:">
<el-input v-model="autoFunc.packageName" placeholder="请输入文件名" disabled />
<el-form-item :label="t('view.systemTools.frontendFileName')">
<el-input v-model="autoFunc.packageName" :placeholder="t('view.systemTools.autoCode.fineNameInput')" disabled />
</el-form-item>
<el-form-item label="后端文件名:">
<el-input v-model="autoFunc.humpPackageName" placeholder="请输入文件名" disabled />
<el-form-item :label="t('view.systemTools.backendFileName')">
<el-input v-model="autoFunc.humpPackageName" :placeholder="t('view.systemTools.autoCode.fineNameInput')" disabled />
</el-form-item>
<el-form-item label="描述:">
<el-input v-model="autoFunc.description" placeholder="请输入描述" disabled />
<el-form-item :label="t('general.description')">
<el-input v-model="autoFunc.description" :placeholder="t('view.systemTools.dictionary.sysDictionary.enterDescription')" disabled />
</el-form-item>
<el-form-item label="缩写:">
<el-input v-model="autoFunc.abbreviation" placeholder="请输入缩写" disabled />
<el-form-item :label="t('view.systemTools.abbreviation')">
<el-input v-model="autoFunc.abbreviation" :placeholder="t('view.systemTools.enterAbbreviation')" disabled />
</el-form-item>
<el-form-item label="方法介绍:">
<el-input v-model="autoFunc.funcDesc" placeholder="请输入方法介绍" />
<el-form-item :label="t('view.systemTools.methodDescription')">
<el-input v-model="autoFunc.funcDesc" :placeholder="t('view.systemTools.enterMethodDescription')" />
</el-form-item>
<el-form-item label="方法名:">
<el-input v-model="autoFunc.funcName" placeholder="请输入方法名" />
<el-form-item :label="t('view.systemTools.methodName')">
<el-input v-model="autoFunc.funcName" :placeholder="t('view.systemTools.enterMethodName')" />
</el-form-item>
<el-form-item label="方法:">
<el-select v-model="autoFunc.method" placeholder="请选择方法">
<el-form-item :label="t('view.systemTools.method')">
<el-select v-model="autoFunc.method" :placeholder="t('view.systemTools.selectMethod')">
<el-option
v-for="item in ['GET', 'POST', 'PUT', 'DELETE']"
:key="item"
@@ -193,9 +193,9 @@
/>
</el-select>
</el-form-item>
<el-form-item label="路由path:">
<el-input v-model="autoFunc.router" placeholder="路由path" />
<div>API路径: [{{ autoFunc.method }}] /{{ autoFunc.abbreviation }}/{{ autoFunc.router }}</div>
<el-form-item :label="t('menu.routePath')">
<el-input v-model="autoFunc.router" :placeholder="t('menu.routePath')" />
<div>{{t('view.api.apiPath')}}: [{{ autoFunc.method }}] /{{ autoFunc.abbreviation }}/{{ autoFunc.router }}</div>
</el-form-item>
</el-form>
</div>
@@ -259,7 +259,7 @@ const addFuncBtn = (row) => {
autoFunc.value.method = ""
autoFunc.value.funcName = ""
autoFunc.value.router = ""
autoFunc.value.funcDesc = "方法介绍"
autoFunc.value.funcDesc = t('view.systemTools.enterMethodDescription')
funcFlag.value = true;
};
@@ -275,7 +275,7 @@ const runFunc = async () =>{
const res = await addFunc(autoFunc.value)
if (res.code === 0) {
ElMessage.success("增加方法成功");
ElMessage.success(t('view.systemTools.autoPkg.addMethodSuccess'));
closeFunc()
}
}
@@ -323,7 +323,7 @@ const deleteRow = async(row) => {
// 打开弹窗
const openDialog = (row) => {
dialogFormTitle.value = "回滚:" + row.structName;
dialogFormTitle.value = t('autoCodeAdmin.rollBack') + row.structName;
formData.value.id = row.ID;
dialogFormVisible.value = true;
};
@@ -343,8 +343,8 @@ const closeDialog = () => {
const deleteTableCheck = (flag) => {
if (flag) {
ElMessageBox.confirm(
`此操作将删除自动创建的文件和api(会删除表!!!), 是否继续?`,
"提示",
t('view.systemTools.autoPkg.deleteFilesNote'),
t('general.hint'),
{
closeOnClickModal: false,
distinguishCancelAndClose: true,
@@ -355,13 +355,13 @@ const deleteTableCheck = (flag) => {
)
.then(() => {
ElMessageBox.confirm(
`此操作将删除自动创建的文件和api(会删除表!!!), 请继续确认!!!`,
"会删除表",
t('view.systemTools.autoPkg.deleteFilesConfirmation'),
t('view.systemTools.autoPkg.willDeleteTable'),
{
closeOnClickModal: false,
distinguishCancelAndClose: true,
confirmButtonText: "确定",
cancelButtonText: "取消",
confirmButtonText: t('general.confirm'),
cancelButtonText: t('general.cancel'),
type: "warning",
}
).catch(() => {
@@ -377,7 +377,7 @@ const deleteTableCheck = (flag) => {
const enterDialog = async () => {
const res = await rollback(formData.value);
if (res.code === 0) {
ElMessage.success("回滚成功");
ElMessage.success(t('autoCodeAdmin.rollbackSuccess'));
getTableData();
}
};
+1 -1
View File
@@ -177,7 +177,7 @@ const validateNum = (rule, value, callback) => {
if (/[\u4E00-\u9FA5]/g.test(value)) {
callback(new Error(t('view.systemTools.autoPkg.cannotStartWithNumberNote')))
} else if ((/^\d+$/.test(value[0]))) {
callback(new Error('不能够以数字开头'))
callback(new Error(t('view.systemTools.autoPkg.cannotStartWithNumberNote')))
} else {
callback()
}
@@ -1,7 +1,7 @@
<template>
<div>
<WarningBar
title="本功能提供同步的表格导出功能,大数据量的异步表格导出功能,可以选择点我定制"
:title="t('view.systemTools.syncTableExportFeature')"
href="https://flipped-aurora.feishu.cn/docx/KwjxdnvatozgwIxGV0rcpkZSn4d"
/>
<div class="gva-search-box">
@@ -14,13 +14,13 @@
@keyup.enter="onSubmit"
>
<el-form-item
label="创建日期"
:label="t('general.createDate')"
prop="createdAt"
>
<template #label>
<span>
创建日期
<el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
{{ t('general.createDate') }}
<el-tooltip :content="t('general.searchDesc')">
<el-icon><QuestionFilled /></el-icon>
</el-tooltip>
</span>
@@ -28,44 +28,45 @@
<el-date-picker
v-model="searchInfo.startCreatedAt"
type="datetime"
placeholder="开始日期"
:placeholder="t('general.endData')"
:disabled-date="time=> searchInfo.endCreatedAt ? time.getTime() > searchInfo.endCreatedAt.getTime() : false"
/>
—
<el-date-picker
v-model="searchInfo.endCreatedAt"
type="datetime"
placeholder="结束日期"
:placeholder="t('general.startData')"
:disabled-date="time=> searchInfo.startCreatedAt ? time.getTime() < searchInfo.startCreatedAt.getTime() : false"
/>
</el-form-item>
<el-form-item
label="模板名称"
:label="t('view.systemTools.templateName')"
prop="name"
>
<el-input
v-model="searchInfo.name"
placeholder="搜索条件"
:placeholder="t('general.searchCriteria')"
/>
</el-form-item>
<el-form-item
label="表名称"
:label="t('view.systemTools.tableName')"
prop="tableName"
>
<el-input
v-model="searchInfo.tableName"
placeholder="搜索条件"
:placeholder="t('general.searchCriteria')"
/>
</el-form-item>
<el-form-item
label="模板标识"
:label="t('view.systemTools.templateIdentifier')"
prop="templateID"
>
<el-input
v-model="searchInfo.templateID"
placeholder="搜索条件"
:placeholder="t('general.searchCriteria')"
/>
</el-form-item>
@@ -74,11 +75,11 @@
type="primary"
icon="search"
@click="onSubmit"
>查询</el-button>
>{{t('general.search')}}</el-button>
<el-button
icon="refresh"
@click="onReset"
>重置</el-button>
>{{t('general.reset')}}</el-button>
</el-form-item>
</el-form>
</div>
@@ -88,14 +89,14 @@
type="primary"
icon="plus"
@click="openDialog"
>新增</el-button>
>{{t('general.add')}}</el-button>
<el-button
icon="delete"
style="margin-left: 10px;"
:disabled="!multipleSelection.length"
@click="onDelete"
>删除</el-button>
>{{t('general.delete')}}</el-button>
</div>
<el-table
ref="multipleTable"
@@ -111,47 +112,47 @@
/>
<el-table-column
align="left"
label="日期"
:label="t('general.createdAt')"
width="180"
>
<template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
</el-table-column>
<el-table-column
align="left"
label="数据库"
width="120"
:label="t('view.systemTools.autoCode.dbName')"
width="240"
>
<template #default="scope">
<span>{{ scope.row.dbName || "GVA库" }}</span>
<span>{{ scope.row.dbName || t('view.systemTools.gvaDatabase') }}</span>
</template>
</el-table-column>
<el-table-column
align="left"
label="模板标识"
:label="t('view.systemTools.templateIdentifier')"
prop="templateID"
width="120"
width="140"
/>
<el-table-column
align="left"
label="模板名称"
:label="t('view.systemTools.templateName')"
prop="name"
width="120"
width="260"
/>
<el-table-column
align="left"
label="表名称"
:label="t('view.systemTools.tableName')"
prop="tableName"
width="120"
/>
<el-table-column
align="left"
label="模板信息"
:label="t('view.systemTools.templateInfo')"
prop="templateInfo"
min-width="120"
/>
<el-table-column
align="left"
label="操作"
:label="t('components.commandMenu.operate')"
min-width="120"
>
<template #default="scope">
@@ -161,13 +162,13 @@
icon="edit"
class="table-button"
@click="updateSysExportTemplateFunc(scope.row)"
>变更</el-button>
>{{ t('general.change') }}</el-button>
<el-button
type="primary"
link
icon="delete"
@click="deleteRow(scope.row)"
>删除</el-button>
>{{ t('general.delete') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -187,20 +188,20 @@
v-model="dialogFormVisible"
size="60%"
:before-close="closeDialog"
:title="type==='create'?'添加':'修改'"
:title="type==='create'?t('view.systemTools.add'):t('view.systemTools.edit')"
:show-close="false"
destroy-on-close
>
<template #header>
<div class="flex justify-between items-center">
<span class="text-lg">{{ type==='create'?'添加':'修改' }}</span>
<span class="text-lg">{{ type==='create'?t('view.systemTools.add'):t('view.systemTools.edit') }}</span>
<div>
<el-button @click="closeDialog">取 消</el-button>
<el-button @click="closeDialog">{{ t('general.close') }}</el-button>
<el-button
type="primary"
@click="enterDialog"
>确 定</el-button>
>{{ t('general.confirm') }}</el-button>
</div>
</div>
</template>
@@ -214,23 +215,24 @@
>
<el-form-item
label="业务库"
label-width="160px"
:label="t('view.systemTools.autoCode.businessLibrary')"
prop="dbName"
>
<template #label>
<el-tooltip
content="注:需要提前到db-list自行配置多数据库,如未配置需配置后重启服务方可使用。若无法选择,请到config.yaml中设置disabled:false,选择导入导出的目标库。"
:content="t('view.systemTools.note')"
placement="bottom"
effect="light"
>
<div> 业务库 <el-icon><QuestionFilled /></el-icon> </div>
<div> {{ t('view.systemTools.autoCode.businessLibrary') }} <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-select
v-model="formData.dbName"
clearable
@change="dbNameChange"
placeholder="选择业务库"
:placeholder="t('view.systemTools.autoCode.selectBusinessLibrary')"
>
<el-option
v-for="item in dbList"
@@ -248,17 +250,19 @@
</el-form-item>
<el-form-item
label="模板名称:"
label-width="160px"
:label="t('view.systemTools.templateName')"
prop="name"
>
<el-input
v-model="formData.name"
:clearable="true"
placeholder="请输入模板名称"
:placeholder="t('view.systemTools.enterTemplateName')"
/>
</el-form-item>
<el-form-item
label="表名称:"
label-width="160px"
:label="t('view.systemTools.tableName')"
clearable
prop="tableName"
>
@@ -274,7 +278,7 @@
v-model="formData.tableName"
class="flex-1"
filterable
placeholder="请选择表"
:placeholder="t('view.systemTools.autoCode.selectTable')"
>
<el-option
v-for="item in tableOptions"
@@ -284,23 +288,25 @@
/>
</el-select>
<el-button type="primary" @click="getColumnFunc">自动生成模板</el-button>
<el-button type="primary" @click="getColumnFunc">{{ t('view.systemTools.autoGenerateTemplate') }}</el-button>
</div>
</el-form-item>
<el-form-item
label="模板标识:"
label-width="160px"
:label="t('view.systemTools.templateIdentifier')"
prop="templateID"
>
<el-input
v-model="formData.templateID"
:clearable="true"
placeholder="模板标识为前端组件需要挂在的标识属性"
:placeholder="t('view.systemTools.templateIdentifierInfo')"
/>
</el-form-item>
<el-form-item
label="关联条件:"
label-width="160px"
:label="t('view.systemTools.associationCondition')"
>
<div
v-for="(join,key) in formData.joinTemplate"
@@ -309,7 +315,7 @@
>
<el-select
v-model="join.joins"
placeholder="请选择关联方式"
:placeholder="t('view.systemTools.selectAssociationMethod')"
>
<el-option
label="LEFT JOIN"
@@ -326,29 +332,30 @@
</el-select>
<el-input
v-model="join.table"
placeholder="请输入关联表"
:placeholder="t('view.systemTools.enterAssociationTable')"
/>
<el-input
v-model="join.on"
placeholder="关联条件 table1.a = table2.b"
:placeholder="t('view.systemTools.associationCondition')"
/>
<el-button
type="danger"
icon="delete"
@click="() => formData.joinTemplate.splice(key, 1)"
>删除</el-button>
>{{ t('general.delete') }}</el-button>
</div>
<div class="flex justify-end w-full">
<el-button
type="primary"
icon="plus"
@click="addJoin"
>添加条件</el-button>
>{{ t('view.systemTools.addCondition') }}</el-button>
</div>
</el-form-item>
<el-form-item
label="模板信息:"
label-width="160px"
:label="t('view.systemTools.templateInfo')"
prop="templateInfo"
>
<el-input
@@ -356,11 +363,12 @@
type="textarea"
:rows="12"
:clearable="true"
:placeholder="templatePlaceholder"
placeholder="templatePlaceholder"
/>
</el-form-item>
<el-form-item
label="默认导出条数:"
label-width="160px"
:label="t('view.systemTools.defaultExportCount')"
>
<el-input-number
v-model="formData.limit"
@@ -370,7 +378,8 @@
/>
</el-form-item>
<el-form-item
label="默认排序条件:"
label-width="160px"
:label="t('view.systemTools.defaultSortCondition')"
>
<el-input
v-model="formData.order"
@@ -378,7 +387,8 @@
/>
</el-form-item>
<el-form-item
label="导出条件:"
label-width="160px"
:label="t('view.systemTools.exportCondition')"
>
<div
v-for="(condition,key) in formData.conditions"
@@ -387,15 +397,15 @@
>
<el-input
v-model="condition.from"
placeholder="需要从查询条件取的json key"
:placeholder="t('view.systemTools.jsonKeyFromQuery')"
/>
<el-input
v-model="condition.column"
placeholder="表对应的column"
:placeholder="t('view.systemTools.tableColumn')"
/>
<el-select
v-model="condition.operator"
placeholder="请选择查询条件"
:placeholder="t('view.systemTools.selectQueryCondition')"
>
<el-option
v-for="item in typeSearchOptions"
@@ -408,14 +418,14 @@
type="danger"
icon="delete"
@click="() => formData.conditions.splice(key, 1)"
>删除</el-button>
>{{ t('general.delete') }}</el-button>
</div>
<div class="flex justify-end w-full">
<el-button
type="primary"
icon="plus"
@click="addCondition"
>添加条件</el-button>
>{{ t('view.systemTools.addCondition') }}</el-button>
</div>
</el-form-item>
</el-form>
@@ -439,7 +449,9 @@ import { ElMessage, ElMessageBox } from 'element-plus'
import { ref, reactive } from 'vue'
import WarningBar from '@/components/warningBar/warningBar.vue'
import {getDB, getTable, getColumn} from '@/api/autoCode'
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
defineOptions({
name: 'ExportTemplate'
})
@@ -525,7 +537,7 @@ const rule = reactive({
},
{
whitespace: true,
message: '不能只输入空格',
message: t('general.noOnlySpace'),
trigger: ['input', 'blur'],
}
],
@@ -536,7 +548,7 @@ const rule = reactive({
},
{
whitespace: true,
message: '不能只输入空格',
message: t('general.noOnlySpace'),
trigger: ['input', 'blur'],
}
],
@@ -547,7 +559,7 @@ const rule = reactive({
},
{
whitespace: true,
message: '不能只输入空格',
message: t('general.noOnlySpace'),
trigger: ['input', 'blur'],
}
],
@@ -558,7 +570,7 @@ const rule = reactive({
},
{
whitespace: true,
message: '不能只输入空格',
message: t('general.noOnlySpace'),
trigger: ['input', 'blur'],
}
],
@@ -568,11 +580,11 @@ const searchRule = reactive({
createdAt: [
{ validator: (rule, value, callback) => {
if (searchInfo.value.startCreatedAt && !searchInfo.value.endCreatedAt) {
callback(new Error('请填写结束日期'))
callback(new Error(t('general.placeInputEndData')))
} else if (!searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt) {
callback(new Error('请填写开始日期'))
callback(new Error(t('general.placeInputStartData')))
} else if (searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt && (searchInfo.value.startCreatedAt.getTime() === searchInfo.value.endCreatedAt.getTime() || searchInfo.value.startCreatedAt.getTime() > searchInfo.value.endCreatedAt.getTime())) {
callback(new Error('开始日期应当早于结束日期'))
callback(new Error(t('general.startDataMustBeforeEndData')))
} else {
callback()
}
@@ -621,7 +633,7 @@ const getColumnFunc = async () => {
if(!formData.value.tableName) {
ElMessage({
type: 'error',
message: '请先选择业务库及选择表后再进行操作'
message: t('view.systemTools.selectBusinessDbAndTable')
})
return
}
@@ -700,9 +712,9 @@ const handleSelectionChange = (val) => {
// 删除行
const deleteRow = (row) => {
ElMessageBox.confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
ElMessageBox.confirm(t('general.deleteConfirm'), t('general.hint'), {
confirmButtonText: t('general.confirm'),
cancelButtonText: t('general.cancel'),
type: 'warning'
}).then(() => {
deleteSysExportTemplateFunc(row)
@@ -711,16 +723,16 @@ const deleteRow = (row) => {
// 多选删除
const onDelete = async() => {
ElMessageBox.confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
ElMessageBox.confirm(t('general.deleteConfirm'), t('general.hint'), {
confirmButtonText: t('general.confirm'),
cancelButtonText: t('general.cancel'),
type: 'warning'
}).then(async() => {
const ids = []
if (multipleSelection.value.length === 0) {
ElMessage({
type: 'warning',
message: '请选择要删除的数据'
message: t('general.selectDataToDelete')
})
return
}
@@ -732,7 +744,7 @@ const onDelete = async() => {
if (res.code === 0) {
ElMessage({
type: 'success',
message: '删除成功'
message: t('general.deleteSuccess')
})
if (tableData.value.length === ids.length && page.value > 1) {
page.value--
@@ -767,7 +779,7 @@ const deleteSysExportTemplateFunc = async(row) => {
if (res.code === 0) {
ElMessage({
type: 'success',
message: '删除成功'
message: t('general.deleteSuccess')
})
if (tableData.value.length === 1 && page.value > 1) {
page.value--
@@ -807,7 +819,7 @@ const enterDialog = async() => {
} catch (error) {
ElMessage({
type: 'error',
message: '模板信息格式不正确,请检查'
message: t('view.systemTools.templateFormatIncorrect')
})
return
}
@@ -817,7 +829,7 @@ const enterDialog = async() => {
if (!reqData.conditions[i].from || !reqData.conditions[i].column || !reqData.conditions[i].operator) {
ElMessage({
type: 'error',
message: '请填写完整的导出条件'
message: t('view.systemTools.completeExportConditions')
})
return
}
@@ -828,7 +840,7 @@ const enterDialog = async() => {
if (!reqData.joinTemplate[i].joins || !reqData.joinTemplate[i].on) {
ElMessage({
type: 'error',
message: '请填写完整的关联'
message: t('view.systemTools.completeAssociation')
})
return
}
@@ -852,7 +864,7 @@ const enterDialog = async() => {
if (res.code === 0) {
ElMessage({
type: 'success',
message: '创建/更改成功'
message: t('general.createUpdateSuccess')
})
closeDialog()
getTableData()
@@ -10,11 +10,11 @@
>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">
拖拽或<em>点击上传</em>
{{ t('view.plugins.dragOrClickUpload') }}
</div>
<template #tip>
<div class="el-upload__tip">
请把安装包的zip拖拽至此处上传
{{ t('view.plugins.uploadPackage') }}
</div>
</template>
</el-upload>
@@ -25,6 +25,10 @@
import { ElMessage } from 'element-plus'
import { getBaseUrl } from '@/utils/format'
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const handleSuccess = (res) => {
if (res.code === 0) {
let msg = ``
+36 -33
View File
@@ -1,16 +1,16 @@
<template>
<div class="gva-form-box">
<div class="p-4 bg-white dark:bg-slate-900">
<WarningBar title="目前只支持标准插件(通过插件模板生成的标准目录插件),非标准插件请自行打包" />
<WarningBar :title="t('view.plugins.pluginSupport')" />
<div class="flex items-center gap-3">
<el-input
v-model="plugName"
placeholder="插件模板处填写的【插件名】"
:placeholder="t('view.plugins.pluginNameInput')"
/>
</div>
<el-card class="mt-2 text-center">
<WarningBar title="穿梭框请只选择子级菜单即可" />
<el-input v-model="parentMenu" placeholder="请输入菜单组名,例:公告管理" class="mb-2"></el-input>
<WarningBar :title="t('view.plugins.menuSelectionNote')" />
<el-input v-model="parentMenu" :placeholder="t('view.plugins.menuGroupNameInput')" class="mb-2"></el-input>
<el-transfer
v-model="menus"
:props="{
@@ -20,9 +20,9 @@
:data="menusData"
filterable
:filter-method="filterMenuMethod"
filter-placeholder="请输入菜单名称/路径"
:titles="['可选菜单','使用菜单']"
:button-texts="['移除', '选中']"
:filter-placeholder="t('view.plugins.menuNamePathInput')"
:titles="[t('view.plugins.optionalMenu'),t('view.plugins.useMenu')]"
:button-texts="[t('view.plugins.remove'), t('view.plugins.selected')]"
>
<template #default="{option}">
{{ option.meta.title }} {{ option.component }}
@@ -33,7 +33,7 @@
type="primary"
@click="fmtInitMenu"
>
定义安装菜单
{{ t('view.plugins.defineMenuInstall') }}
</el-button>
</div>
</el-card>
@@ -47,9 +47,9 @@
:data="apisData"
filterable
:filter-method="filterApiMethod"
filter-placeholder="请输入API描述/PATH"
:titles="['可选API','使用API']"
:button-texts="['移除', '选中']"
:filter-placeholder="t('view.plugins.apiDescriptionPathInput')"
:titles="[t('view.plugins.optionalAPI'),t('view.plugins.useAPI')]"
:button-texts="[t('view.plugins.remove'), t('view.plugins.selected')]"
>
<template #default="{option}">
{{ option.description }} {{ option.path }}
@@ -60,7 +60,7 @@
type="primary"
@click="fmtInitAPI"
>
定义安装API
{{ t('view.plugins.defineAPIInstall') }}
</el-button>
</div>
</el-card>
@@ -70,7 +70,7 @@
type="primary"
@click="pubPlugin"
>
打包插件
{{ t('view.plugins.packagePlugin') }}
</el-button>
</div>
</div>
@@ -91,6 +91,9 @@ const menusData = ref([])
const apis = ref([])
const apisData = ref([])
const parentMenu = ref('')
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const fmtMenu = (menus) => {
// 如果menu存在children,递归展开到一级
@@ -129,11 +132,11 @@ initData()
const pubPlugin = async() => {
ElMessageBox.confirm(
`请检查server下的/plugin/${plugName.value}/plugin.go是否已放开需要的 initialize.Api(ctx) 和 initialize.Menu(ctx)?`,
'打包',
t('view.plugins.checkMsg'),
t('view.plugins.package'),
{
confirmButtonText: '打包',
cancelButtonText: '取消',
confirmButtonText: t('view.plugins.package'),
cancelButtonText: t('general.cancel'),
type: 'warning',
}
)
@@ -146,7 +149,7 @@ const pubPlugin = async() => {
.catch(() => {
ElMessage({
type: 'info',
message: '关闭打包',
message: t('view.plugins.closePackage'),
})
})
@@ -154,23 +157,23 @@ const pubPlugin = async() => {
const fmtInitMenu = () => {
if (!parentMenu.value) {
ElMessage.error('请填写菜单组名')
ElMessage.error(t('view.plugins.enterMenuGroupName'))
return
}
if (menus.value.length === 0) {
ElMessage.error('请至少选择一个菜单')
ElMessage.error(t('view.plugins.selectAtLeastOneMenu'))
return
}
if (plugName.value === '') {
ElMessage.error('请填写插件名')
ElMessage.error(t('view.plugins.enterPluginName'))
return
}
ElMessageBox.confirm(
`点击后将会覆盖server下的/plugin/${plugName.value}/initialize/menu. 是否继续?`,
'生成初始菜单',
t('view.plugins.overwriteMessage'),
t('view.plugins.generateInitialMenu'),
{
confirmButtonText: '生成',
cancelButtonText: '取消',
confirmButtonText: t('general.generate'),
cancelButtonText: t('general.cancel'),
type: 'warning',
}
)
@@ -185,25 +188,25 @@ const fmtInitMenu = () => {
.catch(() => {
ElMessage({
type: 'info',
message: '关闭生成菜单',
message: t('view.plugins.closeGenerateMenu'),
})
})
}
const fmtInitAPI = () => {
if (apis.value.length === 0) {
ElMessage.error('请至少选择一个API')
ElMessage.error(t('view.plugins.selectAtLeastOneAPI'))
return
}
if (plugName.value === '') {
ElMessage.error('请填写插件名')
ElMessage.error(t('view.plugins.enterPluginNameAgain'))
return
}
ElMessageBox.confirm(
`点击后将会覆盖server下的/plugin/${plugName.value}/initialize/api. 是否继续?`,
'生成初始API',
t('view.plugins.overwriteWarning'),
t('view.plugins.generateInitialAPI'),
{
confirmButtonText: '生成',
cancelButtonText: '取消',
confirmButtonText: t('general.generate'),
cancelButtonText: t('general.cancel'),
type: 'warning',
}
)
@@ -218,7 +221,7 @@ const fmtInitAPI = () => {
.catch(() => {
ElMessage({
type: 'info',
message: '关闭生成API',
message: t('view.plugins.closeGenerateAPI'),
})
})
}
+206 -206
View File
@@ -13,7 +13,7 @@
class="mt-3.5"
>
<el-form-item :label="t('view.systemTools.system.portValue')">
<el-input-number v-model.number="config.system.addr" placeholder="请输入端口值"/>
<el-input-number v-model.number="config.system.addr" :placeholder="t('view.systemTools.system.portValue')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.dbType')">
<el-select
@@ -32,11 +32,11 @@
v-model="config.system['oss-type']"
class="w-full"
>
<el-option value="local">本地</el-option>
<el-option value="qiniu">七牛</el-option>
<el-option value="tencent-cos">腾讯云COS</el-option>
<el-option value="aliyun-oss">阿里云OSS</el-option>
<el-option value="huawei-obs">华为云OBS</el-option>
<el-option value="local">{{t('view.systemTools.system.local') }}</el-option>
<el-option value="qiniu">{{t('view.systemTools.system.qiniu') }}</el-option>
<el-option value="tencent-cos">{{ t('view.systemTools.system.tencentCOS') }}</el-option>
<el-option value="aliyun-oss">{{ t('view.systemTools.system.alibabaOSS') }}</el-option>
<el-option value="huawei-obs">{{ t('view.systemTools.system.huaweiOBS') }}</el-option>
<el-option value="cloudflare-r2">cloudflare R2</el-option>
</el-select>
</el-form-item>
@@ -46,10 +46,10 @@
<el-form-item :label="t('view.systemTools.system.enableRedis')">
<el-switch v-model="config.system['use-redis']"/>
</el-form-item>
<el-form-item label="开启Mongo">
<el-form-item :label="t('view.systemTools.system.enableMongo')">
<el-switch v-model="config.system['use-mongo']"/>
</el-form-item>
<el-form-item label="严格角色模式">
<el-form-item :label="t('view.systemTools.system.strictRoleMode')">
<el-switch v-model="config.system['use-strict-auth']"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.ipLimitCount')">
@@ -63,7 +63,7 @@
placement="top-start"
>
<el-form-item :label="t('view.systemTools.system.globalRoutePrefix')">
<el-input v-model.trim="config.system['router-prefix']" placeholder="请输入全局路由前缀"/>
<el-input v-model.trim="config.system['router-prefix']" :placeholder="t('view.systemTools.system.globalRoutePrefix')"/>
</el-form-item>
</el-tooltip>
</el-tab-pane>
@@ -73,20 +73,20 @@
class="mt-3.5"
>
<el-form-item :label="t('view.systemTools.system.jwtSignature')">
<el-input v-model.trim="config.jwt['signing-key']" placeholder="请输入jwt签名">
<el-input v-model.trim="config.jwt['signing-key']" :placeholder="t('view.systemTools.system.jwtSignature')">
<template #append>
<el-button @click="getUUID">生成</el-button>
<el-button @click="getUUID">{{t('view.systemTools.autoPkg.generate')}}</el-button>
</template>
</el-input>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.expirartionSec')">
<el-input v-model.trim="config.jwt['expires-time']" placeholder="请输入有效期"/>
<el-input v-model.trim="config.jwt['expires-time']" :placeholder="t('view.systemTools.system.expiration')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.bufferPeriodSec')">
<el-input v-model.trim="config.jwt['buffer-time']" placeholder="请输入缓冲期"/>
<el-input v-model.trim="config.jwt['buffer-time']" :placeholder="t('view.systemTools.system.bufferPeriod')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.issuer')">
<el-input v-model.trim="config.jwt.issuer" placeholder="请输入签发者"/>
<el-input v-model.trim="config.jwt.issuer" :placeholder="t('view.systemTools.system.issuer')"/>
</el-form-item>
</el-tab-pane>
<el-tab-pane
@@ -96,13 +96,13 @@
>
<el-form-item :label="t('view.systemTools.system.level')">
<el-select v-model="config.zap.level">
<el-option value="off" label="关闭"/>
<el-option value="fatal" label="致命"/>
<el-option value="error" label="错误"/>
<el-option value="warn" label="警告"/>
<el-option value="info" label="信息"/>
<el-option value="debug" label="调试"/>
<el-option value="trace" label="跟踪"/>
<el-option value="off" :label="t('components.commandMenu.close')"/>
<el-option value="fatal" :label="t('view.systemTools.system.fatal')"/>
<el-option value="error" :label="t('view.dashboard.error')"/>
<el-option value="warn" :label="t('general.warning')"/>
<el-option value="info" :label="t('view.dashboard.information')"/>
<el-option value="debug" :label="t('view.systemTools.system.debug')"/>
<el-option value="trace" :label="t('view.systemTools.system.trace')"/>
</el-select>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.output')">
@@ -112,10 +112,10 @@
</el-select>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.logPrefix')">
<el-input v-model.trim="config.zap.prefix" placeholder="请输入日志前缀"/>
<el-input v-model.trim="config.zap.prefix" :placeholder="t('view.systemTools.system.logPrefix')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.logFolder')">
<el-input v-model.trim="config.zap.director" placeholder="请输入日志文件夹"/>
<el-input v-model.trim="config.zap.director" :placeholder="t('view.systemTools.system.logFolder')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.encodeLevel')">
<el-select v-model="config.zap['encode-level']" class="w-6/12">
@@ -126,7 +126,7 @@
</el-select>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.stackName')">
<el-input v-model.trim="config.zap['stacktrace-key']" placeholder="请输入栈名"/>
<el-input v-model.trim="config.zap['stacktrace-key']" :placeholder="t('view.systemTools.system.stackName')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.logRetentionTime')">
<el-input-number v-model="config.zap['retention-day']"/>
@@ -148,40 +148,40 @@
<el-input-number v-model="config.redis.db" min="0" max="16"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.address')">
<el-input v-model.trim="config.redis.addr" placeholder="请输入地址"/>
<el-input v-model.trim="config.redis.addr" :placeholder="t('view.systemTools.system.address')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.password')">
<el-input v-model.trim="config.redis.password" placeholder="请输入密码"/>
<el-input v-model.trim="config.redis.password" :placeholder="t('view.systemTools.system.password')"/>
</el-form-item>
</el-tab-pane>
<el-tab-pane
label="邮箱配置"
:label="t('view.systemTools.system.emailConfig')"
name="5"
class="mt-3.5"
>
<el-form-item label="接收者邮箱">
<el-form-item :label="t('view.systemTools.system.recipientEmail')">
<el-input
v-model="config.email.to"
placeholder="可多个,以逗号分隔"
:placeholder="t('view.systemTools.system.multipleEmailsNote')"
/>
</el-form-item>
<el-form-item label="端口">
<el-form-item :label="t('view.systemTools.system.port')">
<el-input-number v-model="config.email.port" />
</el-form-item>
<el-form-item label="发送者邮箱">
<el-input v-model.trim="config.email.from" placeholder="请输入发送者邮箱" />
<el-form-item :label="t('view.systemTools.system.senderEmail')">
<el-input v-model.trim="config.email.from" :placeholder="t('view.systemTools.system.enterSenderEmail')" />
</el-form-item>
<el-form-item label="host">
<el-input v-model.trim="config.email.host" placeholder="请输入host" />
<el-input v-model.trim="config.email.host" :placeholder="t('view.systemTools.system.enterHost')" />
</el-form-item>
<el-form-item label="是否为ssl">
<el-form-item :label="t('view.systemTools.system.isSSL')">
<el-switch v-model="config.email['is-ssl']" />
</el-form-item>
<el-form-item label="secret">
<el-input v-model.trim="config.email.secret" placeholder="请输入secret"/>
<el-input v-model.trim="config.email.secret" :placeholder="t('view.systemTools.system.enterSecret')"/>
</el-form-item>
<el-form-item label="测试邮件">
<el-button @click="email">测试邮件</el-button>
<el-form-item :label="t('view.systemTools.system.testEmail')">
<el-button @click="email">{{ t('view.systemTools.system.testEmail') }}</el-button>
</el-form-item>
</el-tab-pane>
<el-tab-pane
@@ -191,19 +191,19 @@
v-if="config.system['use-mongo']"
>
<el-form-item :label="t('view.systemTools.system.collectionName')">
<el-input v-model.trim="config.mongo.coll" placeholder="请输入collection name"/>
<el-input v-model.trim="config.mongo.coll" :placeholder="t('view.systemTools.system.collectionName')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.options')">
<el-input v-model.trim="config.mongo.options" placeholder="请输入mongodb 选项"/>
<el-input v-model.trim="config.mongo.options" :placeholder="t('view.systemTools.system.mongodbOptions')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.dbName')">
<el-input v-model.trim="config.mongo.database" placeholder="请输入数据库名"/>
<el-input v-model.trim="config.mongo.database" :placeholder="t('view.systemTools.system.databaseName')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.userName')">
<el-input v-model.trim="config.mongo.username" placeholder="请输入用户名"/>
<el-input v-model.trim="config.mongo.username" :placeholder="t('view.systemTools.system.userName')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.password')">
<el-input v-model.trim="config.mongo.password" placeholder="请输入密码"/>
<el-input v-model.trim="config.mongo.password" :placeholder="t('view.systemTools.system.typePassword')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.minimumConnectionPool')">
<el-input-number v-model="config.mongo['min-pool-size']" min="0"/>
@@ -224,7 +224,7 @@
<el-form-item :label="`节点 ${k+1}`">
<div v-for="(_,k2) in item" :key="k2">
<el-form-item :key="k+k2" :label="k2" label-width="60">
<el-input v-model.trim="item[k2]" :placeholder="k2 === 'host' ? '请输入地址' : '请输入端口'"/>
<el-input v-model.trim="item[k2]" :placeholder="k2 === 'host' ? t('view.systemTools.system.address') : t('view.systemTools.system.portValue')"/>
</el-form-item>
</div>
<el-form-item v-if="k > 0">
@@ -261,25 +261,25 @@
<h3>MySQL</h3>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.userName')">
<el-input v-model.trim="config.mysql.username" placeholder="请输入用户名"/>
<el-input v-model.trim="config.mysql.username" :placeholder="t('view.systemTools.system.userName')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.password')">
<el-input v-model.trim="config.mysql.password" placeholder="请输入密码"/>
<el-input v-model.trim="config.mysql.password" :placeholder="t('view.systemTools.system.typePassword')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.address')">
<el-input v-model.trim="config.mysql.path" placeholder="请输入地址"/>
<el-input v-model.trim="config.mysql.path" :placeholder="t('view.systemTools.system.address')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.dbName')">
<el-input v-model.trim="config.mysql['db-name']" placeholder="请输入数据库名称"/>
<el-input v-model.trim="config.mysql['db-name']" :placeholder="t('init.enterDBName')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.prefix')">
<el-input v-model.trim="config.mysql['prefix']" placeholder="默认为空"/>
<el-input v-model.trim="config.mysql['prefix']" :placeholder="t('view.systemTools.system.defaultEmpty')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.pluralTable')">
<el-switch v-model="config.mysql['singular']"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.engine')">
<el-input v-model.trim="config.mysql['engine']" placeholder="默认为InnoDB"/>
<el-input v-model.trim="config.mysql['engine']" :placeholder="t('view.systemTools.system.defaultInnoDB')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.maxIdleConns')">
<el-input-number v-model="config.mysql['max-idle-conns']" :min="1"/>
@@ -292,13 +292,13 @@
</el-form-item>
<el-form-item :label="t('view.systemTools.system.logMode')">
<el-select v-model="config.mysql['log-mode']">
<el-option value="off" label="关闭"/>
<el-option value="fatal" label="致命"/>
<el-option value="error" label="错误"/>
<el-option value="warn" label="警告"/>
<el-option value="info" label="信息"/>
<el-option value="debug" label="调试"/>
<el-option value="trace" label="跟踪"/>
<el-option value="off" :label="t('components.commandMenu.close')"/>
<el-option value="fatal" :label="t('view.systemTools.system.fatal')"/>
<el-option value="error" :label="t('view.dashboard.error')"/>
<el-option value="warn" :label="t('general.warning')"/>
<el-option value="info" :label="t('view.dashboard.information')"/>
<el-option value="debug" :label="t('view.systemTools.system.debug')"/>
<el-option value="trace" :label="t('view.systemTools.system.trace')"/>
</el-select>
</el-form-item>
</template>
@@ -307,25 +307,25 @@
<h3>PostgreSQL</h3>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.userName')">
<el-input v-model="config.pgsql.username" placeholder="请输入用户名"/>
<el-input v-model="config.pgsql.username" :placeholder="t('view.systemTools.system.userName')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.password')">
<el-input v-model="config.pgsql.password" placeholder="请输入密码"/>
<el-input v-model="config.pgsql.password" :placeholder="t('view.systemTools.system.typePassword')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.address')">
<el-input v-model.trim="config.pgsql.path" placeholder="请输入地址"/>
<el-input v-model.trim="config.pgsql.path" :placeholder="t('view.systemTools.system.address')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.dbName')">
<el-input v-model.trim="config.pgsql['db-name']" placeholder="请输入数据库"/>
<el-input v-model.trim="config.pgsql['db-name']" :placeholder="t('view.systemTools.system.databaseName')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.prefix')">
<el-input v-model.trim="config.pgsql['prefix']" placeholder="请输入前缀"/>
<el-input v-model.trim="config.pgsql['prefix']" :placeholder="t('view.systemTools.system.enterPrefix')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.pluralTable')">
<el-switch v-model="config.pgsql['singular']"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.engine')">
<el-input v-model.trim="config.pgsql['engine']" placeholder="请输入引擎"/>
<el-input v-model.trim="config.pgsql['engine']" :placeholder="t('view.systemTools.system.enterEngine')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.maxIdleConns')">
<el-input-number v-model="config.pgsql['max-idle-conns']"/>
@@ -338,13 +338,13 @@
</el-form-item>
<el-form-item :label="t('view.systemTools.system.logMode')">
<el-select v-model="config.pgsql['log-mode']">
<el-option value="off" label="关闭"/>
<el-option value="fatal" label="致命"/>
<el-option value="error" label="错误"/>
<el-option value="warn" label="警告"/>
<el-option value="info" label="信息"/>
<el-option value="debug" label="调试"/>
<el-option value="trace" label="跟踪"/>
<el-option value="off" :label="t('components.commandMenu.close')"/>
<el-option value="fatal" :label="t('view.systemTools.system.fatal')"/>
<el-option value="error" :label="t('view.dashboard.error')"/>
<el-option value="warn" :label="t('general.warning')"/>
<el-option value="info" :label="t('view.dashboard.information')"/>
<el-option value="debug" :label="t('view.systemTools.system.debug')"/>
<el-option value="trace" :label="t('view.systemTools.system.trace')"/>
</el-select>
</el-form-item>
</template>
@@ -352,29 +352,29 @@
<el-form-item label="">
<h3>MsSQL</h3>
</el-form-item>
<el-form-item label="用户名">
<el-input v-model.trim="config.mssql.username" placeholder="请输入用户名"/>
<el-form-item :label="t('view.systemTools.system.userName')">
<el-input v-model.trim="config.mssql.username" :placeholder="t('view.systemTools.system.userName')"/>
</el-form-item>
<el-form-item label.trim="密码">
<el-input v-model.trim="config.mssql.password" placeholder="请输入密码"/>
<el-form-item :label.trim="t('view.systemTools.system.password')">
<el-input v-model.trim="config.mssql.password" :placeholder="t('view.systemTools.system.typePassword')"/>
</el-form-item>
<el-form-item label="地址">
<el-input v-model.trim="config.mssql.path" placeholder="请输入地址"/>
<el-form-item :label="t('view.systemTools.system.address')">
<el-input v-model.trim="config.mssql.path" :placeholder="t('view.systemTools.system.address')"/>
</el-form-item>
<el-form-item label="端口">
<el-input v-model.trim="config.mssql.port" placeholder="请输入端口"/>
<el-form-item :label="t('view.systemTools.system.port')">
<el-input v-model.trim="config.mssql.port" :placeholder="t('view.systemTools.system.portValue')"/>
</el-form-item>
<el-form-item label="数据库">
<el-input v-model.trim="config.mssql['db-name']" placeholder="请输入数据库"/>
<el-form-item :label="t('view.systemTools.autoCode.dbName')">
<el-input v-model.trim="config.mssql['db-name']" :placeholder="t('view.systemTools.system.databaseName')"/>
</el-form-item>
<el-form-item label="前缀">
<el-input v-model.trim="config.mssql['prefix']" placeholder="请输入前缀"/>
<el-form-item :label="t('view.systemTools.system.prefix')">
<el-input v-model.trim="config.mssql['prefix']" :placeholder="t('view.systemTools.system.enterPrefix')"/>
</el-form-item>
<el-form-item label="复数表">
<el-form-item :label="t('view.systemTools.system.pluralTable')">
<el-switch v-model="config.mssql['singular']"/>
</el-form-item>
<el-form-item label="引擎">
<el-input v-model.trim="config.mssql['engine']" placeholder="请输入引擎"/>
<el-form-item :label="t('view.systemTools.system.engine')">
<el-input v-model.trim="config.mssql['engine']" :placeholder="t('view.systemTools.system.enterEngine')"/>
</el-form-item>
<el-form-item label="maxIdleConns">
<el-input-number v-model="config.mssql['max-idle-conns']"/>
@@ -382,18 +382,18 @@
<el-form-item label="maxOpenConns">
<el-input-number v-model="config.mssql['max-open-conns']"/>
</el-form-item>
<el-form-item label="写入日志">
<el-form-item :label="t('view.systemTools.system.writeLog')">
<el-switch v-model="config.mssql['log-zap']"/>
</el-form-item>
<el-form-item label="日志模式">
<el-form-item :label="t('view.systemTools.system.logMode')">
<el-select v-model="config.mssql['log-mode']">
<el-option value="off" label="关闭"/>
<el-option value="fatal" label="致命"/>
<el-option value="error" label="错误"/>
<el-option value="warn" label="警告"/>
<el-option value="info" label="信息"/>
<el-option value="debug" label="调试"/>
<el-option value="trace" label="跟踪"/>
<el-option value="off" :label="t('components.commandMenu.close')"/>
<el-option value="fatal" :label="t('view.systemTools.system.fatal')"/>
<el-option value="error" :label="t('view.dashboard.error')"/>
<el-option value="warn" :label="t('general.warning')"/>
<el-option value="info" :label="t('view.dashboard.information')"/>
<el-option value="debug" :label="t('view.systemTools.system.debug')"/>
<el-option value="trace" :label="t('view.systemTools.system.trace')"/>
</el-select>
</el-form-item>
</template>
@@ -401,20 +401,20 @@
<el-form-item label="">
<h3>sqlite</h3>
</el-form-item>
<el-form-item label="用户名">
<el-input v-model.trim="config.sqlite.username" placeholder="请输入用户名"/>
<el-form-item :label="t('view.systemTools.system.userName')">
<el-input v-model.trim="config.sqlite.username" :placeholder="t('view.systemTools.system.userName')"/>
</el-form-item>
<el-form-item label="密码">
<el-input v-model.trim="config.sqlite.password" placeholder="请输入密码"/>
<el-form-item :label="t('view.systemTools.system.password')">
<el-input v-model.trim="config.sqlite.password" :placeholder="t('view.systemTools.system.typePassword')"/>
</el-form-item>
<el-form-item label="地址">
<el-input v-model.trim="config.sqlite.path" placeholder="请输入地址"/>
<el-form-item :label="t('view.systemTools.system.address')">
<el-input v-model.trim="config.sqlite.path" :placeholder="t('view.systemTools.system.address')"/>
</el-form-item>
<el-form-item label="端口">
<el-input v-model.trim="config.sqlite.port" placeholder="请输入端口"/>
<el-form-item :label="t('view.systemTools.system.port')">
<el-input v-model.trim="config.sqlite.port" :placeholder="t('view.systemTools.system.portValue')"/>
</el-form-item>
<el-form-item label="数据库">
<el-input v-model.trim="config.sqlite['db-name']" placeholder="请输入数据库"/>
<el-form-item :label="t('view.systemTools.autoCode.dbName')">
<el-input v-model.trim="config.sqlite['db-name']" :placeholder="t('view.systemTools.system.databaseName')"/>
</el-form-item>
<el-form-item label="maxIdleConns">
<el-input-number v-model="config.sqlite['max-idle-conns']"/>
@@ -422,18 +422,18 @@
<el-form-item label="maxOpenConns">
<el-input-number v-model="config.sqlite['max-open-conns']"/>
</el-form-item>
<el-form-item label="写入日志">
<el-form-item :label="t('view.systemTools.system.writeLog')">
<el-switch v-model="config.sqlite['log-zap']"/>
</el-form-item>
<el-form-item label="日志模式">
<el-form-item :label="t('view.systemTools.system.logMode')">
<el-select v-model="config.sqlite['log-mode']">
<el-option value="off" label="关闭"/>
<el-option value="fatal" label="致命"/>
<el-option value="error" label="错误"/>
<el-option value="warn" label="警告"/>
<el-option value="info" label="信息"/>
<el-option value="debug" label="调试"/>
<el-option value="trace" label="跟踪"/>
<el-option value="off" :label="t('components.commandMenu.close')"/>
<el-option value="fatal" :label="t('view.systemTools.system.fatal')"/>
<el-option value="error" :label="t('view.dashboard.error')"/>
<el-option value="warn" :label="t('general.warning')"/>
<el-option value="info" :label="t('view.dashboard.information')"/>
<el-option value="debug" :label="t('view.systemTools.system.debug')"/>
<el-option value="trace" :label="t('view.systemTools.system.trace')"/>
</el-select>
</el-form-item>
</template>
@@ -441,26 +441,26 @@
<el-form-item label="">
<h3>oracle</h3>
</el-form-item>
<el-form-item label="用户名">
<el-input v-model.trim="config.oracle.username" placeholder="请输入用户名"/>
<el-form-item :label="t('view.systemTools.system.userName')">
<el-input v-model.trim="config.oracle.username" :placeholder="t('view.systemTools.system.userName')"/>
</el-form-item>
<el-form-item label="密码">
<el-input v-model.trim="config.oracle.password" placeholder="请输入密码"/>
<el-form-item :label="t('view.systemTools.system.password')">
<el-input v-model.trim="config.oracle.password" :placeholder="t('view.systemTools.system.typePassword')"/>
</el-form-item>
<el-form-item label="地址">
<el-input v-model.trim="config.oracle.path" placeholder="请输入地址"/>
<el-form-item :label="t('view.systemTools.system.address')">
<el-input v-model.trim="config.oracle.path" :placeholder="t('view.systemTools.system.address')"/>
</el-form-item>
<el-form-item label="数据库名称">
<el-input v-model.trim="config.oracle['db-name']" placeholder="请输入数据库名称"/>
<el-form-item :label="t('view.systemTools.system.dbName')">
<el-input v-model.trim="config.oracle['db-name']" :placeholder="t('init.enterDBName')"/>
</el-form-item>
<el-form-item label="前缀">
<el-input v-model.trim="config.oracle['prefix']" placeholder="默认为空"/>
<el-form-item :label="t('view.systemTools.system.prefix')">
<el-input v-model.trim="config.oracle['prefix']" :placeholder="t('view.systemTools.system.defaultEmpty')"/>
</el-form-item>
<el-form-item label="复数表">
<el-form-item :label="t('view.systemTools.system.pluralTable')">
<el-switch v-model="config.oracle['singular']"/>
</el-form-item>
<el-form-item label="引擎">
<el-input v-model.trim="config.oracle['engine']" placeholder="默认为InnoDB"/>
<el-form-item :label="t('view.systemTools.system.engine')">
<el-input v-model.trim="config.oracle['engine']" :placeholder="t('view.systemTools.system.defaultInnoDB')"/>
</el-form-item>
<el-form-item label="maxIdleConns">
<el-input-number v-model="config.oracle['max-idle-conns']" :min="1"/>
@@ -468,136 +468,136 @@
<el-form-item label="maxOpenConns">
<el-input-number v-model="config.oracle['max-open-conns']" :min="1"/>
</el-form-item>
<el-form-item label="写入日志">
<el-form-item :label="t('view.systemTools.system.writeLog')">
<el-switch v-model="config.oracle['log-zap']"/>
</el-form-item>
<el-form-item label="日志模式">
<el-form-item :label="t('view.systemTools.system.logMode')">
<el-select v-model="config.oracle['log-mode']">
<el-option value="off" label="关闭"/>
<el-option value="fatal" label="致命"/>
<el-option value="error" label="错误"/>
<el-option value="warn" label="警告"/>
<el-option value="info" label="信息"/>
<el-option value="debug" label="调试"/>
<el-option value="trace" label="跟踪"/>
<el-option value="off" :label="t('components.commandMenu.close')"/>
<el-option value="fatal" :label="t('view.systemTools.system.fatal')"/>
<el-option value="error" :label="t('view.dashboard.error')"/>
<el-option value="warn" :label="t('general.warning')"/>
<el-option value="info" :label="t('view.dashboard.information')"/>
<el-option value="debug" :label="t('view.systemTools.system.debug')"/>
<el-option value="trace" :label="t('view.systemTools.system.trace')"/>
</el-select>
</el-form-item>
</template>
</el-tab-pane>
<el-tab-pane
label="oss配置"
:label="t('view.systemTools.system.ossConfig')"
name="10"
class="mt-3.5"
>
<template v-if="config.system['oss-type'] === 'local'">
<h2>{{ t('view.systemTools.system.localFileConfig') }}</h2>
<el-form-item label="本地文件访问路径">
<el-input v-model.trim="config.local.path" placeholder="请输入本地文件访问路径"/>
<el-form-item :label="t('view.systemTools.system.localFileAccessPath')">
<el-input v-model.trim="config.local.path" :placeholder="t('view.systemTools.system.enterLocalFileAccessPath')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.localFilePath')">
<el-input v-model.trim="config.local['store-path']" placeholder="请输入本地文件存储路径"/>
<el-input v-model.trim="config.local['store-path']" :placeholder="t('view.systemTools.system.enterLocalFileStoragePath')"/>
</el-form-item>
</template>
<template v-if="config.system['oss-type'] === 'qiniu'">
<h2>七牛上传配置</h2>
<el-form-item label="存储区域">
<el-input v-model.trim="config.qiniu.zone" placeholder="请输入存储区域" />
<h2>{{ t('view.systemTools.system.qiniuUploadConfig') }}</h2>
<el-form-item :label="t('view.systemTools.system.storageRegion')">
<el-input v-model.trim="config.qiniu.zone" :placeholder="t('view.systemTools.system.enterStorageRegion')" />
</el-form-item>
<el-form-item label="空间名称">
<el-input v-model.trim="config.qiniu.bucket" placeholder="请输入空间名称" />
<el-form-item :label="t('view.systemTools.system.spaceName')">
<el-input v-model.trim="config.qiniu.bucket" :placeholder="t('view.systemTools.system.enterSpaceName')" />
</el-form-item>
<el-form-item label="CDN加速域名">
<el-input v-model.trim="config.qiniu['img-path']" placeholder="请输入CDN加速域名" />
<el-form-item :label="t('view.systemTools.system.cdnAcceleratedDomain')">
<el-input v-model.trim="config.qiniu['img-path']" :placeholder="t('view.systemTools.system.enterCdnAcceleratedDomain')" />
</el-form-item>
<el-form-item label="是否使用https">
<el-switch v-model="config.qiniu['use-https']">开启</el-switch>
<el-form-item :label="t('view.systemTools.system.useHttps')">
<el-switch v-model="config.qiniu['use-https']">{{t('general.enable')}}</el-switch>
</el-form-item>
<el-form-item label="accessKey">
<el-input v-model.trim="config.qiniu['access-key']" placeholder="请输入accessKey" />
<el-input v-model.trim="config.qiniu['access-key']" :placeholder="t('view.systemTools.system.enterAccessKey')" />
</el-form-item>
<el-form-item label="secretKey">
<el-input v-model.trim="config.qiniu['secret-key']" placeholder="请输入secretKey" />
<el-input v-model.trim="config.qiniu['secret-key']" :placeholder="t('view.systemTools.system.enterSecretKey')" />
</el-form-item>
<el-form-item label="上传是否使用CDN上传加速">
<el-form-item :label="t('view.systemTools.system.cdnUploadAccelerated')">
<el-switch v-model="config.qiniu['use-cdn-domains']" />
</el-form-item>
</template>
<template v-if="config.system['oss-type'] === 'tencent-cos'">
<h2>腾讯云COS上传配置</h2>
<el-form-item label="存储桶名称">
<el-input v-model.trim="config['tencent-cos']['bucket']" placeholder="请输入存储桶名称"/>
<h2>{{ t('view.systemTools.system.tencentCosUploadConfig') }}</h2>
<el-form-item :label="t('view.systemTools.system.bucketName')">
<el-input v-model.trim="config['tencent-cos']['bucket']" :placeholder="t('view.systemTools.system.enterBucketName')"/>
</el-form-item>
<el-form-item label="所属地域">
<el-input v-model.trim="config['tencent-cos'].region" placeholder="请输入所属地域"/>
<el-form-item :label="t('view.systemTools.system.region')">
<el-input v-model.trim="config['tencent-cos'].region" :placeholder="t('view.systemTools.system.enterRegion')"/>
</el-form-item>
<el-form-item label="secretID">
<el-input v-model.trim="config['tencent-cos']['secret-id']" placeholder="请输入secretID"/>
<el-input v-model.trim="config['tencent-cos']['secret-id']" :placeholder="t('view.systemTools.system.enterSecretID')"/>
</el-form-item>
<el-form-item label="secretKey">
<el-input v-model.trim="config['tencent-cos']['secret-key']" placeholder="请输入secretKey"/>
<el-input v-model.trim="config['tencent-cos']['secret-key']" :placeholder="t('view.systemTools.system.enterSecretKey')"/>
</el-form-item>
<el-form-item label="路径前缀">
<el-input v-model.trim="config['tencent-cos']['path-prefix']" placeholder="请输入路径前缀"/>
<el-form-item :label="t('view.systemTools.system.pathPrefix')">
<el-input v-model.trim="config['tencent-cos']['path-prefix']" :placeholder="t('view.systemTools.system.enterPathPrefix')"/>
</el-form-item>
<el-form-item label="访问域名">
<el-input v-model.trim="config['tencent-cos']['base-url']" placeholder="请输入访问域名"/>
<el-form-item :label="t('view.systemTools.system.accessDomain')">
<el-input v-model.trim="config['tencent-cos']['base-url']" :placeholder="t('view.systemTools.system.enterAccessDomain')"/>
</el-form-item>
</template>
<template v-if="config.system['oss-type'] === 'aliyun-oss'">
<h2>阿里云OSS上传配置</h2>
<el-form-item label="区域">
<el-input v-model.trim="config['aliyun-oss'].endpoint" placeholder="请输入区域"/>
<h2>{{ t('view.systemTools.system.aliyunOssUploadConfig') }}</h2>
<el-form-item :label="t('view.systemTools.system.region')">
<el-input v-model.trim="config['aliyun-oss'].endpoint" :label="t('view.systemTools.system.enterRegion')"/>
</el-form-item>
<el-form-item label="accessKeyId">
<el-input v-model.trim="config['aliyun-oss']['access-key-id']" placeholder="请输入accessKeyId"/>
<el-input v-model.trim="config['aliyun-oss']['access-key-id']" :placeholder="t('view.systemTools.system.enterSecretID')"/>
</el-form-item>
<el-form-item label="accessKeySecret">
<el-input v-model.trim="config['aliyun-oss']['access-key-secret']" placeholder="请输入accessKeySecret"/>
<el-input v-model.trim="config['aliyun-oss']['access-key-secret']" :placeholder="t('view.systemTools.system.enterSecretKey')"/>
</el-form-item>
<el-form-item label="存储桶名称">
<el-input v-model.trim="config['aliyun-oss']['bucket-name']" placeholder="请输入存储桶名称" />
<el-form-item :label="t('view.systemTools.system.bucketName')">
<el-input v-model.trim="config['aliyun-oss']['bucket-name']" :placeholder="t('view.systemTools.system.enterBucketName')" />
</el-form-item>
<el-form-item label="访问域名">
<el-input v-model.trim="config['aliyun-oss']['bucket-url']" placeholder="请输入访问域名" />
<el-form-item :label="t('view.systemTools.system.accessDomain')">
<el-input v-model.trim="config['aliyun-oss']['bucket-url']" :placeholder="t('view.systemTools.system.enterAccessDomain')" />
</el-form-item>
</template>
<template v-if="config.system['oss-type'] === 'huawei-obs'">
<h2>华为云OBS上传配置</h2>
<el-form-item label="路径">
<el-input v-model.trim="config['hua-wei-obs'].path" placeholder="请输入路径" />
<h2>{{ t('view.systemTools.system.huaweiObsUploadConfig') }}</h2>
<el-form-item :label="t('view.api.path')">
<el-input v-model.trim="config['hua-wei-obs'].path" :placeholder="t('view.systemTools.system.enterPath')" />
</el-form-item>
<el-form-item label="存储桶名称">
<el-input v-model.trim="config['hua-wei-obs'].bucket" placeholder="请输入存储桶名称" />
<el-form-item :label="t('view.systemTools.system.bucketName')">
<el-input v-model.trim="config['hua-wei-obs'].bucket" :placeholder="t('view.systemTools.system.enterBucketName')" />
</el-form-item>
<el-form-item label="区域">
<el-input v-model.trim="config['hua-wei-obs'].endpoint" placeholder="请输入区域" />
<el-form-item :label="t('view.systemTools.system.region')">
<el-input v-model.trim="config['hua-wei-obs'].endpoint" :label="t('view.systemTools.system.enterRegion')" />
</el-form-item>
<el-form-item label="accessKey">
<el-input v-model.trim="config['hua-wei-obs']['access-key']" placeholder="请输入accessKey" />
<el-input v-model.trim="config['hua-wei-obs']['access-key']" :placeholder="t('view.systemTools.system.enterAccessKey')" />
</el-form-item>
<el-form-item label="secretKey">
<el-input v-model.trim="config['hua-wei-obs']['secret-key']" placeholder="请输入secretKey" />
<el-input v-model.trim="config['hua-wei-obs']['secret-key']" :placeholder="t('view.systemTools.system.enterSecretKey')" />
</el-form-item>
</template>
<template v-if="config.system['oss-type'] === 'cloudflare-r2'">
<h2>Cloudflare R2上传配置</h2>
<el-form-item label="路径">
<el-input v-model.trim="config['cloudflare-r2'].path" placeholder="请输入路径" />
<h2>{{ t('view.systemTools.system.cloudflareR2UploadConfig') }}</h2>
<el-form-item :label="t('view.api.path')">
<el-input v-model.trim="config['cloudflare-r2'].path" :placeholder="t('view.systemTools.system.enterPath')" />
</el-form-item>
<el-form-item label="存储桶名称">
<el-input v-model.trim="config['cloudflare-r2'].bucket" placeholder="请输入存储桶名称" />
<el-form-item :label="t('view.systemTools.system.bucketName')">
<el-input v-model.trim="config['cloudflare-r2'].bucket" :placeholder="t('view.systemTools.system.enterBucketName')" />
</el-form-item>
<el-form-item label="Base URL">
<el-input v-model.trim="config['cloudflare-r2']['base-url']" placeholder="请输入Base URL" />
<el-input v-model.trim="config['cloudflare-r2']['base-url']" :placeholder="t('view.systemTools.system.enterBaseUrl')" />
</el-form-item>
<el-form-item label="Account ID">
<el-input v-model.trim="config['cloudflare-r2']['account-id']" placeholder="请输入secretKey" />
<el-input v-model.trim="config['cloudflare-r2']['account-id']" :placeholder="t('view.systemTools.system.enterSecretKey')" />
</el-form-item>
<el-form-item label="Access Key ID">
<el-input v-model.trim="config['cloudflare-r2']['access-key-id']" placeholder="请输入secretKey" />
<el-input v-model.trim="config['cloudflare-r2']['access-key-id']" :placeholder="t('view.systemTools.system.enterSecretKey')" />
</el-form-item>
<el-form-item label="Secret Access Key">
<el-input v-model.trim="config['cloudflare-r2']['secret-access-key']" placeholder="请输入secretKey" />
<el-input v-model.trim="config['cloudflare-r2']['secret-access-key']" :placeholder="t('view.systemTools.system.enterSecretKey')" />
</el-form-item>
</template>
@@ -608,7 +608,7 @@
class="mt-3.5"
>
<el-form-item :label="t('view.systemTools.system.excelDir')">
<el-input v-model.trim="config.excel.dir" placeholder="请输入合成目标地址" />
<el-input v-model.trim="config.excel.dir" :placeholder="t('view.systemTools.system.enterCompositeTargetAddress')" />
</el-form-item>
</el-tab-pane>
<el-tab-pane
@@ -626,37 +626,37 @@
/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.backendCodePath')">
<el-input v-model.trim="config.autocode['server']" placeholder="请输入后端代码地址"/>
<el-input v-model.trim="config.autocode['server']" :placeholder="t('view.systemTools.system.enterBackendCodeAddress')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.backendApiPath')">
<el-input v-model.trim="config.autocode['server-api']" placeholder="请输入后端api文件夹地址"/>
<el-input v-model.trim="config.autocode['server-api']" :placeholder="t('view.systemTools.system.enterBackendApiFolderAddress')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.backendInitPath')">
<el-input v-model.trim="config.autocode['server-initialize']" placeholder="请输入后端Initialize文件夹"/>
<el-input v-model.trim="config.autocode['server-initialize']" :placeholder="t('view.systemTools.system.enterBackendInitializeFolder')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.backendModelPath')">
<el-input v-model.trim="config.autocode['server-model']" placeholder="请输入后端Model文件地址"/>
<el-input v-model.trim="config.autocode['server-model']" :placeholder="t('view.systemTools.system.enterBackendModelFileAddress')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.backendRequestPath')">
<el-input v-model.trim="config.autocode['server-request']" placeholder="请输入后端Request文件夹地址"/>
<el-input v-model.trim="config.autocode['server-request']" :placeholder="t('view.systemTools.system.enterBackendRequestFolderAddress')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.backendRouterPath')">
<el-input v-model.trim="config.autocode['server-router']" placeholder="请输入后端Router文件夹地址"/>
<el-input v-model.trim="config.autocode['server-router']" :placeholder="t('view.systemTools.system.enterBackendRouterFolderAddress')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.backendServicePath')">
<el-input v-model.trim="config.autocode['server-service']" placeholder="请输入后端Service文件夹地址"/>
<el-input v-model.trim="config.autocode['server-service']" :placeholder="t('view.systemTools.system.enterBackendServiceFolderAddress')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.frontendCodePath')">
<el-input v-model.trim="config.autocode.web" placeholder="请输入前端文件夹地址"/>
<el-input v-model.trim="config.autocode.web" :placeholder="t('view.systemTools.system.enterFrontendFolderAddress')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.frontendApiPath')">
<el-input v-model.trim="config.autocode['web-api']" placeholder="请输入后端WApi文件夹地址"/>
<el-input v-model.trim="config.autocode['web-api']" :placeholder="t('view.systemTools.system.enterBackendWApiFolderAddress')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.frontendFormPath')">
<el-input v-model.trim="config.autocode['web-form']" placeholder="请输入后端WForm文件夹地址"/>
<el-input v-model.trim="config.autocode['web-form']" :placeholder="t('view.systemTools.system.enterBackendWFormFolderAddress')"/>
</el-form-item>
<el-form-item :label="t('view.systemTools.system.frontendTablePath')">
<el-input v-model.trim="config.autocode['web-table']" placeholder="请输入后端WTable文件夹地址"/>
<el-input v-model.trim="config.autocode['web-table']" :placeholder="t('view.systemTools.system.enterBackendWTableFolderAddress')"/>
</el-form-item>
</el-tab-pane>
</el-tabs>
@@ -748,11 +748,11 @@ const initForm = async() => {
initForm()
const reload = () => {
ElMessageBox.confirm(
'确定要重启服务?',
'警告',
t('view.systemTools.system.confirmRestartService'),
t('general.warning'),
{
confirmButtonText: '确定',
cancelButtonText: '取消',
confirmButtonText: t('general.confirm'),
cancelButtonText: t('general.cancel'),
type: 'warning',
},
)
@@ -761,14 +761,14 @@ const reload = () => {
if (res.code === 0) {
ElMessage({
type: 'success',
message: '操作成功',
message: t('view.systemTools.system.operationSuccess'),
})
}
})
.catch(() => {
ElMessage({
type: 'info',
message: '取消重启',
message: t('view.systemTools.system.cancelRestart'),
})
})
}