24282 před 8 měsíci
rodič
revize
3399728ff9
27 změnil soubory, kde provedl 1880 přidání a 5 odebrání
  1. 72 0
      jy-business/src/main/java/com/jy/business/contract/controller/ContractDetailController.java
  2. 71 0
      jy-business/src/main/java/com/jy/business/contract/controller/ContractInfoController.java
  3. 59 0
      jy-business/src/main/java/com/jy/business/contract/dao/ContractDetailDao.java
  4. 57 0
      jy-business/src/main/java/com/jy/business/contract/dao/ContractInfoDao.java
  5. 16 0
      jy-business/src/main/java/com/jy/business/contract/mapper/ContractDetailMapper.java
  6. 16 0
      jy-business/src/main/java/com/jy/business/contract/mapper/ContractInfoMapper.java
  7. 5 0
      jy-business/src/main/java/com/jy/business/contract/mapper/xml/ContractDetailMapper.xml
  8. 5 0
      jy-business/src/main/java/com/jy/business/contract/mapper/xml/ContractInfoMapper.xml
  9. 17 0
      jy-business/src/main/java/com/jy/business/contract/model/dto/ContractDetailDto.java
  10. 17 0
      jy-business/src/main/java/com/jy/business/contract/model/dto/ContractDetailSelectDto.java
  11. 17 0
      jy-business/src/main/java/com/jy/business/contract/model/dto/ContractInfoDto.java
  12. 17 0
      jy-business/src/main/java/com/jy/business/contract/model/dto/ContractInfoSelectDto.java
  13. 97 0
      jy-business/src/main/java/com/jy/business/contract/model/entity/ContractDetail.java
  14. 117 0
      jy-business/src/main/java/com/jy/business/contract/model/entity/ContractInfo.java
  15. 94 0
      jy-business/src/main/java/com/jy/business/contract/model/table/ContractDetailTable.java
  16. 114 0
      jy-business/src/main/java/com/jy/business/contract/model/table/ContractInfoTable.java
  17. 17 0
      jy-business/src/main/java/com/jy/business/contract/model/vo/ContractDetailVo.java
  18. 17 0
      jy-business/src/main/java/com/jy/business/contract/model/vo/ContractInfoVo.java
  19. 44 0
      jy-business/src/main/java/com/jy/business/contract/service/ContractDetailService.java
  20. 45 0
      jy-business/src/main/java/com/jy/business/contract/service/ContractInfoService.java
  21. 57 0
      jy-business/src/main/java/com/jy/business/contract/service/impl/ContractDetailServiceImpl.java
  22. 58 0
      jy-business/src/main/java/com/jy/business/contract/service/impl/ContractInfoServiceImpl.java
  23. 27 0
      jy-ui/src/api/business/contract/detail.ts
  24. 27 0
      jy-ui/src/api/business/contract/info.ts
  25. 19 5
      jy-ui/src/components/PDF/moneyPDF.vue
  26. 359 0
      jy-ui/src/views/business/contract/detail/index.vue
  27. 419 0
      jy-ui/src/views/business/contract/info/index.vue

+ 72 - 0
jy-business/src/main/java/com/jy/business/contract/controller/ContractDetailController.java

@@ -0,0 +1,72 @@
+package com.jy.business.contract.controller;
+
+import com.jy.business.contract.model.dto.ContractDetailDto;
+import com.jy.business.contract.model.dto.ContractDetailSelectDto;
+import com.jy.business.contract.model.vo.ContractDetailVo;
+import com.jy.business.contract.service.ContractDetailService;
+import com.jy.framework.model.base.BaseSelectDto;
+import jakarta.annotation.Resource;
+import org.springframework.web.bind.annotation.GetMapping;
+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 java.util.List;
+
+/**
+ * <p>
+ * 合同明细 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@RestController
+@RequestMapping("/contractDetail")
+public class ContractDetailController {
+
+    @Resource
+    private ContractDetailService contractDetailService;
+
+    /**
+     * 合同明细列表
+     */
+    @GetMapping("/getList")
+    public List<ContractDetailVo> getList(ContractDetailSelectDto dto) {
+        return contractDetailService.getList(dto);
+    }
+
+    /**
+     * 合同明细明细
+     */
+    @GetMapping("/getDetail")
+    public ContractDetailVo getDetail(BaseSelectDto dto) {
+        return contractDetailService.getDetail(dto.getId());
+    }
+
+    /**
+     * 合同明细新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ContractDetailDto dto) {
+        contractDetailService.add(dto);
+    }
+
+    /**
+     * 合同明细编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ContractDetailDto dto) {
+        contractDetailService.edit(dto);
+    }
+
+    /**
+     * 合同明细删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        contractDetailService.delete(dto.getIdList());
+    }
+
+}

+ 71 - 0
jy-business/src/main/java/com/jy/business/contract/controller/ContractInfoController.java

@@ -0,0 +1,71 @@
+package com.jy.business.contract.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jy.business.contract.model.dto.ContractInfoDto;
+import com.jy.business.contract.model.dto.ContractInfoSelectDto;
+import com.jy.business.contract.model.vo.ContractInfoVo;
+import com.jy.business.contract.service.ContractInfoService;
+import com.jy.framework.model.base.BaseSelectDto;
+import jakarta.annotation.Resource;
+import org.springframework.web.bind.annotation.GetMapping;
+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;
+
+/**
+ * <p>
+ * 合同 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@RestController
+@RequestMapping("/contractInfo")
+public class ContractInfoController {
+
+    @Resource
+    private ContractInfoService contractInfoService;
+
+    /**
+     * 合同分页
+     */
+    @GetMapping("/getPage")
+    public Page<ContractInfoVo> getPage(ContractInfoSelectDto dto) {
+        return contractInfoService.getPage(dto);
+    }
+
+    /**
+     * 合同明细
+     */
+    @GetMapping("/getDetail")
+    public ContractInfoVo getDetail(BaseSelectDto dto) {
+        return contractInfoService.getDetail(dto.getId());
+    }
+
+    /**
+     * 合同新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ContractInfoDto dto) {
+        contractInfoService.add(dto);
+    }
+
+    /**
+     * 合同编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ContractInfoDto dto) {
+        contractInfoService.edit(dto);
+    }
+
+    /**
+     * 合同删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        contractInfoService.delete(dto.getIdList());
+    }
+
+}

+ 59 - 0
jy-business/src/main/java/com/jy/business/contract/dao/ContractDetailDao.java

@@ -0,0 +1,59 @@
+package com.jy.business.contract.dao;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jy.business.contract.mapper.ContractDetailMapper;
+import com.jy.business.contract.model.dto.ContractDetailSelectDto;
+import com.jy.business.contract.model.entity.ContractDetail;
+import com.jy.business.contract.model.table.ContractDetailTable;
+import com.jy.business.contract.model.vo.ContractDetailVo;
+import com.jy.framework.model.base.BaseDao;
+import com.jy.system.service.AuthService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ContractDetailDao extends BaseDao<ContractDetailMapper, ContractDetail> {
+
+    @Resource
+    private AuthService authService;
+
+    /**
+     * 合同明细列表
+     */
+    public List<ContractDetailVo> getList(ContractDetailSelectDto dto) {
+        ContractDetailTable cd = ContractDetailTable.cd;
+
+        return sql(ContractDetailVo.class)
+                .select(
+                        cd.all
+                )
+                .from(cd)
+                .where(
+                        cd.createUser.in(authService.getUserPermissionSet())
+                )
+                .orderBy(
+                    cd.id.desc()
+                )
+                .list();
+    }
+
+    /**
+     * 合同明细明细
+     */
+    public ContractDetailVo getDetail(Long id) {
+        ContractDetailTable cd = ContractDetailTable.cd;
+
+        return sql(ContractDetailVo.class)
+                .select(
+                        cd.all
+                )
+                .from(cd)
+                .where(
+                        cd.id.eq(id)
+                )
+                .one();
+    }
+
+}

+ 57 - 0
jy-business/src/main/java/com/jy/business/contract/dao/ContractInfoDao.java

@@ -0,0 +1,57 @@
+package com.jy.business.contract.dao;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jy.business.contract.mapper.ContractInfoMapper;
+import com.jy.business.contract.model.dto.ContractInfoSelectDto;
+import com.jy.business.contract.model.entity.ContractInfo;
+import com.jy.business.contract.model.table.ContractInfoTable;
+import com.jy.business.contract.model.vo.ContractInfoVo;
+import com.jy.framework.model.base.BaseDao;
+import com.jy.system.service.AuthService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ContractInfoDao extends BaseDao<ContractInfoMapper, ContractInfo> {
+
+    @Resource
+    private AuthService authService;
+
+    /**
+     * 合同分页
+     */
+    public Page<ContractInfoVo> getPage(ContractInfoSelectDto dto) {
+        ContractInfoTable ci = ContractInfoTable.ci;
+
+        return sql(ContractInfoVo.class)
+                .select(
+                        ci.all
+                )
+                .from(ci)
+                .where(
+                        ci.createUser.in(authService.getUserPermissionSet())
+                )
+                .orderBy(
+                        ci.id.desc()
+                )
+                .page(dto.getPage());
+    }
+
+    /**
+     * 合同明细
+     */
+    public ContractInfoVo getDetail(Long id) {
+        ContractInfoTable ci = ContractInfoTable.ci;
+
+        return sql(ContractInfoVo.class)
+                .select(
+                        ci.all
+                )
+                .from(ci)
+                .where(
+                        ci.id.eq(id)
+                )
+                .one();
+    }
+
+}

+ 16 - 0
jy-business/src/main/java/com/jy/business/contract/mapper/ContractDetailMapper.java

@@ -0,0 +1,16 @@
+package com.jy.business.contract.mapper;
+
+import com.jy.business.contract.model.entity.ContractDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 合同明细 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+public interface ContractDetailMapper extends BaseMapper<ContractDetail> {
+
+}

+ 16 - 0
jy-business/src/main/java/com/jy/business/contract/mapper/ContractInfoMapper.java

@@ -0,0 +1,16 @@
+package com.jy.business.contract.mapper;
+
+import com.jy.business.contract.model.entity.ContractInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 合同 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+public interface ContractInfoMapper extends BaseMapper<ContractInfo> {
+
+}

+ 5 - 0
jy-business/src/main/java/com/jy/business/contract/mapper/xml/ContractDetailMapper.xml

@@ -0,0 +1,5 @@
+<?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.jy.business.contract.mapper.ContractDetailMapper">
+
+</mapper>

+ 5 - 0
jy-business/src/main/java/com/jy/business/contract/mapper/xml/ContractInfoMapper.xml

@@ -0,0 +1,5 @@
+<?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.jy.business.contract.mapper.ContractInfoMapper">
+
+</mapper>

+ 17 - 0
jy-business/src/main/java/com/jy/business/contract/model/dto/ContractDetailDto.java

@@ -0,0 +1,17 @@
+package com.jy.business.contract.model.dto;
+
+import com.jy.business.contract.model.entity.ContractDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 合同明细新增编辑入参实体
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@Getter
+@Setter
+public class ContractDetailDto extends ContractDetail {
+
+}

+ 17 - 0
jy-business/src/main/java/com/jy/business/contract/model/dto/ContractDetailSelectDto.java

@@ -0,0 +1,17 @@
+package com.jy.business.contract.model.dto;
+
+import com.jy.framework.model.base.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 合同明细列表查询入参实体
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@Getter
+@Setter
+public class ContractDetailSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
jy-business/src/main/java/com/jy/business/contract/model/dto/ContractInfoDto.java

@@ -0,0 +1,17 @@
+package com.jy.business.contract.model.dto;
+
+import com.jy.business.contract.model.entity.ContractInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 合同新增编辑入参实体
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@Getter
+@Setter
+public class ContractInfoDto extends ContractInfo {
+
+}

+ 17 - 0
jy-business/src/main/java/com/jy/business/contract/model/dto/ContractInfoSelectDto.java

@@ -0,0 +1,17 @@
+package com.jy.business.contract.model.dto;
+
+import com.jy.framework.model.base.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 合同列表查询入参实体
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@Getter
+@Setter
+public class ContractInfoSelectDto extends BaseSelectDto {
+
+}

+ 97 - 0
jy-business/src/main/java/com/jy/business/contract/model/entity/ContractDetail.java

@@ -0,0 +1,97 @@
+package com.jy.business.contract.model.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jy.framework.model.base.BaseIdPo;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 合同明细
+ * </p>
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@Getter
+@Setter
+@TableName("contract_detail")
+public class ContractDetail extends BaseIdPo {
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 产品货号
+     */
+    private String productCode;
+
+    /**
+     * 产品规格
+     */
+    private String productSpec;
+
+    /**
+     * 颜色
+     */
+    private String productColour;
+
+    /**
+     * 单位
+     */
+    private String productUnit;
+
+    /**
+     * 数量
+     */
+    private Integer quantity;
+
+    /**
+     * 单价
+     */
+    private BigDecimal unitPrice;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 创建人
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    /**
+     * 创建时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /**
+     * 更新人
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    /**
+     * 逻辑删除标记
+     */
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private Long delFlag;
+
+}

+ 117 - 0
jy-business/src/main/java/com/jy/business/contract/model/entity/ContractInfo.java

@@ -0,0 +1,117 @@
+package com.jy.business.contract.model.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jy.framework.model.base.BaseIdPo;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 合同
+ * </p>
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@Getter
+@Setter
+@TableName("contract_info")
+public class ContractInfo extends BaseIdPo {
+
+    /**
+     * 资金流水id
+     */
+    private Long capitalTransactionsId;
+
+    /**
+     * 合同编号
+     */
+    private String code;
+
+    /**
+     * 客户单位名称
+     */
+    private String customerCorporationName;
+
+    /**
+     * 客户单位地址
+     */
+    private String customerCorporation Address;
+
+    /**
+     * 客户法定代表人
+     */
+    private String customerLegalRepresentative;
+
+    /**
+     * 客户业务联系人
+     */
+    private String customerContactPerson;
+
+    /**
+     * 客户联系电话
+     */
+    private String customerContactNumber;
+
+    /**
+     * 签订日期
+     */
+    private Date signingDate;
+
+    /**
+     * 合同总金额
+     */
+    private BigDecimal totalAmount;
+
+    /**
+     * 税率
+     */
+    private BigDecimal taxRate;
+
+    /**
+     * 运费
+     */
+    private BigDecimal freight;
+
+    /**
+     * 收货地址
+     */
+    private String deliveryAddress;
+
+    /**
+     * 创建人
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    /**
+     * 创建时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /**
+     * 更新人
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    /**
+     * 逻辑删除标记
+     */
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private Long delFlag;
+
+}

+ 94 - 0
jy-business/src/main/java/com/jy/business/contract/model/table/ContractDetailTable.java

@@ -0,0 +1,94 @@
+package com.jy.business.contract.model.table;
+
+import com.jy.business.contract.model.entity.ContractDetail;
+import com.jy.framework.mybatis.join.QueryColumn;
+import com.jy.framework.mybatis.join.Table;
+
+public class ContractDetailTable extends Table<ContractDetail> {
+
+    public static ContractDetailTable contract_detail = new ContractDetailTable();
+    public static ContractDetailTable cd = contract_detail.as("cd");
+
+    /**
+     * 合同明细id
+     */
+    public QueryColumn id = this.field(ContractDetail::getId);
+
+    /**
+     * 产品名称
+     */
+    public QueryColumn productName = this.field(ContractDetail::getProductName);
+
+    /**
+     * 产品货号
+     */
+    public QueryColumn productCode = this.field(ContractDetail::getProductCode);
+
+    /**
+     * 产品规格
+     */
+    public QueryColumn productSpec = this.field(ContractDetail::getProductSpec);
+
+    /**
+     * 颜色
+     */
+    public QueryColumn productColour = this.field(ContractDetail::getProductColour);
+
+    /**
+     * 单位
+     */
+    public QueryColumn productUnit = this.field(ContractDetail::getProductUnit);
+
+    /**
+     * 数量
+     */
+    public QueryColumn quantity = this.field(ContractDetail::getQuantity);
+
+    /**
+     * 单价
+     */
+    public QueryColumn unitPrice = this.field(ContractDetail::getUnitPrice);
+
+    /**
+     * 备注
+     */
+    public QueryColumn remark = this.field(ContractDetail::getRemark);
+
+    /**
+     * 创建人
+     */
+    public QueryColumn createUser = this.field(ContractDetail::getCreateUser);
+
+    /**
+     * 创建时间
+     */
+    public QueryColumn createTime = this.field(ContractDetail::getCreateTime);
+
+    /**
+     * 更新人
+     */
+    public QueryColumn updateUser = this.field(ContractDetail::getUpdateUser);
+
+    /**
+     * 更新时间
+     */
+    public QueryColumn updateTime = this.field(ContractDetail::getUpdateTime);
+
+    /**
+     * 逻辑删除标记
+     */
+    public QueryColumn delFlag = this.field(ContractDetail::getDelFlag);
+
+    private ContractDetailTable() {
+        super(ContractDetail.class);
+    }
+
+    private ContractDetailTable(String alias) {
+        super(ContractDetail.class, alias);
+    }
+
+    public ContractDetailTable as(String alias) {
+        return new ContractDetailTable(alias);
+    }
+
+}

+ 114 - 0
jy-business/src/main/java/com/jy/business/contract/model/table/ContractInfoTable.java

@@ -0,0 +1,114 @@
+package com.jy.business.contract.model.table;
+
+import com.jy.business.contract.model.entity.ContractInfo;
+import com.jy.framework.mybatis.join.QueryColumn;
+import com.jy.framework.mybatis.join.Table;
+
+public class ContractInfoTable extends Table<ContractInfo> {
+
+    public static ContractInfoTable contract_info = new ContractInfoTable();
+    public static ContractInfoTable ci = contract_info.as("ci");
+
+    /**
+     * 合同id
+     */
+    public QueryColumn id = this.field(ContractInfo::getId);
+
+    /**
+     * 资金流水id
+     */
+    public QueryColumn capitalTransactionsId = this.field(ContractInfo::getCapitalTransactionsId);
+
+    /**
+     * 合同编号
+     */
+    public QueryColumn code = this.field(ContractInfo::getCode);
+
+    /**
+     * 客户单位名称
+     */
+    public QueryColumn customerCorporationName = this.field(ContractInfo::getCustomerCorporationName);
+
+    /**
+     * 客户单位地址
+     */
+    public QueryColumn customerCorporation Address = this.field(ContractInfo::getCustomerCorporation Address);
+
+    /**
+     * 客户法定代表人
+     */
+    public QueryColumn customerLegalRepresentative = this.field(ContractInfo::getCustomerLegalRepresentative);
+
+    /**
+     * 客户业务联系人
+     */
+    public QueryColumn customerContactPerson = this.field(ContractInfo::getCustomerContactPerson);
+
+    /**
+     * 客户联系电话
+     */
+    public QueryColumn customerContactNumber = this.field(ContractInfo::getCustomerContactNumber);
+
+    /**
+     * 签订日期
+     */
+    public QueryColumn signingDate = this.field(ContractInfo::getSigningDate);
+
+    /**
+     * 合同总金额
+     */
+    public QueryColumn totalAmount = this.field(ContractInfo::getTotalAmount);
+
+    /**
+     * 税率
+     */
+    public QueryColumn taxRate = this.field(ContractInfo::getTaxRate);
+
+    /**
+     * 运费
+     */
+    public QueryColumn freight = this.field(ContractInfo::getFreight);
+
+    /**
+     * 收货地址
+     */
+    public QueryColumn deliveryAddress = this.field(ContractInfo::getDeliveryAddress);
+
+    /**
+     * 创建人
+     */
+    public QueryColumn createUser = this.field(ContractInfo::getCreateUser);
+
+    /**
+     * 创建时间
+     */
+    public QueryColumn createTime = this.field(ContractInfo::getCreateTime);
+
+    /**
+     * 更新人
+     */
+    public QueryColumn updateUser = this.field(ContractInfo::getUpdateUser);
+
+    /**
+     * 更新时间
+     */
+    public QueryColumn updateTime = this.field(ContractInfo::getUpdateTime);
+
+    /**
+     * 逻辑删除标记
+     */
+    public QueryColumn delFlag = this.field(ContractInfo::getDelFlag);
+
+    private ContractInfoTable() {
+        super(ContractInfo.class);
+    }
+
+    private ContractInfoTable(String alias) {
+        super(ContractInfo.class, alias);
+    }
+
+    public ContractInfoTable as(String alias) {
+        return new ContractInfoTable(alias);
+    }
+
+}

+ 17 - 0
jy-business/src/main/java/com/jy/business/contract/model/vo/ContractDetailVo.java

@@ -0,0 +1,17 @@
+package com.jy.business.contract.model.vo;
+
+import com.jy.business.contract.model.entity.ContractDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 合同明细列表查询返回值实体
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@Getter
+@Setter
+public class ContractDetailVo extends ContractDetail {
+
+}

+ 17 - 0
jy-business/src/main/java/com/jy/business/contract/model/vo/ContractInfoVo.java

@@ -0,0 +1,17 @@
+package com.jy.business.contract.model.vo;
+
+import com.jy.business.contract.model.entity.ContractInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 合同列表查询返回值实体
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@Getter
+@Setter
+public class ContractInfoVo extends ContractInfo {
+
+}

+ 44 - 0
jy-business/src/main/java/com/jy/business/contract/service/ContractDetailService.java

@@ -0,0 +1,44 @@
+package com.jy.business.contract.service;
+
+import com.jy.business.contract.model.dto.ContractDetailDto;
+import com.jy.business.contract.model.dto.ContractDetailSelectDto;
+import com.jy.business.contract.model.vo.ContractDetailVo;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 合同明细 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+public interface ContractDetailService {
+
+    /**
+     * 合同明细列表
+     */
+    List<ContractDetailVo> getList(ContractDetailSelectDto dto);
+
+    /**
+     * 合同明细明细
+     */
+    ContractDetailVo getDetail(Long id);
+
+    /**
+     * 合同明细新增
+     */
+    void add(ContractDetailDto dto);
+
+    /**
+     * 合同明细编辑
+     */
+    void edit(ContractDetailDto dto);
+
+    /**
+     * 合同明细删除
+     */
+    void delete(List<Long> idList);
+
+}

+ 45 - 0
jy-business/src/main/java/com/jy/business/contract/service/ContractInfoService.java

@@ -0,0 +1,45 @@
+package com.jy.business.contract.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jy.business.contract.model.dto.ContractInfoDto;
+import com.jy.business.contract.model.dto.ContractInfoSelectDto;
+import com.jy.business.contract.model.vo.ContractInfoVo;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 合同 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+public interface ContractInfoService {
+
+    /**
+     * 合同分页
+     */
+    Page<ContractInfoVo> getPage(ContractInfoSelectDto dto);
+
+    /**
+     * 合同明细
+     */
+    ContractInfoVo getDetail(Long id);
+
+    /**
+     * 合同新增
+     */
+    void add(ContractInfoDto dto);
+
+    /**
+     * 合同编辑
+     */
+    void edit(ContractInfoDto dto);
+
+    /**
+     * 合同删除
+     */
+    void delete(List<Long> idList);
+
+}

+ 57 - 0
jy-business/src/main/java/com/jy/business/contract/service/impl/ContractDetailServiceImpl.java

@@ -0,0 +1,57 @@
+package com.jy.business.contract.service.impl;
+
+import com.jy.business.contract.dao.ContractDetailDao;
+import com.jy.business.contract.model.dto.ContractDetailDto;
+import com.jy.business.contract.model.dto.ContractDetailSelectDto;
+import com.jy.business.contract.model.vo.ContractDetailVo;
+import com.jy.business.contract.service.ContractDetailService;
+import com.jy.framework.utils.AssertUtil;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 合同明细 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@Service
+public class ContractDetailServiceImpl implements ContractDetailService {
+
+    @Resource
+    private ContractDetailDao contractDetailDao;
+
+    @Override
+    public List<ContractDetailVo> getList(ContractDetailSelectDto dto) {
+        return contractDetailDao.getList(dto);
+    }
+
+    @Override
+    public ContractDetailVo getDetail(Long id) {
+        ContractDetailVo vo = contractDetailDao.getDetail(id);
+        AssertUtil.notNull(vo, "未知数据");
+        return vo;
+    }
+
+    @Override
+    public void add(ContractDetailDto dto) {
+        contractDetailDao.save(dto);
+    }
+
+    @Override
+    public void edit(ContractDetailDto dto) {
+        contractDetailDao.updateById(dto);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<Long> idList) {
+        contractDetailDao.removeBatchByIds(idList);
+    }
+
+}

+ 58 - 0
jy-business/src/main/java/com/jy/business/contract/service/impl/ContractInfoServiceImpl.java

@@ -0,0 +1,58 @@
+package com.jy.business.contract.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jy.business.contract.dao.ContractInfoDao;
+import com.jy.business.contract.model.dto.ContractInfoDto;
+import com.jy.business.contract.model.dto.ContractInfoSelectDto;
+import com.jy.business.contract.model.vo.ContractInfoVo;
+import com.jy.business.contract.service.ContractInfoService;
+import com.jy.framework.utils.AssertUtil;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 合同 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-01-07
+ */
+@Service
+public class ContractInfoServiceImpl implements ContractInfoService {
+
+    @Resource
+    private ContractInfoDao contractInfoDao;
+
+    @Override
+    public Page<ContractInfoVo> getPage(ContractInfoSelectDto dto) {
+        return contractInfoDao.getPage(dto);
+    }
+
+    @Override
+    public ContractInfoVo getDetail(Long id) {
+        ContractInfoVo vo = contractInfoDao.getDetail(id);
+        AssertUtil.notNull(vo, "未知数据");
+        return vo;
+    }
+
+    @Override
+    public void add(ContractInfoDto dto) {
+        contractInfoDao.save(dto);
+    }
+
+    @Override
+    public void edit(ContractInfoDto dto) {
+        contractInfoDao.updateById(dto);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<Long> idList) {
+        contractInfoDao.removeBatchByIds(idList);
+    }
+
+}

+ 27 - 0
jy-ui/src/api/business/contract/detail.ts

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+import { PageType, StrAnyObj } from '@/typings'
+
+// 合同明细分页
+export function getPageApi(params: StrAnyObj): Promise<PageType<StrAnyObj>> {
+  return request.get('/contractDetail/getPage', params)
+}
+
+// 合同明细明细
+export function getDetailApi(params: StrAnyObj): Promise<StrAnyObj> {
+  return request.get('/contractDetail/getDetail', params)
+}
+
+// 合同明细新增
+export function addApi(data: StrAnyObj): Promise<void> {
+  return request.post('/contractDetail/add', data)
+}
+
+// 合同明细编辑
+export function editApi(data: StrAnyObj): Promise<void> {
+  return request.post('/contractDetail/edit', data)
+}
+
+// 合同明细删除
+export function deleteApi(data: StrAnyObj): Promise<void> {
+  return request.post('/contractDetail/delete', data)
+}

+ 27 - 0
jy-ui/src/api/business/contract/info.ts

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+import { PageType, StrAnyObj } from '@/typings'
+
+// 合同分页
+export function getPageApi(params: StrAnyObj): Promise<PageType<StrAnyObj>> {
+  return request.get('/contractInfo/getPage', params)
+}
+
+// 合同明细
+export function getDetailApi(params: StrAnyObj): Promise<StrAnyObj> {
+  return request.get('/contractInfo/getDetail', params)
+}
+
+// 合同新增
+export function addApi(data: StrAnyObj): Promise<void> {
+  return request.post('/contractInfo/add', data)
+}
+
+// 合同编辑
+export function editApi(data: StrAnyObj): Promise<void> {
+  return request.post('/contractInfo/edit', data)
+}
+
+// 合同删除
+export function deleteApi(data: StrAnyObj): Promise<void> {
+  return request.post('/contractInfo/delete', data)
+}

+ 19 - 5
jy-ui/src/components/PDF/moneyPDF.vue

@@ -498,11 +498,7 @@
                     <div style="width: calc(100% - 120px); word-wrap: break-word">
                       <span>{{ item.nodeName }}: </span>
                       <span style="padding-left: 4px">{{ item.approver }}</span>
-                      <span style="padding-left: 4px"
-                        >({{
-                          item.flowStatus == 3 ? '驳回' : item.skipType == 'PASS' ? '通过' : '退回'
-                        }})</span
-                      >
+                      <span style="padding-left: 4px">({{getStatus(item)}})</span>
                       <span style="padding-left: 4px">{{ item.message }}</span>
                     </div>
                     <div style="width: 120px">{{ item.updateTime }}</div>
@@ -674,6 +670,24 @@ const getAtts = (atts) => {
   }
   return text
 }
+const getStatus = (row) =>{
+  switch (row.flowStatus) {
+    case '0':
+        return '待提交'
+    case '1':
+        return '审批中'
+    case '2':
+        return '审批通过'
+    case '4':
+        return '驳回'
+    case '6':
+        return '撤销'
+    case '7':
+        return '取回'
+    default:
+      return ''
+  }
+}
 onMounted(() => {
   presentTime.value = formatDate(new Date())
   if (props?.rowData?.id) {

+ 359 - 0
jy-ui/src/views/business/contract/detail/index.vue

@@ -0,0 +1,359 @@
+<script setup lang="ts">
+import AForm from '@/components/AForm/index.vue'
+import { FormConfigType } from '@/components/AForm/type'
+import { ToolbarConfigType } from '@/components/AToolbar/type'
+import { ColumnConfigType } from '@/components/ATable/type'
+import { StrAnyObj, StrAnyObjArr } from '@/typings'
+import { useHandleData } from '@/utils/useHandleData'
+import { getPageApi, getDetailApi, addApi, editApi, deleteApi } from '@/api/business/contract/detail'
+
+const queryRef = ref<InstanceType<typeof AForm>>()
+const formRef = ref<InstanceType<typeof AForm>>()
+
+const showQuery = ref<boolean>(true)
+const selectKeys = ref<string[]>([])
+const pageTotal = ref<number>(0)
+
+const queryData = ref<StrAnyObj>({ pageNum: 1, pageSize: 10 })
+const tableData = ref<StrAnyObjArr>([])
+const formData = ref<StrAnyObj>({})
+
+const dialogTitle = ref<string>('')
+const dialogVisible = ref<boolean>(false)
+
+const queryConfig: FormConfigType[] = [
+  {
+    type: 'input',
+    prop: 'productName',
+    label: '产品名称'
+  },
+  {
+    type: 'input',
+    prop: 'productCode',
+    label: '产品货号'
+  },
+  {
+    type: 'input',
+    prop: 'productSpec',
+    label: '产品规格'
+  },
+  {
+    type: 'input',
+    prop: 'productColour',
+    label: '颜色'
+  },
+  {
+    type: 'input',
+    prop: 'productUnit',
+    label: '单位'
+  },
+  {
+    type: 'input',
+    prop: 'quantity',
+    label: '数量'
+  },
+  {
+    type: 'input',
+    prop: 'unitPrice',
+    label: '单价'
+  },
+  {
+    type: 'input',
+    prop: 'remark',
+    label: '备注'
+  },
+  {
+    type: 'input',
+    prop: 'createUser',
+    label: '创建人'
+  },
+  {
+    type: 'input',
+    prop: 'createTime',
+    label: '创建时间'
+  },
+  {
+    type: 'input',
+    prop: 'updateUser',
+    label: '更新人'
+  },
+  {
+    type: 'input',
+    prop: 'updateTime',
+    label: '更新时间'
+  },
+  {
+    type: 'input',
+    prop: 'delFlag',
+    label: '逻辑删除标记'
+  },
+]
+
+const toolbarConfig: ToolbarConfigType[] = [
+  {
+    common: 'search',
+    click() {
+      queryData.value.pageNum = 1
+      getPage()
+    }
+  },
+  {
+    common: 'reset',
+    click() {
+      queryRef.value?.resetFields()
+      getPage()
+    }
+  },
+  {
+    common: 'add',
+    click() {
+      dialogVisible.value = true
+      dialogTitle.value = '新增'
+    }
+  },
+  {
+    common: 'delete',
+    disabled() {
+      return selectKeys.value.length == 0
+    },
+    click() {
+      handleRemove(selectKeys.value)
+    }
+  }
+]
+
+const columnConfig: ColumnConfigType[] = [
+  {
+    prop: 'productName',
+    label: '产品名称'
+  },
+  {
+    prop: 'productCode',
+    label: '产品货号'
+  },
+  {
+    prop: 'productSpec',
+    label: '产品规格'
+  },
+  {
+    prop: 'productColour',
+    label: '颜色'
+  },
+  {
+    prop: 'productUnit',
+    label: '单位'
+  },
+  {
+    prop: 'quantity',
+    label: '数量'
+  },
+  {
+    prop: 'unitPrice',
+    label: '单价'
+  },
+  {
+    prop: 'remark',
+    label: '备注'
+  },
+  {
+    prop: 'createUser',
+    label: '创建人'
+  },
+  {
+    prop: 'createTime',
+    label: '创建时间'
+  },
+  {
+    prop: 'updateUser',
+    label: '更新人'
+  },
+  {
+    prop: 'updateTime',
+    label: '更新时间'
+  },
+  {
+    prop: 'delFlag',
+    label: '逻辑删除标记'
+  },
+  {
+    width: 250,
+    handleConfig: [
+      {
+        common: 'update',
+        click(row) {
+          dialogVisible.value = true
+          dialogTitle.value = '编辑'
+          getDetailApi({ id: row.id }).then((resp: StrAnyObj) => {
+            formData.value = resp
+          })
+        }
+      },
+      {
+        common: 'delete',
+        click(row) {
+          handleRemove([row.id])
+        }
+      }
+    ]
+  }
+]
+
+const formConfig: FormConfigType[] = [
+  {
+    type: 'input',
+    prop: 'productName',
+    label: '产品名称',
+    rule: [{ required: true, message: '产品名称不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'productCode',
+    label: '产品货号',
+    rule: [{ required: true, message: '产品货号不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'productSpec',
+    label: '产品规格',
+    rule: [{ required: true, message: '产品规格不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'productColour',
+    label: '颜色',
+    rule: [{ required: true, message: '颜色不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'productUnit',
+    label: '单位',
+    rule: [{ required: true, message: '单位不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'quantity',
+    label: '数量',
+    rule: [{ required: true, message: '数量不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'unitPrice',
+    label: '单价',
+    rule: [{ required: true, message: '单价不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'remark',
+    label: '备注',
+    rule: [{ required: true, message: '备注不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'createUser',
+    label: '创建人',
+    rule: [{ required: true, message: '创建人不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'createTime',
+    label: '创建时间',
+    rule: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'updateUser',
+    label: '更新人',
+    rule: [{ required: true, message: '更新人不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'updateTime',
+    label: '更新时间',
+    rule: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'delFlag',
+    label: '逻辑删除标记',
+    rule: [{ required: true, message: '逻辑删除标记不能为空', trigger: 'blur' }]
+  },
+]
+
+onMounted(() => {
+  getPage()
+})
+
+function getPage() {
+  getPageApi(queryData.value).then((resp) => {
+    tableData.value = resp.records
+    pageTotal.value = resp.total
+  })
+}
+
+function tableSelectionChange(item: StrAnyObjArr) {
+  selectKeys.value = item.map((item) => item.id)
+}
+
+function formSubmit() {
+  formRef.value?.validate(() => {
+    if (formData.value.id) {
+      editApi(formData.value).then(() => {
+        dialogVisible.value = false
+        ElMessage.success('修改成功')
+        getPage()
+      })
+    } else {
+      addApi(formData.value).then(() => {
+        dialogVisible.value = false
+        ElMessage.success('新增成功')
+        getPage()
+      })
+    }
+  })
+}
+
+function formClosed() {
+  formRef.value?.resetFields()
+}
+
+function handleRemove(idList: string[]) {
+  useHandleData('是否确认删除?', () => {
+    deleteApi({ idList }).then(() => {
+      ElMessage.success('删除成功')
+      getPage()
+    })
+  })
+}
+</script>
+
+<template>
+  <div>
+    <el-card v-if="showQuery">
+      <a-form ref="queryRef" v-model="queryData" :config="queryConfig" :span="6"> </a-form>
+    </el-card>
+
+    <a-table
+      selection
+      :data="tableData"
+      :page-total="pageTotal"
+      :toolbar-config="toolbarConfig"
+      :column-config="columnConfig"
+      v-model:showQuery="showQuery"
+      v-model:page-num="queryData.pageNum"
+      v-model:page-size="queryData.pageSize"
+      @page-num-change="getPage"
+      @page-size-change="getPage"
+      @selection-change="tableSelectionChange"
+    >
+    </a-table>
+
+    <a-dialog
+      v-model="dialogVisible"
+      :title="dialogTitle"
+      @submit="formSubmit"
+      @closed="formClosed"
+    >
+      <a-form ref="formRef" v-model="formData" :config="formConfig" :span="24"> </a-form>
+    </a-dialog>
+  </div>
+</template>

+ 419 - 0
jy-ui/src/views/business/contract/info/index.vue

@@ -0,0 +1,419 @@
+<script setup lang="ts">
+import AForm from '@/components/AForm/index.vue'
+import { FormConfigType } from '@/components/AForm/type'
+import { ToolbarConfigType } from '@/components/AToolbar/type'
+import { ColumnConfigType } from '@/components/ATable/type'
+import { StrAnyObj, StrAnyObjArr } from '@/typings'
+import { useHandleData } from '@/utils/useHandleData'
+import { getPageApi, getDetailApi, addApi, editApi, deleteApi } from '@/api/business/contract/info'
+
+const queryRef = ref<InstanceType<typeof AForm>>()
+const formRef = ref<InstanceType<typeof AForm>>()
+
+const showQuery = ref<boolean>(true)
+const selectKeys = ref<string[]>([])
+const pageTotal = ref<number>(0)
+
+const queryData = ref<StrAnyObj>({ pageNum: 1, pageSize: 10 })
+const tableData = ref<StrAnyObjArr>([])
+const formData = ref<StrAnyObj>({})
+
+const dialogTitle = ref<string>('')
+const dialogVisible = ref<boolean>(false)
+
+const queryConfig: FormConfigType[] = [
+  {
+    type: 'input',
+    prop: 'capitalTransactionsId',
+    label: '资金流水id'
+  },
+  {
+    type: 'input',
+    prop: 'code',
+    label: '合同编号'
+  },
+  {
+    type: 'input',
+    prop: 'customerCorporationName',
+    label: '客户单位名称'
+  },
+  {
+    type: 'input',
+    prop: 'customerCorporation Address',
+    label: '客户单位地址'
+  },
+  {
+    type: 'input',
+    prop: 'customerLegalRepresentative',
+    label: '客户法定代表人'
+  },
+  {
+    type: 'input',
+    prop: 'customerContactPerson',
+    label: '客户业务联系人'
+  },
+  {
+    type: 'input',
+    prop: 'customerContactNumber',
+    label: '客户联系电话'
+  },
+  {
+    type: 'input',
+    prop: 'signingDate',
+    label: '签订日期'
+  },
+  {
+    type: 'input',
+    prop: 'totalAmount',
+    label: '合同总金额'
+  },
+  {
+    type: 'input',
+    prop: 'taxRate',
+    label: '税率'
+  },
+  {
+    type: 'input',
+    prop: 'freight',
+    label: '运费'
+  },
+  {
+    type: 'input',
+    prop: 'deliveryAddress',
+    label: '收货地址'
+  },
+  {
+    type: 'input',
+    prop: 'createUser',
+    label: '创建人'
+  },
+  {
+    type: 'input',
+    prop: 'createTime',
+    label: '创建时间'
+  },
+  {
+    type: 'input',
+    prop: 'updateUser',
+    label: '更新人'
+  },
+  {
+    type: 'input',
+    prop: 'updateTime',
+    label: '更新时间'
+  },
+  {
+    type: 'input',
+    prop: 'delFlag',
+    label: '逻辑删除标记'
+  },
+]
+
+const toolbarConfig: ToolbarConfigType[] = [
+  {
+    common: 'search',
+    click() {
+      queryData.value.pageNum = 1
+      getPage()
+    }
+  },
+  {
+    common: 'reset',
+    click() {
+      queryRef.value?.resetFields()
+      getPage()
+    }
+  },
+  {
+    common: 'add',
+    click() {
+      dialogVisible.value = true
+      dialogTitle.value = '新增'
+    }
+  },
+  {
+    common: 'delete',
+    disabled() {
+      return selectKeys.value.length == 0
+    },
+    click() {
+      handleRemove(selectKeys.value)
+    }
+  }
+]
+
+const columnConfig: ColumnConfigType[] = [
+  {
+    prop: 'capitalTransactionsId',
+    label: '资金流水id'
+  },
+  {
+    prop: 'code',
+    label: '合同编号'
+  },
+  {
+    prop: 'customerCorporationName',
+    label: '客户单位名称'
+  },
+  {
+    prop: 'customerCorporation Address',
+    label: '客户单位地址'
+  },
+  {
+    prop: 'customerLegalRepresentative',
+    label: '客户法定代表人'
+  },
+  {
+    prop: 'customerContactPerson',
+    label: '客户业务联系人'
+  },
+  {
+    prop: 'customerContactNumber',
+    label: '客户联系电话'
+  },
+  {
+    prop: 'signingDate',
+    label: '签订日期'
+  },
+  {
+    prop: 'totalAmount',
+    label: '合同总金额'
+  },
+  {
+    prop: 'taxRate',
+    label: '税率'
+  },
+  {
+    prop: 'freight',
+    label: '运费'
+  },
+  {
+    prop: 'deliveryAddress',
+    label: '收货地址'
+  },
+  {
+    prop: 'createUser',
+    label: '创建人'
+  },
+  {
+    prop: 'createTime',
+    label: '创建时间'
+  },
+  {
+    prop: 'updateUser',
+    label: '更新人'
+  },
+  {
+    prop: 'updateTime',
+    label: '更新时间'
+  },
+  {
+    prop: 'delFlag',
+    label: '逻辑删除标记'
+  },
+  {
+    width: 250,
+    handleConfig: [
+      {
+        common: 'update',
+        click(row) {
+          dialogVisible.value = true
+          dialogTitle.value = '编辑'
+          getDetailApi({ id: row.id }).then((resp: StrAnyObj) => {
+            formData.value = resp
+          })
+        }
+      },
+      {
+        common: 'delete',
+        click(row) {
+          handleRemove([row.id])
+        }
+      }
+    ]
+  }
+]
+
+const formConfig: FormConfigType[] = [
+  {
+    type: 'input',
+    prop: 'capitalTransactionsId',
+    label: '资金流水id',
+    rule: [{ required: true, message: '资金流水id不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'code',
+    label: '合同编号',
+    rule: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'customerCorporationName',
+    label: '客户单位名称',
+    rule: [{ required: true, message: '客户单位名称不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'customerCorporation Address',
+    label: '客户单位地址',
+    rule: [{ required: true, message: '客户单位地址不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'customerLegalRepresentative',
+    label: '客户法定代表人',
+    rule: [{ required: true, message: '客户法定代表人不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'customerContactPerson',
+    label: '客户业务联系人',
+    rule: [{ required: true, message: '客户业务联系人不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'customerContactNumber',
+    label: '客户联系电话',
+    rule: [{ required: true, message: '客户联系电话不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'signingDate',
+    label: '签订日期',
+    rule: [{ required: true, message: '签订日期不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'totalAmount',
+    label: '合同总金额',
+    rule: [{ required: true, message: '合同总金额不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'taxRate',
+    label: '税率',
+    rule: [{ required: true, message: '税率不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'freight',
+    label: '运费',
+    rule: [{ required: true, message: '运费不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'deliveryAddress',
+    label: '收货地址',
+    rule: [{ required: true, message: '收货地址不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'createUser',
+    label: '创建人',
+    rule: [{ required: true, message: '创建人不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'createTime',
+    label: '创建时间',
+    rule: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'updateUser',
+    label: '更新人',
+    rule: [{ required: true, message: '更新人不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'updateTime',
+    label: '更新时间',
+    rule: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }]
+  },
+  {
+    type: 'input',
+    prop: 'delFlag',
+    label: '逻辑删除标记',
+    rule: [{ required: true, message: '逻辑删除标记不能为空', trigger: 'blur' }]
+  },
+]
+
+onMounted(() => {
+  getPage()
+})
+
+function getPage() {
+  getPageApi(queryData.value).then((resp) => {
+    tableData.value = resp.records
+    pageTotal.value = resp.total
+  })
+}
+
+function tableSelectionChange(item: StrAnyObjArr) {
+  selectKeys.value = item.map((item) => item.id)
+}
+
+function formSubmit() {
+  formRef.value?.validate(() => {
+    if (formData.value.id) {
+      editApi(formData.value).then(() => {
+        dialogVisible.value = false
+        ElMessage.success('修改成功')
+        getPage()
+      })
+    } else {
+      addApi(formData.value).then(() => {
+        dialogVisible.value = false
+        ElMessage.success('新增成功')
+        getPage()
+      })
+    }
+  })
+}
+
+function formClosed() {
+  formRef.value?.resetFields()
+}
+
+function handleRemove(idList: string[]) {
+  useHandleData('是否确认删除?', () => {
+    deleteApi({ idList }).then(() => {
+      ElMessage.success('删除成功')
+      getPage()
+    })
+  })
+}
+</script>
+
+<template>
+  <div>
+    <el-card v-if="showQuery">
+      <a-form ref="queryRef" v-model="queryData" :config="queryConfig" :span="6"> </a-form>
+    </el-card>
+
+    <a-table
+      selection
+      :data="tableData"
+      :page-total="pageTotal"
+      :toolbar-config="toolbarConfig"
+      :column-config="columnConfig"
+      v-model:showQuery="showQuery"
+      v-model:page-num="queryData.pageNum"
+      v-model:page-size="queryData.pageSize"
+      @page-num-change="getPage"
+      @page-size-change="getPage"
+      @selection-change="tableSelectionChange"
+    >
+    </a-table>
+
+    <a-dialog
+      v-model="dialogVisible"
+      :title="dialogTitle"
+      @submit="formSubmit"
+      @closed="formClosed"
+    >
+      <a-form ref="formRef" v-model="formData" :config="formConfig" :span="24"> </a-form>
+    </a-dialog>
+  </div>
+</template>