自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(112)
  • 收藏
  • 关注

原创 [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 827 2

原创 [MAUI]模仿哔哩哔哩的一键三连

的CodeBehind中,创建OnCanvasViewPaintSurface,通过给定起始角度为正上方,扫描角度为360对于100%进度,通过插值计算出当前进度对应的扫描角度,绘制出进度条。“三连按钮”是一组按钮,轻击时当做普通状态按钮使用,当长按 2 秒钟后,转为三连模式,可以控制并显示进度,并在进度完成时弹出一些泡泡。在本项目中,需要监听长按动作,当“三连按钮”长按2秒后,转为三连模式,此时需要监听手指释放情况,当时长不足时取消三连。当按钮被点击时此Timer会开。这些按钮用svg格式在html中。

2024-03-24 23:21:41 629

原创 [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 1361 3

原创 [.NET项目实战] Elsa开源工作流组件应用(三):实战演练

之前的文章简单介绍了工作流和Elsa工作流库,这里再补充说明两点工作流的使用场景非常广泛,几乎涵盖了所有需要进行业务流程自动化管理的领域。学习一个开源库,最简单的方法就是看源码,Elsa的工作流引擎源码非常简单易懂,并且提供了非常丰富的示例代码,举一个例子:审批工作流示例这个审批流是这样的:作者发来一个文章,有两个审批人需要全部审批通过,文章才算通过,否则退回。

2024-03-20 18:32:22 691 1

原创 [.NET项目实战] Elsa开源工作流组件应用(二):内核解读

Elsa工作原理可以抽象理解为管道中间件 + 异步模型Elsa中,活动的变量的获取和设置都是异步的。Elsa定义了Variable类型作为异步操作的结果或者说是异步操作的占位符,这个变量在运行的时候才会填充数值。这与我们熟悉C#中的Task,或者js里的promise对象作用相同。输入Input,OutPut都属于 Variable。Elsa模拟了内存寄存器(MemoryRegister)以及Set和Get访问器实现异步模型。

2024-03-20 11:47:07 829

原创 深度观察2024中国系统架构师大会(SACC)

今年的中国系统架构师大会(SACC)在我所在的城市广州举办,很荣幸受邀参加。这次能接触到国内最优秀的架构师,学习他们的架构思想和行业经验。对我而言非常有意义。大会分为上下午共4场,我参加了上午的多云多活架构设计专场和下午的AIGC专场。本篇文章就多云多活架构设计专场,我选取几位老师的观点进行分享。(我并不是架构师,只是对架构感兴趣,如有错误,还请指正)

2024-03-19 14:02:39 1267

原创 [.NET项目实战] Elsa开源工作流组件应用(一): Elsa工作流简介

工作流定义描述了一个工作流的结构,比如:名称,变量,包含的活动等,可以理解为一个工作流的模板。工作流定义在Elsa初始化时会“注册” 到资源池中,每个工作流定义都有一个唯一的ID。使用设计器生成的工作流,通过序列化成JSON字符串,并持久化到数据库。使用硬编码创建的工作流,在Elsa初始化时将工作流注册到工作流定义并持久化到数据库。实例化是根据定义创建一个工作流的实例,工作流实例包含工作流状态(WorkflowState)以及活动实例(ActivityState)。

2024-03-15 17:16:27 1281

原创 开源好用的所见即所得(WYSIWYG)编辑器:Editor.js

varaiables.css中包含了大部分的样式变量,更改这些变量可以实现自定义样式。如通过重写 .root样式选择器可以实现自定义的背景色, 重写.ce-popover 改变弹出框样式等。:root {– 完 –

2024-03-11 18:37:05 1175

原创 在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 1236 1

原创 [学习笔记]SQL Server中批量查找所有符合Where条件的记录

创建一个表变量来存储所有包含’UserId’列的表的名称。然后使用一个游标遍历这些表,并对每个表执行一个动态SQL查询。如果查询结果想带上表名称,在动态SQL查询现在返回一个名为TableName的额外列即可。运行Sql脚本,可以看到所有包含’UserId’列的表的记录都被筛选出来了。目标:在SQL Server中查找所有表的UserId = 50的记录。

2023-12-21 12:01:40 571

原创 将Abp默认事件总线改造为分布式事件总线

定义NotificationEventData,用于传递自定义事件。set;set;set;set;在消费者端,定义一个事件处理器,用于处理自定义事件。在生产者端,触发自定义事件。运行程序,可以看到消费者端打印出了自定义事件。

2023-12-20 17:06:27 1604

原创 [学习笔记]批量迁移数据库文件

更多移动用户数据库内容请查看官方文档 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 552

原创 [学习笔记]在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 647

原创 将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 392

原创 DocTemplateTool - 可根据模板生成word或pdf文件的工具

你是否经常遇到这样的场景:产品运营有着大量的报告需求,或者给客户领导展现每周的运营报告?这些文档类的任务可以交给运营同事,他们负责文档排版和样式,你作为开发人员你只需要提供数据源,和一个映射表,告诉制作文档的人哪些字段可供使用。这样一来分工明确,减少了很多不必要的沟通成本。

2023-11-07 19:03:50 1066

原创 [学习笔记]TypeScript查缺补漏(二):类型与控制流分析

/ 验证是否是number类型// 验证是否是string类型。

2023-11-01 18:50:21 300

原创 [学习笔记]TypeScript查缺补漏(一):类

private在编译后JavaScript中没有影响,仅对TypeScript编译器有影响,而使用#符号声明的私有属性在JavaScript中会被编译为常规的私有属性。Getter/Setter可以在不改变属性的访问权限的情况下,对属性的值进行更精细的控制。装饰器是使用 @ 符号来标识的特殊类型的函数,可以用来扩展类或方法的行为。尽管箭头函数是在对象的方法中定义的,但是它不会捕获到调用该方法的对象作为自己的this上下文。在箭头函数中,this不指向调用该函数的对象,而是指向定义该箭头函数时的上下文。

2023-10-31 21:31:02 266

原创 ExcelPatternTool 开箱即用的Excel工具包现已发布!

应用系统开发中少不了跟Excel打交道,基于NPOI开发了ExcelPatternTool,与目前主流框架对比ExcelPatternTool着重单元格样式的控制,对于初始数据导入、报表导出等简单的Excel功能提升易用性。

2023-10-25 18:23:11 697

原创 [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 1631 4

原创 [MAUI]实现动态拖拽排序网格

拖拽控件悬停在当前控件上方时,将IsBeingDraggedOver设置为true,通知当前控件正在有拖拽控件悬停在其上方,同时在服务列表中寻找当前正在被拖拽的服务,将DropPlaceHolderItem设置为当前控件。当以比较快的速度,拖拽Tile经过较多的位置时,后面的Tile会短暂地替代原先的位置,导致拖拽中的Tile不在期望的Tile上方,而拖拽中的Tile与错误的Tile产生了交叠从而触发DraggedOver事件,导致错乱。其是在松开手指之后才向列表提交条目位置变更的命令。

2023-09-18 17:55:05 228

原创 [MAUI]在.NET MAUI中实现可拖拽排序列表

NET MAUI 中提供了拖放(drag-drop)手势识别器,允许用户通过拖动手势来移动控件。在这篇文章中,我们将学习如何使用拖放手势识别器来实现可拖拽排序列表。在本例中,列表中显示不同大小的磁贴(Tile)并且可以拖拽排序。使用.NET MAU实现跨平台支持,本项目可运行于Android、iOS平台。

2023-08-15 14:27:30 1475

原创 在Volo.Abp微服务中使用SignalR

假设需要通过Signalr发送消息通知,并在前端接收消息通知的功能。

2023-08-03 11:21:04 1451

原创 怎样优雅地增删查改(九):按日期范围查询

使用数据库的创建时间作为查询依据,在Abp框架中,实体类实现ICreationAuditedObject接口,或继承CreationAuditedEntity类,使用仓储创建记录时将自动生成CreationTime。

2023-07-21 16:14:42 143

原创 利用Abp过滤器实现业务数据“回收站”功能

利用这个原理,可以将“软删除”行为认为是放入了“回收站”,而将“恢复”行为认为是从“回收站”中取出。将记录硬删除的行为认为是“永久删除”, 将全部已“软删除”的记录硬删除,则是“清空回收站”在DbContext中,重写CreateFilterExpression方法,当启用了“仅查看软删除”过滤器时,自动过滤软删除的实体。在删除记录时,通过调用仓储的Delete()方法,将记录放入“回收站”中。回收站是当用户删除一条记录时,不是直接从数据库中删除,而是将其放入“回收站”,以便用户可以在需要时恢复数据。

2023-07-19 10:06:01 255

原创 怎样优雅地增删查改(八):按用户关系查询

查询目标业务对象HealthAlarm关联了业务用户HealthClient,因业务用户与鉴权用户IdentityUser共享同一个Id,因此可以通过查询用户关系关联的User,查询到业务对象。对于Relation服务,其依赖关系在应用层,查找指定用户的关系用户将在CurdAppServiceBase的子类实现。对于Relation服务,其依赖关系在应用层,查找指定用户的关系用户将在CurdAppServiceBase的子类实现。人员之间的关系是单项的,也就是说可以A是B的好友,但B不一定是A的好友。

2023-07-18 14:50:43 133

原创 怎样优雅地增删查改(七):按用户查询

若指定 UserId 为 Guid.Empty,则使用当前登录用户的 UserId。查询实体列表Dto若实现该接口,将筛选指定 UserId 下的关联的实体。ICurrentUser是Abp的一个服务,用于获取当前登录用户的信息。打开客户详情页面,点击“告警”标签页,可以看到该客户下的告警列表。告警创建完成后,进入客户管理,在右侧客户列表中点击“查看详情”在告警管理页面中,创建一些告警,并将这些告警分配给不同的客户。在不同“群组”下创建一些客户(Client)创建一些组织架构,命名“群组”

2023-07-18 10:36:35 120

原创 怎样优雅地增删查改(六):按任意字段关键字查询

定义按任意字段关键字查询过滤器(IKeywordOrientedFilter)接口,查询实体列表Dto若实现该接口,将筛选指定的目标字段(TargetFields)包含指定的关键字(Keyword)的实体。对于每一个TargetField,需要在实体中找到对应字段(属性)。若找到,则为此实体字段创建条件筛选的表达式,然后将这些表达式通过Or连接起来,最终返回一个包含多段关键字筛选的Lambda表达式。可以看到将筛选出标题包含关键字“3”的告警。在筛选中输入关键字“3”,点击查询。无需在应用层中更改代码,

2023-07-13 20:35:10 185

原创 怎样优雅地增删查改(五):按组织架构查询

要想在任意实体实现Where的过滤条件,我们使用动态拼接语言集成查询 (LINQ) 的方式实现通用查询接口,有关LINQ表达式,请阅读。定义按组织架构查询过滤器(IOrganizationOrientedFilter)接口,查询实体列表Dto若实现该接口,将筛选指定 OrganizationUnitId 下的用户关联的实体。Employee的集合查询业务,是通过重写CreateFilteredQueryAsync方法,来实现按组织架构查询的过滤条件。创建一些组织架构,命名“群组”

2023-07-13 11:08:03 3159

原创 怎样优雅地增删查改(四):创建通用查询基类

上一章我们实现了Employee管理模块,Employee的增删改查是通过其应用服务类,继承自Abp.Application.Services.CrudAppService实现的。在开发业务模块时,我们可以先使用简单的方式提供Curd服务,随着UI复杂度增加,逐步的使用更加复杂的Curd服务。为了更好的代码重用,我们对泛型参数进行扩展,使用CurdAppServiceBase的类可根据实际业务需求选择泛型参数。Brief是一种简化的查询实体集合的方法,其返回的Dto不包含导航属性,以减少数据传输量。

2023-07-13 10:43:42 201

原创 怎样优雅地增删查改(三):业务用户的增删查改

区别于身份管理模块(Identity模块)的鉴权用户IdentityUser,业务用户(BusinessUser)是围绕业务系统中“用户”这一定义的领域模型。这些业务用户继承自HealthUser,HealthUser是业务用户的基类,包含了业务用户的基本信息,如姓名,性别,出生日期,身份证号等。以Client为例,ClientLookupService是业务用户的查询服务,其基类UserLookupService定义了关联用户的查询接口,包括按ID查询,按用户名查询,按组织架构查询,按户关系查询等。

2023-07-10 11:07:43 469

原创 怎样优雅地增删查改(二):扩展身份管理模块

人员之间的关系是单项的,也就是说可以A是B的好友,但B不一定是A的好友。组织(OrganizationUnit)是身份管理模块的核心概念,组织是树形结构,组织之间存在父子关系。Abp为我们实现了一套身份管理模块,此模块包含用户管理、角色管理、组织管理、权限管理等功能。增加人员与组织架构管理接口,如添加/删除人员到组织架构,查询组织架构下的人员,查询未分配组织的人员等;身份管理模块(Identity模块)为通用查询接口的按组织架构查询和按户关系查询提供查询依据。

2023-07-07 18:58:04 780

原创 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 1233

原创 怎样优雅地增删查改(一):从0开始搭建Volo.Abp项目

软件系统中数据库或者持久层的基本操作功能可以用Curd描述,Curd即 增加(Create)、更新(Update)、读取查询(Retrieve)和删除(Delete), 这4个单词的首字母。在常见的业务系统中,对数据的大部分操作都是Curd,在实践的过程中对数据的筛选、排序、分页、关联查询等功能抽象和封装。本系列博文将从0开始,逐步搭建一个基于Volo.Abp + Vue 的前后端分离的,具有Curd通用查询功能的项目。项目介绍本项目是基于一个简单的用户健康数据管理系统,我们将对业务常用的查询功能进

2023-07-04 19:00:09 1007

原创 [MAUI]用纯C#代码写两个漂亮的时钟

谷歌在2021年5月份推出的Android 12给我们带来了新的UI设计规范Material You,你是否已经体验到了Material You设计的魅力了呢?在原生主屏幕启动器中,有一个时钟小部件。这个小部件可以选择表盘风格。图:Android 12的时钟小部件今天挑战在中实现这个Material You风格时钟。

2023-07-01 19:32:58 881

原创 [MAUI]弧形进度条与弧形滑块的交互实现

Maxiumum:最大值Minimum:最小值Progress:当前进度AnimationLength:动画时长BorderWidth:描边宽度LabelContent:标签内容ContainerColor:容器颜色,即进度条的背景色ProgressColor:进度条颜色set;set;set;set;set;set;set;set;以及ValueChange事件,此事件用于在进度值改变时触发。

2023-06-18 14:53:08 1152 1

原创 [MAUI]写一个跨平台富文本编辑器

富文本编辑器是一种所见即所得(what you see is what you get 简称 WYSIWYG)文本样式编辑器,用户在编辑器中输入内容和所做的样式修改,都会直接反映在编辑器中。在Web端常见的有Quill、TinyMCE这些开源免费的富文本编辑器,而目前.NET MAUI方面没有类似的富文本编辑器可以免费使用。使用.NET MAUI实现一个富文本编辑器并不难,今天就来写一个

2023-06-11 23:08:58 850

原创 Volo.Abp升级小记(二)创建全新微服务模块

假设有一个按照搭建的微服务项目,并安装好了abp-cli。需要创建一个名为GDMK.CAH.Common的模块,并在模块中创建标签管理功能。

2023-06-09 14:37:37 1875

原创 [MAUI程序设计] 用Handler实现自定义跨平台控件

定义可以监听的手势类别,分别是按下、移动、抬起、取消、进入、退出Entered,Pressed,Moved,Released,Exited,Cancelled添加手势监听器TouchRecognizer,它将提供一个事件OnTouchActionInvoked,用触发手势动作。EventArg类TouchActionEventArgs,用于传递手势动作的参数get;get;get;get;

2023-06-04 18:35:26 937

原创 [MAUI]模仿Chrome下拉标签页的交互实现

今天来说说怎样在.NET MAUI 中制作一个灵动的类标签页控件,这类控件常用于页面中多个子页面的导航功能。比如在手机版的Chrome中,当用户在网页中下拉时将出现“新建标签页”,“刷新”,“关闭标签页”三个选项,通过不间断的横向手势滑动,可以在这三个选项之间切换。浏览网页常用选项融入到了原“下拉刷新”交互中,对比传统交互方式它更显便捷和流畅,根据Steve Krug之《Don't Make Me Think》的核心思想,用户无需思考点击次序,只需要使用基础动作就能完成交互。

2023-05-28 17:52:43 1140

原创 [MAUI]在.NET MAUI中复刻苹果Cover Flow

Cover Flow是iTunes和Finder中的一个视图选项,允许用户使用水平滚动的图像查看他们的音乐库或文件。Cover Flow的交互设计非常优秀:通过指尖滑动从堆叠的专辑库中翻动和挑选一张专辑的交互方式不仅有趣,而且在有限的屏幕空间内,展现了更多的专辑封面。那个是乔布斯时代的苹果——使事情变得简单和有趣。最近我很怀念这个功能,但由于我手头上已经没有任何一台设备能访问这个功能了。于是在.NET MAUI中复刻了Cover flow

2023-05-21 23:19:14 648

[speech2txt]语音转文本,Azure实现

1. 安装python3 2. pip install pydub,pip install SpeechRecognition 3. 00000000000000000000000000000000 替换成你的key 4. 运行main.py

2024-03-17

ILSpy 8.0 preview3 最新版

ILSpy 8.0 preview3 最新版,支持.net8

2023-03-17

EncodingNormalizer

EncodingNormalizer ,一个自动查询,批量将项目中的编码转为UTF-8的Visual Studio插件

2023-03-17

批量添加csproj项目到sln解决方案的Visual Studio 插件

批量添加csproj项目到sln解决方案的Visual Studio 插件

2023-03-17

ffmpeg for windows

http://www.ffmpeg.org/download.html#build-windows

2023-03-17

SQL Server 命令行工具 sqlcmd

请参考官方文档:在 Linux 上安装 SQL Server 命令行工具 sqlcmd 和 bcp,https://learn.microsoft.com/zh-CN/sql/linux/sql-server-linux-setup-tools

2023-03-17

ffmpeg-2023-03-05-git-912ac82a3c-full-build.7z

ffmpeg依赖库

2023-03-15

rocket.chat-2.4.14.tgz

[学习笔记] Rocket.Chat 安装与设置启动项 https://blog.csdn.net/jevonsflash/article/details/122881564 之附件 详细使用方式请参考章节 使用传统方式部署RocketChat

2023-03-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除