• 05表单详情使用eldescriptions利用map数据结构,使用eltooltip注意事项


    示例组件:

    <template>
      <div class="detail_container">
        <div class="opt_box">
          <el-button size="small" type="primary" @click="addNodeFn">新增</el-button>
          <el-button size="small" @click="openImportRouter">批量导入</el-button>
        </div>
    
        <div v-if="treeData.length > 0" class="conent_box">
          <el-descriptions :title="detailData.title || ''">
            <el-descriptions-item v-for="[label, value] in infoMap" :key="value" :label="label">
              <el-tooltip :disabled="disabledFn(value)" :content="value" placement="top" effect="light">
                <span>{{ getValue(value) }}</span>  //这里记得一定要用标签再包一层,否则点击不起作用
              </el-tooltip>
            </el-descriptions-item>
          </el-descriptions>
        </div>
    
        <div v-else>
          <el-empty :image-size="100"></el-empty>
        </div>
      </div>
    </template>
    
    <script>
    import { getStringLength } from '@/utils/getStringLength'
    import EventBus from '@/utils/EventBus'
    const mapKeys = ['分类编码', '分类名称', '上级编码', '上级名称', '备注']
    const result = new Map()
    export default {
      components: {},
      props: {
        detailData: {
          required: true,
          type: Object
        },
        treeData: {
          required: true,
          type: Array
        }
      },
      data() {
        return {
          info: {},
          infoMap: {}
        }
      },
      computed: {},
      watch: {
        detailData: {
          deep: true,
          handler(newVal) {
            this.mapDataFn(newVal)
          }
        }
      },
      created() {
        // 初始化
        this.mapDataFn({
          obj: { classCode: '', className: '', uplevelClassCode: '', upLevelClassName: '', remark: '' }
        })
      },
      mounted() {},
      methods: {
        disabledFn(attr) {
          if (!attr) return true
          if (getStringLength(attr) < 20) return true
        },
        getValue(value) {
          return getStringLength(value) < 20 ? value : value.substr(0, 10) + '...'
        },
        openImportRouter() {
          this.$router.push('/datamanage/materialImport')
        },
        addNodeFn() {
          EventBus.$emit('addLevave1Node')
        },
        // 映射数据的方法
        mapDataFn(newVal) {
          let i = 0
          for (const key in newVal.obj) {
            result.set(mapKeys[i], newVal.obj[key])
            i++
          }
          this.infoMap = result
        }
      }
    }
    </script>
    
    <style scoped lang="scss">
    .detail_container {
      .opt_box {
        padding: 10px 0 25px 0;
        text-align: right;
      }
    }
    </style>

    统计输入字符长度:

    // 统计输入字符长度
    export const getStringLength = str => {
      let totalLength = 0
      const list = str.split('')
      for (let i = 0; i < list.length; i++) {
        const s = list[i]
        if (s.match(/[\u0000-\u00ff]/g)) {
          // 半角
          totalLength += 1
        } else if (s.match(/[\u4e00-\u9fa5]/g)) {
          // 中文
          totalLength += 2
        } else if (s.match(/[\uff00-\uffff]/g)) {
          // 全角
          totalLength += 2
        }
      }
      return totalLength
    }

     效果:

    父组件分发数据,当前这个子组件负责组织数据后渲染。

  • 相关阅读:
    测试
    微商就该这么加粉丝,你造吗?
    下拉刷新ListView实现原理
    android studio出现 waiting for adb
    发现一个很好的android开发笔记库
    android studio 不能在线更新android SDK Manager问题解决办法
    asp.net中XmlDocument解析出现出错,处理特殊字符
    假如是你,你会怎么选择
    winrt 上的翻书特效组件 源码分享 转载请说明
    在Windows8 Winrt中 高性能处理多个条件语句 用于实现自定义手势
  • 原文地址:https://www.cnblogs.com/haoqiyouyu/p/15651039.html
Copyright © 2020-2023  润新知