若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出:
若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出_霸道流氓气质的博客-CSDN博客
在上面进行Excel导入导出的基础上,进行改造,将携带的额外参数是否更新已存在数据,
修改为携带日期参数,业务需求是通过excel导入录入指定日期的计划数据。
并且当点击导入按钮时,计划日期默认值为明天。
注:
博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
页面添加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>
通过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的使用自行学习。
上面时间格式化值之后通过
: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(
- "
- response.msg +
- "",
- "导入结果",
- { dangerouslyUseHTMLString: true }
- );
- //上传数据成功后重新请求数据
- this.$emit("getList");
- },
- },
- };
- </script>
-
- <style>
- </style>