移动系统liao
14 小时以前 1d745bcb4acb7ba91c35a086d6244f3fc8c20cda
no message
7个文件已添加
809 ■■■■■ 已修改文件
Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/ADPenaltyService.cs 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyDto.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyInput.cs 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyOutput.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/api/ADPenalty/aDPenalty.ts 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/ADPenalty/aDPenalty/component/editDialog.vue 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/ADPenalty/aDPenalty/index.vue 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/ADPenaltyService.cs
New file
@@ -0,0 +1,131 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
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);   //真删除
    }
}
Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyDto.cs
New file
@@ -0,0 +1,79 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
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>
    /// 创建者Id
    /// </summary>
    public long? CreateUserId { get; set; }
    /// <summary>
    /// 创建者姓名
    /// </summary>
    public string? CreateUserName { get; set; }
    /// <summary>
    /// 修改者Id
    /// </summary>
    public long? UpdateUserId { get; set; }
    /// <summary>
    /// 修改者姓名
    /// </summary>
    public string? UpdateUserName { get; set; }
    /// <summary>
    /// 线上地址
    /// </summary>
    public string? Url { get; set; }
}
Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyInput.cs
New file
@@ -0,0 +1,179 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
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
{
}
Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyOutput.cs
New file
@@ -0,0 +1,79 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
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>
    /// 创建者Id
    /// </summary>
    public long? CreateUserId { get; set; }
    /// <summary>
    /// 创建者姓名
    /// </summary>
    public string? CreateUserName { get; set; }
    /// <summary>
    /// 修改者Id
    /// </summary>
    public long? UpdateUserId { get; set; }
    /// <summary>
    /// 修改者姓名
    /// </summary>
    public string? UpdateUserName { get; set; }
    /// <summary>
    /// 线上地址
    /// </summary>
    public string? Url { get; set; }
}
Web/src/api/ADPenalty/aDPenalty.ts
New file
@@ -0,0 +1,50 @@
import {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;
    // 创建者Id
    createUserId: number;
    // 创建者姓名
    createUserName: string;
    // 修改者Id
    updateUserId: number;
    // 修改者姓名
    updateUserName: string;
    // 线上地址
    url: string;
}
Web/src/views/ADPenalty/aDPenalty/component/editDialog.vue
New file
@@ -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="请输入采购监督部门名称" 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>
Web/src/views/ADPenalty/aDPenalty/index.vue
New file
@@ -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="请输入采购监督部门名称"/>
            </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>