e4f29ce4创建于 2025年3月10日历史提交
<template>
    <div class="mb-12">指示器设置</div>
    <el-form-item label="是否显示">
        <div class="flex-row gap-10">
            <el-switch v-model="form.is_show" active-value="1" inactive-value="0" @change="operation_end"/>
            <tooltip content="当数据只有一屏的时候不展示指示器"></tooltip>
        </div>
    </el-form-item>
    <template v-if="form.is_show == '1'">
        <el-form-item label="位置">
            <el-radio-group v-model="form.indicator_new_location" @change="operation_end">
                <el-radio value="top">上</el-radio>
                <el-radio value="bottom">下</el-radio>
                <el-radio value="left">左</el-radio>
                <el-radio value="right">右</el-radio>
            </el-radio-group>
        </el-form-item>
        <el-form-item label="对齐方式">
            <el-radio-group v-model="form.indicator_location" @change="operation_end">
                <el-radio value="flex-start">{{ ['left', 'right'].includes(form.indicator_new_location) ? '上' : '左' }}对齐</el-radio>
                <el-radio value="center">居中</el-radio>
                <el-radio value="flex-end">{{ ['left', 'right'].includes(form.indicator_new_location) ? '下' : '右' }}对齐</el-radio>
            </el-radio-group>
        </el-form-item>
        <el-form-item label="样式">
            <el-radio-group v-model="form.indicator_style" is-button @change="operation_end">
                <el-tooltip content="点" placement="top" effect="dark">
                    <el-radio-button value="dot"><icon name="iconfont icon-ellipsis"></icon></el-radio-button>
                </el-tooltip>
                <el-tooltip content="线" placement="top" effect="dark">
                    <el-radio-button value="elliptic"><icon name="iconfont icon-elliptic"></icon></el-radio-button>
                </el-tooltip>
                <el-tooltip content="数字" placement="top" effect="dark">
                    <el-radio-button value="num">1/5</el-radio-button>
                </el-tooltip>
            </el-radio-group>
        </el-form-item>
        <el-form-item label="色值">
            <div class="flex-col gap-20">
                <div class="flex-row gap-20"><span class="size-12 cr-9">选中样式</span><color-picker v-model="form.actived_color" default-color="#2A94FF" @update:value="color_picker_change($event, 'actived_color')"></color-picker></div>
                <div class="flex-row gap-20"><span class="size-12 cr-9">常规样式</span><color-picker v-model="form.color" default-color="#DDDDDD" @update:value="color_picker_change($event, 'color')"></color-picker></div>
            </div>
        </el-form-item>
        <el-form-item label="大小">
            <slider v-model="form.indicator_size" :max="100" @operation_end="operation_end"></slider>
        </el-form-item>
        <el-form-item v-if="isIndicatorBottom" label="边距">
            <slider v-model="form.indicator_bottom" :min="0" :max="100" @operation_end="operation_end"></slider>
        </el-form-item>
        <el-form-item v-if="form.indicator_style != 'num'" label="圆角">
            <radius :value="form.indicator_radius" @operation_end="operation_end"></radius>
        </el-form-item>
    </template>
</template>
<script setup lang="ts">
import { pick } from 'lodash';
// interface indicator {
//     is_show: boolean;
//     indicator_style: string;
//     indicator_location: string;
//     indicator_size: number;
//     indicator_radius: radiusStyle;
//     actived_color: string;
//     color: string;
// }
// interface Props {
//     value: indicator;
// }
// const props = defineProps<Props>();
const props = defineProps({
    value: {
        type: Object,
        default: () => {}
    },
    isIndicatorBottom: {
        type: Boolean,
        default: true
    }
})

const state = reactive({
    form: props.value
});
// 如果需要解构,确保使用toRefs
const { form } = toRefs(state);
const color_picker_change = (color: string, type: string) => {
    if (type === 'actived_color') {
        form.value.actived_color = color;
    } else {
        form.value.color = color;
    }
    operation_end();
};

const emit = defineEmits(['operation_end']);
// 失去焦点时触发事件
const operation_end = () => {
    emit('operation_end');
};
</script>