From b4d9d48170faa90f65c1ca179e6a4546ff8c2dcc Mon Sep 17 00:00:00 2001
From: liyongde <1419499670@qq.com>
Date: Mon, 17 Apr 2023 10:55:07 +0800
Subject: [PATCH] =?UTF-8?q?add:=20=E6=96=B0=E5=A2=9Epc=E7=AB=AF=E7=BB=84?=
 =?UTF-8?q?=E7=9B=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../rest/MaterialDetailController.java        |  63 ++++
 .../rest/VehicleDetailController.java         |  67 +++++
 .../service/MaterialDetailService.java        |  71 +++++
 .../service/VehicleDetailService.java         |  71 +++++
 .../service/dto/MaterialDetailDto.java        |  88 ++++++
 .../service/dto/VehicleDetailDto.java         | 154 ++++++++++
 .../impl/MaterialDetailServiceImpl.java       | 133 +++++++++
 .../impl/VehicleDetailServiceImpl.java        | 135 +++++++++
 .../wms/basedata/wql/QMD_PB_VEHICLE_GROUP.wql |  58 ++++
 .../src/api/wms/basedata/materialDetail.js    |  27 ++
 .../src/api/wms/basedata/vehicleDetail.js     |  27 ++
 .../wms/basedata/material/detail/index.vue    | 175 +++++++++++
 .../wms/basedata/vehicle/group/index.vue      | 277 ++++++++++++++++++
 13 files changed, 1346 insertions(+)
 create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/MaterialDetailController.java
 create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/VehicleDetailController.java
 create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/MaterialDetailService.java
 create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/VehicleDetailService.java
 create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialDetailDto.java
 create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/VehicleDetailDto.java
 create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialDetailServiceImpl.java
 create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleDetailServiceImpl.java
 create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_PB_VEHICLE_GROUP.wql
 create mode 100644 lms/nladmin-ui/src/api/wms/basedata/materialDetail.js
 create mode 100644 lms/nladmin-ui/src/api/wms/basedata/vehicleDetail.js
 create mode 100644 lms/nladmin-ui/src/views/wms/basedata/material/detail/index.vue
 create mode 100644 lms/nladmin-ui/src/views/wms/basedata/vehicle/group/index.vue

diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/MaterialDetailController.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/MaterialDetailController.java
new file mode 100644
index 0000000..873a768
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/MaterialDetailController.java
@@ -0,0 +1,63 @@
+package org.nl.wms.basedata.rest;
+
+import org.nl.wms.basedata.service.MaterialDetailService;
+import org.nl.wms.basedata.service.dto.MaterialDetailDto;
+import org.springframework.data.domain.Pageable;
+import lombok.RequiredArgsConstructor;
+import org.nl.modules.logging.annotation.Log;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.util.Map;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+* @author lyd
+* @date 2023-04-17
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "物料详情管理")
+@RequestMapping("/api/materialDetail")
+@Slf4j
+public class MaterialDetailController {
+
+    private final MaterialDetailService materialDetailService;
+
+    @GetMapping
+    @Log("查询物料详情")
+    @ApiOperation("查询物料详情")
+    //@SaCheckPermission("@el.check('materialDetail:list')")
+    public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page){
+        return new ResponseEntity<>(materialDetailService.queryAll(whereJson,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增物料详情")
+    @ApiOperation("新增物料详情")
+    //@SaCheckPermission("@el.check('materialDetail:add')")
+    public ResponseEntity<Object> create(@Validated @RequestBody MaterialDetailDto dto){
+        materialDetailService.create(dto);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改物料详情")
+    @ApiOperation("修改物料详情")
+    //@SaCheckPermission("@el.check('materialDetail:edit')")
+    public ResponseEntity<Object> update(@Validated @RequestBody MaterialDetailDto dto){
+        materialDetailService.update(dto);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @Log("删除物料详情")
+    @ApiOperation("删除物料详情")
+    //@SaCheckPermission("@el.check('materialDetail:del')")
+    @DeleteMapping
+    public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
+        materialDetailService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/VehicleDetailController.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/VehicleDetailController.java
new file mode 100644
index 0000000..6383597
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/VehicleDetailController.java
@@ -0,0 +1,67 @@
+
+package org.nl.wms.basedata.rest;
+
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.nl.modules.logging.annotation.Log;
+import org.nl.wms.basedata.service.VehicleDetailService;
+import org.nl.wms.basedata.service.dto.VehicleDetailDto;
+import org.springframework.data.domain.Pageable;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+* @author lyd
+* @date 2023-04-17
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "组盘信息管理")
+@RequestMapping("/api/vehicleDetail")
+@Slf4j
+public class VehicleDetailController {
+
+    private final VehicleDetailService vehicleDetailService;
+
+    @GetMapping
+    @Log("查询组盘信息")
+    @ApiOperation("查询组盘信息")
+    //@SaCheckPermission("@el.check('vehicleDetail:list')")
+    public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page){
+        return new ResponseEntity<>(vehicleDetailService.queryAll(whereJson,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增组盘信息")
+    @ApiOperation("新增组盘信息")
+    //@SaCheckPermission("@el.check('vehicleDetail:add')")
+    public ResponseEntity<Object> create(@Validated @RequestBody VehicleDetailDto dto){
+        vehicleDetailService.create(dto);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改组盘信息")
+    @ApiOperation("修改组盘信息")
+    //@SaCheckPermission("@el.check('vehicleDetail:edit')")
+    public ResponseEntity<Object> update(@Validated @RequestBody VehicleDetailDto dto){
+        vehicleDetailService.update(dto);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @Log("删除组盘信息")
+    @ApiOperation("删除组盘信息")
+    //@SaCheckPermission("@el.check('vehicleDetail:del')")
+    @DeleteMapping
+    public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
+        vehicleDetailService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/MaterialDetailService.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/MaterialDetailService.java
new file mode 100644
index 0000000..d94f5be
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/MaterialDetailService.java
@@ -0,0 +1,71 @@
+
+package org.nl.wms.basedata.service;
+
+import org.nl.wms.basedata.service.dto.MaterialDetailDto;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author lyd
+ * @description 服务接口
+ * @date 2023-04-17
+ **/
+public interface MaterialDetailService {
+
+    /**
+     * 查询数据分页
+     *
+     * @param whereJson 条件
+     * @param page      分页参数
+     * @return Map<String, Object>
+     */
+    Map<String, Object> queryAll(Map whereJson, Pageable page);
+
+    /**
+     * 查询所有数据不分页
+     *
+     * @param whereJson 条件参数
+     * @return List<MaterialDetailDto>
+     */
+    List<MaterialDetailDto> queryAll(Map whereJson);
+
+    /**
+     * 根据ID查询
+     *
+     * @param material_id ID
+     * @return MaterialDetail
+     */
+    MaterialDetailDto findById(Long material_id);
+
+    /**
+     * 根据编码查询
+     *
+     * @param code code
+     * @return MaterialDetail
+     */
+    MaterialDetailDto findByCode(String code);
+
+
+    /**
+     * 创建
+     *
+     * @param dto /
+     */
+    void create(MaterialDetailDto dto);
+
+    /**
+     * 编辑
+     *
+     * @param dto /
+     */
+    void update(MaterialDetailDto dto);
+
+    /**
+     * 多选删除
+     *
+     * @param ids /
+     */
+    void deleteAll(Long[] ids);
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/VehicleDetailService.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/VehicleDetailService.java
new file mode 100644
index 0000000..cc4428b
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/VehicleDetailService.java
@@ -0,0 +1,71 @@
+
+package org.nl.wms.basedata.service;
+
+import org.nl.wms.basedata.service.dto.VehicleDetailDto;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author lyd
+ * @description 服务接口
+ * @date 2023-04-17
+ **/
+public interface VehicleDetailService {
+
+    /**
+     * 查询数据分页
+     *
+     * @param whereJson 条件
+     * @param page      分页参数
+     * @return Map<String, Object>
+     */
+    Map<String, Object> queryAll(Map whereJson, Pageable page);
+
+    /**
+     * 查询所有数据不分页
+     *
+     * @param whereJson 条件参数
+     * @return List<VehicleDetailDto>
+     */
+    List<VehicleDetailDto> queryAll(Map whereJson);
+
+    /**
+     * 根据ID查询
+     *
+     * @param vd_id ID
+     * @return VehicleDetail
+     */
+    VehicleDetailDto findById(Long vd_id);
+
+    /**
+     * 根据编码查询
+     *
+     * @param code code
+     * @return VehicleDetail
+     */
+    VehicleDetailDto findByCode(String code);
+
+
+    /**
+     * 创建
+     *
+     * @param dto /
+     */
+    void create(VehicleDetailDto dto);
+
+    /**
+     * 编辑
+     *
+     * @param dto /
+     */
+    void update(VehicleDetailDto dto);
+
+    /**
+     * 多选删除
+     *
+     * @param ids /
+     */
+    void deleteAll(Long[] ids);
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialDetailDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialDetailDto.java
new file mode 100644
index 0000000..0e784e9
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialDetailDto.java
@@ -0,0 +1,88 @@
+package org.nl.wms.basedata.service.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author lyd
+ * @description /
+ * @date 2023-04-17
+ **/
+@Data
+public class MaterialDetailDto implements Serializable {
+
+    /** 物料标识 */
+    /**
+     * 防止精度丢失
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long material_id;
+
+    /**
+     * 物料编码
+     */
+    private String material_code;
+
+    /**
+     * 物料名称
+     */
+    private String material_name;
+
+    /**
+     * 订单编号
+     */
+    private String order_number;
+
+    /**
+     * 客户名称
+     */
+    private String customer_name;
+
+    /**
+     * 产品名称
+     */
+    private String product_name;
+
+    /**
+     * 产品牌号
+     */
+    private String product_grade;
+
+    /**
+     * 砖型
+     */
+    private String brick_type;
+
+    /**
+     * 创建人
+     */
+    private Long create_id;
+
+    /**
+     * 创建人姓名
+     */
+    private String create_name;
+
+    /**
+     * 创建时间
+     */
+    private String create_time;
+
+    /**
+     * 修改人
+     */
+    private Long update_optid;
+
+    /**
+     * 修改人
+     */
+    private String update_optname;
+
+    /**
+     * 修改时间
+     */
+    private String update_time;
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/VehicleDetailDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/VehicleDetailDto.java
new file mode 100644
index 0000000..66b2ecf
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/VehicleDetailDto.java
@@ -0,0 +1,154 @@
+package org.nl.wms.basedata.service.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+
+/**
+ * @author lyd
+ * @description /
+ * @date 2023-04-17
+ **/
+@Data
+public class VehicleDetailDto implements Serializable {
+
+    /**
+     * 防止精度丢失
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long vd_id;
+
+    private String vehicle_type;
+
+    private String vehicle_code;
+
+    private Long material_id;
+
+    private BigDecimal qty;
+
+    private BigDecimal weight;
+
+    private String is_full;
+
+    private Long workorder_id;
+
+    private String point_code;
+
+    private String tray_high;
+
+    private String crib_category;
+
+    private String palletX1_line;
+
+    private String palletY1_row;
+
+    private String palletA1_angle;
+
+    private String palletX2_line;
+
+    private String palletY2_row;
+
+    private String palletA2_angle;
+
+    private String palletX3_line;
+
+    private String palletY3_row;
+
+    private String palletA3_angle;
+
+    private String pressCribX1_line;
+
+    private String pressCribY1_row;
+
+    private String pressCribA1_angle;
+
+    private String pressCribX2_line;
+
+    private String pressCribY2_row;
+
+    private String pressCribA2_angle;
+
+    private String pressCribX3_line;
+
+    private String pressCribY3_row;
+
+    private String pressCribA3_angle;
+
+    private String Zoffset;
+
+    private String pallet_layerQty;
+
+    private String pressCrib_layerQty;
+
+    private String codeLayerX1_interval;
+
+    private String codeLayerY1_interval;
+
+    private String codeLayerX2_interval;
+
+    private String codeLayerY2_interval;
+
+    private String codeLayerX3_interval;
+
+    private String codeLayerY3_interval;
+
+    private String codeLayerX1_offset;
+
+    private String codeLayerY1_offset;
+
+    private String codeLayerX2_offset;
+
+    private String codeLayerY2_offset;
+
+    private String codeLayerX3_offset;
+
+    private String codeLayerY3_offset;
+
+    private String pressLayerX1_interval;
+
+    private String pressLayerY1_interval;
+
+    private String pressLayerX2_interval;
+
+    private String pressLayerY2_interval;
+
+    private String pressLayerX3_interval;
+
+    private String pressLayerY3_interval;
+
+    private String pressLayerX1_offset;
+
+    private String pressLayerY1_offset;
+
+    private String pressLayerX2_offset;
+
+    private String pressLayerY2_offset;
+
+    private String pressLayerX3_offset;
+
+    private String pressLayerY3_offset;
+
+    private String tool_coordinate;
+
+    private Long create_id;
+
+    private String create_name;
+
+    private String create_time;
+
+    private Long update_optid;
+
+    private String update_optname;
+
+    private String update_time;
+
+    private String is_delete;
+
+    private String is_fire;
+
+    private String is_in_kiln;
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialDetailServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialDetailServiceImpl.java
new file mode 100644
index 0000000..0146079
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialDetailServiceImpl.java
@@ -0,0 +1,133 @@
+
+package org.nl.wms.basedata.service.impl;
+
+
+import com.alibaba.fastjson.JSON;
+import lombok.RequiredArgsConstructor;
+import org.nl.modules.common.exception.BadRequestException;
+import org.nl.wms.basedata.service.MaterialDetailService;
+import org.nl.wms.basedata.service.dto.MaterialDetailDto;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+import java.util.Map;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.IdUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.nl.modules.common.utils.SecurityUtils;
+import org.nl.modules.wql.core.bean.ResultBean;
+import org.nl.modules.wql.core.bean.WQLObject;
+import org.nl.modules.wql.util.WqlUtil;
+import lombok.extern.slf4j.Slf4j;
+import cn.hutool.core.util.ObjectUtil;
+
+/**
+ * @author lyd
+ * @description 服务实现
+ * @date 2023-04-17
+ **/
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class MaterialDetailServiceImpl implements MaterialDetailService {
+
+    @Override
+    public Map<String, Object> queryAll(Map whereJson, Pageable page) {
+        WQLObject wo = WQLObject.getWQLObject("md_me_material_detail");
+        ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "1=1", "update_time desc");
+        final JSONObject json = rb.pageResult();
+        return json;
+    }
+
+    @Override
+    public List<MaterialDetailDto> queryAll(Map whereJson) {
+        WQLObject wo = WQLObject.getWQLObject("md_me_material_detail");
+        JSONArray arr = wo.query().getResultJSONArray(0);
+        if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(MaterialDetailDto.class);
+        return null;
+    }
+
+    @Override
+    public MaterialDetailDto findById(Long material_id) {
+        WQLObject wo = WQLObject.getWQLObject("md_me_material_detail");
+        JSONObject json = wo.query("material_id = '" + material_id + "'").uniqueResult(0);
+        if (ObjectUtil.isNotEmpty(json)) {
+            return json.toJavaObject(MaterialDetailDto.class);
+        }
+        return null;
+    }
+
+    @Override
+    public MaterialDetailDto findByCode(String code) {
+        WQLObject wo = WQLObject.getWQLObject("md_me_material_detail");
+        JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0);
+        if (ObjectUtil.isNotEmpty(json)) {
+            return json.toJavaObject(MaterialDetailDto.class);
+        }
+        return null;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(MaterialDetailDto dto) {
+        Long currentUserId = SecurityUtils.getCurrentUserId();
+        String nickName = SecurityUtils.getCurrentNickName();
+        String now = DateUtil.now();
+
+        dto.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId());
+        dto.setCreate_id(currentUserId);
+        dto.setCreate_name(nickName);
+        dto.setUpdate_optid(currentUserId);
+        dto.setUpdate_optname(nickName);
+        dto.setUpdate_time(now);
+        dto.setCreate_time(now);
+
+        WQLObject wo = WQLObject.getWQLObject("md_me_material_detail");
+        JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
+        wo.insert(json);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(MaterialDetailDto dto) {
+        MaterialDetailDto entity = this.findById(dto.getMaterial_id());
+        if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!");
+
+        Long currentUserId = SecurityUtils.getCurrentUserId();
+        String nickName = SecurityUtils.getCurrentNickName();
+
+        String now = DateUtil.now();
+        dto.setUpdate_time(now);
+        dto.setUpdate_optid(currentUserId);
+        dto.setUpdate_optname(nickName);
+
+        WQLObject wo = WQLObject.getWQLObject("md_me_material_detail");
+        JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
+        wo.update(json);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(Long[] ids) {
+        Long currentUserId = SecurityUtils.getCurrentUserId();
+        String nickName = SecurityUtils.getCurrentNickName();
+        String now = DateUtil.now();
+
+        WQLObject wo = WQLObject.getWQLObject("md_me_material_detail");
+        for (Long material_id : ids) {
+            JSONObject param = new JSONObject();
+            param.put("material_id", String.valueOf(material_id));
+            param.put("is_delete", "1");
+            param.put("update_optid", currentUserId);
+            param.put("update_optname", nickName);
+            param.put("update_time", now);
+            wo.update(param);
+        }
+    }
+
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleDetailServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleDetailServiceImpl.java
new file mode 100644
index 0000000..79f84f8
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleDetailServiceImpl.java
@@ -0,0 +1,135 @@
+
+package org.nl.wms.basedata.service.impl;
+
+
+import com.alibaba.fastjson.JSON;
+import lombok.RequiredArgsConstructor;
+import org.nl.modules.common.exception.BadRequestException;
+import org.nl.modules.wql.WQL;
+import org.nl.wms.basedata.service.VehicleDetailService;
+import org.nl.wms.basedata.service.dto.VehicleDetailDto;
+import org.nl.wms.util.MapOf;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+import java.util.Map;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.IdUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.nl.modules.common.utils.SecurityUtils;
+import org.nl.modules.wql.core.bean.ResultBean;
+import org.nl.modules.wql.core.bean.WQLObject;
+import org.nl.modules.wql.util.WqlUtil;
+import lombok.extern.slf4j.Slf4j;
+import cn.hutool.core.util.ObjectUtil;
+
+/**
+ * @author lyd
+ * @description 服务实现
+ * @date 2023-04-17
+ **/
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class VehicleDetailServiceImpl implements VehicleDetailService {
+
+    @Override
+    public Map<String, Object> queryAll(Map whereJson, Pageable page) {
+        JSONObject pageQuery = WQL.getWO("QMD_PB_VEHICLE_GROUP").addParamMap(MapOf.of("flag", "1"
+                        , "vehicle_code", whereJson.get("vehicle_code")))
+                .pageQuery(WqlUtil.getHttpContext(page), "vehicle_code asc");
+        return pageQuery;
+    }
+
+    @Override
+    public List<VehicleDetailDto> queryAll(Map whereJson) {
+        WQLObject wo = WQLObject.getWQLObject("st_ivt_vehicle_detail");
+        JSONArray arr = wo.query().getResultJSONArray(0);
+        if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(VehicleDetailDto.class);
+        return null;
+    }
+
+    @Override
+    public VehicleDetailDto findById(Long vd_id) {
+        WQLObject wo = WQLObject.getWQLObject("st_ivt_vehicle_detail");
+        JSONObject json = wo.query("vd_id = '" + vd_id + "'").uniqueResult(0);
+        if (ObjectUtil.isNotEmpty(json)) {
+            return json.toJavaObject(VehicleDetailDto.class);
+        }
+        return null;
+    }
+
+    @Override
+    public VehicleDetailDto findByCode(String code) {
+        WQLObject wo = WQLObject.getWQLObject("st_ivt_vehicle_detail");
+        JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0);
+        if (ObjectUtil.isNotEmpty(json)) {
+            return json.toJavaObject(VehicleDetailDto.class);
+        }
+        return null;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(VehicleDetailDto dto) {
+        Long currentUserId = SecurityUtils.getCurrentUserId();
+        String nickName = SecurityUtils.getCurrentNickName();
+        String now = DateUtil.now();
+
+        dto.setVd_id(IdUtil.getSnowflake(1, 1).nextId());
+        dto.setCreate_id(currentUserId);
+        dto.setCreate_name(nickName);
+        dto.setUpdate_optid(currentUserId);
+        dto.setUpdate_optname(nickName);
+        dto.setUpdate_time(now);
+        dto.setCreate_time(now);
+
+        WQLObject wo = WQLObject.getWQLObject("st_ivt_vehicle_detail");
+        JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
+        wo.insert(json);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(VehicleDetailDto dto) {
+        VehicleDetailDto entity = this.findById(dto.getVd_id());
+        if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!");
+
+        Long currentUserId = SecurityUtils.getCurrentUserId();
+        String nickName = SecurityUtils.getCurrentNickName();
+
+        String now = DateUtil.now();
+        dto.setUpdate_time(now);
+        dto.setUpdate_optid(currentUserId);
+        dto.setUpdate_optname(nickName);
+
+        WQLObject wo = WQLObject.getWQLObject("st_ivt_vehicle_detail");
+        JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
+        wo.update(json);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(Long[] ids) {
+        Long currentUserId = SecurityUtils.getCurrentUserId();
+        String nickName = SecurityUtils.getCurrentNickName();
+        String now = DateUtil.now();
+
+        WQLObject wo = WQLObject.getWQLObject("st_ivt_vehicle_detail");
+        for (Long vd_id : ids) {
+            JSONObject param = new JSONObject();
+            param.put("vd_id", String.valueOf(vd_id));
+            param.put("is_delete", "1");
+            param.put("update_optid", currentUserId);
+            param.put("update_optname", nickName);
+            param.put("update_time", now);
+            wo.update(param);
+        }
+    }
+
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_PB_VEHICLE_GROUP.wql b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_PB_VEHICLE_GROUP.wql
new file mode 100644
index 0000000..829cbba
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_PB_VEHICLE_GROUP.wql
@@ -0,0 +1,58 @@
+[交易说明]
+	交易名:	载具组盘
+	所属模块:
+	功能简述:
+	版权所有:
+	表引用:
+	版本经历:
+
+[数据库]
+	--指定数据库,为空采用默认值,默认为db.properties中列出的第一个库
+
+[IO定义]
+	#################################################
+	##			表字段对应输入参数
+	#################################################
+	输入.flag					      TYPEAS s_string
+	输入.vehicle_code				  TYPEAS s_string
+	输入.vehicle_type   				  TYPEAS s_string
+	输入.vehicle_status   			  TYPEAS s_string
+
+[临时表]
+	--这边列出来的临时表就会在运行期动态创建
+
+[临时变量]
+	--所有中间过程变量均可在此处定义
+
+[业务过程]
+
+	##########################################
+	#			1、输入输出检查				 #
+	##########################################
+
+
+	##########################################
+	#			2、主过程前处理				 #
+	##########################################
+
+
+	##########################################
+	#			3、业务主过程			 	 #
+	##########################################
+
+	IF 输入.flag = "1"
+		PAGEQUERY
+			SELECT
+            	vd.*,
+            	p.point_name
+            FROM
+            	st_ivt_vehicle_detail vd
+            	LEFT JOIN sch_base_point p ON p.point_code = vd.point_code
+            WHERE
+                1 = 1
+                OPTION 输入.vehicle_code <> ""
+                    vd.vehicle_code LIKE '%' 输入.vehicle_code '%'
+                ENDOPTION
+			ENDSELECT
+		ENDPAGEQUERY
+	ENDIF
diff --git a/lms/nladmin-ui/src/api/wms/basedata/materialDetail.js b/lms/nladmin-ui/src/api/wms/basedata/materialDetail.js
new file mode 100644
index 0000000..973a1eb
--- /dev/null
+++ b/lms/nladmin-ui/src/api/wms/basedata/materialDetail.js
@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/materialDetail',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/materialDetail/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/materialDetail',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }
diff --git a/lms/nladmin-ui/src/api/wms/basedata/vehicleDetail.js b/lms/nladmin-ui/src/api/wms/basedata/vehicleDetail.js
new file mode 100644
index 0000000..a83ae8a
--- /dev/null
+++ b/lms/nladmin-ui/src/api/wms/basedata/vehicleDetail.js
@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/vehicleDetail',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/vehicleDetail/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/vehicleDetail',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }
diff --git a/lms/nladmin-ui/src/views/wms/basedata/material/detail/index.vue b/lms/nladmin-ui/src/views/wms/basedata/material/detail/index.vue
new file mode 100644
index 0000000..7012689
--- /dev/null
+++ b/lms/nladmin-ui/src/views/wms/basedata/material/detail/index.vue
@@ -0,0 +1,175 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog
+        :close-on-click-modal="false"
+        :before-close="crud.cancelCU"
+        :visible.sync="crud.status.cu > 0"
+        :title="crud.status.title"
+        width="500px"
+      >
+        <el-form ref="form" :model="form" :rules="rules" size="mini" label-width="80px">
+          <el-form-item label="物料编码" prop="material_code">
+            <el-input v-model="form.material_code" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="物料名称">
+            <el-input v-model="form.material_name" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="订单编号" prop="order_number">
+            <el-input v-model="form.order_number" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="客户名称" prop="customer_name">
+            <el-input v-model="form.customer_name" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="产品名称" prop="product_name">
+            <el-input v-model="form.product_name" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="产品牌号" prop="product_grade">
+            <el-input v-model="form.product_grade" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="砖型" prop="brick_type">
+            <el-input v-model="form.brick_type" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table
+        ref="table"
+        v-loading="crud.loading"
+        :data="crud.data"
+        size="mini"
+        style="width: 100%;"
+        @selection-change="crud.selectionChangeHandler"
+      >
+        <el-table-column type="selection" width="55" />
+        <el-table-column
+          prop="material_code"
+          label="物料编码"
+          :min-width="flexWidth('material_code',crud.data,'物料编码')"
+        />
+        <el-table-column
+          prop="material_name"
+          label="物料名称"
+          :min-width="flexWidth('material_name',crud.data,'物料名称')"
+        />
+        <el-table-column
+          prop="order_number"
+          label="订单编号"
+          :min-width="flexWidth('order_number',crud.data,'订单编号')"
+        />
+        <el-table-column
+          prop="customer_name"
+          label="客户名称"
+          :min-width="flexWidth('customer_name',crud.data,'客户名称')"
+        />
+        <el-table-column
+          prop="product_name"
+          label="产品名称"
+          :min-width="flexWidth('product_name',crud.data,'产品名称')"
+        />
+        <el-table-column
+          prop="product_grade"
+          label="产品牌号"
+          :min-width="flexWidth('product_grade',crud.data,'产品牌号')"
+        />
+        <el-table-column prop="brick_type" label="砖型" :min-width="flexWidth('brick_type',crud.data,'砖型')" />
+        <el-table-column prop="create_name" label="创建人" :min-width="flexWidth('create_name',crud.data,'创建人')" />
+        <el-table-column prop="update_optname" label="修改人" :min-width="flexWidth('update_optname',crud.data,'创建人')" />
+        <el-table-column prop="update_time" label="最后修改时间" :min-width="flexWidth('update_time',crud.data,'创建人')" />
+        <el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudMaterialDetail from '@/api/wms/basedata/materialDetail'
+import CRUD, { crud, form, header, presenter } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = {
+  material_id: null,
+  material_code: null,
+  material_name: null,
+  order_number: null,
+  customer_name: null,
+  product_name: null,
+  product_grade: null,
+  brick_type: null,
+  create_id: null,
+  create_name: null,
+  create_time: null,
+  update_optid: null,
+  update_optname: null,
+  update_time: null
+}
+export default {
+  name: 'MaterialDetail',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  cruds() {
+    return CRUD({
+      title: '物料详情',
+      url: 'api/materialDetail',
+      idField: 'material_id',
+      sort: 'material_id,desc',
+      crudMethod: { ...crudMaterialDetail }
+    })
+  },
+  data() {
+    return {
+      permission: {},
+      rules: {
+        material_code: [
+          { required: true, message: '物料编码不能为空', trigger: 'blur' }
+        ],
+        order_number: [
+          { required: true, message: '订单编号不能为空', trigger: 'blur' }
+        ],
+        customer_name: [
+          { required: true, message: '客户名称不能为空', trigger: 'blur' }
+        ],
+        product_name: [
+          { required: true, message: '产品名称不能为空', trigger: 'blur' }
+        ],
+        product_grade: [
+          { required: true, message: '产品牌号不能为空', trigger: 'blur' }
+        ],
+        brick_type: [
+          { required: true, message: '砖型不能为空', trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/lms/nladmin-ui/src/views/wms/basedata/vehicle/group/index.vue b/lms/nladmin-ui/src/views/wms/basedata/vehicle/group/index.vue
new file mode 100644
index 0000000..147493a
--- /dev/null
+++ b/lms/nladmin-ui/src/views/wms/basedata/vehicle/group/index.vue
@@ -0,0 +1,277 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <el-form
+          :inline="true"
+          class="demo-form-inline"
+          label-position="right"
+          label-width="90px"
+          label-suffix=":"
+        >
+          <el-form-item label="载具编码">
+            <el-input
+              v-model="query.vehicle_code"
+              clearable
+              size="mini"
+              placeholder="请输入载具编码"
+              @keyup.enter.native="crud.toQuery"
+            />
+          </el-form-item>
+          <rrOperation />
+        </el-form>
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog
+        :close-on-click-modal="false"
+        :before-close="crud.cancelCU"
+        :visible.sync="crud.status.cu > 0"
+        :title="crud.status.title"
+        width="500px"
+      >
+        <el-form ref="form" :model="form" :rules="rules" size="mini" label-width="80px">
+          <el-form-item label="载具类型" prop="vehicle_type">
+            <el-select
+              v-model="form.vehicle_type"
+              size="mini"
+              placeholder="载具类型"
+              class="filter-item"
+              style="width: 370px"
+              clearable
+            >
+              <el-option
+                v-for="item in dict.vehicle_type"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="载具编码" prop="vehicle_code">
+            <el-input v-model="form.vehicle_code" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="数量" prop="qty">
+            <el-input v-model="form.qty" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="重量" prop="weight">
+            <el-input v-model="form.weight" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="点位编码">
+            <el-input v-model="form.point_code" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="是否满垛" prop="is_full">
+            <el-radio v-model="form.is_full" label="0">否</el-radio>
+            <el-radio v-model="form.is_full" label="1">是</el-radio>
+          </el-form-item>
+          <el-form-item label="是否烧制">
+            <el-radio v-model="form.is_fire" label="0">否</el-radio>
+            <el-radio v-model="form.is_fire" label="1">是</el-radio>
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table
+        ref="table"
+        v-loading="crud.loading"
+        :data="crud.data"
+        size="mini"
+        style="width: 100%;"
+        @selection-change="crud.selectionChangeHandler"
+      >
+        <el-table-column type="selection" width="55" />
+        <el-table-column
+          prop="vehicle_type"
+          label="载具类型"
+          :min-width="flexWidth('vehicle_type',crud.data,'载具类型')">
+          <template slot-scope="scope">
+            {{ dict.label.vehicle_type[scope.row.vehicle_type] }}
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="vehicle_code"
+          label="载具编码"
+          :min-width="flexWidth('vehicle_code',crud.data,'载具编码')"
+        />
+        <el-table-column prop="qty" label="数量" :min-width="flexWidth('qty',crud.data,'数量')">
+          <template slot-scope="scope">
+            {{scope.row.qty}}/块
+          </template>
+        </el-table-column>
+        <el-table-column prop="weight" label="重量" :min-width="flexWidth('weight',crud.data,'重量')" />
+        <el-table-column prop="point_name" label="点位名称" :min-width="flexWidth('point_name',crud.data,'点位名称')" />
+        <el-table-column prop="is_full" label="是否满垛" :min-width="flexWidth('is_full',crud.data,'是否满垛')" >
+          <template slot-scope="scope">
+            {{scope.row.is_full=='1'?'是':'否'}}
+          </template>
+        </el-table-column>
+        <el-table-column prop="is_fire" label="是否烧制" :min-width="flexWidth('is_fire',crud.data,'是否烧制')">
+          <template slot-scope="scope">
+            {{scope.row.is_fire=='1'?'是':'否'}}
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="create_name"
+          label="创建人"
+          :min-width="flexWidth('create_name',crud.data,'创建人')"
+        />
+        <el-table-column
+          prop="create_time"
+          label="创建时间"
+          :min-width="flexWidth('create_time',crud.data,'创建时间')"
+        />
+        <el-table-column
+          prop="update_optname"
+          label="更新人"
+          :min-width="flexWidth('update_optname',crud.data,'更新人')"
+        />
+        <el-table-column
+          prop="update_time"
+          label="更新时间"
+          :min-width="flexWidth('update_time',crud.data,'更新时间')"
+        />
+        <el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudVehicleDetail from '@/api/wms/basedata/vehicleDetail'
+import CRUD, { crud, form, header, presenter } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = {
+  vd_id: null,
+  vehicle_type: null,
+  vehicle_code: null,
+  material_id: null,
+  qty: null,
+  weight: null,
+  is_full: '0',
+  workorder_id: null,
+  point_code: null,
+  tray_high: null,
+  crib_category: null,
+  palletX1_line: null,
+  palletY1_row: null,
+  palletA1_angle: null,
+  palletX2_line: null,
+  palletY2_row: null,
+  palletA2_angle: null,
+  palletX3_line: null,
+  palletY3_row: null,
+  palletA3_angle: null,
+  pressCribX1_line: null,
+  pressCribY1_row: null,
+  pressCribA1_angle: null,
+  pressCribX2_line: null,
+  pressCribY2_row: null,
+  pressCribA2_angle: null,
+  pressCribX3_line: null,
+  pressCribY3_row: null,
+  pressCribA3_angle: null,
+  Zoffset: null,
+  pallet_layerQty: null,
+  pressCrib_layerQty: null,
+  codeLayerX1_interval: null,
+  codeLayerY1_interval: null,
+  codeLayerX2_interval: null,
+  codeLayerY2_interval: null,
+  codeLayerX3_interval: null,
+  codeLayerY3_interval: null,
+  codeLayerX1_offset: null,
+  codeLayerY1_offset: null,
+  codeLayerX2_offset: null,
+  codeLayerY2_offset: null,
+  codeLayerX3_offset: null,
+  codeLayerY3_offset: null,
+  pressLayerX1_interval: null,
+  pressLayerY1_interval: null,
+  pressLayerX2_interval: null,
+  pressLayerY2_interval: null,
+  pressLayerX3_interval: null,
+  pressLayerY3_interval: null,
+  pressLayerX1_offset: null,
+  pressLayerY1_offset: null,
+  pressLayerX2_offset: null,
+  pressLayerY2_offset: null,
+  pressLayerX3_offset: null,
+  pressLayerY3_offset: null,
+  tool_coordinate: null,
+  create_id: null,
+  create_name: null,
+  create_time: null,
+  update_optid: null,
+  update_optname: null,
+  update_time: null,
+  is_delete: null,
+  is_fire: '0',
+  is_in_kiln: null
+}
+export default {
+  name: 'VehicleDetail',
+  dicts: ['vehicle_type'],
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  cruds() {
+    return CRUD({
+      title: '组盘信息',
+      url: 'api/vehicleDetail',
+      idField: 'vd_id',
+      sort: 'vd_id,desc',
+      crudMethod: { ...crudVehicleDetail }
+    })
+  },
+  data() {
+    return {
+      permission: {},
+      rules: {
+        vehicle_type: [
+          { required: true, message: '不能为空', trigger: 'blur' }
+        ],
+        vehicle_code: [
+          { required: true, message: '不能为空', trigger: 'blur' }
+        ],
+        qty: [
+          { required: true, message: '不能为空', trigger: 'blur' }
+        ],
+        weight: [
+          { required: true, message: '不能为空', trigger: 'blur' }
+        ],
+        is_full: [
+          { required: true, message: '不能为空', trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>