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

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