From 4779beadfc833238c5d83cf60e8195fb352ffd67 Mon Sep 17 00:00:00 2001
From: 懒羊羊 <15939171744@163.com>
Date: 星期一, 09 十月 2023 15:31:07 +0800
Subject: [PATCH] 看板ip配置表

---
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/model/params/KanbanConfParam.java       |   88 +++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/kb/formula/controller/FormulaKbController.java         |   48 +
 guns-vip-main/src/main/sqls/kanbanConf_menus.sql                                                                 |    4 
 guns-vip-main/src/main/webapp/pages/modular/kb/formula/formulaView.html                                          |  139 ++++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/controller/KanbanConfController.java    |  168 +++++
 guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf_edit.js                                   |   83 ++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/mapper/mapping/KanbanConfMapper.xml     |   87 +++
 guns-vip-main/src/main/webapp/pages/modular/sys/kanbanConf/kanbanConf_edit.html                                  |   88 +++
 guns-vip-main/src/main/webapp/assets/modular/kb/formula/formulaView.js                                           |   95 +++
 guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf.js                                        |  137 ++++
 guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf_add.js                                    |   79 ++
 guns-vip-main/src/main/webapp/pages/modular/sys/kanbanConf/kanbanConf.html                                       |   41 +
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/entity/KanbanConf.java                  |  208 +++++++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/model/result/KanbanConfResult.java      |   82 ++
 guns-vip-main/src/main/webapp/pages/modular/sys/kanbanConf/kanbanConf_add.html                                   |   88 +++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/kb/utils/IPUtil.java                                   |   41 +
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/service/impl/KanbanConfServiceImpl.java |   84 ++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/service/KanbanConfService.java          |   69 ++
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/mapper/KanbanConfMapper.java            |   56 +
 19 files changed, 1,685 insertions(+), 0 deletions(-)

diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/kb/formula/controller/FormulaKbController.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/kb/formula/controller/FormulaKbController.java
new file mode 100644
index 0000000..e9e5b4b
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/kb/formula/controller/FormulaKbController.java
@@ -0,0 +1,48 @@
+package cn.stylefeng.guns.modular.zsx.kb.formula.controller;
+
+import cn.stylefeng.guns.modular.zsx.kb.utils.IPUtil;
+import cn.stylefeng.guns.modular.zsx.pm.salesOrder.service.SalesOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import javax.servlet.http.HttpServletRequest;
+import java.net.*;
+import java.util.Enumeration;
+import java.util.Set;
+
+
+@Controller
+@RequestMapping("/kb/formulaView")
+public class FormulaKbController {
+    private String PREFIX = "/modular/kb/formula";
+
+    /**
+     * 璺宠浆鍒颁富椤甸潰
+     *
+     * @author ruimin
+     * @Date 2023-08-26
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "/formulaView.html";
+    }
+
+    public static void main(String[] args) {
+        try {
+            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
+            while (networkInterfaces.hasMoreElements()) {
+                NetworkInterface networkInterface = networkInterfaces.nextElement();
+                Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
+                while (inetAddresses.hasMoreElements()) {
+                    InetAddress inetAddress = inetAddresses.nextElement();
+                    if (inetAddress instanceof Inet4Address) { // 杩囨护IPv4鍦板潃
+                        System.out.println(inetAddress.getHostAddress());
+                    }
+                }
+            }
+        } catch (SocketException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/kb/utils/IPUtil.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/kb/utils/IPUtil.java
new file mode 100644
index 0000000..bb6d660
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/kb/utils/IPUtil.java
@@ -0,0 +1,41 @@
+package cn.stylefeng.guns.modular.zsx.kb.utils;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Author: ll
+ * @Date: 2021/4/1 9:20
+ * @Version 1.0
+ */
+  public class IPUtil {
+    //鑾峰彇ip鍦板潃
+    public static String getRealIp(HttpServletRequest request) {
+        String ip = request.getHeader("x-forwarded-for");
+        System.out.println("x-forwarded-for ip: " + ip);
+        if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
+            // 澶氭鍙嶅悜浠g悊鍚庝細鏈夊涓猧p鍊硷紝绗竴涓猧p鎵嶆槸鐪熷疄ip
+            if( ip.indexOf(",")!=-1 ){
+                ip = ip.split(",")[0];
+            }
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("X-Real-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        return ip;
+    }
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/controller/KanbanConfController.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/controller/KanbanConfController.java
new file mode 100644
index 0000000..18f6892
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/controller/KanbanConfController.java
@@ -0,0 +1,168 @@
+package cn.stylefeng.guns.modular.zsx.sys.kanbanConf.controller;
+
+import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
+import cn.stylefeng.guns.modular.zsx.kb.utils.IPUtil;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.entity.KanbanConf;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.params.KanbanConfParam;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.service.KanbanConfService;
+import cn.stylefeng.roses.core.base.controller.BaseController;
+import cn.stylefeng.roses.kernel.model.response.ResponseData;
+import cn.stylefeng.roses.core.mutidatasource.annotion.DataSource;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * 鐪嬫澘閰嶇疆鎺у埗鍣�
+ *
+ * @author ruimin
+ * @Date 2023-10-08 15:23:17
+ */
+@Controller
+@RequestMapping("/kanbanConf")
+public class KanbanConfController extends BaseController {
+
+    private String PREFIX = "/modular/sys/kanbanConf";
+
+    @Autowired
+    private KanbanConfService kanbanConfService;
+
+    /**
+     * 璺宠浆鍒颁富椤甸潰
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "/kanbanConf.html";
+    }
+
+    /**
+     * 鏂板椤甸潰
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    @RequestMapping("/add")
+    public String add() {
+        return PREFIX + "/kanbanConf_add.html";
+    }
+
+    /**
+     * 缂栬緫椤甸潰
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    @RequestMapping("/edit")
+    public String edit() {
+        return PREFIX + "/kanbanConf_edit.html";
+    }
+
+    /**
+     * 鏂板鎺ュ彛
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    @RequestMapping("/addItem")
+    @ResponseBody
+    @DataSource(name = "self")
+    public ResponseData addItem(KanbanConfParam kanbanConfParam) {
+        this.kanbanConfService.add(kanbanConfParam);
+        return ResponseData.success();
+    }
+
+    /**
+     * 缂栬緫鎺ュ彛
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    @RequestMapping("/editItem")
+    @ResponseBody
+    @DataSource(name = "self")
+    public ResponseData editItem(KanbanConfParam kanbanConfParam) {
+        this.kanbanConfService.update(kanbanConfParam);
+        return ResponseData.success();
+    }
+
+    /**
+     * 鍒犻櫎鎺ュ彛
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    @RequestMapping("/delete")
+    @ResponseBody
+    @DataSource(name = "self")
+    public ResponseData delete(KanbanConfParam kanbanConfParam) {
+        this.kanbanConfService.delete(kanbanConfParam);
+        return ResponseData.success();
+    }
+
+    /**
+     * 鏌ョ湅璇︽儏鎺ュ彛
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    @RequestMapping("/detail")
+    @ResponseBody
+    @DataSource(name = "self")
+    public ResponseData detail(KanbanConfParam kanbanConfParam) {
+        KanbanConf detail = this.kanbanConfService.getById(kanbanConfParam.getId());
+        return ResponseData.success(detail);
+    }
+
+    /**
+     * 鏌ヨ鍒楄〃
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    @ResponseBody
+    @RequestMapping("/list")
+    @DataSource(name = "self")
+    public LayuiPageInfo list(KanbanConfParam kanbanConfParam) {
+        return this.kanbanConfService.findPageBySpec(kanbanConfParam);
+    }
+
+    @RequestMapping("/ipSetting")
+    @ResponseBody
+    @DataSource(name = "self")
+    public ResponseData ipSetting(KanbanConfParam kanbanConfParam, HttpServletRequest request) {
+        String realIp = IPUtil.getRealIp(request);
+        KanbanConf kanbanConf = new KanbanConf();
+        KanbanConf ipAddress = this.kanbanConfService.getOne(new QueryWrapper<KanbanConf>().eq("ip_address", realIp));
+        if(ipAddress == null){
+            kanbanConf.setLineCode(kanbanConfParam.getLineCode());
+            kanbanConf.setLocationCode(kanbanConfParam.getLocationCode());
+            kanbanConf.setIpAddress(realIp);
+            this.kanbanConfService.save(kanbanConf);
+        }else {
+            kanbanConf.setLineCode(kanbanConfParam.getLineCode());
+            kanbanConf.setLocationCode(kanbanConfParam.getLocationCode());
+            this.kanbanConfService.update(kanbanConf,new QueryWrapper<KanbanConf>().eq("ip_address", realIp));
+        }
+        return ResponseData.success();
+    }
+
+    @RequestMapping("/initIpConf")
+    @ResponseBody
+    @DataSource(name = "self")
+    public ResponseData initIpConf(HttpServletRequest request) {
+        String realIp = IPUtil.getRealIp(request);
+        KanbanConf ipAddress = this.kanbanConfService.getOne(new QueryWrapper<KanbanConf>().eq("ip_address", realIp));
+        return ResponseData.success(ipAddress);
+    }
+
+}
+
+
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/entity/KanbanConf.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/entity/KanbanConf.java
new file mode 100644
index 0000000..7b1e632
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/entity/KanbanConf.java
@@ -0,0 +1,208 @@
+package cn.stylefeng.guns.modular.zsx.sys.kanbanConf.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 鐪嬫澘閰嶇疆
+ * </p>
+ *
+ * @author ruimin
+ * @since 2023-10-08
+ */
+@TableName("sys_kanban_conf")
+public class KanbanConf implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * ID
+     */
+      @TableId(value = "id", type = IdType.ID_WORKER)
+    private Long id;
+
+    /**
+     * 椤甸潰缂栧彿
+     */
+    @TableField("page_code")
+    private String pageCode;
+
+    /**
+     * ip鍦板潃
+     */
+    @TableField("ip_address")
+    private String ipAddress;
+
+    /**
+     * MAC鍦板潃
+     */
+    @TableField("mac_address")
+    private String macAddress;
+
+    /**
+     * 杞﹂棿缂栧彿
+     */
+    @TableField("workshop_code")
+    private String workshopCode;
+
+    /**
+     * 杞﹂棿鍚嶇О
+     */
+    @TableField("workshop_name")
+    private String workshopName;
+
+    /**
+     * 浜х嚎缂栧彿
+     */
+    @TableField("line_code")
+    private String lineCode;
+
+    /**
+     * 浜х嚎鍚嶇О
+     */
+    @TableField("line_name")
+    private String lineName;
+
+    /**
+     * 宸ヤ綅缂栫爜
+     */
+    @TableField("location_code")
+    private String locationCode;
+
+    /**
+     * 宸ヤ綅鍚嶇О
+     */
+    @TableField("location_name")
+    private String locationName;
+
+    /**
+     * 浠撳簱缂栧彿
+     */
+    @TableField("warehouse_code")
+    private String warehouseCode;
+
+    /**
+     * 浠撳簱鍚嶇О
+     */
+    @TableField("warehouse_name")
+    private String warehouseName;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getPageCode() {
+        return pageCode;
+    }
+
+    public void setPageCode(String pageCode) {
+        this.pageCode = pageCode;
+    }
+
+    public String getIpAddress() {
+        return ipAddress;
+    }
+
+    public void setIpAddress(String ipAddress) {
+        this.ipAddress = ipAddress;
+    }
+
+    public String getMacAddress() {
+        return macAddress;
+    }
+
+    public void setMacAddress(String macAddress) {
+        this.macAddress = macAddress;
+    }
+
+    public String getWorkshopCode() {
+        return workshopCode;
+    }
+
+    public void setWorkshopCode(String workshopCode) {
+        this.workshopCode = workshopCode;
+    }
+
+    public String getWorkshopName() {
+        return workshopName;
+    }
+
+    public void setWorkshopName(String workshopName) {
+        this.workshopName = workshopName;
+    }
+
+    public String getLineCode() {
+        return lineCode;
+    }
+
+    public void setLineCode(String lineCode) {
+        this.lineCode = lineCode;
+    }
+
+    public String getLineName() {
+        return lineName;
+    }
+
+    public void setLineName(String lineName) {
+        this.lineName = lineName;
+    }
+
+    public String getLocationCode() {
+        return locationCode;
+    }
+
+    public void setLocationCode(String locationCode) {
+        this.locationCode = locationCode;
+    }
+
+    public String getLocationName() {
+        return locationName;
+    }
+
+    public void setLocationName(String locationName) {
+        this.locationName = locationName;
+    }
+
+    public String getWarehouseCode() {
+        return warehouseCode;
+    }
+
+    public void setWarehouseCode(String warehouseCode) {
+        this.warehouseCode = warehouseCode;
+    }
+
+    public String getWarehouseName() {
+        return warehouseName;
+    }
+
+    public void setWarehouseName(String warehouseName) {
+        this.warehouseName = warehouseName;
+    }
+
+    @Override
+    public String toString() {
+        return "KanbanConf{" +
+        "id=" + id +
+        ", pageCode=" + pageCode +
+        ", ipAddress=" + ipAddress +
+        ", macAddress=" + macAddress +
+        ", workshopCode=" + workshopCode +
+        ", workshopName=" + workshopName +
+        ", lineCode=" + lineCode +
+        ", lineName=" + lineName +
+        ", locationCode=" + locationCode +
+        ", locationName=" + locationName +
+        ", warehouseCode=" + warehouseCode +
+        ", warehouseName=" + warehouseName +
+        "}";
+    }
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/mapper/KanbanConfMapper.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/mapper/KanbanConfMapper.java
new file mode 100644
index 0000000..9ed147b
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/mapper/KanbanConfMapper.java
@@ -0,0 +1,56 @@
+package cn.stylefeng.guns.modular.zsx.sys.kanbanConf.mapper;
+
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.entity.KanbanConf;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.params.KanbanConfParam;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.result.KanbanConfResult;
+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-10-08
+ */
+public interface KanbanConfMapper extends BaseMapper<KanbanConf> {
+
+    /**
+     * 鑾峰彇鍒楄〃
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    List<KanbanConfResult> customList(@Param("paramCondition") KanbanConfParam paramCondition);
+
+    /**
+     * 鑾峰彇map鍒楄〃
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    List<Map<String, Object>> customMapList(@Param("paramCondition") KanbanConfParam paramCondition);
+
+    /**
+     * 鑾峰彇鍒嗛〉瀹炰綋鍒楄〃
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    Page<KanbanConfResult> customPageList(@Param("page") Page page, @Param("paramCondition") KanbanConfParam paramCondition);
+
+    /**
+     * 鑾峰彇鍒嗛〉map鍒楄〃
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    Page<Map<String, Object>> customPageMapList(@Param("page") Page page, @Param("paramCondition") KanbanConfParam paramCondition);
+
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/mapper/mapping/KanbanConfMapper.xml b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/mapper/mapping/KanbanConfMapper.xml
new file mode 100644
index 0000000..5928091
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/mapper/mapping/KanbanConfMapper.xml
@@ -0,0 +1,87 @@
+<?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.zsx.sys.kanbanConf.mapper.KanbanConfMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.stylefeng.guns.modular.zsx.sys.kanbanConf.entity.KanbanConf">
+        <id column="id" property="id" />
+        <result column="page_code" property="pageCode" />
+        <result column="ip_address" property="ipAddress" />
+        <result column="mac_address" property="macAddress" />
+        <result column="workshop_code" property="workshopCode" />
+        <result column="workshop_name" property="workshopName" />
+        <result column="line_code" property="lineCode" />
+        <result column="line_name" property="lineName" />
+        <result column="location_code" property="locationCode" />
+        <result column="location_name" property="locationName" />
+        <result column="warehouse_code" property="warehouseCode" />
+        <result column="warehouse_name" property="warehouseName" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id AS "id", page_code AS "pageCode", ip_address AS "ipAddress", mac_address AS "macAddress", workshop_code AS "workshopCode", workshop_name AS "workshopName", line_code AS "lineCode", line_name AS "lineName", location_code AS "locationCode", location_name AS "locationName", warehouse_code AS "warehouseCode", warehouse_name AS "warehouseName"
+    </sql>
+
+
+    <select id="customList" resultType="cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.result.KanbanConfResult" parameterType="cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.params.KanbanConfParam">
+        select
+        <include refid="Base_Column_List"/>
+        from sys_kanban_conf where 1 = 1
+            <if test="paramCondition.ipAddress != null and paramCondition.ipAddress != ''">
+                and ip_address like CONCAT('%',#{paramCondition.ipAddress},'%')
+            </if>
+            <if test="paramCondition.lineCode != null and paramCondition.lineCode != ''">
+                and line_code like CONCAT('%',#{paramCondition.lineCode},'%')
+            </if>
+            <if test="paramCondition.locationCode != null and paramCondition.locationCode != ''">
+                and location_code like CONCAT('%',#{paramCondition.locationCode},'%')
+            </if>
+    </select>
+
+    <select id="customMapList" resultType="map" parameterType="cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.params.KanbanConfParam">
+        select
+        <include refid="Base_Column_List"/>
+        from sys_kanban_conf where 1 = 1
+            <if test="paramCondition.ipAddress != null and paramCondition.ipAddress != ''">
+                and ip_address like CONCAT('%',#{paramCondition.ipAddress},'%')
+            </if>
+            <if test="paramCondition.lineCode != null and paramCondition.lineCode != ''">
+                and line_code like CONCAT('%',#{paramCondition.lineCode},'%')
+            </if>
+            <if test="paramCondition.locationCode != null and paramCondition.locationCode != ''">
+                and location_code like CONCAT('%',#{paramCondition.locationCode},'%')
+            </if>
+    </select>
+
+    <select id="customPageList" resultType="cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.result.KanbanConfResult" parameterType="cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.params.KanbanConfParam">
+        select
+        <include refid="Base_Column_List"/>
+        from sys_kanban_conf where 1 = 1
+            <if test="paramCondition.ipAddress != null and paramCondition.ipAddress != ''">
+                and ip_address like CONCAT('%',#{paramCondition.ipAddress},'%')
+            </if>
+            <if test="paramCondition.lineCode != null and paramCondition.lineCode != ''">
+                and line_code like CONCAT('%',#{paramCondition.lineCode},'%')
+            </if>
+            <if test="paramCondition.locationCode != null and paramCondition.locationCode != ''">
+                and location_code like CONCAT('%',#{paramCondition.locationCode},'%')
+            </if>
+    </select>
+
+    <select id="customPageMapList" resultType="map" parameterType="cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.params.KanbanConfParam">
+        select
+        <include refid="Base_Column_List"/>
+        from sys_kanban_conf where 1 = 1
+            <if test="paramCondition.ipAddress != null and paramCondition.ipAddress != ''">
+                and ip_address like CONCAT('%',#{paramCondition.ipAddress},'%')
+            </if>
+            <if test="paramCondition.lineCode != null and paramCondition.lineCode != ''">
+                and line_code like CONCAT('%',#{paramCondition.lineCode},'%')
+            </if>
+            <if test="paramCondition.locationCode != null and paramCondition.locationCode != ''">
+                and location_code like CONCAT('%',#{paramCondition.locationCode},'%')
+            </if>
+    </select>
+
+</mapper>
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/model/params/KanbanConfParam.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/model/params/KanbanConfParam.java
new file mode 100644
index 0000000..f7a6d82
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/model/params/KanbanConfParam.java
@@ -0,0 +1,88 @@
+package cn.stylefeng.guns.modular.zsx.sys.kanbanConf.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-10-08
+ */
+@Data
+public class KanbanConfParam implements Serializable, BaseValidatingParam {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 椤甸潰缂栧彿
+     */
+    private String pageCode;
+
+    /**
+     * ip鍦板潃
+     */
+    private String ipAddress;
+
+    /**
+     * MAC鍦板潃
+     */
+    private String macAddress;
+
+    /**
+     * 杞﹂棿缂栧彿
+     */
+    private String workshopCode;
+
+    /**
+     * 杞﹂棿鍚嶇О
+     */
+    private String workshopName;
+
+    /**
+     * 浜х嚎缂栧彿
+     */
+    private String lineCode;
+
+    /**
+     * 浜х嚎鍚嶇О
+     */
+    private String lineName;
+
+    /**
+     * 宸ヤ綅缂栫爜
+     */
+    private String locationCode;
+
+    /**
+     * 宸ヤ綅鍚嶇О
+     */
+    private String locationName;
+
+    /**
+     * 浠撳簱缂栧彿
+     */
+    private String warehouseCode;
+
+    /**
+     * 浠撳簱鍚嶇О
+     */
+    private String warehouseName;
+
+    @Override
+    public String checkParam() {
+        return null;
+    }
+
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/model/result/KanbanConfResult.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/model/result/KanbanConfResult.java
new file mode 100644
index 0000000..c11928a
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/model/result/KanbanConfResult.java
@@ -0,0 +1,82 @@
+package cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.result;
+
+import lombok.Data;
+import java.util.Date;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 鐪嬫澘閰嶇疆
+ * </p>
+ *
+ * @author ruimin
+ * @since 2023-10-08
+ */
+@Data
+public class KanbanConfResult implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 椤甸潰缂栧彿
+     */
+    private String pageCode;
+
+    /**
+     * ip鍦板潃
+     */
+    private String ipAddress;
+
+    /**
+     * MAC鍦板潃
+     */
+    private String macAddress;
+
+    /**
+     * 杞﹂棿缂栧彿
+     */
+    private String workshopCode;
+
+    /**
+     * 杞﹂棿鍚嶇О
+     */
+    private String workshopName;
+
+    /**
+     * 浜х嚎缂栧彿
+     */
+    private String lineCode;
+
+    /**
+     * 浜х嚎鍚嶇О
+     */
+    private String lineName;
+
+    /**
+     * 宸ヤ綅缂栫爜
+     */
+    private String locationCode;
+
+    /**
+     * 宸ヤ綅鍚嶇О
+     */
+    private String locationName;
+
+    /**
+     * 浠撳簱缂栧彿
+     */
+    private String warehouseCode;
+
+    /**
+     * 浠撳簱鍚嶇О
+     */
+    private String warehouseName;
+
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/service/KanbanConfService.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/service/KanbanConfService.java
new file mode 100644
index 0000000..b1c1b99
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/service/KanbanConfService.java
@@ -0,0 +1,69 @@
+package cn.stylefeng.guns.modular.zsx.sys.kanbanConf.service;
+
+import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.entity.KanbanConf;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.params.KanbanConfParam;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.result.KanbanConfResult;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鐪嬫澘閰嶇疆 鏈嶅姟绫�
+ * </p>
+ *
+ * @author ruimin
+ * @since 2023-10-08
+ */
+public interface KanbanConfService extends IService<KanbanConf> {
+
+    /**
+     * 鏂板
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    void add(KanbanConfParam param);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    void delete(KanbanConfParam param);
+
+    /**
+     * 鏇存柊
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    void update(KanbanConfParam param);
+
+    /**
+     * 鏌ヨ鍗曟潯鏁版嵁锛孲pecification妯″紡
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    KanbanConfResult findBySpec(KanbanConfParam param);
+
+    /**
+     * 鏌ヨ鍒楄〃锛孲pecification妯″紡
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+    List<KanbanConfResult> findListBySpec(KanbanConfParam param);
+
+    /**
+     * 鏌ヨ鍒嗛〉鏁版嵁锛孲pecification妯″紡
+     *
+     * @author ruimin
+     * @Date 2023-10-08
+     */
+     LayuiPageInfo findPageBySpec(KanbanConfParam param);
+
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/service/impl/KanbanConfServiceImpl.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/service/impl/KanbanConfServiceImpl.java
new file mode 100644
index 0000000..946a142
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/zsx/sys/kanbanConf/service/impl/KanbanConfServiceImpl.java
@@ -0,0 +1,84 @@
+package cn.stylefeng.guns.modular.zsx.sys.kanbanConf.service.impl;
+
+import cn.stylefeng.guns.base.pojo.page.LayuiPageFactory;
+import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.entity.KanbanConf;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.mapper.KanbanConfMapper;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.params.KanbanConfParam;
+import cn.stylefeng.guns.modular.zsx.sys.kanbanConf.model.result.KanbanConfResult;
+import  cn.stylefeng.guns.modular.zsx.sys.kanbanConf.service.KanbanConfService;
+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-10-08
+ */
+@Service
+public class KanbanConfServiceImpl extends ServiceImpl<KanbanConfMapper, KanbanConf> implements KanbanConfService {
+
+    @Override
+    public void add(KanbanConfParam param){
+        KanbanConf entity = getEntity(param);
+        this.save(entity);
+    }
+
+    @Override
+    public void delete(KanbanConfParam param){
+        this.removeById(getKey(param));
+    }
+
+    @Override
+    public void update(KanbanConfParam param){
+        KanbanConf oldEntity = getOldEntity(param);
+        KanbanConf newEntity = getEntity(param);
+        ToolUtil.copyProperties(newEntity, oldEntity);
+        this.updateById(newEntity);
+    }
+
+    @Override
+    public KanbanConfResult findBySpec(KanbanConfParam param){
+        return null;
+    }
+
+    @Override
+    public List<KanbanConfResult> findListBySpec(KanbanConfParam param){
+        return null;
+    }
+
+    @Override
+    public LayuiPageInfo findPageBySpec(KanbanConfParam param){
+        Page pageContext = getPageContext();
+        IPage page = this.baseMapper.customPageList(pageContext, param);
+        return LayuiPageFactory.createPageInfo(page);
+    }
+
+    private Serializable getKey(KanbanConfParam param){
+        return param.getId();
+    }
+
+    private Page getPageContext() {
+        return LayuiPageFactory.defaultPage();
+    }
+
+    private KanbanConf getOldEntity(KanbanConfParam param) {
+        return this.getById(getKey(param));
+    }
+
+    private KanbanConf getEntity(KanbanConfParam param) {
+        KanbanConf entity = new KanbanConf();
+        ToolUtil.copyProperties(param, entity);
+        return entity;
+    }
+
+}
diff --git a/guns-vip-main/src/main/sqls/kanbanConf_menus.sql b/guns-vip-main/src/main/sqls/kanbanConf_menus.sql
new file mode 100644
index 0000000..ab8ab84
--- /dev/null
+++ b/guns-vip-main/src/main/sqls/kanbanConf_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 (1710918774504177666, 'KANBAN_CONF', '0', '[0],', '鐪嬫澘閰嶇疆', 'fa-star', '/kanbanConf', 999, 1, 'Y', '', 'ENABLE', '', '', 'BASE_SYSTEM', '2023-10-08 15:23:17', '2023-10-08 15:23:17', 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 (1710918774508371970, 'KANBAN_CONF_ADD', 'KANBAN_CONF', '[0],[KANBAN_CONF],', '鐪嬫澘閰嶇疆娣诲姞', 'fa-star', '', 999, 2, 'N', '', 'ENABLE', '', '', 'BASE_SYSTEM', '2023-10-08 15:23:17', '2023-10-08 15:23:17', 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 (1710918774508371971, 'KANBAN_CONF_EDIT', 'KANBAN_CONF', '[0],[KANBAN_CONF],', '鐪嬫澘閰嶇疆淇敼', 'fa-star', '', 999, 2, 'N', '', 'ENABLE', '', '', 'BASE_SYSTEM', '2023-10-08 15:23:17', '2023-10-08 15:23:17', 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 (1710918774508371972, 'KANBAN_CONF_DELETE', 'KANBAN_CONF', '[0],[KANBAN_CONF],', '鐪嬫澘閰嶇疆鍒犻櫎', 'fa-star', '', 999, 2, 'N', '', 'ENABLE', '', '', 'BASE_SYSTEM', '2023-10-08 15:23:17', '2023-10-08 15:23:17', 1, 1);
diff --git a/guns-vip-main/src/main/webapp/assets/modular/kb/formula/formulaView.js b/guns-vip-main/src/main/webapp/assets/modular/kb/formula/formulaView.js
new file mode 100644
index 0000000..f95701e
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/assets/modular/kb/formula/formulaView.js
@@ -0,0 +1,95 @@
+layui.use(['form', 'table', 'admin', 'ax', 'func','element'], function () {
+    var $ = layui.$;
+    var table = layui.table;
+    var $ax = layui.ax;
+    var admin = layui.admin;
+    var func = layui.func;
+    var form = layui.form;
+    var element = layui.element;
+
+    initLineInfo();
+
+    var ajax = new $ax(Feng.ctxPath + "/workOrder/list?state=3");
+    var result = ajax.start();
+    let msg = result.data[0];
+    $('#workOrder').text(msg.workOrderCode);
+    $('#salesOrderCode').text(msg.salesOrderCode);
+    $('#productCode').text(msg.productCode);
+    $('#productName').text(msg.productName);
+    $('#planQty').text(msg.planQty);
+    $('#planStartTime').text(msg.planStartTime);
+    $('#planEndTime').text(msg.planEndTime);
+    var radioElement = $('#sex1');
+
+    function initLineInfo(){
+        $.ajax({
+            type: "POST",
+            contentType: "application/json;charset=UTF-8",
+            url: Feng.ctxPath + '/lineInfo/list',
+            success: function (result) {
+                var initIpConf = new $ax(Feng.ctxPath + "/kanbanConf/initIpConf");
+                var initResult = initIpConf.start();
+
+                $('#lineCode').append(new Option("璇烽�夋嫨浜х嚎", ""));// 涓嬫媺鑿滃崟閲屾坊鍔犲厓绱�
+                $.each(result.data, function (index, value) {
+                    $('#lineCode').append(new Option(value.lineCode));// 涓嬫媺鑿滃崟閲屾坊鍔犲厓绱�
+                });
+                if(initResult.data!==""){
+                    $('#lineCode').val(initResult.data.lineCode);// 涓嬫媺鑿滃崟閲屾坊鍔犲厓绱�
+                    $('#locationCode').append(new Option(initResult.data.locationCode));// 涓嬫媺鑿滃崟閲屾坊鍔犲厓绱�
+                }
+                layui.form.render("select");//閲嶆柊娓叉煋 鍥哄畾鍐欐硶
+            },
+        });
+    }
+
+    form.on("select", function (data) {
+        switch(data.elem.id){
+            case 'lineCode':
+                console.log(data.value);
+                if(data.value === ""){
+                    $('#locationCode').empty();
+                    layui.form.render("select");//閲嶆柊娓叉煋 鍥哄畾鍐欐硶
+                }else {
+                    $.ajax({
+                        type: "POST",
+                        contentType: "application/json;charset=UTF-8",
+                        url: Feng.ctxPath + '/locationInfo/list?productionLineCode='+data.value,
+                        success: function (result) {
+                            $('#locationCode').empty();
+                            $('#locationCode').append(new Option("璇烽�夋嫨宸ヤ綅", ""));// 涓嬫媺鑿滃崟閲屾坊鍔犲厓绱�
+
+                            $.each(result.data, function (index, value) {
+                                $('#locationCode').append(new Option(value.locationCode));// 涓嬫媺鑿滃崟閲屾坊鍔犲厓绱�
+                            });
+                            layui.form.render("select");//閲嶆柊娓叉煋 鍥哄畾鍐欐硶
+                        },
+                    });
+                }
+                break;
+            case 'locationCode':
+                console.log($('#locationCode').val());
+                console.log($('#lineCode').val());
+                var getIp = new $ax(Feng.ctxPath + "/kanbanConf/ipSetting?lineCode="+$('#lineCode').val()+"&locationCode="+$('#locationCode').val());
+                var result = getIp.start();
+                Feng.info("鏇存柊瀹屾垚!")
+                break;
+        }
+    });
+
+    setInterval(function() {
+        $('input[name="sex1"][value="nan1"]').prop('checked', true);
+    }, 1000);
+    setInterval(function() {
+        radioElement.prop('checked', false);
+    }, 2000);
+
+    //Hash鍦板潃鐨勫畾浣�
+    var layid = location.hash.replace(/^#test=/, '');
+    element.tabChange('test', layid);
+
+    element.on('tab(test)', function(elem){
+        location.hash = 'test='+ $(this).attr('lay-id');
+    });
+
+});
diff --git a/guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf.js b/guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf.js
new file mode 100644
index 0000000..6079ac4
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf.js
@@ -0,0 +1,137 @@
+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 KanbanConf = {
+        tableId: "kanbanConfTable"
+    };
+
+    /**
+     * 鍒濆鍖栬〃鏍肩殑鍒�
+     */
+    KanbanConf.initColumn = function () {
+        return [[
+            {type: 'checkbox'},
+            {field: 'id', hide: true, title: 'ID'},
+            // {field: 'pageCode', sort: true, title: '椤甸潰缂栧彿'},
+            {field: 'ipAddress', sort: true, title: 'ip鍦板潃'},
+            // {field: 'macAddress', sort: true, title: 'MAC鍦板潃'},
+            // {field: 'workshopCode', sort: true, title: '杞﹂棿缂栧彿'},
+            // {field: 'workshopName', sort: true, title: '杞﹂棿鍚嶇О'},
+            {field: 'lineCode', sort: true, title: '浜х嚎缂栧彿'},
+            {field: 'lineName', sort: true, title: '浜х嚎鍚嶇О'},
+            {field: 'locationCode', sort: true, title: '宸ヤ綅缂栫爜'},
+            {field: 'locationName', sort: true, title: '宸ヤ綅鍚嶇О'},
+            // {field: 'warehouseCode', sort: true, title: '浠撳簱缂栧彿'},
+            // {field: 'warehouseName', sort: true, title: '浠撳簱鍚嶇О'},
+            {fixed: 'right',width: 125, minWidth: 125, align: 'center', toolbar: '#tableBar', title: '鎿嶄綔'}
+        ]];
+    };
+
+    /**
+     * 鐐瑰嚮鏌ヨ鎸夐挳
+     */
+    KanbanConf.search = function () {
+        var queryData = {};
+
+        queryData['ipAddress'] = $('#ipAddress').val();
+        queryData['lineCode'] = $('#lineCode').val();
+        queryData['locationCode'] = $('#locationCode').val();
+
+        table.reload(KanbanConf.tableId, {
+            where: queryData, page: {curr: 1}
+        });
+    };
+
+    /**
+     * 璺宠浆鍒版坊鍔犻〉闈�
+     */
+    KanbanConf.jumpAddPage = function () {
+        window.location.href = Feng.ctxPath + '/kanbanConf/add'
+    };
+
+    /**
+    * 璺宠浆鍒扮紪杈戦〉闈�
+    *
+    * @param data 鐐瑰嚮鎸夐挳鏃跺�欑殑琛屾暟鎹�
+    */
+    KanbanConf.jumpEditPage = function (data) {
+        window.location.href = Feng.ctxPath + '/kanbanConf/edit?id=' + data.id
+    };
+
+    /**
+     * 瀵煎嚭excel鎸夐挳
+     */
+    KanbanConf.exportExcel = function () {
+        var checkRows = table.checkStatus(KanbanConf.tableId);
+        if (checkRows.data.length === 0) {
+            Feng.error("璇烽�夋嫨瑕佸鍑虹殑鏁版嵁");
+        } else {
+            table.exportFile(tableResult.config.id, checkRows.data, 'xls');
+        }
+    };
+
+    /**
+     * 鐐瑰嚮鍒犻櫎
+     *
+     * @param data 鐐瑰嚮鎸夐挳鏃跺�欑殑琛屾暟鎹�
+     */
+    KanbanConf.onDeleteItem = function (data) {
+        var operation = function () {
+            var ajax = new $ax(Feng.ctxPath + "/kanbanConf/delete", function (data) {
+                Feng.success("鍒犻櫎鎴愬姛!");
+                table.reload(KanbanConf.tableId);
+            }, function (data) {
+                Feng.error("鍒犻櫎澶辫触!" + data.responseJSON.message + "!");
+            });
+            ajax.set("id", data.id);
+            ajax.start();
+        };
+        Feng.confirm("鏄惁鍒犻櫎?", operation);
+    };
+
+    // 娓叉煋琛ㄦ牸
+    var tableResult = table.render({
+        elem: '#' + KanbanConf.tableId,
+        url: Feng.ctxPath + '/kanbanConf/list',
+        page: true,
+        height: "full-158",
+        cellMinWidth: 100,
+        cols: KanbanConf.initColumn()
+    });
+
+    // 鎼滅储鎸夐挳鐐瑰嚮浜嬩欢
+    $('#btnSearch').click(function () {
+        KanbanConf.search();
+    });
+
+    // 娣诲姞鎸夐挳鐐瑰嚮浜嬩欢
+    $('#btnAdd').click(function () {
+
+    KanbanConf.jumpAddPage();
+
+    });
+
+    // 瀵煎嚭excel
+    $('#btnExp').click(function () {
+        KanbanConf.exportExcel();
+    });
+
+    // 宸ュ叿鏉$偣鍑讳簨浠�
+    table.on('tool(' + KanbanConf.tableId + ')', function (obj) {
+        var data = obj.data;
+        var layEvent = obj.event;
+
+        if (layEvent === 'edit') {
+            KanbanConf.jumpEditPage(data);
+        } else if (layEvent === 'delete') {
+            KanbanConf.onDeleteItem(data);
+        }
+    });
+});
diff --git a/guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf_add.js b/guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf_add.js
new file mode 100644
index 0000000..797f865
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf_add.js
@@ -0,0 +1,79 @@
+/**
+ * 娣诲姞鎴栬�呬慨鏀归〉闈�
+ */
+var KanbanConfInfoDlg = {
+    data: {
+        id: "",
+        pageCode: "",
+        ipAddress: "",
+        macAddress: "",
+        workshopCode: "",
+        workshopName: "",
+        lineCode: "",
+        lineName: "",
+        locationCode: "",
+        locationName: "",
+        warehouseCode: "",
+        warehouseName: ""
+    }
+};
+
+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 + "/kanbanConf/addItem", function (data) {
+            Feng.success("娣诲姞鎴愬姛锛�");
+            window.location.href = Feng.ctxPath + '/kanbanConf'
+        }, function (data) {
+            Feng.error("娣诲姞澶辫触锛�" + data.responseJSON.message)
+        });
+        ajax.set(data.field);
+        ajax.start();
+
+        return false;
+    });
+
+    $('#cancel').click(function(){
+        window.location.href = Feng.ctxPath + '/kanbanConf'
+    });
+
+});
\ No newline at end of file
diff --git a/guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf_edit.js b/guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf_edit.js
new file mode 100644
index 0000000..73aabd9
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/assets/modular/sys/kanbanConf/kanbanConf_edit.js
@@ -0,0 +1,83 @@
+/**
+ * 璇︽儏瀵硅瘽妗�
+ */
+var KanbanConfInfoDlg = {
+    data: {
+        id: "",
+        pageCode: "",
+        ipAddress: "",
+        macAddress: "",
+        workshopCode: "",
+        workshopName: "",
+        lineCode: "",
+        lineName: "",
+        locationCode: "",
+        locationName: "",
+        warehouseCode: "",
+        warehouseName: ""
+    }
+};
+
+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 + "/kanbanConf/detail?id=" + Feng.getUrlParam("id"));
+    var result = ajax.start();
+    form.val('kanbanConfForm', result.data);
+
+    //琛ㄥ崟鎻愪氦浜嬩欢
+    form.on('submit(btnSubmit)', function (data) {
+        var ajax = new $ax(Feng.ctxPath + "/kanbanConf/editItem", function (data) {
+            Feng.success("鏇存柊鎴愬姛锛�");
+            window.location.href = Feng.ctxPath + '/kanbanConf'
+        }, function (data) {
+            Feng.error("鏇存柊澶辫触锛�" + data.responseJSON.message)
+        });
+        ajax.set(data.field);
+        ajax.start();
+
+        return false;
+    });
+
+    $('#cancel').click(function(){
+        window.location.href = Feng.ctxPath + '/kanbanConf'
+    });
+});
\ No newline at end of file
diff --git a/guns-vip-main/src/main/webapp/pages/modular/kb/formula/formulaView.html b/guns-vip-main/src/main/webapp/pages/modular/kb/formula/formulaView.html
new file mode 100644
index 0000000..302bbf5
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/pages/modular/kb/formula/formulaView.html
@@ -0,0 +1,139 @@
+@layout("/common/_container.html",{js:["/assets/modular/kb/formula/formulaView.js"]}){
+
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+        <div class="layui-col-sm3 layui-col-md3 layui-col-lg3">
+            <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">
+                    <form class="layui-form" action="">
+                        <div class="layui-form-item">
+                            <div class="layui-col-md12">
+                                <div class="layui-inline">
+                                    浜� 绾� 缂� 鍙�:
+                                </div>
+                                <div class="layui-inline">
+                                    <select id="lineCode" lay-verify="lineCode">
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="layui-col-md12">
+                                <div class="layui-inline">
+                                    宸� 浣� 缂� 鐮�:
+                                </div>
+                                <div class="layui-inline">
+                                    <select id="locationCode" lay-verify="locationCode">
+                                    </select>
+                                </div>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+            <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">
+                    <div class="orderInfo">
+                        <span>宸ュ崟缂栧彿</span>
+                        <span class="mySpan" style="float: right" id="workOrder"></span>
+                    </div>
+                    <div class="orderInfo">
+                        <span>璁㈠崟缂栧彿</span>
+                        <span class="mySpan" style="float: right" id="salesOrderCode"></span>
+                    </div>
+                    <div class="orderInfo">
+                        <span>浜у搧缂栧彿</span>
+                        <span class="mySpan" style="float: right" id="productCode"></span>
+                    </div>
+                    <div class="orderInfo">
+                        <span>浜у搧鍚嶇О</span>
+                        <span class="mySpan" style="float: right" id="productName"></span>
+                    </div>
+                    <div class="orderInfo">
+                        <span>璁″垝鏁伴噺</span>
+                        <span class="mySpan" style="float: right" id="planQty"></span>
+                    </div>
+                    <div class="orderInfo">
+                        <span>璁″垝寮�濮嬫椂闂�</span>
+                        <span class="mySpan" style="float: right" id="planStartTime"></span>
+                    </div>
+                    <div class="orderInfo">
+                        <span>璁″垝缁撴潫鏃堕棿</span>
+                        <span class="mySpan" style="float: right" id="planEndTime"></span>
+                    </div>
+                    <hr class="layui-border-orange">
+<!--                    <span>PLC浜や簰鐐�</span>-->
+                    <div class="container">
+                        <input type="radio" id="sex1" name="sex1" value="nan1" title="鐢�">
+                        <span>绯荤粺灏辩华</span>
+                        <input style="margin-left: 150px" type="radio" name="sex" value="nan" title="鐢�">
+                        <span>宸ヤ欢鍒颁綅</span>
+                    </div>
+                    <div class="container">
+                        <input type="radio" name="sex" value="nan" title="鐢�">
+                        <span>璇诲彇鏉$爜</span>
+                        <input style="margin-left: 150px" type="radio" name="sex" value="nan" title="鐢�">
+                        <span>涓嬪彂鏈哄瀷</span>
+                    </div>
+                    <div class="container">
+                        <input type="radio" name="sex" value="nan" title="鐢�">
+                        <span>鍏佽鍚姩</span>
+                        <input style="margin-left: 150px" type="radio" name="sex" value="nan" title="鐢�">
+                        <span>涓嶅厑璁稿惎鍔�</span>
+                    </div>
+                    <div class="container">
+                        <input type="radio" name="sex" value="nan" title="鐢�">
+                        <span>鍚堟牸瀹屾垚</span>
+                        <input style="margin-left: 150px" type="radio" name="sex" value="nan" title="鐢�">
+                        <span>涓嶅悎鏍煎畬鎴�</span>
+                    </div>
+                    <div class="container">
+                        <input type="radio" name="sex" value="nan" title="鐢�">
+                        <span>淇濆瓨瀹屾垚</span>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="layui-col-sm9 layui-col-md9 layui-col-lg9">
+            <div class="layui-card" style="height: 577px">
+                <div class="layui-card-header" style="font-weight: bold">
+                    <i class="layui-icon layui-icon-rate-solid"></i>鎿嶄綔鏍�
+                </div>
+                <div class="layui-card-body">
+                    <div class="layui-tab" lay-filter="test">
+                        <ul class="layui-tab-title">
+                            <li class="layui-this" lay-id="11">棣栭〉</li>
+                            <li lay-id="22">宸ュ簭鐘舵��</li>
+                            <li lay-id="33">瑁呴厤閲囬泦娓呭崟</li>
+                            <li lay-id="44">宸ヨ壓鍙傛暟</li>
+                            <li lay-id="55">涓嶅悎鏍艰川閲忔暟鎹�</li>
+                        </ul>
+                        <div class="layui-tab-content">
+                            <div class="layui-tab-item layui-show">
+                                鐐瑰嚮璇ab鐨勪换涓�鏍囬锛岃瀵熷湴鍧�鏍忓彉鍖栵紝鍐嶅埛鏂伴〉闈€�傞�夐」鍗″皢浼氳嚜鍔ㄥ畾浣嶅埌涓婁竴娆″垏鎹㈢殑椤�
+                            </div>
+                            <div class="layui-tab-item">鍐呭2</div>
+                            <div class="layui-tab-item">鍐呭3</div>
+                            <div class="layui-tab-item">鍐呭4</div>
+                            <div class="layui-tab-item">鍐呭5</div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<style>
+    .orderInfo {
+        margin-bottom: 5px;  /* 璁剧疆鎹㈣鍚庣殑涓嬭竟璺� */
+    }
+    .container {
+        display: flex; /* 浣跨敤 Flex 甯冨眬 */
+        align-items: center; /* 灏嗗瓙鍏冪礌鍨傜洿灞呬腑瀵归綈 */
+    }
+</style>
+@}
\ No newline at end of file
diff --git a/guns-vip-main/src/main/webapp/pages/modular/sys/kanbanConf/kanbanConf.html b/guns-vip-main/src/main/webapp/pages/modular/sys/kanbanConf/kanbanConf.html
new file mode 100644
index 0000000..9ba1067
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/pages/modular/sys/kanbanConf/kanbanConf.html
@@ -0,0 +1,41 @@
+@layout("/common/_container.html",{js:["/assets/modular/sys/kanbanConf/kanbanConf.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">
+                                <input id="ipAddress" class="layui-input" type="text" placeholder="ip鍦板潃"/>
+                            </div>
+                            <div class="layui-inline">
+                                <input id="lineCode" class="layui-input" type="text" placeholder="浜х嚎缂栧彿"/>
+                            </div>
+                            <div class="layui-inline">
+                                <input id="locationCode" class="layui-input" type="text" placeholder="宸ヤ綅缂栫爜"/>
+                            </div>
+                            <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="kanbanConfTable" lay-filter="kanbanConfTable"></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/sys/kanbanConf/kanbanConf_add.html b/guns-vip-main/src/main/webapp/pages/modular/sys/kanbanConf/kanbanConf_add.html
new file mode 100644
index 0000000..c5b80c2
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/pages/modular/sys/kanbanConf/kanbanConf_add.html
@@ -0,0 +1,88 @@
+@layout("/common/_form.html",{js:["/assets/modular/sys/kanbanConf/kanbanConf_add.js"],css:["/assets/expand/module/formSelects/formSelects-v4.css"]}){
+
+<form class="layui-form" id="kanbanConfForm" lay-filter="kanbanConfForm">
+    <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="pageCode" name="pageCode" placeholder="璇疯緭鍏ラ〉闈㈢紪鍙�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">ip鍦板潃<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="ipAddress" name="ipAddress" placeholder="璇疯緭鍏p鍦板潃" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">MAC鍦板潃<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="macAddress" name="macAddress" placeholder="璇疯緭鍏AC鍦板潃" 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="workshopCode" name="workshopCode" 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="workshopName" name="workshopName" 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="lineCode" name="lineCode" 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="lineName" name="lineName" 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="locationName" name="locationName" 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="warehouseCode" name="warehouseCode" 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="warehouseName" name="warehouseName" placeholder="璇疯緭鍏ヤ粨搴撳悕绉�" 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/sys/kanbanConf/kanbanConf_edit.html b/guns-vip-main/src/main/webapp/pages/modular/sys/kanbanConf/kanbanConf_edit.html
new file mode 100644
index 0000000..7fec7d3
--- /dev/null
+++ b/guns-vip-main/src/main/webapp/pages/modular/sys/kanbanConf/kanbanConf_edit.html
@@ -0,0 +1,88 @@
+@layout("/common/_form.html",{js:["/assets/modular/sys/kanbanConf/kanbanConf_edit.js"]}){
+
+<form class="layui-form" id="kanbanConfForm" lay-filter="kanbanConfForm">
+    <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="pageCode" name="pageCode" placeholder="璇疯緭鍏ラ〉闈㈢紪鍙�" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">ip鍦板潃<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="ipAddress" name="ipAddress" placeholder="璇疯緭鍏p鍦板潃" type="text" class="layui-input" lay-verify="required" required/>
+                        </div>
+                    </div>
+                    <div class="layui-inline layui-col-md12">
+                        <label class="layui-form-label">MAC鍦板潃<span style="color: red;">*</span></label>
+                        <div class="layui-input-block">
+                            <input id="macAddress" name="macAddress" placeholder="璇疯緭鍏AC鍦板潃" 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="workshopCode" name="workshopCode" 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="workshopName" name="workshopName" 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="lineCode" name="lineCode" 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="lineName" name="lineName" 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="locationName" name="locationName" 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="warehouseCode" name="warehouseCode" 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="warehouseName" name="warehouseName" placeholder="璇疯緭鍏ヤ粨搴撳悕绉�" 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

--
Gitblit v1.9.3