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