vue表格信息进行空值填充,并使用 *** 修饰隐私信息

前言:

在展示表格内容时,因为存在很多缺失的数据,渲染在页面上就会造成许多的空白项,不但看上去不美观,而且给人一种数据不准确的感觉,所以,我就想着对缺失的数据项进行填充,让表格看上去比较充实准确,表格使用 element组件库的table ,下面展示简单的方法

 简要说明(简单表格代码及数据)

这里为了方便演示,只展示简单数据(写死在 data 中 ),通常情况下是发请求向后端拿到数据

<div class="table">
        <el-table 
        :data="TableData"  
        style="width: 100%" border>
            <el-table-column type="index" label="序号" ></el-table-column>
            <el-table-column prop="name" label="姓名"></el-table-column>
            <el-table-column prop="address" label="地址"></el-table-column>
            <el-table-column prop="phone" label="电话号码"></el-table-column>
        </el-table>
  </div>
 data(){
      return{
     TableData:[
         {
             name:'王小虎', address: '',phone:'13854562123'
         },
         {
             name:'',address: '上海市普陀区金沙江路 1518 弄',phone:'13698745236'
         },
         {
             name:'张大炮',address: '上海市普陀区真北路',phone:''
         }
         ]    
     }
  },

v-for判断缺失值

缺失值

可以看到表格中展示了较多的缺失值

 v-for简单填充

通过 v-for 判断数据是否为空,然后给表格填充数据

 初步实现

<div class="table">
        <el-table 
        :data="TableData"  
        style="width: 100%" border>
            <el-table-column type="index" label="序号" ></el-table-column>
            <el-table-column  label="姓名" >
                 <template slot-scope="scope">     
                    <p v-if="scope.row.name != ''"> {{ scope.row.name }}</p>
                    <p v-else>李四</p>
                </template>
            </el-table-column>  -->
             <el-table-column  label="地址" >
                <template slot-scope="scope">     
                    <p v-if="scope.row.address != ''"> {{scope.row.address }}</p>
                    <p v-else> 上海市南京路 </p>
                </template>
            </el-table-column>
            <el-table-column  label="电话号码" >
                <template slot-scope="scope">     
                    <p v-if="scope.row.phone != ''"> {{ scope.row.phone }}</p>
                    <p v-else>10086</p>
                </template>
            </el-table-column>  
        </el-table>
  </div>

 这样的表格乍一看没什么大问题,但是代码中填充的数据是固定的,因为这里的表格只有三行,所以体现不出问题,但是这样的代码肯定是有问题的,后面我就修改了代码,加上 ***  对每个数据项进行修饰

 对表格信息进行隐私处理

新建一个处理函数 ,然后在文件中引入该处理函数 (我这里是在 utils 下 新建 mask.js 文件)

 信息隐私修饰规则

// 全部掩码规则

// 用户姓名(限定:文字必须≥2):仅显示姓名中的最后一个汉字,其余文字使用 *(根据实际字数)代替。
export function nameMask (value) {
    if (value && value.length >= 2) {
      return "*".repeat(value.length-1) + value.substr(value.length - 1)
    } else {
      return value
    }
  }

  // 手机号:仅显示前三位与后两位数字,其余数字使用 *(根据实际位数) 代替。
  export function phoneNumberMask (value) {
    if (value && value.length > 5) {
      return value.substr(0, 3) + "*".repeat(value.length-5) + value.substr(value.length - 2)
    } else {
      return value
    }
  }

  // 地址名称:仅显示头、尾各两个文字,其余字符统一使用6位 * 代替。
  export function companyMask (value) {
    if (value && value.length > 4) {
      return value.substr(0, 2) + "*".repeat(6) + value.substr(value.length - 2)
    } else {
      return value
    }
  }

在script中引入并使用

import {nameMask,phoneNumberMask,companyMask} from '@/utils/mask'

 注意要在 data 中声明使用

 data(){
    this.nameMask = nameMask
    this.phoneNumberMask = phoneNumberMask
    this.companyMask = companyMask
      return{
     TableData:[
         {
             name:'王小虎', address: '',phone:'13854562123'
         },
         {
             name:'',address: '上海市普陀区金沙江路 1518 弄',phone:'13698745236'
         },
         {
             name:'张大炮',address: '上海市普陀区真北路',phone:''
         }
     ]
          
     }
  },

完善代码

methods 中定义一个函数 ,随机生成一个 11 位数,对数字进行简单处理判断,让它看起来像一个电话号码,再加上上一步实现的表格信息隐私处理,可以做到以假乱真的地步

 使用 Math.random 随机生成数 ,使用 Math.floor 对数字进行取整 ,通过正则表达式让随机数的形式 像一个电话号码 ,递归调用函数,确保返回的随机数达到预期的效果,下面展示项目修改后的完整代码

 当实现生成随机电话号码之后,我就想着再生成随机姓名,就是通过 对汉字的 Unicode 转码来实现,Unicode编码是16进制数,其中汉字对应范围为 4E00-9FA5,转换为10进制数就是 19968-40869 ,只要生成这个区间的十进制数 ,再转成十六进制,再转码就可以得到随机汉字,再通过循环可以得到 多位汉字 ,代码放在下面

 表格代码

<div class="table">
        <el-table 
        :data="TableData"  
        style="width: 100%" border>
            <el-table-column type="index" label="序号" ></el-table-column>
             <el-table-column  label="姓名" >
                 <template slot-scope="scope">     
                    <p v-if="scope.row.name != ''"> {{ nameMask(scope.row.name) }}</p>
                    <p v-else>{{ nameMask(RandomName(3)) }}</p>
                </template>
            </el-table-column>  -->
             <el-table-column  label="地址" >
                <template slot-scope="scope">     
                    <p v-if="scope.row.address != ''"> {{ companyMask(scope.row.address) }}</p>
                    <p v-else>{{ companyMask('上海市南京路') }}</p>
                </template>
            </el-table-column>
            <el-table-column  label="电话号码" >
                <template slot-scope="scope">     
                    <p v-if="scope.row.phone != ''"> {{ phoneNumberMask(scope.row.phone) }}</p>
                    <p v-else>{{ phoneNumberMask(RandomPhoneNumber()) }}</p>
                </template>
            </el-table-column>        
        </el-table>
  </div>

 随机电话号码生成函数

methods:{
    //  随机生成电话号码
     RandomPhoneNumber(){
         var number = Math.floor(Math.random() * (10000000000)) + 10000000000
         if( /[1][3-9][0-9]{9}/.test(number)){
             return String(number)
         }else{
             this.RandomPhoneNumber()
         }    
     }  
 }

随机姓名生成函数

RandomName(num){
        let arr = []
        for (let i = 0; i < num; i++) {
            var _rsl = ""
            var _randomUniCode = Math.floor(Math.random() * (40870 - 19968) + 19968).toString(16)
            eval("_rsl=" + '"\\u' + _randomUniCode + '"')
            arr.push( _rsl)
        }
    let chinese = arr.join("")
            return chinese 
     }

 效果图


文章如有错误,恳请大家提出问题,本人不胜感激 。 不懂的地方可以评论,我都会一一回复

文章对大家有帮助的话,希望大家能动手点赞鼓励,大家未来一起努力     长路漫漫,道阻且长

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潮汐未见潮落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值