feat(editor): 新增视频上传功能并优化编辑器体验

- 添加视频上传功能,支持提取视频第一帧作为封面
- 优化图片和视频上传的数量限制检查
- 修复编辑器内容为空判断逻辑,增加视频元素检测
- 改进链接插入功能,自动填充选中文本
- 调整表情选择插入方式,使用execCommand实现
- 优化附件提取逻辑,支持视频元素解析
- 添加编辑器点击事件处理,更新选区状态
- 修复样式问题,调整按钮悬停效果
This commit is contained in:
DESKTOP-RQ919RC\Pc
2025-11-18 19:20:31 +08:00
parent 16f45c4466
commit f49d937f19
12 changed files with 873 additions and 344 deletions

File diff suppressed because one or more lines are too long

View File

@@ -332,7 +332,7 @@
border-color: #50e3c2 !important;
}
</style>
<div class="coins-area flexcenter">
<div class="coins-box flexcenter">
<img class="fork closeCoinBox" src="https://app.gter.net/image/gter/commonCom/bi/img/fork-icon.png" />

View File

@@ -9,8 +9,10 @@
</div>
<div v-else class="slideshow-box">
<div class="tab-list flexacenter">
<div class="tab-item newest" :class="{'pitch': postsTab == 'newest'}" @click="tabPostsItem('newest')">最新</div>
<div class="tab-item essence" :class="{'pitch': postsTab == 'essence'}" @click="tabPostsItem('essence')">精华</div>
<div class="tab-item newest" :class="{'pitch': postsTab == 'newest'}" @click="tabPostsItem('newest')">最新
</div>
<div class="tab-item essence" :class="{'pitch': postsTab == 'essence'}" @click="tabPostsItem('essence')">精华
</div>
</div>
</div>
<div class="slideshow-content flexflex">
@@ -18,10 +20,13 @@
<div class="newest-side-box side-box">
<img class="bounding" src="/img/bounding-circle-green.svg" alt="" />
<div class="box">
<a v-for="(item, index) in latestList" :key="index" class="item flexacenter vuehide" :href="'/details/' + item.uniqid" target="_blank">
<div class="dot dot-green"></div>
<div class="text one-line-display">{{ item.title || item.content }}</div>
</a>
<template v-for="(item, index) in latestList" :key="index">
<a v-if="item.title || item.content" class="item flexacenter vuehide"
:href="'/details/' + item.uniqid" target="_blank">
<div class="dot dot-green"></div>
<div class="text one-line-display">{{ item.title || item.content }}</div>
</a>
</template>
</div>
</div>
@@ -29,11 +34,15 @@
<div class="essence-side-box side-box">
<img class="bounding" src="/img/bounding-circle-blue.svg" alt="" />
<div class="box">
<a v-for="(item, index) in topList" :key="index" class="item flexacenter vuehide" :href="'/details/' + item.uniqid" target="_blank">
<div class="dot"></div>
<div class="text one-line-display">{{ item.title || item.content }}</div>
</a>
<template v-for="(item, index) in topList" :key="index">
<a v-if="item.title || item.content" class="item flexacenter vuehide"
:href="'/details/' + item.uniqid" target="_blank">
<div class="dot"></div>
<div class="text one-line-display">{{ item.title || item.content }}</div>
</a>
</template>
</div>
</div>
</div>
</div>
</div>