Files
f9-web-ai-test/backend/F9WebAiTest.Application/CQRS/SYS/Employees/Queries/EmployeeQueries.cs
T
yanpeng200212 c3e2665257 生产模块拆分为前缫/后缫;修复菜单卡顿与重复请求;支持 IIS 单站点部署
1. 生产模块按工序拆分为两个一级菜单
   - 生产-前缫(落丝记录)、生产-后缫(纤度检验、黑板检验)
   - 旧的「生产管理」(/prod) 目录及子菜单由种子自动清理,页面组件与权限标识保持不变
   - 消息中心跳转路径、首页快捷入口路径同步更新

2. 职工管理独立为一级菜单(原挂在「基础数据」目录下),并清理历史子菜单

3. 修复侧边栏菜单展开卡顿(基础数据等子项较多的目录尤其明显)
   - 去掉 Element Plus 的 height 过渡动画(会逐帧重排全部子项)
   - 收起时改用 height:0 + visibility:hidden 而非 display:none,子项提前完成布局
   - 菜单区独立滚动并预留滚动条宽度(scrollbar-gutter),消除展开时的横向抖动
   - 菜单项增加 contain 布局隔离,淡入动画改为容器级

4. 修复页面首次打开重复请求
   - 分页组件挂载时会触发一次 current-change,页码未变化时不再重复加载(18 个页面)
   - 职工管理去掉 onMounted 与默认选中部门的重复加载
   - 工种管理、原料庄口的注册表下拉由按 key 多次请求改为一次全量拉取

5. 后端增加前端静态托管与 SPA 路由回退,支持 IIS 单站点部署(前后端同源)
6. 新增部署脚本 deploy-iis.ps1(首次部署)与 update-iis.ps1(更新发布)
2026-10-12 14:09:59 +08:00

51 lines
2.5 KiB
C#

using F9WebAiTest.Application.Common;
using F9WebAiTest.Application.Dtos.SYS.Employees;
using F9WebAiTest.Application.Interfaces.Repositories.SYS.Employees;
using F9WebAiTest.Domain.Enums.SYS.Employees;
using MediatR;
namespace F9WebAiTest.Application.CQRS.SYS.Employees.Queries;
/// <summary>职工分页查询(部门含子部门 + 工种 + 在职状态 + 班次 + 关键字)</summary>
public record GetEmployeePagedQuery(long DepId = 0, long WorktypeId = 0, Employee_WorkStatus_Enum? WorkStatus = null,
Prod_Banci_Enum? Banci = null, string Like = "", int PageIndex = 1, int PageSize = 20)
: IRequest<PageResult<EmployeeReadDto_View>>;
public class GetEmployeePagedQueryHandler(IEmployeeReadRepository readRepository)
: IRequestHandler<GetEmployeePagedQuery, PageResult<EmployeeReadDto_View>>
{
public async Task<PageResult<EmployeeReadDto_View>> Handle(GetEmployeePagedQuery query, CancellationToken ct)
=> await readRepository.GetPagedAsync(query.DepId, query.WorktypeId, query.WorkStatus, query.Banci,
query.Like, query.PageIndex, query.PageSize);
}
/// <summary>按 Id 查询职工(编辑回显)</summary>
public record GetEmployeeByIdQuery(long Id) : IRequest<EmployeeReadDto_Edit>;
public class GetEmployeeByIdQueryHandler(IEmployeeReadRepository readRepository)
: IRequestHandler<GetEmployeeByIdQuery, EmployeeReadDto_Edit>
{
public async Task<EmployeeReadDto_Edit> Handle(GetEmployeeByIdQuery query, CancellationToken ct)
=> await readRepository.GetByIdForEditAsync(query.Id);
}
/// <summary>职工变更记录</summary>
public record GetEmployeeChangeRecordsQuery(long EmployeeId) : IRequest<List<EmployeeChangeRecordDto>>;
public class GetEmployeeChangeRecordsQueryHandler(IEmployeeReadRepository readRepository)
: IRequestHandler<GetEmployeeChangeRecordsQuery, List<EmployeeChangeRecordDto>>
{
public async Task<List<EmployeeChangeRecordDto>> Handle(GetEmployeeChangeRecordsQuery query, CancellationToken ct)
=> await readRepository.GetChangeRecordsAsync(query.EmployeeId);
}
/// <summary>职工调岗记录</summary>
public record GetEmployeeTiaogangRecordsQuery(long EmployeeId) : IRequest<List<EmployeeTiaogangRecordDto>>;
public class GetEmployeeTiaogangRecordsQueryHandler(IEmployeeReadRepository readRepository)
: IRequestHandler<GetEmployeeTiaogangRecordsQuery, List<EmployeeTiaogangRecordDto>>
{
public async Task<List<EmployeeTiaogangRecordDto>> Handle(GetEmployeeTiaogangRecordsQuery query, CancellationToken ct)
=> await readRepository.GetTiaogangRecordsAsync(query.EmployeeId);
}