123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- <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>
|