blob: 10851517c7d888943fc9d8034c844c3618d9508d [file] [log] [blame]
<template>
<el-collapse>
<el-collapse-item title="颜色" name="color">
<!-- <h5>基础色</h5>
<div>
<el-color-picker
v-for="(color, index) in themeColors"
v-bind:key="index"
v-model="themeColors[index]"
size="small"
>
</el-color-picker>
<div class="color-picker-btn">
<i class="el-icon-minus"></i>
</div>
<div class="color-picker-btn">
<i class="el-icon-plus"></i>
</div>
</div> -->
<h5>色相范围</h5>
<el-row>
<el-col :span="22" :offset="1">
<el-slider
v-model="hue"
range
show-tooltip
:max="1"
:step="0.05"
input-size="medium"
>
</el-slider>
</el-col>
</el-row>
<h5>饱和度范围</h5>
<el-row>
<el-col :span="22" :offset="1">
<el-slider
v-model="saturation"
range
show-tooltip
:max="1"
:step="0.05"
input-size="medium"
>
</el-slider>
</el-col>
</el-row>
<h5>亮度范围</h5>
<el-row>
<el-col :span="22" :offset="1">
<el-slider
v-model="lightness"
range
show-tooltip
:max="1"
:step="0.05"
input-size="medium"
>
</el-slider>
</el-col>
</el-row>
<h5>透明度范围</h5>
<el-row>
<el-col :span="22" :offset="1">
<el-slider
v-model="alpha"
range
show-tooltip
:max="1"
:step="0.05"
input-size="medium"
>
</el-slider>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="文字" name="font">
<el-row>
<el-col :span="12">
<h5>字体</h5>
</el-col>
<el-col :span="12">
<el-select
v-model="selectedFontFamily"
placeholder="请选择字体"
@change="changeFontFamily"
>
<el-option
v-for="item in fontFamilies"
:key="item"
:label="item"
:value="item"
>
</el-option>
</el-select>
</el-col>
</el-row>
<h5>字号范围</h5>
<el-row>
<el-col :span="22" :offset="1">
<el-slider
v-model="fontSize"
range
show-tooltip
:max="100"
:step="1"
input-size="medium"
@change="change"
>
</el-slider>
</el-col>
</el-row>
<h5>旋转范围</h5>
<el-row>
<el-col :span="22" :offset="1">
<el-slider
v-model="rotate"
range
show-tooltip
:min="-180"
:max="180"
:step="45"
input-size="medium"
@change="change"
>
</el-slider>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="形状" name="mask">
<h5>宽度(百分比)</h5>
<el-row>
<el-col :span="22" :offset="1">
<el-slider
v-model="width"
show-tooltip
:max="100"
:step="5"
input-size="medium"
@change="change"
>
</el-slider>
</el-col>
</el-row>
<h5>高度(百分比)</h5>
<el-row>
<el-col :span="22" :offset="1">
<el-slider
v-model="height"
show-tooltip
:max="100"
:step="5"
input-size="medium"
@change="change"
>
</el-slider>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<h5>遮罩形状</h5>
</el-col>
<el-col :span="12">
<el-select
v-model="selectedMask"
placeholder="请选择遮罩图形"
@change="changeMask"
>
<el-option
v-for="item in masks"
:key="item.value"
:label="item.name"
:value="item.value"
>
</el-option>
</el-select>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</template>
<script setup lang="ts">
import { ref } from "vue";
// const themeColors = ref(['#720FEB', '#EB1AA9', '#B6DA02']);
const hue = ref([0, 255]);
const saturation = ref([0.5, 0.8]);
const lightness = ref([0.5, 0.8]);
const alpha = ref([0.5, 0.8]);
const selectedFontFamily = ref("Arial");
const fontSize = ref([4, 100]);
const rotate = ref([-90, 90]);
const width = ref(90);
const height = ref(90);
const selectedMask = ref("circle");
const fontFamilies = [
"Arial",
"Lato",
"Times New Roman",
"Courier New",
"Georgia",
"Helvetica",
"Lucida Sans",
"Tahoma",
"Verdana"
];
const masks = [
{
name: "椭圆",
value: "circle"
},
{
name: "方形",
value: "square"
},
{
name: "菱形",
value: "diamond"
},
{
name: "三角形",
value: "triangle"
},
{
name: "五边形",
value: "pentagon"
},
{
name: "五角星",
value: "star"
},
{
name: "爱心",
value: "cardioid"
// }, {
// name: '自定义图片',
// value: 'image'
}
];
const emit = defineEmits(["change"]);
defineExpose({ getConfig });
function changeFontFamily() {
change();
}
function changeMask() {
change();
}
function change() {
emit("change");
}
function getConfig() {
return {
hue: hue.value,
saturation: saturation.value,
lightness: lightness.value,
alpha: alpha.value,
fontFamily: selectedFontFamily.value,
fontSize: fontSize.value,
rotate: rotate.value,
width: width.value,
height: height.value,
shape: selectedMask.value === "image" ? null : selectedMask.value
};
}
</script>
<style lang="scss">
.title-right {
position: absolute;
top: 10px;
right: 0;
a {
display: inline-block;
}
}
.el-color-picker {
margin-right: 5px;
}
.color-picker-btn {
display: inline-block;
width: 30px;
height: 30px;
margin-right: 5px;
padding: 3px 6px;
box-sizing: border-box;
vertical-align: top;
border: 1px solid #e6e6e6;
border-radius: 4px;
color: #409eff;
}
.text-pad {
padding: 8px 0;
}
.el-dropdown-link {
cursor: pointer;
color: #409eff;
}
.el-icon-arrow-down {
font-size: 12px;
}
h5 {
margin: 8px 0;
font-size: 13px;
color: #666;
}
</style>