项目中好用的方法

2023-11-03

1.过滤(数组子项是对象的,对象有重复的)

	let arr = res.data.filter(function (item, index, self) {
						return self.findIndex((el) => el['applyPerson'] == item['applyPerson']) === index;

2.一般初始化数据的浅拷贝

Object.assign(this.formQuery, newObj);

3.给数组或对象添加某一元素

	this.$set(this.queryObj, ['tableId'], row.tableId);
[],//中括号中可以是健名也可以是下标index

4.假如后端返回给多个不同的值代表不同值1:‘通过’,2:'驳回',3:'等待'....,显示可以通过switch方法显示不同值

switch (row.viewUrl) {
						case '1':
							return '通过'
							break;
                        case '2':
							return '驳回'
							break;
						default:
							break;
					}

5.provide和 inject搭配使用,可以实现上层组件传值给下下下...组件,(格式要正确)

//上层组件传值	
provide() {
		//直接传递给孙组件
		return {
			fromObj: this.fromObj,
			strategyFollowRecordsModels: () => this.strategyFollowRecordsModels,
			updateIndex: () => this.strategyFollowRecordsModels,
			getstrategyPeriodId: () => this.fromObj.strategyPeriodId,
		};
	},
//下层组件接收
	inject: ['fromObj'], //得到爷爷传过来的跟进记录id',周期表.关联id

6.时间转换函数

		//转换时间功能函数
		formatDate(timer) {
			let time = new Date(timer);
			let y = time.getFullYear();
			let m = time.getMonth() + 1;
			let d = time.getDate();
			let h = time.getHours();
			let mm = time.getMinutes();
			let ss = time.getSeconds();
			return `${y}-${m}-${d} ${h}:${mm}:${ss}`;
		},

7.限制输入框是0-100数字

		//限制输入框0-100数字
		onInput0_100(e) {
			this.$message.closeAll();
			// 验证是否是纯数字
			let isNumber = /^\d*$/.test(e.target.value);
			// 过滤非数字
			e.target.value = e.target.value.replace(/\D/g, '');
			if (!isNumber || e.target.value < 0 || e.target.value > 100) {
				this.$message.warning('只能输入[0,100]区间的整数');
			}
			e.target.value = (e.target.value >= 0 && e.target.value <= 100 && e.target.value.match(/^\d*/g)[0]) || null;
		},

8.得到数组包对象,对象中某个键名字符串形式显示

		replay(flied) {
			return flied.map((o) => o.empName).join(',');
		},

9.echarts的使用

//1.引入echarts
// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
import * as echarts from 'echarts';
//2.给echerts一个容器
		<div id="main" style="height: 400px; margin-top: 20px" class="scroll echarsmain"></div>
//3.渲染echarts的方法
		drawLine(id, opinionData) {
			this.charts = echarts.init(document.getElementById(id));
			this.charts.setOption({
				tooltip: {
					trigger: 'axis',
				},
                ...
                }
//4.mounted里挂载一下
mounted(){
		this.drawLine('main');
}

10.取两数组的不同值,差值,(实际应用在table选择)

  // 表格全选
    selectionChangeAll(selection) {
      // 获取当前数组的差集
      let differenceSet = [];
      // 记录的选中值
      let selectedArray = [];
      //求2个数组的差值数组
      let selectedIds = this.selected.map(item => item.id);
      differenceSet = selection.filter(item => !selectedIds.includes(item.id));

      if (differenceSet.length > 0) { // 如果有差值,则进行添加操作
        this.selected.push(...differenceSet);
      } else {
        this.selected.forEach((selectedItem, selectedIndex) => {
          selection.forEach((tableItem, tableIndex) => {
            if (selectedItem.id == tableItem.id) {
              selectedArray.push(selectedItem);
            }
          })
        })
        this.selected = selectedArray;
      }
    },

11.树过滤

    //树过滤
    groupFilterNode(value, data) {
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
    },
    //label是树节点字段名

12.树数据转换

 

 13.表单校验整数部分最多六位、小数最多两位

14.数组去重的另一种方法

 15,利用newSet得数组的并集,交集,差集

16.可用的选人组件

<template>
	<el-dialog
		class="app-container"
		:title="title"
		:visible="dialogVisible"
		:before-close="close"
		:close-on-click-modal="false"
		v-setDialog="{ calc: innerFlag ? `calc(100vh - 450px)` : `calc(100vh - 270px)` }"
		fullscreen
		:modal="false"
	>
		<comm-headert :more="false" :showCount="false" :calculate="false">
			<el-row slot="query">
				<el-col style="display: flex">
					<el-select v-if="!companyNo" v-model="queryParam.companyNo" placeholder="所属公司" size="small" @change="handleChangeCompany" clearable>
						<el-option v-for="(item, index) in companyList" :key="index" :label="item.companyName" :value="item.companyNo"></el-option>
					</el-select>
					<select-tree
						v-model="queryParam.departNo"
						:nodes="departList"
						node-key="id"
						label="departName"
						placeholder="请选择部门"
						@input="handleInputDepart"
						size="small"
					></select-tree>
					<el-input v-model="queryParam.empNo" placeholder="工号" clearable></el-input>
					<el-input v-model="queryParam.empName" placeholder="员工名称" clearable></el-input>
					<el-button type="primary" @click="handleSearch(1)">查询</el-button>
					<el-button @click="handleReset">重置</el-button>
				</el-col>
			</el-row>
		</comm-headert>

		<comm-table>
			<div slot="table" style="display: flex; justify-content: space-between">
				<lb-table
					ref="baseTbl"
					style="width: 60%"
					:data="tableData"
					:column="tableColumn"
					:page="pagination.page"
					:limit="pagination.limit"
					:total="pagination.total"
					:height="$store.getters['tableHeight/tableHeight'](90)"
					:header-cell-class-name="selectMultiply ? '' : 'table-disable'"
					@changePagination="handleChangePagination"
					@selection-change="handleSelectionChange"
					pagination
					border
					stripe
				/>
				<div style="width: 39%">
					<div style="margin-bottom: 6px; font-size: 16px; font-weight: bold">选中用户</div>
					<lb-table :data="selectedTableData" :column="selectedTableColumn" :height="$store.getters['tableHeight/tableHeight'](112)" border stripe />
				</div>
			</div>
		</comm-table>

		<div slot="footer" class="dialog-footer">
			<el-button @click="close" size="small">取消</el-button>
			<el-button type="primary" @click="handleSave" size="small">确定</el-button>
		</div>
	</el-dialog>
</template>

<script>
import company from '@/api/org/company';
import depart from '@/api/org/depart';
import emp from '@/api/org/emp';
import user from '@/api/sys/user';
import SelectTree from '@/component/selectTree';
import { Message } from 'element-ui';

export default {
	name: 'SelectEmployee',
	components: {
		SelectTree,
	},
	props: {
		selectMultiply: {
			type: Boolean,
			default: () => true,
		},
		isUser: {
			type: Boolean,
			default: () => false,
		},
		selectPersonData: {
			type: [Array, Object],
			default: () => [],
		},
		innerFlag: {
			type: Boolean,
			default: () => false,
		},
	},
	data() {
		return {
			title: '选择组织用户',
			dialogVisible: false,
			queryParam: {
				companyNo: null,
				departNo: null,
				empNo: null,
				empName: null,
				incumbency: true,
				accessory: null,
			},
			tableColumn: [
				{ type: 'selection', align: 'center', width: '50' },
				{ prop: 'empNo', label: '工号', align: 'center' },
				{ prop: 'empName', label: '员工名称', align: 'center' },
				{ prop: 'departName', label: '部门名称', align: 'center', width: 400 },
				{ prop: 'companyName', label: '公司名称', align: 'center' },
			],
			tableData: [],
			selectedTableColumn: [
				{ prop: 'empNo', label: '工号', align: 'center' },
				{ prop: 'empName', label: '员工名称', align: 'center' },
				{
					label: '操作',
					align: 'center',
					width: 300,
					render: (h, scope) => {
						return [
							<el-button size="mini" className="h24" type="danger" onClick={() => this.handleDeleteSelected(scope.row, scope.$index)}>
								删除
							</el-button>,
						];
					},
				},
			],
			selectedTableData: [],
			pagination: {
				page: 1,
				limit: 10,
				total: 0,
			},
			companyList: [],
			departList: [],
			companyNo: null,
		};
	},
	methods: {
		show(accessory) {
			// session判断
			let userInfo = this.getUserInfo();
			this.accessory = accessory;
			if (userInfo && userInfo.companyNo) {
				this.companyNo = userInfo.companyNo;
				this.queryParam.companyNo = this.companyNo;
				this.handleSearchDepart();
			}
			if (!this.companyNo && !this.companyList.length) {
				this.handleSearchCompany();
			}
			this.dialogVisible = true;
			this.handleSearch();
		},
		showEcho(data) {
			let userInfo = this.getUserInfo();
			if (userInfo && userInfo.companyNo) {
				this.companyNo = userInfo.companyNo;
				this.queryParam.companyNo = this.companyNo;
				this.handleSearchDepart();
			}
			if (!this.companyNo && !this.companyList.length) {
				this.handleSearchCompany();
			}
			this.dialogVisible = true;
			this.selectedTableData = JSON.parse(JSON.stringify(data));
			this.handleSearch();
		},
		close() {
			this.queryParam = {
				companyNo: null,
				departNo: null,
				empNo: null,
				empName: null,
				incumbency: true,
			};
			this.dialogVisible = false;
			this.selectedTableData = [];
			this.$refs.baseTbl?.clearSelection();
			this.$emit('close');
		},
		handleSearch(page) {
			let params = {
				pageNum: page || this.pagination.page,
				pageSize: this.pagination.limit,
				companyNo: this.queryParam.companyNo,
				departNo: this.queryParam.departNo,
				empNo: this.queryParam.empNo,
				empName: this.queryParam.empName,
				incumbency: this.queryParam.incumbency,
			};
			let searchFun = this.isUser ? user.pageUserEmp : emp.pageEmp;
			searchFun(params).then((res) => {
				// console.log('searchFun', res);
				if (res.code === 200) {
					if (res.data && res.data.list) {
						this.tableData = res.data.list;
						this.pagination.page = res.data.pageNum;
						this.pagination.total = res.data.total;
					} else {
						this.tableData = [];
						this.pagination.page = 1;
						this.pagination.total = 0;
					}
				}
			});
		},
		handleSearchCompany() {
			company.listCompany().then((res) => {
				if (res.code === 200) {
					this.companyList = res.data || [];
				}
			});
		},
		handleSearchDepart() {
			if (!this.queryParam.companyNo) {
				return;
			}
			depart.treeDepart(this.queryParam.companyNo).then((res) => {
				if (res.code === 200) {
					this.departList = res.data || [];
				}
			});
		},
		handleChangeCompany() {
			this.handleSearchDepart();
		},
		handleInputDepart(val) {
			this.queryParam.departNo = val;
		},
		handleReset() {
			this.queryParam = {
				companyNo: null,
				departNo: null,
				empNo: null,
				empName: null,
				incumbency: true,
			};
		},
		handleChangePagination(pagination) {
			if (this.pagination.page === pagination.page && this.pagination.limit !== pagination.limit) {
				this.pagination.limit = pagination.limit;
				this.handleSearch(1);
			} else if (this.pagination.limit === pagination.limit && this.pagination.page !== pagination.page) {
				this.pagination.page = pagination.page;
				this.handleSearch();
			}
		},
		handleSelectionChange(selection) {
			if (!selection.length) return;
			this.selectedTableData = selection;

			return;
			// 多选
			if (this.selectMultiply) {
				this.selectedTableData.push.apply(
					this.selectedTableData,
					selection.filter((o) => this.selectedTableData.filter((s) => s.id === o.id).length === 0)
				);
				return;
			}

			// 单选
			if (selection.length > 1) {
				this.$refs.baseTbl.toggleRowSelection(selection[0], false);
				return;
			}
			this.selectedTableData = [selection[0]];
		},
		handleDeleteSelected(row, index) {
			this.selectedTableData.splice(index, 1);
			// 删除左表已选中状态
			this.$refs.baseTbl.toggleRowSelection(row, false);
		},
		handleSave() {
			if (!this.selectedTableData.length) {
				Message.warning('未选择用户');
				return;
			}
			this.$emit('selectChange', this.selectedTableData, this.accessory);
			this.close();
		},
	},
};
</script>

<style lang="scss" scoped>
::v-deep .el-table__header-wrapper .table-disable .el-checkbox {
	display: none;
}

::v-deep .el-dialog__wrapper {
	background: transparent;
}
</style>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

项目中好用的方法 的相关文章

  • angularjs:如何向资源对象添加缓存?

    在 http 中添加缓存非常简单 通过传递cache true http docs angularjs org api ng http https docs angularjs org api ng service 24http有缓存选项
  • chrome 调试器承诺在暂停时不会解析?

    也许我没有正确调试承诺 但基本上 如果您在断点处停止并运行异步代码 它实际上不会完成 直到您恢复执行为止 这是一个问题 调试器允许您快速试验多个 api 方法 但如果您恢复它 您就不能 debugger now type the follo
  • 如何通过单击图像预览上的“x”从文件输入中删除图像?

    我目前有一个文件输入 一旦用户上传图像 就会显示图像预览 在图像预览上 有一个 x 可以从列表中删除图像预览 单击此 x 后 有什么方法可以从输入中的文件集中删除图像吗
  • 如果对象包含在另一个数组中,则从数组中删除该对象

    我试图从数组中删除一个对象 如果该对象的属性 唯一 包含在另一个数组中 我知道我可以像这样执行嵌套 for 循环 for i 0 i lt array length i for j 0 j lt array2 length j if arr
  • HTML/VBA Click 事件未触发

    这是我第一次在 StackOverflow 上发布问题 到目前为止 我已经能够通过 VBA 帮助论坛解决我的大部分问题 我的问题很简单 我有一个自动数据拉取 我需要在其中导出数据 我过去曾在这方面取得过成功 但这次略有不同 我尝试单击以生成
  • 网站 YouTube 嵌入视频不断播放

    我正在使用 youtube 提供的 iframe 在我的网站上嵌入视频 我还使用了一个 css 弹出窗口 这是我从这个页面学到的http www pat burt com web development how to do a css po
  • 用隐藏单元格补充 colspanned 表格有什么不好吗?

    我一直在表格上开发一些排序和选择功能 我发现在具有跨单元格的表格中定位非常困难 我只是添加了跨区单元格并将其隐藏 它看起来不错 它与我的 js 一起工作 非常适合索引 但我想知道这是否是合法的方法 stuffing display none
  • 如何按照编写的顺序迭代 javascript 对象属性

    我发现了代码中的一个错误 我希望通过最少的重构工作来解决该错误 此错误发生在 Chrome 和 Opera 浏览器中 问题 var obj 23 AA 12 BB iterating through obj s properties for
  • 在为 RXJS 可观察量编写测试时,如何避免让调度程序通过我的业务逻辑?

    我发现使某些测试通过的唯一方法是显式地将调度程序传递给函数 为了便于说明 请考虑以下函数 function doStuff stream return stream delay 100 filter x gt x 2 0 map x gt
  • 如果链接包含特定文本,jQuery 将类添加到 href

    我的网站上的列表中有一些动态填充的链接 这些链接链接到文件 是否可以使用 jQuery 查看文件名是否以 pdf 结尾 并在 href 或类似的链接文本以 mp3 结尾时添加一个类 例如 我的列表中有以下链接 文件1 pdf 歌曲1 mp3
  • 如何流式传输 OpenAI 的完成 API?

    我想流式传输结果通过 OpenAI 的 API 完成 https beta openai com docs api reference completions 该文档提到使用服务器发送的事件 https developer mozilla
  • 如何在 Angular 中从父组件访问子组件?

    I have mat paginator在子组件a中 如下所示 子组件 html
  • 使用 JS 合并具有相同值的相邻 HTML 表格单元格

    我已经为此苦苦挣扎了一段时间 我有一个根据一些 JSON 数据自动生成的表 该数据可能会有所不同 我想合并第一列中具有相同值的相邻单元格 例如此表中的 鱼 和 鸟 table tr td fish td td salmon td tr tr
  • Select2 下拉列表动态添加、删除和刷新项目

    这让我发疯 为什么 Select2 不能在其页面上实现清晰的方法或示例如何在 Select2 上进行简单的 CRUD 操作 我有一个 select2 从 ajax 调用获取数据
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • 数据表日期范围过滤器

    如何添加日期范围过滤器 like From To 我开始进行常规搜索和分页等工作 但我不知道如何制作日期范围过滤器 我正在使用数据表 1 10 11 版本 My code var oTable function callFilesTable
  • 防止文本区域出现新行

    我正在开发聊天功能 使用 Vue 并使用文本区域作为输入 以便溢出换行 并且对于编写较长消息的用户来说更具可读性 不幸的是 当用户按下 Enter 键并提交时 光标会在提交之前移动到新行 从而使用户体验感觉不佳 关于如何使用普通 Javas
  • 使用异步调用时如何从 javascript 更新元刷新?

    我有一个系统 它使用元刷新来注销页面 该系统会在空闲用户后进行清理 不用担心 服务器也会导致会话超时 我开始通过 ajax 进行一些操作 不是真正的 xml 但这不是重点 我可以运行从异步请求返回的javascript 所以我想知道是否可以
  • 如何在 gulp.src 中使用基本正则表达式?

    我正在尝试选择两个文件gulp src highcharts js and highcharts src js 当然 我知道我可以使用数组表达式显式添加这两个表达式 但出于学习目的 我尝试为它们编写一个表达式 我读过可以使用简单的正则表达式
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse

随机推荐

  • 形容词变副词

    1 辅音 y 改y为i ly happy happily y发ai音直接加ly dry dryly 2 元音 e 去e ly ture turly due duly nice nicely wise wisely 3 le去e y poss
  • 笔试

    文章目录 前言 38 FIFO的深度计算问题 1 情况1 fa gt fb 且在读和写中都没有空闲周期 2 情况2 fa gt fb 两个连续的读写之间有一个时钟周期延迟 3 情况3 fa gt fb 在读和写中都有空闲周期 4 情况4 f
  • 以字符串形式读取github上.json文件

    如下 https github com hpu spring87 ebooks blob master update json 如果直接用httpclient读取该URL地址 得到结果是这样的
  • Java JFrame常用的布局

    setLayout 布局对象 声明布局格式的方式 如 setLayout new FlowLayout 1 FlowLayout布局 FlowLayout布局是JPanel 的默认布局 组建按照加入的先后顺序从左到右排列 一行排满之后就转到
  • 二进制应用

    一 什么是二进制 逢二进一的计数规则 规律 数字 0 1 进位基权 2 权 8 4 2 1 基数的幂次 二 为什么要用二进制 成本最优的解决方案 三 如何用二进制 3 1二进制与十进制的转换 3 1 1 十进制转二进制 方法为 十进制数除2
  • 写之前的项目关于使用git remote -v 找不到项目地址的解决方案

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 报错解析 1 报错内容 2 报错翻译 3 报错解析 1 使用git branch来查看git仓库有几个分支 2 使用git remote v 3 查看根目录的g
  • Wireshark 实验

    Wireshark 实验 Wireshark 实验 数据链路层 实作一 熟悉 Ethernet 帧结构 实作二 了解子网内 外通信时的 MAC 地址 实作三 掌握 ARP 解析过程 网络层 实作一 熟悉 IP 包结构 实作二 IP 包的分段
  • matlab arma 仿真,基于Matlab的ARMA模型时间序列分析法仿真

    自适应滤波器设计等等 基于Matlab的ARMA模型时间序列分析法仿真 ARMA模型时间序列分析法简称为时序分析法 是一种利用参数模型对有序随机振动响应数据进行处理 从而进行模态参数识别的方法 参数模型包括AR自回归模型 MA滑动平均模型和
  • llvm编译linux,在Linux上编译LLVM/Clang 8.0.0等全部源代码

    本教程使用的操作系统是Ubuntu Linux 18 04 2 LTS版本 编译器是GCC 6 5 0 不用新版的原因是某些代码不支持更高的版本 要编译的LLVM源代码是8 0 0 1 安装必要的软件 它们是 build essential
  • 使用mediapipe训练手指数字识别

    mediapipe手指数字识别 本文是从0开始创建一个识别手势的机器学习模型 为了识别手势 采用mediapipe模型 这个模型会返回手指的位置 之后再通过训练一个模型将这些位置分类得到手势 一 导入依赖 import cv2 import
  • js中的var详解

    var是js的一个关键字 它是用来声明变量的 声明一个变量有两种方式 第一种 var num 1 如果在方法中声明 则为局部变量 如果在全局中声明 则为全局变量 第二种 num 1 事实上这是对属性进行赋值操作 首先 它会尝试在当前作用域链
  • 操作符浅解

    1 移位操作符 作用的对象是数的二进制位 1 gt gt 向左边移动一位 左边丢弃 右边补0 相当于这个数乘以2移动n位 相当于乘以2的n次方 int main int a 2 int b a lt lt 1 打a的二进制向左移动一位 pr
  • vulnhub靶机练习-Me and My Girlfriend: 1

    vulnhub靶机练习 Me and My Girlfriend 1 靶机下载地址 https www vulnhub com entry me and my girlfriend 1 409 点击直接下载 靶机介绍 Description
  • 安达发

    APS Advanced Planning and Scheduling 先进计划与排程 是一种集成了生产计划 物料需求计划 MRP 库存控制和车间调度等功能的管理系统 在制造业中 物料清单 BOM 管理是APS系统中的一个重要组成部分 它
  • 电脑显示DNS服务器没检测到,连网时出现"该设备或资源(DNS 服务器)没有检测到有响应",怎么办?...

    连网时出现 该设备或资源 DNS 服务器 没有检测到有响应 怎么办 卡饭网 梦在深巷 2016 05 05 11 23 15 小编整理了以下2种解决方法大家可以参考以下 方法一 有可能是由于无线网络连接里面的DNS服务器错误 导致的网卡断网
  • 自动化遍历-appcrawler

    下载appclawler 下载地址 https pan baidu com s 1dE0JDCH list path 2F 查看帮助文档 java jar appcrawler 2 4 0 jar with dependencies jar
  • JS-ES6类

    使用js的class需注意以下几点 1 通过class关键字创建类 类名我们还是习惯性定义首字母大写 2 类里面有个constructor函数 可以接受传递过来的参数 同时返回实例对象 3 constructor 函数只要new生成实例时
  • seq2seq

    我的书 淘宝购买链接 当当购买链接 京东购买链接 seq2seq是通用编码器 解码器框架 encoder decoder framework 可以用在机器翻译 文本摘要 会话建模 图像描述 源码 https github com googl
  • 【编译原理】flex实现词法分析器

    flex自动实现词法分析器 FLEX 与 BISON 的使用 FLEX介绍 Flex是一个生成词法分析器的工具 它可以利用正则表达式来生成匹配相应字符串的C语言代码 其语法格式基本同Lex相同 单词的描述称为模式 Lexical Patte
  • 项目中好用的方法

    1 过滤 数组子项是对象的 对象有重复的 let arr res data filter function item index self return self findIndex el gt el applyPerson item ap