opensingleComDialog方法解析优化

下面是对 opensingleComDialog 方法的详细解析,并给出优化建议和优化后的代码。


方法解析

作用

opensingleComDialog(index) 方法用于在输入框失去焦点时(@blur 事件)自动根据输入内容进行唯一性查询,如果查到唯一结果则自动填充相关字段,减少用户手动选择的步骤。

主要逻辑

  1. 防止重复弹窗
    首先判断当前是否有任意一个弹窗(comDialog、comDialog1…comDialog10)已经打开,若有则直接返回,避免重复弹窗。

  2. 根据 index 区分不同字段的唯一性查询

    • 0:保险公司代码/名称
    • 1:保险机构代码/名称
    • 2:佰盈机构代码/名称
    • 3~8:新增/修改弹窗下的公司、机构、佰盈机构
    • 9~10:险种代码/名称
    • 11~12:险种代码/名称(特殊处理)
  3. 唯一性查询
    每个 case 都会调用不同的接口(如 commissionConfigdblqueryCom1commissionConfigdblqueryCom2 等),传入当前输入的内容,clickType 设为 1,表示唯一性校验。
    如果接口返回的数据只有一条,则自动填充对应的字段。


存在的问题

  1. 大量重复代码
    每个 case 结构类似,只有参数和回填字段不同,代码冗余严重。
  2. 维护性差
    新增字段或调整字段时需要多处修改,容易出错。
  3. 部分 case 逻辑可以合并
    比如公司、机构、佰盈机构的唯一性校验逻辑基本一致。

优化思路

  1. 抽取通用唯一性校验方法
    将唯一性校验的接口调用和回填逻辑抽成一个通用方法。
  2. 用配置对象映射 index 与参数、回填字段的关系
    通过配置对象减少 case 分支。
  3. 减少冗余,提升可维护性
    只需维护配置对象即可。

优化后代码

methods: {// ... 其他方法 .../*** 通用唯一性校验* @param {Function} apiFunc 接口方法* @param {Object} params 查询参数* @param {Array} fields 需要回填的字段,格式:[[目标对象, 字段名, 返回字段名], ...]*/async uniqueQuery(apiFunc, params, fields) {try {const res = await apiFunc(params);if (res.data.code !== '000000' && !IsEmpty(res.data.code)) {this.openToast('warning', res.data.msg);} else {const data = res.data.data.data || res.data.data;if (data && data.length === 1) {fields.forEach(([target, field, resField]) => {this[target][field] = data[0][resField];});}}} catch (e) {console.log(e);}},opensingleComDialog(index) {if (this.comDialog || this.comDialog1 || this.comDialog2 || this.comDialog3 ||this.comDialog4 || this.comDialog5 || this.comDialog6 || this.comDialog7 ||this.comDialog8 || this.comDialog9 || this.comDialog10) {return;}// 配置映射const config = {0: {api: this.commissionConfigdblqueryCom1,params: {companycode: this.queryInfo.companycode,insurerName: this.queryInfo.insurerName,clickType: '1'},fields: [['queryInfo', 'companycode', 'companycode'],['queryInfo', 'insurerName', 'insurername']]},1: {api: this.commissionConfigdblqueryCom2,params: {companycode: this.queryInfo.companycode,orgCode: this.queryInfo.orgCode,orgName: this.queryInfo.orgName,clickType: '1'},fields: [['queryInfo', 'orgCode', 'orgcode'],['queryInfo', 'orgName', 'orgname']]},2: {api: this.commissionConfigdblqueryCom4,params: {comCodeOrName: this.queryInfo.comcode || this.queryInfo.comname || '',clickType: '1'},fields: [['queryInfo', 'comcode', 'comcode'],['queryInfo', 'comname', 'comCName']]},3: {api: this.commissionConfigdblqueryCom1,params: {companycode: this.queryInfoAdddialog.companycode,insurerName: this.queryInfoAdddialog.companyname,clickType: '1'},fields: [['queryInfoAdddialog', 'companycode', 'companycode'],['queryInfoAdddialog', 'companyname', 'insurername']]},4: {api: this.commissionConfigdblqueryCom2,params: {companycode: this.queryInfoAdddialog.companycode,orgCode: this.queryInfoAdddialog.orgCode,orgName: this.queryInfoAdddialog.orgName,clickType: '1'},fields: [['queryInfoAdddialog', 'orgCode', 'orgcode'],['queryInfoAdddialog', 'orgName', 'orgname']]},5: {api: this.commissionConfigdblqueryCom3,params: {comCodeOrName: this.queryInfoAdddialog.comcode || this.queryInfoAdddialog.comname || '',clickType: '1'},fields: [['queryInfoAdddialog', 'comcode', 'comcode'],['queryInfoAdddialog', 'comname', 'comCName']]},6: {api: this.commissionConfigdblqueryCom1,params: {companycode: this.queryInfoXiugaiDialog.companycode,insurerName: this.queryInfoXiugaiDialog.insurerName,clickType: '1'},fields: [['queryInfoXiugaiDialog', 'companycode', 'companycode'],['queryInfoXiugaiDialog', 'insurerName', 'insurername']]},7: {api: this.commissionConfigdblqueryCom2,params: {companycode: this.queryInfoXiugaiDialog.companycode,orgCode: this.queryInfoXiugaiDialog.orgCode,orgName: this.queryInfoXiugaiDialog.orgName,clickType: '1'},fields: [['queryInfoXiugaiDialog', 'orgCode', 'orgcode'],['queryInfoXiugaiDialog', 'orgName', 'orgname']]},8: {api: this.commissionConfigdblqueryCom3,params: {comCodeOrName: this.queryInfoXiugaiDialog.comcode || this.queryInfoXiugaiDialog.comname || '',clickType: '1'},fields: [['queryInfoXiugaiDialog', 'comcode', 'comcode'],['queryInfoXiugaiDialog', 'comCName', 'comCName']]},9: {api: this.commissionConfigdblqueryXianzhong,params: {companycode: this.queryInfoAdddialog.companycode,riskcode: this.queryInfoAdddialog.riskcode,riskname: this.queryInfoAdddialog.riskname,clickType: '1'},fields: [['queryInfoAdddialog', 'riskcode', 'riskcode'],['queryInfoAdddialog', 'riskname', 'riskname'],['queryInfoAdddialog', 'period', 'paymentperiod']]},10: {api: this.commissionConfigdblqueryXianzhong,params: {companycode: this.queryInfoXiugaiDialog.companycode,riskcode: this.queryInfoXiugaiDialog.riskcode,riskname: this.queryInfoXiugaiDialog.riskname,clickType: '1'},fields: [['queryInfoXiugaiDialog', 'riskcode', 'riskcode'],['queryInfoXiugaiDialog', 'riskname', 'riskname']]},11: {api: (params) => api('/salaryCommission/getSalary_riskCode', 'post', params),params: {riskCode: this.queryInfo.riskcode,riskName: this.queryInfo.riskname,clickType: '1'},fields: [['queryInfo', 'riskcode', 'riskcode'],['queryInfo', 'riskname', 'riskname']]},12: {api: (params) => api('/salaryCommission/getSalary_riskCode', 'post', params),params: {riskCode: this.queryInfoXiugaiDialog.riskcode,riskName: this.queryInfoXiugaiDialog.riskname,clickType: '1'},fields: [['queryInfoXiugaiDialog', 'riskcode', 'riskcode'],['queryInfoXiugaiDialog', 'riskname', 'riskname']]}};if (config[index]) {this.uniqueQuery(config[index].api, config[index].params, config[index].fields);}}
}

优化说明

  • 只需维护 config 配置对象即可,新增唯一性校验场景时只需添加配置项。
  • 通过 uniqueQuery 方法统一处理接口调用和字段回填,减少重复代码。
  • 结构清晰,易于维护和扩展。

如需进一步精简或有特殊业务逻辑,可继续细化配置对象或抽象参数。


如需直接替换原方法,可将 opensingleComDialoguniqueQuery 方法复制到 methods 中即可。
如有特殊接口返回结构差异,可在 uniqueQuery 方法中做兼容处理。

如需进一步优化或有其他相关问题,欢迎继续提问!

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

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

相关文章

css 实现1个像素在不同分辨率屏幕上画网格线

实现网格线绘制,要考虑画布style尺寸和画布像素大小的缩放关系 单像素绘制主要出现的问题是会模糊,从像素角度看就是出现绘制两个像素,实际就是要做偏移 核心就是:按物理像素绘制,首先要对齐物理像素,计算…

深度图聚类DGC—Paper Notes

目录 Unsupervised Deep Embedding for Clustering Analysis (DEC 2016)Attributed Graph Clustering: A Deep Attentional Embedding Approach (DAEGC 2019)Structural Deep Clustering Network (SDCN 2020)Contrastive Multi-View Representation Learning on Graphs (MVG…

获取YARN application 应用列表的几种方法

目录 1. 使用YARN命令行工具 2. 通过REST API获取 YARN 提供了获取YARN集群上运行的应用列表,以下是几种常见方法: 1. 使用YARN命令行工具 最直接的方式是使用YARN提供的命令行工具: yarn application -list 上述命令会显示所有正在运行的应用。 如果要查看所有应用(…

前端如何下载 ‘Content-Type‘: ‘application/octet-stream‘ 的文件

前言 在前端开发中,经常会遇到需要从后端接口下载文件的需求。当后端返回的响应头中 Content-Type 为 application/octet-stream 时,表示这是一个二进制流文件,浏览器无法直接展示,需要前端处理后下载到本地。本文将详细介绍前端…

咨询顾问进阶——顾问公司战略咨询分析模板【附全文阅读】

该战略咨询分析模板围绕企业战略分析展开,先从总体思考战略分析的目的与方法,接着探讨企业及战略定义、战略地位等。外部环境分析通过 PEST、五种竞争力等模型,分析环境、行业、市场等情况以发现机会与威胁;内部环境分析从资源、核…

宝塔服务器调优工具 1.1(Opcache优化)

第一步:宝塔服务器调优工具 1.1(按照下面的参数填写) 第二步:路径/www/server/php/80/etc/php.ini 搜索jit jit1235 其中1235根据服务器情况修改 第三步:路径/www/server/php/80/etc/php-cli.ini 搜索 jit1235 其中…

React Native【详解】动画

基础动画的实现流程 使用支持动画的组件 <Animated.Viewstyle{[{opacity: fadeAnim, // 绑定透明度动画值},]}><Text>动画元素</Text></Animated.View>Animated.View&#xff1a;用于创建动画容器&#xff0c;支持所有 View 的属性。Animated.Te…

如何轻松地将照片从 iPhone 传输到计算机

如果您的照片占据了 iPhone 上最多的存储空间&#xff0c;为什么不将照片从 iPhone 传输到电脑呢&#xff1f;您可能想要这样做&#xff0c;但不知道如何开始&#xff1f;如果是这样&#xff0c;那么本指南就是您所需要的。我们分享了 6 种方法以及步骤详细信息。您可以按照一种…

操作系统之内存管理(王道)

本篇博客依据王道、与我的笔记而写&#xff0c;讲解了内存的基础知识、内存管理的概念、进程的映像、连续分配管理方式、动态分区分配算法、基本分页存储管理、基本地址变换机构、TLB快表、两级页表、基本分段存储管理方式、段页式存储管理方式、虚拟内存、请求分页管理方式、页…

C++11 std::thread 多线程编程详解

C++11 标准首次将多线程支持引入语言标准库,其中最核心的部分就是 <thread> 头文件中的 std::thread 类。 🧱 一、基本概念 什么是线程? 线程是操作系统调度 CPU 时间的基本单位。一个进程中可以有多个线程,它们共享进程的资源(如内存、堆栈),但拥有各自独立的…

设置vscode使用eslint

在 Visual Studio Code (VSCode) 中设置 ESLint 是一个很好的方式来确保代码质量和一致性。以下是详细的步骤&#xff1a; 1. 安装 ESLint 扩展 打开 VSCode。点击左侧的扩展图标&#xff08;四边形图标&#xff09;。在搜索框中输入 ESLint。找到由 dbaeumer 提供的 ESLint …

.NET 生态中主流的前后端生产级框架

文章目录 **1. 后端框架&#xff08;Backend Frameworks&#xff09;****(1) ASP.NET Core**&#xff08;微软官方&#xff0c;主流选择&#xff09;**(2) ABP Framework**&#xff08;企业级应用开发框架&#xff09; **2. 前端框架&#xff08;Frontend Frameworks&#xff0…

Spring Cloud Alibaba整合Sentinel指南

目录 一、Sentinel核心功能概述 1. 控制台安装 2. 项目依赖配置 三、详细整合步骤 1. 基础配置 2. 资源定义与保护 3. 与OpenFeign整合 四、常见问题解决方案 五、最佳实践案例 1. 流量控制场景 2. 熔断降级场景 3. 热点参数限流 六、高级功能 Spring Cloud Aliba…

Win10+PHPStudy 8.1完美运行CRMEB开源商城(附性能优化配置)

环境配置 下载phpstudy https://www.xp.cn/ 安装完成之后打开&#xff0c;在软件管理中安装 nginx mysql 5.7 php 7.4 创建站点 填写域名&#xff0c;根目录选择到public文件夹下 创建完成之后&#xff0c;点击右侧管理&#xff0c;选择伪静态 location / { if (!-e $request…

康谋方案 | ARXML 规则下 ECU 总线通讯与 ADTF 测试方案

目录 一、引言 二、汽车电子控制系统 三、ECU开发流程中总线通讯&#xff1a;ARXML 规则下的标准化协作 四、ADTF&#xff1a;汽车数据与时间触发框架&#xff08;Automotive Data and Time-Triggered Framework&#xff09; 五、应用案例 六、结语 一、引言 随着汽车新…

常见JavaScript 代理模式应用场景解析

常见JavaScript 代理模式应用场景解析 在 JavaScript 开发中&#xff0c;代理模式&#xff08;Proxy Pattern&#xff09; 是一种强大的设计模式&#xff0c;它允许我们通过创建一个“代理”来控制对目标对象的访问。通过代理&#xff0c;我们可以拦截并增强对象的行为&#x…

暴雨信创电脑代理商成功中标长沙市中医康复医院

6月25日&#xff0c;国内科技产业领军企业暴雨信息传来喜讯&#xff0c;其信创电脑成功中标长沙市中医康复医院信息化设备采购项目。此次中标&#xff0c;不仅彰显了暴雨信息在信创领域的技术实力和产品优势&#xff0c;也为长沙市中医康复医院的信息化建设注入了新的活力。 长…

ZYNQ PL高速采集AD7606数据与QT动态显示全解析

从硬件设计到软件优化,打造工业级数据采集系统 在工业自动化、医疗仪器等领域,高速多通道数据采集系统至关重要。本文手把手教你基于Xilinx ZYNQ平台,实现8通道200kSPS高速采集**,并通过QT实现60fps动态波形显示。突破性采用五级流水采集架构和GPU加速渲染,解决传统方案的…

还是工作日志

今天感觉效率有点低&#xff0c;可能是太热了 【100】 开始不懂了 https://www.bilibili.com/video/BV1rL411E7uz?t1193.7&p100 什么新增&#xff0c;什么新增和变化 【101】退单 开头就说不适合做事务型 https://www.bilibili.com/video/BV1rL411E7uz?t26.6&…

青少年编程与数学 01-012 通用应用软件简介 10 云存储软件

青少年编程与数学 01-012 通用应用软件简介 10 云存储软件 一、什么是云存储软件&#xff08;一&#xff09;云存储软件的基本定义&#xff08;二&#xff09;云存储软件的工作原理&#xff08;三&#xff09;云存储软件的类型 二、云存储软件的重要意义&#xff08;一&#xf…