docs: 移动蓝绿部署指南到 troubleshooting 目录

This commit is contained in:
Simon
2026-07-05 17:03:36 +08:00
parent ab90db3d3d
commit ca7c6d937a
91 changed files with 4841 additions and 406 deletions
+17 -76
View File
@@ -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 {