目录
一、描述二、环境三、讲解1、汇总数据计算2、页面处理
四、代码1、PHP根据动态配置返回汇总数据2、页面处理1)、把$config处理成前端需要的格式2)、把值$result传到页面3)、html中动态显示标签4)、js赋值
五、相关博文
一、描述
看标题大家可能云里雾里,这里解释下:就是一个页面有一个表格(分页的),表格上面有一行,是对表格金额字段的汇总(所有数据汇总,不是汇总当前页),但是这个金额的类型是不固定的(从配置读取),未来还会增加金额类型。
二、环境
操作系统 Win10Layui版本 2.4.5 查看Layui版本:alert(layui.v);PHP版本 7.1.33
三、讲解
1、汇总数据计算
PHP计算每种类型的汇总数据,每种类型的数据要给默认值
2、页面处理
定义span标签,动态的金额类型用模板引擎直接在html中渲染,用于接收动态数据Layui表格加载完成done之后给对应的金额类型赋值对应的值
四、代码
1、PHP根据动态配置返回汇总数据
我们自定义返回的字段类似于:money_1,money_2,...,money_n,则PHP代码如下:
public function test(){
$config = [
['name' => '金额1', 'value' => 1],
['name' => '金额2', 'value' => 2],
['name' => '金额3', 'value' => 3],
];
foreach ($config as $k => $v){
$moneyName = 'money' . $v['value'];
$$moneyName = 0;
}
$moneyData = [1 => 10, 2 => 20, 3 => 30];
if ($moneyData){
foreach ($moneyData as $k => $v){
$moneyName = 'money' . $k;
$$moneyName = $v;
}
}
$result = [
'id' => 1,
'name' => '金额类型',
'other_money' => 999,
];
foreach ($config as $k => $v){
$moneyName = 'money' . $v['value'];
$result = array_merge($result, ['money_' . $k => $$moneyName]);
}
var_export($result);
}
打印 $result的值如下
array (
'id' => 1,
'name' => '金额类型',
'other_money' => 999,
'money_0' => 10,
'money_1' => 20,
'money_2' => 30,
)
2、页面处理
1)、把$config处理成前端需要的格式
PHP代码如下
public function test(){
$config = [
['name' => '金额1', 'value' => 1],
['name' => '金额2', 'value' => 2],
['name' => '金额3', 'value' => 3],
];
$result = [];
$config = array_column($config, 'name', 'value');
foreach ($config as $k => $v){
$moneyName = 'money_' . $k;
$result[] = [
'id' => $k,
'field' => $moneyName,
'title'=> $v
];
}
var_export($result);
}
打印
array (
0 =>
array (
'id' => 1,
'field' => 'money_1',
'title' => '金额1',
),
1 =>
array (
'id' => 2,
'field' => 'money_2',
'title' => '金额2',
),
2 =>
array (
'id' => 3,
'field' => 'money_3',
'title' => '金额3',
),
)
2)、把值$result传到页面
$this->assign('result', $result);
3)、html中动态显示标签
其他费用:
<span class="money-class" id="other-money"></span>
{foreach $result as $key=>$value}
{$value.title}:
<span class="money-class" id="money-{$value.id}"></span>
{/foreach}
4)、js赋值
layui表格加载完毕done之后给动态的金额类型赋值
let result
= {:json_encode($result
)};
let tableObject
= table
.render({
elem
: '#id'
,url
: 'url'
,cols
: [cols
]
,text
: {
none
: '暂无数据'
}
,done
:function(res
, curr
, count
){
if(curr
== 1){
$
.ajax({
type
: "POST",
url
: "/.../test",
data
: globalWhere
,
dataType
: "json",
success
: function (res
) {
$('span#other-money').text(res
.data
.other_money
);
let length
= result
.length
;
for (let i
= 0; i
< length
; i
++){
let key
= 'money_' + result
[i
]['id'];
$('span#money-'+result
[i
]['id']).text(res
.data
[key
]);
}
}
});
}
}
});
五、相关博文
如果需要知道怎么动态加载表格列,请参考这一篇:Layer表格列根据配置动态显示