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
英文地址,請注明出處:http://en.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…