首页 > 其他分享 >element-ui使用巧技

element-ui使用巧技

时间:2023-08-17 15:56:41浏览次数:30  
标签:el data element ui 巧技 msg Message true message

1.全局修改定义message提示信息

//大写的Message是个构造函数
//1是重新定义构造函数来挂载到原型覆盖原来的。
//2是直接引入Message重新定义它的原型方法。

import Element,{ Message } from 'element-ui'

const message = function(options) {
  let opt = Object.assign(options,{showClose:true})
  Message(opt)
}
message.info = function(msg){
    Message({
      message: msg,
      showClose: true,
    })
}
message.warning = function(msg){
    Message({
      message: msg,
      type: 'warning',
      showClose: true,
    })
}
message.error = function(msg){
    Message({
      message: msg,
      type: 'error',
      showClose: true,
    })
}
message.success = function(msg){
  debugger;
    Message({
      message: msg,
      type: 'success',
      showClose: true,
    })
}

Vue.prototype.$message= message


或者
import { Message } from 'element-ui'
Message.info = function(msg){
  Message({
    message: msg,
    showClose: true,
  })
}
Message.warning = function(msg){
  Message({
    message: msg,
    type: 'warning',
    showClose: true,
  })
}
Message.error = function(msg){
  Message({
    message: msg,
    type: 'error',
    showClose: true,
  })
}
Message.success = function(msg){
  Message({
    message: msg,
    type: 'success',
    showClose: true,
  })
}

//或者手动自己加
import { Message } from 'element-ui'
Message({
	message: '提示信息',
  type: 'success',
  showClose: true,
})

2.select与子项的关系

如果select的v-model绑定的值和option的value值一样,那么就会显示option的label绑定的值

3.vue 省市区三级联动选择

npm install element-china-area-data -S

import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode } from 'element-china-area-data'

  1. provinceAndCityData是省市二级联动数据(不带“全部”选项)
  2. regionData是省市区三级联动数据(不带“全部”选项)
  3. provinceAndCityDataPlus是省市区三级联动数据(带“全部”选项)
  4. regionDataPlus是省市区三级联动数据(带“全部”选项)
  5. "全部"选项绑定的value是空字符串""
  6. CodeToText是个大对象,属性是区域码,属性值是汉字 用法例如:CodeToText['110000']输出北京市
  7. TextToCode是个大对象,属性是汉字,属性值是区域码 用法例如:TextToCode['北京市'].code输出110000,TextToCode['北京市']['市辖区'].code输出110100,TextToCode['北京市']['市辖区']['朝阳区'].code输出110105



省市区三级联动(不带“全部”选项)

<template>
  <div id="app">
    <el-cascader
      size="large"
      :options="options"
      v-model="selectedOptions"
      @change="handleChange">
    </el-cascader>
  </div>
</template>
 
<script>
  import { regionData } from 'element-china-area-data'
  export default {
    data () {
      return {
        options: regionData,
        selectedOptions: []
      }
    },
 
    methods: {
      handleChange (value) {
        console.log(value)
      }
    }
  }
</script>

4.隐藏组件el-scrollbar的使用

纵向滚动条基础使用

使用注意点: el-scrollbar 标签 必须设定高度. 只有包裹内容超过给定高度, 才会出现滚动条

<el-scrollbar style="height:300px">
  <div>....</div>
</el-scrollbar>

//也可以给 el-scrollbar添加 class 属性.
<el-scrollbar class="height-p-100">
    <div>...</div>
</el-scrollbar>

横向滚动条基础使用

横向滚动条在使用上和纵向滚动条使用的方法一样,只需给 el-scrollbar 标签设定宽度即可,如果包裹内容超出最大宽度就会出现横向滚动条

<el-scrollbar style="width:200px">
  <div>....</div>
</el-scrollbar>

横向滚动条在使用的时候会有一些问题,主要表现在这几个地方:

问题1: window系统下,使用横向滚动条后标签底部出现原生滚动条

解决方法:给 el-scrollbar 添加一个父级 div,父级 div 设定一个高度值,比如 200px,el-scrollbar 设定 200px + 17px = 217px。如果父级div 高度为 100%, 则 el-scrollbar 的高度为 height: calc( 100% + 17px )

<div style="height:200px">
    <el-scrollbar style="height:217px">
        <div>....</div>
    </el-scrollbar>
</div> 

注意事项:el-scrollbar 属于一个底层的公共组建,在 element 的包含的组建中,好多都依赖了这个滚动条组建,所有一般不建议修改原始的CSS样式,如果要修改,可以套一个div,让样式效果只作用在当前标签内

文档:

<el-scrollbar
    wrapClass="class-name"
    viewClass="class-namt"
    wrapStyle="color:'#fff';fontSize:'16px';"
    viewStyle="color:'#fff';fontSize:'16px';"
    :native="false"
    :noresize="true"
    tag="ul"
>
    <div>...</div>
</el-scrollbar>

参数

说明

类型

可选值

默认值

wrapClass

可选参数,容器的样式名

string

-

-

viewClass

可选参数,展示视图的样式名

string

-

-

wrapStyle

可选参数,容器的样式

string

-

-

viewStyle

可选参数,展示视图的样式

string

-

-

native

可选参数,是否使用原生滚动

boolean

-

false

noresize

可选参数,容器大小是否是不可变的

boolean

-

false

tag

可选参数,渲染容器的标签

     

5.el-scrollbar结合el-tabs的监听滚动、跳转锚点

监听滚动条滚动事件

el.scrollTop 滚动的距离,可以读可写

mounted() {
  this.handleScroll()
},
methods: {
  handleScroll() {
    let scrollbarEl = this.$refs.scrollbar.wrap
    scrollbarEl.onscroll = () => {
      if(scrollbarEl.scrollTop > 135) { //el.scrollTop 滚动的距离,可以读可写
        //滚动距离大于135时
      } 
    }
  }
}

跳转锚点

el.scrollTop 滚动的距离,可以读可写

handleTabClick({ name }) {
  //方式1--scrollIntoView滚动元素跳转 (产生视图偏移bug)
  // this.$refs.tabs.$el.querySelector(`#${name}`)?.scrollIntoView({ behavior: 'smooth' })

  //方式2--跳转到元素
  const height = this.$refs.tabs.$el.querySelector(`#${name}`).offsetTop
  let scrollbarEl = this.$refs.scrollbar.wrap
  scrollbarEl.scrollTop = height
}

6.下拉元素随滚动条移动bug

7.无限滚动插件

vue-infinite-loading,这是一个使用在Vue.js中的无限滚动插件,它可以帮助你快速创建一个无限滚动列表。可以使用在移动端和pc。

文档:https://peachscript.github.io/vue-infinite-loading/zh/guide/

8.select组件结合tree的使用 树形结构 下拉框

https://blog.csdn.net/demo_020/article/details/112196118

this.$refs.tree.getCheckedNodes(true, true)

//这里两个true,1. 是否只是叶子节点 2. 是否包含半选节点(就是使得选择的时候不包含父节点)

//select 下拉框搜索功能配合tree实现值过滤
为el-select添加filterable属性即可启用搜索功能。默认情况下,Select 会找出所有label属性包含输入值的选项。如果希望使用其他的搜索逻辑,可以通过传入一个filter-method来实现。filter-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。
//触发筛选函数
handleFilter(data) {
  this.$refs.tree.filter(data)
},

在需要对节点进行过滤时,调用 Tree 实例的filter方法,参数为关键字。需要注意的是,此时需要设置filter-node-method,值为过滤函数。
//筛选节点
filterNode(value, data) {
  if (!value) return true
  return data.name.indexOf(value) !== -1
},
<el-form-item label="适用科室" prop="deptLables" ref="deptIds">
            <el-select
              v-model="deptLables"
              filterable
              multiple
              :filter-method="handleFilter"
              @remove-tag="removeTag"
              style="width: 100%;"
              placeholder="请选择"
            >
              <el-option
                :value="form.deptIds"
                style="height: auto; padding: 0;"
              >
                <el-tree
                  :data="dept"
                  :props="defaultProps"
                  show-checkbox
                  ref="tree"
                  node-key="id"
                  default-expand-all
                  @node-click="handleNodeClick"
                  highlight-current
                  current-node-key="node"
                  :default-checked-keys="form.deptIds"
                  :filter-node-method="filterNode"
                  @check="handleChcek"
                >
       </el-tree>
		</el-option>
	</el-select>
</el-form-item>

//script
data
//默认
defaultProps: {
  children: 'deptInner',
    label: 'name',
},
form: {
        bizType: this.type,
        bizWays: [],
        name: '',
        titleIds: [],
        deptIds: [],
        priceDto: [],
        state: 1,
 },
 
methods
   //1.获取科室树形数据
   async getDeptList() {
     const list = await deptChooseList({ tree: true })
     list.forEach(item => {
       item.deptInner && (item.disabled = true)
     })
     this.dept = list
   },
     
   //2.清空选择
      this.deptLables = []
      //清空选项
      this.$refs.tree.setCheckedNodes([])
     
  
     
 		//触发筛选函数
    handleFilter(data) {
      this.$refs.tree.filter(data)
    },
    //筛选节点
    filterNode(value, data) {
      if (!value) return true
      return data.name.indexOf(value) !== -1
    },
    //点击树节点
    handleNodeClick() {},
    //树节点选中时
    handleChcek() {
      //这里两个true,1. 是否只是叶子节点 2. 是否包含半选节点(就是使得选择的时候不包含父节点)
      const res = this.$refs.tree.getCheckedNodes(true, true)
      this.form.depts = res.map(item => item.id)
      this.form.deptNames = res.map(item => item.name)
    },
    //移除tag
    removeTag(data) {
      let res = this.$refs.tree.getCheckedNodes(true, true)
      //删除tag移除项
      res.forEach((item, index) => {
        item.name === data && res.splice(index, 1)
      })
      this.form.depts = res.map(item => item.id)
      //重新设置选中
      this.$refs.tree.setCheckedNodes(this.form.depts)
    },
      
   
      //选中项赋值
      this.$nextTick(() => {
        const res = this.$refs.tree.getCheckedNodes(true, true)
        console.log(res, '选中项')
        this.deptLables = res.map(item => item.name)
        console.log(this.deptLables)
      })

9.自定义上传文件方式

<el-upload
class="upload-demo"
action
:on-change="handleChange"
:on-success="handleSucess"
:http-request="httpRequest"
>
  <el-button size="small" type="primary">点击上传</el-button>
</el-upload>

//data中
 fileData: '',
   
 
//自定义上传函数--文件保存
httpRequest({ file }) {
   const formData = new FormData()
   formData.append('file', file)
   this.fileData = formData
   console.log(file, '文件')
 },
 
//接口请求函数
 async importUsr() {
     this.$message.success('上传成功!')
     await importEmployee(this.fileData)
 },

10.表头添加选项框

 <el-table-column>
            <template slot="header" slot-scope="{}">
              <el-select size="mini" v-model="btnWcno" @change="jend">
                <el-option
                  v-for="item in branch"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id"
                ></el-option>
              </el-select>
            </template>
            <template v-slot:default="{ row }">
              <el-row>
                <el-col :span="24">
                  <template>
                    {{ btnWcno == 1 ? row.deptName : row.doctorName }}
                  </template>
                </el-col>
               
              </el-row>
            </template>
          </el-table-column>

11.confirm确认框合适写法

async delList() {
  const confirm = await this.$confirm('是否确认删除?', '提示', {
    type: 'warning',
  })
  if (confirm !== 'confirm') return
  await delList()
},

12.Checkbox-group 复选框使用数据绑定问题

//label 绑定选中值,展示的value放在标签中。
<el-checkbox-group v-model="status">
    <el-checkbox 
        v-for="(value, key) in statusList"
        :key="key"
        :label="key"
    >
        {{ value }}
    </el-checkbox>
</el-checkbox-group>

13.选项绑定为对象

 <el-form-item label="任务类型:" :label-width="labelWidth">
        <el-select
          v-model="type"
          placeholder="任务类型"
          value-key="typeId"
          @change="value => Object.assign(this.formData, value)"
        >
          <el-option
            label="陪护"
            :value="{ typeName: '陪护', typeId: '1' }"
          ></el-option>
          <el-option
            label="陪检"
            :value="{ typeName: '陪检', typeId: '2' }"
          ></el-option>
          <el-option
            label="送标本"
            :value="{ typeName: '送标本', typeId: '3' }"
          ></el-option>
        </el-select>
      </el-form-item>

14.禁用表格部分选项

在 el-table-column type 类型为 selection 组件中,添加 :selectable='方法名'

<el-table :data="tableData" v-loading="loading" max-height="570" stripe :header-cell-style="headerStyle" @selection-change="handleSelectionLeftChange">
   <el-table-column type="selection" width="50" :selectable='selectEnable'>
   </el-table-column>
   <el-table-column prop="appName" label="选择产品" align="center" width="350">
   </el-table-column>
</el-table>


  //禁用多选框函数
  //把 order_status 为 1 的项禁用
selectEnable(row, rowIndex) {
  console.log(row);
  if (row.order_status !== 1) {
    return true
  }
},

15.限制日期选择范围

https://www.cnblogs.com/belongs-to-qinghua/p/11752392.html

16.表格无数据显示-

.el-table /deep/ .el-table__body td .cell:empty::after,
.el-table /deep/ .el-table__body td .cell > span:empty::after,
.el-table /deep/ .el-table__body td .cell .approval:empty::after,
.el-table /deep/ .el-table__body td .cell div:empty::after,
.el-table /deep/ .el-table__body td .cell .line-limit-length:empty::after {
  content: '-';
}

标签:el,data,element,ui,巧技,msg,Message,true,message
From: https://www.cnblogs.com/sclweb/p/17637851.html

相关文章

  • vscode使用巧技
    1.快捷键展开折叠代码:ctrl+shift+[ctrl+shift+]ctrl+shift+L--同时选中所有相容内容alt+click--同时选择多个单词f2--重命名文件alt+上下键--移动整行或多行1.1vetur--让.vue文件高亮和有语法提示VueVsCodesnippets--快捷写代码2.文件图标库--必备vsco......
  • 解锁数据潜力:信息抽取、数据增强与UIE的完美融合
    解锁数据潜力:信息抽取、数据增强与UIE的完美融合1.信息抽取(InformationExtraction)1.1IE简介信息抽取是NLP任务中非常常见的一种任务,其目的在于从一段自然文本中提取出我们想要的关键信息结构。举例来讲,现在有下面这样一个句子:新东方烹饪学校在成都。我们想要提取这句......
  • vue + element 表设计
    <template><divclass="course-table"><el-scrollbarstyle="height:100%"><divclass="course-table-content"><divclass="top":style="{width:......
  • Mosquitto使用介绍:轻松构建MQTT通信
    在物联网(IoT)领域,实现设备之间的高效通信是至关重要的。MQTT(MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,适用于各种物联网应用。而Mosquitto作为MQTT协议的代表,为开发者提供了便捷的通信方式。本文将介绍如何使用Mosquitto构建MQTT通信,实现设备间的数据传输和交......
  • 根据druid将慢sql通过钉钉的方式进行告警功能记录
          想要借助接入的druid把日志里面输入的慢sql通过钉钉的方式进行告警,由于项目里面之前接入了druid,格式大概如下:    这个是接入druid并且配置了slowsql为true的情况下,日志里面打印的slowsql。刚开始我的想法是通过重写log4j的日志来进行记录,然后看了dr......
  • python-GUI之tkinter
    常用的tkinter控件的列表:Label(标签):用于显示文本或图像。Button(按钮):用于触发操作,比如点击按钮执行某个功能。Entry(输入框):用于接收用户输入的文本。Text(文本框):用于显示和编辑多行文本。Checkbutton(复选框):允许用户从多个选项中选择一个或多个选项。Radiobutton(单选按钮):允许用......
  • Flink and Kafka Streams: a Comparison and Guideline for Users
    ThisblogpostiswrittenjointlybyStephanEwen,CTOofdataArtisans,andNehaNarkhede,CTOofConfluent. StephanEwenisPMCmemberofApacheFlinkandco-founderandCTOofdataArtisans.BeforefoundingdataArtisans,Stephanwasleadingthedevelo......
  • 12 个不可错过的 Vue UI 组件库,请查收!
    Vue.js是一个渐进式javascript框架,用于构建UIS(用户界面)和SPA(单页应用程序)。UI组件库的出现提高了我们的开发效率,增强了应用的整体外观、感觉、交互性和可访问性,下面就来看看有哪些适用于Vue的UI组件库。 1.ElementUIElementUI是一套为开发者、设计师和产品经理......
  • element-ui 菜单导航的使用
    导航属性 原有代码启用 :router="true"属性2.整理路由将菜单界面作为根 将菜单对应的相应的界面放到其下面,相当于其的子代3.在<el-main></el-main>中放入页面显示出口标签 <router-view></router-view>......
  • 周三 element
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>.el-header{background-color:#B3C0D1;color:#333;......