From b26949b3738a7eb34f8550a073d8d3b03c2fbf3e Mon Sep 17 00:00:00 2001
From: 懒羊羊 <15939171744@163.com>
Date: 星期二, 12 十二月 2023 10:16:15 +0800
Subject: [PATCH] 大屏

---
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/model/params/GreaseManageParam.java       |   78 ++
 guns-vip-main/src/main/webapp/assets/modular/kb/greaseBoard/greaseBoard.js                                      |  269 ++++++++
 guns-vip-main/src/main/webapp/pages/modular/kb/greaseBoard/greaseBoard.html                                     |   45 +
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/mapper/GreaseManageMapper.java            |   56 +
 guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage_add.js                                |   65 ++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/controller/GreaseManageController.java    |  129 ++++
 guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage.html                                   |   32 +
 guns-vip-main/src/main/sqls/greaseManage_menus.sql                                                              |    4 
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/kb/greaseBoard/GreaseBoardController.java                 |  278 +++++++++
 guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage.js                                    |  132 ++++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/entity/GreaseManage.java                  |  191 ++++++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/service/GreaseManageService.java          |   69 ++
 guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage_edit.js                               |   69 ++
 guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage_add.html                               |   64 ++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/mapper/mapping/GreaseManageMapper.xml     |   49 +
 guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage_edit.html                              |   64 ++
 guns-base-support/guns-sys/src/main/java/cn/stylefeng/guns/sys/core/auth/filter/NoneAuthedResources.java        |    1 
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/service/impl/GreaseManageServiceImpl.java |   84 ++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/model/result/GreaseManageResult.java      |   72 ++
 19 files changed, 1,751 insertions(+), 0 deletions(-)

diff --git a/guns-base-support/guns-sys/src/main/java/cn/stylefeng/guns/sys/core/auth/filter/NoneAuthedResources.java b/guns-base-support/guns-sys/src/main/java/cn/stylefeng/guns/sys/core/auth/filter/NoneAuthedResources.java
index 5aa4579..7757717 100644
--- a/guns-base-support/guns-sys/src/main/java/cn/stylefeng/guns/sys/core/auth/filter/NoneAuthedResources.java
+++ b/guns-base-support/guns-sys/src/main/java/cn/stylefeng/guns/sys/core/auth/filter/NoneAuthedResources.java
@@ -73,6 +73,7 @@
             "/websocket/**",
             "/equipmentStatus/**",
             "/equipmentAlarm/**",
+            "/greaseBoard/**",
 
     };
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/controller/GreaseManageController.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/controller/GreaseManageController.java
new file mode 100644
index 0000000..6fc3d63
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/controller/GreaseManageController.java
@@ -0,0 +1,129 @@
+package cn.stylefeng.guns.modular.gm.greaseManage.controller;
+
+import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
+import cn.stylefeng.guns.modular.gm.greaseManage.entity.GreaseManage;
+import cn.stylefeng.guns.modular.gm.greaseManage.model.params.GreaseManageParam;
+import cn.stylefeng.guns.modular.gm.greaseManage.service.GreaseManageService;
+import cn.stylefeng.roses.core.base.controller.BaseController;
+import cn.stylefeng.roses.kernel.model.response.ResponseData;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+
+/**
+ * 娌硅剛绠$悊鎺у埗鍣�
+ *
+ * @author ruimin
+ * @Date 2023-12-11 14:28:02
+ */
+@Controller
+@RequestMapping("/greaseManage")
+public class GreaseManageController extends BaseController {
+
+    private String PREFIX = "/modular/gm/greaseManage";
+
+    @Autowired
+    private GreaseManageService greaseManageService;
+
+    /**
+     * 璺宠浆鍒颁富椤甸潰
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "/greaseManage.html";
+    }
+
+    /**
+     * 鏂板椤甸潰
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    @RequestMapping("/add")
+    public String add() {
+        return PREFIX + "/greaseManage_add.html";
+    }
+
+    /**
+     * 缂栬緫椤甸潰
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    @RequestMapping("/edit")
+    public String edit() {
+        return PREFIX + "/greaseManage_edit.html";
+    }
+
+    /**
+     * 鏂板鎺ュ彛
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    @RequestMapping("/addItem")
+    @ResponseBody
+    public ResponseData addItem(GreaseManageParam greaseManageParam) {
+        this.greaseManageService.add(greaseManageParam);
+        return ResponseData.success();
+    }
+
+    /**
+     * 缂栬緫鎺ュ彛
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    @RequestMapping("/editItem")
+    @ResponseBody
+    public ResponseData editItem(GreaseManageParam greaseManageParam) {
+        this.greaseManageService.update(greaseManageParam);
+        return ResponseData.success();
+    }
+
+    /**
+     * 鍒犻櫎鎺ュ彛
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    @RequestMapping("/delete")
+    @ResponseBody
+    public ResponseData delete(GreaseManageParam greaseManageParam) {
+        this.greaseManageService.delete(greaseManageParam);
+        return ResponseData.success();
+    }
+
+    /**
+     * 鏌ョ湅璇︽儏鎺ュ彛
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    @RequestMapping("/detail")
+    @ResponseBody
+    public ResponseData detail(GreaseManageParam greaseManageParam) {
+        GreaseManage detail = this.greaseManageService.getById(greaseManageParam.getId());
+        return ResponseData.success(detail);
+    }
+
+    /**
+     * 鏌ヨ鍒楄〃
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    @ResponseBody
+    @RequestMapping("/list")
+    public LayuiPageInfo list(GreaseManageParam greaseManageParam) {
+        return this.greaseManageService.findPageBySpec(greaseManageParam);
+    }
+
+}
+
+
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/entity/GreaseManage.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/entity/GreaseManage.java
new file mode 100644
index 0000000..e3a584c
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/entity/GreaseManage.java
@@ -0,0 +1,191 @@
+package cn.stylefeng.guns.modular.gm.greaseManage.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 娌硅剛绠$悊
+ * </p>
+ *
+ * @author ruimin
+ * @since 2023-12-11
+ */
+@TableName("gm_grease_manage")
+public class GreaseManage implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 涓婚敭id
+     */
+      @TableId(value = "id", type = IdType.ID_WORKER)
+    private Long id;
+
+    /**
+     * 鎵爜鏉$爜
+     */
+    @TableField("barcode")
+    private String barcode;
+
+    /**
+     * 宸ヤ綅
+     */
+    @TableField("location_code")
+    private String locationCode;
+
+    /**
+     * 鍒版湡鏃堕棿
+     */
+    @TableField("dua_date")
+    private String duaDate;
+
+    /**
+     * 鐘舵��
+     */
+    @TableField("state")
+    private String state;
+    @TableField(exist = false)
+    private String daysRemaining;
+
+
+    /**
+     * 鏇存柊鐢ㄦ埛
+     */
+      @TableField(value = "create_user", fill = FieldFill.INSERT)
+    private String createUser;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+      @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /**
+     * 澶囨敞
+     */
+    @TableField("remarks")
+    private String remarks;
+
+    /**
+     * 棰勭暀瀛楁1
+     */
+    @TableField("spare_field_1")
+    private String spareField1;
+
+    /**
+     * 棰勭暀瀛楁2
+     */
+    @TableField("spare_field_2")
+    private String spareField2;
+
+
+    public String getDaysRemaining() {
+        return daysRemaining;
+    }
+
+    public void setDaysRemaining(String daysRemaining) {
+        this.daysRemaining = daysRemaining;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getBarcode() {
+        return barcode;
+    }
+
+    public void setBarcode(String barcode) {
+        this.barcode = barcode;
+    }
+
+    public String getLocationCode() {
+        return locationCode;
+    }
+
+    public void setLocationCode(String locationCode) {
+        this.locationCode = locationCode;
+    }
+
+    public String getDuaDate() {
+        return duaDate;
+    }
+
+    public void setDuaDate(String duaDate) {
+        this.duaDate = duaDate;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getCreateUser() {
+        return createUser;
+    }
+
+    public void setCreateUser(String createUser) {
+        this.createUser = createUser;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+    public String getSpareField1() {
+        return spareField1;
+    }
+
+    public void setSpareField1(String spareField1) {
+        this.spareField1 = spareField1;
+    }
+
+    public String getSpareField2() {
+        return spareField2;
+    }
+
+    public void setSpareField2(String spareField2) {
+        this.spareField2 = spareField2;
+    }
+
+    @Override
+    public String toString() {
+        return "GreaseManage{" +
+        "id=" + id +
+        ", barcode=" + barcode +
+        ", locationCode=" + locationCode +
+        ", duaDate=" + duaDate +
+        ", state=" + state +
+        ", createUser=" + createUser +
+        ", createTime=" + createTime +
+        ", remarks=" + remarks +
+        ", spareField1=" + spareField1 +
+        ", spareField2=" + spareField2 +
+        "}";
+    }
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/mapper/GreaseManageMapper.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/mapper/GreaseManageMapper.java
new file mode 100644
index 0000000..29b2cb2
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/mapper/GreaseManageMapper.java
@@ -0,0 +1,56 @@
+package cn.stylefeng.guns.modular.gm.greaseManage.mapper;
+
+import cn.stylefeng.guns.modular.gm.greaseManage.entity.GreaseManage;
+import cn.stylefeng.guns.modular.gm.greaseManage.model.params.GreaseManageParam;
+import cn.stylefeng.guns.modular.gm.greaseManage.model.result.GreaseManageResult;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 娌硅剛绠$悊 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author ruimin
+ * @since 2023-12-11
+ */
+public interface GreaseManageMapper extends BaseMapper<GreaseManage> {
+
+    /**
+     * 鑾峰彇鍒楄〃
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    List<GreaseManageResult> customList(@Param("paramCondition") GreaseManageParam paramCondition);
+
+    /**
+     * 鑾峰彇map鍒楄〃
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    List<Map<String, Object>> customMapList(@Param("paramCondition") GreaseManageParam paramCondition);
+
+    /**
+     * 鑾峰彇鍒嗛〉瀹炰綋鍒楄〃
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    Page<GreaseManageResult> customPageList(@Param("page") Page page, @Param("paramCondition") GreaseManageParam paramCondition);
+
+    /**
+     * 鑾峰彇鍒嗛〉map鍒楄〃
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    Page<Map<String, Object>> customPageMapList(@Param("page") Page page, @Param("paramCondition") GreaseManageParam paramCondition);
+
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/mapper/mapping/GreaseManageMapper.xml b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/mapper/mapping/GreaseManageMapper.xml
new file mode 100644
index 0000000..ea018d4
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/mapper/mapping/GreaseManageMapper.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.stylefeng.guns.modular.gm.greaseManage.mapper.GreaseManageMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.stylefeng.guns.modular.gm.greaseManage.entity.GreaseManage">
+        <id column="id" property="id" />
+        <result column="barcode" property="barcode" />
+        <result column="location_code" property="locationCode" />
+        <result column="dua_date" property="duaDate" />
+        <result column="state" property="state" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="remarks" property="remarks" />
+        <result column="spare_field_1" property="spareField1" />
+        <result column="spare_field_2" property="spareField2" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id AS "id", barcode AS "barcode", location_code AS "locationCode", dua_date AS "duaDate", state AS "state", create_user AS "createUser", create_time AS "createTime", remarks AS "remarks", spare_field_1 AS "spareField1", spare_field_2 AS "spareField2"
+    </sql>
+
+
+    <select id="customList" resultType="cn.stylefeng.guns.modular.gm.greaseManage.model.result.GreaseManageResult" parameterType="cn.stylefeng.guns.modular.gm.greaseManage.model.params.GreaseManageParam">
+        select
+        <include refid="Base_Column_List"/>
+        from gm_grease_manage where 1 = 1
+    </select>
+
+    <select id="customMapList" resultType="map" parameterType="cn.stylefeng.guns.modular.gm.greaseManage.model.params.GreaseManageParam">
+        select
+        <include refid="Base_Column_List"/>
+        from gm_grease_manage where 1 = 1
+    </select>
+
+    <select id="customPageList" resultType="cn.stylefeng.guns.modular.gm.greaseManage.model.result.GreaseManageResult" parameterType="cn.stylefeng.guns.modular.gm.greaseManage.model.params.GreaseManageParam">
+        select
+        <include refid="Base_Column_List"/>
+        from gm_grease_manage where 1 = 1
+    </select>
+
+    <select id="customPageMapList" resultType="map" parameterType="cn.stylefeng.guns.modular.gm.greaseManage.model.params.GreaseManageParam">
+        select
+        <include refid="Base_Column_List"/>
+        from gm_grease_manage where 1 = 1
+    </select>
+
+</mapper>
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/model/params/GreaseManageParam.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/model/params/GreaseManageParam.java
new file mode 100644
index 0000000..7515c88
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/model/params/GreaseManageParam.java
@@ -0,0 +1,78 @@
+package cn.stylefeng.guns.modular.gm.greaseManage.model.params;
+
+import lombok.Data;
+import cn.stylefeng.roses.kernel.model.validator.BaseValidatingParam;
+import java.util.Date;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 娌硅剛绠$悊
+ * </p>
+ *
+ * @author ruimin
+ * @since 2023-12-11
+ */
+@Data
+public class GreaseManageParam implements Serializable, BaseValidatingParam {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 涓婚敭id
+     */
+    private Long id;
+
+    /**
+     * 鎵爜鏉$爜
+     */
+    private String barcode;
+
+    /**
+     * 宸ヤ綅
+     */
+    private String locationCode;
+
+    /**
+     * 鍒版湡鏃堕棿
+     */
+    private String duaDate;
+
+    /**
+     * 鐘舵��
+     */
+    private String state;
+
+    /**
+     * 鏇存柊鐢ㄦ埛
+     */
+    private String createUser;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    private Date createTime;
+
+    /**
+     * 澶囨敞
+     */
+    private String remarks;
+
+    /**
+     * 棰勭暀瀛楁1
+     */
+    private String spareField1;
+
+    /**
+     * 棰勭暀瀛楁2
+     */
+    private String spareField2;
+
+    @Override
+    public String checkParam() {
+        return null;
+    }
+
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/model/result/GreaseManageResult.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/model/result/GreaseManageResult.java
new file mode 100644
index 0000000..47b9706
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/model/result/GreaseManageResult.java
@@ -0,0 +1,72 @@
+package cn.stylefeng.guns.modular.gm.greaseManage.model.result;
+
+import lombok.Data;
+import java.util.Date;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 娌硅剛绠$悊
+ * </p>
+ *
+ * @author ruimin
+ * @since 2023-12-11
+ */
+@Data
+public class GreaseManageResult implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 涓婚敭id
+     */
+    private Long id;
+
+    /**
+     * 鎵爜鏉$爜
+     */
+    private String barcode;
+
+    /**
+     * 宸ヤ綅
+     */
+    private String locationCode;
+
+    /**
+     * 鍒版湡鏃堕棿
+     */
+    private String duaDate;
+
+    /**
+     * 鐘舵��
+     */
+    private String state;
+
+    /**
+     * 鏇存柊鐢ㄦ埛
+     */
+    private String createUser;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    private Date createTime;
+
+    /**
+     * 澶囨敞
+     */
+    private String remarks;
+
+    /**
+     * 棰勭暀瀛楁1
+     */
+    private String spareField1;
+
+    /**
+     * 棰勭暀瀛楁2
+     */
+    private String spareField2;
+
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/service/GreaseManageService.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/service/GreaseManageService.java
new file mode 100644
index 0000000..8548388
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/service/GreaseManageService.java
@@ -0,0 +1,69 @@
+package cn.stylefeng.guns.modular.gm.greaseManage.service;
+
+import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
+import cn.stylefeng.guns.modular.gm.greaseManage.entity.GreaseManage;
+import cn.stylefeng.guns.modular.gm.greaseManage.model.params.GreaseManageParam;
+import cn.stylefeng.guns.modular.gm.greaseManage.model.result.GreaseManageResult;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 娌硅剛绠$悊 鏈嶅姟绫�
+ * </p>
+ *
+ * @author ruimin
+ * @since 2023-12-11
+ */
+public interface GreaseManageService extends IService<GreaseManage> {
+
+    /**
+     * 鏂板
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    void add(GreaseManageParam param);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    void delete(GreaseManageParam param);
+
+    /**
+     * 鏇存柊
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    void update(GreaseManageParam param);
+
+    /**
+     * 鏌ヨ鍗曟潯鏁版嵁锛孲pecification妯″紡
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    GreaseManageResult findBySpec(GreaseManageParam param);
+
+    /**
+     * 鏌ヨ鍒楄〃锛孲pecification妯″紡
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+    List<GreaseManageResult> findListBySpec(GreaseManageParam param);
+
+    /**
+     * 鏌ヨ鍒嗛〉鏁版嵁锛孲pecification妯″紡
+     *
+     * @author ruimin
+     * @Date 2023-12-11
+     */
+     LayuiPageInfo findPageBySpec(GreaseManageParam param);
+
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/service/impl/GreaseManageServiceImpl.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/service/impl/GreaseManageServiceImpl.java
new file mode 100644
index 0000000..d336eb4
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/gm/greaseManage/service/impl/GreaseManageServiceImpl.java
@@ -0,0 +1,84 @@
+package cn.stylefeng.guns.modular.gm.greaseManage.service.impl;
+
+import cn.stylefeng.guns.base.pojo.page.LayuiPageFactory;
+import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
+import cn.stylefeng.guns.modular.gm.greaseManage.entity.GreaseManage;
+import cn.stylefeng.guns.modular.gm.greaseManage.mapper.GreaseManageMapper;
+import cn.stylefeng.guns.modular.gm.greaseManage.model.params.GreaseManageParam;
+import cn.stylefeng.guns.modular.gm.greaseManage.model.result.GreaseManageResult;
+import  cn.stylefeng.guns.modular.gm.greaseManage.service.GreaseManageService;
+import cn.stylefeng.roses.core.util.ToolUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 娌硅剛绠$悊 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author ruimin
+ * @since 2023-12-11
+ */
+@Service
+public class GreaseManageServiceImpl extends ServiceImpl<GreaseManageMapper, GreaseManage> implements GreaseManageService {
+
+    @Override
+    public void add(GreaseManageParam param){
+        GreaseManage entity = getEntity(param);
+        this.save(entity);
+    }
+
+    @Override
+    public void delete(GreaseManageParam param){
+        this.removeById(getKey(param));
+    }
+
+    @Override
+    public void update(GreaseManageParam param){
+        GreaseManage oldEntity = getOldEntity(param);
+        GreaseManage newEntity = getEntity(param);
+        ToolUtil.copyProperties(newEntity, oldEntity);
+        this.updateById(newEntity);
+    }
+
+    @Override
+    public GreaseManageResult findBySpec(GreaseManageParam param){
+        return null;
+    }
+
+    @Override
+    public List<GreaseManageResult> findListBySpec(GreaseManageParam param){
+        return null;
+    }
+
+    @Override
+    public LayuiPageInfo findPageBySpec(GreaseManageParam param){
+        Page pageContext = getPageContext();
+        IPage page = this.baseMapper.customPageList(pageContext, param);
+        return LayuiPageFactory.createPageInfo(page);
+    }
+
+    private Serializable getKey(GreaseManageParam param){
+        return param.getId();
+    }
+
+    private Page getPageContext() {
+        return LayuiPageFactory.defaultPage();
+    }
+
+    private GreaseManage getOldEntity(GreaseManageParam param) {
+        return this.getById(getKey(param));
+    }
+
+    private GreaseManage getEntity(GreaseManageParam param) {
+        GreaseManage entity = new GreaseManage();
+        ToolUtil.copyProperties(param, entity);
+        return entity;
+    }
+
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/kb/greaseBoard/GreaseBoardController.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/kb/greaseBoard/GreaseBoardController.java
new file mode 100644
index 0000000..a8c4468
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/kb/greaseBoard/GreaseBoardController.java
@@ -0,0 +1,278 @@
+package cn.stylefeng.guns.modular.kb.greaseBoard;
+
+import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
+import cn.stylefeng.guns.modular.gm.greaseManage.entity.GreaseManage;
+import cn.stylefeng.guns.modular.gm.greaseManage.model.params.GreaseManageParam;
+import cn.stylefeng.guns.modular.gm.greaseManage.service.GreaseManageService;
+import cn.stylefeng.guns.modular.kb.utils.IPUtil;
+import cn.stylefeng.guns.modular.om.productionOrdeInfo.model.result.ProductionOrdeInfoResult;
+import cn.stylefeng.guns.modular.sc.kanbanConf.model.params.KanbanConfParam;
+import cn.stylefeng.guns.modular.sc.kanbanConf.service.KanbanConfService;
+import cn.stylefeng.roses.core.base.controller.BaseController;
+import cn.stylefeng.roses.kernel.model.response.ResponseData;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import javafx.stage.Stage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
+
+/**
+ * 杩斾慨涓婄嚎鐪嬫澘
+ *
+ * @author cl
+ * @Date 2022-10-27 15:50:56
+ */
+@Controller
+@RequestMapping("/greaseBoard")
+public class GreaseBoardController extends BaseController {
+
+    private String PREFIX = "modular/kb/greaseBoard";
+    @Autowired
+    private KanbanConfService kanbanConfService;
+
+    @Autowired
+    private GreaseManageService greaseManageService;
+    /**
+     * 璺宠浆鍒颁富椤甸潰
+     *
+     * @author cl
+     * @Date 2022-10-27
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "/greaseBoard.html";
+    }
+
+    /**
+     * 鏂板鐪嬫澘閰嶇疆椤甸潰
+     *
+     * @author cl
+     * @Date 2022-10-31
+     */
+    @RequestMapping("/add")
+    public String add() {
+        return PREFIX + "/kanbanConf_add.html";
+    }
+
+    /**
+     * 缂栬緫椤甸潰
+     *
+     * @author cl
+     * @Date 2022-10-31
+     */
+    @RequestMapping("/edit")
+    public String edit() {
+        return PREFIX + "/kanbanConf_edit.html";
+    }
+
+    @RequestMapping("/orderEdit")
+    public String orderEdit() {
+        return PREFIX + "/kanbanConf_orderEdit.html";
+    }
+
+    /**
+     * 鏂板鎺ュ彛
+     *
+     * @author cl
+     * @Date 2022-10-31
+     */
+    @RequestMapping("/addKanBanConfItem")
+    @ResponseBody
+    public ResponseData addItem(KanbanConfParam kanbanConfParam, HttpServletRequest request) {
+        String realIp = IPUtil.getRealIp(request);
+        kanbanConfParam.setIpAddress(realIp);
+        kanbanConfParam.setWarehouseCode(kanbanConfParam.getScrapReason());
+        kanbanConfParam.setWarehouseName(kanbanConfParam.getScrapCategory());
+        this.kanbanConfService.add(kanbanConfParam);
+        return ResponseData.success();
+    }
+
+    /**
+     * 鏂板鎺ュ彛
+     * MIGICC17500E00136V250WX23K03A0003B
+     * @author cl
+     * @Date 2022-10-31
+     */
+    @RequestMapping("/updategreaseManage")
+    @ResponseBody
+    public ResponseData updategreaseManage(GreaseManageParam greaseManageParam) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
+        String currentDate = format.format(new Date());
+        String barCode = greaseManageParam.getBarcode();
+        String lastTwelveChars = barCode.substring(barCode.length() - 12);
+        String locationCode = getLocationCode(lastTwelveChars);
+        String DuaDate = getDuaDate(lastTwelveChars);
+        GreaseManage greaseManage = new GreaseManage();
+        greaseManage.setBarcode(barCode);
+        greaseManage.setLocationCode(locationCode);
+        greaseManage.setDuaDate(DuaDate);
+        greaseManage.setDaysRemaining(getRemainder(currentDate,DuaDate));
+        greaseManage.setCreateTime(new Date());
+        greaseManage.setCreateUser("admin");
+//        greaseManageService.save(greaseManage);
+        greaseManageService.update(greaseManage,new LambdaQueryWrapper<GreaseManage>().eq(GreaseManage::getLocationCode, locationCode));
+        return ResponseData.success();
+    }
+
+    @ResponseBody
+    @CrossOrigin
+    @RequestMapping("/bigListGreaseBoard")
+    public ResponseData orderDescListFive() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
+        String currentDate = format.format(new Date());
+        List list = new ArrayList();
+        List<GreaseManage> results = greaseManageService.list();
+        for (GreaseManage result : results) {
+            String DuaDate = result.getDuaDate();
+            String remainder = getRemainder(currentDate, DuaDate);
+            if(Integer.valueOf(remainder)<=90){
+                List itemList = new ArrayList();
+                itemList.add(boldText(result.getLocationCode()));
+                itemList.add(boldText(DuaDate));
+                itemList.add(boldText(remainder));
+                list.add(itemList);
+            }else {
+                List itemList = new ArrayList();
+                itemList.add(whiteBoldText(result.getLocationCode()));
+                itemList.add(whiteBoldText(DuaDate));
+                itemList.add(whiteBoldText(remainder));
+                list.add(itemList);
+            }
+
+        }
+        return ResponseData.success(list);
+    }
+
+    public static String boldText(String param){
+        return "<span style='font-size: 20px' class='colorRed'>"+param+"</span>";
+    }
+
+    public static String whiteBoldText(String param){
+        return "<span style='font-size: 20px'>"+param+"</span>";
+    }
+
+    public static void main(String[] args) {
+        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
+        String format1 = format.format(new Date());
+        System.out.println("Difference in days: " + getRemainder("20231215",format1));
+    }
+
+    public static String getRemainder(String currentDate,String tableDate){
+        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        LocalDate localDate1 = LocalDate.parse(currentDate, dateFormatter);
+        LocalDate localDate2 = LocalDate.parse(tableDate, dateFormatter);
+        long days = ChronoUnit.DAYS.between(localDate2, localDate1);
+        return String.valueOf(days);
+    }
+
+    public static String getDuaDate(String str){
+        String year = str.substring(1,3);
+        String month = getMonth(str.substring(3,4));
+        String day = str.substring(4,6);
+        return "20"+year+month+day;
+    }
+
+    public static String getLocationCode(String str){
+        String locationCode = "";
+        switch (str.substring(0,1)) {
+            case "X":
+                locationCode = "DOP020";
+                break;
+            case "Y":
+                locationCode = "OP050";
+                break;
+            case "Z":
+                locationCode = "BOP30/40";
+                break;
+            default:
+                break;
+        }
+        return locationCode;
+    }
+
+    public static String getMonth(String str){
+        String Month = "";
+        switch (str) {
+            case "A":
+                Month = "1";
+                break;
+            case "B":
+                Month = "2";
+                break;
+            case "C":
+                Month = "3";
+                break;
+            case "D":
+                Month = "4";
+                break;
+            case "E":
+                Month = "5";
+                break;
+            case "F":
+                Month = "6";
+                break;
+            case "G":
+                Month = "7";
+                break;
+            case "H":
+                Month = "8";
+                break;
+            case "I":
+                Month = "9";
+                break;
+            case "J":
+                Month = "10";
+                break;
+            case "K":
+                Month = "11";
+                break;
+            case "L":
+                Month = "12";
+                break;
+            default:
+                break;
+        }
+        return Month;
+    }
+
+
+    /**
+     * 缂栬緫鎺ュ彛
+     *
+     * @author cl
+     * @Date 2022-10-31
+     */
+    @RequestMapping("/editKanBanConfItem")
+    @ResponseBody
+    public ResponseData editItem(KanbanConfParam kanbanConfParam) {
+        this.kanbanConfService.update(kanbanConfParam);
+        return ResponseData.success();
+    }
+
+    /**
+     * 鏌ヨ鍒楄〃
+     *
+     * @author cl
+     * @Date 2022-10-31
+     */
+    @ResponseBody
+    @RequestMapping("/qryKBConflist")
+    public LayuiPageInfo list(KanbanConfParam kanbanConfParam, HttpServletRequest request) {
+        String realIp = IPUtil.getRealIp(request);
+        kanbanConfParam.setIpAddress(realIp);
+
+        return this.kanbanConfService.findPageBySpec(kanbanConfParam);
+    }
+}
diff --git a/guns-vip-main/src/main/sqls/greaseManage_menus.sql b/guns-vip-main/src/main/sqls/greaseManage_menus.sql
new file mode 100644
index 0000000..50fcdf7
--- /dev/null
+++ b/guns-vip-main/src/main/sqls/greaseManage_menus.sql
@@ -0,0 +1,4 @@
+INSERT INTO `sys_menu`(`MENU_ID`, `CODE`, `PCODE`, `PCODES`, `NAME`, `ICON`, `URL`, `SORT`, `LEVELS`, `MENU_FLAG`, `DESCRIPTION`, `STATUS`, `NEW_PAGE_FLAG`, `OPEN_FLAG`, `SYSTEM_TYPE`, `CREATE_TIME`, `UPDATE_TIME`, `CREATE_USER`, `UPDATE_USER`) VALUES (1734097692785868801, 'GREASE_MANAGE', '0', '[0],', '娌硅剛绠$悊', 'fa-star', '/greaseManage', 999, 1, 'Y', '', 'ENABLE', '', '', 'BASE_SYSTEM', '2023-12-11 14:28:02', '2023-12-11 14:28:02', 1, 1);
+INSERT INTO `sys_menu`(`MENU_ID`, `CODE`, `PCODE`, `PCODES`, `NAME`, `ICON`, `URL`, `SORT`, `LEVELS`, `MENU_FLAG`, `DESCRIPTION`, `STATUS`, `NEW_PAGE_FLAG`, `OPEN_FLAG`, `SYSTEM_TYPE`, `CREATE_TIME`, `UPDATE_TIME`, `CREATE_USER`, `UPDATE_USER`) VALUES (1734097692785868802, 'GREASE_MANAGE_ADD', 'GREASE_MANAGE', '[0],[GREASE_MANAGE],', '娌硅剛绠$悊娣诲姞', 'fa-star', '', 999, 2, 'N', '', 'ENABLE', '', '', 'BASE_SYSTEM', '2023-12-11 14:28:02', '2023-12-11 14:28:02', 1, 1);
+INSERT INTO `sys_menu`(`MENU_ID`, `CODE`, `PCODE`, `PCODES`, `NAME`, `ICON`, `URL`, `SORT`, `LEVELS`, `MENU_FLAG`, `DESCRIPTION`, `STATUS`, `NEW_PAGE_FLAG`, `OPEN_FLAG`, `SYSTEM_TYPE`, `CREATE_TIME`, `UPDATE_TIME`, `CREATE_USER`, `UPDATE_USER`) VALUES (1734097692785868803, 'GREASE_MANAGE_EDIT', 'GREASE_MANAGE', '[0],[GREASE_MANAGE],', '娌硅剛绠$悊淇敼', 'fa-star', '', 999, 2, 'N', '', 'ENABLE', '', '', 'BASE_SYSTEM', '2023-12-11 14:28:02', '2023-12-11 14:28:02', 1, 1);
+INSERT INTO `sys_menu`(`MENU_ID`, `CODE`, `PCODE`, `PCODES`, `NAME`, `ICON`, `URL`, `SORT`, `LEVELS`, `MENU_FLAG`, `DESCRIPTION`, `STATUS`, `NEW_PAGE_FLAG`, `OPEN_FLAG`, `SYSTEM_TYPE`, `CREATE_TIME`, `UPDATE_TIME`, `CREATE_USER`, `UPDATE_USER`) VALUES (1734097692785868804, 'GREASE_MANAGE_DELETE', 'GREASE_MANAGE', '[0],[GREASE_MANAGE],', '娌硅剛绠$悊鍒犻櫎', 'fa-star', '', 999, 2, 'N', '', 'ENABLE', '', '', 'BASE_SYSTEM', '2023-12-11 14:28:02', '2023-12-11 14:28:02', 1, 1);
diff --git a/guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage.js b/guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage.js
new file mode 100644
index 0000000..6f8474c
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage.js
@@ -0,0 +1,132 @@
+layui.use(['table', 'admin', 'ax', 'func'], function () {
+    var $ = layui.$;
+    var table = layui.table;
+    var $ax = layui.ax;
+    var admin = layui.admin;
+    var func = layui.func;
+
+    /**
+     * 娌硅剛绠$悊绠$悊
+     */
+    var GreaseManage = {
+        tableId: "greaseManageTable"
+    };
+
+    /**
+     * 鍒濆鍖栬〃鏍肩殑鍒�
+     */
+    GreaseManage.initColumn = function () {
+        return [[
+            {type: 'checkbox'},
+            {field: 'id', hide: true, title: '涓婚敭id'},
+            {field: 'barcode', sort: true, title: '鎵爜鏉$爜'},
+            {field: 'locationCode', sort: true, title: '宸ヤ綅'},
+            {field: 'duaDate', sort: true, title: '鍒版湡鏃堕棿'},
+            {field: 'state', sort: true, title: '鐘舵��'},
+            {field: 'createUser', sort: true, title: '鏇存柊鐢ㄦ埛'},
+            {field: 'createTime', sort: true, title: '鏇存柊鏃堕棿'},
+            {field: 'remarks', sort: true, title: '澶囨敞'},
+            {field: 'spareField1', sort: true, title: '棰勭暀瀛楁1'},
+            {field: 'spareField2', sort: true, title: '棰勭暀瀛楁2'},
+            {align: 'center', toolbar: '#tableBar', title: '鎿嶄綔'}
+        ]];
+    };
+
+    /**
+     * 鐐瑰嚮鏌ヨ鎸夐挳
+     */
+    GreaseManage.search = function () {
+        var queryData = {};
+
+
+        table.reload(GreaseManage.tableId, {
+            where: queryData, page: {curr: 1}
+        });
+    };
+
+    /**
+     * 璺宠浆鍒版坊鍔犻〉闈�
+     */
+    GreaseManage.jumpAddPage = function () {
+        window.location.href = Feng.ctxPath + '/greaseManage/add'
+    };
+
+    /**
+    * 璺宠浆鍒扮紪杈戦〉闈�
+    *
+    * @param data 鐐瑰嚮鎸夐挳鏃跺�欑殑琛屾暟鎹�
+    */
+    GreaseManage.jumpEditPage = function (data) {
+        window.location.href = Feng.ctxPath + '/greaseManage/edit?id=' + data.id
+    };
+
+    /**
+     * 瀵煎嚭excel鎸夐挳
+     */
+    GreaseManage.exportExcel = function () {
+        var checkRows = table.checkStatus(GreaseManage.tableId);
+        if (checkRows.data.length === 0) {
+            Feng.error("璇烽�夋嫨瑕佸鍑虹殑鏁版嵁");
+        } else {
+            table.exportFile(tableResult.config.id, checkRows.data, 'xls');
+        }
+    };
+
+    /**
+     * 鐐瑰嚮鍒犻櫎
+     *
+     * @param data 鐐瑰嚮鎸夐挳鏃跺�欑殑琛屾暟鎹�
+     */
+    GreaseManage.onDeleteItem = function (data) {
+        var operation = function () {
+            var ajax = new $ax(Feng.ctxPath + "/greaseManage/delete", function (data) {
+                Feng.success("鍒犻櫎鎴愬姛!");
+                table.reload(GreaseManage.tableId);
+            }, function (data) {
+                Feng.error("鍒犻櫎澶辫触!" + data.responseJSON.message + "!");
+            });
+            ajax.set("id", data.id);
+            ajax.start();
+        };
+        Feng.confirm("鏄惁鍒犻櫎?", operation);
+    };
+
+    // 娓叉煋琛ㄦ牸
+    var tableResult = table.render({
+        elem: '#' + GreaseManage.tableId,
+        url: Feng.ctxPath + '/greaseManage/list',
+        page: true,
+        height: "full-158",
+        cellMinWidth: 100,
+        cols: GreaseManage.initColumn()
+    });
+
+    // 鎼滅储鎸夐挳鐐瑰嚮浜嬩欢
+    $('#btnSearch').click(function () {
+        GreaseManage.search();
+    });
+
+    // 娣诲姞鎸夐挳鐐瑰嚮浜嬩欢
+    $('#btnAdd').click(function () {
+
+    GreaseManage.jumpAddPage();
+
+    });
+
+    // 瀵煎嚭excel
+    $('#btnExp').click(function () {
+        GreaseManage.exportExcel();
+    });
+
+    // 宸ュ叿鏉$偣鍑讳簨浠�
+    table.on('tool(' + GreaseManage.tableId + ')', function (obj) {
+        var data = obj.data;
+        var layEvent = obj.event;
+
+        if (layEvent === 'edit') {
+            GreaseManage.jumpEditPage(data);
+        } else if (layEvent === 'delete') {
+            GreaseManage.onDeleteItem(data);
+        }
+    });
+});
diff --git a/guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage_add.js b/guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage_add.js
new file mode 100644
index 0000000..59b11bd
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage_add.js
@@ -0,0 +1,65 @@
+/**
+ * 娣诲姞鎴栬�呬慨鏀归〉闈�
+ */
+var GreaseManageInfoDlg = {
+    data: {
+        id: "",
+        barcode: "",
+        locationCode: "",
+        duaDate: "",
+        state: "",
+        createUser: "",
+        createTime: "",
+        remarks: "",
+        spareField1: "",
+        spareField2: ""
+    }
+};
+
+layui.use(['form', 'admin', 'ax','laydate','upload','formSelects'], function () {
+    var $ = layui.jquery;
+    var $ax = layui.ax;
+    var form = layui.form;
+    var admin = layui.admin;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    //琛ㄥ崟鎻愪氦浜嬩欢
+    form.on('submit(btnSubmit)', function (data) {
+        var ajax = new $ax(Feng.ctxPath + "/greaseManage/addItem", function (data) {
+            Feng.success("娣诲姞鎴愬姛锛�");
+            window.location.href = Feng.ctxPath + '/greaseManage'
+        }, function (data) {
+            Feng.error("娣诲姞澶辫触锛�" + data.responseJSON.message)
+        });
+        ajax.set(data.field);
+        ajax.start();
+
+        return false;
+    });
+
+    $('#cancel').click(function(){
+        window.location.href = Feng.ctxPath + '/greaseManage'
+    });
+
+});
\ No newline at end of file
diff --git a/guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage_edit.js b/guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage_edit.js
new file mode 100644
index 0000000..03e8dbc
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/assets/modular/gm/greaseManage/greaseManage_edit.js
@@ -0,0 +1,69 @@
+/**
+ * 璇︽儏瀵硅瘽妗�
+ */
+var GreaseManageInfoDlg = {
+    data: {
+        id: "",
+        barcode: "",
+        locationCode: "",
+        duaDate: "",
+        state: "",
+        createUser: "",
+        createTime: "",
+        remarks: "",
+        spareField1: "",
+        spareField2: ""
+    }
+};
+
+layui.use(['form', 'admin', 'ax','laydate','upload','formSelects'], function () {
+    var $ = layui.jquery;
+    var $ax = layui.ax;
+    var form = layui.form;
+    var admin = layui.admin;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    //鑾峰彇璇︽儏淇℃伅锛屽~鍏呰〃鍗�
+    var ajax = new $ax(Feng.ctxPath + "/greaseManage/detail?id=" + Feng.getUrlParam("id"));
+    var result = ajax.start();
+    form.val('greaseManageForm', result.data);
+
+    //琛ㄥ崟鎻愪氦浜嬩欢
+    form.on('submit(btnSubmit)', function (data) {
+        var ajax = new $ax(Feng.ctxPath + "/greaseManage/editItem", function (data) {
+            Feng.success("鏇存柊鎴愬姛锛�");
+            window.location.href = Feng.ctxPath + '/greaseManage'
+        }, function (data) {
+            Feng.error("鏇存柊澶辫触锛�" + data.responseJSON.message)
+        });
+        ajax.set(data.field);
+        ajax.start();
+
+        return false;
+    });
+
+    $('#cancel').click(function(){
+        window.location.href = Feng.ctxPath + '/greaseManage'
+    });
+});
\ No newline at end of file
diff --git a/guns-vip-main/src/main/webapp/assets/modular/kb/greaseBoard/greaseBoard.js b/guns-vip-main/src/main/webapp/assets/modular/kb/greaseBoard/greaseBoard.js
new file mode 100644
index 0000000..1707989
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/assets/modular/kb/greaseBoard/greaseBoard.js
@@ -0,0 +1,269 @@
+
+layui.use(['form','table', 'admin', 'ax', 'func'], function () {
+    var $ = layui.$;
+    var table = layui.table;
+    var $ax = layui.ax;
+    var admin = layui.admin;
+    var func = layui.func;
+
+    /**
+     * 鐪嬫澘閰嶇疆绠$悊
+     */
+    var KanbanConf = {
+        tableId: "kanbanConfTable"
+    };
+
+    /**
+     * bom淇℃伅绠$悊
+     */
+    var BomInfo = {
+        tableId: "bomInfoTable"
+    };
+
+    /**
+     * bom淇℃伅绠$悊
+     */
+    var MaterialShortage = {
+        tableId: "materialShortageTable"
+    };
+
+    initPageInfo();
+    async function initPageInfo() {
+        await initKanBanConfInfo();//鍒濆鍖栭厤缃俊鎭�
+        await initPoorLine();
+        await initOrderInfo();
+        initBomTable();
+        initMaterialShortage();
+     /*   xR();
+        xa();*/
+    }
+
+    function initPoorLine(){
+        $.ajax({
+            type: "POST",
+            contentType: "application/json;charset=UTF-8",
+            url: Feng.ctxPath + '/locationInfo/list?productionLineCode='+ $('#lineCode').val(),
+            success: function (result) {
+                $('#poorLocationCode').empty();
+                $('#poorLocationCode').append(new Option("璇烽�夋嫨宸ヤ綅", ""));// 涓嬫媺鑿滃崟閲屾坊鍔犲厓绱�
+
+                $.each(result.data, function (index, value) {
+                    $('#poorLocationCode').append(new Option(value.locationCode, value.locationCode));// 涓嬫媺鑿滃崟閲屾坊鍔犲厓绱�
+                });
+                layui.form.render("select");//閲嶆柊娓叉煋 鍥哄畾鍐欐硶
+            },
+        });
+    }
+
+    function initKanBanConfInfo() {
+        // 鏍规嵁ip鏌ヨ閰嶇疆淇℃伅
+        var ajax = new $ax(Feng.ctxPath + "/scrapBoard/qryKBConflist?pageCode=" + 'KB_WLDJ_006');
+        var result = ajax.start();
+        if (result.data.length > 0) {
+            let msg = result.data[0];
+            $('#id').val(msg.id);
+            $('#ipAddress').val(msg.ipAddress);
+            $('#pageCode').val(msg.pageCode);
+            $('#workshopCode').val(msg.workshopCode);
+            $('#lineCode').val(msg.lineCode);
+            $('#locationCode').val(msg.locationCode);
+
+            $('#scrapCategory').val(msg.warehouseCode);
+            $('#scrapReason').val(msg.warehouseName);
+            console.log(msg)
+
+        }
+    }
+
+    function initOrderInfo(sfc) {
+        // 鏍规嵁ip鏌ヨ閰嶇疆淇℃伅
+        var ajax = new $ax(Feng.ctxPath + "/repairManageInfo/list?sfc=" + sfc);
+        // var ajax = new $ax(Feng.ctxPath + "/repairManageInfo/list?sfc=222222222");
+        var result = ajax.start();
+        if (result.data.length > 0) {
+            let msg = result.data[0];
+            $('#orderId').val(msg.id);
+            $('#workOrderNo').val(msg.workOrderNo);
+            $('#productName').val(msg.productName);
+            $('#productCode').val(msg.productCode);
+            $('#sfc1').val(msg.sfc);
+            $('#locationCode1').val(msg.locationCode);
+            $('#productionLine1').val(msg.productionLine);
+            $('#poorLocationCode1').val(msg.poorLocationCode);
+            $('#poorContent1').val(msg.poorContent);
+
+        }
+    }
+
+    function initBomTable(){
+        var queryData = {};
+        queryData['loadingCode'] = $("#locationCode").val();
+        // queryData['workOrderNo'] = $("#workOrderNo").val();
+
+        // 娓叉煋琛ㄦ牸
+        var tableResult = table.render({
+            elem: '#' + BomInfo.tableId,
+            url: Feng.ctxPath + '/bomInfo/kbListTable',
+            // page: true,
+            // height: 475,
+            height: 435,
+            cellMinWidth: 100,
+            where:queryData,
+            cols: BomInfo.initColumn()
+        });
+    }
+    /**
+     * 鐗╂枡Bom鍒濆鍖栬〃鏍肩殑鍒�
+     */
+    BomInfo.initColumn = function () {
+        return [[
+            // {type: 'checkbox'},
+            /*  {type:"numbers" ,title:'搴忓彿',width:40,fixed:'left'},*/
+            {field: 'id', hide: true, title: 'ID'},
+            {field: 'materialCode', sort: true, title: '鐗╂枡缂栧彿'},
+            {field: 'materialName', sort: true, title: '鐗╂枡鍚嶇О'},
+            // {field: 'workorderNo', sort: true, title: '宸ュ崟缂栧彿'},
+            // {field: 'productCode', sort: true, title: '浜у搧缂栧彿'},
+            {field: 'locationCode', sort: true, title: '宸ヤ綅缂栧彿'},
+            {field: 'loadingCode', sort: true, title: '涓婃枡宸ヤ綅缂栧彿'},
+            // {field: 'state', sort: true, title: '鏄惁鎵爜'},
+            // {field: 'batchCode', sort: true, title: '鎵规鐮�'},
+        ]];
+    };
+
+    /**
+     * 缂烘枡鎶ヨ鍒濆鍖栬〃鏍肩殑鍒�
+     */
+    MaterialShortage.initColumn = function () {
+        return [[
+            {field: 'id', hide: true, title: '涓婚敭id'},
+            {field: 'barcode', sort: true, title: '鎵爜鏉$爜',width:330},
+            {field: 'locationCode', sort: true, title: '宸ヤ綅'},
+            {field: 'duaDate', sort: true, title: '鍒版湡鏃堕棿'},
+            // {field: 'state', sort: true, title: '鐘舵��'},
+            {field: 'createUser', sort: true, title: '鏇存柊鐢ㄦ埛'},
+            {field: 'createTime', sort: true, title: '鏇存柊鏃堕棿'},
+        ]];
+    };
+
+    function initMaterialShortage(){
+        var queryData = {};
+        queryData['manageType'] = "2";
+
+        // 娓叉煋琛ㄦ牸
+        var tableResult = table.render({
+            elem: '#' + MaterialShortage.tableId,
+            url: Feng.ctxPath + '/greaseManage/list',
+            // page: true,
+            height: 360,
+            cellMinWidth: 80,
+            where:queryData,
+            cols: MaterialShortage.initColumn()
+        });
+    }
+
+
+    // 鐢熶骇宸ュ崟璁剧疆鎸夐挳鐐瑰嚮浜嬩欢
+    $('#orderBtnSet').click(function () {
+        KanbanConf.openOrderEditPage();
+    });
+
+    // 璁剧疆鎸夐挳鐐瑰嚮浜嬩欢
+    $('#btnSet').click(function () {
+        var id = $("#id").val();
+        if(id == "" || id == undefined){
+            KanbanConf.openAddDlg();
+        }else{
+            KanbanConf.openEditPage(id);
+        }
+
+    });
+
+    $('#enter').click(function (){
+        if($('#barcode').val().length===0) {
+            Feng.error("璇疯緭鍏ユ�绘垚缂栫爜锛�")
+            return;
+        }
+        let ajaxEnter = new $ax(Feng.ctxPath + "/greaseBoard/updategreaseManage", function (data) {
+            Feng.success("娣诲姞鎴愬姛锛�")
+        }, function (data) {
+            Feng.error("娣诲姞澶辫触锛�" + data.responseJSON.message)
+        });
+        ajaxEnter.set("barcode", $('#barcode').val());
+        ajaxEnter.start();
+        initMaterialShortage();
+    });
+
+    /**
+     * 寮瑰嚭娣诲姞椤甸潰璁剧疆瀵硅瘽妗�
+     */
+    KanbanConf.openAddDlg = function () {
+        console.log("寮瑰嚭娣诲姞椤甸潰璁剧疆瀵硅瘽妗�");
+        layer.open({
+            type: 2,
+            area: ['1000px', '600px'],
+            title: '娣诲姞鐪嬫澘閰嶇疆',
+            content: Feng.ctxPath + '/reworkAndLaunch/add',
+            success: function (layero, index) {
+                let body = layer.getChildFrame('body', index);
+                body.find('form').find('#testlineCode').val($('#lineCode').val());
+                body.find('form').find('#testlocationCode').val($('#locationCode').val());
+            },
+            end: function () {
+                console.log("end")
+                let lineCode = JSON.parse(window.localStorage.getItem('lineCode'));
+                let locationCode = JSON.parse(window.localStorage.getItem('locationCode'));
+                $('#lineCode').val(lineCode);
+                $('#locationCode').val(locationCode);
+                initKanBanConfInfo()
+            }
+        });
+    };
+
+    /**
+     * 寮瑰嚭缂栬緫椤甸潰璁剧疆瀵硅瘽妗�
+     *
+     * @param data 鐐瑰嚮鎸夐挳鏃跺�欑殑琛屾暟鎹�
+     */
+    KanbanConf.openEditPage = function (data) {
+        func.open({
+            title: '娣诲姞鐪嬫澘閰嶇疆',
+            content: Feng.ctxPath + '/materialRegistration/edit?id=' + data,
+            //tableId: KanbanConf.tableId
+        });
+
+    };
+
+    $('#revert').click(function () {
+        window.location.href = Feng.ctxPath + '/badBoard/boardHome'
+    });
+
+    var websocket = null;
+    //鍒ゆ柇褰撳墠娴忚鍣ㄦ槸鍚︽敮鎸乄ebSocket
+    if('WebSocket' in window) {
+        //鏀规垚浣犵殑鍦板潃
+        websocket = new WebSocket('ws://127.0.0.1:8083/websocket/greaseBoard');
+    } else {
+        alert('褰撳墠娴忚鍣� Not support websocket')
+    }
+    //鎺ユ敹鍒版秷鎭殑鍥炶皟鏂规硶
+    websocket.onmessage = function(event) {
+        $('#barcode').val(event.data);
+        // initOrderInfo(event.data);
+    }
+
+    //杩炴帴鎴愬姛寤虹珛鐨勫洖璋冩柟娉�
+    websocket.onopen = function() {
+        Feng.info("鎵爜鏋繛鎺ュ缓绔嬫垚鍔�")
+    }
+
+    //杩炴帴鍏抽棴鐨勫洖璋冩柟娉�
+    websocket.onclose = function() {
+        Feng.info("鎵爜鏋繛鎺ュ凡鍏抽棴")
+    }
+
+    window.onunload = function(){
+        websocket.close();
+    }
+
+});
diff --git a/guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage.html b/guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage.html
new file mode 100644
index 0000000..758964d
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage.html
@@ -0,0 +1,32 @@
+@layout("/common/_container.html",{js:["/assets/modular/gm/greaseManage/greaseManage.js"]}){
+
+<div class="layui-body-header">
+    <span class="layui-body-header-title">娌硅剛绠$悊绠$悊</span>
+</div>
+
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+        <div class="layui-col-sm12 layui-col-md12 layui-col-lg12">
+            <div class="layui-card">
+                <div class="layui-card-body">
+                    <div class="layui-form toolbar">
+                        <div class="layui-form-item">
+                            <div class="layui-inline">
+                                <button id="btnSearch" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>鎼滅储</button>
+                                <button id="btnAdd" class="layui-btn icon-btn"><i class="layui-icon">&#xe654;</i>娣诲姞</button>
+                                <button id="btnExp" class="layui-btn icon-btn"><i class="layui-icon">&#xe67d;</i>瀵煎嚭</button>
+                            </div>
+                        </div>
+                    </div>
+                    <table class="layui-table" id="greaseManageTable" lay-filter="greaseManageTable"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="tableBar">
+    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="delete">鍒犻櫎</a>
+</script>
+@}
\ No newline at end of file
diff --git a/guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage_add.html b/guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage_add.html
new file mode 100644
index 0000000..c882351
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage_add.html
@@ -0,0 +1,64 @@
+@layout("/common/_form.html",{js:["/assets/modular/gm/greaseManage/greaseManage_add.js"],css:["/assets/expand/module/formSelects/formSelects-v4.css"]}){
+
+<form class="layui-form" id="greaseManageForm" lay-filter="greaseManageForm">
+    <div class="layui-fluid" style="padding-bottom: 75px;">
+        <div class="layui-card">
+            <div class="layui-card-header">鍩烘湰淇℃伅</div>
+            <div class="layui-card-body">
+                <div class="layui-form-item layui-row">
+                    <input name="id" type="hidden"/>
+
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">鎵爜鏉$爜<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="barcode" name="barcode" placeholder="璇疯緭鍏ユ壂鐮佹潯鐮�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">宸ヤ綅<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="locationCode" name="locationCode" placeholder="璇疯緭鍏ュ伐浣�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">鍒版湡鏃堕棿<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="duaDate" name="duaDate" placeholder="璇疯緭鍏ュ埌鏈熸椂闂�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">鐘舵��<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="state" name="state" placeholder="璇疯緭鍏ョ姸鎬�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">澶囨敞<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="remarks" name="remarks" placeholder="璇疯緭鍏ュ娉�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">棰勭暀瀛楁1<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="spareField1" name="spareField1" placeholder="璇疯緭鍏ラ鐣欏瓧娈�1" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">棰勭暀瀛楁2<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="spareField2" name="spareField2" placeholder="璇疯緭鍏ラ鐣欏瓧娈�2" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="form-group-bottom text-center">
+        <button class="layui-btn" lay-filter="btnSubmit" lay-submit>&emsp;鎻愪氦&emsp;</button>
+        <button type="reset" class="layui-btn layui-btn-primary" id="cancel">&emsp;鍙栨秷&emsp;</button>
+    </div>
+
+</form>
+
+@}
\ No newline at end of file
diff --git a/guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage_edit.html b/guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage_edit.html
new file mode 100644
index 0000000..c18bfb4
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/pages/modular/gm/greaseManage/greaseManage_edit.html
@@ -0,0 +1,64 @@
+@layout("/common/_form.html",{js:["/assets/modular/gm/greaseManage/greaseManage_edit.js"]}){
+
+<form class="layui-form" id="greaseManageForm" lay-filter="greaseManageForm">
+    <div class="layui-fluid" style="padding-bottom: 75px;">
+        <div class="layui-card">
+            <div class="layui-card-header">鍩烘湰淇℃伅</div>
+            <div class="layui-card-body">
+                <div class="layui-form-item layui-row">
+                    <input name="id" type="hidden"/>
+
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">鎵爜鏉$爜<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="barcode" name="barcode" placeholder="璇疯緭鍏ユ壂鐮佹潯鐮�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">宸ヤ綅<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="locationCode" name="locationCode" placeholder="璇疯緭鍏ュ伐浣�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">鍒版湡鏃堕棿<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="duaDate" name="duaDate" placeholder="璇疯緭鍏ュ埌鏈熸椂闂�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">鐘舵��<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="state" name="state" placeholder="璇疯緭鍏ョ姸鎬�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">澶囨敞<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="remarks" name="remarks" placeholder="璇疯緭鍏ュ娉�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">棰勭暀瀛楁1<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="spareField1" name="spareField1" placeholder="璇疯緭鍏ラ鐣欏瓧娈�1" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">棰勭暀瀛楁2<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="spareField2" name="spareField2" placeholder="璇疯緭鍏ラ鐣欏瓧娈�2" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="form-group-bottom text-center">
+        <button class="layui-btn" lay-filter="btnSubmit" lay-submit>&emsp;鎻愪氦&emsp;</button>
+        <button type="reset" class="layui-btn layui-btn-primary" id="cancel">&emsp;鍙栨秷&emsp;</button>
+    </div>
+
+</form>
+
+@}
\ No newline at end of file
diff --git a/guns-vip-main/src/main/webapp/pages/modular/kb/greaseBoard/greaseBoard.html b/guns-vip-main/src/main/webapp/pages/modular/kb/greaseBoard/greaseBoard.html
new file mode 100644
index 0000000..0b4810b
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/pages/modular/kb/greaseBoard/greaseBoard.html
@@ -0,0 +1,45 @@
+@layout("/common/_container.html",{js:["/assets/modular/kb/greaseBoard/greaseBoard.js"]}){
+<div class="layui-body-header">
+    <span class="layui-body-header-title">娌硅剛鐪嬫澘</span>
+</div>
+
+<div class="layui-fluid">
+
+    <div class="layui-row layui-col-space12">
+        <div class="layui-col-sm12 layui-col-md12 layui-col-lg12">
+            <div class="layui-card">
+                <div class="layui-card-header" style="font-weight: bold"><i class="layui-icon layui-icon-rate-solid"></i> 鍩虹閰嶇疆</div>
+                <div class="layui-card-body" style="height: 106px">
+                    <div class="layui-form toolbar">
+                        <div class="layui-form-item layui-row">
+                            <div class="layui-col-md6" style="margin-top: 30px">
+                                <div class="layui-inline">
+                                    鎵� 鎻� 鏉� 鐮�:
+                                </div>
+                                <div class="layui-inline">
+                                    <input id="barcode" name="barcode" placeholder="璇疯緭鍏ユ�绘垚缂栫爜" type="text" style="width: 310px" class="layui-input"/>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="layui-col-md1" style="margin-top: 30px">
+                                <div class="layui-inline">
+                                    <button id="enter"  class="layui-btn layui-btn-radius layui-btn-lg">褰� 鍏�</button>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="layui-col-sm12 layui-col-md12 layui-col-lg12">
+            <div class="layui-card">
+                <div class="layui-card-header" style="font-weight: bold"><i class="layui-icon layui-icon-rate-solid"></i>娌硅剛鍒楄〃</div>
+                <div class="layui-card-body" style="height: 350px">
+                    <table class="layui-table" id="materialShortageTable" lay-filter="materialShortageTable"></table>
+                </div>
+            </div>
+        </div>
+        <button id="revert" class="layui-btn layui-btn-radius layui-btn-lg" style="float: right">杩斿洖棣栭〉</button>
+    </div>
+</div>
+@}
\ No newline at end of file

--
Gitblit v1.9.3