自 simplepro 3.5+ 版本开始支持动态配置
文档地址:https://simpleui.72wo.com/docs/simplepro/layer.html#%E5%8A%A8%E6%80%81%E9%85%8D%E7%BD%AE
@admin.register(Layer)
class LayerAdmin(AjaxAdmin):
actions = ('async_layer_action')
# 这是点击按钮执行的代码
def async_layer_action(self, request, queryset):
"""
异步执行的方法,可以动态返回layer的配置,自simplepro 3.5版本开始
"""
return JsonResponse({'status': 'success', 'msg': '操作成功'})
# 按钮显示的名称
async_layer_action.short_description = '异步获取Layer配置'
# 按钮显示的图标
async_layer_action.icon = 'el-icon-view'
# 设置不选择数据也可以执行配置
async_layer_action.enable = True
# 这里的layer配置是动态的,可以根据需求返回不同的配置
# 这里的queryset 或根据搜索条件来过滤数据
def async_get_layer_config(self, request, queryset):
"""
这个方法只有一个request参数,没有其他的入参
"""
# 模拟处理业务耗时
time.sleep(2)
# 可以根据request的用户,来动态设置返回哪些字段,每次点击都会来获取配置显示
return {
# 弹出层中的输入框配置
# 这里指定对话框的标题
'title': '异步获取配置的输入框',
# 提示信息
'tips': '异步获取配置' + datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
# 确认按钮显示文本
'confirm_button': '确认提交',
# 取消按钮显示文本
'cancel_button': '取消',
# 弹出层对话框的宽度,默认50%
'width': '40%',
# 表单中 label的宽度,对应element-ui的 label-width,默认80px
'labelWidth': "80px",
'params': [{
# 这里的type 对应el-input的原生input属性,默认为input
'type': 'input',
# key 对应post参数中的key
'key': 'name',
# 显示的文本
'label': '名称',
# 为空校验,默认为False
'require': True,
'value': random.randint(0, 100)
}, {
'type': 'select',
'key': 'type',
'label': '类型',
'width': '200px',
# size对应elementui的size,取值为:medium / small / mini
'size': 'small',
# value字段可以指定默认值
'value': '0',
'options': [{
'key': '0',
'label': '收入'
}]
}]
}
# 这里的layer 配置下方法名就可以了,不需要写圆括号(),不然不生效
async_layer_action.layer = async_get_layer_config