You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							89 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							89 lines
						
					
					
						
							2.2 KiB
						
					
					
				| <template> | |
|     <el-select :size="state.size.size" class="dict-select" v-model="myValue" :placeholder="placeholder" | |
|         :filterable="filterable" :disabled="disabled" :clearable="clearable" @change="$emit('change', myValue)" | |
|         :teleported="false"> | |
|         <el-option v-if="dict" v-for="(val, key, i) in state.dict[dict]" :key="key" :value="key" :label="val" /> | |
|         <el-option v-if="stateProp" v-for="item in state[stateProp]" :key="item[valueKey]" :value="item[valueKey]" | |
|             :label="item[labelKey]" /> | |
|     </el-select> | |
| </template> | |
| 
 | |
| <script lang="ts" setup> | |
| import { useStore } from "vuex"; | |
| import { reactive, onMounted, ref, watch } from "vue"; | |
| 
 | |
| const { state } = useStore(); | |
| const prop = defineProps({ | |
|     modelValue: null, | |
|     placeholder: { | |
|         type: String | |
|     }, | |
|     disabled: { | |
|         type: Boolean, | |
|         default: false, | |
|     }, | |
|     clearable: { | |
|         type: Boolean, | |
|         default: true, | |
|     }, | |
|     filterable: { | |
|         type: Boolean, | |
|         default: true, | |
|     }, | |
|     width: { | |
|         type: Number, | |
|         default: 150, | |
|     }, | |
|     dict: { | |
|         type: String | |
|     }, | |
|     stateProp: { | |
|         type: String | |
|     }, | |
|     valueKey: { | |
|         type: String, | |
|         default: 'key' | |
|     }, | |
|     labelKey: { | |
|         type: String, | |
|         default: 'value' | |
|     }, | |
| }); | |
| const emit = defineEmits(["update:modelValue"]); | |
| const myValue = ref(null); | |
| const width = ref('150px'); | |
| watch(myValue, (n, o) => { | |
|     emit('update:modelValue', n); | |
| }) | |
| onMounted(() => { | |
|     myValue.value = prop.modelValue; | |
|     width.value = prop.width + 'px'; | |
| }); | |
| 
 | |
| onMounted(() => { }); | |
| </script> | |
| <style lang="scss" scoped> | |
| //@import url(); 引入公共css类 | |
| .dict-select { | |
|     width: v-bind('width'); | |
|     margin-right: v-bind('state.size.searchMargin'); | |
| 
 | |
|     ::v-deep .el-input__wrapper, | |
|     ::v-deep .el-select-dropdown { | |
|         background-color: v-bind('state.style.itemBg'); | |
| 
 | |
|         .el-input__inner, | |
|         .el-select-dropdown__item { | |
|             color: v-bind('state.style.color'); | |
|             &.selected{ | |
|                 color: v-bind('state.style.itemSelectColor') !important; | |
|             } | |
|         } | |
| 
 | |
|         .el-select-dropdown__item.hover, | |
|         .el-select-dropdown__item:hover { | |
|             background-color: v-bind('state.style.bodyBg'); | |
|         } | |
|     } | |
| } | |
| </style> |