解析ET6框架的配置表的原理和使用

1.介绍

在游戏开发中,为了方便策划程序分工合作,使用.xlsx配置表在所难免,接下来我就解析下ET6框架的配置表的原理和使用。

2.原理

1.ExcelExporter.cs

导出.xlsx为模板类,并生成json然后动态编译成protobuf使用

        public static void Export()
        {
            try
            {
                //读取bin目录下的Template.txt
                template = File.ReadAllText("Template.txt");
                ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

                //清空clientClassDir,serverClassDir下的文件
                if (Directory.Exists(clientClassDir))
                {
                    Directory.Delete(clientClassDir, true);
                }

                if (Directory.Exists(serverClassDir))
                {
                    Directory.Delete(serverClassDir, true);
                }

                //读取excle文件
                foreach (string path in Directory.GetFiles(excelDir))
                {
                    string fileName = Path.GetFileName(path);
                    if (!fileName.EndsWith(".xlsx") || fileName.StartsWith("~$"))
                    {
                        continue;
                    }
                    using Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                    using ExcelPackage p = new ExcelPackage(stream);
                    string name = Path.GetFileNameWithoutExtension(path);
                    //读取第一个sheet的(1,1)单元文本,#就不生成,包含c就客户端生成,包含s就服务端生成,""也都生成
                    string cs = p.Workbook.Worksheets[0].Cells[1, 1].Text.Trim();
                    if (cs.Contains("#"))
                    {
                        continue;
                    }
                    if (cs == "")
                    {
                        cs = "cs";
                    }
                    if (cs.Contains("c"))
                    {
                        //导出配置类
                        ExportExcelClass(p, name, ConfigType.c);    
                    }
                    if (cs.Contains("s"))
                    {
                        //导出配置类
                        ExportExcelClass(p, name, ConfigType.s);    
                    }
                }

                //动态编译把json转成protobuf
                ExportExcelProtobuf(ConfigType.c);
                ExportExcelProtobuf(ConfigType.s);
                
                Console.WriteLine("导表成功!");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }

2.ConfigComponentSystem.cs

加载反序列化所有配置表protobuf

        public static void Load(this ConfigComponent self)
		{
			self.AllConfig.Clear();
			//获取所有打上config标签的
			HashSet<Type> types = Game.EventSystem.GetTypes(typeof (ConfigAttribute));

			//将每个文件的字节流保存到configBytes
			Dictionary<string, byte[]> configBytes = new Dictionary<string, byte[]>();
			self.ConfigLoader.GetAllConfigBytes(configBytes);

			//将字节流信息反序列化成对象存在AllConfig字典
			foreach (Type type in types)
			{
				self.LoadOneInThread(type, configBytes);
			}
		}

3.使用

1.配置excel规则:第二行第二列的#代表忽略,c代表客户端生成,s代表服务端生成,默认代表两端都生成,同一个excel的sheet分页可以组合数据,sheet的名字前#则忽略

 2.将配置表放进excel目录,并运行win_startExcelExport.bat

3.直接使用生成类单例调用表数据

            await ResourcesComponent.Instance.LoadBundleAsync("config.unity3d");
            Game.Scene.AddComponent<ConfigComponent>();
            ConfigComponent.Instance.Load();
            ResourcesComponent.Instance.UnloadBundle("config.unity3d");
            //使用
            Log.Error(AIConfigCategory.Instance.Get(201).Order.ToString() + "====================================");

4.技巧:如果想扩展读表的方法可以单独写个文件扩展,不要写在自动生成的里面

 public partial class AIConfigCategory : ProtoObject
 {
       //扩展方法
}

<think>嗯,用户之前问过关于基于Vue的低代码单页面构建的前端框架推荐,现在他们又想知道基于Vue.jsElement UI的二次封装框架推荐。这说明用户可能正在开发一个管理后台或者企业级应用,需要提高开发效率,减少重复代码。 首先,用户可能已经使用Element UI,但发现原生组件在复杂业务场景下需要大量重复代码,或者功能不够完善,比如格的复杂操作、单的动态生成等。所以需要二次封装的框架来增强功能,简化开发流程。 接下来,我需要回顾之前推荐的方案,比如XRender、vxe-table、FormMaking等,看看哪些是基于Element UI二次封装的。比如,Vue-Element-Admin是一个经典的后台解决方案,但用户可能需要更具体的组件库,比如封装了更多业务逻辑的框架。 然后,考虑用户可能的深层需求。他们可能希望框架有良好的文档、社区支持,以及与企业级应用相关的功能,比如权限管理、可配置表单、复杂格操作等。同时,可能还需要支持Vue3,但用户现在提到的是Element UI,通常是Vue2的,所以需要确认推荐的框架是否兼容Vue2或Vue3。 另外,用户可能希望这些二次封装框架能够提供低代码或可视化配置的能力,以减少手动编写代码的时间。例如,通过JSON配置生成单或格,或者有可视化的设计器工具。 还要注意之前的推荐中提到的阿里系框架,如LowCodeEngine,可能用户对阿里生态比较信任,或者项目已经在使用相关技术栈,所以需要优先考虑这些。 最后,确保推荐的框架有实际案例良好的维护状态,避免推荐过时或不活跃的项目。比如Vue-Element-Admin虽然经典,但需要确认是否持续更新,或者是否有更好的替代方案。 总结下来,用户需要的是基于Element UI进行二次封装,提供更高效开发体验的框架,涵盖格、单、权限管理等企业级功能,同时支持低代码配置,良好的文档社区支持。</think>以下是为您精选的基于Vue.js + Element UI二次封装框架推荐及技术解析: --- ### 一、企业级后台框架 1. **Vue-Element-Admin** - GitHub Stars: 82k+(最经典的后台解决方案) - 核心特性: - RBAC权限系统(路由/按钮级控制) - 动态侧边栏 + 多标签页 - 内置`exceljs`数据导出 - 典型封装组件: ```vue <el-table-pro :columns="smartColumns" @fetch="handleAjax"/> ``` 2. **JEECG-Uniapp**(企业级低代码) - 特色功能: - 在线单设计器(拖拽生成CRUD) - 代码生成器(根据数据库自动生成页面) - 集成工作流引擎 --- ### 二、增强型组件库 1. **Element Plus Extends** - 重点增强: - 格: ```js <elx-table :config="{ autoHeight: true, contextMenu: ['copy','export'] }"> ``` - 单:支持JSON配置动态单 - 文档:element-extends-docs.cn 2. **DataV-Vue**(阿里系) - 特色封装: - 大屏数据展示组件(自动响应式) - 增强版Echarts封装: ```js <dv-scroll-board :config="{ header: ['姓名','成绩'], data: [[李雷, 95], [韩梅梅, 98]] }"/> ``` --- ### 三、业务场景化封装 1. **FormGenerator** - 动态单生成器: ```js const formConf = { fields: [ { type: 'input', label: '手机号', rules: [{ pattern: /^1[3-9]\d{9}$/ }] } ] } ``` - 支持200+预置校验规则 2. **CrudBox**(企业CRUD专用) - 配置示例: ```js crudConfig: { api: '/api/users', columns: [ { prop: 'name', search: true, sortable: 'custom' } ], operate: ['edit', 'delete'] } ``` --- ### 四、配套工具链 | 工具类型 | 推荐方案 | 功能亮点 | |----------------|-------------------------|------------------------------| | 请求增强 | `@femessage/axios-extend` | 自动重试 + 缓存控制 | | 权限管理 | `vue-element-permission` | 指令式权限控制(v-permission) | | 错误监控 | `vue-element-track` | 用户行为轨迹记录 | --- ### 五、选型对比 | 框架名称 | 适合场景 | 学习曲线 | 维护状态 | |-------------------|------------------------|----------|----------| | Vue-Element-Admin | 中大型后台系统 | ★★★★☆ | 持续更新 | | FormGenerator | 动态单高频场景 | ★★☆☆☆ | 活跃 | | CrudBox | 快速生成CRUD界面 | ★★☆☆☆ | 稳定 | --- ### 六、最佳实践建议 1. **封装原则**: - 保持Element API兼容性(使用`v-bind="$attrs"`继承属性) - 复杂组件采用Render函数优化性能 ```js render(h) { return h(ElInput, { on: { ...this.$listeners }, props: { ...this.$attrs } }) } ``` 2. **性能优化**: - 大数据使用`<virtual-scroller>` - 使用`async-validator`进行分片校验 3. **主题定制**: - 推荐使用`element-theme`工具生成自定义主题 ```shell npm i element-theme -g et --init ``` --- 最新趋势:2023年推荐优先考虑支持Vue3+Element Plus的二次封装框架(如`@element-plus/components`),已有项目可通过`@vue/compat`平稳迁移。需要具体实施案例可提供项目场景细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧寒大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值