IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> element-plus的el-date-picker日期范围选择控件,根据开始日期限定结束日期的可选范围为开始日期到开始日期+30天 -> 正文阅读

[JavaScript知识库]element-plus的el-date-picker日期范围选择控件,根据开始日期限定结束日期的可选范围为开始日期到开始日期+30天

在开发的时候,我们常常遇到日期范围选择根据指定开始日期限定结束日期的可选范围的情况。比如我们选择的开始日期为2022-04-01,则结束日期必须是2022-05-01之前,并且不能超过当前日期。

前端框架:SCUI (vue3 + element-plus)

开源地址:SCUI: 一款开箱即用、高可配、高性能、风格精致、代码优雅的基于Vue3和elementPlus的WebUI前端框架,让前端开发更快乐。

使用的控件:日期范围选择控件 -> el-date-picker

el-date-picker需要使用到的属性和事件,如下:

属性:disabledDate

事件:calendar-change 。主要是为记录选择的开始日期。

日期范围控件代码如下:

<el-date-picker
                v-model="date"
                format="YYYY-MM-DD"
                value-format="YYYY-MM-DD"
                type="daterange"
                range-separator="至"
                start-placeholder="开始日期"
                end-placeholder="结束日期"
                @change="dateChange"
                :disabledDate="disabledDateFun"
                @calendar-change="calendarChange"
              ></el-date-picker>

javascript代码如下:

<script>
export default {
  name: "systemlog",
  components: { },
  data() {
    return {
      startDate: null,
      date: []
    };
  },
  methods: {
    dateChange(dates) {
      this.date = dates;
    },
    calendarChange(dates) {
      // 记录选择的开始日期,方便后面根据开始日期限定结束日期
      if (dates !== null && dates.length > 0) {
        this.startDate = dates[0];
      }
    },
    disabledDateFun(time) {
      // 8.64e7就是一天的时间戳 24*60*60*1000
      // 根据选择的开始日期,日期范围限定在30天之内
      if (this.startDate !== null) {
        return (
          time.getTime() < this.startDate.getTime() ||
          time.getTime() >= new Date().getTime() ||
          time.getTime() > this.startDate.getTime() + 30 * 8.64e7
        );
      }
      // 默认只能选择今天以及今天之前的日期
      return time.getTime() >= new Date().getTime();
    }
  },
};
</script>

完整页面代码如下:

<template>
  <el-container>
    <el-aside width="220px">
      <el-tree
        ref="category"
        class="menu"
        node-key="label"
        :data="category"
        :default-expanded-keys="['系统日志']"
        current-node-key="系统日志"
        :highlight-current="true"
        :expand-on-click-node="false"
      >
      </el-tree>
    </el-aside>
    <el-container>
      <el-main class="nopadding">
        <el-container>
          <el-header>
            <div class="left-panel">
              <el-date-picker
                v-model="date"
                format="YYYY-MM-DD"
                value-format="YYYY-MM-DD"
                type="daterange"
                range-separator="至"
                start-placeholder="开始日期"
                end-placeholder="结束日期"
                @change="dateChange"
                :disabledDate="disabledDateFun"
                @calendar-change="calendarChange"
              ></el-date-picker>
            </div>
            <div class="right-panel"></div>
          </el-header>
          <el-header style="height: 150px">
            <scEcharts height="100%" :option="logsChartOption"></scEcharts>
          </el-header>
          <el-main class="nopadding">
            <scTable
              ref="table"
              :apiObj="apiObj"
              stripe
              highlightCurrentRow
              @row-click="rowClick"
            >
              <el-table-column label="级别" prop="level" width="60">
                <template #default="scope">
                  <el-icon
                    v-if="scope.row.level == 'error'"
                    style="color: #f56c6c"
                  >
                    <el-icon-circle-close-filled />
                  </el-icon>
                  <el-icon
                    v-if="scope.row.level == 'warn'"
                    style="color: #e6a23c"
                  >
                    <el-icon-warning-filled />
                  </el-icon>
                  <el-icon
                    v-if="scope.row.level == 'info'"
                    style="color: #409eff"
                  >
                    <el-icon-info-filled />
                  </el-icon>
                </template>
              </el-table-column>
              <el-table-column
                label="ID"
                prop="id"
                width="280"
              ></el-table-column>
              <el-table-column label="请求接口" prop="url"></el-table-column>
              <el-table-column
                label="客户端IP"
                prop="ip"
                width="150"
              ></el-table-column>
              <el-table-column
                label="用户"
                prop="userName"
                width="150"
              ></el-table-column>
              <el-table-column
                label="日志时间"
                prop="createTime"
                width="170"
              ></el-table-column>
            </scTable>
          </el-main>
        </el-container>
      </el-main>
    </el-container>
  </el-container>

  <el-drawer v-model="infoDrawer" title="日志详情" :size="600" destroy-on-close>
    <info ref="info"></info>
  </el-drawer>
</template>

<script>
import info from "./info";
import scEcharts from "@/components/scEcharts";

export default {
  name: "systemlog",
  components: {
    info,
    scEcharts,
  },
  data() {
    return {
      infoDrawer: false,
      logsChartOption: {},
      category: [
        {
          label: "系统日志",
          children: [
            { label: "debug" },
            { label: "info" },
            { label: "warn" },
            { label: "error" },
            { label: "fatal" },
          ],
        },
        {
          label: "应用日志",
          children: [{ label: "selfHelp" }, { label: "WechatApp" }],
        },
      ],
      startDate: null,
      date: [],
      apiObj: this.$API.system.log.list,
      search: {
        keyword: "",
      },
    };
  },
  async mounted() {
    await this.getStatisticDatas();
  },
  methods: {
    upsearch() {},
    rowClick(row) {
      this.infoDrawer = true;
      this.$nextTick(() => {
        this.$refs.info.setData(row);
      });
    },
    async dateChange(dates) {
      this.date = dates;
      await this.getStatisticDatas();
    },
    calendarChange(dates) {
      // 记录选择的开始日期,方便后面根据开始日期限定结束日期
      if (dates !== null && dates.length > 0) {
        this.startDate = dates[0];
      }
    },
    disabledDateFun(time) {
      // 8.64e7就是一天的时间戳 24*60*60*1000
      // 根据选择的开始日期,日期范围限定在30天之内
      if (this.startDate !== null) {
        return (
          time.getTime() < this.startDate.getTime() ||
          time.getTime() >= new Date().getTime() ||
          time.getTime() > this.startDate.getTime() + 30 * 8.64e7
        );
      }
      // 默认只能选择今天以及今天之前的日期
      return time.getTime() >= new Date().getTime();
    },
    //获取统计数据
    async getStatisticDatas() {
      this.loading = true;
      let reqData = {
        start: null,
        end: null,
      };
      if (this.date.length === 2) {
        reqData.start = this.date[0];
        reqData.end = this.date[1];
      }

      let res = await this.$API.system.log.statistic.get(reqData);
      if (res.code === 200) {
        this.logsChartOption = {
          color: ["#e6a23c", "#409eff", "#f56c6c"],
          grid: {
            top: "0px",
            left: "10px",
            right: "3%",
            bottom: "0px",
          },
          tooltip: {
            trigger: "axis",
          },
          xAxis: {
            type: "category",
            boundaryGap: false,
            data: res.data.dateDatas,
          },
          yAxis: {
            show: false,
            type: "value",
          },
          series: [
            {
              data: res.data.numberDatas,
              type: "bar",
              stack: "log",
              barWidth: "15px",
            },
          ],
        };
      }
    },
  },
};
</script>

最后实现的效果:

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:07:38  更:2022-06-01 15:08:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/13 7:51:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码