docs: 移动蓝绿部署指南到 troubleshooting 目录
This commit is contained in:
@@ -7,26 +7,20 @@
|
||||
// - 右下角发送按钮(icon)
|
||||
// - Enter键发送,Shift+Enter换行
|
||||
// - 空内容时禁用发送按钮
|
||||
// - 支持粘贴图片上传
|
||||
// - 支持图片/文件选择上传
|
||||
// - 支持文件上传
|
||||
// - 2026-07-05: 移除图片/拍照功能(用户端仅支持文字和文件)
|
||||
// ============================================================================= -->
|
||||
|
||||
<template>
|
||||
<div class="input-box">
|
||||
<!-- 工具栏:表情/图片/文件/拍照/截图 -->
|
||||
<!-- 工具栏:表情/文件/截图/快捷申请 (2026-07-05移除图片和拍照) -->
|
||||
<div class="input-box__toolbar">
|
||||
<button class="input-box__tool-btn" title="表情" @click="handleEmoji">
|
||||
<span>😊</span>
|
||||
</button>
|
||||
<button class="input-box__tool-btn" title="图片" @click="handleImage">
|
||||
<span>🖼️</span>
|
||||
</button>
|
||||
<button class="input-box__tool-btn" title="文件" @click="handleFile">
|
||||
<span>📎</span>
|
||||
</button>
|
||||
<button class="input-box__tool-btn" title="拍照" @click="handleCamera">
|
||||
<span>📷</span>
|
||||
</button>
|
||||
<button class="input-box__tool-btn" title="截图" @click="handleScreenshot">
|
||||
<span>✂️</span>
|
||||
</button>
|
||||
@@ -93,7 +87,7 @@
|
||||
<!-- 表情面板打开时的半透明遮罩(点击关闭表情面板) -->
|
||||
<div v-if="showEmojiPanel" class="emoji-panel__overlay" @click="showEmojiPanel = false"></div>
|
||||
|
||||
<!-- 隐藏的文件输入框(图片/文件上传用,由工具栏按钮触发) -->
|
||||
<!-- 隐藏的文件输入框(文件上传用,由工具栏按钮触发) -->
|
||||
<input
|
||||
ref="fileInputRef"
|
||||
type="file"
|
||||
@@ -101,16 +95,6 @@
|
||||
@change="handleFileSelect"
|
||||
/>
|
||||
|
||||
<!-- 隐藏的拍照输入框(移动端直接调用摄像头) -->
|
||||
<input
|
||||
ref="cameraInputRef"
|
||||
type="file"
|
||||
accept="image/*"
|
||||
capture="environment"
|
||||
style="display: none"
|
||||
@change="handleCameraCapture"
|
||||
/>
|
||||
|
||||
<!-- 截图区域选择编辑器 -->
|
||||
<ScreenshotEditor
|
||||
v-if="showScreenshotEditor"
|
||||
@@ -163,8 +147,7 @@ const inputRef = ref<HTMLTextAreaElement | null>(null)
|
||||
/** 隐藏文件输入框 DOM 引用 */
|
||||
const fileInputRef = ref<HTMLInputElement | null>(null)
|
||||
|
||||
/** 隐藏拍照输入框 DOM 引用 */
|
||||
const cameraInputRef = ref<HTMLInputElement | null>(null)
|
||||
// 移除 cameraInputRef 声明,拍照功能已禁用
|
||||
|
||||
/** 最大字符数 */
|
||||
const maxChars = 500
|
||||
@@ -244,9 +227,8 @@ async function handleDocPaste(event: ClipboardEvent): Promise<void> {
|
||||
const file = item.getAsFile()
|
||||
if (!file) continue
|
||||
|
||||
if (file.type.startsWith('image/')) {
|
||||
await handleImageUpload(file)
|
||||
} else {
|
||||
// 跳过图片文件,仅处理非图片文件
|
||||
if (!file.type.startsWith('image/')) {
|
||||
await handleFileUpload(file)
|
||||
}
|
||||
return
|
||||
@@ -297,9 +279,11 @@ async function handleSend(): Promise<void> {
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 文件上传
|
||||
// 文件上传(2026-07-05移除图片粘贴和上传功能)
|
||||
// ============================================================================
|
||||
async function handlePaste(event: ClipboardEvent): Promise<void> {
|
||||
// 用户端不再支持粘贴图片,仅支持粘贴文件
|
||||
// 2026-07-05: 移除图片处理,仅处理文件
|
||||
const items = event.clipboardData?.items
|
||||
if (!items) return
|
||||
|
||||
@@ -309,9 +293,8 @@ async function handlePaste(event: ClipboardEvent): Promise<void> {
|
||||
const file = item.getAsFile()
|
||||
if (!file) continue
|
||||
|
||||
if (file.type.startsWith('image/')) {
|
||||
await handleImageUpload(file)
|
||||
} else {
|
||||
// 跳过图片文件,仅处理非图片文件
|
||||
if (!file.type.startsWith('image/')) {
|
||||
await handleFileUpload(file)
|
||||
}
|
||||
return
|
||||
@@ -319,27 +302,8 @@ async function handlePaste(event: ClipboardEvent): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
async function handleImageUpload(file: File | Blob): Promise<void> {
|
||||
try {
|
||||
showToast('图片上传中...')
|
||||
const result = await uploadFile(file)
|
||||
const fileName = file instanceof File ? file.name : '截图'
|
||||
await store.sendNewMessage(`[图片] ${fileName}`, {
|
||||
msg_type: 'image',
|
||||
media_url: result.url,
|
||||
file_name: result.filename,
|
||||
file_size: result.file_size,
|
||||
})
|
||||
showToast('图片发送成功')
|
||||
} catch (error: any) {
|
||||
console.error('图片上传失败:', error)
|
||||
showToast(
|
||||
formatErrorDetail(error?.response?.data?.detail) ||
|
||||
error?.message ||
|
||||
'图片上传失败,请重试'
|
||||
)
|
||||
}
|
||||
}
|
||||
// 移除 handleImageUpload 函数,图片功能已禁用
|
||||
// 保留 handleFileUpload 处理文件上传
|
||||
|
||||
async function handleFileUpload(file: File | Blob): Promise<void> {
|
||||
try {
|
||||
@@ -383,13 +347,8 @@ async function handleFileSelect(event: Event): Promise<void> {
|
||||
input.value = ''
|
||||
}
|
||||
|
||||
function handleImage(): void {
|
||||
if (fileInputRef.value) {
|
||||
fileInputRef.value.accept = 'image/*'
|
||||
fileInputRef.value.multiple = true
|
||||
fileInputRef.value.click()
|
||||
}
|
||||
}
|
||||
// 移除 handleImage 函数,图片上传功能已禁用
|
||||
// 移除 handleCamera 函数,拍照功能已禁用
|
||||
|
||||
function handleFile(): void {
|
||||
if (fileInputRef.value) {
|
||||
@@ -399,25 +358,7 @@ function handleFile(): void {
|
||||
}
|
||||
}
|
||||
|
||||
function handleCamera(): void {
|
||||
if (cameraInputRef.value) {
|
||||
cameraInputRef.value.value = ''
|
||||
cameraInputRef.value.click()
|
||||
}
|
||||
}
|
||||
|
||||
async function handleCameraCapture(event: Event): Promise<void> {
|
||||
const input = event.target as HTMLInputElement
|
||||
const files = input.files
|
||||
if (!files || files.length === 0) return
|
||||
|
||||
const file = files[0]
|
||||
if (file.type.startsWith('image/')) {
|
||||
await handleImageUpload(file)
|
||||
}
|
||||
|
||||
input.value = ''
|
||||
}
|
||||
// 移除 handleCamera 和 handleCameraCapture 函数,拍照功能已禁用
|
||||
|
||||
async function handleScreenshot(): Promise<void> {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user