- 博客(119)
- 收藏
- 关注
原创 开箱即用的.NET MAUI组件库 V-Control 发布了!
之前写过挺多的MAUI Sample,其中有很多代码可以打包成组件,当组件完善到一定程度,我会把控件封装起来放到控件库中。今天,在这个仓库建立一年零八个月后,我觉得可以考虑将其作为开源库发布。有很多网友在观望.NET MAUI,犹豫是否可以拿来作为有生产力的跨平台移动端开发工具,此时我想告诉大家,.NET MAUI是一个非常不错的移动开发平台。配合 V-Control 来构建移动应用程序,V-Control是适用于。
2025-02-06 18:00:47
1356
原创 在VS Code中使用Snippet Craft扩展提高编码效率
扩展初始化时,插入了三个常用的自定义映射,你可以自由更改或添加自定义映射。示例:代码片段内容value of 'AUTHOR' is: 林晓lx与自定义映射一样,当默认映射值未设置或者不可用时,将直接显示变量占位符。
2024-08-22 23:14:16
1052
原创 [学习笔记]在不同项目中切换Node.js版本
在开发中,可能会遇到不同的Vue项目需要不同的Node.js,在开发机上如何快速切换Node的版本呢?总结:最好是通过第一种方式,因为手动配置环境变量的方式会产生依赖,需要在同事的电脑上手动配置。cross-env 是一个用于在不同操作系统上设置和使用环境变量的工具,可以用它来切换。环境变量,以确保在不同的操作系统上都能正确设置和使用 Node.js 的路径。下载 Node.js,并在不同目录下安装多个版本。环境变量的路径,实现切换Node.js 的版本。可以在系统的环境变量配置中手动设置。
2024-08-21 23:17:41
941
原创 [VS Code扩展]写一个代码片段管理插件(二):功能实现
映射是插入代码片段时,自动替换的变量,他们通过Key-Value形式存储于globalState中。代码片段中通过设置占位符(如${AUTHOR}),在插入代码片段时,将自动替换为全局变量中的值。当自定义映射值未设置或者不可用时,将直接显示变量占位符扩展初始化时,插入了三个常用的自定义映射,你可以自由更改或添加自定义映射。${AUTHOR}: 作者姓名${COMPANY}: 公司名称${MAIL}: 邮箱地址扩展中所有的自定义映射,呈现于“映射表”树视图中。示例:代码片段内容。
2024-08-21 12:39:10
1270
原创 [VS Code扩展]写一个代码片段管理插件(一):介绍与界面搭建
功能,但是创建自定义代码片段时,需要写JSON格式的配置,这些JSON文件在用户文件夹下,没有统一的界面管理,而且对于我来说,制表符补全这样的高级功能并不是必需的。VS Code扩展是一个基础功能,通过扩展可以满足软件的所有功能增强,包括内置的核心功能,如文件管理,搜索,Git,调试器,这些都是通过扩展实现的。VS Code这些框架的部分,官方称之为“容器”,整个VS Code由6个容器组成,分别是:活动栏,主边栏,编辑器,辅边栏,面板,状态栏。常用的项目有侧边栏,编辑器,状态栏,面板上的工具栏区域。
2024-08-02 23:13:21
1073
原创 [MAUI 项目实战] 笔记App(二):数据库设计
从场景到笔记,或者说从模板到实例,我们需要映射,例如从笔记片段菜单中选择一个片段添加,那么需要从笔记片段仓库实体(NoteSegmentStore)映射到笔记片段实体(NoteSegment)或者,在编辑场景中,映射到笔记片段模板实体(NoteSegmentTemplate)。在该项目MatoProductivityEntityFrameworkCoreModule.cs 中,将注册上下文对象,并在程序初始化运行迁移,此时将在设备上生成。可在程序启动时,访问数据库,并初始化种子数据。
2024-07-19 09:51:23
1147
原创 [MAUI 项目实战] 笔记App(一):介绍与程序设计
有人说现在记事类app这么多,市场这么卷,为什么还想做一个笔记类App?一来,去年小孩刚出生,需要一个可以记录喂奶时间的app,发现市面上没有一款app能够在两步内简单记录一个时间,可能iOS可以通过备忘录配合捷径做到快速记录,但是安卓上就没有类似的app。二是,自去年做的音乐播放器以来,很长一段时间我在博客上的XF,MAUI都是在介绍局部的功能,[MAUI 项目实战]专题也很长没更新了,这次通过笔记类App做一次完整项目,包括如何上架MAUI应用等内容一并更新了。
2024-07-18 15:11:57
1376
原创 [MAUI]集成富文本编辑器Editor.js至.NET MAUI Blazor项目
其它的工具插件可以单独获取。在OnAfterRenderAsync中调用初始化函数,并订阅OnSubmitting和OnInited事件,以便在提交事件触发时保存,以及文本状态变更时重新渲染。在wwwroot创建editorjs_index.html文件,并在body中引入editorjs.umd.js和各插件js文件。我们先要获取web应用的资源文件(js,css等),以便MAUI的视图呈现标准的Web UI。在script代码段中,创建LoadContent函数,用于加载EditorJs的初始内容。
2024-04-13 23:47:05
1200
2
原创 [MAUI]模仿哔哩哔哩的一键三连
的CodeBehind中,创建OnCanvasViewPaintSurface,通过给定起始角度为正上方,扫描角度为360对于100%进度,通过插值计算出当前进度对应的扫描角度,绘制出进度条。“三连按钮”是一组按钮,轻击时当做普通状态按钮使用,当长按 2 秒钟后,转为三连模式,可以控制并显示进度,并在进度完成时弹出一些泡泡。在本项目中,需要监听长按动作,当“三连按钮”长按2秒后,转为三连模式,此时需要监听手指释放情况,当时长不足时取消三连。当按钮被点击时此Timer会开。这些按钮用svg格式在html中。
2024-03-24 23:21:41
820
原创 [MAUI]集成高德地图组件至.NET MAUI Blazor项目
地图组件在手机App中常用地理相关业务,如查看线下门店,设置导航,或选取地址等。是一个较为常见的组件。在.NET MAUI 中,有两种方案可以集成高德地图,一种是使用原生库绑定。但这种方案需要大量平台原生开发的知识,而且需要对每一个平台进行适配。在这里我介绍第二种方案:.NET MAUI Blazor + 高德地图JS API 2.0 库的实现。JS API 2.0 是高德开放平台基于WebGL的地图组件,可以将高德地图模块集成到.NET MAUI Blazor中的BlazorWebView控件。
2024-03-23 21:52:50
1859
3
原创 [.NET项目实战] Elsa开源工作流组件应用(三):实战演练
之前的文章简单介绍了工作流和Elsa工作流库,这里再补充说明两点工作流的使用场景非常广泛,几乎涵盖了所有需要进行业务流程自动化管理的领域。学习一个开源库,最简单的方法就是看源码,Elsa的工作流引擎源码非常简单易懂,并且提供了非常丰富的示例代码,举一个例子:审批工作流示例这个审批流是这样的:作者发来一个文章,有两个审批人需要全部审批通过,文章才算通过,否则退回。
2024-03-20 18:32:22
2181
7
原创 [.NET项目实战] Elsa开源工作流组件应用(二):内核解读
Elsa工作原理可以抽象理解为管道中间件 + 异步模型Elsa中,活动的变量的获取和设置都是异步的。Elsa定义了Variable类型作为异步操作的结果或者说是异步操作的占位符,这个变量在运行的时候才会填充数值。这与我们熟悉C#中的Task,或者js里的promise对象作用相同。输入Input,OutPut都属于 Variable。Elsa模拟了内存寄存器(MemoryRegister)以及Set和Get访问器实现异步模型。
2024-03-20 11:47:07
2506
1
原创 深度观察2024中国系统架构师大会(SACC)
今年的中国系统架构师大会(SACC)在我所在的城市广州举办,很荣幸受邀参加。这次能接触到国内最优秀的架构师,学习他们的架构思想和行业经验。对我而言非常有意义。大会分为上下午共4场,我参加了上午的多云多活架构设计专场和下午的AIGC专场。本篇文章就多云多活架构设计专场,我选取几位老师的观点进行分享。(我并不是架构师,只是对架构感兴趣,如有错误,还请指正)
2024-03-19 14:02:39
1643
原创 [.NET项目实战] Elsa开源工作流组件应用(一): Elsa工作流简介
工作流定义描述了一个工作流的结构,比如:名称,变量,包含的活动等,可以理解为一个工作流的模板。工作流定义在Elsa初始化时会“注册” 到资源池中,每个工作流定义都有一个唯一的ID。使用设计器生成的工作流,通过序列化成JSON字符串,并持久化到数据库。使用硬编码创建的工作流,在Elsa初始化时将工作流注册到工作流定义并持久化到数据库。实例化是根据定义创建一个工作流的实例,工作流实例包含工作流状态(WorkflowState)以及活动实例(ActivityState)。
2024-03-15 17:16:27
3185
原创 开源好用的所见即所得(WYSIWYG)编辑器:Editor.js
varaiables.css中包含了大部分的样式变量,更改这些变量可以实现自定义样式。如通过重写 .root样式选择器可以实现自定义的背景色, 重写.ce-popover 改变弹出框样式等。:root {– 完 –
2024-03-11 18:37:05
2400
原创 在macOS中搭建.NET MAUI开发环境
在 Visual Studio Code 中,按 F5 键或单击“运行”>“启动调试”以调试 .NET MAUI 应用。在 macOS 上,建议的 Android SDK 目录值为 $HOME/Library/Android/sdk。此时已可以真机调试 Android 应用,如果真机调试不方便,我们需要安装 Android 模拟器。另外可以通过切换调试目标中的菜单,查看可用的镜像,选择一个镜像,或创建一个新的镜像。在 Visual Studio Code 的资源管理器中,打开项目sln文件,
2023-12-31 00:16:14
2069
2
原创 [学习笔记]SQL Server中批量查找所有符合Where条件的记录
创建一个表变量来存储所有包含’UserId’列的表的名称。然后使用一个游标遍历这些表,并对每个表执行一个动态SQL查询。如果查询结果想带上表名称,在动态SQL查询现在返回一个名为TableName的额外列即可。运行Sql脚本,可以看到所有包含’UserId’列的表的记录都被筛选出来了。目标:在SQL Server中查找所有表的UserId = 50的记录。
2023-12-21 12:01:40
791
原创 将Abp默认事件总线改造为分布式事件总线
定义NotificationEventData,用于传递自定义事件。set;set;set;set;在消费者端,定义一个事件处理器,用于处理自定义事件。在生产者端,触发自定义事件。运行程序,可以看到消费者端打印出了自定义事件。
2023-12-20 17:06:27
1909
原创 [学习笔记]批量迁移数据库文件
更多移动用户数据库内容请查看官方文档 https://learn.microsoft.com/zh-cn/sql/relational-databases/databases/move-user-databases。注意,从 SQL Server 2008 R2 (10.50.x) 开始,全文目录已集成到数据库中,而不是存储在文件系统中。因此如果你的数据库是SQL Server 2008 R2(10.50.x) 之前的版本,你需要分别迁移数据库文件和日志文件。首先复制数据库文件到新的磁盘位置,比如。
2023-12-18 10:23:09
668
原创 [学习笔记]在CentOS7中用Docker方式安装Jenkins
Docker in Docker (以下简称 DinD)可以在 Container 中直接运行一个 Docker Daemon ,然后使用 Container 中的 Docker CLI 工具操作容器。容器内的Docker Daemon对外提供服务,每个运行中的容器,都是一个进程,这个进程都托管在Docker Daemon中,镜像和容器都在一个隔离的环境。Jenkins在构建时,需要一个独立的Docker环境用于打包镜像。网桥允许连接到同一网桥网络的容器进行通信,创建一个名为jenkins的网桥网络。
2023-12-12 17:08:23
768
原创 将ECharts图表插入到Word文档中
首先指定一个option,在官方示例 https://echarts.apache.org/examples/zh/index.html 中,随意找一个柱状图的sample,复制option对象内容到新创建的option.json文件中。echarts-convert在github上有众多版本,echarts-convert的代码来源于这里:https://github.com/wadezhan/billfeller.github.io/issues/85。将下载好的可执行文件解压放置在项目根目录下的。
2023-11-15 11:24:23
1228
原创 DocTemplateTool - 可根据模板生成word或pdf文件的工具
你是否经常遇到这样的场景:产品运营有着大量的报告需求,或者给客户领导展现每周的运营报告?这些文档类的任务可以交给运营同事,他们负责文档排版和样式,你作为开发人员你只需要提供数据源,和一个映射表,告诉制作文档的人哪些字段可供使用。这样一来分工明确,减少了很多不必要的沟通成本。
2023-11-07 19:03:50
1450
原创 [学习笔记]TypeScript查缺补漏(一):类
private在编译后JavaScript中没有影响,仅对TypeScript编译器有影响,而使用#符号声明的私有属性在JavaScript中会被编译为常规的私有属性。Getter/Setter可以在不改变属性的访问权限的情况下,对属性的值进行更精细的控制。装饰器是使用 @ 符号来标识的特殊类型的函数,可以用来扩展类或方法的行为。尽管箭头函数是在对象的方法中定义的,但是它不会捕获到调用该方法的对象作为自己的this上下文。在箭头函数中,this不指向调用该函数的对象,而是指向定义该箭头函数时的上下文。
2023-10-31 21:31:02
357
原创 ExcelPatternTool 开箱即用的Excel工具包现已发布!
应用系统开发中少不了跟Excel打交道,基于NPOI开发了ExcelPatternTool,与目前主流框架对比ExcelPatternTool着重单元格样式的控制,对于初始数据导入、报表导出等简单的Excel功能提升易用性。
2023-10-25 18:23:11
788
原创 [MAUI]深入了解.NET MAUI Blazor与Vue的混合开发
每个BlazorWebView控件包含根组件(RootComponent)定义,ComponentType是在应用程序启动时加载页面时的类型,该类型需要继承自Microsoft.AspNetCore.Components.IComponent,由于我们的导航是由MAUI处理的,因此我们不需要使用Blazor路由,直接使用Razor组件。开发应用需要一个独立的host项目。中引入,还有一种是使用并置的js文件,这种方式是所谓的"CodeBehind",因为更利于组织代码,这里我们使用并置的js文件。
2023-10-18 17:12:29
2449
4
原创 [MAUI]实现动态拖拽排序网格
拖拽控件悬停在当前控件上方时,将IsBeingDraggedOver设置为true,通知当前控件正在有拖拽控件悬停在其上方,同时在服务列表中寻找当前正在被拖拽的服务,将DropPlaceHolderItem设置为当前控件。当以比较快的速度,拖拽Tile经过较多的位置时,后面的Tile会短暂地替代原先的位置,导致拖拽中的Tile不在期望的Tile上方,而拖拽中的Tile与错误的Tile产生了交叠从而触发DraggedOver事件,导致错乱。其是在松开手指之后才向列表提交条目位置变更的命令。
2023-09-18 17:55:05
521
原创 [MAUI]在.NET MAUI中实现可拖拽排序列表
NET MAUI 中提供了拖放(drag-drop)手势识别器,允许用户通过拖动手势来移动控件。在这篇文章中,我们将学习如何使用拖放手势识别器来实现可拖拽排序列表。在本例中,列表中显示不同大小的磁贴(Tile)并且可以拖拽排序。使用.NET MAU实现跨平台支持,本项目可运行于Android、iOS平台。
2023-08-15 14:27:30
1773
原创 怎样优雅地增删查改(九):按日期范围查询
使用数据库的创建时间作为查询依据,在Abp框架中,实体类实现ICreationAuditedObject接口,或继承CreationAuditedEntity类,使用仓储创建记录时将自动生成CreationTime。
2023-07-21 16:14:42
211
原创 利用Abp过滤器实现业务数据“回收站”功能
利用这个原理,可以将“软删除”行为认为是放入了“回收站”,而将“恢复”行为认为是从“回收站”中取出。将记录硬删除的行为认为是“永久删除”, 将全部已“软删除”的记录硬删除,则是“清空回收站”在DbContext中,重写CreateFilterExpression方法,当启用了“仅查看软删除”过滤器时,自动过滤软删除的实体。在删除记录时,通过调用仓储的Delete()方法,将记录放入“回收站”中。回收站是当用户删除一条记录时,不是直接从数据库中删除,而是将其放入“回收站”,以便用户可以在需要时恢复数据。
2023-07-19 10:06:01
358
原创 怎样优雅地增删查改(八):按用户关系查询
查询目标业务对象HealthAlarm关联了业务用户HealthClient,因业务用户与鉴权用户IdentityUser共享同一个Id,因此可以通过查询用户关系关联的User,查询到业务对象。对于Relation服务,其依赖关系在应用层,查找指定用户的关系用户将在CurdAppServiceBase的子类实现。对于Relation服务,其依赖关系在应用层,查找指定用户的关系用户将在CurdAppServiceBase的子类实现。人员之间的关系是单项的,也就是说可以A是B的好友,但B不一定是A的好友。
2023-07-18 14:50:43
195
原创 怎样优雅地增删查改(七):按用户查询
若指定 UserId 为 Guid.Empty,则使用当前登录用户的 UserId。查询实体列表Dto若实现该接口,将筛选指定 UserId 下的关联的实体。ICurrentUser是Abp的一个服务,用于获取当前登录用户的信息。打开客户详情页面,点击“告警”标签页,可以看到该客户下的告警列表。告警创建完成后,进入客户管理,在右侧客户列表中点击“查看详情”在告警管理页面中,创建一些告警,并将这些告警分配给不同的客户。在不同“群组”下创建一些客户(Client)创建一些组织架构,命名“群组”
2023-07-18 10:36:35
195
原创 怎样优雅地增删查改(六):按任意字段关键字查询
定义按任意字段关键字查询过滤器(IKeywordOrientedFilter)接口,查询实体列表Dto若实现该接口,将筛选指定的目标字段(TargetFields)包含指定的关键字(Keyword)的实体。对于每一个TargetField,需要在实体中找到对应字段(属性)。若找到,则为此实体字段创建条件筛选的表达式,然后将这些表达式通过Or连接起来,最终返回一个包含多段关键字筛选的Lambda表达式。可以看到将筛选出标题包含关键字“3”的告警。在筛选中输入关键字“3”,点击查询。无需在应用层中更改代码,
2023-07-13 20:35:10
262
原创 怎样优雅地增删查改(五):按组织架构查询
要想在任意实体实现Where的过滤条件,我们使用动态拼接语言集成查询 (LINQ) 的方式实现通用查询接口,有关LINQ表达式,请阅读。定义按组织架构查询过滤器(IOrganizationOrientedFilter)接口,查询实体列表Dto若实现该接口,将筛选指定 OrganizationUnitId 下的用户关联的实体。Employee的集合查询业务,是通过重写CreateFilteredQueryAsync方法,来实现按组织架构查询的过滤条件。创建一些组织架构,命名“群组”
2023-07-13 11:08:03
3297
原创 怎样优雅地增删查改(四):创建通用查询基类
上一章我们实现了Employee管理模块,Employee的增删改查是通过其应用服务类,继承自Abp.Application.Services.CrudAppService实现的。在开发业务模块时,我们可以先使用简单的方式提供Curd服务,随着UI复杂度增加,逐步的使用更加复杂的Curd服务。为了更好的代码重用,我们对泛型参数进行扩展,使用CurdAppServiceBase的类可根据实际业务需求选择泛型参数。Brief是一种简化的查询实体集合的方法,其返回的Dto不包含导航属性,以减少数据传输量。
2023-07-13 10:43:42
306
原创 怎样优雅地增删查改(三):业务用户的增删查改
区别于身份管理模块(Identity模块)的鉴权用户IdentityUser,业务用户(BusinessUser)是围绕业务系统中“用户”这一定义的领域模型。这些业务用户继承自HealthUser,HealthUser是业务用户的基类,包含了业务用户的基本信息,如姓名,性别,出生日期,身份证号等。以Client为例,ClientLookupService是业务用户的查询服务,其基类UserLookupService定义了关联用户的查询接口,包括按ID查询,按用户名查询,按组织架构查询,按户关系查询等。
2023-07-10 11:07:43
605
原创 怎样优雅地增删查改(二):扩展身份管理模块
人员之间的关系是单项的,也就是说可以A是B的好友,但B不一定是A的好友。组织(OrganizationUnit)是身份管理模块的核心概念,组织是树形结构,组织之间存在父子关系。Abp为我们实现了一套身份管理模块,此模块包含用户管理、角色管理、组织管理、权限管理等功能。增加人员与组织架构管理接口,如添加/删除人员到组织架构,查询组织架构下的人员,查询未分配组织的人员等;身份管理模块(Identity模块)为通用查询接口的按组织架构查询和按户关系查询提供查询依据。
2023-07-07 18:58:04
925
原创 Vue + Volo.Abp 实现OAuth2.0客户端授权模式认证
只需要清除vuex或Cookies中的token即可,可以调用vue-oidc-client的signOut,但只是跳转到配置的登出地址,不会清除token(前提是redirectAfterSignout为true,并设置了post_logout_redirect_uri)创建continue/index.vue,简单的显示登录成功的提示,常用的提示有“登录成功,正在为您继续”,“登录成功,正在为您跳转”等友好提示。(D)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。
2023-07-07 11:30:14
2130
原创 怎样优雅地增删查改(一):从0开始搭建Volo.Abp项目
软件系统中数据库或者持久层的基本操作功能可以用Curd描述,Curd即 增加(Create)、更新(Update)、读取查询(Retrieve)和删除(Delete), 这4个单词的首字母。在常见的业务系统中,对数据的大部分操作都是Curd,在实践的过程中对数据的筛选、排序、分页、关联查询等功能抽象和封装。本系列博文将从0开始,逐步搭建一个基于Volo.Abp + Vue 的前后端分离的,具有Curd通用查询功能的项目。项目介绍本项目是基于一个简单的用户健康数据管理系统,我们将对业务常用的查询功能进
2023-07-04 19:00:09
1418
[speech2txt]语音转文本,Azure实现
2024-03-17
SQL Server 命令行工具 sqlcmd
2023-03-17
rocket.chat-2.4.14.tgz
2023-03-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人