13个文件已添加
9个文件已修改
1742 ■■■■■ 已修改文件
api/src/main/java/com/ruoyi/api/third/controller/AuditLogController.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/controller/PayableAuditLogController.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/controller/ReceivableAuditLogController.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/domain/PayableAuditLog.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/domain/ReceivableAuditLog.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/mapper/PayableAuditLogMapper.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/mapper/ReceivableAuditLogMapper.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/service/IPayableAuditLogService.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/service/IReceivableAuditLogService.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/service/impl/PayableAuditLogServiceImpl.java 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/service/impl/ReceivableAuditLogServiceImpl.java 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/service/impl/TmsApBillServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/service/impl/TmsArBillItemServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/service/impl/TmsArBillServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/resources/mapper/tms/PayableAuditLogMapper.xml 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/resources/mapper/tms/ReceivableAuditLogMapper.xml 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/api/tms/tmsApBill.ts 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/api/tms/tmsArBill.ts 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/components/flowLog/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/tms/tmsApBill/index.vue 220 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/tms/tmsArBill/index.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/src/main/java/com/ruoyi/api/third/controller/AuditLogController.java
New file
@@ -0,0 +1,78 @@
package com.ruoyi.api.third.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.tms.domain.PayableAuditLog;
import com.ruoyi.tms.domain.ReceivableAuditLog;
import com.ruoyi.tms.service.IPayableAuditLogService;
import com.ruoyi.tms.service.IReceivableAuditLogService;
import lombok.extern.slf4j.Slf4j;
/**
 * 审核日志接收Controller
 * 用于接收其他系统发送的应付账单和应收账单的审核日志
 *
 * @author ruoyi
 * @date 2026-04-07
 */
@RestController
@RequestMapping("/api/third/audit")
@Slf4j
public class AuditLogController {
    @Autowired
    private IPayableAuditLogService payableAuditLogService;
    @Autowired
    private IReceivableAuditLogService receivableAuditLogService;
    /**
     * 接收应付账单审核日志
     *
     * @param auditLog 应付账单审核日志
     * @return 结果
     */
    @PostMapping("/ap-bill")
    public AjaxResult receiveApBillAuditLog(@RequestBody PayableAuditLog auditLog) {
        try {
            log.info("接收到应付账单审核日志: {}", auditLog);
            int result = payableAuditLogService.insertPayableAuditLog(auditLog);
            if (result > 0) {
                return AjaxResult.success("接收成功");
            } else {
                return AjaxResult.error("接收失败");
            }
        } catch (Exception e) {
            log.error("接收应付账单审核日志失败", e);
            return AjaxResult.error("接收失败: " + e.getMessage());
        }
    }
    /**
     * 接收应收账单审核日志
     *
     * @param auditLog 应收账单审核日志
     * @return 结果
     */
    @PostMapping("/ar-bill")
    public AjaxResult receiveArBillAuditLog(@RequestBody ReceivableAuditLog auditLog) {
        try {
            log.info("接收到应收账单审核日志: {}", auditLog);
            int result = receivableAuditLogService.insertReceivableAuditLog(auditLog);
            if (result > 0) {
                return AjaxResult.success("接收成功");
            } else {
                return AjaxResult.error("接收失败");
            }
        } catch (Exception e) {
            log.error("接收应收账单审核日志失败", e);
            return AjaxResult.error("接收失败: " + e.getMessage());
        }
    }
}
tms/src/main/java/com/ruoyi/tms/controller/PayableAuditLogController.java
New file
@@ -0,0 +1,108 @@
package com.ruoyi.tms.controller;
import java.util.List;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.utils.file.DownloadExportUtil;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.tms.domain.PayableAuditLog;
import com.ruoyi.tms.service.IPayableAuditLogService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
 * 应付账单审核日志Controller
 *
 * @author ruoyi
 * @date 2026-04-07
 */
@RestController
@RequestMapping("/tms/payableAuditLog")
public class PayableAuditLogController extends BaseController
{
    @Autowired
    private IPayableAuditLogService payableAuditLogService;
    /**
     * 查询应付账单审核日志列表
     */
    @PreAuthorize("@ss.hasPermi('tms:payableAuditLog:list')")
    @GetMapping("/list")
    public TableDataInfo list(PayableAuditLog payableAuditLog)
    {
        startPage();
        List<PayableAuditLog> list = payableAuditLogService.selectPayableAuditLogList(payableAuditLog);
        return getDataTable(list);
    }
    /**
     * 导出应付账单审核日志列表
     * @param payableAuditLog 查询条件对象
     */
    @PreAuthorize("@ss.hasPermi('tms:payableAuditLog:export')")
    @Log(title = "应付账单审核日志", businessType = BusinessType.EXPORT)
    @GetMapping("/export")
    public AjaxResult export(PayableAuditLog payableAuditLog,String exportKey)
    {
        payableAuditLogService.export(payableAuditLog,exportKey);
        return AjaxResult.success("导出请求成功,请稍后点击下载...!");
    }
    /**
     * 获取应付账单审核日志详细信息
     */
    @PreAuthorize("@ss.hasPermi('tms:payableAuditLog:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Integer id)
    {
        return AjaxResult.success(payableAuditLogService.selectPayableAuditLogById(id));
    }
    /**
     * 新增应付账单审核日志
     */
    @PreAuthorize("@ss.hasPermi('tms:payableAuditLog:add')")
    @Log(title = "应付账单审核日志", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody PayableAuditLog payableAuditLog)
    {
        return toAjax(payableAuditLogService.insertPayableAuditLog(payableAuditLog));
    }
    /**
     * 修改应付账单审核日志
     */
    @PreAuthorize("@ss.hasPermi('tms:payableAuditLog:edit')")
    @Log(title = "应付账单审核日志", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody PayableAuditLog payableAuditLog)
    {
        return toAjax(payableAuditLogService.updatePayableAuditLog(payableAuditLog));
    }
    /**
     * 删除应付账单审核日志
     */
    @PreAuthorize("@ss.hasPermi('tms:payableAuditLog:remove')")
    @Log(title = "应付账单审核日志", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Integer[] ids)
    {
        return toAjax(payableAuditLogService.deletePayableAuditLogByIds(ids));
    }
}
tms/src/main/java/com/ruoyi/tms/controller/ReceivableAuditLogController.java
New file
@@ -0,0 +1,108 @@
package com.ruoyi.tms.controller;
import java.util.List;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.utils.file.DownloadExportUtil;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.tms.domain.ReceivableAuditLog;
import com.ruoyi.tms.service.IReceivableAuditLogService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
 * 应收账单审核日志Controller
 *
 * @author ruoyi
 * @date 2026-04-07
 */
@RestController
@RequestMapping("/tms/receivableAuditLog")
public class ReceivableAuditLogController extends BaseController
{
    @Autowired
    private IReceivableAuditLogService receivableAuditLogService;
    /**
     * 查询应收账单审核日志列表
     */
    @PreAuthorize("@ss.hasPermi('tms:receivableAuditLog:list')")
    @GetMapping("/list")
    public TableDataInfo list(ReceivableAuditLog receivableAuditLog)
    {
        startPage();
        List<ReceivableAuditLog> list = receivableAuditLogService.selectReceivableAuditLogList(receivableAuditLog);
        return getDataTable(list);
    }
    /**
     * 导出应收账单审核日志列表
     * @param receivableAuditLog 查询条件对象
     */
    @PreAuthorize("@ss.hasPermi('tms:receivableAuditLog:export')")
    @Log(title = "应收账单审核日志", businessType = BusinessType.EXPORT)
    @GetMapping("/export")
    public AjaxResult export(ReceivableAuditLog receivableAuditLog,String exportKey)
    {
        receivableAuditLogService.export(receivableAuditLog,exportKey);
        return AjaxResult.success("导出请求成功,请稍后点击下载...!");
    }
    /**
     * 获取应收账单审核日志详细信息
     */
    @PreAuthorize("@ss.hasPermi('tms:receivableAuditLog:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Integer id)
    {
        return AjaxResult.success(receivableAuditLogService.selectReceivableAuditLogById(id));
    }
    /**
     * 新增应收账单审核日志
     */
    @PreAuthorize("@ss.hasPermi('tms:receivableAuditLog:add')")
    @Log(title = "应收账单审核日志", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ReceivableAuditLog receivableAuditLog)
    {
        return toAjax(receivableAuditLogService.insertReceivableAuditLog(receivableAuditLog));
    }
    /**
     * 修改应收账单审核日志
     */
    @PreAuthorize("@ss.hasPermi('tms:receivableAuditLog:edit')")
    @Log(title = "应收账单审核日志", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ReceivableAuditLog receivableAuditLog)
    {
        return toAjax(receivableAuditLogService.updateReceivableAuditLog(receivableAuditLog));
    }
    /**
     * 删除应收账单审核日志
     */
    @PreAuthorize("@ss.hasPermi('tms:receivableAuditLog:remove')")
    @Log(title = "应收账单审核日志", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Integer[] ids)
    {
        return toAjax(receivableAuditLogService.deleteReceivableAuditLogByIds(ids));
    }
}
tms/src/main/java/com/ruoyi/tms/domain/PayableAuditLog.java
New file
@@ -0,0 +1,48 @@
package com.ruoyi.tms.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import java.util.Date;
import lombok.Data;
/**
 * 应付账单审核日志对象 payable_audit_log
 *
 * @author ruoyi
 * @date 2026-04-07
 */
@Data
public class PayableAuditLog{
    /** 主键 */
        @TableField("id")
    private Integer id;
    /** 应付账单id */
    @Excel(name = "应付账单id")
        @TableField("head_id")
    private Integer headId;
    /** 创建者 */
        @TableField("create_by")
    private String createBy;
    /** 创建时间 */
        @JsonFormat(pattern = "yyyy-MM-dd")
        @TableField("create_time")
    private Date createTime;
    /** 操作说明 */
    @Excel(name = "操作说明")
        @TableField("operation")
    private String operation;
}
tms/src/main/java/com/ruoyi/tms/domain/ReceivableAuditLog.java
New file
@@ -0,0 +1,48 @@
package com.ruoyi.tms.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import java.util.Date;
import lombok.Data;
/**
 * 应收账单审核日志对象 receivable_audit_log
 *
 * @author ruoyi
 * @date 2026-04-07
 */
@Data
public class ReceivableAuditLog{
    /** 主键 */
        @TableField("id")
    private Integer id;
    /** 应收账单id */
    @Excel(name = "应收账单id")
        @TableField("head_id")
    private Integer headId;
    /** 创建者 */
        @TableField("create_by")
    private String createBy;
    /** 创建时间 */
        @JsonFormat(pattern = "yyyy-MM-dd")
        @TableField("create_time")
    private Date createTime;
    /** 操作说明 */
    @Excel(name = "操作说明")
        @TableField("operation")
    private String operation;
}
tms/src/main/java/com/ruoyi/tms/mapper/PayableAuditLogMapper.java
New file
@@ -0,0 +1,87 @@
package com.ruoyi.tms.mapper;
import java.util.List;
import com.ruoyi.tms.domain.PayableAuditLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * 应付账单审核日志Mapper接口
 *
 * @author ruoyi
 * @date 2026-04-07
 */
public interface PayableAuditLogMapper  extends BaseMapper<PayableAuditLog>
{
    /**
     * 查询应付账单审核日志
     *
     * @param id 应付账单审核日志ID
     * @return 应付账单审核日志
     */
    public PayableAuditLog selectPayableAuditLogById(Integer id);
    /**
     * 查询应付账单审核日志 记录数
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 应付账单审核日志集合
     */
    public int selectPayableAuditLogCount(PayableAuditLog payableAuditLog);
    /**
     * 查询应付账单审核日志列表
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 应付账单审核日志集合
     */
    public List<PayableAuditLog> selectPayableAuditLogList(PayableAuditLog payableAuditLog);
    /**
     * 新增应付账单审核日志
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 结果
     */
    public int insertPayableAuditLog(PayableAuditLog payableAuditLog);
    /**
     * 新增应付账单审核日志[批量]
     *
     * @param payableAuditLogs 应付账单审核日志
     * @return 结果
     */
    public int insertPayableAuditLogBatch(List<PayableAuditLog> payableAuditLogs);
    /**
     * 修改应付账单审核日志
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 结果
     */
    public int updatePayableAuditLog(PayableAuditLog payableAuditLog);
    /**
     * 修改应付账单审核日志[批量]
     *
     * @param payableAuditLogs 应付账单审核日志
     * @return 结果
     */
    public int updatePayableAuditLogBatch(List<PayableAuditLog> payableAuditLogs);
    /**
     * 删除应付账单审核日志
     *
     * @param id 应付账单审核日志ID
     * @return 结果
     */
    public int deletePayableAuditLogById(Integer id);
    /**
     * 批量删除应付账单审核日志
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deletePayableAuditLogByIds(Integer[] ids);
}
tms/src/main/java/com/ruoyi/tms/mapper/ReceivableAuditLogMapper.java
New file
@@ -0,0 +1,87 @@
package com.ruoyi.tms.mapper;
import java.util.List;
import com.ruoyi.tms.domain.ReceivableAuditLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * 应收账单审核日志Mapper接口
 *
 * @author ruoyi
 * @date 2026-04-07
 */
public interface ReceivableAuditLogMapper  extends BaseMapper<ReceivableAuditLog>
{
    /**
     * 查询应收账单审核日志
     *
     * @param id 应收账单审核日志ID
     * @return 应收账单审核日志
     */
    public ReceivableAuditLog selectReceivableAuditLogById(Integer id);
    /**
     * 查询应收账单审核日志 记录数
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 应收账单审核日志集合
     */
    public int selectReceivableAuditLogCount(ReceivableAuditLog receivableAuditLog);
    /**
     * 查询应收账单审核日志列表
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 应收账单审核日志集合
     */
    public List<ReceivableAuditLog> selectReceivableAuditLogList(ReceivableAuditLog receivableAuditLog);
    /**
     * 新增应收账单审核日志
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 结果
     */
    public int insertReceivableAuditLog(ReceivableAuditLog receivableAuditLog);
    /**
     * 新增应收账单审核日志[批量]
     *
     * @param receivableAuditLogs 应收账单审核日志
     * @return 结果
     */
    public int insertReceivableAuditLogBatch(List<ReceivableAuditLog> receivableAuditLogs);
    /**
     * 修改应收账单审核日志
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 结果
     */
    public int updateReceivableAuditLog(ReceivableAuditLog receivableAuditLog);
    /**
     * 修改应收账单审核日志[批量]
     *
     * @param receivableAuditLogs 应收账单审核日志
     * @return 结果
     */
    public int updateReceivableAuditLogBatch(List<ReceivableAuditLog> receivableAuditLogs);
    /**
     * 删除应收账单审核日志
     *
     * @param id 应收账单审核日志ID
     * @return 结果
     */
    public int deleteReceivableAuditLogById(Integer id);
    /**
     * 批量删除应收账单审核日志
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteReceivableAuditLogByIds(Integer[] ids);
}
tms/src/main/java/com/ruoyi/tms/service/IPayableAuditLogService.java
New file
@@ -0,0 +1,102 @@
package com.ruoyi.tms.service;
import java.util.List;
import com.ruoyi.tms.domain.PayableAuditLog;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * 应付账单审核日志Service接口
 *
 * @author ruoyi
 * @date 2026-04-07
 */
public interface IPayableAuditLogService extends IService<PayableAuditLog>
{
    /**
     * 查询应付账单审核日志
     *
     * @param id 应付账单审核日志ID
     * @return 应付账单审核日志
     */
    public PayableAuditLog selectPayableAuditLogById(Integer id);
    /**
     * 查询应付账单审核日志 记录数
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 应付账单审核日志集合
     */
    public int selectPayableAuditLogCount(PayableAuditLog payableAuditLog);
    /**
     * 查询应付账单审核日志列表
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 应付账单审核日志集合
     */
    public List<PayableAuditLog> selectPayableAuditLogList(PayableAuditLog payableAuditLog);
    /**
     * 查询应付账单审核日志列表 异步 导出
     *
     * @param payableAuditLog 应付账单审核日志
     * @param exportKey 导出功能的唯一标识
     * @return 应付账单审核日志集合
     */
    public void export(PayableAuditLog payableAuditLog, String exportKey) ;
    /**
     * 新增应付账单审核日志
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 结果
     */
    public int insertPayableAuditLog(PayableAuditLog payableAuditLog);
    /**
     * 新增应付账单审核日志[批量]
     *
     * @param payableAuditLogs 应付账单审核日志
     * @return 结果
     */
    public int insertPayableAuditLogBatch(List<PayableAuditLog> payableAuditLogs);
    /**
     * 修改应付账单审核日志
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 结果
     */
    public int updatePayableAuditLog(PayableAuditLog payableAuditLog);
    /**
     * 修改应付账单审核日志[批量]
     *
     * @param payableAuditLogs 应付账单审核日志
     * @return 结果
     */
    public int updatePayableAuditLogBatch(List<PayableAuditLog> payableAuditLogs);
    /**
     * 批量删除应付账单审核日志
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deletePayableAuditLogByIds(String ids);
    /**
     * 批量删除应付账单审核日志
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deletePayableAuditLogByIds(Integer[] ids);
    /**
     * 删除应付账单审核日志信息
     *
     * @param id 应付账单审核日志ID
     * @return 结果
     */
    public int deletePayableAuditLogById(Integer id);
}
tms/src/main/java/com/ruoyi/tms/service/IReceivableAuditLogService.java
New file
@@ -0,0 +1,102 @@
package com.ruoyi.tms.service;
import java.util.List;
import com.ruoyi.tms.domain.ReceivableAuditLog;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * 应收账单审核日志Service接口
 *
 * @author ruoyi
 * @date 2026-04-07
 */
public interface IReceivableAuditLogService extends IService<ReceivableAuditLog>
{
    /**
     * 查询应收账单审核日志
     *
     * @param id 应收账单审核日志ID
     * @return 应收账单审核日志
     */
    public ReceivableAuditLog selectReceivableAuditLogById(Integer id);
    /**
     * 查询应收账单审核日志 记录数
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 应收账单审核日志集合
     */
    public int selectReceivableAuditLogCount(ReceivableAuditLog receivableAuditLog);
    /**
     * 查询应收账单审核日志列表
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 应收账单审核日志集合
     */
    public List<ReceivableAuditLog> selectReceivableAuditLogList(ReceivableAuditLog receivableAuditLog);
    /**
     * 查询应收账单审核日志列表 异步 导出
     *
     * @param receivableAuditLog 应收账单审核日志
     * @param exportKey 导出功能的唯一标识
     * @return 应收账单审核日志集合
     */
    public void export(ReceivableAuditLog receivableAuditLog, String exportKey) ;
    /**
     * 新增应收账单审核日志
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 结果
     */
    public int insertReceivableAuditLog(ReceivableAuditLog receivableAuditLog);
    /**
     * 新增应收账单审核日志[批量]
     *
     * @param receivableAuditLogs 应收账单审核日志
     * @return 结果
     */
    public int insertReceivableAuditLogBatch(List<ReceivableAuditLog> receivableAuditLogs);
    /**
     * 修改应收账单审核日志
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 结果
     */
    public int updateReceivableAuditLog(ReceivableAuditLog receivableAuditLog);
    /**
     * 修改应收账单审核日志[批量]
     *
     * @param receivableAuditLogs 应收账单审核日志
     * @return 结果
     */
    public int updateReceivableAuditLogBatch(List<ReceivableAuditLog> receivableAuditLogs);
    /**
     * 批量删除应收账单审核日志
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteReceivableAuditLogByIds(String ids);
    /**
     * 批量删除应收账单审核日志
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteReceivableAuditLogByIds(Integer[] ids);
    /**
     * 删除应收账单审核日志信息
     *
     * @param id 应收账单审核日志ID
     * @return 结果
     */
    public int deleteReceivableAuditLogById(Integer id);
}
tms/src/main/java/com/ruoyi/tms/service/impl/PayableAuditLogServiceImpl.java
New file
@@ -0,0 +1,181 @@
package com.ruoyi.tms.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import javax.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.scheduling.annotation.Async;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.tms.mapper.PayableAuditLogMapper;
import com.ruoyi.tms.domain.PayableAuditLog;
import com.ruoyi.tms.service.IPayableAuditLogService;
import com.ruoyi.common.core.text.Convert;
/**
 * 应付账单审核日志Service业务层处理
 *
 * @author ruoyi
 * @date 2026-04-07
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class PayableAuditLogServiceImpl  extends BaseService<PayableAuditLogMapper, PayableAuditLog> implements IPayableAuditLogService
{
    protected final Logger logger = LoggerFactory.getLogger(getClass());
    @Resource
    private PayableAuditLogMapper payableAuditLogMapper;
    /**
     * 查询应付账单审核日志
     *
     * @param id 应付账单审核日志ID
     * @return 应付账单审核日志
     */
    @DataSource(DataSourceType.SLAVE)
    @Override
    public PayableAuditLog selectPayableAuditLogById(Integer id)
    {
        return payableAuditLogMapper.selectPayableAuditLogById(id);
    }
    /**
     * 查询应付账单审核日志 记录数
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 应付账单审核日志集合
     */
    @DataSource(DataSourceType.SLAVE)
    @Override
    public int selectPayableAuditLogCount(PayableAuditLog payableAuditLog)
    {
        return payableAuditLogMapper.selectPayableAuditLogCount(payableAuditLog);
    }
    /**
     * 查询应付账单审核日志列表
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 应付账单审核日志
     */
    @DataSource(DataSourceType.SLAVE)
    @Override
    public List<PayableAuditLog> selectPayableAuditLogList(PayableAuditLog payableAuditLog)
    {
        return payableAuditLogMapper.selectPayableAuditLogList(payableAuditLog);
    }
    /**
     * 查询应付账单审核日志列表 异步 导出
     *
     * @param payableAuditLog 应付账单审核日志
     * @param exportKey 导出功能的唯一标识
     * @return 应付账单审核日志集合
     */
    @DataSource(DataSourceType.SLAVE)
    @Async
    @Override
    public void export(PayableAuditLog payableAuditLog,String exportKey) {
        super.export(PayableAuditLog.class,exportKey,"payableAuditLogData",(pageNum)->{
            PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
            return selectPayableAuditLogList(payableAuditLog);
        });
    }
    /**
     * 新增应付账单审核日志
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 结果
     */
    @Override
    public int insertPayableAuditLog(PayableAuditLog payableAuditLog)
    {
        payableAuditLog.setCreateTime(DateUtils.getNowDate());
        return payableAuditLogMapper.insertPayableAuditLog(payableAuditLog);
    }
    /**
     * 新增应付账单审核日志[批量]
     *
     * @param payableAuditLogs 应付账单审核日志
     * @return 结果
     */
    @Override
    public int insertPayableAuditLogBatch(List<PayableAuditLog> payableAuditLogs)
    {
        int rows = payableAuditLogMapper.insertPayableAuditLogBatch(payableAuditLogs);
        return rows;
    }
    /**
     * 修改应付账单审核日志
     *
     * @param payableAuditLog 应付账单审核日志
     * @return 结果
     */
    @Override
    public int updatePayableAuditLog(PayableAuditLog payableAuditLog)
    {
        return payableAuditLogMapper.updatePayableAuditLog(payableAuditLog);
    }
    /**
     * 修改应付账单审核日志[批量]
     *
     * @param payableAuditLogs 应付账单审核日志
     * @return 结果
     */
    @Override
    public int updatePayableAuditLogBatch(List<PayableAuditLog> payableAuditLogs){
        return payableAuditLogMapper.updatePayableAuditLogBatch(payableAuditLogs);
    }
    /**
     * 删除应付账单审核日志对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deletePayableAuditLogByIds(String ids)
    {
        return deletePayableAuditLogByIds(Convert.toIntArray(ids));
    }
    /**
     * 删除应付账单审核日志对象
     *
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deletePayableAuditLogByIds(Integer[] ids)
    {
        return payableAuditLogMapper.deletePayableAuditLogByIds(ids);
    }
    /**
     * 删除应付账单审核日志信息
     *
     * @param id 应付账单审核日志ID
     * @return 结果
     */
    @Override
    public int deletePayableAuditLogById(Integer id)
    {
        return payableAuditLogMapper.deletePayableAuditLogById(id);
    }
}
tms/src/main/java/com/ruoyi/tms/service/impl/ReceivableAuditLogServiceImpl.java
New file
@@ -0,0 +1,181 @@
package com.ruoyi.tms.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import javax.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.scheduling.annotation.Async;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.tms.mapper.ReceivableAuditLogMapper;
import com.ruoyi.tms.domain.ReceivableAuditLog;
import com.ruoyi.tms.service.IReceivableAuditLogService;
import com.ruoyi.common.core.text.Convert;
/**
 * 应收账单审核日志Service业务层处理
 *
 * @author ruoyi
 * @date 2026-04-07
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class ReceivableAuditLogServiceImpl  extends BaseService<ReceivableAuditLogMapper, ReceivableAuditLog> implements IReceivableAuditLogService
{
    protected final Logger logger = LoggerFactory.getLogger(getClass());
    @Resource
    private ReceivableAuditLogMapper receivableAuditLogMapper;
    /**
     * 查询应收账单审核日志
     *
     * @param id 应收账单审核日志ID
     * @return 应收账单审核日志
     */
    @DataSource(DataSourceType.SLAVE)
    @Override
    public ReceivableAuditLog selectReceivableAuditLogById(Integer id)
    {
        return receivableAuditLogMapper.selectReceivableAuditLogById(id);
    }
    /**
     * 查询应收账单审核日志 记录数
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 应收账单审核日志集合
     */
    @DataSource(DataSourceType.SLAVE)
    @Override
    public int selectReceivableAuditLogCount(ReceivableAuditLog receivableAuditLog)
    {
        return receivableAuditLogMapper.selectReceivableAuditLogCount(receivableAuditLog);
    }
    /**
     * 查询应收账单审核日志列表
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 应收账单审核日志
     */
    @DataSource(DataSourceType.SLAVE)
    @Override
    public List<ReceivableAuditLog> selectReceivableAuditLogList(ReceivableAuditLog receivableAuditLog)
    {
        return receivableAuditLogMapper.selectReceivableAuditLogList(receivableAuditLog);
    }
    /**
     * 查询应收账单审核日志列表 异步 导出
     *
     * @param receivableAuditLog 应收账单审核日志
     * @param exportKey 导出功能的唯一标识
     * @return 应收账单审核日志集合
     */
    @DataSource(DataSourceType.SLAVE)
    @Async
    @Override
    public void export(ReceivableAuditLog receivableAuditLog,String exportKey) {
        super.export(ReceivableAuditLog.class,exportKey,"receivableAuditLogData",(pageNum)->{
            PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
            return selectReceivableAuditLogList(receivableAuditLog);
        });
    }
    /**
     * 新增应收账单审核日志
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 结果
     */
    @Override
    public int insertReceivableAuditLog(ReceivableAuditLog receivableAuditLog)
    {
        receivableAuditLog.setCreateTime(DateUtils.getNowDate());
        return receivableAuditLogMapper.insertReceivableAuditLog(receivableAuditLog);
    }
    /**
     * 新增应收账单审核日志[批量]
     *
     * @param receivableAuditLogs 应收账单审核日志
     * @return 结果
     */
    @Override
    public int insertReceivableAuditLogBatch(List<ReceivableAuditLog> receivableAuditLogs)
    {
        int rows = receivableAuditLogMapper.insertReceivableAuditLogBatch(receivableAuditLogs);
        return rows;
    }
    /**
     * 修改应收账单审核日志
     *
     * @param receivableAuditLog 应收账单审核日志
     * @return 结果
     */
    @Override
    public int updateReceivableAuditLog(ReceivableAuditLog receivableAuditLog)
    {
        return receivableAuditLogMapper.updateReceivableAuditLog(receivableAuditLog);
    }
    /**
     * 修改应收账单审核日志[批量]
     *
     * @param receivableAuditLogs 应收账单审核日志
     * @return 结果
     */
    @Override
    public int updateReceivableAuditLogBatch(List<ReceivableAuditLog> receivableAuditLogs){
        return receivableAuditLogMapper.updateReceivableAuditLogBatch(receivableAuditLogs);
    }
    /**
     * 删除应收账单审核日志对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteReceivableAuditLogByIds(String ids)
    {
        return deleteReceivableAuditLogByIds(Convert.toIntArray(ids));
    }
    /**
     * 删除应收账单审核日志对象
     *
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteReceivableAuditLogByIds(Integer[] ids)
    {
        return receivableAuditLogMapper.deleteReceivableAuditLogByIds(ids);
    }
    /**
     * 删除应收账单审核日志信息
     *
     * @param id 应收账单审核日志ID
     * @return 结果
     */
    @Override
    public int deleteReceivableAuditLogById(Integer id)
    {
        return receivableAuditLogMapper.deleteReceivableAuditLogById(id);
    }
}
tms/src/main/java/com/ruoyi/tms/service/impl/TmsApBillServiceImpl.java
@@ -38,6 +38,8 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.tms.domain.PayableAuditLog;
import com.ruoyi.tms.service.IPayableAuditLogService;
/**
 * 应付账单Service业务层处理
@@ -64,6 +66,9 @@
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private IPayableAuditLogService payableAuditLogService;
    @Value("${custom.cwxtApi.url}")
    private String url;
@@ -265,6 +270,16 @@
    }
    /**
     * 添加应付账单审核日志
     *
     * @param auditLog 审核日志
     * @return 结果
     */
    public int addApBillAuditLog(PayableAuditLog auditLog) {
        return payableAuditLogService.insertPayableAuditLog(auditLog);
    }
    /**
     * 向外部系统推送应付数据
     * @param tmsApBill 应付账单
     * @param tmsPayableFeeList 应付费用列表
@@ -305,6 +320,7 @@
            billMap.put("billSendDate", "");
            billMap.put("billDueDate", "");
            billMap.put("remark", "");
            billMap.put("sourceSystemId", tmsApBill.getId());
            // 构建fees部分
            List<java.util.Map<String, Object>> feesList = new java.util.ArrayList<>();
tms/src/main/java/com/ruoyi/tms/service/impl/TmsArBillItemServiceImpl.java
@@ -19,6 +19,9 @@
import com.ruoyi.tms.domain.TmsArBillItem;
import com.ruoyi.tms.service.ITmsArBillItemService;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.tms.domain.ReceivableAuditLog;
import com.ruoyi.tms.service.IReceivableAuditLogService;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * 应收账单明细Service业务层处理
@@ -33,6 +36,9 @@
    protected final Logger logger = LoggerFactory.getLogger(getClass());
    @Resource
    private TmsArBillItemMapper tmsArBillItemMapper;
    @Autowired
    private IReceivableAuditLogService receivableAuditLogService;
    /**
@@ -178,4 +184,14 @@
    {
        return tmsArBillItemMapper.deleteTmsArBillItemById(id);
    }
    /**
     * 添加应收账单审核日志
     *
     * @param auditLog 审核日志
     * @return 结果
     */
    public int addArBillAuditLog(ReceivableAuditLog auditLog) {
        return receivableAuditLogService.insertReceivableAuditLog(auditLog);
    }
}
tms/src/main/java/com/ruoyi/tms/service/impl/TmsArBillServiceImpl.java
@@ -356,6 +356,7 @@
            billMap.put("settlementPeriod", "");
            billMap.put("status", "0");
            billMap.put("remark", "");
            billMap.put("sourceSystemId", tmsArBill.getId());
            // 构建fees部分
            List<java.util.Map<String, Object>> feesList = new java.util.ArrayList<>();
tms/src/main/resources/mapper/tms/PayableAuditLogMapper.xml
New file
@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.tms.mapper.PayableAuditLogMapper">
    <resultMap type="com.ruoyi.tms.domain.PayableAuditLog" id="PayableAuditLogResult">
        <result property="id"    column="id"    />
        <result property="headId"    column="head_id"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
        <result property="operation"    column="operation"    />
    </resultMap>
    <sql id="selectPayableAuditLogVo">
        select thisTab.id, thisTab.head_id, thisTab.create_by, thisTab.create_time, thisTab.operation from payable_audit_log AS thisTab
    </sql>
    <sql id="selectPayableAuditLogVoCount">
        select count(0) from payable_audit_log as thisTab
    </sql>
    <sql id="whereCondition">
        <if test="headId != null "> and thisTab.head_id = #{headId}</if>
        <if test="operation != null  and operation != ''"> and thisTab.operation = #{operation}</if>
    </sql>
    <!--查询-->
    <select id="selectPayableAuditLogById" parameterType="Integer" resultMap="PayableAuditLogResult">
        <include refid="selectPayableAuditLogVo"/>
        where id = #{id}
    </select>
    <select id="selectPayableAuditLogCount" parameterType="com.ruoyi.tms.domain.PayableAuditLog" resultType="int">
        <include refid="selectPayableAuditLogVoCount"/>
        <where>
            <include refid="whereCondition"/>
        </where>
    </select>
    <select id="selectPayableAuditLogList" parameterType="com.ruoyi.tms.domain.PayableAuditLog" resultMap="PayableAuditLogResult">
        <include refid="selectPayableAuditLogVo"/>
        <where>
            <include refid="whereCondition"/>
        </where>
        order by thisTab.id desc
    </select>
    <!-- 新增 -->
    <insert id="insertPayableAuditLog" parameterType="com.ruoyi.tms.domain.PayableAuditLog"  useGeneratedKeys="true" keyProperty="id">
        insert into payable_audit_log
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="headId != null">head_id,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="operation != null">operation,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="headId != null">#{headId},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="operation != null">#{operation},</if>
         </trim>
    </insert>
    <insert id="insertPayableAuditLogBatch" parameterType="java.util.List"  useGeneratedKeys="true" keyProperty="id">
        insert into payable_audit_log
        <trim prefix="(" suffix=") values" suffixOverrides=",">
            id,head_id,create_by,create_time,operation,
        </trim>
        <foreach item="item" index="index" collection="list" separator=",">
            <trim prefix="(" suffix=") " suffixOverrides=",">
                #{item.id},#{item.headId},#{item.createBy},#{item.createTime},#{item.operation},
            </trim>
        </foreach>
    </insert>
    <!-- 修改 -->
    <update id="updatePayableAuditLog" parameterType="com.ruoyi.tms.domain.PayableAuditLog">
        update payable_audit_log
        <trim prefix="SET" suffixOverrides=",">
            <if test="headId != null">head_id = #{headId},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="operation != null">operation = #{operation},</if>
        </trim>
        where id = #{id}
    </update>
    <!-- 修改 -->
    <update id="updatePayableAuditLogBatch" parameterType="java.util.List">
        <foreach collection="list" item="item" index="index" separator=";">
            update payable_audit_log
            <trim prefix="SET" suffixOverrides=",">
                <if test="item.headId != null">head_id = #{item.headId},</if>
                <if test="item.createBy != null">create_by = #{item.createBy},</if>
                <if test="item.createTime != null">create_time = #{item.createTime},</if>
                <if test="item.operation != null">operation = #{item.operation},</if>
            </trim>
        where id = #{item.id}
        </foreach>
    </update>
    <!--删除-->
    <delete id="deletePayableAuditLogById" parameterType="Integer">
        delete from payable_audit_log where id = #{id}
    </delete>
    <delete id="deletePayableAuditLogByIds" parameterType="Integer">
        delete from payable_audit_log where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
tms/src/main/resources/mapper/tms/ReceivableAuditLogMapper.xml
New file
@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.tms.mapper.ReceivableAuditLogMapper">
    <resultMap type="com.ruoyi.tms.domain.ReceivableAuditLog" id="ReceivableAuditLogResult">
        <result property="id"    column="id"    />
        <result property="headId"    column="head_id"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
        <result property="operation"    column="operation"    />
    </resultMap>
    <sql id="selectReceivableAuditLogVo">
        select thisTab.id, thisTab.head_id, thisTab.create_by, thisTab.create_time, thisTab.operation from receivable_audit_log AS thisTab
    </sql>
    <sql id="selectReceivableAuditLogVoCount">
        select count(0) from receivable_audit_log as thisTab
    </sql>
    <sql id="whereCondition">
        <if test="headId != null "> and thisTab.head_id = #{headId}</if>
        <if test="operation != null  and operation != ''"> and thisTab.operation = #{operation}</if>
    </sql>
    <!--查询-->
    <select id="selectReceivableAuditLogById" parameterType="Integer" resultMap="ReceivableAuditLogResult">
        <include refid="selectReceivableAuditLogVo"/>
        where id = #{id}
    </select>
    <select id="selectReceivableAuditLogCount" parameterType="com.ruoyi.tms.domain.ReceivableAuditLog" resultType="int">
        <include refid="selectReceivableAuditLogVoCount"/>
        <where>
            <include refid="whereCondition"/>
        </where>
    </select>
    <select id="selectReceivableAuditLogList" parameterType="com.ruoyi.tms.domain.ReceivableAuditLog" resultMap="ReceivableAuditLogResult">
        <include refid="selectReceivableAuditLogVo"/>
        <where>
            <include refid="whereCondition"/>
        </where>
        order by thisTab.id desc
    </select>
    <!-- 新增 -->
    <insert id="insertReceivableAuditLog" parameterType="com.ruoyi.tms.domain.ReceivableAuditLog"  useGeneratedKeys="true" keyProperty="id">
        insert into receivable_audit_log
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="headId != null">head_id,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="operation != null">operation,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="headId != null">#{headId},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="operation != null">#{operation},</if>
         </trim>
    </insert>
    <insert id="insertReceivableAuditLogBatch" parameterType="java.util.List"  useGeneratedKeys="true" keyProperty="id">
        insert into receivable_audit_log
        <trim prefix="(" suffix=") values" suffixOverrides=",">
            id,head_id,create_by,create_time,operation,
        </trim>
        <foreach item="item" index="index" collection="list" separator=",">
            <trim prefix="(" suffix=") " suffixOverrides=",">
                #{item.id},#{item.headId},#{item.createBy},#{item.createTime},#{item.operation},
            </trim>
        </foreach>
    </insert>
    <!-- 修改 -->
    <update id="updateReceivableAuditLog" parameterType="com.ruoyi.tms.domain.ReceivableAuditLog">
        update receivable_audit_log
        <trim prefix="SET" suffixOverrides=",">
            <if test="headId != null">head_id = #{headId},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="operation != null">operation = #{operation},</if>
        </trim>
        where id = #{id}
    </update>
    <!-- 修改 -->
    <update id="updateReceivableAuditLogBatch" parameterType="java.util.List">
        <foreach collection="list" item="item" index="index" separator=";">
            update receivable_audit_log
            <trim prefix="SET" suffixOverrides=",">
                <if test="item.headId != null">head_id = #{item.headId},</if>
                <if test="item.createBy != null">create_by = #{item.createBy},</if>
                <if test="item.createTime != null">create_time = #{item.createTime},</if>
                <if test="item.operation != null">operation = #{item.operation},</if>
            </trim>
        where id = #{item.id}
        </foreach>
    </update>
    <!--删除-->
    <delete id="deleteReceivableAuditLogById" parameterType="Integer">
        delete from receivable_audit_log where id = #{id}
    </delete>
    <delete id="deleteReceivableAuditLogByIds" parameterType="Integer">
        delete from receivable_audit_log where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
ui/admin-ui3/src/api/tms/tmsApBill.ts
@@ -94,3 +94,13 @@
        method: 'post',
    })
}
/**
 * 查询应付账单审核日志详细
 */
export const getPayableAuditLog:requestType = (query) => {
    return request({
        url: '/tms/payableAuditLog/list',
        method:'get',
         params: query
    })
}
ui/admin-ui3/src/api/tms/tmsArBill.ts
@@ -111,3 +111,13 @@
        method: 'post',
    })
}
/**
 * 查询应收账单审核日志列表
 */
export const listReceivableAuditLog:requestType = (query) => {
    return request({
        url: '/tms/receivableAuditLog/list',
        method:'get',
        params:query
    })
}
ui/admin-ui3/src/components/flowLog/index.vue
@@ -61,6 +61,10 @@
    isShow: {
        type: Boolean,
        default: true
    },
    title: { // 1. 定义 prop
        type: String,
        default: '流程日志'
    }
})
console.log(props);
@@ -85,7 +89,7 @@
    pageF, tableData, getList,
    handleQuery, resetQuery,
} = usePagePlus({
    title: '流程日志',
    title: props.title,
    queryParams: queryParams.value,
    // getListApi: listDzInoutOrder,
    resetQueryFunc: () => {
@@ -150,7 +154,7 @@
})
</script>
<template>
    <el-dialog v-model="pageF.drawerOpen" title="流程日志" append-to-body width="1000px">
    <el-dialog v-model="pageF.drawerOpen" :title="props.title" append-to-body width="1000px">
        <div class="app-container" style="padding-top: 0;">
            <el-table ref="multipleTableRef" :data="props.flowParams">
                <el-table-column align="center" label="处理时间" prop="createTime" />
ui/admin-ui3/src/views/tms/tmsApBill/index.vue
@@ -1,25 +1,10 @@
<template>
  <basicContainer>
    <avue-crud
        :option="option"
        :table-loading="pageF.loading"
        :data="tableData"
        :page="page"
        :permission="permissionList"
        :before-open="beforeOpen"
        v-model="form" v-model:search="queryParams"
        ref="crudRef"
        @row-update="rowUpdate"
        @row-save="rowSave"
        @refresh-change="refreshChange"
        @row-del="rowDel"
        @search-change="searchChange"
        @search-reset="searchReset"
        @selection-change="selectionChange"
        @current-change="currentChange"
        @size-change="sizeChange"
        @on-load="onLoad"
    >
    <avue-crud :option="option" :table-loading="pageF.loading" :data="tableData" :page="page"
      :permission="permissionList" :before-open="beforeOpen" v-model="form" v-model:search="queryParams" ref="crudRef"
      @row-update="rowUpdate" @row-save="rowSave" @refresh-change="refreshChange" @row-del="rowDel"
      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
      @current-change="currentChange" @size-change="sizeChange" @on-load="onLoad">
      <template #menu-left>
        <!--        <el-button-->
        <!--            type="success"-->
@@ -36,81 +21,76 @@
        <!--            v-hasPermi="['tms:tmsApBill:remove']"-->
        <!--        >删除-->
        <!--        </el-button>-->
        <el-button
            type="warning"
            plain
            icon="Download"
            @click="handleExport"
            v-hasPermi="['tms:tmsApBill:export']"
        >导出
        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['tms:tmsApBill:export']">导出
        </el-button>
      </template>
      <template #menu="{row}">
      <template #menu="{ row }">
        <!-- <el-link size="small" type="primary" v-if="row.status != 2"
                 @click="handleJs(row)" class="link-btn" :underline="false"
                 icon="el-icon-tickets">结算
        </el-link> -->
          <el-link size="small" type="primary" v-if="row.pushStatus == '3' || row.pushStatus == '4'"
        <el-link size="small" type="primary" v-if="row.pushStatus == '3' || row.pushStatus == '4'"
          @click="handleManualPush(row)" class="link-btn" underline="never" icon="el-icon-upload">手动推送
        </el-link>
        <el-link size="small" type="primary"  v-if="row.status == 0"
                 @click="handleEdit(row)" class="link-btn" :underline="false"
                 icon="el-icon-edit">账单确认
        <el-link size="small" type="primary" v-if="row.status == 0" @click="handleEdit(row)" class="link-btn"
          :underline="false" icon="el-icon-edit">账单确认
        </el-link>
        <el-link size="small" type="primary"
                 @click="handleView(row)" class="link-btn" :underline="false"
                 icon="el-icon-view">查看
        <el-link size="small" type="primary" @click="handleView(row)" class="link-btn" :underline="false"
          icon="el-icon-view">查看
        </el-link>
        <el-link size="small" type="primary"
                 @click="handleLog(row)" class="link-btn" :underline="false"
                 icon="el-icon-tickets">日志
        <!-- <el-link size="small" type="primary" @click="handleLog(row)" class="link-btn" :underline="false"
          icon="el-icon-tickets">日志
        </el-link> -->
        <el-link size="small" type="primary" @click="handleFlow(row)" class="link-btn" underline="never"
          icon="el-icon-document">
          审核日志
        </el-link>
      </template>
    </avue-crud>
    <el-dialog :title="pageF.title" v-model="pageF.open" class="avue-dialog avue-dialog--top" width="80%">
      <avue-form v-if="opt == 'js'"  v-model="boxForm" ref="boxFormRef"
                 :option="boxFormOption">
      <avue-form v-if="opt == 'js'" v-model="boxForm" ref="boxFormRef" :option="boxFormOption">
        <template #settleAmount>
          <avue-input-number :min="0" :max="form.actualSettlementAmount" v-model="boxForm.settleAmount" placeholder="请输入结算金额"></avue-input-number>
          <avue-input-number :min="0" :max="form.actualSettlementAmount" v-model="boxForm.settleAmount"
            placeholder="请输入结算金额"></avue-input-number>
        </template>
      </avue-form>
      <el-descriptions :column="3" title="账单基本信息"  border>
        <el-descriptions-item label="账单系统编号">{{form.systemNo}}</el-descriptions-item>
      <el-descriptions :column="3" title="账单基本信息" border>
        <el-descriptions-item label="账单系统编号">{{ form.systemNo }}</el-descriptions-item>
        <el-descriptions-item label="账单名称">
          <div v-if="opt === 'edit'">
            <el-input v-model="form.billName" placeholder="请输入账单名称" />
          </div>
          <div v-else>{{form.billName}}</div>
          <div v-else>{{ form.billName }}</div>
        </el-descriptions-item>
        <el-descriptions-item label="客户名称">{{form.customerName}}</el-descriptions-item>
        <el-descriptions-item label="应结算金额">{{form.settleAmount}}</el-descriptions-item>
        <el-descriptions-item label="客户名称">{{ form.customerName }}</el-descriptions-item>
        <el-descriptions-item label="应结算金额">{{ form.settleAmount }}</el-descriptions-item>
        <el-descriptions-item label="减免金额">
          <div v-if="opt === 'edit'">
            <el-input-number :max="form.settleAmount" v-model="form.deductionAmount" placeholder="请输入减免金额" @change="deductionAmountChange" />
            <el-input-number :max="form.settleAmount" v-model="form.deductionAmount" placeholder="请输入减免金额"
              @change="deductionAmountChange" />
          </div>
          <div v-else>{{form.deductionAmount}}</div>
          <div v-else>{{ form.deductionAmount }}</div>
        </el-descriptions-item>
        <el-descriptions-item label="实际结算金额" v-if="opt == 'edit'">{{form.actualSettlementAmount}}</el-descriptions-item>
        <el-descriptions-item label="实际结算金额" v-if="opt == 'edit'">{{ form.actualSettlementAmount }}</el-descriptions-item>
        <el-descriptions-item label="减免原因" v-if="opt == 'edit'">
          <div v-if="opt === 'edit'">
            <el-input v-model="form.reasonReduction" placeholder="请输入减免原因" />
          </div>
          <div v-else>{{form.reasonReduction}}</div></el-descriptions-item>
        <el-descriptions-item label="已结算金额" v-if="opt == 'js'">{{form.settledAmount}}</el-descriptions-item>
        <el-descriptions-item label="待结算金额" v-if="opt == 'js'">{{Number(form.settleAmount) - Number(form.settledAmount)}}</el-descriptions-item>
          <div v-else>{{ form.reasonReduction }}</div>
        </el-descriptions-item>
        <el-descriptions-item label="已结算金额" v-if="opt == 'js'">{{ form.settledAmount }}</el-descriptions-item>
        <el-descriptions-item label="待结算金额" v-if="opt == 'js'">{{ Number(form.settleAmount) -
          Number(form.settledAmount)}}</el-descriptions-item>
      </el-descriptions>
      <h3>关联明细</h3>
      <avue-crud
          :option="YSGenerateTableOption" ref="itemsTableRef"
          :data="form.items"
      >
        <template #menu="{row}">
          <el-link size="small" type="primary"
                   @click="handleCancel(row)" class="link-btn" :underline="false"
                   icon="el-icon-close">取消关联
      <avue-crud :option="YSGenerateTableOption" ref="itemsTableRef" :data="form.items">
        <template #menu="{ row }">
          <el-link size="small" type="primary" @click="handleCancel(row)" class="link-btn" :underline="false"
            icon="el-icon-close">取消关联
          </el-link>
        </template>
@@ -127,10 +107,7 @@
    </el-dialog>
    <el-dialog :title="pageF.title" v-model="open2" class="avue-dialog avue-dialog--top" width="80%">
      <avue-crud
          :option="logTableOption" ref="itemsTableRef2"
          :data="logTable"
      >
      <avue-crud :option="logTableOption" ref="itemsTableRef2" :data="logTable">
      </avue-crud>
@@ -144,6 +121,7 @@
  </basicContainer>
      <flowLog ref="flowLogIshow" :isShow="false" title="审核日志" :flowParams="flowParams"></flowLog>
</template>
<script setup name="tmsApBill" lang="ts">
@@ -154,17 +132,17 @@
  exportTmsApBill,
  getTmsApBill,
  listTmsApBill,
  updateTmsApBill,manualPushTmsApBill
  updateTmsApBill, manualPushTmsApBill,getPayableAuditLog
} from "@/api/tms/tmsApBill";
import useCurrentInstance from "@/utils/useCurrentInstance";
import {computed, reactive, ref, toRefs} from "vue";
import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
import {usePagePlus} from "@/hooks/usePagePlus";
import {hasPermission} from "@/utils/permissionUtils";
import {cancelArBill, getTmsArBill} from "@/api/tms/tmsArBill";
import {ElMessage, ElMessageBox} from "element-plus";
import { computed, reactive, ref, toRefs } from "vue";
import { PagesInterface, PageQueryInterface } from "@/utils/globalInterface";
import { usePagePlus } from "@/hooks/usePagePlus";
import { hasPermission } from "@/utils/permissionUtils";
import { cancelArBill, getTmsArBill } from "@/api/tms/tmsArBill";
import { ElMessage, ElMessageBox } from "element-plus";
const {proxy} = useCurrentInstance();
const { proxy } = useCurrentInstance();
const crudRef = ref();
const permissionList = computed(() => {
@@ -186,10 +164,10 @@
  },
  selectionList: [],
  opt: '',
  boxForm:<any> {},
  boxForm: <any>{},
  open2: false
})
const {queryParams, form, page, selectionList,opt,boxForm,open2} = toRefs(data);
const { queryParams, form, page, selectionList, opt, boxForm, open2 } = toRefs(data);
const option = ref({
  pageKey: 'TmsApBill',
  rowKey: 'id',
@@ -209,67 +187,67 @@
    // },
    systemNo: {
      label: '系统编号',
      hide: false,minWidth:150,
      hide: false, minWidth: 150,
      search: true,
    },
    billName: {
      label: '账单名称',
      hide: false,
      search: true,minWidth:220,
      search: true, minWidth: 220,
      showOverflowTooltip: true
    },
    serviceProviderName: {
      label: '供应商名称',
      hide: false,
      search: true,minWidth:220,
      search: true, minWidth: 220,
      showOverflowTooltip: true
    },
    dispatchCount: {
      label: '调度单数量',
      hide: false,
      search: false,minWidth:120,
      search: false, minWidth: 120,
    },
    settleAmount: {
      label: '应结算金额',minWidth:120,
      label: '应结算金额', minWidth: 120,
      hide: false,
      search: false,
    },
    deductionAmount: {
      label: '减免金额',minWidth:120,
      label: '减免金额', minWidth: 120,
      hide: false,
      search: false,
    },
    actualSettlementAmount: {
      label: '实际结算金额',
      hide: false,
      search: false,minWidth:120,
      search: false, minWidth: 120,
    },
    settledAmount: {
      label: '已结算金额',
      hide: false,
      search: false,minWidth:120,
      search: false, minWidth: 120,
    },
    pushTime: {
      label: '推送时间', display: false,  searchRange: true, type: 'date',
      label: '推送时间', display: false, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: false, searchSpan: 6, minWidth: 150,
      valueFormat: 'YYYY-MM-DD',
    },
    invoiceStatus: {
      label: '开票状态',minWidth:120,fixed:'right',
      label: '开票状态', minWidth: 120, fixed: 'right',
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/invoice_status',
      hide: false,
      search: true,
    },
    status: {
      label: '状态',minWidth:120,fixed:'right',
      label: '状态', minWidth: 120, fixed: 'right',
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/ar_bill_status',
      hide: false,
      search: true,
    },
  pushStatus: {
    pushStatus: {
      label: '推送状态',
      minWidth: 120,
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_push_status',
@@ -318,31 +296,31 @@
  }
})
const YSGenerateTableOption= ref({
const YSGenerateTableOption = ref({
  menu: true,
  add: false,
  header:false,
  header: false,
  selection: false,
  rowKey:'id',
  editBtn:false,
  viewBtn:false,
  rowKey: 'id',
  editBtn: false,
  viewBtn: false,
  delBtn: false,
  column:{
  column: {
    projectName:{
    projectName: {
      label: '项目名称',
    },
    dispatchNo:{
    dispatchNo: {
      label: '调度单号',
    },
    orderTime:{
    orderTime: {
      label: '下单时间',
    },
    estimateAmount:{
    estimateAmount: {
      label: '预估应收金额',
    },
    currency:{
    currency: {
      label: '币制',
    }
  }
@@ -381,31 +359,31 @@
  }
})
const boxFormRef = ref();
const logTableOption= ref({
const logTableOption = ref({
  menu: false,
  add: false,
  header:false,
  header: false,
  selection: false,
  rowKey:'id',
  rowKey: 'id',
  column:{
  column: {
    settleAmount:{
    settleAmount: {
      label: '结算金额',
    },
    createBy:{
    createBy: {
      label: '处理人员',
    },
    attachment:{
    attachment: {
      label: '附件下载',
      dataType: 'string',
      type: 'img'
    },
    remark:{
    remark: {
      label: '备注',
    },
    createTime:{
    createTime: {
      label: '提交时间',
    },
  }
@@ -418,8 +396,8 @@
const handleView = (row: any) => {
  form.value.items = [];
  getTmsApBill(row.id).then((res:any) => {
    form.value = res.data ||{};
  getTmsApBill(row.id).then((res: any) => {
    form.value = res.data || {};
    pageF.open = true;
    pageF.title = '应付账单确认';
    opt.value = 'edit'
@@ -430,8 +408,8 @@
}
const handleEdit = (row: any) => {
  form.value.items = [];
  getTmsApBill(row.id).then((res:any) => {
    form.value = res.data ||{};
  getTmsApBill(row.id).then((res: any) => {
    form.value = res.data || {};
    pageF.open = true;
    pageF.title = '应付账单确认';
    opt.value = 'edit'
@@ -445,10 +423,10 @@
const editSubmit = () => {
}
const deductionAmountChange = (e:any) => {
  form.value.actualSettlementAmount =(Number(form.value.settleAmount) || 0) -( Number(form.value.deductionAmount) || 0);
const deductionAmountChange = (e: any) => {
  form.value.actualSettlementAmount = (Number(form.value.settleAmount) || 0) - (Number(form.value.deductionAmount) || 0);
}
const handleCancel = (row:any) => {
const handleCancel = (row: any) => {
  ElMessageBox.confirm("是否对调度单号" + row.dispatchNo + "的应付费用取消关联?", '系统提示', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
@@ -470,7 +448,7 @@
    type: 'info'
  }).then(() => {
    // 调用推送接口
    return manualPushTmsApBill(row.id);
    return manualPushTmsApBill(row.id);
  }).then((res) => {
    proxy.$message.success(res.msg);
    onLoad(page.value); // 刷新列表
@@ -478,4 +456,18 @@
    // 取消操作
  });
}
const flowLogIshow = ref()
const flowParams = ref([])
const handleFlow = (row: any) => {
  let data = {
    headId: row.id,
  }
  getPayableAuditLog(data).then((res) => {
    flowParams.value = res.rows
    flowLogIshow.value.openModel()
  })
}
</script>
ui/admin-ui3/src/views/tms/tmsArBill/index.vue
@@ -50,6 +50,10 @@
        <el-link size="small" type="primary" @click="handleLog(row)" class="link-btn" underline="never"
          icon="el-icon-tickets">日志
        </el-link>
         <el-link size="small" type="primary" @click="handleFlow(row)" class="link-btn" underline="never"
          icon="el-icon-document">
          审核日志
        </el-link>
      </template>
    </avue-crud>
@@ -128,6 +132,7 @@
  </basicContainer>
      <flowLog ref="flowLogIshow" :isShow="false" title="审核日志" :flowParams="flowParams"></flowLog>
</template>
<script setup name="tmsArBill" lang="ts">
@@ -139,7 +144,7 @@
  getTmsArBill,
  listTmsArBill,
  updateTmsArBill, cancelArBill,
  exportArBillFormat,manualPushTmsArBill
  exportArBillFormat,manualPushTmsArBill,listReceivableAuditLog
} from "@/api/tms/tmsArBill";
import useCurrentInstance from "@/utils/useCurrentInstance";
import { computed, reactive, ref, toRefs } from "vue";
@@ -517,4 +522,18 @@
    // 取消操作
  });
}
const flowLogIshow = ref()
const flowParams = ref([])
const handleFlow = (row: any) => {
  let data = {
    headId: row.id,
  }
  listReceivableAuditLog(data).then((res) => {
    flowParams.value = res.rows
    flowLogIshow.value.openModel()
  })
}
</script>
ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
@@ -5,6 +5,43 @@
      @row-update="rowUpdate" @row-save="rowSave" @refresh-change="refreshChange" @row-del="rowDel"
      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
      @current-change="currentChange" @size-change="sizeChange" @on-load="onLoad">
      <!-- template 中 -->
      <template #requiredVehicleTypes-form="{ row, disabled }">
        <template v-if="disabled">
          <span>{{ dictFormat(vehicle_type, row?.requiredVehicleTypes || form?.requiredVehicleTypes) }}</span>
        </template>
        <template v-else>
          <el-select v-model="form.requiredVehicleTypes" placeholder="请选择车型" style="width: 100%">
            <el-option v-for="item in vehicle_type" :key="item.value" :label="item.label" :value="item.value" />
          </el-select>
        </template>
      </template>
      <template #orderType-form="{ row, disabled }">
        <template v-if="disabled">
          <span>{{ dictFormat(order_type, row?.orderType || form?.orderType) }}</span>
        </template>
        <template v-else>
          <el-select v-model="form.orderType" placeholder="请选择订单类型" style="width: 100%" clearable>
            <el-option v-for="item in order_type" :key="item.value" :label="item.label" :value="parseInt(item.value)" />
          </el-select>
        </template>
      </template>
      <template #actualVehicleType-form="{ row, disabled }">
        <template v-if="disabled">
          <span>{{ dictFormat(vehicle_type, row?.actualVehicleType || form?.actualVehicleType) }}</span>
        </template>
        <template v-else>
          <el-select v-model="form.actualVehicleType" placeholder="请选择实际车型" style="width: 100%">
            <el-option v-for="item in vehicle_type" :key="item.value" :label="item.label" :value="item.value" />
          </el-select>
        </template>
      </template>
      <template #menu-left>
        <!--        <el-button-->
        <!--            type="success"-->
@@ -672,7 +709,7 @@
const { proxy } = useCurrentInstance(
);
const { fee_type, sys_currency, vehicle_type } = proxy.useDict('fee_type', 'sys_currency', 'vehicle_type')
const { fee_type, sys_currency, vehicle_type, order_type } = proxy.useDict('fee_type', 'sys_currency', 'vehicle_type', 'order_type')
const crudRef = ref();
const boxFormRef = ref();
const goodsCrudRef = ref();
@@ -806,7 +843,7 @@
                customerCode: active.customerCode,
                contractId: active.contractId,
                contractName: active.contractName,
                requiredVehicleTypes: active.vehicleType,
                requiredVehicleTypes: active.vehicleType + '',
                quotePlanId: active.quotePlanId,
              });
              form.value.shipperId = undefined;
@@ -891,16 +928,16 @@
          display: true, disabled: true
        },
        requiredVehicleTypes: {
          label: '下单车型', disabled: true,
          display: true, type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
          rules: [
            {
              required: true,
              message: "下单车型不能为空", trigger: "blur"
            }
          ],
          //  formatter: (row: any, value: any) => dictFormat(vehicle_type, value)
          label: '下单车型',
          minWidth: 130,
          display: true,        // ✅ 改为 true 在表格显示
          type: 'select',
          search: true,
          dicUrl: '/system/dict/data/type/vehicle_type',
          dataType: 'string',
        },
        orderType: {
          label: '订单类型',
          display: true,
@@ -913,9 +950,13 @@
            }
          ],
          change: ({ value }: any) => {
            option.value.group.forEach((item: any) => {
              if (item.prop == 'pcxx') {
                item.column.shipperId.rules.forEach((cItem: any) => {
                  cItem.required = !(value == 1);
                });
                item.column.receiverId.rules.forEach((cItem: any) => {
@@ -1998,7 +2039,6 @@
      display: false,
      search: true,
      type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
    },
@@ -2161,17 +2201,15 @@
      search: false,
      searchSpan: 6,
    },
    // 表单组配置(派车信息组)
    loadingDate: {
      label: '装货日期',
      prop: 'loadingDate', // 保持原有字段名
      bind: 'orderTime',    // 4. 强制绑定到 row 里的 orderTime 字段
      minWidth: 180,
      display: true,
      viewDisplay: true,
      bind: 'orderTime',
      label: '装货日期', minWidth: 180,
      addDisplay: false,
      editDisplay: false,
      hide: false,
      viewDisplay: true,
      hide: true,
      search: false,
      searchSpan: 6,
    },
    // orderTimeRange: {
    //   label: '下单时间', display: false, searchRange: true, type: 'date',
@@ -3255,14 +3293,17 @@
      }
    });
    console.log('发送给接口的最终参数:', finalParams);
    // 【核心修改】:直接返回,不要赋值给 queryParams.value
    return finalParams;
  },
  handleBeforeOpenFunc: (type: string) => {
    if (type == 'add') {
      form.value = {};
    } else if (type == 'edit') {
      // form.value = row;
    }
  }
@@ -4325,7 +4366,6 @@
}
const submitForm5 = () => {
  boxFormRef.value.validate((valid: boolean, done: any) => {
    console.log(valid)
    if (valid) {
      boxForm.value.id = form.value.id;
      closeOrder(boxForm.value).then(res => {