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

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

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ