Files
fc/server/tools/gen_data/cfg/holiday_base.erl
T
2026-05-23 22:10:14 +08:00

174 lines
9.9 KiB
Erlang

%%----------------------------------------------------
%% 运营活动数据配置文件
%% @author whjing2011@gmail.com
%%----------------------------------------------------
-module(holiday_base).
-export([cfg/0, handle/3]).
-include("data_config.hrl").
-include("common.hrl").
cfg() ->
#data_cfg{
name = holiday_base
,lua_name = holiday_base
,desc = "活动后台配置数据"
,source = "holiday_base.xml"
,target = "holiday_base.php"
,inc = []
,callback_php = [
{"holiday.cfg.php", ?MODULE, handle, {}}
]
,sheet = [
{[N || {N,_} <- types()], [
#f_column{type = str, convert = false, name = bid, desc = "基础ID", primary = true}
,#f_column{type = int, name = sort_val, desc = "排序"}
,#f_column{type = str, convert = false, name = title, desc = "左侧标题", width = 200}
,#f_column{type = str, convert = false, name = title2, desc = "顶部横幅"}
,#f_column{type = str, convert = false, name = ico, desc = "左侧图标"}
,#f_column{type = str, convert = false, name = type_ico, desc = "类型图标"}
,#f_column{type = str, convert = false, name = top_banner, desc = "顶部底图", width = 200}
,#f_column{type = str, convert = false, name = rule_str, desc = "活动规则", width = 300}
,#f_column{type = str, convert = false, name = time_str, desc = "活动时间", width = 200}
,#f_column{type = str, convert = false, name = bottom_alert, desc = "温馨提示", width = 250}
,#f_column{type = str, convert = false, name = reward_title, desc = "奖励标题", comment = "与holiday_role_data的 子活动子项背景资源类似", width = 200}
,#f_column{type = str, convert = false, name = reward, desc = "奖励", width = 360}
,#f_column{type = str, convert = false, name = reward_desc, desc = "奖励填写规则", width = 360}
,#f_column{type = term, name = item_effect, desc = "物品特效", width = 250}
,#f_column{type = str, convert = false, name = mail_subject, desc = "邮件标题", width = 200}
,#f_column{type = str, convert = false, name = mail_content, desc = "邮件内容", width = 360}
,#f_column{type = str, convert = false, name = cli_reward, desc = "客户端奖励", width = 250}
,#f_column{type = str, convert = false, name = panel_type, desc = "客户端面板类型", width = 200}
,#f_column{type = kv, name = process_show_reward, kv_type = bool, desc = "处理领奖显示"}
,#f_column{type = int, name = start_open_day, desc = "开服多少天开启"}
,#f_column{type = int, name = open_day_min, desc = "开服X天开启"}
,#f_column{type = int, name = open_day_max, desc = "开服X天关闭"}
]}
,{["面板类型"], [
#f_column{type = int, name = type, desc = "类型"}
,#f_column{type = str, name = name, desc = "名称"}
]}
]
}.
types() ->
[{"充值类",1}, {"消费类",2}, {"系统功能",3}, {"在线类",4}, {"趣味玩法",5}, {"其它",6}, {"排行榜",7}].
handle(_DataCfg, SheetDatas, _) ->
S1 = "<?php
/**
* 节日活动配置表
* bid // 活动编号
* type // 活动大类型
* group // 活动分组
* name // 活动名称
* total_id // 大活动类型
* sort_val // 排序 0:客户端不需要显示;
* status // 开启状态 0:后台不给配置 不能再选择即不需要显示选项
* start_time // 子活动开始时间(时间戳)
* end_time // 子活动结束时间(时间戳)
* title // 子活动标题(上)
* title2 // 子活动标题(下)
* ico // 子活动图标
* type_ico // 子活动类型图标(标题上)
* top_banner // 子活动顶部横幅
* rule_str // 子活动规则描述
* time_str // 子活动活动时间描述
* bottom_alert // 子活动底部描述(提示)
* reward_title // 子活动奖励表头
* reward // 子活动奖励
* reward_desc // 子活动奖励描述
* mail_subject // 邮件标题
* mail_content // 邮件内容
* cli_reward // 客户端奖励显示
* panel_type // 面板类型 格式为 ID:说明
* settlement // 结算类型(默认类型 最好界面提供选择 不能提供就直接入库)
* reward_mod // 奖励模式(默认类型 最好界面提供选择 不能提供就直接入库)
* reward_num // 奖励最大次数(默认值 最好界面提供输入 不能提供就直接入库)
* cfg_desc // 项[reward:子活动奖励] 后台配置填写格式描述
*/
return array(
",
lists:concat([S1, do_sheets(SheetDatas, []), "\n);"]).
do_sheets([], L) ->
S = lists:concat(["\t'type_icon' => array(",
[lists:concat(["\n\t\t'", Type, "' => '", TypeName, "',"]) || {TypeName, Type} <- types()],
"\n\t),"]),
string:join(lists:reverse([S | L]), ",\n");
do_sheets([{"面板类型", _, Rows} | T], L) ->
S = lists:concat(["\t'panel_types' => array(",
[lists:concat(["\n\t\t'", Val1, "' => '", str(Val2), "',"]) || [#f_column{val_cli = Val1}, #f_column{val_cli = Val2} | _] <- Rows],
"\n\t)"]),
do_sheets(T, [S | L]);
do_sheets([{SheetName, _, Rows} | T], L) ->
case lists:keyfind(SheetName, 1, types()) of
{_, Type} ->
S = lists:concat(["\t", Type , " => array( // 大分类
'name' => \"", SheetName ,"\",
'sub' => array(",do_rows(Rows, []),"
)
)"]),
do_sheets(T, [S | L]);
_ ->
?P("======++~ts~n", [SheetName]),
do_sheets(T, L)
end.
do_rows([], L) ->
string:join(lists:reverse(L), ",");
do_rows([Row | T], L) ->
#f_column{val_cli = Name} = lists:keyfind(bid, #f_column.name, Row),
#f_column{val = SortVal} = lists:keyfind(sort_val, #f_column.name, Row),
#f_column{val_cli = Title} = lists:keyfind(title, #f_column.name, Row),
#f_column{val_cli = Title2} = lists:keyfind(title2, #f_column.name, Row),
#f_column{val_cli = Ico} = lists:keyfind(ico, #f_column.name, Row),
#f_column{val_cli = Type_ico} = lists:keyfind(type_ico, #f_column.name, Row),
#f_column{val_cli = Top_banner} = lists:keyfind(top_banner, #f_column.name, Row),
#f_column{val_cli = Rule_str} = lists:keyfind(rule_str, #f_column.name, Row),
#f_column{val_cli = Time_str} = lists:keyfind(time_str, #f_column.name, Row),
#f_column{val_cli = Bottom_alert} = lists:keyfind(bottom_alert, #f_column.name, Row),
#f_column{val_cli = Reward_title} = lists:keyfind(reward_title, #f_column.name, Row),
#f_column{val_cli = Reward} = lists:keyfind(reward, #f_column.name, Row),
#f_column{val_cli = Reward_desc} = lists:keyfind(reward_desc, #f_column.name, Row),
#f_column{val_cli = ItemEff} = lists:keyfind(item_effect, #f_column.name, Row),
#f_column{val_cli = Mail_subject} = lists:keyfind(mail_subject, #f_column.name, Row),
#f_column{val_cli = Mail_content} = lists:keyfind(mail_content, #f_column.name, Row),
#f_column{val_cli = Cli_reward} = lists:keyfind(cli_reward, #f_column.name, Row),
#f_column{val_cli = Panel_type} = lists:keyfind(panel_type, #f_column.name, Row),
#f_column{val_cli = Process_show_reward} = lists:keyfind(process_show_reward, #f_column.name, Row),
#f_column{val_cli = Start_open_day} = lists:keyfind(start_open_day, #f_column.name, Row),
#f_column{val_cli = Open_day_min} = lists:keyfind(open_day_min, #f_column.name, Row),
#f_column{val_cli = Open_day_max} = lists:keyfind(open_day_max, #f_column.name, Row),
[Bid | _] = string:tokens(Name, ":"),
S = lists:concat(["
",Bid," => array(
'name' => \"", str(Name), "\",
'sort_val' => \"", str(SortVal), "\",
'title' => \"", str(Title), "\",
'title2' => \"", str(Title2), "\",
'ico' => \"", str(Ico), "\",
'type_ico' => \"", str(Type_ico), "\",
'top_banner' => \"", str(Top_banner), "\",
'rule_str' => \"", str(Rule_str), "\",
'time_str' => \"", str(Time_str), "\",
'bottom_alert' => \"", str(Bottom_alert), "\",
'reward_title' => \"", str(Reward_title), "\",
'reward' => \"[", str(Reward), "]\",
'reward_desc' => \"", str(Reward_desc), "\",
'item_effect' => \"", str(ItemEff), "\",
'item_effect_desc' => \"{物品ID, EffectId1, EffectId2}\",
'mail_title' => \"", str(Mail_subject), "\",
'mail_content' => \"", str(Mail_content), "\",
'cli_reward' => \"", str(Cli_reward), "\",
'panel_type' => \"", str(Panel_type), "\",
'process_show_reward' => \"", str(Process_show_reward), "\",
'start_open_day' => \"", str(Start_open_day), "\",
'open_day_min' => \"", str(Open_day_min), "\",
'open_day_max' => \"", str(Open_day_max), "\",
)"]),
do_rows(T, [S | L]).
str(Str) ->
Str1 = unicode:characters_to_list(util:to_binary(Str)),
util:replace(Str1, "\"", "\\\"").