根据多选的选择,动态匹配/生成接口里面的数据

2024-06-18 13:36

本文主要是介绍根据多选的选择,动态匹配/生成接口里面的数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近遇到一个需求,一开始以为接口里面只会返回三个数据,就直接调取接口,页面写三个html结构接口数据放在那里了,后来接口又加了两条,因为前端这边没写结构,就没出来…
所以直接给他改为动态匹配的,不管后续后台这边添加多少条,都能保证数据出来
我的路径:之后看src\views\partner\partner\index.vue

页面为这样的:
在这里插入图片描述
根据选中的,去匹配下面的内容显示; 后台分了两个接口去区分: 一个接口显示上面的name部分
一个是下面的期数,期数接口传递当前id,上面有多少个name,就把他的相应id传递给第二个接口
第一个接口:
在这里插入图片描述
第二个接口:
在这里插入图片描述
根据他上面list里面有多少个id就会匹配当前id的全部期数

接下来直接上代码:

        <el-form-item required label="配置"><el-checkbox-groupv-model="checkList"class="checkbox-group"@change="updatePartnerProducts"><template v-for="(item, index) in labelsList"><el-checkboxv-if="item.code !== 'INTEGRAL_ENJOY_FIRST'":key="index":label="item.id">{{ item.name }}</el-checkbox></template></el-checkbox-group><divv-for="(item, index) in checkListOrder":key="index + 'check'"class="settings-container"><div v-if="item == 3"><el-form-item label="使用条件:" required class="settings-container"><el-radio-groupv-model="cashRadio"class="vert-radio-group"@change="handleCashRadioChange"><el-radio label="LIMIT">积分等级限制<span style="margin-left: 30px">等级达到:</span><el-selectv-model="level"style="width: 170px"clearableplaceholder="请选择"><el-optionv-for="item in levels":key="item.value":label="item.label":value="item.value"/></el-select></el-radio><el-radio label="DEDUCT">抵扣积分<span style="margin-left: 30px">需要抵扣积分:</span><el-inputv-model="integralNum"placeholder="请输入积分"style="width: 170px"autocomplete="off"/></el-radio><el-radio label="NON"></el-radio></el-radio-group></el-form-item></div><div><el-form-itemlabel-width="170px":label="labelNames[`checkListSetting${item}`] + '设置:'"requiredclass="settings-container"><el-checkbox-groupv-model="getDynamicCheckListSettings()[`checkListSetting${item}`]"@change="updatePartnerProducts"class="checkbox-grid"><el-checkboxv-for="n in dynamicAllTerms[`allTerms${item}`]"@change="handleCheckboxChange(item, n, $event)":key="n":label="n">{{ n }}</el-checkbox></el-checkbox-group></el-form-item></div></div></el-form-item>
data(){
return{checkList: [],//当前选中的iddynamicData: {},}
}
  created() {listProduct({ pageNum: 1, pageSize: 10, type: "CASH_LOAN" }).then((res) => {this.labelsList = res.rows;console.log("类型期数返回的res---", res);return Promise.all(this.labelsList.map((label) => listProductParams(label.id)));  //promise.all()等所有的请求执行完毕之后才会执行下面的}).then((products) => {console.log("products的值===", products);this.originProducts = cloneDeep(products);products.forEach((res, i) => {const termList = res.data.map((item) => item.term); //拿到他们的期数let list = res.data || [];if (list.length > 0) {let flist = this.labelsList.filter((item1) => item1.id == list[0].productId);this.$set(this.dynamicData, `checkListSetting${flist[0].id}`, termList); //选中this.$set(this.dynamicData,`allTerms${flist[0].id}`,Array.from(new Set(termList))); //循环期数}});});},
  computed: {后续一个排序问题,用这段解决checkListOrder() {let ids = this.labelsList.map((item) => item.id);return this.sortByOrder(this.checkList, ids);},// 根据id匹配namelabelNames() {let obj = this.labelsList.reduce((acc, item) => {acc[`checkListSetting${item.id}`] = item.name; // 初始化每个动态数组return acc;}, {});return obj;},//动态期数dynamicAllTerms() {let obj = this.checkList.reduce((acc, item) => {acc[`allTerms${item}`] = this.dynamicData[`allTerms${item}`]; return acc;}, {});return obj;},},
    getDynamicCheckListSettings() {let obj = this.checkList.reduce((acc, item) => {acc[`checkListSetting${item}`] = this.dynamicData[`checkListSetting${item}`];return acc;}, {});return obj;},handleCheckboxChange(item, n, event) {this.updateDynamicData(item, n, event);},updateDynamicData(item, n, value) {// 强制双向绑定if (value) {let list = cloneDeep(this.getDynamicCheckListSettings()[`checkListSetting${item}`]);list.push(n);this.$set(this.dynamicData, `checkListSetting${item}`, list);} else {let list = cloneDeep(this.getDynamicCheckListSettings()[`checkListSetting${item}`]);list = list.filter((item1) => item1 != n);this.$set(this.dynamicData, `checkListSetting${item}`, list);}},
//watch也要监听他的值,当选择发生变化时,获取最近的数据watch: {level: {handler() {this.updatePartnerProducts();},deep: true,},integralNum: {handler() {this.updatePartnerProducts();},deep: true,},checkList: {handler() {this.updatePartnerProducts();},deep: true,},cashRadio: {handler() {this.updatePartnerProducts();},deep: true,},},
    updatePartnerProducts() {// 清空partnerProductsthis.form.partnerProducts = [];this.checkList.forEach((item) => {const product = this.labelsList.find((item1) => item1.id == item);if (product) {let newObj = {productCode: product.code,// useCondition: this.cashRadio,productType: product.type,productId: product.id,conditionPeriods: this.getDynamicCheckListSettings()[`checkListSetting${item}`].join(","),};if (item == 3) {newObj = {...newObj,useCondition: this.cashRadio,};if (this.cashRadio === "LIMIT") {newObj = {...newObj,conditionVal: this.level,};} else if (this.cashRadio === "DEDUCT") {newObj = {...newObj,conditionVal: this.integralNum,};}}this.form.partnerProducts.push(newObj);}});},

编辑回显方法:

    initFormValues(partnerProducts) {this.checkList = partnerProducts.map((item) => item.productId || "").filter((e) => e);partnerProducts.forEach((item) => {this.$set(this.dynamicData,`checkListSetting${item.productId}`,item.conditionPeriods.split(",").map(Number));if (item.productId == 3) {this.cashRadio = item.useCondition;if (this.cashRadio === "LIMIT") this.level = item.conditionVal;if (this.cashRadio === "DEDUCT") {this.integralNum = item.conditionVal;}}});},

这篇关于根据多选的选择,动态匹配/生成接口里面的数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072137

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W