亿点细节~ 超实用工作笔记!(不断更新中ing)

文章目录


👇👇👇

🍅

🍇

🍉

🍏

🍓

🍍

1. 【ElementUI】表格设置show-overflow-tooltip,当内容溢出显示弹框的宽度设置。

在这里插入图片描述
🌸tooltip默认全屏显示,设置宽度时,应单独写一个style,否则不会生效

// 代码结构
<el-table>
	<el-table-column prop="basic" label="列名" show-overflow-tooltip>
		<el-form-item></el-form-item>
	</el-table-column>
</el-table>
------------------------------------------------------------------------
// 设置tooltip样式
<style lang="css"> 
    .el-tooltip__popper { 
        max-width: 40%;  // 占整个屏幕的百分比
    } 
</style>

2. 【ElementUI】表格中 show-overflow-tooltip 无数据显示空白弹框。

在这里插入图片描述

<el-table>
	<el-table-column prop="basic" label="列名" show-overflow-tooltip>
		<el-form-item style="width: 90%"> // 子孩子设置为小于父亲宽度的百分比
			<el-select v-model="value" placeholder="请选择">
    			<el-option
      				v-for="item in options"
      				:key="item.value"
      				:label="item.label"
      				:value="item.value"
      				:disabled="item.disabled">
    			</el-option>
  			</el-select>
		</el-form-item>
	</el-table-column>
</el-table>

🌸原理: show-overflow-tooltip 是当子内容超出父亲的宽度则显示提示框,为防止没有内容也显示提示框,则将子孩子的宽度设置为父亲宽度的90%,在没有内容时就不会超出父亲的宽度,就不会显示提示框。

3. 【ElementUI】el-select 下拉框宽度设置(代码结构同上:第2点)。

<style lang="css"> 
    .popper-width {
        max-width: 40% !important;
    }
</style>

4. 【ElementUI】 select下拉框鼠标悬停溢出部分全部显示。

在这里插入图片描述
🌸步骤1: 在el-option属性中添加:title="item.value"
在这里插入图片描述
🌸步骤2:样式修改

.el-select-dropdown__item {
    width: calc(100% - 10px);
    display: inline-block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

5. 【实用】 动态绑定 class 和 style 形式。

🌸一般动态绑定的代码结构都是写在表格中,给表格中某一列过滤样式

// 为方便对比查看,统一将动态 class 和 style 写在一个列中。(目前遇到的,可能还有其它情况,待更新······)
<el-table>
	<el-table-column prop="state" label="列名">
         <template v-slot="{row}">
         // 不动态绑定的 style (属性用分号 ; 隔开):
         	  <span style="display: inline-block; margin-right: 15px">{{row.state}}</span>
         // 动态绑定的 style (属性用分号 , 隔开):	 
              // 多个属性 及 属性单位 
         	  <span :style="{left: left+'px', width: '100%', height: 'calc(100% - 32px)'}">{{row.state}}</span>
         	  <span :style="{marginTop: row.state.length>0 ? '13px':'0px' , width: '410px'}">{{row.state}}</span>
         	  <span :style="[{width: '410%'}, {paddingLeft: !i.isSystem && !i.isTop ? '0px' : '20px'}]">{{row.state}}</span>
         	  // 方法 返回 动态样式
              <span :style="stateStyle(row.state)">{{row.state}}</span>
              <span :style="{cursor: stateCursor(row.passNumber)}">{{row.state}}</span>
              <span :class="row.state !== 0 ? 'red' : ''">{{row.state}}</span>
              // 返回一个背景图
              <div class="login-container__bg" :style="{ 'background-image': 'url(' + bg + ')' }" />  // 定义变量 bg
              // 对象类
              <span :class="{'green': row.state !== 0}">{{row.state}}</span>
              // 数组类 及 类通过布尔值添加
              <span :class="['class1', 'class2', {'active': ifShow}]">{{row.state}}</span>
              // 图标类
              <i :class="valueClass">{{text}}</i> 
              // 动态添加类
              <div :class="`${isTask === '0' ? 'class1 class2' : 'class1 class2 class3'}`" >
         </template>
    </el-table-column>
</el-table>

export default {
	data () {
		return {
			haha: '1',
			isTask : '0',
			ifShow: false,
		}
	},
	methods: {
		stateStyle (val) {
		},
		stateCursor(val){
       		if(val !== 0){
          		 return 'pointer';
       		} else {
           		 return ''
       		}
   		 },
	 },
	 iconClass () {
		if (this.haha === '1') {
              return 'el-icon-warning-outline'
        } else if (this.haha === '3') {
              return 'el-icon-circle-check';
        }
	}
}
// 样式
<style lang="scss" scoped>
	.red {
	}
	.class1 {
	}
	.class2 {
	}
	.class3 {
	}
</style>

6. 【实用】 数组遍历。

7. 【实用】 接口 path 和 query 拼接。

在这里插入图片描述

8. 【实用】 后端接口返回数据中:对象包含数组时。

🌸应在前端接口定义时添加以下内容
paramsSerializer: params => { return qs.stringify(params, { indices: false }) //处理对象中包含数组的格式 }

export const interfaceName = params => {
  return request({
    url: '/api/xxx',
    method: 'GET',
    params: params,
    // 添加这一段
    paramsSerializer: params => {
      return qs.stringify(params, { indices: false })  //处理对象中包含数组的格式
    }
  })
}

9. 【ElementUI】 表格表头后添加图标及鼠标触碰显示提示框(el-tooltip)。

在这里插入图片描述

// 代码结构
<el-table>
	<el-table-column label="按钮" show-overflow-tooltip>
		<template slot="header">
             <span>按钮 </span>
             <el-tooltip effect="light" content="tooltip提示框的内容" placement="top">
                  <i class="el-icon-question"></i>
             </el-tooltip>
        </template>
	</el-table-column>
</el-table>
-------------------------------------------------------------------------------------
<style lang="scss" scoped>
	.el-icon-question:before {
     	color: #e6a23c;
	}
</style>

10. 【ElementUI】 表格表头后添加搜索图标及点击可搜索。

11. 【ElementUI】 input 和 select框嵌套结构优化。

🌸避免在select选择后就立即刷新列表的问题。
🌸保证在select框选择后,同时input有值才可刷新列表。
在这里插入图片描述

<el-input v-model.trim="search.c1" @change="searchAct" suffix-icon="el-icon-search" clearable placeholder="请输入">
     <el-select v-model="search.b1" slot="prepend" @change="optionSearch" placeholder="请选择">
          <el-option label="全部" value="all"></el-option> // 在将 all 作为 b1 的默认值
          <el-option label="选项1" value="item1"></el-option>
          <el-option label="选项2" value="item2"></el-option>
          <el-option label="选项3" value="item3"></el-option>
     </el-select>
</el-input>

data () {
	return {
		search: {
            c1: '',
            b1: 'all', // 初始值
        },
	}
},
methods: {
	searchAct () {
        this.getList(); // 调用数据列表
    },
    conditionSearch() {
        if (this.search.c1 && this.search.b1) {
            this.searchAct();
        }
    },
}

12. 【ElementUI】table的树形数据结构,改变展开箭头所在列(箭头默认在第1列)。

在这里插入图片描述
🌸在需要箭头的列 的前一列添加 type = ""

// 代码结构
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px;" row-key="id" border default-expand-all :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
	// 即:姓名列需要小箭头,那就在日期列添加 type = ""
    <el-table-column prop="date" label="日期" type = "" sortable width="180"></el-table-column>
    <el-table-column prop="name" label="姓名" sortable width="180"></el-table-column>
    <el-table-column prop="address" label="地址" sortable width="180"></el-table-column>
</el-table>

13. 【ElementUI】table的树形数据结构,不点小三角 点击行 也可展开。

在这里插入图片描述
🌸添加 row-click 行点击事件@row-click="getOpenDetail"

// 代码结构
<el-table 
  :data="tableData" 
  style="width: 100%;margin-bottom: 20px;" 
  row-key="id" border default-expand-all 
  :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
  @row-click="getOpenDetail"
  >
    <el-table-column prop="date" label="日期" sortable width="180"></el-table-column>
    <el-table-column prop="name" label="姓名" sortable width="180"></el-table-column>
    <el-table-column prop="address" label="地址" sortable width="180"></el-table-column>
</el-table>

methods: {
	// 点击行触发展开事件
	getOpenDetail(row, column, event) {
		if (event.currentTarget.querySelector(".el-table__expand-icon")) {
			event.currentTarget.querySelector(".el-table__expand-icon").click();
		}
	}
},

14. 【ElementUI】table的表格中使用el-tooltip,且文字过多侧边需要滑动滚动条。

在这里插入图片描述
🌸一开始打算使用el-table中的属性show-overflow-tooltip,但问题是 该字段后端返回的数据很长就算是占满整个屏幕也放不完(占满整个屏幕也不现实),且这个属性只有鼠标hover时才会触发显示,就算加上滚动条,鼠标在离开该字段时,tooltip就会消失,鼠标根本不可能触碰到滚动条,于是滚动条也于事无补
🌸于是想到el-tootip标签,完美解决!
在这里插入图片描述

// 代码结构
<el-table :data="tableData">
	<el-table-column prop="detail" min-width="200" label="表头名称">
         <template v-slot="{row}">
             <el-tooltip effect="dark" :content="row.detail" placement="top">
                 <p class="header-ellipsis">{{row.detail}}</p>
             </el-tooltip>
         </template>
    </el-table-column>
</el-table>

<style lang="scss" scoped>
	.header-ellipsis { // 超出部分省略号显示
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
</style>

<style lang="css"> 
    .el-tooltip__popper { 
        max-width: 60%;  // 设置 最大 宽度和高度
        max-height: 70%; 
        overflow-y: auto; // 让 tooltip 有自己的滚动条,如果不加,滚动条就在整个表格外部
    } 
</style>

15. 【实用】登录验证码:后端给前端传二进制流验证码图片,前端如何接收

// 获取图片验证码
export const getImg = (params)  => {
  return request({
    url: '/api/getImg',
    method: 'POST',
    params: params,
    responseType:'arraybuffer',  //
  })
}

// 方法
	getImg() {
      getImg() 
       .then(res => {
          this.imgMessage=`data:image/png;base64,${btoa(new Uint8Array(res).reduce((data,byte)=>data+String.fromCharCode(byte),""))}`;
       })
       .catch(err => {
        console.log(err);
       })
    },

16. 【实用】前端给后端接口传参,处理对象中包含数组的格式(两种方式,看后端需要哪种)

// 方式1:
paramsSerializer: params => {
      return encodeURI(qs.stringify(params, { allowDots: true, encode: false }))
}
// 方式2:
paramsSerializer: params => {
     return qs.stringify(params, { indices: false })
}

17. 【实用】文字溢出隐藏并省略号显示

// CSS样式
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;  // 这个要说一下,小程序某些场景内容过多可能会换行,只需要显示一行,不换行并溢出隐藏。

18. 【实用】JSON.parse

🌸 在接收后端返回的json对象通常是一个字符串类型的object,所以一般我们要对这个object进行类型转化后,我们才能使用object里面的数据(例:不可以直接使用map方法)。

  1. 直接接收到的
    在这里插入图片描述
  2. 转换后JSON.parse(times)
    在这里插入图片描述

19. 【实用】代码有问题但控制台不报错

🌸 这时候就需要手动查找代码抛出异常

try {
	// 疑似问题代码
} catch (e) {
	console.log(e);  // 打印异常
}

20. 【实用】正则表达式

🌸 字符串是否为纯中文

let str = '纯中文吗';
let rule = /[^\u4e00-\u9fa5]/;
let result = rule.test(str);  // 返回布尔值

🌸 字符串是否为纯数字

let num = 123;
let rule = /^\d+$/;
let result = rule.test(num);

🌸 判断是否有小数点

let point = 12.3;
let rule = /[\.]/;
let result = rule.test(point);

🌸 请输入正确的手机号码

else if (!/^1(3|4|5|6|7|8|9)\d{9}$/.test(value)) {
    callback(new Error('请输入正确的手机号码'));
}

🌸 Elementui 中 <InputNumber 计数器 只允许输入正整数

<el-input-number v-model="unitPrice" :min="1" :max="100000" @keyup.native="unitPriceKeyup" style="width: 70%"></el-input-number>

methods: {
    unitPriceKeyup(e) {
         e.target.value = e.target.value.replace(/[^\d]/g, '')
    },
}

🌸 Elementui 中 <el-Input 只允许输入数字或字母,不允许中文

<el-input @keyup.native="codeKeyup" v-model.trim="minorCategory" placeholder="请输入小类"></el-input>

methods: {
    codeKeyup(e) {
         e.target.value = e.target.value.replace(/[^\w\.\/]/ig, '')
    },
}

21. 【ElementUI】MessageBox 弹框提示改变部分字体颜色

🌸 官方文档属性
🌸 dangerouslyUseHTMLString设置为true, message 属性就会作为 HTML 片段处理
在这里插入图片描述
🌸 页面效果
在这里插入图片描述

batchDel(ids) {
	let params = {
		ids: ids,
    }
	this.$confirm(`确定要删除本计划下的 <span style='color: red'>${childNumber}</span> 条子计划吗?`, {
		confirmButtonText: '确定',
		cancelButtonText: '取消',
		dangerouslyUseHTMLString: true,
		type: 'warning'
	}).then(res => {
		batchDel(params)
			.then(res => {
				this.$message.success("批量删除成功");
				this.getListData();
			})
			.catch(err => {
				console.log(err);
			})
	})
},

22. 【ElementUI】Cascader 级联选择器 树形结构字段名与官方默认字段不一致时,如何修改字段名。

🌸 官方文档
在这里插入图片描述
在这里插入图片描述

<el-cascader
    :options="options"
    :props="{label: "name", value: "value", children: "childs", multiple: true, checkStrictly: true }"
    clearable>
</el-cascader>

23. 【ElementUI】 Cascader 级联选择器 展开最后一级无值则不显示最后一栏。

🌸 写一个过滤加工树形列表的方法
🌸 树形数据treeList为参数

processingTree(treeList) {
	treeList.forEach(item => {
		if (item.childs && item.childs.length) {
			this.processingTree(item.childs);
		} else {
			item.childs = null;
		}
	})
}

24. 【ES6】flat() 和 flatMap() 方法。

🌸 flat()
🌸 1. Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维数组。该方法返回一个新数组,对原数据没有影响。

[1, 2, [3, 4]].flat();
// [ 1, 2, 3, 4 ]

🌸 2. flat()默认只会 “拉平” 一层, 如果想要 “拉平” 多层的嵌套数组,可以向flat()方法中传入参数,表示想要拉平的层数,默认为1。

[1, 2, [3, [4, 5]]].flat();
// [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2);
// [1, 2, 3, 4, 5]

🌸 3. 用 Infinity 关键字作为参数时,不管有多少层嵌套,都会转成一维数组。

[1, [2, [3]]].flat(Infinity);
// [1, 2, 3]

🌸 4. 如果原数组有空位,flat()方法会跳过空位。

[1, 2, , 4, 5].flat();
// [1, 2, 4, 5]

🌸 flatMap()

🌸 1. flatMap()方法对原数组的每个成员执行一个函数,相当于执行Array.prototype.map(),然后对返回值组成的数组执行flat()方法。

🌸 2. 该方法返回一个新数组,不改变原数组。

🌸 3. 相当于 [[2, 4], [3, 6], [4, 8]].flat()

[2, 3, 4].flatMap((x) => [x, x * 2])
    // [2, 4, 3, 6, 4, 8]
    [2, 3, 4].flatMap((x) => {
        console.log('x', x); // 2 3 4
        return [x, x * 2]
    })

24. 【JS】JS对象的序列化和反序列化。

JS 中通过调用 JSON方法,可以实现对象字符串之间的互相转换。

🌸 序列化: 将 JS对象 序列化为 字符串。

let string = JSON.stringify(object);

🌸 反序列化: 将 字符串 序列化为 JS对象。

let object = JSON.parse(string);

25. 【ElementUI】带复选框的 el-table 表格,去掉表头的全选框。

<el-table ref="tableList" :data="tableData" header-row-class-name="disabledCheck"></el-table>

::v-deep {
	.el-table {
		.disabledCheck .el-checkbox__inner {
			display: none !important;
		}
	}
}

26. 【ElementUI】带复选框的 el-table 表格,只能单选。

<el-table ref="tableList" :data="tableData" header-row-class-name="disabledCheck" @select="select"></el-table>

select(selection, row) {
    if (selection.length > 1) {
         let del_row = selection.shift()
         this.$refs.tableList.toggleRowSelection(del_row, false)
    }
},

27. 【实用】路由跳转 query 传参 传对象丢失字段

在这里插入图片描述
🌸 query传对象:因为本身就是对象,则不需要花括号包裹,否则会报错,且字段丢失
在这里插入图片描述

28. 【实用】路由跳转带参,刷新页面,布尔值强转后恒为 true

🌸 前提我们知道,路由传参时,一些类型会被转换成字符串,例如: Number、Boolean 等类型都会被转换成 String
🌸 所以在接收参数时,需要强转类型
🌸 在强转 Boolean 时,遇到问题,就是在刷新页面后,强转后的布尔值恒为 true。于是就不能使用强转

// 方法1
使用JSON.parse()方法将字符串的‘false‘和‘true‘转换成布尔值
// 方法2
eval()方法  //作用是去掉参数中最外层引号并执行剩余语句
// 接收 String 类型的参数
typeOf(eval('1+2'))  // int
eval('true')  // true

29. 【ElementUI】el-table 操作列 上移、下移 改变行顺序。

在这里插入图片描述

<el-table-column label="操作" width="180">
     <template v-slot="{$index}">
          <el-button v-if="$index != 0" @click="upAction($index)" icon="el-icon-top" type="text">上移</el-button>
          <el-button v-if="$index != ruleForm.tableData.length - 1" @click="downAction($index)" icon="el-icon-bottom" type="text">下移</el-button>
          <el-button @click="delAction($index)" icon="el-icon-close" type="text">删除</el-button>
     </template>
</el-table-column>

// 转换顺序
swapItems(arr, index1, index2){
     arr[index1] = arr.splice(index2, 1, arr[index1])[0];
     return arr;
},
// 上移
upAction(index) {
     this.tableData = this.swapItems(this.tableData, index, index - 1);
},
// 下移
downAction(index) {
     this.tableData = this.swapItems(this.tableData, index, index + 1);
},
// 删除
delAction(index) {
     this.tableData.splice(index, 1);
},

30. 【ElementUI】el-table 复选框翻页保持选中。

在这里插入图片描述在这里插入图片描述

31. 【ElementUI】el-table 表头个性化(插槽)。

在这里插入图片描述

32. 【实用】img 显示固定部分,超过部分隐藏,缩放分辨率不压缩,不变形。

<div class="login-container__bg" :style="{ 'background-image': 'url(' + bg + ')' }" />
// bg 是需要定义的变量
// css
.login-container__bg {
     width: 100%;
     height: 100%;
     background-size: cover;
     background-attachment: fixed;  
 }

详解:这位小哥写的很有趣,可以看看~

33. 【ElementUI】el-table 点击弹框带入已选数据,实现自动选中

props: {
    selection: Array,  // 带过来的数据
},

data() {
   return {
      tableData:[],
      selectedList: [],  // 被选数据
   }
},

created() {
     this.selectedList = [...this.selection];
     this.getList();
},

methods: {
	// 自动选中
        toggleRowSelection() {
            if (this.selectedList.length && this.tableData.length) {
                this.$nextTick(()=> {
                    this.selectedList.forEach(item => {
                        const row = this.tableData.find(_row => _row.id === item.id);
                        if (row) {
                            this.$refs.standardTable.toggleRowSelection(row, true);
                        }
                    })
                })
            }
        },

		// 获取弹框列表
        getList() {
            let params = { };
            getList(params)
            .then(res => {
                this.tableData = res.content;
                this.toggleRowSelection();  // 调用自动选中的接口
            })
            .catch(err => {
                console.log(err);
            })
        },
},

34. 【实用】js找出数组对象中重复的数据

在这里插入图片描述

35. 【ElementUI】el-table 表格中嵌套 输入框、时间选择器

🌸 要义:el-form 嵌套 el-table
在这里插入图片描述

36. 【实用】js用Set对象实现对象数组去重

arr = [...new Set(arr.map(item => 
          JSON.stringify(item)
       ))].map(val => JSON.parse(val))

在这里插入图片描述

37. 【ElementUI】el-input输入时换行,显示时换行

 style="white-space: pre-wrap; line-height:20px;"

37. 【实用】判断两个数组是否相等(有序、无序)

equation 布尔值

// 有序
let equation = JSON.stringify(this.arr1) === JSON.stringify(arr2.flat());

// 无序
let equation = this.arr1.every(item => arr2.includes(item));

38. 【实用】新窗口打开

// 新窗口打开
 newPageAction() {
      var host = window.location.host;
      let newPageUrl ='http://' + host + '/#/spotManage/newTaskPage?taskId=' + EncryptData(this.taskId) + '&currentKey=' + EncryptData(this.currentKey) + '&editType=' + this.editType;
      window.open(newPageUrl, "_blank");
 },

39. 【ElementUI】关于日期选择器的一些

// 当前年月日
currentDate() {
    let date = new Date();
    return date.getFullYear() + '年' + (date.getMonth() + 1) + '月' + date.getDate() + '日';
 },

在这里插入图片描述
🌸 禁用 当前日期之前或之后 的日期

<el-date-picker v-model="date" type="date" format="yyyy-MM-dd" value-format="timestamp" :picker-options="pickerOptions" placeholder="日期"> </el-date-picker>

pickerOptions: {
     disabledDate: date => {
          // return Date.now() < date.valueOf(); // 禁用当前日期之后的
          return Date.now() > date.valueOf(); // 禁用当前日期之前的
     }
},

// 月份范围选择限制最大范围为一年
pickerOptions: {
     disabledDate: (time) => {
          if (this.minDate !== null && this.maxDate === null) {
                 let minMonth = this.minDate.getMonth(),
                 lastYear = new Date(this.minDate).setMonth(minMonth - 11),
                 nextYear = new Date(this.minDate).setMonth(minMonth + 11);
                 // 只能选 minDate 前后一年的范围
                    return time.valueOf() < lastYear.valueOf() || time.valueOf() > nextYear.valueOf();
          }
             return false;
     },
     onPick: (time) => {
           this.minDate = time.minDate;
           this.maxDate = time.maxDate;
     }
 },

pickerOptions: {
      shortcuts: [{
          text: '最近一周',
          onClick(picker) {
               const end = new Date();
               const start = new Date();
               start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
               picker.$emit('pick', [start, end]);
          }
      }, {
           text: '最近一个月',
           onClick(picker) {
              const end = new Date();
              const start = new Date();
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
              picker.$emit('pick', [start, end]);
           }
       }, {
            text: '最近三个月',
            onClick(picker) {
                const end = new Date();
                const start = new Date();
                start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
                picker.$emit('pick', [start, end]);
             }
          }]
       },
            
pickerOptions: {
                shortcuts: [{
                    text: '一年内',
                    onClick(picker) {
                        const end = new Date();
                        const start = new Date();
                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 365);
                        picker.$emit('pick', [start, end]);
                    }
                }, {
                    text: '半年内',
                    onClick(picker) {
                        const end = new Date();
                        const start = new Date();
                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 182);
                        picker.$emit('pick', [start, end]);
                    }
                }, {
                    text: '三个月内',
                    onClick(picker) {
                        const end = new Date();
                        const start = new Date();
                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
                        picker.$emit('pick', [start, end]);
                    }
                }]
            },

40. 【实用】change 事件 新增参数 写法

在这里插入图片描述

在这里插入图片描述

41. 【实用】Echarts 的饼图位置调整

在这里插入图片描述

42. 【ElementUI】el-input 后置插槽样式 (见图)

在这里插入图片描述

43. 【实用】验证身份证号并获取 生日及 性别

rules: {
    idCard: {required: false, validator: this.checkIDCard, trigger: 'blur'}, // 身份证号
},

checkIDCard(rule, value, callback) {
            if (value) {
            	// 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
                let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;  // 身份证位数 验证

                if (reg.test(value)) {
                    let coefficient = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
                    // 除11取余的结果对应的校验位(最后一位)的值
                    let checkDigitMap = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
                    var arr = value.split('')
                    let sum = 0;
                    for (var i = 0; i < 17; i++){
                      sum += coefficient[i] * parseInt(arr[i])
                    }
                    if(checkDigitMap[sum % 11] !== arr[17] ){
                        callback(new Error('请输入合法的身份证号!'));
                    } else {
                        let time = Date.parse(value.substr(6,4)+'-'+value.substr(10,2)+'-'+value.substr(12,2));//身份证日期时间戳date
                        this.ruleForm.birthdayStr = time;  // 生日时间戳
                        
                        // 这里需求是 0 男 1 女(实际看怎么定义去赋值男女)
                        if (value.length === 18) {
                            value.substring(16, 17) % 2 === 0 ? this.ruleForm.sex = 1 : this.ruleForm.sex = 0;
                        }
                        if (value.length === 15) {
                          sex = value.substring(13, 14) % 2 === 0 ? this.ruleForm.sex = 1 : this.ruleForm.sex = 0;
                        }
                        callback();
                    }
                } else {
                    callback(new Error('请输入合法的身份证号!'));
                }
            } else {
                callback();
            }
        },

44. 【ElementUI】el-table 表格自定义表头排序

🌸 以下内容只介绍自定义排序
在这里插入图片描述
在这里插入图片描述

<el-table v-if="tableData && tableData.length" :data="tableData" @sort-change="changeSort">
      <el-table-column prop="reportName" label="报告名称" sortable="custom" show-overflow-tooltip fixed width="170"></el-table-column>
</el-table>

		// 定义筛选条件对象
		this.searchData = {
                page: 1,
                size: pageSize,
                blurry: '',
                sortBy: '',  // 排序名称
                sortType: '',  // 排序类型
            };

		// 排序变化
        changeSort(column) {
            if (column.order == 'ascending') {
                this.searchData.sortType = 'DESC';
            } else {
                this.searchData.sortType = 'ASC';
            }
            this.searchData.sortBy = column.prop;
            this.getListData();   // 刷新列表接口
        },

45. 【实用】VueDraggable 是否可拖拽控制及 标签的 :title 属性

在这里插入图片描述

46. 【实用】一个有意思的新写法hhh

🌸 我自己习惯写成下面这样

<el-dropdown-item command="top">{{ item.isTop ? '取消置顶' : '置顶'}}</el-dropdown-item>

🌸 偶然看到同事这样写~ 区别于我上面写的可以这种少写俩字儿

在这里插入图片描述

47. 【实用】父传子 prop 中 一个字段可以接收两种类型

在这里插入图片描述

48. 【实用】v-bind 绑定一个对象

在这里插入图片描述
🌸 用的时候直接拿具体的参数名就行,因为这个对象已经展开了,直接取,不需要data.

49. 【实用】扩展运算符易遗忘的点。。(对我来说不太常用到)

在这里插入图片描述
在当前页面直接拿来赋值,然后通过组件传入props中,在父组件中取值,需要哪个字段取哪个字段。相当于传入可以一个对象,取值还是单个取。

50. 【实用】自定义 CSS 虚线边框的长度和间隔

🌸 普通 CSS 虚线

border: 1px dashed #409EFF;
border-radius: 15px;

在这里插入图片描述
🌸 自定义 CSS 虚线边框的长度间隔的虚线

原理:使用线性渐变的图像作为border-image

border: 1px solid transparent;
border-radius: 15px;
background: linear-gradient(white, white) padding-box,
repeating-linear-gradient(-45deg, #409EFF 0, #409EFF 12px, white 0, white 17px);

在这里插入图片描述

51. 【实用】el-tooltip 常用样式及 自定义content 并可换行

在这里插入图片描述

<el-tooltip effect="light" placement="top">
    <div slot="content">统一管理为按照样品主编号进行领还样、登记;<br />分开管理为按照样品子编号进行领还样、登记</div>
    <i class="el-icon-question"></i>
</el-tooltip>

.el-icon-question {
    margin-left: 5px;
    cursor: pointer;
    color: #e6a23c;
}

52. 【实用】el-autocomplete 自定义远程搜索

在这里插入图片描述

<j-autocomplete v-model="row.itemName" :fetch-suggestions="fetchSuggestions" @select="(val) => { projectSelect(val, row) }" :maxlength="50" trim popper-class="autocomplete-suggestion" placeholder="请输入检测项目">
    <template v-slot="{ item }">
        <div style="display: flex; justify-content: space-between;">
            <div :title="item.itemName" style="width: 120px;margin-right: 10px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">{{ item.itemName }}</div>
            <div :title="item.inspectionMethod" style="width: 180px; margin-right: 10px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">{{ item.inspectionMethod }}</div>
            <div :title="item.itemNumber" style="width: 130px;margin-right: 10px; overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">{{ item.itemNumber }}</div>
            <div :title="item.inspectionFee" style="width: 80px;">{{ item.inspectionFee }}</div>
        </div>
    </template>
</j-autocomplete>


fetchSuggestions(queryString, callback) {
// 掉后端接口 传入当前输入的值 queryString
    getProjectByName({ name: queryString })
        .then((res) => {
            const data = res.map(item => {
                this.$set(item, 'value', item.itemName);
                return item;
            });
            data.unshift({
                value: '不填报',
                inspectionMethod: '',
                itemNumber: '',
                inspectionFee: undefined
            })
            // 调用 callback 返回建议列表的数据
            callback(data);
        })
        .catch(() => {
            callback([]);
        })
},

53. 【实用】el-cascader多选并且第一栏不需要选择复选框

在这里插入图片描述

在这里插入图片描述

<el-cascader
    v-model="ruleForm.minorItemList"
    :options="categoryList"
    :props="{ children: 'children', multiple: true, emitPath: false }"
    :show-all-levels="true"
    popper-class="minor-select"
    clearable
    placeholder="请选择项目类别"
>
</el-cascader>

<style lang="scss">
.minor-select {
    .el-cascader-menu:nth-child(1) {
        .el-checkbox {
            display: none !important;
        }
    }
}
</style>

54. 【实用】el-row 自适应

<el-row :gutter="20" type="flex">
    <el-col :span="16">
        <el-form-item label="参数名称" prop="paramName">
            <j-input v-model="form.paramName" size="medium" trim :maxlength="50" placeholder="请输入参数名称" />
        </el-form-item>
    </el-col>
    <el-col :span="16">
        <el-form-item label="参数名称" prop="paramName">
            <j-input v-model="form.paramName" size="medium" trim :maxlength="50" placeholder="请输入参数名称" />
        </el-form-item>
    </el-col>
    <el-col :span="16">
        <el-form-item label="参数名称" prop="paramName">
            <j-input v-model="form.paramName" size="medium" trim :maxlength="50" placeholder="请输入参数名称" />
        </el-form-item>
    </el-col>
    <el-col :span="16">
        <el-form-item label="参数名称" prop="paramName">
            <j-input v-model="form.paramName" size="medium" trim :maxlength="50" placeholder="请输入参数名称" />
        </el-form-item>
    </el-col>
</el-row>
    
<style lang="scss" scoped>
::v-deep.el-row {
    flex-wrap: wrap;
}
</style>

🌸 希望这篇文章对你有帮助!😁🌹🌹🌹

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值