技术标签: VUE 前端 vue.js javascript
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-upload2"
size="mini"
@click="handleImport"
v-hasPermi="['ipdzgl:importuser:import']"
>导入</el-button>
</el-col>
</el-row>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xls、xlsx格式文件。</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm">确 定</el-button>
<el-button @click="upload.open = false">取 消</el-button>
</div>
</el-dialog>
import {
getToken } from "@/utils/auth";
data() {
return {
upload: {
// 是否显示弹出层(用户导入)
open: false,
// 弹出层标题(用户导入)
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的用户数据
updateSupport:false,
// 设置上传的请求头部
headers: {
Authorization: "Bearer " + getToken() },
// 上传的地址
// 例如 http://localhost:81/params/keyword 则 localurl : /params/keyword
localurl:'/params/keyword',
url: process.env.VUE_APP_BASE_API + '/params/keyword' + "/importData",
},
}
}
method(){
handleImport() {
this.upload.title = "xxxxxxxx名字";
this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
this.download(this.upload.localurl + '/importTemplate', {
}, `importuser_template_${
new Date().getTime()}.xlsx`)
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.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.getList();
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
}
}
Controller 层
// 上传模板
@Log(title = "用户IP地址注册", businessType = BusinessType.IMPORT)
@RequiresPermissions("[权限名]")
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
{
ExcelUtil<实体类MOdel> util = new ExcelUtil<实体类MOdel>(实体类MOdel.class);
List<实体类MOdel> dataList = util.importExcel(file.getInputStream());
String operName = SecurityUtils.getUsername();
String message = registCustUserService.importData(dataList, updateSupport, operName);
return AjaxResult.success(message);
}
// 下载模板
@PostMapping("/importTemplate")
public void importTemplate(HttpServletResponse response) throws IOException
{
ExcelUtil<实体类MOdel> util = new ExcelUtil<实体类MOdel>(实体类MOdel.class);
util.importTemplateExcel(response, "模板名");
}
Service层
public String importData(List<实体类Model> dataList, boolean updateSupport, String operName);
IMPL
@Override
public String importData(List<实体类Model> dataList, boolean updateSupport, String operName) {
int successNum = 0;
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
if (StringUtils.isNull(dataList) || dataList.size() == 0)
{
throw new ServiceException("导入用户数据不能为空!");
}
for (实体类Model data : dataList)
{
try
{
//TODO 需要改当前方法下 select 语句
List isExist = mdRedlistMapper.selectMdRedlistList(data);
if(isExist.size() >1) {
//TODO 需要改成自己方法的插入语句
mdRedlistMapper.insertMdRedlist(data);
successMsg.append("<br/>" + successNum + data.toString() + " 导入成功");
successNum++;
}else {
if(updateSupport){
successNum++;
mdRedlistMapper.updateMdRedlist(data);
successMsg.append("<br/>" + failureNum + "、号码 " + data.getRednumber() + " 已经存在, 更新成功");
} else {
failureNum++;
failureMsg.append("<br/>" + failureNum + "、号码 " + data.getRednumber() + " 已经存在");
}
}
}
catch (Exception e)
{
failureNum++;
String msg = "<br/>" + data.toString() + " 导入失败:";
failureMsg.append(msg + e.getMessage());
log.error(msg, e);
}
}
if (failureNum > 0)
{
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
}
else
{
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
}
1 针对一个模块的函数调用a : import 模块名模块名.函数名b: from 模块名 import 函数名 (as 别名)python调用另一个.py文件中的类和函数同一文件夹下的调用1.调用函数A.py文件如下:def add(x,y):print(‘和为:%d’%(x+y))在B.py文件中调用A.py的add函数如下:import AA.add(1,2)或from A import addadd(1,2)2.调用类A.py文件如下:class A: d
// 函数实现vector<vector<int>> Kroneck(const vector<vector<int>> &a, const vector<vector<int>> &b, int i, int j, int m, int n){ vector<vector<int>> c(i*m,vector<int>(j*n,0)); //std::cou...
【声 明】首先,这一系列文章均基于自己的理解和实践,可能有不对的地方,欢迎大家指正。其次,这是一个入门系列,涉及的知识也仅限于够用,深入的知识网上也有许许多多的博文供大家学习了。最后,写文章过程中,会借鉴参考其他人分享的文章,会在文章最后列出,感谢这些作者的分享。码字不易,转载请注明出处!教程代码:【Github传送门】目录一、Android音视频硬解码篇:1,音视频基础知识2,音视频硬解码流程:封装基础解码框架3,音视频播放:音视频同步4,音视频解封和封装:生成.
rbenv vs rvm, 选择用哪个? 参考: https://ruby-china.org/topics/10275# 老的项目以前用啥,现在就用啥, 别在服务器上瞎折腾。# 新的项目你熟悉啥,你就用啥, 你喜欢啥,你就用啥, 没啥大的区别, 你想咋折腾,就咋折腾。
光模块的组成光模块(optical module)由光电子器件、功能电路和光接口等组成,光电子器件包括发射和接收两部分。它的作用是光电转换,发送端把电信号转换成光信号,通过光纤传送后,接收端再把光信号转换成电信号。但是,如果大家平时有关注光模块的话,就会发现,很多光模块的名称都是一串难以看的明白的数字、字母。光模块名称中的那些数字、字母到底代...
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/qq_34844199/article/details/51558175之前我在写百度网盘爬虫,百度图片爬虫的时候答应网友说,抽时间要把ok搜搜的的源码公开,如今是时候兑现诺言了,下面就是爬虫的所有代码,完全,彻底的公开,你会不会写程序都...
---------------------- Windows Phone 7手机开发.Net培训 期待与您交流! ----------------------1、Ado.net是什么?通过ado.Net技术,在程序中执行sql数据库的目的把mdf文件附加到数据库中不用的时候可以分离2、神奇代码加到main方法中string dataDi
通过GridSpec来定制Subplot的坐标 GridSpec指定子图所放置的几何网格。 SubplotSpec在GridSpec中指定子图(subplot)的位置。 subplot2grid类似于“pyplot.subplot”,但是它从0开始索引ax = plt.subplot2grid((2,2),(0, 0))ax = plt.subplot(2,2,1)以上两行的子图(subpl
这段时间准备自己搭建一个快速开发的项目,所以选择用springboot与mybatisplus集成生成基础的CRUD方法,利用swagger生成代码文档。一步一步把搭建过程记录下来,希望能给初学者提供帮助。搭建springboot 在idea上选择新建工程 选择Spring Initializr 填写maven的gav. ...
单元测试如果把开发程序比作盖房子,那么我们必须确保所有的用料都是合格的,否则盖起来的房子就会存在问题。对于程序而言,我们可以将盖房子的砖头、钢筋、水泥等当做一个个功能单元,如果每个单元是合...
pip 常用命令pipinstall./downloads/SomePackage-1.0.4.tar.gzpipinstallhttp://my.package.repo/SomePackage-1.0.4.zippipsearch"query"##查询package的具体名称pipuninstallpackage-name##卸载pip...
客户介绍: XX集团成立于2008年,主要业务是新能源矿产资源的投资开发,锂电材料和电芯的研发、生产和销售,系统集成及行业服务,是国内拥有完整锂电产业链的集团公司。服务需求:Ø一级总部需要与二级总部的需求互联通信;Ø下属七个节点可访问一级总部的财务服务器;Ø下属七个节点与二级总部间开展视频会议;Ø下属七个节点各2M带宽,北京二级总部各10M...