''wip(semantic):调整序列化返回结果

This commit is contained in:
zhengxinonly
2021-09-15 00:45:35 +08:00
parent 550f99e468
commit 316ebc2441
21 changed files with 200 additions and 164 deletions
+18 -15
View File
@@ -1,25 +1,28 @@
from flask_restful import Api
from .department import Departments, Department, DeptEnable
from .rights import RightRights, RightPower, RightPowerEnable, AdminConfigs, AdminMenu
from .roles import RoleRoles, RoleRole, RoleEnable, RolePower
from .department import DepartmentsResource, DepartmentResource, DeptEnableResource
from .rights import (
RightRightsResource, RightPowerResource, RightPowerEnableResource, AdminConfigsResource,
AdminMenuResource
)
from .roles import RoleRolesResource, RoleRoleResource, RoleEnableResource, RolePowerResource
def register_rights_api(api_bp):
dept_api = Api(api_bp, prefix='/dept')
dept_api.add_resource(Departments, '/departments')
dept_api.add_resource(Department, '/department/<int:dept_id>')
dept_api.add_resource(DeptEnable, '/department/<int:dept_id>/status')
dept_api.add_resource(DepartmentsResource, '/departments')
dept_api.add_resource(DepartmentResource, '/department/<int:dept_id>')
dept_api.add_resource(DeptEnableResource, '/department/<int:dept_id>/status')
rights_api = Api(api_bp, prefix='/rights')
rights_api.add_resource(RightRights, '/rights')
rights_api.add_resource(RightPower, '/power/<int:power_id>')
rights_api.add_resource(RightPowerEnable, '/power/<int:right_id>/status')
rights_api.add_resource(AdminConfigs, '/configs')
rights_api.add_resource(AdminMenu, '/menu')
rights_api.add_resource(RightRightsResource, '/rights')
rights_api.add_resource(RightPowerResource, '/power/<int:power_id>')
rights_api.add_resource(RightPowerEnableResource, '/power/<int:right_id>/status')
rights_api.add_resource(AdminConfigsResource, '/configs')
rights_api.add_resource(AdminMenuResource, '/menu')
role_api = Api(api_bp, prefix='/roles')
role_api.add_resource(RoleRoles, '/roles')
role_api.add_resource(RoleRole, '/role/<int:role_id>')
role_api.add_resource(RoleEnable, '/role/<int:role_id>/status')
role_api.add_resource(RolePower, '/role_power/<int:role_id>')
role_api.add_resource(RoleRolesResource, '/roles')
role_api.add_resource(RoleRoleResource, '/role/<int:role_id>')
role_api.add_resource(RoleEnableResource, '/role/<int:role_id>/status')
role_api.add_resource(RolePowerResource, '/role_power/<int:role_id>')
+4 -5
View File
@@ -2,14 +2,13 @@ from flask import jsonify
from flask_restful import Resource
from flask_restful import marshal, reqparse
from applications.common.serialization import dept_fields
from applications.common.utils.http import success_api, fail_api
from applications.common.utils.rights import authorize
from applications.extensions import db
from applications.models import CompanyDepartment, CompanyUser
class Departments(Resource):
class DepartmentsResource(Resource):
@authorize("admin:dept:main", log=True)
def get(self):
@@ -17,7 +16,7 @@ class Departments(Resource):
# TODO dtree 需要返回状态信息
res = {
"status": {"code": 200, "message": "默认"},
"data": marshal(dept_data, dept_fields)
"data": marshal(dept_data, CompanyDepartment.fields())
}
print(dept_data)
return jsonify(res)
@@ -52,7 +51,7 @@ class Departments(Resource):
return success_api(message="成功")
class Department(Resource):
class DepartmentResource(Resource):
@authorize("admin:dept:edit", log=True)
def get(self, dept_id):
dept = CompanyDepartment.query.filter_by(id=dept_id).first()
@@ -106,7 +105,7 @@ class Department(Resource):
return fail_api(message="删除失败")
class DeptEnable(Resource):
class DeptEnableResource(Resource):
@authorize("admin:dept:edit", log=True)
def put(self, dept_id):
d = CompanyDepartment.query.get(dept_id)
+7 -8
View File
@@ -5,7 +5,6 @@ from flask import request, jsonify, current_app
from flask_login import current_user, login_required
from flask_restful import Resource, reqparse, marshal
from applications.common.serialization import power2_fields, power_fields
from applications.common.utils.http import success_api, fail_api
from applications.common.utils.rights import authorize
from applications.extensions import db
@@ -101,7 +100,7 @@ def make_menu_tree():
if p.type == 0 or p.type == 1:
powers.append(p)
power_dict = marshal(powers, power2_fields) # 生成可序列化对象
power_dict = marshal(powers, RightsPower.fields2()) # 生成可序列化对象
power_dict.sort(key=lambda x: x['id'], reverse=True)
menu_dict = OrderedDict()
@@ -153,13 +152,13 @@ parser_power.add_argument('powerUrl', type=str, dest='power_url')
parser_power.add_argument('sort', type=int, dest='sort')
class RightRights(Resource):
class RightRightsResource(Resource):
@authorize("admin:power:main", log=True)
def get(self):
"""获取选择父节点"""
power = RightsPower.query.all()
power_data = marshal(power, power_fields)
power_data = marshal(power, RightsPower.fields())
power_data.append({"powerId": 0, "powerName": "顶级权限", "parentId": -1})
res = {
"status": {"code": 200, "message": "默认"},
@@ -175,7 +174,7 @@ class RightRights(Resource):
return success_api(message="批量删除成功")
class RightPower(Resource):
class RightPowerResource(Resource):
@authorize("admin:power:add", log=True)
def post(self, power_id):
@@ -241,7 +240,7 @@ class RightPower(Resource):
return success_api(message="更新权限成功")
class RightPowerEnable(Resource):
class RightPowerEnableResource(Resource):
@authorize("admin:power:edit", log=True)
def put(self, right_id):
@@ -255,13 +254,13 @@ class RightPowerEnable(Resource):
return fail_api(message="出错啦")
class AdminConfigs(Resource):
class AdminConfigsResource(Resource):
@login_required
def get(self):
return get_render_config()
class AdminMenu(Resource):
class AdminMenuResource(Resource):
@login_required
def get(self):
menu_tree = make_menu_tree()
+6 -8
View File
@@ -1,8 +1,6 @@
from flask import jsonify
from flask_login import login_required
from flask_restful import Resource, reqparse, marshal
from applications.common.serialization import power_fields
from applications.common.utils.http import table_api, success_api, fail_api
from applications.common.utils.rights import authorize
from applications.extensions import db
@@ -37,7 +35,7 @@ def batch_remove_role(role_ids):
remove_role(role_id)
class RoleRoles(Resource):
class RoleRolesResource(Resource):
# 表格数据
@authorize("admin:role:main", log=True)
def get(self):
@@ -61,7 +59,7 @@ class RoleRoles(Resource):
'roleName': item.name,
'roleCode': item.code,
'enable': item.enable,
'remark': item.remark,
'comment': item.comment,
'details': item.details,
'sort': item.sort,
'create_at': str(item.create_at), } for item in paginate.items],
@@ -80,7 +78,7 @@ class RoleRoles(Resource):
return success_api(message="批量删除成功")
class RoleRole(Resource):
class RoleRoleResource(Resource):
@authorize("admin:role:add", log=True)
def post(self, role_id):
@@ -132,7 +130,7 @@ class RoleRole(Resource):
return success_api(message="更新角色成功")
class RoleEnable(Resource):
class RoleEnableResource(Resource):
"""启用用户"""
@authorize("admin:role:edit", log=True)
@@ -147,7 +145,7 @@ class RoleEnable(Resource):
return success_api(message=message)
class RolePower(Resource):
class RolePowerResource(Resource):
@authorize("admin:role:main", log=True)
def get(self, role_id):
@@ -156,7 +154,7 @@ class RolePower(Resource):
# 获取权限列表的 id
check_powers_list = [rp.id for rp in role.power]
powers = RightsPower.query.all() # 获取所有的权限
powers = marshal(powers, power_fields)
powers = marshal(powers, RightsRole.fields())
for i in powers:
if int(i.get("powerId")) in check_powers_list:
i["checkArr"] = "1"
+5 -5
View File
@@ -1,12 +1,12 @@
from flask_restful import Api
from .file import FilePhotos, FileTable
from .passport import Login
from .file import FilePhotosResource, FilePhotoResource
from .passport import LoginResource
def register_system_api(api_bp):
sys_api = Api(api_bp)
sys_api.add_resource(FilePhotos, '/file/photos')
sys_api.add_resource(FileTable, '/file/photo/<int:photo_id>')
sys_api.add_resource(Login, '/passport/login')
sys_api.add_resource(FilePhotosResource, '/file/photos')
sys_api.add_resource(FilePhotoResource, '/file/photo/<int:photo_id>')
sys_api.add_resource(LoginResource, '/passport/login')
+12 -11
View File
@@ -4,7 +4,6 @@ from flask import request, jsonify, current_app
from flask_restful import Resource, marshal
from sqlalchemy import desc
from applications.common.serialization import photo_fields
from applications.common.utils.http import fail_api, success_api, table_api
from applications.common.utils.rights import authorize
from applications.common.utils.upload import upload_one, delete_photo_by_id
@@ -12,15 +11,17 @@ from applications.extensions import db
from applications.models import FilePhoto
class FilePhotos(Resource):
class FilePhotosResource(Resource):
@authorize("admin:file:main", log=True)
def get(self):
page = request.args.get('page', type=int)
limit = request.args.get('limit', type=int)
photo_paginate = FilePhoto.query.order_by(desc(FilePhoto.create_at)).paginate(page=page, per_page=limit,
error_out=False)
data = marshal(photo_paginate.items, photo_fields)
photo_paginate = FilePhoto.query.order_by(desc(FilePhoto.create_at)
).paginate(page=page,
per_page=limit,
error_out=False)
data = marshal(photo_paginate.items, FilePhoto.fields())
return table_api(result={'items': data,
'total': photo_paginate.total, },
code=0)
@@ -33,7 +34,7 @@ class FilePhotos(Resource):
file_url = upload_one(photo=photo, mime=mime)
res = {
"msg": "上传成功",
"message": "上传成功",
"code": 0,
"success": True,
"data":
@@ -54,18 +55,18 @@ class FilePhotos(Resource):
photo = FilePhoto.query.filter(FilePhoto.id.in_(ids)).delete(synchronize_session=False)
db.session.commit()
if photo:
return success_api(msg="删除成功")
return success_api(message="删除成功")
else:
return fail_api(msg="删除失败")
return fail_api(message="删除失败")
class FileTable(Resource):
class FilePhotoResource(Resource):
"""图片数据"""
@authorize("admin:file:delete", log=True)
def delete(self, photo_id):
res = delete_photo_by_id(photo_id)
if res:
return success_api(msg="删除成功")
return success_api(message="删除成功")
else:
return fail_api(msg="删除失败")
return fail_api(message="删除失败")
+1 -1
View File
@@ -9,7 +9,7 @@ from applications.common.utils.rights import record_logging
from applications.models import CompanyUser
class Login(Resource):
class LoginResource(Resource):
login_req = reqparse.RequestParser(bundle_errors=True)
login_req.add_argument('username', type=str, help='请输入用户名', required=True)
login_req.add_argument('password', type=str, help='请输入密码', required=True)
+9 -9
View File
@@ -1,16 +1,16 @@
from flask_restful import Api
from .profile import UserStatus, UserAvatar, UserInfo, UserPassword
from .user import UserUsers, UserUser, UserRole
from .profile import UserStatusResource, UserAvatarResource, UserInfoResource, UserPasswordResource
from .user import UserUsersResource, UserUserResource, UserRoleResource
def register_users_api(api_bp):
users_api = Api(api_bp, prefix='/users')
users_api.add_resource(UserInfo, '/user/<int:user_id>/info')
users_api.add_resource(UserStatus, '/user/<int:user_id>/status')
users_api.add_resource(UserAvatar, '/user/<int:user_id>/avatar')
users_api.add_resource(UserPassword, '/user/<int:user_id>/password')
users_api.add_resource(UserUsers, '/users')
users_api.add_resource(UserUser, '/user/<int:user_id>')
users_api.add_resource(UserRole, '/user/<int:user_id>/role')
users_api.add_resource(UserInfoResource, '/user/<int:user_id>/info')
users_api.add_resource(UserStatusResource, '/user/<int:user_id>/status')
users_api.add_resource(UserAvatarResource, '/user/<int:user_id>/avatar')
users_api.add_resource(UserPasswordResource, '/user/<int:user_id>/password')
users_api.add_resource(UserUsersResource, '/users')
users_api.add_resource(UserUserResource, '/user/<int:user_id>')
users_api.add_resource(UserRoleResource, '/user/<int:user_id>/role')
+4 -4
View File
@@ -8,7 +8,7 @@ from applications.extensions import db
from applications.models import CompanyUser
class UserStatus(Resource):
class UserStatusResource(Resource):
def put(self, user_id):
# 启用或者禁用用户 enable disable
@@ -32,7 +32,7 @@ class UserStatus(Resource):
return message
class UserAvatar(Resource):
class UserAvatarResource(Resource):
"""修改头像"""
def put(self, user_id):
@@ -45,7 +45,7 @@ class UserAvatar(Resource):
return success_api(message="修改成功")
class UserInfo(Resource):
class UserInfoResource(Resource):
@login_required
def put(self, user_id):
@@ -67,7 +67,7 @@ class UserInfo(Resource):
return success_api(message="更新成功")
class UserPassword(Resource):
class UserPasswordResource(Resource):
"""前用户密码"""
@login_required
+3 -3
View File
@@ -57,7 +57,7 @@ def update_user_role(_id, roles_list):
db.session.commit()
class UserUsers(Resource):
class UserUsersResource(Resource):
"""用户列表数据操作"""
@authorize("admin:user:main", log=True)
@@ -138,7 +138,7 @@ class UserUsers(Resource):
return success_api(message="批量删除成功")
class UserUser(Resource):
class UserUserResource(Resource):
"""修改用户数据"""
@authorize("admin:user:add", log=True)
@@ -182,7 +182,7 @@ class UserUser(Resource):
return success_api(message="删除成功")
class UserRole(Resource):
class UserRoleResource(Resource):
@authorize("admin:user:edit", log=True)
def put(self, user_id):
parser = reqparse.RequestParser()
@@ -1,76 +0,0 @@
from flask_restful import fields
power_fields = {
'powerId': fields.String(attribute="id"),
'powerName': fields.String(attribute="name"),
'powerType': fields.String(attribute="type"),
'powerUrl': fields.String(attribute="url"),
'openType': fields.String(attribute="open_type"),
'parentId': fields.String(attribute="parent_id"),
'icon': fields.String,
'sort': fields.Integer,
'create_at': fields.DateTime,
'update_time': fields.DateTime,
'enable': fields.Integer,
}
power2_fields = {
'id': fields.Integer,
'title': fields.String(attribute="name"),
'type': fields.String,
'code': fields.String,
'href': fields.String(attribute="url"),
'openType': fields.String(attribute="open_type"),
'parent_id': fields.Integer,
'icon': fields.String,
'sort': fields.Integer,
'create_at': fields.DateTime,
'update_time': fields.DateTime,
'enable': fields.Integer,
}
role_fields = {
'id': fields.Integer,
'roleName': fields.String(attribute="name"),
'roleCode': fields.String(attribute="code"),
'enable': fields.String,
'remark': fields.String,
'details': fields.String,
'sort': fields.Integer,
'create_at': fields.DateTime,
'update_at': fields.DateTime,
}
log_fields = {
'id': fields.Integer,
'method': fields.String,
'uid': fields.String,
'url': fields.String,
'desc': fields.String,
'ip': fields.String,
'user_agent': fields.String,
'success': fields.Boolean,
'create_at': fields.DateTime,
}
dept_fields = {
'deptId': fields.Integer(attribute="id"),
'parentId': fields.Integer(attribute="parent_id"),
'deptName': fields.String(attribute="dept_name"),
'leader': fields.String,
'phone': fields.String,
'email': fields.String,
'address': fields.String,
'status': fields.Integer,
'sort': fields.Integer,
}
photo_fields = {
'id': fields.Integer,
'name': fields.String,
'href': fields.String,
'mime': fields.String,
'size': fields.String,
'ext': fields.String,
'create_at': fields.DateTime,
}
View File
+14
View File
@@ -1,3 +1,5 @@
from flask_restful import fields
from applications.extensions import db
from ..base import BaseModel
@@ -10,3 +12,15 @@ class FilePhoto(db.Model, BaseModel):
href = db.Column(db.String(255))
mime = db.Column(db.CHAR(50), nullable=False)
size = db.Column(db.CHAR(30), nullable=False)
@staticmethod
def fields():
return {
'id': fields.Integer,
'name': fields.String,
'href': fields.String,
'mime': fields.String,
'size': fields.String,
'ext': fields.String,
'create_at': fields.DateTime,
}
+16
View File
@@ -1,3 +1,5 @@
from flask_restful import fields
from applications.extensions import db
from .base import BaseModel
@@ -12,3 +14,17 @@ class LoggingModel(db.Model, BaseModel):
ip = db.Column(db.String(255))
success = db.Column(db.Boolean, default=True)
user_agent = db.Column(db.Text)
@staticmethod
def fields():
return {
'id': fields.Integer,
'method': fields.String,
'uid': fields.String,
'url': fields.Url,
'desc': fields.String,
'ip': fields.String,
'success': fields.Boolean,
'user_agent': fields.String,
'create_at': fields.DateTime,
}
+36 -5
View File
@@ -1,4 +1,4 @@
import datetime
from flask_restful import fields
from applications.extensions import db
from ..base import BaseModel
@@ -15,9 +15,40 @@ class RightsPower(db.Model, BaseModel):
parent_id = db.Column(db.Integer, db.ForeignKey("rt_power.id"), comment='父类编号')
icon = db.Column(db.String(128), comment='图标')
sort = db.Column(db.Integer, comment='排序')
create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
enable = db.Column(db.Integer, comment='是否开启')
enable = db.Column(db.Boolean, comment='是否开启')
parent = db.relationship("RightsPower", remote_side=[id]) # 自关联
@staticmethod
def fields():
return {
'powerId': fields.String(attribute="id"),
'powerName': fields.String(attribute="name"),
'powerType': fields.String(attribute="type"),
'powerUrl': fields.String(attribute="url"),
'openType': fields.String(attribute="open_type"),
'parentId': fields.String(attribute="parent_id"),
'icon': fields.String,
'sort': fields.Integer,
'create_at': fields.DateTime,
'update_at': fields.DateTime,
'enable': fields.Integer,
}
@staticmethod
def fields2():
return {
'id': fields.Integer,
'title': fields.String(attribute="name"),
'type': fields.String,
'code': fields.String,
'href': fields.String(attribute="url"),
'openType': fields.String(attribute="open_type"),
'parent_id': fields.Integer,
'icon': fields.String,
'sort': fields.Integer,
'enable': fields.Boolean,
'update_at': fields.DateTime,
'create_at': fields.DateTime,
}
+18 -2
View File
@@ -1,3 +1,5 @@
from flask_restful import fields
from applications.extensions import db
from ..base import BaseModel
@@ -7,9 +9,23 @@ class RightsRole(db.Model, BaseModel):
id = db.Column(db.Integer, primary_key=True, comment='角色ID')
name = db.Column(db.String(255), comment='角色名称')
code = db.Column(db.String(255), comment='角色标识')
enable = db.Column(db.Integer, comment='是否启用')
remark = db.Column(db.String(255), comment='备注')
enable = db.Column(db.Boolean, comment='是否启用')
comment = db.Column(db.String(255), comment='备注')
details = db.Column(db.String(255), comment='详情')
sort = db.Column(db.Integer, comment='排序')
power = db.relationship('RightsPower', secondary="rt_role_power", backref=db.backref('role'))
@staticmethod
def fields():
return {
'id': fields.Integer,
'roleName': fields.String(attribute="name"),
'roleCode': fields.String(attribute="code"),
'enable': fields.Boolean,
'comment': fields.String,
'details': fields.String,
'sort': fields.Integer,
'create_at': fields.DateTime,
'update_at': fields.DateTime,
}
+20 -3
View File
@@ -1,3 +1,4 @@
from flask_restful import fields
from applications.extensions import db
from ..base import BaseModel
@@ -7,10 +8,26 @@ class CompanyDepartment(db.Model, BaseModel):
id = db.Column(db.Integer, primary_key=True, comment="部门ID")
parent_id = db.Column(db.Integer, comment="父级编号")
dept_name = db.Column(db.String(50), comment="部门名称")
sort = db.Column(db.Integer, comment="排序")
leader = db.Column(db.String(50), comment="负责人")
phone = db.Column(db.String(20), comment="联系方式")
email = db.Column(db.String(50), comment="邮箱")
status = db.Column(db.Integer, comment='状态(1开启,0关闭)')
remark = db.Column(db.Text, comment="备注")
status = db.Column(db.Boolean, comment='状态(1开启,0关闭)')
comment = db.Column(db.Text, comment="备注")
address = db.Column(db.String(255), comment="详细地址")
sort = db.Column(db.Integer, comment="排序")
@staticmethod
def fields():
return {
'deptId': fields.Integer(attribute="id"),
'parentId': fields.Integer(attribute="parent_id"),
'deptName': fields.String(attribute="dept_name"),
'sort': fields.Integer,
'leader': fields.String,
'phone': fields.String,
'email': fields.String,
'status': fields.Boolean,
'comment': fields.String,
'address': fields.String,
'create_at': fields.DateTime
}
+20 -1
View File
@@ -1,5 +1,6 @@
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
from flask_restful import fields
from applications.extensions import db
from ..base import BaseModel
@@ -12,7 +13,7 @@ class CompanyUser(db.Model, UserMixin, BaseModel):
realname = db.Column(db.String(20), comment='真实名字')
mobile = db.Column(db.String(11), comment='电话号码')
avatar = db.Column(db.String(255), comment='头像', default="/static/admin/admin/images/avatar.jpg")
remark = db.Column(db.String(255), comment='备注')
comment = db.Column(db.String(255), comment='备注')
password_hash = db.Column(db.String(128), comment='哈希密码')
enable = db.Column(db.Integer, default=0, comment='启用')
dept_id = db.Column(db.Integer, comment='部门id')
@@ -24,3 +25,21 @@ class CompanyUser(db.Model, UserMixin, BaseModel):
def validate_password(self, password):
return check_password_hash(self.password_hash, password)
@staticmethod
def fields():
return {
'id': fields.Integer,
'username': fields.String,
'realname': fields.String,
'mobile': fields.String,
'avatar': fields.Url,
'comment': fields.String,
# 'password_hash': fields.String,
'enable': fields.Boolean,
# 'dept_id': fields.Integer,
'dept_id': fields.Integer,
'create_at': fields.DateTime,
'update_at': fields.DateTime,
}
+2 -3
View File
@@ -1,7 +1,6 @@
from flask import Blueprint, request, render_template
from sqlalchemy import desc
from flask_restful import marshal
from applications.common.serialization import log_fields
from applications.common.utils.http import table_api
from applications.common.utils.rights import authorize, permission_required
@@ -25,7 +24,7 @@ def login_log():
url='/api/v1/passport/login').order_by(
desc(LoggingModel.create_at)).paginate(
page=page, per_page=limit, error_out=False)
data = marshal(log_paginate.items, log_fields)
data = marshal(log_paginate.items, LoggingModel.fields())
return table_api(result={'items': data,
'total': log_paginate.total, },
@@ -41,7 +40,7 @@ def operate_log():
LoggingModel.url != '/api/v1/passport/login').order_by(
desc(LoggingModel.create_at)).paginate(
page=page, per_page=limit, error_out=False)
data = marshal(log_paginate.items, log_fields)
data = marshal(log_paginate.items, LoggingModel.fields())
return table_api(result={'items': data,
'total': log_paginate.total, },
code=0)
+4 -4
View File
@@ -167,14 +167,14 @@
success: function (res) {
layer.close(loading)
if (res.success) {
layer.msg(res.msg, {
layer.msg(res.message, {
icon: 1,
time: 1000,
}, function () {
obj.del()
})
} else {
layer.msg(res.msg, {
layer.msg(res.message, {
icon: 2,
time: 1000,
})
@@ -215,14 +215,14 @@
success: function (res) {
layer.close(loading)
if (res.success) {
layer.msg(res.msg, {
layer.msg(res.message, {
icon: 1,
time: 1000,
}, function () {
table.reload('tables')
})
} else {
layer.msg(res.msg, {
layer.msg(res.message, {
icon: 2,
time: 1000,
})
+1 -1
View File
@@ -65,7 +65,7 @@
location.href = '/admin'
})
} else {
popup.failure(result.success, function () {
popup.failure(result.message, function () {
document.getElementById('captchaImage').src = captchaPath + '?' + Math.random()
})
}