From f095fde5a783b7b1a3fef972fbccc7d739f9164f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=B7=B3?= Date: Wed, 27 Sep 2023 18:01:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20webfrist=E5=9F=BA=E6=9C=AC=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=B7=B2=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebFirstManager/Domain/CodeFileManager.cs | 18 +- .../Domain/WebTemplateManager.cs | 6 +- .../Dtos/Template/TemplateDto.cs | 18 +- .../Dtos/Template/TemplateGetListInput.cs | 6 + .../Entities/TemplateEntity.cs | 11 + .../WebFirstManager/Enums/FieldTypeEnum.cs | 7 +- .../Handler/FieldTemplateHandler.cs | 29 +- .../Handler/HandledTemplate.cs | 15 + .../Handler/ITemplateHandler.cs | 2 +- .../Handler/ModelTemplateHandler.cs | 7 +- .../Handler/NameSpaceTemplateHandler.cs | 7 +- .../WebFirstManager/Impl/TableService.cs | 8 +- .../WebFirstManager/Impl/TemplateService.cs | 21 +- .../WebFirstManager/Impl/WebFirstService.cs | 23 +- .../Yi.Framework.Module.xml | 33 +- .../Rbac/DataSeeds/MenuDataSeed.cs | 41 ++ Yi.RuoYi.Vue3/src/App.vue | 5 +- Yi.RuoYi.Vue3/src/api/webfirst/templateApi.js | 43 ++ Yi.RuoYi.Vue3/src/api/webfirst/webfirstApi.js | 24 + Yi.RuoYi.Vue3/src/main.js | 4 +- Yi.RuoYi.Vue3/src/views/template.vue | 6 +- .../components/FieldList.vue | 0 .../components/TableList.vue | 0 .../{fileld => field}/hooks/useTable.js | 0 .../webfirst/{fileld => field}/index.vue | 0 .../src/views/webfirst/table/index.vue | 432 ++++++++++------- .../template/components/ReplaceText.vue | 32 ++ .../template/components/TempalteTip.vue | 36 ++ .../src/views/webfirst/template/index.vue | 377 +++++++++++++++ Yi.RuoYi.Vue3/临时 copy.json | 440 ------------------ Yi.RuoYi.Vue3/临时.json | 440 ------------------ 31 files changed, 993 insertions(+), 1098 deletions(-) create mode 100644 Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/HandledTemplate.cs create mode 100644 Yi.RuoYi.Vue3/src/api/webfirst/templateApi.js create mode 100644 Yi.RuoYi.Vue3/src/api/webfirst/webfirstApi.js rename Yi.RuoYi.Vue3/src/views/webfirst/{fileld => field}/components/FieldList.vue (100%) rename Yi.RuoYi.Vue3/src/views/webfirst/{fileld => field}/components/TableList.vue (100%) rename Yi.RuoYi.Vue3/src/views/webfirst/{fileld => field}/hooks/useTable.js (100%) rename Yi.RuoYi.Vue3/src/views/webfirst/{fileld => field}/index.vue (100%) create mode 100644 Yi.RuoYi.Vue3/src/views/webfirst/template/components/ReplaceText.vue create mode 100644 Yi.RuoYi.Vue3/src/views/webfirst/template/components/TempalteTip.vue create mode 100644 Yi.RuoYi.Vue3/src/views/webfirst/template/index.vue delete mode 100644 Yi.RuoYi.Vue3/临时 copy.json delete mode 100644 Yi.RuoYi.Vue3/临时.json diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Domain/CodeFileManager.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Domain/CodeFileManager.cs index dd43466b..96a8e277 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Domain/CodeFileManager.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Domain/CodeFileManager.cs @@ -22,25 +22,29 @@ namespace Yi.Framework.Module.WebFirstManager.Domain public async Task BuildWebToCodeAsync(TableAggregateRoot tableEntity) { var templates = await _repository.GetListAsync(); - var fields = await _fieldRepository.GetListAsync(); foreach (var template in templates) { - string templateStr = template.TemplateStr; + var handledTempalte = new HandledTemplate(); + handledTempalte.TemplateStr= template.TemplateStr; + handledTempalte.BuildPath = template.BuildPath; foreach (var templateHandler in _templateHandlers) { templateHandler.SetTable(tableEntity); - templateStr = templateHandler.Invoker(templateStr); + handledTempalte = templateHandler.Invoker(handledTempalte.TemplateStr, handledTempalte.BuildPath); } + await BuildToFileAsync(handledTempalte); - await BuildToFileAsync(templateStr, template); } } - private async Task BuildToFileAsync(string str, TemplateEntity templateEntity) + private async Task BuildToFileAsync(HandledTemplate handledTemplate) { - - //await File.WriteAllTextAsync(str, templateEntity.BuildPath); + if (!Directory.Exists(Path.GetDirectoryName(handledTemplate.BuildPath))) + { + Directory.CreateDirectory(Path.GetDirectoryName(handledTemplate.BuildPath)); + } + await File.WriteAllTextAsync(handledTemplate.BuildPath,handledTemplate.TemplateStr); } diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Domain/WebTemplateManager.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Domain/WebTemplateManager.cs index 024a0b31..1d45efad 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Domain/WebTemplateManager.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Domain/WebTemplateManager.cs @@ -1,11 +1,11 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; -using EasyTool; using Furion; using Furion.DatabaseAccessor; using Furion.DependencyInjection; @@ -82,7 +82,7 @@ namespace Yi.Framework.Module.WebFirstManager.Domain { var fieldEntity = new FieldEntity(); fieldEntity.Name = propertyInfo.Name; - var enumName = typeof(FieldTypeEnum).GetFields(BindingFlags.Static | BindingFlags.Public).Where(x => x.GetCustomAttribute()?.Description == propertyInfo.PropertyType.Name).FirstOrDefault()?.Name; + var enumName = typeof(FieldTypeEnum).GetFields(BindingFlags.Static | BindingFlags.Public).Where(x => x.GetCustomAttribute()?.Name== propertyInfo.PropertyType.Name).FirstOrDefault()?.Name; if (enumName is null) { fieldEntity.FieldType = FieldTypeEnum.String; @@ -91,7 +91,7 @@ namespace Yi.Framework.Module.WebFirstManager.Domain } else { - fieldEntity.FieldType = EnumUtil.Parse(enumName); + fieldEntity.FieldType =EasyTool.EnumUtil.Parse(enumName); } var colum = propertyInfo.GetCustomAttribute(); diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Dtos/Template/TemplateDto.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Dtos/Template/TemplateDto.cs index eeaaff6d..7ad73e81 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Dtos/Template/TemplateDto.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Dtos/Template/TemplateDto.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Yi.Framework.Infrastructure.Ddd.Dtos.Abstract; +using Yi.Framework.Infrastructure.Ddd.Dtos.Abstract; namespace Yi.Framework.Module.WebFirstManager.Dtos.Template { @@ -20,5 +15,16 @@ namespace Yi.Framework.Module.WebFirstManager.Dtos.Template /// 生成路径 /// public string BuildPath { get; set; } + + + /// + /// 模板名称 + /// + public string Name { get; set; } + + /// + /// 备注 + /// + public string? Remarks { get; set; } } } diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Dtos/Template/TemplateGetListInput.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Dtos/Template/TemplateGetListInput.cs index 8da1fafe..702cd038 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Dtos/Template/TemplateGetListInput.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Dtos/Template/TemplateGetListInput.cs @@ -9,5 +9,11 @@ namespace Yi.Framework.Module.WebFirstManager.Dtos.Template { public class TemplateGetListInput : PagedAndSortedResultRequestDto { + + /// + /// 模板名称 + /// + public string? Name { get; set; } + } } diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Entities/TemplateEntity.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Entities/TemplateEntity.cs index 1cc3665b..402cb41c 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Entities/TemplateEntity.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Entities/TemplateEntity.cs @@ -19,11 +19,22 @@ namespace Yi.Framework.Module.WebFirstManager.Entities /// /// 模板字符串 /// + [SugarColumn(Length =99999)] public string TemplateStr { get; set; } = string.Empty; /// /// 生成路径 /// public string BuildPath { get; set; } + + /// + /// 模板名称 + /// + public string Name { get; set; } + + /// + /// 备注 + /// + public string? Remarks { get; set; } } } diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Enums/FieldTypeEnum.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Enums/FieldTypeEnum.cs index b016c34a..af97b157 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Enums/FieldTypeEnum.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Enums/FieldTypeEnum.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,13 +11,13 @@ namespace Yi.Framework.Module.WebFirstManager.Enums { public enum FieldTypeEnum { - [Description("String")] + [Display(Name ="string",Description = "String")] String, - [Description("Int32")] + [Display(Name = "int", Description = "Int32")] Int, - [Description("Int64")] + [Display(Name = "long", Description = "Int64")] Long, } } diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/FieldTemplateHandler.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/FieldTemplateHandler.cs index 76fa33d6..c8e80379 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/FieldTemplateHandler.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/FieldTemplateHandler.cs @@ -1,14 +1,20 @@ -using System.Text; -using EasyTool; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.Reflection; +using System.Text; using Furion.DependencyInjection; +using Yi.Framework.Module.WebFirstManager.Enums; namespace Yi.Framework.Module.WebFirstManager.Handler { public class FieldTemplateHandler : TemplateHandlerBase, ITemplateHandler, ISingleton { - public string Invoker(string str) + public HandledTemplate Invoker(string str,string path) { - return str.Replace("@field", BuildFields()); + var output= new HandledTemplate(); + output.TemplateStr = str.Replace("@field", BuildFields()); + output.BuildPath = path; + return output; } @@ -23,15 +29,20 @@ namespace Yi.Framework.Module.WebFirstManager.Handler foreach (var field in Table.Fields) { - var typeStr = EnumUtil.GetDescriptionByValue(field.FieldType); + var typeStr = typeof(FieldTypeEnum).GetFields().Where(x=> x.Name== field.FieldType.ToString())?.FirstOrDefault().GetCustomAttribute().Name; + + if (typeStr is null) + { + continue; + } var nameStr = field.Name; //添加备注 - if (string.IsNullOrEmpty(field.Description)) + if (!string.IsNullOrEmpty(field.Description)) { - var desStr = "/// " + - @$"///{field.Description}" + - "/// "; + var desStr = "/// \n" + + $"///{field.Description}\n" + + "/// \n"; fieldStrs.AppendLine(desStr); } diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/HandledTemplate.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/HandledTemplate.cs new file mode 100644 index 00000000..bd9ba668 --- /dev/null +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/HandledTemplate.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Module.WebFirstManager.Handler +{ + public class HandledTemplate + { + public string TemplateStr { get; set; } + + public string BuildPath { get; set; } + } +} diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/ITemplateHandler.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/ITemplateHandler.cs index 53e9e7ba..ebc50219 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/ITemplateHandler.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/ITemplateHandler.cs @@ -10,6 +10,6 @@ namespace Yi.Framework.Module.WebFirstManager.Handler public interface ITemplateHandler { void SetTable(TableAggregateRoot table); - string Invoker(string str); + HandledTemplate Invoker(string str, string path); } } diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/ModelTemplateHandler.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/ModelTemplateHandler.cs index 4a7da203..72b9e56a 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/ModelTemplateHandler.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/ModelTemplateHandler.cs @@ -10,9 +10,12 @@ namespace Yi.Framework.Module.WebFirstManager.Handler { public class ModelTemplateHandler : TemplateHandlerBase, ITemplateHandler, ISingleton { - public string Invoker(string str) + public HandledTemplate Invoker(string str, string path) { - return str.Replace("@model", StrUtil.ToFirstLetterLowerCase(Table.Name)).Replace("@Model", StrUtil.ToFirstLetterUpperCase(Table.Name)); + var output = new HandledTemplate(); + output.TemplateStr= str.Replace("@model", StrUtil.ToFirstLetterLowerCase(Table.Name)).Replace("@Model", StrUtil.ToFirstLetterUpperCase(Table.Name)); + output.BuildPath = path.Replace("@model", StrUtil.ToFirstLetterLowerCase(Table.Name)).Replace("@Model", StrUtil.ToFirstLetterUpperCase(Table.Name)); + return output; } } } diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/NameSpaceTemplateHandler.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/NameSpaceTemplateHandler.cs index 10f1f9a6..02d65232 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/NameSpaceTemplateHandler.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Handler/NameSpaceTemplateHandler.cs @@ -9,9 +9,12 @@ namespace Yi.Framework.Module.WebFirstManager.Handler { public class NameSpaceTemplateHandler : TemplateHandlerBase, ITemplateHandler, ISingleton { - public string Invoker(string str) + public HandledTemplate Invoker(string str, string path) { - return str.Replace("@namespace", ""); + var output = new HandledTemplate(); + output.TemplateStr = str.Replace("@namespace", ""); + output.BuildPath = path; + return output; } } } diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/TableService.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/TableService.cs index d8e2c513..1382b441 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/TableService.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/TableService.cs @@ -1,14 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Furion.DependencyInjection; +using Furion.DependencyInjection; using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; using Yi.Framework.Infrastructure.Ddd.Services; using Yi.Framework.Module.WebFirstManager.Dtos.Table; -using Yi.Framework.Module.WebFirstManager.Dtos.Template; using Yi.Framework.Module.WebFirstManager.Entities; namespace Yi.Framework.Module.WebFirstManager.Impl diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/TemplateService.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/TemplateService.cs index 1044460a..78c9e126 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/TemplateService.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/TemplateService.cs @@ -1,11 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Furion.DependencyInjection; +using Furion.DependencyInjection; using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; +using SqlSugar; +using Yi.Framework.Infrastructure.Ddd.Dtos; using Yi.Framework.Infrastructure.Ddd.Services; using Yi.Framework.Module.WebFirstManager.Dtos.Template; using Yi.Framework.Module.WebFirstManager.Entities; @@ -15,5 +12,17 @@ namespace Yi.Framework.Module.WebFirstManager.Impl [ApiDescriptionSettings("WebFirstManager")] public class TemplateService : CrudAppService, ITemplateService, IDynamicApiController, ITransient { + public async override Task> GetListAsync([FromQuery] TemplateGetListInput input) + { + RefAsync total = 0; + var entities = await _DbQueryable.WhereIF(input.Name is not null, x => x.Name.Equals(input.Name!)) + .ToPageListAsync(input.PageNum, input.PageSize, total); + + return new PagedResultDto + { + Total = total, + Items = await MapToGetListOutputDtosAsync(entities) + }; + } } } diff --git a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/WebFirstService.cs b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/WebFirstService.cs index d7b92b68..930865e4 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/WebFirstService.cs +++ b/Yi.Furion.Net6/Yi.Framework.Module/WebFirstManager/Impl/WebFirstService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -27,17 +28,17 @@ namespace Yi.Framework.Module.WebFirstManager.Impl { _tableRepository = tableRepository; _codeFileManager = codeFileManager; - _webTemplateManager= webTemplateManager; + _webTemplateManager = webTemplateManager; } /// /// Web To Code /// /// - public async Task PostWebBuildCodeAsync() + public async Task PostWebBuildCodeAsync(List ids) { //获取全部表 - var tables = await _tableRepository.GetListAsync(); + var tables = await _tableRepository._DbQueryable.Where(x => ids.Contains(x.Id)).Includes(x => x.Fields).ToListAsync(); foreach (var table in tables) { await _codeFileManager.BuildWebToCodeAsync(table); @@ -61,7 +62,7 @@ namespace Yi.Framework.Module.WebFirstManager.Impl [UnitOfWork] public async Task PostCodeBuildWebAsync() { - var tableAggregateRoots =await _webTemplateManager.BuildCodeToWebAsync(); + var tableAggregateRoots = await _webTemplateManager.BuildCodeToWebAsync(); //覆盖数据库,将聚合根保存到数据库 _tableRepository._Db.DbMaintenance.TruncateTable(); _tableRepository._Db.DbMaintenance.TruncateTable(); @@ -69,7 +70,7 @@ namespace Yi.Framework.Module.WebFirstManager.Impl //导航插入即可 await _tableRepository._Db.InsertNav(tableAggregateRoots).Include(x => x.Fields).ExecuteCommandAsync(); - + } @@ -80,5 +81,17 @@ namespace Yi.Framework.Module.WebFirstManager.Impl public async Task PostCodeBuildDbAsync() { } + + /// + /// 打开目录 + /// + /// + public async Task PostDir(string path) + { + path = Uri.UnescapeDataString(path); + //去除包含@的目录 + path = string.Join("\\", path.Split("\\").Where(x => !x.Contains("@")).ToList()); + Process.Start("explorer.exe", path); + } } } diff --git a/Yi.Furion.Net6/Yi.Framework.Module/Yi.Framework.Module.xml b/Yi.Furion.Net6/Yi.Framework.Module/Yi.Framework.Module.xml index e11adb10..2c394b0c 100644 --- a/Yi.Furion.Net6/Yi.Framework.Module/Yi.Framework.Module.xml +++ b/Yi.Furion.Net6/Yi.Framework.Module/Yi.Framework.Module.xml @@ -462,6 +462,21 @@ 生成路径 + + + 模板名称 + + + + + 备注 + + + + + 模板名称 + + 字段名称 @@ -512,6 +527,16 @@ 生成路径 + + + 模板名称 + + + + + 备注 + + 生成Fields @@ -529,7 +554,7 @@ - + Web To Code @@ -553,6 +578,12 @@ + + + 打开目录 + + + 获取用户openid diff --git a/Yi.Furion.Net6/Yi.Furion.Core/Rbac/DataSeeds/MenuDataSeed.cs b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/DataSeeds/MenuDataSeed.cs index e6e9a025..36d9f550 100644 --- a/Yi.Furion.Net6/Yi.Furion.Core/Rbac/DataSeeds/MenuDataSeed.cs +++ b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/DataSeeds/MenuDataSeed.cs @@ -73,6 +73,47 @@ namespace Yi.Furion.Core.Rbac.DataSeeds }; entities.Add(table); + //字段管理 + MenuEntity field = new MenuEntity() + { + Id = SnowflakeHelper.NextId, + MenuName = "字段管理", + PermissionCode = "webfirst:field:list", + MenuType = MenuTypeEnum.Menu, + Router = "field", + IsShow = true, + IsLink = false, + IsCache = true, + Component = "webfirst/field/index", + MenuIcon = "number", + OrderNum = 99, + ParentId = webfirst.Id, + IsDeleted = false + }; + entities.Add(field); + + + //模板管理 + MenuEntity template = new MenuEntity() + { + Id = SnowflakeHelper.NextId, + MenuName = "模板管理", + PermissionCode = "webfirst:template:list", + MenuType = MenuTypeEnum.Menu, + Router = "template", + IsShow = true, + IsLink = false, + IsCache = true, + Component = "webfirst/template/index", + MenuIcon = "documentation", + OrderNum = 98, + ParentId = webfirst.Id, + IsDeleted = false + }; + entities.Add(template); + + + diff --git a/Yi.RuoYi.Vue3/src/App.vue b/Yi.RuoYi.Vue3/src/App.vue index a4b9af94..4e575d4c 100644 --- a/Yi.RuoYi.Vue3/src/App.vue +++ b/Yi.RuoYi.Vue3/src/App.vue @@ -7,7 +7,7 @@ import useSettingsStore from '@/store/modules/settings' import { handleThemeStyle } from '@/utils/theme' import useUserStore from '@/store/modules/user' import { storeToRefs } from 'pinia'; -import signalR from '@/utils/signalR' +// import signalR from '@/utils/signalR' const {token}=storeToRefs(useUserStore()); @@ -21,9 +21,8 @@ onMounted(() => { //这里还需要监视token的变化,重新进行signalr连接 watch(()=>token.value,async (newValue,oldValue)=>{ - console.log("重新连接"); // await signalR.close(); - await signalR.start(); + // await signalR.start(); }) diff --git a/Yi.RuoYi.Vue3/src/api/webfirst/templateApi.js b/Yi.RuoYi.Vue3/src/api/webfirst/templateApi.js new file mode 100644 index 00000000..087c290a --- /dev/null +++ b/Yi.RuoYi.Vue3/src/api/webfirst/templateApi.js @@ -0,0 +1,43 @@ +import request from '@/utils/request' +// 分页查询 +export function listData(query) { + return request({ + url: 'template', + method: 'get', + params: query + }) +} + +// id查询 +export function getData(id) { + return request({ + url: `template/${id}`, + method: 'get' + }) +} + +// 新增 +export function addData(data) { + return request({ + url: 'template', + method: 'post', + data: data + }) +} + +// 修改 +export function updateData(id,data) { + return request({ + url: `template/${id}`, + method: 'put', + data: data + }) +} + +// 删除 +export function delData(ids) { + return request({ + url: `template/${ids}`, + method: 'delete', + }) +} diff --git a/Yi.RuoYi.Vue3/src/api/webfirst/webfirstApi.js b/Yi.RuoYi.Vue3/src/api/webfirst/webfirstApi.js new file mode 100644 index 00000000..b982293b --- /dev/null +++ b/Yi.RuoYi.Vue3/src/api/webfirst/webfirstApi.js @@ -0,0 +1,24 @@ +import request from '@/utils/request' +// code to web +export function codeToWeb() { + return request({ + url: 'web-first/code-build-web', + method: 'post' + }) +} +// code to web +export function webToCode(ids) { + return request({ + url: 'web-first/web-build-code', + method: 'post', + data:ids + }) +} + +// open zhe path +export function openPath(path) { + return request({ + url: `web-first/dir/${encodeURIComponent(path)}`, + method: 'post' + }) +} diff --git a/Yi.RuoYi.Vue3/src/main.js b/Yi.RuoYi.Vue3/src/main.js index 8d35b53c..f1a19463 100644 --- a/Yi.RuoYi.Vue3/src/main.js +++ b/Yi.RuoYi.Vue3/src/main.js @@ -21,7 +21,7 @@ import { download } from '@/utils/ruoyi.js' import 'virtual:svg-icons-register' import SvgIcon from '@/components/SvgIcon' import elementIcons from '@/components/SvgIcon/svgicon' -import signalR from '@/utils/signalR' +// import signalR from '@/utils/signalR' import './permission' // permission control @@ -80,7 +80,7 @@ app.use(ElementPlus, { }) // app.prototype.signalr = signalR -signalR.init(`${import.meta.env.VITE_APP_BASE_WS}/hub/main`); +// signalR.init(`${import.meta.env.VITE_APP_BASE_WS}/hub/main`); // signalR.start(); app.mount('#app') diff --git a/Yi.RuoYi.Vue3/src/views/template.vue b/Yi.RuoYi.Vue3/src/views/template.vue index 6205a240..78b91f1b 100644 --- a/Yi.RuoYi.Vue3/src/views/template.vue +++ b/Yi.RuoYi.Vue3/src/views/template.vue @@ -103,9 +103,9 @@ @@ -155,7 +155,7 @@ import { delData, addData, updateData, -} from "@/api/@model@"; +} from "@/api/@api@"; import { ref } from "@vue/reactivity"; diff --git a/Yi.RuoYi.Vue3/src/views/webfirst/fileld/components/FieldList.vue b/Yi.RuoYi.Vue3/src/views/webfirst/field/components/FieldList.vue similarity index 100% rename from Yi.RuoYi.Vue3/src/views/webfirst/fileld/components/FieldList.vue rename to Yi.RuoYi.Vue3/src/views/webfirst/field/components/FieldList.vue diff --git a/Yi.RuoYi.Vue3/src/views/webfirst/fileld/components/TableList.vue b/Yi.RuoYi.Vue3/src/views/webfirst/field/components/TableList.vue similarity index 100% rename from Yi.RuoYi.Vue3/src/views/webfirst/fileld/components/TableList.vue rename to Yi.RuoYi.Vue3/src/views/webfirst/field/components/TableList.vue diff --git a/Yi.RuoYi.Vue3/src/views/webfirst/fileld/hooks/useTable.js b/Yi.RuoYi.Vue3/src/views/webfirst/field/hooks/useTable.js similarity index 100% rename from Yi.RuoYi.Vue3/src/views/webfirst/fileld/hooks/useTable.js rename to Yi.RuoYi.Vue3/src/views/webfirst/field/hooks/useTable.js diff --git a/Yi.RuoYi.Vue3/src/views/webfirst/fileld/index.vue b/Yi.RuoYi.Vue3/src/views/webfirst/field/index.vue similarity index 100% rename from Yi.RuoYi.Vue3/src/views/webfirst/fileld/index.vue rename to Yi.RuoYi.Vue3/src/views/webfirst/field/index.vue diff --git a/Yi.RuoYi.Vue3/src/views/webfirst/table/index.vue b/Yi.RuoYi.Vue3/src/views/webfirst/table/index.vue index aa94a672..e000b0b9 100644 --- a/Yi.RuoYi.Vue3/src/views/webfirst/table/index.vue +++ b/Yi.RuoYi.Vue3/src/views/webfirst/table/index.vue @@ -1,16 +1,27 @@ - - + \ No newline at end of file + diff --git a/Yi.RuoYi.Vue3/src/views/webfirst/template/components/ReplaceText.vue b/Yi.RuoYi.Vue3/src/views/webfirst/template/components/ReplaceText.vue new file mode 100644 index 00000000..68962006 --- /dev/null +++ b/Yi.RuoYi.Vue3/src/views/webfirst/template/components/ReplaceText.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/Yi.RuoYi.Vue3/src/views/webfirst/template/components/TempalteTip.vue b/Yi.RuoYi.Vue3/src/views/webfirst/template/components/TempalteTip.vue new file mode 100644 index 00000000..73970001 --- /dev/null +++ b/Yi.RuoYi.Vue3/src/views/webfirst/template/components/TempalteTip.vue @@ -0,0 +1,36 @@ + + + \ No newline at end of file diff --git a/Yi.RuoYi.Vue3/src/views/webfirst/template/index.vue b/Yi.RuoYi.Vue3/src/views/webfirst/template/index.vue new file mode 100644 index 00000000..026119b2 --- /dev/null +++ b/Yi.RuoYi.Vue3/src/views/webfirst/template/index.vue @@ -0,0 +1,377 @@ + + + diff --git a/Yi.RuoYi.Vue3/临时 copy.json b/Yi.RuoYi.Vue3/临时 copy.json deleted file mode 100644 index f8d42b7c..00000000 --- a/Yi.RuoYi.Vue3/临时 copy.json +++ /dev/null @@ -1,440 +0,0 @@ -[ - { - "id": 1621797307555123200, - "parentId": 0, - "orderNum": 100, - "name": "System", - "path": "/system", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": true, - "meta": { - "title": "系统管理", - "icon": "system", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317541, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "User", - "path": "user", - "hidden": false, - "redirect": "noRedirect", - "component": "system/user/index", - "alwaysShow": false, - "meta": { - "title": "用户管理", - "icon": "user", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317546, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Role", - "path": "role", - "hidden": false, - "redirect": "noRedirect", - "component": "system/role/index", - "alwaysShow": false, - "meta": { - "title": "角色管理", - "icon": "peoples", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317551, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Menu", - "path": "menu", - "hidden": false, - "redirect": "noRedirect", - "component": "system/menu/index", - "alwaysShow": false, - "meta": { - "title": "菜单管理", - "icon": "tree-table", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317556, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Dept", - "path": "dept", - "hidden": false, - "redirect": "noRedirect", - "component": "system/dept/index", - "alwaysShow": false, - "meta": { - "title": "部门管理", - "icon": "tree", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317561, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Post", - "path": "post", - "hidden": false, - "redirect": "noRedirect", - "component": "system/post/index", - "alwaysShow": false, - "meta": { - "title": "岗位管理", - "icon": "post", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317566, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Dict", - "path": "dict", - "hidden": false, - "redirect": "noRedirect", - "component": "system/dict/index", - "alwaysShow": false, - "meta": { - "title": "字典管理", - "icon": "dict", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317571, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Config", - "path": "config", - "hidden": false, - "redirect": "noRedirect", - "component": "system/config/index", - "alwaysShow": false, - "meta": { - "title": "参数设置", - "icon": "edit", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317576, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Log", - "path": "log", - "hidden": false, - "redirect": "noRedirect", - "component": "ParentView", - "alwaysShow": true, - "meta": { - "title": "日志管理", - "icon": "log", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317577, - "parentId": 1621797307559317576, - "orderNum": 100, - "name": "Operlog", - "path": "operlog", - "hidden": false, - "redirect": "noRedirect", - "component": "monitor/operlog/index", - "alwaysShow": false, - "meta": { - "title": "操作日志", - "icon": "form", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317580, - "parentId": 1621797307559317576, - "orderNum": 100, - "name": "Logininfor", - "path": "logininfor", - "hidden": false, - "redirect": "noRedirect", - "component": "monitor/logininfor/index", - "alwaysShow": false, - "meta": { - "title": "登录日志", - "icon": "logininfor", - "noCache": false, - "link": "" - }, - "children": null - } - ] - } - ] - }, - { - "id": 1621797307559317504, - "parentId": 0, - "orderNum": 99, - "name": "Monitor", - "path": "/monitor", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": true, - "meta": { - "title": "系统监控", - "icon": "monitor", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317505, - "parentId": 1621797307559317504, - "orderNum": 100, - "name": "Online", - "path": "online", - "hidden": false, - "redirect": "noRedirect", - "component": "monitor/online/index", - "alwaysShow": false, - "meta": { - "title": "在线用户", - "icon": "online", - "noCache": false, - "link": "" - }, - "children": null - } - ] - }, - { - "id": 1621797307559317506, - "parentId": 0, - "orderNum": 98, - "name": "Tool", - "path": "/tool", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": true, - "meta": { - "title": "系统工具", - "icon": "tool", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317507, - "parentId": 1621797307559317506, - "orderNum": 100, - "name": "Localhost:19001", - "path": "http://localhost:19001", - "hidden": false, - "redirect": "noRedirect", - "component": null, - "alwaysShow": false, - "meta": { - "title": "接口文档", - "icon": "list", - "noCache": true, - "link": "http://localhost:19001" - }, - "children": null - } - ] - }, - { - "id": 1621797307559317508, - "parentId": 0, - "orderNum": 97, - "name": "S", - "path": "s", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": true, - "meta": { - "title": "BBS", - "icon": "international", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317509, - "parentId": 1621797307559317508, - "orderNum": 100, - "name": "Article", - "path": "article", - "hidden": false, - "redirect": "noRedirect", - "component": "bbs/article/index", - "alwaysShow": false, - "meta": { - "title": "文章管理", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - } - ] - }, - { - "id": 1621797307559317514, - "parentId": 0, - "orderNum": 96, - "name": "Erp", - "path": "/erp", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": true, - "meta": { - "title": "ERP", - "icon": "international", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317515, - "parentId": 1621797307559317514, - "orderNum": 100, - "name": "Supplier", - "path": "supplier", - "hidden": false, - "redirect": "noRedirect", - "component": "erp/supplier/index", - "alwaysShow": false, - "meta": { - "title": "供应商定义", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317520, - "parentId": 1621797307559317514, - "orderNum": 100, - "name": "Warehouse", - "path": "warehouse", - "hidden": false, - "redirect": "noRedirect", - "component": "erp/warehouse/index", - "alwaysShow": false, - "meta": { - "title": "仓库定义", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317525, - "parentId": 1621797307559317514, - "orderNum": 100, - "name": "Unit", - "path": "unit", - "hidden": false, - "redirect": "noRedirect", - "component": "erp/unit/index", - "alwaysShow": false, - "meta": { - "title": "单位定义", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317530, - "parentId": 1621797307559317514, - "orderNum": 100, - "name": "Material", - "path": "material", - "hidden": false, - "redirect": "noRedirect", - "component": "erp/material/index", - "alwaysShow": false, - "meta": { - "title": "物料定义", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317535, - "parentId": 1621797307559317514, - "orderNum": 100, - "name": "Purchase", - "path": "purchase", - "hidden": false, - "redirect": "noRedirect", - "component": "erp/purchase/index", - "alwaysShow": false, - "meta": { - "title": "采购订单", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - } - ] - }, - { - "id": 1621797307559317540, - "parentId": 0, - "orderNum": 90, - "name": "Yi", - "path": "https://gitee.com/ccnetcore/yi", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": false, - "meta": { - "title": "Yi框架", - "icon": "guide", - "noCache": true, - "link": "https://gitee.com/ccnetcore/yi" - }, - "children": null - } -] \ No newline at end of file diff --git a/Yi.RuoYi.Vue3/临时.json b/Yi.RuoYi.Vue3/临时.json deleted file mode 100644 index f8d42b7c..00000000 --- a/Yi.RuoYi.Vue3/临时.json +++ /dev/null @@ -1,440 +0,0 @@ -[ - { - "id": 1621797307555123200, - "parentId": 0, - "orderNum": 100, - "name": "System", - "path": "/system", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": true, - "meta": { - "title": "系统管理", - "icon": "system", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317541, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "User", - "path": "user", - "hidden": false, - "redirect": "noRedirect", - "component": "system/user/index", - "alwaysShow": false, - "meta": { - "title": "用户管理", - "icon": "user", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317546, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Role", - "path": "role", - "hidden": false, - "redirect": "noRedirect", - "component": "system/role/index", - "alwaysShow": false, - "meta": { - "title": "角色管理", - "icon": "peoples", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317551, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Menu", - "path": "menu", - "hidden": false, - "redirect": "noRedirect", - "component": "system/menu/index", - "alwaysShow": false, - "meta": { - "title": "菜单管理", - "icon": "tree-table", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317556, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Dept", - "path": "dept", - "hidden": false, - "redirect": "noRedirect", - "component": "system/dept/index", - "alwaysShow": false, - "meta": { - "title": "部门管理", - "icon": "tree", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317561, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Post", - "path": "post", - "hidden": false, - "redirect": "noRedirect", - "component": "system/post/index", - "alwaysShow": false, - "meta": { - "title": "岗位管理", - "icon": "post", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317566, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Dict", - "path": "dict", - "hidden": false, - "redirect": "noRedirect", - "component": "system/dict/index", - "alwaysShow": false, - "meta": { - "title": "字典管理", - "icon": "dict", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317571, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Config", - "path": "config", - "hidden": false, - "redirect": "noRedirect", - "component": "system/config/index", - "alwaysShow": false, - "meta": { - "title": "参数设置", - "icon": "edit", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317576, - "parentId": 1621797307555123200, - "orderNum": 100, - "name": "Log", - "path": "log", - "hidden": false, - "redirect": "noRedirect", - "component": "ParentView", - "alwaysShow": true, - "meta": { - "title": "日志管理", - "icon": "log", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317577, - "parentId": 1621797307559317576, - "orderNum": 100, - "name": "Operlog", - "path": "operlog", - "hidden": false, - "redirect": "noRedirect", - "component": "monitor/operlog/index", - "alwaysShow": false, - "meta": { - "title": "操作日志", - "icon": "form", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317580, - "parentId": 1621797307559317576, - "orderNum": 100, - "name": "Logininfor", - "path": "logininfor", - "hidden": false, - "redirect": "noRedirect", - "component": "monitor/logininfor/index", - "alwaysShow": false, - "meta": { - "title": "登录日志", - "icon": "logininfor", - "noCache": false, - "link": "" - }, - "children": null - } - ] - } - ] - }, - { - "id": 1621797307559317504, - "parentId": 0, - "orderNum": 99, - "name": "Monitor", - "path": "/monitor", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": true, - "meta": { - "title": "系统监控", - "icon": "monitor", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317505, - "parentId": 1621797307559317504, - "orderNum": 100, - "name": "Online", - "path": "online", - "hidden": false, - "redirect": "noRedirect", - "component": "monitor/online/index", - "alwaysShow": false, - "meta": { - "title": "在线用户", - "icon": "online", - "noCache": false, - "link": "" - }, - "children": null - } - ] - }, - { - "id": 1621797307559317506, - "parentId": 0, - "orderNum": 98, - "name": "Tool", - "path": "/tool", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": true, - "meta": { - "title": "系统工具", - "icon": "tool", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317507, - "parentId": 1621797307559317506, - "orderNum": 100, - "name": "Localhost:19001", - "path": "http://localhost:19001", - "hidden": false, - "redirect": "noRedirect", - "component": null, - "alwaysShow": false, - "meta": { - "title": "接口文档", - "icon": "list", - "noCache": true, - "link": "http://localhost:19001" - }, - "children": null - } - ] - }, - { - "id": 1621797307559317508, - "parentId": 0, - "orderNum": 97, - "name": "S", - "path": "s", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": true, - "meta": { - "title": "BBS", - "icon": "international", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317509, - "parentId": 1621797307559317508, - "orderNum": 100, - "name": "Article", - "path": "article", - "hidden": false, - "redirect": "noRedirect", - "component": "bbs/article/index", - "alwaysShow": false, - "meta": { - "title": "文章管理", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - } - ] - }, - { - "id": 1621797307559317514, - "parentId": 0, - "orderNum": 96, - "name": "Erp", - "path": "/erp", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": true, - "meta": { - "title": "ERP", - "icon": "international", - "noCache": true, - "link": "" - }, - "children": [ - { - "id": 1621797307559317515, - "parentId": 1621797307559317514, - "orderNum": 100, - "name": "Supplier", - "path": "supplier", - "hidden": false, - "redirect": "noRedirect", - "component": "erp/supplier/index", - "alwaysShow": false, - "meta": { - "title": "供应商定义", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317520, - "parentId": 1621797307559317514, - "orderNum": 100, - "name": "Warehouse", - "path": "warehouse", - "hidden": false, - "redirect": "noRedirect", - "component": "erp/warehouse/index", - "alwaysShow": false, - "meta": { - "title": "仓库定义", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317525, - "parentId": 1621797307559317514, - "orderNum": 100, - "name": "Unit", - "path": "unit", - "hidden": false, - "redirect": "noRedirect", - "component": "erp/unit/index", - "alwaysShow": false, - "meta": { - "title": "单位定义", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317530, - "parentId": 1621797307559317514, - "orderNum": 100, - "name": "Material", - "path": "material", - "hidden": false, - "redirect": "noRedirect", - "component": "erp/material/index", - "alwaysShow": false, - "meta": { - "title": "物料定义", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - }, - { - "id": 1621797307559317535, - "parentId": 1621797307559317514, - "orderNum": 100, - "name": "Purchase", - "path": "purchase", - "hidden": false, - "redirect": "noRedirect", - "component": "erp/purchase/index", - "alwaysShow": false, - "meta": { - "title": "采购订单", - "icon": "education", - "noCache": false, - "link": "" - }, - "children": null - } - ] - }, - { - "id": 1621797307559317540, - "parentId": 0, - "orderNum": 90, - "name": "Yi", - "path": "https://gitee.com/ccnetcore/yi", - "hidden": false, - "redirect": "noRedirect", - "component": "Layout", - "alwaysShow": false, - "meta": { - "title": "Yi框架", - "icon": "guide", - "noCache": true, - "link": "https://gitee.com/ccnetcore/yi" - }, - "children": null - } -] \ No newline at end of file