bootstrap table 动态列数据加载(三)

  1. 动态列新需求
    又出新需求了,在原来的收费标准场景上增加收费标准,即A4库按货架租赁时不足一吨按一吨收费。A4的货架子叉车进去就是最少一架,架子上放的东西少不够一标准吨可是我干的活是一点也不少,so增加这种不足一吨按一吨算。

  2. 总结下以前的
    1、业务场景
    公司有几个仓库,每个仓库有按货位按吨位按货架的不同的租赁方式;在这某一种租赁方式下每个收费项目的标准不一样,收费项目后续会增加或减少;收费项目包括上下架费用,装卸车费用,单据条码费用,这种上下架费用和装卸车费用区分买卖双方(Receive/Sender 拿RS标识是哪一方),即卖方收下架装车,买方收上架卸车。
    个别仓库可能给所有用户定向优惠不收费,个别仓库可能定向用户优惠。
    2、模型设计
    仓库作为x轴,租赁模式作为y轴,每个仓库就有各种租赁模式,配置仓库默认按那种租赁,仓库支持几种租赁。
    xy轴有了,就相当于有了所有的租赁方式id作为基础维度。
    这时候收费项目加入y轴,上架费是一个y轴,举例这时候就能为这个仓库的按货位配置收费的金额了,配置这个项目向谁收。
    只有一个项目不够,应为所有的项目是动态的,项目可能会增加减少。这时候所有项目就可以看做多个y轴,抽象成四维空间。
    在所有的项目上进行配置收费标准,可以为这个项目增加是否收费的属性,增加付费方是谁的属性,增加收费价格的属性。
    增加的所有属性可以理解为四维空间的属性扩展,或者理解为四维空间抽象成一个x轴,再增加多个轴。
    3、数据库设计
    1.仓库表
    仓库id,仓库名,是否可用等其他乱七八糟属性
    2.租赁方式表
    租赁方式id,名称
    数据就3条,按货位、按货架、按吨位。可能以后还会增加租赁方式,增加记录就行了。
    3.仓库和租赁方式整合表
    整合租赁方式id 仓库id,租赁方式id,是否可用巴拉巴拉
    4.整合收费项目
    整合项目租赁方式id, 整合的租赁方式id,收费项目id
    5.每个整合方式的收费标准
    项目整合id,是否收费标记位,付款方标记位,收费价格标记位
    这时候其实5表可以整合进4表中,没必要再拉取一个表来,反而增加left join。就像是为4维空间增加属性一样,不去增加维度。

4、页面设计
在这里插入图片描述
1.左面先抽出仓库来,按单个的仓库查看就相当于抽出来一个维度为后面的查询做简化。
2.再抽出租赁方式,按货位、按吨位、按货架子,再简化
3.动态列使用收费姓名项目表。
bootstraptable 的 列名是查询到的收费项目表按id排序的那种。其实列项目名就几个,数据列是按这个项目排序查出来的。

var columnsArray = [];
    columnsArray.push({"title": "站点仓库", "field": "tname"});
    columnsArray.push({"title": "计费方式", "field": "method", formatter: methodFormattrt});
     $.ajax({
       各种ajax参数明白就行,这里不写了
        success: function (json) {
            //循环所有的收费项目
            for(var i = 0;i<json.length;i++ ){
                // json[0] 第一个收费项目  title 是第一个收费项目的名称
                var title = json[i]["itemname"];
                columnsArray.push({
                    "title": "title",
                    "field": "price" + i,
                    "align": "right"
                });
                columnsArray.push({
                    "title": "",
                    "field": "buyorsell" + i, //这里是指定付款方标记位
                    "formatter":buyorsellFormattrt
                });
                columnsArray.push({
                    "title": "",
                    "field": "isornot" + i,//这里指定是否收费标记位
                    "formatter":isornotFormattrt
                });               
            }
        },
        error: function () {
            alert("错误");
        }
    });
    //最后的操作列
    columnsArray.push({"title": "操作", "field": "wayid",formatter:operateFormatter});

收费的数据弄过来显示,有仓库,有租赁方式,从表4弄数据就行了,是否收费,收费标准都是4表出来的。
按收费项目查询用收费项目去left join 表4 那一定能拿到和列数据相同的列数,如果没有配置就是0。
返回给bootstraptable的还是那个pagerbean,只不过list里面放map

        List<PcChargeWayTempBean> chargeWayTempBeanList = 查询收费标准,按收费项目显示的列来写sql left join;其实我这个bean是内嵌的那种list bean
        List<Map<String,Object>> rstList = new ArrayList<>();//给页面的返回的数据
        for (int i = 0; i < chargeWayTempBeanList.size(); i++) {//处理外层的收费方式  涉及到 i j 不能用增强for
            Map<String,Object> eachMap = new HashMap<>();
            eachMap.put("wayid",chargeWayTempBeanList.get(i).getWayid());
           //省略没鸟用的代码 
            for(int j = 0;j< chargeWayTempBeanList.get(i).getStandardList().size();j++){//处理内层的所有收费项目的金额
                eachMap.put("isornot" + j, chargeWayTempBeanList.get(i).getStandardList().get(j).getIsornot());
                eachMap.put("buyorsell" + j, chargeWayTempBeanList.get(i).getStandardList().get(j).getBuyorsell());
                eachMap.put("price" + j, chargeWayTempBeanList.get(i).getStandardList().get(j).getPrice());
            }
            rstList.add(eachMap);
        }
        PagerBean pagerBean = new PagerBean(chargeWayTempBeanList.size(),rstList);

这样后台的数据和前台的列对应起来了。
bootstraptable中的 “field”: “isornot” + i, 拿取list中map的这个"isornot" + j key就可以拿到value显示了,动态列加载完成。

具体怎么做的参考之前第二篇(二)

  1. 现在新加业务场景

现在新加业务场景
在原来的收费标准场景上增加收费标准,即A4库按货架租赁时不足一吨按一吨收费。A4的货架子叉车进去就是最少一架,架子上放的东西少不够一标准吨可是我干的活是一点也不少,so增加这种不足一吨按一吨算。
对于表4 增加一个属性,是不是按这个标准执行收费 MinCharge 简称M,不扩展维度。
这时候我发现收费项目列对应多列了,显示起来就不好看了,相当于一个项目列跟着价格、付款方、是否收费、一吨标准这四个列,7个项目就是28列,能把页面弄的难看的要死
在这里插入图片描述
妈的 我现在是28列再加上前面的两个基本信息列和后面的操作列这都31列了,以后再扩展列显示这个页面就难看的完蛋了。

问题:
列名是收费项目,一个列其实是有4列的数据跟着。7个项目28列,但是项目名称只在其中一个收费标准上,其他的列我都没写表头。再扩展就难看死了。

分析方案
想把表头的收费项目几个字拆开,4列放在后三列上,就相当于4列每一个的列表头只有一个字 这样显示还比较好看。

配置
表4增加一列,MinCharge 简称M 。

var columnsArray = [];

    columnsArray.push({"title": "计费方式", "field": "method", formatter: methodFormattrt});
       $.ajax({
      XXXXXXXXXXXXXXX
        success: function (json) {
            //循环所有的收费项目
            for(var i = 0;i<json.length;i++ ){
                // json[0] 第一个收费项目  title 是第一个收费项目的名称
                var title = json[i]["itemname"];
                columnsArray.push({
                    "title": "",
                    "field": "price" + i,
                    "align": "right"
                });
                columnsArray.push({
                    "title": title.substr(0,1),//我把title截取了第一个字符
                    "field": "buyorsell" + i,
                    "formatter":buyorsellFormattrt
                });
                columnsArray.push({
                    "title": title.substr(1,1),//第二列显示第二个字符
                    "field": "mincharge" + i,
                    "formatter":minchargeFormat
                });
                columnsArray.push({
                    "title": title.substr(2,title.length),//第三列显示以后的  谁知道这个收费项目叫啥
                    "field": "isornot" + i,
                    "formatter":isornotFormattrt
                });
                columnsArray.push({
                    "title": "|",
                    "field": "",
                    "formatter":"<span style=\"color:orange\">|</span>"   //项目结束后价格黄线分开 好看
                });
            }
        },
        error: function () {
            alert("错误");
        }
    });

在这里插入图片描述
最后再format一下 给RS添加鼠标过去提示付款方,给M添加红灰颜色,红的提示执行这个标准,灰的不执行。
打码一部分,谁知道公司会不会看到。

  1. 总结一下

总结下 就是
bootstraptable的表头和数据加载的时候不是同步的,先加载表头,再加载数据,追过源码。
columns就是数组,加载数据的时候根据这个数组去获取后台的数据。
动态列就是搞定columns这个数组和后台数据的对应关系,让后台循环搞到XXX属性+下标。
页面定义columns的时候按收费项目循环列,可以不加表头让title空着,在加几列就是这个方式的项目的各种怎么收钱。
后续让表头拆开来分开放每一个列上。
这个感觉已经包括了仓库的所有收费的标准,应该不会有什么大的变动了,后面再有变的时候再往上加。

后面又增加了按用户建立收费标准的,为个别大体量用户定制优惠,思路是把用户作为一个维度加进去,实现方式还是和以前一样的思路。



https://blog.csdn.net/wangwenpeng0529/article/details/84675635

https://blog.csdn.net/wangwenpeng0529/article/details/100984369

发布了49 篇原创文章 · 获赞 5 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/wangwenpeng0529/article/details/100984369