fastadmin 列表页表格实现动态列

news2024/10/10 1:49:56
记录:fastadmin 列表页表格实现动态列

在这里插入图片描述
后端代码

    /**
     * 商品库存余额表
     */
    public function kucunbalance()
    {
        $houseList = (new House)->where(['shop_id'=>SHOP_ID])->order('id desc')->field('name,id')->select();

        //设置过滤方法
        $this->request->filter(['strip_tags', 'trim']);
        if ($this->request->isAjax()) {
            //如果发送的来源是Selectpage,则转发到Selectpage
            if ($this->request->request('keyField')) {
                return $this->selectpage();
            }
            list($where, $sort, $order, $offset, $limit) = $this->buildparams();

            $filter = json_decode($this->request->get('filter'), true);          
            $whereparam = ['a.shop_id'=>SHOP_ID];
            if($filter){
                foreach($filter as $k=>$item){
                    if($k == 'goods_name'){
                        $whereparam['b.goods_name'] = ['like', '%'.$item.'%'];
                    }
                    if($k == 'code'){
                        $whereparam['b.code'] = ['like', '%'.$item.'%'];
                    }
                    if($k == 'category_name'){
                        $categoryIds = array_values((new Litestorecategory)->where(['shop_id'=>SHOP_ID,'name'=>$item])->column('id'));
                        $whereparam['b.category_id'] = ['in', $categoryIds];
                    }
                    if($k == 'unit_name'){
                        $unitIds = array_values((new Unit)->where(['shop_id'=>SHOP_ID,'name'=>$item])->column('id'));
                        $whereparam['b.unit_id'] = ['in', $unitIds];
                    }
                    if($k == 'goods_no'){
                        $whereparam['c.goods_no'] = ['like', '%'.$item.'%'];
                    }
                }
            }
            if($this->request->get('goods_name')){
                $whereparam['b.goods_name'] = ['like', '%'.$this->request->get('goods_name').'%'];
            }

            $list = $this->model->alias('a')
                ->join('litestore_goods b','a.goods_id = b.goods_id','left')
                ->join('litestore_goods_spec c','a.spec_sku_id = c.spec_sku_id AND a.goods_id = c.goods_id','left')
                ->where($whereparam)
                ->field('any_value(a.id) as id, a.goods_id, a.spec_sku_id, b.goods_name, b.code, b.category_id, b.unit_id, any_value(c.goods_no) as goods_no')
                ->group('a.goods_id, a.spec_sku_id')
                ->order(['a.goods_id'=>'asc', 'a.spec_sku_id'=>'asc', 'id'=>'asc'])
                ->paginate($limit);

            $erp = \think\Config::get("erp");
            $number_decimal = $erp['set']['number_decimal']['value'];
            $price_decimal = $erp['set']['price_decimal']['value'];

            $categoryList = (new Litestorecategory)->where(['shop_id'=>SHOP_ID])->order('id desc')->column('name', 'id');
            $unitList = (new Unit)->where(['shop_id'=>SHOP_ID])->order('id desc')->column('name', 'id');
            foreach ($list as &$row) {
                $row['category_name'] = $categoryList[$row['category_id']] ?? '';
                $row['unit_name'] = $unitList[$row['unit_id']] ?? '';
                $row['goods_attr'] = $row['spec_sku_id'] ? $this->goodspecmodel->spec_sku($row['spec_sku_id']) : '';
                $params = [
                    'goods_id'=>$row['goods_id'],
                    'spec_sku_id'=>$row['spec_sku_id'],
                ];
                $junjia = floatval($this->goodspecmodel->where(['goods_id'=>$row['goods_id'], 'spec_sku_id'=>$row['spec_sku_id']])->value('caigou_price'));
                // 全部仓库
                $total_ruku = $this->model->where($params)->sum('ruku_number');
                $total_chuku = $this->model->where($params)->sum('chuku_number');
                $row['all_number'] = floatval(bcsub($total_ruku.'', $total_chuku.'', $number_decimal));                
                $row['junjia'] = $junjia;
                $row['chengben'] = floatval(bcmul($row['junjia'].'', $row['all_number'].'', $price_decimal));
                // 仓库列表
                foreach ($houseList as $house) {
                    $ruku_number = $this->model->where($params)->where(['house_id'=>$house['id']])->sum('ruku_number');
                    $chuku_number = $this->model->where($params)->where(['house_id'=>$house['id']])->sum('chuku_number');
                    $number = floatval(bcsub($ruku_number.'', $chuku_number.'', $number_decimal)); 
                    $chengben = floatval(bcmul($junjia.'', $number.'', $price_decimal));
                    $row['number'.$house['id']] = $number;
                    $row['junjia'.$house['id']] = $junjia;
                    $row['chengben'.$house['id']] = $chengben;
                } 
            }
            $result = array("total" => $list->total(), "rows" => $list->items());

            return json($result);
        }
        $rowspan = [
            ['field'=> 'category_name', 'title'=> __('Category_name'), 'rowspan'=> 2],
            ['field'=> 'code', 'title'=> __('Code'), 'operate'=> 'LIKE', 'rowspan'=> 2],
            ['field'=> 'goods_name', 'width'=>100, 'title'=> __('Goods_id'), 'operate'=> 'LIKE', 'rowspan'=> 2],
            ['field'=> 'goods_attr', 'title'=> __('Spec_sku_id'), 'searchable'=> false, 'rowspan'=> 2],
            ['field'=> 'unit_name', 'title'=> __('Unit_name'), 'rowspan'=> 2],
            ['field'=> 'all_cangku', 'title'=> '全部仓库', 'colspan'=> 3],        
        ];
        $rowlist = [
            ['field'=> 'all_number', 'title'=> '数量', 'searchable'=> false],        
            ['field'=> 'junjia', 'title'=> '单位成本', 'searchable'=> false],        
            ['field'=> 'chengben', 'title'=> '成本', 'searchable'=> false],        
        ];
        foreach ($houseList as $house) {
            $rowspan[] = ['field'=> $house['id'], 'title'=> $house['name'], 'colspan'=> 2];
            $rowlist[] = ['field'=> 'number'.$house['id'], 'title'=> '数量', 'searchable'=> false];
            $rowlist[] = ['field'=> 'chengben'.$house['id'], 'title'=> '成本', 'searchable'=> false];
        }        
        $this->assignconfig('rowspan',json_encode($rowspan));
        $this->assignconfig('rowlist',json_encode($rowlist));

        return $this->view->fetch();
    }

js代码

        kucunbalance: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'ck/baobiao/kucunbalance',
                    table: 'ck_churukulog',
                }
            });

            var table = $("#table");

            var rowspanstr = Config.rowspan;
            var jsObject = JSON.parse(rowspanstr);    //转换为json对象

            var rowspanstr2 = Config.rowlist;
            var jsObjects = JSON.parse(rowspanstr2);    //转换为json对象

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                pk: 'id',
                // fixedColumns: true,
                // fixedRightNumber: 1,
                search:false,
                columns: [
                    jsObject,jsObjects
                ]
            });

            // 为表格绑定事件
            Table.api.bindevent(table);
        },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2200693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java速成之反射,轻松搞定反射

Hello,大家好,我是Feri,一枚十多年的程序员,同时也是一名在读研究生,关注我,且看一个平凡的程序员如何在自我成长,只为各位小伙伴提供编程相关干货知识,希望在自我蜕变的路上&#x…

记录一次搭建Nacos集群的问题

Java环境:jdk1.8.0_231 Nacos版本:nacos-server-2.2.0.zip 虽然官方推荐的是3个节点,我们还是使用的是2个节点,首先解压创建nacos_config库,导入nacos/conf目录下的mysql-schema.sql SQL文件,如下表&…

ubuntu双系统分区划分

EFI系统分区(Windows):自Windows 8起,UEFI模式下的BIOS使用该分区。简单来说,它用于存储已安装系统的EFI引导程序。此分区在资源管理器中无法查看,因为它没有驱动器号,但它必须存在,…

【ISAC】通感算一体化

北京邮电大学冯志勇:面向智能交通的通感算一体化网络技术 香港中文大学(深圳)许杰:面向通感算融合的无线资源优化 三者逻辑 感知增强: 多个视角的通信,感知其他视角看不到的通信增强:以前做信道估计都是盲的…

ctfshow-web 萌新题

给她 spring漏洞 pyload: 1.dirsearch扫描&#xff0c;发现git 2. GitHack工具得到.git文件 <?php $passsprintf("and pass%s",addslashes($_GET[pass])); $sqlsprintf("select * from user where name%s $pass",addslashes($_GET[name])); ?>…

01 Solidity--

第一个 Solidity 程序 Solidity 是一种用于编写以太坊虚拟机&#xff08;EVM&#xff09;智能合约的编程语言。 掌握 Solidity 是参与链上项目的必备技能 在 Remix 中&#xff0c;左侧菜单有三个按钮&#xff0c;分别对应文件&#xff08;编写代码&#xff09;、编译&#x…

CUDA编程基础概念

1. CPU和GPU 其中绿色的是计算单元&#xff0c;橙红色的是存储单元&#xff0c;橙黄色的是控制单元。 2. 什么样的任务适合GPU&#xff1f; 计算密集型的程序。易于并行的程序。GPU其实是一种SIMD(Single Instruction Multiple Data)架构。 3. 内存模型以及硬件 Device对应…

QD1-P9 HTML常用标签:超链接(1)

本节学习&#xff1a;HTML 超链接标签&#xff0c;也就是 a 标签。 在前端开发中&#xff0c;<a>​ 标签是超链接&#xff08;anchor&#xff09;标签&#xff0c;用于创建指向其他网页、文件、位置等的链接。 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p9 简单示…

【模板进阶】std::function

一、 s t d : : f u n c t i o n std::function std::function的介绍 s t d : : f u n c t i o n std::function std::function是 C 11 C11 C11引入的一个可调用对象包装器&#xff0c;它可以通过指定模板参数&#xff0c;统一来处理各自可调用对象。 二、实现类似 s t d : …

食家巷小程序:品味平凉美食,领略甘肃风情

甘肃平凉犹如一颗璀璨的明珠&#xff0c;散发着独特的魅力。这里不仅有壮丽的自然风光&#xff0c;更有令人垂涎欲滴的美食。而食家巷小程序&#xff0c;就如同一个神奇的美食宝库&#xff0c;将平凉的美味呈现在你的指尖。 &#x1f4a5;平凉&#xff0c;美食的天堂。 平凉红…

erlang学习:Linux命令学习11

crontab命令 crontab命令是用于管理定时任务的命令行工具。它提供了多种选项和参数&#xff0c;可以用来创建、编辑、查看和删除用户的定时任务。 常用命令 以下是一些常用的crontab命令&#xff1a; crontab -e&#xff1a;编辑当前用户的定时任务列表。该命令会在默认编辑…

高产胜母猪,带你上线我的新项目!

大家好&#xff0c;我是程序员鱼皮。9月&#xff0c;我处于极度爆肝状态&#xff0c;成功完结了最新带大家做的项目 面试刷题平台 。 当我们做完一个项目后&#xff0c;一定要记得把项目上线&#xff0c;这样才算是完成了学习的 “闭环”&#xff0c;写到简历上也才有竞争力。 …

鲁班到家上门安装维修系统源码开发之结构功能解析

随着物联网和智能家居的普及&#xff0c;消费者对便捷、高效的生活方式需求日益增加。鲁班到家作为一款专注于家居安装维修服务的平台&#xff0c;凭借其多渠道预约、智能派单、在线支付与费用明细透明等优势&#xff0c;在市场上赢得了广泛认可。本文将详细解析鲁班到家上门安…

flash-attention代码逻辑

setup.py&#xff1a;python项目中&#xff0c;setup.py用于管理项目的构建、打包和分发过程。这个文件通常包含项目的元数据以及如何构建和安装模块的指令 三个相关命令 构建扩展模块&#xff1a;python setup.py build_ext清理构建文件&#xff1a;python setup.py clean安装…

扩展欧几里得算法 C++

题一 扩展欧几里得算法 解题思路 原链接&#xff1a;https://www.acwing.com/solution/content/1393/&#xff08;下同&#xff09; 代码实现 #include<iostream>using namespace std;void exgcd(int a, int b, int &x, int &y) {if(b 0){x 1, y 0;return ;…

Linux学习/复习5进程间通信

ctrl s 保存到云服务器 ctrl ~ 调用调试

vim插件ctags

ctags简介 ctags&#xff08;Generate tag files for source code&#xff09;是一个用来生成代码标签文件的工具。它可以为多种编程语言的源代码生成标签文件&#xff0c;这些标签文件包含了源代码中的各种元素的信息&#xff0c;如函数名、变量名、类名等。Vim 可以利用这些…

vue中css作用域及深度作用选择器的用法

Vue中有作用域的CSS 当< style>标签有scoped属性时&#xff0c;它的css只作用于当前组建中的元素。vue2和vue3均有此用法&#xff1b; 当使用scoped后&#xff0c;父组件的样式将不会渗透到子组件中。不过一个子组件的根节点会同时受父组件有作用域的css和子组件有作用…

10.9学习

1.数据库和Redis的一致性 全量缓存保证高效读取 所有数据都存储在缓存里&#xff0c;读服务在查询时不会再降级到数据库里&#xff0c;所有的请求都完全依赖缓存。此时&#xff0c;因降级到数据库导致的毛刺问题就解决了。但全量缓存并没有解决更新时的分布式事务问题&#xf…

保姆级教程 | Adobe Illustrator调整颜色透明度

背景 由于课题需要&#xff0c;现需要在Adobe Illustrator里修改部分色块的颜色及透明度 步骤 1. 打开Adobe Illustrator软件&#xff0c;打开或创建一个AI文件&#xff1a; 2. 绘制一个色块&#xff1a; 3. 单击需要调整透明度的对象将其选中 4. 调整颜色的透明度&#xf…