| | |
| | | print.setBarcode(mat.getBarcode()); |
| | | print.setMaktx(mat.getMaktx()); |
| | | print.setSpecs(mat.getSpecs()); |
| | | print.setSupp(mat.getSupp()); |
| | | print.setSku(mat.getSku()); |
| | | print.setUnit(mat.getUnit()); |
| | | print.setMemo(mat.getMemo()); |
| | | res.add(print); |
| | |
| | | * 分拣线上报接收 |
| | | */ |
| | | @PostMapping("/arm/task/v1") |
| | | @AppAuth(memo = "分拣线上报接收") |
| | | public synchronized R TaskArmReport(@RequestHeader(required = false) String appkey, |
| | | @RequestBody TaskArmReportParam param, |
| | | HttpServletRequest request) { |
| | |
| | | * 单码完成 |
| | | */ |
| | | @PostMapping("/arm/task/cycle_result") |
| | | @AppAuth(memo = "单码完成") |
| | | public synchronized R TaskArmCycleResult(@RequestHeader(required = false) String appkey, |
| | | @RequestBody TaskArmCycleResultParam param, |
| | | HttpServletRequest request) { |
| | |
| | | * 托盘完成 |
| | | */ |
| | | @PostMapping("/arm/task/workspace_status") |
| | | @AppAuth(memo = "托盘完成") |
| | | public synchronized R TaskArmWorkspaceStatus(@RequestHeader(required = false) String appkey, |
| | | @RequestBody TaskArmWorkspaceStatusParam param, |
| | | HttpServletRequest request) { |
| | |
| | | * 异常上报 |
| | | */ |
| | | @PostMapping("/armAbnormalOperation") |
| | | @AppAuth(memo = "异常上报") |
| | | public synchronized R ArmAbnormalOperation(@RequestHeader(required = false) String appkey, |
| | | @RequestBody TaskArmErrorParam param, |
| | | HttpServletRequest request) { |
| | |
| | | * 订单完成上报 |
| | | */ |
| | | @PostMapping("/arm/task/order_result") |
| | | @AppAuth(memo = "订单完成上报") |
| | | public synchronized R TaskArmWorkOrderStatus(@RequestHeader(required = false) String appkey, |
| | | @RequestBody OrderArmEndParam param, |
| | | HttpServletRequest request) { |
| | |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value= "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * 机械臂编号 |
| | | */ |
| | | @ApiModelProperty(value= "机械臂编号") |
| | | @TableId(value = "arm_no", type = IdType.INPUT) |
| | | @TableField("arm_no") |
| | | private Integer armNo; |
| | | |
| | |
| | | * 起点 |
| | | */ |
| | | @ApiModelProperty(value= "起点") |
| | | @TableId(value = "sorting_line", type = IdType.INPUT) |
| | | @TableField("sorting_line") |
| | | private Integer sortingLine; |
| | | |
| | |
| | | package com.zy.asrs.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotations.TableId; |
| | | import com.baomidou.mybatisplus.enums.IdType; |
| | | import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableField; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value= "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | |
| | | * 长度 |
| | | */ |
| | | @ApiModelProperty(value= "长度") |
| | | @ExcelProperty(value = "长度") |
| | | @TableField("man_length") |
| | | private Double manLength; |
| | | |
| | | /** |
| | | * 重量 |
| | | */ |
| | | @ApiModelProperty(value= "宽度") |
| | | @ExcelProperty(value = "宽度") |
| | | private Double width; |
| | | |
| | | /** |
| | | * 重量 |
| | | */ |
| | | @ApiModelProperty(value= "高度") |
| | | @ExcelProperty(value = "高度") |
| | | private Double height; |
| | | |
| | | /** |
| | | * 体积 |
| | | */ |
| | | @ApiModelProperty(value= "体积") |
| | |
| | | /** |
| | | * 物料编码 |
| | | */ |
| | | private String matnr; |
| | | private String matnr;// matnr -> sku |
| | | |
| | | /** |
| | | * SKC |
| | |
| | | * 物料单位 |
| | | */ |
| | | private String unit; |
| | | private String supp; // supp -> po |
| | | private String sku;//barcode(sku) -> upc |
| | | private String supplier="默认"; |
| | | |
| | | /** |
| | | * 物料规格 |
| | |
| | | public CombMat() {} |
| | | |
| | | public CombMat(BasArmRules basArmRules) { |
| | | this.material_height = basArmRules.getMaterialHeight(); |
| | | this.material_length = basArmRules.getMaterialLength(); |
| | | this.material_width = basArmRules.getMaterialWidth(); |
| | | this.material_height = basArmRules.getMaterialHeight(); |
| | | this.material_weight = basArmRules.getMaterialWeight(); |
| | | } |
| | | |
| | | public CombMat(Double material_length, Double material_width, Double material_height, Double material_weight, Double material_number) { |
| | | this.material_length = material_length; |
| | | this.material_width = material_width; |
| | | this.material_height = material_height; |
| | | this.material_weight = material_weight; |
| | | this.material_number = material_number; |
| | | } |
| | | } |
| | | |
| | | public ArmPrecomputeParam() {} |
| | | public ArmPrecomputeParam(Double material_length, Double material_width, Double material_height, Double material_weight, Double material_number) { |
| | | this.matList.add( new CombMat(material_length, material_width, material_height, material_weight, material_number)); |
| | | } |
| | | |
| | | public ArmPrecomputeParam(BasArmRules basArmRules) { |
| | | this.matList.add(new CombMat(basArmRules)); |
| | |
| | | |
| | | // 规格 |
| | | private String specs = ""; |
| | | private String supp = "";//supp -> po |
| | | |
| | | // sku |
| | | private String sku = ""; |
| | |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.regex.Pattern; |
| | | |
| | | /* |
| | | * Created by Monkey D. Luffy on 2025.09.09 |
| | | * */ |
| | |
| | | private String sku; |
| | | |
| | | public void OrderIdTwo(String sign_order,String sign_sku){ |
| | | String[] split = order_id.split(sign_order); |
| | | String[] split = order_id.split(Pattern.quote(sign_order)); |
| | | staNo = split[1]; |
| | | String[] split1 = split[0].split(sign_sku); |
| | | String[] split1 = split[0].split(Pattern.quote(sign_sku)); |
| | | orderNo = split1[1]; |
| | | sku = split1[0]; |
| | | } |
| | |
| | | /** |
| | | * 单据编号 |
| | | */ |
| | | private String OrderNo; |
| | | private String orderNo; |
| | | |
| | | /** |
| | | * 时间戳 |
| | |
| | | private String supplier; |
| | | |
| | | //绑定标记(标识相同必须去同一个分拣口) |
| | | private Long binding_tags; |
| | | private Long bindingTags; |
| | | |
| | | public MatList() { |
| | | } |
| | |
| | | this.sku = sku; |
| | | this.po = po; |
| | | } |
| | | public MatList(String sku, String po, Double ctns, String upc, Integer sign, String supplier, Long binding_tags) { |
| | | public MatList(String sku, String po, Double ctns, String upc, Integer sign, String supplier, Long bindingTags) { |
| | | this.sku = sku; |
| | | this.po = po; |
| | | this.ctns = ctns; |
| | | this.upc = upc; |
| | | this.sign = sign; |
| | | this.supplier = supplier; |
| | | this.binding_tags = binding_tags; |
| | | this.bindingTags = bindingTags; |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.regex.Pattern; |
| | | |
| | | /* |
| | | * Created by Monkey D. Luffy on 2025.09.09 |
| | | * */ |
| | |
| | | private String sku; |
| | | |
| | | public void OrderIdTwo(String sign_order,String sign_sku){ |
| | | String[] split = order_id.split(sign_order); |
| | | String[] split = order_id.split(Pattern.quote(sign_order)); |
| | | staNo = split[1]; |
| | | String[] split1 = split[0].split(sign_sku); |
| | | String[] split1 = split[0].split(Pattern.quote(sign_sku)); |
| | | orderNo = split1[1]; |
| | | sku = split1[0]; |
| | | } |
| | |
| | | basArmMast.setStaNo(basArm.getStaNoSou()); |
| | | break; |
| | | } |
| | | BasArmMast basArmMastOld = basArmMastService.selectOne( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("sorting_line", basArmMast.getSortingLine()) |
| | | .eq("arm_no", basArmMast.getArmNo()) |
| | | .eq("status", 0) |
| | | ); |
| | | if (Cools.isEmpty(basArmMastOld)){ |
| | | basArmMastService.insert(basArmMast); |
| | | } else { |
| | | throw new CoolException("未查询到相关机械臂拆码垛任务!!!"+ JSON.toJSONString(param)); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | public void taskArmWorkspaceStatus(TaskArmWorkspaceStatusParam param) { |
| | | BasArmMast basArmMast = basArmMastService.selectOne( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("sorting_line", Utils.armStaNo(param.getArm_no(),Integer.parseInt(param.getId()))) |
| | | .eq("sta_no", Utils.armStaNo(param.getArm_no(),Integer.parseInt(param.getId()))) |
| | | .eq("arm_no", param.getArm_no()) |
| | | .eq("status", 2) |
| | | ); |
| | |
| | | .eq("arm_no", param.getArm_no()) |
| | | .eq("status", 5) |
| | | ); |
| | | if (Cools.isEmpty(basArmMast)){ |
| | | throw new CoolException("未查询到相关机械臂拆码垛任务!!!"+ JSON.toJSONString(param)); |
| | | } |
| | | if (!Cools.isEmpty(basArmMast)){ |
| | | basArmMastService.updateArmMastStatus(param.getArm_no(),basArmMast.getSortingLine(), 5,6); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | // log.info("未有新订单"); |
| | | return; |
| | | } |
| | | |
| | | //遍历单据 |
| | | for (String orderNo : orderNos) { |
| | | List<OrderDetl> orderDetls = orderDetlService.selectByOrderNo(orderNo); |
| | |
| | | Long bindingTag = System.currentTimeMillis();//混搭标记 |
| | | |
| | | List<OrderToLine.MatList> matLists = new ArrayList<>(); |
| | | List<OrderToLine.MatList> matListsRemainder = new ArrayList<>(); |
| | | List<OrderDetl> orderDetlsRemainder = new ArrayList<>(); |
| | | |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | Integer number = basArmRulesService.getNumber(orderDetl.getWeight(),orderDetl.getVolume(),orderDetl.getManLength(),orderDetl.getWidth(),orderDetl.getHeight()); |
| | | if (number == null) { |
| | | BasArmRules basArmRules = new BasArmRules(); |
| | | basArmRules.setMaterialHeight(orderDetl.getHeight()); |
| | | basArmRules.setMaterialWeight(orderDetl.getWeight()); |
| | | basArmRules.setMaterialLength(orderDetl.getManLength()); |
| | | basArmRules.setMaterialWidth(orderDetl.getWidth()); |
| | | basArmRulesService.insert(basArmRules); |
| | | return; |
| | | } else if (number == 0){ |
| | | return; |
| | | } |
| | | Double anfme = orderDetl.getAnfme(); |
| | | Double remainder = anfme % number; //取余 余数混搭 |
| | | if(remainder != 0){ |
| | |
| | | OrderToLine.MatList matMix = new OrderToLine.MatList( |
| | | orderDetl.getMatnr(), // matnr -> sku |
| | | orderDetl.getSupp(), // supp -> po |
| | | remainder, // 余料 -> 剩余余料统一时间戳标记 |
| | | orderDetl.getBarcode(), //barcode -> upc 条码 |
| | | orderDetl.getAnfme(), // 余料 -> 剩余余料统一时间戳标记 |
| | | orderDetl.getSku(), //barcode -> upc 条码 |
| | | 1, |
| | | orderDetl.getOrigin(), //origin -> supplier 货源 |
| | | null, //origin -> supplier 货源 |
| | | bindingTag //余料标记相同 |
| | | ); |
| | | // matListsRemainder.add(matMix); |
| | | // orderDetlsRemainder.add(orderDetl); |
| | | matLists.add(matMix); |
| | | } |
| | | } else { |
| | | Double ctns = anfme - remainder; |
| | | // 组装物料信息 |
| | | OrderToLine.MatList mat = new OrderToLine.MatList( |
| | | orderDetl.getMatnr(), // matnr -> sku |
| | | orderDetl.getSupp(), // supp -> po |
| | | ctns, //整料 |
| | | orderDetl.getBarcode(), //barcode -> upc |
| | | orderDetl.getAnfme(), //整料 |
| | | orderDetl.getSku(), //barcode -> upc |
| | | 1, |
| | | orderDetl.getOrigin(), //origin -> supplier 货源 |
| | | null, //origin -> supplier 货源 |
| | | System.currentTimeMillis() |
| | | ); |
| | | matLists.add(mat); |
| | | } |
| | | } |
| | | // // 智能分组余料 |
| | | // if (matListsRemainder.size() > 0) { |
| | | // groupRemainders(orderDetlsRemainder, orderDetlsRemainder.size(), orderDetls.size(), matLists); |
| | | // } |
| | | orderToLine.setMatList(matLists); |
| | | try{ |
| | | ReturnT<String> returnT = orderToLineHandler.start(orderToLine); |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | private void groupRemainders(List<OrderDetl> sameMaterialList, double totalRemainder, |
| | | int number, List<OrderToLine.MatList> matLists) { |
| | | // 策略1: 如果余料总量较大,尝试分成多个合理大小的组 |
| | | if (totalRemainder > number * 0.6) { |
| | | // 可以分成2组或更多组 |
| | | int suggestedGroups = (int) Math.ceil(totalRemainder / (number * 0.8)); |
| | | distributeRemainders(sameMaterialList, totalRemainder, suggestedGroups, matLists); |
| | | } else { |
| | | // 小余料单组处理 |
| | | Long bindingTag = System.currentTimeMillis(); |
| | | matLists.add(createMatListItem(sameMaterialList.get(0), totalRemainder, bindingTag, true)); |
| | | } |
| | | } |
| | | |
| | | |
| | | private void distributeRemainders(List<OrderDetl> sameMaterialList, double totalRemainder, |
| | | int groupCount, List<OrderToLine.MatList> matLists) { |
| | | double average = totalRemainder / groupCount; |
| | | |
| | | for (int i = 0; i < groupCount; i++) { |
| | | double groupQuantity; |
| | | if (i == groupCount - 1) { |
| | | // 最后一组取剩余所有 |
| | | groupQuantity = totalRemainder - (average * (groupCount - 1)); |
| | | } else { |
| | | groupQuantity = average; |
| | | } |
| | | |
| | | // 为每组生成唯一标记 |
| | | Long groupTag = System.currentTimeMillis() + i; |
| | | matLists.add(createMatListItem(sameMaterialList.get(0), groupQuantity, groupTag, true)); |
| | | } |
| | | } |
| | | |
| | | private OrderToLine.MatList createMatListItem(OrderDetl orderDetl, Double quantity, Long bindingTag, boolean isRemainder) { |
| | | return new OrderToLine.MatList( |
| | | orderDetl.getMatnr(), |
| | | orderDetl.getSupp(), |
| | | quantity, |
| | | orderDetl.getBarcode(), |
| | | 1, |
| | | isRemainder ? null : orderDetl.getOrigin(), |
| | | isRemainder ? bindingTag : System.currentTimeMillis() |
| | | ); |
| | | } |
| | | |
| | | } |
| | |
| | | response = new HttpHandler.Builder() |
| | | .setUri(URL) |
| | | .setPath(QuantityOfPalletizing) |
| | | .setJson(JSON.toJSONString(armPrecomputeParam)) |
| | | .setJson(JSON.toJSONString(armPrecomputeParam.getMatList().get(0))) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | JSONObject data = JSON.parseObject(jsonObject.getString("data")); |
| | | |
| | | success = true; |
| | | ArmPrecomputeParam jsonObjectObject = jsonObject.getObject("data", ArmPrecomputeParam.class); |
| | | ArmPrecomputeParam jsonObjectObject = new ArmPrecomputeParam( |
| | | data.getDouble("material_length"), |
| | | data.getDouble("material_width"), |
| | | data.getDouble("material_height"), |
| | | data.getDouble("material_weight"), |
| | | data.getDouble("material_number") |
| | | ); |
| | | for (ArmPrecomputeParam.CombMat combMat : jsonObjectObject.getMatList()){ |
| | | basArmRulesService.updateStatus(combMat); |
| | | } |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | @Transactional |
| | |
| | | String response = ""; |
| | | boolean success = false; |
| | | try { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("appkey","ea1f0459efc02a79f046f982767939ae"); |
| | | response = new HttpHandler.Builder() |
| | | .setHeaders(map) |
| | | .setUri(URL) |
| | | .setPath(Path) |
| | | .setJson(JSON.toJSONString(orderToline)) |
| | |
| | | select material_number |
| | | from asr_bas_arm_rules |
| | | where 1=1 |
| | | and material_volume = #{volume} |
| | | and material_length = #{length} |
| | | and material_width = #{width} |
| | | and material_height = #{height} |
| | |
| | | <result column="weight" property="weight" /> |
| | | <result column="man_length" property="manLength" /> |
| | | <result column="volume" property="volume" /> |
| | | <result column="width" property="width" /> |
| | | <result column="height" property="height" /> |
| | | <result column="three_code" property="threeCode" /> |
| | | <result column="supp" property="supp" /> |
| | | <result column="supp_code" property="suppCode" /> |
| | |
| | | var templateDom = $("#templatePreview"+templateNo); |
| | | var className = templateDom.attr("class"); |
| | | if (className === 'template-barcode') { |
| | | res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=1¶m="+res.data[i].matnr; |
| | | res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=1¶m=" |
| | | +"orderNo;cs2025092313;" |
| | | +"sku;" +res.data[i].matnr+";" |
| | | +"po;" +res.data[i].supp+";" |
| | | +"upc;" +res.data[i].sku+";" |
| | | +"supplier;" +res.data[i].supplier; |
| | | } else { |
| | | res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2¶m="+res.data[i].matnr; |
| | | res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2¶m=" |
| | | +"orderNo;cs2025092313;" |
| | | +"sku;" +res.data[i].matnr+";" |
| | | +"po;" +res.data[i].supp+";" |
| | | +"upc;" +res.data[i].sku+";" |
| | | +"supplier;" +res.data[i].supplier; |
| | | } |
| | | } |
| | | var tpl = templateDom.html(); |
| | |
| | | <div id="tagSel" class="ew-xmselect-tree"></div> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label layui-form-required">商品sku</label> |
| | | <div class="layui-input-block"> |
| | | <input id="matnr" name="matnr" placeholder="请输入sku" class="layui-input" lay-vertype="tips" lay-verify="required" required=""> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label layui-form-required">商品名称</label> |
| | |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">配置</label> |
| | | <label class="layui-form-label">规格</label> |
| | | <div class="layui-input-block"> |
| | | <input name="specs" placeholder="请输入配置" class="layui-input"> |
| | | <input name="supp" placeholder="请输入客户po" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">单箱净重</label> |
| | | <label class="layui-form-label">条码upc</label> |
| | | <div class="layui-input-block"> |
| | | <input name="weight" placeholder="请输入单箱净重格" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">单箱体积</label> |
| | | <div class="layui-input-block"> |
| | | <input name="volume" placeholder="请输入单箱体积" class="layui-input"> |
| | | <input name="sku" placeholder="请输入条码upc" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | <div class="layui-col-md6"> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label layui-form-required">商品编号</label> |
| | | <label class="layui-form-label">单箱长度</label> |
| | | <div class="layui-input-block"> |
| | | <input id="matnr" name="matnr" placeholder="请输入商品编号" class="layui-input" lay-vertype="tips" lay-verify="required" required=""> |
| | | <input name="manLength" placeholder="请输入单箱长度mm" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">规格</label> |
| | | <label class="layui-form-label">单箱重量</label> |
| | | <div class="layui-input-block"> |
| | | <input name="specs" placeholder="请输入代码" class="layui-input"> |
| | | <input name="weight" placeholder="请输入箱子重量kg" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">备注</label> |
| | | <label class="layui-form-label">单箱宽度</label> |
| | | <div class="layui-input-block"> |
| | | <input name="memo" placeholder="请输入备注" class="layui-input"> |
| | | <input name="width" placeholder="请输入箱子宽度mm" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">单箱毛重</label> |
| | | <label class="layui-form-label">单箱高度</label> |
| | | <div class="layui-input-block"> |
| | | <input name="manLength" placeholder="请输入单箱毛重" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">单箱体积</label> |
| | | <div class="layui-input-block"> |
| | | <input name="threeCode" placeholder="请输入箱子尺寸" class="layui-input"> |
| | | <input name="height" placeholder="请输入箱子高度mm" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | {{#each data}} |
| | | <table class="contain" width="280" style="overflow: hidden;font-size: small;table-layout: fixed;"> |
| | | <tr style="height: 74px"> |
| | | <td align="center" colspan="3" scope="col">商品编码</td> |
| | | <td align="center" colspan="3" scope="col">sku</td> |
| | | <td align="center" class="barcode" colspan="9" scope="col"> |
| | | <img class="template-code" src="{{this.barcodeUrl}}" width="90%"> |
| | | <div style="letter-spacing: 2px;margin-top: 1px; text-align: center"> |
| | |
| | | {{#each data}} |
| | | <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;"> |
| | | <tr style="height: 74px" > |
| | | <td align="center" scope="col" colspan="1">商品</td> |
| | | <td align="center" scope="col" colspan="1" style=" |
| | | <td align="center" scope="col" colspan="1" rowspan="1">商品</td> |
| | | <td align="center" scope="col" colspan="1" rowspan="1" style=" |
| | | display: inline-block; |
| | | line-height: 20px; |
| | | vertical-align: middle; |
| | |
| | | </td> |
| | | </tr> |
| | | <tr style="height: 74px"> |
| | | <td align="center" colspan="1">备注</td> |
| | | <td align="center" colspan="1" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.memo}}</td> |
| | | <td align="center" colspan="1">po</td> |
| | | <td align="center" colspan="1" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.supp}}</td> |
| | | </tr> |
| | | </table> |
| | | {{/each}} |
| | | <!-- {{/each}}--> |
| | | </script> |
| | | |
| | | </body> |