Browse Source

first commit

liuhairui 6 months ago
parent
commit
4d9ce7b2c6

+ 119 - 25
application/admin/controller/Deliver.php

@@ -365,6 +365,7 @@ class Deliver extends Backend
         $row = [
             'username'  => $bachDetail['supplier_name'],//公司
             'matter_no' => $bachDetail['matter_no'],
+            'order_ddbh' => $bachDetail['order_ddbh'],
             'large_str' => $lager_id,
             'status' => 0,
             'bach_num' => $bachDetail['bach_num'],
@@ -594,7 +595,7 @@ class Deliver extends Backend
             $list[$k]['pallet_length'] = $v['pallet_length'];//托盘规格
             $list[$k]['pallet_width'] = $v['pallet_width'];//托盘规格
             $list[$k]['small_num'] = $v['small_num'];//总箱数
-
+            $list[$k]['larger_num'] = $v['larger_num'];//总箱数
             $list[$k]['id'] = substr(json_encode($v['_id']),9,-2);
             $list[$k]['matter_name'] = $v['matter_name'];
             $list[$k]['matter_no'] = $v['matter_no'];
@@ -817,50 +818,79 @@ class Deliver extends Backend
         $export = new QcodeExport();
         $large = new QcodeLarge();
         $userinfo = Session::get('admin');
+
         if ($this->request->isAjax() === false) {
             $this->error('请求错误');
         }
+
         $id = input('id');
-        $good_list = $goods->where('_id',$id)->find();
-        if ($good_list){
-            if (strpos($good_list['export_id'],',') === false){
+        $good_list = $goods->where('_id', $id)->find();
+
+        if ($good_list) {
+            if (strpos($good_list['export_id'], ',') === false) {
                 $export_id[0] = $good_list['export_id'];
-            }else{
-                $export_id = explode(',',$good_list['export_id']);
+            } else {
+                $export_id = explode(',', $good_list['export_id']);
             }
+
             $data = [];
-            foreach ($export_id as $k=>$v){
-                $data[$k] = $export->where('_id',$v)->find();
-                $large_str = explode(',',$data[$k]['large_str']);
-                $large_list = $large->name($userinfo['company'].'_'.'qcode_large')->whereIn('_id',$large_str)->select();
+            $motter_nos = []; // 用于存储 motter_no 字段
+
+            foreach ($export_id as $k => $v) {
+                $data[$k] = $export->where('_id', $v)->find();
+                // 确保 $data[$k] 是一个有效的对象
+                if ($data[$k] instanceof QcodeExport) {
+                    if (!empty($data[$k]['order_ddbh'])) {
+                        $motter_nos[] = $data[$k]['order_ddbh'];
+                    }
+                }
+
+                $large_str = explode(',', $data[$k]['large_str']);
+                $large_list = $large->name($userinfo['company'] . '_' . 'qcode_large')->whereIn('_id', $large_str)->select();
                 $large_num = $large_weight = 0;
-                foreach ($large_list as $value){
-                    $large_num = $large_num + $value['l_num'];
-                    $large_weight = $large_weight + $value['l_weight'];
+
+                foreach ($large_list as $value) {
+                    $large_num += $value['l_num']; // 累加数量
+                    $large_weight += $value['l_weight']; // 累加重量
+                }
+
+                // 更新数据
+                $data[$k]['l_num'] = $large_num / 10000; // 转换数量
+                $data[$k]['l_weight'] = $large_weight; // 更新重量
+
+                // 添加 motter_no 到数组
+                if (!empty($data[$k]['order_ddbh'])) {
+                    $order_ddbh[] = $data[$k]['order_ddbh'];
                 }
-                $data[$k]['l_num'] = $large_num/10000;
-                $data[$k]['l_weight'] = $large_weight;
             }
+
+            // 拼接 motter_no 字段
+            $good_list['order_ddbh'] = implode(',', $order_ddbh);
+
+            // 继续处理其他数据
             $good_list['address'] = $userinfo['company_address'];
             $good_list['data'] = $data;
             $good_list['count'] = count($data);
-            $good_list['shrq_date'] = substr($good_list['create_time'],0,10) ;
-            if (empty($good_list['qrcode_add'])){
+            $good_list['shrq_date'] = substr($good_list['create_time'], 0, 10);
+
+            if (empty($good_list['qrcode_add'])) {
                 $good_list['qrcode_add'] = $this->Qrcode($good_list['shdh']);
-                $goods->where('_id',$id)->update(['qrcode_add'=>$good_list['qrcode_add']]);
+                $goods->where('_id', $id)->update(['qrcode_add' => $good_list['qrcode_add']]);
             }
-            if ($good_list['note'] == 'NULL'){
+
+            if ($good_list['note'] === 'NULL') {
                 $good_list['note'] = '';
             }
 
-            //新增代码
+            // 新增代码
             $good_array = $good_list ? $good_list->toArray() : [];
-            // 假设 $goodArray 是已经转为普通数组的结构
             $dataList = $good_array['data'] ?? [];
+
             // 步骤1:按照 create_time 升序排序
             usort($dataList, function ($a, $b) {
                 return strtotime($a['create_time']) - strtotime($b['create_time']);
             });
+
             // 步骤2:添加 large_ber 字段
             $start = 1;
             foreach ($dataList as &$item) {
@@ -870,14 +900,78 @@ class Deliver extends Backend
                 $start = $end + 1;
             }
             unset($item);
+
             $good_list['data'] = $dataList;
-//            echo "<pre>";
-//            print_r($dataList);
-//            echo "</pre>";die;
-            return json(['code'=>1,'data'=>$good_list]);
+            return json(['code' => 1, 'data' => $good_list]);
         }
     }
 
+//    public function printqrcode()
+//    {
+//        $goods = new QcodeGoods();
+//        $export = new QcodeExport();
+//        $large = new QcodeLarge();
+//        $userinfo = Session::get('admin');
+//        if ($this->request->isAjax() === false) {
+//            $this->error('请求错误');
+//        }
+//        $id = input('id');
+//        $good_list = $goods->where('_id',$id)->find();
+//
+//        if ($good_list){
+//            if (strpos($good_list['export_id'],',') === false){
+//                $export_id[0] = $good_list['export_id'];
+//            }else{
+//                $export_id = explode(',',$good_list['export_id']);
+//            }
+//            $data = [];
+//            foreach ($export_id as $k=>$v){
+//                $data[$k] = $export->where('_id',$v)->find();
+//                $large_str = explode(',',$data[$k]['large_str']);
+//                $large_list = $large->name($userinfo['company'].'_'.'qcode_large')->whereIn('_id',$large_str)->select();
+//                $large_num = $large_weight = 0;
+//                foreach ($large_list as $value){
+//                    $large_num = $large_num + $value['l_num'];
+//                    $large_weight = $large_weight + $value['l_weight'];
+//                }
+//                $data[$k]['l_num'] = $large_num/10000;
+//                $data[$k]['l_weight'] = $large_weight;
+//            }
+//            $good_list['address'] = $userinfo['company_address'];
+//            $good_list['data'] = $data;
+//            $good_list['count'] = count($data);
+//            $good_list['shrq_date'] = substr($good_list['create_time'],0,10) ;
+//            if (empty($good_list['qrcode_add'])){
+//                $good_list['qrcode_add'] = $this->Qrcode($good_list['shdh']);
+//                $goods->where('_id',$id)->update(['qrcode_add'=>$good_list['qrcode_add']]);
+//            }
+//            if ($good_list['note'] == 'NULL'){
+//                $good_list['note'] = '';
+//            }
+//
+//            //新增代码
+//            $good_array = $good_list ? $good_list->toArray() : [];
+//            // 假设 $goodArray 是已经转为普通数组的结构
+//            $dataList = $good_array['data'] ?? [];
+//            // 步骤1:按照 create_time 升序排序
+//            usort($dataList, function ($a, $b) {
+//                return strtotime($a['create_time']) - strtotime($b['create_time']);
+//            });
+//            // 步骤2:添加 large_ber 字段
+//            $start = 1;
+//            foreach ($dataList as &$item) {
+//                $count = intval($item['large_num']);
+//                $end = $start + $count - 1;
+//                $item['large_ber'] = ($start === $end) ? (string)$start : "$start-$end";
+//                $start = $end + 1;
+//            }
+//            unset($item);
+//            $good_list['data'] = $dataList;
+//
+//            return json(['code'=>1,'data'=>$good_list]);
+//        }
+//    }
+
     /**
      * 获取辅料名称
      * @return \think\response\Json

+ 37 - 15
application/admin/controller/Finishedproduct.php

@@ -3,6 +3,8 @@
 namespace app\admin\controller;
 
 use app\common\controller\Backend;
+use think\Db;
+use think\Session;
 use function EasyWeChat\Kernel\Support\rsa_public_encrypt;
 
 /**
@@ -37,29 +39,46 @@ class Finishedproduct extends Backend
 
     public function index()
     {
-        // 获取前端传入的参数:搜索关键词、页码、每页数量(默认为第一页,每页10条)
-        $search = input('get.search');
-        $page = input('get.page', 1);
-        $limit = input('get.limit', 10);
-        // 连接配置中的 db3 数据库
+        $search = input('get.search', '');
+        $page   = input('get.page', 1);
+        $limit  = input('get.limit', 10);
         $db3 = \db()->connect(config('database.db3'));
 
-        $query = $db3->name('成品入仓')
-            ->where('jjcp_smb', '=', '末 板')
-            ->whereNull('Mod_rq');
-        $where = ['jjcp_cpdh'=>['like','%'.$search.'%']];
+        $where = [];
+        if (!empty($search)) {
+            $where = function($query) use ($search) {
+                $query->where('jjcp_gdbh', 'like', "%{$search}%")
+                    ->whereOr('jjcp_cpdh', 'like', "%{$search}%")
+                    ->whereOr('jjcp_cpmc', 'like', "%{$search}%");
+            };
+        }
 
-        $total = $query->where($where)->count();
-        $data = $query->field('jjcp_cpdh, jjcp_cpmc, jjcp_sl, UniqId, jjcp_smb')
+        $data =$db3->name('成品入仓')
             ->where($where)
+                ->field('
+                jjcp_gdbh,
+                jjcp_cpdh,
+                jjcp_cpmc,
+                jjcp_sl,
+                UniqId,
+                订单编号 AS order_ddbh,
+                jjcp_smb
+            ')
+            ->order('Sys_rq desc')
+            ->where('jjcp_smb', '=', '末 板')
+            ->whereNull('Mod_rq')
             ->limit(($page - 1) * $limit, $limit)
             ->select();
 
+        // 查询总数(必须使用和分页前相同条件)
+        $total = $db3->name('成品入仓')->where($where)->count();
+
+        // 字段值格式化
         foreach ($data as &$row) {
             $row['jjcp_smb'] = ($row['jjcp_smb'] === '末 板') ? '完工入库' : '未完工入库';
         }
 
-        //AJAX 请求
+        // 返回 JSON 或渲染视图
         if (request()->isAjax()) {
             return json([
                 'data'  => $data,
@@ -68,6 +87,7 @@ class Finishedproduct extends Backend
                 'limit' => $limit
             ]);
         }
+
         $this->assign('data', $data);
         return $this->fetch();
     }
@@ -87,21 +107,23 @@ class Finishedproduct extends Backend
 
         // 连接 MongoDB 数据库(你在 config/database.php 中的 mongodb 配置名)
         $mongo = \think\Db::connect('mongodb');
-
+        $userinfo = Session::get('admin');
         $insertList = [];
 
         foreach ($data['data'] as $item) {
             $insertList[] = [
-                'jjcp_cpdh' => $item['jjcp_cpdh'],
                 'jjcp_cpmc' => $item['jjcp_cpmc'],
+                'jjcp_cpdh' => $item['jjcp_cpdh'],
+                'order_ddbh' => $item['order_ddbh'],
+                'jjcp_gdbh' => $item['jjcp_gdbh'],
                 'jjcp_sl'   => intval($item['jjcp_sl']),
                 'jjcp_smb'  => '已入库',
+                'company'  => $userinfo['company'],
                 'created_at' => date('Y-m-d H:i:s')
             ];
         }
 
         try {
-            // 批量插入 MongoDB 集合(表) Finished_products
             $mongo->name('Finished_products')->insertAll($insertList);
             return json(['status' => 'success', 'msg' => '成功插入 MongoDB']);
         } catch (\Exception $e) {

+ 15 - 7
application/admin/controller/Inventorydetails.php

@@ -38,23 +38,31 @@ class Inventorydetails extends Backend
 
     public function index()
     {
-        // 1. 获取前端参数:搜索关键字、页码、每页条数
-        $search = input('get.search');
+        $search = input('');
         $page = input('get.page', 1);
         $limit = input('get.limit', 10);
-
-        // 2. 连接 MongoDB(使用 config/database.php 中名为 mongodb 的连接)
         $mongo = \think\Db::connect('mongodb');
-        $where = ['jjcp_cpdh' => ['like', '%' . $search . '%']];
-        $total = $mongo->name('finished_products')->where($where)->count();
+
+        // 初始化查询条件
+        $where = [];
+
+        if (!empty($search['search'])) {
+            // 使用正则表达式来实现模糊匹配,'i' 表示忽略大小写
+            $where['jjcp_cpdh|jjcp_cpmc|jjcp_gdbh|order_ddbh'] = new \MongoDB\BSON\Regex($search['search'], 'i');
+        }
+
         $data = $mongo->name('finished_products')
             ->limit(($page - 1) * $limit, $limit)
+            ->where($where)
             ->select();
+        usort($data, function ($a, $b) {
+            return strtotime($b['created_at']) - strtotime($a['created_at']);
+        });
 
         if (request()->isAjax()) {
             return json([
                 'data'  => $data,
-                'total' => $total,
+                'total' => count($data),
                 'page'  => $page,
                 'limit' => $limit
             ]);

+ 124 - 2
application/admin/controller/Officialaccount.php

@@ -3,6 +3,9 @@
 namespace app\admin\controller;
 
 use app\admin\model\AdminLog;
+use app\admin\model\QcodeExport;
+use app\admin\model\QcodeGoods;
+use app\admin\model\QcodeLarge;
 use app\common\controller\Backend;
 use think\Config;
 use think\Db;
@@ -26,16 +29,135 @@ class Officialaccount extends Backend
         $this->request->filter('trim,strip_tags,htmlspecialchars');
     }
 
-    public function index(){
-        echo '测试连接成功';
+    public function index()
+    {
+        $goods = new QcodeGoods();
+        $export = new QcodeExport();
+        $large = new QcodeLarge();
+        $userinfo = Session::get('admin');
+
+        $search = "05 05284607";
+//        $search = "05 05296185";
+
+        $good_list = $goods->where('shdh', $search)->find();
+
+        if (strpos($good_list['export_id'], ',') === false) {
+            $export_id[0] = $good_list['export_id'];
+        } else {
+            $export_id = explode(',', $good_list['export_id']);
+        }
+
+        $data = [];
+        $motter_nos = []; // 用于存储 motter_no 字段
+
+        foreach ($export_id as $k => $v) {
+            $data[$k] = $export->where('_id', $v)->find();
+            // 确保 $data[$k] 是一个有效的对象
+            if ($data[$k] instanceof QcodeExport) {
+                if (!empty($data[$k]['order_ddbh'])) {
+                    $motter_nos[] = $data[$k]['order_ddbh'];
+                }
+            }
+
+            $large_str = explode(',', $data[$k]['large_str']);
+            $large_list = $large->name($userinfo['company'] . '_' . 'qcode_large')->whereIn('_id', $large_str)->select();
+            $large_num = $large_weight = 0;
+
+            foreach ($large_list as $value) {
+                $large_num += $value['l_num']; // 累加数量
+                $large_weight += $value['l_weight']; // 累加重量
+            }
+
+            // 更新数据
+            $data[$k]['l_num'] = $large_num / 10000; // 转换数量
+            $data[$k]['l_weight'] = $large_weight; // 更新重量
+
+            // 添加 motter_no 到数组
+            if (!empty($data[$k]['order_ddbh'])) {
+                $order_ddbh[] = $data[$k]['order_ddbh'];
+            }
+        }
+
+        // 拼接 motter_no 字段
+        $good_list['order_ddbh'] = implode(',', $order_ddbh);
+
+        // 继续处理其他数据
+        $good_list['address'] = $userinfo['company_address'];
+        $good_list['data'] = $data;
+        $good_list['count'] = count($data);
+        $good_list['shrq_date'] = substr($good_list['create_time'], 0, 10);
+
+        if ($good_list['note'] === 'NULL') {
+            $good_list['note'] = '';
+        }
+
+        // 新增代码
+        $good_array = $good_list ? $good_list->toArray() : [];
+        $dataList = $good_array['data'] ?? [];
+
+        // 步骤1:按照 create_time 升序排序
+        usort($dataList, function ($a, $b) {
+            return strtotime($a['create_time']) - strtotime($b['create_time']);
+        });
+
+        // 步骤2:添加 large_ber 字段
+        $start = 1;
+        foreach ($dataList as &$item) {
+            $count = intval($item['large_num']);
+            $end = $start + $count - 1;
+            $item['large_ber'] = ($start === $end) ? (string)$start : "$start-$end";
+            $start = $end + 1;
+        }
+        unset($item);
+
+//        echo "<pre>";
+//        print_r($dataList);
+//        echo "<pre>";
+
+        // 字段中文命名映射表(仅保留这些字段)
+        $fieldMap = [
+            'order_ddbh'     => '销售单号',
+            'large_ber'      => '托盘序号',
+            'matter_name'    => '产品名称',
+            'total_boxes'    => '每托箱数',
+            'tray_num'       => '每层箱数',
+            'box_num'        => '每托层数',
+            'large_num'      => '托盘数',
+            'larger_num'     => '总箱数',
+        ];
+
+        // 最终数据列表,只保留映射字段
+        $finalList = [];
+        foreach ($dataList as $item) {
+            $row = [];
+
+            // 添加映射字段
+            foreach ($fieldMap as $fieldKey => $fieldName) {
+                if (isset($item[$fieldKey])) {
+                    $row[$fieldName] = $item[$fieldKey];
+                }
+            }
+
+            // 拼接托盘规格(格式:长×宽)
+            if (isset($item['pallet_length']) && isset($item['pallet_width'])) {
+                $row['托盘规格'] = $item['pallet_length'] . '×' . $item['pallet_width'];
+            }
+
+            $finalList[] = $row;
+        }
+        echo "<pre>";
+        print_r($finalList);
+        echo "</pre>";
     }
 
 
+
     /**
      *1.服务器接口,微信公众平台填写的url
      * http://域名/控制器/link
      */
     public function link(){
+        echo '123';die;
         $echostr=$_GET['echostr'];//微信服务器提供的 随机字符串
         if ($this->check()){//验证签名是否正确
             echo $echostr;

+ 12 - 5
application/admin/controller/QcodeAdd.php

@@ -80,9 +80,10 @@ class QcodeAdd extends Backend
 
         // 1. 获取所有产品的 ID
         $product_id = $company
-            ->name((int)$userinfo['company'].'_'.'qcode_company')
-            ->where('delete_time','')
+            ->name((int)$userinfo['company'] . '_' . 'qcode_company')
+            ->where('delete_time', '')
             ->column('product_id');
+
         // 2. 查找产品信息:构建 product_code => 全部信息数组
         $product_info = [];
         foreach ($product_id as $v) {
@@ -93,17 +94,19 @@ class QcodeAdd extends Backend
             if ($list) {
                 // 记录完整产品信息
                 $product_info[$list['product_code']] = [
-                    'jjcp_cpmc' => $list['product_name'],     // 产品名称
-                    'jjcp_cpdh' => $list['product_code'],     // 产品代码
+                    'jjcp_cpmc' => $list['product_name'], // 产品名称
+                    'jjcp_cpdh' => $list['product_code'], // 产品代码
                 ];
             }
         }
+
         // 3. 从 Mongo 查询 jjcp_cpmc 名称
         $mongo = \think\Db::connect('mongodb');
         $mongo_products = $mongo
             ->name('finished_products')
-            ->field('jjcp_cpmc')
+            ->field('jjcp_cpmc, jjcp_cpdh, order_ddbh, jjcp_gdbh, jjcp_sl')
             ->select();
+
         // 4. 比对名称,匹配成功的组装完整 vo 结构
         $matched_products = [];
         foreach ($product_info as $code => $item) {
@@ -112,6 +115,9 @@ class QcodeAdd extends Backend
                     $matched_products[] = [
                         'jjcp_cpmc' => $item['jjcp_cpmc'],
                         'jjcp_cpdh' => $item['jjcp_cpdh'],
+                        'order_ddbh' => $mp['order_ddbh'], // 从 MongoDB 查找
+                        'jjcp_gdbh' => $mp['jjcp_gdbh'],   // 从 MongoDB 查找
+                        'jjcp_sl' => $mp['jjcp_sl'],       // 从 MongoDB 查找
                         'product_code' => $code,
                     ];
                 }
@@ -230,6 +236,7 @@ class QcodeAdd extends Backend
             'supplier_id' => $userinfo['id'],
             'matter_name' => $productList['product_name'],
             'matter_no' => $productList['product_code'],//生产批次号
+            'order_ddbh' => $data['order_ddbh'],//销售订单号
             'matter_id' => substr(json_encode($productList['_id']),9,-2),
             'matter_type' => $productList['temple'],
             'manufacture_date' => (int)date('ymd',strtotime($data['manufacture_date'])),

+ 12 - 6
application/admin/view/finishedproduct/index.html

@@ -35,7 +35,7 @@
         }
 
         .scroll-table-wrapper {
-            max-height: 400px;
+            max-height: 600px;
             overflow-y: auto;
             border: 1px solid #ddd;
             background: white;
@@ -146,6 +146,8 @@
         <thead>
         <tr>
             <th style="width: 4%"><input type="checkbox" id="checkAll"></th>
+            <th style="width: 15%">工单编号</th>
+            <th style="width: 10%">销售订单号</th>
             <th style="width: 10%">产品代号</th>
             <th style="width: 30%">产品名称</th>
             <th style="width: 10%">数量</th>
@@ -170,7 +172,7 @@
     </div>
 </div>
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">
-<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
 <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
 <script>
     $(document).on('click', '.btn-refresh', function () {
@@ -211,6 +213,8 @@
                     res.data.forEach(row => {
                         tbody.append(`<tr>
                             <td><input type="checkbox" class="row-check"></td>
+                            <td>${row.order_ddbh}</td>
+                            <td>${row.jjcp_gdbh}</td>
                             <td>${row.jjcp_cpdh}</td>
                             <td>${row.jjcp_cpmc}</td>
                             <td>${row.jjcp_sl}</td>
@@ -332,10 +336,12 @@
             if (checkbox.is(':checked')) {
                 const row = $(this).find('td');
                 selectedData.push({
-                    jjcp_cpdh: row.eq(1).text().trim(),
-                    jjcp_cpmc: row.eq(2).text().trim(),
-                    jjcp_sl: row.eq(3).text().trim(),
-                    jjcp_smb: row.eq(4).text().trim()
+                    order_ddbh: row.eq(1).text().trim(),
+                    jjcp_gdbh: row.eq(2).text().trim(),
+                    jjcp_cpdh: row.eq(3).text().trim(),
+                    jjcp_cpmc: row.eq(4).text().trim(),
+                    jjcp_sl: row.eq(5).text().trim(),
+                    jjcp_smb: row.eq(6).text().trim()
                 });
             }
         });

+ 89 - 2
application/admin/view/inventorydetails/index.html

@@ -131,6 +131,22 @@
             0% { transform: rotate(0deg); }
             100% { transform: rotate(360deg); }
         }
+        .form-group {
+            margin-bottom: 15px;
+        }
+
+        .form-group label {
+            display: block;
+            margin-bottom: 5px;
+            font-weight: bold;
+        }
+
+        .form-control {
+            width: 100%;
+            padding: 6px 10px;
+            border: 1px solid #ccc;
+            border-radius: 4px;
+        }
     </style>
 </head>
 <body>
@@ -140,11 +156,14 @@
     <i class="fas fa-sync-alt"></i> <!-- 这是刷新图标 -->
 </a>
 <input type="text" id="searchInput" placeholder="搜索产品名称..." />
+<button id="addBtn" class="btn btn-success" style=" height: 40px;">新增产品</button>
 <div class="scroll-table-wrapper">
     <table id="productTable">
         <thead>
         <tr>
             <th style="width: 4%"><input type="checkbox" id="checkAll"></th>
+            <th style="width: 15%">工单编号</th>
+            <th style="width: 10%">销售订单号</th>
             <th style="width: 10%">产品代号</th>
             <th style="width: 30%">产品名称</th>
             <th style="width: 10%">数量</th>
@@ -169,8 +188,10 @@
     </div>
 </div>
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">
-<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
 <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
+<!-- 引入 Layer,如果已引入可跳过 -->
+<script src="https://cdn.jsdelivr.net/npm/layer/dist/layer.js"></script>
 <script>
     $(document).on('click', '.btn-refresh', function () {
         currentPage = 1; // 可选:回到第一页
@@ -199,7 +220,7 @@
 
         $.ajax({
             method: "GET",
-            url: "Inventorydetails/index",
+            url: "inventorydetails/index",
             data: { page: page, search: search, limit: pageSize },
             success: function (res) {
                 const tbody = $('#tableBody');
@@ -210,6 +231,8 @@
                     res.data.forEach(row => {
                         tbody.append(`<tr>
                             <td><input type="checkbox" class="row-check"></td>
+                            <td>${row.order_ddbh}</td>
+                            <td>${row.jjcp_gdbh}</td>
                             <td>${row.jjcp_cpdh}</td>
                             <td>${row.jjcp_cpmc}</td>
                             <td>${row.jjcp_sl}</td>
@@ -324,6 +347,70 @@
     $(document).ready(function () {
         loadData();
     });
+
+    $('#addBtn').on('click', function () {
+        var contentHtml = `
+    <form id="addForm" style="padding: 20px 30px;" class="form-horizontal">
+        <div class="form-group" style="display: flex; align-items: center; margin-bottom: 15px;">
+            <label style="width: 90px;">工单编号</label>
+            <input type="text" name="order_ddbh" class="form-control" style="flex:1;" required />
+        </div>
+        <div class="form-group" style="display: flex; align-items: center; margin-bottom: 15px;">
+            <label style="width: 90px;">销售订单号</label>
+            <input type="text" name="jjcp_gdbh" class="form-control" style="flex:1;" required />
+        </div>
+        <div class="form-group" style="display: flex; align-items: center; margin-bottom: 15px;">
+            <label style="width: 90px;">产品代号</label>
+            <input type="text" name="jjcp_cpdh" class="form-control" style="flex:1;" required />
+        </div>
+        <div class="form-group" style="display: flex; align-items: center; margin-bottom: 15px;">
+            <label style="width: 90px;">产品名称</label>
+            <input type="text" name="jjcp_cpmc" class="form-control" style="flex:1;" required />
+        </div>
+        <div class="form-group" style="display: flex; align-items: center;">
+            <label style="width: 90px;">数量</label>
+            <input type="number" name="jjcp_sl" class="form-control" style="flex:1;" required />
+        </div>
+    </form>`;
+
+        layer.open({
+            type: 1,
+            title: '新增入库记录',
+            area: ['50%', '50%'],       // 初始窗口大小
+            shadeClose: true,               // 点击遮罩关闭
+            resize: true,                   // 允许拉伸
+            maxmin: true,                   // 显示最大化/最小化按钮
+            btn: ['入库', '取消'],
+            content: contentHtml,
+            yes: function (index) {
+                var formData = {};
+                $('#addForm').serializeArray().forEach(function (item) {
+                    formData[item.name] = item.value.trim();
+                });
+
+                // 简单校验
+                if (!formData.order_ddbh || !formData.jjcp_gdbh || !formData.jjcp_cpdh || !formData.jjcp_cpmc || !formData.jjcp_sl) {
+                    layer.msg('请填写所有字段');
+                    return;
+                }
+
+                $.ajax({
+                    method: "POST",
+                    url: "Finishedproduct/finished",
+                    contentType: "application/json",
+                    data: JSON.stringify({ data: [formData] }), // 注意:加了中括号 []
+                    success: function () {
+                        layer.msg('入库成功!');
+                        layer.close(index);
+                        loadData();
+                    },
+                    error: function () {
+                        layer.msg('入库失败!');
+                    }
+                });
+            }
+        });
+    });
 </script>
 
 </body>

+ 16 - 4
application/admin/view/qcode_add/index.html

@@ -68,7 +68,7 @@
                 <select class="form-control select2" id="c-product_name" name="product_name">
                     <option value="">==================>选择<===================</option>
                     {volist name='product' id='vo'}
-                    <option value="{$vo.product_code}" data-cpdh="{$vo.jjcp_cpdh}">{$vo.jjcp_cpmc}</option>
+                    <option value="{$vo.product_code}" data-order-ddbh="{$vo.order_ddbh}" data-jjcp-gdbh="{$vo.jjcp_gdbh}" data-jjcp-sl="{$vo.jjcp_sl}" data-cpdh="{$vo.jjcp_cpdh}">{$vo.jjcp_cpmc}</option>
                     {/volist}
                 </select>
             </div>
@@ -185,7 +185,7 @@
             <tr>
                 <td><span>每托高度</span></td>
                 <td style="padding: 5px 0px 0px 5px; position: relative;">
-                    <input type="text" id="pallet_height" name="pallet_height" data-rule="required"
+                    <input type="text" id="pallet_height" name="pallet_height"
                            style="width: 160px;" placeholder="可选择或输入" autocomplete="off">
                     <ul id="height-suggestions" style="
                                 position: absolute;
@@ -291,6 +291,10 @@
                 <td><span>产品代号</span></td>
                 <td style="padding: 5px 0px 0px 5px"><input type="text" id="c-jjcp_cpdh" name="jjcp_cpdh" disabled data-rule="required"></td>
             </tr>
+            <tr>
+                <td><span>销售订单号</span></td>
+                <td style="padding: 5px 0px 0px 5px"><input type="text" id="c-order_ddbh" name="order_ddbh" disabled data-rule="required"></td>
+            </tr>
             <tr>
                 <td><span>生产批次号</span></td>
                 <td>
@@ -424,15 +428,23 @@
     }
 
     $('#c-product_name').on('change', function () {
-        // 获取选中的产品编码和产品代号
+        // 获取选中的选项
         var selectedOption = $(this).find('option:selected');
+
+        // 获取对应的数据
+        var orderDdbh = selectedOption.data('order-ddbh');
+        var jjcpGdbh = selectedOption.data('jjcp-gdbh');
+        var jjcpSl = selectedOption.data('jjcp-sl');
         var product_code = selectedOption.val();  // 获取产品编码
         var cpdh = selectedOption.data('cpdh');   // 获取产品代号
-
+        console.log(orderDdbh)
         // 设置产品编码和产品代号到对应的输入框
         $('#c-product_code').val(product_code);
         $('#c-jjcp_cpdh').val(cpdh);
 
+        // 填充销售订单号输入框
+        $('#c-order_ddbh').val(orderDdbh);
+
         // 发起 AJAX 请求获取产品信息
         $.ajax({
             method: "GET",

+ 117 - 2
application/index/controller/Index.php

@@ -3,6 +3,7 @@
 namespace app\index\controller;
 
 use app\common\controller\Frontend;
+use think\Db;
 
 class Index extends Frontend
 {
@@ -11,9 +12,123 @@ class Index extends Frontend
     protected $noNeedRight = '*';
     protected $layout = '';
 
-    public function index()
-    {
+    /**
+     *1.服务器接口,微信公众平台填写的url
+     * http://域名/控制器/link
+     */
+    public function link(){
+        $echostr=$_GET['echostr'];//微信服务器提供的 随机字符串
+        if ($this->check()){//验证签名是否正确
+            echo $echostr;
+            exit;
+        }
+    }
+
+    /**
+     * 2.验证签名
+     */
+    public function check(){
+        $signature=$_GET['signature'];  //微信服务器提供的 微信加密签名
+        $timestamp=$_GET['timestamp'];  //微信服务器提供的 时间戳
+        $nonce=$_GET['nonce'];          //微信服务器提供的 随机数
+        $token='z9EGslrxPpbicuy48mkw';  //自己定义的 Token
+        $tmpArr = array($token,$timestamp,$nonce);//数组
+        sort($tmpArr);           //排序
+        $tmpstr=implode($tmpArr);       //数据转字符串
+        $tmpstr=sha1($tmpstr);          //字符串加密
+        if ($tmpstr==$signature){
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+
+    /**
+     * 获取access_token存进数据库
+     */
+    public function access_token(){
+        $token = Db::name("v_access_token")->find(1);
+        echo "<pre>";
+        print_r($token);
+        echo "<pre>";die;
+        $date = date('Y-m-d H:i:s');
+        if (strtotime($token['addtime']) > strtotime($date)){
+            return $token['access_token'];
+        }else{
+            $appid = "你的appid";
+            $appsecret = "你的appsecret ";
+            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
+            $rt = $this->request_get($url);
+            $data['access_token']=$rt['access_token'];
+            $data['addtime']= date("Y-m-d H:i:s", strtotime("$date +60 min"));
+            $rt =Db::name("v_access_token")->where("id='1'")->save($data);
+            if ($rt){
+                $token = Db::name("v_access_token")->find(1);
+                return $token['access_token'];
+            }else{
+                return "获取access_token错误";
+            }
+        }
+    }
+
+    /**
+     * 3.发送http请求,并返回数据
+     * @param $url
+     * @return mixed
+     */
+    public function request_get($url){
+        $curl = curl_init();// 1. 初始化一个 cURL 对象
+        curl_setopt($curl,CURLOPT_URL,$url);// 2.设置你需要抓取的URL
+        curl_setopt($curl,CURLOPT_HEADER,0);
+        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1 );// 3.https必须加这个,不加不好使(不多加解释,东西太多了
+        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
+        $res = curl_exec($curl);// 5. 运行cURL,请求网页
+        curl_close($curl);// 6. 关闭URL请求
+        $json_obj = json_decode($res,true);
+        return $json_obj;
+    }
+
+
+    public function user(){
+        //1.用户点击静默授权链接 获取用户的code
+        $code = input("code");
+        echo "<pre>";
+        print_r($code);
+        echo "<pre>";
+    }
+
+
+    public function index(){
+//        $search = input('get.search');
+        $search = "05 05289607";
+
+        // 2. 连接 MongoDB(使用 config/database.php 中名为 mongodb 的连接)
+        $mongo = \think\Db::connect('mongodb');
+        $data = $mongo->name('qcode_goods')
+            ->where('shdh',$search)
+            ->select();
+        echo "<pre>";
+        print_r($data);
+        echo "<pre>";die;
+
         return $this->view->fetch();
     }
 
+    /**
+     * 判断是否是手机端
+     *
+     * @return bool
+     */
+    private function isMobile()
+    {
+        // 获取用户代理
+        $userAgent = $_SERVER['HTTP_USER_AGENT'];
+        // 定义手机设备的正则表达式
+        $mobileRegex = "/(android|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile)/i";
+        // 判断用户代理是否匹配手机设备
+        return preg_match($mobileRegex, $userAgent);
+    }
+
+
 }

+ 203 - 151
public/assets/js/backend/deliver.js

@@ -184,7 +184,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                                 return row.pallet_length + ' * ' + row.pallet_width;
                             }
                         },
-                        {field: 'small_num', title: '总箱数', operate: false},
+                        // {field: 'small_num', title: '总箱数', operate: false},
+                        {field: 'larger_num', title: '总箱数', operate: false},
 
                         // {field: 'matter_no', title: '产品编码', operate: false},
                         {field: 'username', title: '所属用户', operate: 'LIKE'},
@@ -244,7 +245,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                if (plate_number == null || plate_number === ''){
                    layer.confirm('车牌号不能为空');
                }
-               var note = $('c-note').val();
+               var note = $('#c-note').val();
                Fast.api.ajax({
                    url:'deliver/apply_add',
                    data:{
@@ -317,165 +318,216 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                                     classname: 'btn btn-xs btn-success btn-magic btn-ajax',
                                     icon: 'fa fa-magic',
                                     url: 'deliver/printqrcode/id/{ids}',
-                                    // confirm: '确认发送',
-
-                                    // success: function (data,res) {
-                                    //     if (res.code === 1){
-                                    //         var arr = res.data.data;
-                                    //         var note='';
-                                    //         var html = '<div style="width: 1100px;height: 100px;position: relative;">\n' +
-                                    //             '                   <div style="float: left">\n' +
-                                    //             '                       <div style="width: 1000px;font-weight: 400;font-size: 28px;text-align: center;line-height: 50px;" class="company">'+res.data.supplier_name+'</div>\n' +
-                                    //             '                       <div style="width: 1000px;font-weight: 400;font-size: 24px;text-align: center;line-height: 50px;">送货单</div>\n' +
-                                    //             '                   </div>\n' +
-                                    //             '                   <div id="qrcode" style="display:inline-block;width: 105px;height: 105px;position: absolute;right: 100px;top: -5px;">\n' +
-                                    //             '                       <img src="" style="width: 105px;height: 105px;" id="qrcode_image"/>\n' +
-                                    //             '                   </div>\n' +
-                                    //             '              </div>\n' +
-                                    //             '              <table class="tg1" style="margin-top: 3px;border-collapse:collapse;border-spacing:0;font-weight:500;width:1186px">\n' +
-                                    //             '                   <tr class="info">\n' +
-                                    //             '                       <td colspan="6" style="border:none">客户名称:河南中烟工业有限责任公司黄金叶生产制造中心</td>\n' +
-                                    //             '                       <td colspan="4" style="border:none">送货单号:<span style="font-size: 16px;" id="shdh">'+res.data.shdh+'</span></td>\n' +
-                                    //             '                   </tr>\n' +
-                                    //             '                   <tr class="info">\n' +
-                                    //             '                       <td colspan="6" style="border:none">送货地址:河南省郑州市经开区第三大街9号</td>\n' +
-                                    //             '                       <td colspan="4" style="border:none">送货日期:<span style="font-size: 16px;"  id="shrq_date">'+res.data.shrq_date+'</span></td>\n' +
-                                    //             '                   </tr>\n' +
-                                    //             '               </table>\n' +
-                                    //             '               <br>\n' +
-                                    //             '               <table class="tg1" style="table-layout:fixed;width: 1070px;border-collapse:collapse;border-spacing:0;font-weight:500; position: relative;" id="table">'+
-                                    //             '                   <tr><th class="tg-s6z2" style="font-family:Arial, sans-serif;font-size:20px;text-align:center;font-weight:500;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;;;">托盘序号</th>' +
-                                    //             '                   <tr><th class="tg-s6z2" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;font-weight:500;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;;">产品名称</th>' +
-                                    //             '                   <th class="tg-s6z2" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;font-weight:500;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;;">每托箱数</th>' +
-                                    //             '                   <th class="tg-s6z2" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;font-weight:500;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;">每层箱数</th>' +
-                                    //             '                   <th class="tg-s6z2" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;font-weight:500;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;">每托层数</th>' +
-                                    //             '                   <th class="tg-s6z2" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;font-weight:500;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;">每托高度</th>' +
-                                    //             '                   <th class="tg-s6z2" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;font-weight:500;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;">托盘规格</th>' +
-                                    //             '                   <th class="tg-s6z2" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;font-weight:500;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;">托盘数</th>' +
-                                    //             '                   <th class="tg-s6z2" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;font-weight:500;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;">总箱数</th>' +
-                                    //             // '                   <th id="explain" rowspan="'+(res.data.count+1)+'" width="7%" style="border: none"><span style="writing-mode: tb-rl;height: 300px;font-size:16px;text-align: center;">' +
-                                    //             // '                   蓝联(回):业务 黄联(回):运输 '+'<br>'+'白联:存根 红联:财务 绿联:客户</span></th>' +
-                                    //             '</tr>';
-                                    //                             for (var i=0;i < arr.length;i++){
-                                    //                                 html+= '<tr><td class="tg-031e" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].large_ber+'</td>';
-                                    //                                 html+= '<tr><td class="tg-031e" style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].matter_name+'</td>';
-                                    //                                 html+= '<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].total_boxes+'</td>';
-                                    //                                 html+= '<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].tray_num+'</td>';
-                                    //                                 html+= '<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].box_num+'</td>';
-                                    //                                 // if(arr[i].mater_type==1){
-                                    //                                     html+='<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].pallet_height+'</td>';
-                                    //                                     html+='<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].pallet_length + '*' + arr[i].pallet_width+'</td>';
-                                    //                                     html+='<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].large_num+'</td>';
-                                    //                                     html+='<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].small_num+'</td>';
-                                    //                                 // }else if (arr[i].mater_type==2){
-                                    //                                 //     html+= '<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">kg</td>';
-                                    //                                 //     html+='<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].l_weight +'</td>';
-                                    //                                 //     html+='<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].small_num+'件*'+parseFloat(arr[i].num)/1000+'kg'+'</td>';
-                                    //                                 // }else if (arr[i].mater_type==3){
-                                    //                                 //     html+= '<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">万支</td>';
-                                    //                                 //     html+='<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+parseFloat(arr[i].num)*parseFloat(arr[i].small_num)/10000+'</td>';
-                                    //                                 //     html+='<td class="tg-031e" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+arr[i].small_num+'件*'+parseInt(arr[i].num)+'支'+'</td>';
-                                    //                                 // }
-                                    //                             }
-                                    //                             // html+= '<tr><td class="tg-031e" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">送货单备注</td>' +
-                                    //             // '                       <td colspan="6" class="tg-031e" style="font-family:Arial, sans-serif;font-size:18px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">'+res.data.note+'</td>' +
-                                    //             //                     '</tr>'+
-                                    //             '               </table>\n' +
-                                    //             '               <table class="tg2" style="margin-top: 3px;border-collapse:collapse;border-spacing:0;font-weight:500;width:1086px;font-size: 16px;">\n' +
-                                    //             '                   <tr class="footer">\n' +
-                                    //             '                       <td colspan="3">发货单位:<span class="company">'+res.data.supplier_name+'</span></td>\n' +
-                                    //             '                       <td colspan="3">司机/司机电话:<span id="deliveryman">'+res.data.deliveryman+'&nbsp;&nbsp;'+res.data.shr_phone+'</span></td>\n' +
-                                    //             '                       <td colspan="3">车牌号:<span id="carid">'+res.data.plate_number+'</span></td>\n' +
-                                    //             '                   </tr>\n' +
-                                    //             '                   <tr class="footer">\n' +
-                                    //             '                       <td colspan="7">发货单位地址:<span id="address">'+res.data.address+'</span></td>\n' +
-                                    //             '                       <td colspan="3">收货单位(签名、盖章)</td>\n' +
-                                    //             '                   </tr>\n' +
-                                    //             '               </table>'
-                                    //         $("#printcode").html(html)
-                                    //         var ee = $('#qrcode_image').attr('src',res.data.qrcode_add);
-                                    //         // 将打印的区域赋值,进行打印
-                                    //         ee.on('load',function () {
-                                    //             var printHTML = document.querySelector('#printcode').innerHTML;
-                                    //             window.document.body.innerHTML = printHTML;
-                                    //             window.print();
-                                    //             // window.location.reload(); // 打印完成后重新加载页面
-                                    //         })
-                                    //     }
-                                    //     return false;
-                                    // },
-
                                     success: function (data, res) {
-                                        console.log(data);
-                                        console.log(res);
                                         if (res.code === 1) {
-                                            var arr = res.data.data;
+                                            const arr = res.data.data;
+
+                                            let totalTray = 0;
+                                            let totalBox = 0;
+                                            const productNames = [];
+                                            const productQuantities = [];
+
+                                            // 遍历数据,统计数量
+                                            for (let i = 0; i < arr.length; i++) {
+                                                totalTray += parseInt(arr[i].large_num || 0);
+                                                totalBox += parseInt(arr[i].larger_num || 0);
+                                                productNames.push(arr[i].matter_name);
+                                                productQuantities.push(arr[i].total_boxes * arr[i].larger_num);
+                                            }
+
+                                            // 根据出货数量计算手工盒子数量
+                                            const manualBoxes = productQuantities.reduce((total, qty) => total + qty, 0);
+
+                                            // 纸质卡片数量可按业务设定(例:每托2张)
+                                            const paperCards = totalTray * totalBox;
+
                                             let html = `
-                                                    <div style="width: 1100px;height: 100px;position: relative;">
-                                                        <div style="float: left">
-<!--                                                            <div style="width: 1000px;font-weight: 400;font-size: 28px;text-align: center;line-height: 50px;" class="company">${res.data.supplier_name}</div>-->
-<!--                                                            <div style="width: 1000px;font-weight: 400;font-size: 24px;text-align: center;line-height: 50px;">送货单</div>-->
-                                                            <div style="width: 1000px;font-weight: 400;font-size: 28px;text-align: center;line-height: 50px;" class="company"></div>
-                                                            <div style="width: 1000px;font-weight: 400;font-size: 24px;text-align: center;line-height: 50px;"></div>
-                                                        </div>
-                                                        <div id="qrcode" style="display:inline-block;width: 105px;height: 105px;position: absolute;right: 100px;top: -5px;">
-<!--                                                            <img src="${res.data.qrcode_add}" style="width: 105px;height: 105px;" id="qrcode_image"/>-->
-                                                        </div>
-                                                    </div>
-
-                                                    <table class="tg1" style="margin-top: 3px;border-collapse:collapse;width:1186px;font-weight:500;">
-<!--                                                        <tr><td colspan="6" style="border:none">客户名称:河南中烟工业有限责任公司黄金叶生产制造中心</td><td colspan="4" style="border:none">送货单号:<span id="shdh">${res.data.shdh}</span></td></tr>-->
-<!--                                                        <tr><td colspan="6" style="border:none">送货地址:河南省郑州市经开区第三大街9号</td><td colspan="4" style="border:none">送货日期:<span id="shrq_date">${res.data.shrq_date}</span></td></tr>-->
-                                                    </table>
-                                            
-                                                    <table class="tg1" style="table-layout:fixed;width: 1070px;border-collapse:collapse;border-spacing:0;font-weight:500; position: relative;" >
-                                                        <tr>
-                                                            <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">托盘序号</th>
-                                                            <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;width: 360px">产品名称</th>
-                                                            <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">每托箱数</th>
-                                                            <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">每层箱数</th>
-                                                            <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">每托层数</th>
-                                                            <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">每托高度</th>
-                                                            <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">托盘规格</th>
-                                                            <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">托盘数</th>
-                                                            <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">总箱数</th>
-                                                        </tr>
-                                                    `;
+        <div style="width: 1100px; height: 100px; position: relative;">
+            <div style="float: left">
+                <div style="width: 1000px; font-size: 28px; font-weight: bold; text-align: center; line-height: 50px;">${res.data.supplier_name}</div>
+                <div style="width: 1000px; font-size: 24px; text-align: center; line-height: 50px;">送货单</div>
+            </div>
+            <div id="qrcode" style="position: absolute; right: 100px; top: -5px; width: 105px; height: 105px;">
+                <img src="${res.data.qrcode_add}" style="width: 105px; height: 105px;" id="qrcode_image"/>
+            </div>
+        </div>
+
+        <table style="margin-bottom: 10px; width: 1186px; font-weight: 500; border-collapse: collapse;">
+            <tr>
+                <td colspan="6" style="border: none;">客户名称:河南中烟工业有限责任公司黄金叶生产制造中心</td>
+                <td colspan="4" style="border: none;">送货单号:<span id="shdh">${res.data.shdh}</span></td>
+            </tr>
+            <tr>
+                <td colspan="6" style="border: none;">送货地址:河南省郑州市经开区第三大街9号</td>
+                <td colspan="4" style="border: none;">送货日期:<span id="shrq_date">${res.data.shrq_date}</span></td>
+            </tr>
+        </table>
+
+        <div style="width: 1070px; font-size: 20px; text-align: center; border: 1px solid black; border-bottom: none;">
+            ${res.data.order_ddbh || ''}${res.data.note || ''}
+        </div>
+
+        <table style="width: 1070px; border-collapse: collapse; table-layout: fixed; font-size: 16px; text-align: center; margin-top: 0;">
+            <tr style="font-weight: bold;">
+                <th style="border: 1px solid black;text-align: center;">托盘序号</th>
+                <th style="border: 1px solid black;text-align: center; width: 360px;">产品名称</th>
+                <th style="border: 1px solid black;text-align: center;">每托箱数</th>
+                <th style="border: 1px solid black;text-align: center;">每层箱数</th>
+                <th style="border: 1px solid black;text-align: center;">每托层数</th>
+                <th style="border: 1px solid black;text-align: center;">每托高度</th>
+                <th style="border: 1px solid black;text-align: center;">托盘规格</th>
+                <th style="border: 1px solid black;text-align: center;">托盘数</th>
+                <th style="border: 1px solid black;text-align: center;">总箱数</th>
+            </tr>
+        `;
+
                                             for (let i = 0; i < arr.length; i++) {
                                                 html += `
-                                                        <tr>
-                                                            <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].large_ber}</td>
-                                                            <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].matter_name}</td>
-                                                            <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].total_boxes}</td>
-                                                            <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].tray_num}</td>
-                                                            <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].box_num}</td>
-                                                            <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].pallet_height}</td>
-                                                            <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].pallet_length} * ${arr[i].pallet_width}</td>
-                                                            <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].large_num}</td>
-                                                            <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].small_num}</td>
-                                                        </tr>
-                                                        `;
+            <tr>
+                <td style="border: 1px solid black;">第${arr[i].large_ber}托</td>
+                <td style="border: 1px solid black;">${arr[i].matter_name}</td>
+                <td style="border: 1px solid black;">${arr[i].total_boxes}</td>
+                <td style="border: 1px solid black;">${arr[i].tray_num}</td>
+                <td style="border: 1px solid black;">${arr[i].box_num}</td>
+                <td style="border: 1px solid black;">${arr[i].pallet_height}</td>
+                <td style="border: 1px solid black;">${arr[i].pallet_length} * ${arr[i].pallet_width}</td>
+                <td style="border: 1px solid black;">${arr[i].large_num}</td>
+                <td style="border: 1px solid black;">${arr[i].larger_num}</td>
+            </tr>
+            `;
                                             }
-                                            // html += `
-                                            //             </table>
-                                            //             <table class="tg2" style="margin-top: 3px;border-collapse:collapse;width:1086px;font-size: 16px;">
-                                            //                 <tr><td colspan="3">发货单位:${res.data.supplier_name}</td><td colspan="3">司机/司机电话:${res.data.deliveryman} &nbsp;&nbsp;${res.data.shr_phone}</td><td colspan="3">车牌号:${res.data.plate_number}</td></tr>
-                                            //                 <tr><td colspan="7">发货单位地址:${res.data.address}</td><td colspan="3">收货单位(签名、盖章)</td></tr>
-                                            //             </table>
-                                            //         `;
-                                            $("#printcode").html(html);
 
-                                            // 正确绑定 load 事件并打印
-                                            // let image = document.getElementById('qrcode_image');
-                                            // image.onload = function () {
-                                                const printHTML = document.querySelector('#printcode').innerHTML;
-                                                document.body.innerHTML = printHTML;
-                                                window.print();
-                                                window.location.reload(); // 可选:打印完重新加载页面
-                                            // };
+                                            const fillCount = 15 - arr.length;
+                                            for (let i = 0; i < fillCount; i++) {
+                                                html += `
+            <tr>
+                <td style="border: 1px solid black;">&nbsp;</td>
+                <td style="border: 1px solid black;"></td>
+                <td style="border: 1px solid black;"></td>
+                <td style="border: 1px solid black;"></td>
+                <td style="border: 1px solid black;"></td>
+                <td style="border: 1px solid black;"></td>
+                <td style="border: 1px solid black;"></td>
+                <td style="border: 1px solid black;"></td>
+                <td style="border: 1px solid black;"></td>
+            </tr>
+            `;
+                                            }
+
+                                            html += `
+        <tr style="font-weight: bold;">
+            <td style="border: 1px solid black;">合计:</td>
+            <td style="border: 1px solid black;"></td>
+            <td style="border: 1px solid black;"></td>
+            <td style="border: 1px solid black;"></td>
+            <td style="border: 1px solid black;"></td>
+            <td style="border: 1px solid black;"></td>
+            <td style="border: 1px solid black;"></td>
+            <td style="border: 1px solid black;">${totalTray}</td>
+            <td style="border: 1px solid black;">${totalBox}</td>
+        </tr>
+        </table>
+
+        <table style="margin-top: 20px; width: 1070px; border-collapse: collapse; font-size: 18px;">
+            <tr>
+                <td colspan="${productNames.length + 2}" style="border: 1px solid black; text-align: left;">
+                    总共出货:${totalBox} 箱 = ${totalTray} 托(手工盒子:${manualBoxes} 套,纸质卡片:${paperCards} 张)
+                </td>
+            </tr>
+            <tr>
+                <td style="border: 1px solid black; text-align: center;">产品名称</td>
+                ${productNames.map(name => `<td style="border: 1px solid black; text-align: center;">${name}</td>`).join('')}
+                <td style="border: 1px solid black; text-align: center;">合计</td>
+            </tr>
+            <tr>
+                <td style="border: 1px solid black; text-align: center;">出货数量</td>
+                ${productQuantities.map(qty => `<td style="border: 1px solid black; text-align: center;">${qty}</td>`).join('')}
+                <td style="border: 1px solid black; text-align: center;">${manualBoxes}</td>
+            </tr>
+        </table>
+
+        <div style="margin-top: 20px; font-size: 14px; font-weight: bold; border: 1px solid black; padding: 10px; text-align: left; width: 1070px;">
+            共 ${totalTray} 托
+            <br/>
+            备注:
+            <br/>(1) 用唛头笔写上托盘序号,托盘唛头打印贴在每托盘上面,打托的时候混托注意摆放和高度,另外不要漏掉了。
+            <br/>(2) 每托烟盒中间放瓦楞,最上面盖个木板,缠绕膜缠结实,护角护好,打打包带,井子形打包
+            <br/>(3) 配托后,请提供具体托盘高度及托盘重量。
+        </div>
+        `;
+
+                                            $("#printcode").html(html);
+                                            const printHTML = document.querySelector('#printcode').innerHTML;
+                                            document.body.innerHTML = printHTML;
+                                            window.print();
+                                            window.location.reload();
                                         }
                                         return false;
                                     },
+                                    // success: function (data, res) {
+                                    //     console.log(data);
+                                    //     console.log(res);
+                                    //     if (res.code === 1) {
+                                    //         var arr = res.data.data;
+                                    //         let html = `
+                                    //                 <div style="width: 1100px;height: 100px;position: relative;">
+                                    //                     <div style="float: left">
+                                    //                         <div style="width: 1000px;font-weight: 400;font-size: 28px;text-align: center;line-height: 50px;" class="company">${res.data.supplier_name}</div>
+                                    //                         <div style="width: 1000px;font-weight: 400;font-size: 24px;text-align: center;line-height: 50px;">送货单</div>
+                                    //                         <div style="width: 1000px;font-weight: 400;font-size: 28px;text-align: center;line-height: 50px;" class="company"></div>
+                                    //                         <div style="width: 1000px;font-weight: 400;font-size: 24px;text-align: center;line-height: 50px;"></div>
+                                    //                     </div>
+                                    //                     <div id="qrcode" style="display:inline-block;width: 105px;height: 105px;position: absolute;right: 100px;top: -5px;">
+                                    //                         <img src="${res.data.qrcode_add}" style="width: 105px;height: 105px;" id="qrcode_image"/>
+                                    //                     </div>
+                                    //                 </div>
+                                    //
+                                    //                 <table class="tg1" style="margin-top: 3px;border-collapse:collapse;width:1186px;font-weight:500;">
+                                    //                     <tr><td colspan="6" style="border:none">客户名称:河南中烟工业有限责任公司黄金叶生产制造中心</td><td colspan="4" style="border:none">送货单号:<span id="shdh">${res.data.shdh}</span></td></tr>
+                                    //                     <tr><td colspan="6" style="border:none">送货地址:河南省郑州市经开区第三大街9号</td><td colspan="4" style="border:none">送货日期:<span id="shrq_date">${res.data.shrq_date}</span></td></tr>
+                                    //                 </table>
+                                    //
+                                    //                 <table class="tg1" style="table-layout:fixed;width: 1070px;border-collapse:collapse;border-spacing:0;font-weight:500; position: relative;" >
+                                    //                     <tr>
+                                    //                         <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">托盘序号</th>
+                                    //                         <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;width: 360px">产品名称</th>
+                                    //                         <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">每托箱数</th>
+                                    //                         <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">每层箱数</th>
+                                    //                         <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">每托层数</th>
+                                    //                         <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">每托高度</th>
+                                    //                         <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">托盘规格</th>
+                                    //                         <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">托盘数</th>
+                                    //                         <th style="font-family:Arial, sans-serif;font-size:20px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">总箱数</th>
+                                    //                     </tr>
+                                    //                 `;
+                                    //         for (let i = 0; i < arr.length; i++) {
+                                    //             html += `
+                                    //                     <tr>
+                                    //                         <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">第${arr[i].large_ber}托</td>
+                                    //                         <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].matter_name}</td>
+                                    //                         <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].total_boxes}</td>
+                                    //                         <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].tray_num}</td>
+                                    //                         <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].box_num}</td>
+                                    //                         <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].pallet_height}</td>
+                                    //                         <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].pallet_length} * ${arr[i].pallet_width}</td>
+                                    //                         <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].large_num}</td>
+                                    //                         <td style="font-family:Arial, sans-serif;font-size:16px;text-align:center;border-style:solid;border-width:1px;overflow:hidden;word-break:break-all;border-color:black;">${arr[i].larger_num}</td>
+                                    //                     </tr>
+                                    //                     `;
+                                    //         }
+                                    //         $("#printcode").html(html);
+                                    //
+                                    //         // 正确绑定 load 事件并打印
+                                    //         // let image = document.getElementById('qrcode_image');
+                                    //         // image.onload = function () {
+                                    //             const printHTML = document.querySelector('#printcode').innerHTML;
+                                    //             document.body.innerHTML = printHTML;
+                                    //             window.print();
+                                    //             window.location.reload(); // 可选:打印完重新加载页面
+                                    //         // };
+                                    //     }
+                                    //     return false;
+                                    // },
                                     error: function (data, ret) {
 
                                         return false;

+ 1 - 0
public/assets/js/backend/finishedproduct.js

@@ -29,6 +29,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                         {checkbox: true},
                         {field: 'id', title: __('Id')},
                         {field: 'oldversion', title: __('Oldversion'), operate: 'LIKE'},
+                        {field: 'oldversion', title: __('Oldversion'), operate: 'LIKE'},
                         {field: 'newversion', title: __('Newversion'), operate: 'LIKE'},
                         {field: 'packagesize', title: __('Packagesize'), operate: 'LIKE'},
                         {field: 'content', title: __('Content'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},

+ 6 - 0
public/assets/js/backend/qcode_add.js

@@ -341,6 +341,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                 }
                 rows.push({'pallet_width':pallet_width});
 
+                var order_ddbh = $('#c-order_ddbh').val();
+                if (order_ddbh == null || order_ddbh === ''){
+                    layer.confirm('托盘规格不能为空');
+                }
+                rows.push({'order_ddbh':order_ddbh});
+
                 console.log(rows);
                 console.log(JSON.stringify({rows}));
                 Fast.api.ajax({