Layui想给表格定义一列统计数据?可通过AJAX输出Return返回

166次阅读

共计 2549 个字符,预计需要花费 7 分钟才能阅读完成。

昨天想在 Layui 的数据表格添加一列与 ID 对应的统计数据,折腾了几个小时,这里做一下记录。

一、多模型 Haswhere

最开始我的需求是联查三个表,但是看了 TP 文档,Hasone只能有一个 Haswhere,但是可以有多个 with。

也就是可以展示多个绑定的数据,但是有且只能查询其中的两个,其他的不在查询条件内。

后来没办法只有用 join 来连表实现,代码如下:

PHP

1
2
3
4
5
6
$list = appindexmodelExpense::alias(“a”)
                ->join(‘Beian b’, ‘a.beian_id = b.id’)
                ->join(‘Customer c’, ‘a.customer_id = c.id’)
                // ->join(‘expense_in d’, ‘a.id = d.expense_id’,’LEFT’)
                ->field(‘a.id,a.expense_state,b.project_name,b.record_date,c.linkman,c.phone’)
                ->where($where)->order(‘id desc’)->limit($limits)->select();

其中注释掉的这行,本来是想拿来做统计,也就是在 field 中写 SUM 进行统计。

实际上不行,因为 join 后,无论 LEFT 还是 RIGHT,都会对最终的数据有影响,这其实也很好想明白。

所以,想在数据接口直接输出统计值,似乎很难,折腾了一会后,放弃了这个尝试。

二、AJAX return 返回

数据接口中没有统计数据,我们就需要另外定义模板,也就是在设置 LayUI 数据表格时,增加 templet,如下:

1
2
3
4
5
6
7
{
            field: ‘id’,
            title: ‘ 结余 ’,
            align: ‘center’,
            templet: sumTpl,
            sort: true
          }

其中的 templet: sumTpl,就是我们定义的模板。

注意,定义模板的方法请参考 LayUI 文档,我是一次成功,所以不清楚失败的情况,但是听说自定义模板位置错误的话,是没有输出的。

我放的位置是 LayUI 定义主入口模块的下方,数据表格的上方,也就是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<script>
    layui.config({
      base: ‘/static/’ // 静态资源所在路径
    }).extend({
      index: ‘lib/index’ // 主入口模块
    }).use([‘index’, ‘table’], function () {
      var $ = layui.$,
        admin = layui.admin,
        element = layui.element,
        layer = layui.layer,
        table = layui.table;
      element.render();
 
      // 统计
      var sumTpl = function(c) {
        $.ajax({
              url: ‘/index/expense/sum_api/’,
              type: ‘post’,
              dataType: ‘json’,
              data: {
                id: c.id
              },
              success: function (data) {
                result = data.sum
              }
            });
      };

最初我是用上面的方式表达,直接 AJAX 请求,请求的参数是所在行的 id 值,返回后 return。

事实上这事错误的,在 ajax 方法中不能直接 return 返回值。

常见的错误写法

* 方式:(1)同步调用(2)在 ajax 函数中 return 值;
* 结果:返回 1。未成功获取返回值;
* 失败

正文完
 0