add:vue-i18n,admin add file size
This commit is contained in:
@@ -11,6 +11,10 @@ const fileBoxStore = useFileBoxStore();
|
||||
import QrcodeVue from "qrcode.vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import { ref } from "vue";
|
||||
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
const { t } = useI18n()
|
||||
import { ElMessage } from "element-plus";
|
||||
const openUrl = (url: string) => {
|
||||
if (url.startsWith('/')) {
|
||||
@@ -21,7 +25,7 @@ const openUrl = (url: string) => {
|
||||
const route = useRoute();
|
||||
|
||||
const copyText = (text: any, style = 0) => {
|
||||
ElMessage.success('复制成功')
|
||||
ElMessage.success(t('fileBox.copySuccess'));
|
||||
if (style === 1) {
|
||||
text = window.location.origin + '/#/?code=' + text;
|
||||
}
|
||||
@@ -62,29 +66,29 @@ function renderMarkdown(message: string) {
|
||||
<el-drawer :append-to-body="true" v-model="fileBoxStore.showFileBox" direction="btt" style="max-width: 1080px;margin: auto;"
|
||||
size="400">
|
||||
<template #header>
|
||||
<h4>文件箱</h4>
|
||||
<h4>{{t('fileBox.fileBox')}}</h4>
|
||||
</template>
|
||||
<template #default>
|
||||
<div v-if="route.name=='home'" style="display: flex;flex-wrap: wrap;justify-content: center">
|
||||
<el-dialog
|
||||
append-to-body
|
||||
align-center
|
||||
title="文本详情"
|
||||
:title="t('fileBox.textDetail')"
|
||||
width="70%"
|
||||
style="height: 70%;overflow-y: scroll"
|
||||
v-model="showTextDetailVisible"
|
||||
>
|
||||
<div style="max-width: 100%;overflow-y: scroll" v-html="renderMarkdown(nowText)"></div>
|
||||
<template #footer>
|
||||
<el-button type="success" @click="copyText(nowText);showTextDetailVisible = false">复 制</el-button>
|
||||
<el-button type="primary" @click="showTextDetailVisible = false">关 闭</el-button>
|
||||
<el-button type="success" @click="copyText(nowText);showTextDetailVisible = false">{{t('fileBox.copy')}}</el-button>
|
||||
<el-button type="primary" @click="showTextDetailVisible = false">{{ t('fileBox.close') }}</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<el-card v-for="(value,index) in fileStore.receiveData" :key="index" style="margin: 0.5rem">
|
||||
<template #header>
|
||||
<div style="display: flex;justify-content: space-between">
|
||||
<h4 style="width: 6rem;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">{{ value.name }}</h4>
|
||||
<el-button size="small" type="danger" @click="fileStore.deleteReceiveData(index)">删除</el-button>
|
||||
<el-button size="small" type="danger" @click="fileStore.deleteReceiveData(index)">{{ t('fileBox.delete') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<div style="width: 200px;">
|
||||
@@ -94,9 +98,9 @@ function renderMarkdown(message: string) {
|
||||
<div style="display: flex;flex-direction: column;justify-content: space-around">
|
||||
<el-tag size="large" style="cursor: pointer" @click="copyText(value.code)">{{ value.code }}</el-tag>
|
||||
<el-tag v-if="value.name!=='文本分享'" size="large" type="success" style="cursor: pointer" @click="openUrl(value.text);">
|
||||
点击下载
|
||||
{{ t('fileBox.download') }}
|
||||
</el-tag>
|
||||
<el-tag v-else size="large" type="success" style="cursor: pointer" @click="showTextDetail(value.text);">查看详情</el-tag>
|
||||
<el-tag v-else size="large" type="success" style="cursor: pointer" @click="showTextDetail(value.text);">{{ t('fileBox.detail') }}</el-tag>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -107,17 +111,17 @@ function renderMarkdown(message: string) {
|
||||
<template #header>
|
||||
<div style="display: flex;justify-content: space-between">
|
||||
<h4 style="width: 6rem;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">{{ value.name }}</h4>
|
||||
<el-button size="small" type="danger" @click="fileStore.deleteShareData(index)">删除</el-button>
|
||||
<el-button size="small" type="danger" @click="fileStore.deleteShareData(index)">{{ t('fileBox.delete') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<div style="width: 200px;">
|
||||
<el-progress v-if="value.status!='success' && value.status!='fail'" striped :percentage="value.percentage" :text-inside="true"
|
||||
:stroke-width="20"></el-progress>
|
||||
<div style="display: flex;justify-content: space-between">
|
||||
<div v-else style="display: flex;justify-content: space-between">
|
||||
<qrcode-vue :value="value.text" :size="100"></qrcode-vue>
|
||||
<div style="display: flex;flex-direction: column;justify-content: space-around">
|
||||
<el-tag size="large" style="cursor: pointer" @click="copyText(value.code)">{{ value.code }}</el-tag>
|
||||
<el-tag size="large" type="success" style="cursor: pointer" @click="copyText(value.code,1);">复制链接
|
||||
<el-tag size="large" type="success" style="cursor: pointer" @click="copyText(value.code,1);">{{ t('fileBox.copyLink') }}
|
||||
</el-tag>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,9 @@ import { ref, onMounted, onUnmounted } from 'vue'
|
||||
import { request } from "@/utils/request";
|
||||
import { useFileDataStore } from "@/stores/fileData";
|
||||
import { useFileBoxStore } from "@/stores/fileBox";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
const { t } = useI18n()
|
||||
const fileBoxStore = useFileBoxStore();
|
||||
const fileStore = useFileDataStore();
|
||||
const props = defineProps({
|
||||
@@ -131,9 +133,9 @@ onMounted(()=>{
|
||||
<upload-filled/>
|
||||
</el-icon>
|
||||
<div class="el-upload__text">
|
||||
将文字、文件拖、粘贴到此处,或 <em>点击上传</em>
|
||||
{{t('send.prompt1')}}<em>{{t('send.clickUpload')}}</em>
|
||||
</div>
|
||||
<div class="el-upload__text" style="font-size: 10px;">天数<7或限制次数(24h后删除)</div>
|
||||
<div class="el-upload__text" style="font-size: 10px;">{{t('send.prompt2')}}</div>
|
||||
<template #tip>
|
||||
<div class="el-upload__tip">
|
||||
</div>
|
||||
|
||||
@@ -5,6 +5,10 @@ const shareText = ref('')
|
||||
import { useFileDataStore } from "@/stores/fileData";
|
||||
import { useFileBoxStore } from "@/stores/fileBox";
|
||||
import { ElMessage } from "element-plus";
|
||||
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
const { t } = useI18n()
|
||||
const fileBoxStore = useFileBoxStore();
|
||||
const fileStore = useFileDataStore();
|
||||
const props = defineProps({
|
||||
@@ -20,7 +24,7 @@ const props = defineProps({
|
||||
})
|
||||
const handleSubmitShareText = ()=>{
|
||||
if (shareText.value === '') {
|
||||
ElMessage.warning('请输入您要分享的文本');
|
||||
ElMessage.warning(t('send.prompt3'));
|
||||
} else {
|
||||
const formData = new FormData();
|
||||
formData.append('text', shareText.value);
|
||||
@@ -34,7 +38,7 @@ const handleSubmitShareText = ()=>{
|
||||
const data = res.detail;
|
||||
fileBoxStore.showFileBox = true;
|
||||
fileStore.addShareData({
|
||||
'name': '文本分享',
|
||||
'name': t('send.textShare'),
|
||||
'text': data.text,
|
||||
'code': data.code,
|
||||
'status': 'success',
|
||||
@@ -51,14 +55,14 @@ const handleSubmitShareText = ()=>{
|
||||
<template>
|
||||
<div style="position: relative">
|
||||
<el-input
|
||||
placeholder="请输入您要寄出的文本"
|
||||
:placeholder="t('send.prompt3')"
|
||||
v-model="shareText"
|
||||
type="textarea"
|
||||
:rows="9"
|
||||
:input-style="{'border-radius':'20px','border':'1px dashed var(--el-border-color)','box-shadow':'none'}"
|
||||
>
|
||||
</el-input>
|
||||
<el-button @click="handleSubmitShareText" style="position: absolute;right: 0;top: 0;border-radius: 0 20px 0 20px;margin: 1px;background: rgba(255,255,255,0.2)" size="large">分享</el-button>
|
||||
<el-button @click="handleSubmitShareText" style="position: absolute;right: 0;top: 0;border-radius: 0 20px 0 20px;margin: 1px;background: rgba(255,255,255,0.2)" size="large">{{t('send.share')}}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
export default {
|
||||
send: {
|
||||
'prompt1': 'Drag and drop text or files here, or ',
|
||||
'prompt2': 'Days <7 or limited times (deleted after 24h)',
|
||||
'prompt3':'Please enter the text you want to send',
|
||||
'share':'Share',
|
||||
'textShare':'Text Share',
|
||||
'clickUpload': 'Click to upload',
|
||||
'pleaseInputExpireValue': 'Please enter expiration value',
|
||||
'expireStyle': 'Expiration style',
|
||||
'expireData':{
|
||||
'day': 'Days',
|
||||
'hour': 'Hours',
|
||||
'forever': 'Forever',
|
||||
'minute': 'Minutes',
|
||||
'count': 'Times'
|
||||
},
|
||||
'expireValue':{
|
||||
'day': 'Days',
|
||||
'hour': 'Hours',
|
||||
'minute': 'Minutes',
|
||||
'count': 'Times'
|
||||
},
|
||||
'fileType':{
|
||||
'file': 'File',
|
||||
'text': 'Text'
|
||||
}
|
||||
},
|
||||
fileBox: {
|
||||
copySuccess: 'Copied successfully',
|
||||
fileBox: 'File Box',
|
||||
textDetail: 'Text Detail',
|
||||
copy: 'Copy',
|
||||
close: 'Close',
|
||||
delete: 'Delete',
|
||||
download: 'Click to download',
|
||||
detail: 'View details',
|
||||
copyLink: 'Copy link',
|
||||
},
|
||||
admin:{
|
||||
about:{
|
||||
'source1':'This project is open source on Github: ',
|
||||
'source2':'FileCodeBox'
|
||||
},
|
||||
settings: {
|
||||
name: 'Website Name',
|
||||
description: 'Website Description',
|
||||
keywords: 'Keywords',
|
||||
background: 'Background Image',
|
||||
admin_token: 'Admin Password',
|
||||
uploadSize: 'File Size',
|
||||
uploadSizeNote: 'Maximum file size, unit: (bit), 1mb = 1 * 1024 * 1024',
|
||||
openUpload: {
|
||||
'title': 'Enable Upload',
|
||||
'open': 'Enable Guest Upload',
|
||||
'close': 'Disable Guest Upload',
|
||||
'note': 'After disabling, login to the backend is required for uploading.',
|
||||
},
|
||||
file_storage: {
|
||||
'title': 'Storage Engine',
|
||||
'local': 'Local Storage',
|
||||
's3': 'S3 Storage',
|
||||
'note': 'FileCodeBox needs to be restarted after updating.',
|
||||
},
|
||||
mei: 'Every',
|
||||
minute: 'Minutes',
|
||||
upload: 'Upload',
|
||||
files: 'Files',
|
||||
allow: 'Allow',
|
||||
errors: 'Errors',
|
||||
save: 'Save',
|
||||
saveSuccess: 'Saved successfully',
|
||||
},
|
||||
fileView: {
|
||||
code: 'Access Code',
|
||||
prefix: 'File Prefix',
|
||||
suffix: 'File Suffix',
|
||||
text: 'Text',
|
||||
used_count: 'Used Count',
|
||||
expired_count: 'Available Count',
|
||||
size: 'File Size',
|
||||
expired_at: 'Expiration Time',
|
||||
file_path: 'File Path',
|
||||
action: 'Action',
|
||||
delete: 'Delete',
|
||||
},
|
||||
'menu': {
|
||||
'fileManage': 'File Management',
|
||||
'systemSetting': 'System Settings',
|
||||
'about': 'About Us',
|
||||
'color': 'Color Mode',
|
||||
'signout': 'Sign Out',
|
||||
},
|
||||
login: {
|
||||
'managePassword': 'Admin Password',
|
||||
'passwordNotEmpty': 'Password cannot be empty',
|
||||
'login': 'Login',
|
||||
'loginSuccess': 'Login successful',
|
||||
'loginError': 'Login failed',
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import { createI18n } from 'vue-i18n' //引入vue-i18n组件
|
||||
import messages from './index'
|
||||
const language = (
|
||||
navigator.language || 'zh'
|
||||
).toLowerCase();
|
||||
|
||||
const lang = localStorage.getItem('language') || language
|
||||
|
||||
const i18n = createI18n({
|
||||
silentTranslationWarn: true,
|
||||
globalInjection: true,
|
||||
legacy: false,
|
||||
locale: lang,
|
||||
messages,
|
||||
});
|
||||
|
||||
export default i18n
|
||||
@@ -0,0 +1,8 @@
|
||||
import zh from './zh'
|
||||
import en from './en'
|
||||
|
||||
|
||||
export default {
|
||||
zh,
|
||||
en
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
export default {
|
||||
send: {
|
||||
'prompt1': '将文字、文件拖、粘贴到此处,或 ',
|
||||
'prompt2': '天数<7或限制次数(24h后删除)',
|
||||
'prompt3':'请输入您要寄出的文本',
|
||||
'share':'分享',
|
||||
'textShare':'文本分享',
|
||||
'clickUpload': '点击上传',
|
||||
'pleaseInputExpireValue': '请输入有效期',
|
||||
'expireStyle': '过期方式',
|
||||
'expireData':{
|
||||
'day': '天数',
|
||||
'hour': '小时',
|
||||
'forever': '永久',
|
||||
'minute': '分钟',
|
||||
'count': '次数'
|
||||
},
|
||||
'expireValue':{
|
||||
'day': '天',
|
||||
'hour': '时',
|
||||
'minute': '分',
|
||||
'count': '次'
|
||||
},
|
||||
'fileType':{
|
||||
'file': '文件',
|
||||
'text': '文本'
|
||||
}
|
||||
},
|
||||
fileBox: {
|
||||
copySuccess: '复制成功',
|
||||
fileBox: '文件箱',
|
||||
textDetail: '文本详情',
|
||||
copy: '复 制',
|
||||
close: '关 闭',
|
||||
delete: '删 除',
|
||||
download: '点 击 下 载',
|
||||
detail: '查 看 详 情',
|
||||
copyLink: '复制链接',
|
||||
},
|
||||
admin:{
|
||||
about:{
|
||||
'source1':'本项目开源于Github:',
|
||||
'source2':'FileCodeBox'
|
||||
},
|
||||
settings: {
|
||||
name: '网站名称',
|
||||
description: '网站描述',
|
||||
keywords: '关键词',
|
||||
background: '背景图片',
|
||||
admin_token: '管理密码',
|
||||
uploadSize: '文件大小',
|
||||
uploadSizeNote: '最大文件大小,单位:(bit),1mb=1 * 1024 * 1024',
|
||||
openUpload: {
|
||||
'title': '开启上传',
|
||||
'open': '开启游客上传',
|
||||
'close': '关闭游客上传',
|
||||
'note': '关闭之后需要登录后台方可上传',
|
||||
},
|
||||
file_storage: {
|
||||
'title': '存储引擎',
|
||||
'local': '本地存储',
|
||||
's3': 'S3存储',
|
||||
'note': '更新后需要重启FileCodeBox',
|
||||
},
|
||||
mei: '每',
|
||||
minute: '分钟',
|
||||
upload: '上传',
|
||||
files: '个文件',
|
||||
allow: '允许',
|
||||
errors: '次错误',
|
||||
save: '保存',
|
||||
saveSuccess: '保存成功',
|
||||
},
|
||||
fileView: {
|
||||
code: '取件码',
|
||||
prefix: '文件前缀',
|
||||
suffix: '文件后缀',
|
||||
text: '文本',
|
||||
used_count: '已使用次数',
|
||||
expired_count: '可用次数',
|
||||
size: '文件大小',
|
||||
expired_at: '过期时间',
|
||||
file_path: '文件路径',
|
||||
action: '操作',
|
||||
delete: '删除',
|
||||
},
|
||||
'menu': {
|
||||
'fileManage': '文件管理',
|
||||
'systemSetting': '系统设置',
|
||||
'about': '关于我们',
|
||||
'color': '颜色模式',
|
||||
'signout': '退出登录',
|
||||
},
|
||||
login: {
|
||||
'managePassword': '管理密码',
|
||||
'passwordNotEmpty': '密码不能为空',
|
||||
'login': '登 录',
|
||||
'loginSuccess': '登录成功',
|
||||
'loginError': '登录失败',
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,9 +5,11 @@ import { createApp } from 'vue'
|
||||
import { createPinia } from 'pinia'
|
||||
import App from './App.vue'
|
||||
import router from './router'
|
||||
import i18n from "./locals/i18n";
|
||||
|
||||
const app = createApp(App)
|
||||
|
||||
app.use(createPinia())
|
||||
app.use(i18n)
|
||||
app.use(router)
|
||||
app.mount('#app')
|
||||
|
||||
@@ -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>
|
||||
@@ -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'));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user