为各小组件配置界面添加预设样式选项,优化用户体验

This commit is contained in:
hxuanyu 2025-06-27 10:49:57 +08:00
parent 925c8ad6bc
commit b7730f8617
5 changed files with 90 additions and 49 deletions

View File

@ -8,19 +8,23 @@
</div> </div>
<div class="config-container"> <div class="config-container">
<div class="config-panel">
<component :is="currentConfigComponent" v-if="currentConfigComponent" @update:config="updateWidgetConfig" :config="currentWidgetConfig" />
</div>
<div class="url-generator"> <div class="url-generator">
<h3>生成的URL链接</h3> <h3>生成的URL链接</h3>
<el-input v-model="generatedUrl" readonly size="large"> <div class="url-input-group">
<template #append> <el-input v-model="generatedUrl" readonly size="large" />
<el-button @click="copyUrl"> <div class="button-group">
<el-button @click="copyUrl" size="large">
<el-icon><CopyDocument /></el-icon> 复制 <el-icon><CopyDocument /></el-icon> 复制
</el-button> </el-button>
</template> <el-button @click="openPreview" size="large">
</el-input> <el-icon><View /></el-icon> 打开
</el-button>
</div>
</div>
</div>
<div class="config-panel">
<component :is="currentConfigComponent" v-if="currentConfigComponent" @update:config="updateWidgetConfig" :config="currentWidgetConfig" />
</div> </div>
</div> </div>
</div> </div>
@ -37,7 +41,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, onMounted, watch } from 'vue'; import { ref, computed, onMounted, watch } from 'vue';
import { CopyDocument } from '@element-plus/icons-vue'; import { CopyDocument, View } from '@element-plus/icons-vue';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import { encodeConfig, decodeConfig } from '../utils/configUtils'; import { encodeConfig, decodeConfig } from '../utils/configUtils';
@ -91,6 +95,15 @@ const copyUrl = () => {
}); });
}; };
//
const openPreview = () => {
if (generatedUrl.value) {
window.open(generatedUrl.value, '_blank');
} else {
ElMessage.warning('请先配置小组件');
}
};
// //
onMounted(() => { onMounted(() => {
const queryParams = new URLSearchParams(window.location.search); const queryParams = new URLSearchParams(window.location.search);
@ -161,17 +174,16 @@ watch([selectedWidget, currentWidgetConfig], () => {
} }
.config-panel { .config-panel {
/* 配置面板可以滚动但不挤压URL生成器 */ /* 配置面板可以滚动 */
overflow-y: auto; overflow-y: auto;
flex: 1; flex: 1;
margin-bottom: 20px;
} }
.url-generator { .url-generator {
/* URL生成器固定在部 */ /* URL生成器固定在部 */
margin-top: auto; margin-bottom: 20px;
padding: 10px 0; padding: 10px 0;
border-top: 1px solid #eaeaea; border-bottom: 1px solid #eaeaea;
} }
.url-generator h3 { .url-generator h3 {
@ -181,6 +193,17 @@ watch([selectedWidget, currentWidgetConfig], () => {
color: #606266; color: #606266;
} }
.url-input-group {
display: flex;
align-items: center;
gap: 10px;
}
.button-group {
display: flex;
gap: 8px;
}
.preview-container { .preview-container {
width: 100%; width: 100%;
height: 100%; height: 100%;

View File

@ -3,6 +3,19 @@
<h2>时钟小组件设置</h2> <h2>时钟小组件设置</h2>
<el-form label-position="top"> <el-form label-position="top">
<el-divider>预设样式</el-divider>
<el-form-item>
<el-button-group>
<el-button type="primary" @click="applyPreset('modern')">现代风格</el-button>
<el-button type="success" @click="applyPreset('neon')">霓虹风格</el-button>
<el-button type="warning" @click="applyPreset('elegant')">优雅风格</el-button>
<el-button type="danger" @click="applyPreset('minimal')">简约风格</el-button>
</el-button-group>
</el-form-item>
<el-divider>基本设置</el-divider>
<el-form-item label="时间格式"> <el-form-item label="时间格式">
<el-select v-model="localConfig.format" placeholder="选择格式"> <el-select v-model="localConfig.format" placeholder="选择格式">
<el-option label="HH:mm:ss (24小时制)" value="HH:mm:ss" /> <el-option label="HH:mm:ss (24小时制)" value="HH:mm:ss" />
@ -99,16 +112,6 @@
</el-form-item> </el-form-item>
</template> </template>
<el-divider>预设样式</el-divider>
<el-form-item>
<el-button-group>
<el-button type="primary" @click="applyPreset('modern')">现代风格</el-button>
<el-button type="success" @click="applyPreset('neon')">霓虹风格</el-button>
<el-button type="warning" @click="applyPreset('elegant')">优雅风格</el-button>
<el-button type="danger" @click="applyPreset('minimal')">简约风格</el-button>
</el-button-group>
</el-form-item>
</el-form> </el-form>
</div> </div>
</template> </template>

View File

@ -3,6 +3,19 @@
<h2>日期小组件设置</h2> <h2>日期小组件设置</h2>
<el-form label-position="top"> <el-form label-position="top">
<el-divider>预设样式</el-divider>
<el-form-item>
<el-button-group>
<el-button type="primary" @click="applyPreset('modern')">现代风格</el-button>
<el-button type="success" @click="applyPreset('elegant')">优雅风格</el-button>
<el-button type="warning" @click="applyPreset('casual')">休闲风格</el-button>
<el-button type="danger" @click="applyPreset('minimal')">简约风格</el-button>
</el-button-group>
</el-form-item>
<el-divider>基本设置</el-divider>
<el-form-item label="日期格式"> <el-form-item label="日期格式">
<el-select v-model="localConfig.format" placeholder="选择格式"> <el-select v-model="localConfig.format" placeholder="选择格式">
<el-option label="YYYY-MM-DD" value="YYYY-MM-DD" /> <el-option label="YYYY-MM-DD" value="YYYY-MM-DD" />
@ -81,14 +94,6 @@
</el-form-item> </el-form-item>
</template> </template>
<el-form-item>
<el-button-group>
<el-button type="primary" @click="applyPreset('modern')">现代风格</el-button>
<el-button type="success" @click="applyPreset('elegant')">优雅风格</el-button>
<el-button type="warning" @click="applyPreset('casual')">休闲风格</el-button>
<el-button type="danger" @click="applyPreset('minimal')">简约风格</el-button>
</el-button-group>
</el-form-item>
</el-form> </el-form>
</div> </div>
</template> </template>

View File

@ -3,6 +3,19 @@
<h2>图片小组件设置</h2> <h2>图片小组件设置</h2>
<el-form label-position="top"> <el-form label-position="top">
<el-divider>预设样式</el-divider>
<el-form-item>
<el-button-group>
<el-button type="primary" @click="applyPreset('normal')">正常</el-button>
<el-button type="success" @click="applyPreset('rounded')">圆角</el-button>
<el-button type="warning" @click="applyPreset('shadow')">阴影</el-button>
<el-button type="danger" @click="applyPreset('circular')">圆形</el-button>
</el-button-group>
</el-form-item>
<el-divider>基本设置</el-divider>
<el-form-item label="图片URL"> <el-form-item label="图片URL">
<el-input v-model="localConfig.imageUrl" placeholder="输入图片URL" /> <el-input v-model="localConfig.imageUrl" placeholder="输入图片URL" />
</el-form-item> </el-form-item>
@ -45,14 +58,6 @@
</el-form-item> </el-form-item>
</template> </template>
<el-form-item>
<el-button-group>
<el-button type="primary" @click="applyPreset('normal')">正常</el-button>
<el-button type="success" @click="applyPreset('rounded')">圆角</el-button>
<el-button type="warning" @click="applyPreset('shadow')">阴影</el-button>
<el-button type="danger" @click="applyPreset('circular')">圆形</el-button>
</el-button-group>
</el-form-item>
</el-form> </el-form>
</div> </div>
</template> </template>

View File

@ -3,6 +3,19 @@
<h2>文本小组件设置</h2> <h2>文本小组件设置</h2>
<el-form label-position="top"> <el-form label-position="top">
<el-divider>预设样式</el-divider>
<el-form-item>
<el-button-group>
<el-button type="primary" @click="applyPreset('modern')">现代风格</el-button>
<el-button type="success" @click="applyPreset('neon')">霓虹风格</el-button>
<el-button type="warning" @click="applyPreset('retro')">复古风格</el-button>
<el-button type="danger" @click="applyPreset('minimal')">简约风格</el-button>
</el-button-group>
</el-form-item>
<el-divider>基本设置</el-divider>
<el-form-item label="文本内容"> <el-form-item label="文本内容">
<el-input v-model="localConfig.text" type="textarea" :rows="3" placeholder="输入要显示的文本" /> <el-input v-model="localConfig.text" type="textarea" :rows="3" placeholder="输入要显示的文本" />
</el-form-item> </el-form-item>
@ -71,14 +84,6 @@
</el-form-item> </el-form-item>
</template> </template>
<el-form-item>
<el-button-group>
<el-button type="primary" @click="applyPreset('modern')">现代风格</el-button>
<el-button type="success" @click="applyPreset('neon')">霓虹风格</el-button>
<el-button type="warning" @click="applyPreset('retro')">复古风格</el-button>
<el-button type="danger" @click="applyPreset('minimal')">简约风格</el-button>
</el-button-group>
</el-form-item>
</el-form> </el-form>
</div> </div>
</template> </template>