vxe编辑保存表格

业务需求:

        1、需要点击编辑时,全部表格显示编辑框,点击保存,全部保存。

        2、因为位置问题,产品经理把24小时分成了两行,开发就得分两个表格。列标题是写死的,文字偏移也是写死的,其他数据后台返回,两个表用了一个数据源。

columns使用了循环, edit-config 设置了 autoClear 属性为 false,在用户输入时,编辑器不会自动清除文本框中的内容。使用了默认插槽,v-if else显示输入框

 

        <div class="tableInfo"><div class="header"><div class="title">xxxx</div><div class="rightBtn"><el-button type="primary" @click="editTableTempUp()" v-if="edit">编辑</el-button><el-button type="primary" @click="clearEditTempUp()" v-if="!edit">保存</el-button></div></div><vxe-table ref="tableRefTempUp1" :data="tableDataTempUp" border height="100px" :column-config="{resizable: true}" :row-config="{ useKey: true }" stripe :menu-config="menuConfig" :edit-config="{ autoClear: false }"@menu-click="contextMenuClickEvent"><vxe-column v-for="(item, index) in columnDataHour1" :key="item.value" :field="item.value" show-overflow:edit-render="index === 0 ? null : { autofocus: '.vxe-input--inner' }" :title="item.name":align="index === 0 ? 'center' : 'right'" :width="index === 0 ? 60 : 68":fixed="index === 0 ? 'left' : (index === columnDataHour1.length - 1) ? 'right' : undefined"><template #default="{ row }"><span v-if="edit">{{ row[item.value] }}</span><vxe-input v-else-if="item.name !== '时间'" v-model="row[item.value]" type="float" placeholder="0.00":digits="2" :min="-10" :max="10"></vxe-input><span v-else>{{ row[item.value] }}</span></template></vxe-column></vxe-table><vxe-table ref="tableRefTempUp2" :data="tableDataTempUp" border height="100px" :column-config="{resizable: true}" :row-config="{ useKey: true }" stripe :auto-resize="true" :menu-config="menuConfig":edit-config="{ autoClear: false }" @menu-click="contextMenuClickEvent"><vxe-column v-for="(item, index) in columnDataHour2" :key="item.value" :field="item.value" show-overflow:edit-render="index === 0 ? null : { autofocus: '.vxe-input--inner' }" :title="item.name":align="index === 0 ? 'center' : 'right'" :width="index === 0 ? 60 : 68":fixed="index === 0 ? 'left' : (index === columnDataHour2.length - 1) ? 'right' : undefined"><template #default="{ row }"><span v-if="edit">{{ row[item.value] }}</span><vxe-input v-else-if="item.name !== '时间'" v-model="row[item.value]" type="float" placeholder="0.00":digits="2" :min="-10" :max="10"></vxe-input><span v-else>{{ row[item.value] }}</span></template></vxe-column></vxe-table></div>
<script lang='ts'>
import { reactive, toRefs, computed, watch, onMounted, onUnmounted } from 'vue'
import { getConTimeoffsetData, setConTimeoffsetData, getConTempTrend } from '@/api/RunMonitor/StationMonitor/controlStrategy';
import { ElMessage, ElMessageBox } from 'element-plus'
import moment from 'moment';
import { cloneDeep, sortBy, mean } from 'lodash-es'
import { Echart } from '@/components/Echart'
import { set } from 'lodash-es'
import { scatterChartOption, scatterChartOptionAvg } from './chartOptions.js'export default {components: {Echart,PatrolDialog,},emits: ['onClose'],setup(props, { emit }) {const state = reactive({// refechartsTempUp: null,tableRefTempUp1: null,tableRefTempUp2: null,chartLeftData: scatterChartOption,supTempLine: [],supTempPoint: [],avgTempLine: [],avgTempPoint: [],// datashow: false,edit: true,edit2: true,rowInfo: {}, // 点击的行数据tableDataTempUp: [],tableDataTempAvg: [],resData: [], // 接口数据tableData: [], // table数据,倒序columnDataHour1: [{ name: '时间', value: 'getTime' },],columnDataHour2: [{ name: '时间', value: 'getTime' },],menuConfig: {className: 'my-menus',body: {options: [[{ code: 'refresh', name: '表格刷新' },// { code: 'exportCurrent', name: '导出当前页', },]]},},} as any)const columnDataHour1 = computed(() => {for (let i = 0; i < 12; i++) {state.columnDataHour1.push({ name: `${i}时`, value: `h${i}` })}return state.columnDataHour1})const columnDataHour2 = computed(() => {for (let i = 12; i < 24; i++) {state.columnDataHour2.push({ name: `${i}时`, value: `h${i}` })}return state.columnDataHour2})const methods = {async open({ row }) {state.rowInfo = row;methods.getTableData()methods.getChartData()// 打开弹窗state.show = true;},// 编辑editTableTempUp() {state.edit = false;},// 取消编辑clearEditTempUp() {state.edit = true;// let tableData = state.tableRef.getTableData().tableData;let tableData = cloneDeep(state.tableDataTempUp);tableData.forEach(element => {for (let key in element) {if (element[key] === '') {element[key] = '0.00'}else if (key === 'conid') {element[key] = state.rowInfo?.conId} else if (key === 'mode') {element[key] = 0 // 供温}}});delete tableData[0].getTimedelete tableData[0].getimemethods.setTableData(tableData[0])},// 获取表格数据getTableData() {getConTimeoffsetData({conid: state.rowInfo?.conId,}).then(res => {if (res && res.data.length > 0) {// state.resData = res.data || [];let tableData = cloneDeep(res.data);tableData.forEach(item => {if (item.mode === 0) {// 0 表示供温曲线;1表示均温曲线for (let key in item) {if (!item[key] && item[key] !== 'conid' && item[key] !== 'getime' && item[key] !== 'mode') {item[key] = '0.00';} else {item[key] = Number(item[key]).toFixed(2);}}item.getTime = '偏移'state.tableDataTempUp = [item]} else {for (let key in item) {if (!item[key] && item[key] !== 'conid' && item[key] !== 'getime' && item[key] !== 'mode') {item[key] = '0.00';} else {item[key] = Number(item[key]).toFixed(2);}}item.getTime = '偏移'state.tableDataTempAvg = [item];}});} else {state.tableDataTempUp = [];state.tableDataTempAvg = [];}}).catch(e => {console.log(e)state.tableDataTempUp = [];state.tableDataTempAvg = [];})},// 设置表格数据setTableData(data) {setConTimeoffsetData(data).then(res => {if (res.code === '0') {ElMessage.success(res?.msg)methods.getTableData()} else {ElMessage.error(res?.msg)}}).catch(e => {console.log(e)ElMessage.error(e)})},// 获取图表数据getChartData() {getConTempTrend({conid: state.rowInfo?.conId,}).then(res => {if (res && res.data) {state.resData = cloneDeep(res.data);const supTemp = state.resData.supTempLine.concat(state.resData.supTempPoint)let supTempMax = Math.max(...supTemp.map(item => item.y));let supTempMin = Math.min(...supTemp.map(item => item.y));const yAxisSupMin = Math.round(supTempMin * 0.9)const yAxisSupMax = Math.round(supTempMax * 1.1)const seriesSupDataPoint = state.resData.supTempPoint.map(item => [item.x, item.y]);const seriesSupDataLine = state.resData.supTempLine.map(item => [item.x, item.y]);// 供温set(state.chartLeftData, 'yAxis[0].min', yAxisSupMin)set(state.chartLeftData, 'yAxis[0].max', yAxisSupMax)set(state.chartLeftData, 'series[1]data', seriesSupDataPoint)set(state.chartLeftData, 'series[0]data', seriesSupDataLine)} else {state.resData = [];}}).catch(e => {console.log(e)state.resData = [];})},}return {...toRefs(state),...methods,columnDataHour1,columnDataHour2,}}
}
</script>

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

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

相关文章

服务器主机安全的重要性及防护策略

在数字化时代&#xff0c;服务器主机安全是任何组织都必须高度重视的问题。无论是大型企业还是小型企业&#xff0c;无论是政府机构还是个人用户&#xff0c;都需要确保其服务器主机的安全&#xff0c;以防止数据泄露、网络攻击和系统瘫痪等严重后果。 一、服务器主机安全的重…

__int128类型movaps指令crash

结论 在使用__int128时&#xff0c;如果__int128类型的内存起始地址不是按16字节对齐的话&#xff0c;有些汇编指令会抛出SIGSEGV使程序crash。 malloc在64位系统中申请的内存地址&#xff0c;是按16字节对齐的&#xff0c;但一般使用时经常会申请一块内存自己切割使用&#…

static和extern

1.extern extern 是⽤来声明外部符号的&#xff0c;如果⼀个全局的符号在A⽂件中定义的&#xff0c;在B⽂件中想使⽤&#xff0c;就可以使⽤ extern 进⾏声明&#xff0c;然后使⽤。 即在一个源文件中想要使用另一个源文件&#xff0c;即可通过这个extern来声明使用。 2.st…

未来制造业的新引擎:工业机器人控制解决方案

制造业正经历着一场革命性的变革 在这个变革的浪潮中&#xff0c;工业机器人成为推动制造业高效生产的关键力量。然而&#xff0c;要发挥机器人的最大潜力&#xff0c;一个强大而智能的控制系统是必不可少的。在这个领域&#xff0c;新一代的工业机器人控制解决方案正崭露头角&…

学习MySQL先有全局观,细说其发展历程及特点

学习MySQL先有全局观&#xff0c;细说其发展历程及特点 一、枝繁叶茂的MySQL家族1. 发展历程2. 分支版本 二、特点分析1. 常用数据库2. 选型角度及场景 三、三大组成部分四、总结 相信很多同学在接触编程之初&#xff0c;就接触过数据库&#xff0c;而对于其中关系型数据库中的…

这样写postman实现参数化,阿里p8都直呼牛逼

什么时候会用到参数化 比如&#xff1a;一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块&#xff1a;正确的用户名&#xff0c;密码 成功&#xff1b;错误的用户名&#xff0c;正确的密码 失败 postman实现参数化 在实际的接口测试中&#xff0c;部分参数…

你的关联申请已发起,请等待企业微信的管理员确认你的申请

微信支付对接时&#xff0c;需要申请AppID,具体在下面的位置&#xff1a; 关联AppID&#xff0c;发起申请时&#xff0c;会提示这么一句话&#xff1a; 此时需要登录企业微信网页版&#xff0c;使用注册人的企业微信扫码登录进去&#xff0c;然后按照下面的步骤操作即可。 点击…

iEnglish全国ETP大赛:教育游戏助力英语习得

“seesaw,abacus,sword,feather,frog,lion,mouse……”11月18日,经过3局的激烈较量,“以过客之名队”的胡玲、黄长翔、林家慷率先晋级“玩转英语,用iEnglish”第三届全国ETP大赛的16强,在过去的周末中,还有TIK徘徊者队、不负昭华队、温柔杀戮者队先后晋级。据悉,根据活动规则,在…

电脑内存升级

ddr代兼容 自从DDR内存时代开启之后&#xff0c;只要满足内存的插槽规格相同(DDR3或DDR4或DDR5即为内存规格)这一条件&#xff0c;不同品牌、不同频率以及不同容量的茶品都可以一起使用&#xff0c;除了品牌和容量的影响之外&#xff0c;不同频率的搭配可能会造成性能方面的影…

面试官:什么是三色标记

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

HCIA-实验命令基础学习:

视频学习&#xff1a; 第一部分&#xff1a;基础学习。 19——子网掩码。 27——防火墙配置&#xff1a; 32——企业级路由器配置&#xff1a; 基础实验完成&#xff1a;&#xff08;完成以下目录对应的实验&#xff0c;第一部分基础实验就完成。&#xff09; 方法&#xff…

ILI9225 TFT显示屏16位并口方式驱动

所用屏及资料如后图&#xff1a; ILI9225&#xff0c;176*220&#xff0c;8位或16位并口屏&#xff0c;IM0接GND&#xff0c;电源及背光接3.3v 主控&#xff1a;CH32V307驱动&#xff08;库文件和STM32基本一样&#xff09; 一、源码 ILI9225.c #include "ILI9225.h&quo…

【SpringCloud】认识微服务、服务拆分以及远程调用

SpringCloud 1.认识微服务 1.1单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署 单体架构的优缺点&#xff1a; **优点&#xff1a;**架构简单&#xff0c;部署成本低 **缺点&#xff1a;**耦合度高&#xff08;维护困难&…

笔记59:序列到序列学习Seq2seq

本地笔记地址&#xff1a;D:\work_file\&#xff08;4&#xff09;DeepLearning_Learning\03_个人笔记\3.循环神经网络\第9章&#xff1a;动手学深度学习~现代循环神经网络 a a a a a a a a a a a a a a a

C++ Day04 this指针,友元函数,重载

this指针 概念 谁调用 this 所在的函数 ,this 就存储谁的地址 特点 1, 在当前类的非静态成员函数中调用本类非静态成员时 , 默认有 this 关键字 2, 静态成员函数 , 没有 this 指针。 示例 #include <iostream> #include <cstring> using namespace std; class S…

算法刷题-动态规划2

算法刷题-动态规划2 珠宝的最高价值下降路径最小和 珠宝的最高价值 题目 大佬思路 多开一行使得代码更加的简洁 移动到右侧和下侧 dp[ i ][ j ]有两种情况&#xff1a; 第一种是从上面来的礼物最大价值&#xff1a;dp[ i ][ j ] dp[ i - 1 ][ j ] g[ i ][ j ] 第二种是从左…

握住音乐的法宝 - 简谱

简谱是音乐学习中至关重要的记谱法。除了简谱&#xff0c;还有吉他和钢琴的五线谱&#xff0c;以及我最喜欢的古琴减字谱等其他记谱方式。如果你对音乐感兴趣&#xff0c;一起学习吧&#xff0c;我不允许你是一个文盲。 一、调拍号 “1C 4/4”即为调拍号&#xff0c;调拍号分…

opencv-直方图均衡化

直方图均衡化是一种用于增强图像对比度的图像处理技术。它通过调整图像的灰度级别分布&#xff0c;使得图像中各个灰度级别的像素分布更均匀&#xff0c;从而提高图像的对比度。 在OpenCV中&#xff0c;你可以使用cv2.equalizeHist()函数来进行直方图均衡化。 以下是一个简单…

opencv-2D直方图

cv2.calcHist() 是 OpenCV 中用于计算直方图的函数。它可以计算一维或多维直方图&#xff0c;用于分析图像中像素值的分布。 基本的语法如下&#xff1a; hist cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])参数说明&#xff1a; images:…