提交
This commit is contained in:
parent
2438f9714c
commit
c8f0706eeb
@ -1,5 +1,8 @@
|
|||||||
---
|
---
|
||||||
|
title: CSS
|
||||||
|
date: 2024-03-23 10:30:31
|
||||||
|
author: 文永达
|
||||||
|
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg
|
||||||
---
|
---
|
||||||
|
|
||||||
## CSS Text(文本)
|
## CSS Text(文本)
|
||||||
|
|||||||
@ -1,3 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: Intellij Platform
|
||||||
|
date: 2023-11-18 10:30:31
|
||||||
|
author: 文永达
|
||||||
|
---
|
||||||
# Intellij IDEA
|
# Intellij IDEA
|
||||||
|
|
||||||
## Spring Boot DevTools热重载
|
## Spring Boot DevTools热重载
|
||||||
|
|||||||
@ -1,3 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: JavaScript
|
||||||
|
date: 2023-11-18 10:30:31
|
||||||
|
author: 文永达
|
||||||
|
---
|
||||||
# 异步编程
|
# 异步编程
|
||||||
|
|
||||||
## await
|
## await
|
||||||
@ -247,7 +252,7 @@ var arrowFunc = (arg1, arg2) => {
|
|||||||
<body>
|
<body>
|
||||||
<input type="text" id="inp">
|
<input type="text" id="inp">
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 1.封装防抖函数
|
// 1.封装防抖函数
|
||||||
function debounce(fn, time) {
|
function debounce(fn, time) {
|
||||||
// 4.创建一个标记用来存放定时器的返回值
|
// 4.创建一个标记用来存放定时器的返回值
|
||||||
@ -269,8 +274,8 @@ var arrowFunc = (arg1, arg2) => {
|
|||||||
function sayHi() {
|
function sayHi() {
|
||||||
console.log('防抖成功');
|
console.log('防抖成功');
|
||||||
}
|
}
|
||||||
// 3.给inp绑定input事件 调用封装的防抖函数 传入要执行的内容与间隔事件
|
// 3.给inp绑定input事件 调用封装的防抖函数 传入要执行的内容与间隔事件
|
||||||
inp.addEventListener('input', debounce(sayHi, 5000));
|
inp.addEventListener('input', debounce(sayHi, 5000));
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
@ -319,7 +324,7 @@ search搜索时,用户在不断输入值时,用防抖来节约请求资源
|
|||||||
// 打印当前 document 的宽高
|
// 打印当前 document 的宽高
|
||||||
console.log(e.target.innerWidth, e.target.innerHeight);
|
console.log(e.target.innerWidth, e.target.innerHeight);
|
||||||
}
|
}
|
||||||
// 2.绑定事件,绑定时就调用节流函数
|
// 2.绑定事件,绑定时就调用节流函数
|
||||||
// 敲黑板!!! 这里是重点 绑定是就要调用一下封装的节流函数 触发事件是触发封装函数内部的函数
|
// 敲黑板!!! 这里是重点 绑定是就要调用一下封装的节流函数 触发事件是触发封装函数内部的函数
|
||||||
window.addEventListener('resize', throttle(sayHi, 2000));
|
window.addEventListener('resize', throttle(sayHi, 2000));
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,3 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: Maven与Gradle
|
||||||
|
date: 2023-11-18 10:30:31
|
||||||
|
author: 文永达
|
||||||
|
---
|
||||||
# Maven
|
# Maven
|
||||||
|
|
||||||
## Maven to Gradle
|
## Maven to Gradle
|
||||||
|
|||||||
@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: Mybatis基本介绍
|
||||||
|
date: 2022-11-18 10:30:31
|
||||||
|
author: 文永达
|
||||||
|
---
|
||||||
|
|
||||||
# Mybatis
|
# Mybatis
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -54,7 +60,7 @@
|
|||||||
<!-- 注册接口 -->
|
<!-- 注册接口 -->
|
||||||
<!--<mapper class="com.wyd.dao.UserMapper2"></mapper>-->
|
<!--<mapper class="com.wyd.dao.UserMapper2"></mapper>-->
|
||||||
</mappers>
|
</mappers>
|
||||||
|
|
||||||
</configuration>
|
</configuration>
|
||||||
```
|
```
|
||||||
## Springboot中 *application.yml*
|
## Springboot中 *application.yml*
|
||||||
@ -82,7 +88,7 @@ import com.wyd.mybatis20210702.entity.User;
|
|||||||
|
|
||||||
public interface UserMapper {
|
public interface UserMapper {
|
||||||
User selectUserById(Integer id);
|
User selectUserById(Integer id);
|
||||||
|
|
||||||
int insertUser(User user);
|
int insertUser(User user);
|
||||||
|
|
||||||
int updateUser(User user);
|
int updateUser(User user);
|
||||||
@ -107,7 +113,7 @@ public interface UserMapper {
|
|||||||
<select id="selectUserById" resultType="user">
|
<select id="selectUserById" resultType="user">
|
||||||
SELECT id,username,PASSWORD,birthday FROM USER
|
SELECT id,username,PASSWORD,birthday FROM USER
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<insert id="insertUser" parameterType="com.crx.entity.User">
|
<insert id="insertUser" parameterType="com.crx.entity.User">
|
||||||
insert into user (username,password) values (#{username},#{password})
|
insert into user (username,password) values (#{username},#{password})
|
||||||
</insert>
|
</insert>
|
||||||
@ -171,7 +177,7 @@ if(username != null && !"".equals(username.trim())){
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
resultType 就是 返回的数据类型,有点儿Java方法中的return 不过这是返回的类型而不是变量名
|
resultType 就是 返回的数据类型,有点儿Java方法中的return 不过这是返回的类型而不是变量名
|
||||||
|
|
||||||
parameterType 就是参数类型,实体类要写包名类名
|
parameterType 就是参数类型,实体类要写包名类名
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
title: tags
|
title: Visual Studio
|
||||||
date: 2018-09-30 18:23:38
|
date: 2018-09-30 18:23:38
|
||||||
type: "tags"
|
type: "tags"
|
||||||
layout: "tags"
|
layout: "tags"
|
||||||
|
|||||||
@ -1,3 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: Vue3
|
||||||
|
date: 2023-11-18 10:30:31
|
||||||
|
author: 文永达
|
||||||
|
---
|
||||||
# 响应式
|
# 响应式
|
||||||
|
|
||||||
在Vue 3中,响应式是通过`reactive`函数和`ref`函数实现的。`reactive`函数用于创建一个响应式对象,而`ref`函数用于创建一个包装对象,将基本类型的值转换为响应式对象。
|
在Vue 3中,响应式是通过`reactive`函数和`ref`函数实现的。`reactive`函数用于创建一个响应式对象,而`ref`函数用于创建一个包装对象,将基本类型的值转换为响应式对象。
|
||||||
@ -454,7 +459,7 @@ export function useFetchSelect(props: FetchSelectProps) {
|
|||||||
}, 3000);
|
}, 3000);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 将之前用的 options,loading,和调用接口的逻辑都抽离到hook中
|
// 将之前用的 options,loading,和调用接口的逻辑都抽离到hook中
|
||||||
const selectBind = useFetchSelect({
|
const selectBind = useFetchSelect({
|
||||||
apiFun: getRemoteData,
|
apiFun: getRemoteData,
|
||||||
|
|||||||
@ -247,7 +247,7 @@ namespace XiaodaERP.Services
|
|||||||
private readonly SqlServerDbContext _sqlServerDbContext;
|
private readonly SqlServerDbContext _sqlServerDbContext;
|
||||||
private readonly TokenHelper _tokenHelper;
|
private readonly TokenHelper _tokenHelper;
|
||||||
public AccountService(OracleDbContext oracleDbContext, SqlServerDbContext sqlServerDbContext, TokenHelper tokenHelper)
|
public AccountService(OracleDbContext oracleDbContext, SqlServerDbContext sqlServerDbContext, TokenHelper tokenHelper)
|
||||||
{
|
{
|
||||||
_oracleDbContext = oracleDbContext;
|
_oracleDbContext = oracleDbContext;
|
||||||
_sqlServerDbContext = sqlServerDbContext;
|
_sqlServerDbContext = sqlServerDbContext;
|
||||||
_tokenHelper = tokenHelper;
|
_tokenHelper = tokenHelper;
|
||||||
@ -325,7 +325,7 @@ namespace XiaodaERP.Services
|
|||||||
{
|
{
|
||||||
res = _sqlServerDbContext.Users.Include(user => user.Role).ToList();
|
res = _sqlServerDbContext.Users.Include(user => user.Role).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ViewUser> viewUsers = new();
|
List<ViewUser> viewUsers = new();
|
||||||
var config = new MapperConfiguration(cfg => cfg.CreateMap<User, ViewUser>()
|
var config = new MapperConfiguration(cfg => cfg.CreateMap<User, ViewUser>()
|
||||||
.ForMember(dest => dest.username, opt => opt.MapFrom(src => src.UserName))
|
.ForMember(dest => dest.username, opt => opt.MapFrom(src => src.UserName))
|
||||||
@ -352,11 +352,11 @@ namespace XiaodaERP.Services
|
|||||||
.BeforeMap((src, des) => des.CreateUserId = _tokenHelper.GetToken<ViewUser>(TokenHelper.Token).UserId)
|
.BeforeMap((src, des) => des.CreateUserId = _tokenHelper.GetToken<ViewUser>(TokenHelper.Token).UserId)
|
||||||
.BeforeMap((src, des) => des.CreateUserName = _tokenHelper.GetToken<ViewUser>(TokenHelper.Token).username));
|
.BeforeMap((src, des) => des.CreateUserName = _tokenHelper.GetToken<ViewUser>(TokenHelper.Token).username));
|
||||||
var mapper = config.CreateMapper();
|
var mapper = config.CreateMapper();
|
||||||
if (res == null)
|
if (res == null)
|
||||||
{
|
{
|
||||||
_sqlServerDbContext.Users.Add(
|
_sqlServerDbContext.Users.Add(
|
||||||
mapper.Map<User>(viewUser)
|
mapper.Map<User>(viewUser)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -370,21 +370,21 @@ namespace XiaodaERP.Services
|
|||||||
return _sqlServerDbContext.SaveChanges() > 0;
|
return _sqlServerDbContext.SaveChanges() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// MD5 加密字符串
|
/// MD5 加密字符串
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="rawPass">源字符串</param>
|
/// <param name="rawPass">源字符串</param>
|
||||||
/// <returns>加密后字符串</returns>
|
/// <returns>加密后字符串</returns>
|
||||||
public string Md5Encoding(string rawPass)
|
public string Md5Encoding(string rawPass)
|
||||||
{
|
{
|
||||||
// 创建MD5类的默认实例:MD5CryptoServiceProvider
|
// 创建MD5类的默认实例:MD5CryptoServiceProvider
|
||||||
var md5 = MD5.Create();
|
var md5 = MD5.Create();
|
||||||
var bs = Encoding.UTF8.GetBytes(rawPass);
|
var bs = Encoding.UTF8.GetBytes(rawPass);
|
||||||
var hs = md5.ComputeHash(bs);
|
var hs = md5.ComputeHash(bs);
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
foreach (var b in hs)
|
foreach (var b in hs)
|
||||||
{
|
{
|
||||||
// 以十六进制格式格式化
|
// 以十六进制格式格式化
|
||||||
sb.Append(b.ToString("x2"));
|
sb.Append(b.ToString("x2"));
|
||||||
}
|
}
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
@ -507,8 +507,8 @@ namespace XiaodaERP.Services
|
|||||||
mapper.Map<ViewUser>(user)
|
mapper.Map<ViewUser>(user)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return new PageResult<ViewUser>
|
return new PageResult<ViewUser>
|
||||||
{
|
{
|
||||||
Items = viewUsers,
|
Items = viewUsers,
|
||||||
Total = count
|
Total = count
|
||||||
};
|
};
|
||||||
@ -569,7 +569,7 @@ namespace XiaodaERP.Controllers
|
|||||||
{
|
{
|
||||||
return ResultUtil.ok(_accountService.GetAllAccounts(deptId, userName, realName));
|
return ResultUtil.ok(_accountService.GetAllAccounts(deptId, userName, realName));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Authorize]
|
[Authorize]
|
||||||
|
|||||||
@ -1,133 +0,0 @@
|
|||||||
# Furion
|
|
||||||
|
|
||||||
## 脚手架
|
|
||||||
|
|
||||||
Furion+SqlSugar WebAPI
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
从.NET5到.NET8都可以选择
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 项目结构
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 引用
|
|
||||||
|
|
||||||
Core -> Application -> Web.Core -> Web.Entry
|
|
||||||
|
|
||||||
↓ -> System -> Web.Core -> Web.Entry
|
|
||||||
|
|
||||||
依赖在Core中安装
|
|
||||||
|
|
||||||
## 依赖安装
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Blog.Core
|
|
||||||
|
|
||||||
## 项目结构
|
|
||||||
|
|
||||||
### 后端
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 前端
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 引用
|
|
||||||
|
|
||||||
Model -> Common -> IServices -> Services -> Entensions -> Api
|
|
||||||
|
|
||||||
-> Tasks
|
|
||||||
|
|
||||||
## 依赖安装
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
`AutoMapper` -> **Model**
|
|
||||||
|
|
||||||
`AutoMapper.Extensions.Microsoft.DependencyInjection` -> **Model**
|
|
||||||
|
|
||||||
`log4net` -> **Common**
|
|
||||||
|
|
||||||
`Autofac.Extras.DynamicProxy` -> **Extensions**
|
|
||||||
|
|
||||||
`Autofac.Extensions.DependencyInjection` -> **Extensions**
|
|
||||||
|
|
||||||
`Newtonsoft.Json` -> **Extensions**
|
|
||||||
|
|
||||||
`Quartz` -> **Tasks**
|
|
||||||
|
|
||||||
`SqlSugarCore` -> **Model**
|
|
||||||
|
|
||||||
`StackExchange.Redis` -> **Common**
|
|
||||||
|
|
||||||
`FluentValidation.AspNetCore` -> **Api**
|
|
||||||
|
|
||||||
`FluentValidation.DependencyInjectionExtensions` -> **Api**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ZRAdmin.NET
|
|
||||||
|
|
||||||
## 项目结构
|
|
||||||
|
|
||||||
### 后端
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 前端
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
[ZRAdmin.NET在线文档 (izhaorui.cn)](http://www.izhaorui.cn/doc/)
|
|
||||||
|
|
||||||
## 引用
|
|
||||||
|
|
||||||
common -> Tasks ->
|
|
||||||
|
|
||||||
Model -> Repository -> Service -> WebApi
|
|
||||||
|
|
||||||
Infrastructure ->
|
|
||||||
|
|
||||||
项目结构比较像Java的若依框架
|
|
||||||
|
|
||||||
## 依赖安装
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
# 优缺点对比
|
|
||||||
|
|
||||||
| | Furion | Blog.Core | ZRAdmin.NET |
|
|
||||||
| ------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
|
||||||
| 项目结构 | 跟MVC三层架构还是有不少差别,可能有DDD的思想在里面,只是业务层做了系统和应用层区分,和B端的ERP有很大差别 | 比较符合MVC三层架构,但是其中的时间总线和路由,是项目用不上的,如果做拆分,会有依赖引用问题 | 比较像Java的若依框架,经典三层架构,只是Infrastructure ,其实可以合并到Common中 |
|
|
||||||
| 依赖安装 | Furion集成不少依赖,虽然开发方便,但由于都是集成的,后续有升级难度,定时任务是框架重写了一套,没有用到Quartz.Net | 集成的都是常用的,但是也集成了不少微服务开发和分布式总线上才用到的,会显得比较臃肿 | 集成的有常用的,有较新的,比如NLog,Mapster,但实际看来是比Log4Net和AutoMapper性能要强,Autofac没有集成,使用ASP.Net自带的封装注解,Redis客户端工具类使用的是CSRedisCore,没有用StackExchange.Redis,但是据说存在不定时连接超时的问题,还有就是没有IdentityServer 4的集成 |
|
|
||||||
| 文档 | 全 | 较全,但文档日期停留在 2021-08-21 | 全,比较像Java的若依框架文档 |
|
|
||||||
| 近期维护更新 | 常有,最近的是2小时前,但是仔细看提交记录,其实更新主要还是在文档上 | 有,最近的是20小时前,着重于日志,多租户方面的更新 | 有,最近的是15天前,目前项目总体进入维护状态,大的改动没有,比较稳定,只有针对ISSUE的提交 |
|
|
||||||
| 其他 | 脚手架方便搭建,但是Furion更像是一个工具包集合,而不是框架,没有Admin等功能,所以这部分还需要自己去完成,因为这只是个架子 | 有博客端也有Admin端,但是仍是使用的Vue2,技术栈较久,今年年末就会停止维护,API没有进行分层,都写在一个JS中,后期不好维护,层叠样式表使用CSS,相比较SCSS,语法上较为麻烦 | 有Vue2,也有Vue3版的管理端,可以着重于应用业务上的开发,唯一的是前端使用了JavaScript开发,如果是TypeScript会更好,前端风格跟Java的若依框架前端基本一致,功能也是。后端Redis没有默认开启,需要手动集成,作者很贴心的留了注解,ORM用了sqlsugar,用了多租户,但是配置是在代码中,其实自己给移到配置文件里是最好的 |
|
|
||||||
| 推荐指数 | 3 | 4 | 5 |
|
|
||||||
|
|
||||||
# 后端开发环境
|
|
||||||
|
|
||||||
`Visual Studio 2022`
|
|
||||||
|
|
||||||
**dotnet-sdk-7.0.202-win-x64.exe** [下载 .NET 7.0 SDK (v7.0.202) - Windows x64 Installer (microsoft.com)](https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/sdk-7.0.202-windows-x64-installer)
|
|
||||||
|
|
||||||
# 前端开发环境
|
|
||||||
|
|
||||||
`Visual Studio Code`
|
|
||||||
|
|
||||||
安装扩展
|
|
||||||
|
|
||||||
`Volar` `i18n Ally`
|
|
||||||
|
|
||||||
**node-v16.20.1-x64.msi** [Index of /download/release/v16.20.0/ (nodejs.org)](https://nodejs.org/download/release/v16.20.0/)
|
|
||||||
|
|
||||||
https://nodejs.org/download/release/v16.20.0/node-v16.20.0-x64.msi
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user