<template> <div class="double-picker"> <div class="picker-column"> <!-- <label :for="'picker-' + column1Name">{{ column1Label }}:</label> --> <select class="custom-select" :id="'picker-' + column1Name" v-model="selectedColumn1" @change="updateColumn2" > <option v-for="item in column1Data" :key="item.value" :value="item.value" > {{ item.label }} </option> </select> </div> <div class="picker-column"> <!-- <label :for="'picker-' + column2Name">{{ column2Label }}:</label> --> <select class="custom-select" :id="'picker-' + column2Name" v-model="selectedColumn2" > <option v-for="item in column2Data" :key="item.value" :value="item.value" > {{ item.label }} </option> </select> </div> </div> </template> <script> export default { props: { column1Label: { type: String, default: "第一列" }, column2Label: { type: String, default: "第二列" }, column1Data: { type: Array, required: true }, column2Data: { type: Array, required: true }, column1Name: { type: String, default: "column1" }, column2Name: { type: String, default: "column2" } }, data() { return { selectedColumn1: "", selectedColumn2: "" }; }, methods: { updateColumn2() { this.$emit("update:column2Data", this.getColumn2Data()); this.selectedColumn2 = ""; // 清空第二列选择 }, getColumn2Data() { // 根据第一列的选择返回第二列的数据 const selectedColumn1 = this.column1Data.find( item => item.value === this.selectedColumn1 ); return selectedColumn1 ? selectedColumn1.children || [] : []; } }, watch: { selectedColumn1() { this.$emit("input", { column1: this.selectedColumn1, column2: this.selectedColumn2 }); }, selectedColumn2() { this.$emit("input", { column1: this.selectedColumn1, column2: this.selectedColumn2 }); } } }; </script> <style scoped> .select-container { display: flex; width: 200px; /* 可以根据需要调整宽度 */ } .custom-select { appearance: none; /* 去掉默认样式 */ -webkit-appearance: none; -moz-appearance: none; background-color: transparent; /* 背景透明 */ border: none; /* 去掉边框 */ outline: none; /* 去掉焦点边框 */ padding: 8px 12px; /* 添加内边距 */ font-size: 16px; /* 字体大小 */ width: 100%; /* 宽度占满容器 */ cursor: pointer; /* 鼠标指针样式 */ color: #333; /* 字体颜色 */ } /* 添加自定义下拉箭头(可选) */ .select-container::after { content: "▾"; position: absolute; right: 10px; top: 50%; transform: translateY(-50%); pointer-events: none; /* 防止箭头影响点击 */ color: #999; /* 箭头颜色 */ } .double-picker { display: flex; justify-content: space-between; } .picker-column { flex: 1; } label { display: block; margin-bottom: 5px; } select { width: 100%; padding: 5px; font-size: 14px; } </style>