parent
							
								
									e900deb2b4
								
							
						
					
					
						commit
						da5bf8c468
					
				|  | @ -127,7 +127,7 @@ class DataLevelPermissionsFilter(BaseFilterBackend): | |||
|             return queryset.filter(dept_belong_id=user_dept_id) | ||||
| 
 | ||||
|         # 3. 根据所有角色 获取所有权限范围 | ||||
|         role_list = request.user.role.all().values('admin', 'dataScope') | ||||
|         role_list = request.user.role.filter(status='1').values('admin', 'dataScope') | ||||
|         dataScope_list = [] | ||||
|         for ele in role_list: | ||||
|             # 3.1 判断用户是否为超级管理员角色/如果有1(所有数据) 则返回所有数据 | ||||
|  | @ -144,7 +144,7 @@ class DataLevelPermissionsFilter(BaseFilterBackend): | |||
|         dept_list = [] | ||||
|         for ele in dataScope_list: | ||||
|             if ele == '2': | ||||
|                 dept_list.extend(request.user.role.all().values_list('dept__id', flat=True)) | ||||
|                 dept_list.extend(request.user.role.filter(status='1').values_list('dept__id', flat=True)) | ||||
|             elif ele == '3': | ||||
|                 dept_list.append(user_dept_id) | ||||
|             elif ele == '4': | ||||
|  |  | |||
|  | @ -91,7 +91,7 @@ class DeptTreeSerializer(serializers.ModelSerializer): | |||
| 
 | ||||
|     class Meta: | ||||
|         model = Dept | ||||
|         fields = ('id', 'label', 'parentId') | ||||
|         fields = ('id', 'label', 'parentId','status') | ||||
| 
 | ||||
| 
 | ||||
| # ================================================= # | ||||
|  | @ -216,7 +216,7 @@ class UserProfileSerializer(CustomModelSerializer): | |||
|     unread_msg_count = serializers.SerializerMethodField(read_only=True) | ||||
| 
 | ||||
|     def get_admin(self, obj: UserProfile): | ||||
|         role_list = obj.role.all().values_list('admin', flat=True) | ||||
|         role_list = obj.role.filter(status='1').values_list('admin', flat=True) | ||||
|         if True in list(set(role_list)): | ||||
|             return True | ||||
|         return False | ||||
|  | @ -261,7 +261,7 @@ class UserProfileCreateUpdateSerializer(CustomModelSerializer): | |||
|                                      }) | ||||
| 
 | ||||
|     def get_admin(self, obj: UserProfile): | ||||
|         role_list = obj.role.all().values_list('admin', flat=True) | ||||
|         role_list = obj.role.filter(status='1').values_list('admin', flat=True) | ||||
|         if True in list(set(role_list)): | ||||
|             return True | ||||
|         return False | ||||
|  |  | |||
|  | @ -291,8 +291,8 @@ class UserProfileModelViewSet(CustomModelViewSet): | |||
|         """ | ||||
|         userId = request.query_params.get('userId') | ||||
|         data = { | ||||
|             'posts': PostSimpleSerializer(Post.objects.all().order_by('postSort'), many=True).data, | ||||
|             'roles': RoleSimpleSerializer(Role.objects.all().order_by('roleSort'), many=True).data | ||||
|             'posts': PostSimpleSerializer(Post.objects.filter(status='1').order_by('postSort'), many=True).data, | ||||
|             'roles': RoleSimpleSerializer(Role.objects.filter(status='1').order_by('roleSort'), many=True).data | ||||
|         } | ||||
|         if userId: | ||||
|             instance = self.queryset.get(id=userId) | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| from django.core.cache import cache | ||||
| from rest_framework import serializers | ||||
| 
 | ||||
| from .models import LoginInfor, OperationLog, CeleryLog | ||||
|  | @ -79,6 +80,10 @@ class DictDetailsCreateUpdateSerializer(CustomModelSerializer): | |||
|     字典详情 创建/更新时的列化器 | ||||
|     """ | ||||
| 
 | ||||
|     def save(self, **kwargs): | ||||
|         cache.delete('system_dict_details') | ||||
|         return super().save(**kwargs) | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = DictDetails | ||||
|         fields = '__all__' | ||||
|  | @ -114,6 +119,10 @@ class ConfigSettingsCreateUpdateSerializer(CustomModelSerializer): | |||
|     参数设置 创建/更新时的列化器 | ||||
|     """ | ||||
| 
 | ||||
|     def save(self, **kwargs): | ||||
|         cache.delete('system_configKey') | ||||
|         return super().save(**kwargs) | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = ConfigSettings | ||||
|         fields = '__all__' | ||||
|  |  | |||
|  | @ -20,10 +20,14 @@ urlpatterns = [ | |||
|     re_path('config/configKey/(?P<pk>.*)/', ConfigSettingsModelViewSet.as_view({'get': 'get_config_key'})), | ||||
|     # 参数管理导出 | ||||
|     re_path('config/export/', ConfigSettingsModelViewSet.as_view({'get': 'export'})), | ||||
|     # 清理参数缓存 | ||||
|     re_path('config/clearCache/', ConfigSettingsModelViewSet.as_view({'delete': 'clearCache', })), | ||||
|     # 导出字典管理数据 | ||||
|     re_path('dict/type/export/', DictDataModelViewSet.as_view({'get': 'export'})), | ||||
|     # 导出字典详情数据 | ||||
|     re_path('dict/data/export/', DictDetailsModelViewSet.as_view({'get': 'export'})), | ||||
|     # 清理字典缓存 | ||||
|     re_path('dict/type/clearCache/', DictDetailsModelViewSet.as_view({'delete': 'clearCache', })), | ||||
|     # 消息通知导出 | ||||
|     re_path('message/export/', MessagePushModelViewSet.as_view({'get': 'export', })), | ||||
|     # 用户个人消息列表 | ||||
|  | @ -44,5 +48,6 @@ urlpatterns = [ | |||
|     re_path('celery_log/export/', CeleryLogModelViewSet.as_view({'get': 'export', })), | ||||
|     # 清除废弃文件 | ||||
|     re_path('clearsavefile/', SaveFileModelViewSet.as_view({'post': 'clearsavefile', })), | ||||
| 
 | ||||
| ] | ||||
| urlpatterns += router.urls | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| import os | ||||
| 
 | ||||
| from django.conf import settings | ||||
| from django.core.cache import cache | ||||
| from django.db.models import Q | ||||
| from rest_framework.request import Request | ||||
| 
 | ||||
|  | @ -12,7 +13,7 @@ from ..system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFi | |||
| from ..system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush | ||||
| from ..system.models import MessagePushUser | ||||
| from ..system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \ | ||||
|     DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \ | ||||
|     DictDetailsCreateUpdateSerializer, ConfigSettingsSerializer, \ | ||||
|     ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \ | ||||
|     ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \ | ||||
|     MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer, LoginInforSerializer, \ | ||||
|  | @ -78,11 +79,30 @@ class DictDetailsModelViewSet(CustomModelViewSet): | |||
|         :param kwargs: | ||||
|         :return: | ||||
|         """ | ||||
|         queryset = self.queryset.filter(dict_data__dictType=kwargs.get('pk')).order_by('sort') | ||||
|         if hasattr(self, 'handle_logging'): | ||||
|             self.handle_logging(request, *args, **kwargs) | ||||
|         serializer = DictDetailsListSerializer(queryset, many=True) | ||||
|         return SuccessResponse(serializer.data) | ||||
|         dict_details_dic = cache.get('system_dict_details', {}) | ||||
|         if not dict_details_dic: | ||||
|             queryset = self.filter_queryset(self.get_queryset()) | ||||
|             queryset_dic = queryset.order_by('sort').values('dict_data__dictType', 'dictLabel', 'dictValue', | ||||
|                                                                        'is_default') | ||||
|             for ele in queryset_dic: | ||||
|                 dictType = ele.pop('dict_data__dictType') | ||||
|                 if dictType in dict_details_dic: | ||||
|                     dict_details_dic[dictType].append(ele) | ||||
|                 else: | ||||
|                     dict_details_dic[dictType] = [ele] | ||||
|             cache.set('system_dict_details', dict_details_dic, 84600) | ||||
|         return SuccessResponse(dict_details_dic.get(kwargs.get('pk'), [])) | ||||
| 
 | ||||
|     def clearCache(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|         清理键值缓存 | ||||
|         :param request: | ||||
|         :param args: | ||||
|         :param kwargs: | ||||
|         :return: | ||||
|         """ | ||||
|         cache.delete('system_dict_details') | ||||
|         return SuccessResponse(msg='清理成功!') | ||||
| 
 | ||||
|     def export(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|  | @ -122,10 +142,26 @@ class ConfigSettingsModelViewSet(CustomModelViewSet): | |||
|         :param kwargs: | ||||
|         :return: | ||||
|         """ | ||||
|         queryset = self.queryset.filter(configKey=kwargs.get('pk')).first() | ||||
|         # if hasattr(self, 'handle_logging'): | ||||
|         #     self.handle_logging(request, *args, **kwargs) | ||||
|         return SuccessResponse(msg=queryset.configValue if queryset else '') | ||||
|         config_key_dic = cache.get('system_configKey') | ||||
|         if not config_key_dic: | ||||
|             queryset = self.filter_queryset(self.get_queryset()) | ||||
|             config_key_dic = {ele.get('configKey'): ele.get('configValue') for ele in | ||||
|                               queryset.values('configValue', 'configKey')} | ||||
|             cache.set('system_configKey', config_key_dic, 84600) | ||||
|         return SuccessResponse(msg=config_key_dic.get(kwargs.get('pk'), '')) | ||||
| 
 | ||||
|     def clearCache(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|         清理键值缓存 | ||||
|         :param request: | ||||
|         :param args: | ||||
|         :param kwargs: | ||||
|         :return: | ||||
|         """ | ||||
|         cache.delete('system_configKey') | ||||
|         return SuccessResponse(msg='清理成功!') | ||||
| 
 | ||||
|     def export(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|  |  | |||
|  | @ -182,7 +182,7 @@ def get_login_location(request, *args, **kwargs): | |||
|             r = requests.get(apiurl) | ||||
|             content = r.content.decode('GBK') | ||||
|             location = str(content).replace('\r', '').replace('\n', '')[:64] | ||||
|             cache.set(request_ip, location, 8640) | ||||
|             cache.set(request_ip, location, 86400) | ||||
|             return location | ||||
|     except Exception as e: | ||||
|         pass | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ export function getDept(deptId) { | |||
| // 查询部门下拉树结构 | ||||
| export function treeselect() { | ||||
|   return request({ | ||||
|     url: '/admin/permission/dept/treeselect/', | ||||
|     url: '/admin/permission/dept/treeselect/?status=1', | ||||
|     method: 'get' | ||||
|   }) | ||||
| } | ||||
|  | @ -36,7 +36,7 @@ export function treeselect() { | |||
| // 根据角色ID查询部门树结构 | ||||
| export function roleDeptTreeselect(roleId) { | ||||
|   return request({ | ||||
|     url: '/admin/permission/dept/roleDeptTreeselect/' + roleId + '/', | ||||
|     url: '/admin/permission/dept/roleDeptTreeselect/' + roleId + '/?status=1', | ||||
|     method: 'get' | ||||
|   }) | ||||
| } | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ export function getMenu(menuId) { | |||
| // 查询菜单下拉树结构 | ||||
| export function treeselect() { | ||||
|   return request({ | ||||
|     url: '/admin/permission/menus/treeselect/', | ||||
|     url: '/admin/permission/menus/treeselect/?status=1', | ||||
|     method: 'get' | ||||
|   }) | ||||
| } | ||||
|  | @ -28,7 +28,7 @@ export function treeselect() { | |||
| // 根据角色ID查询菜单下拉树结构 | ||||
| export function roleMenuTreeselect(roleId) { | ||||
|   return request({ | ||||
|     url: '/admin/permission/menus/roleMenuTreeselect/' + roleId + '/', | ||||
|     url: '/admin/permission/menus/roleMenuTreeselect/' + roleId + '/?status=1', | ||||
|     method: 'get' | ||||
|   }) | ||||
| } | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ export function getConfig(configId) { | |||
| // 根据参数键名查询参数值 | ||||
| export function getConfigKey(configKey) { | ||||
|   return request({ | ||||
|     url: '/admin/system/config/configKey/' + configKey + '/', | ||||
|     url: '/admin/system/config/configKey/' + configKey + '/?status=1', | ||||
|     method: 'get' | ||||
|   }) | ||||
| } | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ export function getData(dictCode) { | |||
| // 根据字典类型查询字典数据信息 | ||||
| export function getDicts(dictType) { | ||||
|   return request({ | ||||
|     url: '/admin/system/dict/get/type/' + dictType + '/', | ||||
|     url: '/admin/system/dict/get/type/' + dictType + '/?status=1', | ||||
|     method: 'get' | ||||
|   }) | ||||
| } | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ import { | |||
|   parseTime, | ||||
|   resetForm, | ||||
|   selectDictLabel, | ||||
|   selectDictDefault, | ||||
|   selectDictLabels | ||||
| } from "@/utils/ruoyi"; | ||||
| import Pagination from "@/components/Pagination"; | ||||
|  | @ -40,6 +41,7 @@ Vue.prototype.parseTime = parseTime | |||
| Vue.prototype.resetForm = resetForm | ||||
| Vue.prototype.addDateRange = addDateRange | ||||
| Vue.prototype.selectDictLabel = selectDictLabel | ||||
| Vue.prototype.selectDictDefault = selectDictDefault | ||||
| Vue.prototype.selectDictLabels = selectDictLabels | ||||
| Vue.prototype.getCrontabData = getCrontabData | ||||
| Vue.prototype.getIntervalData = getIntervalData | ||||
|  |  | |||
|  | @ -73,6 +73,20 @@ export function selectDictLabel(datas, value) { | |||
| 	}) | ||||
| 	return actions.join(''); | ||||
| } | ||||
| // 获取字典默认值 | ||||
| export function selectDictDefault(datas) { | ||||
| 	var actions = []; | ||||
| 	Object.keys(datas).some((key) => { | ||||
| 		if (datas[key].is_default === true) { | ||||
| 			actions.push(datas[key].dictValue); | ||||
| 			return true; | ||||
| 		} | ||||
| 	}) | ||||
|   if (!actions[0] && datas[0]) { | ||||
|     actions.push(datas[0].dictValue) | ||||
|   } | ||||
| 	return actions.join(''); | ||||
| } | ||||
| 
 | ||||
| // 回显数据字典(字符串数组) | ||||
| export function selectDictLabels(datas, value, separator) { | ||||
|  |  | |||
|  | @ -253,7 +253,7 @@ export default { | |||
|         leader: undefined, | ||||
|         phone: undefined, | ||||
|         email: undefined, | ||||
|         status: "0" | ||||
|         status:  this.selectDictDefault(this.statusOptions), | ||||
|       }; | ||||
|       this.resetForm("form"); | ||||
|     }, | ||||
|  |  | |||
|  | @ -401,16 +401,16 @@ | |||
|           name: undefined, | ||||
|           icon: undefined, | ||||
|           web_path: undefined, | ||||
|           menuType: "0", | ||||
|           menuType: this.selectDictDefault(this.menuTypeOptions), | ||||
|           orderNum: undefined, | ||||
|           component_path: undefined, | ||||
|           interface_path: undefined, | ||||
|           perms: undefined, | ||||
|           interface_method: 'GET', | ||||
|           interface_method: this.selectDictDefault(this.interfaceMethodOptions), | ||||
|           isFrame: "1", | ||||
|           isCache: "1", | ||||
|           visible: "1", | ||||
|           status: "1" | ||||
|           visible: this.selectDictDefault(this.visibleOptions), | ||||
|           status: this.selectDictDefault(this.statusOptions) | ||||
|         }; | ||||
|         this.resetForm("form"); | ||||
|       }, | ||||
|  |  | |||
|  | @ -242,7 +242,7 @@ export default { | |||
|         postCode: undefined, | ||||
|         postName: undefined, | ||||
|         postSort: 0, | ||||
|         status: "0", | ||||
|         status: this.selectDictDefault(this.statusOptions), | ||||
|         remark: undefined | ||||
|       }; | ||||
|       this.resetForm("form"); | ||||
|  |  | |||
|  | @ -440,7 +440,7 @@ export default { | |||
|         roleName: undefined, | ||||
|         roleKey: undefined, | ||||
|         roleSort: 0, | ||||
|         status: "0", | ||||
|         status: this.selectDictDefault(this.statusOptions), | ||||
|         menu: [], | ||||
|         dept: [], | ||||
|         menuCheckStrictly: true, | ||||
|  |  | |||
|  | @ -543,7 +543,7 @@ | |||
|         password: undefined, | ||||
|         mobile: undefined, | ||||
|         email: undefined, | ||||
|         gender: undefined, | ||||
|         gender: this.selectDictDefault(this.sexOptions), | ||||
|         is_active: false, | ||||
|         remark: undefined, | ||||
|         postIds: [], | ||||
|  |  | |||
|  | @ -275,8 +275,8 @@ export default { | |||
|         configName: undefined, | ||||
|         configKey: undefined, | ||||
|         configValue: undefined, | ||||
|         configType: "Y", | ||||
|         status: '0', | ||||
|         configType: this.selectDictDefault(this.typeOptions), | ||||
|         status: this.selectDictDefault(this.statusOptions), | ||||
|         remark: undefined | ||||
|       }; | ||||
|       this.resetForm("form"); | ||||
|  |  | |||
|  | @ -79,6 +79,16 @@ | |||
|           v-hasPermi="['system:dict:type:export:get']" | ||||
|         >导出</el-button> | ||||
|       </el-col> | ||||
|       <el-col :span="1.5"> | ||||
|         <el-button | ||||
|           type="danger" | ||||
|           plain | ||||
|           icon="el-icon-refresh" | ||||
|           size="mini" | ||||
|           @click="handleClearCache" | ||||
|           v-hasPermi="['system:dict:type:clearcache:delete']" | ||||
|         >清理缓存</el-button> | ||||
|       </el-col> | ||||
|       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> | ||||
|     </el-row> | ||||
| 
 | ||||
|  | @ -181,7 +191,7 @@ | |||
| 
 | ||||
| <script> | ||||
|   import {addData, delData, exportData, getData, listData, updateData} from "@/api/vadmin/system/dict/data"; | ||||
|   import {getType, listType} from "@/api/vadmin/system/dict/type"; | ||||
|   import {getType, listType, clearCache} from "@/api/vadmin/system/dict/type"; | ||||
| 
 | ||||
|   export default { | ||||
|   name: "Data", | ||||
|  | @ -237,7 +247,6 @@ | |||
|   }, | ||||
|   created() { | ||||
|     const dictId = this.$route.params && this.$route.params.dictId; | ||||
|     console.log(11111,this.$route.params) | ||||
|     this.getType(dictId); | ||||
|     this.getTypeList(); | ||||
|     this.getDicts("sys_normal_disable").then(response => { | ||||
|  | @ -263,7 +272,6 @@ | |||
|     getList() { | ||||
|       this.loading = true; | ||||
|       listData(this.queryParams).then(response => { | ||||
|         console.log(1212,response.data.count) | ||||
|         this.dataList = response.data.results; | ||||
|         this.total = response.data.count; | ||||
|         this.loading = false; | ||||
|  | @ -285,7 +293,7 @@ | |||
|         dictLabel: undefined, | ||||
|         dictValue: undefined, | ||||
|         sort: 0, | ||||
|         status: "0", | ||||
|         status: this.selectDictDefault(this.typeOptions), | ||||
|         remark: undefined | ||||
|       }; | ||||
|       this.resetForm("form"); | ||||
|  | @ -379,6 +387,12 @@ | |||
|         }).then(response => { | ||||
|           this.download(response.data.file_url,response.data.name); | ||||
|         }) | ||||
|     }, | ||||
|     /** 清理缓存按钮操作 */ | ||||
|     handleClearCache() { | ||||
|       clearCache().then(response => { | ||||
|         this.msgSuccess("清理成功"); | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
| }; | ||||
|  |  | |||
|  | @ -274,7 +274,7 @@ export default { | |||
|         id: undefined, | ||||
|         dictName: undefined, | ||||
|         dictType: undefined, | ||||
|         status: "0", | ||||
|         status: this.selectDictDefault(this.statusOptions), | ||||
|         remark: undefined | ||||
|       }; | ||||
|       this.resetForm("form"); | ||||
|  |  | |||
|  | @ -232,9 +232,7 @@ | |||
|         open: false, | ||||
|         // 公告类型字典 | ||||
|         MessagePushTypeOptions: [], | ||||
|         // 状态类型字典 | ||||
|         StatusOptions: [], | ||||
|         // 公告类型字典 | ||||
|         // 公告状态字典 | ||||
|         MessagePushStatusOptions: [], | ||||
|         // 查询公告 | ||||
|         queryParams: { | ||||
|  | @ -307,8 +305,8 @@ | |||
|           content: undefined, | ||||
|           to_path: undefined, | ||||
|           is_reviewed: true, | ||||
|           message_type: "1", | ||||
|           status: '1', | ||||
|           message_type: this.selectDictDefault(this.MessagePushStatusOptions), | ||||
|           status: this.selectDictDefault(this.MessagePushStatusOptions), | ||||
|         }; | ||||
|         this.resetForm("form"); | ||||
|       }, | ||||
|  |  | |||
|  | @ -266,9 +266,9 @@ export default { | |||
|       this.form = { | ||||
|         noticeId: undefined, | ||||
|         noticeTitle: undefined, | ||||
|         noticeType: undefined, | ||||
|         noticeType: this.selectDictDefault(this.typeOptions), | ||||
|         noticeContent: undefined, | ||||
|         status: "0" | ||||
|         status: this.selectDictDefault(this.statusOptions) | ||||
|       }; | ||||
|       this.resetForm("form"); | ||||
|     }, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 李强
						李强