当前位置: 首页 > article >正文

前端vue打开多个窗口,关闭窗口后才继续执行后续逻辑

1.打开第一个弹窗

弹窗的按钮代码

2.点击窗口1中按钮,打开新的窗口

 // 请领单按钮点击
async cb_6_delClick() {let ls_yfbm = this.st_3Value.BMBMlet pstring = {}pstring.a = ls_yfbmpstring.b = this.queryFormDialog.outDepotDeptCodeawait this.openwithparm_w_md_ckgl_lyjh_yfly(pstring)// 防止此方法多次被调用已打开窗口if (!this.dialog_uo_3) {this.dialog_uo_3 = true}await new Promise((resolve) => {this.$watch('dialog_uo_3', (newVal) => {if (newVal === false) {resolve();}});});// 出库数量大于库存数量时,将出库数量改成库存数量for (let i = 0; i < this.adviceTableCalc.length; i++) {let ldc_cksl = this.adviceTableCalc[i].CKSLlet ldc_kcsl = this.adviceTableCalc[i].KCSLif (ldc_cksl > ldc_kcsl) {this.adviceTableCalc[i].CKSL = ldc_kcsl} else {this.adviceTableCalc[i].XH = i}}},
// 下面这一行代码是打开窗口前的一些逻辑,可以不用管不是该博客要讨论的重点
await this.openwithparm_w_md_ckgl_lyjh_yfly(pstring)
// 下面这一行代码的执行会打开第2个窗口this.dialog_uo_3 = true

第2个窗口代码 

 

3.打开的第2个窗口 

 第2个窗口的确定按钮点击以后会关闭,那么就会展示第1个窗口了

可以看到方法 saveDialog_cb_3()方法的最后一行执行了关闭第2个窗口的操作 this.dialog_uo_3 = false

// 请领单确定按钮点击async saveDialog_cb_3() {let lb_init, lstr_rtn, ll_find, ll_drbm, ls_ksmcawait this.cb_4_w_md_ckgl_lyjh_yfly()// todo// w_md_ckgl_fygl_fyxz_yfly.dw_1.reset()// w_md_ckgl_fygl_fyxz_yfly.dw_2.reset()this.dw_1_qld.map(item => {if (item.XZ === 1) {ll_find = item}})if (validatenotnull(ll_find)) {ll_drbm = ll_find.DRBMls_ksmc = ll_find.KSMC// todo// w_md_ckgl_fygl_fyxz_yfly.uo_gys.uf_settext(string(ll_drbm),ls_ksmc)}if (this.orgName != '湖北中医药大学国医堂' || this.orgName != '湖北中医药大学黄家湖医院') {// todo 8.0没有找到sle_bz这个控件,is_djh这个值8.0是在wf_bzxx()方法赋值的// w_md_ckgl_fygl_fyxz_yfly.sle_bz.text = this.is_djh}console.log("this.dw_ckmx_temp:",this.dw_ckmx_temp)this.dw_ckmx_temp.forEach(item => {this.adviceTableCalc.push(item)})this.dw_ckmx.forEach(item => {this.applyTable.push(item)this.applyTableCalc.push(item)})this.applyTable = this.applyTable.map((item, index) => {return {...item,id: index}})this.applyTableCalc = this.applyTableCalc.map((item, index) => {return {...item,id: index}})this.adviceTableCalc = this.adviceTableCalc.map((item, index) => {return {...item,id: index}})// 初始化制空this.dw_ckmx_temp = []this.dw_ckmx = []this.$nextTick(() => {this.$refs.adviceTableCalc_03_04_07.setCurrentRowByIndex(0);this.dialogRowClick_04_03_07(this.adviceTableCalc[0])})this.dialog_uo_3 = false},

那么此时这一段代码会监听到 dialog_uo_3的值变成了false也就是我们的第2个窗口被关闭了,就会继续执行在第一个窗口打开第2个窗口等待第2个窗口关闭才继续执行的阻塞效果。

 await new Promise((resolve) => {
        this.$watch('dialog_uo_3', (newVal) => {
          if (newVal === false) {
            resolve();
          }
        });
      });

所以下面这一段代码只有在第2个窗口被关闭时才会继续执行,否则一直阻塞等待窗口关闭 

 // 出库数量大于库存数量时,将出库数量改成库存数量
      for (let i = 0; i < this.adviceTableCalc.length; i++) {
        let ldc_cksl = this.adviceTableCalc[i].CKSL
        let ldc_kcsl = this.adviceTableCalc[i].KCSL
        if (ldc_cksl > ldc_kcsl) {
          this.adviceTableCalc[i].CKSL = ldc_kcsl
        } else {
          this.adviceTableCalc[i].XH = i
        }
      }

http://www.lryc.cn/news/2401611.html

相关文章:

  • 「深度拆解」Spring Boot如何用DeepSeek重构MCP通信层?从线程模型到分布式推理的架构进化
  • 如何避免在前端项目中出现重复的第三方依赖包?
  • Java开发中复用公共SQL的方法
  • 【西门子杯工业嵌入式-2-点亮一颗LED】
  • 代码随想录算法训练营第60期第五十五天打卡
  • 重磅更新! 基于Gemini 2.5 Pro打造的AI智能体PlantUML-X上线!
  • [5-02-04].第01节:Jmeter环境搭建:
  • AI智能推荐实战之RunnableParallel并行链
  • windows server2019 不成功的部署docker经历
  • Gemini开源项目DeepResearch:基于LangGraph的智能研究代理技术原理与实现
  • React状态管理Context API + useReducer
  • 【无标题】路径着色问题的革命性重构:拓扑色动力学模型下的超越与升华
  • Doris Catalog 联邦分析查询性能优化:从排查到优化的完整指南
  • 01 Deep learning神经网络的编程基础 二分类--吴恩达
  • 视频自动化分割方案:支持按时间与段数拆分
  • Open SSL 3.0相关知识以及源码流程分析
  • 股指期货合约价值怎么算?
  • 【QT】使用QT帮助手册找控件样式
  • 计算机网络(5)——数据链路层
  • VuePress完美整合Toast消息提示
  • JVM 调优参数详解与实践
  • adb 连不上真机设备问题汇总
  • [yolov11改进系列]基于yolov11引入注意力机制SENetV1或者SENetV2的python源码+训练源码
  • 鸿蒙仓颉语言开发实战教程:商城搜索页
  • 上门服务小程序会员系统框架设计
  • 图像去雾数据集总汇
  • 小程序引入deepseek
  • 网络攻防技术十四:入侵检测与网络欺骗
  • C++笔记-C++11(一)
  • JVM 类初始化和类加载 详解