element-ui

一、注意

二、实现效果

三、问题

1.el-date-picker绑定的要是一个字符串,报错: dateStr.match is not a function ;不能直接new Date().getFullYear() 得到一个Number,得String();

2.el-input-number 默认会把null转为0,解决:没值写成undefined

3.el-dialog组件

1.初始化(不一定非要父子组件传参visible)(但是我感觉容易不销毁)

<el-dialog :visible.sync="visible" width="50%">
   
  </el-dialog>
  init(){
      this.visible = true
  }
  
  
  父组件中:	
  <dialog-item  ref='dialog' v-if='dialogVisible'>
  </ dialog-item>
  
  this.$refs.dialogVisible.init()

2.嵌套el-dialog 里面的dialog用 append-to-body 成为全屏弹框

3.常用dialog封装

子组件:

<!-- 辨识危险源 弹框 -->
<template>
  <div v-if="visible">
    <el-dialog
      title="辨识危险源"
      :visible.sync="visible"
      width="50%"
      destroy-on-close
      :before-close="handleClose"
      @close="$emit('closeDialog')"
    >
      <div class="add-dialog-content">
      </div>
      <span slot="footer" class="dialog-footer">
     
        <div class="btn cancel-button" @click="$emit('closeDialog')">取 消</div>
      </span>
    </el-dialog>
   
  </div>
</template>

<script>
export default {
  props: {
    dialogVisible: {
      type: Boolean,
      required: true,
    },
  },
  components: { },
  data() {
    //这里存放数据
    return {
      visible: false,
    };
  },
  //监听属性 类似于data概念
  computed: {},
  //监控data中的数据变化
  watch: {
    dialogVisible: {
      handler(v) {
        this.visible = v;
      },
  },
  //方法集合
  methods: {
    handleClose(done) {
      this.$emit("closeDialog");
      done();
    },
  },
  //生命周期 - 创建完成(可以访问当前this实例)
  created() {},
  //生命周期 - 挂载完成(可以访问DOM元素)
  mounted() {
  },
  beforeCreate() {}, //生命周期 - 创建之前
  beforeMount() {}, //生命周期 - 挂载之前
  beforeUpdate() {}, //生命周期 - 更新之前
  updated() {}, //生命周期 - 更新之后
  beforeDestroy() {}, //生命周期 - 销毁之前
  destroyed() {}, //生命周期 - 销毁完成
  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
};
</script>
<style scoped lang="scss">
::v-deep .el-dialog {}
</style>

父组件:

  <add-dialog
      v-if="dialogVisible && riskLevelList"
      ref="addDialog"
      :dialogVisible="dialogVisible"
      :riskLevelList="riskLevelList"
      @closeDialog="closeDialog"
    />


    closeLevelDialog(isChange, riskLevelId) {
        this.riskLevelList = null;
        this.levelDialogVisible = false;
    },

4.el-input .stop失效

vue element上面 .stop失效(vue好像也不能用原生),则再el-input外再套一层div\span元素,@click.stop 即可<span v-else @click.stop>
          <el-input
            :id="Math.random()"
            v-model="scope.row.titleName"
            @blur.stop="rowUpdate(scope)"
          ></el-input>
        </span>

5.日期范围

1.限制日期选择范围

https://www.cnblogs.com/wuqilang/p/15654978.html

限制区间30天:

pickerMinDate: '',
      pickerOptions: {
        onPick: ({ maxDate, minDate }) => {
          this.pickerMinDate = minDate.getTime()
          if (maxDate) this.pickerMinDate = ''
        },
        disabledDate: (time) => {
          if (this.pickerMinDate !== '') {
            const one = 30 * 24 * 3600 * 1000
            const minTime = this.pickerMinDate - one
            const maxTime = this.pickerMinDate + one
            return time.getTime() < minTime || time.getTime() > maxTime
          }
        }
      }

使用 eg:

//数据中心-能耗小时统计
let pickerMinDate = "";
export const tableOption = (list) => {
  return {
    border: true, //边框
    stripe: false, //表格条纹
    card: false, //卡片表格
    index: true, //序号
    indexLabel: "序号", //序号名称
    selection: false, //是否多选
    searchShow: true, //页面初次加载是否显示搜索框
    searchMenuPosition: "center", //搜索操作按钮的位置
    searchMenuSpan: 6, //搜索操作按钮的位置
    searchSlot: true, //自定义列搜索
    menu: false, //是否显示操作菜单栏
    menuWidth: 100,
    // header: false,
    // size:'mini',  //控件大小 medium/small/mini
    align: "center", //列的对其方式
    refreshBtn: true, //刷新按钮
    header: true,
    addBtn: false, //添加按钮
    editBtn: false, //修改按钮
    viewBtn: false, //查看按钮
    delBtn: false, //删除按钮
    columnBtn: true, //表格右侧操作列显隐的按钮
    cellBtn: false, //是否行编辑按钮
    printBtn: false, //即可开启打印功能
    excelBtn: false, //导出exce按钮
    dateBtn: false, //日期范围搜索功能
    searchShowBtn: false, //搜索显隐按钮
    searchLabelWidth: 80,
    labelWidth: 130,
    props: {
      label: "label",
      value: "value",
    },
    column: [
      {
        label: "统计日期",
        prop: "statisticsDateArray",
        type: "input",
        searchType: "daterange",
        format: "yyyy-MM-dd",
        valueFormat: "yyyy-MM-dd",
        popperClass: "time-picker",
        search: true,
        startPlaceholder: "开始日期",
        endPlaceholder: "结束日期",
        rules: [
          { required: true, message: "统计日期不能为空", trigger: "blur" },
        ],
        hide: true,
        clearable: false,
        type: "date",
        pickerOptions: {
          onPick: ({ maxDate, minDate }) => {
            pickerMinDate = minDate.getTime();
            if (maxDate) pickerMinDate = "";
          },
          disabledDate: (time) => {
            if (pickerMinDate !== "") {
              // 只能选择62天
              const one = 62 * 24 * 3600 * 1000;
              const minTime = pickerMinDate - one;
              const maxTime = pickerMinDate + one;
              return time.getTime() < minTime || time.getTime() > maxTime;
            }
          },
        },
        // searchSlot: true,
      },
    ],
  };
};

限制区间30天,不能大于今日:

pickerMinDate: '',
      pickerOptions: {
        onPick: ({ maxDate, minDate }) => {
          this.pickerMinDate = minDate.getTime()
          if (maxDate) this.pickerMinDate = ''
        },
        disabledDate: (time) => {
          if (this.pickerMinDate !== '') {
            const one = 30 * 24 * 3600 * 1000
            let minTime = this.pickerMinDate - one
            let maxTime = this.pickerMinDate + one
            if (maxTime > new Date()) maxTime = new Date() // 限制不能选择今天之后的日期
            return time.getTime() < minTime || time.getTime() > maxTime
          }
          return time.getTime() > Date.now()
        }
      }

限制区间30天,不能小于今日:

pickerMinDate: '',
      pickerOptions: {
        onPick: ({ maxDate, minDate }) => {
          this.pickerMinDate = minDate.getTime()
          if (maxDate) this.pickerMinDate = ''
        },
        disabledDate: (time) => {
          if (this.pickerMinDate !== '') {
            const one = 30 * 24 * 3600 * 1000
            let minTime = this.pickerMinDate - one
            let maxTime = this.pickerMinDate + one
            if (minTime < new Date()) minTime = new Date() // 限制不能选择今天之前的日期
            return time.getTime() < minTime || time.getTime() > maxTime
          }
          return time.getTime() < Date.now() - 8.64e7 // 加上 - 8.64e7 就可以选择今天
        }
      }

选择今天及之前的日期:

   pickerOptions: {
        disabledDate: (time) => {
          return time.getTime() > Date.now()
        }
      }

选择今天之前的日期:

  pickerOptions: {
        disabledDate: (time) => {
          return time.getTime() > Date.now() - 8.64e7
        }
      }

6.el-tree手动设置高亮

el-tree设置高亮节点:  
            <el-tree
              ref="riskPointIdTreeRef"
              default-expand-all
              :data="riskPointIdTree"
              v-model="form.riskPointId"
              placeholder="请选择关联风险点"
              node-key="riskPointId"
              @node-click="handleNodeClick"
            ></el-tree>


        this.$nextTick(() => {
          this.$refs.riskPointIdTreeRef.setCurrentNode(
            this.riskPointIdList.find(
              (v) => v.riskPointId == this.form.riskPointId
            )
          );
        });

7.el-table

1.滚动条 || fixed固定列导致的表格错位

公共样式中:

// 解决overflow-y拖拽表格滚动条,错位问题
.no-last-td-avue .el-table__header-wrapper {
  padding-right: 10px !important; // 滚动条宽度
}
// .no-last-td-avue .el-table__fixed-header-wrapper {
//  padding-right: 10px !important;
// }

// 解决左右 对不齐 的情况 (表格有fixed固定列)
// el-table 左右有列固定时,fixed为left和right时,行未对齐解决办法
// * 产生原因: el-table底部有滚动条,固定列底部没有滚动条
// * 解决办法: 在el-table的表格中设置padding-bottom的内边距跟滚动条等高
.no-last-td-avue .el-table__fixed {
  height: calc(100% - 10px) !important;
}

.no-last-td-avue .el-table__fixed-body-wrapper {
  height: calc(100% - 83px) !important; // 83px:他的top值,即表头的高
}
// 下面的会导致横向滚动条在fixed列拉不住 (没有横向滚动条可用)
// .no-last-td-avue .el-table__fixed-body-wrapper .el-table__body {
//   padding-bottom: 10px; // 6px为横向滚动条高度
// }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值