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.hqwc.cn/news/206995.html

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

相关文章

Raspberry Pi 5 新一代单板计算机:树莓派5代 (介绍、入门、解疑)

树莓派5代正式发布后&#xff0c;硬件和性能的全面升级让众多开发者们都想入手感受一波&#xff0c;外观上Raspberry Pi 5 与前代产品非常相似&#xff0c;不过&#xff0c;在保留信用卡大小的整体尺寸的同时&#xff0c;也更新了一些设计元素&#xff0c;以适应新芯片组的功能…

跨境电商客服系统:提升客户满意度与优化电商体验的关键

随着全球电子商务的快速发展&#xff0c;跨境电商已经成为新的商业发展趋势。在这个高度竞争的市场环境中&#xff0c;优质的客户服务成为区分优秀与平庸的关键因素。一个高效的跨境电商客服系统不仅可以提高客户满意度&#xff0c;还能帮助企业优化电商体验&#xff0c;进而提…

Stable Diffusion XL网络结构-超详细原创

强烈推荐先看本人的这篇 Stable Diffusion1.5网络结构-超详细原创-CSDN博客 1 Unet 1.1 详细整体结构 1.2 缩小版整体结构 以生成图像1024x1024为例&#xff0c;与SD1.5的3个CrossAttnDownBlock2D和CrossAttnUpBlock2D相比&#xff0c;SDXL只有2个&#xff0c;但SDXL的Cros…

如何做好性能压测?压测环境设计和搭建的7个步骤你知道吗?

简介&#xff1a;一般来说&#xff0c;保证执行性能压测的环境和生产环境高度一致是执行一次有效性能压测的首要原则。有时候&#xff0c;即便是压测环境和生产环境有很细微的差别&#xff0c;都有可能导致整个压测活动评测出来的结果不准确。 1. 性能环境要考虑的要素 1.1 系…

超级有效的12个远程团队管理技巧

​​​​​ 标题前言 随着远程办公的兴起&#xff0c;虚拟管理团队已成为新常态。尽管混合和远程工作正在成为新常态&#xff0c;但管理远程团队也面临着一系列挑战。本文我们将为您提供 12个技巧&#xff0c;帮助您成功管理远程团队并改善协作。此外&#xff0c;我们将讨论定…

Autocad2020切换经典界面

Autocad2020切换经典界面 1.更改1.1设置另存为 1.更改 1.1设置另存为

Android进阶知识:ANR的定位与解决

1、前言 ANR对于Android开发者来说一定不会陌生&#xff0c;从刚开始学习Android时的一不注意就ANR&#xff0c;到后来知道主线程不能进行耗时操作注意到这点后&#xff0c;程序出现ANR的情况就大大减少了&#xff0c;甚至于消失了。那么真的是只要在主线程做耗时操作就会产生…

10年开发工程师总结,8大主流程序员兼职平台,月入30k不是梦!

今年互联网行业陆续裁员减薪&#xff0c;许多人怨声载道的同时也开始另谋出路。而对于程序员更是应该提早做好准备&#xff0c;活跃在兼职接单的最前沿。 我们程序员是一门技术工种&#xff0c;与互联网其他行业相比薪水会相对高一点&#xff0c;不过钱也不是那么好赚的&#…

引爆关注,聚焦上海新闻媒体邀请

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 上海拥有众多的新闻媒体机构&#xff0c;包括报纸、电视、广播和网络媒体等。这些媒体在报道国内外新闻、传播信息等方面发挥着重要作用。 其中&#xff0c;上海电视台是上海最大的电视…

猫不长肉怎么办?增肥效果好、让猫咪迅速圆润起来的猫罐头分享!

秋冬来临&#xff0c;北方的猫咪有暖气还好过一些&#xff0c;南方的猫咪只能依靠自己的抵抗力来过冬。如果不囤点脂肪&#xff0c;怕冷的小猫咪要怎么过冬啊&#xff1f;有些猫咪无论怎么吃也吃不胖&#xff0c;真的让铲屎官很烦恼。想起我新手养猫的那段日子为了给我家猫咪增…

数字化转型:传统门店突破困境,实现可持续发展的必由之路

自2023年疫情管控基本解除以来&#xff0c;人民群众体验线下消费的意愿充分释放&#xff0c;夜经济、文娱文旅消费、暑期经济等线下消费场景持续走热。据统计&#xff0c;今年1-7月份&#xff0c;我国实体店零售额同比增长4.2%。虽然实体经济出现了消费复苏&#xff0c;发展向好…

CTF靶场搭建及Web赛题制作与终端docker环境部署

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 写在前面 ╔═══════════════════════════════════════════════════…