from dash import dcc, html import feffery_antd_components as fac import callbacks.monitor_c.online_c from api.online import get_online_list_api def render(*args, **kwargs): button_perms = kwargs.get('button_perms') online_params = dict(page_num=1, page_size=10) table_info = get_online_list_api(online_params) table_data = [] page_num = 1 page_size = 10 total = 0 if table_info['code'] == 200: table_data = table_info['data']['rows'] page_num = table_info['data']['page_num'] page_size = table_info['data']['page_size'] total = table_info['data']['total'] for item in table_data: item['key'] = str(item['session_id']) item['operation'] = [ { 'content': '强退', 'type': 'link', 'icon': 'antd-delete' } if 'monitor:online:forceLogout' in button_perms else {}, ] return [ dcc.Store(id='online-button-perms-container', data=button_perms), # 在线用户模块操作类型存储容器 dcc.Store(id='online-operations-store'), dcc.Store(id='online-operations-store-bk'), # 在线用户模块删除操作行key存储容器 dcc.Store(id='online-delete-ids-store'), fac.AntdRow( [ fac.AntdCol( [ fac.AntdRow( [ fac.AntdCol( html.Div( [ fac.AntdForm( [ fac.AntdSpace( [ fac.AntdFormItem( fac.AntdInput( id='online-ipaddr-input', placeholder='请输入登录地址', autoComplete='off', allowClear=True, style={ 'width': 210 } ), label='登录地址' ), fac.AntdFormItem( fac.AntdInput( id='online-user_name-input', placeholder='请输入用户名称', autoComplete='off', allowClear=True, style={ 'width': 210 } ), label='用户名称' ), fac.AntdFormItem( fac.AntdButton( '搜索', id='online-search', type='primary', icon=fac.AntdIcon( icon='antd-search' ) ) ), fac.AntdFormItem( fac.AntdButton( '重置', id='online-reset', icon=fac.AntdIcon( icon='antd-sync' ) ) ) ], style={ 'paddingBottom': '10px' } ), ], layout='inline', ) ], id='online-search-form-container', hidden=False ), ) ] ), fac.AntdRow( [ fac.AntdCol( fac.AntdSpace( [ fac.AntdButton( [ fac.AntdIcon( icon='antd-delete' ), '批量强退', ], id={ 'type': 'online-operation-button', 'index': 'delete' }, disabled=True, style={ 'color': '#ff9292', 'background': '#ffeded', 'border-color': '#ffdbdb' } ) if 'monitor:online:batchLogout' in button_perms else [], ], style={ 'paddingBottom': '10px' } ), span=16 ), fac.AntdCol( fac.AntdSpace( [ html.Div( fac.AntdTooltip( fac.AntdButton( [ fac.AntdIcon( icon='antd-search' ), ], id='online-hidden', shape='circle' ), id='online-hidden-tooltip', title='隐藏搜索' ) ), html.Div( fac.AntdTooltip( fac.AntdButton( [ fac.AntdIcon( icon='antd-sync' ), ], id='online-refresh', shape='circle' ), title='刷新' ) ), ], style={ 'float': 'right', 'paddingBottom': '10px' } ), span=8, style={ 'paddingRight': '10px' } ) ], gutter=5 ), fac.AntdRow( [ fac.AntdCol( fac.AntdSpin( fac.AntdTable( id='online-list-table', data=table_data, columns=[ { 'dataIndex': 'session_id', 'title': '会话编号', 'renderOptions': { 'renderType': 'ellipsis' }, }, { 'dataIndex': 'user_name', 'title': '登录名称', 'renderOptions': { 'renderType': 'ellipsis' }, }, { 'dataIndex': 'dept_name', 'title': '部门名称', 'renderOptions': { 'renderType': 'ellipsis' }, }, { 'dataIndex': 'ipaddr', 'title': '主机', 'renderOptions': { 'renderType': 'ellipsis' }, }, { 'dataIndex': 'login_location', 'title': '登录地点', 'renderOptions': { 'renderType': 'ellipsis' }, }, { 'dataIndex': 'browser', 'title': '浏览器', 'renderOptions': { 'renderType': 'ellipsis' }, }, { 'dataIndex': 'os', 'title': '操作系统', 'renderOptions': { 'renderType': 'ellipsis' }, }, { 'dataIndex': 'login_time', 'title': '登录时间', 'renderOptions': { 'renderType': 'ellipsis' }, }, { 'title': '操作', 'dataIndex': 'operation', 'renderOptions': { 'renderType': 'button' }, } ], rowSelectionType='checkbox', rowSelectionWidth=50, bordered=True, pagination={ 'pageSize': page_size, 'current': page_num, 'showSizeChanger': True, 'pageSizeOptions': [10, 30, 50, 100], 'showQuickJumper': True, 'total': total }, mode='server-side', style={ 'width': '100%', 'padding-right': '10px' } ), text='数据加载中' ), ) ] ), ], span=24 ) ], gutter=5 ), # 强退会话二次确认modal fac.AntdModal( fac.AntdText('是否确认强退?', id='online-delete-text'), id='online-delete-confirm-modal', visible=False, title='提示', renderFooter=True, centered=True ), ]