|
@@ -1,5 +1,5 @@
|
|
|
import json
|
|
|
-from io import StringIO
|
|
|
+from io import BytesIO
|
|
|
|
|
|
from flask import request, jsonify, Response, current_app
|
|
|
from flask_restx import Resource, Namespace, reqparse
|
|
@@ -10,7 +10,7 @@ from app.defines import StatesCode, Module, OperationType
|
|
|
from app.modle.users import User
|
|
|
from app.utils.jwt_util import login_required
|
|
|
from app.utils.save_log import save_log
|
|
|
-from app.utils.util import to_dict
|
|
|
+from app.utils.util import to_dict, MyXlwt
|
|
|
|
|
|
ns = Namespace('users', description='用户管理接口')
|
|
|
|
|
@@ -63,7 +63,6 @@ add_user.add_argument(name='on_job_status', type=str, required=False, location='
|
|
|
add_user.add_argument(name='duty', type=str, required=False, location='form', help='职务')
|
|
|
add_user.add_argument(name='nationality', type=str, required=False, location='form', help='国籍')
|
|
|
|
|
|
-
|
|
|
user_details = reqparse.RequestParser(bundle_errors=True)
|
|
|
user_details.add_argument(name='id', type=int, required=True, location='args', help='用户id')
|
|
|
|
|
@@ -306,9 +305,13 @@ class BatchModifyUsersStatusApi(Resource):
|
|
|
return jsonify(code=StatesCode.SUCCESS, message='批量修改用户状态成功')
|
|
|
|
|
|
|
|
|
+export_users = reqparse.RequestParser(bundle_errors=True)
|
|
|
+export_users.add_argument(name='export_type', type=str, required=True, location='args', help='导出类型')
|
|
|
+
|
|
|
+
|
|
|
@ns.route('/export_data')
|
|
|
class ExportDataApi(Resource):
|
|
|
- method_decorators = [login_required]
|
|
|
+ # method_decorators = [login_required]
|
|
|
|
|
|
@ns.doc(id='export_data', description='导出用户数据')
|
|
|
@ns.expect()
|
|
@@ -318,9 +321,30 @@ class ExportDataApi(Resource):
|
|
|
stmt = select(User)
|
|
|
results = session.execute(stmt).scalars().all()
|
|
|
|
|
|
- response = Response(StringIO(json.dumps(to_dict(results))))
|
|
|
+ my_xlwt = MyXlwt()
|
|
|
+
|
|
|
+ title = ['id', 'user_name', 'password', 'photograph', 'name', 'phone', 'email', 'company', 'department', 'role',
|
|
|
+ 'permission', 'on_job_status', 'duty', 'account_status', 'nationality', 'register_time',
|
|
|
+ 'common_menus']
|
|
|
+
|
|
|
+ # 写入标题
|
|
|
+ my_xlwt.write_row(0, 0, title)
|
|
|
+ # 写入内容
|
|
|
+ start_row = 1 # 内容起始行
|
|
|
+ for result in results:
|
|
|
+ data = [result.id, result.user_name, result.password, result.photograph, result.name, result.phone,
|
|
|
+ result.email, result.company, result.department, result.role, result.permission,
|
|
|
+ result.on_job_status,
|
|
|
+ result.duty, result.account_status, result.nationality, result.register_time, result.common_menus]
|
|
|
+ my_xlwt.write_row(start_row, 0, data)
|
|
|
+
|
|
|
+ start_row += 1
|
|
|
+
|
|
|
+ output = BytesIO()
|
|
|
+ my_xlwt.save(output)
|
|
|
+ response = Response(output.getvalue())
|
|
|
response.headers['Content-Type'] = 'application/octet-stream'
|
|
|
- response.headers['Content-Disposition'] = 'attachment; filename=%s' % 'users.json'
|
|
|
+ response.headers['Content-Disposition'] = 'attachment; filename=%s' % 'users.xls'
|
|
|
|
|
|
save_log(request, Module.USER, OperationType.EXPORT, StatesCode.SUCCESS)
|
|
|
|