yggdrasil/pages/admin/settings/
purge_section.rs1use leptos::prelude::*;
7
8use super::kit::{use_section, SettingRow, SettingsCard, SwitchRow};
9use super::SettingsSection;
10use crate::api::error::ApiError;
11use crate::api::settings::{get_asset_purge_settings, update_asset_purge_settings};
12use crate::components::forms::NumberInput;
13use crate::models::settings::AssetPurgeSettings;
14
15async fn save(d: AssetPurgeSettings) -> Result<AssetPurgeSettings, ApiError> {
16 update_asset_purge_settings(d.auto_purge_enabled, d.retention_days).await
17}
18
19#[component]
21pub fn AssetPurgeSection() -> impl IntoView {
22 let st = use_section(SettingsSection::AssetPurge, get_asset_purge_settings, save);
23 view! {
24 <SettingsCard
25 section=SettingsSection::AssetPurge
26 description="没有任何引用的图片超过保留天数后自动删除,每天执行一次。"
27 ready=st.ready()
28 load_failed=st.load_failed()
29 failed=st.failed()
30 >
31 <SwitchRow
32 label="启用自动清理"
33 hint="关闭后未引用图片一直保留,需要在素材页手动清理。评论区允许匿名传图,建议保持开启。"
34 checked=st.field(|d| d.auto_purge_enabled)
35 ontoggle=move |()| st.edit(|d| d.auto_purge_enabled = !d.auto_purge_enabled)
36 />
37 <SettingRow label="保留天数" html_for="asset-purge-days">
38 <NumberInput
39 id="asset-purge-days"
40 value=st.field(|d| i64::from(d.retention_days))
41 min=1
42 max=365
43 unit="天"
44 hint="上传满这么多天仍未被引用才会删除,以免误删还没保存的草稿里的图片。"
45 onchange=move |v: i64| st.edit(|d| d.retention_days = v as i32)
46 />
47 </SettingRow>
48 </SettingsCard>
49 }
50}