materials.vue 3.07 KB
<template>
    <section class="select-material">
        <div class="current-material" @click="onDropdown">
            <div class="description">
                <div class="name" v-text="selecteditem" />
            </div>
            <div class="dropIcon">
                <img width="16" :src="selectIcon" alt="" />
            </div>
        </div>
        <div class="selectitems" v-show="isSelectitemsVisible" @mouseleave="onMouseout">
            <div v-for="item in items" :key="item" :index="item.key" class="selectitem" @click="onSelect(item.key)">
                <div class="description">
                    <div class="name" v-text="item.key" />
                </div>
            </div>
        </div>
    </section>
</template>
<script setup>
import DROPDOWNICON from '@/views/assets/images/application-field/materials/dropdown.png';
import DROPUPICON from '@/views/assets/images/application-field/materials/dropup.png';

import { ref } from 'vue';
import { storeToRefs } from 'pinia';
import { useMaterialsStore } from '@/views/stores/applications/useMaterialsStore';

const store = useMaterialsStore();
const { items, handleSelect } = store;
const { selecteditem } = storeToRefs(store);

const isSelectitemsVisible = ref(false);
const selectIcon = ref(DROPDOWNICON);

const onSelect = (key) => {
    handleSelect(key);
    isSelectitemsVisible.value = false;
    selectIcon.value = DROPDOWNICON;
};

const onDropdown = () => {
    isSelectitemsVisible.value = !isSelectitemsVisible.value;
    selectIcon.value = isSelectitemsVisible.value ? DROPUPICON : DROPDOWNICON;
};

const onMouseout = () => {
    isSelectitemsVisible.value = false;
    selectIcon.value = DROPDOWNICON;
};
</script>
<style lang="less">
.select-material {
    width: 100%;
    height: calc(35px * 943 / 1008);
    border: 1.5px solid @color-button-active-background;
    border-radius: 8px;
    font-weight: 300;
    .current-material,
    .selectitem {
        display: flex;
        align-items: center;
        width: 100%;
        height: calc(35px * 943 / 1008);
        cursor: pointer;
        .icon {
            width: 56px;
        }
        .description {
            width: 165px;
            margin-left: 12px;
            display: flex;
            flex-direction: column;
            justify-content: center;
            .name {
                font-size: 15px;
            }
            .size {
                font-size: 14px;
                color: #c0c1c2;
            }
        }
        .dropIcon {
            width: 16px;
        }
        img {
            cursor: pointer;
            .image {
                width: 48px;
                height: 72px;
            }
        }
        &:hover {
            background-color: @header-machine-hover-color;
            color: @main-color;
        }
    }
    .selectitems {
        position: absolute;
        width: 100%;
        background-color: #fff;
        border: 1px solid #eef0f2;
        border-radius: 0 0 8px 8px;
        height: calc(35px * 943 / 1008 * 5);
        overflow-y: auto;
        overflow-x: hidden;
        z-index: 100;
        width: 202px;
    }
}
</style>