add:vue-i18n,admin add file size

This commit is contained in:
lan
2023-09-06 11:06:18 +08:00
parent f0b2e4a8b2
commit 4e79991f82
40 changed files with 770 additions and 427 deletions
+5 -2
View File
@@ -1,12 +1,15 @@
<template>
<main style="text-align: center">
<span>本项目开源于Github
<span>{{ t('admin.about.source1') }}
<em>
<a style="color: #333" href="https://github.com/vastsa/FileCodeBox">FileCodeBox</a>
<a style="color: #333" href="https://github.com/vastsa/FileCodeBox">{{ t('admin.about.source2') }}</a>
</em>
</span>
</main>
</template>
<script lang="ts" setup>
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
</script>
+13 -10
View File
@@ -3,8 +3,8 @@
<el-header>
<el-menu mode="horizontal" router :default-active="route.path">
<el-menu-item v-for="menu in menus" :index="menu.path" :key="menu.path">{{menu.name}}</el-menu-item>
<el-menu-item style="float: right" @click="toggleDark(!isDark)">颜色模式</el-menu-item>
<el-menu-item style="float: right" @click="adminData.updateAdminPwd('');isLogin=false">注销登录</el-menu-item>
<el-menu-item style="float: right" @click="toggleDark(!isDark)">{{ t('admin.menu.color') }}</el-menu-item>
<el-menu-item style="float: right" @click="adminData.updateAdminPwd('');isLogin=false">{{ t('admin.menu.signout') }}</el-menu-item>
</el-menu>
</el-header>
<el-main>
@@ -12,14 +12,14 @@
</el-main>
</el-container>
<el-form size="large" v-else>
<el-form-item label="管理密码">
<el-form-item :label="t('admin.managePassword')">
<el-input
v-model="adminData.adminPassword"
placeholder="请输入密码!"
:placeholder="t('admin.passwordNotEmpty')"
type="password"
>
<template #append>
<el-button @click="refreshLoginStatus">登录</el-button>
<el-button @click="refreshLoginStatus">{{ t('admin.login') }}</el-button>
</template>
</el-input>
</el-form-item>
@@ -36,19 +36,22 @@ import { useAdminData } from "@/stores/adminData";
import { request } from "@/utils/request";
import { ElMessage } from "element-plus";
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const adminData = useAdminData();
const route = useRoute();
const menus = ref([
{
name: '文件管理',
name: t('admin.menu.fileManage'),
path: '/admin',
},
{
name: '系统设置',
name: t('admin.menu.systemSetting'),
path: '/admin/setting',
},
{
name: '关于我们',
name: t('admin.menu.about'),
path: '/admin/about',
}
]);
@@ -60,9 +63,9 @@ const refreshLoginStatus = () => {
}).then((res: any) => {
if (res.code === 200) {
isLogin.value = true;
ElMessage.success('登录成功!');
ElMessage.success(t('admin.loginSuccess'));
} else {
ElMessage.error(res.detail);
ElMessage.error(t('admin.loginError'));
}
});
};
+23 -11
View File
@@ -1,24 +1,33 @@
<template>
<main>
<el-table size="large" stripe :data="tableData" style="width: 100%">
<el-table-column prop="code" label="取件码" />
<el-table-column prop="prefix" label="文件前缀" />
<el-table-column prop="suffix" label="后缀" />
<el-table-column prop="text" label="文本">
<el-table-column prop="code" :label="t('admin.fileView.code')" />
<el-table-column prop="prefix" :label="t('admin.fileView.prefix')" />
<el-table-column prop="suffix" :label="t('admin.fileView.suffix')" />
<el-table-column prop="text" :label="t('admin.fileView.text')">
<template #default="scope">
<span style="width: 6rem;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">{{ scope.row.text }}</span>
</template>
</el-table-column>
<el-table-column prop="used_count" label="已用次数" />
<el-table-column prop="expired_count" label="可用次数" />
<el-table-column prop="expired_at" label="到期时间" />
<el-table-column prop="file_path" label="文件路径" />
<el-table-column prop="used_count" :label="t('admin.fileView.used_count')" />
<el-table-column prop="expired_count" :label="t('admin.fileView.expired_count')" />
<el-table-column prop="size" :label="t('admin.fileView.size')">
<template #default="scope">
<span>{{ Math.round(scope.row.size/1024/1024*100)/100 }}MB</span>
</template>
</el-table-column>
<el-table-column prop="expired_at" :label="t('admin.fileView.expired_at')">
<template #default="scope">
<span>{{ scope.row.expired_at ? scope.row.expired_at : '永久有效' }}</span>
</template>
</el-table-column>
<el-table-column prop="file_path" :label="t('admin.fileView.file_path')" />
<el-table-column>
<template #header>
操作
{{ t('admin.fileView.action')}}
</template>
<template #default="scope">
<el-button type="danger" size="small" @click="deleteFile(scope.row.id)">删除</el-button>
<el-button type="danger" size="small" @click="deleteFile(scope.row.id)">{{ t('admin.fileView.delete') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -29,8 +38,11 @@
import { request } from "@/utils/request";
import { ref } from "vue";
import { ElMessage } from "element-plus";
const tableData = ref([]);
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const params = ref({
page: 1,
size: 10,
+31 -27
View File
@@ -1,38 +1,38 @@
<template>
<el-form>
<el-form-item size="large" label="网站名称">
<el-form-item size="large" :label="t('admin.settings.name')">
<el-input v-model="config.name" />
</el-form-item>
<el-form-item size="large" label="网站描述">
<el-form-item size="large" :label="t('admin.settings.description')">
<el-input v-model="config.description" />
</el-form-item>
<el-form-item size="large" label="关键词" style="letter-spacing: 0.3rem">
<el-form-item size="large" :label="t('admin.settings.keywords')" style="letter-spacing: 0.3rem">
<el-input v-model="config.keywords" />
</el-form-item>
<el-form-item size="large" label="背景图片">
<el-form-item size="large" :label="t('admin.settings.background')">
<el-input v-model="config.background" />
</el-form-item>
<el-form-item size="large" label="后台密码">
<el-form-item size="large" :label="t('admin.settings.admin_token')">
<el-input type="password" v-model="config.admin_token" />
</el-form-item>
<el-form-item size="large" label="文件大小">
<el-form-item size="large" :label="t('admin.settings.uploadSize')">
<el-input type="number" v-model="config.uploadSize" />
<template #append>Bit</template>
<small>最大文件大小单位:bit),1mb=1 * 1024 * 1024</small>
<small>{{ t('admin.settings.uploadSizeNote') }}</small>
</el-form-item>
<el-form-item size="large" label="开启上传">
<el-form-item size="large" :label="t('admin.settings.openUpload.title')">
<el-select v-model="config.openUpload">
<el-option label="开启游客上传" :value="1" />
<el-option label="关闭游客上传" :value="0" />
<el-option :label="t('admin.settings.openUpload.open')" :value="1" />
<el-option :label="t('admin.settings.openUpload.close')" :value="0" />
</el-select>
<small style="margin-left: 0.4rem">关闭之后需要登录后台方可上传</small>
<small style="margin-left: 0.4rem">{{ t('admin.settings.openUpload.note') }}</small>
</el-form-item>
<el-form-item size="large" label="存储引擎">
<el-form-item size="large" :label="t('admin.settings.file_storage.title')">
<el-select v-model="config.file_storage">
<el-option label="本地存储" value="local" />
<el-option label="S3存储" value="s3" />
<el-option :label="t('admin.settings.file_storage.local')" value="local" />
<el-option :label="t('admin.settings.file_storage.s3')" value="s3" />
</el-select>
<small style="margin-left: 0.4rem">更新后需要重启FileCodeBox</small>
<small style="margin-left: 0.4rem">{{ t('admin.settings.file_storage.note') }}</small>
</el-form-item>
<div v-if="config.file_storage==='s3'">
<el-form-item size="large" label="S3 AccessKeyId">
@@ -48,32 +48,32 @@
<el-input v-model="config.s3_endpoint_url" />
</el-form-item>
</div>
<el-form-item size="large" label="上传限制">
<el-form-item size="large" :label="t('admin.settings.name')">
<span style="display: flex;height: 38px">
<span style="margin-right: 0.4rem"></span>
<span style="margin-right: 0.4rem">{{ t('admin.settings.mei') }}</span>
<el-input type="number" v-model="config.uploadMinute" />
<span style="width: 200px;margin-left: 0.4rem">分钟</span>
<span style="width: 200px;margin-left: 0.4rem">{{ t('admin.settings.minute') }}</span>
</span>
<span style="display: flex;height: 38px">
<span style="width:3rem;margin-right: 0.4rem">上传</span>
<span style="width:3rem;margin-right: 0.4rem">{{ t('admin.settings.upload') }}</span>
<el-input type="number" v-model="config.uploadCount" />
<span style="width: 200px;margin-left: 0.4rem">个文件</span>
<span style="width: 200px;margin-left: 0.4rem">{{ t('admin.settings.files') }}</span>
</span>
</el-form-item>
<el-form-item size="large" label="错误限制">
<el-form-item size="large" :label="t('admin.settings.name')">
<span style="display: flex;height: 38px">
<span style="margin-right: 0.4rem"></span>
<span style="margin-right: 0.4rem">{{ t('admin.settings.mei') }}</span>
<el-input type="number" v-model="config.errorMinute" />
<span style="width: 200px;margin-left: 0.4rem">分钟</span>
<span style="width: 200px;margin-left: 0.4rem">{{ t('admin.settings.minute') }}</span>
</span>
<span style="display: flex;height: 38px">
<span style="width:3rem;margin-right: 0.4rem">允许</span>
<span style="width:3rem;margin-right: 0.4rem">{{ t('admin.settings.allow') }}</span>
<el-input type="number" v-model="config.errorCount" />
<span style="width: 200px;margin-left: 0.4rem">次错误</span>
<span style="width: 200px;margin-left: 0.4rem">{{ t('admin.settings.errors') }}</span>
</span>
</el-form-item>
<el-form-item>
<el-button @click="submitSave" type="primary" style="margin: auto">保存</el-button>
<el-button @click="submitSave" type="primary" style="margin: auto">{{ t('admin.settings.save') }}</el-button>
</el-form-item>
</el-form>
</template>
@@ -82,6 +82,10 @@ import {ref} from "vue";
import { request } from "@/utils/request";
import { ElMessage } from "element-plus";
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const config = ref({
name: '',
description: '',
@@ -116,7 +120,7 @@ const submitSave = () => {
data: config.value
}).then((res: any) => {
if (res.code == 200) {
ElMessage.success('保存成功');
ElMessage.success(t('admin.settings.saveSuccess'));
} else {
ElMessage.error(res.message);
}
+21 -13
View File
@@ -3,6 +3,10 @@ import { ref } from 'vue'
import CardTools from "@/components/CardTools.vue";
import UploadFile from "@/components/UploadFile.vue";
import UploadText from "@/components/UploadText.vue";
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const shareData = ref({
expireValue: 1,
expireStyle: 'day',
@@ -19,29 +23,33 @@ const shareData = ref({
<el-input
v-model="shareData.expireValue"
style="width: 200px"
placeholder="请输入值"
:placeholder="t('send.pleaseInputExpireValue')"
>
<template #prepend>
<el-select v-model="shareData.expireStyle" placeholder="过期方式" style="width: 75px">
<el-option label="天数" value="day" />
<el-option label="小时" value="hour" />
<el-option label="分钟" value="minute" />
<el-option label="永久" value="forever" />
<el-option label="次数" value="count" />
<el-select v-model="shareData.expireStyle" :placeholder="t('send.expireStyle')" style="width: 75px">
<el-option :label="t('send.expireData.day')" value="day" />
<el-option :label="t('send.expireData.hour')" value="hour" />
<el-option :label="t('send.expireData.minute')" value="minute" />
<el-option :label="t('send.expireData.forever')" value="forever" />
<el-option :label="t('send.expireData.count')" value="count" />
</el-select>
</template>
<template #append>
<span v-if="shareData.expireStyle=='day'"></span>
<span v-else-if="shareData.expireStyle=='hour'"></span>
<span v-else-if="shareData.expireStyle=='minute'"></span>
<span v-if="shareData.expireStyle=='day'">{{t('send.expireValue.day')}}</span>
<span v-else-if="shareData.expireStyle=='hour'">{{t('send.expireValue.hour')}}</span>
<span v-else-if="shareData.expireStyle=='minute'">{{t('send.expireValue.minute')}}</span>
<span v-else-if="shareData.expireStyle=='forever'">👌</span>
<span v-else-if="shareData.expireStyle=='count'"></span>
<span v-else-if="shareData.expireStyle=='count'">{{t('send.expireValue.count')}}</span>
</template>
</el-input>
</div>
<el-radio-group v-model="shareData.targetType" style="margin-left: 1rem;">
<el-radio label="file">文件</el-radio>
<el-radio label="text">文本</el-radio>
<el-radio label="file">
{{t('send.fileType.file')}}
</el-radio>
<el-radio label="text">
{{t('send.fileType.text')}}
</el-radio>
</el-radio-group>
</div>
<div style="margin-top: 1rem">