feat: 2.3.1
This commit is contained in:
@@ -36,6 +36,17 @@ signal closed
|
||||
var _daily_reward_config_data: Dictionary = {}
|
||||
var _current_dr_month: String = ""
|
||||
|
||||
# Tab: Announcements
|
||||
@onready var target_user_edit := %TargetUserEdit as LineEdit
|
||||
@onready var title_edit := %TitleEdit as LineEdit
|
||||
@onready var content_edit := %ContentEdit as TextEdit
|
||||
@onready var start_date_edit := %StartDatePicker as Button
|
||||
@onready var end_date_edit := %EndDatePicker as Button
|
||||
@onready var add_reward_btn := %AddRewardBtn as Button
|
||||
@onready var rewards_list := %RewardsList as VBoxContainer
|
||||
@onready var reward_row_template := %RewardRowTemplate as HBoxContainer
|
||||
@onready var send_mail_btn := %SendMailBtn as Button
|
||||
|
||||
const MONTH_NAMES = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
|
||||
|
||||
# -- Data --
|
||||
@@ -151,6 +162,10 @@ func _connect_signals() -> void:
|
||||
load_dr_btn.pressed.connect(_load_daily_rewards_config)
|
||||
save_dr_btn.pressed.connect(_save_daily_rewards_config)
|
||||
month_option_btn.item_selected.connect(_on_dr_month_selected)
|
||||
|
||||
# Announcement actions
|
||||
send_mail_btn.pressed.connect(_on_send_mail)
|
||||
add_reward_btn.pressed.connect(_on_add_reward_pressed)
|
||||
|
||||
# =============================================================================
|
||||
# Core Panel Logic
|
||||
@@ -623,3 +638,67 @@ func _save_daily_rewards_config() -> void:
|
||||
_set_status("Save failed: " + res.get("error"), CLR_STATUS_ERR)
|
||||
else:
|
||||
_set_status("Config saved successfully!", CLR_STATUS_OK)
|
||||
|
||||
# =============================================================================
|
||||
# TAB 4: ANNOUNCEMENTS
|
||||
# =============================================================================
|
||||
func _on_add_reward_pressed() -> void:
|
||||
var row = reward_row_template.duplicate()
|
||||
row.visible = true
|
||||
rewards_list.add_child(row)
|
||||
var remove_btn = row.get_node("RemoveBtn") as Button
|
||||
remove_btn.pressed.connect(func(): row.queue_free())
|
||||
|
||||
func _on_send_mail() -> void:
|
||||
var target = target_user_edit.text.strip_edges()
|
||||
var title = title_edit.text.strip_edges()
|
||||
var content = content_edit.text.strip_edges()
|
||||
var start_date = start_date_edit.get_date_iso()
|
||||
var end_date = end_date_edit.get_date_iso()
|
||||
|
||||
if title.is_empty() or content.is_empty():
|
||||
_set_status("Title and content cannot be empty", CLR_STATUS_ERR)
|
||||
return
|
||||
|
||||
var rewards_arr = []
|
||||
for child in rewards_list.get_children():
|
||||
if not child.visible: continue # skip template
|
||||
var type_opt = child.get_node("TypeOption") as OptionButton
|
||||
var id_edit = child.get_node("IdEdit") as LineEdit
|
||||
var amount_spin = child.get_node("AmountSpin") as SpinBox
|
||||
|
||||
var type_str = type_opt.get_item_text(type_opt.selected)
|
||||
var r_id = id_edit.text.strip_edges()
|
||||
rewards_arr.append({
|
||||
"type": type_str,
|
||||
"id": r_id,
|
||||
"amount": int(amount_spin.value)
|
||||
})
|
||||
|
||||
send_mail_btn.disabled = true
|
||||
_set_status("Sending mail...")
|
||||
|
||||
var payload = {
|
||||
"target_user_id": target,
|
||||
"title": title,
|
||||
"content": content,
|
||||
"start_date": start_date,
|
||||
"end_date": end_date,
|
||||
"rewards": rewards_arr
|
||||
}
|
||||
|
||||
var res = await _rpc("admin_send_mail", payload)
|
||||
send_mail_btn.disabled = false
|
||||
|
||||
if res.has("error"):
|
||||
_set_status("Failed to send mail: " + res.get("error", "Unknown"), CLR_STATUS_ERR)
|
||||
else:
|
||||
_set_status("Mail sent successfully!", CLR_STATUS_OK)
|
||||
title_edit.text = ""
|
||||
content_edit.text = ""
|
||||
if start_date_edit.has_method("clear_date"):
|
||||
start_date_edit.clear_date()
|
||||
if end_date_edit.has_method("clear_date"):
|
||||
end_date_edit.clear_date()
|
||||
for child in rewards_list.get_children():
|
||||
if child.visible: child.queue_free()
|
||||
|
||||
Reference in New Issue
Block a user