| 
						 | 
						- <template>
 - 	<view class="uv-drop-down-item" @click="clickHandler">
 - 		<uv-text :text="label" :size="getTextStyle.size" :color="getTextStyle.color" lines="1" :custom-style="{marginRight: '10rpx',maxWidth:'200rpx'}"></uv-text>
 - 		<uv-icon :name="getDownIcon.name" :size="getDownIcon.size" :color="getDownIcon.color" v-if="[1,'1'].indexOf(type)==-1"></uv-icon>
 - 	</view>
 - </template>
 - <script>
 - 	import mpMixin from '@/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js';
 - 	import mixin from '@/uni_modules/uv-ui-tools/libs/mixin/mixin.js';
 - 	/**
 - 	 * DropDown 下拉框
 - 	 * @description 下拉筛选
 - 	 * @tutorial https://ext.dcloud.net.cn/plugin?name=uv-drop-down
 - 	 * @property {String | Number} name 字段标识
 - 	 * @property {String | Number} type 类型 1 没有筛选项,直接进行选中和不选中  2 有多个选项
 - 	 * @property {String | Number} label 筛选项的文本
 - 	 * @property {Boolean} isDrop 该项是否打开
 - 	 */
 - 	export default {
 - 		name: 'uv-drop-down-item',
 - 		mixins: [mpMixin, mixin],
 - 		emits: ['click'],
 - 		props: {
 - 			name: {
 - 				type: [String, Number],
 - 				default: ''
 - 			},
 - 			// 类型 1 没有筛选项,直接进行选中和不选中  2 有多个选项
 - 			type: {
 - 				type: [String, Number],
 - 				default: '2'
 - 			},
 - 			// 筛选的文本
 - 			label: {
 - 				type: [String],
 - 				default: ''
 - 			},
 - 			// 筛选值
 - 			value: {
 - 				type: [String, Number, null],
 - 				default: ''
 - 			},
 - 			// 是否下拉菜单打开
 - 			isDrop: {
 - 				type: Boolean,
 - 				default: false
 - 			}
 - 		},
 - 		data() {
 - 			return {
 - 				parentData: {
 - 					defaultValue: [0, '0', 'all'],
 - 					textSize: '30rpx',
 - 					textColor: '#333',
 - 					textActiveSize: '30rpx',
 - 					textActiveColor: '#3c9cff',
 - 					extraIcon: {},
 - 					extraActiveIcon: {},
 - 					sign: '',
 - 					clickHandler: Function
 - 				},
 - 				active: false,
 - 				isDroped: false,
 - 				elId: ''
 - 			}
 - 		},
 - 		watch: {
 - 			isDrop: {
 - 				handler(newVal) {
 - 					this.isDroped = newVal;
 - 				},
 - 				immediate: true
 - 			},
 - 			value: {
 - 				handler(newVal) {
 - 					this.$nextTick(()=>{
 - 						this.active = this.parentData.defaultValue.indexOf(newVal) == -1;
 - 					})
 - 				},
 - 				immediate: true
 - 			}
 - 		},
 - 		computed: {
 - 			getDownIcon() {
 - 				const style = {
 - 					size: '30rpx',
 - 					color: '#333',
 - 					...this.parentData.extraIcon
 - 				}
 - 				if (this.active || this.isDroped) {
 - 					style.color = this.parentData.extraActiveIcon?.color ? this.parentData.extraActiveIcon?.color : '#3c9cff';
 - 					style.size = this.parentData.extraActiveIcon?.size ? this.parentData.extraActiveIcon?.size : '30rpx';
 - 				}
 - 				if (this.isDroped) {
 - 					style.name = this.parentData.extraActiveIcon?.name;
 - 				}
 - 				return style;
 - 			},
 - 			getTextStyle() {
 - 				const style = {
 - 					size: this.parentData.textSize,
 - 					color: this.parentData.textColor
 - 				};
 - 				if (this.active || this.isDroped) {
 - 					style.size = this.parentData.textActiveSize;
 - 					style.color = this.parentData.textActiveColor;
 - 				}
 - 				return style;
 - 			}
 - 		},
 - 		created() {
 - 			this.init();
 - 		},
 - 		methods: {
 - 			init() {
 - 				this.elId = this.$uv.guid();
 - 				this.getParentData('uv-drop-down');
 - 				if (!this.parent) {
 - 					this.$uv.error('uv-drop-down必须搭配uv-drop-down-item组件使用');
 - 				}
 - 				uni.$on('HANDLE_DROPDOWN_ONE', id => {
 - 					if (this.isDroped && this.elId != id) {
 - 						this.isDroped = false;
 - 					}
 - 				})
 - 				uni.$on(`${this.parentData.sign}_CLOSEPOPUP`, async () => {
 - 					if (this.isDroped) {
 - 						this.isDroped = false;
 - 					}
 - 				})
 - 			},
 - 			async clickHandler() {
 - 				let data = {};
 - 				uni.$emit('HANDLE_DROPDOWN_ONE', this.elId);
 - 				switch (+this.type) {
 - 					case 1:
 - 						this.active = !this.active;
 - 						data = {
 - 							name: this.name,
 - 							active: this.active,
 - 							type: this.type
 - 						};
 - 						break;
 - 					case 2:
 - 						this.isDroped = !this.isDroped;
 - 						data = {
 - 							name: this.name,
 - 							active: this.isDroped,
 - 							type: this.type
 - 						};
 - 						break;
 - 				}
 - 				this.parentData.clickHandler(data);
 - 				this.$emit('click', data);
 - 				uni.$emit(`${this.parentData.sign}_CLICKMENU`, {
 - 					show: +this.type > 1 && this.isDroped
 - 				});
 - 			}
 - 		}
 - 	}
 - </script>
 - <style scoped lang="scss">
 - 	@import '@/uni_modules/uv-ui-tools/libs/css/components.scss';
 - 	.uv-drop-down-item {
 - 		@include flex;
 - 		align-items: center;
 - 		padding: 20rpx;
 - 	}
 - </style>
 
 
  |