d4a37ede创建于 2025年1月20日历史提交
<template>
    <div class="w h">
        <el-form :model="form" label-width="70">
            <template v-if="!isHeader">
                <common-content-top :value="form.content_top"></common-content-top>
                <div class="divider-line"></div>
            </template>
            <card-container>
                <div class="mb-12">展示设置</div>
                <el-form-item label="左侧图标" class="align-s">
                    <el-row class="w">
                        <el-col :span="24"><el-switch v-model="form.is_icon_show" active-value="1" inactive-value="0"></el-switch></el-col>
                    </el-row>
                    <template v-if="form.is_icon_show == '1'">
                        <el-row class="mt-10 w">
                            <el-col :span="24">
                                <upload v-model="form.icon_img" v-model:icon-value="form.icon_class" is-icon :limit="1" size="50"></upload>
                            </el-col>
                        </el-row>
                        <el-row class="mt-10 w">
                            <el-col :span="24"><url-value v-model="form.icon_link"></url-value></el-col>
                        </el-row>
                    </template>
                </el-form-item>
                <el-form-item label="提示文字">
                    <el-row class="w">
                        <el-col :span="24"><el-switch v-model="form.is_tips_show" active-value="1" inactive-value="0"></el-switch></el-col>
                    </el-row>
                    <el-row v-if="form.is_tips_show == '1'" class="mt-10 w">
                        <el-col :span="24">
                            <el-input v-model="form.tips" placeholder="请输入提示文字" clearable></el-input>
                        </el-col>
                    </el-row>
                </el-form-item>
                <el-form-item v-if="form.is_tips_show == '1' || form.is_icon_show == '1'" label="是否居中">
                    <el-switch v-model="form.is_center" active-value="1" inactive-value="0"></el-switch>
                </el-form-item>
                <el-form-item label="右侧图标" class="align-s">
                    <el-row class="w">
                        <el-col :span="24"><el-switch v-model="form.is_right_icon_show" active-value="1" inactive-value="0"></el-switch></el-col>
                    </el-row>
                    <template v-if="form.is_right_icon_show == '1'">
                        <el-row class="mt-10 w">
                            <el-col :span="24">
                                <upload v-model="form.right_icon_img" v-model:icon-value="form.right_icon_class" is-icon :limit="1" size="50"></upload>
                            </el-col>
                        </el-row>
                        <el-row class="mt-10 w">
                            <el-col :span="24"><url-value v-model="form.right_icon_link"></url-value></el-col>
                        </el-row>
                    </template>
                </el-form-item>
                <el-form-item label="搜索按钮" class="align-s">
                    <el-row class="w">
                        <el-col :span="24"><el-switch v-model="form.is_search_show" active-value="1" inactive-value="0"></el-switch></el-col>
                    </el-row>
                    <el-row v-if="form.is_search_show == '1'" class="mt-10 w">
                        <el-col :span="24">
                            <el-radio-group v-model="form.search_type" class="mb-10">
                                <el-radio value="img-icon">图片/图标</el-radio>
                                <el-radio value="text">文字</el-radio>
                            </el-radio-group>
                            <template v-if="form.search_type === 'img-icon'">
                                <upload v-model="form.search_botton_img" v-model:icon-value="form.search_botton_icon" is-icon :limit="1" size="50"></upload>
                            </template>
                            <template v-else>
                                <el-input v-model="form.search_tips" placeholder="请输入文字内容" clearable></el-input>
                            </template>
                        </el-col>
                    </el-row>
                </el-form-item>
            </card-container>
            <div class="bg-f5 divider-line" />
            <card-container>
                <div class="mb-12">搜索热词</div>
                <el-form-item label="是否显示" class="align-s">
                    <el-switch v-model="form.is_hot_word_show" active-value="1" inactive-value="0"></el-switch>
                </el-form-item>
                <drag :data="form.hot_word_list" @remove="remove" @on-sort="on_sort">
                    <template #default="scoped">
                        <el-input v-model="scoped.row.value" placeholder="请输入搜索热词" clearable />
                        <color-picker v-model="scoped.row.color" @update:value="search_color_change($event, scoped.row)"></color-picker>
                    </template>
                </drag>
                <el-button class="mt-20 mb-20 w" @click="add">+添加</el-button>
            </card-container>
        </el-form>
    </div>
</template>
<script setup lang="ts">
import { get_math } from '@/utils';
const props = defineProps({
    value: {
        type: Object,
        default: () => ({}),
    },
    isHeader: {
        type: Boolean,
        default: false,
    }
});

const state = reactive({
    form: props.value,
});
// 如果需要解构,确保使用toRefs
const { form } = toRefs(state);

const add = () => {
    form.value.hot_word_list.push({
        id: get_math(),
        value: '',
        color: '',
    });
};
const remove = (index: number) => {
    form.value.hot_word_list.splice(index, 1);
};
interface hot_word_list {
    id: string;
    value: string;
    color: string;
}
// 拖拽更新之后,更新数据
const on_sort = (new_list: hot_word_list[]) => {
    form.value.hot_word_list = new_list;
};
const search_color_change = (color: string, old_hot_word: hot_word_list) => {
    const index = form.value.hot_word_list.findIndex((item: { id: string }) => item.id == old_hot_word.id);
    (<arrayIndex>form.value.hot_word_list)[index].color = color;
};
</script>
<style lang="scss" scoped></style>