Merge branch 'master' of http://222.71.165.188:3000/ccongli/YX-SCM
# Conflicts: # yunxi-ui-admin-vue3/src/views/xxjj/businessWarehouse/increased.vuepull/1/head
commit
80e367f5ee
@ -0,0 +1,102 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contractclause;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
import javax.servlet.http.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
import com.yunxi.scm.framework.common.pojo.CommonResult;
|
||||||
|
import static com.yunxi.scm.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.excel.core.util.ExcelUtils;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog;
|
||||||
|
import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||||
|
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO;
|
||||||
|
import com.yunxi.scm.module.xxjj.convert.contractclause.ContractClauseConvert;
|
||||||
|
import com.yunxi.scm.module.xxjj.service.contractclause.ContractClauseService;
|
||||||
|
|
||||||
|
@Tag(name = "管理后台 - 合同条款")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/xxjj/contract-clause")
|
||||||
|
@Validated
|
||||||
|
public class ContractClauseController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ContractClauseService contractClauseService;
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@Operation(summary = "创建合同条款")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-clause:create')")
|
||||||
|
public CommonResult<Long> createContractClause(@Valid @RequestBody ContractClauseCreateReqVO createReqVO) {
|
||||||
|
return success(contractClauseService.createContractClause(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@Operation(summary = "更新合同条款")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-clause:update')")
|
||||||
|
public CommonResult<Boolean> updateContractClause(@Valid @RequestBody ContractClauseUpdateReqVO updateReqVO) {
|
||||||
|
contractClauseService.updateContractClause(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除合同条款")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-clause:delete')")
|
||||||
|
public CommonResult<Boolean> deleteContractClause(@RequestParam("id") Long id) {
|
||||||
|
contractClauseService.deleteContractClause(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@Operation(summary = "获得合同条款")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-clause:query')")
|
||||||
|
public CommonResult<ContractClauseRespVO> getContractClause(@RequestParam("id") Long id) {
|
||||||
|
ContractClauseDO contractClause = contractClauseService.getContractClause(id);
|
||||||
|
return success(ContractClauseConvert.INSTANCE.convert(contractClause));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/list")
|
||||||
|
@Operation(summary = "获得合同条款列表")
|
||||||
|
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-clause:query')")
|
||||||
|
public CommonResult<List<ContractClauseRespVO>> getContractClauseList(@RequestParam("ids") Collection<Long> ids) {
|
||||||
|
List<ContractClauseDO> list = contractClauseService.getContractClauseList(ids);
|
||||||
|
return success(ContractClauseConvert.INSTANCE.convertList(list));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@Operation(summary = "获得合同条款分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-clause:query')")
|
||||||
|
public CommonResult<PageResult<ContractClauseRespVO>> getContractClausePage(@Valid ContractClausePageReqVO pageVO) {
|
||||||
|
PageResult<ContractClauseDO> pageResult = contractClauseService.getContractClausePage(pageVO);
|
||||||
|
return success(ContractClauseConvert.INSTANCE.convertPage(pageResult));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/export-excel")
|
||||||
|
@Operation(summary = "导出合同条款 Excel")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-clause:export')")
|
||||||
|
@OperateLog(type = EXPORT)
|
||||||
|
public void exportContractClauseExcel(@Valid ContractClauseExportReqVO exportReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
List<ContractClauseDO> list = contractClauseService.getContractClauseList(exportReqVO);
|
||||||
|
// 导出 Excel
|
||||||
|
List<ContractClauseExcelVO> datas = ContractClauseConvert.INSTANCE.convertList02(list);
|
||||||
|
ExcelUtils.write(response, "合同条款.xls", "数据", ContractClauseExcelVO.class, datas);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 合同条款创建 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class ContractClauseCreateReqVO extends ContractClauseBaseVO {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.yunxi.scm.framework.excel.core.annotations.DictFormat;
|
||||||
|
import com.yunxi.scm.framework.excel.core.convert.DictConvert;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同条款 Excel VO
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ContractClauseExcelVO {
|
||||||
|
|
||||||
|
@ExcelProperty("编号")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ExcelProperty("条款标题")
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "条款类型 参考字典contract_clause_type", converter = DictConvert.class)
|
||||||
|
@DictFormat("contract_clause_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "状态 参考字典contract_clause_status", converter = DictConvert.class)
|
||||||
|
@DictFormat("contract_clause_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@ExcelProperty("条款内容")
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
@ExcelProperty("权重值")
|
||||||
|
private Short weight;
|
||||||
|
|
||||||
|
@ExcelProperty("备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@ExcelProperty("附件")
|
||||||
|
private String attachment;
|
||||||
|
|
||||||
|
@ExcelProperty("创建时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageParam;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 合同条款分页 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class ContractClausePageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@Schema(description = "条款标题")
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
@Schema(description = "条款类型 参考字典contract_clause_type", example = "1")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@Schema(description = "状态 参考字典contract_clause_status", example = "2")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 合同条款 Response VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class ContractClauseRespVO extends ContractClauseBaseVO {
|
||||||
|
|
||||||
|
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7146")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 合同条款更新 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class ContractClauseUpdateReqVO extends ContractClauseBaseVO {
|
||||||
|
|
||||||
|
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7146")
|
||||||
|
@NotNull(message = "编号不能为空")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,102 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
import javax.servlet.http.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
import com.yunxi.scm.framework.common.pojo.CommonResult;
|
||||||
|
import static com.yunxi.scm.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.excel.core.util.ExcelUtils;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog;
|
||||||
|
import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||||
|
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO;
|
||||||
|
import com.yunxi.scm.module.xxjj.convert.contracttemplate.ContractTemplateConvert;
|
||||||
|
import com.yunxi.scm.module.xxjj.service.contracttemplate.ContractTemplateService;
|
||||||
|
|
||||||
|
@Tag(name = "管理后台 - 合同模板")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/xxjj/contract-template")
|
||||||
|
@Validated
|
||||||
|
public class ContractTemplateController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ContractTemplateService contractTemplateService;
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@Operation(summary = "创建合同模板")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-template:create')")
|
||||||
|
public CommonResult<Long> createContractTemplate(@Valid @RequestBody ContractTemplateCreateReqVO createReqVO) {
|
||||||
|
return success(contractTemplateService.createContractTemplate(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@Operation(summary = "更新合同模板")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-template:update')")
|
||||||
|
public CommonResult<Boolean> updateContractTemplate(@Valid @RequestBody ContractTemplateUpdateReqVO updateReqVO) {
|
||||||
|
contractTemplateService.updateContractTemplate(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除合同模板")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-template:delete')")
|
||||||
|
public CommonResult<Boolean> deleteContractTemplate(@RequestParam("id") Long id) {
|
||||||
|
contractTemplateService.deleteContractTemplate(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@Operation(summary = "获得合同模板")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-template:query')")
|
||||||
|
public CommonResult<ContractTemplateRespVO> getContractTemplate(@RequestParam("id") Long id) {
|
||||||
|
ContractTemplateDO contractTemplate = contractTemplateService.getContractTemplate(id);
|
||||||
|
return success(ContractTemplateConvert.INSTANCE.convert(contractTemplate));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/list")
|
||||||
|
@Operation(summary = "获得合同模板列表")
|
||||||
|
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-template:query')")
|
||||||
|
public CommonResult<List<ContractTemplateRespVO>> getContractTemplateList(@RequestParam("ids") Collection<Long> ids) {
|
||||||
|
List<ContractTemplateDO> list = contractTemplateService.getContractTemplateList(ids);
|
||||||
|
return success(ContractTemplateConvert.INSTANCE.convertList(list));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@Operation(summary = "获得合同模板分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-template:query')")
|
||||||
|
public CommonResult<PageResult<ContractTemplateRespVO>> getContractTemplatePage(@Valid ContractTemplatePageReqVO pageVO) {
|
||||||
|
PageResult<ContractTemplateDO> pageResult = contractTemplateService.getContractTemplatePage(pageVO);
|
||||||
|
return success(ContractTemplateConvert.INSTANCE.convertPage(pageResult));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/export-excel")
|
||||||
|
@Operation(summary = "导出合同模板 Excel")
|
||||||
|
@PreAuthorize("@ss.hasPermission('xxjj:contract-template:export')")
|
||||||
|
@OperateLog(type = EXPORT)
|
||||||
|
public void exportContractTemplateExcel(@Valid ContractTemplateExportReqVO exportReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
List<ContractTemplateDO> list = contractTemplateService.getContractTemplateList(exportReqVO);
|
||||||
|
// 导出 Excel
|
||||||
|
List<ContractTemplateExcelVO> datas = ContractTemplateConvert.INSTANCE.convertList02(list);
|
||||||
|
ExcelUtils.write(response, "合同模板.xls", "数据", ContractTemplateExcelVO.class, datas);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 合同模板创建 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class ContractTemplateCreateReqVO extends ContractTemplateBaseVO {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.yunxi.scm.framework.excel.core.annotations.DictFormat;
|
||||||
|
import com.yunxi.scm.framework.excel.core.convert.DictConvert;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同模板 Excel VO
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ContractTemplateExcelVO {
|
||||||
|
|
||||||
|
@ExcelProperty("编号")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ExcelProperty("模板名称")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "合同模板类型 参考字典contract_template_type", converter = DictConvert.class)
|
||||||
|
@DictFormat("contract_template_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "状态 参考字典contract_template_status", converter = DictConvert.class)
|
||||||
|
@DictFormat("contract_template_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@ExcelProperty("模板描述")
|
||||||
|
private String describe;
|
||||||
|
|
||||||
|
@ExcelProperty("配置项 json格式")
|
||||||
|
private String options;
|
||||||
|
|
||||||
|
@ExcelProperty("创建时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageParam;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 合同模板分页 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class ContractTemplatePageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@Schema(description = "模板名称", example = "李四")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Schema(description = "合同模板类型 参考字典contract_template_type", example = "1")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@Schema(description = "状态 参考字典contract_template_status", example = "1")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 合同模板 Response VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class ContractTemplateRespVO extends ContractTemplateBaseVO {
|
||||||
|
|
||||||
|
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21453")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 合同模板更新 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class ContractTemplateUpdateReqVO extends ContractTemplateBaseVO {
|
||||||
|
|
||||||
|
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21453")
|
||||||
|
@NotNull(message = "编号不能为空")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.convert.contractclause;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同条款 Convert
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface ContractClauseConvert {
|
||||||
|
|
||||||
|
ContractClauseConvert INSTANCE = Mappers.getMapper(ContractClauseConvert.class);
|
||||||
|
|
||||||
|
ContractClauseDO convert(ContractClauseCreateReqVO bean);
|
||||||
|
|
||||||
|
ContractClauseDO convert(ContractClauseUpdateReqVO bean);
|
||||||
|
|
||||||
|
ContractClauseRespVO convert(ContractClauseDO bean);
|
||||||
|
|
||||||
|
List<ContractClauseRespVO> convertList(List<ContractClauseDO> list);
|
||||||
|
|
||||||
|
PageResult<ContractClauseRespVO> convertPage(PageResult<ContractClauseDO> page);
|
||||||
|
|
||||||
|
List<ContractClauseExcelVO> convertList02(List<ContractClauseDO> list);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.convert.contracttemplate;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同模板 Convert
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface ContractTemplateConvert {
|
||||||
|
|
||||||
|
ContractTemplateConvert INSTANCE = Mappers.getMapper(ContractTemplateConvert.class);
|
||||||
|
|
||||||
|
ContractTemplateDO convert(ContractTemplateCreateReqVO bean);
|
||||||
|
|
||||||
|
ContractTemplateDO convert(ContractTemplateUpdateReqVO bean);
|
||||||
|
|
||||||
|
ContractTemplateRespVO convert(ContractTemplateDO bean);
|
||||||
|
|
||||||
|
List<ContractTemplateRespVO> convertList(List<ContractTemplateDO> list);
|
||||||
|
|
||||||
|
PageResult<ContractTemplateRespVO> convertPage(PageResult<ContractTemplateDO> page);
|
||||||
|
|
||||||
|
List<ContractTemplateExcelVO> convertList02(List<ContractTemplateDO> list);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.dal.dataobject.contractclause;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同条款 DO
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@TableName("xxjj_contract_clause")
|
||||||
|
@KeySequence("xxjj_contract_clause_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ContractClauseDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编号
|
||||||
|
*/
|
||||||
|
@TableId
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 条款标题
|
||||||
|
*/
|
||||||
|
private String title;
|
||||||
|
/**
|
||||||
|
* 条款类型 参考字典contract_clause_type
|
||||||
|
*
|
||||||
|
* 枚举 {@link TODO contract_clause_type 对应的类}
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
/**
|
||||||
|
* 状态 参考字典contract_clause_status
|
||||||
|
*
|
||||||
|
* 枚举 {@link TODO contract_clause_status 对应的类}
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
/**
|
||||||
|
* 条款内容
|
||||||
|
*/
|
||||||
|
private String content;
|
||||||
|
/**
|
||||||
|
* 权重值
|
||||||
|
*/
|
||||||
|
private Short weight;
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
/**
|
||||||
|
* 附件
|
||||||
|
*/
|
||||||
|
private String attachment;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,55 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同模板 DO
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@TableName("xxjj_contract_template")
|
||||||
|
@KeySequence("xxjj_contract_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ContractTemplateDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编号
|
||||||
|
*/
|
||||||
|
@TableId
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 模板名称
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
/**
|
||||||
|
* 合同模板类型 参考字典contract_template_type
|
||||||
|
*
|
||||||
|
* 枚举 {@link TODO contract_template_type 对应的类}
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
/**
|
||||||
|
* 状态 参考字典contract_template_status
|
||||||
|
*
|
||||||
|
* 枚举 {@link TODO contract_template_status 对应的类}
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
/**
|
||||||
|
* 模板描述
|
||||||
|
*/
|
||||||
|
private String describe;
|
||||||
|
/**
|
||||||
|
* 配置项 json格式
|
||||||
|
*/
|
||||||
|
private String options;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.dal.mysql.contractclause;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同条款 Mapper
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface ContractClauseMapper extends BaseMapperX<ContractClauseDO> {
|
||||||
|
|
||||||
|
default PageResult<ContractClauseDO> selectPage(ContractClausePageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<ContractClauseDO>()
|
||||||
|
.eqIfPresent(ContractClauseDO::getTitle, reqVO.getTitle())
|
||||||
|
.eqIfPresent(ContractClauseDO::getType, reqVO.getType())
|
||||||
|
.eqIfPresent(ContractClauseDO::getStatus, reqVO.getStatus())
|
||||||
|
.betweenIfPresent(ContractClauseDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
.orderByDesc(ContractClauseDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
default List<ContractClauseDO> selectList(ContractClauseExportReqVO reqVO) {
|
||||||
|
return selectList(new LambdaQueryWrapperX<ContractClauseDO>()
|
||||||
|
.eqIfPresent(ContractClauseDO::getTitle, reqVO.getTitle())
|
||||||
|
.eqIfPresent(ContractClauseDO::getType, reqVO.getType())
|
||||||
|
.eqIfPresent(ContractClauseDO::getStatus, reqVO.getStatus())
|
||||||
|
.betweenIfPresent(ContractClauseDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
.orderByDesc(ContractClauseDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.dal.mysql.contracttemplate;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同模板 Mapper
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface ContractTemplateMapper extends BaseMapperX<ContractTemplateDO> {
|
||||||
|
|
||||||
|
default PageResult<ContractTemplateDO> selectPage(ContractTemplatePageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<ContractTemplateDO>()
|
||||||
|
.likeIfPresent(ContractTemplateDO::getName, reqVO.getName())
|
||||||
|
.eqIfPresent(ContractTemplateDO::getType, reqVO.getType())
|
||||||
|
.eqIfPresent(ContractTemplateDO::getStatus, reqVO.getStatus())
|
||||||
|
.betweenIfPresent(ContractTemplateDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
.orderByDesc(ContractTemplateDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
default List<ContractTemplateDO> selectList(ContractTemplateExportReqVO reqVO) {
|
||||||
|
return selectList(new LambdaQueryWrapperX<ContractTemplateDO>()
|
||||||
|
.likeIfPresent(ContractTemplateDO::getName, reqVO.getName())
|
||||||
|
.eqIfPresent(ContractTemplateDO::getType, reqVO.getType())
|
||||||
|
.eqIfPresent(ContractTemplateDO::getStatus, reqVO.getStatus())
|
||||||
|
.betweenIfPresent(ContractTemplateDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
.orderByDesc(ContractTemplateDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.service.contractclause;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO;
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同条款 Service 接口
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
public interface ContractClauseService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建合同条款
|
||||||
|
*
|
||||||
|
* @param createReqVO 创建信息
|
||||||
|
* @return 编号
|
||||||
|
*/
|
||||||
|
Long createContractClause(@Valid ContractClauseCreateReqVO createReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新合同条款
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateContractClause(@Valid ContractClauseUpdateReqVO updateReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除合同条款
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
*/
|
||||||
|
void deleteContractClause(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得合同条款
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
* @return 合同条款
|
||||||
|
*/
|
||||||
|
ContractClauseDO getContractClause(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得合同条款列表
|
||||||
|
*
|
||||||
|
* @param ids 编号
|
||||||
|
* @return 合同条款列表
|
||||||
|
*/
|
||||||
|
List<ContractClauseDO> getContractClauseList(Collection<Long> ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得合同条款分页
|
||||||
|
*
|
||||||
|
* @param pageReqVO 分页查询
|
||||||
|
* @return 合同条款分页
|
||||||
|
*/
|
||||||
|
PageResult<ContractClauseDO> getContractClausePage(ContractClausePageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得合同条款列表, 用于 Excel 导出
|
||||||
|
*
|
||||||
|
* @param exportReqVO 查询条件
|
||||||
|
* @return 合同条款列表
|
||||||
|
*/
|
||||||
|
List<ContractClauseDO> getContractClauseList(ContractClauseExportReqVO exportReqVO);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.service.contractclause;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO;
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
|
||||||
|
import com.yunxi.scm.module.xxjj.convert.contractclause.ContractClauseConvert;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.mysql.contractclause.ContractClauseMapper;
|
||||||
|
|
||||||
|
import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同条款 Service 实现类
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class ContractClauseServiceImpl implements ContractClauseService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ContractClauseMapper contractClauseMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long createContractClause(ContractClauseCreateReqVO createReqVO) {
|
||||||
|
// 插入
|
||||||
|
ContractClauseDO contractClause = ContractClauseConvert.INSTANCE.convert(createReqVO);
|
||||||
|
contractClauseMapper.insert(contractClause);
|
||||||
|
// 返回
|
||||||
|
return contractClause.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateContractClause(ContractClauseUpdateReqVO updateReqVO) {
|
||||||
|
// 校验存在
|
||||||
|
validateContractClauseExists(updateReqVO.getId());
|
||||||
|
// 更新
|
||||||
|
ContractClauseDO updateObj = ContractClauseConvert.INSTANCE.convert(updateReqVO);
|
||||||
|
contractClauseMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteContractClause(Long id) {
|
||||||
|
// 校验存在
|
||||||
|
validateContractClauseExists(id);
|
||||||
|
// 删除
|
||||||
|
contractClauseMapper.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateContractClauseExists(Long id) {
|
||||||
|
if (contractClauseMapper.selectById(id) == null) {
|
||||||
|
throw exception(CONTRACT_CLAUSE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContractClauseDO getContractClause(Long id) {
|
||||||
|
return contractClauseMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ContractClauseDO> getContractClauseList(Collection<Long> ids) {
|
||||||
|
return contractClauseMapper.selectBatchIds(ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<ContractClauseDO> getContractClausePage(ContractClausePageReqVO pageReqVO) {
|
||||||
|
return contractClauseMapper.selectPage(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ContractClauseDO> getContractClauseList(ContractClauseExportReqVO exportReqVO) {
|
||||||
|
return contractClauseMapper.selectList(exportReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.service.contracttemplate;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO;
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同模板 Service 接口
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
public interface ContractTemplateService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建合同模板
|
||||||
|
*
|
||||||
|
* @param createReqVO 创建信息
|
||||||
|
* @return 编号
|
||||||
|
*/
|
||||||
|
Long createContractTemplate(@Valid ContractTemplateCreateReqVO createReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新合同模板
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateContractTemplate(@Valid ContractTemplateUpdateReqVO updateReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除合同模板
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
*/
|
||||||
|
void deleteContractTemplate(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得合同模板
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
* @return 合同模板
|
||||||
|
*/
|
||||||
|
ContractTemplateDO getContractTemplate(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得合同模板列表
|
||||||
|
*
|
||||||
|
* @param ids 编号
|
||||||
|
* @return 合同模板列表
|
||||||
|
*/
|
||||||
|
List<ContractTemplateDO> getContractTemplateList(Collection<Long> ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得合同模板分页
|
||||||
|
*
|
||||||
|
* @param pageReqVO 分页查询
|
||||||
|
* @return 合同模板分页
|
||||||
|
*/
|
||||||
|
PageResult<ContractTemplateDO> getContractTemplatePage(ContractTemplatePageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得合同模板列表, 用于 Excel 导出
|
||||||
|
*
|
||||||
|
* @param exportReqVO 查询条件
|
||||||
|
* @return 合同模板列表
|
||||||
|
*/
|
||||||
|
List<ContractTemplateDO> getContractTemplateList(ContractTemplateExportReqVO exportReqVO);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.service.contracttemplate;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO;
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
|
||||||
|
import com.yunxi.scm.module.xxjj.convert.contracttemplate.ContractTemplateConvert;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.mysql.contracttemplate.ContractTemplateMapper;
|
||||||
|
|
||||||
|
import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同模板 Service 实现类
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class ContractTemplateServiceImpl implements ContractTemplateService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ContractTemplateMapper contractTemplateMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long createContractTemplate(ContractTemplateCreateReqVO createReqVO) {
|
||||||
|
// 插入
|
||||||
|
ContractTemplateDO contractTemplate = ContractTemplateConvert.INSTANCE.convert(createReqVO);
|
||||||
|
contractTemplateMapper.insert(contractTemplate);
|
||||||
|
// 返回
|
||||||
|
return contractTemplate.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateContractTemplate(ContractTemplateUpdateReqVO updateReqVO) {
|
||||||
|
// 校验存在
|
||||||
|
validateContractTemplateExists(updateReqVO.getId());
|
||||||
|
// 更新
|
||||||
|
ContractTemplateDO updateObj = ContractTemplateConvert.INSTANCE.convert(updateReqVO);
|
||||||
|
contractTemplateMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteContractTemplate(Long id) {
|
||||||
|
// 校验存在
|
||||||
|
validateContractTemplateExists(id);
|
||||||
|
// 删除
|
||||||
|
contractTemplateMapper.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateContractTemplateExists(Long id) {
|
||||||
|
if (contractTemplateMapper.selectById(id) == null) {
|
||||||
|
throw exception(CONTRACT_TEMPLATE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContractTemplateDO getContractTemplate(Long id) {
|
||||||
|
return contractTemplateMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ContractTemplateDO> getContractTemplateList(Collection<Long> ids) {
|
||||||
|
return contractTemplateMapper.selectBatchIds(ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<ContractTemplateDO> getContractTemplatePage(ContractTemplatePageReqVO pageReqVO) {
|
||||||
|
return contractTemplateMapper.selectPage(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ContractTemplateDO> getContractTemplateList(ContractTemplateExportReqVO exportReqVO) {
|
||||||
|
return contractTemplateMapper.selectList(exportReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,175 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.service.contractclause;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Disabled;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
|
||||||
|
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.mysql.contractclause.ContractClauseMapper;
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
|
import java.util.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static cn.hutool.core.util.RandomUtil.*;
|
||||||
|
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
|
||||||
|
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
|
||||||
|
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
|
||||||
|
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
|
||||||
|
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
|
||||||
|
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link ContractClauseServiceImpl} 的单元测试类
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@Import(ContractClauseServiceImpl.class)
|
||||||
|
public class ContractClauseServiceImplTest extends BaseDbUnitTest {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ContractClauseServiceImpl contractClauseService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ContractClauseMapper contractClauseMapper;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateContractClause_success() {
|
||||||
|
// 准备参数
|
||||||
|
ContractClauseCreateReqVO reqVO = randomPojo(ContractClauseCreateReqVO.class);
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
Long contractClauseId = contractClauseService.createContractClause(reqVO);
|
||||||
|
// 断言
|
||||||
|
assertNotNull(contractClauseId);
|
||||||
|
// 校验记录的属性是否正确
|
||||||
|
ContractClauseDO contractClause = contractClauseMapper.selectById(contractClauseId);
|
||||||
|
assertPojoEquals(reqVO, contractClause);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateContractClause_success() {
|
||||||
|
// mock 数据
|
||||||
|
ContractClauseDO dbContractClause = randomPojo(ContractClauseDO.class);
|
||||||
|
contractClauseMapper.insert(dbContractClause);// @Sql: 先插入出一条存在的数据
|
||||||
|
// 准备参数
|
||||||
|
ContractClauseUpdateReqVO reqVO = randomPojo(ContractClauseUpdateReqVO.class, o -> {
|
||||||
|
o.setId(dbContractClause.getId()); // 设置更新的 ID
|
||||||
|
});
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
contractClauseService.updateContractClause(reqVO);
|
||||||
|
// 校验是否更新正确
|
||||||
|
ContractClauseDO contractClause = contractClauseMapper.selectById(reqVO.getId()); // 获取最新的
|
||||||
|
assertPojoEquals(reqVO, contractClause);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateContractClause_notExists() {
|
||||||
|
// 准备参数
|
||||||
|
ContractClauseUpdateReqVO reqVO = randomPojo(ContractClauseUpdateReqVO.class);
|
||||||
|
|
||||||
|
// 调用, 并断言异常
|
||||||
|
assertServiceException(() -> contractClauseService.updateContractClause(reqVO), CONTRACT_CLAUSE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeleteContractClause_success() {
|
||||||
|
// mock 数据
|
||||||
|
ContractClauseDO dbContractClause = randomPojo(ContractClauseDO.class);
|
||||||
|
contractClauseMapper.insert(dbContractClause);// @Sql: 先插入出一条存在的数据
|
||||||
|
// 准备参数
|
||||||
|
Long id = dbContractClause.getId();
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
contractClauseService.deleteContractClause(id);
|
||||||
|
// 校验数据不存在了
|
||||||
|
assertNull(contractClauseMapper.selectById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeleteContractClause_notExists() {
|
||||||
|
// 准备参数
|
||||||
|
Long id = randomLongId();
|
||||||
|
|
||||||
|
// 调用, 并断言异常
|
||||||
|
assertServiceException(() -> contractClauseService.deleteContractClause(id), CONTRACT_CLAUSE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
||||||
|
public void testGetContractClausePage() {
|
||||||
|
// mock 数据
|
||||||
|
ContractClauseDO dbContractClause = randomPojo(ContractClauseDO.class, o -> { // 等会查询到
|
||||||
|
o.setTitle(null);
|
||||||
|
o.setType(null);
|
||||||
|
o.setStatus(null);
|
||||||
|
o.setCreateTime(null);
|
||||||
|
});
|
||||||
|
contractClauseMapper.insert(dbContractClause);
|
||||||
|
// 测试 title 不匹配
|
||||||
|
contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setTitle(null)));
|
||||||
|
// 测试 type 不匹配
|
||||||
|
contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setType(null)));
|
||||||
|
// 测试 status 不匹配
|
||||||
|
contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setStatus(null)));
|
||||||
|
// 测试 createTime 不匹配
|
||||||
|
contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setCreateTime(null)));
|
||||||
|
// 准备参数
|
||||||
|
ContractClausePageReqVO reqVO = new ContractClausePageReqVO();
|
||||||
|
reqVO.setTitle(null);
|
||||||
|
reqVO.setType(null);
|
||||||
|
reqVO.setStatus(null);
|
||||||
|
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
PageResult<ContractClauseDO> pageResult = contractClauseService.getContractClausePage(reqVO);
|
||||||
|
// 断言
|
||||||
|
assertEquals(1, pageResult.getTotal());
|
||||||
|
assertEquals(1, pageResult.getList().size());
|
||||||
|
assertPojoEquals(dbContractClause, pageResult.getList().get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
||||||
|
public void testGetContractClauseList() {
|
||||||
|
// mock 数据
|
||||||
|
ContractClauseDO dbContractClause = randomPojo(ContractClauseDO.class, o -> { // 等会查询到
|
||||||
|
o.setTitle(null);
|
||||||
|
o.setType(null);
|
||||||
|
o.setStatus(null);
|
||||||
|
o.setCreateTime(null);
|
||||||
|
});
|
||||||
|
contractClauseMapper.insert(dbContractClause);
|
||||||
|
// 测试 title 不匹配
|
||||||
|
contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setTitle(null)));
|
||||||
|
// 测试 type 不匹配
|
||||||
|
contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setType(null)));
|
||||||
|
// 测试 status 不匹配
|
||||||
|
contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setStatus(null)));
|
||||||
|
// 测试 createTime 不匹配
|
||||||
|
contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setCreateTime(null)));
|
||||||
|
// 准备参数
|
||||||
|
ContractClauseExportReqVO reqVO = new ContractClauseExportReqVO();
|
||||||
|
reqVO.setTitle(null);
|
||||||
|
reqVO.setType(null);
|
||||||
|
reqVO.setStatus(null);
|
||||||
|
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
List<ContractClauseDO> list = contractClauseService.getContractClauseList(reqVO);
|
||||||
|
// 断言
|
||||||
|
assertEquals(1, list.size());
|
||||||
|
assertPojoEquals(dbContractClause, list.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,175 @@
|
|||||||
|
package com.yunxi.scm.module.xxjj.service.contracttemplate;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Disabled;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
|
||||||
|
|
||||||
|
import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO;
|
||||||
|
import com.yunxi.scm.module.xxjj.dal.mysql.contracttemplate.ContractTemplateMapper;
|
||||||
|
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
|
import java.util.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static cn.hutool.core.util.RandomUtil.*;
|
||||||
|
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
|
||||||
|
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
|
||||||
|
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
|
||||||
|
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
|
||||||
|
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
|
||||||
|
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link ContractTemplateServiceImpl} 的单元测试类
|
||||||
|
*
|
||||||
|
* @author 长江云息
|
||||||
|
*/
|
||||||
|
@Import(ContractTemplateServiceImpl.class)
|
||||||
|
public class ContractTemplateServiceImplTest extends BaseDbUnitTest {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ContractTemplateServiceImpl contractTemplateService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ContractTemplateMapper contractTemplateMapper;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateContractTemplate_success() {
|
||||||
|
// 准备参数
|
||||||
|
ContractTemplateCreateReqVO reqVO = randomPojo(ContractTemplateCreateReqVO.class);
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
Long contractTemplateId = contractTemplateService.createContractTemplate(reqVO);
|
||||||
|
// 断言
|
||||||
|
assertNotNull(contractTemplateId);
|
||||||
|
// 校验记录的属性是否正确
|
||||||
|
ContractTemplateDO contractTemplate = contractTemplateMapper.selectById(contractTemplateId);
|
||||||
|
assertPojoEquals(reqVO, contractTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateContractTemplate_success() {
|
||||||
|
// mock 数据
|
||||||
|
ContractTemplateDO dbContractTemplate = randomPojo(ContractTemplateDO.class);
|
||||||
|
contractTemplateMapper.insert(dbContractTemplate);// @Sql: 先插入出一条存在的数据
|
||||||
|
// 准备参数
|
||||||
|
ContractTemplateUpdateReqVO reqVO = randomPojo(ContractTemplateUpdateReqVO.class, o -> {
|
||||||
|
o.setId(dbContractTemplate.getId()); // 设置更新的 ID
|
||||||
|
});
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
contractTemplateService.updateContractTemplate(reqVO);
|
||||||
|
// 校验是否更新正确
|
||||||
|
ContractTemplateDO contractTemplate = contractTemplateMapper.selectById(reqVO.getId()); // 获取最新的
|
||||||
|
assertPojoEquals(reqVO, contractTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateContractTemplate_notExists() {
|
||||||
|
// 准备参数
|
||||||
|
ContractTemplateUpdateReqVO reqVO = randomPojo(ContractTemplateUpdateReqVO.class);
|
||||||
|
|
||||||
|
// 调用, 并断言异常
|
||||||
|
assertServiceException(() -> contractTemplateService.updateContractTemplate(reqVO), CONTRACT_TEMPLATE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeleteContractTemplate_success() {
|
||||||
|
// mock 数据
|
||||||
|
ContractTemplateDO dbContractTemplate = randomPojo(ContractTemplateDO.class);
|
||||||
|
contractTemplateMapper.insert(dbContractTemplate);// @Sql: 先插入出一条存在的数据
|
||||||
|
// 准备参数
|
||||||
|
Long id = dbContractTemplate.getId();
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
contractTemplateService.deleteContractTemplate(id);
|
||||||
|
// 校验数据不存在了
|
||||||
|
assertNull(contractTemplateMapper.selectById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeleteContractTemplate_notExists() {
|
||||||
|
// 准备参数
|
||||||
|
Long id = randomLongId();
|
||||||
|
|
||||||
|
// 调用, 并断言异常
|
||||||
|
assertServiceException(() -> contractTemplateService.deleteContractTemplate(id), CONTRACT_TEMPLATE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
||||||
|
public void testGetContractTemplatePage() {
|
||||||
|
// mock 数据
|
||||||
|
ContractTemplateDO dbContractTemplate = randomPojo(ContractTemplateDO.class, o -> { // 等会查询到
|
||||||
|
o.setName(null);
|
||||||
|
o.setType(null);
|
||||||
|
o.setStatus(null);
|
||||||
|
o.setCreateTime(null);
|
||||||
|
});
|
||||||
|
contractTemplateMapper.insert(dbContractTemplate);
|
||||||
|
// 测试 name 不匹配
|
||||||
|
contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setName(null)));
|
||||||
|
// 测试 type 不匹配
|
||||||
|
contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setType(null)));
|
||||||
|
// 测试 status 不匹配
|
||||||
|
contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setStatus(null)));
|
||||||
|
// 测试 createTime 不匹配
|
||||||
|
contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setCreateTime(null)));
|
||||||
|
// 准备参数
|
||||||
|
ContractTemplatePageReqVO reqVO = new ContractTemplatePageReqVO();
|
||||||
|
reqVO.setName(null);
|
||||||
|
reqVO.setType(null);
|
||||||
|
reqVO.setStatus(null);
|
||||||
|
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
PageResult<ContractTemplateDO> pageResult = contractTemplateService.getContractTemplatePage(reqVO);
|
||||||
|
// 断言
|
||||||
|
assertEquals(1, pageResult.getTotal());
|
||||||
|
assertEquals(1, pageResult.getList().size());
|
||||||
|
assertPojoEquals(dbContractTemplate, pageResult.getList().get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
||||||
|
public void testGetContractTemplateList() {
|
||||||
|
// mock 数据
|
||||||
|
ContractTemplateDO dbContractTemplate = randomPojo(ContractTemplateDO.class, o -> { // 等会查询到
|
||||||
|
o.setName(null);
|
||||||
|
o.setType(null);
|
||||||
|
o.setStatus(null);
|
||||||
|
o.setCreateTime(null);
|
||||||
|
});
|
||||||
|
contractTemplateMapper.insert(dbContractTemplate);
|
||||||
|
// 测试 name 不匹配
|
||||||
|
contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setName(null)));
|
||||||
|
// 测试 type 不匹配
|
||||||
|
contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setType(null)));
|
||||||
|
// 测试 status 不匹配
|
||||||
|
contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setStatus(null)));
|
||||||
|
// 测试 createTime 不匹配
|
||||||
|
contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setCreateTime(null)));
|
||||||
|
// 准备参数
|
||||||
|
ContractTemplateExportReqVO reqVO = new ContractTemplateExportReqVO();
|
||||||
|
reqVO.setName(null);
|
||||||
|
reqVO.setType(null);
|
||||||
|
reqVO.setStatus(null);
|
||||||
|
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
List<ContractTemplateDO> list = contractTemplateService.getContractTemplateList(reqVO);
|
||||||
|
// 断言
|
||||||
|
assertEquals(1, list.size());
|
||||||
|
assertPojoEquals(dbContractTemplate, list.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ContractClauseVO {
|
||||||
|
id: number
|
||||||
|
title: string
|
||||||
|
type: string
|
||||||
|
status: string
|
||||||
|
content: string
|
||||||
|
weight: number
|
||||||
|
remark: string
|
||||||
|
attachment: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询合同条款列表
|
||||||
|
export const getContractClausePage = async (params) => {
|
||||||
|
return await request.get({ url: `/xxjj/contract-clause/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询合同条款详情
|
||||||
|
export const getContractClause = async (id: number) => {
|
||||||
|
return await request.get({ url: `/xxjj/contract-clause/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增合同条款
|
||||||
|
export const createContractClause = async (data: ContractClauseVO) => {
|
||||||
|
return await request.post({ url: `/xxjj/contract-clause/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改合同条款
|
||||||
|
export const updateContractClause = async (data: ContractClauseVO) => {
|
||||||
|
return await request.put({ url: `/xxjj/contract-clause/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除合同条款
|
||||||
|
export const deleteContractClause = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/xxjj/contract-clause/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出合同条款 Excel
|
||||||
|
export const exportContractClause = async (params) => {
|
||||||
|
return await request.download({ url: `/xxjj/contract-clause/export-excel`, params })
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ContractTemplateVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
type: string
|
||||||
|
status: string
|
||||||
|
describe: string
|
||||||
|
options: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询合同模板列表
|
||||||
|
export const getContractTemplatePage = async (params) => {
|
||||||
|
return await request.get({ url: `/xxjj/contract-template/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询合同模板详情
|
||||||
|
export const getContractTemplate = async (id: number) => {
|
||||||
|
return await request.get({ url: `/xxjj/contract-template/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增合同模板
|
||||||
|
export const createContractTemplate = async (data: ContractTemplateVO) => {
|
||||||
|
return await request.post({ url: `/xxjj/contract-template/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改合同模板
|
||||||
|
export const updateContractTemplate = async (data: ContractTemplateVO) => {
|
||||||
|
return await request.put({ url: `/xxjj/contract-template/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除合同模板
|
||||||
|
export const deleteContractTemplate = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/xxjj/contract-template/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出合同模板 Excel
|
||||||
|
export const exportContractTemplate = async (params) => {
|
||||||
|
return await request.download({ url: `/xxjj/contract-template/export-excel`, params })
|
||||||
|
}
|
@ -0,0 +1,321 @@
|
|||||||
|
<template>
|
||||||
|
<el-card class="box-card xy-card xy-margin-zero">
|
||||||
|
<template #header>
|
||||||
|
<div class="card-header">
|
||||||
|
<span>编辑企业</span>
|
||||||
|
<span><span style="color:red;">*</span>为必填项</span>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="text item">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<div class="xy-info-title-a1">
|
||||||
|
<span class="xy-icon">▋</span><span class="xy-text">基础信息</span>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="160px" class="demo-ruleForm" :size="formSize" status-icon>
|
||||||
|
<el-row style="width:95%">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="企业代码" prop="name">
|
||||||
|
<el-input v-model="ruleForm.word" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="企业名称" prop="name">
|
||||||
|
<el-input v-model="ruleForm.firm" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="企业简称/英文名称">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="默认企业名称拼音首字母" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row style="width:95%">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="主体类型" prop="region">
|
||||||
|
<el-select v-model="ruleForm.region" clearable placeholder="主体类型" style="width:100%">
|
||||||
|
<el-option label="企业" value="shanghai" />
|
||||||
|
<el-option label="个体户" value="beijing" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="所在城市" prop="count">
|
||||||
|
<el-select v-model="ruleForm.region" clearable placeholder="所在城市" style="width:100%">
|
||||||
|
<el-option label="企业" value="shanghai" />
|
||||||
|
<el-option label="个体户" value="beijing" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="行业分类" clearable prop="count">
|
||||||
|
<el-select v-model="ruleForm.region" clearable placeholder="行业类型" style="width:100%">
|
||||||
|
<el-option label="企业" value="shanghai" />
|
||||||
|
<el-option label="个体户" value="beijing" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row style="width:95%">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="首联系人" prop="name">
|
||||||
|
<el-input v-model="ruleForm.date1" placeholder="输入内容" />
|
||||||
|
</el-form-item></el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="职位">
|
||||||
|
<el-input v-model="ruleForm.date1" placeholder="输入内容" />
|
||||||
|
</el-form-item></el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="手机号码" prop="phone">
|
||||||
|
<el-input v-model="ruleForm.date1" placeholder="输入内容" />
|
||||||
|
</el-form-item></el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<div class="xy-info-title-a1">
|
||||||
|
<span class="xy-icon">▋</span><span class="xy-text">联系人信息</span>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="企业LOGO" prop="">
|
||||||
|
<el-upload style="margin-top:50px" class="avatar-uploader" action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
|
||||||
|
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
|
||||||
|
<el-icon v-else class="avatar-uploader-icon">
|
||||||
|
<Plus />
|
||||||
|
</el-icon>
|
||||||
|
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="16">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="11">
|
||||||
|
<el-form-item label="详细地址" prop="name">
|
||||||
|
<el-input v-model="ruleForm.date1" placeholder="输入内容" />
|
||||||
|
</el-form-item></el-col>
|
||||||
|
<el-col :span="11">
|
||||||
|
<el-form-item label="企业电话" prop="phone">
|
||||||
|
<el-input v-model="ruleForm.date1" placeholder="输入内容" />
|
||||||
|
</el-form-item></el-col>
|
||||||
|
<el-col :span="11">
|
||||||
|
<el-form-item label="企业传真" prop="name">
|
||||||
|
<el-input v-model="ruleForm.date1" placeholder="输入内容" />
|
||||||
|
</el-form-item></el-col>
|
||||||
|
<el-col :span="11">
|
||||||
|
<el-form-item label="企业网址" prop="phone">
|
||||||
|
<el-input v-model="ruleForm.date1" placeholder="输入网址">
|
||||||
|
<template #prepend>Http://</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item></el-col>
|
||||||
|
<el-col :span="22
|
||||||
|
">
|
||||||
|
<el-form-item label="企业介绍" prop="phone">
|
||||||
|
<el-input v-model="ruleForm.desc" maxlength="300" :autosize="{ minRows: 6, maxRows: 8 }" show-word-limit type="textarea" placeholder="输入内容" />
|
||||||
|
</el-form-item></el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<div class="xy-info-title-a1">
|
||||||
|
<span class="xy-icon">▋</span><span class="xy-text">财务信息</span>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row style="width:95%">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="企业税号" prop="name">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="发票抬头" prop="name">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="开户银行" prop="name">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="输入内容"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row style="width:95%">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="银行账号" prop="name">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="电话号码" prop="name">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="输入内容"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="注册地址" prop="name">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="输入内容"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row justify="center">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item>
|
||||||
|
<el-button style="width:120px;height:40px" type="primary" @click="submitForm(ruleFormRef)">
|
||||||
|
保存
|
||||||
|
</el-button>
|
||||||
|
|
||||||
|
<el-button style="width:120px;height:40px" @click="backtrack()">返回</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { reactive, ref } from 'vue'
|
||||||
|
import type { FormInstance, FormRules } from 'element-plus'
|
||||||
|
// import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
|
import { Plus } from '@element-plus/icons-vue'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
let router = useRouter()
|
||||||
|
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
|
interface RuleForm {
|
||||||
|
word:any
|
||||||
|
firm:any
|
||||||
|
name: any
|
||||||
|
region: any
|
||||||
|
count: any
|
||||||
|
date1: any
|
||||||
|
desc: any
|
||||||
|
}
|
||||||
|
|
||||||
|
const formSize = ref('default')
|
||||||
|
const ruleFormRef = ref<FormInstance>()
|
||||||
|
|
||||||
|
|
||||||
|
const ruleForm = reactive<RuleForm>({
|
||||||
|
word:'2023191110001',
|
||||||
|
firm:'济钢城市矿产科技有限公司',
|
||||||
|
name: '',
|
||||||
|
region: '',
|
||||||
|
count: '',
|
||||||
|
date1: '',
|
||||||
|
desc: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
const rules = reactive<FormRules<RuleForm>>({
|
||||||
|
name: [
|
||||||
|
{ required: true, message: '请输入内容', trigger: 'blur' },
|
||||||
|
{ min: 1, max: 11, message: '输入1-11个字', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
region: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择',
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
count: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择',
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
//点击保存
|
||||||
|
const submitForm = async (formEl: FormInstance | undefined) => {
|
||||||
|
if (!formEl) return
|
||||||
|
await formEl.validate((valid, fields) => {
|
||||||
|
if (valid) {
|
||||||
|
console.log('新建submit校验成功 返回上一页!')
|
||||||
|
router.push('./index.vue') //需配置路由
|
||||||
|
} else {
|
||||||
|
console.log('error submit!', fields)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const backtrack = () => {
|
||||||
|
router.push('./index.vue') //需配置路由
|
||||||
|
}
|
||||||
|
|
||||||
|
const options = Array.from({ length: 10000 }).map((_, idx) => ({
|
||||||
|
value: `${idx + 1}`,
|
||||||
|
label: `${idx + 1}`
|
||||||
|
}))
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.box-card {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.xy-info-title-a1 {
|
||||||
|
padding: 14px;
|
||||||
|
line-height: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
|
.xy-icon {
|
||||||
|
font-family: '阿里巴巴普惠体 2.0 65 Medium', '阿里巴巴普惠体 2.0 55', '阿里巴巴普惠体 2.0',
|
||||||
|
sans-serif;
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xy-text {
|
||||||
|
padding-left: 5px;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-row {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.el-table--border .el-table__cell {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
.avatar-uploader .avatar {
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style >
|
||||||
|
.avatar-uploader .el-upload {
|
||||||
|
border: 1px dashed var(--el-border-color);
|
||||||
|
border-radius: 6px;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
transition: var(--el-transition-duration-fast);
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-uploader .el-upload:hover {
|
||||||
|
border-color: var(--el-color-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-icon.avatar-uploader-icon {
|
||||||
|
font-size: 28px;
|
||||||
|
color: #8c939d;
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,284 @@
|
|||||||
|
<template>
|
||||||
|
<el-card class="box-card xy-card xy-margin-zero">
|
||||||
|
<template #header>
|
||||||
|
<div class="card-header">
|
||||||
|
<span>认证企业</span>
|
||||||
|
<span><span style="color:red;">*</span>为必填项</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="itemcard">
|
||||||
|
<el-row style="justify-content: center;">
|
||||||
|
<el-col :span="17">
|
||||||
|
<el-steps :active="1" align-center>
|
||||||
|
<el-step title="主体信息" description="请填写主体信息" />
|
||||||
|
<el-step title="法定代表人信息" description="请填写法定代表人信息" />
|
||||||
|
<el-step title="经营信息" description="请填写经营信息" />
|
||||||
|
<el-step title="提交成功" description="信息提交成功" />
|
||||||
|
</el-steps>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="160px" class="demo-ruleForm" :size="formSize" status-icon>
|
||||||
|
<el-row style="width:95%;margin-top:50px">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="主体类型:" prop="region">
|
||||||
|
<el-select v-model="ruleForm.region" clearable placeholder="主体类型" style="width:100%">
|
||||||
|
<el-option label="企业" value="shanghai" />
|
||||||
|
<el-option label="个体户" value="beijing" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="注册地址:" prop="region2">
|
||||||
|
<el-select v-model="ruleForm.region2" clearable placeholder="选择城市" style="width:100%">
|
||||||
|
<el-option label="企业" value="shanghai" />
|
||||||
|
<el-option label="个体户" value="beijing" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item prop="name">
|
||||||
|
<el-input v-model="ruleForm.address" placeholder="详细地址" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="社会统一信用代码:" prop="name">
|
||||||
|
<el-input v-model="ruleForm.date1" placeholder="输入内容
|
||||||
|
" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="经营期限:" prop="radio2">
|
||||||
|
<el-radio-group v-model="ruleForm.radio2" size="large">
|
||||||
|
<el-radio-button label="非长期" />
|
||||||
|
<el-radio-button label="长期" />
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-date-picker style="width:100%" v-model="ruleForm.date" type="daterange" start-placeholder="请选择" end-placeholder="日期范围" :default-time="defaultTime" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="企业名称:" prop="name">
|
||||||
|
<el-input v-model="ruleForm.firm" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="经营范围:" >
|
||||||
|
<el-input v-model="ruleForm.desc" maxlength="300" :autosize="{ minRows: 3, maxRows: 3 }" show-word-limit type="textarea" placeholder="输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="上传证件照片:" prop="pic">
|
||||||
|
<el-upload class="avatar-uploader" action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
|
||||||
|
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
|
||||||
|
<el-icon v-else class="avatar-uploader-icon">
|
||||||
|
<Plus />
|
||||||
|
</el-icon>
|
||||||
|
</el-upload>
|
||||||
|
<div>
|
||||||
|
<span style="font-size:13px;color:#999999;">请上传统一社会信用代码证</span><br>
|
||||||
|
<span style="font-size:12px;color:#999999;">必须为彩色图片且小于6M,文件格式为bmp、png、jpeg、jpg或gif。<a href="#" style="color: rgb(64, 158, 255);">查看示例</a></span>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
</el-col>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row justify="center">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item>
|
||||||
|
<el-button style="width:120px;height:40px" type="primary" plain @click="goback()">
|
||||||
|
上一步
|
||||||
|
</el-button>
|
||||||
|
<el-button style="width:120px;height:40px" type="primary" @click="submitForm(ruleFormRef)">
|
||||||
|
下一步
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { reactive, ref } from 'vue'
|
||||||
|
import type { FormInstance, FormRules } from 'element-plus'
|
||||||
|
// import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
|
import { Plus } from '@element-plus/icons-vue'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
let router = useRouter()
|
||||||
|
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
|
interface RuleForm {
|
||||||
|
address:any
|
||||||
|
word: any
|
||||||
|
firm: any
|
||||||
|
name: any
|
||||||
|
region: any
|
||||||
|
count: any
|
||||||
|
date1: any
|
||||||
|
desc: any
|
||||||
|
radio2:any
|
||||||
|
pic:any
|
||||||
|
region2:any
|
||||||
|
}
|
||||||
|
|
||||||
|
const formSize = ref('default')
|
||||||
|
const ruleFormRef = ref<FormInstance>()
|
||||||
|
|
||||||
|
const ruleForm = reactive<RuleForm>({
|
||||||
|
word: '2023191110001',
|
||||||
|
firm: '济钢城市矿产科技有限公司',
|
||||||
|
name: '',
|
||||||
|
region: '',
|
||||||
|
region2:'',
|
||||||
|
count: '',
|
||||||
|
date1: '',
|
||||||
|
desc: '',
|
||||||
|
radio2:'',
|
||||||
|
pic:'',
|
||||||
|
address:''
|
||||||
|
})
|
||||||
|
|
||||||
|
const rules = reactive<FormRules<RuleForm>>({
|
||||||
|
name: [
|
||||||
|
{ required: true, message: '请输入内容', trigger: 'blur' },
|
||||||
|
{ min: 1, max: 11, message: '输入1-11个字', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
address:[
|
||||||
|
{ required: true, message: '请输入内容', trigger: 'blur' },
|
||||||
|
{ min: 1, max: 11, message: '输入1-11个字', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
region: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择',
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
region2: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择',
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
count: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择',
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
radio2: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择',
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
pic:[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择',
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
//点击上一步
|
||||||
|
const goback = ()=>{
|
||||||
|
router.back()
|
||||||
|
}
|
||||||
|
//点击下一步
|
||||||
|
const submitForm = async (formEl: FormInstance | undefined) => {
|
||||||
|
if (!formEl) return
|
||||||
|
await formEl.validate((valid, fields) => {
|
||||||
|
if (valid) {
|
||||||
|
console.log('新建submit校验成功 去指定页面!')
|
||||||
|
router.push('./legalmessage.vue') //需配置路由
|
||||||
|
} else {
|
||||||
|
console.log('error submit!', fields)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const options = Array.from({ length: 10000 }).map((_, idx) => ({
|
||||||
|
value: `${idx + 1}`,
|
||||||
|
label: `${idx + 1}`
|
||||||
|
}))
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.itemcard {
|
||||||
|
width: 80%;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.box-card {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
.xy-info-title-a1 {
|
||||||
|
padding: 14px;
|
||||||
|
line-height: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
|
.xy-icon {
|
||||||
|
font-family: '阿里巴巴普惠体 2.0 65 Medium', '阿里巴巴普惠体 2.0 55', '阿里巴巴普惠体 2.0',
|
||||||
|
sans-serif;
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xy-text {
|
||||||
|
padding-left: 5px;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-row {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.el-table--border .el-table__cell {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
.avatar-uploader .avatar {
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style >
|
||||||
|
.avatar-uploader .el-upload {
|
||||||
|
border: 1px dashed var(--el-border-color);
|
||||||
|
border-radius: 6px;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
transition: var(--el-transition-duration-fast);
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-uploader .el-upload:hover {
|
||||||
|
border-color: var(--el-color-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-icon.avatar-uploader-icon {
|
||||||
|
font-size: 28px;
|
||||||
|
color: #8c939d;
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,252 @@
|
|||||||
|
<template>
|
||||||
|
<el-card class="box-card xy-card xy-margin-zero">
|
||||||
|
<template #header>
|
||||||
|
<div class="card-header">
|
||||||
|
<span>认证企业</span>
|
||||||
|
<span><span style="color:red;">*</span>为必填项</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="itemcard">
|
||||||
|
<el-row style="justify-content: center;">
|
||||||
|
<el-col :span="17">
|
||||||
|
<el-steps :active="3" align-center>
|
||||||
|
<el-step title="主体信息" description="请填写主体信息" />
|
||||||
|
<el-step title="法定代表人信息" description="请填写法定代表人信息" />
|
||||||
|
<el-step title="经营信息" description="请填写经营信息" />
|
||||||
|
<el-step title="提交成功" description="信息提交成功" />
|
||||||
|
</el-steps>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="160px" class="demo-ruleForm" :size="formSize" status-icon>
|
||||||
|
<el-row style="width:95%;margin-top:50px">
|
||||||
|
|
||||||
|
<el-col :span="24" style="margin:20px 0;">
|
||||||
|
<div class="xy-info-title-a1">
|
||||||
|
<div>
|
||||||
|
<span class="xy-icon">▋</span><span class="xy-text">联系人信息</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="姓名:" prop="name">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="手机号:" prop="name">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="常用邮箱:" prop="name">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
<el-col :span="24" style="margin:20px 0;">
|
||||||
|
<div class="xy-info-title-a1">
|
||||||
|
<div>
|
||||||
|
<span class="xy-icon">▋</span><span class="xy-text">财务信息</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="企业税号:" prop="name">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="开户银行:" prop="name">
|
||||||
|
<el-input v-model="ruleForm.name" placeholder="输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="电话号码:" prop="name">
|
||||||
|
<el-radio-group v-model="ruleForm.radio2" size="large">
|
||||||
|
<el-radio-button label="非长期" />
|
||||||
|
<el-radio-button label="长期" />
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="发票抬头:" prop="name">
|
||||||
|
<el-input v-model="ruleForm.firm" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="银行账号:" prop="name">
|
||||||
|
<el-input v-model="ruleForm.firm" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="注册地址:" prop="name">
|
||||||
|
<el-input v-model="ruleForm.firm" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row justify="center">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item>
|
||||||
|
<el-button style="width:120px;height:40px" type="primary" plain @click="goback()">
|
||||||
|
上一步
|
||||||
|
</el-button>
|
||||||
|
<el-button style="width:120px;height:40px" type="primary" @click="submitForm(ruleFormRef)">
|
||||||
|
下一步
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { reactive, ref } from 'vue'
|
||||||
|
import type { FormInstance, FormRules } from 'element-plus'
|
||||||
|
// import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
|
import { Plus } from '@element-plus/icons-vue'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
let router = useRouter()
|
||||||
|
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
|
interface RuleForm {
|
||||||
|
word: any
|
||||||
|
firm: any
|
||||||
|
name: any
|
||||||
|
region: any
|
||||||
|
count: any
|
||||||
|
date1: any
|
||||||
|
desc: any
|
||||||
|
radio2: any
|
||||||
|
}
|
||||||
|
|
||||||
|
const formSize = ref('default')
|
||||||
|
const ruleFormRef = ref<FormInstance>()
|
||||||
|
|
||||||
|
const ruleForm = reactive<RuleForm>({
|
||||||
|
word: '2023191110001',
|
||||||
|
firm: '济钢城市矿产科技有限公司',
|
||||||
|
name: '',
|
||||||
|
region: '',
|
||||||
|
count: '',
|
||||||
|
date1: '',
|
||||||
|
desc: '',
|
||||||
|
radio2: '法人'
|
||||||
|
})
|
||||||
|
|
||||||
|
const rules = reactive<FormRules<RuleForm>>({
|
||||||
|
name: [
|
||||||
|
{ required: true, message: '请输入内容', trigger: 'blur' },
|
||||||
|
{ min: 1, max: 11, message: '输入1-11个字', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
region: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择',
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
count: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择',
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
//点击上一步
|
||||||
|
const goback = ()=>{
|
||||||
|
router.back()
|
||||||
|
}
|
||||||
|
//点击保存
|
||||||
|
const submitForm = async (formEl: FormInstance | undefined) => {
|
||||||
|
if (!formEl) return
|
||||||
|
await formEl.validate((valid, fields) => {
|
||||||
|
if (valid) {
|
||||||
|
console.log('新建submit校验成功')
|
||||||
|
router.push('./okmessage.vue') //需配置路由
|
||||||
|
} else {
|
||||||
|
console.log('error submit!', fields)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const options = Array.from({ length: 10000 }).map((_, idx) => ({
|
||||||
|
value: `${idx + 1}`,
|
||||||
|
label: `${idx + 1}`
|
||||||
|
}))
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.itemcard {
|
||||||
|
width: 80%;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.box-card {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
.xy-info-title-a1 {
|
||||||
|
padding: 14px;
|
||||||
|
line-height: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
|
.xy-icon {
|
||||||
|
font-family: '阿里巴巴普惠体 2.0 65 Medium', '阿里巴巴普惠体 2.0 55', '阿里巴巴普惠体 2.0',
|
||||||
|
sans-serif;
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xy-text {
|
||||||
|
padding-left: 5px;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-row {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.el-table--border .el-table__cell {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
.avatar-uploader .avatar {
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style >
|
||||||
|
.avatar-uploader .el-upload {
|
||||||
|
border: 1px dashed var(--el-border-color);
|
||||||
|
border-radius: 6px;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
transition: var(--el-transition-duration-fast);
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-uploader .el-upload:hover {
|
||||||
|
border-color: var(--el-color-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-icon.avatar-uploader-icon {
|
||||||
|
font-size: 28px;
|
||||||
|
color: #8c939d;
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,167 @@
|
|||||||
|
<template>
|
||||||
|
<el-card class="build-contract">
|
||||||
|
<template #header>
|
||||||
|
<div class="header">
|
||||||
|
<div>
|
||||||
|
<span style="margin-right: 10px;">生成合同</span>
|
||||||
|
<small> ( <span style="color: #f56c6c;">*</span> 为必填项 )</small>
|
||||||
|
</div>
|
||||||
|
<el-button type="primary" text @click="() => { }">预览合同</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="content">
|
||||||
|
<div class="lead">
|
||||||
|
<div class="title">
|
||||||
|
<span class="lc"></span>
|
||||||
|
<span class="lh">合同类型</span>
|
||||||
|
</div>
|
||||||
|
<div class="tips">
|
||||||
|
<el-alert title="不同的合同类型可编辑的字段内容不同,合同类型一旦保存不可修改,请选择更匹配你需求的一个。" type="warning" />
|
||||||
|
</div>
|
||||||
|
<div class="types">
|
||||||
|
<el-button-group>
|
||||||
|
<template v-for="item in contract_types" :key="item.value">
|
||||||
|
<el-button :type="item.value == activeType ? 'primary' : 'default'" class="type"
|
||||||
|
:class="item.value == activeType ? 'active' : ''" @click="changeContractType(item.value)">{{ item.label
|
||||||
|
}}</el-button>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- <el-button type="default" class="type">销售合同</el-button>
|
||||||
|
<el-button type="default" class="type">仓储合同</el-button> -->
|
||||||
|
</el-button-group>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-area">
|
||||||
|
<ProcureContract />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<el-divider />
|
||||||
|
<div class="options">
|
||||||
|
<el-button type="primary" style="width: 120px;" size="large">保存</el-button>
|
||||||
|
<el-button type="default" style="width: 120px;" size="large" plain>返回</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts" name="BuildContract">
|
||||||
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
||||||
|
import * as ContractApi from '@/api/xxjj/contract'
|
||||||
|
import ProcureContract from './components/types/procure/ProcureContract.vue'
|
||||||
|
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
|
||||||
|
const contract_types = ref<any>([]);
|
||||||
|
|
||||||
|
const activeType = ref('1');
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
contract_types.value = getStrDictOptions(DICT_TYPE.CONTRACT_TYPE)
|
||||||
|
console.log(contract_types);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 切换合同类型
|
||||||
|
const changeContractType = (typeVal) => {
|
||||||
|
activeType.value = typeVal
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.build-contract {
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
|
||||||
|
::v-deep {
|
||||||
|
.el-card__header {
|
||||||
|
background-color: rgba(249, 249, 249, 1);
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
width: 100%;
|
||||||
|
max-height: 1500px;
|
||||||
|
overflow-y: scroll;
|
||||||
|
overflow-x: hidden;
|
||||||
|
|
||||||
|
.lead {
|
||||||
|
width: 100%;
|
||||||
|
padding: 0 20px;
|
||||||
|
margin-bottom: 50px;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.lc {
|
||||||
|
width: 8px;
|
||||||
|
height: 16px;
|
||||||
|
background-color: #409eff;
|
||||||
|
margin-right: 10px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lh {
|
||||||
|
color: #666;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 700;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tips {
|
||||||
|
width: 50%;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.types {
|
||||||
|
margin-top: 10px;
|
||||||
|
|
||||||
|
::v-deep(.el-button) {
|
||||||
|
&:hover {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
background-color: #409eff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.type {
|
||||||
|
width: 120px;
|
||||||
|
height: 60px;
|
||||||
|
color: #999;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-area {
|
||||||
|
padding: 0 20px;
|
||||||
|
height: 1500px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
height: 100px;
|
||||||
|
|
||||||
|
.options {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,37 @@
|
|||||||
|
<template>
|
||||||
|
<div class="tree-and-table">
|
||||||
|
左树右表弹框
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts" name="TreeAndTable">
|
||||||
|
const emits = defineEmits(['changeRange']);
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
name: string
|
||||||
|
}>();
|
||||||
|
|
||||||
|
const ranges = reactive([
|
||||||
|
{
|
||||||
|
day: 0,
|
||||||
|
text: '今天'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
day: 1,
|
||||||
|
text: '昨天'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
day: 7,
|
||||||
|
text: '最近7天'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
day: 30,
|
||||||
|
text: '最近30天'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.tree-and-table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,55 @@
|
|||||||
|
<template>
|
||||||
|
<div class="annexinfo_a">
|
||||||
|
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px" v-loading="formLoading" size="large"
|
||||||
|
label-position="top">
|
||||||
|
<el-row justify="start" style="flex-wrap: wrap;" :gutter="50">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="合同附件" prop="contractAppendices">
|
||||||
|
<UploadFile v-model="formData.contractAppendices" :title="config.title" :limit="config.limit"
|
||||||
|
:file-size="config.fileSize" :file-type="config.fileType" />
|
||||||
|
<!-- <el-input v-model="formData.contractAppendices" placeholder="合同附件" v-show="false" /> -->
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="附属文件" prop="ancillaryDocuments">
|
||||||
|
<UploadFile v-model="formData.ancillaryDocuments" :title="config.title" :limit="config.limit"
|
||||||
|
:file-size="config.fileSize" :file-type="config.fileType" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<!-- <el-col :span="8">
|
||||||
|
<el-button @click="() => { console.log(formData) }">查看</el-button>
|
||||||
|
</el-col> -->
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts" name="AnnexInfo_A">
|
||||||
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
|
const formLoading = ref(false) // 表单加载状态
|
||||||
|
|
||||||
|
const formData = ref<any>({ // 表单数据
|
||||||
|
contractAppendices: [],
|
||||||
|
ancillaryDocuments: [],
|
||||||
|
})
|
||||||
|
|
||||||
|
const formRules = reactive({ // 验证规则
|
||||||
|
contractAppendices: [{ required: false, message: '合同附件不能为空', trigger: 'blur' }],
|
||||||
|
ancillaryDocuments: [{ required: false, message: '附属文件不能为空', trigger: 'blur' }],
|
||||||
|
})
|
||||||
|
|
||||||
|
const config = reactive({
|
||||||
|
title: "上传文件",
|
||||||
|
fileType: ['rar', 'zip', 'doc', 'docx', 'pdf'],
|
||||||
|
fileSize: 20,
|
||||||
|
limit: 4,
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.annexinfo_a {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,101 @@
|
|||||||
|
<template>
|
||||||
|
<div class="baseinfo_a">
|
||||||
|
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px" v-loading="formLoading" size="large" label-position="top">
|
||||||
|
<el-row justify="start" style="flex-wrap: wrap;" :gutter="50">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="合同模版" prop="contractTemplateId">
|
||||||
|
<el-input v-model="formData.contractTemplateId" placeholder="请选择合同模版" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="合同编号" prop="contractNumber">
|
||||||
|
<el-input v-model="formData.contractNumber" placeholder="点击后生成合同编号" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="合同名称" prop="contractName">
|
||||||
|
<el-input v-model="formData.contractName" placeholder="请输入合同名称" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="对方合同编号" prop="contractNo">
|
||||||
|
<el-input v-model="formData.contractNo" placeholder="请输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="签订地点" prop="contractSigned">
|
||||||
|
<el-input v-model="formData.contractSigned" placeholder="请输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="签订时间" prop="contractSignedTime">
|
||||||
|
<el-input v-model="formData.contractSignedTime" placeholder="选择日期" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="关联业务线" prop="businessId">
|
||||||
|
<el-select v-model="formData.businessId" placeholder="请选择业务类型" style="width: 100%;">
|
||||||
|
<el-option label="业务线" value="1">业务线1</el-option>
|
||||||
|
<el-option label="业务线" value="2">业务线2</el-option>
|
||||||
|
<el-option label="业务线" value="3">业务线3</el-option>
|
||||||
|
<el-option label="业务线" value="4">业务线4</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="业务类型" prop="businessType">
|
||||||
|
<el-select v-model="formData.businessType" placeholder="请选择业务类型" style="width: 100%;">
|
||||||
|
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.CONTRACT_BUSINESS_TYPE)" :key="dict.value"
|
||||||
|
:label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="申报时间" prop="declarationTime">
|
||||||
|
<el-date-picker v-model="formData.declarationTime" type="date" value-format="x" placeholder="选择申报时间"
|
||||||
|
style="width: 100%;" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts" name="BaseInfo_A">
|
||||||
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
|
const emits = defineEmits(["setContractId"]);
|
||||||
|
|
||||||
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
|
const formLoading = ref(false) // 表单加载状态
|
||||||
|
|
||||||
|
const formData = ref({ // 表单数据
|
||||||
|
contractTemplateId: undefined,
|
||||||
|
contractNumber: undefined,
|
||||||
|
contractName: undefined,
|
||||||
|
contractNo: undefined,
|
||||||
|
contractSigned: undefined,
|
||||||
|
contractSignedTime: undefined,
|
||||||
|
businessId: undefined,
|
||||||
|
businessType: undefined,
|
||||||
|
declarationTime: undefined
|
||||||
|
})
|
||||||
|
|
||||||
|
const formRules = reactive({ // 验证规则
|
||||||
|
contractTemplateId: [{ required: true, message: '合同模板未选择', trigger: 'blur' }],
|
||||||
|
contractNumber: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }],
|
||||||
|
contractName: [{ required: true, message: '合同名称不能为空', trigger: 'blur' }],
|
||||||
|
contractNo: [{ required: false, message: '对方合同编号不能为空', trigger: 'blur' }],
|
||||||
|
contractSigned: [{ required: true, message: '签订地点不能为空', trigger: 'blur' }],
|
||||||
|
contractSignedTime: [{ required: true, message: '签订时间不能为空', trigger: 'blur' }],
|
||||||
|
businessId: [{ required: true, message: '关联业务线不能为空', trigger: 'blur' }],
|
||||||
|
businessType: [{ required: true, message: '业务类型不能为空', trigger: 'change' }],
|
||||||
|
declarationTime: [{ required: true, message: '申报时间不能为空', trigger: 'blur' }]
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.baseinfo_a {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,83 @@
|
|||||||
|
<template>
|
||||||
|
<div class="deliveryinfo_a">
|
||||||
|
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px" v-loading="formLoading" size="large"
|
||||||
|
label-position="top">
|
||||||
|
<el-row justify="start" style="flex-wrap: wrap;" :gutter="50">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="交货时间" prop="deliveryTime">
|
||||||
|
<el-date-picker v-model="formData.deliveryTime" type="date" value-format="x" placeholder="选择日期范围"
|
||||||
|
style="width: 100%;" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="交货方式" prop="deliveryModel">
|
||||||
|
<el-select v-model="formData.deliveryModel" placeholder="交货方式" style="width: 100%;">
|
||||||
|
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.CONTRACT_DELIVERY_MODEL)" :key="dict.value"
|
||||||
|
:label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="交货地点" prop="deliveryLocation">
|
||||||
|
<el-input v-model="formData.deliveryLocation" placeholder="输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="运输方式" prop="modeTransport">
|
||||||
|
<el-select v-model="formData.modeTransport" placeholder="运输方式" style="width: 100%;">
|
||||||
|
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.CONTRACT_MODE_TRANSPORT)" :key="dict.value"
|
||||||
|
:label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="配送方式" prop="deliveryMethod">
|
||||||
|
<el-select v-model="formData.deliveryMethod" placeholder="配送方式" style="width: 100%;">
|
||||||
|
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.CONTRACT_DELIVERY_METHOD)" :key="dict.value"
|
||||||
|
:label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="费用承担主体" prop="costBearingMian">
|
||||||
|
<el-select v-model="formData.costBearingMian" placeholder="费用承担主体" style="width: 100%;">
|
||||||
|
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.CONTRACT_COST_MAIN)" :key="dict.value"
|
||||||
|
:label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts" name="DeliveryInfo_A">
|
||||||
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
|
const formLoading = ref(false) // 表单加载状态
|
||||||
|
|
||||||
|
const formData = ref({ // 表单数据
|
||||||
|
deliveryTime: undefined,
|
||||||
|
deliveryModel: undefined,
|
||||||
|
deliveryLocation: undefined,
|
||||||
|
modeTransport: undefined,
|
||||||
|
deliveryMethod: undefined,
|
||||||
|
costBearingMian: undefined,
|
||||||
|
})
|
||||||
|
|
||||||
|
const formRules = reactive({ // 验证规则
|
||||||
|
deliveryTime: [{ required: true, message: '交货时间不能为空', trigger: 'blur' }],
|
||||||
|
deliveryModel: [{ required: true, message: '交货方式不能为空', trigger: 'blur' }],
|
||||||
|
deliveryLocation: [{ required: true, message: '交货地点不能为空', trigger: 'blur' }],
|
||||||
|
modeTransport: [{ required: true, message: '运输方式不能为空', trigger: 'blur' }],
|
||||||
|
deliveryMethod: [{ required: true, message: '配送方式不能为空', trigger: 'blur' }],
|
||||||
|
costBearingMian: [{ required: true, message: '费用承担主体不能为空', trigger: 'blur' }],
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.deliveryinfo_a {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,131 @@
|
|||||||
|
<template>
|
||||||
|
<div class="extendinfo_a">
|
||||||
|
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px" v-loading="formLoading" size="large"
|
||||||
|
label-position="top">
|
||||||
|
<el-row justify="start" style="flex-wrap: wrap;" :gutter="50">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="长协合同" prop="contractAgreement">
|
||||||
|
<el-input v-model="formData.contractAgreement" placeholder="是否合同模版" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="安全协议" prop="securityProtocol">
|
||||||
|
<el-input v-model="formData.securityProtocol" placeholder="输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="是否招投标" prop="bidding">
|
||||||
|
<el-input v-model="formData.bidding" placeholder="是否招投标" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="扩展字段" prop="extendedField">
|
||||||
|
<el-input v-model="formData.extendedField" placeholder="扩展信息" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="合同标签" prop="contractLabel">
|
||||||
|
<!-- <el-input v-model="formData.contractLabel" placeholder="输入内容" /> -->
|
||||||
|
<el-select v-model="formData.contractLabel" multiple filterable allow-create default-first-option
|
||||||
|
:reserve-keyword="false" placeholder="合同标签" style="width: 100%;">
|
||||||
|
<el-option v-for="item in labelList" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="合同要求" prop="contractRequirement">
|
||||||
|
<el-input v-model="formData.contractRequirement" type="textarea" placeholder="输入内容" :rows="10" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="备注一" prop="remark">
|
||||||
|
<el-input v-model="formData.remark" type="textarea" placeholder="输入内容" :rows="10" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="备注二" prop="remark2">
|
||||||
|
<el-input v-model="formData.remark2" type="textarea" placeholder="输入内容" :rows="10" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="() => console.log(formData)">提交</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts" name="ExtendInfo_A">
|
||||||
|
import { Select } from '@element-plus/icons-vue'
|
||||||
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
|
// const props = defineProps({
|
||||||
|
// contractId: {
|
||||||
|
// type: Number,
|
||||||
|
// require: false,
|
||||||
|
// default: 10001
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
// const selectMainBodyInfo = (index) => {
|
||||||
|
// console.log(index);
|
||||||
|
// }
|
||||||
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
|
const formLoading = ref(false) // 表单加载状态
|
||||||
|
|
||||||
|
const formData = ref({ // 表单数据
|
||||||
|
contractAgreement: undefined,
|
||||||
|
securityProtocol: undefined,
|
||||||
|
extendedField: undefined,
|
||||||
|
bidding: undefined,
|
||||||
|
contractLabel: undefined,
|
||||||
|
contractRequirement: undefined,
|
||||||
|
remark: undefined,
|
||||||
|
remark2: undefined,
|
||||||
|
})
|
||||||
|
|
||||||
|
const formRules = reactive({ // 验证规则
|
||||||
|
contractAgreement: [{ required: true, message: '长协合同未选择', trigger: 'blur' }],
|
||||||
|
securityProtocol: [{ required: true, message: '安全协议不能为空', trigger: 'blur' }],
|
||||||
|
bidding: [{ required: false, message: '是否招投标未选择', trigger: 'blur' }],
|
||||||
|
extendedField: [{ required: false, message: '扩展信息不能为空', trigger: 'blur' }],
|
||||||
|
contractLabel: [{ required: false, message: '合同标签不能为空', trigger: 'blur' }],
|
||||||
|
contractRequirement: [{ required: true, message: '合同要求不能为空', trigger: 'blur' }],
|
||||||
|
remark: [{ required: false, message: '备注一不能为空', trigger: 'blur' }],
|
||||||
|
remark2: [{ required: false, message: '备注一不能为空', trigger: 'change' }],
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const labelList = reactive(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
value: '1',
|
||||||
|
label: '标签1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '2',
|
||||||
|
label: '标签2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '3',
|
||||||
|
label: '标签1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '4',
|
||||||
|
label: '标签4',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '5',
|
||||||
|
label: '标签5',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.extendinfo_a {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,159 @@
|
|||||||
|
<template>
|
||||||
|
<div class="financeinfo_a">
|
||||||
|
<el-form ref="formRef2" :model="formData2" :rules="formRules2" v-loading="formLoading2"
|
||||||
|
size="large">
|
||||||
|
<el-row justify="center" :gutter="50">
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-card class="box-card">
|
||||||
|
<el-table :data="tableData" stripe style="width: 100%" size="large" fit :cell-style="{'padding': '24px 0 0 0'}">
|
||||||
|
<el-table-column prop="mainName" label="主体">
|
||||||
|
<template #default>
|
||||||
|
<el-form-item prop="mainName">
|
||||||
|
<el-tooltip class="box-item" effect="dark" :content="formData2.mainName"
|
||||||
|
:visible="formData2.mainName.trim().length > 0" placement="top">
|
||||||
|
<el-input v-model="formData2.mainName" placeholder="主体" />
|
||||||
|
</el-tooltip>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="paymentMethod" label="付款方式">
|
||||||
|
<template #default>
|
||||||
|
<el-form-item prop="paymentMethod">
|
||||||
|
<el-input v-model="formData2.paymentMethod" placeholder="付款方式" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="cooperationMethod" label="合作方式">
|
||||||
|
<template #default>
|
||||||
|
<el-form-item prop="cooperationMethod">
|
||||||
|
<el-input v-model="formData2.cooperationMethod" placeholder="合作方式" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="settlementMethod" label="结算方式">
|
||||||
|
<template #default>
|
||||||
|
<el-form-item prop="settlementMethod">
|
||||||
|
<el-input v-model="formData2.settlementMethod" placeholder="结算方式" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="advanceRatio" label="预付比例">
|
||||||
|
<template #default>
|
||||||
|
<el-form-item prop="advanceRatio">
|
||||||
|
<el-input v-model="formData2.advanceRatio" placeholder="预付比例" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="underpaymentMethod" label="压款方式">
|
||||||
|
<template #default>
|
||||||
|
<el-form-item prop="underpaymentMethod">
|
||||||
|
<el-input v-model="formData2.underpaymentMethod" placeholder="压款方式" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="depositMethod" label="保证金方式">
|
||||||
|
<template #default>
|
||||||
|
<el-form-item prop="depositMethod">
|
||||||
|
<el-input v-model="formData2.depositMethod" placeholder="保证金方式" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="overdueInterestRate" label="逾期利率">
|
||||||
|
<template #default>
|
||||||
|
<el-form-item prop="overdueInterestRate">
|
||||||
|
<el-input v-model="formData2.overdueInterestRate" placeholder="逾期利率" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
<div style="height: 30px;" content="gap"></div>
|
||||||
|
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px" v-loading="formLoading" size="large"
|
||||||
|
label-position="top">
|
||||||
|
<el-row justify="start" style="flex-wrap: wrap;" :gutter="50">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="合计金额(人民币)" prop="totalAmount">
|
||||||
|
<el-input v-model="formData.totalAmount" placeholder="自动计算" disabled>
|
||||||
|
<template #append>元</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="大写金额(人民币) " prop="amountCapitalization">
|
||||||
|
<el-input v-model="formData.amountCapitalization" placeholder="自动编写" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts" name="FinanceInfo_A">
|
||||||
|
import { Select } from '@element-plus/icons-vue'
|
||||||
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
contractId: {
|
||||||
|
type: Number,
|
||||||
|
require: false,
|
||||||
|
default: 10001
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const tableData = reactive([
|
||||||
|
{
|
||||||
|
mainBody: '甲方',
|
||||||
|
mainBodyType: 1, // 甲方
|
||||||
|
contractId: props.contractId,
|
||||||
|
mainName: "--",
|
||||||
|
representativeName: "--",
|
||||||
|
socialUnifiedInformationCode: "--",
|
||||||
|
updateTime: "--"
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
const formRef = ref() // 表单 Ref
|
||||||
|
const formLoading = ref(false) // 表单加载状态
|
||||||
|
const formData = ref({ // 表单数据
|
||||||
|
totalAmount: undefined,
|
||||||
|
amountCapitalization: undefined,
|
||||||
|
});
|
||||||
|
|
||||||
|
const formRules = reactive({ // 验证规则
|
||||||
|
totalAmount: [{ required: true, message: '合计金额不能为空', trigger: 'blur' }],
|
||||||
|
amountCapitalization: [{ required: true, message: '大写金额不能为空', trigger: 'blur' }],
|
||||||
|
})
|
||||||
|
|
||||||
|
const formRef2 = ref() // 表单 Ref
|
||||||
|
const formLoading2 = ref(false) // 表单加载状态
|
||||||
|
const formData2 = ref({ // 表单数据
|
||||||
|
mainName: '',
|
||||||
|
paymentMethod: undefined,
|
||||||
|
cooperationMethod: undefined,
|
||||||
|
settlementMethod: undefined,
|
||||||
|
advanceRatio: undefined,
|
||||||
|
accountPeriod: undefined,
|
||||||
|
underpaymentMethod: undefined,
|
||||||
|
depositMethod: undefined,
|
||||||
|
overdueInterestRate: undefined,
|
||||||
|
})
|
||||||
|
const formRules2 = reactive({ // 验证规则
|
||||||
|
mainName: [{ required: true, message: '主体名称不能为空', trigger: 'blur' }],
|
||||||
|
paymentMethod: [{ required: true, message: '付款方式不能为空', trigger: 'blur' }],
|
||||||
|
cooperationMethod: [{ required: true, message: '合作方式不能为空', trigger: 'blur' }],
|
||||||
|
settlementMethod: [{ required: true, message: '结算方式不能为空', trigger: 'blur' }],
|
||||||
|
advanceRatio: [{ required: true, message: '预付比例不能为空', trigger: 'blur' }],
|
||||||
|
accountPeriod: [{ required: true, message: '账期不能为空', trigger: 'blur' }],
|
||||||
|
underpaymentMethod: [{ required: true, message: '压款方式不能为空', trigger: 'blur' }],
|
||||||
|
depositMethod: [{ required: true, message: '保证金方式不能为空', trigger: 'change' }],
|
||||||
|
overdueInterestRate: [{ required: true, message: '逾期利率不能为空', trigger: 'blur' }]
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.financeinfo_a {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,141 @@
|
|||||||
|
<template>
|
||||||
|
<div class="paymentnodes_a">
|
||||||
|
<el-card class="box-card">
|
||||||
|
<el-form :model="formData" ref="formRef" :rules="formRules" v-loading="formLoading" size="large">
|
||||||
|
<el-table :data="formData.dataList" stripe style="width: 100%" size="large" fit empty-text="暂无节点信息" @current-change="changeRowIndex">
|
||||||
|
<el-table-column prop="paymentNode" label="收付款节点" width="180" class-name="cellstyle">
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<!-- {{$index}} -->
|
||||||
|
<el-form-item :prop="'dataList.'+ $index + '.paymentNode'" :rules="formRules.paymentNode">
|
||||||
|
<el-input v-model="row.paymentNode" placeholder="主体" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="paymentMethod" label="收付款方式" width="180" class-name="cellstyle">
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="'dataList.'+ $index + '.paymentMethod'" :rules="formRules.paymentMethod">
|
||||||
|
<el-input v-model="row.paymentMethod" placeholder="收付款方式" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="paymentRatio" label="付款比例" width="180" class-name="cellstyle">
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="'dataList.'+ $index + '.paymentRatio'" :rules="formRules.paymentRatio">
|
||||||
|
<el-input v-model="row.paymentRatio" placeholder="付款比例" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="price" label="金额" width="180" class-name="cellstyle">
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="'dataList.'+ $index + '.price'" :rules="formRules.price">
|
||||||
|
<el-input v-model="row.price" placeholder="金额" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="remark" label="备注" class-name="cellstyle">
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="'dataList.'+ $index + '.remark'" :rules="formRules.remark">
|
||||||
|
<el-input v-model="row.remark" placeholder="备注" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" width="150px" fixed="left">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" @click="deletePaymentNote(scope.index)">
|
||||||
|
<el-icon>
|
||||||
|
<Delete />
|
||||||
|
</el-icon> 删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-form>
|
||||||
|
<div class="add" @click="addPaymentNote">
|
||||||
|
<el-button link type="primary">
|
||||||
|
<el-icon>
|
||||||
|
<CirclePlus />
|
||||||
|
</el-icon>
|
||||||
|
<span style="margin-left: 5px;">添加节点</span>
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts" name="PaymentNodes_A">
|
||||||
|
import { Delete, CirclePlus } from '@element-plus/icons-vue'
|
||||||
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
contractId: {
|
||||||
|
type: Number,
|
||||||
|
require: false,
|
||||||
|
default: 10001
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const formRef = ref() // 表单 Ref
|
||||||
|
const formLoading = ref(false) // 表单加载状态
|
||||||
|
const formData = ref({ // 表单数据
|
||||||
|
dataList: [
|
||||||
|
{
|
||||||
|
contractId: props.contractId,
|
||||||
|
paymentNode: '12345',
|
||||||
|
paymentMethod: '',
|
||||||
|
paymentRatio: '',
|
||||||
|
price: '',
|
||||||
|
remark: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
contractId: props.contractId,
|
||||||
|
paymentNode: '',
|
||||||
|
paymentMethod: '',
|
||||||
|
paymentRatio: '',
|
||||||
|
price: '',
|
||||||
|
remark: '',
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const formRules = reactive({ // 验证规则
|
||||||
|
paymentNode: [{ required: true, message: '收付款节点不能为空', trigger: 'blur' }],
|
||||||
|
paymentMethod: [{ required: true, message: '收付款方式不能为空', trigger: 'blur' }],
|
||||||
|
paymentRatio: [{ required: false, message: '付款比例不能为空', trigger: 'blur' }],
|
||||||
|
price: [{ required: true, message: '金额不能为空', trigger: 'blur' }],
|
||||||
|
remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }],
|
||||||
|
})
|
||||||
|
|
||||||
|
const deletePaymentNote = (index) => {
|
||||||
|
console.log(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
const addPaymentNote = () => {
|
||||||
|
console.log(123456);
|
||||||
|
}
|
||||||
|
|
||||||
|
const changeRowIndex = (currentRow, oldCurrentRow) => {
|
||||||
|
console.log(currentRow, oldCurrentRow);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.paymentnodes_a {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.add {
|
||||||
|
cursor: pointer;
|
||||||
|
margin-top: 20px;
|
||||||
|
border: 1px dashed #999;
|
||||||
|
height: 40px;
|
||||||
|
font-size: 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep(td.cellstyle) {
|
||||||
|
padding: 24px 0 0 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,67 @@
|
|||||||
|
<template>
|
||||||
|
<div class="primaryinfo_a">
|
||||||
|
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px" v-loading="formLoading" size="large" label-position="top">
|
||||||
|
<el-row justify="start" style="flex-wrap: wrap;" :gutter="50">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="币种" prop="currency">
|
||||||
|
<el-input v-model="formData.currency" placeholder="请选择币种" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="采购模式" prop="procurementModel">
|
||||||
|
<el-input v-model="formData.procurementModel" placeholder="请选择采购模式" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<!-- <el-col :span="8">
|
||||||
|
<el-form-item label="关联销售合同" prop="contractName">
|
||||||
|
<el-input v-model="formData.contractName" placeholder="点击关联销售合同" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col> -->
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="定价模式" prop="pricingModel">
|
||||||
|
<el-input v-model="formData.pricingModel" placeholder="定价模式" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="关联供应商/客户" prop="subject">
|
||||||
|
<el-input v-model="formData.subject" placeholder="点击关联供应商/客户" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="合同期限" prop="contractPeriodTime">
|
||||||
|
<el-input v-model="formData.contractPeriodTime" placeholder="合同期限" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts" name="PrimaryInfo_A">
|
||||||
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
|
const formLoading = ref(false) // 表单加载状态
|
||||||
|
|
||||||
|
const formData = ref({ // 表单数据
|
||||||
|
currency: undefined,
|
||||||
|
procurementModel: undefined,
|
||||||
|
pricingModel: undefined,
|
||||||
|
subject: undefined,
|
||||||
|
contractPeriodTime: undefined,
|
||||||
|
})
|
||||||
|
|
||||||
|
const formRules = reactive({ // 验证规则
|
||||||
|
currency: [{ required: true, message: '交易币种不能为空', trigger: 'blur' }],
|
||||||
|
procurementModel: [{ required: true, message: '采购模式不能为空', trigger: 'blur' }],
|
||||||
|
pricingModel: [{ required: true, message: '定价模式不能为空', trigger: 'blur' }],
|
||||||
|
subject: [{ required: true, message: '关联供应商/客户不能为空', trigger: 'blur' }],
|
||||||
|
contractPeriodTime: [{ required: true, message: '合同期限不能为空', trigger: 'blur' }],
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.primaryinfo_a {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,149 @@
|
|||||||
|
<template>
|
||||||
|
<div class="procure-contract">
|
||||||
|
<div class="item-area">
|
||||||
|
<div class="title">
|
||||||
|
<span class="lc"></span>
|
||||||
|
<span class="lh">基本信息</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<BaseInfo_A @setContractId="genContractId"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item-area">
|
||||||
|
<div class="title">
|
||||||
|
<span class="lc"></span>
|
||||||
|
<span class="lh">主体信息</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<!-- <SubjectInfo_A :contract-id="contractId"/> -->
|
||||||
|
<SubjectInfo_A />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item-area">
|
||||||
|
<div class="title">
|
||||||
|
<span class="lc"></span>
|
||||||
|
<span class="lh">合同信息</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<PrimaryInfo_A />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item-area">
|
||||||
|
<div class="title">
|
||||||
|
<span class="lc"></span>
|
||||||
|
<span class="lh">交货信息</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<DeliveryInfo_A />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item-area">
|
||||||
|
<div class="title">
|
||||||
|
<span class="lc"></span>
|
||||||
|
<span class="lh">商品明细</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<CommodityList_A />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item-area">
|
||||||
|
<div class="title">
|
||||||
|
<span class="lc"></span>
|
||||||
|
<span class="lh">财务信息</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<FinanceInfo_A />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="item-area">
|
||||||
|
<div class="title">
|
||||||
|
<span class="lc"></span>
|
||||||
|
<span class="lh">付款节点</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<PaymentNodes_A />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item-area">
|
||||||
|
<div class="title">
|
||||||
|
<span class="lc"></span>
|
||||||
|
<span class="lh">附件信息</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<AnnexInfo_A />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item-area">
|
||||||
|
<div class="title">
|
||||||
|
<span class="lc"></span>
|
||||||
|
<span class="lh">其他信息</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<ExtendInfo_A />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts" name="ProcureContract">
|
||||||
|
import BaseInfo_A from './BaseInfo_A.vue'
|
||||||
|
import SubjectInfo_A from './SubjectInfo_A.vue'
|
||||||
|
import PrimaryInfo_A from './PrimaryInfo_A.vue'
|
||||||
|
import DeliveryInfo_A from './DeliveryInfo_A.vue'
|
||||||
|
import CommodityList_A from './CommodityList_A.vue'
|
||||||
|
import FinanceInfo_A from './FinanceInfo_A.vue'
|
||||||
|
import PaymentNodes_A from './PaymentNodes_A.vue'
|
||||||
|
import AnnexInfo_A from './AnnexInfo_A.vue'
|
||||||
|
import ExtendInfo_A from './ExtendInfo_A.vue'
|
||||||
|
|
||||||
|
// 合同编号
|
||||||
|
const contractId = ref<number>(0);
|
||||||
|
|
||||||
|
const genContractId = (cid) => {
|
||||||
|
contractId.value = cid;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.procure-contract {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.item-area {
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 50px;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.lc {
|
||||||
|
width: 8px;
|
||||||
|
height: 16px;
|
||||||
|
background-color: #409eff;
|
||||||
|
margin-right: 10px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lh {
|
||||||
|
color: #666;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 700;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,148 @@
|
|||||||
|
<template>
|
||||||
|
<div class="subjectinfo_a">
|
||||||
|
<!-- <el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px" v-loading="formLoading" size="large" label-position="top">
|
||||||
|
<el-row justify="center" style="flex-wrap: wrap;" :gutter="50">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="合同模版" prop="contractTemplateId">
|
||||||
|
<el-input v-model="formData.contractTemplateId" placeholder="请选择合同模版" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="合同编号" prop="contractNumber">
|
||||||
|
<el-input v-model="formData.contractNumber" placeholder="点击后生成合同编号" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="合同名称" prop="contractName">
|
||||||
|
<el-input v-model="formData.contractName" placeholder="请输入合同名称" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="对方合同编号" prop="contractNo">
|
||||||
|
<el-input v-model="formData.contractNo" placeholder="请输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="签订地点" prop="contractSigned">
|
||||||
|
<el-input v-model="formData.contractSigned" placeholder="请输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="签订时间" prop="contractSignedTime">
|
||||||
|
<el-input v-model="formData.contractSignedTime" placeholder="选择日期" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="关联业务线" prop="businessId">
|
||||||
|
<el-select v-model="formData.businessId" placeholder="请选择业务类型" style="width: 100%;">
|
||||||
|
<el-option label="业务线" value="1">业务线1</el-option>
|
||||||
|
<el-option label="业务线" value="2">业务线2</el-option>
|
||||||
|
<el-option label="业务线" value="3">业务线3</el-option>
|
||||||
|
<el-option label="业务线" value="4">业务线4</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="业务类型" prop="businessType">
|
||||||
|
<el-select v-model="formData.businessType" placeholder="请选择业务类型" style="width: 100%;">
|
||||||
|
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.CONTRACT_BUSINESS_TYPE)" :key="dict.value"
|
||||||
|
:label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="申报时间" prop="declarationTime">
|
||||||
|
<el-date-picker v-model="formData.declarationTime" type="date" value-format="x" placeholder="选择申报时间"
|
||||||
|
style="width: 100%;" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form> -->
|
||||||
|
<el-card class="box-card">
|
||||||
|
<el-table :data="tableData" stripe style="width: 100%" size="large" fit>
|
||||||
|
<el-table-column prop="mainBody" label="主体" width="180" />
|
||||||
|
<el-table-column prop="mainName" label="主体名称" />
|
||||||
|
<el-table-column prop="representativeName" label="法定代表人" />
|
||||||
|
<el-table-column prop="socialUnifiedInformationCode" label="社会统一信息代码" />
|
||||||
|
<el-table-column prop="updateTime" label="更新时间" width="180" />
|
||||||
|
<el-table-column label="操作" align="center" width="150px" fixed="right">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" @click="selectMainBodyInfo(scope.index)">
|
||||||
|
<el-icon><Select /></el-icon> 选取
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts" name="SubjectInfo_A">
|
||||||
|
import { Select } from '@element-plus/icons-vue'
|
||||||
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
contractId: {
|
||||||
|
type: Number,
|
||||||
|
require: false,
|
||||||
|
default: 10001
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const tableData = reactive([
|
||||||
|
{
|
||||||
|
mainBody: '甲方',
|
||||||
|
mainBodyType: 1, // 甲方
|
||||||
|
contractId: props.contractId,
|
||||||
|
mainName: "--",
|
||||||
|
representativeName: "--",
|
||||||
|
socialUnifiedInformationCode: "--",
|
||||||
|
updateTime: "--"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
mainBody: '乙方',
|
||||||
|
mainBodyType: 2, // 乙方
|
||||||
|
contractId: props.contractId,
|
||||||
|
mainName: "--",
|
||||||
|
representativeName: "--",
|
||||||
|
socialUnifiedInformationCode: "--",
|
||||||
|
updateTime: "--"
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
const selectMainBodyInfo = (index) => {
|
||||||
|
console.log(index);
|
||||||
|
}
|
||||||
|
// const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
|
// const formLoading = ref(false) // 表单加载状态
|
||||||
|
|
||||||
|
// const formData = ref({ // 表单数据
|
||||||
|
// contractTemplateId: undefined,
|
||||||
|
// contractNumber: undefined,
|
||||||
|
// contractName: undefined,
|
||||||
|
// contractNo: undefined,
|
||||||
|
// contractSigned: undefined,
|
||||||
|
// contractSignedTime: undefined,
|
||||||
|
// businessId: undefined,
|
||||||
|
// businessType: undefined,
|
||||||
|
// declarationTime: undefined
|
||||||
|
// })
|
||||||
|
|
||||||
|
// const formRules = reactive({ // 验证规则
|
||||||
|
// contractTemplateId: [{ required: true, message: '合同模板未选择', trigger: 'blur' }],
|
||||||
|
// contractNumber: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }],
|
||||||
|
// contractName: [{ required: true, message: '合同名称不能为空', trigger: 'blur' }],
|
||||||
|
// contractNo: [{ required: false, message: '对方合同编号不能为空', trigger: 'blur' }],
|
||||||
|
// contractSigned: [{ required: true, message: '签订地点不能为空', trigger: 'blur' }],
|
||||||
|
// contractSignedTime: [{ required: true, message: '签订时间不能为空', trigger: 'blur' }],
|
||||||
|
// businessId: [{ required: true, message: '关联业务线不能为空', trigger: 'blur' }],
|
||||||
|
// businessType: [{ required: true, message: '业务类型不能为空', trigger: 'change' }],
|
||||||
|
// declarationTime: [{ required: true, message: '申报时间不能为空', trigger: 'blur' }]
|
||||||
|
// })
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.subjectinfo_a {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in new issue