fastadmin 列表页表格实现动态列

记录: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,则转发到Selectpageif ($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.rhkb.cn/news/447915.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode209.长度最小的子数组

题目链接:209. 长度最小的子数组 - 力扣(LeetCode) 1.常规解法(会超时) 可以先将数组的所有子数组求出来,计算其中元素的值,判断与目标值的大小关系,代码如下: public …

Ubuntu里彻底卸载UHD

查看已经安装的UHD版本uhd_find_devices,展示的是当前安装的 UHD 库版本所支持的设备信息,下载了多个版本的uhd但是又记不住安装的位置,想要把所有的uhd相关环境全都删掉,用下边这个命令看一下所有的uhd信息: apt lis…

在 Spring 中使用 @EhCache 注解作为缓存

文章目录 项目概况项目设置一个简单的 RESTful Web 服务Spring 整合 EhCache第 1 步:更新依赖项以使用 EhCache Spring 注解第 2 步:设置自定义缓存管理器第 3 步:配置 EhCache第 4 步:测试缓存 刷新缓存总结推荐阅读文章 EhCache…

Visual Studio的实用调试技巧总结

对于很多学习编程的老铁们来说,是不是也像下面这张图一样写代码呢? 那当我们这样编写代码的时候遇到了问题?大家又是怎么排查问题的呢?是不是也像下面这张图一样,毫无目的的一遍遍尝试呢? 这篇文章我就以 V…

k8s的微服务

ipvs模式 Service 是由 kube-proxy 组件,加上 iptables 来共同实现的 kube-proxy 通过 iptables 处理 Service 的过程,需要在宿主机上设置相当多的 iptables 规则,如果宿主机有大量的Pod,不断刷新iptables规则,会消耗…

QT:计算点到线段的垂线段的距离

描述 在Qt中,要计算一个点到一条线段的垂线段的长度(即点到线段上最近点的距离,且这个点是垂直于线段的),你不能直接使用QVector2D::distanceToLine,因为这个方法计算的是点到直线的垂直距离,而…

2024-09-22 进程优先级,进程切换

一、僵尸状态 & 孤儿进程 进程退出:内核数据结构(task_struct 维护) 代码和数据(直接释放) 代码不会执行了首先可以立即释放的就是进程对应的程序信息数据。进程退出要有退出信息(进程的退出码&#…

六西格玛设计DFSS方法论在消费级无人机设计中的应用——张驰咨询

本文基于六西格玛设计方法论,对消费级无人机的设计流程进行系统化研究,探讨如何通过六西格玛设计的理念、工具和方法提升无人机产品的设计质量和市场竞争力。文章从市场定位、客户需求分析出发,深入到关键KPI指标的制定,并逐步阐述…

【网络安全】漏洞案例:提升 Self-XSS 危害

未经许可,不得转载。 文章目录 Self-XSS-1Self-XSS-2Self-XSS-1 目标应用程序为某在线商店,在其注册页面的First Name字段中注入XSS Payload: 注册成功,但当我尝试登录我的帐户时,我得到了403 Forbidden,即无法登录我的帐户。 我很好奇为什么我无法登录我的帐户,所以我…

前端高频面试题2024/9/22(偏项目问题--通用后台管理系统)

文章目录 一.前端项目概述1.系统登录注册模块1.对注册的密码进行加密 (使用加密中间件bcrypt.js)2.登录成功后返回token3.前端登录页面有用到弹性布局,ref和reactive4.登录头像:文件上传 2.系统设置模块2.系统首页模块&#xff08…

使用electron+vue开发桌面应用

electron是什么 electron由Node.jsChromiumNative APIs构成。你可以理解成,它是一个得到了Node.js和基于不同平台的Native APIs加强的Chromium浏览器,可以用来开发跨平台的桌面级应用。 它的开发主要涉及到两个进程的协作——Main(主&#x…

Java通过RAG构建专属知识问答机器人_超详细

RAG:融合检索与生成的文本精准生成技术 检索增强生成(RAG)是一种技术,它通过结合检索模型和生成模型来提高文本生成的准确性。具体来说,RAG首先利用检索模型从私有或专有的数据源中搜索相关信息,然后将这些…

编程练习7 5G网络建设

需要用到并查集的相关知识&#xff1a;可以参考如下链接 并查集详解&#xff08;原理代码实现应用优化&#xff09;-CSDN博客 #include<iostream> #include<algorithm> #include<vector>using namespace std;vector<int> split(string params_str) {…

ICT产业新征程:深度融合与高质量发展

在信息时代的浪潮中&#xff0c;每一场关于技术革新与产业融合的盛会都闪耀着智慧的光芒&#xff0c;引领着未来的方向。9月25日&#xff0c;北京国家会议中心内&#xff0c;一场聚焦全球信息通信业的顶级盛事——第32届“国际信息通信展”&#xff08;PT展&#xff09;隆重拉开…

【LwIP源码学习3】TCP协议栈分析——数据接收流程

前言 本文介绍代码在lwip的tcp_in.c文件中&#xff0c;主要介绍TCP协议栈中数据的接收流程。 正文 1、一个正常的TCP数据&#xff0c;首先会传入到 tcp_input(struct pbuf *p, struct netif *inp)函数&#xff0c;其中指针p指向传入的数据流。 2、从数据流中获取TCP头部 …

通过Express + Vue3从零构建一个用户认证与授权系统(二)数据库与后端项目搭建与实现

前言 上一篇完成了系统的相关设计文档的编写&#xff0c;本文将详细介绍如何一步步使用 TypeScript 和 Express 搭建一个模块化、类型安全的用户认证与授权系统&#xff0c;包括数据库设计、后端项目搭建、用户认证、角色与权限管理、错误处理以及 Swagger 文档集成。 项目准…

【ubuntu】ubuntu20.04安装cuda12.6与显卡驱动

目录 1.安装cuda12.6 2.安装显卡驱动 1.安装cuda12.6 https://developer.nvidia.com/cuda-toolkit-archive https://developer.nvidia.com/cuda-12-6-0-download-archive?target_osLinux&target_archx86_64&DistributionUbuntu&target_version20.04&target_…

DART: Implicit Doppler Tomography for Radar Novel View Synthesis 笔记

Link&#xff1a;https://wiselabcmu.github.io/dart/ Publish&#xff1a; 2024CVPR Abstract DART主要任务就是用来合成雷达距离多普勒图像range-droppler&#xff0c;可用于生成高质量的断层扫描图像。 Related Work 1 Radar Simulation 基于模型的方法 任务&#xff…

XGBoost回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出

回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出 目录 回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 XGBoost的全称是eXtreme Gradient Boosting,它是经过优化的分布式梯度提升库,旨在高效、…

医学和生信web APP 平台- Appmatrix

医学&#xff08;和生信&#xff09;web APP 平台- Appmatrix 最近使用shinyproxy将平时所构建的shiny和streamlit医学类应用汇集在一起&#xff0c;实现一站式访问&#xff0c;另外&#xff0c;使用了自己电脑内网穿透&#xff0c;一定程度上缓解了数据分析类APP消耗计算资源…