From 1d745bcb4acb7ba91c35a086d6244f3fc8c20cda Mon Sep 17 00:00:00 2001 From: 移动系统liao <liaoxujun@qq.com> Date: 星期四, 19 六月 2025 09:19:43 +0800 Subject: [PATCH] no message --- Web/src/views/ADPenalty/aDPenalty/index.vue | 174 ++++++++++++ Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyOutput.cs | 79 +++++ Web/src/api/ADPenalty/aDPenalty.ts | 50 +++ Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyDto.cs | 79 +++++ Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyInput.cs | 179 ++++++++++++ Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/ADPenaltyService.cs | 131 +++++++++ Web/src/views/ADPenalty/aDPenalty/component/editDialog.vue | 117 ++++++++ 7 files changed, 809 insertions(+), 0 deletions(-) diff --git a/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/ADPenaltyService.cs b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/ADPenaltyService.cs new file mode 100644 index 0000000..b16c340 --- /dev/null +++ b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/ADPenaltyService.cs @@ -0,0 +1,131 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +using Admin.NET.Core.Service; +using Microsoft.AspNetCore.Http; + +using Furion.DatabaseAccessor; +using Furion.FriendlyException; +using Mapster; +using SqlSugar; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using Microsoft.AspNetCore.Mvc; +using Admin.NET.Core; +using Admin.NET.Application; +using Furion.DynamicApiController; +using FZCZTB.NET.MD; +using Furion.DependencyInjection; +namespace FZCZTB.TSCL.Application; + +/// <summary> +/// 琛屾斂澶勭綒鏈嶅姟 馃З +/// </summary> +[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)] +public class ADPenaltyService : IDynamicApiController, ITransient +{ + private readonly SqlSugarRepository<ADPenalty> _aDPenaltyRep; + + public ADPenaltyService(SqlSugarRepository<ADPenalty> aDPenaltyRep) + { + _aDPenaltyRep = aDPenaltyRep; + } + + /// <summary> + /// 鍒嗛〉鏌ヨ琛屾斂澶勭綒 馃敄 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [DisplayName("鍒嗛〉鏌ヨ琛屾斂澶勭綒")] + [ApiDescriptionSettings(Name = "Page"), HttpPost] + public async Task<SqlSugarPagedList<ADPenaltyOutput>> Page(PageADPenaltyInput input) + { + input.Keyword = input.Keyword?.Trim(); + var query = _aDPenaltyRep.AsQueryable() + .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Parties.Contains(input.Keyword) || u.CaseReason.Contains(input.Keyword) || u.DisposalDecision.Contains(input.Keyword) || u.SupervisionDepartment.Contains(input.Keyword)) + .WhereIF(!string.IsNullOrWhiteSpace(input.Parties), u => u.Parties.Contains(input.Parties.Trim())) + .WhereIF(!string.IsNullOrWhiteSpace(input.CaseReason), u => u.CaseReason.Contains(input.CaseReason.Trim())) + .WhereIF(!string.IsNullOrWhiteSpace(input.DisposalDecision), u => u.DisposalDecision.Contains(input.DisposalDecision.Trim())) + .WhereIF(!string.IsNullOrWhiteSpace(input.SupervisionDepartment), u => u.SupervisionDepartment.Contains(input.SupervisionDepartment.Trim())) + .WhereIF(input.DecisionDateRange?.Length == 2, u => u.DecisionDate >= input.DecisionDateRange[0] && u.DecisionDate <= input.DecisionDateRange[1]) + .Select<ADPenaltyOutput>(); + return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize); + } + + /// <summary> + /// 鑾峰彇琛屾斂澶勭綒璇︽儏 鈩癸笍 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [DisplayName("鑾峰彇琛屾斂澶勭綒璇︽儏")] + [ApiDescriptionSettings(Name = "Detail"), HttpGet] + public async Task<ADPenalty> Detail([FromQuery] QueryByIdADPenaltyInput input) + { + return await _aDPenaltyRep.GetFirstAsync(u => u.Id == input.Id); + } + + /// <summary> + /// 澧炲姞琛屾斂澶勭綒 鉃� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [DisplayName("澧炲姞琛屾斂澶勭綒")] + [ApiDescriptionSettings(Name = "Add"), HttpPost] + public async Task<bool> Add(AddADPenaltyInput input) + { + var entity = input.Adapt<ADPenalty>(); + entity.Id = Guid.NewGuid(); + return await _aDPenaltyRep.InsertAsync(entity) ; + } + + /// <summary> + /// 鏇存柊琛屾斂澶勭綒 鉁忥笍 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [DisplayName("鏇存柊琛屾斂澶勭綒")] + [ApiDescriptionSettings(Name = "Update"), HttpPost] + public async Task Update(UpdateADPenaltyInput input) + { + var entity = input.Adapt<ADPenalty>(); + await _aDPenaltyRep.AsUpdateable(entity) + .IgnoreColumns(u => new { + u.Url, + }) + .ExecuteCommandAsync(); + } + + /// <summary> + /// 鍒犻櫎琛屾斂澶勭綒 鉂� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [DisplayName("鍒犻櫎琛屾斂澶勭綒")] + [ApiDescriptionSettings(Name = "Delete"), HttpPost] + public async Task Delete(DeleteADPenaltyInput input) + { + var entity = await _aDPenaltyRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002); + await _aDPenaltyRep.DeleteAsync(entity); //鍋囧垹闄� + //await _aDPenaltyRep.DeleteAsync(entity); //鐪熷垹闄� + } + + /// <summary> + /// 鎵归噺鍒犻櫎琛屾斂澶勭綒 鉂� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [DisplayName("鎵归噺鍒犻櫎琛屾斂澶勭綒")] + [ApiDescriptionSettings(Name = "BatchDelete"), HttpPost] + public async Task<bool> BatchDelete([Required(ErrorMessage = "涓婚敭鍒楄〃涓嶈兘涓虹┖")]List<DeleteADPenaltyInput> input) + { + var exp = Expressionable.Create<ADPenalty>(); + foreach (var row in input) exp = exp.Or(it => it.Id == row.Id); + var list = await _aDPenaltyRep.AsQueryable().Where(exp.ToExpression()).ToListAsync(); + + return await _aDPenaltyRep.DeleteAsync(list); //鍋囧垹闄� + //return await _aDPenaltyRep.DeleteAsync(list); //鐪熷垹闄� + } +} diff --git a/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyDto.cs b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyDto.cs new file mode 100644 index 0000000..a12a866 --- /dev/null +++ b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyDto.cs @@ -0,0 +1,79 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +namespace FZCZTB.TSCL.Application; + +/// <summary> +/// 琛屾斂澶勭綒杈撳嚭鍙傛暟 +/// </summary> +public class ADPenaltyDto +{ + /// <summary> + /// id + /// </summary> + public Guid Id { get; set; } + + /// <summary> + /// 鍐冲畾鏃ユ湡 + /// </summary> + public DateTime DecisionDate { get; set; } + + /// <summary> + /// 褰撲簨浜轰俊鎭� + /// </summary> + public string? Parties { get; set; } + + /// <summary> + /// 妗堢敱鎻忚堪 + /// </summary> + public string? CaseReason { get; set; } + + /// <summary> + /// 澶勭悊鍐冲畾鍐呭 + /// </summary> + public string? DisposalDecision { get; set; } + + /// <summary> + /// 閲囪喘鐩戠潱閮ㄩ棬鍚嶇О + /// </summary> + public string? SupervisionDepartment { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public DateTime? CreateTime { get; set; } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public DateTime? UpdateTime { get; set; } + + /// <summary> + /// 鍒涘缓鑰匢d + /// </summary> + public long? CreateUserId { get; set; } + + /// <summary> + /// 鍒涘缓鑰呭鍚� + /// </summary> + public string? CreateUserName { get; set; } + + /// <summary> + /// 淇敼鑰匢d + /// </summary> + public long? UpdateUserId { get; set; } + + /// <summary> + /// 淇敼鑰呭鍚� + /// </summary> + public string? UpdateUserName { get; set; } + + /// <summary> + /// 绾夸笂鍦板潃 + /// </summary> + public string? Url { get; set; } + +} diff --git a/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyInput.cs b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyInput.cs new file mode 100644 index 0000000..0a7ffff --- /dev/null +++ b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyInput.cs @@ -0,0 +1,179 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +using Admin.NET.Core; +using System.ComponentModel.DataAnnotations; +using Magicodes.ExporterAndImporter.Core; +using Magicodes.ExporterAndImporter.Excel; + +namespace FZCZTB.TSCL.Application; + +/// <summary> +/// 琛屾斂澶勭綒鍩虹杈撳叆鍙傛暟 +/// </summary> +public class ADPenaltyBaseInput +{ + /// <summary> + /// id + /// </summary> + public virtual Guid Id { get; set; } + + /// <summary> + /// 鍐冲畾鏃ユ湡 + /// </summary> + [Required(ErrorMessage = "鍐冲畾鏃ユ湡涓嶈兘涓虹┖")] + public virtual DateTime DecisionDate { get; set; } + + /// <summary> + /// 褰撲簨浜轰俊鎭� + /// </summary> + public virtual string? Parties { get; set; } + + /// <summary> + /// 妗堢敱鎻忚堪 + /// </summary> + public virtual string? CaseReason { get; set; } + + /// <summary> + /// 澶勭悊鍐冲畾鍐呭 + /// </summary> + public virtual string? DisposalDecision { get; set; } + + /// <summary> + /// 閲囪喘鐩戠潱閮ㄩ棬鍚嶇О + /// </summary> + public virtual string? SupervisionDepartment { get; set; } + +} + +/// <summary> +/// 琛屾斂澶勭綒鍒嗛〉鏌ヨ杈撳叆鍙傛暟 +/// </summary> +public class PageADPenaltyInput : BasePageInput +{ + /// <summary> + /// 鍐冲畾鏃ユ湡鑼冨洿 + /// </summary> + public DateTime?[] DecisionDateRange { get; set; } + + /// <summary> + /// 褰撲簨浜轰俊鎭� + /// </summary> + public string? Parties { get; set; } + + /// <summary> + /// 妗堢敱鎻忚堪 + /// </summary> + public string? CaseReason { get; set; } + + /// <summary> + /// 澶勭悊鍐冲畾鍐呭 + /// </summary> + public string? DisposalDecision { get; set; } + + /// <summary> + /// 閲囪喘鐩戠潱閮ㄩ棬鍚嶇О + /// </summary> + public string? SupervisionDepartment { get; set; } + +} + +/// <summary> +/// 琛屾斂澶勭綒澧炲姞杈撳叆鍙傛暟 +/// </summary> +public class AddADPenaltyInput +{ + /// <summary> + /// 鍐冲畾鏃ユ湡 + /// </summary> + [Required(ErrorMessage = "鍐冲畾鏃ユ湡涓嶈兘涓虹┖")] + public DateTime DecisionDate { get; set; } + + /// <summary> + /// 褰撲簨浜轰俊鎭� + /// </summary> + [MaxLength(255, ErrorMessage = "褰撲簨浜轰俊鎭瓧绗﹂暱搴︿笉鑳借秴杩�255")] + public string? Parties { get; set; } + + /// <summary> + /// 妗堢敱鎻忚堪 + /// </summary> + public string? CaseReason { get; set; } + + /// <summary> + /// 澶勭悊鍐冲畾鍐呭 + /// </summary> + public string? DisposalDecision { get; set; } + + /// <summary> + /// 閲囪喘鐩戠潱閮ㄩ棬鍚嶇О + /// </summary> + [MaxLength(255, ErrorMessage = "閲囪喘鐩戠潱閮ㄩ棬鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃255")] + public string? SupervisionDepartment { get; set; } + +} + +/// <summary> +/// 琛屾斂澶勭綒鍒犻櫎杈撳叆鍙傛暟 +/// </summary> +public class DeleteADPenaltyInput +{ + /// <summary> + /// id + /// </summary> + [Required(ErrorMessage = "id涓嶈兘涓虹┖")] + public Guid Id { get; set; } + +} + +/// <summary> +/// 琛屾斂澶勭綒鏇存柊杈撳叆鍙傛暟 +/// </summary> +public class UpdateADPenaltyInput +{ + /// <summary> + /// id + /// </summary> + [Required(ErrorMessage = "id涓嶈兘涓虹┖")] + public Guid Id { get; set; } + + /// <summary> + /// 鍐冲畾鏃ユ湡 + /// </summary> + [Required(ErrorMessage = "鍐冲畾鏃ユ湡涓嶈兘涓虹┖")] + public DateTime DecisionDate { get; set; } + + /// <summary> + /// 褰撲簨浜轰俊鎭� + /// </summary> + [MaxLength(255, ErrorMessage = "褰撲簨浜轰俊鎭瓧绗﹂暱搴︿笉鑳借秴杩�255")] + public string? Parties { get; set; } + + /// <summary> + /// 妗堢敱鎻忚堪 + /// </summary> + public string? CaseReason { get; set; } + + /// <summary> + /// 澶勭悊鍐冲畾鍐呭 + /// </summary> + public string? DisposalDecision { get; set; } + + /// <summary> + /// 閲囪喘鐩戠潱閮ㄩ棬鍚嶇О + /// </summary> + [MaxLength(255, ErrorMessage = "閲囪喘鐩戠潱閮ㄩ棬鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃255")] + public string? SupervisionDepartment { get; set; } + +} + +/// <summary> +/// 琛屾斂澶勭綒涓婚敭鏌ヨ杈撳叆鍙傛暟 +/// </summary> +public class QueryByIdADPenaltyInput : DeleteADPenaltyInput +{ +} + diff --git a/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyOutput.cs b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyOutput.cs new file mode 100644 index 0000000..1f40bb3 --- /dev/null +++ b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyOutput.cs @@ -0,0 +1,79 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� +using Magicodes.ExporterAndImporter.Core; +namespace FZCZTB.TSCL.Application; + +/// <summary> +/// 琛屾斂澶勭綒杈撳嚭鍙傛暟 +/// </summary> +public class ADPenaltyOutput +{ + /// <summary> + /// id + /// </summary> + public Guid Id { get; set; } + + /// <summary> + /// 鍐冲畾鏃ユ湡 + /// </summary> + public DateTime DecisionDate { get; set; } + + /// <summary> + /// 褰撲簨浜轰俊鎭� + /// </summary> + public string? Parties { get; set; } + + /// <summary> + /// 妗堢敱鎻忚堪 + /// </summary> + public string? CaseReason { get; set; } + + /// <summary> + /// 澶勭悊鍐冲畾鍐呭 + /// </summary> + public string? DisposalDecision { get; set; } + + /// <summary> + /// 閲囪喘鐩戠潱閮ㄩ棬鍚嶇О + /// </summary> + public string? SupervisionDepartment { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public DateTime? CreateTime { get; set; } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public DateTime? UpdateTime { get; set; } + + /// <summary> + /// 鍒涘缓鑰匢d + /// </summary> + public long? CreateUserId { get; set; } + + /// <summary> + /// 鍒涘缓鑰呭鍚� + /// </summary> + public string? CreateUserName { get; set; } + + /// <summary> + /// 淇敼鑰匢d + /// </summary> + public long? UpdateUserId { get; set; } + + /// <summary> + /// 淇敼鑰呭鍚� + /// </summary> + public string? UpdateUserName { get; set; } + + /// <summary> + /// 绾夸笂鍦板潃 + /// </summary> + public string? Url { get; set; } + +} diff --git a/Web/src/api/ADPenalty/aDPenalty.ts b/Web/src/api/ADPenalty/aDPenalty.ts new file mode 100644 index 0000000..3a5ca94 --- /dev/null +++ b/Web/src/api/ADPenalty/aDPenalty.ts @@ -0,0 +1,50 @@ +锘縤mport {useBaseApi} from '/@/api/base'; + +// 琛屾斂澶勭綒鎺ュ彛鏈嶅姟 +export const useADPenaltyApi = () => { + const baseApi = useBaseApi("aDPenalty"); + return { + // 鍒嗛〉鏌ヨ琛屾斂澶勭綒 + page: baseApi.page, + // 鏌ョ湅琛屾斂澶勭綒璇︾粏 + detail: baseApi.detail, + // 鏂板琛屾斂澶勭綒 + add: baseApi.add, + // 鏇存柊琛屾斂澶勭綒 + update: baseApi.update, + // 鍒犻櫎琛屾斂澶勭綒 + delete: baseApi.delete, + // 鎵归噺鍒犻櫎琛屾斂澶勭綒 + batchDelete: baseApi.batchDelete, + } +} + +// 琛屾斂澶勭綒瀹炰綋 +export interface ADPenalty { + // id + id: string; + // 鍐冲畾鏃ユ湡 + decisionDate?: string; + // 褰撲簨浜轰俊鎭� + parties: string; + // 妗堢敱鎻忚堪 + caseReason: string; + // 澶勭悊鍐冲畾鍐呭 + disposalDecision: string; + // 閲囪喘鐩戠潱閮ㄩ棬鍚嶇О + supervisionDepartment: string; + // 鍒涘缓鏃堕棿 + createTime: string; + // 鏇存柊鏃堕棿 + updateTime: string; + // 鍒涘缓鑰匢d + createUserId: number; + // 鍒涘缓鑰呭鍚� + createUserName: string; + // 淇敼鑰匢d + updateUserId: number; + // 淇敼鑰呭鍚� + updateUserName: string; + // 绾夸笂鍦板潃 + url: string; +} \ No newline at end of file diff --git a/Web/src/views/ADPenalty/aDPenalty/component/editDialog.vue b/Web/src/views/ADPenalty/aDPenalty/component/editDialog.vue new file mode 100644 index 0000000..65ffb27 --- /dev/null +++ b/Web/src/views/ADPenalty/aDPenalty/component/editDialog.vue @@ -0,0 +1,117 @@ +锘�<script lang="ts" name="aDPenalty" setup> +import { ref, reactive, onMounted } from "vue"; +import { ElMessage } from "element-plus"; +import type { FormRules } from "element-plus"; +import { formatDate } from '/@/utils/formatTime'; +import { useADPenaltyApi } from '/@/api/ADPenalty/aDPenalty'; + +//鐖剁骇浼犻�掓潵鐨勫嚱鏁帮紝鐢ㄤ簬鍥炶皟 +const emit = defineEmits(["reloadTable"]); +const aDPenaltyApi = useADPenaltyApi(); +const ruleFormRef = ref(); + +const state = reactive({ + title: '', + loading: false, + showDialog: false, + ruleForm: {} as any, + stores: {}, + dropdownData: {} as any, +}); + +// 鑷娣诲姞鍏朵粬瑙勫垯 +const rules = ref<FormRules>({ + decisionDate: [{required: true, message: '璇烽�夋嫨鍐冲畾鏃ユ湡锛�', trigger: 'change',},], +}); + +// 椤甸潰鍔犺浇鏃� +onMounted(async () => { +}); + +// 鎵撳紑寮圭獥 +const openDialog = async (row: any, title: string) => { + state.title = title; + row = row ?? { }; + state.ruleForm = row.id ? await aDPenaltyApi.detail(row.id).then(res => res.data.result) : JSON.parse(JSON.stringify(row)); + state.showDialog = true; +}; + +// 鍏抽棴寮圭獥 +const closeDialog = () => { + emit("reloadTable"); + state.showDialog = false; +}; + +// 鎻愪氦 +const submit = async () => { + ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => { + if (isValid) { + let values = state.ruleForm; + await aDPenaltyApi[state.ruleForm.id ? 'update' : 'add'](values); + closeDialog(); + } else { + ElMessage({ + message: `琛ㄥ崟鏈�${Object.keys(fields).length}澶勯獙璇佸け璐ワ紝璇蜂慨鏀瑰悗鍐嶆彁浜, + type: "error", + }); + } + }); +}; + +//灏嗗睘鎬ф垨鑰呭嚱鏁版毚闇茬粰鐖剁粍浠� +defineExpose({ openDialog }); +</script> +<template> + <div class="aDPenalty-container"> + <el-dialog v-model="state.showDialog" :width="800" draggable :close-on-click-modal="false"> + <template #header> + <div style="color: #fff"> + <span>{{ state.title }}</span> + </div> + </template> + <el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules"> + <el-row :gutter="35"> + <el-form-item v-show="false"> + <el-input v-model="state.ruleForm.id" /> + </el-form-item> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" > + <el-form-item label="鍐冲畾鏃ユ湡" prop="decisionDate"> + <el-date-picker v-model="state.ruleForm.decisionDate" type="date" placeholder="鍐冲畾鏃ユ湡" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" > + <el-form-item label="褰撲簨浜轰俊鎭�" prop="parties"> + <el-input v-model="state.ruleForm.parties" placeholder="璇疯緭鍏ュ綋浜嬩汉淇℃伅" maxlength="255" show-word-limit clearable /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" > + <el-form-item label="妗堢敱鎻忚堪" prop="caseReason"> + <el-input v-model="state.ruleForm.caseReason" placeholder="璇疯緭鍏ユ鐢辨弿杩�" show-word-limit clearable /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" > + <el-form-item label="澶勭悊鍐冲畾鍐呭" prop="disposalDecision"> + <el-input v-model="state.ruleForm.disposalDecision" placeholder="璇疯緭鍏ュ鐞嗗喅瀹氬唴瀹�" show-word-limit clearable /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" > + <el-form-item label="閲囪喘鐩戠潱閮ㄩ棬鍚嶇О" prop="supervisionDepartment"> + <el-input v-model="state.ruleForm.supervisionDepartment" placeholder="璇疯緭鍏ラ噰璐洃鐫i儴闂ㄥ悕绉�" maxlength="255" show-word-limit clearable /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="() => state.showDialog = false">鍙� 娑�</el-button> + <el-button @click="submit" type="primary" v-reclick="1000">纭� 瀹�</el-button> + </span> + </template> + </el-dialog> + </div> +</template> +<style lang="scss" scoped> +:deep(.el-select), :deep(.el-input-number) { + width: 100%; +} +</style> \ No newline at end of file diff --git a/Web/src/views/ADPenalty/aDPenalty/index.vue b/Web/src/views/ADPenalty/aDPenalty/index.vue new file mode 100644 index 0000000..756cdaa --- /dev/null +++ b/Web/src/views/ADPenalty/aDPenalty/index.vue @@ -0,0 +1,174 @@ +锘�<script lang="ts" setup name="aDPenalty"> +import { ref, reactive, onMounted } from "vue"; +import { auth } from '/@/utils/authFunction'; +import { ElMessageBox, ElMessage } from "element-plus"; +import { downloadStreamFile } from "/@/utils/download"; +import { useADPenaltyApi } from '/@/api/ADPenalty/aDPenalty'; +import editDialog from '/@/views/ADPenalty/aDPenalty/component/editDialog.vue' +import printDialog from '/@/views/system/print/component/hiprint/preview.vue' +import ModifyRecord from '/@/components/table/modifyRecord.vue'; + +const aDPenaltyApi = useADPenaltyApi(); +const printDialogRef = ref(); +const editDialogRef = ref(); +const state = reactive({ + exportLoading: false, + tableLoading: false, + stores: {}, + showAdvanceQueryUI: false, + dropdownData: {} as any, + selectData: [] as any[], + tableQueryParams: {} as any, + tableParams: { + page: 1, + pageSize: 20, + total: 0, + field: 'createTime', // 榛樿鐨勬帓搴忓瓧娈� + order: 'descending', // 鎺掑簭鏂瑰悜 + descStr: 'descending', // 闄嶅簭鎺掑簭鐨勫叧閿瓧绗� + }, + tableData: [], +}); + +// 椤甸潰鍔犺浇鏃� +onMounted(async () => { +}); + +// 鏌ヨ鎿嶄綔 +const handleQuery = async (params: any = {}) => { + state.tableLoading = true; + state.tableParams = Object.assign(state.tableParams, params); + const result = await aDPenaltyApi.page(Object.assign(state.tableQueryParams, state.tableParams)).then(res => res.data.result); + state.tableParams.total = result?.total; + state.tableData = result?.items ?? []; + state.tableLoading = false; +}; + +// 鍒楁帓搴� +const sortChange = async (column: any) => { + state.tableParams.field = column.prop; + state.tableParams.order = column.order; + await handleQuery(); +}; + +// 鍒犻櫎 +const delADPenalty = (row: any) => { + ElMessageBox.confirm(`纭畾瑕佸垹闄ゅ悧?`, "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }).then(async () => { + await aDPenaltyApi.delete({ id: row.id }); + handleQuery(); + ElMessage.success("鍒犻櫎鎴愬姛"); + }).catch(() => {}); +}; + +// 鎵归噺鍒犻櫎 +const batchDelADPenalty = () => { + ElMessageBox.confirm(`纭畾瑕佸垹闄�${state.selectData.length}鏉¤褰曞悧?`, "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }).then(async () => { + await aDPenaltyApi.batchDelete(state.selectData.map(u => ({ id: u.id }) )).then(res => { + ElMessage.success(`鎴愬姛鎵归噺鍒犻櫎${res.data.result}鏉¤褰昤); + handleQuery(); + }); + }).catch(() => {}); +}; + +handleQuery(); +</script> +<template> + <div class="aDPenalty-container" v-loading="state.exportLoading"> + <el-card shadow="hover" :body-style="{ paddingBottom: '0' }"> + <el-form :model="state.tableQueryParams" ref="queryForm" labelWidth="90"> + <el-row> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10"> + <el-form-item label="鍏抽敭瀛�"> + <el-input v-model="state.tableQueryParams.keyword" clearable placeholder="璇疯緭鍏ユā绯婃煡璇㈠叧閿瓧"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI"> + <el-form-item label="鍐冲畾鏃ユ湡"> + <el-date-picker type="daterange" v-model="state.tableQueryParams.decisionDateRange" value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI"> + <el-form-item label="褰撲簨浜轰俊鎭�"> + <el-input v-model="state.tableQueryParams.parties" clearable placeholder="璇疯緭鍏ュ綋浜嬩汉淇℃伅"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI"> + <el-form-item label="妗堢敱鎻忚堪"> + <el-input v-model="state.tableQueryParams.caseReason" clearable placeholder="璇疯緭鍏ユ鐢辨弿杩�"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI"> + <el-form-item label="澶勭悊鍐冲畾鍐呭"> + <el-input v-model="state.tableQueryParams.disposalDecision" clearable placeholder="璇疯緭鍏ュ鐞嗗喅瀹氬唴瀹�"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI"> + <el-form-item label="閲囪喘鐩戠潱閮ㄩ棬鍚嶇О"> + <el-input v-model="state.tableQueryParams.supervisionDepartment" clearable placeholder="璇疯緭鍏ラ噰璐洃鐫i儴闂ㄥ悕绉�"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10"> + <el-form-item > + <el-button-group style="display: flex; align-items: center;"> + <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'aDPenalty:page'" v-reclick="1000"> 鏌ヨ </el-button> + <el-button icon="ele-Refresh" @click="() => state.tableQueryParams = {}"> 閲嶇疆 </el-button> + <el-button icon="ele-ZoomIn" @click="() => state.showAdvanceQueryUI = true" v-if="!state.showAdvanceQueryUI" style="margin-left:5px;"> 楂樼骇鏌ヨ </el-button> + <el-button icon="ele-ZoomOut" @click="() => state.showAdvanceQueryUI = false" v-if="state.showAdvanceQueryUI" style="margin-left:5px;"> 闅愯棌 </el-button> + <el-button type="danger" style="margin-left:5px;" icon="ele-Delete" @click="batchDelADPenalty" :disabled="state.selectData.length == 0" v-auth="'aDPenalty:batchDelete'"> 鍒犻櫎 </el-button> + <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="editDialogRef.openDialog(null, '鏂板琛屾斂澶勭綒')" v-auth="'aDPenalty:add'"> 鏂板 </el-button> + </el-button-group> + </el-form-item> + </el-col> + </el-row> + </el-form> + </el-card> + <el-card class="full-table" shadow="hover" style="margin-top: 5px"> + <el-table :data="state.tableData" @selection-change="(val: any[]) => { state.selectData = val; }" style="width: 100%" v-loading="state.tableLoading" tooltip-effect="light" row-key="id" @sort-change="sortChange" border> + <el-table-column type="selection" width="40" align="center" v-if="auth('aDPenalty:batchDelete') || auth('aDPenalty:export')" /> + <el-table-column type="index" label="搴忓彿" width="55" align="center"/> + <el-table-column prop='decisionDate' label='鍐冲畾鏃ユ湡' show-overflow-tooltip /> + <el-table-column prop='parties' label='褰撲簨浜轰俊鎭�' show-overflow-tooltip /> + <el-table-column prop='caseReason' label='妗堢敱鎻忚堪' show-overflow-tooltip /> + <el-table-column prop='disposalDecision' label='澶勭悊鍐冲畾鍐呭' show-overflow-tooltip /> + <el-table-column prop='supervisionDepartment' label='閲囪喘鐩戠潱閮ㄩ棬鍚嶇О' show-overflow-tooltip /> + <el-table-column prop='url' label='绾夸笂鍦板潃' show-overflow-tooltip /> + <el-table-column label="淇敼璁板綍" width="100" align="center" show-overflow-tooltip> + <template #default="scope"> + <ModifyRecord :data="scope.row" /> + </template> + </el-table-column> + <el-table-column label="鎿嶄綔" width="140" align="center" fixed="right" show-overflow-tooltip v-if="auth('aDPenalty:update') || auth('aDPenalty:delete')"> + <template #default="scope"> + <el-button icon="ele-Edit" size="small" text type="primary" @click="editDialogRef.openDialog(scope.row, '缂栬緫琛屾斂澶勭綒')" v-auth="'aDPenalty:update'"> 缂栬緫 </el-button> + <el-button icon="ele-Delete" size="small" text type="primary" @click="delADPenalty(scope.row)" v-auth="'aDPenalty:delete'"> 鍒犻櫎 </el-button> + </template> + </el-table-column> + </el-table> + <el-pagination + v-model:currentPage="state.tableParams.page" + v-model:page-size="state.tableParams.pageSize" + @size-change="(val: any) => handleQuery({ pageSize: val })" + @current-change="(val: any) => handleQuery({ page: val })" + layout="total, sizes, prev, pager, next, jumper" + :page-sizes="[10, 20, 50, 100, 200, 500]" + :total="state.tableParams.total" + size="small" + background /> + <printDialog ref="printDialogRef" :title="'鎵撳嵃琛屾斂澶勭綒'" @reloadTable="handleQuery" /> + <editDialog ref="editDialogRef" @reloadTable="handleQuery" /> + </el-card> + </div> +</template> +<style scoped> +:deep(.el-input), :deep(.el-select), :deep(.el-input-number) { + width: 100%; +} +</style> \ No newline at end of file -- Gitblit v1.9.1