You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
3.9 KiB
154 lines
3.9 KiB
import dash
|
|
from dash import dcc
|
|
import feffery_utils_components as fuc
|
|
from flask import session
|
|
from dash.dependencies import Input, Output, State
|
|
|
|
from server import app
|
|
from api.login import logout_api
|
|
|
|
|
|
# 页首右侧个人中心选项卡回调
|
|
app.clientside_callback(
|
|
'''
|
|
(nClicks, clickedKey) => {
|
|
if (clickedKey == '退出登录') {
|
|
return [
|
|
window.dash_clientside.no_update,
|
|
true,
|
|
false
|
|
];
|
|
} else if (clickedKey == '个人资料') {
|
|
return [
|
|
'/user/profile',
|
|
false,
|
|
false
|
|
];
|
|
} else if ( clickedKey == '布局设置') {
|
|
return [
|
|
window.dash_clientside.no_update,
|
|
false,
|
|
true
|
|
]
|
|
}
|
|
return window.dash_clientside.no_update;
|
|
}
|
|
''',
|
|
[Output('dcc-url', 'pathname', allow_duplicate=True),
|
|
Output('logout-modal', 'visible'),
|
|
Output('layout-setting-drawer', 'visible')],
|
|
Input('index-header-dropdown', 'nClicks'),
|
|
State('index-header-dropdown', 'clickedKey'),
|
|
prevent_initial_call=True
|
|
)
|
|
|
|
|
|
# 退出登录回调
|
|
@app.callback(
|
|
[Output('redirect-container', 'children', allow_duplicate=True),
|
|
Output('token-container', 'data', allow_duplicate=True)],
|
|
Input('logout-modal', 'okCounts'),
|
|
prevent_initial_call=True
|
|
)
|
|
def logout_confirm(okCounts):
|
|
if okCounts:
|
|
result = logout_api()
|
|
if result['code'] == 200:
|
|
session.clear()
|
|
|
|
return [
|
|
dcc.Location(
|
|
pathname='/login',
|
|
id='index-redirect'
|
|
),
|
|
None
|
|
]
|
|
|
|
return [dash.no_update] * 2
|
|
|
|
|
|
# 全局页面重载回调
|
|
app.clientside_callback(
|
|
'''
|
|
(nClicks) => {
|
|
return true;
|
|
}
|
|
''',
|
|
Output('trigger-reload-output', 'reload', allow_duplicate=True),
|
|
Input('index-reload', 'nClicks'),
|
|
prevent_initial_call=True
|
|
)
|
|
|
|
|
|
# 布局设置回调
|
|
app.clientside_callback(
|
|
'''
|
|
(visible, custom_color) => {
|
|
if (visible) {
|
|
if (custom_color) {
|
|
return custom_color;
|
|
}
|
|
}
|
|
return window.dash_clientside.no_update;
|
|
}
|
|
''',
|
|
Output('hex-color-picker', 'color', allow_duplicate=True),
|
|
Input('layout-setting-drawer', 'visible'),
|
|
State('custom-app-primary-color-container', 'data'),
|
|
prevent_initial_call=True
|
|
)
|
|
|
|
|
|
@app.callback(
|
|
[Output('selected-color-input', 'value'),
|
|
Output('selected-color-input', 'style')],
|
|
Input('hex-color-picker', 'color'),
|
|
State('selected-color-input', 'style'),
|
|
prevent_initial_call=True
|
|
)
|
|
def show_selected_color(pick_color, old_style):
|
|
|
|
return [
|
|
pick_color,
|
|
{
|
|
**old_style,
|
|
'background': pick_color
|
|
}
|
|
]
|
|
|
|
|
|
@app.callback(
|
|
[Output('custom-app-primary-color-container', 'data'),
|
|
Output('hex-color-picker', 'color', allow_duplicate=True),
|
|
Output('global-message-container', 'children', allow_duplicate=True)],
|
|
[Input('save-setting', 'nClicks'),
|
|
Input('reset-setting', 'nClicks')],
|
|
[State('selected-color-input', 'value'),
|
|
State('system-app-primary-color-container', 'data')],
|
|
prevent_initial_call=True
|
|
)
|
|
def save_rest_layout_setting(save_click, reset_click, picked_color, system_color):
|
|
if save_click or reset_click:
|
|
trigger_id = dash.ctx.triggered_id
|
|
if trigger_id == 'save-setting':
|
|
|
|
return [
|
|
picked_color,
|
|
dash.no_update,
|
|
fuc.FefferyFancyMessage('保存成功', type='success')
|
|
]
|
|
|
|
elif trigger_id == 'reset-setting':
|
|
|
|
return [
|
|
None,
|
|
system_color,
|
|
fuc.FefferyFancyMessage('重置成功', type='success')
|
|
]
|
|
|
|
return [
|
|
dash.no_update,
|
|
dash.no_update,
|
|
dash.no_update
|
|
]
|
|
|
|
|