库区,仓储,工艺页面
This commit is contained in:
parent
1eb9857142
commit
1e5fe980b4
@ -47,5 +47,6 @@ public class CheckItemPageReqVO extends PageParam {
|
|||||||
|
|
||||||
@Schema(description = "打印是否取平均值")
|
@Schema(description = "打印是否取平均值")
|
||||||
private String printAvgValues;
|
private String printAvgValues;
|
||||||
|
@Schema(description = "编号")
|
||||||
|
private String itemNo;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -79,4 +79,12 @@ public class ProcController {
|
|||||||
return success(procService.getProcDropdown(keyWord));
|
return success(procService.getProcDropdown(keyWord));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 下拉框
|
||||||
|
@GetMapping("/getProcList")
|
||||||
|
@Operation(summary = "获得工序不分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('biz:proc:query')")
|
||||||
|
public CommonResult<List<ProcRespVO>> getProcList() {
|
||||||
|
return success(procService.getProcList());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,5 +38,7 @@ public class ProcRespVO {
|
|||||||
@Schema(description = "备注", example = "你猜")
|
@Schema(description = "备注", example = "你猜")
|
||||||
@ExcelProperty("备注")
|
@ExcelProperty("备注")
|
||||||
private String remark;
|
private String remark;
|
||||||
|
private String creatorName;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,95 @@
|
|||||||
|
package com.ningxia.yunxi.chemmes.module.biz.controller.admin.storearea;
|
||||||
|
|
||||||
|
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.ningxia.yunxi.chemmes.framework.common.pojo.PageParam;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils;
|
||||||
|
import static com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.excel.core.util.ExcelUtils;
|
||||||
|
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.operatelog.core.annotations.OperateLog;
|
||||||
|
import static com.ningxia.yunxi.chemmes.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||||
|
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.storearea.vo.*;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.storearea.StoreAreaDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.service.storearea.StoreAreaService;
|
||||||
|
|
||||||
|
@Tag(name = "管理后台 - 库区主数据")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/biz/store-area")
|
||||||
|
@Validated
|
||||||
|
public class StoreAreaController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private StoreAreaService storeAreaService;
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@Operation(summary = "创建库区主数据")
|
||||||
|
@PreAuthorize("@ss.hasPermission('biz:store-area:create')")
|
||||||
|
public CommonResult<Integer> createStoreArea(@Valid @RequestBody StoreAreaSaveReqVO createReqVO) {
|
||||||
|
return success(storeAreaService.createStoreArea(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@Operation(summary = "更新库区主数据")
|
||||||
|
@PreAuthorize("@ss.hasPermission('biz:store-area:update')")
|
||||||
|
public CommonResult<Boolean> updateStoreArea(@Valid @RequestBody StoreAreaSaveReqVO updateReqVO) {
|
||||||
|
storeAreaService.updateStoreArea(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除库区主数据")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('biz:store-area:delete')")
|
||||||
|
public CommonResult<Boolean> deleteStoreArea(@RequestParam("id") Integer id) {
|
||||||
|
storeAreaService.deleteStoreArea(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@Operation(summary = "获得库区主数据")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
@PreAuthorize("@ss.hasPermission('biz:store-area:query')")
|
||||||
|
public CommonResult<StoreAreaRespVO> getStoreArea(@RequestParam("id") Integer id) {
|
||||||
|
StoreAreaDO storeArea = storeAreaService.getStoreArea(id);
|
||||||
|
return success(BeanUtils.toBean(storeArea, StoreAreaRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@Operation(summary = "获得库区主数据分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('biz:store-area:query')")
|
||||||
|
public CommonResult<PageResult<StoreAreaRespVO>> getStoreAreaPage(@Valid StoreAreaPageReqVO pageReqVO) {
|
||||||
|
PageResult<StoreAreaDO> pageResult = storeAreaService.getStoreAreaPage(pageReqVO);
|
||||||
|
return success(BeanUtils.toBean(pageResult, StoreAreaRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/export-excel")
|
||||||
|
@Operation(summary = "导出库区主数据 Excel")
|
||||||
|
@PreAuthorize("@ss.hasPermission('biz:store-area:export')")
|
||||||
|
@OperateLog(type = EXPORT)
|
||||||
|
public void exportStoreAreaExcel(@Valid StoreAreaPageReqVO pageReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
|
List<StoreAreaDO> list = storeAreaService.getStoreAreaPage(pageReqVO).getList();
|
||||||
|
// 导出 Excel
|
||||||
|
ExcelUtils.write(response, "库区主数据.xls", "数据", StoreAreaRespVO.class,
|
||||||
|
BeanUtils.toBean(list, StoreAreaRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
package com.ningxia.yunxi.chemmes.module.biz.controller.admin.storearea.vo;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static com.ningxia.yunxi.chemmes.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 StoreAreaPageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@Schema(description = "创建人", example = "32562")
|
||||||
|
private String fCreatorUserId;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
|
@Schema(description = "库区编码")
|
||||||
|
private String storeAreCd;
|
||||||
|
|
||||||
|
@Schema(description = "库区名称", example = "芋艿")
|
||||||
|
private String storeAreaName;
|
||||||
|
|
||||||
|
@Schema(description = "状态(1启用 2 未启用)", example = "1")
|
||||||
|
private Integer enabledStatus;
|
||||||
|
|
||||||
|
@Schema(description = "备注", example = "你说的对")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@Schema(description = "仓库id", example = "23515")
|
||||||
|
private Integer storeHouseId;
|
||||||
|
|
||||||
|
@Schema(description = "仓库类型(1 原料库 2 在制品库 3 成品库)", example = "1")
|
||||||
|
private String storeType;
|
||||||
|
@Schema(description = "仓库名称")
|
||||||
|
private String storeHouseName;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
package com.ningxia.yunxi.chemmes.module.biz.controller.admin.storearea.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.*;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.alibaba.excel.annotation.*;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.excel.core.annotations.DictFormat;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.excel.core.convert.DictConvert;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 库区主数据 Response VO")
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class StoreAreaRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "自增字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "5665")
|
||||||
|
@ExcelProperty("自增字段")
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@Schema(description = "创建人", example = "32562")
|
||||||
|
@ExcelProperty("创建人")
|
||||||
|
private String fCreatorUserId;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@ExcelProperty("创建时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
@Schema(description = "库区编码")
|
||||||
|
@ExcelProperty("库区编码")
|
||||||
|
private String storeAreCd;
|
||||||
|
|
||||||
|
@Schema(description = "库区名称", example = "芋艿")
|
||||||
|
@ExcelProperty("库区名称")
|
||||||
|
private String storeAreaName;
|
||||||
|
|
||||||
|
@Schema(description = "状态(1启用 2 未启用)", example = "1")
|
||||||
|
@ExcelProperty(value = "状态(1启用 2 未启用)", converter = DictConvert.class)
|
||||||
|
@DictFormat("system_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
|
||||||
|
private Integer enabledStatus;
|
||||||
|
|
||||||
|
@Schema(description = "备注", example = "你说的对")
|
||||||
|
@ExcelProperty("备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@Schema(description = "仓库id", example = "23515")
|
||||||
|
@ExcelProperty("仓库id")
|
||||||
|
private Integer storeHouseId;
|
||||||
|
|
||||||
|
@Schema(description = "仓库类型(1 原料库 2 在制品库 3 成品库)", example = "1")
|
||||||
|
@ExcelProperty("仓库类型(1 原料库 2 在制品库 3 成品库)")
|
||||||
|
private String storeType;
|
||||||
|
|
||||||
|
private String storeHouseName;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
package com.ningxia.yunxi.chemmes.module.biz.controller.admin.storearea.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 库区主数据新增/修改 Request VO")
|
||||||
|
@Data
|
||||||
|
public class StoreAreaSaveReqVO {
|
||||||
|
|
||||||
|
@Schema(description = "自增字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "5665")
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@Schema(description = "创建人", example = "32562")
|
||||||
|
private String fCreatorUserId;
|
||||||
|
|
||||||
|
@Schema(description = "库区编码")
|
||||||
|
private String storeAreCd;
|
||||||
|
|
||||||
|
@Schema(description = "库区名称", example = "芋艿")
|
||||||
|
private String storeAreaName;
|
||||||
|
|
||||||
|
@Schema(description = "状态(1启用 2 未启用)", example = "1")
|
||||||
|
private Integer enabledStatus;
|
||||||
|
|
||||||
|
@Schema(description = "备注", example = "你说的对")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@Schema(description = "仓库id", example = "23515")
|
||||||
|
private Integer storeHouseId;
|
||||||
|
|
||||||
|
@Schema(description = "仓库类型(1 原料库 2 在制品库 3 成品库)", example = "1")
|
||||||
|
private String storeType;
|
||||||
|
|
||||||
|
}
|
||||||
@ -91,5 +91,14 @@ public class StoreHouseController {
|
|||||||
ExcelUtils.write(response, "仓储主数据.xls", "数据", StoreHouseRespVO.class,
|
ExcelUtils.write(response, "仓储主数据.xls", "数据", StoreHouseRespVO.class,
|
||||||
BeanUtils.toBean(list, StoreHouseRespVO.class));
|
BeanUtils.toBean(list, StoreHouseRespVO.class));
|
||||||
}
|
}
|
||||||
|
@GetMapping("/get-store-house-select")
|
||||||
|
@Operation(summary = "获得仓储下拉框数据")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
@PreAuthorize("@ss.hasPermission('biz:store-house:query')")
|
||||||
|
public CommonResult<List<StoreHouseRespVO>> getStoreHouseSelect() {
|
||||||
|
List<StoreHouseDO> list = storeHouseService.getStoreHouseSelect();
|
||||||
|
return success(BeanUtils.toBean(list, StoreHouseRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -21,4 +21,7 @@ public class StoreHousePageReqVO extends PageParam {
|
|||||||
@Schema(description = "状态(1启用 2 未启用)", example = "1")
|
@Schema(description = "状态(1启用 2 未启用)", example = "1")
|
||||||
private Integer enabledStatus;
|
private Integer enabledStatus;
|
||||||
|
|
||||||
|
private String storeType;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -35,5 +35,7 @@ public class TechProcRespVO {
|
|||||||
@Schema(description = "备注", example = "你猜")
|
@Schema(description = "备注", example = "你猜")
|
||||||
@ExcelProperty("备注")
|
@ExcelProperty("备注")
|
||||||
private String remark;
|
private String remark;
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1,5 +1,6 @@
|
|||||||
package com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.checkitem;
|
package com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.checkitem;
|
||||||
|
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDOWithoutLogic;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -20,7 +21,7 @@ import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDO;
|
|||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class CheckItemDO extends BaseDO {
|
public class CheckItemDO extends BaseDOWithoutLogic {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自增字段
|
* 自增字段
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.proc;
|
package com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.proc;
|
||||||
|
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.proc.vo.ProcRespVO;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -45,5 +46,7 @@ public class ProcDO extends BaseDO {
|
|||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
private String remark;
|
private String remark;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String creatorName;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
package com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.storearea;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库区主数据 DO
|
||||||
|
*
|
||||||
|
* @author 管理员
|
||||||
|
*/
|
||||||
|
@TableName("tba_store_area")
|
||||||
|
@KeySequence("tba_store_area_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class StoreAreaDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自增字段
|
||||||
|
*/
|
||||||
|
@TableId
|
||||||
|
private Integer id;
|
||||||
|
/**
|
||||||
|
* 库区编码
|
||||||
|
*/
|
||||||
|
private String storeAreCd;
|
||||||
|
/**
|
||||||
|
* 库区名称
|
||||||
|
*/
|
||||||
|
private String storeAreaName;
|
||||||
|
/**
|
||||||
|
* 状态(1启用 2 未启用)
|
||||||
|
*
|
||||||
|
* 枚举 {@link TODO system_status 对应的类}
|
||||||
|
*/
|
||||||
|
private Integer enabledStatus;
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
/**
|
||||||
|
* 仓库id
|
||||||
|
*/
|
||||||
|
private Integer storeHouseId;
|
||||||
|
/**
|
||||||
|
* 仓库类型(1 原料库 2 在制品库 3 成品库)
|
||||||
|
*/
|
||||||
|
private String storeType;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String storeHouseName;
|
||||||
|
|
||||||
|
}
|
||||||
@ -41,5 +41,7 @@ public class TechProcDO extends BaseDO {
|
|||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
private String remark;
|
private String remark;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -17,9 +17,25 @@ import com.ningxia.yunxi.chemmes.module.biz.controller.admin.checkitem.vo.*;
|
|||||||
@Mapper
|
@Mapper
|
||||||
public interface CheckItemMapper extends BaseMapperX<CheckItemDO> {
|
public interface CheckItemMapper extends BaseMapperX<CheckItemDO> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据检验项类型和名称统计数量(用于重复校验)
|
||||||
|
*
|
||||||
|
* @param itemType 适用类型
|
||||||
|
* @param itemName 检验项名称
|
||||||
|
* @param excludeId 排除的ID(更新时使用)
|
||||||
|
* @return 符合条件的记录数
|
||||||
|
*/
|
||||||
|
default Long selectCountByItemTypeAndItemName(String itemType, String itemName, Integer excludeId) {
|
||||||
|
return selectCount(new LambdaQueryWrapperX<CheckItemDO>()
|
||||||
|
.eq(CheckItemDO::getItemType, itemType)
|
||||||
|
.eq(CheckItemDO::getItemName, itemName)
|
||||||
|
.ne(excludeId != null, CheckItemDO::getId, excludeId));
|
||||||
|
}
|
||||||
|
|
||||||
default PageResult<CheckItemDO> selectPage(CheckItemPageReqVO reqVO) {
|
default PageResult<CheckItemDO> selectPage(CheckItemPageReqVO reqVO) {
|
||||||
return selectPage(reqVO, new LambdaQueryWrapperX<CheckItemDO>()
|
return selectPage(reqVO, new LambdaQueryWrapperX<CheckItemDO>()
|
||||||
.likeIfPresent(CheckItemDO::getItemName, reqVO.getItemName())
|
.likeIfPresent(CheckItemDO::getItemName, reqVO.getItemName())
|
||||||
|
.likeIfPresent(CheckItemDO::getItemNo,reqVO.getItemNo())
|
||||||
.eqIfPresent(CheckItemDO::getNature, reqVO.getNature())
|
.eqIfPresent(CheckItemDO::getNature, reqVO.getNature())
|
||||||
.likeIfPresent(CheckItemDO::getUnitName, reqVO.getUnitName())
|
.likeIfPresent(CheckItemDO::getUnitName, reqVO.getUnitName())
|
||||||
.eqIfPresent(CheckItemDO::getCheckMethod, reqVO.getCheckMethod())
|
.eqIfPresent(CheckItemDO::getCheckMethod, reqVO.getCheckMethod())
|
||||||
@ -31,7 +47,7 @@ public interface CheckItemMapper extends BaseMapperX<CheckItemDO> {
|
|||||||
.eqIfPresent(CheckItemDO::getTestNum, reqVO.getTestNum())
|
.eqIfPresent(CheckItemDO::getTestNum, reqVO.getTestNum())
|
||||||
.eqIfPresent(CheckItemDO::getFloatNum, reqVO.getFloatNum())
|
.eqIfPresent(CheckItemDO::getFloatNum, reqVO.getFloatNum())
|
||||||
.eqIfPresent(CheckItemDO::getPrintAvgValues, reqVO.getPrintAvgValues())
|
.eqIfPresent(CheckItemDO::getPrintAvgValues, reqVO.getPrintAvgValues())
|
||||||
.orderByDesc(CheckItemDO::getId));
|
.orderByDesc(CheckItemDO::getCreateTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -33,4 +33,9 @@ public interface InspPlanItemMapper extends BaseMapperX<InspPlanItemDO> {
|
|||||||
.orderByDesc(InspPlanItemDO::getId));
|
.orderByDesc(InspPlanItemDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default Long selectByItemIdCount(Integer id){
|
||||||
|
return selectCount(new LambdaQueryWrapperX<InspPlanItemDO>()
|
||||||
|
.eq(InspPlanItemDO::getItemId, id));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,13 @@
|
|||||||
package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.proc;
|
package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.proc;
|
||||||
|
|
||||||
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||||
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
||||||
import com.ningxia.yunxi.chemmes.framework.mybatis.core.mapper.BaseMapperX;
|
import com.ningxia.yunxi.chemmes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import com.ningxia.yunxi.chemmes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import com.ningxia.yunxi.chemmes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.proc.vo.ProcPageReqVO;
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.proc.vo.ProcPageReqVO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.proc.vo.ProcRespVO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.proc.ProcDO;
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.proc.ProcDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -35,4 +38,15 @@ public interface ProcMapper extends BaseMapperX<ProcDO> {
|
|||||||
|
|
||||||
default ProcDO selectByProcCd(String procCd) {
|
default ProcDO selectByProcCd(String procCd) {
|
||||||
return selectOne(ProcDO::getProcCd, procCd);
|
return selectOne(ProcDO::getProcCd, procCd);
|
||||||
}}
|
}
|
||||||
|
|
||||||
|
default List<ProcDO> getProcList(){
|
||||||
|
MPJLambdaWrapper<ProcDO> query = new MPJLambdaWrapper<>();
|
||||||
|
query.selectAll(ProcDO.class)
|
||||||
|
.select("u.nickname as creatorName")
|
||||||
|
.leftJoin(AdminUserDO.class,"u",AdminUserDO::getId,ProcDO::getCreator)
|
||||||
|
.eq(ProcDO::getEnabledStatus, 0)
|
||||||
|
.orderByAsc(ProcDO::getProcCd);
|
||||||
|
return selectList(query);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -0,0 +1,39 @@
|
|||||||
|
package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.storearea;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.storearea.StoreAreaDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.storehouse.StoreHouseDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.storearea.vo.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库区主数据 Mapper
|
||||||
|
*
|
||||||
|
* @author 管理员
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface StoreAreaMapper extends BaseMapperX<StoreAreaDO> {
|
||||||
|
|
||||||
|
default PageResult<StoreAreaDO> selectPage(StoreAreaPageReqVO reqVO) {
|
||||||
|
MPJLambdaWrapper<StoreAreaDO> query = new MPJLambdaWrapper<>();
|
||||||
|
query.selectAll(StoreAreaDO.class)
|
||||||
|
.select("s.store_house_name as storeHouseName")
|
||||||
|
.leftJoin(StoreHouseDO.class, "s",StoreHouseDO::getId,StoreAreaDO::getStoreHouseId)
|
||||||
|
.disableSubLogicDel();
|
||||||
|
query.eq(ObjectUtil.isNotEmpty( reqVO.getStoreType()),StoreAreaDO::getStoreType, reqVO.getStoreType());
|
||||||
|
query.like(ObjectUtil.isNotEmpty( reqVO.getStoreHouseName()),StoreHouseDO::getStoreHouseName, reqVO.getStoreHouseName());
|
||||||
|
query.eq(ObjectUtil.isNotEmpty( reqVO.getEnabledStatus()),StoreAreaDO::getEnabledStatus, reqVO.getEnabledStatus());
|
||||||
|
return selectPage(reqVO, query);
|
||||||
|
}
|
||||||
|
|
||||||
|
default Long selectByStoreAreCodeCount(String storeAreCd, Integer id){
|
||||||
|
return selectCount(new LambdaQueryWrapperX<StoreAreaDO>()
|
||||||
|
.eq(StoreAreaDO::getStoreAreCd, storeAreCd).ne(ObjectUtil.isNotEmpty(id),StoreAreaDO::getId,id));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,6 +2,7 @@ package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.storehouse;
|
|||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
||||||
import com.ningxia.yunxi.chemmes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import com.ningxia.yunxi.chemmes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import com.ningxia.yunxi.chemmes.framework.mybatis.core.mapper.BaseMapperX;
|
import com.ningxia.yunxi.chemmes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
@ -21,7 +22,17 @@ public interface StoreHouseMapper extends BaseMapperX<StoreHouseDO> {
|
|||||||
return selectPage(reqVO, new LambdaQueryWrapperX<StoreHouseDO>()
|
return selectPage(reqVO, new LambdaQueryWrapperX<StoreHouseDO>()
|
||||||
.likeIfPresent(StoreHouseDO::getStoreHouseName, reqVO.getStoreHouseName())
|
.likeIfPresent(StoreHouseDO::getStoreHouseName, reqVO.getStoreHouseName())
|
||||||
.eqIfPresent(StoreHouseDO::getEnabledStatus, reqVO.getEnabledStatus())
|
.eqIfPresent(StoreHouseDO::getEnabledStatus, reqVO.getEnabledStatus())
|
||||||
|
.eqIfPresent(StoreHouseDO::getStoreType, reqVO.getStoreType())
|
||||||
.orderByDesc(StoreHouseDO::getId));
|
.orderByDesc(StoreHouseDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default Long selectByStoreHouseCodeCount(String storeHouseCd,Integer id){
|
||||||
|
return selectCount(new LambdaQueryWrapperX<StoreHouseDO>()
|
||||||
|
.eq(StoreHouseDO::getStoreHouseCd, storeHouseCd).ne(ObjectUtil.isNotEmpty(id),StoreHouseDO::getId,id));
|
||||||
|
}
|
||||||
|
|
||||||
|
default List<StoreHouseDO> getStoreHouseSelect(){
|
||||||
|
return selectList(new LambdaQueryWrapperX<StoreHouseDO>()
|
||||||
|
.eq(StoreHouseDO::getEnabledStatus, 0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -1,11 +1,14 @@
|
|||||||
package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.techproc;
|
package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.techproc;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||||
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
||||||
import com.ningxia.yunxi.chemmes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
||||||
import com.ningxia.yunxi.chemmes.framework.mybatis.core.mapper.BaseMapperX;
|
import com.ningxia.yunxi.chemmes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.storearea.StoreAreaDO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.techproc.TechProcDO;
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.techproc.TechProcDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.techproc.vo.*;
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.techproc.vo.*;
|
||||||
|
|
||||||
@ -18,9 +21,21 @@ import com.ningxia.yunxi.chemmes.module.biz.controller.admin.techproc.vo.*;
|
|||||||
public interface TechProcMapper extends BaseMapperX<TechProcDO> {
|
public interface TechProcMapper extends BaseMapperX<TechProcDO> {
|
||||||
|
|
||||||
default PageResult<TechProcDO> selectPage(TechProcPageReqVO reqVO) {
|
default PageResult<TechProcDO> selectPage(TechProcPageReqVO reqVO) {
|
||||||
return selectPage(reqVO, new LambdaQueryWrapperX<TechProcDO>()
|
MPJLambdaWrapper<TechProcDO> query = new MPJLambdaWrapper<>();
|
||||||
.eqIfPresent(TechProcDO::getEnabledStatus, reqVO.getEnabledStatus())
|
query.selectAll(TechProcDO.class)
|
||||||
.orderByDesc(TechProcDO::getId));
|
.select("u.nickname as nickname")
|
||||||
|
.leftJoin(AdminUserDO.class, "u",AdminUserDO::getId,TechProcDO::getCreator)
|
||||||
|
.disableSubLogicDel();
|
||||||
|
query.eq(ObjectUtil.isNotEmpty( reqVO.getEnabledStatus()),TechProcDO::getEnabledStatus, reqVO.getEnabledStatus());
|
||||||
|
return selectPage(reqVO, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default Long selectByTechProcCount(String techProc, Integer id){
|
||||||
|
return selectCount(new MPJLambdaWrapper<TechProcDO>()
|
||||||
|
.eq(TechProcDO::getTechProc, techProc)
|
||||||
|
.eq(TechProcDO::getId, id)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -6,11 +6,16 @@ import com.ningxia.yunxi.chemmes.module.biz.controller.admin.checkitem.vo.CheckI
|
|||||||
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.checkitem.vo.CheckItemSaveReqVO;
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.checkitem.vo.CheckItemSaveReqVO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.checkitem.CheckItemDO;
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.checkitem.CheckItemDO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.checkitem.CheckItemMapper;
|
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.checkitem.CheckItemMapper;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.inspplanitem.InspPlanItemMapper;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.dict.DictDataDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.system.dal.mysql.dict.DictDataMapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import static com.ningxia.yunxi.chemmes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检验项目 Service 实现类
|
* 检验项目 Service 实现类
|
||||||
*
|
*
|
||||||
@ -22,9 +27,15 @@ public class CheckItemServiceImpl implements CheckItemService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private CheckItemMapper checkItemMapper;
|
private CheckItemMapper checkItemMapper;
|
||||||
|
@Resource
|
||||||
|
private InspPlanItemMapper inspPlanItemMapper;
|
||||||
|
@Resource
|
||||||
|
private DictDataMapper dictDataMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer createCheckItem(CheckItemSaveReqVO createReqVO) {
|
public Integer createCheckItem(CheckItemSaveReqVO createReqVO) {
|
||||||
|
// 校验同类下检验项名称不重复
|
||||||
|
validateItemNameUnique(null, createReqVO.getItemType(), createReqVO.getItemName());
|
||||||
// 插入
|
// 插入
|
||||||
CheckItemDO checkItem = BeanUtils.toBean(createReqVO, CheckItemDO.class);
|
CheckItemDO checkItem = BeanUtils.toBean(createReqVO, CheckItemDO.class);
|
||||||
checkItemMapper.insert(checkItem);
|
checkItemMapper.insert(checkItem);
|
||||||
@ -36,6 +47,8 @@ public class CheckItemServiceImpl implements CheckItemService {
|
|||||||
public void updateCheckItem(CheckItemSaveReqVO updateReqVO) {
|
public void updateCheckItem(CheckItemSaveReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateCheckItemExists(updateReqVO.getId());
|
validateCheckItemExists(updateReqVO.getId());
|
||||||
|
// 校验同类下检验项名称不重复
|
||||||
|
validateItemNameUnique(updateReqVO.getId(), updateReqVO.getItemType(), updateReqVO.getItemName());
|
||||||
// 更新
|
// 更新
|
||||||
CheckItemDO updateObj = BeanUtils.toBean(updateReqVO, CheckItemDO.class);
|
CheckItemDO updateObj = BeanUtils.toBean(updateReqVO, CheckItemDO.class);
|
||||||
checkItemMapper.updateById(updateObj);
|
checkItemMapper.updateById(updateObj);
|
||||||
@ -43,18 +56,42 @@ public class CheckItemServiceImpl implements CheckItemService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteCheckItem(Integer id) {
|
public void deleteCheckItem(Integer id) {
|
||||||
|
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateCheckItemExists(id);
|
validateCheckItemExists(id);
|
||||||
|
Long count = inspPlanItemMapper.selectByItemIdCount(id);
|
||||||
|
if (count > 0) {
|
||||||
|
throw exception("该检验标准已做质检方案,不允许删除,请确认。");
|
||||||
|
}
|
||||||
// 删除
|
// 删除
|
||||||
checkItemMapper.deleteById(id);
|
checkItemMapper.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateCheckItemExists(Integer id) {
|
private void validateCheckItemExists(Integer id) {
|
||||||
if (checkItemMapper.selectById(id) == null) {
|
if (checkItemMapper.selectById(id) == null) {
|
||||||
// throw exception(CHECK_ITEM_NOT_EXISTS);
|
throw exception("数据不存在");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验同类下检验项名称不重复
|
||||||
|
*/
|
||||||
|
private void validateItemNameUnique(Integer id, String itemType, String itemName) {
|
||||||
|
Long count = checkItemMapper.selectCountByItemTypeAndItemName(itemType, itemName, id);
|
||||||
|
if (count > 0) {
|
||||||
|
String itemTypeName = getItemTypeName(itemType);
|
||||||
|
throw exception(itemTypeName + "内已存在检验名称为" + itemName + "的检验项,请确认!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取适用类型名称
|
||||||
|
*/
|
||||||
|
private String getItemTypeName(String itemType) {
|
||||||
|
DictDataDO dictData = dictDataMapper.selectByDictTypeAndValue("mat_type", itemType);
|
||||||
|
return dictData != null ? dictData.getLabel() : itemType;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CheckItemDO getCheckItem(Integer id) {
|
public CheckItemDO getCheckItem(Integer id) {
|
||||||
return checkItemMapper.selectById(id);
|
return checkItemMapper.selectById(id);
|
||||||
|
|||||||
@ -56,4 +56,5 @@ public interface ProcService {
|
|||||||
|
|
||||||
List<ProcRespVO> getProcDropdown(String keyWord);
|
List<ProcRespVO> getProcDropdown(String keyWord);
|
||||||
|
|
||||||
|
List<ProcRespVO> getProcList();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -92,4 +92,10 @@ public class ProcServiceImpl implements ProcService {
|
|||||||
return BeanUtils.toBean(procDOS, ProcRespVO.class);
|
return BeanUtils.toBean(procDOS, ProcRespVO.class);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ProcRespVO> getProcList() {
|
||||||
|
List<ProcDO> procDOS = procMapper.getProcList();
|
||||||
|
return BeanUtils.toBean(procDOS, ProcRespVO.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,55 @@
|
|||||||
|
package com.ningxia.yunxi.chemmes.module.biz.service.storearea;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.storearea.vo.*;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.storearea.StoreAreaDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库区主数据 Service 接口
|
||||||
|
*
|
||||||
|
* @author 管理员
|
||||||
|
*/
|
||||||
|
public interface StoreAreaService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建库区主数据
|
||||||
|
*
|
||||||
|
* @param createReqVO 创建信息
|
||||||
|
* @return 编号
|
||||||
|
*/
|
||||||
|
Integer createStoreArea(@Valid StoreAreaSaveReqVO createReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新库区主数据
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateStoreArea(@Valid StoreAreaSaveReqVO updateReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除库区主数据
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
*/
|
||||||
|
void deleteStoreArea(Integer id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得库区主数据
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
* @return 库区主数据
|
||||||
|
*/
|
||||||
|
StoreAreaDO getStoreArea(Integer id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得库区主数据分页
|
||||||
|
*
|
||||||
|
* @param pageReqVO 分页查询
|
||||||
|
* @return 库区主数据分页
|
||||||
|
*/
|
||||||
|
PageResult<StoreAreaDO> getStoreAreaPage(StoreAreaPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
package com.ningxia.yunxi.chemmes.module.biz.service.storearea;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.storearea.vo.*;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.storearea.StoreAreaDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam;
|
||||||
|
import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils;
|
||||||
|
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.storearea.StoreAreaMapper;
|
||||||
|
|
||||||
|
import static com.ningxia.yunxi.chemmes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static com.ningxia.yunxi.chemmes.module.biz.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库区主数据 Service 实现类
|
||||||
|
*
|
||||||
|
* @author 管理员
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class StoreAreaServiceImpl implements StoreAreaService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private StoreAreaMapper storeAreaMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer createStoreArea(StoreAreaSaveReqVO createReqVO) {
|
||||||
|
Long count = storeAreaMapper.selectByStoreAreCodeCount(createReqVO.getStoreAreCd(),createReqVO.getId());
|
||||||
|
if (count > 0) {
|
||||||
|
throw exception("库区编码已存在,请重新输入!");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入
|
||||||
|
StoreAreaDO storeArea = BeanUtils.toBean(createReqVO, StoreAreaDO.class);
|
||||||
|
storeAreaMapper.insert(storeArea);
|
||||||
|
// 返回
|
||||||
|
return storeArea.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateStoreArea(StoreAreaSaveReqVO updateReqVO) {
|
||||||
|
Long count = storeAreaMapper.selectByStoreAreCodeCount(updateReqVO.getStoreAreCd(),updateReqVO.getId());
|
||||||
|
if (count > 0) {
|
||||||
|
throw exception("库区编码已存在,请重新输入!");
|
||||||
|
}
|
||||||
|
// 校验存在
|
||||||
|
validateStoreAreaExists(updateReqVO.getId());
|
||||||
|
// 更新
|
||||||
|
StoreAreaDO updateObj = BeanUtils.toBean(updateReqVO, StoreAreaDO.class);
|
||||||
|
storeAreaMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteStoreArea(Integer id) {
|
||||||
|
// 校验存在
|
||||||
|
validateStoreAreaExists(id);
|
||||||
|
// 删除
|
||||||
|
storeAreaMapper.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateStoreAreaExists(Integer id) {
|
||||||
|
if (storeAreaMapper.selectById(id) == null) {
|
||||||
|
throw exception("数据不存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StoreAreaDO getStoreArea(Integer id) {
|
||||||
|
return storeAreaMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<StoreAreaDO> getStoreAreaPage(StoreAreaPageReqVO pageReqVO) {
|
||||||
|
return storeAreaMapper.selectPage(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -52,4 +52,5 @@ public interface StoreHouseService {
|
|||||||
*/
|
*/
|
||||||
PageResult<StoreHouseDO> getStoreHousePage(StoreHousePageReqVO pageReqVO);
|
PageResult<StoreHouseDO> getStoreHousePage(StoreHousePageReqVO pageReqVO);
|
||||||
|
|
||||||
|
List<StoreHouseDO> getStoreHouseSelect();
|
||||||
}
|
}
|
||||||
@ -11,6 +11,10 @@ import org.springframework.validation.annotation.Validated;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.ningxia.yunxi.chemmes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 仓储主数据 Service 实现类
|
* 仓储主数据 Service 实现类
|
||||||
*
|
*
|
||||||
@ -25,6 +29,11 @@ public class StoreHouseServiceImpl implements StoreHouseService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer createStoreHouse(StoreHouseSaveReqVO createReqVO) {
|
public Integer createStoreHouse(StoreHouseSaveReqVO createReqVO) {
|
||||||
|
Long count = storeHouseMapper.selectByStoreHouseCodeCount(createReqVO.getStoreHouseCd(),null);
|
||||||
|
if (count > 0) {
|
||||||
|
throw exception("仓储编码已存在,请重新输入!");
|
||||||
|
}
|
||||||
|
|
||||||
// 插入
|
// 插入
|
||||||
StoreHouseDO storeHouse = BeanUtils.toBean(createReqVO, StoreHouseDO.class);
|
StoreHouseDO storeHouse = BeanUtils.toBean(createReqVO, StoreHouseDO.class);
|
||||||
storeHouseMapper.insert(storeHouse);
|
storeHouseMapper.insert(storeHouse);
|
||||||
@ -34,8 +43,12 @@ public class StoreHouseServiceImpl implements StoreHouseService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateStoreHouse(StoreHouseSaveReqVO updateReqVO) {
|
public void updateStoreHouse(StoreHouseSaveReqVO updateReqVO) {
|
||||||
|
Long count = storeHouseMapper.selectByStoreHouseCodeCount(updateReqVO.getStoreHouseCd(),updateReqVO.getId());
|
||||||
|
if (count > 0) {
|
||||||
|
throw exception("仓储编码已存在,请重新输入!");
|
||||||
|
}
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateStoreHouseExists(updateReqVO.getId());
|
// validateStoreHouseExists(updateReqVO.getId());
|
||||||
// 更新
|
// 更新
|
||||||
StoreHouseDO updateObj = BeanUtils.toBean(updateReqVO, StoreHouseDO.class);
|
StoreHouseDO updateObj = BeanUtils.toBean(updateReqVO, StoreHouseDO.class);
|
||||||
storeHouseMapper.updateById(updateObj);
|
storeHouseMapper.updateById(updateObj);
|
||||||
@ -51,7 +64,7 @@ public class StoreHouseServiceImpl implements StoreHouseService {
|
|||||||
|
|
||||||
private void validateStoreHouseExists(Integer id) {
|
private void validateStoreHouseExists(Integer id) {
|
||||||
if (storeHouseMapper.selectById(id) == null) {
|
if (storeHouseMapper.selectById(id) == null) {
|
||||||
// throw exception(STORE_HOUSE_NOT_EXISTS);
|
throw exception("数据不存在");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,4 +78,9 @@ public class StoreHouseServiceImpl implements StoreHouseService {
|
|||||||
return storeHouseMapper.selectPage(pageReqVO);
|
return storeHouseMapper.selectPage(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<StoreHouseDO> getStoreHouseSelect() {
|
||||||
|
return storeHouseMapper.getStoreHouseSelect();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,6 +11,8 @@ import org.springframework.validation.annotation.Validated;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import static com.ningxia.yunxi.chemmes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工艺流程主数据 Service 实现类
|
* 工艺流程主数据 Service 实现类
|
||||||
*
|
*
|
||||||
@ -25,6 +27,10 @@ public class TechProcServiceImpl implements TechProcService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer createTechProc(TechProcSaveReqVO createReqVO) {
|
public Integer createTechProc(TechProcSaveReqVO createReqVO) {
|
||||||
|
Long count = techProcMapper.selectByTechProcCount(createReqVO.getTechProc(),null);
|
||||||
|
if (count > 0) {
|
||||||
|
throw exception("工艺流程已存在,请重新选择!");
|
||||||
|
}
|
||||||
// 插入
|
// 插入
|
||||||
TechProcDO techProc = BeanUtils.toBean(createReqVO, TechProcDO.class);
|
TechProcDO techProc = BeanUtils.toBean(createReqVO, TechProcDO.class);
|
||||||
techProcMapper.insert(techProc);
|
techProcMapper.insert(techProc);
|
||||||
@ -34,6 +40,10 @@ public class TechProcServiceImpl implements TechProcService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTechProc(TechProcSaveReqVO updateReqVO) {
|
public void updateTechProc(TechProcSaveReqVO updateReqVO) {
|
||||||
|
Long count = techProcMapper.selectByTechProcCount(updateReqVO.getTechProc(),updateReqVO.getId());
|
||||||
|
if (count > 0) {
|
||||||
|
throw exception("工艺流程已存在,请重新选择!");
|
||||||
|
}
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateTechProcExists(updateReqVO.getId());
|
validateTechProcExists(updateReqVO.getId());
|
||||||
// 更新
|
// 更新
|
||||||
@ -51,7 +61,7 @@ public class TechProcServiceImpl implements TechProcService {
|
|||||||
|
|
||||||
private void validateTechProcExists(Integer id) {
|
private void validateTechProcExists(Integer id) {
|
||||||
if (techProcMapper.selectById(id) == null) {
|
if (techProcMapper.selectById(id) == null) {
|
||||||
// throw exception(TECH_PROC_NOT_EXISTS);
|
throw exception("数据不存在");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -60,7 +60,7 @@ spring:
|
|||||||
redis:
|
redis:
|
||||||
host: 218.95.153.170 # 地址
|
host: 218.95.153.170 # 地址
|
||||||
port: 6379 # 端口
|
port: 6379 # 端口
|
||||||
database: 9 # 数据库索引
|
database: 8 # 数据库索引
|
||||||
password: 'qweasd,.123' # 密码,建议生产环境开启
|
password: 'qweasd,.123' # 密码,建议生产环境开启
|
||||||
|
|
||||||
--- #################### 定时任务相关配置 ####################
|
--- #################### 定时任务相关配置 ####################
|
||||||
|
|||||||
@ -59,7 +59,7 @@ spring:
|
|||||||
redis:
|
redis:
|
||||||
host: localhost # 地址
|
host: localhost # 地址
|
||||||
port: 6379 # 端口
|
port: 6379 # 端口
|
||||||
database: 9 # 数据库索引
|
database: 8 # 数据库索引
|
||||||
password: 'qweasd,.123' # 密码,建议生产环境开启
|
password: 'qweasd,.123' # 密码,建议生产环境开启
|
||||||
|
|
||||||
--- #################### 定时任务相关配置 ####################
|
--- #################### 定时任务相关配置 ####################
|
||||||
|
|||||||
@ -42,3 +42,7 @@ export const exportProc = async (params) => {
|
|||||||
export const getProcDropdown = async (params) => {
|
export const getProcDropdown = async (params) => {
|
||||||
return await request.get({ url: `/biz/proc/dropdown`, params })
|
return await request.get({ url: `/biz/proc/dropdown`, params })
|
||||||
}
|
}
|
||||||
|
// 获取工序下拉列表
|
||||||
|
export const getProcList = async () => {
|
||||||
|
return await request.get({ url: `/biz/proc/getProcList` })
|
||||||
|
}
|
||||||
|
|||||||
42
mes-ui/mes-ui-admin-vue3/src/api/biz/storearea/index.ts
Normal file
42
mes-ui/mes-ui-admin-vue3/src/api/biz/storearea/index.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface StoreAreaVO {
|
||||||
|
id: number
|
||||||
|
fCreatorUserId: string
|
||||||
|
storeAreCd: string
|
||||||
|
storeAreaName: string
|
||||||
|
enabledStatus: number
|
||||||
|
remark: string
|
||||||
|
storeHouseId: number
|
||||||
|
storeType: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询库区主数据分页
|
||||||
|
export const getStoreAreaPage = async (params) => {
|
||||||
|
return await request.get({ url: `/biz/store-area/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询库区主数据详情
|
||||||
|
export const getStoreArea = async (id: number) => {
|
||||||
|
return await request.get({ url: `/biz/store-area/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增库区主数据
|
||||||
|
export const createStoreArea = async (data: StoreAreaVO) => {
|
||||||
|
return await request.post({ url: `/biz/store-area/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改库区主数据
|
||||||
|
export const updateStoreArea = async (data: StoreAreaVO) => {
|
||||||
|
return await request.put({ url: `/biz/store-area/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除库区主数据
|
||||||
|
export const deleteStoreArea = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/biz/store-area/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出库区主数据 Excel
|
||||||
|
export const exportStoreArea = async (params) => {
|
||||||
|
return await request.download({ url: `/biz/store-area/export-excel`, params })
|
||||||
|
}
|
||||||
@ -38,3 +38,7 @@ export const deleteStoreHouse = async (id: number) => {
|
|||||||
export const exportStoreHouse = async (params) => {
|
export const exportStoreHouse = async (params) => {
|
||||||
return await request.download({ url: `/biz/store-house/export-excel`, params })
|
return await request.download({ url: `/biz/store-house/export-excel`, params })
|
||||||
}
|
}
|
||||||
|
//获取仓储主数据下拉列表
|
||||||
|
export const getStoreHouseSelect = async () => {
|
||||||
|
return await request.get({ url: `/biz/store-house/get-store-house-select`})
|
||||||
|
}
|
||||||
|
|||||||
@ -131,7 +131,7 @@ export enum DICT_TYPE {
|
|||||||
SYSTEM_NOTIFY_TEMPLATE_TYPE = 'system_notify_template_type',
|
SYSTEM_NOTIFY_TEMPLATE_TYPE = 'system_notify_template_type',
|
||||||
SYSTEM_SOCIAL_TYPE = 'system_social_type',
|
SYSTEM_SOCIAL_TYPE = 'system_social_type',
|
||||||
SYSTEM_STATUS = 'system_status',
|
SYSTEM_STATUS = 'system_status',
|
||||||
SYSTEM_IS_CELL = 'system_is_cell',
|
SYSTEM_IS_CELL = 'system_is_cell',//是否
|
||||||
|
|
||||||
// ========== INFRA 模块 ==========
|
// ========== INFRA 模块 ==========
|
||||||
INFRA_BOOLEAN_STRING = 'infra_boolean_string',
|
INFRA_BOOLEAN_STRING = 'infra_boolean_string',
|
||||||
|
|||||||
@ -1,45 +1,51 @@
|
|||||||
<template>
|
<template>
|
||||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
<Dialog :title="dialogTitle" v-model="dialogVisible" width="800px" @close="cancel">
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:model="formData"
|
:model="formData"
|
||||||
:rules="formRules"
|
:rules="formData.itemType=='3'?formRules:formRules1"
|
||||||
label-width="100px"
|
label-width="120px"
|
||||||
v-loading="formLoading"
|
v-loading="formLoading"
|
||||||
|
:validate-on-rule-change="false"
|
||||||
|
:key="formData.itemType"
|
||||||
|
|
||||||
>
|
>
|
||||||
<el-form-item label="检验项编号" prop="itemNo">
|
<el-row :gutter="15">
|
||||||
<el-input v-model="formData.itemNo" placeholder="请输入检验项编号" />
|
<el-col :span="12">
|
||||||
|
<el-form-item label="编号" prop="itemNo">
|
||||||
|
<el-input v-model="formData.itemNo" placeholder="请输入检验项编号" class="!w-240px"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="检验项名称" prop="itemName">
|
</el-col>
|
||||||
<el-input v-model="formData.itemName" placeholder="请输入检验项名称" />
|
<el-col :span="12">
|
||||||
|
<el-form-item label="名称" prop="itemName">
|
||||||
|
<el-input v-model="formData.itemName" placeholder="请输入名称" class="!w-240px"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="性质,1 表示定性,2 表示定量" prop="nature">
|
</el-col>
|
||||||
<el-input v-model="formData.nature" placeholder="请输入性质,1 表示定性,2 表示定量" />
|
</el-row>
|
||||||
</el-form-item>
|
<el-row :gutter="15">
|
||||||
<el-form-item label="单位" prop="unitName">
|
<el-col :span="12">
|
||||||
<el-input v-model="formData.unitName" placeholder="请输入单位" />
|
<el-form-item label="性质" prop="nature">
|
||||||
</el-form-item>
|
<el-radio-group v-model="formData.nature">
|
||||||
<el-form-item label="检验方法" prop="checkMethod">
|
<el-radio
|
||||||
<el-input v-model="formData.checkMethod" placeholder="请输入检验方法" />
|
v-for="dict in getStrDictOptions(DICT_TYPE.NATURE)"
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注" prop="remark">
|
|
||||||
<el-input v-model="formData.remark" placeholder="请输入备注" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="适用类型,1表示原材料 2表示半成品 3表示成品" prop="itemType">
|
|
||||||
<el-select v-model="formData.itemType" placeholder="请选择适用类型,1表示原材料 2表示半成品 3表示成品">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in getStrDictOptions(DICT_TYPE.MAT_TYPE)"
|
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
:label="dict.label"
|
:label="dict.value"
|
||||||
:value="dict.value"
|
>
|
||||||
/>
|
{{ dict.label }}
|
||||||
</el-select>
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="检验大类" prop="itemClass">
|
</el-col>
|
||||||
<el-input v-model="formData.itemClass" placeholder="请输入检验大类" />
|
<el-col :span="12">
|
||||||
|
<el-form-item label="单位" prop="unitName">
|
||||||
|
<el-input v-model="formData.unitName" placeholder="请输入单位" class="!w-240px"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="检验值类型( I -数字 T- 文本)" prop="itemValueType">
|
</el-col>
|
||||||
<el-select v-model="formData.itemValueType" placeholder="请选择检验值类型( I -数字 T- 文本)">
|
</el-row>
|
||||||
|
<el-row :gutter="15">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="检验值类型" prop="itemValueType">
|
||||||
|
<el-select v-model="formData.itemValueType" placeholder="请选择检验值类型" @change="handleItemValueTypeChange">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getStrDictOptions(DICT_TYPE.TEST_VALUE_TYPE)"
|
v-for="dict in getStrDictOptions(DICT_TYPE.TEST_VALUE_TYPE)"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
@ -48,30 +54,103 @@
|
|||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="绑定输入文本(符合,不符合)" prop="itemContent">
|
</el-col>
|
||||||
<Editor v-model="formData.itemContent" height="150px" />
|
<el-col :span="12">
|
||||||
|
<el-form-item label="适用类型" prop="itemType">
|
||||||
|
<el-select v-model="formData.itemType" placeholder="请选择适用类型" @change="handleItemTypeChange">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getStrDictOptions(DICT_TYPE.MAT_TYPE)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="15">
|
||||||
|
<el-col :span="12">
|
||||||
<el-form-item label="检验值数量" prop="testNum">
|
<el-form-item label="检验值数量" prop="testNum">
|
||||||
<el-input v-model="formData.testNum" placeholder="请输入检验值数量" />
|
<el-input v-model="formData.testNum" placeholder="请输入检验值数量" class="!w-240px"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="绑定值" prop="itemContent">
|
||||||
|
<el-input v-model="formData.itemContent" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="15">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="是否取平均值" prop="printAvgValues">
|
||||||
|
<el-radio-group v-model="formData.printAvgValues">
|
||||||
|
<el-radio
|
||||||
|
v-for="dict in getStrDictOptions(DICT_TYPE.SYSTEM_IS_CELL)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.value"
|
||||||
|
>
|
||||||
|
{{ dict.label }}
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
<el-form-item label="小数位数" prop="floatNum">
|
<el-form-item label="小数位数" prop="floatNum">
|
||||||
<el-input v-model="formData.floatNum" placeholder="请输入小数位数" />
|
<el-input v-model="formData.floatNum" placeholder="请输入小数位数" class="!w-240px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="打印是否取平均值" prop="printAvgValues">
|
</el-col>
|
||||||
<el-input v-model="formData.printAvgValues" placeholder="请输入打印是否取平均值" />
|
</el-row>
|
||||||
|
<el-row :gutter="15">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="检验大类" prop="itemClass">
|
||||||
|
<el-select v-model="formData.itemClass" placeholder="请选择检验大类" v-if="formData.itemType=='3'">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getStrDictOptions(DICT_TYPE.FINISHED_PRODUCT_TYPE)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
<el-select v-model="formData.itemClass" placeholder="请选择检验大类" v-if="formData.itemType=='1'">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getStrDictOptions(DICT_TYPE.RAW_MATERIALS_TYPE)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
<el-select v-model="formData.itemClass" placeholder="请选择检验大类" v-if="formData.itemType=='2'||!formData.itemType" disabled/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="15">
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="检验方法" prop="checkMethod">
|
||||||
|
<el-input type="textarea" :rows="4" v-model="formData.checkMethod" placeholder="请输入检验方法"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="15">
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input type="textarea" :rows="4" v-model="formData.remark" placeholder="请输入备注"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
<el-button @click="cancel">取 消</el-button>
|
||||||
</template>
|
</template>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
import {getStrDictOptions, DICT_TYPE, getIntDictOptions} from '@/utils/dict'
|
||||||
import * as CheckItemApi from '@/api/biz/checkitem'
|
import * as CheckItemApi from '@/api/biz/checkitem'
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const {t} = useI18n() // 国际化
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
|
|
||||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||||
@ -79,22 +158,51 @@ const dialogTitle = ref('') // 弹窗的标题
|
|||||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
id: undefined,
|
id: undefined as number | undefined,
|
||||||
itemNo: undefined,
|
itemNo: undefined as string | undefined,
|
||||||
itemName: undefined,
|
itemName: undefined as string | undefined,
|
||||||
nature: undefined,
|
nature: undefined as string | undefined,
|
||||||
unitName: undefined,
|
unitName: undefined as string | undefined,
|
||||||
checkMethod: undefined,
|
checkMethod: undefined as string | undefined,
|
||||||
remark: undefined,
|
remark: undefined as string | undefined,
|
||||||
itemType: undefined,
|
itemType: undefined as string | undefined,
|
||||||
itemClass: undefined,
|
itemClass: undefined as string | undefined,
|
||||||
itemValueType: undefined,
|
itemValueType: undefined as string | undefined,
|
||||||
itemContent: undefined,
|
itemContent: undefined as string | undefined,
|
||||||
testNum: undefined,
|
testNum: undefined as string | undefined,
|
||||||
floatNum: undefined,
|
floatNum: undefined as number | string | undefined,
|
||||||
printAvgValues: undefined,
|
printAvgValues: "0" as string | undefined,
|
||||||
})
|
})
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
|
itemName: [
|
||||||
|
{ required: true, message: '请输入名称', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
nature: [
|
||||||
|
{ required: true, message: '性质不能为空', trigger: 'change' }
|
||||||
|
],
|
||||||
|
itemType: [
|
||||||
|
{ required: true, message: '请选择适用类型', trigger: 'change' }
|
||||||
|
],
|
||||||
|
itemContent: [
|
||||||
|
{ pattern: /^[\w\u4e00-\u9fa5]+(,[\w\u4e00-\u9fa5]+)*$/, message: '格式错误', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
itemClass: [
|
||||||
|
{ required: true, message: '检验大类', trigger: 'change' }
|
||||||
|
]
|
||||||
|
})
|
||||||
|
const formRules1 = reactive({
|
||||||
|
itemName: [
|
||||||
|
{ required: true, message: '请输入名称', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
nature: [
|
||||||
|
{ required: true, message: '性质不能为空', trigger: 'change' }
|
||||||
|
],
|
||||||
|
itemType: [
|
||||||
|
{ required: true, message: '请选择适用类型', trigger: 'change' }
|
||||||
|
],
|
||||||
|
itemContent: [
|
||||||
|
{ pattern: /^[\w\u4e00-\u9fa5]+(,[\w\u4e00-\u9fa5]+)*$/, message: '格式错误', trigger: 'blur' }
|
||||||
|
]
|
||||||
})
|
})
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
@ -114,13 +222,43 @@ const open = async (type: string, id?: number) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
defineExpose({open}) // 提供 open 方法,用于打开弹窗
|
||||||
|
|
||||||
|
/** 适用类型变化 */
|
||||||
|
const handleItemTypeChange = () => {
|
||||||
|
formData.value.itemClass = undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 检验值类型变化 */
|
||||||
|
const handleItemValueTypeChange = (row: string) => {
|
||||||
|
if (row === 'I') {
|
||||||
|
formData.value.floatNum = 2
|
||||||
|
} else {
|
||||||
|
formData.value.floatNum = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const cancel = async () => {
|
||||||
|
dialogVisible.value = false
|
||||||
|
emit('success')
|
||||||
|
}
|
||||||
/** 提交表单 */
|
/** 提交表单 */
|
||||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||||
const submitForm = async () => {
|
const submitForm = async () => {
|
||||||
// 校验表单
|
// 校验表单
|
||||||
await formRef.value.validate()
|
await formRef.value.validate()
|
||||||
|
// 额外校验
|
||||||
|
if (formData.value.itemValueType === 'I' && formData.value.itemContent != null && formData.value.itemContent !== '') {
|
||||||
|
message.error('检验值类型为数字类型,绑定值必须为空,请确认')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (formData.value.itemValueType === 'T' && formData.value.floatNum != null && formData.value.floatNum !== '') {
|
||||||
|
message.error('检验值类型为文本类型,小数位数必须为空,请确认')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (formData.value.itemValueType === 'I' && (formData.value.floatNum == null || formData.value.floatNum === '')) {
|
||||||
|
message.error('检验值类型为数字类型,小数位数必须输入,请确认')
|
||||||
|
return
|
||||||
|
}
|
||||||
// 提交请求
|
// 提交请求
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
@ -156,7 +294,7 @@ const resetForm = () => {
|
|||||||
itemContent: undefined,
|
itemContent: undefined,
|
||||||
testNum: undefined,
|
testNum: undefined,
|
||||||
floatNum: undefined,
|
floatNum: undefined,
|
||||||
printAvgValues: undefined,
|
printAvgValues: "0",
|
||||||
}
|
}
|
||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,57 +6,12 @@
|
|||||||
:model="queryParams"
|
:model="queryParams"
|
||||||
ref="queryFormRef"
|
ref="queryFormRef"
|
||||||
:inline="true"
|
:inline="true"
|
||||||
label-width="68px"
|
label-width="80px"
|
||||||
>
|
>
|
||||||
<el-form-item label="检验项名称" prop="itemName">
|
<el-form-item label="适用类型" prop="itemType">
|
||||||
<el-input
|
|
||||||
v-model="queryParams.itemName"
|
|
||||||
placeholder="请输入检验项名称"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
class="!w-240px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="性质,1 表示定性,2 表示定量" prop="nature">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.nature"
|
|
||||||
placeholder="请输入性质,1 表示定性,2 表示定量"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
class="!w-240px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="单位" prop="unitName">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.unitName"
|
|
||||||
placeholder="请输入单位"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
class="!w-240px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="检验方法" prop="checkMethod">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.checkMethod"
|
|
||||||
placeholder="请输入检验方法"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
class="!w-240px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注" prop="remark">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.remark"
|
|
||||||
placeholder="请输入备注"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
class="!w-240px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="适用类型,1表示原材料 2表示半成品 3表示成品" prop="itemType">
|
|
||||||
<el-select
|
<el-select
|
||||||
v-model="queryParams.itemType"
|
v-model="queryParams.itemType"
|
||||||
placeholder="请选择适用类型,1表示原材料 2表示半成品 3表示成品"
|
placeholder="请选择适用类型"
|
||||||
clearable
|
clearable
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
>
|
>
|
||||||
@ -68,52 +23,19 @@
|
|||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="检验大类" prop="itemClass">
|
<el-form-item label="编号" prop="itemNo">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.itemClass"
|
v-model="queryParams.itemNo"
|
||||||
placeholder="请输入检验大类"
|
placeholder="请输入编号"
|
||||||
clearable
|
clearable
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="检验值类型( I -数字 T- 文本)" prop="itemValueType">
|
<el-form-item label="检验名称" prop="itemName">
|
||||||
<el-select
|
|
||||||
v-model="queryParams.itemValueType"
|
|
||||||
placeholder="请选择检验值类型( I -数字 T- 文本)"
|
|
||||||
clearable
|
|
||||||
class="!w-240px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in getStrDictOptions(DICT_TYPE.TEST_VALUE_TYPE)"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="检验值数量" prop="testNum">
|
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.testNum"
|
v-model="queryParams.itemName"
|
||||||
placeholder="请输入检验值数量"
|
placeholder="请输入检验名称"
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
class="!w-240px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="小数位数" prop="floatNum">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.floatNum"
|
|
||||||
placeholder="请输入小数位数"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
class="!w-240px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="打印是否取平均值" prop="printAvgValues">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.printAvgValues"
|
|
||||||
placeholder="请输入打印是否取平均值"
|
|
||||||
clearable
|
clearable
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
@ -130,62 +52,51 @@
|
|||||||
>
|
>
|
||||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
|
||||||
type="success"
|
|
||||||
plain
|
|
||||||
@click="handleExport"
|
|
||||||
:loading="exportLoading"
|
|
||||||
v-hasPermi="['biz:check-item:export']"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
|
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" border>
|
||||||
<el-table-column label="自增字段" align="center" prop="id" />
|
<el-table-column type="index" label="序号" align="center" min-width="60" />
|
||||||
<el-table-column label="检验项编号" align="center" prop="itemNo" />
|
<el-table-column label="名称" align="center" prop="itemName" width="180"/>
|
||||||
<el-table-column label="检验项名称" align="center" prop="itemName" />
|
<el-table-column label="性质" align="center" prop="nature" width="120">
|
||||||
<el-table-column label="性质,1 表示定性,2 表示定量" align="center" prop="nature">
|
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.NATURE" :value="scope.row.nature" />
|
<dict-tag :type="DICT_TYPE.NATURE" :value="scope.row.nature" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="单位" align="center" prop="unitName" />
|
<el-table-column label="检验大类" align="center" prop="itemClass" width="120">
|
||||||
<el-table-column label="检验方法" align="center" prop="checkMethod" />
|
<template #default="scope">
|
||||||
<el-table-column label="备注" align="center" prop="remark" />
|
<dict-tag :type="DICT_TYPE.RAW_MATERIALS_TYPE" :value="scope.row.itemType" v-if="scope.row.itemType==1"/>
|
||||||
<el-table-column label="适用类型,1表示原材料 2表示半成品 3表示成品" align="center" prop="itemType">
|
<dict-tag :type="DICT_TYPE.FINISHED_PRODUCT_TYPE" :value="scope.row.itemType" v-if="scope.row.itemType==3"/>
|
||||||
|
<span v-if="scope.row.itemType!=1 && scope.row.itemType!=3"></span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="单位" align="center" prop="unitName" width="120"/>
|
||||||
|
<el-table-column label="检验方法" align="center" prop="checkMethod" width="200"/>
|
||||||
|
<el-table-column label="适用类型" align="center" prop="itemType" width="120">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.MAT_TYPE" :value="scope.row.itemType" />
|
<dict-tag :type="DICT_TYPE.MAT_TYPE" :value="scope.row.itemType" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column label="检验值类型" align="center" prop="itemValueType" width="120">
|
||||||
label="创建时间"
|
|
||||||
align="center"
|
|
||||||
prop="createTime"
|
|
||||||
:formatter="dateFormatter"
|
|
||||||
width="180px"
|
|
||||||
/>
|
|
||||||
<el-table-column label="检验大类" align="center" prop="itemClass" />
|
|
||||||
<el-table-column label="检验值类型( I -数字 T- 文本)" align="center" prop="itemValueType">
|
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.TEST_VALUE_TYPE" :value="scope.row.itemValueType" />
|
<dict-tag :type="DICT_TYPE.TEST_VALUE_TYPE" :value="scope.row.itemValueType" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="绑定输入文本(符合,不符合)" align="center" prop="itemContent" />
|
<el-table-column label="检验值数量" align="center" prop="testNum" width="120"/>
|
||||||
<el-table-column label="检验值数量" align="center" prop="testNum" />
|
<el-table-column label="绑定值" align="center" prop="itemContent" width="200"/>
|
||||||
<el-table-column label="小数位数" align="center" prop="floatNum" />
|
<el-table-column label="小数位数" align="center" prop="floatNum" width="120" />
|
||||||
<el-table-column label="打印是否取平均值" align="center" prop="printAvgValues" />
|
<el-table-column label="备注" align="center" prop="remark" width="200"/>
|
||||||
<el-table-column label="操作" align="center">
|
<el-table-column label="编号" align="center" prop="itemNo" />
|
||||||
|
<el-table-column label="操作" align="center" width="120" fixed="right">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="openForm('update', scope.row.id)"
|
@click="openForm('update', scope.row.id)"
|
||||||
v-hasPermi="['biz:check-item:update']"
|
|
||||||
>
|
>
|
||||||
编辑
|
编辑
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -193,14 +104,13 @@
|
|||||||
link
|
link
|
||||||
type="danger"
|
type="danger"
|
||||||
@click="handleDelete(scope.row.id)"
|
@click="handleDelete(scope.row.id)"
|
||||||
v-hasPermi="['biz:check-item:delete']"
|
|
||||||
>
|
>
|
||||||
删除
|
删除
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- 分页 -->
|
|
||||||
<Pagination
|
<Pagination
|
||||||
:total="total"
|
:total="total"
|
||||||
v-model:page="queryParams.pageNo"
|
v-model:page="queryParams.pageNo"
|
||||||
@ -215,8 +125,6 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
import { dateFormatter } from '@/utils/formatTime'
|
|
||||||
import download from '@/utils/download'
|
|
||||||
import * as CheckItemApi from '@/api/biz/checkitem'
|
import * as CheckItemApi from '@/api/biz/checkitem'
|
||||||
import CheckItemForm from './CheckItemForm.vue'
|
import CheckItemForm from './CheckItemForm.vue'
|
||||||
|
|
||||||
@ -225,7 +133,7 @@ defineOptions({ name: 'CheckItem' })
|
|||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
const loading = ref(true) // 列表的加载中
|
const loading = ref(false) // 列表的加载中
|
||||||
const list = ref([]) // 列表的数据
|
const list = ref([]) // 列表的数据
|
||||||
const total = ref(0) // 列表的总页数
|
const total = ref(0) // 列表的总页数
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
@ -243,9 +151,9 @@ const queryParams = reactive({
|
|||||||
testNum: undefined,
|
testNum: undefined,
|
||||||
floatNum: undefined,
|
floatNum: undefined,
|
||||||
printAvgValues: undefined,
|
printAvgValues: undefined,
|
||||||
|
itemNo:undefined,
|
||||||
})
|
})
|
||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
const exportLoading = ref(false) // 导出的加载中
|
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
@ -290,23 +198,10 @@ const handleDelete = async (id: number) => {
|
|||||||
} catch {}
|
} catch {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 导出按钮操作 */
|
|
||||||
const handleExport = async () => {
|
|
||||||
try {
|
|
||||||
// 导出的二次确认
|
|
||||||
await message.exportConfirm()
|
|
||||||
// 发起导出
|
|
||||||
exportLoading.value = true
|
|
||||||
const data = await CheckItemApi.exportCheckItem(queryParams)
|
|
||||||
download.excel(data, '检验项目.xls')
|
|
||||||
} catch {
|
|
||||||
} finally {
|
|
||||||
exportLoading.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 初始化 **/
|
/** 初始化 **/
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList()
|
// getList()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
@ -0,0 +1,151 @@
|
|||||||
|
<template>
|
||||||
|
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||||
|
<el-form
|
||||||
|
ref="formRef"
|
||||||
|
:model="formData"
|
||||||
|
:rules="formRules"
|
||||||
|
label-width="100px"
|
||||||
|
v-loading="formLoading"
|
||||||
|
@close="cancel"
|
||||||
|
>
|
||||||
|
|
||||||
|
<el-form-item label="仓库" prop="storeHouseId">
|
||||||
|
<el-select class="!w-240px" v-model="formData.storeHouseId" clearable filterable @change="handleStoreHouseChange">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in storeHouseList"
|
||||||
|
:key="dict.id"
|
||||||
|
:label="dict.storeHouseName"
|
||||||
|
:value="dict.id"
|
||||||
|
/>
|
||||||
|
</el-select> </el-form-item>
|
||||||
|
<el-form-item label="库区编码" prop="storeAreCd">
|
||||||
|
<el-input v-model="formData.storeAreCd" placeholder="请输入库区编码" class="!w-240px" :disabled="formData.id"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="库区名称" prop="storeAreaName">
|
||||||
|
<el-input v-model="formData.storeAreaName" placeholder="请输入库区名称" class="!w-240px"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="状态" prop="enabledStatus">
|
||||||
|
<el-select v-model="formData.enabledStatus" placeholder="请选择状态">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_STATUS)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input type='textarea' :rows="4" v-model="formData.remark" placeholder="请输入备注" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</template>
|
||||||
|
</Dialog>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
|
import * as StoreAreaApi from '@/api/biz/storearea'
|
||||||
|
import * as StoreHouseApi from '@/api/biz/storehouse'
|
||||||
|
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
const storeHouseList = ref()
|
||||||
|
|
||||||
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||||
|
const dialogTitle = ref('') // 弹窗的标题
|
||||||
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
|
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||||
|
const formData = ref({
|
||||||
|
id: undefined,
|
||||||
|
fCreatorUserId: undefined,
|
||||||
|
storeAreCd: undefined,
|
||||||
|
storeAreaName: undefined,
|
||||||
|
enabledStatus: 0,
|
||||||
|
remark: undefined,
|
||||||
|
storeHouseId: undefined,
|
||||||
|
storeType: undefined,
|
||||||
|
})
|
||||||
|
const formRules = reactive({
|
||||||
|
storeHouseId: [{ required: true, message: '仓库不能为空', trigger: 'change' }],
|
||||||
|
storeAreCd: [{ required: true, message: '库区编码不能为空', trigger: 'blur' }],
|
||||||
|
storeAreaName: [{ required: true, message: '库区名称不能为空', trigger: 'blur' }],
|
||||||
|
enabledStatus: [{ required: true, message: '状态不能为空', trigger: 'change' }]
|
||||||
|
})
|
||||||
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
|
/** 打开弹窗 */
|
||||||
|
const open = async (type: string, id?: number) => {
|
||||||
|
dialogVisible.value = true
|
||||||
|
dialogTitle.value = t('action.' + type)
|
||||||
|
formType.value = type
|
||||||
|
resetForm()
|
||||||
|
storeHouseList.value = await StoreHouseApi.getStoreHouseSelect()
|
||||||
|
// 修改时,设置数据
|
||||||
|
if (id) {
|
||||||
|
formLoading.value = true
|
||||||
|
try {
|
||||||
|
formData.value = await StoreAreaApi.getStoreArea(id)
|
||||||
|
} finally {
|
||||||
|
formLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||||
|
const cancel = async () => {
|
||||||
|
dialogVisible.value = false
|
||||||
|
emit('success')
|
||||||
|
|
||||||
|
}
|
||||||
|
/** 仓库选择变化事件 */
|
||||||
|
const handleStoreHouseChange = (storeHouseId: number) => {
|
||||||
|
if (!storeHouseId) {
|
||||||
|
formData.value.storeType = undefined
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const selectedStore = storeHouseList.value.find((item: any) => item.id === storeHouseId)
|
||||||
|
if (selectedStore) {
|
||||||
|
formData.value.storeType = selectedStore.storeType
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交表单 */
|
||||||
|
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||||
|
const submitForm = async () => {
|
||||||
|
// 校验表单
|
||||||
|
await formRef.value.validate()
|
||||||
|
// 提交请求
|
||||||
|
formLoading.value = true
|
||||||
|
try {
|
||||||
|
const data = formData.value as unknown as StoreAreaApi.StoreAreaVO
|
||||||
|
if (formType.value === 'create') {
|
||||||
|
await StoreAreaApi.createStoreArea(data)
|
||||||
|
message.success(t('common.createSuccess'))
|
||||||
|
} else {
|
||||||
|
await StoreAreaApi.updateStoreArea(data)
|
||||||
|
message.success(t('common.updateSuccess'))
|
||||||
|
}
|
||||||
|
dialogVisible.value = false
|
||||||
|
// 发送操作成功的事件
|
||||||
|
emit('success')
|
||||||
|
} finally {
|
||||||
|
formLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置表单 */
|
||||||
|
const resetForm = () => {
|
||||||
|
formData.value = {
|
||||||
|
id: undefined,
|
||||||
|
fCreatorUserId: undefined,
|
||||||
|
storeAreCd: undefined,
|
||||||
|
storeAreaName: undefined,
|
||||||
|
enabledStatus: 0,
|
||||||
|
remark: undefined,
|
||||||
|
storeHouseId: undefined,
|
||||||
|
storeType: undefined,
|
||||||
|
}
|
||||||
|
formRef.value?.resetFields()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
202
mes-ui/mes-ui-admin-vue3/src/views/biz/storearea/index.vue
Normal file
202
mes-ui/mes-ui-admin-vue3/src/views/biz/storearea/index.vue
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
<template>
|
||||||
|
<ContentWrap>
|
||||||
|
<!-- 搜索工作栏 -->
|
||||||
|
<el-form
|
||||||
|
class="-mb-15px"
|
||||||
|
:model="queryParams"
|
||||||
|
ref="queryFormRef"
|
||||||
|
:inline="true"
|
||||||
|
label-width="80px"
|
||||||
|
>
|
||||||
|
|
||||||
|
<el-form-item label="仓库类型" prop="storeType">
|
||||||
|
<el-select
|
||||||
|
v-model="queryParams.storeType"
|
||||||
|
placeholder="请选择仓库类型"
|
||||||
|
clearable
|
||||||
|
class="!w-240px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.WAREHOUSE_TYPE)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="仓库名称" prop="storeHouseName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.storeHouseName"
|
||||||
|
placeholder="请输入仓库名称"
|
||||||
|
clearable
|
||||||
|
@keyup.enter="handleQuery"
|
||||||
|
class="!w-240px"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="状态" prop="enabledStatus">
|
||||||
|
<el-select
|
||||||
|
v-model="queryParams.enabledStatus"
|
||||||
|
placeholder="请选择状态"
|
||||||
|
clearable
|
||||||
|
class="!w-240px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_STATUS)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||||
|
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
plain
|
||||||
|
@click="openForm('create')"
|
||||||
|
>
|
||||||
|
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||||
|
</el-button>
|
||||||
|
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<!-- 列表 -->
|
||||||
|
<ContentWrap>
|
||||||
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" border>
|
||||||
|
<el-table-column type="index" label="序号" align="center" min-width="60" />
|
||||||
|
<el-table-column label="仓库名称" align="center" prop="storeHouseName" />
|
||||||
|
<el-table-column label="仓库类型" align="center" prop="storeType" >
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.WAREHOUSE_TYPE" :value="scope.row.storeType" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="库区编码" align="center" prop="storeAreCd" />
|
||||||
|
<el-table-column label="库区名称" align="center" prop="storeAreaName" />
|
||||||
|
<el-table-column label="状态" align="center" prop="enabledStatus">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.SYSTEM_STATUS" :value="scope.row.enabledStatus" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
|
<el-table-column
|
||||||
|
label="创建时间"
|
||||||
|
align="center"
|
||||||
|
prop="createTime"
|
||||||
|
:formatter="dateFormatter2"
|
||||||
|
width="180px"
|
||||||
|
/>
|
||||||
|
<el-table-column label="操作" align="center">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button
|
||||||
|
link
|
||||||
|
type="primary"
|
||||||
|
@click="openForm('update', scope.row.id)"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<!-- <el-button-->
|
||||||
|
<!-- link-->
|
||||||
|
<!-- type="danger"-->
|
||||||
|
<!-- @click="handleDelete(scope.row.id)"-->
|
||||||
|
<!-- v-hasPermi="['biz:store-area:delete']"-->
|
||||||
|
<!-- >-->
|
||||||
|
<!-- 删除-->
|
||||||
|
<!-- </el-button>-->
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<!-- 分页 -->
|
||||||
|
<Pagination
|
||||||
|
:total="total"
|
||||||
|
v-model:page="queryParams.pageNo"
|
||||||
|
v-model:limit="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<!-- 表单弹窗:添加/修改 -->
|
||||||
|
<StoreAreaForm ref="formRef" @success="getList" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
|
import { dateFormatter2} from '@/utils/formatTime'
|
||||||
|
import * as StoreAreaApi from '@/api/biz/storearea'
|
||||||
|
import StoreAreaForm from './StoreAreaForm.vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'StoreArea' })
|
||||||
|
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
|
const loading = ref(false) // 列表的加载中
|
||||||
|
const list = ref([]) // 列表的数据
|
||||||
|
const total = ref(0) // 列表的总页数
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
fCreatorUserId: undefined,
|
||||||
|
createTime: [],
|
||||||
|
storeAreCd: undefined,
|
||||||
|
storeAreaName: undefined,
|
||||||
|
enabledStatus: undefined,
|
||||||
|
remark: undefined,
|
||||||
|
storeHouseId: undefined,
|
||||||
|
storeType: undefined,
|
||||||
|
storeHouseName:undefined
|
||||||
|
})
|
||||||
|
const queryFormRef = ref() // 搜索的表单
|
||||||
|
|
||||||
|
/** 查询列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
const data = await StoreAreaApi.getStoreAreaPage(queryParams)
|
||||||
|
list.value = data.list
|
||||||
|
total.value = data.total
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value.resetFields()
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 添加/修改操作 */
|
||||||
|
const formRef = ref()
|
||||||
|
const openForm = (type: string, id?: number) => {
|
||||||
|
formRef.value.open(type, id)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
// const handleDelete = async (id: number) => {
|
||||||
|
// try {
|
||||||
|
// // 删除的二次确认
|
||||||
|
// await message.delConfirm()
|
||||||
|
// // 发起删除
|
||||||
|
// await StoreAreaApi.deleteStoreArea(id)
|
||||||
|
// message.success(t('common.delSuccess'))
|
||||||
|
// // 刷新列表
|
||||||
|
// await getList()
|
||||||
|
// } catch {}
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** 初始化 **/
|
||||||
|
onMounted(() => {
|
||||||
|
// getList()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
<Dialog :title="dialogTitle" v-model="dialogVisible" @close="cancel">
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:model="formData"
|
:model="formData"
|
||||||
@ -7,28 +7,8 @@
|
|||||||
label-width="100px"
|
label-width="100px"
|
||||||
v-loading="formLoading"
|
v-loading="formLoading"
|
||||||
>
|
>
|
||||||
<el-form-item label="仓储编码" prop="storeHouseCd">
|
<el-form-item label="仓库类型" prop="storeType">
|
||||||
<el-input v-model="formData.storeHouseCd" placeholder="请输入仓储编码" />
|
<el-select v-model="formData.storeType" placeholder="请选择仓库类型">
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="仓储名称" prop="storeHouseName">
|
|
||||||
<el-input v-model="formData.storeHouseName" placeholder="请输入仓储名称" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="状态(1启用 2 未启用)" prop="enabledStatus">
|
|
||||||
<el-radio-group v-model="formData.enabledStatus">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_STATUS)"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.value"
|
|
||||||
>
|
|
||||||
{{ dict.label }}
|
|
||||||
</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注" prop="remark">
|
|
||||||
<el-input v-model="formData.remark" placeholder="请输入备注" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="仓库类型(1 原料库 2 在制品库 3 成品库)" prop="storeType">
|
|
||||||
<el-select v-model="formData.storeType" placeholder="请选择仓库类型(1 原料库 2 在制品库 3 成品库)">
|
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getStrDictOptions(DICT_TYPE.WAREHOUSE_TYPE)"
|
v-for="dict in getStrDictOptions(DICT_TYPE.WAREHOUSE_TYPE)"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
@ -37,15 +17,38 @@
|
|||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="仓储编码" prop="storeHouseCd">
|
||||||
|
<el-input v-model="formData.storeHouseCd" placeholder="请输入仓储编码" class="!w-240px" :disabled="formData.id"/>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="仓储名称" prop="storeHouseName">
|
||||||
|
<el-input v-model="formData.storeHouseName" placeholder="请输入仓储名称" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="状态" prop="enabledStatus">
|
||||||
|
<el-select v-model="formData.enabledStatus" placeholder="请选择状态">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_STATUS)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input type="textarea" :rows="4" v-model="formData.remark" placeholder="请输入备注" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
<el-button @click="cancel">取 消</el-button>
|
||||||
</template>
|
</template>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
import {getStrDictOptions, DICT_TYPE, getIntDictOptions} from '@/utils/dict'
|
||||||
import * as StoreHouseApi from '@/api/biz/storehouse'
|
import * as StoreHouseApi from '@/api/biz/storehouse'
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
@ -59,11 +62,15 @@ const formData = ref({
|
|||||||
id: undefined,
|
id: undefined,
|
||||||
storeHouseCd: undefined,
|
storeHouseCd: undefined,
|
||||||
storeHouseName: undefined,
|
storeHouseName: undefined,
|
||||||
enabledStatus: undefined,
|
enabledStatus: 0,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
storeType: undefined,
|
storeType: undefined,
|
||||||
})
|
})
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
|
storeType: [{ required: true, message: '仓库类型不能为空', trigger: 'change' }],
|
||||||
|
storeHouseCd: [{ required: true, message: '仓储编码不能为空', trigger: 'blur' }],
|
||||||
|
storeHouseName: [{ required: true, message: '仓储名称不能为空', trigger: 'blur' }],
|
||||||
|
enabledStatus: [{ required: true, message: '状态不能为空', trigger: 'change' }]
|
||||||
})
|
})
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
@ -84,7 +91,11 @@ const open = async (type: string, id?: number) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||||
|
const cancel = async () => {
|
||||||
|
dialogVisible.value = false
|
||||||
|
emit('success')
|
||||||
|
|
||||||
|
}
|
||||||
/** 提交表单 */
|
/** 提交表单 */
|
||||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||||
const submitForm = async () => {
|
const submitForm = async () => {
|
||||||
@ -115,7 +126,7 @@ const resetForm = () => {
|
|||||||
id: undefined,
|
id: undefined,
|
||||||
storeHouseCd: undefined,
|
storeHouseCd: undefined,
|
||||||
storeHouseName: undefined,
|
storeHouseName: undefined,
|
||||||
enabledStatus: undefined,
|
enabledStatus: 0,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
storeType: undefined,
|
storeType: undefined,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,21 +6,27 @@
|
|||||||
:model="queryParams"
|
:model="queryParams"
|
||||||
ref="queryFormRef"
|
ref="queryFormRef"
|
||||||
:inline="true"
|
:inline="true"
|
||||||
label-width="68px"
|
label-width="80px"
|
||||||
>
|
>
|
||||||
<el-form-item label="仓储名称" prop="storeHouseName">
|
<el-form-item label="仓库类型" prop="storeType">
|
||||||
<el-input
|
<el-select
|
||||||
v-model="queryParams.storeHouseName"
|
v-model="queryParams.storeType"
|
||||||
placeholder="请输入仓储名称"
|
placeholder="请选择仓库类型"
|
||||||
clearable
|
clearable
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.WAREHOUSE_TYPE)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
/>
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态(1启用 2 未启用)" prop="enabledStatus">
|
<el-form-item label="状态" prop="enabledStatus">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="queryParams.enabledStatus"
|
v-model="queryParams.enabledStatus"
|
||||||
placeholder="请选择状态(1启用 2 未启用)"
|
placeholder="请选择状态"
|
||||||
clearable
|
clearable
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
>
|
>
|
||||||
@ -39,65 +45,55 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
@click="openForm('create')"
|
@click="openForm('create')"
|
||||||
v-hasPermi="['biz:store-house:create']"
|
|
||||||
>
|
>
|
||||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
|
||||||
type="success"
|
|
||||||
plain
|
|
||||||
@click="handleExport"
|
|
||||||
:loading="exportLoading"
|
|
||||||
v-hasPermi="['biz:store-house:export']"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
|
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" border>
|
||||||
<el-table-column label="自增字段" align="center" prop="id" />
|
<el-table-column type="index" label="序号" align="center" min-width="60" />
|
||||||
<el-table-column
|
<el-table-column label="仓库类型" align="center" prop="storeType">
|
||||||
label="创建时间"
|
<template #default="scope">
|
||||||
align="center"
|
<dict-tag :type="DICT_TYPE.WAREHOUSE_TYPE" :value="scope.row.storeType" />
|
||||||
prop="createTime"
|
</template>
|
||||||
:formatter="dateFormatter"
|
</el-table-column>
|
||||||
width="180px"
|
|
||||||
/>
|
|
||||||
<el-table-column label="仓储编码" align="center" prop="storeHouseCd" />
|
<el-table-column label="仓储编码" align="center" prop="storeHouseCd" />
|
||||||
<el-table-column label="仓储名称" align="center" prop="storeHouseName" />
|
<el-table-column label="仓储名称" align="center" prop="storeHouseName" />
|
||||||
<el-table-column label="状态(1启用 2 未启用)" align="center" prop="enabledStatus">
|
<el-table-column label="状态" align="center" prop="enabledStatus">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.SYSTEM_STATUS" :value="scope.row.enabledStatus" />
|
<dict-tag :type="DICT_TYPE.SYSTEM_STATUS" :value="scope.row.enabledStatus" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="备注" align="center" prop="remark" />
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
<el-table-column label="仓库类型(1 原料库 2 在制品库 3 成品库)" align="center" prop="storeType">
|
<el-table-column
|
||||||
<template #default="scope">
|
label="创建时间"
|
||||||
<dict-tag :type="DICT_TYPE.WAREHOUSE_TYPE" :value="scope.row.storeType" />
|
align="center"
|
||||||
</template>
|
prop="createTime"
|
||||||
</el-table-column>
|
:formatter="dateFormatter2"
|
||||||
|
width="180px"
|
||||||
|
/>
|
||||||
<el-table-column label="操作" align="center">
|
<el-table-column label="操作" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="openForm('update', scope.row.id)"
|
@click="openForm('update', scope.row.id)"
|
||||||
v-hasPermi="['biz:store-house:update']"
|
|
||||||
>
|
>
|
||||||
编辑
|
编辑
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<!-- <el-button-->
|
||||||
link
|
<!-- link-->
|
||||||
type="danger"
|
<!-- type="danger"-->
|
||||||
@click="handleDelete(scope.row.id)"
|
<!-- @click="handleDelete(scope.row.id)"-->
|
||||||
v-hasPermi="['biz:store-house:delete']"
|
<!-- v-hasPermi="['biz:store-house:delete']"-->
|
||||||
>
|
<!-- >-->
|
||||||
删除
|
<!-- 删除-->
|
||||||
</el-button>
|
<!-- </el-button>-->
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@ -116,8 +112,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
import { dateFormatter } from '@/utils/formatTime'
|
import { dateFormatter2} from '@/utils/formatTime'
|
||||||
import download from '@/utils/download'
|
|
||||||
import * as StoreHouseApi from '@/api/biz/storehouse'
|
import * as StoreHouseApi from '@/api/biz/storehouse'
|
||||||
import StoreHouseForm from './StoreHouseForm.vue'
|
import StoreHouseForm from './StoreHouseForm.vue'
|
||||||
|
|
||||||
@ -126,17 +121,17 @@ defineOptions({ name: 'StoreHouse' })
|
|||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
const loading = ref(true) // 列表的加载中
|
const loading = ref(false) // 列表的加载中
|
||||||
const list = ref([]) // 列表的数据
|
const list = ref([]) // 列表的数据
|
||||||
const total = ref(0) // 列表的总页数
|
const total = ref(0) // 列表的总页数
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
storeHouseName: undefined,
|
storeType: undefined,
|
||||||
enabledStatus: undefined,
|
enabledStatus: undefined,
|
||||||
})
|
})
|
||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
const exportLoading = ref(false) // 导出的加载中
|
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
@ -181,23 +176,10 @@ const handleDelete = async (id: number) => {
|
|||||||
} catch {}
|
} catch {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 导出按钮操作 */
|
|
||||||
const handleExport = async () => {
|
|
||||||
try {
|
|
||||||
// 导出的二次确认
|
|
||||||
await message.exportConfirm()
|
|
||||||
// 发起导出
|
|
||||||
exportLoading.value = true
|
|
||||||
const data = await StoreHouseApi.exportStoreHouse(queryParams)
|
|
||||||
download.excel(data, '仓储主数据.xls')
|
|
||||||
} catch {
|
|
||||||
} finally {
|
|
||||||
exportLoading.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 初始化 **/
|
/** 初始化 **/
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList()
|
// getList()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
@ -1,57 +1,91 @@
|
|||||||
<template>
|
<template>
|
||||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1200" @close="cancel">
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:model="formData"
|
:model="formData"
|
||||||
:rules="formRules"
|
:rules="formRules"
|
||||||
label-width="100px"
|
label-width="100px"
|
||||||
v-loading="formLoading"
|
v-loading="formLoading"
|
||||||
|
|
||||||
>
|
>
|
||||||
<el-form-item label="工艺流程" prop="techProc">
|
<el-form-item label="工艺流程" prop="techProc">
|
||||||
<el-input v-model="formData.techProc" placeholder="请输入工艺流程" />
|
<el-input v-model="techProcDisplay" placeholder="请输入工艺流程" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态(1启用 2 未启用)" prop="enabledStatus">
|
<el-form-item label="状态" prop="enabledStatus">
|
||||||
<el-radio-group v-model="formData.enabledStatus">
|
<el-select v-model="formData.enabledStatus" placeholder="请选择状态">
|
||||||
<el-radio
|
<el-option
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_STATUS)"
|
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_STATUS)"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
:label="dict.value"
|
:label="dict.label"
|
||||||
>
|
:value="dict.value"
|
||||||
{{ dict.label }}
|
/>
|
||||||
</el-radio>
|
</el-select>
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
<el-input v-model="formData.remark" placeholder="请输入备注" />
|
<el-input type="textarea" :rows="4" v-model="formData.remark" placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-card class="hl-card-info">
|
||||||
|
<template #header>
|
||||||
|
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">工序信息</span>
|
||||||
|
</template>
|
||||||
|
<el-row>
|
||||||
|
<el-col>
|
||||||
|
<el-card class="hl-incard">
|
||||||
|
<el-form ref="OrderYsDetailSubFormRef" :model="procList" label-width="0" >
|
||||||
|
<el-table ref="procTable" :data="procList" class="hl-table" @selection-change="handleProcSelectionChange" border>
|
||||||
|
<el-table-column type="selection" width="55"/>
|
||||||
|
<el-table-column prop="procCd" label="工序编码" align="center"/>
|
||||||
|
<el-table-column prop="procName" label="工序名称" align="center"/>
|
||||||
|
<el-table-column prop="remark" label="备注" align="center"/>
|
||||||
|
<el-table-column prop="creatorName" label="创建人" align="center"/>
|
||||||
|
<el-table-column prop="createTime" label="创建时间" align="center" :formatter="dateFormatter2"/>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
<el-button @click="cancel">取 消</el-button>
|
||||||
</template>
|
</template>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
import * as TechProcApi from '@/api/biz/techproc'
|
import * as TechProcApi from '@/api/biz/techproc'
|
||||||
|
import { dateFormatter2 } from '@/utils/formatTime'
|
||||||
|
import * as ProcApi from '@/api/biz/proc'
|
||||||
|
import { nextTick } from 'vue'
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
|
const procList = ref<ProcApi.ProcVO[]>([])
|
||||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||||
const dialogTitle = ref('') // 弹窗的标题
|
const dialogTitle = ref('') // 弹窗的标题
|
||||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
const formLoading = ref(false)
|
||||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
id: undefined,
|
id: undefined as number | undefined,
|
||||||
techProc: undefined,
|
techProc: undefined as string | undefined,
|
||||||
enabledStatus: undefined,
|
enabledStatus: 0 as number,
|
||||||
remark: undefined,
|
remark: undefined as string | undefined,
|
||||||
|
procList: undefined as string[] | undefined,
|
||||||
})
|
})
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
|
techProc: [{ required: true, message: '工艺流程不能为空', trigger: 'blur' }],
|
||||||
|
enabledStatus: [{ required: true, message: '状态不能为空', trigger: 'change' }]
|
||||||
})
|
})
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
|
const procTable = ref() // 工序表格 Ref
|
||||||
|
const selectedProcs = ref<ProcApi.ProcVO[]>([]) // 选中的工序行
|
||||||
|
const techProcDisplay = ref('') // 工序名称显示(按列表顺序)
|
||||||
|
const PROC_SEPARATOR = '-'
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = async (type: string, id?: number) => {
|
const open = async (type: string, id?: number) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
@ -59,17 +93,81 @@ const open = async (type: string, id?: number) => {
|
|||||||
formType.value = type
|
formType.value = type
|
||||||
resetForm()
|
resetForm()
|
||||||
// 修改时,设置数据
|
// 修改时,设置数据
|
||||||
|
procList.value=await ProcApi.getProcList()
|
||||||
|
|
||||||
if (id) {
|
if (id) {
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
formData.value = await TechProcApi.getTechProc(id)
|
formData.value = await TechProcApi.getTechProc(id)
|
||||||
|
// 编辑回显:工序名称显示
|
||||||
|
techProcDisplay.value = convertCodeToName(formData.value.techProc)
|
||||||
|
// 编辑回显:选中对应工序行
|
||||||
|
setSelectedRows(formData.value.techProc)
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
|
||||||
|
|
||||||
|
}
|
||||||
|
defineExpose({ open }) // 提供 open、setSelectedRows 方法
|
||||||
|
const cancel = async () => {
|
||||||
|
dialogVisible.value = false
|
||||||
|
emit('success')
|
||||||
|
}
|
||||||
|
/** 工序编码转名称 */
|
||||||
|
const convertCodeToName = (codeStr: string | undefined) => {
|
||||||
|
if (!codeStr) {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
const codes = codeStr.split(PROC_SEPARATOR)
|
||||||
|
const names = codes.map(code => {
|
||||||
|
const proc = procList.value.find(item => item.procCd === code)
|
||||||
|
return proc ? proc.procName : code
|
||||||
|
})
|
||||||
|
return names.join(PROC_SEPARATOR)
|
||||||
|
}
|
||||||
|
/** 工序选择变化处理 - 按列表顺序排列 */
|
||||||
|
const handleProcSelectionChange = (rows: ProcApi.ProcVO[]) => {
|
||||||
|
selectedProcs.value = rows
|
||||||
|
// 获取选中的编码集合
|
||||||
|
const selectedCodes = new Set(rows.map(item => item.procCd))
|
||||||
|
// 按列表顺序过滤选中的工序
|
||||||
|
const sortedSelected = procList.value.filter(item => selectedCodes.has(item.procCd))
|
||||||
|
// 显示用:工序名称拼接(按列表顺序)
|
||||||
|
techProcDisplay.value = sortedSelected.map(item => item.procName).join(PROC_SEPARATOR)
|
||||||
|
// 存储用:工序编码拼接(按列表顺序)
|
||||||
|
formData.value.techProc = sortedSelected.map(item => item.procCd).join(PROC_SEPARATOR)
|
||||||
|
// 保存选中的工序编码列表(按列表顺序)
|
||||||
|
formData.value.procList = sortedSelected.map(item => item.procCd)
|
||||||
|
}
|
||||||
|
/** 设置表格选中行 */
|
||||||
|
const setSelectedRows = (procCodes) => {
|
||||||
|
if (!procCodes || !procTable.value || procList.value.length === 0) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let codes: string[] = []
|
||||||
|
if (Array.isArray(procCodes)) {
|
||||||
|
if (procCodes.length > 0 && typeof procCodes[0] === 'object') {
|
||||||
|
codes = procCodes.map((item: any) => item.procCd || item.id || item)
|
||||||
|
} else {
|
||||||
|
codes = procCodes
|
||||||
|
}
|
||||||
|
} else if (typeof procCodes === 'string') {
|
||||||
|
codes = procCodes.split(PROC_SEPARATOR)
|
||||||
|
}
|
||||||
|
procTable.value.clearSelection()
|
||||||
|
if (codes.length > 0) {
|
||||||
|
const codeSet = new Set(codes.map(c => String(c)))
|
||||||
|
const rows = procList.value.filter(item => codeSet.has(String(item.procCd)))
|
||||||
|
selectedProcs.value = rows
|
||||||
|
nextTick(() => {
|
||||||
|
rows.forEach(row => {
|
||||||
|
procTable.value.toggleRowSelection(row, true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
/** 提交表单 */
|
/** 提交表单 */
|
||||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||||
const submitForm = async () => {
|
const submitForm = async () => {
|
||||||
@ -99,9 +197,11 @@ const resetForm = () => {
|
|||||||
formData.value = {
|
formData.value = {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
techProc: undefined,
|
techProc: undefined,
|
||||||
enabledStatus: undefined,
|
enabledStatus: 0,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
|
procList: undefined,
|
||||||
}
|
}
|
||||||
|
techProcDisplay.value = ''
|
||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@ -8,10 +8,10 @@
|
|||||||
:inline="true"
|
:inline="true"
|
||||||
label-width="68px"
|
label-width="68px"
|
||||||
>
|
>
|
||||||
<el-form-item label="状态(1启用 2 未启用)" prop="enabledStatus">
|
<el-form-item label="状态" prop="enabledStatus">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="queryParams.enabledStatus"
|
v-model="queryParams.enabledStatus"
|
||||||
placeholder="请选择状态(1启用 2 未启用)"
|
placeholder="请选择状态"
|
||||||
clearable
|
clearable
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
>
|
>
|
||||||
@ -34,55 +34,44 @@
|
|||||||
>
|
>
|
||||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
|
||||||
type="success"
|
|
||||||
plain
|
|
||||||
@click="handleExport"
|
|
||||||
:loading="exportLoading"
|
|
||||||
v-hasPermi="['biz:tech-proc:export']"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
|
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" border>
|
||||||
<el-table-column label="自增字段" align="center" prop="id" />
|
<el-table-column type="index" label="序号" align="center" min-width="60" />
|
||||||
<el-table-column
|
<el-table-column label="工艺流程" align="center" prop="techProcDisplay" width="300px"/>
|
||||||
label="创建时间"
|
<el-table-column label="状态" align="center" prop="enabledStatus" width="100px">
|
||||||
align="center"
|
|
||||||
prop="createTime"
|
|
||||||
:formatter="dateFormatter"
|
|
||||||
width="180px"
|
|
||||||
/>
|
|
||||||
<el-table-column label="工艺流程" align="center" prop="techProc" />
|
|
||||||
<el-table-column label="状态(1启用 2 未启用)" align="center" prop="enabledStatus">
|
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.SYSTEM_STATUS" :value="scope.row.enabledStatus" />
|
<dict-tag :type="DICT_TYPE.SYSTEM_STATUS" :value="scope.row.enabledStatus" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="备注" align="center" prop="remark" />
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
<el-table-column label="操作" align="center">
|
<el-table-column
|
||||||
|
label="创建人"
|
||||||
|
align="center"
|
||||||
|
prop="nickname"
|
||||||
|
width="100px"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
label="创建时间"
|
||||||
|
align="center"
|
||||||
|
prop="createTime"
|
||||||
|
:formatter="dateFormatter2" width="120px"
|
||||||
|
/>
|
||||||
|
<el-table-column label="操作" align="center" width="100px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="openForm('update', scope.row.id)"
|
@click="openForm('update', scope.row.id)"
|
||||||
v-hasPermi="['biz:tech-proc:update']"
|
|
||||||
>
|
>
|
||||||
编辑
|
编辑
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="danger"
|
|
||||||
@click="handleDelete(scope.row.id)"
|
|
||||||
v-hasPermi="['biz:tech-proc:delete']"
|
|
||||||
>
|
|
||||||
删除
|
|
||||||
</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@ -101,18 +90,21 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
import { dateFormatter } from '@/utils/formatTime'
|
import { dateFormatter2} from '@/utils/formatTime'
|
||||||
import download from '@/utils/download'
|
|
||||||
import * as TechProcApi from '@/api/biz/techproc'
|
import * as TechProcApi from '@/api/biz/techproc'
|
||||||
import TechProcForm from './TechProcForm.vue'
|
import TechProcForm from './TechProcForm.vue'
|
||||||
|
import * as ProcApi from "@/api/biz/proc";
|
||||||
|
|
||||||
|
interface TechProcVOWithDisplay extends TechProcApi.TechProcVO {
|
||||||
|
techProcDisplay?: string
|
||||||
|
}
|
||||||
|
|
||||||
defineOptions({ name: 'TechProc' })
|
defineOptions({ name: 'TechProc' })
|
||||||
|
|
||||||
const message = useMessage() // 消息弹窗
|
const procList = ref<ProcApi.ProcVO[]>([])
|
||||||
const { t } = useI18n() // 国际化
|
|
||||||
|
|
||||||
const loading = ref(true) // 列表的加载中
|
const loading = ref(false) // 列表的加载中
|
||||||
const list = ref([]) // 列表的数据
|
const list = ref<TechProcVOWithDisplay[]>([]) // 列表的数据
|
||||||
const total = ref(0) // 列表的总页数
|
const total = ref(0) // 列表的总页数
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
@ -120,7 +112,7 @@ const queryParams = reactive({
|
|||||||
enabledStatus: undefined,
|
enabledStatus: undefined,
|
||||||
})
|
})
|
||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
const exportLoading = ref(false) // 导出的加载中
|
const PROC_SEPARATOR = '-'
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
@ -128,12 +120,26 @@ const getList = async () => {
|
|||||||
try {
|
try {
|
||||||
const data = await TechProcApi.getTechProcPage(queryParams)
|
const data = await TechProcApi.getTechProcPage(queryParams)
|
||||||
list.value = data.list
|
list.value = data.list
|
||||||
|
list.value.forEach(item=>{
|
||||||
|
item.techProcDisplay=convertCodeToName(item.techProc)
|
||||||
|
})
|
||||||
total.value = data.total
|
total.value = data.total
|
||||||
} finally {
|
} finally {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/** 工序编码转名称 */
|
||||||
|
const convertCodeToName = (codeStr: string | undefined) => {
|
||||||
|
if (!codeStr) {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
const codes = codeStr.split(PROC_SEPARATOR)
|
||||||
|
const names = codes.map(code => {
|
||||||
|
const proc = procList.value.find(item => item.procCd === code)
|
||||||
|
return proc ? proc.procName : code
|
||||||
|
})
|
||||||
|
return names.join(PROC_SEPARATOR)
|
||||||
|
}
|
||||||
/** 搜索按钮操作 */
|
/** 搜索按钮操作 */
|
||||||
const handleQuery = () => {
|
const handleQuery = () => {
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
@ -152,36 +158,13 @@ const openForm = (type: string, id?: number) => {
|
|||||||
formRef.value.open(type, id)
|
formRef.value.open(type, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
const handleDelete = async (id: number) => {
|
|
||||||
try {
|
|
||||||
// 删除的二次确认
|
|
||||||
await message.delConfirm()
|
|
||||||
// 发起删除
|
|
||||||
await TechProcApi.deleteTechProc(id)
|
|
||||||
message.success(t('common.delSuccess'))
|
|
||||||
// 刷新列表
|
|
||||||
await getList()
|
|
||||||
} catch {}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 导出按钮操作 */
|
|
||||||
const handleExport = async () => {
|
|
||||||
try {
|
|
||||||
// 导出的二次确认
|
|
||||||
await message.exportConfirm()
|
|
||||||
// 发起导出
|
|
||||||
exportLoading.value = true
|
|
||||||
const data = await TechProcApi.exportTechProc(queryParams)
|
|
||||||
download.excel(data, '工艺流程主数据.xls')
|
|
||||||
} catch {
|
|
||||||
} finally {
|
|
||||||
exportLoading.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 初始化 **/
|
/** 初始化 **/
|
||||||
onMounted(() => {
|
onMounted(async () => {
|
||||||
getList()
|
// getList()
|
||||||
|
procList.value=await ProcApi.getProcList()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
Loading…
Reference in New Issue
Block a user