首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >el-select二级联动效果-摄像头

el-select二级联动效果-摄像头

作者头像
程序媛夏天
发布于 2024-01-18 13:22:06
发布于 2024-01-18 13:22:06
25704
代码可运行
举报
运行总次数:4
代码可运行
效果图

需求:改变货架编号,显示出对应的监控层数。 并且初次渲染的时候,也要展示货架编号的对应监控层列表。

源代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <Dialog
    :title="$t('lang.camera')"
    width="800px"
    :visible="visible"
    :btnName="$t('lang.close')"
    @handleOk="handleOk"
    @handleClose="handleClose"
  >
    <div
      class="title"
      v-if="cameraDetailInfo.imgDeviceName && cameraDetailInfo.imgDeviceSn"
    >
      {{
        cameraDetailInfo.imgDeviceName +
          "(" +
          cameraDetailInfo.imgDeviceSn +
          ")"
      }}
    </div>
    <div class="dialog-content">
      <el-table :data="deviceCameras || []">
        <el-table-column prop="cameraSn" :label="$t('lang.no')" :min-width="30">
          <template slot-scope="scope">
            <span>{{ scope.row.cameraSn }}</span>
          </template>
        </el-table-column>

        <el-table-column
          prop="shelvesSn"
          :label="$t('lang.monitorShielfNo')"
          :min-width="110"
        >
          <template slot-scope="scope">
            <el-select
              v-model="deviceCameras[scope.$index].shelvesSn"
              @change="val => changeShelvesSn(val, scope.$index)"
              size="small"
            >
              <el-option
                :placeholder="$t('lang.pleaseSelect')"
                v-for="item in shelvesList"
                :key="item.shelvesSn"
                :label="item.shelvesSn"
                :value="item.shelvesSn"
              ></el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column
          prop="cameraLevel"
          :label="$t('lang.monitorShielfLevel')"
          :min-width="110"
        >
          <template slot-scope="scope">
            <el-select
              v-model="deviceCameras[scope.$index].cameraLevel"
              size="small"
            >
              <el-option
                :placeholder="$t('lang.pleaseSelect')"
                v-for="item in deviceCameras[scope.$index].levelList"
                :key="item"
                :label="item"
                :value="item"
              ></el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column
          prop="status"
          :label="$t('lang.connectionStatus')"
          :min-width="50"
        >
          <template slot-scope="scope">
            <span>{{
              scope.row.status === 1 ? $t("lang.onLine") : $t("lang.offLine")
            }}</span>
          </template>
        </el-table-column>
        <el-table-column :label="$t('lang.operation')" :min-width="50">
          <template slot-scope="scope">
            <div class="icon-box">
              <el-popconfirm
                hide-icon
                placement="left"
                :title="$t('lang.confirmRefreshShelf')"
                :ref="`popover-${scope.$index}`"
                popper-class="my-popper"
                class="popper-style"
                @confirm="
                  refreshCamera(
                    scope.row.cameraSn,
                    cameraDetailInfo.imgDeviceSn,
                    scope.row.cameraLevel,
                    scope.row.shelvesSn
                  )
                "
              >
                <div class="delete-icon" slot="reference">
                  <Icon
                    link="icon-gengxin2"
                    :allowProp="
                      (deviceCameras[scope.$index].shelvesSn !==
                        cameraDetailInfo.deviceCameras[scope.$index]
                          .shelvesSn ||
                      deviceCameras[scope.$index].cameraLevel !==
                        cameraDetailInfo.deviceCameras[scope.$index].cameraLevel
                        ? true
                        : false)
                    "
                  ></Icon>
                </div>
              </el-popconfirm>
            </div>

            <div class="icon-box" v-show="scope.row.status === 0">
              <el-popconfirm
                hide-icon
                :title="$t('lang.confirmDelete')"
                :ref="`popover-${scope.$index}`"
                popper-class="delete-popper"
                class="popper-style"
                @confirm="
                  deleteCamera(scope.row.cameraSn, cameraDetailInfo.imgDeviceSn,scope.$index)
                "
              >
                <div class="delete-icon" slot="reference">
                  <Icon link="icon-shanchu-copy" :allowProp="true"></Icon>
                </div>
              </el-popconfirm>
            </div>
          </template>
        </el-table-column>
      </el-table>
    </div>
  </Dialog>
</template>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
script>
import { get } from "http";
import { runInThisContext } from "vm";
import Vue from "vue";
export default {
  props: {
    visible: Boolean,
    warehouseSn: String,
    cameraDetailInfo:{
      type: Object,
      default:{}
    }
  },
  data() {
    return {
      shelvesList: [], //货架编号
      levelList: [],
      deviceCameras: []
    };
  },

  watch: {
    cameraDetailInfo: {
      handler(newVal, oldVal) {
        if (newVal !== null && oldVal !== null) {
          this.deviceCameras = JSON.parse(
            JSON.stringify(this.cameraDetailInfo.deviceCameras)
          )
          this.deviceCameras.map(item =>{
              item.levelList=[]
              this.shelvesList.map(shelve=>{
                if(shelve.shelvesSn === item.shelvesSn){
                  item.levelList = shelve.levels
                }
              })
            })
        }
      }
    }
  },

  computed: {
    // deviceCameras() {
    //   return this.cameraDetailInfo === null
    //     ? []
    //     : this.cameraDetailInfo.deviceCameras;
    // },
    'deviceCameras[scope.$index].shelvesSn'(){
      return this.allowProp = true
    }
  },

  created() {
    this.getSelectShelfList();
  },

  methods: {
    //获取下拉列表
    getSelectShelfList() {
      this.$api.shelf
        .shelvesSelectList({ houseSn: this.warehouseSn })
        .then(({ code, data }) => {
          if (code === 0) {
            this.shelvesList = data;
            this.shelvesList.unshift({
              shelvesSn: "",
              levels: ""
            });
          }
        });
    },
    
    changeShelvesSn(val, index) {
      if (val === "") {
        this.deviceCameras[index].cameraLevel = "";
        // this.levelList[index] = "";
        return;
      }
      //shelvesList 它是里面包含了shelvesSn 和 levels的数组
      //selectedShelf:选中货架编号
      let selectedShelf = this.shelvesList.filter(
        item => item.shelvesSn === val
      );

      if (selectedShelf && selectedShelf.length > 0) {
        //货架层数组
        // this.levelList[index] =
        //   (selectedShelf.length > 0 && selectedShelf[0].levels) || [];
        //默认层
        this.deviceCameras[index].levelList = selectedShelf[0].levels
        this.deviceCameras[index].cameraLevel = this.levelList[0] > 0 ? 1 : "";
      }
    },
    refreshCamera(cameraSn, imgDeviceSn, cameraLevel, shelvesSn) {
      this.$api.device
        .bindCamera({
          cameraSn: cameraSn,
          imgDeviceSn: imgDeviceSn,
          level: cameraLevel,
          shelvesSn: shelvesSn
        })
        .then(({ code, msg }) => {
          if (code === 0) {
            this.$message({
              message: this.$t("lang.updateSuccess"),
              type: "success"
            });
          } else {
            return false;
          }
        });
    },
    deleteCamera(cameraSn, imgDeviceSn,index) {
      //cameraSn	摄像头编号
      //imageSn	图像采集设备编号
      this.$api.device
        .deleteCameraDetail({ cameraSn: cameraSn, imageSn: imgDeviceSn })
        .then(({ code, msg }) => {
          if (code === 0) {
            this.$message({
              message: msg,
              type: "success"
            });
            this.deviceCameras.splice(index,1)//删除单行,这是最简单的方法,
           // 而不是调用父组件的刷新方法,直接用index的方式就好了
          }
        });
    },
    //关闭
    handleClose() {
      this.$parent.handleCloseCameraDialog();
    },
    //关闭按钮
    handleOk() {
      this.$parent.handleCloseCameraDialog();
    }
  }
};
</script>
我的难点在于

不知道将对应的层数怎样将它展示出来 这个后端给的结构是这样的 思路:定义一个选中的变量,然后里面从this.shelvesList.filter过滤掉,里面的shelvesSn 就是change里面的val,然后让 v-for里面的this.deviceCameras[index].levelList = selectedShelf[0].levels 意思就是绑定的=选中的层数

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Maven Archetype 多 Module 自定义代码脚手架
大部分公司都会有一个通用的模板项目,帮助你快速创建一个项目。通常,这个项目需要集成一些公司内部的中间件、单元测试、标准的代码格式、通用的代码分层等等。
艾小仙
2022/01/24
1.2K0
Maven Archetype 多 Module 自定义代码脚手架
Maven私服搭建及自定义Archetype(骨架)
通过私服MAVEN能够更有效的管理自己的依赖包,像阿里云的短信jar包等第三方的依赖包,很多公服是没有的,在比如MAVEN是不支持多个仓库下载的,但是可以配置多个仓库。在私服上就可以解决以上问题。
Vincent-yuan
2021/12/08
1.4K0
Maven私服搭建及自定义Archetype(骨架)
基于maven的项目脚手架,一键创建项目的项目模板
Springboot的出现极大的简化了项目开发的配置,然而,到真实使用的时候还是会有一堆配置需要设定。比如依赖管理,各种插件,质量扫描配置,docker配置,持续集成配置,设置业务独特的架构配置等。这时候,如果创建一个包含这一切的脚手架,当需要创建项目的时候,只要create就好了。
Ryan-Miao
2019/07/03
2.2K0
基于maven的项目脚手架,一键创建项目的项目模板
手写Maven的archetype项目脚手架
  maven是一个很好的代码构建工具,采用“约定优先于配置”的原则进行项目管理,相信很多的java开发者应该都了解maven并可能在工作当中都是通过maven来管理项目的,在创建的项目的时候,我们往往会使用maven内置的项目骨架也就是archetype来快速生成项目结构。但是在一个团队做开发的过程中,可能仅仅依靠maven预先提供的archetyp可能是不够的,团队之间协作有自己的定义方式,每个人的结构定义风格也不尽相同,在这样的背景下我们有必要去定义一个统一的代码骨架供团队使用,这样做的好处是当团队需要开始一个新项目的时候,可以利用自定义的maven骨架一键生成项目。
阿豪聊干货
2018/08/09
1.8K0
手写Maven的archetype项目脚手架
Mavan:自定义骨架及工程初始化
最近在看低代码平台和流水线相关的一些东西,看到一些平台会提供自动生成代码库的能力,顺藤摸瓜,正好回顾一下maven的能力,并在这里做一些尝试和验证。
程序员架构进阶
2022/12/01
8690
Mavan:自定义骨架及工程初始化
基于start.spring.io,我实现了Java脚手架定制
2020 年,我们公司迎来了业务发展的迅猛期,滋生大量创建工程的需求。总体来说,创建工程面临着以下几个问题。
杨同学technotes
2022/12/01
1.2K0
老大说新项目的结构和 xxx 项目一样就可以了,我 ……
" 又要开发新项目了,还是创建新项目,怎么办?老大说按照 xxx 项目的结构创建一个新项目就可以了…… "
程序员小航
2020/11/23
8300
老大说新项目的结构和 xxx 项目一样就可以了,我 ……
自定义maven项目结构-maven archtype
背景 经常使用同一套类似的工程结构,就想着能不能自动构建,不用每次都进行工程结构的拷贝,另外呢也是想建立一套项目工程结构的规范,运用技术代替人工
shengjk1
2018/12/27
1K0
基于领域模型构建多模块项目骨架
互联网发展到现在,从刚开始的单体单机架构到现在的分布式微服务架构,虽然带来了不胜枚举的好处和便利,但是也让新应用的或者新业务板块的搭建增加了游戏难度,举个具体的场景,应用经过应用模块细分和代码分层后大致变成了这个样子:
叔牙
2020/11/19
1.8K0
基于领域模型构建多模块项目骨架
使用Maven Archetype创建Java项目模板
简而言之,Archetype是一个Maven项目模板工具包。原型被定义为一种原始的模式或模型,所有其他同类的东西都是从中产生的。当我们试图提供一个提供生成Maven项目的一致方法的系统时,这个名字就合适了。Archetype将帮助作者为用户创建Maven项目模板,并为用户提供生成这些项目模板的参数化版本的方法。
东溪陈姓少年
2020/08/06
1.4K0
Maven快速学习教程
在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要。
张果
2018/10/09
2.5K0
Maven快速学习教程
Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
两年半前写的关于Maven的介绍,现在看来都还是不错的,自己转下。写博客的一大好处就是方便自己以后查阅,自己总结的总是最靠谱的。
bear_fish
2018/09/19
3.8K0
Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
项目管理与构建——Maven
Maven下载地址http://maven.apache.org/download.cgi
羊羽shine
2019/05/29
7200
我把公司 10 年老系统改造 Maven,真香!!
公司有几个老古董项目,应该是 10 年前开发的了,有一个是 JSP + Servlet,有一个还用的 SSH 框架,打包用的 Ant,是有多老啊,我想在座的各位很多都没听过吧。
Java技术栈
2020/09/24
5290
我把公司 10 年老系统改造 Maven,真香!!
一个小时学会Maven
在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要。
张果
2018/10/09
2.8K0
一个小时学会Maven
老问题了:idea中使用maven archetype新建项目时卡住.md
作为一个后端Java打工人,idea就是最重要的打饭工具。创建项目,熟悉吧,但是,这么多年下来,因为idea换了版本,电脑换了等等,我还是时不时遇到根据maven archetype新建maven项目卡住。没错,我说的就是下面这样的场景:
低级知识传播者
2023/08/30
1.7K0
老问题了:idea中使用maven archetype新建项目时卡住.md
Maven常用命令 原
说到命令,则不得不提一下环境变量,在之前的博文中简单提了一下环境变量的配置,这里具体说一下。说完环境变量的配置,然后就是Maven的常用命令,这里说的是常用的几个命令,不常用的也许不会提到,后续可能会补上。
云飞扬
2019/03/13
6980
Maven常用命令
                                                                            原
入门maven?本文足矣
以前开发的时候,如果A项目需要某个jar包,可能去网上搜索下载jar包,然后复制粘贴在开发对应的位置,如果B项目也需要这个jar包,那么同样需要再次手动复制粘贴到对应的位置。
用户8902830
2022/09/22
7120
入门maven?本文足矣
Maven 那点事儿(转)
毋庸置疑,Jason 也是一个秃顶。James Gosling、Rod Johnson、Gavin King,你们可以告诉我为什么吗?
Dawnzhang
2018/10/18
6820
Maven 那点事儿(转)
十二、Maven项目模板「建议收藏」
Maven提供用户,使用原型的概念,不同类型的项目模板(以数字614)是一个非常大的列表。 Maven帮助用户快速开始使用以下命令创建新的Java项目
全栈程序员站长
2022/09/09
7200
十二、Maven项目模板「建议收藏」
推荐阅读
相关推荐
Maven Archetype 多 Module 自定义代码脚手架
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档