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