新增: 资料导入增强+剪贴板+框选多选+未保存自动暂存+图片占位

This commit is contained in:
lxy
2026-08-24 02:13:15 +08:00
parent cc804f0749
commit 0907a104cf
10 changed files with 788 additions and 88 deletions
+8 -24
View File
@@ -5,7 +5,7 @@
<script setup lang="ts">
import { computed } from 'vue'
import type { SlideElement, BgKey } from '../../core/types'
import { store, resolveColor } from '../../core/store'
import { store, resolveColor, isDarkBg } from '../../core/store'
import { segmentsToHtml, markdownToSegments, hasFormatting } from '../../core/richtext'
import ChartView from './ChartView.vue'
@@ -59,32 +59,12 @@ const emit = defineEmits<{
(e: 'blur', id: string, field: string, value: string): void
}>()
/** 当前页背景是否深色 → 文字是否需要反相 */
/** 当前页背景是否深色 → 文字是否需要反相isDarkBg 复用 store 导出的统一实现) */
const dark = computed(() => {
const d = store.state.deck ? (props.el.type === 'card' ? false : isDarkBg(props.bg)) : false
return d
})
function isDarkBg(bg: string): boolean {
if (!bg) return false
if (bg.charAt(0) === '#') return isDarkHex(bg)
if (bg === 'primary' || bg === 'accent') return true
if (bg.indexOf('g-') === 0) return true
return false
}
function hexToRgb(hex: string) {
const c = String(hex).replace('#', '')
const full = c.length === 3 ? c[0] + c[0] + c[1] + c[1] + c[2] + c[2] : c
const r = parseInt(full.substr(0, 2), 16)
const g = parseInt(full.substr(2, 2), 16)
const b = parseInt(full.substr(4, 2), 16)
return (isNaN(r) || isNaN(g) || isNaN(b)) ? null : { r, g, b }
}
function isDarkHex(hex: string): boolean {
const rgb = hexToRgb(hex); if (!rgb) return false
return (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) < 145
}
const s = computed(() => props.el.style || {})
const boxStyle = computed(() => {
@@ -245,9 +225,13 @@ function onBlur(e: Event, field: string) {
</div>
</template>
<!-- 图片 -->
<!-- 图片无内容时显示占位提示不渲染空 src 的裂图 -->
<template v-else-if="el.type === 'image'">
<img class="el-image" :src="el.content" draggable="false" />
<div v-if="!el.content" class="el-image-empty">
<span class="el-image-empty-icon">🖼</span>
<span class="el-image-empty-text">拖入图片 · 属性面板本地图片 AI 配图</span>
</div>
<img v-else class="el-image" :src="el.content" draggable="false" />
</template>
<!-- 形状 -->