init
This commit is contained in:
		
							
								
								
									
										15
									
								
								uni_modules/uni-combox/changelog.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								uni_modules/uni-combox/changelog.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
## 1.0.1(2021-11-23)
 | 
			
		||||
- 优化 label、label-width 属性
 | 
			
		||||
## 1.0.0(2021-11-19)
 | 
			
		||||
- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
 | 
			
		||||
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-combox](https://uniapp.dcloud.io/component/uniui/uni-combox)
 | 
			
		||||
## 0.1.0(2021-07-30)
 | 
			
		||||
- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
 | 
			
		||||
## 0.0.6(2021-05-12)
 | 
			
		||||
- 新增 组件示例地址
 | 
			
		||||
## 0.0.5(2021-04-21)
 | 
			
		||||
- 优化 添加依赖 uni-icons, 导入后自动下载依赖
 | 
			
		||||
## 0.0.4(2021-02-05)
 | 
			
		||||
- 优化 组件引用关系,通过uni_modules引用组件
 | 
			
		||||
## 0.0.3(2021-02-04)
 | 
			
		||||
- 调整为uni_modules目录规范
 | 
			
		||||
							
								
								
									
										294
									
								
								uni_modules/uni-combox/components/uni-combox/uni-combox.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										294
									
								
								uni_modules/uni-combox/components/uni-combox/uni-combox.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,294 @@
 | 
			
		||||
<template>
 | 
			
		||||
	<view class="uni-combox" :class="border ? '' : 'uni-combox__no-border'">
 | 
			
		||||
		<view v-if="label" class="uni-combox__label" :style="labelStyle">
 | 
			
		||||
			<text>{{label}}</text>
 | 
			
		||||
		</view>
 | 
			
		||||
		<view class="uni-combox__input-box">
 | 
			
		||||
			<input class="uni-combox__input" type="text" :placeholder="placeholder"
 | 
			
		||||
				placeholder-class="uni-combox__input-plac" v-model="inputVal" @input="onInput" @focus="onFocus" @blur="onBlur" />
 | 
			
		||||
			<uni-icons :type="showSelector? 'top' : 'bottom'" size="14" color="#999" @click="toggleSelector">
 | 
			
		||||
			</uni-icons>
 | 
			
		||||
		</view>
 | 
			
		||||
		<view class="uni-combox__selector" v-if="showSelector">
 | 
			
		||||
			<view class="uni-popper__arrow"></view>
 | 
			
		||||
			<scroll-view scroll-y="true" class="uni-combox__selector-scroll" @scroll="onScroll">
 | 
			
		||||
				<view class="uni-combox__selector-empty" v-if="filterCandidatesLength === 0">
 | 
			
		||||
					<text>{{emptyTips}}</text>
 | 
			
		||||
				</view>
 | 
			
		||||
				<view class="uni-combox__selector-item" v-for="(item,index) in filterCandidates" :key="index" @click="onSelectorClick(index)">
 | 
			
		||||
					<text>{{item}}</text>
 | 
			
		||||
				</view>
 | 
			
		||||
			</scroll-view>
 | 
			
		||||
		</view>
 | 
			
		||||
		<!-- 新增蒙层,点击蒙层时关闭选项显示 -->
 | 
			
		||||
		<view class="uni-combox__mask" v-show="showSelector" @click="showSelector = false"></view>
 | 
			
		||||
	</view>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
	/**
 | 
			
		||||
	 * Combox 组合输入框
 | 
			
		||||
	 * @description 组合输入框一般用于既可以输入也可以选择的场景
 | 
			
		||||
	 * @tutorial https://ext.dcloud.net.cn/plugin?id=1261
 | 
			
		||||
	 * @property {String} label 左侧文字
 | 
			
		||||
	 * @property {String} labelWidth 左侧内容宽度
 | 
			
		||||
	 * @property {String} placeholder 输入框占位符
 | 
			
		||||
	 * @property {Array} candidates 候选项列表
 | 
			
		||||
	 * @property {String} emptyTips 筛选结果为空时显示的文字
 | 
			
		||||
	 * @property {String} value 组合框的值
 | 
			
		||||
	 */
 | 
			
		||||
	export default {
 | 
			
		||||
		name: 'uniCombox',
 | 
			
		||||
		emits: ['input', 'update:modelValue'],
 | 
			
		||||
		props: {
 | 
			
		||||
			border: {
 | 
			
		||||
				type: Boolean,
 | 
			
		||||
				default: true
 | 
			
		||||
			},
 | 
			
		||||
			label: {
 | 
			
		||||
				type: String,
 | 
			
		||||
				default: ''
 | 
			
		||||
			},
 | 
			
		||||
			labelWidth: {
 | 
			
		||||
				type: String,
 | 
			
		||||
				default: 'auto'
 | 
			
		||||
			},
 | 
			
		||||
			placeholder: {
 | 
			
		||||
				type: String,
 | 
			
		||||
				default: ''
 | 
			
		||||
			},
 | 
			
		||||
			candidates: {
 | 
			
		||||
				type: Array,
 | 
			
		||||
				default () {
 | 
			
		||||
					return []
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			emptyTips: {
 | 
			
		||||
				type: String,
 | 
			
		||||
				default: '无匹配项'
 | 
			
		||||
			},
 | 
			
		||||
			// #ifndef VUE3
 | 
			
		||||
			value: {
 | 
			
		||||
				type: [String, Number],
 | 
			
		||||
				default: ''
 | 
			
		||||
			},
 | 
			
		||||
			// #endif
 | 
			
		||||
			// #ifdef VUE3
 | 
			
		||||
			modelValue: {
 | 
			
		||||
				type: [String, Number],
 | 
			
		||||
				default: ''
 | 
			
		||||
			},
 | 
			
		||||
			// #endif
 | 
			
		||||
		},
 | 
			
		||||
		data() {
 | 
			
		||||
			return {
 | 
			
		||||
				showSelector: false,
 | 
			
		||||
				inputVal: '',
 | 
			
		||||
				blurTimer:null,
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		computed: {
 | 
			
		||||
			labelStyle() {
 | 
			
		||||
				if (this.labelWidth === 'auto') {
 | 
			
		||||
					return ""
 | 
			
		||||
				}
 | 
			
		||||
				return `width: ${this.labelWidth}`
 | 
			
		||||
			},
 | 
			
		||||
			filterCandidates() {
 | 
			
		||||
				if (this.inputVal !== 0 && !this.inputVal) {
 | 
			
		||||
					return this.candidates
 | 
			
		||||
				}
 | 
			
		||||
				return this.candidates.filter((item) => {
 | 
			
		||||
					return item.toString().indexOf(this.inputVal) > -1
 | 
			
		||||
				})
 | 
			
		||||
			},
 | 
			
		||||
			filterCandidatesLength() {
 | 
			
		||||
				return this.filterCandidates.length
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		watch: {
 | 
			
		||||
			// #ifndef VUE3
 | 
			
		||||
			value: {
 | 
			
		||||
				handler(newVal) {
 | 
			
		||||
					this.inputVal = newVal
 | 
			
		||||
				},
 | 
			
		||||
				immediate: true
 | 
			
		||||
			},
 | 
			
		||||
			// #endif
 | 
			
		||||
			// #ifdef VUE3
 | 
			
		||||
			modelValue: {
 | 
			
		||||
				handler(newVal) {
 | 
			
		||||
					this.inputVal = newVal
 | 
			
		||||
				},
 | 
			
		||||
				immediate: true
 | 
			
		||||
			},
 | 
			
		||||
			// #endif
 | 
			
		||||
		},
 | 
			
		||||
		methods: {
 | 
			
		||||
			toggleSelector() {
 | 
			
		||||
				this.showSelector = !this.showSelector
 | 
			
		||||
			},
 | 
			
		||||
			onFocus() {
 | 
			
		||||
				this.showSelector = true
 | 
			
		||||
			},
 | 
			
		||||
			onBlur() {
 | 
			
		||||
				this.blurTimer = setTimeout(() => {
 | 
			
		||||
					this.showSelector = false
 | 
			
		||||
				}, 153)
 | 
			
		||||
			},
 | 
			
		||||
			onScroll(){ // 滚动时将blur的定时器关掉
 | 
			
		||||
				if(this.blurTimer) {
 | 
			
		||||
					clearTimeout(this.blurTimer)
 | 
			
		||||
					this.blurTimer = null
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			onSelectorClick(index) {
 | 
			
		||||
				this.inputVal = this.filterCandidates[index]
 | 
			
		||||
				this.showSelector = false
 | 
			
		||||
				this.$emit('input', this.inputVal)
 | 
			
		||||
				this.$emit('update:modelValue', this.inputVal)
 | 
			
		||||
			},
 | 
			
		||||
			onInput() {
 | 
			
		||||
				setTimeout(() => {
 | 
			
		||||
					this.$emit('input', this.inputVal)
 | 
			
		||||
					this.$emit('update:modelValue', this.inputVal)
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss">
 | 
			
		||||
	.uni-combox {
 | 
			
		||||
		font-size: 14px;
 | 
			
		||||
		border: 1px solid #DCDFE6;
 | 
			
		||||
		border-radius: 4px;
 | 
			
		||||
		padding: 6px 10px;
 | 
			
		||||
		position: relative;
 | 
			
		||||
		/* #ifndef APP-NVUE */
 | 
			
		||||
		display: flex;
 | 
			
		||||
		/* #endif */
 | 
			
		||||
		// height: 40px;
 | 
			
		||||
		flex-direction: row;
 | 
			
		||||
		align-items: center;
 | 
			
		||||
		// border-bottom: solid 1px #DDDDDD;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-combox__label {
 | 
			
		||||
		font-size: 16px;
 | 
			
		||||
		line-height: 22px;
 | 
			
		||||
		padding-right: 10px;
 | 
			
		||||
		color: #999999;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-combox__input-box {
 | 
			
		||||
		position: relative;
 | 
			
		||||
		/* #ifndef APP-NVUE */
 | 
			
		||||
		display: flex;
 | 
			
		||||
		/* #endif */
 | 
			
		||||
		flex: 1;
 | 
			
		||||
		flex-direction: row;
 | 
			
		||||
		align-items: center;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-combox__input {
 | 
			
		||||
		flex: 1;
 | 
			
		||||
		font-size: 14px;
 | 
			
		||||
		height: 22px;
 | 
			
		||||
		line-height: 22px;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-combox__input-plac {
 | 
			
		||||
		font-size: 14px;
 | 
			
		||||
		color: #999;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-combox__selector {
 | 
			
		||||
		/* #ifndef APP-NVUE */
 | 
			
		||||
		box-sizing: border-box;
 | 
			
		||||
		/* #endif */
 | 
			
		||||
		position: absolute;
 | 
			
		||||
		top: calc(100% + 12px);
 | 
			
		||||
		left: 0;
 | 
			
		||||
		width: 100%;
 | 
			
		||||
		background-color: #FFFFFF;
 | 
			
		||||
		border: 1px solid #EBEEF5;
 | 
			
		||||
		border-radius: 6px;
 | 
			
		||||
		box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
 | 
			
		||||
		z-index: 3;
 | 
			
		||||
		padding: 4px 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-combox__selector-scroll {
 | 
			
		||||
		/* #ifndef APP-NVUE */
 | 
			
		||||
		max-height: 200px;
 | 
			
		||||
		box-sizing: border-box;
 | 
			
		||||
		/* #endif */
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-combox__selector-empty,
 | 
			
		||||
	.uni-combox__selector-item {
 | 
			
		||||
		/* #ifndef APP-NVUE */
 | 
			
		||||
		display: flex;
 | 
			
		||||
		cursor: pointer;
 | 
			
		||||
		/* #endif */
 | 
			
		||||
		line-height: 36px;
 | 
			
		||||
		font-size: 14px;
 | 
			
		||||
		text-align: center;
 | 
			
		||||
		// border-bottom: solid 1px #DDDDDD;
 | 
			
		||||
		padding: 0px 10px;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-combox__selector-item:hover {
 | 
			
		||||
		background-color: #f9f9f9;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-combox__selector-empty:last-child,
 | 
			
		||||
	.uni-combox__selector-item:last-child {
 | 
			
		||||
		/* #ifndef APP-NVUE */
 | 
			
		||||
		border-bottom: none;
 | 
			
		||||
		/* #endif */
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// picker 弹出层通用的指示小三角
 | 
			
		||||
	.uni-popper__arrow,
 | 
			
		||||
	.uni-popper__arrow::after {
 | 
			
		||||
		position: absolute;
 | 
			
		||||
		display: block;
 | 
			
		||||
		width: 0;
 | 
			
		||||
		height: 0;
 | 
			
		||||
		border-color: transparent;
 | 
			
		||||
		border-style: solid;
 | 
			
		||||
		border-width: 6px;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-popper__arrow {
 | 
			
		||||
		filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
 | 
			
		||||
		top: -6px;
 | 
			
		||||
		left: 10%;
 | 
			
		||||
		margin-right: 3px;
 | 
			
		||||
		border-top-width: 0;
 | 
			
		||||
		border-bottom-color: #EBEEF5;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-popper__arrow::after {
 | 
			
		||||
		content: " ";
 | 
			
		||||
		top: 1px;
 | 
			
		||||
		margin-left: -6px;
 | 
			
		||||
		border-top-width: 0;
 | 
			
		||||
		border-bottom-color: #fff;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-combox__no-border {
 | 
			
		||||
		border: none;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.uni-combox__mask {
 | 
			
		||||
		width:100%;
 | 
			
		||||
		height:100%;
 | 
			
		||||
		position: fixed;
 | 
			
		||||
		top: 0;
 | 
			
		||||
		left: 0;
 | 
			
		||||
    z-index: 1;
 | 
			
		||||
	}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										90
									
								
								uni_modules/uni-combox/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								uni_modules/uni-combox/package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
			
		||||
{
 | 
			
		||||
  "id": "uni-combox",
 | 
			
		||||
  "displayName": "uni-combox 组合框",
 | 
			
		||||
  "version": "1.0.1",
 | 
			
		||||
  "description": "可以选择也可以输入的表单项 ",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "uni-ui",
 | 
			
		||||
    "uniui",
 | 
			
		||||
    "combox",
 | 
			
		||||
    "组合框",
 | 
			
		||||
    "select"
 | 
			
		||||
],
 | 
			
		||||
  "repository": "https://github.com/dcloudio/uni-ui",
 | 
			
		||||
  "engines": {
 | 
			
		||||
    "HBuilderX": ""
 | 
			
		||||
  },
 | 
			
		||||
  "directories": {
 | 
			
		||||
    "example": "../../temps/example_temps"
 | 
			
		||||
  },
 | 
			
		||||
  "dcloudext": {
 | 
			
		||||
    "category": [
 | 
			
		||||
      "前端组件",
 | 
			
		||||
      "通用组件"
 | 
			
		||||
    ],
 | 
			
		||||
    "sale": {
 | 
			
		||||
      "regular": {
 | 
			
		||||
        "price": "0.00"
 | 
			
		||||
      },
 | 
			
		||||
      "sourcecode": {
 | 
			
		||||
        "price": "0.00"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "contact": {
 | 
			
		||||
      "qq": ""
 | 
			
		||||
    },
 | 
			
		||||
    "declaration": {
 | 
			
		||||
      "ads": "无",
 | 
			
		||||
      "data": "无",
 | 
			
		||||
      "permissions": "无"
 | 
			
		||||
    },
 | 
			
		||||
    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
 | 
			
		||||
  },
 | 
			
		||||
  "uni_modules": {
 | 
			
		||||
    "dependencies": [
 | 
			
		||||
			"uni-scss",
 | 
			
		||||
			"uni-icons"
 | 
			
		||||
		],
 | 
			
		||||
    "encrypt": [],
 | 
			
		||||
    "platforms": {
 | 
			
		||||
      "cloud": {
 | 
			
		||||
        "tcb": "y",
 | 
			
		||||
        "aliyun": "y"
 | 
			
		||||
      },
 | 
			
		||||
      "client": {
 | 
			
		||||
        "App": {
 | 
			
		||||
          "app-vue": "y",
 | 
			
		||||
          "app-nvue": "n"
 | 
			
		||||
        },
 | 
			
		||||
        "H5-mobile": {
 | 
			
		||||
          "Safari": "y",
 | 
			
		||||
          "Android Browser": "y",
 | 
			
		||||
          "微信浏览器(Android)": "y",
 | 
			
		||||
          "QQ浏览器(Android)": "y"
 | 
			
		||||
        },
 | 
			
		||||
        "H5-pc": {
 | 
			
		||||
          "Chrome": "y",
 | 
			
		||||
          "IE": "y",
 | 
			
		||||
          "Edge": "y",
 | 
			
		||||
          "Firefox": "y",
 | 
			
		||||
          "Safari": "y"
 | 
			
		||||
        },
 | 
			
		||||
        "小程序": {
 | 
			
		||||
          "微信": "y",
 | 
			
		||||
          "阿里": "y",
 | 
			
		||||
          "百度": "y",
 | 
			
		||||
          "字节跳动": "y",
 | 
			
		||||
          "QQ": "y"
 | 
			
		||||
        },
 | 
			
		||||
        "快应用": {
 | 
			
		||||
          "华为": "u",
 | 
			
		||||
          "联盟": "u"
 | 
			
		||||
        },
 | 
			
		||||
        "Vue": {
 | 
			
		||||
            "vue2": "y",
 | 
			
		||||
            "vue3": "y"
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								uni_modules/uni-combox/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								uni_modules/uni-combox/readme.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Combox 组合框
 | 
			
		||||
> **组件名:uni-combox**
 | 
			
		||||
> 代码块: `uCombox`
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
组合框组件。
 | 
			
		||||
 | 
			
		||||
### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-combox)
 | 
			
		||||
#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
 | 
			
		||||
		Reference in New Issue
	
	Block a user