记录vue开发实例

封装的表格组件

<template><div><div style="width: 100%" v-if="showList"><el-table v-loading.lock="loading" :data="dataList":header-cell-style="{background: '#F2FCFE',fontSize: '14px',color: '#50606D'}":row-style="{ height: '80px' }" class="menu_table"height="550"><el-table-column label="序号" type="index" width="80"></el-table-column><el-table-column width="1"></el-table-column><li v-for="(item,index) in settingOpts" :key="index"><el-table-column :key="Math.random()" :width="item.width" :fixed="item.fixed" :label="item.label"><template slot-scope="scope"><span v-if="item.isDisplay && item.isDisplay === true">{{(scope.row[item.id] && scope.row[item.id] != null && scope.row[item.id] != "") ? scope.row[item.id] : "--"}}</span><span v-if="item.isNeedMethod && item.isNeedMethod === true">{{ $parent.findMethod(item.methodName, scope.row[item.id]) }}</span><span v-if="item.isStatus && item.isStatus === true">{{ $parent.findMethod(item.statusMethodName,scope.row[item.id]) }}</span><span v-if="item.isSpecialStatus && item.isSpecialStatus === true" :class="$parent.findMethod(item.specialClass,scope.row)">{{ $parent.findMethod(item.specialMethod,scope.row) }}</span><span v-if="item.isNeedBack && item.isNeedBack === true" :class="$parent.findMethod(item.classMethod,scope.row)">{{ scope.row[item.displayName] }}</span><div v-if="item.isSwitch && item.isSwitch === true"><el-switch :value="scope.row[item.id].val" @input="$parent.findMethod(item.switchInfo.switchMethod,scope.row)" :active-value="item.switchInfo.activeVal" :inactive-value="item.switchInfo.inactiveVal" :active-color="item.switchInfo.activeColor" :inactive-color="item.switchInfo.inactiveColor"></el-switch></div><div v-if="item.isImg && item.isImg === true"><p v-if="(!scope.row[item.id] || scope.row[item.id] == null || scope.row[item.id].length== '')">暂无人脸</p><el-popover v-else aria-placeholder="top-start" trigger="hover"><div class="row_reserve"><img class="big-mig" :src="scope.row[item.id]"></div><div slot="reference"><img style="width: 50px;height: 50px;" :src="scope.row[item.id]"></div></el-popover></div><div v-if="item.isOperation && item.isOperation === true" class="flex jc-sa"><div v-for="(child,index) in item.operationOpts" :key="index" v-if="showOperation(child,scope)" style="color: #0080F7; cursor: pointer"><span @click="$parent.findMethod(child.method,scope.row)">{{ child.isNeedSpecial && child.isNeedSpecial === true ? $parent.findMethod(child.specialDisplay,scope.row) : child.name}}</span></div></div></template></el-table-column></li><template slot="empty"><div class="aic mt-20 mb-20"><img src="@/assets/empty.png" style="width: 45px; height: 36px" alt="" /><p style="margin: 0;font-size: 14px;height: 16px;line-height: 16px;color: #aba9bb;">暂无数据</p></div></template></el-table></div></div>
</template><script>/*项目列表参数属性详解* id String 用于关联props的属性名称* label String table中展示的列名* fixed Boolean/String 是否固定列,true默认左固定,可接收left或right* isDisplay Boolean 该属性是否可以直接用于展示* isNeedMethod Boolean 该属性是否需要经过自定义加工* methodName String/Object 自定义加工方法,若isNeedMethod为true,则须提供方法名称,不需要就默认null。* isStatus Boolean 该属性是否为状态值* statusMethodName String 目前状态的返回值在各列表中不统一,情况多样,所以单独提供一个加工方法。* isSpecialStatus Boolean 该状态是否需要特殊展示* specialClass String 特殊展示时的样式* specialMethod String 特殊展示时的方法(有些可能需要特殊处理)* isSwitch Boolean 是否为Switch开关类型* switchInfo Object switch开关需要用到的信息(激活值、颜色等),可参考客户(customer)模块Eg:switchInfo: {activeVal: "0",inactiveVal: "1",activeColor: "#13ce66",inactiveColor: "#DCDFE6",switchMethod: "updateCustomerStatus",},* isOperation Boolean 是否为操作列* operationOpts Array<object> 操作列所需要的方法、展示名称、是否需要条件筛选及筛选条件,可参考访客(visitor)模块operationOpts:[{method String  操作列关联方法名name String 操作列名称isCondition Boolean 该操作是否需要展示条件condition Function 展示条件函数isNeedSpecial Boolean 该操作是否需要特殊展示(如操作名称随状态值进行改变)specialDisplay String 进行特殊展示的方法名}]Eg: operationOpts: [{method: "auditVisitor",name: "审核",isCondition:true,condition:function(data){return data.status == 0}},{method: "editVisitor",name: "编辑",isCondition:true,condition:function(data){return data.status != 1}},},],* isImg Boolean 是否为图片* isNeedBack Boolean 字段是否需要背景* classMethod String 切换样式的方法* displayName String 属性展示名(有些列需要用到两个属性,此处填写所需要用到的另一个属性key)*/
export default {name: "TableList",props: {dataList: {type: Array,required: true,},showList: {type: Boolean,required: true,},loading: {type: Boolean,required: true,},settingOpts: {type: Array,required: true,},},data() {return {};},methods: {showOperation(child, scope) {if (child.isCondition && child.isCondition === true) {return child.condition(scope.row);} else {return true;}},},created() {},
};
</script><style lang="less" scoped>
.menu_table {width: 98%;margin: 0 auto;margin-top: 20px;
}
div::-webkit-scrollbar {// 直接修改样式就可以了width: 8px;display: none;
}// 	滚动条
::-webkit-scrollbar {width: 40px;// background-color: red;
}// 滚动条轨道
::-webkit-scrollbar-track {width: 40px;border-radius: 40px;background-color: #f4f8f7;
}// 滚动条滑块
::-webkit-scrollbar-thumb {border: 5px solid #c1c1c1;border-radius: 40px;// background-color: yellow;
}.connect {padding-left: 10px;padding-right: 10px;border-radius: 4px;background-color: #d6edff;
}.gateway {padding-left: 10px;padding-right: 10px;border-radius: 4px;background-color: #ffdde0;
}.gatewaySon {padding-left: 10px;padding-right: 10px;border-radius: 4px;background-color: #ffe8cb;
}.open {color: #16dbcc;
}.close {color: #e52a44;
}
</style>

 引入使用

 

 element组件fixed="right" 表格错位

 解决方法

1,

2,

3,

 通过数组数量循环input标签数量填写表单

paramsInfo.fieldList的值

targetDataList的值

 表单循环targetDataList获取 label值(即有多少个input标签的生成),表单填写的内容绑定在 paramsInfo.fieldList[index].fieldValue

        <el-form-item v-for="(column, index) in targetDataList" :key="index" :label="column.fieldDesc"><el-input :id="column.targetId"v-model.trim="paramsInfo.fieldList[index].fieldValue":type="column.fieldName"style="width: 100%;"></el-input></el-form-item>

 根据表头获取输入框数量

 根据表头的数量,新增的输入框数量

    //增加按钮addBtn() {// 检查 scopeBranchLists 不为空且包含 fieldName 属性if (Array.isArray(this.scopeBranchLists) && this.scopeBranchLists.length > 0) {// 使用 map 函数从 scopeBranchLists 中提取 fieldName 值//fieldNames = ['index_name', 'dept_name', 'comment', 'dept_type', 'options', 'unit', 'source_priority']// let fieldNames = this.scopeBranchLists.reduce((acc, item) => {//   acc[item.fieldName] = '';//   return acc;// }, {});const fieldNames = this.scopeBranchLists.map(item => item.fieldName);var fieldNamesObj = {};for (var i = 0; i < fieldNames.length; i++) {fieldNamesObj[fieldNames[i]] = null;}//this.formData = fieldNamesObjthis.rows.push(fieldNamesObj);}},

 表头数据 

<div v-for="(item, index) in scopeBranchLists" :key="index" style="margin-right: 3%;width: 140px;">{{ item.fieldDesc }}
</div>

 生成的input框数量(5个表头,生成对应五个输入框 为一个对象,最后放入rows数组)

<table><tr v-for="(obj, rowIndex) in rows" :key="rowIndex"><tdstyle="display: flex;justify-content: space-between;padding-bottom: 20px; border-bottom: 1px solid #e4e7ed;"><el-inputv-for="(value, key) in obj":key="key"v-model.trim="obj[key]"style="margin-right: 28px;margin-top: 5px;height: 30px;width: 140px;"type="text"/><div style="width: 4%;margin-top: 10px"><img src="../../../assets/cancel.png" style="width: 18px;height: 18px;cursor: pointer;"@click="deleteDict(rowIndex)"/></div></td></tr>
</table>

完整代码

          <div><div style="display: flex;padding-top: 3px;padding-bottom: 8px;border-bottom: 1px solid #ccc;background-color: #f2fcfe; color: #50606d"><div v-for="(item, index) in scopeBranchLists" :key="index" style="margin-right: 3%;width: 140px;">{{ item.fieldDesc }}</div></div><table><tr v-for="(obj, rowIndex) in rows" :key="rowIndex"><tdstyle="display: flex;justify-content: space-between;padding-bottom: 20px; border-bottom: 1px solid #e4e7ed;"><el-inputv-for="(value, key) in obj":key="key"v-model.trim="obj[key]"style="margin-right: 28px;margin-top: 5px;height: 30px;width: 140px;"type="text"/><div style="width: 4%;margin-top: 10px"><img src="../../../assets/cancel.png" style="width: 18px;height: 18px;cursor: pointer;"@click="deleteDict(rowIndex)"/></div></td></tr></table></div>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/97438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sed 命令

sed是Stream Editor&#xff08;字符流编辑器&#xff09;的缩写&#xff0c;简称流编辑器。 sed 命令是一个面向行处理的工具&#xff0c;它以“行”为处理单位&#xff0c;针对每一行进行处理&#xff0c;处理后的结果会输出到标准输出stdout。sed 命令是很懂礼貌的一个命令&…

【微服务】七. http客户端Feign

7.1 基于Feign远程调用 RestTimeplate方式调用存在的问题 先来看以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http://userservice/user"order.getUserId(); User user restTemplate.getForObject(url,User.class);存在下面的问题&#xf…

世界前沿技术发展报告2023《世界信息技术发展报告》(六)网络与通信技术

&#xff08;六&#xff09;网络与通信技术 1. 概述2. 5G与光通讯2.1 美国研究人员利用电磁拓扑绝缘体使5G频谱带宽翻倍2.2 日本东京工业大学推出可接入5G网络的高频收发器2.3 美国得克萨斯农工大学通过波束管理改进5G毫米波通信2.4 联发科完成全球首次5G NTN卫星手机连线测试2…

SpringBoot, EventListener事件监听的使用

1、背景 在开发工作中&#xff0c;会遇到一种场景&#xff0c;做完某一件事情以后&#xff0c;需要广播一些消息或者通知&#xff0c;告诉其他的模块进行一些事件处理&#xff0c;一般来说&#xff0c;可以一个一个发送请求去通知&#xff0c;但是有一种更好的方式&#xff0c;…

【WinRAR】去除请购买WinRAR许可

新建rarreg.key文件 在WinRAR安装目录新建rarreg.key文件&#xff0c;文件内容如下: RAR registration datawncnUnlimited Company LicenseUID1b064ef8b57de3ae9b5264122122509b52e35fd885373b214a4a64cc2fc1284b77ed14fa2066ebfca6509f9813b32960fce6cb5ffde62890079861be57…

Win11右键恢复Win10老版本

Win11右键恢复Win10老版本 最近自己更新了windows11的OS,整体感觉都是不错的,但是就是每次右键菜单我都要再次点击下展开更多选项,这对追求极简主义的我,就是不爽, 手动恢复win10操作吧! 第一种:创建文件(简单快速) 1.新建一个resoreRightKey.reg文件,并在里面填入如下代码 W…

【系统架构】软件架构的演化和维护

导读&#xff1a;本文整理关于软件架构的演化和维护知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑&#xff0c;基于大量项目实践经验基础上&#xff0c;不断加深理论体系的理解&#xff0c;从而能够创造新解决系统相关问题。 目录 1、软件架构演化和定义 …

Python接口自动化测试 —— Selenium+pytest+数据驱动

主流自动化框架 selenium &#xff1a;web端自动化框架 &#xff0c;&#xff08;行业里面最核心的框架&#xff09; appium &#xff1a;手机app端框架 requests &#xff1a;接口测试 selenium 工具类封装 selenium提供了很多方法供我们去完成网页元素的操作&#xff0c; …

延迟队列

KEYS命令和SCAN命令都可以用于在Redis中查找匹配指定模式的键名&#xff0c;但它们之间有以下区别&#xff1a; 1. 阻塞 vs 非阻塞&#xff1a;KEYS命令是一个阻塞操作&#xff0c;它会遍历整个键空间来查找与给定模式匹配的键名。在执行KEYS命令期间&#xff0c;Redis服务器会…

Gitlab+Jenkins自动化部署,解放双手

项目打包 ​ 在部署项目前需要对源码进行打包&#xff0c;一个简单的SpringBoot项目默认是打包为jar包&#xff0c;也就是在pom.xml中的<packaging>jar</packaging>方式&#xff0c;当然也会有一些打包成war包方式&#xff0c;使用外置的Tomcat应用服务器部署war包…

【Redis】基础数据结构-quicklist

Redis List 在Redis3.2版之前&#xff0c;Redis使用压缩列表和双向链表作为List的底层实现。当元素个数比较少并且元素长度比较小时&#xff0c;Redis使用压缩列表实现&#xff0c;否则Redis使用双向链表实现。 ziplist存在问题 不能保存过多的元素&#xff0c;否则查找复杂度…

ArcGIS Engine:报错无法嵌入互操作类型“ESRI.ArcGIS.Geometry.EnvelopeClass”。请改用适用的接口。

此错误是由于尝试直接实例化ArcGIS COM组件的某些互操作类引起的。这在.NET Framework 4及更高版本中是不被推荐的。 为了解决此问题&#xff0c;你需要确保在工程的引用中将ArcGIS的互操作类型设置为“不嵌入”。 按照以下步骤操作&#xff1a; 在解决方案资源管理器中找到…

Python实现JavaScript中AES加密有关填充问题

1. 先展示一下JS端的格式&#xff08;没找到没混淆的。。。&#xff0c;将就看吧&#xff09; 2. 在python加密中是没有选择填充模式的&#xff0c;需要自己来填充 3. 对加密不懂的朋友可能跟我一样刚开始很懵逼&#xff0c;因为遇到的基本都是pksc7填充模式&#xff0c;但是网…

独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”

各位CSDN的uu们你们好呀&#xff0c;今天依旧是小雅兰的51单片机的内容&#xff0c;内容主要是&#xff1a;独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位&#xff0c;下面&#xff0c;让我们进入51单片机的世界吧&#xff01;&a…

大数据技术标准推进委员会发布《地球大数据白皮书(2023年)》

导读 地球大数据的应用领域范围广阔&#xff0c;包括生态保护、自然资源管理、气象服务、城市规划、应急容灾等方面&#xff0c;但目前仍处于发展初期&#xff0c;面临着数据来源、结构多样&#xff0c;数据管理门槛高&#xff0c;数据应用场景复杂、落地方法论较少等痛点。如…

使用postman 调用 Webservice 接口

1. 先在浏览器地址栏 访问你的webService地址 地址格式: http://127.0.0.1:8092/xxxx/ws(这个自己的决定)/xxxxXccv?wsdl 2. post man POST 访问wwebService接口 地址格式: http://127.0.0.1:8092/xxxx/ws(这个自己的决定)/xxxxXccv <soapenv:Envelope xmlns:soapenv…

PCB放置过孔技巧

合理的放置过孔能有效的节约面积。 我们根据嘉立创的pcb工艺能力中写出单双面板最小过孔为0.3mm(内径)/0.5mm(外径) 设置过孔尺寸外直径为24mil&#xff08;0.61mm&#xff09;&#xff09;内直径为12mil&#xff08;0.305mm&#xff09; 嘉立创PCB工艺加工能力范围说明-嘉立…

Java常见设计模式

单例模式&#xff1a;程序自始至终只创建一个对象。 应用场景&#xff1a;1.整个程序运行中只允许一个类的实例时 2.需要频繁实例化然后销毁的对象 3.创建对象时耗时过多但又经常用到的对象 4.方便资源相互通信的环境 懒汉式线程不安全问题解决方案&#xff1a; 双重检查加锁机…

Spring AOP 中被代理的对象一定是单例吗?

今天我们来思考这样一个问题&#xff1a;在 Spring AOP 中&#xff0c;被代理的对象是单例的吗&#xff1f;当我们每次获取到代理对象的时候&#xff0c;都会重新获取一个新的被代理对象吗&#xff1f;还是被代理的对象始终是同一个&#xff1f; 为什么要思考这个问题&#xf…

1200*C. Challenging Cliffs(模拟构造贪心)

Problem - 1537C - Codeforces Challenging Cliffs - 洛谷 解析&#xff1a; 排序数组&#xff0c;然后找出间隔最短的两个相邻的数 a&#xff0c;b&#xff0c;c&#xff0c;d&#xff0c;e&#xff0c;f &#xff08;假设b&#xff0c;c为差最小的两个数&#xff09;。 然后…