fix:qrcode
This commit is contained in:
@@ -100,6 +100,14 @@ provide('isLoading', isLoading)
|
|||||||
transition: background-color 0.5s ease;
|
transition: background-color 0.5s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.light {
|
||||||
|
@apply bg-gradient-to-br from-blue-50 via-indigo-50 to-white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark {
|
||||||
|
@apply bg-gradient-to-br from-gray-900 via-indigo-900 to-black;
|
||||||
|
}
|
||||||
|
|
||||||
.fade-enter-active,
|
.fade-enter-active,
|
||||||
.fade-leave-active {
|
.fade-leave-active {
|
||||||
transition: opacity 0.3s ease;
|
transition: opacity 0.3s ease;
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ const props = defineProps({
|
|||||||
defineEmits(['close', 'show-preview'])
|
defineEmits(['close', 'show-preview'])
|
||||||
|
|
||||||
const copyShareLink = async () => {
|
const copyShareLink = async () => {
|
||||||
copyToClipboard(`${props.baseUrl}/retrieve/${props.record.code}`)
|
copyToClipboard(`${props.baseUrl}/#/?code=${props.record.code}`)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -269,7 +269,7 @@
|
|||||||
<p :class="[isDarkMode ? 'text-gray-300' : 'text-gray-800']">
|
<p :class="[isDarkMode ? 'text-gray-300' : 'text-gray-800']">
|
||||||
<span class="font-medium">文件内容:</span>
|
<span class="font-medium">文件内容:</span>
|
||||||
</p>
|
</p>
|
||||||
<div v-if="selectedRecord.content" class="ml-2">
|
<div v-if="selectedRecord.filename == 'Text'" class="ml-2">
|
||||||
<button
|
<button
|
||||||
@click="showContentPreview"
|
@click="showContentPreview"
|
||||||
class="px-4 py-2 bg-indigo-600 text-white rounded-lg hover:bg-indigo-700 transition duration-300"
|
class="px-4 py-2 bg-indigo-600 text-white rounded-lg hover:bg-indigo-700 transition duration-300"
|
||||||
@@ -369,10 +369,7 @@ import { marked } from 'marked'
|
|||||||
import { useAlertStore } from '@/stores/alertStore'
|
import { useAlertStore } from '@/stores/alertStore'
|
||||||
|
|
||||||
const alertStore = useAlertStore()
|
const alertStore = useAlertStore()
|
||||||
const baseUrl =
|
const baseUrl = window.location.origin
|
||||||
import.meta.env.MODE === 'production'
|
|
||||||
? import.meta.env.VITE_API_BASE_URL_PROD
|
|
||||||
: import.meta.env.VITE_API_BASE_URL_DEV
|
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const isDarkMode = inject('isDarkMode')
|
const isDarkMode = inject('isDarkMode')
|
||||||
@@ -486,7 +483,11 @@ const toSend = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getQRCodeValue = (record) => {
|
const getQRCodeValue = (record) => {
|
||||||
return `${baseUrl}${record.downloadUrl}`
|
if (record.downloadUrl) {
|
||||||
|
return `${baseUrl}${record.downloadUrl}`
|
||||||
|
} else {
|
||||||
|
return `${baseUrl}?code=${record.code}`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const downloadRecord = (record) => {
|
const downloadRecord = (record) => {
|
||||||
|
|||||||
+13
-14
@@ -240,7 +240,7 @@
|
|||||||
class="font-medium text-lg truncate"
|
class="font-medium text-lg truncate"
|
||||||
:class="[isDarkMode ? 'text-white' : 'text-gray-800']"
|
:class="[isDarkMode ? 'text-white' : 'text-gray-800']"
|
||||||
>
|
>
|
||||||
{{ record.filename }}
|
{{ record.filename ? record.filename : 'Text' }}
|
||||||
</p>
|
</p>
|
||||||
<p
|
<p
|
||||||
class="text-sm truncate"
|
class="text-sm truncate"
|
||||||
@@ -603,12 +603,13 @@ const handleSubmit = async () => {
|
|||||||
try {
|
try {
|
||||||
let response: any
|
let response: any
|
||||||
const formData = new FormData()
|
const formData = new FormData()
|
||||||
|
const isFile = sendType.value === 'file'
|
||||||
if (sendType.value === 'file') {
|
if (isFile) {
|
||||||
formData.append('file', selectedFile.value!)
|
formData.append('file', selectedFile.value!)
|
||||||
} else {
|
} else {
|
||||||
const textBlob = new Blob([textContent.value], { type: 'text/plain' })
|
formData.append('text', textContent.value)
|
||||||
formData.append('file', textBlob, 'text_content.txt')
|
// const textBlob = new Blob([textContent.value], { type: 'text/plain' })
|
||||||
|
// formData.append('file', textBlob, 'text_content.txt')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (expirationMethod.value !== 'forever') {
|
if (expirationMethod.value !== 'forever') {
|
||||||
@@ -626,8 +627,11 @@ const handleSubmit = async () => {
|
|||||||
uploadProgress.value = percentCompleted
|
uploadProgress.value = percentCompleted
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (isFile) {
|
||||||
response = await api.post('/share/file/', formData, config)
|
response = await api.post('/share/file/', formData, config)
|
||||||
|
} else {
|
||||||
|
response = await api.post('/share/text/', formData, config)
|
||||||
|
}
|
||||||
|
|
||||||
if (response && response.code === 200) {
|
if (response && response.code === 200) {
|
||||||
const retrieveCode = response.detail.code
|
const retrieveCode = response.detail.code
|
||||||
@@ -696,14 +700,9 @@ const deleteRecord = (id: number) => {
|
|||||||
fileDataStore.deleteShareData(index)
|
fileDataStore.deleteShareData(index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const baseUrl =
|
const baseUrl = window.location.origin + '/#/'
|
||||||
import.meta.env.MODE === 'production'
|
|
||||||
? import.meta.env.VITE_API_BASE_URL_PROD
|
|
||||||
: import.meta.env.VITE_API_BASE_URL_DEV
|
|
||||||
const getQRCodeValue = (record: any) => {
|
const getQRCodeValue = (record: any) => {
|
||||||
// 这里返回你想要在二维码中编码的信息
|
return `${baseUrl}?code=${record.retrieveCode}`
|
||||||
// 例如,可以是一个包含文件ID和取件码的URL
|
|
||||||
return `${baseUrl}/?code=${record.retrieveCode}`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 使用 onMounted 钩子延迟加载一些非关键资源或初始化
|
// 使用 onMounted 钩子延迟加载一些非关键资源或初始化
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ interface ConfigState {
|
|||||||
name: string
|
name: string
|
||||||
description: string
|
description: string
|
||||||
file_storage: string
|
file_storage: string
|
||||||
|
themesChoices: any[]
|
||||||
expireStyle: string[]
|
expireStyle: string[]
|
||||||
admin_token: string
|
admin_token: string
|
||||||
robotsText: string
|
robotsText: string
|
||||||
@@ -34,12 +35,14 @@ interface ConfigState {
|
|||||||
errorMinute: number
|
errorMinute: number
|
||||||
errorCount: number
|
errorCount: number
|
||||||
s3_proxy: number
|
s3_proxy: number
|
||||||
|
themesSelect: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const config = ref<ConfigState>({
|
const config = ref<ConfigState>({
|
||||||
name: '',
|
name: '',
|
||||||
description: '',
|
description: '',
|
||||||
file_storage: '',
|
file_storage: '',
|
||||||
|
themesChoices: [],
|
||||||
expireStyle: [],
|
expireStyle: [],
|
||||||
admin_token: '',
|
admin_token: '',
|
||||||
robotsText: '',
|
robotsText: '',
|
||||||
@@ -65,7 +68,8 @@ const config = ref<ConfigState>({
|
|||||||
uploadCount: 1,
|
uploadCount: 1,
|
||||||
errorMinute: 1,
|
errorMinute: 1,
|
||||||
errorCount: 1,
|
errorCount: 1,
|
||||||
s3_proxy: 0
|
s3_proxy: 0,
|
||||||
|
themesSelect: ''
|
||||||
})
|
})
|
||||||
|
|
||||||
const fileSize = ref(1)
|
const fileSize = ref(1)
|
||||||
@@ -268,6 +272,31 @@ refreshData()
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- 主题选择 -->
|
||||||
|
<div class="space-y-2">
|
||||||
|
<label
|
||||||
|
class="block text-sm font-medium"
|
||||||
|
:class="[isDarkMode ? 'text-gray-300' : 'text-gray-700']"
|
||||||
|
>
|
||||||
|
主题选择
|
||||||
|
</label>
|
||||||
|
<select
|
||||||
|
v-model="config.themesSelect"
|
||||||
|
class="w-full rounded-md shadow-sm px-4 py-2.5 transition-all duration-200 ease-in-out border appearance-none bg-no-repeat bg-right focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 outline-none cursor-pointer"
|
||||||
|
:class="[
|
||||||
|
isDarkMode
|
||||||
|
? 'bg-gray-700 border-gray-600 text-white hover:border-gray-500'
|
||||||
|
: 'border-gray-300 hover:border-gray-400'
|
||||||
|
]"
|
||||||
|
style="
|
||||||
|
background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20fill%3D%22none%22%3E%3Cpath%20d%3D%22M7%208l3%203%203-3%22%20stroke%3D%22%236B7280%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E');
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<option v-for="item in config.themesChoices" :value="item.key" :key="item.key">
|
||||||
|
{{ item.name }} (by {{ item.author }} V{{ item.version }})
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
<div class="space-y-2">
|
<div class="space-y-2">
|
||||||
<label
|
<label
|
||||||
class="block text-sm font-medium"
|
class="block text-sm font-medium"
|
||||||
|
|||||||
Reference in New Issue
Block a user