You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
241 lines
5.3 KiB
241 lines
5.3 KiB
<template>
|
|
<view class="cell" :class="[oneline?'oneline':'manylines', boder?'boder':'', hboder?'hboder':'']" @click.stop="click">
|
|
<view class="cell-one">
|
|
{{title}}
|
|
</view>
|
|
<view class="cell-two" :class="[noPaddingBottom?'nobottom':'']">
|
|
<slot>
|
|
<template v-if="cellType=='input'">
|
|
<input class="input" style="flex: 1;height: 100%;" placeholder-style="color: #CCCCCC;font-size: 32rpx" :maxlength="maxlength" v-model="myValue" @input="input" :disabled="cellType=='input'&&!disabled?false:'disabled'" :type="inputType" :placeholder="placeholder">
|
|
<text v-if="append" style="margin-left: 10rpx;height: 100%;display: inline-block;">{{append}}</text>
|
|
</template>
|
|
<template v-if="cellType=='textarea'">
|
|
<textarea placeholder-style="color: #CCCCCC;font-size: 30rpx" @input="input" style="width: 100%;height: 140rpx;" v-model="myValue" :disabled="cellType=='textarea'&&!disabled?false:'disabled'"
|
|
:placeholder="placeholder" :maxlength="maxlength"/>
|
|
<view v-if="textearaNum&&maxlength!=-1" class="textarea-num">
|
|
{{valueStr.length}}/{{maxlength}}
|
|
</view>
|
|
</template>
|
|
</slot>
|
|
<view v-if="arrow">
|
|
<u-icon name="arrow-right" color="#CCCCCC" size="28"></u-icon>
|
|
</view>
|
|
</view>
|
|
<view class="cell-three" v-if="oneline&&$slots.three">
|
|
<slot name="three"></slot>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
computed:{
|
|
valueStr(){
|
|
return this.value + ''
|
|
}
|
|
},
|
|
props: {
|
|
append: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
value: {
|
|
type: String | Number,
|
|
default: ""
|
|
},
|
|
noPaddingBottom: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
title: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
disabled:{
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
cellType:{
|
|
type: String,
|
|
default: "input"
|
|
},
|
|
maxlength:{
|
|
type: Number,
|
|
default: -1
|
|
},
|
|
textearaNum: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
inputType: {
|
|
type: String,
|
|
default: "text"
|
|
},
|
|
boder: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
hboder: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
oneline: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
arrow:{
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
placeholder: {
|
|
type: String,
|
|
default: ""
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
myValue: ""
|
|
}
|
|
},
|
|
watch: {
|
|
value(newValue, oldValue) {
|
|
this.myValue = newValue
|
|
}
|
|
},
|
|
created() {
|
|
this.myValue = this.value
|
|
},
|
|
methods: {
|
|
input(e){
|
|
// 1. 限制位数
|
|
// 2. 只能输入数字
|
|
// 3. 可以输入负数
|
|
console.log(e);
|
|
let myValue = this.myValue + ''
|
|
console.log("before,"+myValue);
|
|
// if(myValue.indexOf('.')!=myValue.lastIndexOf(".")){
|
|
// let a = myValue.split("")
|
|
// a.splice(myValue.lastIndexOf("."),1)
|
|
// myValue = a.join('')
|
|
// }
|
|
// if(myValue.indexOf('.')!=myValue.lastIndexOf(".")){
|
|
// let a = myValue.split("")
|
|
// a.splice(myValue.lastIndexOf("."),1)
|
|
// myValue = a.join('')
|
|
// }
|
|
// if(myValue.indexOf('.') == -1 && myValue){
|
|
// // 去除输入的其他字符
|
|
// myValue = myValue.replace(/[^(0-9 | \-)]/g,'')
|
|
// } else if (myValue.indexOf(".") == 0) {
|
|
// myValue = myValue.replace(/[^$#$]/g, "0.");
|
|
// myValue = myValue.replace(/\.{2,}/g, ".");
|
|
// } else if (myValue.indexOf(".") > 0){
|
|
// myValue = myValue.replace(/[^(0-9 | \. | \-)]/g,'')
|
|
// }
|
|
// if (myValue.lastIndexOf("-") > 0) {
|
|
// myValue = myValue.replace(/\-/g,'')
|
|
// }
|
|
if(isNaN(+myValue)){
|
|
|
|
}else this.myValue = myValue
|
|
// 替换非数字输入
|
|
// if(myValue.indexOf('.') != -1){
|
|
// let value = myValue.slice(0,1)
|
|
// myValue = +(''+value).replace(/[^0-9]/g,'')+'.'
|
|
// }else{
|
|
// myValue = +(''+myValue).replace(/[^0-9]/g,'')
|
|
// }
|
|
// this.myValue = myValue
|
|
// console.log("after,"+myValue);
|
|
// if(isNaN(+this.myValue)){
|
|
// this.myValue = 0
|
|
// }
|
|
// if(this.myValue> 5){
|
|
// this.myValue = 5
|
|
// }
|
|
console.log("after,"+myValue);
|
|
this.$emit("input", this.myValue)
|
|
},
|
|
click(e) {
|
|
this.$emit("click", e)
|
|
}
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.cell-two .input{
|
|
outline: 0;
|
|
border: 0;
|
|
background: transparent;
|
|
text-align: inherit;
|
|
}
|
|
.cell{
|
|
padding-right: 32rpx;
|
|
margin-left: 32rpx;
|
|
&.boder{
|
|
border-bottom: 1px solid #EEEEEE;
|
|
}
|
|
&.hboder{
|
|
padding: 0 32rpx;
|
|
margin-left: 0;
|
|
border-bottom: 1px solid #EEEEEE;
|
|
}
|
|
.cell-one{
|
|
font-size: 32rpx;
|
|
font-weight: 400;
|
|
color: #666666;
|
|
}
|
|
.cell-two{
|
|
font-size: 32rpx;
|
|
}
|
|
.cell-three{
|
|
font-size: 32rpx;
|
|
}
|
|
&.oneline{
|
|
display: flex;
|
|
align-items: center;
|
|
height: 104rpx;
|
|
line-height: 104rpx;
|
|
.cell-one{
|
|
padding-right: 20rpx;
|
|
}
|
|
.cell-two{
|
|
flex: 1;
|
|
width: 0;
|
|
height: 100%;
|
|
text-align: right;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.cell-three{
|
|
display: flex;
|
|
height: 100%;
|
|
align-items: center;
|
|
padding-left: 12rpx;
|
|
&.no{
|
|
padding-left: 0;
|
|
}
|
|
}
|
|
}
|
|
&.manylines{
|
|
.cell-one{
|
|
line-height: 92rpx;
|
|
}
|
|
.cell-two{
|
|
padding-bottom: 32rpx;
|
|
}
|
|
.cell-two.nobottom{
|
|
padding-bottom: 0;
|
|
}
|
|
}
|
|
.textarea-num{
|
|
font-size: 18rpx;
|
|
padding-top: 6rpx;
|
|
font-weight: 400;
|
|
text-align: right;
|
|
line-height: 1;
|
|
color: #999999;
|
|
}
|
|
}
|
|
</style>
|
|
|