123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using System.Text;
- namespace etoy
- {
- class TSXlsConfigGenerater : IGenerater
- {
- //导入json
- private const string RequireJsonArea = "<#requireJsonArea>";
- // 表类型
- private const string TableTypeArea = "<#TableTypeArea>";
- // 表数组定义
- private const string TableRepositoryDefineArea = "<#TableRepositoryDefineArea>";
- // 表数组赋值
- private const string TableRepositoryAssignArea = "<#TableRepositoryAssignArea>";
- private const string CLASS_FILE_NAME = "xlsConfig.ts";
- private string CodeTemplatePath => Path.Combine(Environment.CurrentDirectory, "Configs/TSTemplates", CLASS_FILE_NAME);
- public void Generate(Context context)
- {
- var tables = context.Blackboard.Tables;
- var sbRequireJsons = new StringBuilder();
- var sbTableTypes = new StringBuilder();
- var sbTableRepoDefines = new StringBuilder();
- var sbTableRepoAssigns = new StringBuilder();
- foreach (var table in tables)
- {
- if (table.TableTag.HasFlag(TableTag.Server))
- {
- var tableName = table.Name;
- sbRequireJsons.AppendLine($"const {tableName} = require(\"./excel/{tableName}.json\")");
- GenTableType(table, sbTableTypes);
- sbTableRepoDefines.AppendLine($" xls{tableName}: xls{tableName}[]");
- sbTableRepoAssigns.AppendLine($" this.xls{tableName} = <xls{tableName}[]>{tableName}");
- }
- }
- var xlsConfigText = File.ReadAllText(CodeTemplatePath);
- xlsConfigText = xlsConfigText.Replace(RequireJsonArea, sbRequireJsons.ToString());
- xlsConfigText = xlsConfigText.Replace(TableTypeArea, sbTableTypes.ToString());
- xlsConfigText = xlsConfigText.Replace(TableRepositoryDefineArea, sbTableRepoDefines.ToString());
- xlsConfigText = xlsConfigText.Replace(TableRepositoryAssignArea, sbTableRepoAssigns.ToString());
- var xlsConfigPath = Path.Combine(context.Option.ServerCodeOutput, CLASS_FILE_NAME);
- File.WriteAllText(xlsConfigPath, xlsConfigText, Encoding.UTF8);
- // metadata也写在XlsConfig,这里直接继续
- var metadataGenerater = new TSMetadataTableGenerater();
- metadataGenerater.Generate(context);
- }
- private void GenTableType(Table table, StringBuilder sbTableTypes)
- {
- sbTableTypes.Append($"export type xls{table.Name} = {{");
- var isFieldFirst = true;
- // var pkFieldInfo = table.GetPKFieldInfo();
- // 属性定义
- for (int i = 0, length = table.FieldInfos.Length; i < length; i++)
- {
- var fieldInfo = table.FieldInfos[i];
- // no export server’s field
- if (!fieldInfo.IsServerField)
- continue;
- string fieldType = fieldInfo.FieldType.ToTSFieldType();
- var fieldName = fieldInfo.FieldName;
- if (!isFieldFirst)
- {
- sbTableTypes.Append(',');
- }
- else
- {
- isFieldFirst = false;
- }
- if (fieldInfo.IsRepeated)
- {
- // 数组
- sbTableTypes.Append($" {fieldName}: {fieldType}[]");
- }
- else
- { // 字段
- sbTableTypes.Append($" {fieldName}: {fieldType}");
- }
- }
- sbTableTypes.Append(" }\n");
- }
- }
- }
|