diff --git a/backend/dvadmin/system/init_data.py b/backend/dvadmin/system/init_data.py index 5a41f94..4f3edb5 100644 --- a/backend/dvadmin/system/init_data.py +++ b/backend/dvadmin/system/init_data.py @@ -148,10 +148,21 @@ button_data = [ "dept_belong_id": 1, "update_datetime": datetime.datetime.now(), "create_datetime": datetime.datetime.now(), - "name": "重置密码", + "name": "重设密码", "value": "ResetPassword", "creator_id": 1, }, + { + "id": 10, + "description": None, + "modifier": "1", + "dept_belong_id": 1, + "update_datetime": datetime.datetime.now(), + "create_datetime": datetime.datetime.now(), + "name": "重置密码", + "value": "DefaultPassword", + "creator_id": 1, + }, ] menu_data = [ @@ -1250,7 +1261,7 @@ menu_button_data = [ "dept_belong_id": 1, "update_datetime": datetime.datetime.now(), "create_datetime": datetime.datetime.now(), - "name": "重置密码", + "name": "重设密码", "value": "ResetPassword", "api": "/api/system/user/reset_password/{id}/", "method": 2, @@ -1261,6 +1272,20 @@ menu_button_data = [ "id": 54, "description": None, "modifier": "1", + "dept_belong_id": 1, + "update_datetime": datetime.datetime.now(), + "create_datetime": datetime.datetime.now(), + "name": "重置密码", + "value": "DefaultPassword", + "api": "/api/system/user/reset_to_default_password/{id}/", + "method": 2, + "creator_id": 1, + "menu_id": 3, + }, + { + "id": 55, + "description": None, + "modifier": "1", "dept_belong_id": "1", "update_datetime": datetime.datetime.now(), "create_datetime": datetime.datetime.now(), @@ -1272,7 +1297,7 @@ menu_button_data = [ "menu_id": 20, }, { - "id": 55, + "id": 56, "description": None, "modifier": "1", "dept_belong_id": "1", @@ -1286,7 +1311,7 @@ menu_button_data = [ "menu_id": 20, }, { - "id": 56, + "id": 57, "description": None, "modifier": "1", "dept_belong_id": 1, @@ -1388,7 +1413,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": None, "is_value": 0, - "type": 0 + "type": 0, }, { "id": 2, @@ -1405,7 +1430,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 1, "is_value": 1, - "type": 6 + "type": 6, }, { "id": 5, @@ -1422,7 +1447,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": None, "is_value": 0, - "type": 0 + "type": 0, }, { "id": 6, @@ -1439,7 +1464,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 1, "is_value": 1, - "type": 6 + "type": 6, }, { "id": 7, @@ -1456,7 +1481,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": None, "is_value": 0, - "type": 0 + "type": 0, }, { "id": 8, @@ -1473,7 +1498,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 7, "is_value": 1, - "type": 1 + "type": 1, }, { "id": 9, @@ -1490,7 +1515,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 7, "is_value": 1, - "type": 1 + "type": 1, }, { "id": 10, @@ -1507,7 +1532,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": None, "is_value": 0, - "type": 0 + "type": 0, }, { "id": 11, @@ -1524,7 +1549,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 5, "is_value": 1, - "type": 6 + "type": 6, }, { "id": 12, @@ -1541,7 +1566,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 5, "is_value": 1, - "type": 6 + "type": 6, }, { "id": 13, @@ -1558,7 +1583,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 10, "is_value": 1, - "type": 1 + "type": 1, }, { "id": 14, @@ -1575,7 +1600,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 10, "is_value": 1, - "type": 1 + "type": 1, }, { "id": 15, @@ -1592,7 +1617,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": None, "is_value": 0, - "type": 0 + "type": 0, }, { "id": 16, @@ -1609,7 +1634,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 15, "is_value": 1, - "type": 1 + "type": 1, }, { "id": 17, @@ -1626,7 +1651,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 15, "is_value": 1, - "type": 1 + "type": 1, }, { "id": 18, @@ -1643,7 +1668,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": None, "is_value": 0, - "type": 0 + "type": 0, }, { "id": 19, @@ -1660,7 +1685,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 18, "is_value": 1, - "type": 1 + "type": 1, }, { "id": 20, @@ -1677,7 +1702,7 @@ dictionary_data = [ "creator_id": 1, "parent_id": 18, "is_value": 1, - "type": 1 + "type": 1, }, { "id": 21, @@ -1694,6 +1719,6 @@ dictionary_data = [ "creator_id": 1, "parent_id": 18, "is_value": 1, - "type": 1 - } + "type": 1, + }, ] diff --git a/backend/dvadmin/system/initialize.py b/backend/dvadmin/system/initialize.py index 2f8c8f0..46326da 100644 --- a/backend/dvadmin/system/initialize.py +++ b/backend/dvadmin/system/initialize.py @@ -15,6 +15,7 @@ from dvadmin.system.models import ( MenuButton, Role, Users, + Dictionary, ) from .init_data import ( @@ -78,7 +79,7 @@ class Initialize(CoreInitialize): 初始化字典表 """ data = dictionary_data - self.save(Users, data, "字典表", no_reset=False) + self.save(Dictionary, data, "字典表", no_reset=False) def run(self): self.init_dept() diff --git a/backend/dvadmin/system/urls.py b/backend/dvadmin/system/urls.py index 5ed359d..5f80a9b 100644 --- a/backend/dvadmin/system/urls.py +++ b/backend/dvadmin/system/urls.py @@ -1,11 +1,3 @@ -# -*- coding: utf-8 -*- - -""" -@author: 猿小天 -@contact: QQ:1638245306 -@Created on: 2021/6/1 001 23:05 -@Remark: 系统管理的路由文件 -""" from django.urls import path from rest_framework import routers @@ -42,6 +34,7 @@ urlpatterns = [ path('menu/web_router/', MenuViewSet.as_view({'get': 'web_router'})), path('user/user_info/', UserViewSet.as_view({'get': 'user_info', 'put': 'update_user_info'})), path('user/change_password//', UserViewSet.as_view({'put': 'change_password'})), + path('user/reset_to_default_password//', UserViewSet.as_view({'put': 'reset_to_default_password'})), path('user/reset_password//', UserViewSet.as_view({'put': 'reset_password'})), path('user/export/', UserViewSet.as_view({'post': 'export_data', })), path('user/import/', UserViewSet.as_view({'get': 'import_data', 'post': 'import_data'})), diff --git a/backend/dvadmin/system/views/user.py b/backend/dvadmin/system/views/user.py index 8adbcae..e8bcd37 100644 --- a/backend/dvadmin/system/views/user.py +++ b/backend/dvadmin/system/views/user.py @@ -242,8 +242,8 @@ class UserViewSet(CustomModelViewSet): return ErrorResponse(msg="未获取到用户") @action(methods=["PUT"], detail=True, permission_classes=[IsAuthenticated]) - def reset_password(self, request, *args, **kwargs): - """重置密码""" + def reset_to_default_password(self, request, *args, **kwargs): + """恢复默认密码""" instance = Users.objects.filter(id=kwargs.get("pk")).first() if instance: instance.set_password(settings.DEFAULT_PASSWORD) @@ -252,21 +252,21 @@ class UserViewSet(CustomModelViewSet): else: return ErrorResponse(msg="未获取到用户") - # @action(methods=['PUT'], detail=True) - # def reset_password(self, request, pk): - # """ - # 密码重置 - # """ - # instance = Users.objects.filter(id=pk).first() - # data = request.data - # new_pwd = data.get('newPassword') - # new_pwd2 = data.get('newPassword2') - # if instance: - # if new_pwd != new_pwd2: - # return ErrorResponse(msg="两次密码不匹配") - # else: - # instance.password = make_password(new_pwd) - # instance.save() - # return DetailResponse(data=None, msg="修改成功") - # else: - # return ErrorResponse(msg="未获取到用户") + @action(methods=["PUT"], detail=True) + def reset_password(self, request, pk): + """ + 密码重置 + """ + instance = Users.objects.filter(id=pk).first() + data = request.data + new_pwd = data.get("newPassword") + new_pwd2 = data.get("newPassword2") + if instance: + if new_pwd != new_pwd2: + return ErrorResponse(msg="两次密码不匹配") + else: + instance.password = make_password(new_pwd) + instance.save() + return DetailResponse(data=None, msg="修改成功") + else: + return ErrorResponse(msg="未获取到用户") diff --git a/web/src/views/system/login/base.vue b/web/src/views/system/login/base.vue index 70df33d..8f11655 100644 --- a/web/src/views/system/login/base.vue +++ b/web/src/views/system/login/base.vue @@ -1,7 +1,5 @@ diff --git a/web/src/views/system/login/page.vue b/web/src/views/system/login/page.vue index 5789b14..f683eb6 100644 --- a/web/src/views/system/login/page.vue +++ b/web/src/views/system/login/page.vue @@ -1,18 +1,28 @@ @@ -57,39 +74,45 @@ export default { name: 'user', mixins: [d2CrudPlus.crud], data () { - // var validatePass = (rule, value, callback) => { - // const pwdRegex = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z]).{8,30}') - // if (value === '') { - // callback(new Error('请输入密码')) - // } else if (!pwdRegex.test(value)) { - // callback(new Error('您的密码复杂度太低(密码中必须包含字母、数字)')) - // } else { - // if (this.resetPwdForm.pwd2 !== '') { - // this.$refs.resetPwdForm.validateField('pwd2') - // } - // callback() - // } - // } - // var validatePass2 = (rule, value, callback) => { - // if (value === '') { - // callback(new Error('请再次输入密码')) - // } else if (value !== this.resetPwdForm.pwd) { - // callback(new Error('两次输入密码不一致!')) - // } else { - // callback() - // } - // } + var validatePass = (rule, value, callback) => { + const pwdRegex = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z]).{8,30}') + if (value === '') { + callback(new Error('请输入密码')) + } else if (!pwdRegex.test(value)) { + callback(new Error('您的密码复杂度太低(密码中必须包含字母、数字)')) + } else { + if (this.resetPwdForm.pwd2 !== '') { + this.$refs.resetPwdForm.validateField('pwd2') + } + callback() + } + } + var validatePass2 = (rule, value, callback) => { + if (value === '') { + callback(new Error('请再次输入密码')) + } else if (value !== this.resetPwdForm.pwd) { + callback(new Error('两次输入密码不一致!')) + } else { + callback() + } + } return { - // dialogFormVisible: false, - // resetPwdForm: { - // id: null, - // pwd: null, - // pwd2: null - // }, - // passwordRules: { - // pwd: [{ required: true, message: '必填项' }, { validator: validatePass, trigger: 'blur' }], - // pwd2: [{ required: true, message: '必填项' }, { validator: validatePass2, trigger: 'blur' }] - // } + dialogFormVisible: false, + resetPwdForm: { + id: null, + pwd: null, + pwd2: null + }, + passwordRules: { + pwd: [ + { required: true, message: '必填项' }, + { validator: validatePass, trigger: 'blur' } + ], + pwd2: [ + { required: true, message: '必填项' }, + { validator: validatePass2, trigger: 'blur' } + ] + } } }, methods: { @@ -109,40 +132,40 @@ export default { delRequest (row) { return api.DelObj(row.id) }, - resetPassword (scope) { - api.ResetPwd(scope.row).then((res) => { + defaultPassword (scope) { + api.ResetPwd2Default(scope.row).then((res) => { this.$message.success('密码重置成功') }) + }, + // 重置密码弹框 + resetPassword ({ row }) { + this.dialogFormVisible = true + this.resetPwdForm.id = row.id + }, + // 重置密码确认 + resetPwdSubmit () { + const that = this + that.$refs.resetPwdForm.validate((valid) => { + if (valid) { + const params = { + id: that.resetPwdForm.id, + newPassword: that.$md5(that.resetPwdForm.pwd), + newPassword2: that.$md5(that.resetPwdForm.pwd2) + } + api.ResetPwd(params).then((res) => { + that.dialogFormVisible = false + that.resetPwdForm = { + id: null, + pwd: null, + pwd2: null + } + that.$message.success('修改成功') + }) + } else { + that.$message.error('表单校验失败,请检查') + } + }) } - // // 重置密码弹框 - // resetPwd ({ row }) { - // this.dialogFormVisible = true - // this.resetPwdForm.id = row.id - // }, - // // 重置密码确认 - // resetPwdSubmit () { - // const that = this - // that.$refs.resetPwdForm.validate((valid) => { - // if (valid) { - // const params = { - // id: that.resetPwdForm.id, - // newPassword: that.$md5(that.resetPwdForm.pwd), - // newPassword2: that.$md5(that.resetPwdForm.pwd2) - // } - // api.ResetPwd(params).then(res => { - // that.dialogFormVisible = false - // that.resetPwdForm = { - // id: null, - // pwd: null, - // pwd2: null - // } - // that.$message.success('修改成功') - // }) - // } else { - // that.$message.error('表单校验失败,请检查') - // } - // }) - // } } }