fix(dictionary): dictionary data init & user password reset

pull/56/head
Angelo 2022-05-11 13:45:39 +08:00
parent f88b90388c
commit 0e7678d3d1
9 changed files with 231 additions and 181 deletions

View File

@ -148,10 +148,21 @@ button_data = [
"dept_belong_id": 1, "dept_belong_id": 1,
"update_datetime": datetime.datetime.now(), "update_datetime": datetime.datetime.now(),
"create_datetime": datetime.datetime.now(), "create_datetime": datetime.datetime.now(),
"name": "密码", "name": "密码",
"value": "ResetPassword", "value": "ResetPassword",
"creator_id": 1, "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 = [ menu_data = [
@ -1250,7 +1261,7 @@ menu_button_data = [
"dept_belong_id": 1, "dept_belong_id": 1,
"update_datetime": datetime.datetime.now(), "update_datetime": datetime.datetime.now(),
"create_datetime": datetime.datetime.now(), "create_datetime": datetime.datetime.now(),
"name": "密码", "name": "密码",
"value": "ResetPassword", "value": "ResetPassword",
"api": "/api/system/user/reset_password/{id}/", "api": "/api/system/user/reset_password/{id}/",
"method": 2, "method": 2,
@ -1261,6 +1272,20 @@ menu_button_data = [
"id": 54, "id": 54,
"description": None, "description": None,
"modifier": "1", "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", "dept_belong_id": "1",
"update_datetime": datetime.datetime.now(), "update_datetime": datetime.datetime.now(),
"create_datetime": datetime.datetime.now(), "create_datetime": datetime.datetime.now(),
@ -1272,7 +1297,7 @@ menu_button_data = [
"menu_id": 20, "menu_id": 20,
}, },
{ {
"id": 55, "id": 56,
"description": None, "description": None,
"modifier": "1", "modifier": "1",
"dept_belong_id": "1", "dept_belong_id": "1",
@ -1286,7 +1311,7 @@ menu_button_data = [
"menu_id": 20, "menu_id": 20,
}, },
{ {
"id": 56, "id": 57,
"description": None, "description": None,
"modifier": "1", "modifier": "1",
"dept_belong_id": 1, "dept_belong_id": 1,
@ -1388,7 +1413,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": None, "parent_id": None,
"is_value": 0, "is_value": 0,
"type": 0 "type": 0,
}, },
{ {
"id": 2, "id": 2,
@ -1405,7 +1430,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 1, "parent_id": 1,
"is_value": 1, "is_value": 1,
"type": 6 "type": 6,
}, },
{ {
"id": 5, "id": 5,
@ -1422,7 +1447,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": None, "parent_id": None,
"is_value": 0, "is_value": 0,
"type": 0 "type": 0,
}, },
{ {
"id": 6, "id": 6,
@ -1439,7 +1464,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 1, "parent_id": 1,
"is_value": 1, "is_value": 1,
"type": 6 "type": 6,
}, },
{ {
"id": 7, "id": 7,
@ -1456,7 +1481,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": None, "parent_id": None,
"is_value": 0, "is_value": 0,
"type": 0 "type": 0,
}, },
{ {
"id": 8, "id": 8,
@ -1473,7 +1498,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 7, "parent_id": 7,
"is_value": 1, "is_value": 1,
"type": 1 "type": 1,
}, },
{ {
"id": 9, "id": 9,
@ -1490,7 +1515,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 7, "parent_id": 7,
"is_value": 1, "is_value": 1,
"type": 1 "type": 1,
}, },
{ {
"id": 10, "id": 10,
@ -1507,7 +1532,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": None, "parent_id": None,
"is_value": 0, "is_value": 0,
"type": 0 "type": 0,
}, },
{ {
"id": 11, "id": 11,
@ -1524,7 +1549,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 5, "parent_id": 5,
"is_value": 1, "is_value": 1,
"type": 6 "type": 6,
}, },
{ {
"id": 12, "id": 12,
@ -1541,7 +1566,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 5, "parent_id": 5,
"is_value": 1, "is_value": 1,
"type": 6 "type": 6,
}, },
{ {
"id": 13, "id": 13,
@ -1558,7 +1583,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 10, "parent_id": 10,
"is_value": 1, "is_value": 1,
"type": 1 "type": 1,
}, },
{ {
"id": 14, "id": 14,
@ -1575,7 +1600,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 10, "parent_id": 10,
"is_value": 1, "is_value": 1,
"type": 1 "type": 1,
}, },
{ {
"id": 15, "id": 15,
@ -1592,7 +1617,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": None, "parent_id": None,
"is_value": 0, "is_value": 0,
"type": 0 "type": 0,
}, },
{ {
"id": 16, "id": 16,
@ -1609,7 +1634,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 15, "parent_id": 15,
"is_value": 1, "is_value": 1,
"type": 1 "type": 1,
}, },
{ {
"id": 17, "id": 17,
@ -1626,7 +1651,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 15, "parent_id": 15,
"is_value": 1, "is_value": 1,
"type": 1 "type": 1,
}, },
{ {
"id": 18, "id": 18,
@ -1643,7 +1668,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": None, "parent_id": None,
"is_value": 0, "is_value": 0,
"type": 0 "type": 0,
}, },
{ {
"id": 19, "id": 19,
@ -1660,7 +1685,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 18, "parent_id": 18,
"is_value": 1, "is_value": 1,
"type": 1 "type": 1,
}, },
{ {
"id": 20, "id": 20,
@ -1677,7 +1702,7 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 18, "parent_id": 18,
"is_value": 1, "is_value": 1,
"type": 1 "type": 1,
}, },
{ {
"id": 21, "id": 21,
@ -1694,6 +1719,6 @@ dictionary_data = [
"creator_id": 1, "creator_id": 1,
"parent_id": 18, "parent_id": 18,
"is_value": 1, "is_value": 1,
"type": 1 "type": 1,
} },
] ]

View File

@ -15,6 +15,7 @@ from dvadmin.system.models import (
MenuButton, MenuButton,
Role, Role,
Users, Users,
Dictionary,
) )
from .init_data import ( from .init_data import (
@ -78,7 +79,7 @@ class Initialize(CoreInitialize):
初始化字典表 初始化字典表
""" """
data = dictionary_data data = dictionary_data
self.save(Users, data, "字典表", no_reset=False) self.save(Dictionary, data, "字典表", no_reset=False)
def run(self): def run(self):
self.init_dept() self.init_dept()
@ -87,6 +88,7 @@ class Initialize(CoreInitialize):
self.init_menu_button() self.init_menu_button()
self.init_role() self.init_role()
self.init_users() self.init_users()
self.init_dictionary()
# 项目init 初始化,默认会执行 main 方法进行初始化 # 项目init 初始化,默认会执行 main 方法进行初始化

View File

@ -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 django.urls import path
from rest_framework import routers from rest_framework import routers
@ -42,6 +34,7 @@ urlpatterns = [
path('menu/web_router/', MenuViewSet.as_view({'get': 'web_router'})), 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/user_info/', UserViewSet.as_view({'get': 'user_info', 'put': 'update_user_info'})),
path('user/change_password/<int:pk>/', UserViewSet.as_view({'put': 'change_password'})), path('user/change_password/<int:pk>/', UserViewSet.as_view({'put': 'change_password'})),
path('user/reset_to_default_password/<int:pk>/', UserViewSet.as_view({'put': 'reset_to_default_password'})),
path('user/reset_password/<int:pk>/', UserViewSet.as_view({'put': 'reset_password'})), path('user/reset_password/<int:pk>/', UserViewSet.as_view({'put': 'reset_password'})),
path('user/export/', UserViewSet.as_view({'post': 'export_data', })), path('user/export/', UserViewSet.as_view({'post': 'export_data', })),
path('user/import/', UserViewSet.as_view({'get': 'import_data', 'post': 'import_data'})), path('user/import/', UserViewSet.as_view({'get': 'import_data', 'post': 'import_data'})),

View File

@ -241,16 +241,16 @@ class UserViewSet(CustomModelViewSet):
else: else:
return ErrorResponse(msg="未获取到用户") return ErrorResponse(msg="未获取到用户")
# @action(methods=["PUT"], detail=True, permission_classes=[IsAuthenticated]) @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() instance = Users.objects.filter(id=kwargs.get("pk")).first()
# if instance: if instance:
# instance.set_password(settings.DEFAULT_PASSWORD) instance.set_password(settings.DEFAULT_PASSWORD)
# instance.save() instance.save()
# return DetailResponse(data=None, msg="密码重置成功") return DetailResponse(data=None, msg="密码重置成功")
# else: else:
# return ErrorResponse(msg="未获取到用户") return ErrorResponse(msg="未获取到用户")
@action(methods=["PUT"], detail=True) @action(methods=["PUT"], detail=True)
def reset_password(self, request, pk): def reset_password(self, request, pk):

View File

@ -1,7 +1,5 @@
<template> <template>
<div class="page-login"> <div class="page-login"></div>
</div>
</template> </template>
<script> <script>
@ -14,8 +12,10 @@ export default {
computed: { computed: {
...mapState('d2admin', { ...mapState('d2admin', {
siteName: (state) => state.settings.siteName, // siteName: (state) => state.settings.siteName, //
siteLogo: (state) => state.settings.siteLogo || require('./image/dvadmin.png'), // logo siteLogo: (state) =>
loginBackground: (state) => state.settings.loginBackground || require('./image/bg.jpg'), // state.settings.siteLogo || require('./image/dvadmin.png'), // logo
loginBackground: (state) =>
state.settings.loginBackground || require('./image/bg.jpg'), //
copyright: (state) => state.settings.copyright, // copyright: (state) => state.settings.copyright, //
keepRecord: (state) => state.settings.keepRecord, // keepRecord: (state) => state.settings.keepRecord, //
helpUrl: (state) => state.settings.helpUrl, // helpUrl: (state) => state.settings.helpUrl, //
@ -33,8 +33,8 @@ export default {
backgroundImage: 'url(' + this.loginBackground + ')', backgroundImage: 'url(' + this.loginBackground + ')',
// //
formLogin: { formLogin: {
username: '', username: 'superadmin',
password: '', password: 'admin123456',
captcha: '' captcha: ''
}, },
// //
@ -65,15 +65,13 @@ export default {
image_base: null image_base: null
} }
}, },
mounted () { mounted () {},
}, beforeDestroy () {},
beforeDestroy () {
},
methods: { methods: {
...mapActions('d2admin/account', ['login']), ...mapActions('d2admin/account', ['login']),
/** /**
* 获取验证码 * 获取验证码
*/ */
getCaptcha () { getCaptcha () {
api.getCaptcha().then((ret) => { api.getCaptcha().then((ret) => {
this.formLogin.captcha = null this.formLogin.captcha = null
@ -82,8 +80,8 @@ export default {
}) })
}, },
/** /**
* @description 提交表单 * @description 提交表单
*/ */
// //
submit () { submit () {
const that = this const that = this
@ -120,107 +118,107 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
// ---- // ----
.page-login { .page-login {
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
height: 100%; height: 100%;
width: 100%; width: 100%;
background-image: url(./image/bg.jpg); background-image: url(./image/bg.jpg);
background-position: center 0; background-position: center 0;
background-repeat: no-repeat; background-repeat: no-repeat;
background-attachment: fixed; background-attachment: fixed;
background-size: cover; background-size: cover;
-webkit-background-size: cover; /* 兼容Webkit内核浏览器如Chrome和Safari */ -webkit-background-size: cover; /* 兼容Webkit内核浏览器如Chrome和Safari */
-o-background-size: cover; /* 兼容Opera */ -o-background-size: cover; /* 兼容Opera */
zoom: 1; zoom: 1;
} }
::v-deep .el-card__body { ::v-deep .el-card__body {
height: 100%; height: 100%;
padding: 0; padding: 0;
} }
.card { .card {
height: 100%; height: 100%;
width: 100%; width: 100%;
border-radius: 30px; border-radius: 30px;
padding: 0; padding: 0;
margin-top: 12%; margin-top: 12%;
} }
.right-card { .right-card {
float: right; float: right;
text-align: center;
width: 50%;
height: 100%;
}
.right-card h1 {
color: #098dee;
margin-bottom: 40px;
margin-top: 40px;
}
.button-login {
width: 100%;
margin-top: 30px;
}
::v-deep .el-input-group__append {
padding: 0;
}
// footer
.page-login--content-footer {
margin-top: 10%;
padding: 1em 0;
.page-login--content-footer-locales {
padding: 0px;
margin: 0px;
margin-bottom: 15px;
font-size: 12px;
line-height: 12px;
text-align: center; text-align: center;
width: 50%; color: $color-text-normal;
height: 100%;
}
.right-card h1 { a {
color: #098dee;
margin-bottom: 40px;
margin-top: 40px;
}
.button-login {
width: 100%;
margin-top: 30px;
}
::v-deep .el-input-group__append {
padding: 0;
}
// footer
.page-login--content-footer {
margin-top: 10%;
padding: 1em 0;
.page-login--content-footer-locales {
padding: 0px;
margin: 0px;
margin-bottom: 15px;
font-size: 12px;
line-height: 12px;
text-align: center;
color: $color-text-normal; color: $color-text-normal;
margin: 0 0.5em;
a { &:hover {
color: $color-text-normal; color: $color-text-main;
margin: 0 0.5em;
&:hover {
color: $color-text-main;
}
}
}
.page-login--content-footer-copyright {
padding: 0px;
margin: 0px;
margin-bottom: 10px;
font-size: 12px;
line-height: 12px;
text-align: center;
color: $color-text-normal;
a {
color: $color-text-normal;
}
}
.page-login--content-footer-options {
padding: 0px;
margin: 0px;
font-size: 12px;
line-height: 12px;
text-align: center;
a {
color: $color-text-normal;
margin: 0 1em;
} }
} }
} }
.page-login--content-footer-copyright {
padding: 0px;
margin: 0px;
margin-bottom: 10px;
font-size: 12px;
line-height: 12px;
text-align: center;
color: $color-text-normal;
a {
color: $color-text-normal;
}
}
.page-login--content-footer-options {
padding: 0px;
margin: 0px;
font-size: 12px;
line-height: 12px;
text-align: center;
a {
color: $color-text-normal;
margin: 0 1em;
}
}
}
</style> </style>

View File

@ -1,18 +1,28 @@
<template> <template>
<div class="w3l-signinform" :style="{background: 'url('+ (loginBackground || require('./image/bg.jpg')) + ') no-repeat center'}"> <div
class="w3l-signinform"
:style="{
background:
'url(' +
(loginBackground || require('./image/bg.jpg')) +
') no-repeat center'
}"
>
<!-- container --> <!-- container -->
<div class="wrapper"> <div class="wrapper">
<!-- main content --> <!-- main content -->
<div class="w3l-form-info"> <div class="w3l-form-info">
<!-- logo --> <!-- logo -->
<img class="page-login--logo" :src="siteLogo" width="300"/> <img class="page-login--logo" :src="siteLogo" width="300" />
<div class="w3_info"> <div class="w3_info">
<h2 style="text-align: center;">{{siteName || processTitle}}</h2> <h2 style="text-align: center">{{ siteName || processTitle }}</h2>
<el-card shadow="always" class="card"> <el-card shadow="always" class="card">
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane label="账号密码登录" name="first" stretch> <el-tab-pane label="账号密码登录" name="first" stretch>
<span slot="label"><span style="margin: 30px;">账号密码登录</span></span> <span slot="label"
<br> ><span style="margin: 30px">账号密码登录</span></span
>
<br />
<el-form <el-form
ref="loginForm" ref="loginForm"
label-position="top" label-position="top"
@ -58,17 +68,22 @@
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<button class="btn btn-primary btn-block" @click="submit"></button> <button class="btn btn-primary btn-block" @click="submit">
登录
</button>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-card> </el-card>
<!-- footer --> <!-- footer -->
<div class="footer"> <div class="footer">
<p>Copyright &copy; {{copyright}}</p> <p>Copyright &copy; {{ copyright }}</p>
<p> <p>
<a href="https://beian.miit.gov.cn" target="_blank">{{keepRecord}}</a> | <a href="https://beian.miit.gov.cn" target="_blank">{{
<a :href="helpUrl || '#'" target="_blank">帮助</a> | keepRecord
}}</a>
| <a :href="helpUrl || '#'" target="_blank">帮助</a> |
<a :href="privacyUrl || '#'" target="_blank">隐私</a> | <a :href="privacyUrl || '#'" target="_blank">隐私</a> |
<a :href="clauseUrl || '#'" target="_blank">条款</a> <a :href="clauseUrl || '#'" target="_blank">条款</a>
</p> </p>
@ -92,23 +107,20 @@ export default {
activeName: 'first' activeName: 'first'
} }
}, },
created () { created () {},
}, mounted () {},
mounted () {
},
methods: {} methods: {}
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import './css/style.css'; @import './css/style.css';
.copyrights { .copyrights {
text-indent: -9999px; text-indent: -9999px;
height: 0; height: 0;
line-height: 0; line-height: 0;
font-size: 0; font-size: 0;
overflow: hidden; overflow: hidden;
} }
</style> </style>

View File

@ -55,3 +55,11 @@ export function ResetPwd (obj) {
data: obj data: obj
}) })
} }
export function ResetPwd2Default (obj) {
return request({
url: urlPrefix + 'reset_to_default_password/' + obj.id + '/',
method: 'put',
data: obj
})
}

View File

@ -12,7 +12,7 @@ export const crudOptions = (vm) => {
rowKey: true // 必须设置true or false rowKey: true // 必须设置true or false
}, },
rowHandle: { rowHandle: {
width: 230, width: 270,
fixed: 'right', fixed: 'right',
view: { view: {
thin: true, thin: true,
@ -37,16 +37,27 @@ export const crudOptions = (vm) => {
}, },
custom: [ custom: [
{ {
thin: true,
text: '',
size: 'small',
type: 'warning',
icon: 'el-icon-refresh-left',
show () { show () {
return vm.hasPermissions('ResetPassword') return vm.hasPermissions('ResetPassword')
}, },
emit: 'resetPassword'
},
{
show () {
return vm.hasPermissions('DefaultPassword')
},
disabled () { disabled () {
return !vm.hasPermissions('ResetPassword') return !vm.hasPermissions('DefaultPassword')
}, },
text: '重置密码', text: '重置密码',
type: 'warning', type: 'warning',
size: 'small', size: 'small',
emit: 'resetPassword' emit: 'defaultPassword'
} }
] ]
}, },

View File

@ -5,6 +5,7 @@
v-bind="_crudProps" v-bind="_crudProps"
v-on="_crudListeners" v-on="_crudListeners"
@resetPassword="resetPassword" @resetPassword="resetPassword"
@defaultPassword="defaultPassword"
> >
<div slot="header"> <div slot="header">
<crud-search <crud-search
@ -131,11 +132,11 @@ export default {
delRequest (row) { delRequest (row) {
return api.DelObj(row.id) return api.DelObj(row.id)
}, },
// resetPassword (scope) { defaultPassword (scope) {
// api.ResetPwd(scope.row).then((res) => { api.ResetPwd2Default(scope.row).then((res) => {
// this.$message.success('') this.$message.success('密码重置成功')
// }) })
// } },
// //
resetPassword ({ row }) { resetPassword ({ row }) {
this.dialogFormVisible = true this.dialogFormVisible = true