这个看过吗

news2025/1/19 2:27:00

el-upload调两个接口,获取二进制文件 ,并且上传后不立即执行,通过      this.$refs.upload.submit();触发提交,直接调两个接口,获取到二进制文件后传输

 

 <el-upload
          :auto-upload="false"
          :data="{
            reportQuarter: reportQuarter,
            reportYear: !reportYear.includes('年') ? reportYear + '年' : ''
          }"
          class="upload"
          action="/cbrc/api/getWordContent"
          :on-success="upsuccess"
          :headers="header"
          :on-remove="deletefile"
          :before-upload="handleChange"
          :file-list="fileList"
          :limit="1"
          accept=".doc,.docx"
          ref="upload"
        >
          <el-button type="primary" class="blue" style="float: left;"
            >上传报告<i class="el-icon-upload el-icon--right"></i
          ></el-button>
          <!-- 只可上传一个文件,上传成功点击识别后会覆盖原数据 -->
          <div class="upload__tip">
            备注:请先上传声誉风险排查报告,系统可自动识别部分内容
          </div>
        </el-upload>

















upsuccess(file) {
    

        // 使用FormData传参数和文件
        var form = new FormData();
        // 文件转成后端要的二进制格式
        form.append("file", this.file);
      this.$message.success("导入成功");
        this.$http({
        method: "POST",
        url: "/cbrc/file/upload",
       
        data:form
      }).then(res => {
        if (res) {
//成功
          this.filePath=res.data.data.attachPath;
        }
      });
    },
  //上传之前事件
    handleChange(file, fileList) {
 //获取二进制文件并赋值
      this.file=file;
      //限制文件大小
      var size = file.size / 1024 / 1024;
      if (size > 10) {
        this.$message.warning("上传文件大小不能大于10M");
        return false;
      }
    }

一个属性让你的div可编辑

contenteditable="true"

<div id="add-content" contenteditable="true">这里可以编辑</div>

elementUI的tab切换结合锚点使用

    <el-tabs v-model="activeItemId" @tab-click="handleClick">
          <!-- v-for="item of departmentList"
            :key="item.name"
            :label="item.name"
            :name="item.id + ''" -->
          <el-tab-pane
            v-for="(item, index) of reportList"
            :key="item.propertyName + index"
            :label="item.propertyName"
            :name="index + ''"
          >
          </el-tab-pane>
        </el-tabs>
        <div
          v-for="(item, i) of reportList"
          :key="item.propertyName"
          style="background-color: #fff;padding:10px;padding-bottom: 25px;"
        >
          
              <h3 :id="'anchor-' + i">{{ item.propertyName }}</h3></div>






  handleClick(tab, event) {
      this.$nextTick(function() {
        var anchor = this.$el.querySelector("#anchor-" + this.activeItemId);
       document.body.scrollTop = anchor.offsetTop; // chrome
  document.documentElement.scrollTop = anchor.offsetTop; // firefox
        console.log("this.activeItemId :>> ", anchor);
      });

      //获取列表
      console.log(tab, event);
    },

vue2的页面路由守卫阻止浏览器页面关闭

js阻止浏览器页面关闭

js守卫阻止浏览器页面点击标签后关闭

禁止用户关闭页面

阻止不了,浏览器内点击标签页关闭按钮或ctrl+w关闭,根本没法做,你可以阻止页面回退,但没法阻止用户直接关闭当前标签页,想要做到用户点击关闭提醒用户是否保存后再关毕页面这种效果,就跟手机壳要根据使用者现在的心情即时变色一样难。我们只能在用户点击每一项的编辑后给她来个保存按钮,即点击每一项都可以保存,但这个时候不关闭页面,如果不点击单个保存按钮而直接点击页面下方的保存按钮,保存所有数据并关闭页面

下方代码可阻止回退 


  beforeRouteLeave(to, from, next) {
    console.log("1 :>> ", 1);

    if (
      (this.pageStatus === "add" || this.pageStatus === "copy") &&
      !this.setOver
    ) {
      this.$confirm("是否保存后再关闭", {
        confirmButtonText: "确定",
        cancelButtonText: "直接关闭"
      })
        .then(() => {
          this.setDetailOrAdd();
        })
        .catch(() => {
          next();
        });
    } else {
      let status = false;
      if (!this.setOver) {
        if (this.originReportInfo.title !== this.outerInfo.title) {
          status = true;
        }
        this.reportList.forEach((item, index) => {
          if (
            item.propertyValue !==
            this.originReportInfo.reportList[index].propertyValue
          ) {
            status = true;
          }
        });
        if (status) {
          this.$confirm("是否保存后再关闭", {
            confirmButtonText: "确定",
            cancelButtonText: "直接关闭"
          })
            .then(() => {
              this.setDetailOrAdd();
            })
            .catch(() => {
              next();
            });
        }
      }
    }
  },

需求实现,局部全选与总选进行二级联动,每次点击都做判断,回显或新建正常展示

 <div class="item" style="height:auto;">
              <label class="titleLabel"
                >可见范围<span class="popRed">*</span></label
              >
              <div style="width:80%">
                <input
                  type="checkbox"
                  class="check"
                  v-model="editList.receiveType"
                  @change="checkAll('编辑')"
                />&nbsp;所有人可见
                <div style="display: flex;">
                  <div style="width: 50%;">
                    <el-select
                      v-model="editList.orgIds"
                      multiple
                      clearable
                      collapse-tags
                      filterable
                      placeholder="请选择省分公司"
                    >
                      <el-option
                        v-for="item in optionss"
                        :key="item.id + ''"
                        :label="item.name"
                        :value="item.id + ''"
                      >
                      </el-option>
                    </el-select>
                    &nbsp;
                    <input
                      type="checkbox"
                      class="check"
                      v-model="editCheckOrg"
                      @change="checkPart('编辑', 'org')"
                    />
                  </div>
                  <div style="width: 50%;">
                    <el-select
                      v-model="editList.depIds"
                      multiple
                      clearable
                      filterable
                      collapse-tags
                      placeholder="请选择业务线条"
                    >
                      <el-option
                        v-for="item in optionas"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id + ''"
                      >
                      </el-option>
                    </el-select>
                    &nbsp;
                    <input
                      type="checkbox"
                      class="check"
                      v-model="editCheckDep"
                      @change="checkPart('编辑', 'dep')"
                    />
                  </div>
                </div>
              </div>
            </div>
data(){
 editCheckOrg: true,
      editCheckDep: true,
 optionss: [],//org列表
optionas: "",//dep列表
},


methods:{
//点编辑时的回显初始化
edit(){
//是否总全选选中,总选这个字段是需要创建数据时传参,回显时详情数据再返回
   if (this.editList.receiveType) {
        this.editList.orgIds = [];
        this.editList.depIds = [];
        this.optionss.forEach(item => {
          this.editList.orgIds.push(item.id + "");
        });
        if (this.optionas && this.optionas.length > 0) {
          this.optionas.forEach(item => {
            this.editList.depIds.push(item.id + "");
          });
        }
        // 如果是全选,局部也选上
        this.editCheckOrg = true;
        this.editCheckDep = true;
      } else {
        this.editCheckOrg = false;
        this.editCheckDep = false;
      }
},
 checkPart(status, type) {
      if (status === "编辑") {
        if (type === "org") {
          if (this.editCheckOrg) {
            this.editList.orgIds = [];
            this.optionss.forEach(item => {
              this.editList.orgIds.push(item.id + "");
            });
            //如果另一个部分选择框也被选择了,总全选选中
            if (this.editCheckDep) {
              this.editList.receiveType = true;
            } else {
              this.editList.receiveType = false;
            }
          } else {
            this.editList.receiveType = false;

            this.editList.orgIds = [];
          }
          return;
        }
        if (type === "dep") {
          if (this.editCheckDep) {
            this.editList.depIds = [];
            this.optionas.forEach(item => {
              this.editList.depIds.push(item.id + "");
            });

            if (this.editCheckOrg) {
              this.editList.receiveType = true;
            } else {
              this.editList.receiveType = false;
            }
          } else {
            //这个时候总全选可能没选中
            this.editList.receiveType = false;

            this.editList.depIds = [];
          }
        }
      }
      if (status === "新建") {
        if (type === "org") {
          if (this.newCheckOrg) {
            this.valueInfo = [];
            this.optionss.forEach(item => {
              this.valueInfo.push(item.id + "");
            });
            if (this.newCheckDep) {
              this.isAllSign = true;
            } else {
              this.isAllSign = false;
            }
          } else {
            this.valueInfo = [];
            this.isAllSign = false;
          }
          return;
        }
        if (type === "dep") {
          if (this.newCheckDep) {
            this.addxz = [];
            this.optionas.forEach(item => {
              this.addxz.push(item.id + "");
            });
            if (this.newCheckOrg) {
              this.isAllSign = true;
            } else {
              this.isAllSign = false;
            }
          } else {
            this.addxz = [];
            this.isAllSign = false;
          }
          return;
        }
      }
    },
    checkAll(status) {
      if (status === "编辑") {
        if (this.editList.receiveType) {
          this.editCheckOrg = true;
          this.editCheckDep = true;
          this.checkPart("编辑", "org");
          this.checkPart("编辑", "dep");
          this.$forceUpdate();
        } else {
          this.editCheckOrg = false;
          this.editCheckDep = false;
          this.checkPart("编辑", "org");
          this.checkPart("编辑", "dep");
        }
      }
      if (status === "新建") {
        //新建
        if (!this.isAllSign) {
          this.newCheckOrg = true;
          this.newCheckDep = true;
          this.checkPart("新建", "org");
          this.checkPart("新建", "dep");
        } else {
          this.newCheckOrg = false;
          this.newCheckDep = false;
          this.checkPart("新建", "org");
          this.checkPart("新建", "dep");
        }
      }
    },
},

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

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

相关文章

springboot+vue在线动漫信息平台(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的在线动漫信息平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

TPS和QPS的区别与联系

今天在工作中遇到了两个指标&#xff0c;将这两个指标作以解析。 1、TPS&#xff1a; Transactions Per Second&#xff0c;意思是每秒事务数。一个事务是指客户端向服务器发送请求然后服务器做出反应的过程&#xff0c;具体的事务定义&#xff0c;可以是一个接口、多个接口、…

IDEA中application.yaml文件无法自动提示

问题描述&#xff1a; 在IDEA中application.properties可以自动提示&#xff0c;但是application.yml/application.yaml文件却不可以实现关键词提示和代码跳转 甚至&#xff0c;在Modules模块中都无法识别到application.yml文件&#xff01;&#xff01; 总感觉这个yml文件图标…

【C++学习】类和对象--继承

基本语法 继承是面向对象三大特性之一&#xff0c;有些类和类之间存在特殊关系。 下级别成员除了拥有上一级的共性还有自己的特点。 这个时候我们就可以考虑利用继承的技术&#xff0c;减少重复代码。 基本语法&#xff1a;class 子类 &#xff1a;继承方式 父类 子类也称为…

【HTML 标签详解】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

MySQL(三)-数据类型

MYSQL数据类型 1 整数类型2 浮点数类型和定点数类型3 日期与时间类型4 文本字符串类型5 二进制字符串类型6 数据类型的选择 表是由多列字段组成&#xff0c;每一个字段会有不同的数据类型&#xff0c;不同的数据类型决定了字段包含的数据内容。不同的数据类型也决定了mysql在使…

SpringBoot项目结构及依赖技术栈

目录 1、pom.xml文件配置说明 2、SpringBoot项目结构说明 3、入门案例关键配置说明 &#x1f308; 前面我们学习了SpringBoot快速入门案例&#xff0c;本节我们通过POM文件和项目结构分析两部分内容了解下关于SpringBoot的一些配置说明&#xff0c;以便全面了解SpringBoot项…

Javaweb | 转发、重定向

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 转发 转发与页面跳转 转发 转发的作用在服务器端&#xff0c;将请求发送给服务器上的其他资源&#xff0c;以共同完成一次请求的处理 页面跳转 使用forward跳转时&am…

MySQL(七)-日期和时间函数的使用解析

日期和时间函数的使用解析 1 获取当前日期的函数和获取当前时间的函数2 获取当前日期和时间的函数3 UNIX时间戳函数4 返回UTC日期的函数和返 UTC 时间的函数5 获取月份的函数MONTH(date)和 MONTHNAME(date)6 获取星期的函数DAYNAME(d)DAYOFWEEK(d)和WEEKDAY(d)7 获取星期数的函…

芯片封装基本流程及失效分析处理方法

芯片封装 芯片封装的目的在于对芯片进行保护与支撑作用、形成良好的散热与隔绝层、保证芯片的可靠性&#xff0c;使其在应用过程中高效稳定地发挥功效。 工艺流程 硅片减薄 使用物理手段&#xff0c;如磨削、研磨等&#xff1b;或者化学手段&#xff0c;如电化学腐蚀、湿法腐蚀…

2023-04-24:用go语言重写ffmpeg的muxing.c示例。

2023-04-24&#xff1a;用go语言重写ffmpeg的muxing.c示例。 答案2022-04-24&#xff1a; 本程序的大体过程如下&#xff1a; 打开输出文件并写入头部信息。 添加音频和视频流&#xff0c;并为每个流创建 AVCodecContext 对象&#xff0c;根据输入格式设置编码器参数&#x…

springboot 整合itext 实现pdf下载

一 itext介绍 1.1 核心组件介绍 Text中用文本块(Chunk)、短语(Phrase)和段落(paragraph)处理文本。 1.文本块(Chunk)是处理文本的最小单位&#xff0c;有一串带格式&#xff08;包括字体、颜色、大小&#xff09;的字符串组成。如以下代码就是产生一个字体为HELVETICA、大小为…

【OAI】UERANSIM容器与OAI核心网分立部署及测试

说明启动核心网&#xff1a;启动基站&#xff1a;功能测试ueransim测试1&#xff1a;通过12.1.1.x ping192.168.70.1ueransim测试2&#xff1a; 通过nr-binder绑定自定义TCP程序传数据到核心网ueransim测试3&#xff1a;多ueransim启动 结论附录基站配置文件&#xff1a;TCP通信…

HCIA-RS实验-路由配置-静态路由缺省路由

在计算机网络中&#xff0c;路由器是实现数据包转发的重要设备。它通过查找路由表中的路由信息&#xff0c;将数据包从源地址转发到目标地址。而静态路由和缺省路由则是路由表中的两种重要信息&#xff0c;下面我们来详细了解一下它们的概念、特点和应用。 目录 简述 一、静态…

Let‘s Learn .NET|通过 Semantic Kernel .NET SDK 管理你的 OpenAI 项目

编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun Lets Learn .NET 系列 “Lets Learn .NET” 是面向全球的 .NET 初学者学习系列&#xff0c;旨在通过不同语言&#xff0c;帮助不同地区的开发者掌握最新的 .NET 开发知识与技能。 在 ChatGPT 与 OpenAI 火热的当下&#x…

雪花算法

雪花算法(SnowFlake)&#xff0c;是Twitter开源 的分布式ID生成算法 主要是由 64bit 的 long 型生成的全局 ID&#xff0c; 其中分为四个部分&#xff1a; ① 最高1位固定值 0&#xff0c;因为生成的 id 是正整数 ② 后面的41位存储毫秒级时间戳 ③ 第三部分的10位存储机器码…

tp6.1 bingher/ueditor(百度编辑器)(七牛、阿里OSS第三方云)详情图文教程(第二版)

之前做过一版&#xff1a;tp6 bingher/ueditor(百度编辑器)(七牛、阿里OSS第三方云)详情图文教程_我是高手高手高高手的博客-CSDN博客 登录权限是Session&#xff0c;现在系统是Cookie加jwt的Token方式验证 一、修改验证登录权限 修改文件&#xff1a; vendor\bingher\uedito…

R语言 | 向量对象运算

目录 一、数值型的向量对象 1.1 建立规则型的数值向量对象使用序列符号 1.2 简单向量对象的运算 1.3 建立向量对象&#xff1a;seq()函数 1.4 连接向量对象&#xff1a;c()函数 1.5 重复向量对象&#xff1a;rep()函数 1.6 numeric()函数 1.7 程序语句短语跨行的处理 …

阶段式软件研发项目管理工具

下面这个场景是是阶段式软件研发场景&#xff0c;适用于采用瀑布模式开展软件研发的企业或者团队。 创建项目 新建项目时&#xff0c;使用“阶段式软件开发项目”项目模板创建项目。 系统会自动创建10个阶段看板&#xff08;一个阶段一个看板&#xff09;&#xff0c;1个缺陷…

libgo 流程分析(1)

libgo 基础模块 libgo逻辑结构 libgo主要的功能模块主要包括&#xff1a;调度器( Scheduler )、处理器( Processer )、协程( Task )和一个FastSteadyClock。 其中 Scheduler -> Processer -> Task 三层逻辑结构实现了对协程( Task )的生命周期管理和调度和运行。 sch…