rev:出入库流程兼容

This commit is contained in:
zhangzq
2024-05-29 13:15:50 +08:00
parent 364dc9870c
commit fc521f7580
25 changed files with 184 additions and 60 deletions

View File

@@ -40,6 +40,7 @@ public enum StatusEnum {
* 点位锁类型
*/
LOCK(MapOf.of("","00","","10","","20")),
STRATEGY_TYPE(MapOf.of("入库", "1", "出库", "2", "出入库", "3")),
;
private Map<String, String> code;

View File

@@ -3,13 +3,17 @@ package org.nl.common.utils;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import lombok.Data;
import org.apache.poi.ss.formula.functions.T;
import org.nl.common.domain.exception.BadRequestException;
import org.springframework.expression.Expression;
import org.springframework.expression.spel.SpelEvaluationException;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
@@ -23,7 +27,7 @@ public class SpelUtil {
private static SpelExpressionParser SPEL_PARSER = new SpelExpressionParser();
public static void main(String[] args) {
public static void main2(String[] args) {
JSONObject source = new JSONObject();
JSONObject model = new JSONObject();
JSONObject FBillType = new JSONObject();
@@ -87,6 +91,50 @@ public class SpelUtil {
}
return result;
}
public static <Z> Z parse(JSONObject sourceData, String skip, Class<Z> target){
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable("M",sourceData);
Expression expression = SpelUtil.SPEL_PARSER.parseExpression(skip);
try {
return expression.getValue(context, target);
}catch (SpelEvaluationException ex){
throw new BadRequestException("当前业务数据没有映射 对应的数据"+skip);
}
}
public static void main(String[] args) {
TypeReference<Class<JSONArray>> typeRef = new TypeReference<Class<JSONArray>>() {};
ParameterizedType type = (ParameterizedType) typeRef.getType();
Type type1 = type.getActualTypeArguments()[0];
Class aClass = (Class) type1;
String a="{\n" +
"\t\"code\": \"REC10022\",\n" +
"\t\"t\": {\n" +
"\t\t\"form_data\": {\n" +
"\t\t\t\"stor_code\": \"\",\n" +
"\t\t\t\"struct_code\": \"\",\n" +
"\t\t\t\"order\": \"\"\n" +
"\t\t},\n" +
"\t\t\"stor_code\": \"FStockId\",\n" +
"\t\t\"pcsn\": \"werwe\",\n" +
"\t\t\"material_id\": \"FMaterialId\",\n" +
"\t\t\"biz_id\": \"1793594766324273152\",\n" +
"\t\t\"order\": \"FMoBillNo\"\n" +
"\t},\n" +
"\t\"create_time\": \"2024-05-23 18:48:31\",\n" +
"\t\"form_id\": \"\",\n" +
"\t\"id\": \"1793594856053018624\",\n" +
"\t\"form_type\": \"PRD_FeedMtrl\",\n" +
"\t\"source_form_id\": \"1793594766324273152\",\n" +
"\t\"source_form_type\": \"st_ivt_iostorinvdtl_in\",\n" +
"\t\"status\": \"10\",\n" +
"\t\"create_name\": \"管理员\"\n" +
"}";
Object o = JSONObject.parseObject(a, aClass);
System.out.println(o.toString());
}
}
@Data
class DemoJSON{

View File

@@ -96,4 +96,9 @@ public class MdPbVehicleMater implements Serializable {
*/
private String remark;
/**
* 关联实例id
*/
private String proc_inst_id;
}

View File

@@ -35,7 +35,7 @@ import java.util.stream.Collectors;
* 先进先出策略
*/
@Service("fifo")
public class FIFORuleHandler extends Decisioner<StIvtStructattr, StIvtIostorinvdtl> {
public class FIFORuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
/**
* 出入库明细服务
@@ -57,17 +57,17 @@ public class FIFORuleHandler extends Decisioner<StIvtStructattr, StIvtIostorinvd
* @return List<StIvtStructattr> :仓位集合
*/
@Override
public List<StIvtStructattr> handler(List<StIvtStructattr> list, StIvtIostorinvdtl param) {
public List<StIvtStructattr> handler(List<StIvtStructattr> list, JSONObject param) {
// 判断仓位是否为空
if (ObjectUtil.isEmpty(list)) {
throw new BadRequestException("仓位集合为空!");
}
//分配数量
int plan_qty = param.getPlan_qty().intValue();
int plan_qty = param.getInteger("plan_qty");
//当前条件只有id批次
List<StructattrVechielDto> vechielDtos = iStIvtStructattrService.collectVechicle(MapOf.of("material_id", param.getMaterial_id()
, "pcsn", param.getPcsn()
, "stor_code", param.getStor_code()
List<StructattrVechielDto> vechielDtos = iStIvtStructattrService.collectVechicle(MapOf.of("material_id", param.getString("material_id")
, "pcsn", param.getString("pcsn")
, "stor_code", param.getString("stor_code")
, "order_by", "update_time asc")
);
List<String> need = list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.toList());

View File

@@ -24,7 +24,7 @@ import java.util.List;
* 就近放置策略根据物料ABC类区分
*/
@Service("nearby")
public class NearbyRuleHandler extends Decisioner<StIvtStructattr, StIvtIostorinvdtl> {
public class NearbyRuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
//每个策略的配置信息
private static StStrategyConfig stStrategyConfig;
/**
@@ -49,7 +49,7 @@ public class NearbyRuleHandler extends Decisioner<StIvtStructattr, StIvtIostorin
* @return List<StIvtStructattr> :仓位集合
*/
@Override
public List<StIvtStructattr> handler(List<StIvtStructattr> list, StIvtIostorinvdtl param) {
public List<StIvtStructattr> handler(List<StIvtStructattr> list, JSONObject param) {
if (CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前分配策略无可用货位");
}

View File

@@ -39,9 +39,9 @@ public class StackingTaskHandler implements TaskHandler {
public JSONObject process(JSONObject from, JSONObject param) {
//区分出库还是入库
String vehicle_code = from.getString("vehicle_code");
String point_code1 = from.getString("struct_code");
String point_code2 = param.getString("start_point");
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(point_code1)||StringUtils.isEmpty(point_code2)){
String struct_code = from.getString("struct_code");
String start_point = param.getString("start_point");
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(start_point)||StringUtils.isEmpty(struct_code)){
throw new BadRequestException("创建任务失败:StackingTaskHandler#process()方法请求参数不能为空");
}
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
@@ -59,8 +59,8 @@ public class StackingTaskHandler implements TaskHandler {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setTask_type(param.getString("task_type"));
task.setVehicle_code(vehicle_code);
task.setPoint_code1(point_code1);
task.setPoint_code2(point_code2);
task.setPoint_code1(start_point);
task.setPoint_code2(struct_code);
taskService.create(task);
Boolean isSend = param.getBoolean("is_send");
if (isSend){

View File

@@ -24,6 +24,7 @@ public class FormConverter extends BaseNodeConverter {
form.setId(node.getString("id"));
form.setType(node.getString("type"));
form.setForm_type(properties.getString("form_type"));
form.setSource_data(properties.getString("sourceData"));
form.setName(properties.getString("name"));
form.setCategory(properties.getString("category"));
form.setDocumentation(properties.getString("documentation"));

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.CodeUtil;
@@ -16,6 +17,8 @@ import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.task.impl.Form;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler;
import org.nl.wms.flow_manage.flow.service.history.IActHiExecutionService;
import org.nl.wms.flow_manage.flow.service.history.dao.ActHiExecution;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.stor_manage.io.service.in.iostor.IStIvtIostorinvInService;
import org.nl.wms.stor_manage.io.service.in.iostor.dao.StIvtIostorinvIn;
@@ -45,6 +48,9 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
@Autowired
IPmFormDataService iPmFormDataService;
@Autowired
private IActHiExecutionService actHiExecutionService;
@Override
public void execute(ExecutionEntity<JSONObject> entity) {
FlowElement flowElement = entity.getCurrentFlowElement();
@@ -60,6 +66,16 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
// }
//TEST:这部分数据放在框架中,每个节点都需要
entity.setForm_struc(sourceStruc);
//怕断是否指定数据源:
JSONObject sourceData = entity.getT();
String dataConfig = currentNode.getSource_data();
if (StringUtils.isNotEmpty(dataConfig)){
ActHiExecution one = actHiExecutionService.getOne(new QueryWrapper<ActHiExecution>()
.eq("activity_id", dataConfig)
.eq("proc_inst_id", entity.getProc_inst_id()));
sourceData = one.getForm_data();
}
//处理自定义参数:
if (currentNode.getSkipExpression()!=null || currentNode.getSkipExpression().size()>0){
@@ -67,7 +83,7 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
if (typeHandler==null){
throw new BadRequestException("【flow】当前节点处理类型未定义");
}
JSONObject handler = typeHandler.handler(currentNode.getSkipExpression(), entity.getT() , targetStruc);
JSONObject handler = typeHandler.handler(currentNode.getSkipExpression(), sourceData , targetStruc);
//该参数里包含三部分:主数据基础字段,组数据自定义及明细,
//明细:基础字段,组数据自定义及参数:

View File

@@ -1,10 +1,19 @@
package org.nl.wms.flow_manage.flow.framework.entity.node.impl.task;
import lombok.Data;
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowNode;
/*
* @author ZZQ
* @Date 2024/3/18 11:28
*/
@Data
public class ExecuteTask extends FlowNode {
/**
* 指定数据来源:从节点中获取
*/
private String source_data;
}

View File

@@ -23,6 +23,7 @@ public class Form extends ExecuteTask {
* 表单处理类别
*/
private String category;
/**
* 处理表达式
*/

View File

@@ -18,10 +18,6 @@ public class StrucForm extends ExecuteTask {
*/
private String form_type;
/**
* 指定数据来源:从节点中获取
*/
private String source_data;
/**
* 表单处理类别
*/

View File

@@ -8,6 +8,9 @@ import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.ListOf;
import org.nl.common.utils.RedissonUtils;
import org.nl.common.utils.SpringContextHolder;
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.task.impl.ServerTask;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
@@ -41,6 +44,8 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
private IStIvtStructattrService iStIvtStructattrService;
@Autowired
private IStIvtIostorinvdtlService stIvtIostorinvdtlInService;
@Autowired
private IPmFormDataService iPmFormDataService;
@Autowired
private Map<String, Decisioner> decisionHandlerMap;
@@ -57,26 +62,37 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
//出入库明细
JSONObject t = entity.getT();
JSONObject item_json = t.getJSONObject("t");
StIvtIostorinvdtl iostorinvdtl = item_json.toJavaObject(StIvtIostorinvdtl.class);
List<StIvtStructattr> list = SpringContextHolder.getBean(DecisionHandler.class).dispense(params, iostorinvdtl);
ServerTask flow = (ServerTask)entity.getCurrentFlowElement();
List<StIvtStructattr> list = SpringContextHolder.getBean(DecisionHandler.class).dispense(params, item_json);
//更新仓位,更新数据
String collect = list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.joining(","));
System.out.println("更新明细id"+iostorinvdtl.getId());
stIvtIostorinvdtlInService.update(new UpdateWrapper<StIvtIostorinvdtl>()
.set("struct_code",collect)
.eq("id",iostorinvdtl.getId()));
System.out.println("更新明细id"+item_json.getString("id"));
StringBuffer sql = new StringBuffer();
sql.append("update ")
.append(flow.getForm_type())
.append(" set struct_code = ")
.append("'"+collect+"'")
.append(" where id = ")
.append("'"+item_json.getString("id")+"'");
iPmFormDataService.dynamicSql(sql.toString());
item_json.put("struct_code",collect);
return t;
}
@Transactional(propagation= Propagation.REQUIRES_NEW)
public List<StIvtStructattr> dispense(List<String> params, StIvtIostorinvdtl iostorinvdtl) {
public List<StIvtStructattr> dispense(List<String> params, JSONObject iostorinvdtl) {
Decisioner oneDecisioner = decisionHandlerMap.get(params.get(0));
//判断是出库还是入库
String stor_code = iostorinvdtl.getString("stor_code");
String strategy_type = oneDecisioner.strategyConfig.getStrategy_type();
boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type);
AtomicReference<List<StIvtStructattr>> structCode = new AtomicReference<>();
RedissonUtils.lock(()->{
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
.eq("is_used", true)
.eq("lock_type", StatusEnum.LOCK.code(""))
.eq("stor_code", iostorinvdtl.getStor_code());
if (iostorinvdtl.getIn_storage()){
.eq("stor_code", iostorinvdtl.getString("stor_code"));
if (in_storage){
query.eq("vehicle_code","");
}else {
query.ne("vehicle_code","");
@@ -97,14 +113,14 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
throw new BadRequestException("无可分配货位!");
}
//如果是入库的话只分配一个,出库的话有可能多个货位
if (iostorinvdtl.getIn_storage()){
if (in_storage){
list= ListOf.of(list.get(0));
}
structCode.set(list);
System.out.println("分配的货位"+list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.joining(",")));
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
// .set("vehicle_code", iostorinvdtl.getVehicle_code())
.set("lock_type", StatusEnum.LOCK.code(iostorinvdtl.getIn_storage()?"":""))
.set("lock_type", StatusEnum.LOCK.code(in_storage?"":""))
.in("struct_code", list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.toList())));
System.out.println("货位绑定成功");
},"",2);

View File

@@ -6,8 +6,10 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.ListOf;
import org.nl.common.utils.SpelUtil;
import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
@@ -33,9 +35,8 @@ public class MappingHandler extends TypeHandler<JSONObject, JSONObject> {
JSONObject resultT = new JSONObject();
JSONObject mapping = JSONObject.parseObject(param.size()==1?param.get(0):param.remove(0));
//数据平铺
JSONObject sourceFormData = new JSONObject(data.getJSONObject("t"));
//数据平铺
String souceFromId = data.getString("form_id");
String souceFromType = data.getString("form_type");
JSONObject forms = sourceFormData.getJSONObject("form_data");
@@ -44,16 +45,7 @@ public class MappingHandler extends TypeHandler<JSONObject, JSONObject> {
}
//数据字段列表+自定义的字段:不从配置表获取
Object formDataMapping = mapping.remove("form_data");
// List<String> fields = ListOf.of(form_struc.getBiz_code()
// , form_struc.getBiz_id()
// , form_struc.getBiz_code()
// , form_struc.getBiz_status()
// , form_struc.getBiz_form_type()
// , form_struc.getMaterial_id()
// , form_struc.getPcsn()
// , form_struc.getVehicle_code()
// , form_struc.getUnit_id()
// , form_struc.getQty());
JSONObject t = new JSONObject();
//查询目标表字段
//基础字段映射:如果只有一个就不迭代
@@ -80,11 +72,17 @@ public class MappingHandler extends TypeHandler<JSONObject, JSONObject> {
}
t.put("form_data",form_data);
}
JSONArray item = data.getJSONArray("item");
Object itemSkip = param.remove("skipExpression");
JSONArray item = new JSONArray();
if (data.getJSONArray("item") == null){
item.add(data);
}else {
item = data.getJSONArray("item");
}
BmFormStruc item_struc = iBmFormStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("parent_id",form_struc.getId()));
if (item!=null){
//暂定:强制校验
if (item_struc == null){
if (item_struc != null){
if (item==null){
//暂定:强制校验
throw new BadRequestException("当前数据存在明细且目标单据:"+form_struc.getForm_type()+" 未配置明细表");
}
JSONArray itemList = new JSONArray();

View File

@@ -15,6 +15,7 @@ import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService;
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick;
import org.nl.wms.md_manage.group_dick.service.dto.GroupDickQuery;
import org.nl.wms.md_manage.group_dick.service.dto.MdGruopDtlDto;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
@@ -43,6 +44,8 @@ public class MdGruopDickController {
@Autowired
private IMdGruopDickService iMdGruopDickService;
@Autowired
private IPmFormDataService iPmFormDataService;
@GetMapping
@Log("查询组盘表")

View File

@@ -29,15 +29,20 @@ public class MdGruopDtl implements Serializable {
* 主表id
*/
private String dick_id;
/**
* 实例id
*/
private String proc_inst_id;
/**
* 载具
*/
private String vehicle_code;
/**
* 仓位
*/
private String struct_code;
/**
/**
* 仓库
*/
private String stor_code;
/**
* 载具
*/

View File

@@ -47,7 +47,7 @@
</select>
<select id="getGroupDtl" resultType="com.alibaba.fastjson.JSONObject">
SELECT
*,
md_group_dtl.*,md_pb_vehicleMater.*,
md_me_materialbase.material_code,
md_me_materialbase.material_name,
md_me_materialbase.material_spec

View File

@@ -28,15 +28,18 @@ public class MdGruopDtlDto extends MdPbVehicleMater {
* 主表id
*/
private String dick_id;
/**
* 实例id
*/
private String proc_inst_id;
/**
* 载具
*/
private String vehicle_code;
/**
* 仓位
*/
private String struct_code;
/**
* 仓库
*/
private String stor_code;
/**
* 组盘状态

View File

@@ -107,7 +107,7 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
iMdGruopDtlService.saveBatch(items);
iMdPbVehicleMaterService.saveBatch(vehicleMaters);
BussEventMulticaster.Publish(new FlowStartEvent("md_group_dick", (Consumer<String>) proc_inst_id -> {
BussEventMulticaster.Publish(new FlowStartEvent("md_group", (Consumer<String>) proc_inst_id -> {
self.update(new UpdateWrapper<MdGruopDick>()
.set("proc_inst_id",proc_inst_id).eq("id",mdGroupMst.getId())); })
.build("md_group_dick",mdGroupMst.getId(),mdGroupMst.getSource_form_type(),mdGroupMst.getSource_form_id(),forms)

View File

@@ -32,4 +32,6 @@ public interface IPmFormDataService extends IService<PmFormData> {
Object getSonDtlFormData(String id);
void dynamicSql(String sql);
}

View File

@@ -1,6 +1,7 @@
package org.nl.wms.pm_manage.form_data.service.dao.mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.wms.pm_manage.form_data.service.dto.FormDataQuery;
@@ -21,4 +22,6 @@ public interface PmFormDataMapper extends BaseMapper<PmFormData> {
List<PmFormData> query(@Param("query") FormDataQuery query);
List<PmFormDataDto> queryTree(@Param("query")FormDataQuery query);
@Update("${sql}")
void dynamicSql(@Param("sql")String sql);
}

View File

@@ -216,5 +216,12 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
Assert.notNull(from_type,"表单类型参数不能为空");
return this.list(new QueryWrapper<PmFormData>().eq("form_type",from_type));
}
@Override
public void dynamicSql(String sql) {
if (StringUtils.isNotEmpty(sql)){
this.baseMapper.dynamicSql(sql);
}
}
}

View File

@@ -132,7 +132,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
throw new BadRequestException("未配置出入库默认规则,请在系统配置中配置");
}
List<String> decisions = Arrays.asList(byCode.getValue().split(","));
List<StIvtStructattr> dispense = decisionHandler.dispense(decisions, form.toJavaObject(StIvtIostorinvdtl.class));
List<StIvtStructattr> dispense = decisionHandler.dispense(decisions, form);
return dispense;
}

View File

@@ -110,7 +110,7 @@
</el-table-column>
<el-table-column prop="status" label="实例状态">
<template slot-scope="scope">
{{ dict.label.FLOW_STATUS[scope.row.status] }}
{{ statusEnum.label.FLOW_STATUS[scope.row.status] }}
</template>
</el-table-column>
<el-table-column prop="remark" show-overflow-tooltip show-tooltip-when-overflow label="备注"/>
@@ -189,7 +189,7 @@ const defaultForm = {
form_data: null
}
export default {
dicts: ["FLOW_STATUS"],
statusEnums: ["FLOW_STATUS"],
name: 'Execution',
components: {pagination, crudOperation, rrOperation, udOperation, ViewCurrentFlowDesigner},
mixins: [presenter(), header(), form(defaultForm), crud()],

View File

@@ -86,6 +86,13 @@
border
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
>
<el-table-column show-overflow-tooltip prop="stor_code" label="仓库" width="160" align="center">
<template scope="scope">
<el-input v-model="tableData[scope.$index].stor_code" class="input-with-select" />
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="struct_code" label="仓位" width="160" align="center" />
<el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column show-overflow-tooltip prop="vehicle_code" label="载具编号" width="160" align="center">
<template scope="scope">
@@ -291,6 +298,7 @@ export default {
data.material_code = row.material_code
data.material_id = row.material_id
data.material_spec = row.material_spec
data.stor_code = row.stor_code
data.source_form_type = row.form_type
data.source_form_id = row.id
data.unit_id = row.unit_id

View File

@@ -65,6 +65,8 @@
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
>
<el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column show-overflow-tooltip prop="stor_code" label="仓库" width="160" align="center" />
<el-table-column show-overflow-tooltip prop="struct_code" label="仓位" width="160" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="vehicle_code" label="托盘编号" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="parent_vehicle_code" label="父托盘编码" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="material_id" label="物料id" align="center" />