From 92230c9a97dc9ce9df3313d11d26999c04bb6b26 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 15 七月 2025 13:12:48 +0800
Subject: [PATCH] 项目初始化

---
 src/pages_qiun/components/drop-down/drop-down.vue |  218 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 218 insertions(+), 0 deletions(-)

diff --git a/src/pages_qiun/components/drop-down/drop-down.vue b/src/pages_qiun/components/drop-down/drop-down.vue
new file mode 100644
index 0000000..9c2e9b0
--- /dev/null
+++ b/src/pages_qiun/components/drop-down/drop-down.vue
@@ -0,0 +1,218 @@
+<template>
+	<div class="dropdown-item">
+		<!-- selected -->
+		<view :class="['dropdown-item__selected',listWidth!='150rpx'?'dropdown-item__right':'dropdown-item__left']" 
+			  @click="changePopup" :style="{maxWidth:selectWidth}">
+			<view class="selected__name">{{selectItem.text}}</view>
+			<view class="selected__icon"
+				:class="showClass === 'show'? 'up' : 'down'"
+			>
+				<li class="iconfont icon-caretdown"></li>
+			</view>
+		</view>
+		<view class="dropdown-item__content" :style="{top: contentTop + 'rpx'}" v-if="showList">
+			<!-- dropdown -->
+			<view :class="['list', showClass]" :style="{left: contentLeft>0?contentLeft + 'rpx':'auto',right: contentRight>0?contentRight + 'rpx':'auto',}">
+				<view class="list__option"
+					v-for="(item, index) in list" :key="index"
+					@click="choose(item)">
+					<view>{{item.text}}</view>
+					<icon v-if="item.value === value" type="success_no_circle" size="20"/>	
+				</view>
+			</view>	
+			<!-- dropdown-mask -->
+			<view :class="['dropdown-mask', showClass]" v-if="showList" @click="closePopup"></view>
+		</view>
+	</div>
+</template>
+
+<script>
+	export default {
+		components: {
+		},
+		props: {
+			value: [Number, String, Object],
+			list: {
+				type: Array,
+				default: ()=> {
+					return []
+				}
+			},
+			contentTop:{
+				type:String,
+				default:"185"
+			},
+			contentLeft:{
+				type:String,
+				default:"0"
+			},
+			contentRight:{
+				type:String,
+				default:"0"
+			},
+			listWidth:{
+				type:String,
+				default:'150rpx'
+			},
+			selectWidth:{
+				type:String,
+				default:'150rpx'
+			}
+		},
+		data() {
+			return {
+				showList: "",
+				showClass: '',
+				selectItem: {},
+			}
+		},
+		watch: {
+			list(newVal,oldVal){
+				this.selectItem = newVal[0];
+			}
+		},
+		mounted() {
+			this.showList = this.active;
+			this.selectItem = this.list[0];
+		},
+		methods: {
+			choose(item) {
+				if(item.value != "auto"){
+					this.selectItem = item
+				}
+				this.$emit('changeItem', item);
+				this.closePopup();
+			},
+			selectAuto(){
+				this.selectItem = {text: '鎸囧畾鏃ユ湡',value: 'auto'};
+			},
+			changePopup() {
+				if(this.showList) {
+					this.closePopup()
+				} else {
+					this.openPopup()
+				}
+			},
+			openPopup() {
+				setTimeout(() => {
+					this.showClass = 'show';
+					this.showList = true;
+				}, 100);
+			},
+			closePopup() {
+				this.showClass = ''
+				setTimeout(() => {
+					this.showList = false
+				}, 200);
+			},
+			close() {
+				this.showClass = ''
+				this.showList = false
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	
+	li{
+		 list-style-type:none;
+	}
+	.dropdown-item__content{
+		z-index: 10!important;
+	}
+	.dropdown-item {
+		width: 100%;
+		flex:1;
+		position: relative;
+		&__selected {
+			position: relative;
+			padding: 10rpx 0;
+			box-sizing: border-box;
+			color: #fff;
+			.selected__name {
+				font-size: 28rpx;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+				overflow: hidden;
+			}
+			.selected__icon {
+				margin-left: 20rpx;
+				&.down {
+					transition: transform .3s;
+					transform: rotateZ(0);
+				}
+				&.up {
+					transition: transform .3s;
+					transform: rotateZ(-180deg);
+				}
+			}
+			
+		}
+		&__left{
+			display: flex;
+			flex-direction: row;
+			justify-content: flex-start;
+			align-items: center;
+		}
+		&__right{
+			display: flex;
+			flex-direction: row;
+			justify-content: flex-end;
+			align-items: center;
+		}
+		&__content {
+			position: fixed;
+			left: 0;
+			right: 0;
+			overflow: hidden;
+			top: 0;
+			bottom: 0;
+			z-index: 1;
+			.list {
+				max-height: 400px;
+				text-align: center;
+				overflow-y: auto;
+				position: absolute;
+				z-index: 1200;
+				background: #fff;
+				transform: translateY(-100%);
+				transition: all .3s;
+				&.show {
+					transform: translateY(0);
+				}
+				&__option {
+					font-size:30rpx;
+					padding: 18rpx;
+					display: flex;
+					justify-content: space-between;
+					color: #303133;
+					&:not(:last-child) {
+						border-bottom: 1rpx solid #DDDDDD;
+					}
+				}
+			}
+			.dropdown-mask {
+				position: absolute;
+				left: 0;
+				right: 0;
+				top: 0;
+				bottom: 0;
+				transition: all .3s;
+				z-index: 1100;
+				&.show {
+					background:rgba(0,0,0,0.5);
+				}
+			}
+		}
+		&:not(:last-child):after {
+			content: ' ';
+			position: absolute;
+			width: 2rpx;
+			top: 36rpx;
+			bottom: 36rpx;
+			right: 0;
+			background: $uni-border-color;
+		}
+	}
+</style>

--
Gitblit v1.9.3