zoukankan      html  css  js  c++  java
  • SelectZenEmpty 下拉框 支持 最大长度 超出... vue 组件

    <template>
      <Select v-model="innerValue"
              :disabled="disabled"
              :clearable='clearable'
              @on-change="onChangeHandle">
        <Option v-for="item in this.selectList"
                :title="item.nameTitle"
                :value="item.code"
                :key="item.code"> {{ item.nameLimit }}
        </Option>
      </Select>
    </template>
    
    <script>
    export default {
      name: 'SelectZenEmpty',
      components: {},
      props: {
        disabled: {
          type: Boolean,
          default: false
        },
        value: {
          type: String,
          default: ''
        },
        clearable: {
          type: Boolean,
          default: false
        }
      },
      data () {
        return {
          nameMaxSingleLength: 30,
          innerValue: '',
          selectList: []
        }
      },
      watch: {
        value (val) {
          this.innerValue = val
        }
      },
      computed: {},
      methods: {
        getSingleLength2 (str, length) {
          let retLength = length
          let len = 0
          for (let i = 0; i < str.length; i++) {
            const c = str.charAt(i)
            if (escape(c).length > 4) {
              len += 2
            } else if (c !== "\r") {
              len++
            }
            if (len >= length) {
              retLength = i + 1
              break
            }
          }
          return retLength
        },
        getSingleLength (str) { // 中文2 英文 数字 1
          return str.replace(/[^\\x00-\\xff]/g, "00").length
        },
        nameByLimit (name) {
          if (this.getSingleLength(name) > this.nameMaxSingleLength) {
            const singleLength = this.getSingleLength2(name, this.nameMaxSingleLength - 2)
            console.info('singleLength', singleLength)
            return name.substring(0, singleLength) + '...'
          } else {
            return name
          }
        },
        nameByTitle (name) {
          if (this.getSingleLength(name) > this.nameMaxSingleLength) {
            return name
          } else {
            return ''
          }
        },
        setSelectList (arr) {
          if (arr.length > 0) {
            this.selectList = arr.map(item => {
              return {
                ...item,
                nameTitle: this.nameByTitle(item.name),
                nameLimit: this.nameByLimit(item.name)
              }
            })
          } else {
            this.selectList = arr
          }
          console.info('setSelectList this.selectList', this.selectList)
        },
        getItem (code) {
          console.info('getItem code', code)
          console.info('selectList', this.selectList)
          return this.selectList.filter(item => {
            return item.code === code
          })[0]
        },
        onChange (code) { },
        onChangeHandle (code) {
          console.info('onChangeHandle', code)
          // console.info('onChange', this.onChange)
          this.$emit('input', code)
          this.$emit('getItem', this.getItem(code))
          this.onChange(code)
        }
      },
      created () { },
      activated () { },
      mounted () { },
      beforeDestroy () { }
    }
    </script>
    
    <style>
    </style>
    
    ---------------------------------------------
    生活的意义并不是与他人争高下,而在于享受努力实现目标的过程,结果是对自己行动的嘉奖。
    ↑面的话,越看越不痛快,应该这么说:

    生活的意义就是你自己知道你要做什么,明确目标。没有目标,后面都是瞎扯!
  • 相关阅读:
    [ZT]SAP ECC5.0 Working Log TO 2008.5.26
    VS错误:Lc.exe 已退出错误 返回代码 1
    如何实现两个数据库的同步?
    sp_configure 'max server memory'
    [轉]中国油价世界最高 是美国7倍!
    C#WinForm App自动更新(Live Update)架构
    利用批處理自動在異地備份數據庫
    18种根据屏幕字段查找潜在数据的技巧
    [ZT]2008年到校园招聘各企业待遇曝光
    吉祥物由于具有商业气息,所以历届奥运会吉祥物都没有出场。
  • 原文地址:https://www.cnblogs.com/pengchenggang/p/15726731.html
Copyright © 2011-2022 走看看