vue 上传视频

controlslist 属性可以用于告诉浏览器在视频播放过程中应该显示哪些默认的用户界面控件

代码:

<template>
  <div class="schematicDiagramIndex">
    <el-container>
      <el-header v-if="this.radiooCar==1">
        <el-button @click="addOpen">新增</el-button>
        <el-button @click="updateOpen">编辑</el-button>
        <el-button @click="delOpen">删除</el-button>
      </el-header>
      <el-container>
        <!-- 左侧树 -->
        <el-aside width="20rem;height: 100%;">
          <div style="height: 100%;overflow-y: scroll">
            <el-input
                placeholder="输入关键字进行过滤"
                v-model="filterText"
            >
            </el-input>
            <el-tree
                :accordion="true"
                class="filter-tree"
                :data="CompanyLeftData"
                :props="defaultProps"
                :expand-on-click-node="false"
                :default-expanded-keys="[1]"
                highlight-current
                node-key="value"
                :default-expand-all="true"
                @node-click="handleNodeClick"
                :filter-node-method="filterNode"
                ref="treeList"
                :height="heights"
            >
            </el-tree>
          </div>
        </el-aside>
       
        <el-main  v-loading="showVideo">
          <!-- 视频 -->
         <div class="video1">
          <!-- controlslist 属性可以用于告诉浏览器在视频播放过程中应该显示哪些默认的用户界面控件
             loop属性用于设置或返回视频结束时是否应该重新开始播放。
           -->
           <video
               id="video1"
               controls="controls"
               loop="loop"
               ref="video"
               :height="heights"
               controlslist="nodownload "
           >
             <source
                 :src="videoURL"
                 type="video/mp4"
             />
             您的浏览器不支持 HTML5 video 标签。
           </video>
         </div>
        </el-main>
      </el-container>
    </el-container>
    <!--    车的弹框-->
    <el-dialog
        :title="title"
        v-model="dialogVisible"
        width="30%"
        :before-close="handleClose">
      <!--      表单-->
      <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
        <el-form-item label="上级节点" prop="ParentId">
          <!--          <el-input v-model="ruleForm.ParentId" placeholder="请输入内容"></el-input>-->
          <el-select v-model="ruleForm.ParentId" placeholder="请选择">
            <el-option
                v-for="item in ParentIdOptions"
                :key="item.ID"
                :label="item.Text"
                :value="item.ID">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="视频名称" prop="VideoName">
          <el-input v-model="ruleForm.VideoName" placeholder="请输入内容"></el-input>
        </el-form-item>
        <el-form-item label="序号" prop="SortID">
          <el-input min="0" v-model="ruleForm.SortID" placeholder="请输入内容" type="number"
                    @input="changeInput(ruleForm.SortID)"></el-input>
        </el-form-item>
        <el-form-item label="上传视频" prop="pass">
          <el-upload
              ref="videoUpload"
              class="upload-demo"
              action="#"
              multiple
              :limit="1"
              :on-change="handleChange"
              :before-upload="beforeUpload"
              :on-success="onSuccess"
              :on-error="onError"
              accept="video/*"
              :auto-upload="false"
              :on-exceed="handleExceedVisio"
              :file-list="fileList">
            <el-button size="small" type="primary">点击上传</el-button>
          </el-upload>
        </el-form-item>

        <el-form-item>
          <el-button type="primary" @click="submitForm">提交</el-button>
          <el-button @click="resetForm('ruleForm')">重置</el-button>
        </el-form-item>
      </el-form>
    </el-dialog>
  </div>
</template>
<script>
export default {
  name: "schematicDiagramIndex",
  data() {
    return {
      //树形结构
      defaultProps: {
        children: "Children",
        label: "Text",
        id: "ID",
      },
      //左侧树形数据
      CompanyLeftData: [],
      //油泵车
      oldoil: {
        // value: "1",
        label: "油泵车",
        children: [
          {
            value: "1-1",
            label: "操作部分",
            type: "YBC",
            children: [
              {
                value: "1",
                label: "双系统独立自循环",
                type: "YBC",
              },
              {
                value: "4",
                label: "双系统合流自循环",
                type: "YBC",
              },
              {
                value: "5",
                label: "液压系统排气",
                type: "YBC",
              },
              {
                value: "8",
                label: "油液固体颗粒污染自检和取样检测",
                type: "YBC",
              },
              {
                value: "9",
                label: "双系统独立输出",
                type: "YBC",
              },
              {
                value: "10",
                label: "双系统合流输出",
                type: "YBC",
              },
              {
                value: "11",
                label: "加油软管内液压油自循环净化",
                type: "YBC",
              },
              {
                value: "12",
                label: "为飞机补充加注液压油",
                type: "YBC",
              },
              {
                value: "13",
                label: "液压油箱自加油",
                type: "YBC",
              },
              {
                value: "14",
                label: "液压系统除水除气",
                type: "YBC",
              },
              {
                value: "15",
                label: "操作界面",
                type: "YBC",
              },
            ],
          },
          {
            value: "1-2",
            label: "产品组成",
            type: "YBC",
            children: [
              {
                value: "2",
                label: "箱体组成",
                type: "YBC",
              },
              {
                value: "3",
                label: "电气系统组成",
                type: "YBC",
              },
              {
                value: "6",
                label: "液压系统组成",
                type: "YBC",
              },
              {
                value: "7",
                label: "动力系统组成",
                type: "YBC",
              },
            ],
          },
          {
            value: "1-3",
            label: "原理构图",
            type: "YBC",
            children: [
              {
                value: "17",
                label: "清洗飞机液压系统油液原理",
                type: "YBC",
              },
              {
                value: "18",
                label: "双系统独立输出对接保障原理",
                type: "YBC",
              },
              {
                value: "19",
                label: "双系统合流并联输出对接保障原理",
                type: "YBC",
              },
              {
                value: "20",
                label: "为飞机补充加注液压油原理",
                type: "YBC",
              },
              {
                value: "21",
                label: "液压系统油箱自加油原理",
                type: "YBC",
              },
              {
                value: "22",
                label: "液压系统自循环原理",
                type: "YBC",
              },
            ],
          },
          {
            value: "1-4",
            label: "功能用途",
            type: "YBC",
            children: [
              {
                value: "16",
                label: "功能用途",
                type: "YBC",
              },
            ],
          },
        ],
      },
      //电源车
      PowerTruck: {},
      filterText: "",//树形数据过滤字段
      //视频地址
      videoURL: "",
      heights: "", //高度
      radiooCar: null, //车辆选择的类型
      dialogVisible: false,//dialog弹出框控制显隐
      dialogTitle: "",//dialog的标题提示
      rules: {
        VideoName: [
          {required: true, message: '请输入活动名称', trigger: 'blur'},
        ],
      },//校验
      ruleForm: {},//表单数据
      fileList: [],//上传视频的数组
      submitVideo: null,
      //父级下拉数据
      ParentIdOptions: [],
      //选中左侧树数据
      checkedLeftTreeData: null,
      //video loading
      showVideo:true,
    };
  },
  created() {
    this.init();
  },
  mounted() {
    this.$nextTick(() => {
      this.$refs.treeList.$el.getBoundingClientRect().top; //表格距离浏览器的高度
      // 根据浏览器高度设置初始高度
      this.heights =
          window.innerHeight - this.$refs.treeList.$el.offsetTop - 150;
      // 监听浏览器高度变化,修改表格高度
      window.onresize = () => {
        this.heights =
            window.innerHeight - this.$refs.treeList.$el.offsetTop - 150;
      };
    });
  },
  methods: {
    //初始数据
    init() {
      this.getCarData();
    },
    // 获取本地存储的车辆选择类型,判断是电源车还是油泵车
    getCarData() {
      this.radiooCar = sessionStorage.getItem("radioCar");
      this.getTreeData()
    },
    //  获取左侧树结构
    getTreeData() {
      //获取本地存储的选择的车型 调接口
      let params = {EquipmentType: this.radiooCar}
      this.$WAPI.Ts_VideoGetTreeList(params).then((res) => {
        //赋值
        this.CompanyLeftData = res.data.data
        //父级ID
        this.ParentIdOptions = res.data.data
        //默认选中展示
        this.setCurrentKeyData();
      })
    },
    //进行切换数据(点击事件)
    handleNodeClick(data, checked) {
      this.$refs.video.load();
      if (checked) {
        //进行勾选的数据
        this.$refs.treeList.setCheckedNodes([data]);
        //勾选的数据进行赋值保存
        this.checkedLeftTreeData = data
        //获取视频url 传递后端参数
        let param={ ID:data.ID }
        this.$WAPI.Ts_VideoGetVideoUrl(param).then((res) => {
          this.showVideo=false
          //赋值视频路径
          this.$refs.video.src = res.data.data ? res.data.data.URL : ""
        })
      }
    },
    //进行模糊查询
    filterNode(value, data) {
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
    },
    //  默认选中
    setCurrentKeyData() {
      this.$nextTick(() => {
        this.$refs.treeList &&
        this.$refs.treeList.setCurrentKey(
            this.CompanyLeftData[0].Children[0]
        );
        this.handleNodeClick(
            this.CompanyLeftData[0].Children[0],
            true
        );
      });
    },
    //#region 电源车 有新增、编辑、删除等功能
    //新增打开dialog事件
    addOpen() {
      this.dialogVisible = true
      this.title = "新增"
      this.ruleForm = {}
      this.fileList = []
    },
    //编辑
    updateOpen() {
      this.dialogVisible = true
      this.title = "编辑"
      this.ruleForm = this.checkedLeftTreeData.Model
      const fileList = []
      if (this.ruleForm.FileName !== null||this.ruleForm.FileUrl !== null){
        fileList.push({
          name: this.ruleForm.VideoName,
          url: this.ruleForm.FileUrl,
        })
      }
      this.fileList=fileList
    },
    //删除
    delOpen() {
      //选中的参数
      let param = {
        IDs: this.checkedLeftTreeData.ID
      }
      this.$WAPI.Ts_VideoDelete(param).then(res => {
        this.$message({
          message: res.data.msg,
          type: "success",
        });
        this.$refs.video.src = ""
        this.init()
      })
    },
    //dialog关闭事件
    handleClose(done) {
      this.$confirm('确认关闭?')
          .then(_ => {
            done();
          })
          .catch(_ => {
          });
    },
    //提交数据
    submitForm() {
      // 要从这个接口传递文件 我知道啊
      this.dialogVisible = false
      const formData = new FormData();
      //上级节点不选择就是0
      this.ruleForm.ParentId = this.ruleForm.ParentId ? this.ruleForm.ParentId : 0
      //赋值
      this.ruleForm.ID !==undefined ? formData.append('ID', this.ruleForm.ID) :"" //ID
      formData.append('ParentId', this.ruleForm.ParentId) //父级节点
      formData.append('VideoName', this.ruleForm.VideoName) //视频名称
      formData.append('VideoType', this.radiooCar) //车辆类型
      formData.append('SortID', this.ruleForm.SortID) //序号
      formData.append('files', this.submitVideo) //序号
      this.$WAPI.Ts_VideoOperation(formData).then((res) => {
        this.$message({
          message: res.data.msg,
          type: "success",
        });
        this.showVideo=false
        this.init()
      })
    },
    //清空表单
    resetForm() {
      this.$refs.ruleForm.resetFields();
      //清空文件
      this.fileList=[]
    },
    //#endregion

    //#region 上传视频
    // 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。
    beforeUpload(file) {
      const isVideo = file.type === 'video/mp4';
      if (!isVideo) {
        this.$message.error('请上传视频文件');
      }
      return isVideo;
    },

    //文件上传成功时的钩子
    onSuccess(response, file, fileList) {
      this.$message.success('视频上传成功');
      // 处理上传成功后的逻辑,例如更新UI或者处理其他数据
    },
    //文件上传失败时的钩子
    onError(err, file, fileList) {
      console.log(err, file)
      this.$message.error('视频上传失败');
      // 处理上传失败后的逻辑
    },
    //改变
    handleChange(file, fileLists) {
      //文件流
      this.submitVideo = file.raw;
      //名称回显
      this.ruleForm.VideoName = this.submitVideo.name.split(".")[0]
    },
    //上传限制
    handleExceedVisio() {
      this.$message.warning(`当前限制选择 1 个文件,请删除后继续上传!`)
    },
    //#endregion
    //正则表达
    changeInput(value) {
      this.ruleForm.SortID = value.replace(/^[0]+[0-9]{1,}|[^\d]/g, '');
    }
  },

  computed: {},
  watch: {
    filterText(val) {
      this.$refs.treeList.filter(val);
    },
  },
};
</script>

<style scoped>
.schematicDiagramIndex {
  width: 100%;
}

.video1 {
  width: 100%;
  background: transparent;
}

::v-deep .el-tree-node__content {
  color: black;
  font-size: 14px;
  font-weight: 400;
  margin: 5px;
}

::v-deep .el-tree {
  background-color: transparent;
  --el-tree-node-hover-bg-color: #b5b7b7;
  margin-top: 20px;
  padding-top: 10px;
  padding-bottom: 10px;
  background-size: 100% 100%;
}

::v-deep
.el-tree--highlight-current
.el-tree-node.is-current
> .el-tree-node__content {
  background-color: #1a518c;
  color: #fcfbfb;
}

.filter-tree {
  padding-top: 1%;
  height: 48rem;
  overflow: scroll;
}
</style>

 

案例图
表单

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【精选】发布应用到应用商店的基本介绍

摘要 本文旨在介绍如何在各大应用商店发布应用&#xff0c;包括市场选择、准备材料、上架步骤以及常见被拒原因及解决方法。通过详细的步骤和经验分享&#xff0c;帮助开发者顺利将应用推向市场。 引言 随着移动应用市场的不断发展&#xff0c;越来越多的开发者希望将他们的…

如何关闭WordPress的自动更新功能

Wordpress为什么自动更新 WordPress自动更新是为了提供更好的安全性和稳定性。 安全性&#xff1a;WordPress是一个广泛使用的内容管理系统&#xff0c;因此成为恶意攻击的目标。WordPress的自动更新功能确保你的网站及时获得最新的安全补丁和修复程序&#xff0c;以保护你的网…

自动化测试selenium(1)

目录 什么是自动化测试 自动化测试 单元测试 接口测试 UI自动化测试 适合做自动化测试的项目 如何实施自动化测试 自动化测试需要了解的技能 selenium介绍 特性 原理 什么是自动化测试 自动化测试 自动化测试是指软件测试的自动化, 在预设状态下运行应用程序或者系…

标准 I/O 库

直接使用系统调用的缺点&#xff1a; (1) 影响系统性能 系统调用比普通函数调用开销大 因为&#xff0c;频繁的系统调用要进行用户空间和内核空间的切换 (2) 系统调用一次所能读写的数据量大小&#xff0c;受硬件的限制 解决方案&#xff1a;使用带缓冲功能的标准I/O库&#x…

RocketMQ笔记(七)SpringBoot整合RocketMQ发送事务消息

目录 一、简介1.1、流程图1.2、事务消息流程介绍 二、Maven依赖三、生产者3.1、application配置3.2、员工表3.3、实体3.4、持久层3.5、监听器 四、测试4.1、普通消息4.2、事务消息4.2.1、消费者4.2.2、正常提交4.2.3、异常提交 五、其他5.1、接口说明5.2、checkLocalTransactio…

智能传真机触摸屏中应用的触摸感应芯片

智能传真机是应用扫描和光电变换技术&#xff0c;把文件、图表、照片等静止图像转换成电信号&#xff0c;传送到接收端&#xff0c;以记录形式进行复制的通信设备。智能传真机将需发送的原件按照规定的顺序&#xff0c;通过光学扫描系统分解成许多微小单元&#xff08;称为像素…

AXS4110 单节锂电池保护芯片 爱协生 兼容XB6042/CM1124 低成本

概述 AXS4110系列产品是一种针对锂离子或聚合物电池保护的高集成解决方案芯片。AXS4110系列包含先进的功率MOSFET、高精度电压检测电路和延时电路。AXS4110系列采用DFN1x1x0.37_4封装&#xff0c;使其成为小体积电池保护的理想解决方案。 AXS4110具有过充、过放、过流、0V充电…

SpirngBoot开发常用知识

springboot开发常用知识 命令行打包SpringBoot打包插件window端口命令临时属性设置热部署启动热部署热部署范围 常用计量单位数据校验加载测试的专用属性Web环境模拟测试如何发送虚拟请求业务层测试回滚随机产生测试用例内置数据源 命令行打包 对SpringBoot项目进行打包命令行…

液冷是大模型对算力需求的必然选择?|英伟达 GTC 2024六大亮点

在这个以高性能计算和大模型推动未来通用人工智能时代&#xff0c;算力已成为科技发展的隐形支柱。本文将重点探讨算力的演进&#xff0c;深入分析在不同领域中算力如何成为推动进步的基石&#xff1b;着眼于液冷如何突破算力瓶颈成为引领未来的先锋&#xff0c;对液冷散热的三…

智慧城市中的物联网革命——青创智通

工业物联网解决方案-工业IOT-青创智通 得益于物联网 (IoT)的变革力量&#xff0c;智慧城市的概念正在迅速成为现实。物联网正在从根本上改变城市的运作方式&#xff0c;为城市居民带来更高的效率、可持续性和生活质量。在本文中&#xff0c;我们将探讨物联网在智慧城市中的作用…

小程序商城免费搭建之java商城 电子商务Spring Cloud+Spring Boot+二次开发+mybatis+MQ+VR全景

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

面对DDOS攻击,有哪些解决办法

随着互联网带宽的持续增长以及DDOS黑客技术的发展&#xff0c;DDOS拒绝服务攻击的实施变得愈发容易。商业竞争、打击报复、网络敲诈等多种因素&#xff0c;各行各业的用户都曾受到DDOS攻击的威胁。 一旦遭受到DDOS攻击&#xff0c;随之而来的就是业务宕机&#xff0c;用户无法…

【必看】网络安全从业者书单推荐

推荐几本网络安全从业者必读的书籍 一、计算机基础 《网络硬件设备完全技术宝典》&#xff08;第3版&#xff09; 本书共768页&#xff0c;包括交换机、路由器、安全设备、网络设备等重要和常用的网络设备&#xff0c;图文并茂&#xff0c;语言流畅&#xff0c;内容及其丰富…

NL2SQL基础系列(2):主流大模型与微调方法精选集,Text2SQL经典算法技术回顾七年发展脉络梳理

NL2SQL基础系列(2)&#xff1a;主流大模型与微调方法精选集&#xff0c;Text2SQL经典算法技术回顾七年发展脉络梳理 Text-to-SQL&#xff08;或者Text2SQL&#xff09;&#xff0c;顾名思义就是把文本转化为SQL语言&#xff0c;更学术一点的定义是&#xff1a;把数据库领域下的…

MQ之————如何保证消息的可靠性

MQ之保证消息的可靠性 1.消费端消息可靠性保证&#xff1a; 1.1 消息确认&#xff08;Acknowledgements&#xff09;&#xff1a; 消费者在接收到消息后&#xff0c;默认情况下RabbitMQ会自动确认消息&#xff08;autoAcktrue&#xff09;。为保证消息可靠性&#xff0c;可以…

如何用Python编写简单的网络爬虫(页面代码简单分析过程)

一、什么是网络爬虫 在当今信息爆炸的时代&#xff0c;网络上蕴藏着大量宝贵的信息&#xff0c;如何高效地从中获取所需信息成为了一个重要课题。网络爬虫&#xff08;Web crawler&#xff09;作为一种自动化工具&#xff0c;可以帮助我们实现这一目标&#xff0c;用于数据分析…

发挥自定义表单开源优势,助力实现流程化办公!

在数字化发展进程中&#xff0c;利用低代码技术平台、自定义表单开源的优势特点&#xff0c;可以让企业实现流程化办公&#xff0c;从而实现提质增效的办公目的。作为一种新兴的应用开发模式&#xff0c;低代码技术平台获得了很多新老客户朋友的青睐和喜爱&#xff0c;正以它自…

静力水准仪如何进行数据获取及转换?

静力水准仪作为现代测量技术中的一项重要工具&#xff0c;通过利用磁致伸缩效应实现了对被测物体沉降量的高精度测量。本文将介绍磁致式静力水准仪数据获取的原理与方法&#xff0c;以及数据转换的过程&#xff0c;探讨其在工程安全监测领域的应用价值。 数据获取原理 静力水准…

【QT入门】 Qt自定义控件与样式设计之QPushButton点击按钮弹出菜单

往期回顾&#xff1a; 【QT入门】 Qt自定义控件与样式设计之QPushButton实现鼠标悬浮按钮弹出对话框-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QComboBox样式表介绍-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QCheckBox qss实现按钮开关-CSDN博客 【QT入门】 Qt自定义…

ai智能问答免费API接口

智能对话API接口&#xff0c;可以为网站或其他产品提供强大的智能交互功能&#xff0c;无需自行开发复杂的语义分析和自然语言处理算法。这使得开发者能够更专注于产品的核心功能和用户体验&#xff0c;加速产品上线速度并降低开发成本。 智能对话API接口的功能还包括对话内容…