wms-pda迁移
This commit is contained in:
22
uni_modules/superwei-combox/changelog.md
Normal file
22
uni_modules/superwei-combox/changelog.md
Normal file
@@ -0,0 +1,22 @@
|
||||
## 1.0.10(2022-10-19)
|
||||
- 修改文档,更改为不兼容小程序(存在下拉框滑动会自动关闭的问题,后期改进后再兼容,若各位有好的解决方法的话欢迎评论)
|
||||
## 1.0.9(2022-07-28)
|
||||
- 完善是否创建新条目功能,并将默认值改为允许
|
||||
## 1.0.8(2022-07-26)
|
||||
- 新增禁用选项和是否创建新条目功能,新增disabledColor和isAllowCreate属性
|
||||
## 1.0.7(2022-05-05)
|
||||
- 解决传入JSON数组后,在模糊匹配项中进行选择,@select事件返回值为undefined且报错的问题
|
||||
## 1.0.6(2022-03-24)
|
||||
- 新增@select事件
|
||||
## 1.0.5(2022-03-22)
|
||||
- 修改文档
|
||||
## 1.0.4(2022-03-18)
|
||||
- 新增isJSON和keyName属性,candidates支持JSON数组格式
|
||||
## 1.0.3(2022-03-01)
|
||||
- 调整为uni_modules目录规范
|
||||
## 1.0.2(2022-03-01)
|
||||
- 基于官方uni-combox组件,解决选择后再次选择不展示全部选项的问题,同时新增选中项默认的文字和背景颜色,也可自定义进行样式覆盖
|
||||
## 1.0.1(2022-03-01)
|
||||
- 无
|
||||
## 1.0.0(2022-03-01)
|
||||
- 无
|
||||
@@ -0,0 +1,379 @@
|
||||
<template>
|
||||
<view class="superwei-combox" :class="border ? '' : 'superwei-combox__no-border'">
|
||||
<view v-if="label" class="superwei-combox__label" :style="labelStyle">
|
||||
<text>{{label}}</text>
|
||||
</view>
|
||||
<view class="superwei-combox__input-box">
|
||||
<input class="superwei-combox__input" type="text" :placeholder="placeholder"
|
||||
placeholder-class="superwei-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="superwei-combox__selector" v-if="showSelector">
|
||||
<view class="uni-popper__arrow"></view>
|
||||
<scroll-view scroll-y="true" class="superwei-combox__selector-scroll">
|
||||
<view class="superwei-combox__selector-empty" v-if="filterCandidatesLength === 0">
|
||||
<text>{{emptyTips}}</text>
|
||||
</view>
|
||||
<view class="superwei-combox__selector-item" v-for="(item,index) in filterCandidates" :key="index">
|
||||
<template v-if="(isJSON?(item.disabled?true:false):false)">
|
||||
<text
|
||||
:style="'color:'+disabledColor+';cursor: not-allowed;'">{{isJSON?item[keyName]?item[keyName]:'字段'+keyName+'不存在':item}}</text>
|
||||
</template>
|
||||
<template v-else>
|
||||
<text @click="onSelectorClick(index)"
|
||||
:style="(isJSON?item[keyName]?item[keyName]==inputVal:false:item==inputVal)?'font-weight: bold;background-color: '+selectedBackground+';color: '+selectedColor:''">{{isJSON?item[keyName]?item[keyName]:'字段'+keyName+'不存在':item}}</text>
|
||||
</template>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
/**
|
||||
* Combox 组合输入框
|
||||
* @description 组合输入框一般用于既可以输入也可以选择的场景
|
||||
* @property {String} label 左侧文字
|
||||
* @property {String} labelWidth 左侧内容宽度
|
||||
* @property {String} placeholder 输入框占位符
|
||||
* @property {Array} candidates 候选项列表
|
||||
* @property {String} emptyTips 筛选结果为空时显示的文字
|
||||
* @property {String} value 组合框的值
|
||||
* @property {String} selectedBackground 选中项背景颜色
|
||||
* @property {String} selectedColor 选中项文字颜色
|
||||
* @property {Boolean} isJSON 是否是json数组
|
||||
* @property {String} keyName json数组显示的字段值
|
||||
* @property {String} disabledColor 禁用项文字颜色
|
||||
* @property {Boolean} isAllowCreate 是否允许用户创建新条目
|
||||
*/
|
||||
export default {
|
||||
name: 'superweiCombox',
|
||||
emits: ['input', 'update:modelValue', 'select'],
|
||||
props: {
|
||||
isAllowCreate: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
disabledColor: {
|
||||
type: String,
|
||||
default: '#ababac'
|
||||
},
|
||||
isJSON: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
keyName: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
selectedBackground: {
|
||||
type: String,
|
||||
default: '#f5f7fa'
|
||||
},
|
||||
selectedColor: {
|
||||
type: String,
|
||||
default: '#409eff'
|
||||
},
|
||||
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 {
|
||||
isInput: false,
|
||||
showSelector: false,
|
||||
isSelector: false,
|
||||
inputVal: ''
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
labelStyle() {
|
||||
if (this.labelWidth === 'auto') {
|
||||
return ""
|
||||
}
|
||||
return `width: ${this.labelWidth}`
|
||||
},
|
||||
filterCandidates() {
|
||||
if (this.isInput) {
|
||||
if (this.isJSON) {
|
||||
return this.candidates.filter((item) => {
|
||||
return item[this.keyName].toString().indexOf(this.inputVal) > -1
|
||||
})
|
||||
} else {
|
||||
return this.candidates.filter((item) => {
|
||||
return item.toString().indexOf(this.inputVal) > -1
|
||||
})
|
||||
}
|
||||
} else {
|
||||
return this.candidates
|
||||
}
|
||||
},
|
||||
filterCandidatesLength() {
|
||||
return this.filterCandidates.length
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
// #ifndef VUE3
|
||||
value: {
|
||||
handler(newVal) {
|
||||
this.inputVal = newVal
|
||||
this.isInput = true
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
// #endif
|
||||
// #ifdef VUE3
|
||||
modelValue: {
|
||||
handler(newVal) {
|
||||
this.inputVal = newVal
|
||||
this.isInput = true
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
// #endif
|
||||
},
|
||||
methods: {
|
||||
toggleSelector() {
|
||||
this.showSelector = !this.showSelector
|
||||
this.isInput = false
|
||||
},
|
||||
onFocus() {
|
||||
this.showSelector = true
|
||||
this.isInput = false
|
||||
},
|
||||
onChange() {
|
||||
setTimeout(() => {
|
||||
this.showSelector = false
|
||||
this.isInput = false
|
||||
}, 200)
|
||||
},
|
||||
onBlur() {
|
||||
if (!this.isInput) {
|
||||
this.onChange()
|
||||
} else {
|
||||
if (this.inputVal && !this.isAllowCreate) {
|
||||
let index = this.candidates.findIndex((item) => {
|
||||
if (this.isJSON) {
|
||||
return item[this.keyName].toString() == this.inputVal && !item.disabled
|
||||
} else {
|
||||
return item.toString() == this.inputVal
|
||||
}
|
||||
})
|
||||
if (index == -1) {
|
||||
if (this.filterCandidatesLength > 0) {
|
||||
setTimeout(() => {
|
||||
this.showSelector = false
|
||||
this.isInput = false
|
||||
if (!this.isSelector) {
|
||||
this.inputVal = ''
|
||||
this.$emit('input', this.inputVal)
|
||||
this.$emit('update:modelValue', this.inputVal)
|
||||
}
|
||||
}, 200)
|
||||
this.isSelector = false
|
||||
} else {
|
||||
this.showSelector = false
|
||||
this.isInput = false
|
||||
this.inputVal = ''
|
||||
this.$emit('input', this.inputVal)
|
||||
this.$emit('update:modelValue', this.inputVal)
|
||||
}
|
||||
} else {
|
||||
this.onChange()
|
||||
}
|
||||
} else {
|
||||
this.onChange()
|
||||
}
|
||||
}
|
||||
},
|
||||
onSelectorClick(index) {
|
||||
let item = this.filterCandidates[index]
|
||||
if (this.isJSON) {
|
||||
this.inputVal = item[this.keyName]
|
||||
} else {
|
||||
this.inputVal = item
|
||||
}
|
||||
this.showSelector = false
|
||||
this.isSelector = true
|
||||
this.$emit('input', this.inputVal)
|
||||
this.$emit('update:modelValue', this.inputVal)
|
||||
this.$emit('select', item)
|
||||
},
|
||||
onInput() {
|
||||
setTimeout(() => {
|
||||
this.$emit('input', this.inputVal)
|
||||
this.$emit('update:modelValue', this.inputVal)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.superwei-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;
|
||||
}
|
||||
|
||||
.superwei-combox__label {
|
||||
font-size: 16px;
|
||||
line-height: 22px;
|
||||
padding-right: 10px;
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.superwei-combox__input-box {
|
||||
position: relative;
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex: 1;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.superwei-combox__input {
|
||||
flex: 1;
|
||||
font-size: 14px;
|
||||
height: 22px;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
.superwei-combox__input-plac {
|
||||
font-size: 14px;
|
||||
color: #ccc; //placeholder-style="color:#FFFFFF"
|
||||
}
|
||||
|
||||
.superwei-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: 2;
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
.superwei-combox__selector-scroll {
|
||||
/* #ifndef APP-NVUE */
|
||||
max-height: 200px;
|
||||
box-sizing: border-box;
|
||||
/* #endif */
|
||||
}
|
||||
|
||||
.superwei-combox__selector-empty,
|
||||
.superwei-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 0px;
|
||||
}
|
||||
|
||||
.superwei-combox__selector-empty text,
|
||||
.superwei-combox__selector-item text {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.superwei-combox__selector-item:hover {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
|
||||
.superwei-combox__selector-empty:last-child,
|
||||
.superwei-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;
|
||||
}
|
||||
|
||||
.superwei-combox__no-border {
|
||||
border: none;
|
||||
}
|
||||
</style>
|
||||
89
uni_modules/superwei-combox/package.json
Normal file
89
uni_modules/superwei-combox/package.json
Normal file
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"id": "superwei-combox",
|
||||
"displayName": "superwei-combox 组合框",
|
||||
"version": "1.0.10",
|
||||
"description": "下拉搜索选择组合框,基于官方uni-combox组件,解决选择后再次选择不展示全部选项的问题,支持模糊搜索和JSON数组格式,可设置选中项文字和背景颜色(若使用请一定下载uni_modules版本)",
|
||||
"keywords": [
|
||||
"combox",
|
||||
"组合框",
|
||||
"select",
|
||||
"下拉选择",
|
||||
"搜索选择"
|
||||
],
|
||||
"repository": "",
|
||||
"engines": {
|
||||
},
|
||||
"directories": {
|
||||
"example": "../../temps/example_temps"
|
||||
},
|
||||
"dcloudext": {
|
||||
"category": [
|
||||
"前端组件",
|
||||
"通用组件"
|
||||
],
|
||||
"sale": {
|
||||
"regular": {
|
||||
"price": "0.00"
|
||||
},
|
||||
"sourcecode": {
|
||||
"price": "0.00"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"qq": ""
|
||||
},
|
||||
"declaration": {
|
||||
"ads": "无",
|
||||
"data": "无",
|
||||
"permissions": "无"
|
||||
},
|
||||
"npmurl": ""
|
||||
},
|
||||
"uni_modules": {
|
||||
"dependencies": [
|
||||
"uni-scss",
|
||||
"uni-icons"
|
||||
],
|
||||
"encrypt": [],
|
||||
"platforms": {
|
||||
"cloud": {
|
||||
"tcb": "y",
|
||||
"aliyun": "y"
|
||||
},
|
||||
"client": {
|
||||
"App": {
|
||||
"app-vue": "u",
|
||||
"app-nvue": "u"
|
||||
},
|
||||
"H5-mobile": {
|
||||
"Safari": "y",
|
||||
"Android Browser": "y",
|
||||
"微信浏览器(Android)": "y",
|
||||
"QQ浏览器(Android)": "y"
|
||||
},
|
||||
"H5-pc": {
|
||||
"Chrome": "y",
|
||||
"IE": "y",
|
||||
"Edge": "y",
|
||||
"Firefox": "y",
|
||||
"Safari": "y"
|
||||
},
|
||||
"小程序": {
|
||||
"微信": "u",
|
||||
"阿里": "u",
|
||||
"百度": "u",
|
||||
"字节跳动": "u",
|
||||
"QQ": "u"
|
||||
},
|
||||
"快应用": {
|
||||
"华为": "u",
|
||||
"联盟": "u"
|
||||
},
|
||||
"Vue": {
|
||||
"vue2": "y",
|
||||
"vue3": "y"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
104
uni_modules/superwei-combox/readme.md
Normal file
104
uni_modules/superwei-combox/readme.md
Normal file
@@ -0,0 +1,104 @@
|
||||
## 基本用法
|
||||
在 ``template`` 中使用组件
|
||||
```html
|
||||
<template>
|
||||
<view class="content">
|
||||
<span class="title">非JSON数组模式</span>
|
||||
<superwei-combox :candidates="candidates" placeholder="请选择或输入" v-model="inputValue" @input="input"
|
||||
@select="select"></superwei-combox>
|
||||
|
||||
<span class="title">JSON数组模式</span>
|
||||
<superwei-combox :candidates="candidates_json" :isJSON="true" keyName="name" placeholder="请选择或输入"
|
||||
v-model="inputValue_json" @input="input_json" @select="select_json"></superwei-combox>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
inputValue: '',
|
||||
candidates: ['选项一', '选项二', '选项三', '选项四', '选项五', '选项六', '...'],
|
||||
|
||||
inputValue_json: '',
|
||||
candidates_json: [{
|
||||
id: '1',
|
||||
name: '选项一'
|
||||
}, {
|
||||
id: '2',
|
||||
name: '选项二',
|
||||
disabled: true // 单独设置disabled后即可禁用该选项
|
||||
}, {
|
||||
id: '3',
|
||||
name: '选项三'
|
||||
}, {
|
||||
id: '4',
|
||||
name: '选项四'
|
||||
}, {
|
||||
id: '5',
|
||||
name: '选项五',
|
||||
disabled: true // 单独设置disabled后即可禁用该选项
|
||||
}, {
|
||||
id: '6',
|
||||
name: '...'
|
||||
}]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
input(e) {
|
||||
console.log(e) // 选项一
|
||||
},
|
||||
select(e) {
|
||||
console.log(e) // 选项一
|
||||
},
|
||||
|
||||
|
||||
input_json(e) {
|
||||
console.log(e) // 选项一
|
||||
},
|
||||
select_json(e) {
|
||||
console.log(e) // {id: '1',name: '选项一'}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin-top: 20px;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### Combox Props
|
||||
|
||||
|属性名 |类型 |默认值 |说明 |
|
||||
|:-: |:-: |:-: |:-: |
|
||||
|label |String |- |标签文字 |
|
||||
|value |String |- |combox的值 |
|
||||
|labelWidth |String |auto |标签宽度,有单位字符串,如:'100px' |
|
||||
|placeholder|String |- |输入框占位符 |
|
||||
|candidates |Array/String |[] |候选字段 |
|
||||
|emptyTips |String |无匹配项 |无匹配项时的提示语 |
|
||||
|selectedBackground |String |#f5f7fa |选中项背景颜色 |
|
||||
|selectedColor |String |#409eff |选中项文字颜色 |
|
||||
|isJSON |Boolean |false |候选字段是否是json数组 |
|
||||
|keyName |String |- |json数组显示的字段值 |
|
||||
|disabledColor |String |#ababac |禁用项文字颜色 |
|
||||
|isAllowCreate |Boolean |true |是否允许用户创建新条目 |
|
||||
|
||||
### Combox Events
|
||||
|
||||
|事件称名 |说明 |返回值 |
|
||||
|:-: |:-: |:-: |
|
||||
|@input |combox输入事件 |返回combox输入值|
|
||||
|@select|combox选择事件 |返回combox选项值|
|
||||
Reference in New Issue
Block a user