原生 input 中的 “type=file“ 上传文件

news2024/11/25 12:35:00

目标:实现文件上传功能

原型图:

HTML部分:

<div class="invoice-item">
                <div class="invoice-title">增值税专用发票</div>
                <div class="invoice-box">
                  <el-form-item label="标准模版:" class="Standard-Template">
                    <div v-show="!isEdit && !ruleForm.taxInvoiceTemplateUrl">
                      <span>待上传</span>
                    </div>
                    <div v-show="isEdit && !ruleForm.taxInvoiceTemplateUrl">
                      <input
                        ref="taxInvoiceTemplateRef"
                        type="file"
                        style="
                        opacity: 0;
                        position: absolute;
                        left: -9999px;
                        top: -9999px;
                      "
                        @change="taxInvoiceTempalteChange"
                      >
                      <i
                        class="el-icon-upload2"
                        style="color: #0075ff; font-size: 22px; cursor: pointer"
                        @click="$refs.taxInvoiceTemplateRef.click()"
                      />
                      <span
                        style="margin-left: 8px"
                        :style="{ color: errorText3 ? 'red' : '#999999' }"
                      >{{ errorText3 || "支持上传5M以内.pdf格式的文档" }}</span>
                    </div>
                    <div v-show="ruleForm.taxInvoiceTemplateUrl">
                      <i class="el-icon-document" />
                      <span>{{ ruleForm.taxInvoiceTemplateName }}</span>
                      <i
                        v-if="isEdit"
                        class="el-icon-circle-close"
                        style="cursor: pointer"
                        @click="deleteDoc('taxDigitalInvoice')"
                      />
                    </div>
                  </el-form-item>
                  <el-form-item
                    label="备注信息超长模板:"
                    class="Standard-Template"
                  >
                    <div
                      v-show="!isEdit && !ruleForm.taxInvoiceRemarkTemplateUrl"
                    >
                      <span>待上传</span>
                    </div>
                    <div
                      v-show="isEdit && !ruleForm.taxInvoiceRemarkTemplateUrl"
                    >
                      <input
                        ref="taxInvoiceRemarkTemplateRef"
                        type="file"
                        style="
                        opacity: 0;
                        position: absolute;
                        left: -9999px;
                        top: -9999px;
                      "
                        @change="taxInvoiceRemarkTemplateChange"
                      >
                      <i
                        class="el-icon-upload2"
                        style="
                        color: #0075ff;
                        font-size: 22px;
                        cursor: pointer;
                        padding-top: 10px;
                      "
                        @click="$refs.taxInvoiceRemarkTemplateRef.click()"
                      />
                      <span
                        style="margin-left: 0px; padding-top: 3px"
                        :style="{ color: errorText4 ? 'red' : '#999999' }"
                      >{{ errorText4 || "支持上传5M以内.pdf格式的文档" }}</span>
                    </div>
                    <div v-show="ruleForm.taxInvoiceRemarkTemplateUrl">
                      <i class="el-icon-document" />
                      <span>{{ ruleForm.taxInvoiceRemarkTemplateName }}</span>
                      <i
                        v-if="isEdit"
                        class="el-icon-circle-close"
                        style="cursor: pointer"
                        @click="deleteDoc('taxDigitalInvoiceRemarkInfo')"
                      />
                    </div>
                  </el-form-item>
                </div>
              </div>

JS部分:

import * as Api from '@/api/invoiceBasic'

data() {
    return {
      errorText3: '',
      errorText4: '',
      ruleForm: {
        // 数电发票基础模板

        taxInvoiceTemplateUrl: '', // 增值税 标准模板
        taxInvoiceTemplateName: '',

        taxInvoiceRemarkTemplateUrl: '',
        taxInvoiceRemarkTemplateName: '',

        sellerShowAccount: '0',
        invoiceOperator: ''
      },
      rules: {
        invoiceOperator: [
          { required: true, message: '请输入开票人', trigger: 'submit' }
        ]
      }
    }
  },

methods: {
    init() {
      this.getDetailData()
    },
    getDetailData() {
      this.pageLoading = true
      Api.ticketConfigFind()
        .then((res) => {
          const {
            taxInvoiceTemplateUrl, taxInvoiceTemplateName,
            taxInvoiceRemarkTemplateUrl, taxInvoiceRemarkTemplateName,
           
            sellerShowAccount, invoiceOperator
          } = res.data.body
          this.ruleForm.taxInvoiceTemplateUrl = taxInvoiceTemplateUrl
          this.ruleForm.taxInvoiceTemplateName = taxInvoiceTemplateName
          this.ruleForm.taxInvoiceRemarkTemplateUrl = taxInvoiceRemarkTemplateUrl
          this.ruleForm.taxInvoiceRemarkTemplateName = taxInvoiceRemarkTemplateName
          

          // this.ruleForm.taxInvoiceTemplateUrl = taxInvoiceTemplateUrl
          // this.ruleForm.taxInvoiceTemplateName = taxInvoiceTemplateName
          // this.ruleForm.ordinaryInvoiceTemplateUrl = ordinaryInvoiceTemplateUrl
          // this.ruleForm.ordinaryInvoiceTemplateName =
          //   ordinaryInvoiceTemplateName

          this.ruleForm.invoiceOperator = invoiceOperator
          this.ruleForm.sellerShowAccount = String(Number(sellerShowAccount))
        })
        .finally((_) => {
          this.pageLoading = false
        })
    },
    // 增值税专用发票 标准模板
    taxInvoiceTempalteChange(e) {
      const file = e.target.files[0]
      if (file.name.indexOf('.pdf') === -1 || file.size > 5 * 1024 * 1000) {
        this.errorText3 = '支持上传5M以内.pdf格式的文档'
        return
      }
      const f2 = new FormData()
      f2.append('file', file)
      Api.fastdfsUpload(f2).then((res) => {
        this.ruleForm.taxInvoiceTemplateName = file.name
        this.ruleForm.taxInvoiceTemplateUrl = res.data.body
      })
    },
    // 增值税专用发票 - 备注信息超长
    taxInvoiceRemarkTemplateChange(e) {
      const file = e.target.files[0]
      if (file.name.indexOf('.pdf') === -1 || file.size > 5 * 1024 * 1000) {
        this.errorText4 = '支持上传5M以内.pdf格式的文档'
        return
      }
      const f3 = new FormData()
      f3.append('file', file)
      Api.fastdfsUpload(f3).then((res) => {
        this.ruleForm.taxInvoiceRemarkTemplateName = file.name
        this.ruleForm.taxInvoiceRemarkTemplateUrl = res.data.body
      })
    },
},

CSS部分:

.invoice-item {

      float: left;

      width: 430px;

      height: 140px;

      // height: 126px;

      border-radius: 12px;

      margin-top: 12px;

      margin-bottom: 22px;

      background: linear-gradient(to right, #cfe8ff, #f8fcff);

      .invoice-box {

        width: 100%;

        .remark-Template {

          /deep/ .el-form-item {

            margin-bottom: 0px;

          }

        }

        /deep/ .el-form-item__label {

          width: fit-content !important;

          padding-left: 20px;

          font-weight: 600;

          font-size: 12px;

          color: #101010;

        }

        /deep/ .el-form-item__content {

          text-align: right;

          padding-right: 20px;

          margin-left: 180px !important;

        }

      }

    }

    .invoice-title {

      font-weight: 600;

      font-size: 16px;

      color: #0075ff;

      padding: 20px;

      padding-bottom: 8px;

    }

效果:

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

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

相关文章

信息化和精益化应当先做哪个?天行健王春城老师回答你

随着科技的飞速发展&#xff0c;企业面临着来自内部和外部的双重压力。在这样的背景下&#xff0c;信息化和精益化成为了企业提升竞争力的两个重要方向。那么&#xff0c;面对这两个重要的战略方向&#xff0c;企业应该先从哪里入手呢&#xff1f;下面天行健王春城老师就此展开…

(九)Mysql之 【MySQL MHA】

前置资源 一、什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的…

洁净区在线环境粒子浮游菌监测取样点的选择知多少?

洁净环境在线监测系统的参考法规标准包括国内外GMP标准、国家标准、国际标准以及洁净室设计和施工规范等。企业应根据自身生产需求和法规要求&#xff0c;选择合适的监测系统和监测方案&#xff0c;确保洁净环境的有效控制和产品质量的安全可靠。 【北京中邦兴业洁净环境在线监…

如何在YoloV8中添加注意力机制(两种方式)

文章目录 概要添加注意力机制流程#添加方式一&#xff1a;将注意力机制添加到额外的一层添加方式二&#xff1a;将注意力机制添加到其中一层&#xff0c;不引入额外的层 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; openAI 的 GPT 大模型的发展历程。 添加…

堡垒机的部署方式与防火墙有何不同

在现代网络安全架构中&#xff0c;堡垒机是关键的安全设备之一&#xff0c;它用于管理和控制服务器的访问权限&#xff0c;保障内部网络的安全性。越来越多的企业选择堡垒机来增强网络安全管理。那么堡垒机该如何部署呢?同时&#xff0c;堡垒机与防火墙有何区别?本文将带您深…

sql中索引查看是否生效

在pg数据库中有多种索引存在&#xff0c;在一般情况下我们取使用普通索引 以下是一些常见导致索引未命中的原因和优化策略 1.如果查询中的条件与索引字段的顺序不匹配&#xff0c;或者索引字段没有完全包含在查询条件中&#xff0c;索引可能不会被使用。 2.在查询中使用函数…

OpenAI 草莓模型即将发布,人工智能变革在即

近日&#xff0c;人工智能领域的领军者 OpenAI 即将推出的 “草莓”&#xff08;Strawberry&#xff09;模型引发了广泛关注和热议。据可靠消息&#xff0c;该模型计划在未来两周内作为 ChatGPT 服务的一部分正式发布。 “草莓” 模型作为 OpenAI 盛传已久的神秘项目&#xff…

判断奇偶数的小妙招

要判断一个数是奇数还是偶数&#xff0c;一般首先想到的都是对2取余&#xff0c;但其实有更高明的算法。 首先咱们要知道一个知识点&#xff1a;偶数的二进制末位为0&#xff0c;奇数的二进制末位为1。 这是进位制本身的规则决定的&#xff0c;二进制是“逢二进一”。如果末位…

【ArcGIS Pro实操第一期】研究区域制图-以粤港澳GBA地区为例

ArcGIS Pro实操第一期&#xff1a;研究区域制图-以粤港澳GBA地区为例 数据准备1 ArcGIS Pro绘制研究区域图1.1 基本处理1.2 导入数据并制图1.3 添加整饰要素 参考 数据准备 DEM高程数据市区边界文件&#xff08;.shp文件&#xff09; 目标成图如下&#xff1a; 1 ArcGIS Pr…

电脑与电脑之间怎么快速传输文件?

若两台电脑在同一局域网&#xff0c;可以使用Windows远程桌面传输文件&#xff0c;或者使用远程看看这款免费的远程桌面软件&#xff0c;它支持在不同的网络之间传输文件&#xff0c;而且速度快、安全性高。 步骤1. 在两台电脑上下载、安装并运行远程看看。 步骤2. 注册一个远…

如何在Windows上搭建并运行DolphinScheduler前后端开发环境

作者&#xff1a;海豚调度研究随笔 编辑整理&#xff1a;曾辉 前言 Apache DolphinScheduler 是一个优秀的分布式调度系统&#xff0c;广泛应用于大数据处理和自动化任务管理中。本文详细介绍了如何在Windows环境下搭建Apache DolphinScheduler的前后端开发环境。 包括从源码…

PowerShell收集信息及绕过PowerShell权限

PowerShell脚本的4种执行权限&#xff1a; Restricted&#xff1a;默认设置&#xff0c;不允许任何script运行 AllSigned&#xff1a;只能运行经过数字证书签名的script RemoteSigned&#xff1a;本地脚本不做限制&#xff0c;网络上下载的script就必须有数字签名 Unrestri…

语言模型与人类反馈的深度融合:Chain of Hindsight技术

人工智能咨询培训老师叶梓 转载标明出处 语言模型在理解和执行指令方面取得了显著成功&#xff0c;但依赖人工标注数据的监督式微调需要大量标记数据&#xff0c;这不仅成本高昂&#xff0c;而且可能限制了模型识别和纠正负面属性或错误能力。另一方面&#xff0c;基于人类反馈…

在职研生活学习--20240908

文章目录 九月八日清晨&#xff0c;我们在鸟鸣声中醒来&#xff0c;精神饱满地迎接大汇演的挑战。上午&#xff0c;我们被分成舞龙队、旗手队、拳队、鼓队四个特色团队进行练习。阳光下&#xff0c;我们挥汗如雨&#xff0c;却乐此不疲。鼓声隆隆&#xff0c;龙舞飞扬&#xff…

使用ESP8266和OLED屏幕实现一个小型电脑性能监控

前言 最近大扫除&#xff0c;发现自己还有几个ESP8266MCU和一个0.96寸的oled小屏幕。又想起最近一直想要买一个屏幕作为性能监控&#xff0c;随机开始自己diy。 硬件&#xff1a; ESP8266 MUColed小屏幕杜邦线可以传输数据的数据线 环境 Windows系统Qt6Arduino Arduino 库…

企业图纸加密软件哪个最好用?10款常用图纸加密软件强力推荐!

在现代企业中&#xff0c;保护图纸和设计文件的安全性至关重要。以下是十款常用且功能强大的图纸加密软件推荐&#xff0c;帮助企业更好地保护其知识产权和敏感数据。 1. 安秉网盾 安秉网盾凭借其强大的加密技术和灵活的权限管理功能&#xff0c;成为企业保护图纸安全的首选。…

源码编译安装python3.12没有ssl模块,python3.12 ModuleNotFoundError: No module named ‘_ssl‘

已经编译安装了opensll 3.3 源码编译安装python3.12没有ssl模块&#xff0c;python3.12 ModuleNotFoundError: No module named ‘_ssl’ 报错如下&#xff1a; [rootlocalhost ~]# python Python 3.12.5 (main, Sep 9 2024, 10:33:15) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4…

vue3 指定元素全屏 screenfull(可直接粘贴使用)

业务需求 由于输入的文字较多&#xff0c;需要将输入框进行全屏展示&#xff0c;方便输入和查看&#xff01; 效果图 实现方式 下载插件"screenfull": “^6.0.2” yarn add screenfull -S项目中使用 import screenfull from "screenfull"templte中代码…

性能测试的复习3-jmeter的断言、参数化、提取器

一、断言、参数化、提取器 需求&#xff1a; 提取查天气获取城市名请求的响应结果&#xff1a;城市对查天气获取城市名的响应结果进行响应断言和json断言对查天气获取城市名添加用户参数 1、步骤 查看天气获取城市名 json提取器&#xff08;对响应结果提取、另一个接口请求…

软考系统分析师难吗?现在开始准备需要多久能考试?

先说结论&#xff1a;作为软考中的高级科目&#xff0c;难度肯定是不小的&#xff0c;一般系分的通过率只有10%-20%&#xff0c;其实和高项差不多。但是系分上限高&#xff0c;知识点不会变来变去&#xff0c;按照套路学就会更有把握。 一、什么是系统分析师 要备考系统分析师…