中扬CRM客户关系管理系统
LSH
2023-09-09 3761229f2141027f5982c8c0d574d4186565bf57
#项目管理添加产品类型
8个文件已添加
4个文件已修改
775 ■■■■■ 已修改文件
src/main/java/com/zy/crm/manager/controller/OrderProductTypeController.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/entity/Order.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/entity/OrderProductType.java 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/mapper/OrderProductTypeMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/service/OrderProductTypeService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/service/impl/OrderProductTypeServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderProductTypeMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderProductType/orderProductType.js 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/order.html 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/orderProductType/orderProductType.html 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/controller/OrderProductTypeController.java
New file
@@ -0,0 +1,125 @@
package com.zy.crm.manager.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.zy.crm.common.web.BaseController;
import com.zy.crm.manager.entity.OrderProductType;
import com.zy.crm.manager.service.OrderProductTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
public class OrderProductTypeController extends BaseController {
    @Autowired
    private OrderProductTypeService orderProductTypeService;
    @RequestMapping(value = "/orderProductType/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(orderProductTypeService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/orderProductType/list/auth")
    @ManagerAuth
    public R list(@RequestParam(defaultValue = "1")Integer curr,
                  @RequestParam(defaultValue = "10")Integer limit,
                  @RequestParam(required = false)String orderByField,
                  @RequestParam(required = false)String orderByType,
                  @RequestParam Map<String, Object> param){
        EntityWrapper<OrderProductType> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        return R.ok(orderProductTypeService.selectPage(new Page<>(curr, limit), wrapper));
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
        for (Map.Entry<String, Object> entry : map.entrySet()){
            String val = String.valueOf(entry.getValue());
            if (val.contains(RANGE_TIME_LINK)){
                String[] dates = val.split(RANGE_TIME_LINK);
                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
            } else {
                wrapper.like(entry.getKey(), val);
            }
        }
    }
    @RequestMapping(value = "/orderProductType/add/auth")
    @ManagerAuth
    public R add(OrderProductType orderProductType) {
        orderProductTypeService.insert(orderProductType);
        return R.ok();
    }
    @RequestMapping(value = "/orderProductType/update/auth")
    @ManagerAuth
    public R update(OrderProductType orderProductType){
        if (Cools.isEmpty(orderProductType) || null==orderProductType.getId()){
            return R.error();
        }
        orderProductTypeService.updateById(orderProductType);
        return R.ok();
    }
    @RequestMapping(value = "/orderProductType/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            orderProductTypeService.deleteById(id);
        }
        return R.ok();
    }
    @RequestMapping(value = "/orderProductType/export/auth")
    @ManagerAuth
    public R export(@RequestBody JSONObject param){
        EntityWrapper<OrderProductType> wrapper = new EntityWrapper<>();
        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
        Map<String, Object> map = excludeTrash(param.getJSONObject("orderProductType"));
        convert(map, wrapper);
        List<OrderProductType> list = orderProductTypeService.selectList(wrapper);
        return R.ok(exportSupport(list, fields));
    }
    @RequestMapping(value = "/orderProductTypeQuery/auth")
    @ManagerAuth
    public R query(String condition) {
        EntityWrapper<OrderProductType> wrapper = new EntityWrapper<>();
        wrapper.like("name", condition);
        Page<OrderProductType> page = orderProductTypeService.selectPage(new Page<>(0, 10), wrapper);
        List<Map<String, Object>> result = new ArrayList<>();
        for (OrderProductType orderProductType : page.getRecords()){
            Map<String, Object> map = new HashMap<>();
            map.put("id", orderProductType.getId());
            map.put("value", orderProductType.getName());
            result.add(map);
        }
        return R.ok(result);
    }
    @RequestMapping(value = "/orderProductType/check/column/auth")
    @ManagerAuth
    public R query(@RequestBody JSONObject param) {
        Wrapper<OrderProductType> wrapper = new EntityWrapper<OrderProductType>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
        if (null != orderProductTypeService.selectOne(wrapper)){
            return R.parse(BaseRes.REPEAT).add(getComment(OrderProductType.class, String.valueOf(param.get("key"))));
        }
        return R.ok();
    }
}
src/main/java/com/zy/crm/manager/entity/Order.java
@@ -8,6 +8,7 @@
import com.core.common.SpringUtils;
import com.zy.crm.manager.service.CompanyService;
import com.zy.crm.manager.service.CstmrService;
import com.zy.crm.manager.service.OrderProductTypeService;
import com.zy.crm.system.entity.Dept;
import com.zy.crm.system.entity.Dic;
import com.zy.crm.system.entity.Host;
@@ -190,9 +191,16 @@
    @ApiModelProperty(value= "预计成交率")
    private String transactionRate;
    /**
     * 添加人员
     */
    @ApiModelProperty(value= "产品类型")
    @TableField("order_product_type_id")
    private Long orderProductTypeId;
    public Order() {}
    public Order(Long id, Long hostId, Long deptId, Long userId, Long cstmrId, String uuid, String name, Double money, Long company, String remarks, Long director, String province, String city, String district, String town, String addr, String files, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, int step, String memo, String transactionRate, String pcd) {
    public Order(Long id, Long hostId, Long deptId, Long userId, Long cstmrId, String uuid, String name, Double money, Long company, String remarks, Long director, String province, String city, String district, String town, String addr, String files, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, int step, String memo, String transactionRate, String pcd,Long orderProductTypeId) {
        this.id = id;
        this.hostId = hostId;
        this.deptId = deptId;
@@ -219,6 +227,7 @@
        this.memo = memo;
        this.transactionRate = transactionRate;
        this.pcd = pcd;
        this.orderProductTypeId = orderProductTypeId;
    }
//    Order order = new Order(
@@ -255,6 +264,15 @@
        return null;
    }
    public String getOrderProductTypeId$(){
        OrderProductTypeService orderProductTypeService = SpringUtils.getBean(OrderProductTypeService.class);
        OrderProductType orderProductType = orderProductTypeService.selectById(this.orderProductTypeId);
        if (!Cools.isEmpty(orderProductType)){
            return String.valueOf(orderProductType.getName());
        }
        return null;
    }
    public String getDeptId$(){
        DeptService service = SpringUtils.getBean(DeptService.class);
        Dept dept = service.selectById(this.deptId);
src/main/java/com/zy/crm/manager/entity/OrderProductType.java
New file
@@ -0,0 +1,187 @@
package com.zy.crm.manager.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.crm.system.entity.Host;
import com.zy.crm.system.entity.User;
import com.zy.crm.system.service.HostService;
import com.zy.crm.system.service.UserService;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
@Data
@TableName("man_order_product_type")
public class OrderProductType implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ID
     */
    @ApiModelProperty(value= "ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 所属商户
     */
    @ApiModelProperty(value= "所属商户")
    @TableField("host_id")
    private Long hostId;
    /**
     * 名称
     */
    @ApiModelProperty(value= "名称")
    private String name;
    /**
     * 区分 1: 货架  2: 集成
     */
    @ApiModelProperty(value= "区分 1: 货架  2: 集成  ")
    private Integer type;
    /**
     * 状态 1: 正常  0: 禁用
     */
    @ApiModelProperty(value= "状态 1: 正常  0: 禁用  ")
    private Integer status;
    /**
     * 添加人员
     */
    @ApiModelProperty(value= "添加人员")
    @TableField("create_by")
    private Long createBy;
    /**
     * 添加时间
     */
    @ApiModelProperty(value= "添加时间")
    @TableField("create_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 修改人员
     */
    @ApiModelProperty(value= "修改人员")
    @TableField("update_by")
    private Long updateBy;
    /**
     * 修改时间
     */
    @ApiModelProperty(value= "修改时间")
    @TableField("update_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 备注
     */
    @ApiModelProperty(value= "备注")
    private String memo;
    public OrderProductType() {}
    public OrderProductType(Long hostId,String name,Integer type,Integer status,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
        this.hostId = hostId;
        this.name = name;
        this.type = type;
        this.status = status;
        this.createBy = createBy;
        this.createTime = createTime;
        this.updateBy = updateBy;
        this.updateTime = updateTime;
        this.memo = memo;
    }
//    OrderProductType orderProductType = new OrderProductType(
//            null,    // 所属商户
//            null,    // 名称[非空]
//            null,    // 区分
//            null,    // 状态
//            null,    // 添加人员
//            null,    // 添加时间
//            null,    // 修改人员
//            null,    // 修改时间
//            null    // 备注
//    );
    public String getHostId$(){
        HostService service = SpringUtils.getBean(HostService.class);
        Host host = service.selectById(this.hostId);
        if (!Cools.isEmpty(host)){
            return String.valueOf(host.getName());
        }
        return null;
    }
    public String getType$(){
        if (null == this.type){ return null; }
        switch (this.type){
            case 1:
                return "货架";
            case 2:
                return "集成";
            default:
                return String.valueOf(this.type);
        }
    }
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
            case 1:
                return "正常";
            case 0:
                return "禁用";
            default:
                return String.valueOf(this.status);
        }
    }
    public String getCreateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.createBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
    public String getUpdateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.updateBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getUpdateTime$(){
        if (Cools.isEmpty(this.updateTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
    }
}
src/main/java/com/zy/crm/manager/mapper/OrderProductTypeMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.crm.manager.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.crm.manager.entity.OrderProductType;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface OrderProductTypeMapper extends BaseMapper<OrderProductType> {
}
src/main/java/com/zy/crm/manager/service/OrderProductTypeService.java
New file
@@ -0,0 +1,8 @@
package com.zy.crm.manager.service;
import com.baomidou.mybatisplus.service.IService;
import com.zy.crm.manager.entity.OrderProductType;
public interface OrderProductTypeService extends IService<OrderProductType> {
}
src/main/java/com/zy/crm/manager/service/impl/OrderProductTypeServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.crm.manager.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.crm.manager.entity.OrderProductType;
import com.zy.crm.manager.mapper.OrderProductTypeMapper;
import com.zy.crm.manager.service.OrderProductTypeService;
import org.springframework.stereotype.Service;
@Service("orderProductTypeService")
public class OrderProductTypeServiceImpl extends ServiceImpl<OrderProductTypeMapper, OrderProductType> implements OrderProductTypeService {
}
src/main/resources/mapper/OrderMapper.xml
@@ -28,6 +28,7 @@
        <result column="update_time" property="updateTime" />
        <result column="memo" property="memo" />
        <result column="transaction_rate" property="transactionRate" />
        <result column="order_product_type_id" property="orderProductTypeId" />
    </resultMap>
src/main/resources/mapper/OrderProductTypeMapper.xml
New file
@@ -0,0 +1,20 @@
<?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="com.zy.crm.manager.mapper.OrderProductTypeMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.crm.manager.entity.OrderProductType">
        <id column="id" property="id" />
        <result column="host_id" property="hostId" />
        <result column="name" property="name" />
        <result column="type" property="type" />
        <result column="status" property="status" />
        <result column="create_by" property="createBy" />
        <result column="create_time" property="createTime" />
        <result column="update_by" property="updateBy" />
        <result column="update_time" property="updateTime" />
        <result column="memo" property="memo" />
    </resultMap>
</mapper>
src/main/webapp/static/js/order/order.js
@@ -151,6 +151,7 @@
            ,{field: 'remarks', align: 'left',title: '备注', templet:function(d){return emptyShow(d.remarks)}}
            ,{field: 'createTime$', align: 'left',title: '添加时间'}
            ,{field: 'company$', align: 'left',title: '所属公司', hide: true}
            ,{field: 'orderProductTypeId$', align: 'left',title: '产品类型', hide: false}
            ,{field: 'province', align: 'left',title: '省', hide: true}
            ,{field: 'city', align: 'left',title: '市', hide: true}
            ,{field: 'district', align: 'left',title: '县', hide: true}
src/main/webapp/static/js/orderProductType/orderProductType.js
New file
@@ -0,0 +1,258 @@
var pageCurr;
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).use(['table','laydate', 'form', 'admin'], function(){
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var admin = layui.admin;
    // 数据渲染
    tableIns = table.render({
        elem: '#orderProductType',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/orderProductType/list/auth',
        page: true,
        limit: 15,
        limits: [15, 30, 50, 100, 200, 500],
        toolbar: '#toolbar',
        cellMinWidth: 50,
        height: 'full-120',
        cols: [[
            // {type: 'checkbox'},
            {field: 'id', align: 'center',title: 'ID',hide : true}
            ,{field: 'name', align: 'center',title: '名称'}
            ,{field: 'type$', align: 'center',title: '区分'}
            ,{field: 'status$', align: 'center',title: '状态'}
            ,{field: 'createBy$', align: 'center',title: '添加人员'}
            ,{field: 'createTime$', align: 'center',title: '添加时间'}
            ,{field: 'updateBy$', align: 'center',title: '修改人员'}
            ,{field: 'updateTime$', align: 'center',title: '修改时间'}
            ,{field: 'memo', align: 'center',title: '备注'}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120}
        ]],
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        parseData: function (res) {
            return {
                'code': res.code,
                'msg': res.msg,
                'count': res.data.total,
                'data': res.data.records
            }
        },
        response: {
            statusCode: 200
        },
        done: function(res, curr, count) {
            if (res.code === 403) {
                top.location.href = baseUrl+"/";
            }
            pageCurr=curr;
            limit();
        }
    });
    // 监听排序事件
    table.on('sort(orderProductType)', function (obj) {
        var searchData = {};
        $.each($('#search-box [name]').serializeArray(), function() {
            searchData[this.name] = this.value;
        });
        searchData['orderByField'] = obj.field;
        searchData['orderByType'] = obj.type;
        tableIns.reload({
            where: searchData,
            page: {curr: 1}
        });
    });
    // 监听头工具栏事件
    table.on('toolbar(orderProductType)', function (obj) {
        var checkStatus = table.checkStatus(obj.config.id).data;
        switch(obj.event) {
            case 'addData':
                showEditModel();
                break;
            case 'deleteData':
               if (checkStatus.length === 0) {
                   layer.msg('请选择要删除的数据', {icon: 2});
                   return;
               }
               del(checkStatus.map(function (d) {
                   return d.id;
               }));
               break;
            case 'exportData':
                admin.confirm('确定导出Excel吗', {shadeClose: true}, function(){
                    var titles=[];
                    var fields=[];
                    obj.config.cols[0].map(function (col) {
                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
                            titles.push(col.title);
                            fields.push(col.field);
                        }
                    });
                    var exportData = {};
                    $.each($('#search-box [name]').serializeArray(), function() {
                        exportData[this.name] = this.value;
                    });
                    var param = {
                        'orderProductType': exportData,
                        'fields': fields
                    };
                    $.ajax({
                        url: baseUrl+"/orderProductType/export/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: JSON.stringify(param),
                        dataType:'json',
                        contentType:'application/json;charset=UTF-8',
                        method: 'POST',
                        success: function (res) {
                            layer.closeAll();
                            if (res.code === 200) {
                                table.exportFile(titles,res.data,'xls');
                            } else if (res.code === 403) {
                                top.location.href = baseUrl+"/";
                            } else {
                                layer.msg(res.msg, {icon: 2})
                            }
                        }
                    });
                });
                break;
        }
    });
    // 监听行工具事件
    table.on('tool(orderProductType)', function(obj){
        var data = obj.data;
        switch (obj.event) {
            case 'edit':
                showEditModel(data);
                break;
            case "del":
                del([data.id]);
                break;
        }
    });
    /* 弹窗 - 新增、修改 */
    function showEditModel(mData) {
        admin.open({
            type: 1,
            area: '600px',
            title: (mData ? '修改' : '添加') + '订单状态',
            content: $('#editDialog').html(),
            success: function (layero, dIndex) {
                layDateRender(mData);
                form.val('detail', mData);
                form.on('submit(editSubmit)', function (data) {
                    var loadIndex = layer.load(2);
                    $.ajax({
                        url: baseUrl+"/orderProductType/"+(mData?'update':'add')+"/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: data.field,
                        method: 'POST',
                        success: function (res) {
                            layer.close(loadIndex);
                            if (res.code === 200){
                                layer.close(dIndex);
                                layer.msg(res.msg, {icon: 1});
                                tableReload();
                            } else if (res.code === 403){
                                top.location.href = baseUrl+"/";
                            }else {
                                layer.msg(res.msg, {icon: 2});
                            }
                        }
                    })
                    return false;
                });
                $(layero).children('.layui-layer-content').css('overflow', 'visible');
                layui.form.render('select');
            }
        });
    }
    /* 删除 */
    function del(ids) {
        layer.confirm('确定要删除选中数据吗?', {
            skin: 'layui-layer-admin',
            shade: .1
        }, function (i) {
            layer.close(i);
            var loadIndex = layer.load(2);
            $.ajax({
                url: baseUrl+"/orderProductType/delete/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {ids: ids},
                method: 'POST',
                success: function (res) {
                    layer.close(loadIndex);
                    if (res.code === 200){
                        layer.msg(res.msg, {icon: 1});
                        tableReload();
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
                    } else {
                        layer.msg(res.msg, {icon: 2});
                    }
                }
            })
        });
    }
    // 搜索
    form.on('submit(search)', function (data) {
        pageCurr = 1;
        tableReload(false);
    });
    // 重置
    form.on('submit(reset)', function (data) {
        pageCurr = 1;
        clearFormVal($('#search-box'));
        tableReload(false);
    });
    // 时间选择器
    function layDateRender(data) {
        setTimeout(function () {
            layDate.render({
                elem: '#createTime\\$',
                type: 'datetime',
                value: data!==undefined?data['createTime\\$']:null
            });
            layDate.render({
                elem: '#updateTime\\$',
                type: 'datetime',
                value: data!==undefined?data['updateTime\\$']:null
            });
        }, 300);
    }
    layDateRender();
});
// 关闭动作
$(document).on('click','#data-detail-close', function () {
    parent.layer.closeAll();
});
function tableReload(child) {
    var searchData = {};
    $.each($('#search-box [name]').serializeArray(), function() {
        searchData[this.name] = this.value;
    });
    tableIns.reload({
        where: searchData,
        page: {curr: pageCurr}
     });
}
src/main/webapp/views/order/order.html
@@ -152,7 +152,18 @@
                        </div>
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">产品类型: </label>
                    <div class="layui-input-block cool-auto-complete">
                        <input class="layui-input" name="orderProductTypeId" placeholder="请输入产品类型" style="display: none">
                        <input id="orderProductTypeId$" name="orderProductTypeId$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入产品类型" onfocus=this.blur()>
                        <div class="cool-auto-complete-window">
                            <input class="cool-auto-complete-window-input" data-key="orderProductTypeQueryBydirector" onkeyup="autoLoad(this.getAttribute('data-key'))">
                            <select class="cool-auto-complete-window-select" data-key="orderProductTypeQueryBydirectorSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                            </select>
                        </div>
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">项目状态 : </label>
                    <div class="layui-input-block" >
src/main/webapp/views/orderProductType/orderProductType.html
New file
@@ -0,0 +1,118 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
</head>
<body>
<div class="layui-fluid">
    <div class="layui-card">
        <div class="layui-card-body">
            <div class="layui-form toolbar" id="search-box">
                <div class="layui-form-item">
                    <div class="layui-inline">
                        <label class="layui-form-label">编号:</label>
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="id" placeholder="编号" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">&emsp;
                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
                            <i class="layui-icon">&#xe615;</i>搜索
                        </button>
                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
                            <i class="layui-icon">&#xe666;</i>重置
                        </button>
                    </div>
                </div>
            </div>
            <table class="layui-hide" id="orderProductType" lay-filter="orderProductType"></table>
        </div>
    </div>
</div>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm layui-card-body" id="btn-add" lay-event="addData">添加类型</button>
        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">删除</button>
        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">导出</button>
    </div>
</script>
<script type="text/html" id="operate">
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">删除</a>
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/orderProductType/orderProductType.js" charset="utf-8"></script>
</body>
<!-- 表单弹窗 -->
<script type="text/html" id="editDialog">
    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
        <input name="id" type="hidden">
        <div class="layui-row">
            <div class="layui-col-md12">
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">类型名称</label>
                    <div class="layui-input-block">
                        <!--                    <input class="layui-input" name="name" placeholder="请输入类型名称" lay-verType="tips" lay-verify="required" required/>-->
                        <select name="name" lay-verType="tips" lay-verify="required" required>
                            <option value="">请选择类型</option>
                            <option value="立体库(货架)">立体库(货架)</option>
                            <option value="立体库(集成)">立体库(集成)</option>
                            <option value="四向穿梭库/两向穿梭库">四向穿梭库/两向穿梭库</option>
                            <option value="阁楼货架/钢平台">阁楼货架/钢平台</option>
                            <option value="周转容器">周转容器</option>
                            <option value="平库">平库</option>
                        </select>
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">区分: </label>
                    <div class="layui-input-block">
                        <select name="type">
                            <option value="">请选择区分</option>
                            <option value="1">货架</option>
                            <option value="2">集成</option>
                        </select>
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">状态: </label>
                    <div class="layui-input-block">
                        <select name="status">
                            <option value="">请选择状态</option>
                            <option value="1">正常</option>
                            <option value="0">禁用</option>
                        </select>
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">备注: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="memo" placeholder="请输入备注">
                    </div>
                </div>
             </div>
        </div>
        <hr class="layui-bg-gray">
        <div class="layui-form-item text-right">
            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">保存</button>
            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
        </div>
    </form>
</script>
</html>