NewLife/YuQue

新增Html规则表,调整命名空间
大石头 authored at 2022-04-13 22:44:13
04bf402
Tree
1 Parent(s) 7c09e44
Summary: 32 changed files with 708 additions and 63 deletions.
Modified +3 -3
Modified +2 -2
Modified +1 -1
Modified +1 -1
Modified +1 -1
Modified +1 -2
Added +177 -0
Added +282 -0
Modified +22 -1
Added +11 -0
Modified +171 -0
Modified +10 -24
Modified +2 -2
Modified +1 -1
Modified +2 -2
Modified +1 -1
Modified +2 -2
Modified +1 -1
Modified +1 -1
Modified +2 -2
Modified +1 -1
Modified +1 -1
Modified +1 -1
Modified +1 -1
Modified +2 -2
Modified +1 -1
Modified +1 -1
Modified +2 -4
Modified +1 -1
Modified +1 -1
Modified +1 -1
Modified +1 -1
Modified +3 -3
diff --git a/.github/workflows/publish-beta.yml b/.github/workflows/publish-beta.yml
index 38a3c13..efa0538 100644
--- a/.github/workflows/publish-beta.yml
+++ b/.github/workflows/publish-beta.yml
@@ -4,7 +4,7 @@ on:
   push:
     branches: [ master ]
     paths:
-        - 'NewLife.YuQue/**'
+        - 'NewLife.Yuque/**'
   workflow_dispatch:
 
 jobs:
@@ -20,10 +20,10 @@ jobs:
         dotnet-version: 6.0.x
     - name: Restore
       run: |
-        dotnet restore NewLife.YuQue/NewLife.YuQue.csproj
+        dotnet restore NewLife.Yuque/NewLife.Yuque.csproj
     - name: Build
       run: |
-        dotnet pack --no-restore --version-suffix $(date "+%Y.%m%d-beta%H%M") -c Release -o out NewLife.YuQue/NewLife.YuQue.csproj
+        dotnet pack --no-restore --version-suffix $(date "+%Y.%m%d-beta%H%M") -c Release -o out NewLife.Yuque/NewLife.Yuque.csproj
     - name: Publish
       run: |
         # dotnet nuget push ./out/*.nupkg --skip-duplicate --source https://nuget.pkg.github.com/NewLifeX/index.json --api-key ${{ github.token }}
Modified +2 -2
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index e45e6b5..c95707c 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -18,10 +18,10 @@ jobs:
         dotnet-version: 6.0.x
     - name: Restore
       run: |
-        dotnet restore NewLife.YuQue/NewLife.YuQue.csproj
+        dotnet restore NewLife.Yuque/NewLife.Yuque.csproj
     - name: Build
       run: |
-        dotnet pack --no-restore --version-suffix $(date "+%Y.%m%d") -c Release -o out NewLife.YuQue/NewLife.YuQue.csproj
+        dotnet pack --no-restore --version-suffix $(date "+%Y.%m%d") -c Release -o out NewLife.Yuque/NewLife.Yuque.csproj
     - name: Publish
       run: |
         # dotnet nuget push ./out/*.nupkg --skip-duplicate --source https://nuget.pkg.github.com/NewLifeX/index.json --api-key ${{ github.token }}
Modified +1 -1
diff --git a/NewLife.YuqueWeb/Areas/Yuque/Controllers/BookController.cs b/NewLife.YuqueWeb/Areas/Yuque/Controllers/BookController.cs
index 960b1b5..6d0b673 100644
--- a/NewLife.YuqueWeb/Areas/Yuque/Controllers/BookController.cs
+++ b/NewLife.YuqueWeb/Areas/Yuque/Controllers/BookController.cs
@@ -1,8 +1,8 @@
 using Microsoft.AspNetCore.Mvc;
 using NewLife.Cube;
 using NewLife.Web;
+using NewLife.YuqueWeb.Entity;
 using NewLife.YuqueWeb.Services;
-using NewLife.YuQueWeb.Entity;
 using XCode.Membership;
 
 namespace NewLife.YuqueWeb.Areas.Yuque.Controllers
Modified +1 -1
diff --git a/NewLife.YuqueWeb/Areas/Yuque/Controllers/DocumentController.cs b/NewLife.YuqueWeb/Areas/Yuque/Controllers/DocumentController.cs
index de1b232..068c6dd 100644
--- a/NewLife.YuqueWeb/Areas/Yuque/Controllers/DocumentController.cs
+++ b/NewLife.YuqueWeb/Areas/Yuque/Controllers/DocumentController.cs
@@ -1,7 +1,7 @@
 using NewLife.Cube;
 using NewLife.Cube.ViewModels;
 using NewLife.Web;
-using NewLife.YuQueWeb.Entity;
+using NewLife.YuqueWeb.Entity;
 using XCode.Membership;
 
 namespace NewLife.YuqueWeb.Areas.Yuque.Controllers
Modified +1 -1
diff --git a/NewLife.YuqueWeb/Areas/Yuque/Controllers/NavController.cs b/NewLife.YuqueWeb/Areas/Yuque/Controllers/NavController.cs
index c6722fb..8dfd7ef 100644
--- a/NewLife.YuqueWeb/Areas/Yuque/Controllers/NavController.cs
+++ b/NewLife.YuqueWeb/Areas/Yuque/Controllers/NavController.cs
@@ -1,6 +1,6 @@
 using NewLife.Cube;
 using NewLife.Web;
-using NewLife.YuQueWeb.Entity;
+using NewLife.YuqueWeb.Entity;
 using XCode.Membership;
 
 namespace NewLife.YuqueWeb.Areas.Yuque.Controllers
Modified +1 -2
diff --git a/NewLife.YuqueWeb/Controllers/YuqueController.cs b/NewLife.YuqueWeb/Controllers/YuqueController.cs
index 9cd4946..ed5485a 100644
--- a/NewLife.YuqueWeb/Controllers/YuqueController.cs
+++ b/NewLife.YuqueWeb/Controllers/YuqueController.cs
@@ -3,11 +3,10 @@ using Microsoft.AspNetCore.Mvc;
 using NewLife.Collections;
 using NewLife.Common;
 using NewLife.Cube.Entity;
-using NewLife.Log;
 using NewLife.Web;
+using NewLife.YuqueWeb.Entity;
 using NewLife.YuqueWeb.Models;
 using NewLife.YuqueWeb.Services;
-using NewLife.YuQueWeb.Entity;
 using XCode;
 
 namespace NewLife.YuqueWeb.Controllers
Added +177 -0
diff --git "a/NewLife.YuqueWeb/Entity/Html\350\247\204\345\210\231.Biz.cs" "b/NewLife.YuqueWeb/Entity/Html\350\247\204\345\210\231.Biz.cs"
new file mode 100644
index 0000000..dbdafb8
--- /dev/null
+++ "b/NewLife.YuqueWeb/Entity/Html\350\247\204\345\210\231.Biz.cs"
@@ -0,0 +1,177 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web;
+using System.Web.Script.Serialization;
+using System.Xml.Serialization;
+using NewLife;
+using NewLife.Data;
+using NewLife.Log;
+using NewLife.Model;
+using NewLife.Reflection;
+using NewLife.Threading;
+using NewLife.Web;
+using XCode;
+using XCode.Cache;
+using XCode.Configuration;
+using XCode.DataAccessLayer;
+using XCode.Membership;
+using XCode.Shards;
+
+namespace NewLife.YuqueWeb.Entity
+{
+    /// <summary>Html规则。用于替换Html中的连接或字符串</summary>
+    public partial class HtmlRule : Entity<HtmlRule>
+    {
+        #region 对象操作
+        static HtmlRule()
+        {
+            // 累加字段,生成 Update xx Set Count=Count+1234 Where xxx
+            //var df = Meta.Factory.AdditionalFields;
+            //df.Add(nameof(Kind));
+
+            // 过滤器 UserModule、TimeModule、IPModule
+            Meta.Modules.Add<UserModule>();
+            Meta.Modules.Add<TimeModule>();
+            Meta.Modules.Add<IPModule>();
+        }
+
+        /// <summary>验证并修补数据,通过抛出异常的方式提示验证失败。</summary>
+        /// <param name="isNew">是否插入</param>
+        public override void Valid(Boolean isNew)
+        {
+            // 如果没有脏数据,则不需要进行任何处理
+            if (!HasDirty) return;
+
+            // 建议先调用基类方法,基类方法会做一些统一处理
+            base.Valid(isNew);
+
+            // 在新插入数据或者修改了指定字段时进行修正
+            // 处理当前已登录用户信息,可以由UserModule过滤器代劳
+            /*var user = ManageProvider.User;
+            if (user != null)
+            {
+                if (isNew && !Dirtys[nameof(CreateUserID)]) CreateUserID = user.ID;
+                if (!Dirtys[nameof(UpdateUserID)]) UpdateUserID = user.ID;
+            }*/
+            //if (isNew && !Dirtys[nameof(CreateTime)]) CreateTime = DateTime.Now;
+            //if (!Dirtys[nameof(UpdateTime)]) UpdateTime = DateTime.Now;
+            //if (isNew && !Dirtys[nameof(CreateIP)]) CreateIP = ManageProvider.UserHost;
+            //if (!Dirtys[nameof(UpdateIP)]) UpdateIP = ManageProvider.UserHost;
+        }
+
+        ///// <summary>首次连接数据库时初始化数据,仅用于实体类重载,用户不应该调用该方法</summary>
+        //[EditorBrowsable(EditorBrowsableState.Never)]
+        //protected override void InitData()
+        //{
+        //    // InitData一般用于当数据表没有数据时添加一些默认数据,该实体类的任何第一次数据库操作都会触发该方法,默认异步调用
+        //    if (Meta.Session.Count > 0) return;
+
+        //    if (XTrace.Debug) XTrace.WriteLine("开始初始化HtmlRule[Html规则]数据……");
+
+        //    var entity = new HtmlRule();
+        //    entity.Kind = 0;
+        //    entity.Rule = "abc";
+        //    entity.Target = "abc";
+        //    entity.Enable = true;
+        //    entity.CreateUser = "abc";
+        //    entity.CreateUserID = 0;
+        //    entity.CreateTime = DateTime.Now;
+        //    entity.CreateIP = "abc";
+        //    entity.UpdateUser = "abc";
+        //    entity.UpdateUserID = 0;
+        //    entity.UpdateTime = DateTime.Now;
+        //    entity.UpdateIP = "abc";
+        //    entity.Remark = "abc";
+        //    entity.Insert();
+
+        //    if (XTrace.Debug) XTrace.WriteLine("完成初始化HtmlRule[Html规则]数据!");
+        //}
+
+        ///// <summary>已重载。基类先调用Valid(true)验证数据,然后在事务保护内调用OnInsert</summary>
+        ///// <returns></returns>
+        //public override Int32 Insert()
+        //{
+        //    return base.Insert();
+        //}
+
+        ///// <summary>已重载。在事务保护范围内处理业务,位于Valid之后</summary>
+        ///// <returns></returns>
+        //protected override Int32 OnDelete()
+        //{
+        //    return base.OnDelete();
+        //}
+        #endregion
+
+        #region 扩展属性
+        #endregion
+
+        #region 扩展查询
+        /// <summary>根据编号查找</summary>
+        /// <param name="id">编号</param>
+        /// <returns>实体对象</returns>
+        public static HtmlRule FindById(Int32 id)
+        {
+            if (id <= 0) return null;
+
+            // 实体缓存
+            if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.Id == id);
+
+            // 单对象缓存
+            return Meta.SingleCache[id];
+
+            //return Find(_.Id == id);
+        }
+
+        /// <summary>根据种类查找</summary>
+        /// <param name="kind">种类</param>
+        /// <returns>实体列表</returns>
+        public static IList<HtmlRule> FindAllByKind(RuleKinds kind)
+        {
+            // 实体缓存
+            if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.Kind == kind);
+
+            return FindAll(_.Kind == kind);
+        }
+        #endregion
+
+        #region 高级查询
+        /// <summary>高级查询</summary>
+        /// <param name="kind">种类。图片、链接、文本</param>
+        /// <param name="start">更新时间开始</param>
+        /// <param name="end">更新时间结束</param>
+        /// <param name="key">关键字</param>
+        /// <param name="page">分页参数信息。可携带统计和数据权限扩展查询等信息</param>
+        /// <returns>实体列表</returns>
+        public static IList<HtmlRule> Search(Int32 kind, DateTime start, DateTime end, String key, PageParameter page)
+        {
+            var exp = new WhereExpression();
+
+            if (kind >= 0) exp &= _.Kind == kind;
+            exp &= _.UpdateTime.Between(start, end);
+            if (!key.IsNullOrEmpty()) exp &= _.Rule.Contains(key) | _.Target.Contains(key) | _.CreateUser.Contains(key) | _.CreateIP.Contains(key) | _.UpdateUser.Contains(key) | _.UpdateIP.Contains(key) | _.Remark.Contains(key);
+
+            return FindAll(exp, page);
+        }
+
+        // Select Count(Id) as Id,Category From HtmlRule Where CreateTime>'2020-01-24 00:00:00' Group By Category Order By Id Desc limit 20
+        //static readonly FieldCache<HtmlRule> _CategoryCache = new FieldCache<HtmlRule>(nameof(Category))
+        //{
+        //Where = _.CreateTime > DateTime.Today.AddDays(-30) & Expression.Empty
+        //};
+
+        ///// <summary>获取类别列表,字段缓存10分钟,分组统计数据最多的前20种,用于魔方前台下拉选择</summary>
+        ///// <returns></returns>
+        //public static IDictionary<String, String> GetCategoryList() => _CategoryCache.FindAllName();
+        #endregion
+
+        #region 业务操作
+        #endregion
+    }
+}
\ No newline at end of file
Added +282 -0
diff --git "a/NewLife.YuqueWeb/Entity/Html\350\247\204\345\210\231.cs" "b/NewLife.YuqueWeb/Entity/Html\350\247\204\345\210\231.cs"
new file mode 100644
index 0000000..4511995
--- /dev/null
+++ "b/NewLife.YuqueWeb/Entity/Html\350\247\204\345\210\231.cs"
@@ -0,0 +1,282 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Runtime.Serialization;
+using System.Web.Script.Serialization;
+using System.Xml.Serialization;
+using XCode;
+using XCode.Configuration;
+using XCode.DataAccessLayer;
+
+namespace NewLife.YuqueWeb.Entity
+{
+    /// <summary>Html规则。用于替换Html中的连接或字符串</summary>
+    [Serializable]
+    [DataObject]
+    [Description("Html规则。用于替换Html中的连接或字符串")]
+    [BindIndex("IX_HtmlRule_Kind", false, "Kind")]
+    [BindTable("HtmlRule", Description = "Html规则。用于替换Html中的连接或字符串", ConnName = "Yuque", DbType = DatabaseType.None)]
+    public partial class HtmlRule
+    {
+        #region 属性
+        private Int32 _Id;
+        /// <summary>编号</summary>
+        [DisplayName("编号")]
+        [Description("编号")]
+        [DataObjectField(true, true, false, 0)]
+        [BindColumn("Id", "编号", "")]
+        public Int32 Id { get => _Id; set { if (OnPropertyChanging("Id", value)) { _Id = value; OnPropertyChanged("Id"); } } }
+
+        private RuleKinds _Kind;
+        /// <summary>种类。图片、链接、文本</summary>
+        [DisplayName("种类")]
+        [Description("种类。图片、链接、文本")]
+        [DataObjectField(false, false, false, 0)]
+        [BindColumn("Kind", "种类。图片、链接、文本", "")]
+        public RuleKinds Kind { get => _Kind; set { if (OnPropertyChanging("Kind", value)) { _Kind = value; OnPropertyChanged("Kind"); } } }
+
+        private String _Rule;
+        /// <summary>规则</summary>
+        [DisplayName("规则")]
+        [Description("规则")]
+        [DataObjectField(false, false, true, 50)]
+        [BindColumn("Rule", "规则", "", Master = true)]
+        public String Rule { get => _Rule; set { if (OnPropertyChanging("Rule", value)) { _Rule = value; OnPropertyChanged("Rule"); } } }
+
+        private String _Target;
+        /// <summary>目标</summary>
+        [DisplayName("目标")]
+        [Description("目标")]
+        [DataObjectField(false, false, true, 50)]
+        [BindColumn("Target", "目标", "")]
+        public String Target { get => _Target; set { if (OnPropertyChanging("Target", value)) { _Target = value; OnPropertyChanged("Target"); } } }
+
+        private Boolean _Enable;
+        /// <summary>启用</summary>
+        [DisplayName("启用")]
+        [Description("启用")]
+        [DataObjectField(false, false, false, 0)]
+        [BindColumn("Enable", "启用", "")]
+        public Boolean Enable { get => _Enable; set { if (OnPropertyChanging("Enable", value)) { _Enable = value; OnPropertyChanged("Enable"); } } }
+
+        private String _CreateUser;
+        /// <summary>创建人</summary>
+        [DisplayName("创建人")]
+        [Description("创建人")]
+        [DataObjectField(false, false, true, 50)]
+        [BindColumn("CreateUser", "创建人", "")]
+        public String CreateUser { get => _CreateUser; set { if (OnPropertyChanging("CreateUser", value)) { _CreateUser = value; OnPropertyChanged("CreateUser"); } } }
+
+        private Int32 _CreateUserID;
+        /// <summary>创建者</summary>
+        [DisplayName("创建者")]
+        [Description("创建者")]
+        [DataObjectField(false, false, false, 0)]
+        [BindColumn("CreateUserID", "创建者", "")]
+        public Int32 CreateUserID { get => _CreateUserID; set { if (OnPropertyChanging("CreateUserID", value)) { _CreateUserID = value; OnPropertyChanged("CreateUserID"); } } }
+
+        private DateTime _CreateTime;
+        /// <summary>创建时间</summary>
+        [DisplayName("创建时间")]
+        [Description("创建时间")]
+        [DataObjectField(false, false, true, 0)]
+        [BindColumn("CreateTime", "创建时间", "")]
+        public DateTime CreateTime { get => _CreateTime; set { if (OnPropertyChanging("CreateTime", value)) { _CreateTime = value; OnPropertyChanged("CreateTime"); } } }
+
+        private String _CreateIP;
+        /// <summary>创建地址</summary>
+        [DisplayName("创建地址")]
+        [Description("创建地址")]
+        [DataObjectField(false, false, true, 50)]
+        [BindColumn("CreateIP", "创建地址", "")]
+        public String CreateIP { get => _CreateIP; set { if (OnPropertyChanging("CreateIP", value)) { _CreateIP = value; OnPropertyChanged("CreateIP"); } } }
+
+        private String _UpdateUser;
+        /// <summary>更新人</summary>
+        [DisplayName("更新人")]
+        [Description("更新人")]
+        [DataObjectField(false, false, true, 50)]
+        [BindColumn("UpdateUser", "更新人", "")]
+        public String UpdateUser { get => _UpdateUser; set { if (OnPropertyChanging("UpdateUser", value)) { _UpdateUser = value; OnPropertyChanged("UpdateUser"); } } }
+
+        private Int32 _UpdateUserID;
+        /// <summary>更新者</summary>
+        [DisplayName("更新者")]
+        [Description("更新者")]
+        [DataObjectField(false, false, false, 0)]
+        [BindColumn("UpdateUserID", "更新者", "")]
+        public Int32 UpdateUserID { get => _UpdateUserID; set { if (OnPropertyChanging("UpdateUserID", value)) { _UpdateUserID = value; OnPropertyChanged("UpdateUserID"); } } }
+
+        private DateTime _UpdateTime;
+        /// <summary>更新时间</summary>
+        [DisplayName("更新时间")]
+        [Description("更新时间")]
+        [DataObjectField(false, false, true, 0)]
+        [BindColumn("UpdateTime", "更新时间", "")]
+        public DateTime UpdateTime { get => _UpdateTime; set { if (OnPropertyChanging("UpdateTime", value)) { _UpdateTime = value; OnPropertyChanged("UpdateTime"); } } }
+
+        private String _UpdateIP;
+        /// <summary>更新地址</summary>
+        [DisplayName("更新地址")]
+        [Description("更新地址")]
+        [DataObjectField(false, false, true, 50)]
+        [BindColumn("UpdateIP", "更新地址", "")]
+        public String UpdateIP { get => _UpdateIP; set { if (OnPropertyChanging("UpdateIP", value)) { _UpdateIP = value; OnPropertyChanged("UpdateIP"); } } }
+
+        private String _Remark;
+        /// <summary>备注</summary>
+        [DisplayName("备注")]
+        [Description("备注")]
+        [DataObjectField(false, false, true, 200)]
+        [BindColumn("Remark", "备注", "")]
+        public String Remark { get => _Remark; set { if (OnPropertyChanging("Remark", value)) { _Remark = value; OnPropertyChanged("Remark"); } } }
+        #endregion
+
+        #region 获取/设置 字段值
+        /// <summary>获取/设置 字段值</summary>
+        /// <param name="name">字段名</param>
+        /// <returns></returns>
+        public override Object this[String name]
+        {
+            get
+            {
+                switch (name)
+                {
+                    case "Id": return _Id;
+                    case "Kind": return _Kind;
+                    case "Rule": return _Rule;
+                    case "Target": return _Target;
+                    case "Enable": return _Enable;
+                    case "CreateUser": return _CreateUser;
+                    case "CreateUserID": return _CreateUserID;
+                    case "CreateTime": return _CreateTime;
+                    case "CreateIP": return _CreateIP;
+                    case "UpdateUser": return _UpdateUser;
+                    case "UpdateUserID": return _UpdateUserID;
+                    case "UpdateTime": return _UpdateTime;
+                    case "UpdateIP": return _UpdateIP;
+                    case "Remark": return _Remark;
+                    default: return base[name];
+                }
+            }
+            set
+            {
+                switch (name)
+                {
+                    case "Id": _Id = value.ToInt(); break;
+                    case "Kind": _Kind = (RuleKinds)value.ToInt(); break;
+                    case "Rule": _Rule = Convert.ToString(value); break;
+                    case "Target": _Target = Convert.ToString(value); break;
+                    case "Enable": _Enable = value.ToBoolean(); break;
+                    case "CreateUser": _CreateUser = Convert.ToString(value); break;
+                    case "CreateUserID": _CreateUserID = value.ToInt(); break;
+                    case "CreateTime": _CreateTime = value.ToDateTime(); break;
+                    case "CreateIP": _CreateIP = Convert.ToString(value); break;
+                    case "UpdateUser": _UpdateUser = Convert.ToString(value); break;
+                    case "UpdateUserID": _UpdateUserID = value.ToInt(); break;
+                    case "UpdateTime": _UpdateTime = value.ToDateTime(); break;
+                    case "UpdateIP": _UpdateIP = Convert.ToString(value); break;
+                    case "Remark": _Remark = Convert.ToString(value); break;
+                    default: base[name] = value; break;
+                }
+            }
+        }
+        #endregion
+
+        #region 字段名
+        /// <summary>取得Html规则字段信息的快捷方式</summary>
+        public partial class _
+        {
+            /// <summary>编号</summary>
+            public static readonly Field Id = FindByName("Id");
+
+            /// <summary>种类。图片、链接、文本</summary>
+            public static readonly Field Kind = FindByName("Kind");
+
+            /// <summary>规则</summary>
+            public static readonly Field Rule = FindByName("Rule");
+
+            /// <summary>目标</summary>
+            public static readonly Field Target = FindByName("Target");
+
+            /// <summary>启用</summary>
+            public static readonly Field Enable = FindByName("Enable");
+
+            /// <summary>创建人</summary>
+            public static readonly Field CreateUser = FindByName("CreateUser");
+
+            /// <summary>创建者</summary>
+            public static readonly Field CreateUserID = FindByName("CreateUserID");
+
+            /// <summary>创建时间</summary>
+            public static readonly Field CreateTime = FindByName("CreateTime");
+
+            /// <summary>创建地址</summary>
+            public static readonly Field CreateIP = FindByName("CreateIP");
+
+            /// <summary>更新人</summary>
+            public static readonly Field UpdateUser = FindByName("UpdateUser");
+
+            /// <summary>更新者</summary>
+            public static readonly Field UpdateUserID = FindByName("UpdateUserID");
+
+            /// <summary>更新时间</summary>
+            public static readonly Field UpdateTime = FindByName("UpdateTime");
+
+            /// <summary>更新地址</summary>
+            public static readonly Field UpdateIP = FindByName("UpdateIP");
+
+            /// <summary>备注</summary>
+            public static readonly Field Remark = FindByName("Remark");
+
+            static Field FindByName(String name) => Meta.Table.FindByName(name);
+        }
+
+        /// <summary>取得Html规则字段名称的快捷方式</summary>
+        public partial class __
+        {
+            /// <summary>编号</summary>
+            public const String Id = "Id";
+
+            /// <summary>种类。图片、链接、文本</summary>
+            public const String Kind = "Kind";
+
+            /// <summary>规则</summary>
+            public const String Rule = "Rule";
+
+            /// <summary>目标</summary>
+            public const String Target = "Target";
+
+            /// <summary>启用</summary>
+            public const String Enable = "Enable";
+
+            /// <summary>创建人</summary>
+            public const String CreateUser = "CreateUser";
+
+            /// <summary>创建者</summary>
+            public const String CreateUserID = "CreateUserID";
+
+            /// <summary>创建时间</summary>
+            public const String CreateTime = "CreateTime";
+
+            /// <summary>创建地址</summary>
+            public const String CreateIP = "CreateIP";
+
+            /// <summary>更新人</summary>
+            public const String UpdateUser = "UpdateUser";
+
+            /// <summary>更新者</summary>
+            public const String UpdateUserID = "UpdateUserID";
+
+            /// <summary>更新时间</summary>
+            public const String UpdateTime = "UpdateTime";
+
+            /// <summary>更新地址</summary>
+            public const String UpdateIP = "UpdateIP";
+
+            /// <summary>备注</summary>
+            public const String Remark = "Remark";
+        }
+        #endregion
+    }
+}
\ No newline at end of file
Modified +22 -1
diff --git a/NewLife.YuqueWeb/Entity/Model.xml b/NewLife.YuqueWeb/Entity/Model.xml
index 5d7367d..d15cc88 100644
--- a/NewLife.YuqueWeb/Entity/Model.xml
+++ b/NewLife.YuqueWeb/Entity/Model.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Tables xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://www.newlifex.com http://www.newlifex.com/Model2022.xsd" NameSpace="NewLife.YuQueWeb.Entity" ConnName="YuQue" Output="" BaseClass="Entity" Version="11.0.2022.0405" Document="https://www.yuque.com/smartstone/xcode/model" xmlns="http://www.newlifex.com/Model2022.xsd">
+<Tables xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://www.newlifex.com http://www.newlifex.com/Model2022.xsd" NameSpace="NewLife.YuqueWeb.Entity" ConnName="Yuque" Output="" BaseClass="Entity" Version="11.0.2022.0405" Document="https://www.yuque.com/smartstone/xcode/model" xmlns="http://www.newlifex.com/Model2022.xsd">
   <Table Name="Book" Description="知识库。管理知识库">
     <Columns>
       <Column Name="Id" DataType="Int32" PrimaryKey="True" Description="编号" />
@@ -105,4 +105,25 @@
       <Index Columns="Name" />
     </Indexes>
   </Table>
+  <Table Name="HtmlRule" Description="Html规则。用于替换Html中的连接或字符串">
+    <Columns>
+      <Column Name="Id" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" />
+      <Column Name="Kind" DataType="Int32" Description="种类。图片、链接、文本" Type="RuleKinds" />
+      <Column Name="Rule" DataType="String" Master="True" Description="规则" />
+      <Column Name="Target" DataType="String" Description="目标" />
+      <Column Name="Enable" DataType="Boolean" Description="启用" />
+      <Column Name="CreateUser" DataType="String" Description="创建人" />
+      <Column Name="CreateUserID" DataType="Int32" Description="创建者" />
+      <Column Name="CreateTime" DataType="DateTime" Description="创建时间" />
+      <Column Name="CreateIP" DataType="String" Description="创建地址" />
+      <Column Name="UpdateUser" DataType="String" Description="更新人" />
+      <Column Name="UpdateUserID" DataType="Int32" Description="更新者" />
+      <Column Name="UpdateTime" DataType="DateTime" Description="更新时间" />
+      <Column Name="UpdateIP" DataType="String" Description="更新地址" />
+      <Column Name="Remark" DataType="String" Length="200" Description="备注" />
+    </Columns>
+    <Indexes>
+      <Index Columns="Kind" />
+    </Indexes>
+  </Table>
 </Tables>
\ No newline at end of file
Added +11 -0
diff --git a/NewLife.YuqueWeb/Entity/RuleKinds.cs b/NewLife.YuqueWeb/Entity/RuleKinds.cs
new file mode 100644
index 0000000..0d34f71
--- /dev/null
+++ b/NewLife.YuqueWeb/Entity/RuleKinds.cs
@@ -0,0 +1,11 @@
+namespace NewLife.YuqueWeb.Entity
+{
+    public enum RuleKinds
+    {
+        图片 = 1,
+
+        超链接,
+
+        文本,
+    }
+}
\ No newline at end of file
Modified +171 -0
diff --git a/NewLife.YuqueWeb/Entity/YuQue.htm b/NewLife.YuqueWeb/Entity/YuQue.htm
index 1cee3dd..3c98a09 100644
--- a/NewLife.YuqueWeb/Entity/YuQue.htm
+++ b/NewLife.YuqueWeb/Entity/YuQue.htm
@@ -943,3 +943,174 @@
     </tbody>
 </table>
 <br></br>
+<h3>Html规则(HtmlRule)</h3>
+<table>
+    <thead>
+        <tr>
+            <th>名称</th>
+            <th>显示名</th>
+            <th>类型</th>
+            <th>长度</th>
+            <th>精度</th>
+            <th>主键</th>
+            <th>允许空</th>
+            <th>备注</th>
+        </tr>
+    </thead>
+    <tbody>
+        <tr>
+            <td>Id</td>
+            <td>编号</td>
+            <td>Int32</td>
+            <td></td>
+            <td></td>
+            <td title="自增">AI</td>
+            <td>N</td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>Kind</td>
+            <td>种类</td>
+            <td>Int32</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td>N</td>
+            <td>图片、链接、文本</td>
+        </tr>
+
+        <tr>
+            <td>Rule</td>
+            <td>规则</td>
+            <td>String</td>
+            <td>50</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>Target</td>
+            <td>目标</td>
+            <td>String</td>
+            <td>50</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>Enable</td>
+            <td>启用</td>
+            <td>Boolean</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td>N</td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>CreateUser</td>
+            <td>创建人</td>
+            <td>String</td>
+            <td>50</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>CreateUserID</td>
+            <td>创建者</td>
+            <td>Int32</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td>N</td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>CreateTime</td>
+            <td>创建时间</td>
+            <td>DateTime</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>CreateIP</td>
+            <td>创建地址</td>
+            <td>String</td>
+            <td>50</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>UpdateUser</td>
+            <td>更新人</td>
+            <td>String</td>
+            <td>50</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>UpdateUserID</td>
+            <td>更新者</td>
+            <td>Int32</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td>N</td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>UpdateTime</td>
+            <td>更新时间</td>
+            <td>DateTime</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>UpdateIP</td>
+            <td>更新地址</td>
+            <td>String</td>
+            <td>50</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+        </tr>
+
+        <tr>
+            <td>Remark</td>
+            <td>备注</td>
+            <td>String</td>
+            <td>200</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+        </tr>
+    </tbody>
+</table>
+<br></br>
Modified +10 -24
diff --git "a/NewLife.YuqueWeb/Entity/\345\257\274\350\210\252.Biz.cs" "b/NewLife.YuqueWeb/Entity/\345\257\274\350\210\252.Biz.cs"
index d2df0fe..cef33fa 100644
--- "a/NewLife.YuqueWeb/Entity/\345\257\274\350\210\252.Biz.cs"
+++ "b/NewLife.YuqueWeb/Entity/\345\257\274\350\210\252.Biz.cs"
@@ -4,7 +4,7 @@ using NewLife.Log;
 using XCode;
 using XCode.Membership;
 
-namespace NewLife.YuQueWeb.Entity
+namespace NewLife.YuqueWeb.Entity
 {
     /// <summary>导航</summary>
     public partial class Nav : EntityTree<Nav>
@@ -31,22 +31,6 @@ namespace NewLife.YuQueWeb.Entity
 
             // 建议先调用基类方法,基类方法会做一些统一处理
             base.Valid(isNew);
-
-            // 在新插入数据或者修改了指定字段时进行修正
-            // 处理当前已登录用户信息,可以由UserModule过滤器代劳
-            /*var user = ManageProvider.User;
-            if (user != null)
-            {
-                if (isNew && !Dirtys[nameof(CreateUserID)]) CreateUserID = user.ID;
-                if (!Dirtys[nameof(UpdateUserID)]) UpdateUserID = user.ID;
-            }*/
-            //if (isNew && !Dirtys[nameof(CreateTime)]) CreateTime = DateTime.Now;
-            //if (!Dirtys[nameof(UpdateTime)]) UpdateTime = DateTime.Now;
-            //if (isNew && !Dirtys[nameof(CreateIP)]) CreateIP = ManageProvider.UserHost;
-            //if (!Dirtys[nameof(UpdateIP)]) UpdateIP = ManageProvider.UserHost;
-
-            // 检查唯一索引
-            // CheckExist(isNew, nameof(ParentId), nameof(Name));
         }
 
         /// <summary>首次连接数据库时初始化数据,仅用于实体类重载,用户不应该调用该方法</summary>
@@ -62,22 +46,24 @@ namespace NewLife.YuQueWeb.Entity
             // 需要注意的是,如果该方法调用了其它实体类的首次数据库操作,目标实体类的数据初始化将会在同一个线程完成
             if (XTrace.Debug) XTrace.WriteLine("开始初始化{0}[{1}]数据……", typeof(Nav).Name, Meta.Table.DataTable.DisplayName);
 
-            var fn = $"../InitData/{Meta.TableName}.json".GetFullPath();
-
             var header = Root.Add("头部");
             header.Add("首页", "/");
-            header.Add("关于", "/About");
-            header.Add("联系我们", "/Contact");
+            header.Add("产品方案", "#")
+                .Add("物联网平台", "http://iot.feifan.link")
+                .Add("星尘分布式系统", "http://star.newlifex.com");
+            header.Add("关于我们", "/About");
 
             var footer = Root.Add("尾部");
             var link = footer.Add("友情链接");
             link.Add("新生命团队", "https://www.NewLifeX.com");
             link.Add("开源项目", "https://github.com/NewLifeX");
 
-            footer.Add("文档").Add("文档资料", "https://www.yuque.com/smartstone/cube");
+            footer.Add("文档").Add("文档资料", "https://www.newlifex.com");
             footer.Add("关于")
-                .Add("关于我们", "/About")
-                .Add("联系我们", "/Contact");
+                .Add("关于我们", "/About");
+
+            var jumbotron = Root.Add("巨幕");
+            jumbotron.Add("学无先后达者为师!");
 
             if (XTrace.Debug) XTrace.WriteLine("完成初始化{0}[{1}]数据!", typeof(Nav).Name, Meta.Table.DataTable.DisplayName);
         }
Modified +2 -2
diff --git "a/NewLife.YuqueWeb/Entity/\345\257\274\350\210\252.cs" "b/NewLife.YuqueWeb/Entity/\345\257\274\350\210\252.cs"
index c8589b6..d8a203a 100644
--- "a/NewLife.YuqueWeb/Entity/\345\257\274\350\210\252.cs"
+++ "b/NewLife.YuqueWeb/Entity/\345\257\274\350\210\252.cs"
@@ -8,7 +8,7 @@ using XCode;
 using XCode.Configuration;
 using XCode.DataAccessLayer;
 
-namespace NewLife.YuQueWeb.Entity
+namespace NewLife.YuqueWeb.Entity
 {
     /// <summary>导航</summary>
     [Serializable]
@@ -16,7 +16,7 @@ namespace NewLife.YuQueWeb.Entity
     [Description("导航")]
     [BindIndex("IU_Nav_ParentId_Name", true, "ParentId,Name")]
     [BindIndex("IX_Nav_Name", false, "Name")]
-    [BindTable("Nav", Description = "导航", ConnName = "YuQue", DbType = DatabaseType.SqlServer)]
+    [BindTable("Nav", Description = "导航", ConnName = "Yuque", DbType = DatabaseType.SqlServer)]
     public partial class Nav
     {
         #region 属性
Modified +1 -1
diff --git "a/NewLife.YuqueWeb/Entity/\346\226\207\346\241\243.Biz.cs" "b/NewLife.YuqueWeb/Entity/\346\226\207\346\241\243.Biz.cs"
index 90d7dcb..87c0aca 100644
--- "a/NewLife.YuqueWeb/Entity/\346\226\207\346\241\243.Biz.cs"
+++ "b/NewLife.YuqueWeb/Entity/\346\226\207\346\241\243.Biz.cs"
@@ -4,7 +4,7 @@ using NewLife.Data;
 using XCode;
 using XCode.Membership;
 
-namespace NewLife.YuQueWeb.Entity
+namespace NewLife.YuqueWeb.Entity
 {
     /// <summary>文档。文档内容</summary>
     public partial class Document : Entity<Document>
Modified +2 -2
diff --git "a/NewLife.YuqueWeb/Entity/\346\226\207\346\241\243.cs" "b/NewLife.YuqueWeb/Entity/\346\226\207\346\241\243.cs"
index d0d810c..adb6cd2 100644
--- "a/NewLife.YuqueWeb/Entity/\346\226\207\346\241\243.cs"
+++ "b/NewLife.YuqueWeb/Entity/\346\226\207\346\241\243.cs"
@@ -8,7 +8,7 @@ using XCode;
 using XCode.Configuration;
 using XCode.DataAccessLayer;
 
-namespace NewLife.YuQueWeb.Entity
+namespace NewLife.YuqueWeb.Entity
 {
     /// <summary>文档。文档内容</summary>
     [Serializable]
@@ -19,7 +19,7 @@ namespace NewLife.YuQueWeb.Entity
     [BindIndex("IX_Document_Title", false, "Title")]
     [BindIndex("IX_Document_UpdateTime", false, "UpdateTime")]
     [BindIndex("IX_Document_SyncTime", false, "SyncTime")]
-    [BindTable("Document", Description = "文档。文档内容", ConnName = "YuQue", DbType = DatabaseType.None)]
+    [BindTable("Document", Description = "文档。文档内容", ConnName = "Yuque", DbType = DatabaseType.None)]
     public partial class Document
     {
         #region 属性
Modified +1 -1
diff --git "a/NewLife.YuqueWeb/Entity/\347\237\245\350\257\206\345\272\223.Biz.cs" "b/NewLife.YuqueWeb/Entity/\347\237\245\350\257\206\345\272\223.Biz.cs"
index a50cac1..9b529cd 100644
--- "a/NewLife.YuqueWeb/Entity/\347\237\245\350\257\206\345\272\223.Biz.cs"
+++ "b/NewLife.YuqueWeb/Entity/\347\237\245\350\257\206\345\272\223.Biz.cs"
@@ -2,7 +2,7 @@
 using XCode;
 using XCode.Membership;
 
-namespace NewLife.YuQueWeb.Entity
+namespace NewLife.YuqueWeb.Entity
 {
     /// <summary>知识库。管理知识库</summary>
     public partial class Book : Entity<Book>
Modified +2 -2
diff --git "a/NewLife.YuqueWeb/Entity/\347\237\245\350\257\206\345\272\223.cs" "b/NewLife.YuqueWeb/Entity/\347\237\245\350\257\206\345\272\223.cs"
index 40bcdde..4fb2fb4 100644
--- "a/NewLife.YuqueWeb/Entity/\347\237\245\350\257\206\345\272\223.cs"
+++ "b/NewLife.YuqueWeb/Entity/\347\237\245\350\257\206\345\272\223.cs"
@@ -8,7 +8,7 @@ using XCode;
 using XCode.Configuration;
 using XCode.DataAccessLayer;
 
-namespace NewLife.YuQueWeb.Entity
+namespace NewLife.YuqueWeb.Entity
 {
     /// <summary>知识库。管理知识库</summary>
     [Serializable]
@@ -16,7 +16,7 @@ namespace NewLife.YuQueWeb.Entity
     [Description("知识库。管理知识库")]
     [BindIndex("IU_Book_Code", true, "Code")]
     [BindIndex("IX_Book_Name", false, "Name")]
-    [BindTable("Book", Description = "知识库。管理知识库", ConnName = "YuQue", DbType = DatabaseType.None)]
+    [BindTable("Book", Description = "知识库。管理知识库", ConnName = "Yuque", DbType = DatabaseType.None)]
     public partial class Book
     {
         #region 属性
Modified +1 -1
diff --git a/NewLife.YuqueWeb/Models/BookIndexModel.cs b/NewLife.YuqueWeb/Models/BookIndexModel.cs
index 25bc155..839316a 100644
--- a/NewLife.YuqueWeb/Models/BookIndexModel.cs
+++ b/NewLife.YuqueWeb/Models/BookIndexModel.cs
@@ -1,5 +1,5 @@
 using NewLife.Data;
-using NewLife.YuQueWeb.Entity;
+using NewLife.YuqueWeb.Entity;
 
 namespace NewLife.YuqueWeb.Models
 {
Modified +1 -1
diff --git a/NewLife.YuqueWeb/Properties/launchSettings.json b/NewLife.YuqueWeb/Properties/launchSettings.json
index d0076b5..9309ed9 100644
--- a/NewLife.YuqueWeb/Properties/launchSettings.json
+++ b/NewLife.YuqueWeb/Properties/launchSettings.json
@@ -8,7 +8,7 @@
     }
   },
   "profiles": {
-    "NewLife.YuQueWeb": {
+    "NewLife.YuqueWeb": {
       "commandName": "Project",
       "dotnetRunMessages": true,
       "launchBrowser": true,
Modified +2 -2
diff --git a/NewLife.YuqueWeb/Services/BookService.cs b/NewLife.YuqueWeb/Services/BookService.cs
index 66db9b2..151c4c7 100644
--- a/NewLife.YuqueWeb/Services/BookService.cs
+++ b/NewLife.YuqueWeb/Services/BookService.cs
@@ -2,7 +2,7 @@
 using NewLife.Cube.Entity;
 using NewLife.Log;
 using NewLife.Yuque;
-using NewLife.YuQueWeb.Entity;
+using NewLife.YuqueWeb.Entity;
 using XCode;
 using XCode.Membership;
 
@@ -256,7 +256,7 @@ public class BookService
         return doc.Update();
     }
 
-    static Regex _regex = new("<img.*?src=\"(.*?)\".*?>");
+    private static readonly Regex _regex = new("<img.*?src=\"(.*?)\".*?>");
     public Int32 ProcessHtml(Document doc)
     {
         var html = doc?.BodyHtml;
Modified +1 -1
diff --git a/NewLife.YuqueWeb/Services/SyncService.cs b/NewLife.YuqueWeb/Services/SyncService.cs
index debf0f7..454df62 100644
--- a/NewLife.YuqueWeb/Services/SyncService.cs
+++ b/NewLife.YuqueWeb/Services/SyncService.cs
@@ -1,7 +1,7 @@
 using NewLife.Data;
 using NewLife.Log;
 using NewLife.Threading;
-using NewLife.YuQueWeb.Entity;
+using NewLife.YuqueWeb.Entity;
 
 namespace NewLife.YuqueWeb.Services
 {
Modified +1 -1
diff --git a/NewLife.YuqueWeb/Views/Shared/_Footer_yq.cshtml b/NewLife.YuqueWeb/Views/Shared/_Footer_yq.cshtml
index 08c153a..f15ef52 100644
--- a/NewLife.YuqueWeb/Views/Shared/_Footer_yq.cshtml
+++ b/NewLife.YuqueWeb/Views/Shared/_Footer_yq.cshtml
@@ -1,7 +1,7 @@
 @using NewLife
 @using NewLife.Common;
 @using NewLife.Cube.WebMiddleware;
-@using NewLife.YuQueWeb.Entity
+@using NewLife.YuqueWeb.Entity
 @{
     var set = NewLife.Cube.Setting.Current;
     var footer = Nav.Root.FindByPath("尾部") ?? Nav.Root;
Modified +1 -1
diff --git a/NewLife.YuqueWeb/Views/Shared/_Header_yq.cshtml b/NewLife.YuqueWeb/Views/Shared/_Header_yq.cshtml
index ce617f3..bd107cf 100644
--- a/NewLife.YuqueWeb/Views/Shared/_Header_yq.cshtml
+++ b/NewLife.YuqueWeb/Views/Shared/_Header_yq.cshtml
@@ -1,5 +1,5 @@
 @using NewLife.Common;
-@using NewLife.YuQueWeb.Entity
+@using NewLife.YuqueWeb.Entity
 @{
     var header = Nav.Root.FindByPath("头部") ?? Nav.Root;
 }
Modified +1 -1
diff --git a/NewLife.YuqueWeb/Views/Shared/_Nav.cshtml b/NewLife.YuqueWeb/Views/Shared/_Nav.cshtml
index b07893b..9c16b78 100644
--- a/NewLife.YuqueWeb/Views/Shared/_Nav.cshtml
+++ b/NewLife.YuqueWeb/Views/Shared/_Nav.cshtml
@@ -1,4 +1,4 @@
-@using NewLife.YuQueWeb.Entity
+@using NewLife.YuqueWeb.Entity
 @{
     var list = Book.GetValids();
 }
Modified +2 -2
diff --git a/NewLife.YuqueWeb/Views/Yuque/Index.cshtml b/NewLife.YuqueWeb/Views/Yuque/Index.cshtml
index 1473f97..f10d42d 100644
--- a/NewLife.YuqueWeb/Views/Yuque/Index.cshtml
+++ b/NewLife.YuqueWeb/Views/Yuque/Index.cshtml
@@ -1,5 +1,5 @@
-@model IList<NewLife.YuQueWeb.Entity.Book>
-@using NewLife.YuQueWeb.Entity
+@model IList<NewLife.YuqueWeb.Entity.Book>
+@using NewLife.YuqueWeb.Entity
 @{
     Layout = "~/Views/Shared/_Layout_yq.cshtml";
 
Modified +1 -1
diff --git a/NewLife.YuqueWeb/Views/Yuque/Info.cshtml b/NewLife.YuqueWeb/Views/Yuque/Info.cshtml
index 14b0aa3..f8ac700 100644
--- a/NewLife.YuqueWeb/Views/Yuque/Info.cshtml
+++ b/NewLife.YuqueWeb/Views/Yuque/Info.cshtml
@@ -1,4 +1,4 @@
-@model NewLife.YuQueWeb.Entity.Document
+@model NewLife.YuqueWeb.Entity.Document
 @{
     Layout = "~/Views/Shared/_Layout_yq.cshtml";
 
Modified +1 -1
diff --git a/NewLife.YuqueWeb/Views/Yuque/List.cshtml b/NewLife.YuqueWeb/Views/Yuque/List.cshtml
index be6841b..bbce04a 100644
--- a/NewLife.YuqueWeb/Views/Yuque/List.cshtml
+++ b/NewLife.YuqueWeb/Views/Yuque/List.cshtml
@@ -1,6 +1,6 @@
 @model NewLife.YuqueWeb.Models.BookIndexModel
 @using NewLife.Data
-@using NewLife.YuQueWeb.Entity
+@using NewLife.YuqueWeb.Entity
 @using NewLife.YuqueWeb.Models
 @{
     Layout = "~/Views/Shared/_Layout_yq.cshtml";
Modified +2 -4
diff --git a/NewLife.YuqueWeb/YuqueService.cs b/NewLife.YuqueWeb/YuqueService.cs
index 5332fd3..5552fae 100644
--- a/NewLife.YuqueWeb/YuqueService.cs
+++ b/NewLife.YuqueWeb/YuqueService.cs
@@ -5,9 +5,9 @@ using NewLife.Cube.Extensions;
 using NewLife.Log;
 using NewLife.YuqueWeb.Areas.Yuque;
 using NewLife.YuqueWeb.Services;
-using NewLife.YuQueWeb.Entity;
+using NewLife.YuqueWeb.Entity;
 
-namespace NewLife.YuQueWeb;
+namespace NewLife.YuqueWeb;
 
 /// <summary>语雀服务</summary>
 public static class YuqueService
@@ -71,13 +71,11 @@ public static class YuqueService
     public static void RegisterRoute(IEndpointRouteBuilder endpoints, Boolean useHomeIndex)
     {
         if (useHomeIndex)
-        {
             endpoints.MapControllerRoute(
                 name: "Yuque_Index",
                 pattern: "/",
                 defaults: new { controller = "Yuque", action = "Index" }
             );
-        }
 
         #region 类别
         endpoints.MapControllerRoute(
Modified +1 -1
diff --git a/XUnitTest/BookServiceTests.cs b/XUnitTest/BookServiceTests.cs
index e054f45..b0f123a 100644
--- a/XUnitTest/BookServiceTests.cs
+++ b/XUnitTest/BookServiceTests.cs
@@ -5,7 +5,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using NewLife.YuqueWeb.Services;
-using NewLife.YuQueWeb.Entity;
+using NewLife.YuqueWeb.Entity;
 using Xunit;
 
 namespace XUnitTest
Modified +1 -1
diff --git a/XUnitTest/XUnitTest.csproj b/XUnitTest/XUnitTest.csproj
index bd04ea4..b0b7c9a 100644
--- a/XUnitTest/XUnitTest.csproj
+++ b/XUnitTest/XUnitTest.csproj
@@ -18,7 +18,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\NewLife.YuQueWeb\NewLife.YuqueWeb.csproj" />
+    <ProjectReference Include="..\NewLife.YuqueWeb\NewLife.YuqueWeb.csproj" />
     <ProjectReference Include="..\NewLife.Yuque\NewLife.Yuque.csproj" />
   </ItemGroup>
 
Modified +1 -1
diff --git a/YqWeb/Program.cs b/YqWeb/Program.cs
index cc0689c..ff55edf 100644
--- a/YqWeb/Program.cs
+++ b/YqWeb/Program.cs
@@ -1,6 +1,6 @@
 using NewLife.Cube;
 using NewLife.Log;
-using NewLife.YuQueWeb;
+using NewLife.YuqueWeb;
 
 XTrace.UseConsole();
 
Modified +1 -1
diff --git a/YqWeb/YqWeb.csproj b/YqWeb/YqWeb.csproj
index c34c132..ac352c3 100644
--- a/YqWeb/YqWeb.csproj
+++ b/YqWeb/YqWeb.csproj
@@ -23,7 +23,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\NewLife.YuQueWeb\NewLife.YuqueWeb.csproj" />
+    <ProjectReference Include="..\NewLife.YuqueWeb\NewLife.YuqueWeb.csproj" />
   </ItemGroup>
 
 </Project>