Vue基于Element-UI二次封装日期选择器和分页组件

该博客介绍了如何在Vue中封装日期选择组件(MyDate.vue)和分页组件(Paging.vue)。日期组件提供快捷日期选择功能,如今天、昨天、最近一周等,并通过事件传递选中日期。分页组件支持每页数量更改和当前页切换,同样通过事件将参数传递给父组件。在父组件(test.vue)中,这两个组件被用于数据筛选和展示。
摘要由CSDN通过智能技术生成
封装日期组件 (在MyDate.vue 文件中)
<template>
  <div class="my-date">
    <el-date-picker
      @change="handleChangeDate"
      v-model="selectDateValue"
      :value-format="formatDate"
      type="daterange"
      :align="align"
      unlink-panels
      range-separator=""
      start-placeholder="开始日期"
      end-placeholder="结束日期"
      :picker-options="pickerOptions"
    >
    </el-date-picker>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectDateValue: [],  // 选择日期存放的值
      pickerOptions: {      // 配置快捷日期选择
        shortcuts: [
          {
            text: "今天",
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              picker.$emit("pick", [start,end]);
            },
          },
          {
            text: "昨天",
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              end.setTime(end.getTime() - 3600 * 1000 * 24);
              start.setTime(start.getTime() - 3600 * 1000 * 24);
              picker.$emit("pick", [start,end]);
            },
          },
          {
            text: "最近一周",
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
              picker.$emit("pick", [start, end]);
            },
          },
          {
            text: "最近一个月",
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
              picker.$emit("pick", [start, end]);
            },
          },
          {
            text: "最近三个月",
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
              picker.$emit("pick", [start, end]);
            },
          },
        ],
      },
    };
  },
  props: {
    // 日期格式  默认 yyyy-MM-dd
    formatDate: {
      type: String,
      required: false,
      default: "yyyy-MM-dd",
    },
    // 日期选择界面的 对齐方式 默认 居中(center)
    align: {
      type: String,
      required: false,
      default: "center",
    },
  },
  methods: {
    // 选择日期触发的事件
    handleChangeDate(val) {
      this.selectDateValue = val;
      this.$emit("changeDate", this.selectDateValue);
    }
  },
};
</script>
封装分页组件 (在Paging.vue 文件中)
<template>
  <div>
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="1"
      :page-sizes="[5, 10, 15, 20]"
      :page-size="10"
      layout="total, sizes, prev, pager, next, jumper"
      :total="totalData"
    ></el-pagination>
  </div>
</template>
<script>
export default {
  data() {
    return {
      pageParams: {
        pageCurrent: 1,  // 当前页
        pageSize: 10     // 每页的条数
      },
    };
  },
  props: ["totalData"],
  methods: {
    // 改变每页展示的数据大小
    handleSizeChange(val) {
      /**
       * 当触发事件改变了值 修改 pageParams 中的值 = val 然后触发绑在子组件上的父组件的事件
       *  将值传过去
       * 在父组件的事件里面 将得到的值修改到 pageParams 中 然后调用接口函数重新获取数据
       * pageBar 自定义的 方法 
       */
      this.pageParams.pageSize = val;
      this.$emit("pageBar", this.pageParams);   
    },
    // 改变当前页的页码
    handleCurrentChange(val) {
      this.pageParams.pageCurrent = val;
      this.$emit("pageBar", this.pageParams);
    }
  },
};
</script>
<style lang="scss" scoped>
.el-pagination button,
.el-pagination span:not([class*="suffix"]) {
  font-size: 12px;
}
.el-pagination {
  float: right;
  margin-top: 15px;
}
.el-icon-refresh-right {
  float: right;
  margin-top: 4.2%;
  font-size: 23px;
  font-weight: lighter;
  margin-right: 1%;
  color: #606266;
  cursor: pointer;
}
</style>
父组件中使用 (在test.vue 文件中)
<template>
  <div>
    <el-card>
      <el-row>
      	<my-date formatDate="yy-MM-dd" @changeDate="handleChangeDate"></my-date>    // 使用
      </el-row>
      <el-row>
        <div class="paging">
        <paging :totalData="totalData" @pageBar="handleChangePage"></paging>   // 使用
      </div>
      </el-row>
    </el-card>
  </div>
</template>
<script>
import myDate from "../../components/datePlugin/myDate.vue";  // 引入 组件的位置
import Paging from '../../components/pagebar/Paging.vue';  // 引入 组件的位置
export default {
  components: { myDate, Paging },    // 注册组件
  data() {
    return {
      totalData: 20
    };
  },
  methods: {
    // 日期
    handleChangeDate(val) {
      // ·········  (此处写一些业务逻辑)
      console.log(val);
    },
    // 时间
    handleChangePage(val) {
      // ·········  (此处写一些业务逻辑)
      console.log(val)
    }
  },
};
</script>
<style lang="scss">
</style>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue基于Element UI Table的二次封装可以通过创建一个自定义的组件来实现。以下是一个简单的示例,演示了如何封装一个基于Element UI Table的组件: ```vue <template> <el-table :data="tableData" :row-key="rowKey" :height="height"> <!-- 渲染表头 --> <el-table-column v-for="column in columns" :key="column.prop" :prop="column.prop" :label="column.label"> <!-- 自定义插槽 --> <template slot-scope="scope"> <slot :column="column" :scope="scope"></slot> </template> </el-table-column> </el-table> </template> <script> export default { name: 'CustomTable', props: { tableData: { type: Array, required: true }, columns: { type: Array, required: true }, rowKey: { type: String, required: true }, height: { type: String, default: 'auto' } } } </script> ``` 在这个示例中,我们创建了一个名为`CustomTable`的组件。它接受`tableData`、`columns`、`rowKey`和`height`作为props,分别表示表格数据、表格列配置、行数据的唯一标识以及表格的高度。 在模板中,我们使用`el-table`和`el-table-column`来渲染Element UI的表格。我们使用了`v-for`指令来循环渲染表格列,并通过`slot-scope`来传递数据给插槽。插槽可以在父组件中定义,并在插槽中使用自定义的组件来渲染表格单元格内容。 通过这种方式,我们可以在父组件中使用这个封装的自定义表格组件,并通过插槽来定制表格的内容和样式。 希望这个简单的示例能帮助到你进行Vue基于Element UI Table的二次封装。如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值