input-data.vue 2.6 KB
Newer Older
1
<script lang="uts">
D
DCloud_LXH 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
  export default {
    name: "input-data",
    props: {
      title: {
        type: String,
        required: true
      },
      type: {
        type: String,
        required: true
      },
      defaultValue: {
        type: String,
        required: true,
        default: ''
      }
    },
    data() {
      return {
        inputClearValue: '' as any,
        showClearIcon: false,
        inputType: 'text'
      }
    },
    created() {
      switch (this.type) {
        case 'number':
          this.inputType = 'number'
          break;
      }
      this.inputClearValue = this.getValue(this.defaultValue)
    },
    methods: {
      input: function (event : InputEvent) {
        // @ts-ignore
        this.inputClearValue = event.detail.value
        if ((this.inputClearValue as string).length > 0) {
          this.showClearIcon = true
        } else {
          this.showClearIcon = false
        }
43

D
DCloud_LXH 已提交
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
        this.$emit('confirm', this.getValue(this.inputClearValue))
      },
      clearIcon: function () {
        this.inputClearValue = ''
        this.showClearIcon = false
        this.$emit('confirm', this.getValue(this.inputClearValue))
      },
      blur() {
        this.showClearIcon = false
      },
      focus() {
        let inputValue = this.inputClearValue
        if (typeof inputValue !== 'string') {
          inputValue = inputValue.toString()
        }
        if ((inputValue as string).length > 0) {
          this.showClearIcon = true
        } else {
          this.showClearIcon = false
        }
      },
      getValue(value : any) : any {
        switch (this.type) {
          case 'number':
            return parseFloat(value as string)
        }
70

D
DCloud_LXH 已提交
71 72 73 74
        return value
      }
    }
  }
75 76 77
</script>

<template>
D
DCloud_LXH 已提交
78 79 80 81 82 83
  <view class="uni-padding-wrap">
    <view class="uni-title uni-common-mt">
      <text class="uni-title-text"> {{title}} </text>
    </view>
  </view>
  <view class="uni-input-wrapper input-wrapper">
D
DCloud_LXH 已提交
84
    <input class="uni-input" :type="inputType" :value="inputClearValue" :placeholder="title" @input="input" @blur="blur" @focus="focus" />
D
DCloud_LXH 已提交
85 86 87
    <image class="input-wrapper_image" src="/static/icons/clear.png" v-if="showClearIcon" @click="clearIcon">
    </image>
  </view>
88 89 90 91
</template>


<style>
D
DCloud_LXH 已提交
92 93 94 95 96 97 98
  .uni-input-wrapper {
    padding: 8px 13px;
    margin: 10rpx 0;
    flex-direction: row;
    flex-wrap: nowrap;
    background-color: #ffffff;
  }
99

D
DCloud_LXH 已提交
100 101 102 103 104 105 106 107 108 109 110 111 112 113
  .input-wrapper {
    border: 1px solid rgba(0, 0, 0, .08);
    flex-direction: row;
    justify-content: center;
    padding: 0;
    margin: 0 20rpx;
  }

  .input-wrapper_image {
    width: 22px;
    height: 22px;
    align-self: center;
    margin-right: 10rpx;
  }
114
</style>