首页 > 其他分享 >SpringBoot+Vue实现excel导入带格式化的时间参数(moment格式化明天日期并设置el-date-picker默认值)

SpringBoot+Vue实现excel导入带格式化的时间参数(moment格式化明天日期并设置el-date-picker默认值)

时间:2022-11-12 16:47:52浏览次数:76  
标签:picker 格式化 planDate 日期 moment 导入 默认值 上传

场景

若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108278834

在上面进行Excel导入导出的基础上,进行改造,将携带的额外参数是否更新已存在数据,

修改为携带日期参数,业务需求是通过excel导入录入指定日期的计划数据。

 

 

并且当点击导入按钮时,计划日期默认值为明天。

 

 

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

页面添加el-date-picker日期选择组件

<template>
  <!-- 用户导入对话框 -->
  <el-dialog :title="title" :visible.sync="open" width="400px" append-to-body>
    <div class="block">
      <span class="demonstration">计划日期: </span>
      <el-date-picker
        v-model="planDate"
        type="date"
        placeholder="选择计划日期"
        size="small"
        value-format="yyyy-MM-dd"
      >
      </el-date-picker>
    </div>
    <br />
    <el-upload
      ref="upload"
      :limit="1"
      accept=".xlsx, .xls"
      :headers="headers"
      :action="upLoadUrl + '?planDateString=' + this.planDate"
      :disabled="isUploading"
      :on-progress="handleFileUploadProgress"
      :on-success="handleFileSuccess"
      :auto-upload="false"
      :before-upload="beforeUpload"
      drag
    >
      <i class="el-icon-upload"></i>
      <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
      <div class="el-upload__tip text-center" slot="tip">
        <span>仅允许导入xls、xlsx格式文件。</span>
      </div>
    </el-upload>
    <div slot="footer" class="dialog-footer">
      <el-button type="primary" @click="submitFileForm">确 定</el-button>
      <el-button @click= "open= false">取 消</el-button>
    </div>
  </el-dialog>
</template>

el-date-picker设置默认值并格式化显示

通过v-model给el-date-picker组件绑定值,并在mounted方法中设置默认值即可。

格式化显示通过value-format="yyyy-MM-dd"来设置。

声明planDate

  data() {
    return {
      // 是否显示弹出层(用户导入)
      open: false,
      // 弹出层标题(用户导入)
      title: "",
      // 是否禁用上传
      isUploading: false,
      //计划日期
      planDate: new Date(),

所以在mounted中

  mounted() {
    //默认计划日期为明天
    this.planDate = moment().subtract(-1, "days").format("YYYY-MM-DD");
  },

这样就可以通过moment获取明天并格式化显示。关于moment的使用自行学习。

el-upload传递时间参数到SpringBoot接口接收

上面时间格式化值之后通过

:action="upLoadUrl + '?planDateString=' + this.planDate"

传递到后台接口,这里要注意往后端传递的时间参数为字符串,所以后端SpringBoot接口应该用String接收

并且保证名称一致

    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file, String planDateString) throws Exception {
        LocalDate planDate = LocalDate.parse(planDateString, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        ExcelUtil<LimitQuotaStatistics> util = new ExcelUtil<>(LimitQuotaStatistics.class);
        List<LimitQuotaStatistics> limitQuotaStatisticsList = util.importExcel(file.getInputStream());
        String message = "200";
        return AjaxResult.success(message);
    }

这里接收时间参数使用String planDateString接收,不然会提示

Failed to convert type [java.lang.String] to type [java.time.LocalDate] for value错误

 

 

时间字符串转换为LocalDate通过

 LocalDate planDate = LocalDate.parse(planDateString, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

实现,这里前端传输的字符串需要提前格式化好。

 

 

其他逻辑根据自己业务需求实现,这里不做具体实现。

完整前端代码

<template>
  <!-- 用户导入对话框 -->
  <el-dialog :title="title" :visible.sync="open" width="400px" append-to-body>
    <div class="block">
      <span class="demonstration">计划日期: </span>
      <el-date-picker
        v-model="planDate"
        type="date"
        placeholder="选择计划日期"
        size="small"
        value-format="yyyy-MM-dd"
      >
      </el-date-picker>
    </div>
    <br />
    <el-upload
      ref="upload"
      :limit="1"
      accept=".xlsx, .xls"
      :headers="headers"
      :action="upLoadUrl + '?planDateString=' + this.planDate"
      :disabled="isUploading"
      :on-progress="handleFileUploadProgress"
      :on-success="handleFileSuccess"
      :auto-upload="false"
      :before-upload="beforeUpload"
      drag
    >
      <i class="el-icon-upload"></i>
      <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
      <div class="el-upload__tip text-center" slot="tip">
        <span>仅允许导入xls、xlsx格式文件。</span>
      </div>
    </el-upload>
    <div slot="footer" class="dialog-footer">
      <el-button type="primary" @click="submitFileForm">确 定</el-button>
      <el-button @click="open = false">取 消</el-button>
    </div>
  </el-dialog>
</template>

<script>
import { getToken } from "@/utils/auth";
import moment from "moment";

export default {
  data() {
    return {
      // 是否显示弹出层(用户导入)
      open: false,
      // 弹出层标题(用户导入)
      title: "",
      // 是否禁用上传
      isUploading: false,
      //计划日期
      planDate: new Date(),
      // 设置上传的请求头部
      headers: { Authorization: "Bearer " + getToken() },
      // 上传的地址
      upLoadUrl: "",
    };
  },
  mounted() {
    //默认计划日期为明天
    this.planDate = moment().subtract(-1, "days").format("YYYY-MM-DD");
  },
  methods: {
    /** 导入按钮操作 */
    handleImport(data) {
      this.title = data.title;
      this.upLoadUrl = process.env.VUE_APP_BASE_API + data.upLoadUrl;
      this.open = true;
    },
    // 提交上传文件
    submitFileForm() {
      this.$refs.upload.submit();
    },
    // 文件上传中处理
    handleFileUploadProgress() {
      this.isUploading = true;
    },
    // 文件上传成功处理
    handleFileSuccess(response) {
      this.open = false;
      this.isUploading = false;
      this.$refs.upload.clearFiles();
      this.$alert(
        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
          response.msg +
          "</div>",
        "导入结果",
        { dangerouslyUseHTMLString: true }
      );
      //上传数据成功后重新请求数据
      this.$emit("getList");
    },
  },
};
</script>

<style>
</style>

 

标签:picker,格式化,planDate,日期,moment,导入,默认值,上传
From: https://www.cnblogs.com/badaoliumangqizhi/p/16884071.html

相关文章

  • node_06自定义一个格式化时间模块并使用
    在上一篇博客中,我们知道了自定义模块的定义以及如何暴露出去让其他模块使用。在日常的开发过程中我们经常会遇到一些处理时间格式的问题,下面我们来自定义一个处理时间的模......
  • 【Protobuf(二)】protobuf3 默认值
    /***关于protobuf3默认值问题*首先,pb对象的get方法永远不会有null,如果没有设置,会生成对应的默认值**如果属性值是一个message,那么pb会为这个属性生......
  • BFC(块级格式化上下文)
    BFC在MDN上面是这样定义的:块格式化上下文(BlockFormattingContext,BFC)是Web页面的可视CSS渲染的一部分,是块级盒子的布局过程发生的区域,也是浮动元素与其他元素交互的......
  • MYSQL给ID设置默认值为UUID
    MYSQL给ID设置默认值为UUID标签: mysql  id  触发器  默认值      由于mysql并不支持默认值为函数类型,给id设值有两种方式:(1)通过后台在执行插入......
  • 源码路 之 聊聊 Button 默认值引发的坑坑
    LZ-Says:enmmm,希望所有的一切都将会有一个好的结果。虽然菜比一个,但是只要努力了,就会有好的结果~!!!前言Enmmm,今天突然奇想,玩玩shape文件。Enmmm,我想的挺美好的。结果,mmp了。......
  • [JavaScript]格式化时间
    转载自网络 constformatDate=(time,fmt)=>{vardate=newDate(time);varformat=fmt||'YY-MM-DDhh:mm:ss'varyear=date.getFullYear(......
  • 推荐一款个人感觉比较好用的 JSON 格式化 chrome 插件-JSON-handle
    ​​插件下载地址​​,记得打开VPN。JSON数据展示效果如下图,个人感觉还不错,就是加载起来可能会稍微慢一点,但并不影响我对它的好感。可以展开,收起。右上角有个小方框,点一下......
  • Python xlsx 导出格式化
    前言Python文件导出最简单方法是pandas中的to_excel。如何生成具有一定简单格式的文本?个人感觉xlsxwriter无论是文档还是使用方法个人感觉都很赞。目标适用web文件流导......
  • 7.1.3 TimePicker结合案例详解
    TimePicker是Android的时间设置控件。TimePicker类的继承图如下:java.lang.Object↳android.view.View↳android.view.ViewGroup↳andro......
  • Linux学习笔记(8)——正则表达式与文件格式化处理
    正则表达式与文件格式化处理正则表达式与文件格式化处理一、什么是正则表达式?二、基础正则表达式2.1语系对正则表达式的影响2.2grep的一些高级选项2.3基础正则......