赞
踩
- // 导入用户
- export function uploadUser(data) {
- const formData = new FormData();
- formData.append('file', data); // data 是从文件上传事件中获取的文件对象
- return request({
- url: '/users/upload',
- method: 'post',
- headers: {
- 'Content-Type': 'multipart/form-data'
- },
- data: formData,
- transformRequest: [(data) => data] // 禁用默认的序列化行为
- })
- }
- <el-upload
- class="upload-demo"
- ref="upload"
- action="dummy-action"
- :show-file-list="false" :before-upload="handleImportUser">
- <el-button type="primary" icon="el-icon-download" style="margin-left: 20px">导入</el-button>
- </el-upload>
- // 导入的回调
- async handleImportUser(file) {
- if (!file.name.endsWith('.xlsx')) return this.$message.error('请上传Excel文件!')
- if (file.size > 1024 * 1024 * 5) return this.$message.error('文件大小不能超过5MB!')
- const res = await uploadUser(file)
- if (res.code !== 200) return this.$message.error('导入失败!')
- this.$message.success('导入成功!')
- this.getUserList()
- }
- @user_router.post('/upload', summary='导入用户')
- async def user_upload(file: UploadFile):
- # 检查文件类型是否为 Excel
- if not file.filename.endswith(('.xls', '.xlsx')):
- return base_response(code=400, msg='文件格式错误!')
- if file.size > 1024 * 1024 * 5:
- return base_response(code=400, msg='文件大小不能超过5MB!')
-
- # 读取 Excel 文件
- wb = openpyxl.load_workbook(file.file)
- ws = wb.active
-
- # 遍历 Excel 表格的每一行数据并保存到数据库中
- for row in ws.iter_rows(min_row=2, values_only=True): # Assuming first row is header
- try:
- name, nick_name, phone, password = row
- # 数据校验
- if not name or not password:
- raise ValueError('姓名和密码不能为空!')
- if await User.exists(name=name):
- raise ValueError('用户已存在!')
- if not re.match(r'^1[3-9]\d{9}$', str(phone)):
- raise ValueError('手机号码格式错误!')
-
- # 将有效数据保存到数据库中,这里假设有一个数据库操作函数 save_user()
- await User.create(name=name, nick_name=nick_name, phone=phone, password=hash_password(str(password)))
- except ValueError as e:
- print(f"数据导入失败:{e}")
-
- return base_response(code=200, msg='导入用户成功!')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。