add:vue-i18n,admin add file size

This commit is contained in:
lan
2023-09-06 11:06:18 +08:00
parent 5d08819529
commit dcdad7ce2e
40 changed files with 770 additions and 427 deletions
+15 -11
View File
@@ -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>
+5 -3
View File
@@ -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;">天数&lt;7或限制次数24h后删除</div>
<div class="el-upload__text" style="font-size: 10px;">{{t('send.prompt2')}}</div>
<template #tip>
<div class="el-upload__tip">
</div>
+8 -4
View File
@@ -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>
+102
View File
@@ -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',
}
}
}
+17
View File
@@ -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
+8
View File
@@ -0,0 +1,8 @@
import zh from './zh'
import en from './en'
export default {
zh,
en
}
+102
View File
@@ -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': '登录失败',
}
}
}
+2
View File
@@ -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')
+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">