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