|
@@ -40,7 +40,13 @@
|
|
|
</ElTableColumn>
|
|
</ElTableColumn>
|
|
|
<ElTableColumn v-if="isAdmin" prop="img" label="图片" width="120" align="center">
|
|
<ElTableColumn v-if="isAdmin" prop="img" label="图片" width="120" align="center">
|
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
|
- <RImage style="width: 30px; height: 35px; vertical-align: middle" :src="row.img" fit="cover" lazy />
|
|
|
|
|
|
|
+ <RImage
|
|
|
|
|
+ style="width: 30px; height: 35px; vertical-align: middle"
|
|
|
|
|
+ :src="row.img"
|
|
|
|
|
+ :thumbnail="row.thumbnail"
|
|
|
|
|
+ fit="cover"
|
|
|
|
|
+ lazy
|
|
|
|
|
+ />
|
|
|
</template>
|
|
</template>
|
|
|
</ElTableColumn>
|
|
</ElTableColumn>
|
|
|
<ElTableColumn v-if="isAdmin" label="内容" align="center" width="260">
|
|
<ElTableColumn v-if="isAdmin" label="内容" align="center" width="260">
|
|
@@ -53,13 +59,8 @@
|
|
|
class="cursor-pointer hover:text-blue-500"
|
|
class="cursor-pointer hover:text-blue-500"
|
|
|
:title="'点击复制: ' + row.content"
|
|
:title="'点击复制: ' + row.content"
|
|
|
></div>
|
|
></div>
|
|
|
- <ElButton
|
|
|
|
|
- :icon="Edit"
|
|
|
|
|
- circle
|
|
|
|
|
- size="small"
|
|
|
|
|
- @click="onContentEdit(row)"
|
|
|
|
|
- style="margin-left: 10px"
|
|
|
|
|
- ></ElButton>
|
|
|
|
|
|
|
+ <ElButton :icon="Edit" circle size="small" @click="onContentEdit(row)" style="margin-left: 10px">
|
|
|
|
|
+ </ElButton>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</ElTableColumn>
|
|
</ElTableColumn>
|
|
@@ -149,19 +150,9 @@
|
|
|
</div>
|
|
</div>
|
|
|
</ElFormItem>
|
|
</ElFormItem>
|
|
|
<div class="selected-words-container">
|
|
<div class="selected-words-container">
|
|
|
- <div
|
|
|
|
|
- v-for="(word, index) in selectedWords"
|
|
|
|
|
- :key="index"
|
|
|
|
|
- class="selected-word-item"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ <div v-for="(word, index) in selectedWords" :key="index" class="selected-word-item">
|
|
|
<span>{{ word }}</span>
|
|
<span>{{ word }}</span>
|
|
|
- <ElButton
|
|
|
|
|
- type="danger"
|
|
|
|
|
- :icon="X"
|
|
|
|
|
- circle
|
|
|
|
|
- size="small"
|
|
|
|
|
- @click="removeWord(index)"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <ElButton type="danger" :icon="X" circle size="small" @click="removeWord(index)" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -171,11 +162,7 @@
|
|
|
<!-- 右侧图片区域 -->
|
|
<!-- 右侧图片区域 -->
|
|
|
<div class="right-section">
|
|
<div class="right-section">
|
|
|
<div class="image-container">
|
|
<div class="image-container">
|
|
|
- <RImage
|
|
|
|
|
- :src="model.img"
|
|
|
|
|
- fit="contain"
|
|
|
|
|
- class="preview-image"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <RImage :src="model.img" :thumbnail="model.thumbnail" fit="contain" class="preview-image" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -218,8 +205,7 @@ import { wordlists } from 'bip39'
|
|
|
const query = ref({
|
|
const query = ref({
|
|
|
width: 50,
|
|
width: 50,
|
|
|
height: 50,
|
|
height: 50,
|
|
|
- quality: 50,
|
|
|
|
|
- format: 'jpg'
|
|
|
|
|
|
|
+ quality: 50
|
|
|
})
|
|
})
|
|
|
const timeFormatter = useTimeFormatter()
|
|
const timeFormatter = useTimeFormatter()
|
|
|
const table = ref(null)
|
|
const table = ref(null)
|
|
@@ -278,11 +264,15 @@ const selectedWords = ref([])
|
|
|
const selectedIndex = ref(-1)
|
|
const selectedIndex = ref(-1)
|
|
|
|
|
|
|
|
// 监听model变化,初始化selectedWords
|
|
// 监听model变化,初始化selectedWords
|
|
|
-watch(() => model.value.content, (newVal) => {
|
|
|
|
|
- if (newVal) {
|
|
|
|
|
- selectedWords.value = newVal.split(' ').filter(Boolean)
|
|
|
|
|
- }
|
|
|
|
|
-}, { immediate: true })
|
|
|
|
|
|
|
+watch(
|
|
|
|
|
+ () => model.value.content,
|
|
|
|
|
+ (newVal) => {
|
|
|
|
|
+ if (newVal) {
|
|
|
|
|
+ selectedWords.value = newVal.split(' ').filter(Boolean)
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ { immediate: true }
|
|
|
|
|
+)
|
|
|
|
|
|
|
|
// 使用BIP39的英文单词列表
|
|
// 使用BIP39的英文单词列表
|
|
|
const bip39Words = wordlists.english
|
|
const bip39Words = wordlists.english
|
|
@@ -295,16 +285,14 @@ function handleWordInput() {
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
const input = inputWord.value.toLowerCase()
|
|
const input = inputWord.value.toLowerCase()
|
|
|
- suggestions.value = bip39Words
|
|
|
|
|
- .filter(word => word.startsWith(input))
|
|
|
|
|
- .slice(0, 10)
|
|
|
|
|
|
|
+ suggestions.value = bip39Words.filter((word) => word.startsWith(input)).slice(0, 10)
|
|
|
selectedIndex.value = -1
|
|
selectedIndex.value = -1
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 处理键盘事件
|
|
// 处理键盘事件
|
|
|
function handleKeyDown(e) {
|
|
function handleKeyDown(e) {
|
|
|
if (suggestions.value.length === 0) return
|
|
if (suggestions.value.length === 0) return
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
switch (e.key) {
|
|
switch (e.key) {
|
|
|
case 'ArrowDown':
|
|
case 'ArrowDown':
|
|
|
e.preventDefault()
|
|
e.preventDefault()
|
|
@@ -497,10 +485,10 @@ function scrollToSelected() {
|
|
|
const visibleHeight = containerRect.height
|
|
const visibleHeight = containerRect.height
|
|
|
const scrollTop = suggestionsEl.scrollTop
|
|
const scrollTop = suggestionsEl.scrollTop
|
|
|
const selectedTop = selectedRect.top - containerRect.top + scrollTop
|
|
const selectedTop = selectedRect.top - containerRect.top + scrollTop
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 计算选中项在可视区域中的位置
|
|
// 计算选中项在可视区域中的位置
|
|
|
const positionInViewport = selectedTop - scrollTop
|
|
const positionInViewport = selectedTop - scrollTop
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 如果选中项在中间位置以下,向下滚动
|
|
// 如果选中项在中间位置以下,向下滚动
|
|
|
if (positionInViewport > visibleHeight / 2) {
|
|
if (positionInViewport > visibleHeight / 2) {
|
|
|
suggestionsEl.scrollTop = selectedTop - visibleHeight / 2 + itemHeight / 2
|
|
suggestionsEl.scrollTop = selectedTop - visibleHeight / 2 + itemHeight / 2
|