按文档修改
This commit is contained in:
parent
44b2a30055
commit
009d9afbf4
BIN
logs/mes-server.log.2025-02-17.0.gz
Normal file
BIN
logs/mes-server.log.2025-02-17.0.gz
Normal file
Binary file not shown.
BIN
logs/mes-server.log.2025-02-19.0.gz
Normal file
BIN
logs/mes-server.log.2025-02-19.0.gz
Normal file
Binary file not shown.
BIN
logs/mes-server.log.2025-02-21.0.gz
Normal file
BIN
logs/mes-server.log.2025-02-21.0.gz
Normal file
Binary file not shown.
BIN
logs/mes-server.log.2025-03-05.0.gz
Normal file
BIN
logs/mes-server.log.2025-03-05.0.gz
Normal file
Binary file not shown.
BIN
logs/mes-server.log.2025-05-16.0.gz
Normal file
BIN
logs/mes-server.log.2025-05-16.0.gz
Normal file
Binary file not shown.
@ -202,8 +202,8 @@
|
|||||||
<version>${redisson.version}</version>
|
<version>${redisson.version}</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>spring-boot-starter-actuator</artifactId>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
@ -238,8 +238,8 @@
|
|||||||
<version>${lock4j.version}</version>
|
<version>${lock4j.version}</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>redisson-spring-boot-starter</artifactId>
|
|
||||||
<groupId>org.redisson</groupId>
|
<groupId>org.redisson</groupId>
|
||||||
|
<artifactId>redisson-spring-boot-starter</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
@ -294,8 +294,8 @@
|
|||||||
<version>${spring-boot-admin.version}</version>
|
<version>${spring-boot-admin.version}</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>spring-boot-admin-server-cloud</artifactId>
|
|
||||||
<groupId>de.codecentric</groupId>
|
<groupId>de.codecentric</groupId>
|
||||||
|
<artifactId>spring-boot-admin-server-cloud</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
@ -315,12 +315,12 @@
|
|||||||
<version>${spring.boot.version}</version>
|
<version>${spring.boot.version}</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>asm</artifactId>
|
|
||||||
<groupId>org.ow2.asm</groupId>
|
<groupId>org.ow2.asm</groupId>
|
||||||
|
<artifactId>asm</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>mockito-core</artifactId>
|
|
||||||
<groupId>org.mockito</groupId>
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-core</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
@ -415,12 +415,12 @@
|
|||||||
<version>${screw.version}</version>
|
<version>${screw.version}</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>freemarker</artifactId>
|
|
||||||
<groupId>org.freemarker</groupId>
|
<groupId>org.freemarker</groupId>
|
||||||
|
<artifactId>freemarker</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>fastjson</artifactId>
|
|
||||||
<groupId>com.alibaba</groupId>
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>fastjson</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
@ -490,12 +490,12 @@
|
|||||||
<version>${aliyun-java-sdk-core.version}</version>
|
<version>${aliyun-java-sdk-core.version}</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>opentracing-api</artifactId>
|
|
||||||
<groupId>io.opentracing</groupId>
|
<groupId>io.opentracing</groupId>
|
||||||
|
<artifactId>opentracing-api</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>opentracing-util</artifactId>
|
|
||||||
<groupId>io.opentracing</groupId>
|
<groupId>io.opentracing</groupId>
|
||||||
|
<artifactId>opentracing-util</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
@ -515,8 +515,8 @@
|
|||||||
<version>${justauth.version}</version>
|
<version>${justauth.version}</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>hutool-core</artifactId>
|
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
|
<artifactId>hutool-core</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
@ -541,8 +541,8 @@
|
|||||||
<version>${jimureport.version}</version>
|
<version>${jimureport.version}</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>druid</artifactId>
|
|
||||||
<groupId>com.alibaba</groupId>
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>druid</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
@ -84,6 +84,7 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode PROCESS_BOM_DETAIL_UNSTANDARD_MATERIAL_NAME_IS_REPEAT= new ErrorCode(1_006_009, "非标准件工艺bom明细物料名称重复");
|
ErrorCode PROCESS_BOM_DETAIL_UNSTANDARD_MATERIAL_NAME_IS_REPEAT= new ErrorCode(1_006_009, "非标准件工艺bom明细物料名称重复");
|
||||||
ErrorCode PROCESS_BOM_DETAIL_UNSTANDARD_SPEC_IS_NULL= new ErrorCode(1_006_010, "非标准件工艺bom明细规格为空");
|
ErrorCode PROCESS_BOM_DETAIL_UNSTANDARD_SPEC_IS_NULL= new ErrorCode(1_006_010, "非标准件工艺bom明细规格为空");
|
||||||
ErrorCode PRICESS_UNIT_ERRPR = new ErrorCode(1_006_0011, "bom单位非法,请在字典基础数据中维护");
|
ErrorCode PRICESS_UNIT_ERRPR = new ErrorCode(1_006_0011, "bom单位非法,请在字典基础数据中维护");
|
||||||
|
|
||||||
/************生产计划管理***********/
|
/************生产计划管理***********/
|
||||||
ErrorCode PLAN_NOT_EXISTS = new ErrorCode(1_007_001, "生产计划不存在");
|
ErrorCode PLAN_NOT_EXISTS = new ErrorCode(1_007_001, "生产计划不存在");
|
||||||
ErrorCode PLAN_SUB_NOT_EXISTS = new ErrorCode(1_007_002, "生产计划子项目不存在");
|
ErrorCode PLAN_SUB_NOT_EXISTS = new ErrorCode(1_007_002, "生产计划子项目不存在");
|
||||||
@ -111,6 +112,7 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode TASK_DISPATCH_TASK_IS_OVER = new ErrorCode(1_009_007, "报工数量已完成");
|
ErrorCode TASK_DISPATCH_TASK_IS_OVER = new ErrorCode(1_009_007, "报工数量已完成");
|
||||||
ErrorCode TASK_DISPATCH_TASK_REPORT_AMOUNT_EXCESS = new ErrorCode(1_009_006, "无法超额报工");
|
ErrorCode TASK_DISPATCH_TASK_REPORT_AMOUNT_EXCESS = new ErrorCode(1_009_006, "无法超额报工");
|
||||||
ErrorCode TASK_REPORT_OTHER_PERSON_NO_SUBMIT = new ErrorCode(1_009_020, "其他人员尚未报工,无法结束生产");
|
ErrorCode TASK_REPORT_OTHER_PERSON_NO_SUBMIT = new ErrorCode(1_009_020, "其他人员尚未报工,无法结束生产");
|
||||||
|
//1_009_021已被使用
|
||||||
/*************质量管理***********/
|
/*************质量管理***********/
|
||||||
ErrorCode UNQUALIFIED_NOTIFICATION_NOT_EXISTS = new ErrorCode(1_010_001, "品质异常通知单审核不存在");
|
ErrorCode UNQUALIFIED_NOTIFICATION_NOT_EXISTS = new ErrorCode(1_010_001, "品质异常通知单审核不存在");
|
||||||
ErrorCode QUALITY_FEEDBACK_NOT_EXISTS = new ErrorCode(1_010_002, "客户反馈质量不存在");
|
ErrorCode QUALITY_FEEDBACK_NOT_EXISTS = new ErrorCode(1_010_002, "客户反馈质量不存在");
|
||||||
|
@ -192,9 +192,10 @@ public class ProcessBomController {
|
|||||||
@Parameters({@Parameter(name = "file", description = "Excel 文件", required = true)})
|
@Parameters({@Parameter(name = "file", description = "Excel 文件", required = true)})
|
||||||
@PreAuthorize("@ss.hasPermission('heli:process-bom:import')")
|
@PreAuthorize("@ss.hasPermission('heli:process-bom:import')")
|
||||||
@OperateLog(type = IMPORT)
|
@OperateLog(type = IMPORT)
|
||||||
public CommonResult<ProcessBomImportRespVO> importExcel(@RequestParam("file") MultipartFile file) {
|
public CommonResult<ProcessBomImportRespVO> importExcel(HttpServletRequest request,@RequestParam("file") MultipartFile file) {
|
||||||
try {
|
try {
|
||||||
processBomService.importExcel(file);
|
String bomCode = request.getHeader("Bom-Code");
|
||||||
|
processBomService.importExcel(file,bomCode);
|
||||||
return success(null);
|
return success(null);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return error(500, "文件导入失败: " + e.getMessage());
|
return error(500, "文件导入失败: " + e.getMessage());
|
||||||
|
@ -2,6 +2,7 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo;
|
|||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat;
|
import com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat;
|
||||||
import com.chanko.yunxi.mes.framework.excel.core.convert.DictConvert;
|
import com.chanko.yunxi.mes.framework.excel.core.convert.DictConvert;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
@ -88,4 +89,9 @@ public class ProcessBomRespVO {
|
|||||||
@Schema(description = "审核人")
|
@Schema(description = "审核人")
|
||||||
private Long shenheUser;
|
private Long shenheUser;
|
||||||
|
|
||||||
|
private String customerBrief;
|
||||||
|
|
||||||
|
private String projectNameSim;
|
||||||
|
|
||||||
|
private String subNameSim;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo;
|
package com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -64,6 +65,11 @@ public class ProcessBomSaveReqVO {
|
|||||||
@Schema(description = "操作意见")
|
@Schema(description = "操作意见")
|
||||||
private String activeOpinion;
|
private String activeOpinion;
|
||||||
|
|
||||||
|
private String customerBrief;
|
||||||
|
|
||||||
|
private String projectNameSim;
|
||||||
|
|
||||||
|
private String subNameSim;
|
||||||
/**
|
/**
|
||||||
* 审核人
|
* 审核人
|
||||||
*/
|
*/
|
||||||
|
@ -94,6 +94,12 @@ public class ProcessDesignRespVO {
|
|||||||
@Schema(description = "毛坯负责人名称")
|
@Schema(description = "毛坯负责人名称")
|
||||||
private String blankOwnerName;
|
private String blankOwnerName;
|
||||||
|
|
||||||
|
@Schema(description = "是否延期", example = "0")
|
||||||
|
private Integer isDelay;
|
||||||
|
@Schema(description = "延期时间戳", example = "2023-01-02")
|
||||||
|
private Date delayTime;
|
||||||
|
@Schema(description = "延期原因", example = "28809")
|
||||||
|
private String delayReason;
|
||||||
@Schema(description = "毛坯最新进度")
|
@Schema(description = "毛坯最新进度")
|
||||||
private BigDecimal progressBlank;
|
private BigDecimal progressBlank;
|
||||||
|
|
||||||
|
@ -35,7 +35,12 @@ public class ProcessDesignSaveReqVO {
|
|||||||
|
|
||||||
@Schema(description = "子项目id", example = "28809")
|
@Schema(description = "子项目id", example = "28809")
|
||||||
private Long projectSubId;
|
private Long projectSubId;
|
||||||
|
@Schema(description = "是否延期", example = "0")
|
||||||
|
private Integer isDelay;
|
||||||
|
@Schema(description = "延期时间戳", example = "2023-01-02")
|
||||||
|
private Date delayTime;
|
||||||
|
@Schema(description = "延期原因", example = "28809")
|
||||||
|
private String delayReason;
|
||||||
@Schema(description = "工艺设计进度列表")
|
@Schema(description = "工艺设计进度列表")
|
||||||
private List<ProcessDesignProgressDO> processDesignProgressList;
|
private List<ProcessDesignProgressDO> processDesignProgressList;
|
||||||
|
|
||||||
|
@ -35,4 +35,6 @@ public class TaskDispatchDetailPageReqVO extends PageParam {
|
|||||||
@Schema(description = "bom明细id")
|
@Schema(description = "bom明细id")
|
||||||
private Long bomDetailId;
|
private Long bomDetailId;
|
||||||
|
|
||||||
|
@Schema(description = "项目或子项目id")
|
||||||
|
private String subOrDetailName;
|
||||||
}
|
}
|
||||||
|
@ -110,6 +110,7 @@ public class PgMasterLineDO extends BaseDO {
|
|||||||
* 预计工时
|
* 预计工时
|
||||||
*/
|
*/
|
||||||
private BigDecimal gongShi;
|
private BigDecimal gongShi;
|
||||||
|
private Long procedureId;
|
||||||
/**
|
/**
|
||||||
* 质量派工id
|
* 质量派工id
|
||||||
*/
|
*/
|
||||||
|
@ -143,6 +143,12 @@ public class ProcessBomDO extends BaseDO {
|
|||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String projectSubCode;
|
private String projectSubCode;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String customerBrief;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String projectNameSim;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String subNameSim;
|
||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private Integer property;
|
private Integer property;
|
||||||
|
@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.annotation.TableField;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
|
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工艺设计 DO
|
* 工艺设计 DO
|
||||||
@ -52,6 +54,12 @@ public class ProcessDesignDO extends BaseDO {
|
|||||||
* 项目id
|
* 项目id
|
||||||
*/
|
*/
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
|
|
||||||
|
private Integer isDelay;
|
||||||
|
|
||||||
|
private Date delayTime;
|
||||||
|
|
||||||
|
private String delayReason;
|
||||||
/**
|
/**
|
||||||
* 子项目id
|
* 子项目id
|
||||||
*/
|
*/
|
||||||
|
@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress;
|
|||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
|
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
|
||||||
@ -53,4 +54,9 @@ public class ProcessDesignProgressDO extends BaseDO {
|
|||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String creatorName;
|
private String creatorName;
|
||||||
|
|
||||||
|
private Integer isOver;
|
||||||
|
private Date beginTime;
|
||||||
|
private Date endTime;
|
||||||
|
private BigDecimal workTime;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -85,6 +85,8 @@ public class TaskDispatchDetailDO extends BaseDO {
|
|||||||
private LocalDateTime startTime;
|
private LocalDateTime startTime;
|
||||||
|
|
||||||
private Long detailOwnerId;
|
private Long detailOwnerId;
|
||||||
|
//是否过程检, 否-Y 是 -N
|
||||||
|
private String testYn;
|
||||||
/**
|
/**
|
||||||
* 预计结束日期
|
* 预计结束日期
|
||||||
*/
|
*/
|
||||||
|
@ -70,7 +70,7 @@ public interface FpUserDetailMapper extends BaseMapperX<FpUserDetailDO> {
|
|||||||
throw exception(OWNER_NOT_EXISTS);
|
throw exception(OWNER_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id!=null &&fpUserDetailDOS.size()!=1) {
|
if (id!=null && fpUserDetailDOS.size()!=1) {
|
||||||
throw exception(OWNER_NOT_EXISTS);
|
throw exception(OWNER_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.dal.mysql.processbom;
|
package com.chanko.yunxi.mes.module.heli.dal.mysql.processbom;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.ProcessBoomPageReqVO;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.ProcessBoomPageReqVO;
|
||||||
@ -53,7 +55,7 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
|
|||||||
"LEFT JOIN v_storage_material_now s ON p.material_id = s.id " +
|
"LEFT JOIN v_storage_material_now s ON p.material_id = s.id " +
|
||||||
"LEFT JOIN base_material m ON s.id=m.id "+
|
"LEFT JOIN base_material m ON s.id=m.id "+
|
||||||
"WHERE p.bom_id = #{bomId} and p.material_id is not null AND p.deleted IN (0, 1) " +
|
"WHERE p.bom_id = #{bomId} and p.material_id is not null AND p.deleted IN (0, 1) " +
|
||||||
"GROUP BY p.material_code")
|
"GROUP BY p.id") //2025 0601 因为bom明细页查询到结果 由 group by materialcode转换为 group by id
|
||||||
List<ProcessBomDetailDO> selectStandardListByBomId(@Param("bomId") Long bomId);
|
List<ProcessBomDetailDO> selectStandardListByBomId(@Param("bomId") Long bomId);
|
||||||
|
|
||||||
default Long getBomDetailByBluePrintNoAndBomId(String bomCode,String bluePrintNo){
|
default Long getBomDetailByBluePrintNoAndBomId(String bomCode,String bluePrintNo){
|
||||||
@ -98,6 +100,17 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
|
|||||||
|
|
||||||
List<ProcessBomDetailDO> selectListByBomIdbyid(Long id,Long bomId);
|
List<ProcessBomDetailDO> selectListByBomIdbyid(Long id,Long bomId);
|
||||||
|
|
||||||
|
default int updateCompositionIdBatch(List<Long> ids){
|
||||||
|
if(CollUtil.isNotEmpty(ids)){
|
||||||
|
UpdateWrapper<ProcessBomDetailDO> updateSql = new UpdateWrapper<>();
|
||||||
|
updateSql.set("composition_id",null).in("id",ids);
|
||||||
|
return update(updateSql);
|
||||||
|
}else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// return selectList(ProcessBomDetailDO::getBomId, bomId);
|
// return selectList(ProcessBomDetailDO::getBomId, bomId);
|
||||||
// }
|
// }
|
||||||
default List<ProcessBomDetailDO> selectListByproid(Long bomId) {
|
default List<ProcessBomDetailDO> selectListByproid(Long bomId) {
|
||||||
|
@ -126,7 +126,7 @@ public interface ProcessBomMapper extends BaseMapperX<ProcessBomDO> {
|
|||||||
query.selectAll(ProcessBomDO.class)
|
query.selectAll(ProcessBomDO.class)
|
||||||
.select("concat('BOM-', e.project_sub_code) as bomCode", "e.project_sub_code as projectSubCode")
|
.select("concat('BOM-', e.project_sub_code) as bomCode", "e.project_sub_code as projectSubCode")
|
||||||
.select("a.plan_no as planCode", "b.code as projectCode", "c.name as customerName", "b.project_name as projectName","b.property as property")
|
.select("a.plan_no as planCode", "b.code as projectCode", "c.name as customerName", "b.project_name as projectName","b.property as property")
|
||||||
|
.select("c.brief as customerBrief,b.project_name_sim as projectNameSim,d.name_sim as subNameSim")
|
||||||
.select("d.name as projectSubName")
|
.select("d.name as projectSubName")
|
||||||
.leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessBomDO::getPlanId)
|
.leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessBomDO::getPlanId)
|
||||||
.leftJoin(PlanSubDO.class, "e", PlanSubDO::getProjectSubId, ProcessBomDO::getProjectSubId)
|
.leftJoin(PlanSubDO.class, "e", PlanSubDO::getProjectSubId, ProcessBomDO::getProjectSubId)
|
||||||
|
@ -305,6 +305,9 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
|
|||||||
.ne(ProjectOrderDO::getStatus,6)
|
.ne(ProjectOrderDO::getStatus,6)
|
||||||
.groupBy(TaskDispatchDetailDO::getId)
|
.groupBy(TaskDispatchDetailDO::getId)
|
||||||
.disableSubLogicDel();
|
.disableSubLogicDel();
|
||||||
|
if (reqVO.getSubOrDetailName() != null && !reqVO.getSubOrDetailName().trim().equals("")){
|
||||||
|
query.apply("(b.project_name like '%" + reqVO.getSubOrDetailName() + "%' or c.name like '%" + reqVO.getSubOrDetailName() + "%')");
|
||||||
|
}
|
||||||
if (reqVO.getProcedureStatusList().size()==1 && reqVO.getProcedureStatusList().get(0)==2){
|
if (reqVO.getProcedureStatusList().size()==1 && reqVO.getProcedureStatusList().get(0)==2){
|
||||||
//完工降序
|
//完工降序
|
||||||
query.orderByDesc(TaskDispatchDetailDO::getDispatchId,TaskDispatchDetailDO::getSort);
|
query.orderByDesc(TaskDispatchDetailDO::getDispatchId,TaskDispatchDetailDO::getSort);
|
||||||
|
@ -79,7 +79,7 @@ public interface PgMasterService {
|
|||||||
*/
|
*/
|
||||||
List<PgMasterLineDO> getPgMasterLineListByZlPgId(Integer zlPgId);
|
List<PgMasterLineDO> getPgMasterLineListByZlPgId(Integer zlPgId);
|
||||||
|
|
||||||
Boolean insertPgList(Long task_id,Long project_id,Long bomMxId);
|
Boolean insertPgList(Long task_id,Long project_id,Long bomMxId,Long procedureId);
|
||||||
|
|
||||||
List<PgMasterLineDO> searchBomMx(Long task_id,Long project_id);
|
List<PgMasterLineDO> searchBomMx(Long task_id,Long project_id);
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ public class PgMasterServiceImpl implements PgMasterService {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean insertPgList(Long task_id,Long project_id,Long bomMxId){
|
public Boolean insertPgList(Long task_id,Long project_id,Long bomMxId,Long procedureId){
|
||||||
//213 605
|
//213 605
|
||||||
//查询BOM明细
|
//查询BOM明细
|
||||||
List<ProcessBomDO> processBomDOList = processBomMapper.selectBomMx(task_id,project_id,bomMxId);
|
List<ProcessBomDO> processBomDOList = processBomMapper.selectBomMx(task_id,project_id,bomMxId);
|
||||||
@ -68,6 +68,8 @@ public class PgMasterServiceImpl implements PgMasterService {
|
|||||||
PgMasterLineDO pgMasterLineDO = new PgMasterLineDO();
|
PgMasterLineDO pgMasterLineDO = new PgMasterLineDO();
|
||||||
//bomID
|
//bomID
|
||||||
pgMasterLineDO.setBomId(o.getBomId());
|
pgMasterLineDO.setBomId(o.getBomId());
|
||||||
|
//工序id
|
||||||
|
pgMasterLineDO.setProcedureId(procedureId);
|
||||||
//bom名称
|
//bom名称
|
||||||
pgMasterLineDO.setBomName("BOM-"+o.getProjectSubShortName());
|
pgMasterLineDO.setBomName("BOM-"+o.getProjectSubShortName());
|
||||||
//bom编号
|
//bom编号
|
||||||
|
@ -164,11 +164,13 @@ private TaskReportMapper taskReportMapper;
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public PlanDO getPlanByProjectId(Long projectId){
|
public PlanDO getPlanByProjectId(Long projectId){
|
||||||
return planMapper.selectOne(new LambdaQueryWrapper<PlanDO>() {{
|
return planMapper.selectOne(new LambdaQueryWrapper<PlanDO>() {
|
||||||
|
{
|
||||||
eq(PlanDO::getProjectId, projectId);
|
eq(PlanDO::getProjectId, projectId);
|
||||||
orderByDesc(PlanDO::getId);
|
orderByDesc(PlanDO::getId);
|
||||||
last("LIMIT 1");
|
last("LIMIT 1");
|
||||||
}});
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@ -180,7 +182,8 @@ private TaskReportMapper taskReportMapper;
|
|||||||
eq(PlanDO::getProjectId, projectId);
|
eq(PlanDO::getProjectId, projectId);
|
||||||
orderByDesc(PlanDO::getId);
|
orderByDesc(PlanDO::getId);
|
||||||
last("LIMIT 1");
|
last("LIMIT 1");
|
||||||
}});
|
}}
|
||||||
|
);
|
||||||
// 生成生产计划子项目信息
|
// 生成生产计划子项目信息
|
||||||
List<ProjectOrderSubDO> projectOrderSubDOs = projectOrderService.getProjectOrderSubListByProjectOrderId(projectId);
|
List<ProjectOrderSubDO> projectOrderSubDOs = projectOrderService.getProjectOrderSubListByProjectOrderId(projectId);
|
||||||
if(planDO != null){
|
if(planDO != null){
|
||||||
|
@ -36,7 +36,7 @@ public interface ProcessBomService {
|
|||||||
* @param file 文件
|
* @param file 文件
|
||||||
* @return 编号
|
* @return 编号
|
||||||
*/
|
*/
|
||||||
void importExcel(@Valid MultipartFile file) throws IOException;
|
void importExcel(@Valid MultipartFile file,String bomCode) throws IOException;
|
||||||
/**
|
/**
|
||||||
* 更新工艺bom
|
* 更新工艺bom
|
||||||
*
|
*
|
||||||
|
@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.generator.IFill;
|
import com.baomidou.mybatisplus.generator.IFill;
|
||||||
import com.chanko.yunxi.mes.framework.common.enums.BomEditStatusEnum;
|
import com.chanko.yunxi.mes.framework.common.enums.BomEditStatusEnum;
|
||||||
import com.chanko.yunxi.mes.framework.common.enums.StatusEnum;
|
import com.chanko.yunxi.mes.framework.common.enums.StatusEnum;
|
||||||
|
import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||||
@ -54,6 +55,7 @@ import org.springframework.validation.annotation.Validated;
|
|||||||
|
|
||||||
import com.chanko.yunxi.mes.module.heli.service.shenhe.SerarchUser;
|
import com.chanko.yunxi.mes.module.heli.service.shenhe.SerarchUser;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import org.thymeleaf.expression.Ids;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
@ -128,13 +130,16 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void importExcel(@Valid MultipartFile file) throws IOException {
|
public void importExcel(@Valid MultipartFile file,String bomCode) throws IOException {
|
||||||
// 校验文件格式
|
// 校验文件格式
|
||||||
if (!file.getOriginalFilename().endsWith(".xlsx") && !file.getOriginalFilename().endsWith(".xls")) {
|
if (!file.getOriginalFilename().endsWith(".xlsx") && !file.getOriginalFilename().endsWith(".xls")) {
|
||||||
throw exception(EXCEL_FILE_FORMAT_ERROR);
|
throw exception(EXCEL_FILE_FORMAT_ERROR);
|
||||||
}
|
}
|
||||||
// 读取Excel文件并转换为VO对象列表
|
// 读取Excel文件并转换为VO对象列表
|
||||||
List<ProcessBomImportExcelVO> list = ExcelUtils.read(file, ProcessBomImportExcelVO.class);
|
List<ProcessBomImportExcelVO> list = ExcelUtils.read(file, ProcessBomImportExcelVO.class);
|
||||||
|
for (ProcessBomImportExcelVO processBomImportExcelVO : list) {
|
||||||
|
processBomImportExcelVO.setCode(bomCode);
|
||||||
|
}
|
||||||
HashSet<String> blueprintNoList = new HashSet<String>();
|
HashSet<String> blueprintNoList = new HashSet<String>();
|
||||||
Map<String, List<ProcessBomImportExcelVO>> groupedByCode = list.stream().collect(Collectors.groupingBy(vo -> vo.getCode() == null ? "NULL" : vo.getCode()));
|
Map<String, List<ProcessBomImportExcelVO>> groupedByCode = list.stream().collect(Collectors.groupingBy(vo -> vo.getCode() == null ? "NULL" : vo.getCode()));
|
||||||
Map<String, List<ProcessBomImportExcelVO>> groupedByBluePrintfNo = list.stream().collect(Collectors.groupingBy(vo -> vo.getBlueprintNo() == null ? "NULL" : vo.getBlueprintNo()));
|
Map<String, List<ProcessBomImportExcelVO>> groupedByBluePrintfNo = list.stream().collect(Collectors.groupingBy(vo -> vo.getBlueprintNo() == null ? "NULL" : vo.getBlueprintNo()));
|
||||||
@ -360,6 +365,37 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
|||||||
throw exception(PROCESS_BOM_DETAIL_BLUE_PRINT_NO_REPEAT);
|
throw exception(PROCESS_BOM_DETAIL_BLUE_PRINT_NO_REPEAT);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
for (ProcessBomDetailDO processBomDetail : processBomDetails) {
|
||||||
|
//标准件不管材质,非标准件材质必填
|
||||||
|
if (processBomDetail.getType().equals("2")){
|
||||||
|
if (processBomDetail.getCompositionId() == null) {
|
||||||
|
throw exception(new ErrorCode(1_006_9999,processBomDetail.getMaterialName()+"材质不能为空,请确认!"));
|
||||||
|
}
|
||||||
|
if(processBomDetail.getId() == null){
|
||||||
|
if(updateReqVO.getCustomerBrief() != null && !updateReqVO.getCustomerBrief().equals("")){
|
||||||
|
processBomDetail.setMaterialCode(updateReqVO.getCustomerBrief()+'-' );
|
||||||
|
if(updateReqVO.getProjectNameSim() != null && !updateReqVO.getProjectNameSim().equals("")){
|
||||||
|
processBomDetail.setMaterialCode(processBomDetail.getMaterialCode() + updateReqVO.getProjectNameSim() +'-');
|
||||||
|
if(updateReqVO.getSubNameSim() != null && !updateReqVO.getSubNameSim().equals("")){
|
||||||
|
processBomDetail.setMaterialCode(processBomDetail.getMaterialCode() + updateReqVO.getSubNameSim() + '-' );
|
||||||
|
if(processBomDetail.getBlueprintNo() != null && ! processBomDetail.getBlueprintNo().equals("")){
|
||||||
|
processBomDetail.setMaterialCode(processBomDetail.getMaterialCode()+processBomDetail.getBlueprintNo()) ;
|
||||||
|
}else{
|
||||||
|
processBomDetail.setMaterialCode("");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
processBomDetail.setMaterialCode("");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
processBomDetail.setMaterialCode("");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
processBomDetail.setMaterialCode("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Map<String, List<ProcessBomDetailDO>> groupedByMaterialName = processBomDetails.stream().filter(o -> o.getType().equals("2")).collect(Collectors.groupingBy(vo -> vo.getMaterialName() == null ? "NULL" : vo.getMaterialName()));
|
Map<String, List<ProcessBomDetailDO>> groupedByMaterialName = processBomDetails.stream().filter(o -> o.getType().equals("2")).collect(Collectors.groupingBy(vo -> vo.getMaterialName() == null ? "NULL" : vo.getMaterialName()));
|
||||||
groupedByMaterialName.forEach((matName,list)->{
|
groupedByMaterialName.forEach((matName,list)->{
|
||||||
if (matName.equals("NULL")){
|
if (matName.equals("NULL")){
|
||||||
@ -417,7 +453,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
|||||||
changeContent += "→物料名称由"+po.getMaterialName()+"变为"+vo.getMaterialName();
|
changeContent += "→物料名称由"+po.getMaterialName()+"变为"+vo.getMaterialName();
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
if (!vo.getCompositionId().equals(po.getCompositionId())) {
|
if (po.getCompositionId() != null && vo.getCompositionId() != null && (!vo.getCompositionId().equals(po.getCompositionId()))) {
|
||||||
vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
|
vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
|
||||||
// if(vo.getMemo()!=null) {
|
// if(vo.getMemo()!=null) {
|
||||||
// vo.setMemo(vo.getMemo() + "→材质由" + po.getCompositionId() + "变为" + vo.getCompositionId());
|
// vo.setMemo(vo.getMemo() + "→材质由" + po.getCompositionId() + "变为" + vo.getCompositionId());
|
||||||
@ -425,6 +461,15 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
|||||||
change = true;
|
change = true;
|
||||||
changeContent +="→材质由"+po.getCompositionId()+"变为"+vo.getCompositionId();
|
changeContent +="→材质由"+po.getCompositionId()+"变为"+vo.getCompositionId();
|
||||||
// }
|
// }
|
||||||
|
}
|
||||||
|
if (po.getCompositionId() != null && vo.getCompositionId() == null) {
|
||||||
|
change = true;
|
||||||
|
changeContent +="→材质设置被为空";
|
||||||
|
}
|
||||||
|
if (vo.getCompositionId() != null && po.getCompositionId() ==null){
|
||||||
|
change = true;
|
||||||
|
changeContent +="→材质设置被为"+vo.getCompositionId();
|
||||||
|
|
||||||
}
|
}
|
||||||
if (!vo.getBlueprintNo().equals(po.getBlueprintNo())) {
|
if (!vo.getBlueprintNo().equals(po.getBlueprintNo())) {
|
||||||
vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
|
vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
|
||||||
@ -936,7 +981,16 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
|||||||
List<ProcessBomDetailDO> updateList = list.stream().filter(o -> o.getId() != null).collect(Collectors.toList());
|
List<ProcessBomDetailDO> updateList = list.stream().filter(o -> o.getId() != null).collect(Collectors.toList());
|
||||||
List<ProcessBomDetailDO> insertList = list.stream().filter(o -> o.getId() == null).collect(Collectors.toList());
|
List<ProcessBomDetailDO> insertList = list.stream().filter(o -> o.getId() == null).collect(Collectors.toList());
|
||||||
|
|
||||||
if(!updateList.isEmpty()) processBomDetailMapper.updateBatch(updateList);
|
if(!updateList.isEmpty()) {
|
||||||
|
List<Long> ids = new ArrayList<>();
|
||||||
|
for (ProcessBomDetailDO processBomDetailDO : updateList) {
|
||||||
|
if (processBomDetailDO.getCompositionId() == null){
|
||||||
|
ids.add(processBomDetailDO.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
processBomDetailMapper.updateCompositionIdBatch(ids);
|
||||||
|
processBomDetailMapper.updateBatch(updateList);
|
||||||
|
}
|
||||||
if(!insertList.isEmpty()) {
|
if(!insertList.isEmpty()) {
|
||||||
//如果新增的不为空,就要看它有没有下发生产任务单了
|
//如果新增的不为空,就要看它有没有下发生产任务单了
|
||||||
processBomDetailMapper.insertBatch(insertList);
|
processBomDetailMapper.insertBatch(insertList);
|
||||||
|
@ -603,6 +603,17 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
|||||||
throw exception(TASK_DISPATCH_TASK_REPORT_AMOUNT_EXCESS);
|
throw exception(TASK_DISPATCH_TASK_REPORT_AMOUNT_EXCESS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//校验,如果为完成,添加逻辑:1、生产结束 增加管控 - 如果报工数量 != 派工数量 提示:报工数量num1 != 派工数量num2,不允许结束!
|
||||||
|
if(operate == TaskReportOperateEnum.FINISH ){
|
||||||
|
List<TaskReportDO> historyReportList = taskReportMapper.selectList(new LambdaQueryWrapper<TaskReportDO>() {{
|
||||||
|
eq(TaskReportDO::getDispatchDetailId, taskDispatchDetailDO.getId())
|
||||||
|
.ne(TaskReportDO::getAmount, 0);
|
||||||
|
}});
|
||||||
|
int historyReportAmount = historyReportList.stream().mapToInt(TaskReportDO::getAmount).sum();
|
||||||
|
if ( taskDispatchDetailDO.getAmount() != historyReportAmount){
|
||||||
|
throw exception(new ErrorCode(1_009_021,"派工数量:"+taskDispatchDetailDO.getAmount()+"不等于总报工数量:"+historyReportAmount+",不允许结束!"));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
PlanDO planDO = planMapper.selectById(taskDispatchDO.getPlanId());
|
PlanDO planDO = planMapper.selectById(taskDispatchDO.getPlanId());
|
||||||
// 执行
|
// 执行
|
||||||
@ -742,10 +753,15 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
|||||||
bdgzsomthingMapper.updateById(bdgzsomthingDO);
|
bdgzsomthingMapper.updateById(bdgzsomthingDO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (taskDispatchDetailDO.getDispatchType().equals("PRODUCTION")){
|
||||||
if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && isBomDetailProductionOver){
|
pgMasterService.insertPgList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getBomDetailId(),taskDispatchDetailDO.getProcedureId());
|
||||||
pgMasterService.insertPgList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getBomDetailId());
|
}
|
||||||
}else if (taskDispatchDO.getDispatchType().equals("ASSEMBLE") && isProjectSubAssembleOver ){
|
// if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && isBomDetailProductionOver){
|
||||||
|
//
|
||||||
|
// //现在生产报工的过程检要重新写
|
||||||
|
// pgMasterService.insertPgList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getBomDetailId(),taskDispatchDetailDO.getProcedureId());
|
||||||
|
// }else
|
||||||
|
if (taskDispatchDO.getDispatchType().equals("ASSEMBLE") && isProjectSubAssembleOver ){
|
||||||
|
|
||||||
zjPgMasterService.insertZjList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getProjectSubId());
|
zjPgMasterService.insertZjList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getProjectSubId());
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
server:
|
server:
|
||||||
port: 33859
|
# port: 33859
|
||||||
#@ port:8080
|
port:8080
|
||||||
--- #################### 数据库相关配置 ####################
|
--- #################### 数据库相关配置 ####################
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
@ -50,10 +50,10 @@ spring:
|
|||||||
# password: linus,.123
|
# password: linus,.123
|
||||||
# master:
|
# master:
|
||||||
name: mes-heli-dev
|
name: mes-heli-dev
|
||||||
url: jdbc:mysql://120.48.141.82:3306/mes-heli-dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&socketTimeout=30000&connectTimeout=30000
|
url: jdbc:mysql://localhost:33061/mes-heli-dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&socketTimeout=30000&connectTimeout=30000
|
||||||
driver-class-name: com.mysql.jdbc.Driver
|
driver-class-name: com.mysql.jdbc.Driver
|
||||||
username: root
|
username: root
|
||||||
password: qweasd,.123
|
password: 'root'
|
||||||
# slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
|
# slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
|
||||||
# name: ruoyi-vue-pro
|
# name: ruoyi-vue-pro
|
||||||
# url: jdbc:mysql://localhost:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&serverTimezone=CTT&allowPublicKeyRetrieval=true
|
# url: jdbc:mysql://localhost:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&serverTimezone=CTT&allowPublicKeyRetrieval=true
|
||||||
|
19928
mes-ui/mes-echarts/package-lock.json
generated
19928
mes-ui/mes-echarts/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -5,9 +5,10 @@
|
|||||||
// const proBaseURL = 'http://124.221.23.100:9003'
|
// const proBaseURL = 'http://124.221.23.100:9003'
|
||||||
// const devBaseURL = 'http://118.195.155.9:9002/'
|
// const devBaseURL = 'http://118.195.155.9:9002/'
|
||||||
// const proBaseURL = 'http://118.195.155.9:9002/'
|
// const proBaseURL = 'http://118.195.155.9:9002/'
|
||||||
const devBaseURL = 'http://192.168.0.169:9002/'
|
// const devBaseURL = 'http://192.168.0.169:9002/'
|
||||||
const proBaseURL = 'http://192.168.0.169:9002/'
|
// const proBaseURL = 'http://192.168.0.169:9002/'
|
||||||
|
const devBaseURL = 'http://218.75.46.166:8889/'
|
||||||
|
const proBaseURL = 'http://218.75.46.166:8889/'
|
||||||
export const BASE_URL = process.env.NODE_ENV === 'development' ? devBaseURL : proBaseURL
|
export const BASE_URL = process.env.NODE_ENV === 'development' ? devBaseURL : proBaseURL
|
||||||
|
|
||||||
export const TIMEOUT = 5000
|
export const TIMEOUT = 5000
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# 开发环境
|
# 开发环境
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
|
|
||||||
VITE_DEV=true
|
VITE_DEV=false
|
||||||
|
|
||||||
# 请求路径https://star.hz-hl.com/admin-api http://192.168.1.87:8080
|
# 请求路径https://star.hz-hl.com/admin-api http://192.168.1.87:8080
|
||||||
VITE_BASE_URL='https://nxhs.cjyx.cc'
|
VITE_BASE_URL='https://nxhs.cjyx.cc'
|
||||||
@ -23,7 +23,7 @@ VITE_API_URL=/admin-api
|
|||||||
VITE_DROP_DEBUGGER=true
|
VITE_DROP_DEBUGGER=true
|
||||||
|
|
||||||
# 是否删除console.log
|
# 是否删除console.log
|
||||||
VITE_DROP_CONSOLE=true
|
VITE_DROP_CONSOLE=false
|
||||||
|
|
||||||
# 是否sourcemap
|
# 是否sourcemap
|
||||||
VITE_SOURCEMAP=false
|
VITE_SOURCEMAP=false
|
||||||
|
@ -4,14 +4,14 @@ NODE_ENV=production
|
|||||||
VITE_DEV=false
|
VITE_DEV=false
|
||||||
|
|
||||||
# 请求路径https://nxhs.cjyx.cc/admin-api http://192.168.1.87:8080
|
# 请求路径https://nxhs.cjyx.cc/admin-api http://192.168.1.87:8080
|
||||||
VITE_BASE_URL='https://nxhs.cjyx.cc'
|
VITE_BASE_URL='http://192.168.1.87:8080'
|
||||||
|
|
||||||
|
|
||||||
# 上传路径 http://218.75.46.166:8080
|
# 上传路径 http://218.75.46.166:8080
|
||||||
VITE_UPLOAD_URL='https://nxhs.cjyx.cc/admin-api/infra/file/upload'
|
VITE_UPLOAD_URL='http://192.168.1.87:8080/admin-api/infra/file/upload'
|
||||||
|
|
||||||
# 上传路径
|
# 上传路径
|
||||||
VITE_UPLOAD_BATCH_URL='https://nxhs.cjyx.cc/admin-api/infra/file/uploadBatch'
|
VITE_UPLOAD_BATCH_URL='http://192.168.1.87:8080/admin-api/infra/file/uploadBatch'
|
||||||
|
|
||||||
# 接口前缀
|
# 接口前缀
|
||||||
VITE_API_BASEPATH=
|
VITE_API_BASEPATH=
|
||||||
|
@ -118,7 +118,12 @@ watch(valueName, (newValue: any) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const onSelectChange = (newValue: any) => {
|
const onSelectChange = (newValue: any) => {
|
||||||
valueNameObject.value = compositionList.value.find((composition) => composition.id === newValue) // 更新选中的完整用户对象
|
if(newValue != '' ) {
|
||||||
emit('update:newValue', valueNameObject.value)
|
valueNameObject.value = compositionList.value.find((composition) => composition.id === newValue) // 更新选中的完整用户对象
|
||||||
|
emit('update:newValue', valueNameObject.value)
|
||||||
|
}else{
|
||||||
|
emit('update:newValue', '')
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -49,34 +49,34 @@
|
|||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
||||||
<el-table-column fixed label="序号" type="index" width="60" align="center" />
|
<el-table-column fixed label="序号" type="index" width="60" align="center" />
|
||||||
<el-table-column fixed label="计划单号" align="center" prop="planCode" min-width="180">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
|
||||||
{{ scope.row.planCode }}
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
|
|
||||||
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="220" />
|
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="220" />
|
||||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="客户名称" align="center" prop="customerName" min-width="240" />
|
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="240" />
|
||||||
|
|
||||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
||||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
||||||
|
<el-table-column label="性质" align="center" prop="property" min-width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PROPERTY" :value="scope.row.property" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="计划单号" align="center" prop="planCode" min-width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
||||||
|
{{ scope.row.planCode }}
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="350" />
|
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="350" />
|
||||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.HELI_BUSINESS_LINE" :value="scope.row.businessLine" />
|
<dict-tag :type="DICT_TYPE.HELI_BUSINESS_LINE" :value="scope.row.businessLine" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="性质" align="center" prop="property" min-width="120">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PROPERTY" :value="scope.row.property" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column fixed="right" label="2D负责人" align="center" prop="twoDimOwnerName" width="120" />
|
<el-table-column fixed="right" label="2D负责人" align="center" prop="twoDimOwnerName" width="120" />
|
||||||
<el-table-column fixed="right" label="2D截止日期" align="center" prop="twoDimDate" :formatter="dateFormatter2" min-width="140" />
|
<el-table-column fixed="right" label="2D截止日期" align="center" prop="twoDimDate" :formatter="dateFormatter2" min-width="140" />
|
||||||
<el-table-column fixed="right" label="最新进度" align="center" prop="progress" min-width="120">
|
<el-table-column fixed="right" label="最新进度" align="center" prop="progress" min-width="120">
|
||||||
|
@ -87,32 +87,32 @@
|
|||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
||||||
<el-table-column fixed label="序号" type="index" width="60" align="center" />
|
<el-table-column fixed label="序号" type="index" width="60" align="center" />
|
||||||
<el-table-column fixed label="计划单号" align="center" prop="planCode" min-width="180" >
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
|
||||||
{{ scope.row.planCode }}
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="220" />
|
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="220" />
|
||||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="客户名称" align="center" prop="customerName" min-width="240" />
|
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="240" />
|
||||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
||||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
||||||
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="350" />
|
|
||||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :type="DICT_TYPE.HELI_BUSINESS_LINE" :value="scope.row.businessLine" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="性质" align="center" prop="property" min-width="120">
|
<el-table-column label="性质" align="center" prop="property" min-width="120">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PROPERTY" :value="scope.row.property" />
|
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PROPERTY" :value="scope.row.property" />
|
||||||
</template>
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="计划单号" align="center" prop="planCode" min-width="180" >
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
||||||
|
{{ scope.row.planCode }}
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="350" />
|
||||||
|
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.HELI_BUSINESS_LINE" :value="scope.row.businessLine" />
|
||||||
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column fixed="right" label="3D负责人" align="center" prop="threeDimOwnerName" min-width="120"/>
|
<el-table-column fixed="right" label="3D负责人" align="center" prop="threeDimOwnerName" min-width="120"/>
|
||||||
<el-table-column fixed="right" label="3D截止日期" align="center" prop="threeDimDate" :formatter="dateFormatter2" min-width="140"/>
|
<el-table-column fixed="right" label="3D截止日期" align="center" prop="threeDimDate" :formatter="dateFormatter2" min-width="140"/>
|
||||||
|
@ -36,14 +36,14 @@
|
|||||||
<el-button @click="resetQuery">
|
<el-button @click="resetQuery">
|
||||||
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<!-- <el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
@click="handleImport"
|
@click="handleImport"
|
||||||
v-hasPermi="['system:user:import']"
|
v-hasPermi="['system:user:import']"
|
||||||
>
|
>
|
||||||
<Icon icon="ep:upload" /> 导入BOM
|
<Icon icon="ep:upload" /> 导入BOM
|
||||||
</el-button>
|
</el-button> -->
|
||||||
<el-button
|
<el-button
|
||||||
type="success"
|
type="success"
|
||||||
plain
|
plain
|
||||||
@ -183,7 +183,7 @@ const resetQuery = () => {
|
|||||||
/** BOM导入 */
|
/** BOM导入 */
|
||||||
const importFormRef = ref()
|
const importFormRef = ref()
|
||||||
const handleImport = () => {
|
const handleImport = () => {
|
||||||
importFormRef.value.open()
|
importFormRef.value.open(formData.value.bomCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加/修改操作 */
|
/** 添加/修改操作 */
|
||||||
|
@ -102,6 +102,15 @@
|
|||||||
<el-row>
|
<el-row>
|
||||||
<el-col v-if="!detailDisabled">
|
<el-col v-if="!detailDisabled">
|
||||||
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button>
|
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button>
|
||||||
|
<el-button
|
||||||
|
type="success"
|
||||||
|
|
||||||
|
size="large"
|
||||||
|
@click="handleImport"
|
||||||
|
v-hasPermi="['system:user:import']"
|
||||||
|
>
|
||||||
|
<Icon icon="ep:upload" /> 导入BOM
|
||||||
|
</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col>
|
<el-col>
|
||||||
<el-card class="hl-incard">
|
<el-card class="hl-incard">
|
||||||
@ -143,14 +152,14 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="零件编码" prop="materialCode" min-width="120" />
|
<el-table-column label="零件编码" prop="materialCode" min-width="120" />
|
||||||
<el-table-column label="材质" prop="compositionId" min-width="180">
|
<el-table-column label="材质" prop="compositionId" min-width="180">
|
||||||
<template #header><span class="hl-table_header">*</span>材质</template>
|
<template #header><span class="hl-table_header">{{startTag}}</span>材质</template>
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item
|
<el-form-item
|
||||||
:prop="`${$index}.compositionId`" :rules="subFormRules.compositionId"
|
:prop="`${$index}.compositionId`"
|
||||||
class="mb-0px!">
|
class="mb-0px!">
|
||||||
<CompositionSelect
|
<CompositionSelect
|
||||||
:disabled="getDisable(row.bomEditStatus)" v-model="row.compositionId"
|
:disabled="getDisable(row.bomEditStatus)" v-model="row.compositionId"
|
||||||
@update:new-value="(val) => { row.compositionId = val.id; }" />
|
@update:new-value="(val) => { val == ''? row.compositionId = '': row.compositionId = val.id; }" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -351,10 +360,12 @@
|
|||||||
</el-card>
|
</el-card>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
<BomImportForm ref="importFormRef" @success="getList" />
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { DICT_TYPE, getDictLabel, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
|
import { DICT_TYPE, getDictLabel, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
|
||||||
import { dateFormatter, formatDate } from '@/utils/formatTime'
|
import { dateFormatter, formatDate } from '@/utils/formatTime'
|
||||||
|
import BomImportForm from './bomImportForm.vue'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { inject } from 'vue'
|
import { inject } from 'vue'
|
||||||
import { useUserStore } from '@/store/modules/user'
|
import { useUserStore } from '@/store/modules/user'
|
||||||
@ -380,6 +391,7 @@ const commonStore = useCommonStore()
|
|||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const { query } = useRoute()
|
const { query } = useRoute()
|
||||||
|
const startTag = ref('*')
|
||||||
const active = toRef(commonStore.getStore('active'))
|
const active = toRef(commonStore.getStore('active'))
|
||||||
const currentId = toRef(commonStore.getStore('id'))
|
const currentId = toRef(commonStore.getStore('id'))
|
||||||
const formLoading = ref(false)
|
const formLoading = ref(false)
|
||||||
@ -420,7 +432,11 @@ const heliBomStatusOptions = ref<bomEditStatusEnum[]>([
|
|||||||
]);
|
]);
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
const subFormRef = ref()
|
const subFormRef = ref()
|
||||||
|
//20250601新增
|
||||||
|
const importFormRef = ref()
|
||||||
|
const handleImport = () => {
|
||||||
|
importFormRef.value.open(formData.value.bomCode)
|
||||||
|
}
|
||||||
|
|
||||||
//上传附件
|
//上传附件
|
||||||
const fieldHasAlter = (fieldName) => {
|
const fieldHasAlter = (fieldName) => {
|
||||||
@ -678,6 +694,9 @@ const submitForm = async (operate) => {
|
|||||||
// 提交请求
|
// 提交请求
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//将选中的数据更新到集合中,先注释了
|
//将选中的数据更新到集合中,先注释了
|
||||||
//formData.value.processBomDetails = formData.value.processBomDetails.filter((item) => item.isSelected);
|
//formData.value.processBomDetails = formData.value.processBomDetails.filter((item) => item.isSelected);
|
||||||
const data = formData.value as unknown as ProcessBomApi.ProcessBomVO
|
const data = formData.value as unknown as ProcessBomApi.ProcessBomVO
|
||||||
@ -740,8 +759,10 @@ const onDeleteItem = async (index) => {
|
|||||||
const onChangeType = (row, val) => {
|
const onChangeType = (row, val) => {
|
||||||
if (val==2){
|
if (val==2){
|
||||||
row.spec = "A"
|
row.spec = "A"
|
||||||
|
startTag.value = '*'
|
||||||
}else{
|
}else{
|
||||||
row.spec =undefined
|
row.spec =undefined
|
||||||
|
startTag.value = ''
|
||||||
}
|
}
|
||||||
row.materialId = undefined
|
row.materialId = undefined
|
||||||
row.materialName = undefined
|
row.materialName = undefined
|
||||||
|
@ -42,9 +42,10 @@ const importUrl =
|
|||||||
import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/heli/process-bom/import'
|
import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/heli/process-bom/import'
|
||||||
const uploadHeaders = ref() // 上传 Header 头
|
const uploadHeaders = ref() // 上传 Header 头
|
||||||
const fileList = ref([]) // 文件列表
|
const fileList = ref([]) // 文件列表
|
||||||
|
const bomCode = ref('')
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = () => {
|
const open = (bomcode :string) => {
|
||||||
|
bomCode.value = bomcode;
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
resetForm()
|
resetForm()
|
||||||
}
|
}
|
||||||
@ -59,7 +60,8 @@ const submitForm = async () => {
|
|||||||
// 提交请求
|
// 提交请求
|
||||||
uploadHeaders.value = {
|
uploadHeaders.value = {
|
||||||
Authorization: 'Bearer ' + getAccessToken(),
|
Authorization: 'Bearer ' + getAccessToken(),
|
||||||
'tenant-id': getTenantId()
|
'tenant-id': getTenantId(),
|
||||||
|
'bom-code': bomCode.value
|
||||||
}
|
}
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
uploadRef.value!.submit()
|
uploadRef.value!.submit()
|
||||||
|
@ -178,13 +178,66 @@
|
|||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="生产状态" prop="planCode">
|
<el-form-item label="生产状态" prop="planCode">
|
||||||
<el-select v-model="formData.planStatus" placeholder="生产状态" clearable class="!w-260px" disabled>
|
<el-select v-model="formData.planStatus" placeholder="生产状态" clearable class="!w-260px" disabled>
|
||||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PLAN_STATUS)" :key="dict.value"
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PLAN_STATUS)" :key="dict.value"
|
||||||
:label="dict.label" :value="dict.value" />
|
:label="dict.label" :value="dict.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<!-- <el-col :span="6" v-if="(formData.isDelay == null || formData.isDelay == 0) ">
|
||||||
|
<el-button style="margin-left: 10%;" type="danger" @click="openDelay">延期</el-button>
|
||||||
|
|
||||||
|
</el-col> -->
|
||||||
|
<el-col :span="6" >
|
||||||
|
<el-form-item label="设计工时" prop="delayReason">
|
||||||
|
{{ getWorkTime(1)}}
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="设计工期" prop="delayReason">
|
||||||
|
{{ getWorkTime(2) }}
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6" >
|
||||||
|
<el-button style="margin-left: 10%;" type="danger" @click="openDelay">延期</el-button>
|
||||||
|
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12" v-if="formData.isDelay == 1">
|
||||||
|
<el-form-item label="延期原因" prop="delayReason">
|
||||||
|
<el-input
|
||||||
|
v-model="formData.delayReason"
|
||||||
|
:rows="2"
|
||||||
|
disabled
|
||||||
|
type="textarea"
|
||||||
|
placeholder="延期原因"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
<!--延期弹框-->
|
||||||
|
<el-dialog
|
||||||
|
v-model="delayDialog"
|
||||||
|
title="延期信息填写"
|
||||||
|
:before-close="handleClose"
|
||||||
|
>
|
||||||
|
<span>
|
||||||
|
<el-input
|
||||||
|
v-model="formData.delayReason"
|
||||||
|
:rows="2"
|
||||||
|
type="textarea"
|
||||||
|
placeholder="延期原因"
|
||||||
|
/>
|
||||||
|
</span>
|
||||||
|
<template #footer>
|
||||||
|
<span class="dialog-footer">
|
||||||
|
<el-button @click="delayDialog = false">取消</el-button>
|
||||||
|
<el-button type="primary" @click="delaySubmit">
|
||||||
|
确认
|
||||||
|
</el-button>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
<!-- 表格类信息 -->
|
<!-- 表格类信息 -->
|
||||||
<el-card class="hl-card-info">
|
<el-card class="hl-card-info">
|
||||||
<template #header>
|
<template #header>
|
||||||
@ -192,14 +245,37 @@
|
|||||||
</template>
|
</template>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col v-if="active != 'detail'">
|
<el-col v-if="active != 'detail'">
|
||||||
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button>
|
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">开始</el-button>
|
||||||
|
<el-button style="margin-left: 30px;" type="warning" size="large" @click="sendItem()">推送</el-button>
|
||||||
|
|
||||||
|
<!-- <el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button> -->
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col>
|
<el-col>
|
||||||
<el-card class="hl-incard">
|
<el-card class="hl-incard">
|
||||||
<el-form ref="processDesignProgressFormRef" :model="formData.processDesignProgressList" :rules="subFormRules" v-loading="subFormLoading" label-width="0">
|
<el-form ref="processDesignProgressFormRef" :model="formData.processDesignProgressList" :rules="subFormRules" v-loading="subFormLoading" label-width="0">
|
||||||
<el-table :data="formData.processDesignProgressList" class="hl-table">
|
<el-table :data="formData.processDesignProgressList" class="hl-table">
|
||||||
<el-table-column label="序号" align="center" type="index" width="80" fixed />
|
<el-table-column label="序号" align="center" type="index" width="80" fixed />
|
||||||
<el-table-column label="上报时间" align="center" prop="createTime" :formatter="dateFormatter" min-width="200"/>
|
<el-table-column label="开始时间" align="center" prop="beginTime" :formatter="dateFormatter" min-width="200"/>
|
||||||
|
<el-table-column label="结束时间" align="center" prop="endTime" :formatter="dateFormatter" min-width="200">
|
||||||
|
<template #header>结束时间</template>
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.endTime`" class="mb-0px!">
|
||||||
|
<!-- <el-input-number min="0" max="100" class="!w-240px" :disabled="detailDisabled || row.id" v-model="row.progress" placeholder="请输入进度百分比" @change="verify1($index)"/>-->
|
||||||
|
<el-date-picker :disabled-date="(date) => disabledDate(date, row)" :disabled="row.hasNext" :formatter="dateFormatter" v-model="row.endTime" type="datetime" placeholder="选择结束日期"/>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="已做时间(小时)" align="center" prop="workTime" width="280">
|
||||||
|
<template #header>已做时间(小时)</template>
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.workTime`" class="mb-0px!">
|
||||||
|
<el-input-number :max="row.maxTime" :precision="2" class="!w-240px" :disabled="row.hasNext" v-model="row.workTime" placeholder="请输入已做时间"/>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<!--2025.06.01改-->
|
||||||
|
<!-- <el-table-column label="上报时间" align="center" prop="createTime" :formatter="dateFormatter" min-width="200"/>
|
||||||
<el-table-column label="上报人" prop="creatorName" min-width="100"/>
|
<el-table-column label="上报人" prop="creatorName" min-width="100"/>
|
||||||
<el-table-column label="进度百分比(%)" align="center" prop="progress" width="280">
|
<el-table-column label="进度百分比(%)" align="center" prop="progress" width="280">
|
||||||
<template #header> <span class="hl-table_header">*</span>进度百分比(%) </template>
|
<template #header> <span class="hl-table_header">*</span>进度百分比(%) </template>
|
||||||
@ -216,14 +292,27 @@
|
|||||||
<el-input :disabled="detailDisabled || row.id" v-model="row.blueprintLink" placeholder="请输入图纸链接" />
|
<el-input :disabled="detailDisabled || row.id" v-model="row.blueprintLink" placeholder="请输入图纸链接" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column> -->
|
||||||
<el-table-column label="备注" prop="remark" min-width="280">
|
<el-table-column label="备注" prop="remark" min-width="280">
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
|
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
|
||||||
<el-input :disabled="detailDisabled || row.id" v-model="row.remark" placeholder="请输入备注" />
|
<el-input :disabled="row.hasNext" v-model="row.remark" placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column fixed="right" label="操作" align="center" min-width="160">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.isOver == 0 && active != 'detail'"
|
||||||
|
link
|
||||||
|
type="danger"
|
||||||
|
|
||||||
|
@click="overRow(scope.row)"
|
||||||
|
>
|
||||||
|
结束
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -231,21 +320,23 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div class="text-center hl-footer">
|
<!-- <div class="hl-footer text-center">
|
||||||
<el-button @click="goback" size="large">取 消</el-button>
|
<el-button @click="goback" size="large">取 消</el-button>
|
||||||
<el-button v-if="active != 'detail'" @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large">保 存</el-button>
|
<el-button v-if="active != 'detail'" @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large">保 存</el-button>
|
||||||
</div>
|
</div> -->
|
||||||
</el-card>
|
</el-card>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getIntDictOptions, getStrDictOptions, DICT_TYPE, getDictLabel } from '@/utils/dict'
|
import { getIntDictOptions, getStrDictOptions, DICT_TYPE, getDictLabel } from '@/utils/dict'
|
||||||
import {dateFormatter, formatDate} from "@/utils/formatTime";
|
import {dateFormatter, formatDate,dateFormatter1} from "@/utils/formatTime";
|
||||||
import {ref} from "vue";
|
import {ref} from "vue";
|
||||||
import * as ProcessDesignApi from "@/api/heli/processdesign";
|
import * as ProcessDesignApi from "@/api/heli/processdesign";
|
||||||
import { inject } from 'vue'
|
import { inject } from 'vue'
|
||||||
import {useUserStore} from "@/store/modules/user";
|
import {useUserStore} from "@/store/modules/user";
|
||||||
import {useCommonStore} from "@/store/modules/common";
|
import {useCommonStore} from "@/store/modules/common";
|
||||||
import {verify} from "node:crypto";
|
import {verify} from "node:crypto";
|
||||||
|
import { delay, now } from 'lodash-es';
|
||||||
|
import { FolderOpened } from '@element-plus/icons-vue/dist/types';
|
||||||
|
|
||||||
defineOptions({ name: 'ProcessDesignDetail' })
|
defineOptions({ name: 'ProcessDesignDetail' })
|
||||||
|
|
||||||
@ -264,7 +355,7 @@ const formLoading = ref(false)
|
|||||||
const dialogTitle = ref('')
|
const dialogTitle = ref('')
|
||||||
const detailDisabled = ref(false)
|
const detailDisabled = ref(false)
|
||||||
const flag = ref(false)
|
const flag = ref(false)
|
||||||
|
const delayDialog = ref(false)
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
id: undefined,
|
id: undefined,
|
||||||
planId: undefined,
|
planId: undefined,
|
||||||
@ -293,10 +384,165 @@ const resetForm = () => {
|
|||||||
}
|
}
|
||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const disabledDate = (time: Date,row : any) => {
|
||||||
|
const today = new Date();
|
||||||
|
const tomorrow = new Date(today);
|
||||||
|
tomorrow.setDate(tomorrow.getDate() + 1); // 设置为明天
|
||||||
|
tomorrow.setHours(23, 59, 59, 999);
|
||||||
|
|
||||||
|
const beginDate = new Date(row.beginTime);
|
||||||
|
return time.getTime() < beginDate.getTime() || time.getTime() > tomorrow.getTime();
|
||||||
|
}
|
||||||
|
const handleClose = (done: () => void) => {
|
||||||
|
ElMessageBox.confirm('是否退出?')
|
||||||
|
.then(() => {
|
||||||
|
delayDialog.value=false;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const getWorkTime = (type) =>{
|
||||||
|
if(formData.value.craftStartDate != null && formData.value.craftEndDate != null){
|
||||||
|
const start = new Date(formData.value.craftStartDate ).getTime();
|
||||||
|
const end = new Date( formData.value.craftEndDate).getTime();
|
||||||
|
const diffTime = Math.abs(end - start);
|
||||||
|
var day = Math.floor(diffTime / (1000 * 60 * 60 * 24));
|
||||||
|
if(type == 1){
|
||||||
|
return day * 8 + '小时';
|
||||||
|
|
||||||
|
}else{
|
||||||
|
return day +'天'
|
||||||
|
}
|
||||||
|
}else{return ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const delaySubmit = async() =>{
|
||||||
|
if(formData.value.delayReason == null || formData.value.delayReason.replaceAll(' ','') == ''){
|
||||||
|
message.error("延期原因不得为空,请确认!")
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
formData.value.isDelay = 1;
|
||||||
|
formData.value.delayTime = (new Date()).getTime()
|
||||||
|
await submitForm('SAVE');
|
||||||
|
}
|
||||||
|
const openDelay = () =>{
|
||||||
|
var date = new Date();
|
||||||
|
if(processDesignType.value == 'BLUEPRINT_WORKBLANK'){
|
||||||
|
if(formData.value.blankDate != null ){
|
||||||
|
if(formData.value.blankDate > date.getTime()){
|
||||||
|
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
message.error("毛坯结束时间为空!请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(processDesignType.value == 'BLUEPRINT_2D'){
|
||||||
|
if(formData.value.twoDimDate != null ){
|
||||||
|
if(formData.value.twoDimDate > date.getTime()){
|
||||||
|
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
message.error("2D结束时间为空!请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(processDesignType.value == 'BLUEPRINT_3D'){
|
||||||
|
if(formData.value.threeDimDate != null ){
|
||||||
|
if(formData.value.threeDimDate > date.getTime()){
|
||||||
|
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
message.error("3D结束时间为空!请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(processDesignType.value == 'BLUEPRINT_FOUNDRY_TECHNOLOGY'){
|
||||||
|
console.log(formData.value.craftEndDate)
|
||||||
|
if(formData.value.craftEndDate != null ){
|
||||||
|
console.log(date.getTime())
|
||||||
|
console.log(formData.value.craftEndDate)
|
||||||
|
if(formData.value.craftEndDate > date.getTime()){
|
||||||
|
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
message.error("工艺结束时间为空!请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delayDialog.value = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
const overRow = async( row :any) =>{
|
||||||
|
if(row.endTime == null || row.endTime == ''){
|
||||||
|
row.endTime = new Date().getTime()
|
||||||
|
var timeDiff = row.endTime -row.beginTime;
|
||||||
|
|
||||||
|
// 将毫秒转换为小时
|
||||||
|
row.workTime = timeDiff / (1000 * 60 * 60);
|
||||||
|
row.maxTime = row.workTime;
|
||||||
|
// row.workTime = row.endTime - row.
|
||||||
|
}
|
||||||
|
if(row.endTime == null || row.endTime == ''){
|
||||||
|
message.error("结束时间不能为空!请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(row.workTime == null || row.workTime == ''
|
||||||
|
){
|
||||||
|
message.error("已做时间不能为空!请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
row.isOver = 1;
|
||||||
|
// await submitForm('SAVE');
|
||||||
|
//更新一下这条数据的状态
|
||||||
|
}
|
||||||
|
const sendItem = async() =>{
|
||||||
|
//推送最新的一条,如果备注为空提示备注为空不能推送
|
||||||
|
if(formData.value.processDesignProgressList != null && formData.value.processDesignProgressList.length > 0){
|
||||||
|
var senIndex = 0;//推送的消息第几天,规则:
|
||||||
|
/**
|
||||||
|
* 推送最新一条数据,内容为:客户简称+项目名称+子项目名+备注内容。
|
||||||
|
推送条件:
|
||||||
|
报工后,点击保存,然后推送菜单有效,
|
||||||
|
1,要求先保证,推送需要判断备注不能为空。报警提示
|
||||||
|
|
||||||
|
*/
|
||||||
|
for (let index = 0; index < formData.value.processDesignProgressList.length; index++) {
|
||||||
|
var item = formData.value.processDesignProgressList[index];
|
||||||
|
if(!item.hasNext){
|
||||||
|
senIndex = index;
|
||||||
|
if(item.endTime == null || item.endTime == ''){
|
||||||
|
message.error("结束时间不能为空!请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(item.workTime == null || item.workTime == ''){
|
||||||
|
message.error("已做时间不能为空!请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(item.remark == null || item.remark == ''){
|
||||||
|
message.error("推送备注不能为空!请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//先保存
|
||||||
|
await submitForm('SAVE');
|
||||||
|
//调用推送方法
|
||||||
|
}else{
|
||||||
|
message.error("至少添加一条数据后才能推送!请确认!")
|
||||||
|
}
|
||||||
|
}
|
||||||
const subFormLoading = ref(false) // 子表单的加载中
|
const subFormLoading = ref(false) // 子表单的加载中
|
||||||
const subFormRules = reactive({
|
const subFormRules = reactive({
|
||||||
progress: [{ required: true, message: '进度百分比(%)不能为空', trigger: 'blur' }],
|
// progress: [{ required: true, message: '进度百分比(%)不能为空', trigger: 'blur' }],
|
||||||
blueprintLink: [{ required: true, message: '图纸链接不能为空', trigger: 'blur' }],
|
// blueprintLink: [{ required: true, message: '图纸链接不能为空', trigger: 'blur' }],
|
||||||
})
|
})
|
||||||
|
|
||||||
const queryData = async (id?: number) => {
|
const queryData = async (id?: number) => {
|
||||||
@ -307,6 +553,37 @@ const queryData = async (id?: number) => {
|
|||||||
try {
|
try {
|
||||||
formData.value = await ProcessDesignApi.getProcessDesign(id)
|
formData.value = await ProcessDesignApi.getProcessDesign(id)
|
||||||
formData.value.processDesignProgressList = await ProcessDesignApi.getProcessDesignProgressListByProcessDesignId(id)
|
formData.value.processDesignProgressList = await ProcessDesignApi.getProcessDesignProgressListByProcessDesignId(id)
|
||||||
|
if( formData.value.processDesignProgressList != null && formData.value.processDesignProgressList.length > 0){
|
||||||
|
var maxTime = null;
|
||||||
|
if(formData.value.processDesignProgressList.length == 1){
|
||||||
|
formData.value.processDesignProgressList[0].hasNext = false;
|
||||||
|
if(formData.value.processDesignProgressList[0].endTime != null && formData.value.processDesignProgressList[0].endTime != ''){
|
||||||
|
formData.value.processDesignProgressList[0].maxTime = (formData.value.processDesignProgressList[0].endTime - formData.value.processDesignProgressList[0].beginTime)/ (1000 * 60 * 60);
|
||||||
|
}
|
||||||
|
} else{
|
||||||
|
var maxIndex = 0;
|
||||||
|
for (let index = 0; index < formData.value.processDesignProgressList.length; index++) {
|
||||||
|
var item = formData.value.processDesignProgressList[index];
|
||||||
|
if(item.endTime != null && item.endTime != ''){
|
||||||
|
item.maxTime = (item.endTime - item.beginTime)/ (1000 * 60 * 60);
|
||||||
|
}
|
||||||
|
if(maxTime == null){
|
||||||
|
maxIndex = index;
|
||||||
|
maxTime = item.createTime;
|
||||||
|
item.hasNext = false;
|
||||||
|
}else{
|
||||||
|
if(item.createTime > maxTime){
|
||||||
|
formData.value.processDesignProgressList[maxIndex].hasNext = true;
|
||||||
|
maxIndex = index;
|
||||||
|
item.hasNext = false;
|
||||||
|
}else{
|
||||||
|
item.hasNext = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
@ -314,14 +591,14 @@ const queryData = async (id?: number) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const submitForm = async (operate) => {
|
const submitForm = async (operate) => {
|
||||||
if (formData.value.processDesignProgressList.length>1){
|
// if (formData.value.processDesignProgressList.length>1){
|
||||||
var Current = formData.value.processDesignProgressList[0].progress;
|
// var Current = formData.value.processDesignProgressList[0].progress;
|
||||||
var previous = formData.value.processDesignProgressList[1].progress;
|
// var previous = formData.value.processDesignProgressList[1].progress;
|
||||||
if (Current<previous){
|
// if (Current<previous){
|
||||||
message.error("本次上报进度"+Current+"%小于上次上报进度"+previous+"%,请确认")
|
// message.error("本次上报进度"+Current+"%小于上次上报进度"+previous+"%,请确认")
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
// 校验表单
|
// 校验表单
|
||||||
@ -348,26 +625,100 @@ const submitForm = async (operate) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
const onAddItem = () => {
|
const onAddItem = async() => {
|
||||||
if (formData.value.processDesignProgressList.length>0){
|
var date = new Date();
|
||||||
var element = formData.value.processDesignProgressList[0].progress;
|
if(processDesignType.value == 'BLUEPRINT_WORKBLANK'){
|
||||||
if (element==100){
|
if(formData.value.blankDate != null ){
|
||||||
message.error("上报进度已100%,请确认")
|
if(formData.value.blankDate < date.getTime()){
|
||||||
return
|
if(formData.value.isDelay == null || formData.value.isDelay == 0){
|
||||||
|
message.error("当前任务已超期,请延期后重试!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
message.error("毛坯结束时间为空!请确认!")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(processDesignType.value == 'BLUEPRINT_2D'){
|
||||||
|
if(formData.value.twoDimDate != null ){
|
||||||
|
if(formData.value.twoDimDate < date.getTime()){
|
||||||
|
if(formData.value.isDelay == null || formData.value.isDelay == 0){
|
||||||
|
message.error("当前任务已超期,请延期后重试!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
message.error("2D结束时间为空!请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(processDesignType.value == 'BLUEPRINT_3D'){
|
||||||
|
if(formData.value.threeDimDate != null ){
|
||||||
|
if(formData.value.threeDimDate < date.getTime()){
|
||||||
|
if(formData.value.isDelay == null || formData.value.isDelay == 0){
|
||||||
|
message.error("当前任务已超期,请延期后重试!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
message.error("3D结束时间为空!请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(processDesignType.value == 'BLUEPRINT_FOUNDRY_TECHNOLOGY'){
|
||||||
|
console.log(formData.value.craftEndDate)
|
||||||
|
if(formData.value.craftEndDate != null ){
|
||||||
|
console.log(date.getTime())
|
||||||
|
console.log(formData.value.craftEndDate)
|
||||||
|
if(formData.value.craftEndDate < date.getTime()){
|
||||||
|
if(formData.value.isDelay == null || formData.value.isDelay == 0){
|
||||||
|
message.error("当前任务已超期,请延期后重试!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
message.error("工艺结束时间为空!请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (formData.value.processDesignProgressList.length>0){
|
||||||
|
for ( var i = 0 ; i < formData.value.processDesignProgressList.length ; i++){
|
||||||
|
var item = formData.value.processDesignProgressList[i];
|
||||||
|
if(item.endTime == null || item.endTime == ''){
|
||||||
|
message.error("结束时间不能为空!请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(item.workTime == null || item.workTime == ''
|
||||||
|
){
|
||||||
|
message.error("已做时间不能为空!请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const row = {
|
const row = {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
processDesignId: undefined,
|
processDesignId: undefined,
|
||||||
progress: undefined,
|
progress: undefined,
|
||||||
blueprintLink: undefined,
|
blueprintLink: undefined,
|
||||||
remark: undefined,
|
remark: '',
|
||||||
createTime: new Date().getTime(),
|
createTime: date.getTime(),
|
||||||
|
beginTime:date.getTime(),
|
||||||
|
endTime:'',
|
||||||
|
isOver:0,
|
||||||
|
workTime:undefined,
|
||||||
creatorName: userStore.getUser.nickname,
|
creatorName: userStore.getUser.nickname,
|
||||||
status: 1,
|
status: 1,
|
||||||
}
|
}
|
||||||
row.processDesignId = formData.value.id
|
row.processDesignId = formData.value.id
|
||||||
formData.value.processDesignProgressList.unshift(row)
|
formData.value.processDesignProgressList.unshift(row)
|
||||||
|
await submitForm('SAVE');
|
||||||
}
|
}
|
||||||
|
|
||||||
const goback = () => {
|
const goback = () => {
|
||||||
|
@ -78,20 +78,13 @@
|
|||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
||||||
<el-table-column fixed label="序号" align="center" type="index" width="60" />
|
<el-table-column fixed label="序号" align="center" type="index" width="60" />
|
||||||
<el-table-column fixed label="计划单号" align="center" prop="planCode" min-width="180" >
|
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="220" />
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
|
||||||
{{ scope.row.planCode }}
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="220" />
|
|
||||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="客户名称" align="center" prop="customerName" min-width="240" />
|
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="240" />
|
||||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
||||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
@ -103,6 +96,13 @@
|
|||||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PROPERTY" :value="scope.row.property" />
|
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PROPERTY" :value="scope.row.property" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column label="计划单号" align="center" prop="planCode" min-width="180" >
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
||||||
|
{{ scope.row.planCode }}
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column fixed="right" label="项目负责人" align="center" prop="projectOwnerName" min-width="120" />
|
<el-table-column fixed="right" label="项目负责人" align="center" prop="projectOwnerName" min-width="120" />
|
||||||
<el-table-column fixed="right" label="工艺负责人" align="center" prop="craftOwnerName" min-width="120" />
|
<el-table-column fixed="right" label="工艺负责人" align="center" prop="craftOwnerName" min-width="120" />
|
||||||
<el-table-column fixed="right" label="工艺起止日期" align="center" prop="craftDate" min-width="240" >
|
<el-table-column fixed="right" label="工艺起止日期" align="center" prop="craftDate" min-width="240" >
|
||||||
|
@ -49,33 +49,33 @@
|
|||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
||||||
<el-table-column fixed label="序号" align="center" type="index" width="60" />
|
<el-table-column fixed label="序号" align="center" type="index" width="60" />
|
||||||
<el-table-column fixed label="计划单号" align="center" prop="planCode" min-width="180">
|
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="220" />
|
||||||
|
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="300" />
|
||||||
|
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
||||||
|
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
||||||
|
<el-table-column label="性质" align="center" prop="property" min-width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PROPERTY" :value="scope.row.property" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="计划单号" align="center" prop="planCode" min-width="180">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
||||||
{{ scope.row.planCode }}
|
{{ scope.row.planCode }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="220" />
|
|
||||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="客户名称" align="center" prop="customerName" min-width="300" />
|
|
||||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
|
||||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
|
||||||
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="350" />
|
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="350" />
|
||||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.HELI_BUSINESS_LINE" :value="scope.row.businessLine" />
|
<dict-tag :type="DICT_TYPE.HELI_BUSINESS_LINE" :value="scope.row.businessLine" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="性质" align="center" prop="property" min-width="120">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PROPERTY" :value="scope.row.property" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column fixed="right" label="毛坯负责人" align="center" prop="blankOwnerName" min-width="120" />
|
<el-table-column fixed="right" label="毛坯负责人" align="center" prop="blankOwnerName" min-width="120" />
|
||||||
<el-table-column fixed="right" label="毛坯截止日期" align="center" prop="blankDate" :formatter="dateFormatter2" min-width="140" />
|
<el-table-column fixed="right" label="毛坯截止日期" align="center" prop="blankDate" :formatter="dateFormatter2" min-width="140" />
|
||||||
<el-table-column fixed="right" label="最新进度" align="center" prop="progress" min-width="120">
|
<el-table-column fixed="right" label="最新进度" align="center" prop="progress" min-width="120">
|
||||||
|
@ -80,6 +80,7 @@ const handleSelectionChange = (val: []) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const clickRow = (row: any) => {
|
const clickRow = (row: any) => {
|
||||||
|
console.log(row)
|
||||||
if (chkboxEnable.value) {
|
if (chkboxEnable.value) {
|
||||||
if (row) {
|
if (row) {
|
||||||
multipleTable.value!.toggleRowSelection(row, undefined)
|
multipleTable.value!.toggleRowSelection(row, undefined)
|
||||||
@ -90,12 +91,7 @@ const clickRow = (row: any) => {
|
|||||||
}
|
}
|
||||||
//指定key值,数据更新之后保留之前选中的数据
|
//指定key值,数据更新之后保留之前选中的数据
|
||||||
const getRowKeys = (row) => {
|
const getRowKeys = (row) => {
|
||||||
if (formType.value == 'out'){
|
|
||||||
return `${row.whId}_${row.matCode}_${row.pnId}`
|
|
||||||
}else {
|
|
||||||
return row.id
|
return row.id
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const queryReqVo: any = reactive({
|
const queryReqVo: any = reactive({
|
||||||
@ -187,7 +183,7 @@ const open = async (whId: number,type:string) => {
|
|||||||
|
|
||||||
list.value.forEach((row) => {
|
list.value.forEach((row) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
multipleTable.value.toggleRowSelection(row, !chkboxEnable.value) //让页面显示选中的数据
|
multipleTable.value.toggleRowSelection(row, !chkboxEnable.value) //让页面显示选中的数据
|
||||||
}, 0)
|
}, 0)
|
||||||
})
|
})
|
||||||
try {
|
try {
|
||||||
|
@ -180,7 +180,22 @@ class="!w-260px" v-model="formData.createTime" type="date" value-format="x"
|
|||||||
<el-col>
|
<el-col>
|
||||||
<el-checkbox-group v-if="active != 'detail' && formData.dispatchStatus == 1 " v-model="checkList" @change="onAddItem()">
|
<el-checkbox-group v-if="active != 'detail' && formData.dispatchStatus == 1 " v-model="checkList" @change="onAddItem()">
|
||||||
<el-checkbox label="下料" size="large" border />
|
<el-checkbox label="下料" size="large" border />
|
||||||
<el-checkbox label="铣床" size="large" border />
|
<el-checkbox label="电焊" size="large" border />
|
||||||
|
<el-checkbox label="开粗" size="large" border />
|
||||||
|
<el-checkbox label="铣床" size="large" border />
|
||||||
|
<el-checkbox label="车床" size="large" border />
|
||||||
|
<el-checkbox label="热处理" size="large" border />
|
||||||
|
<el-checkbox label="磨床" size="large" border />
|
||||||
|
<el-checkbox label="数控1" size="large" border />
|
||||||
|
<el-checkbox label="数控2" size="large" border />
|
||||||
|
<el-checkbox label="火花" size="large" border />
|
||||||
|
<el-checkbox label="刻字" size="large" border />
|
||||||
|
<el-checkbox label="网格" size="large" border />
|
||||||
|
<el-checkbox label="深孔钻" size="large" border />
|
||||||
|
<el-checkbox label="钻孔" size="large" border />
|
||||||
|
|
||||||
|
<!-- 2025 06 01 以下工序关闭 更新为上面的-->
|
||||||
|
<!-- <el-checkbox label="铣床" size="large" border />
|
||||||
<el-checkbox label="车床" size="large" border />
|
<el-checkbox label="车床" size="large" border />
|
||||||
<el-checkbox label="热处理" size="large" border />
|
<el-checkbox label="热处理" size="large" border />
|
||||||
<el-checkbox label="磨床" size="large" border />
|
<el-checkbox label="磨床" size="large" border />
|
||||||
@ -189,10 +204,9 @@ class="!w-260px" v-model="formData.createTime" type="date" value-format="x"
|
|||||||
<el-checkbox label="电火花" size="large" border />
|
<el-checkbox label="电火花" size="large" border />
|
||||||
<el-checkbox label="刻字" size="large" border />
|
<el-checkbox label="刻字" size="large" border />
|
||||||
<el-checkbox label="电焊" size="large" border />
|
<el-checkbox label="电焊" size="large" border />
|
||||||
<el-checkbox label="钻孔" size="large" border />
|
<el-checkbox label="钻孔" size="large" border /> -->
|
||||||
<!-- <el-checkbox label="装配" size="large" border />-->
|
<!-- <el-checkbox label="编程" size="large" border />
|
||||||
<el-checkbox label="编程" size="large" border />
|
<el-checkbox label="开粗" size="large" border /> -->
|
||||||
<el-checkbox label="开粗" size="large" border />
|
|
||||||
</el-checkbox-group>
|
</el-checkbox-group>
|
||||||
<!-- <el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button> -->
|
<!-- <el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button> -->
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -247,6 +261,16 @@ class="!w-260px" v-model="formData.createTime" type="date" value-format="x"
|
|||||||
<!-- </el-form-item> -->
|
<!-- </el-form-item> -->
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column fixed label="过程检" align="center" prop="testYn" width="120px" >
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.testYn`" class="mb-0px!">
|
||||||
|
<el-radio-group size="small" :disabled="detailDisabled||row.beginProduce != 0 || row.procedureStatus != 0" v-model="row.testYn" >
|
||||||
|
<el-radio-button label="N">是</el-radio-button>
|
||||||
|
<el-radio-button label="Y">否</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column fixed label="派工类型" align="center" prop="dispatchType" width="145px">
|
<el-table-column fixed label="派工类型" align="center" prop="dispatchType" width="145px">
|
||||||
<template #header>派工类型</template>
|
<template #header>派工类型</template>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
@ -516,6 +540,7 @@ import EquipmentSelect from "@/views/heli/hlvuestyle/equipmentSelect.vue";
|
|||||||
import ProductProcessPrint from "./ProductProcessPrint.vue";
|
import ProductProcessPrint from "./ProductProcessPrint.vue";
|
||||||
import * as EquipManufactureApi from '@/api/heli/equipmanufacture';
|
import * as EquipManufactureApi from '@/api/heli/equipmanufacture';
|
||||||
import * as TaskdispatchApi from '@/api/heli/taskdispatch';
|
import * as TaskdispatchApi from '@/api/heli/taskdispatch';
|
||||||
|
import * as PlanApi from '@/api/heli/plan'
|
||||||
import {
|
import {
|
||||||
ElDialog,
|
ElDialog,
|
||||||
ElTable,
|
ElTable,
|
||||||
@ -1188,6 +1213,7 @@ const personList = ref([])
|
|||||||
const ownerList1 = ref<OwnerListType[]>([]);
|
const ownerList1 = ref<OwnerListType[]>([]);
|
||||||
const ownerList2 = ref<OwnerListPostType[]>([]);
|
const ownerList2 = ref<OwnerListPostType[]>([]);
|
||||||
const dispatchListTemp = ref([])
|
const dispatchListTemp = ref([])
|
||||||
|
const craftInfos = ref([])
|
||||||
const queryData = async (id?: number) => {
|
const queryData = async (id?: number) => {
|
||||||
resetForm()
|
resetForm()
|
||||||
// 修改时,设置数据
|
// 修改时,设置数据
|
||||||
@ -1196,6 +1222,8 @@ const queryData = async (id?: number) => {
|
|||||||
try {
|
try {
|
||||||
dispatchListTemp.value = []
|
dispatchListTemp.value = []
|
||||||
formData.value = await TaskDispatchApi.getTaskDispatch(id)
|
formData.value = await TaskDispatchApi.getTaskDispatch(id)
|
||||||
|
var planData = await PlanApi.getPlan(formData.value.planId);
|
||||||
|
craftInfos.value = eval( planData.craftContent)
|
||||||
formData.value.taskDispatchDetails = await TaskDispatchApi.getTaskDispatchDetailListByDispatchId(id)
|
formData.value.taskDispatchDetails = await TaskDispatchApi.getTaskDispatchDetailListByDispatchId(id)
|
||||||
checkList.value = [];
|
checkList.value = [];
|
||||||
if(formData.value.taskDispatchDetails!=null){
|
if(formData.value.taskDispatchDetails!=null){
|
||||||
@ -1218,7 +1246,8 @@ const queryData = async (id?: number) => {
|
|||||||
personList.value = await TaskDispatchApi.getOwnerList(formData.value.ownerId,1);
|
personList.value = await TaskDispatchApi.getOwnerList(formData.value.ownerId,1);
|
||||||
postList.value = await TaskDispatchApi.getOwnerList(formData.value.ownerId,2);
|
postList.value = await TaskDispatchApi.getOwnerList(formData.value.ownerId,2);
|
||||||
ownerList1.value = await getOwnerListThis ();
|
ownerList1.value = await getOwnerListThis ();
|
||||||
ownerList2.value = await getOwnerPostListThis ();
|
//20250601改 固定为2 ownerList2.value = await getOwnerPostListThis ();
|
||||||
|
ownerList2 .value.push({index:1,id:'2',label:'2'})
|
||||||
}
|
}
|
||||||
|
|
||||||
formData.value.bomCode = 'BOM-' + formData.value.projectSubCode
|
formData.value.bomCode = 'BOM-' + formData.value.projectSubCode
|
||||||
@ -1371,6 +1400,7 @@ const submitForm = async (operate) => {
|
|||||||
const checkList = ref([])
|
const checkList = ref([])
|
||||||
const checkListTemp = ref([])
|
const checkListTemp = ref([])
|
||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
|
const procedureArrary = ['下料','电焊','编程','开粗','铣床','车床','磨床','数控1','数控2','刻字','网格','深钻孔','钻孔','热处理','火花']
|
||||||
const onAddItem = () => {
|
const onAddItem = () => {
|
||||||
|
|
||||||
//取消勾选删除逻辑
|
//取消勾选删除逻辑
|
||||||
@ -1411,6 +1441,7 @@ const onAddItem = () => {
|
|||||||
amount: undefined,
|
amount: undefined,
|
||||||
summary: undefined,
|
summary: undefined,
|
||||||
status: 1,
|
status: 1,
|
||||||
|
testYn: 'N',
|
||||||
procedureStatus: 0,
|
procedureStatus: 0,
|
||||||
beginProduce:0,
|
beginProduce:0,
|
||||||
dispatchId: undefined,
|
dispatchId: undefined,
|
||||||
@ -1428,7 +1459,6 @@ const onAddItem = () => {
|
|||||||
if(items.name == element){
|
if(items.name == element){
|
||||||
row.procedureId = items.id;
|
row.procedureId = items.id;
|
||||||
row.procedureCode = items.code
|
row.procedureCode = items.code
|
||||||
console.log(items);
|
|
||||||
if(items.isReport!= null){
|
if(items.isReport!= null){
|
||||||
row.isReport = items.isReport;
|
row.isReport = items.isReport;
|
||||||
}
|
}
|
||||||
@ -1444,12 +1474,20 @@ const onAddItem = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(add){
|
if(add){
|
||||||
row.amount = formData.value.amount
|
|
||||||
row.dispatchId = formData.value.id
|
|
||||||
row.endTime = formData.value.requiredCompletedDate
|
if(procedureArrary.includes(element)){
|
||||||
list.push(row)
|
row.startTime = getStartTime(element);
|
||||||
row.sort = i;
|
}
|
||||||
i++;
|
row.isOutsourcing = true;
|
||||||
|
row.dispatchType = 2
|
||||||
|
row.postId = '2'
|
||||||
|
row.amount = formData.value.amount
|
||||||
|
row.dispatchId = formData.value.id
|
||||||
|
row.endTime = formData.value.requiredCompletedDate
|
||||||
|
list.push(row)
|
||||||
|
row.sort = i;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -1459,6 +1497,35 @@ const onAddItem = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
const getStartTime = ( element : string) =>{
|
||||||
|
//20250601新增开始时间判断逻辑:
|
||||||
|
// 下料\电焊 开始日期 = 生产计划中的母模/毛坯时间
|
||||||
|
// 编程,开粗,铣床,车床,磨床,数控开始时间=粗/精加工开始日期
|
||||||
|
// 热处理开始=计划中的热处理
|
||||||
|
// 火花=计划中的火花
|
||||||
|
// 刻字,网格,深孔钻,钻孔= 粗,精加工开始日期。
|
||||||
|
// 要求:默认的时间是可以更改的。
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(element == '下料' || element == '电焊'){
|
||||||
|
return craftInfos.value[0].startDate;
|
||||||
|
}else if(element == '编程' || element == '开粗' || element == '铣床' || element == '车床' || element == '磨床' || element == '数控1' || element == '数控2' ||element == '刻字' ||
|
||||||
|
element == '网格' || element == '深钻孔' || element == '钻孔'
|
||||||
|
){
|
||||||
|
return craftInfos.value[1].startDate
|
||||||
|
}else if(element == '热处理'){
|
||||||
|
return craftInfos.value[2].startDate
|
||||||
|
}else if(element == '火花'){
|
||||||
|
return craftInfos.value[3].startDate
|
||||||
|
}else{
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
}
|
||||||
type OwnerListType = {
|
type OwnerListType = {
|
||||||
index: number;
|
index: number;
|
||||||
id: number;
|
id: number;
|
||||||
@ -1527,6 +1594,14 @@ const onDeleteItem = async (row,index) => {
|
|||||||
message.success(t('common.delSuccess'))
|
message.success(t('common.delSuccess'))
|
||||||
}
|
}
|
||||||
const handleOutsourcingChange= async (row: any) => {
|
const handleOutsourcingChange= async (row: any) => {
|
||||||
|
if(row.isOutsourcing == true){
|
||||||
|
row.dispatchType = 1
|
||||||
|
row.postId = ''
|
||||||
|
}else{
|
||||||
|
row.dispatchType = 2
|
||||||
|
row.owner = ''
|
||||||
|
row.postId = '2'
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
const handleSelectedProcedure = async (row: any) => {
|
const handleSelectedProcedure = async (row: any) => {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -2,13 +2,42 @@
|
|||||||
<view class="popup-container" v-if="showPopup">
|
<view class="popup-container" v-if="showPopup">
|
||||||
<view class="popup-mask" @click="onMaskClick"></view>
|
<view class="popup-mask" @click="onMaskClick"></view>
|
||||||
<view class="popup-content">
|
<view class="popup-content">
|
||||||
<text class="popup-title">进度百分比%:</text>
|
<!-- <text class="popup-title">进度百分比%:</text>
|
||||||
<input type="number" class="popup-input" v-model="progress" placeholder="请输入进度">
|
<input type="number" class="popup-input" v-model="progress" placeholder="请输入进度">
|
||||||
<view class="product-item">图纸链接</view>
|
<view class="product-item">图纸链接</view>
|
||||||
<input type="text" class="popup-input" v-model="imageLink" placeholder="请输入图片链接">
|
<input type="text" class="popup-input" v-model="imageLink" placeholder="请输入图片链接"> -->
|
||||||
<view class="product-item">备注</view>
|
<view class="product-item">备注</view>
|
||||||
<uni-easyinput type="textarea" class="popup-input" v-model="remark" placeholder="请输入备注"/>
|
<uni-easyinput type="textarea" class="popup-input" v-model="remark" placeholder="请输入备注"/>
|
||||||
<button style="margin-top: 5%;" size="10px" type="primary" @click="onClose">确认上报</button>
|
<button style="margin-top: 5%;" size="10px" type="primary" @click="onClose">确认上报</button>
|
||||||
|
<div class="container">
|
||||||
|
<div class="one-area">开始时间</div>
|
||||||
|
<div class="one-area">结束时间</div>
|
||||||
|
<div class="one-area">已做时间(小时)</div>
|
||||||
|
<div class="one-area">备注</div>
|
||||||
|
</div>
|
||||||
|
<div v-for="(item,index) in detailList" :key="index">
|
||||||
|
<div class="container1">
|
||||||
|
<div class="one-area1">
|
||||||
|
<uni-data-select v-model="item.procedureId" :localdata="procedureData"></uni-data-select>
|
||||||
|
</div>
|
||||||
|
<div class="one-area2">
|
||||||
|
<uni-data-select v-model="item.userId" :localdata="ownerData"
|
||||||
|
placeholder="请选择责任人"></uni-data-select>
|
||||||
|
|
||||||
|
<!-- <lfj-dropdown-box v-model="item.userId" :loadStatus="loadStatus" placeholder="请选择责任人"
|
||||||
|
dropDownLoading rightTextShow filterable :localdata="ownerData"
|
||||||
|
@lower="lower"></lfj-dropdown-box> -->
|
||||||
|
</div>
|
||||||
|
<div class="one-area1">
|
||||||
|
<uni-easyinput type="number" v-model="item.responsibilityRatio" placeholder="请输入比例" />
|
||||||
|
</div>
|
||||||
|
<div class="one-area1">
|
||||||
|
<button class="uni-button" size="mini" type="warn"
|
||||||
|
@click="deletedDetailList(item.index)">删除</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@ -61,6 +90,40 @@ watchEffect(() => {
|
|||||||
|
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
width: 630rpx;
|
||||||
|
margin-top: -10%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container1 {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.one-area {
|
||||||
|
flex: 1;
|
||||||
|
text-align: center;
|
||||||
|
padding: 12px;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.one-area1 {
|
||||||
|
flex: 1;
|
||||||
|
text-align: center;
|
||||||
|
padding: 2px;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.one-area2 {
|
||||||
|
flex: 1.2;
|
||||||
|
text-align: center;
|
||||||
|
padding: 2px;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
.popup-title {
|
.popup-title {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
|
|
||||||
|
@ -1,430 +1,456 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, computed, ref } from 'vue'
|
import { onMounted, computed, ref } from 'vue'
|
||||||
import { onLoad, onShow } from '@dcloudio/uni-app'
|
import { onLoad, onShow } from '@dcloudio/uni-app'
|
||||||
import { getListAPI, getDictAPI,getListWxAPI,getTaskDetailAPI } from '@/services/productionReport'
|
import { getListAPI, getDictAPI, getListWxAPI, getTaskDetailAPI } from '@/services/productionReport'
|
||||||
import { useLoginStore } from '@/stores/modules/login'
|
import { useLoginStore } from '@/stores/modules/login'
|
||||||
import { formatDate } from '@/utils/index'
|
import { formatDate } from '@/utils/index'
|
||||||
|
|
||||||
const userStore = useLoginStore()
|
const userStore = useLoginStore()
|
||||||
const userId = userStore.userInfo.userId
|
const userId = userStore.userInfo.userId
|
||||||
|
|
||||||
// 是否分页结束
|
// 是否分页结束
|
||||||
const isFinish = ref(false)
|
const isFinish = ref(false)
|
||||||
// 是否触发下拉刷新
|
// 是否触发下拉刷新
|
||||||
const isTriggered = ref(false)
|
const isTriggered = ref(false)
|
||||||
// 定义 porps
|
// 定义 porps
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
orderState: string
|
orderState : string
|
||||||
}>()
|
}>()
|
||||||
const isOverBeforeProcedure = async(id:number) =>{
|
const noticeMsg = ref('')
|
||||||
const params = {
|
const isOverBeforeProcedure = async (id : number) => {
|
||||||
id,
|
const params = {
|
||||||
|
id,
|
||||||
|
}
|
||||||
|
const data = await getTaskDetailAPI(params)
|
||||||
|
console.log(data.testYn)
|
||||||
|
if (data.beforeProcedureStatus == 0) {
|
||||||
|
//如果上一道工序没结束
|
||||||
|
noticeMsg.value = '上一道工序尚未完成报工!';
|
||||||
|
return true;
|
||||||
|
}else if(data.testYn != 'Y'){
|
||||||
|
noticeMsg.value = '上道工序过程检没有完成,请确认!';
|
||||||
|
return true;
|
||||||
|
}else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const data = await getTaskDetailAPI(params)
|
const statusText = computed(() => {
|
||||||
if(data.beforeProcedureStatus == 0){
|
const text = props.orderState == '0,1' ? '处理' : '查看'
|
||||||
//如果上一道工序没结束
|
return text
|
||||||
return true;
|
})
|
||||||
}else{
|
// 是否加载中标记,用于防止滚动触底触发多次请求
|
||||||
return false;
|
const isLoading = ref(false)
|
||||||
|
// 请求参数
|
||||||
|
const queryParams : Required<any> = {
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 5,
|
||||||
|
owner: userId, //
|
||||||
|
procedureStatusList: props.orderState, // 工序完成状态列表
|
||||||
|
dispatchType: 'PRODUCTION', // 派工类型
|
||||||
|
isReport: 1, // 是否需要报工
|
||||||
|
//20250601新增,项目名称/子项目名称
|
||||||
|
subOrDetailName:'',
|
||||||
}
|
}
|
||||||
}
|
const dataList = ref([])
|
||||||
const statusText = computed(() => {
|
const getListData = async () => {
|
||||||
const text = props.orderState == '0,1' ? '处理' : '查看'
|
if(props.orderState == '2'){
|
||||||
return text
|
queryParams.subOrDetailName = '';
|
||||||
})
|
}
|
||||||
// 是否加载中标记,用于防止滚动触底触发多次请求
|
// 如果数据出于加载中,退出函数
|
||||||
const isLoading = ref(false)
|
if (isLoading.value) return
|
||||||
// 请求参数
|
if (isFinish.value === true) {
|
||||||
const queryParams: Required<any> = {
|
return uni.showToast({ icon: 'none', title: '没有更多数据~' })
|
||||||
pageNo: 1,
|
}
|
||||||
pageSize: 5,
|
isLoading.value = true
|
||||||
owner: userId, //
|
// 发送请求
|
||||||
procedureStatusList: props.orderState, // 工序完成状态列表
|
// const data = await getListAPI(queryParams)
|
||||||
dispatchType: 'PRODUCTION', // 派工类型
|
const data = await getListWxAPI(queryParams)
|
||||||
isReport: 1, // 是否需要报工
|
isLoading.value = false
|
||||||
}
|
data.list.forEach((e) => {
|
||||||
const dataList = ref([])
|
e.orderTime = formatDate(e.orderTime, 'YYYY-MM-DD')
|
||||||
const getListData = async () => {
|
e.startTime = formatDate(e.startTime, 'YYYY-MM-DD')
|
||||||
// 如果数据出于加载中,退出函数
|
e.endTime = formatDate(e.endTime, 'YYYY-MM-DD')
|
||||||
if (isLoading.value) return
|
})
|
||||||
if (isFinish.value === true) {
|
// 数组追加
|
||||||
return uni.showToast({ icon: 'none', title: '没有更多数据~' })
|
dataList.value.push(...data.list)
|
||||||
}
|
// 分页条件
|
||||||
isLoading.value = true
|
if (queryParams.pageNo < data.total) {
|
||||||
// 发送请求
|
// 页码累加
|
||||||
// const data = await getListAPI(queryParams)
|
queryParams.pageNo++
|
||||||
const data = await getListWxAPI(queryParams)
|
} else {
|
||||||
isLoading.value = false
|
// 分页已结束
|
||||||
data.list.forEach((e) => {
|
isFinish.value = true
|
||||||
e.orderTime = formatDate(e.orderTime, 'YYYY-MM-DD')
|
}
|
||||||
e.startTime = formatDate(e.startTime, 'YYYY-MM-DD')
|
}
|
||||||
e.endTime = formatDate(e.endTime, 'YYYY-MM-DD')
|
const todayStr = ref('');
|
||||||
})
|
onMounted(async () => {
|
||||||
// 数组追加
|
const today = new Date();
|
||||||
dataList.value.push(...data.list)
|
const year = today.getFullYear();
|
||||||
// 分页条件
|
const month = String(today.getMonth() + 1).padStart(2, '0');
|
||||||
if (queryParams.pageNo < data.total) {
|
const day = String(today.getDate()).padStart(2, '0');
|
||||||
// 页码累加
|
|
||||||
queryParams.pageNo++
|
|
||||||
} else {
|
|
||||||
// 分页已结束
|
|
||||||
isFinish.value = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(async () => {
|
todayStr.value = `${year}-${month}-${day}`;
|
||||||
await getListData()
|
await getListData()
|
||||||
})
|
})
|
||||||
|
|
||||||
onShow(async () => {
|
onShow(async () => {
|
||||||
isFinish.value = false
|
isFinish.value = false
|
||||||
isLoading.value = false
|
isLoading.value = false
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
dataList.value = []
|
dataList.value = []
|
||||||
await getListData()
|
await getListData()
|
||||||
})
|
})
|
||||||
|
|
||||||
const handleDetail = async(item) => {
|
const handleDetail = async (item) => {
|
||||||
var isoverBefore= await isOverBeforeProcedure(item.id);
|
var isoverBefore = await isOverBeforeProcedure(item.id);
|
||||||
if(isoverBefore == true){
|
if (isoverBefore == true) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '上一道工序尚未完成报工!',
|
title: noticeMsg.value,
|
||||||
icon: 'none',
|
icon: 'none',
|
||||||
duration: 2000,
|
duration: 2000,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const url = `/pages/productionReport/productionReport-detail?id=${item.id}`
|
const url = `/pages/productionReport/productionReport-detail?id=${item.id}`
|
||||||
uni.navigateTo({ url })
|
uni.navigateTo({ url })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 自定义下拉刷新被触发
|
// 自定义下拉刷新被触发
|
||||||
const onRefresherrefresh = async () => {
|
const onRefresherrefresh = async () => {
|
||||||
// 开始动画
|
// 开始动画
|
||||||
isTriggered.value = true
|
isTriggered.value = true
|
||||||
// 重置数据
|
// 重置数据
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
dataList.value = []
|
dataList.value = []
|
||||||
isFinish.value = false
|
isFinish.value = false
|
||||||
// 加载数据
|
// 加载数据
|
||||||
await getListData()
|
await getListData()
|
||||||
// 关闭动画
|
// 关闭动画
|
||||||
isTriggered.value = false
|
isTriggered.value = false
|
||||||
}
|
}
|
||||||
// const searchVal = ref('')
|
const searchVal = ref('')
|
||||||
// const dataListDefault = ref([])
|
// const dataListDefault = ref([])
|
||||||
// const handleSearch = async () => {
|
const handleSearch = async () => {
|
||||||
// const code = searchVal.value
|
queryParams.subOrDetailName = searchVal.value;
|
||||||
// if (code) {
|
queryParams.pageNo = 1;
|
||||||
// dataListDefault.value = dataList.value
|
isFinish.value = false;
|
||||||
// dataList.value = dataList.value.filter((e) => {
|
dataList.value = []
|
||||||
// return e.code == code
|
await getListData()
|
||||||
// })
|
|
||||||
// } else {
|
}
|
||||||
// dataList.value = dataListDefault.value
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<view class="cont">
|
<view class="cont">
|
||||||
<!-- <view class="search" v-if="dataList.length > 5">
|
<view class="search" v-if="props.orderState == '0,1' ">
|
||||||
<view class="title"></view>
|
<input class="uni-input" v-model="searchVal" placeholder="请输入项目或子项目名称" />
|
||||||
<input class="uni-input" v-model="searchVal" @change="handleSearch" placeholder="根据编号搜索" />
|
<uni-icons type="search" size="30" class="icons" @click="handleSearch"></uni-icons>
|
||||||
</view> -->
|
</view>
|
||||||
<scroll-view enable-back-to-top scroll-y class="data-list" refresher-enabled :refresher-triggered="isTriggered"
|
<scroll-view enable-back-to-top scroll-y class="data-list" refresher-enabled :refresher-triggered="isTriggered"
|
||||||
@refresherrefresh="onRefresherrefresh" @scrolltolower="getListData">
|
@refresherrefresh="onRefresherrefresh" @scrolltolower="getListData">
|
||||||
<view class="item" v-for="item in dataList" :key="item.id" @click="handleDetail(item)">
|
<view class="item" v-for="item in dataList" :key="item.id" @click="handleDetail(item)">
|
||||||
<view class="hd">
|
<view class="hd">
|
||||||
<view class="num">派工单:</view>
|
<view class="num">派工单:</view>
|
||||||
<view class="statusLabel">{{ '(单号:'+ item.dispatchCode+') '}}</view>
|
<view class="statusLabel">{{ '(单号:'+ item.dispatchCode+') '}}</view>
|
||||||
<view class="num">下一道工序:</view>
|
<view class="num">{{ '下工序:'+ (item.nextProcedureName == null ? '无':item.nextProcedureName)}}</view>
|
||||||
<view class="statusLabel " >{{ item.nextProcedureName == null ? '无':item.nextProcedureName}}</view>
|
<!-- <view class="statusLabel " ></view> -->
|
||||||
</view>
|
</view>
|
||||||
<view class="md">
|
<view class="md">
|
||||||
<view class="product-item">项目名称:{{ item.projectCode + ' ' + item.projectName }}</view>
|
<view class="product-item">项目名称:{{ item.projectCode + ' ' + item.projectName }}</view>
|
||||||
<view class="product-item">子项目:{{ item.projectSubCode || '' }} {{' ' + item.projectSubName }}</view>
|
<view class="product-item">子项目:{{ item.projectSubCode || '' }} {{' ' + item.projectSubName }}</view>
|
||||||
<view class="product-row">
|
<view class="product-row">
|
||||||
<view class="row-item">
|
<view class="row-item">
|
||||||
<view class="label">零件名称: {{ item.materialName }}</view>
|
<view class="label">零件名称: {{ item.materialName }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="row-item">
|
<view class="row-item">
|
||||||
<view class="label">派工工序: {{ item.procedureName }}</view>
|
<view class="label">派工工序: {{ item.procedureName }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="product-row">
|
<view class="product-row">
|
||||||
<view class="row-item">
|
<view class="row-item">
|
||||||
<view class="label">派工数量</view>
|
<view class="label">派工数量</view>
|
||||||
<view class="val">{{ item.amount }}</view>
|
<view class="val">{{ item.amount }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="row-item">
|
<view class="row-item">
|
||||||
<view class="label">总报工数量</view>
|
<view class="label">总报工数量</view>
|
||||||
<view class="val high-color">{{ item.totalReportAmount }}</view>
|
<view class="val high-color">{{ item.totalReportAmount }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="product-row">
|
<view class="product-row">
|
||||||
<view class="row-item">
|
<view class="row-item">
|
||||||
<view class="label">预计工时</view>
|
<view class="label">预计工时</view>
|
||||||
<view class="val">{{ item.workTime }}</view>
|
<view class="val">{{ item.workTime }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="row-item">
|
<view class="row-item">
|
||||||
<view class="label">总报工工时</view>
|
<view class="label">总报工工时</view>
|
||||||
<view class="val high-color">{{ item.totalWorkTime }}</view>
|
<view class="val high-color">{{ item.totalWorkTime }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="product-item">预计生产日期:{{ item.startTime }} ~ {{ item.endTime }}</view>
|
<view class="product-item" :style=" item.endTime < todayStr ? 'color:red':null">预计生产日期:{{ item.startTime }} ~ {{ item.endTime }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="statusText">{{ statusText }}</view>
|
<view class="statusText">{{ statusText }}</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 底部提示文字 -->
|
<!-- 底部提示文字 -->
|
||||||
<view class="loading-text" :style="{ paddingBottom: safeAreaInsets?.bottom + 'px' }">
|
<view class="loading-text" :style="{ paddingBottom: safeAreaInsets?.bottom + 'px' }">
|
||||||
{{ isFinish ? '没有更多数据~' : '正在加载...' }}
|
{{ isFinish ? '没有更多数据~' : '正在加载...' }}
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
// 订单列表
|
// 订单列表
|
||||||
.search {
|
.search {
|
||||||
padding: 4rpx;
|
padding: 0rpx;
|
||||||
width: 80%;
|
width: 90%;
|
||||||
margin: 30rpx auto;
|
margin: auto;
|
||||||
|
margin-top: 20rpx;
|
||||||
|
position: relative;
|
||||||
.uni-input {
|
.uni-input {
|
||||||
border: 1px solid #D1D6DB;
|
border: 1px solid #d1d6db;
|
||||||
height: 60rpx;
|
height: 60rpx;
|
||||||
line-height: 60rpx;
|
line-height: 60rpx;
|
||||||
padding: 4rpx 10rpx;
|
padding: 4rpx 10rpx;
|
||||||
font-size: 32rpx;
|
font-size: 32rpx;
|
||||||
border-radius: 6rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.data-list {
|
|
||||||
height: 90vh;
|
|
||||||
.item {
|
|
||||||
position: relative;
|
|
||||||
padding: 20rpx 0;
|
|
||||||
margin: 20rpx 20rpx;
|
|
||||||
border-radius: 10rpx;
|
border-radius: 10rpx;
|
||||||
background-color: #fff;
|
|
||||||
|
|
||||||
.hd {
|
|
||||||
padding: 10rpx;
|
|
||||||
font-size: 28rpx;
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
.statusLabel {
|
|
||||||
font-size: 24rpx;
|
|
||||||
color: #737D88;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.md {
|
|
||||||
position: relative;
|
|
||||||
padding: 10rpx;
|
|
||||||
min-height: 100rpx;
|
|
||||||
font-size: 28rpx;
|
|
||||||
border-top: 2rpx solid #F2F2F2;
|
|
||||||
|
|
||||||
.product-item {
|
|
||||||
margin: 20rpx 0;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
color: #737D88
|
|
||||||
}
|
|
||||||
.product-row {
|
|
||||||
margin: 20rpx 0;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
justify-content: space-between;
|
|
||||||
color: #737D88;
|
|
||||||
.row-item {
|
|
||||||
flex: 1;
|
|
||||||
.label {
|
|
||||||
margin-bottom: 10rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.val {
|
|
||||||
color: #1D2129;
|
|
||||||
&.high-color {
|
|
||||||
color: #00B42A
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.statusText {
|
|
||||||
position: absolute;
|
|
||||||
right: 30rpx;
|
|
||||||
top: 100rpx;
|
|
||||||
border-radius: 10rpx;
|
|
||||||
font-size: 24rpx;
|
|
||||||
padding: 10rpx 30rpx;
|
|
||||||
border-radius: 10rpx;
|
|
||||||
font-size: 24rpx;
|
|
||||||
background: linear-gradient(149deg, #2DACE6 4%, #356899 98%);
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:last-child {
|
|
||||||
padding-bottom: 40rpx;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
.icons {
|
||||||
.status {
|
width: 30rpx;
|
||||||
display: flex;
|
position: absolute;
|
||||||
align-items: center;
|
right: 40rpx;
|
||||||
justify-content: space-between;
|
top: 0rpx;
|
||||||
font-size: 28rpx;
|
|
||||||
color: #999;
|
|
||||||
margin-bottom: 15rpx;
|
|
||||||
|
|
||||||
.date {
|
|
||||||
color: #666;
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.primary {
|
|
||||||
color: #ff9240;
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-delete {
|
|
||||||
line-height: 1;
|
|
||||||
margin-left: 10rpx;
|
|
||||||
padding-left: 10rpx;
|
|
||||||
border-left: 1rpx solid #e3e3e3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.goods {
|
|
||||||
display: flex;
|
|
||||||
margin-bottom: 20rpx;
|
|
||||||
|
|
||||||
.cover {
|
|
||||||
width: 170rpx;
|
|
||||||
height: 170rpx;
|
|
||||||
margin-right: 20rpx;
|
|
||||||
border-radius: 10rpx;
|
|
||||||
overflow: hidden;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
.image {
|
|
||||||
width: 170rpx;
|
|
||||||
height: 170rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.quantity {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
right: 0;
|
|
||||||
line-height: 1;
|
|
||||||
padding: 6rpx 4rpx 6rpx 8rpx;
|
|
||||||
font-size: 24rpx;
|
|
||||||
color: #fff;
|
|
||||||
border-radius: 10rpx 0 0 0;
|
|
||||||
background-color: rgba(0, 0, 0, 0.6);
|
|
||||||
}
|
|
||||||
|
|
||||||
.meta {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.name {
|
|
||||||
height: 80rpx;
|
|
||||||
font-size: 26rpx;
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
.type {
|
|
||||||
line-height: 1.8;
|
|
||||||
padding: 0 15rpx;
|
|
||||||
margin-top: 10rpx;
|
|
||||||
font-size: 24rpx;
|
|
||||||
align-self: flex-start;
|
|
||||||
border-radius: 4rpx;
|
|
||||||
color: #888;
|
|
||||||
background-color: #f7f7f8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.more {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-size: 22rpx;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.payment {
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
align-items: center;
|
|
||||||
line-height: 1;
|
|
||||||
padding: 20rpx 0;
|
|
||||||
text-align: right;
|
|
||||||
color: #999;
|
|
||||||
font-size: 28rpx;
|
|
||||||
border-bottom: 1rpx solid #eee;
|
|
||||||
|
|
||||||
.quantity {
|
|
||||||
font-size: 24rpx;
|
|
||||||
margin-right: 16rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.amount {
|
|
||||||
color: #444;
|
|
||||||
margin-left: 6rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.symbol {
|
|
||||||
font-size: 20rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.action {
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
align-items: center;
|
|
||||||
padding-top: 20rpx;
|
|
||||||
|
|
||||||
.button {
|
|
||||||
width: 180rpx;
|
|
||||||
height: 60rpx;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
margin-left: 20rpx;
|
|
||||||
border-radius: 60rpx;
|
|
||||||
border: 1rpx solid #ccc;
|
|
||||||
font-size: 26rpx;
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
.secondary {
|
|
||||||
color: #3775F6;
|
|
||||||
border-color: #3775F6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.primary {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #3775F6;
|
|
||||||
border-color: #3775F6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading-text {
|
|
||||||
text-align: center;
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #666;
|
|
||||||
padding: 20rpx 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.data-list {
|
||||||
|
height: 90vh;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
position: relative;
|
||||||
|
padding: 20rpx 0;
|
||||||
|
margin: 20rpx 20rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
background-color: #fff;
|
||||||
|
|
||||||
|
.hd {
|
||||||
|
padding: 10rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.statusLabel {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #737D88;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.md {
|
||||||
|
position: relative;
|
||||||
|
padding: 10rpx;
|
||||||
|
min-height: 100rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
border-top: 2rpx solid #F2F2F2;
|
||||||
|
|
||||||
|
.product-item {
|
||||||
|
margin: 20rpx 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: #737D88
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-row {
|
||||||
|
margin: 20rpx 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
color: #737D88;
|
||||||
|
|
||||||
|
.row-item {
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
margin-bottom: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.val {
|
||||||
|
color: #1D2129;
|
||||||
|
|
||||||
|
&.high-color {
|
||||||
|
color: #00B42A
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.statusText {
|
||||||
|
position: absolute;
|
||||||
|
right: 30rpx;
|
||||||
|
top: 100rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
padding: 10rpx 30rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
background: linear-gradient(149deg, #2DACE6 4%, #356899 98%);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
padding-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.status {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999;
|
||||||
|
margin-bottom: 15rpx;
|
||||||
|
|
||||||
|
.date {
|
||||||
|
color: #666;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.primary {
|
||||||
|
color: #ff9240;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-delete {
|
||||||
|
line-height: 1;
|
||||||
|
margin-left: 10rpx;
|
||||||
|
padding-left: 10rpx;
|
||||||
|
border-left: 1rpx solid #e3e3e3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.goods {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
|
||||||
|
.cover {
|
||||||
|
width: 170rpx;
|
||||||
|
height: 170rpx;
|
||||||
|
margin-right: 20rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.image {
|
||||||
|
width: 170rpx;
|
||||||
|
height: 170rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.quantity {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
line-height: 1;
|
||||||
|
padding: 6rpx 4rpx 6rpx 8rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 10rpx 0 0 0;
|
||||||
|
background-color: rgba(0, 0, 0, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.meta {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.name {
|
||||||
|
height: 80rpx;
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.type {
|
||||||
|
line-height: 1.8;
|
||||||
|
padding: 0 15rpx;
|
||||||
|
margin-top: 10rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
align-self: flex-start;
|
||||||
|
border-radius: 4rpx;
|
||||||
|
color: #888;
|
||||||
|
background-color: #f7f7f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.more {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 22rpx;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
line-height: 1;
|
||||||
|
padding: 20rpx 0;
|
||||||
|
text-align: right;
|
||||||
|
color: #999;
|
||||||
|
font-size: 28rpx;
|
||||||
|
border-bottom: 1rpx solid #eee;
|
||||||
|
|
||||||
|
.quantity {
|
||||||
|
font-size: 24rpx;
|
||||||
|
margin-right: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.amount {
|
||||||
|
color: #444;
|
||||||
|
margin-left: 6rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.symbol {
|
||||||
|
font-size: 20rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.action {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
padding-top: 20rpx;
|
||||||
|
|
||||||
|
.button {
|
||||||
|
width: 180rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
margin-left: 20rpx;
|
||||||
|
border-radius: 60rpx;
|
||||||
|
border: 1rpx solid #ccc;
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.secondary {
|
||||||
|
color: #3775F6;
|
||||||
|
border-color: #3775F6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.primary {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #3775F6;
|
||||||
|
border-color: #3775F6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading-text {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #666;
|
||||||
|
padding: 20rpx 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>import type { stringify } from 'querystring';
|
</style>import type { stringify } from 'querystring';
|
||||||
|
@ -7,8 +7,7 @@
|
|||||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||||
*/
|
*/
|
||||||
// export const serviceDomain = 'https://nxhs.cjyx.cc'
|
// export const serviceDomain = 'https://nxhs.cjyx.cc'
|
||||||
// export const serviceDomain = 'https://star.hz-hl.com'
|
export const serviceDomain = 'https://star.hz-hl.com'
|
||||||
// export const serviceDomain = 'http://222.71.165.187:9010'
|
// export const serviceDomain = 'http://222.71.165.187:9010'
|
||||||
|
// export const serviceDomain = 'http://localhost:8080'
|
||||||
// export const serviceDomain = 'http://localhost:8080'
|
// export const serviceDomain = 'https://nxhs.cjyx.cc'
|
||||||
export const serviceDomain = 'https://nxhs.cjyx.cc'
|
|
||||||
|
@ -15,6 +15,16 @@ export const getListAPI = (data: Object) => {
|
|||||||
data,
|
data,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
export interface ProcessDesignVO {
|
||||||
|
id: number
|
||||||
|
planId: number
|
||||||
|
processDesignType: string
|
||||||
|
remark: string
|
||||||
|
status: number
|
||||||
|
projectId: number
|
||||||
|
projectSubId: number
|
||||||
|
processDesignProgressList: any
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 操作生产任务(开始/结束/提交/完成)
|
* 操作生产任务(开始/结束/提交/完成)
|
||||||
@ -49,7 +59,13 @@ export const getTaskDetailAPI = (id: number) => {
|
|||||||
//data,
|
//data,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
export const getProcessDesignProgressListByProcessDesignId = (id: number) => {
|
||||||
|
return http<any[]>({
|
||||||
|
method: 'GET',
|
||||||
|
url: "/heli/process-design/process-design-progress/list-by-process-design-id?processDesignId="+id
|
||||||
|
//data,
|
||||||
|
})
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 操作生产任务(开始)
|
* 操作生产任务(开始)
|
||||||
*/
|
*/
|
||||||
@ -70,6 +86,20 @@ export const postOperateAPIEnd = (data: Object) => {
|
|||||||
data,
|
data,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
export const createProcessDesign = (data: Object) => {
|
||||||
|
return http<any[]>({
|
||||||
|
method: 'POST',
|
||||||
|
url: '/heli/process-design/create',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export const updateProcessDesign = (data: Object) => {
|
||||||
|
return http<any[]>({
|
||||||
|
method: 'PUT',
|
||||||
|
url: '/heli/process-design/update',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 操作生产任务-作废
|
* 操作生产任务-作废
|
||||||
|
1
mes.iml
1
mes.iml
@ -5,7 +5,6 @@
|
|||||||
<excludeFolder url="file://$MODULE_DIR$/heli-app/.idea" />
|
<excludeFolder url="file://$MODULE_DIR$/heli-app/.idea" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/mes-ui/mes-ui-admin-vue3/.idea" />
|
<excludeFolder url="file://$MODULE_DIR$/mes-ui/mes-ui-admin-vue3/.idea" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/mes-ui/mes-ui-admin-vue3/dist-pro" />
|
<excludeFolder url="file://$MODULE_DIR$/mes-ui/mes-ui-admin-vue3/dist-pro" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
|
||||||
</content>
|
</content>
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
Loading…
Reference in New Issue
Block a user