tincey 3 rokov pred
rodič
commit
b28570094a

+ 159 - 0
application/admin/controller/Feeding.php

@@ -0,0 +1,159 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\common\controller\Backend;
+use think\Cache;
+use think\Db;
+use think\exception\PDOException;
+use think\exception\ValidateException;
+use think\Session;
+
+/**
+ * 生产投料
+ *
+ * @icon fa fa-circle-o
+ */
+class Feeding extends Backend
+{
+
+    /**
+     * Feeding模型对象
+     * @var \app\admin\model\Feeding
+     */
+    protected $model = null;
+
+    public function _initialize()
+    {
+        parent::_initialize();
+        $this->model = new \app\admin\model\Feeding;
+
+    }
+
+
+
+    /**
+     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
+     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
+     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
+     */
+    /**
+     * 添加
+     *
+     * @return string
+     * @throws \think\Exception
+     */
+    public function add()
+    {
+        if (false === $this->request->isPost()) {
+            return $this->view->fetch();
+        }
+        $params = $this->request->post('row/a');
+
+        $params = $this->preExcludeFields($params);
+        $arr = [];
+        foreach($params['weight'] as $k=>$v){
+            if($v){
+                $param['bach'] = $params['bach'];
+                $param['date'] = $params['date'];
+                $param['operator'] = $params['operator'];
+                $param['inspector'] = $params['inspector'];
+                $param['weight'] = $params['weight'][$k];
+                $param['nweight'] = $params['nweight'][$k];
+                $param['material'] = $params['material'][$k];
+                $param['gy_num'] = $params['gy_num'][$k];
+                $arr[] = $param;
+            }
+        }
+        $result = false;
+        Db::startTrans();
+        try {
+            //是否采用模型验证
+            if ($this->modelValidate) {
+                $name = str_replace("\\model\\", "\\validate\\", get_class($this->model));
+                $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate;
+                $this->model->validateFailException()->validate($validate);
+            }
+
+            $result = $this->model->allowField(true)->saveAll($arr);
+            Db::commit();
+        } catch (ValidateException|PDOException|Exception $e) {
+            Db::rollback();
+            $this->error($e->getMessage());
+        }
+        if ($result === false) {
+            $this->error(__('No rows were inserted'));
+        }
+        $this->success();
+    }
+    //获取作业票信息
+    public function get_task(){
+        $bach = $this->request->post('bach');
+        $row = Db::name('feeding')->where('bach',$bach)->select();
+        $res = Db::name('task')->where('bach',$bach)->order('create','desc')->select();
+        //已有过工序
+        if($row){
+            Session::set('process',serialize($row));
+            $result['inspector'] = $row[0]['inspector'];
+            $result['operator'] = $row[0]['operator'];
+        }else{
+            $result['inspector'] = '';
+            $result['operator'] = '';
+        }
+        $result['data'] = $res;
+
+        return json($result);
+    }
+    //获取配方信息
+    public function get_formula(){
+        $bach = $this->request->post('bach');//批次号
+        $num = $this->request->post('num');//生产量
+        $process = unserialize(Session::get('process'));
+        if($num){//如果有,批次号重复,需精确查找
+            $res = Db::name('task')->alias('t')
+                ->join('formula_detail f','f.pid=t.fid','left')
+                ->field('f.material,f.percentage,f.gy_name,f.gy_num,t.number')
+                ->where('t.bach',$bach)->where('t.number',$num)->select();
+        }else{//如果没有,,批次号未重复,直接差出数据
+            $res = Db::name('task')->alias('t')
+                ->join('formula_detail f','t.fid = f.pid','left')
+                ->field('f.material,f.percentage,f.gy_name,f.gy_num,t.number')
+                ->where('t.bach',$bach)->select();
+        }
+//        halt($res);
+        //按照百分比计算出应投重量
+        foreach($res as &$v){
+            if($process){//已有工序,接上一次工序
+                foreach ($process as $val){
+
+                    if($val['material']==$v['material'] || in_array($val['material'],explode('/',$v['material']))){
+                        $v['weight']=$val['weight'];
+                    }
+                }
+            }
+            if($v['percentage']){
+                $v['nweight']=round($v['number']*decode($v['percentage'])/100,2);
+            }else{
+                $v['nweight']='';
+            }
+        }
+        $row['total']=$num;
+        $row['data'] = $res;
+        return json($row);
+    }
+    //查找替代料
+    /*public function replace(){
+        $bach = $this->request->post('bach');
+        $wuliao = $this->request->post('wuliao');
+        $res = Db::name('task')->alias('t')
+            ->join('formula f','f.id = t.fid','left')
+            ->join('formula_detail fd','fd.pid = f.id','left')
+            ->join('formula_replace fr','fr.fid = fd.id','left')
+            ->where('t.bach',$bach)->where('is_replace=1')->where('fr.material',$wuliao)
+            ->field('fd.material,fd.id')->find();
+        $res['yuan'] = explode('/',$res['material']);
+        $key = array_search($wuliao, $res['yuan']);
+        if ($key !== false) array_splice($res['yuan'], $key, 1);
+        return json($res);
+    }*/
+}

+ 13 - 0
application/admin/lang/zh-cn/feeding.php

@@ -0,0 +1,13 @@
+<?php
+
+return [
+    'Bach'      => '批次号',
+    'Material'  => '原材料',
+    'Weight'    => '投料重量',
+    'Gy_num'    => '工艺序号',
+    'Date'      => '日期',
+    'Operator'  => '操作人员',
+    'Inspector' => '检验人员',
+    'Tid'       => '关联批次id',
+    'Nweight'   => '应投重量'
+];

+ 40 - 0
application/admin/model/Feeding.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace app\admin\model;
+
+use think\Model;
+
+
+class Feeding extends Model
+{
+
+    
+
+    
+
+    // 表名
+    protected $name = 'feeding';
+    
+    // 自动写入时间戳字段
+    protected $autoWriteTimestamp = false;
+
+    // 定义时间戳字段名
+    protected $createTime = false;
+    protected $updateTime = false;
+    protected $deleteTime = false;
+
+    // 追加属性
+    protected $append = [
+
+    ];
+    
+
+    
+
+
+
+
+
+
+
+}

+ 27 - 0
application/admin/validate/Feeding.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace app\admin\validate;
+
+use think\Validate;
+
+class Feeding extends Validate
+{
+    /**
+     * 验证规则
+     */
+    protected $rule = [
+    ];
+    /**
+     * 提示消息
+     */
+    protected $message = [
+    ];
+    /**
+     * 验证场景
+     */
+    protected $scene = [
+        'add'  => [],
+        'edit' => [],
+    ];
+    
+}

+ 1 - 1
application/admin/view/auth/admin/add.html

@@ -36,7 +36,7 @@
         <div class="col-xs-12 col-sm-8">
             <select class="selectpicker form-control" id="company_id" name="row[company_id]">
                 {foreach name='company' id='vo'}
-                <option value="{$vo.id}">{$vo.company}}</option>
+                <option value="{$vo.id}">{$vo.company}</option>
                 {/foreach}
             </select>
         </div>

+ 168 - 0
application/admin/view/feeding/add.html

@@ -0,0 +1,168 @@
+<style type="text/css">
+    .tg  {border-collapse:collapse;border-spacing:0;}
+    .tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
+        overflow:hidden;padding:10px 5px;word-break:normal;}
+    .tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
+        font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
+    .tg .tg-ub5w{font-size:36px;text-align:center;vertical-align:middle;border: none}
+    .tg .tg-x1hj{font-size:22px;text-align:left;vertical-align:top;}
+    .tg .tg-kghl{font-size:22px;text-align:left;vertical-align:middle;}
+    .tg .tg-z7m5{font-size:22px;text-align:left;text-decoration:underline;vertical-align:top;border: none}
+    .tg .tg-s5vw{font-size:22px;font-weight:bold;text-align:center;vertical-align:bottom;border: none}
+    .tg .tg-v8dz{font-size:24px;text-align:left;vertical-align:top;border: none}
+    .tg .tg-svyg{font-size:22px;font-weight:bold;text-align:left;text-decoration:underline;vertical-align:bottom;border: none}
+    .tg .tg-4qqe{font-size:22px;font-weight:bold;text-align:center;vertical-align:top;border: none}
+    .tg .tg-9d8n{font-size:22px;text-align:left;vertical-align:top;}
+    .tg .tg-0pky{text-align:left;vertical-align:top;border: none}
+</style>
+<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-3">{:__('Bach')}:</label>
+        <div class="col-xs-12 col-sm-6" id="c_bach">
+            <input id="c-bach" data-rule="required" class="form-control" name="row[bach]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">日期:</label>
+        <div class="col-xs-12 col-sm-3">
+            <input id="c-date" readonly value="{:date('Y-m-d')}" class="form-control" name="row[date]" type="text">
+        </div>
+        <label class="control-label col-xs-12 col-sm-2">开票人:</label>
+        <div class="col-xs-12 col-sm-3">
+            <input id="c-specifications" readonly class="form-control" name="row[specifications]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">名称:</label>
+        <div class="col-xs-12 col-sm-3">
+            <input id="c-name" data-rule="required" readonly class="form-control"  type="text">
+        </div>
+        <label class="control-label col-xs-12 col-sm-2">审核:</label>
+        <div class="col-xs-12 col-sm-3">
+            <input id="c-unit" class="form-control" readonly name="row[unit]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">操作人员:</label>
+        <div class="col-xs-12 col-sm-3">
+            <input id="c-operator" data-rule="required" class="form-control" name="row[operator]" type="text">
+        </div>
+        <label class="control-label col-xs-12 col-sm-2">检验人员:</label>
+        <div class="col-xs-12 col-sm-3">
+            <input id="c-inspector" class="form-control" data-rule="required" name="row[inspector]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <div class="col-xs-12 col-sm-2">
+            扫描物料<input class="form-control" id="wuliao" name="123" type="text">
+        </div>
+    </div>
+    <style>
+        th,tr{
+            text-align: center;
+        }
+    </style>
+    <div class="form-group">
+        <table class="table table-striped table-bordered table-hover table-nowrap" id="table">
+            <tr>
+                <th class="col-xs-12 col-sm-3">{:__('Material')}</th>
+                <th class="col-xs-12 col-sm-2">{:__('Nweight')}</th>
+                <th class="col-xs-12 col-sm-2">{:__('Weight')}</th>
+                <th class="col-xs-12 col-sm-5">操作记录</th>
+<!--                <th class="col-xs-12 col-sm-2">操作</th>-->
+            </tr>
+        </table>
+    </div>
+    <div class="form-group layer-footer">
+        <label class="control-label col-xs-12 col-sm-2"></label>
+        <div class="col-xs-12 col-sm-8">
+            <button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
+            <button type="button" class="btn btn-default btn-embossed print-link">打印预览</button>
+        </div>
+    </div>
+    <div style="display: none">
+        <div class="form-group" id="print_area" >
+            <div id="head">
+                <table class="tg" style="width: 800px;">
+                    <thead>
+                    <div id="qrcode" style="margin:0 0 -50px 650px;width: 80px;height: 80px;">
+                        <img src="" id="myImage" alt=""/>
+                    </div>
+                    <tr>
+                        <th class="tg-v8dz" colspan="6" >
+                            <p id="formula_no"></p>
+                            <hr style="border: 1px solid;margin-top: -5px">
+                        </th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr>
+                        <td class="tg-s5vw"></td>
+                        <td class="tg-svyg"></td>
+                        <td class="tg-ub5w" colspan="2" rowspan="2">作业票</td>
+                        <td class="tg-4qqe"></td>
+                        <td class="tg-s5vw"></td>
+                    </tr>
+                    <tr>
+                        <td class="tg-9d8n" style="border: none">日期:</td>
+                        <td class="tg-z7m5" id="date"></td>
+                        <td class="tg-9d8n">开票人</td>
+                        <td class="tg-9d8n">审核</td>
+                    </tr>
+                    <tr>
+                        <td class="tg-9d8n" style="border: none">批号:</td>
+                        <td class="tg-z7m5" id="bach"></td>
+                        <td class="tg-kghl" style="border: none"><input type="text" id="formula" value="" style="width: 400px;text-align: center"></td>
+                        <td class="tg-0pky"></td>
+                        <td class="tg-x1hj" id="specifications"></td>
+                        <td class="tg-x1hj" id="unit"></td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+            <div style="height: 20px;"></div>
+            <div id="body">
+                <table class="tg" style="width: 800px;" id="print_gy">
+                    <tr>
+                        <th  style="text-align: center">原材料</th>
+                        <!--                                <th  style="text-align: center">百分比</th>-->
+                        <th  style="text-align: center">应加量(KG)</th>
+                        <th  style="text-align: center">实加量(KG)</th>
+                        <th  style="text-align: center">操作记录</th>
+                    </tr>
+
+                    <!--<tr>
+                        <td style="width: 100px;text-align: center">总计</td>
+                        <td class="total" style="width: 100px;text-align: center"></td>
+                        <td></td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td colspan="5" class="remark"></td>
+                    </tr>-->
+                </table>
+                <div style="height: 5px;"></div>
+                <table class="tg" style="width: 800px;">
+                    <tr>
+                        <td style="border: none">
+                            <span>包装规格:</span>
+                            <hr style="border: 1px solid;width: 150px;margin-top: -5px;">
+                            <div style="position: absolute;margin-left: 270px;margin-top: -36px;">KG/桶</div>
+                        </td>
+                        <td style="border: none">作业票回收日期:<hr style="border: 1px solid;width: 150px;margin-top: -5px;"></td>
+                    </tr>
+                    <tr>
+                        <td style="border: none">操作人员:<hr style="border: 1px solid;width: 150px;margin-top: -5px;"></td>
+                        <td style="border: none">检验签字:<hr style="border: 1px solid;width: 150px;margin-top: -5px;"></td>
+                    </tr>
+                </table>
+            </div>
+        </div>
+    </div>
+</form>
+<script type='text/javascript' src='__CDN__/assets/js/jquery2.1.1.min.js'></script>
+<script type="text/javascript" src="__CDN__/assets/js/jquery.qrcode.min.js"></script>
+<script type="text/javascript" src="__CDN__/assets/js/jQuery.print.js"></script>
+<script>
+
+</script>

+ 64 - 0
application/admin/view/feeding/edit.html

@@ -0,0 +1,64 @@
+<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Bach')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-bach" data-rule="required" class="form-control" name="row[bach]" type="text" value="{$row.bach|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Material')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-material" data-rule="required" class="form-control" name="row[material]" type="text" value="{$row.material|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Weight')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-weight" data-rule="required" class="form-control" name="row[weight]" type="text" value="{$row.weight|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Gy_num')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-gy_num" data-rule="required" class="form-control" name="row[gy_num]" type="number" value="{$row.gy_num|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Date')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-date" data-rule="required" class="form-control" name="row[date]" type="text" value="{$row.date|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Operator')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-operator" data-rule="required" class="form-control" name="row[operator]" type="text" value="{$row.operator|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Inspector')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-inspector" data-rule="required" class="form-control" name="row[inspector]" type="text" value="{$row.inspector|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Tid')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-tid" class="form-control" name="row[tid]" type="number" value="{$row.tid|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Nweight')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-nweight" data-rule="required" class="form-control" name="row[nweight]" type="text" value="{$row.nweight|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group layer-footer">
+        <label class="control-label col-xs-12 col-sm-2"></label>
+        <div class="col-xs-12 col-sm-8">
+            <button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
+            <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
+        </div>
+    </div>
+</form>

+ 35 - 0
application/admin/view/feeding/index.html

@@ -0,0 +1,35 @@
+<div class="panel panel-default panel-intro">
+    {:build_heading()}
+
+    <div class="panel-body">
+        <div id="myTabContent" class="tab-content">
+            <div class="tab-pane fade active in" id="one">
+                <div class="widget-body no-padding">
+                    <div id="toolbar" class="toolbar">
+                        <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
+                        <a href="javascript:;" class="btn btn-success btn-add {:$auth->check('feeding/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
+<!--                        <a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('feeding/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>-->
+                        <a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('feeding/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
+                        
+
+                        <div class="dropdown btn-group {:$auth->check('feeding/multi')?'':'hide'}">
+                            <a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
+                            <ul class="dropdown-menu text-left" role="menu">
+                                <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
+                                <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
+                            </ul>
+                        </div>
+
+                        
+                    </div>
+                    <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
+                           data-operate-edit=""
+                           data-operate-del="{:$auth->check('feeding/del')}"
+                           width="100%">
+                    </table>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</div>

+ 95 - 16
application/admin/view/product/add.html

@@ -1,4 +1,20 @@
-<script src="__CDN__/assets/js/jquery.js"></script>
+<style type="text/css">
+    .tg  {border-collapse:collapse;border-spacing:0;}
+    .tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
+        overflow:hidden;padding:10px 5px;word-break:normal;}
+    .tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
+        font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
+    .tg .tg-ub5w{font-size:36px;text-align:center;vertical-align:middle;border: none}
+    .tg .tg-x1hj{font-size:22px;text-align:left;vertical-align:top;}
+    .tg .tg-kghl{font-size:22px;text-align:left;vertical-align:middle;}
+    .tg .tg-z7m5{font-size:22px;text-align:left;text-decoration:underline;vertical-align:top;border: none}
+    .tg .tg-s5vw{font-size:22px;font-weight:bold;text-align:center;vertical-align:bottom;border: none}
+    .tg .tg-v8dz{font-size:24px;text-align:left;vertical-align:top;border: none}
+    .tg .tg-svyg{font-size:22px;font-weight:bold;text-align:left;text-decoration:underline;vertical-align:bottom;border: none}
+    .tg .tg-4qqe{font-size:22px;font-weight:bold;text-align:center;vertical-align:top;border: none}
+    .tg .tg-9d8n{font-size:22px;text-align:left;vertical-align:top;}
+    .tg .tg-0pky{text-align:left;vertical-align:top;border: none}
+</style>
 <form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
     <input type="hidden" id="status" name="row[status]" value="{$_GET['status']}">
     <div class="form-group">
@@ -17,6 +33,10 @@
         <div class="col-xs-12 col-sm-3">
             <input id="c-specifications" readonly class="form-control" name="row[specifications]" type="text">
         </div>
+        <label class="control-label col-xs-12 col-sm-2">{:__('Unit')}:</label>
+        <div class="col-xs-12 col-sm-3">
+            <input id="c-unit" class="form-control" name="row[unit]" type="text">
+        </div>
         <!--<label class="control-label col-xs-12 col-sm-2">{:__('Time')}:</label>
         <div class="col-xs-12 col-sm-3">
             <input id="c-time" data-rule="required" readonly class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[time]" type="text" value="{:date('Y-m-d H:i:s')}">
@@ -27,25 +47,22 @@
         <div class="col-xs-12 col-sm-3">
             <input id="c-audit" data-rule="required" class="form-control"  type="text">
         </div>
-        <label class="control-label col-xs-12 col-sm-2">{:__('Unit')}:</label>
+        <label class="control-label col-xs-12 col-sm-2">领料人:</label>
         <div class="col-xs-12 col-sm-3">
-            <input id="c-unit" class="form-control" name="row[unit]" type="text">
+            <input id="c-pickor" data-rule="required" name="row[pickor]" class="form-control"  type="text">
         </div>
     </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">备注:</label>
+        <div class="col-xs-12 col-sm-3">
+            <input id="c-note" class="form-control" name="row[note]" type="text">
+        </div>
 
-
-    <!--<div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Material')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-material" data-rule="required" readonly class="form-control" name="row[material]" type="text">
+        <label class="control-label col-xs-12 col-sm-2">仓管人:</label>
+        <div class="col-xs-12 col-sm-3">
+            <input id="c-warehouseor" class="form-control" name="row[warehouseor]" type="text">
         </div>
     </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Time')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-time" data-rule="required" readonly class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[time]" type="text" value="{:date('Y-m-d H:i:s')}">
-        </div>
-    </div>-->
     <div class="form-group">
         <div class="col-xs-12 col-sm-2">
             扫描物料<input class="form-control" id="wuliao" name="123" type="text">
@@ -62,22 +79,84 @@
                 <th class="col-xs-12 col-sm-1">批次号</th>
                 <th class="col-xs-12 col-sm-3">配方名称</th>
                 <th class="col-xs-12 col-sm-1">物料编号</th>
-                <th class="col-xs-12 col-sm-1">包装规格</th>
                 <th class="col-xs-12 col-sm-1">重量</th>
+                <th class="col-xs-12 col-sm-1">包装规格</th>
                 <th class="col-xs-12 col-sm-2">机组</th>
                 <th class="col-xs-12 col-sm-2">日期</th>
                 <th class="col-xs-12 col-sm-2">操作</th>
             </tr>
+
         </table>
     </div>
     <div class="form-group layer-footer">
         <label class="control-label col-xs-12 col-sm-2"></label>
         <div class="col-xs-12 col-sm-8">
             <button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
+            <button type="button" class="btn btn-default btn-embossed print-link">打印</button>
 <!--            <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>-->
         </div>
     </div>
+    <div style="display: none">
+        <div class="form-group" id="print_area" >
+            <div id="head">
+                <table class="tg" style="width: 800px;">
+                    <thead>
+                    <div id="qrcode" style="margin:0 0 0 650px;width: 80px;height: 80px;">
+                        <img src="" id="myImage" alt=""/>
+                    </div>
+                    <tr>
+                        <th class="tg-v8dz" colspan="6" >
+                            <p id="formula_no"></p>
+                            <hr style="border: 1px solid;margin-top: -5px">
+                        </th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr>
+                        <td class="tg-s5vw"></td>
+                        <td class="tg-svyg"></td>
+                        <td class="tg-ub5w" colspan="2" rowspan="2">领料单</td>
+                        <td class="tg-4qqe"></td>
+                        <td class="tg-s5vw"></td>
+                    </tr>
+                    <tr>
+                        <td class="tg-9d8n" style="border: none">日期:</td>
+                        <td class="tg-z7m5" id="date">{:date("Y-m-d H:i-s")}</td>
+                        <td class="tg-9d8n">领料人</td>
+                        <td class="tg-9d8n">仓管人</td>
+                    </tr>
+                    <tr>
+                        <td class="tg-9d8n" style="border: none">批号:</td>
+                        <td class="tg-z7m5" id="formula"></td>
+                        <td class="tg-kghl" style="border: none"></td>
+                        <td class="tg-0pky"></td>
+                        <td class="tg-x1hj" id="pickor"></td>
+                        <td class="tg-x1hj" id="warehouseor"></td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+            <div style="height: 20px;"></div>
+            <div id="body">
+                <table class="tg" style="width: 800px;" id="print_gy">
+                    <tr>
+                        <th>批次号</th>
+                        <th>配方名称</th>
+                        <th>物料编号</th>
+                        <th>重量</th>
+                        <th>包装规格</th>
+                        <th>机组</th>
+                    </tr>
+                </table>
+            </div>
+        </div>
+    </div>
 </form>
+<script type='text/javascript' src='__CDN__/assets/js/jquery2.1.1.min.js'></script>
+<script type="text/javascript" src="__CDN__/assets/js/jquery.qrcode.min.js"></script>
+<script type="text/javascript" src="__CDN__/assets/js/jQuery.print.js"></script>
 <script>
-
+    if($("#status").val()==2){
+        $(".print-link").hide()
+    }
 </script>

+ 142 - 9
application/admin/view/product/show.html

@@ -1,9 +1,29 @@
+<style type="text/css">
+    .tg  {border-collapse:collapse;border-spacing:0;}
+    .tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
+        overflow:hidden;padding:10px 5px;word-break:normal;}
+    .tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
+        font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
+    .tg .tg-ub5w{font-size:36px;text-align:center;vertical-align:middle;border: none}
+    .tg .tg-x1hj{font-size:22px;text-align:left;vertical-align:top;}
+    .tg .tg-kghl{font-size:22px;text-align:left;vertical-align:middle;}
+    .tg .tg-z7m5{font-size:22px;text-align:left;text-decoration:underline;vertical-align:top;border: none}
+    .tg .tg-s5vw{font-size:22px;font-weight:bold;text-align:center;vertical-align:bottom;border: none}
+    .tg .tg-v8dz{font-size:24px;text-align:left;vertical-align:top;border: none}
+    .tg .tg-svyg{font-size:22px;font-weight:bold;text-align:left;text-decoration:underline;vertical-align:bottom;border: none}
+    .tg .tg-4qqe{font-size:22px;font-weight:bold;text-align:center;vertical-align:top;border: none}
+    .tg .tg-9d8n{font-size:22px;text-align:left;vertical-align:top;}
+    .tg .tg-0pky{text-align:left;vertical-align:top;border: none}
+    th,tr{
+        text-align: center;
+    }
+</style>
 <script src="__CDN__/assets/js/jquery.js"></script>
 <form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
     <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('Batch')}:</label>
         <div class="col-xs-12 col-sm-3">
-            <input id="c-batch" data-rule="required" class="form-control" name="row[bach]" value="{$row.batch}" type="text">
+            <input id="c-batch" data-rule="required" class="form-control" name="row[bach]" readonly value="{$row.batch}" type="text">
         </div>
         <label class="control-label col-xs-12 col-sm-2">{:__('Pname')}:</label>
         <div class="col-xs-12 col-sm-3">
@@ -20,19 +40,14 @@
     <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('Audit')}:</label>
         <div class="col-xs-12 col-sm-3">
-            <input id="c-audit" data-rule="required" class="form-control" value="{$row.audit}" type="text">
+            <input id="c-audit" data-rule="required" readonly class="form-control" value="{$row.audit}" type="text">
         </div>
         <label class="control-label col-xs-12 col-sm-2">{:__('Unit')}:</label>
         <div class="col-xs-12 col-sm-3">
-            <input id="c-unit" class="form-control" name="row[unit]" value="{$row.unit}" type="text">
+            <input id="c-unit" class="form-control" readonly name="row[unit]" value="{$row.unit}" type="text">
         </div>
     </div>
 
-    <style>
-        th,tr{
-            text-align: center;
-        }
-    </style>
     <div class="form-group">
         <table class="table table-striped table-bordered table-hover table-nowrap" id="table">
             <tr>
@@ -63,10 +78,128 @@
         <label class="control-label col-xs-12 col-sm-2"></label>
         <div class="col-xs-12 col-sm-8">
 <!--            <button type="submit" class="btn btn- btn-embossed ">{:__('OK')}</button>-->
-            <!--            <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>-->
+            <button type="button" class="btn btn-default btn-embossed print-link">打印</button>
+        </div>
+    </div>
+    <div style="display: none">
+        <div class="form-group" id="print_area" >
+            <div id="head">
+                <table class="tg" style="width: 800px;">
+                    <thead>
+                    <div id="qrcode" style="margin:0 0 0 650px;width: 80px;height: 80px;">
+                        <img src="" id="myImage" alt=""/>
+                    </div>
+                    <tr>
+                        <th class="tg-v8dz" colspan="6" >
+                            <p id="formula_no"></p>
+                            <hr style="border: 1px solid;margin-top: -5px">
+                        </th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr>
+                        <td class="tg-s5vw"></td>
+                        <td class="tg-svyg"></td>
+                        <td class="tg-ub5w" colspan="2" rowspan="2">领料单</td>
+                        <td class="tg-4qqe"></td>
+                        <td class="tg-s5vw"></td>
+                    </tr>
+                    <tr>
+                        <td class="tg-9d8n" style="border: none">日期:</td>
+                        <td class="tg-z7m5" id="date">{:substr($row.data.0.createtime,0,10)}</td>
+                        <td class="tg-9d8n">领料人</td>
+                        <td class="tg-9d8n">仓管人</td>
+                    </tr>
+                    <tr>
+                        <td class="tg-9d8n" style="border: none">批号:</td>
+                        <td class="tg-z7m5" id="formula">{$row.batch}</td>
+                        <td class="tg-kghl" style="border: none"></td>
+                        <td class="tg-0pky"></td>
+                        <td class="tg-x1hj" id="pickor">{$row.pickor}</td>
+                        <td class="tg-x1hj" id="warehouseor">{$row.warehouseor}</td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+            <div style="height: 20px;"></div>
+            <div id="body">
+                <table class="tg" style="width: 800px;" id="print_gy">
+                    <tr>
+                        <th>批次号</th>
+                        <th>配方名称</th>
+                        <th>物料编号</th>
+                        <th>重量</th>
+                        <th>包装规格</th>
+                        <th>机组</th>
+                    </tr>
+                    {foreach name='row.data' item='vo'}
+                    <tr>
+                        <td>{$row.batch}</td>
+                        <td>{$row.pname}</td>
+                        <td>{$vo.material}</td>
+                        <td>{$vo.weight}</td>
+                        <td>{$row.specifications}</td>
+                        <td>{$row.unit}</td>
+                        <!--                <td><button type="submit" class="btn btn-primary btn-embossed disabled">{:__('Del')}</button></td>-->
+                    </tr>
+                    {/foreach}
+                </table>
+                <div style="height: 5px;"></div>
+
+            </div>
         </div>
     </div>
 </form>
+<script type='text/javascript' src='__CDN__/assets/js/jquery2.1.1.min.js'></script>
+<script type="text/javascript" src="__CDN__/assets/js/jquery.qrcode.min.js"></script>
+<script type="text/javascript" src="__CDN__/assets/js/jQuery.print.js"></script>
 <script>
+    jQuery(function($) { 'use strict';
+
+        $(".print-link").on('click', function() {
+            var status = 1;
+           /* var number = $('#c-number').val();
+            if (number == ''){
+                status = 2;
+            }*/
 
+            var bach = $('#c-batch').val();
+            $("#formula").val(bach)
+            /*if (bach == ''){
+                status = 2;
+            }*/
+            /*var drawer_name = $('#c-drawer_name').val();
+            if (drawer_name == ''){
+                status = 2;
+            }
+            var examine_name = $('#c-examine_name').val();
+            if (examine_name == ''){
+                status = 2;
+            }
+            */
+
+
+            /*if (status == 2){
+                layer.confirm('批次号不能为空,请仔细核查');return false
+            }*/
+
+            // createQrcode(bach,80,80);
+            var img = document.getElementById("myImage"); /// get image element
+            var canvas = document.getElementsByTagName('canvas')[0];
+            img.src = canvas.toDataURL();                     /// update image
+            $.print('#print_area');
+            return false;
+        });
+        function createQrcode(txt,width,height) {
+            $("#qrcode").qrcode({
+                render: "canvas",//canvas和table两种渲染方式
+                width: width,
+                height: height,
+                correctLevel:2,//二维码纠错级别
+                background:"#ffffff",//背景颜色
+                foreground:"#000000", //二维码颜色
+                text:txt
+            });
+        }
+    });
 </script>

+ 289 - 0
public/assets/js/backend/feeding.js

@@ -0,0 +1,289 @@
+define(['jquery', 'bootstrap', 'backend', 'table', 'form','jQuery.print'], function ($, undefined, Backend, Table, Form) {
+    var Controller = {
+        index: function () {
+            // 初始化表格参数配置
+            Table.api.init({
+                extend: {
+                    index_url: 'feeding/index' + location.search,
+                    add_url: 'feeding/add',
+                    edit_url: 'feeding/edit',
+                    del_url: 'feeding/del',
+                    multi_url: 'feeding/multi',
+                    import_url: 'feeding/import',
+                    table: 'feeding',
+                }
+            });
+            var table = $("#table");
+            // 初始化表格
+            table.bootstrapTable({
+                url: $.fn.bootstrapTable.defaults.extend.index_url,
+                pk: 'id',
+                sortName: 'id',
+                fixedColumns: true,
+                fixedRightNumber: 1,
+                columns: [
+                    [
+                        {checkbox: true},
+                        {field: 'id', title: __('Id')},
+                        {field: 'bach', title: __('Bach'), operate: 'LIKE'},
+                        {field: 'material', title: __('Material'), operate: 'LIKE'},
+                        {field: 'nweight', title: __('Nweight'), operate: 'LIKE'},
+                        {field: 'weight', title: __('Weight'), operate: 'LIKE'},
+                        {field: 'gy_num', title: __('Gy_num')},
+                        {field: 'date', title: __('Date'), operate: 'LIKE'},
+                        {field: 'operator', title: __('Operator'), operate: 'LIKE'},
+                        // {field: 'tid', title: __('Tid')},
+                        {field: 'inspector', title: __('Inspector'), operate: 'LIKE'},
+                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
+                    ]
+                ]
+            });
+            table.on('post-body.bs.table',function(){
+                $(".btn-add").data("area",["100%","100%"]);
+            });
+            // 为表格绑定事件
+            Table.api.bindevent(table);
+        },
+        add: function () {
+            var num=0;
+            $('#c-bach').keydown((e)=>{
+                let key = e.which;
+                if(key == 13){
+                    if(num === 0){
+                        $.ajax({
+                            method:"POST",
+                            data:{bach:$("#c-bach").val()},//批次号
+                            url:"feeding/get_task",
+                            success(res){
+                                //批次号重复/做下拉选择
+                                if(res.data.length>1){
+                                    let str = '';
+                                    str+='<select class="selectpicker form-control" id="bach"><option>请选择对应的生产量</option>';
+                                    for(var i=0;i<res.data.length;i++){
+                                        str+='<option value="'+i+'">'+res.data[i].create+'&nbsp;&nbsp;&nbsp;&nbsp;生产量:'+res.data[i].number+'</option>';
+                                    }
+                                    str+='</select><a href="javascript:;" id="btn" class="btn btn-success">确认</a>';
+                                    $('#c-bach').parent('#c_bach').append(str);
+                                    $("#bach").change(()=>{
+                                        $("#c-name").val(res.data[$("#bach").val()].name);
+                                        $("#c-specifications").val(res.data[$("#bach").val()].drawer_name);
+                                        $("#c-unit").val(res.data[$("#bach").val()].examine_name);
+                                    });
+                                    $("#btn").click(()=>{
+                                        if($("#c-bach").attr('readonly')==='readonly'){
+                                            return false;
+                                        }
+                                        $("#bach").css('cssText','display:none! important');
+                                        $("#btn").css('display','none');
+                                        $.ajax({
+                                            method:"POST",
+                                            url:"feeding/get_formula",
+                                            data:{
+                                                bach:$("#c-bach").val(),
+                                                num:res.data[$("#bach").val()].number
+                                            },
+                                            success(result){
+                                                var str = '';
+                                                var html = '';
+                                                for(var i=0;i<result.data.length;i++){
+                                                    str += "<tr class='tablestr"+i+" tablestr'><td><input class='form-control material' type='text' name='row[material][]' readonly value='"+result.data[i].material+"'></td>";
+                                                    str += "<td><input class='form-control' type='text' name='row[nweight][]' readonly value='"+result.data[i].nweight+"'></td>";
+                                                    str += "<td><input class='form-control' type='number' name='row[weight][]' value='";
+                                                    if (result.data[i].weight) {
+                                                        str += parseFloat(result.data[i].weight) + "' readonly ";
+                                                    }
+                                                    str += "'></td>";
+                                                    str += "<input class='form-control' type='hidden' name='row[gy_num][]' value='"+result.data[i].gy_num+"'>";
+                                                    str += "<td><input class='form-control' type='text' name='row[gy_name][]' readonly value='"+result.data[i].gy_name+"'></td>";
+                                                    str += "</tr>";
+                                                    html += `<tr>
+                                                                <td>${result.data[i].material}</td>
+                                                                <td>${result.data[i].nweight}</td><td>`;
+                                                    if (result.data[i].weight) {
+                                                        html += parseFloat(result.data[i].weight);
+                                                    }
+                                                    html += `
+                                                                </td><td>${result.data[i].gy_name}</td>
+                                                            </tr>`;
+
+                                                }
+                                                html+= `<tr>
+                                                            <td style="width: 100px;text-align: center">总计</td>
+                                                            <td class="total" style="width: 100px;text-align: center">${result.total}</td>
+                                                            <td id="total"></td>
+                                                            <td></td>
+                                                        </tr>`;
+                                                $("#print_gy").append(html);
+                                                $("#table").append(str);
+                                                $("#c-bach").attr('readonly','readonly');
+                                                $("#wuliao").keydown((e)=>{
+                                                    let key = e.which;
+                                                    var error = 0;
+                                                    if(key === 13){
+                                                        var wuliao = $("#wuliao").val();
+                                                        for(var i=0;i<result.data.length;i++) {
+                                                            if(result.data[i].material===wuliao){
+                                                                $(".material")[i].setAttribute('style','color:red');
+                                                                error++;
+                                                            }
+                                                            if(result.data[i].material.indexOf('/')!==-1){
+                                                                var arr = result.data[i].material.split('/');
+                                                                if(arr.indexOf($("#wuliao").val()) !== -1){
+                                                                    $(".material")[i].value = wuliao;
+                                                                    $(".material")[i].setAttribute('style','color:red');
+                                                                    error++;
+                                                                }
+                                                            }
+                                                        }
+                                                        if(error===0){
+                                                            Layer.confirm("此物料不在配方中,请确认!");
+                                                            //语音播报
+                                                            var msg = new SpeechSynthesisUtterance("此物料不在配方中,请确认!");
+                                                            window.speechSynthesis.speak(msg);
+                                                        }
+                                                    }
+                                                });
+                                            }
+                                        });
+                                    });
+                                }else{//批次号不重复直接赋值
+                                    $("#bach").css('cssText','display:none! important');
+                                    $("#btn").css('display','none');
+                                    $("#c-name").val(res[0].name);
+                                    $("#c-specifications").val(res[0].drawer_name);
+                                    $("#c-unit").val(res[0].examine_name);
+                                    $("#c-operator").val(res.operator);
+                                    $("#c-inspector").val(res.inspector);
+                                    $.ajax({
+                                        method: "POST",
+                                        url: "feeding/get_formula",
+                                        data: {
+                                            bach: $("#c-bach").val(),
+                                            num:''
+                                        },
+                                        success(res) {
+                                            var str = '';
+                                            for(var i=0;i<res.data.length;i++){
+                                                str += "<tr class='tablestr"+i+" tablestr'><td><input class='form-control material' type='text' name='row[material][]' readonly value='"+res.data[i].material+"'></td>";
+                                                str += "<td><input class='form-control' type='text' name='row[nweight][]' readonly value='"+res.data[i].nweight+"'></td>";
+                                                str += "<input class='form-control' type='hidden' name='row[gy_num][]' value='"+res.data[i].gy_num+"'>";
+                                                str += "<td><input class='form-control' type='number' name='row[weight][]' value='";
+                                                if (res.data[i].weight) {
+                                                    str += parseFloat(res.data[i].weight) + "' readonly ";
+                                                }
+                                                str += "'></td>";
+                                                str += "<td><input class='form-control' type='text' name='row[gy_name][]' readonly value='"+res.data[i].gy_name+"'></td>";
+                                                str += "</tr>";
+                                            }
+                                            $("#table").append(str);
+                                            $("#c-bach").attr('readonly','readonly');
+                                            $("#wuliao").keydown((e)=>{
+                                                let key = e.which;
+                                                var error = 0;
+                                                if(key === 13){
+                                                    var wuliao = $("#wuliao").val();
+                                                    for(var i=0;i<res.data.length;i++) {
+                                                        if(res.data[i].material===wuliao){
+                                                            $(".material")[i].setAttribute('style','color:red');
+                                                            error++;
+                                                        }
+                                                        if(res.data[i].material.indexOf('/')!==-1){
+                                                            var arr = res.data[i].material.split('/');
+                                                            if(arr.indexOf($("#wuliao").val()) !== -1){
+                                                                $(".material")[i].value = wuliao;
+                                                                $(".material")[i].setAttribute('style','color:red');
+                                                                error++;
+                                                            }
+                                                        }
+                                                    }
+                                                    if(error===0){
+                                                        Layer.confirm("此物料不在配方中,且没有替代料,请确认!");
+                                                        //语音播报
+                                                        var msg = new SpeechSynthesisUtterance("此物料不在配方中,且没有替代料,请确认!");
+                                                        window.speechSynthesis.speak(msg);
+                                                    }
+                                                }
+                                            });
+                                        }
+                                    });
+                                }
+                            }
+                        });
+                        num++;
+                    }else{
+                        // return false;
+                    }
+                }
+            });
+            $('input').keydown( function (e) {
+                let key = e.which;
+                if (key == 13) {
+                    return false;
+                }
+            });
+            $(document).ready(function($) { 'use strict';
+                $(".print-link").on('click', function() {
+                    var status = 1;
+                    var total = 0;
+                    //开票人
+                    $("#specifications").val($('#c-specifications').val());
+                    //审核
+                    $("#unit").val($('#c-unit').val());
+                    //批次号
+                    var bach = $('#c-bach').val();
+                    //写入到add页面
+                    $("#formula").html(bach);
+                    //添加重量,包装规格,机组到表格内
+                    for(var i=0;i<$(".tablestr").length;i++){
+                        var weight =  parseFloat($(".tablestr:eq("+i+")").children("tr td:eq(2)").children().val());
+                        $(".print:eq("+i+")").children("tr td:eq(2)").html(weight);
+                        if(weight){
+                            total += weight;
+                        }
+                    }
+                    $("#total").html(total.toFixed(2));
+                    // console.log(total);
+                    if(!$("#c-pickor").val()){
+                        status = 2;
+                    }
+                    if(!$("#c-warehouseor").val()){
+                        status = 2;
+                    }
+
+
+                    /*if (status == 2){
+                        layer.confirm('领料人或仓管人为空,请检查!');return false;
+                    }*/
+
+                    // createQrcode(bach,80,80);
+                    var img = document.getElementById("myImage"); /// get image element
+                    var canvas = document.getElementsByTagName('canvas')[0];
+                    // img.src = canvas.toDataURL();                     /// update image
+                    $.print('#print_area');
+                    return false;
+                });
+                function createQrcode(txt,width,height) {
+                    $("#qrcode").qrcode({
+                        render: "canvas",//canvas和table两种渲染方式
+                        width: width,
+                        height: height,
+                        correctLevel:2,//二维码纠错级别
+                        background:"#ffffff",//背景颜色
+                        foreground:"#000000", //二维码颜色
+                        text:txt
+                    });
+                }
+            });
+            Controller.api.bindevent();
+        },
+        edit: function () {
+            Controller.api.bindevent();
+        },
+        api: {
+            bindevent: function () {
+                Form.api.bindevent($("form[role=form]"));
+            }
+        }
+    };
+    return Controller;
+});

+ 79 - 3
public/assets/js/backend/product.js

@@ -1,4 +1,4 @@
-define(['jquery', 'bootstrap', 'backend', 'table', 'form','editable'], function ($, undefined, Backend, Table, Form) {
+define(['jquery', 'bootstrap', 'backend', 'table', 'form','editable','jQuery.print'], function ($, undefined, Backend, Table, Form) {
 
     var Controller = {
         index: function () {
@@ -61,6 +61,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','editable'], function
             Table.api.bindevent(table);
         },
         add: function () {
+            //扫描批次号
             $("#c-batch").keydown(function(e){
                 var key = e.which;
                 if (key == 13) {
@@ -70,6 +71,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','editable'], function
                         data:{
                             bach:$("#c-batch").val()
                         },
+                        //获取头部信息
                         success(res){
                             $("#c-batch").val($("#c-batch").val()+';');
                             $("#c-time").val(res.create);
@@ -85,26 +87,43 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','editable'], function
                     return false;
                 }
             });
+            var i=0;
+            //扫描物料
             $("#wuliao").keydown( function (e) {
                 var key = e.which;
                 if (key == 13) {
                     var str = '';
+                    var html = '';
                     $.ajax({
                         type: "POST",
                         url: "product/get_formula",
                         data: {
                             formula: $("#wuliao").val(),
                         },
+                        //扫描一个物料添加一行表格
                         success(res) {
-                            str += "<tr><td><input class='form-control' type='text' name='row[batch][]' readonly value='"+res.bach+"'></td>";
+                            str += "<tr class='tablestr"+i+" tablestr'><td><input class='form-control' type='text' name='row[batch][]' readonly value='"+res.bach+"'></td>";
                             str += "<td><input class='form-control' type='text' name='row[pname][]' readonly value='"+res.pname+"'></td>";
                             str += "<td><input class='form-control' type='text' name='row[material][]' readonly value='"+res.material+"'></td>";
-                            str += "<td><input class='form-control' type='text' name='row[specifications][]' value='"+ (res.specifications?res.specifications:'')+"'></td>";
                             str += "<td><input class='form-control' type='number' name='row[weight][]' data-rule='required' value=''></td>";
+                            str += "<td><input class='form-control' type='text' name='row[specifications][]' value='"+ (res.specifications?res.specifications:'')+"'></td>";
                             str += "<td><input class='form-control' type='text' name='row[unit][]'  value=''></td>";
                             str += "<td><input class='form-control' type='text' name='row[time][]' readonly value='"+res.time+"'></td>";
+                            str += "<input type='hidden' value='"+i+"'>";
                             str += '<td><button type="button" class="btn btn-danger del">删除</button></td></tr>';
+                            //添加打印表格
+                            html += ` <tr class="print${i} print">
+                                        <td>${res.bach}</td>
+                                        <td>${res.pname}</td>
+                                        <td>${res.material}</td>
+                                        <td></td>
+                                        <td>${res.specifications}</td>
+                                        <td></td>
+                                    </tr>`;
+                            //写入页面
                             $("#table").append(str);
+                            $("#print_gy").append(html);
+                            //清空物料扫描后的值,下次直接重新扫描即可
                             $("#wuliao").val('');
                             if($("#status").val()==1){
                                 if(res.error === 1){
@@ -114,14 +133,19 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','editable'], function
                                     window.speechSynthesis.speak(msg);
                                 }
                             }
+                            i++;
                         }
                     });
                     return false;
                 }
             });
+            //删除当前行内容及打印表格当前行内容
             $(document).on('click','.del',function () {
                 $(this).parent().parent().remove();
+                var i = $(this).parent().prev().val();
+                $(".print"+i).remove();
             });
+            //阻止回车事件
             $('input').keydown( function (e) {
                 let key = e.which;
                 if (key == 13) {
@@ -129,6 +153,58 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','editable'], function
                 }
             });
             Controller.api.bindevent();
+            //打印
+            $(document).ready(function($) { 'use strict';
+                $(".print-link").on('click', function() {
+                    var status = 1;
+                    //领料人
+                    $("#pickor").val($('#c-pickor').val());
+                    //仓管人
+                    $("#warehouseor").val($('#c-warehouseor').val());
+                    //批次
+                    var bach = $('#c-batch').val();
+                    //写入到add页面
+                    $("#formula").html(bach);
+                    //添加重量,包装规格,机组到表格内
+                    for(var i=0;i<$(".tablestr").length;i++){
+                        var weight =  $(".tablestr:eq("+i+")").children("tr td:eq(3)").children().val();
+                        var specifications =  $(".tablestr:eq("+i+")").children("tr td:eq(4)").children().val();
+                        var unit =  $(".tablestr:eq("+i+")").children("tr td:eq(5)").children().val();
+                        $(".print:eq("+i+")").children("tr td:eq(3)").html(weight);
+                        $(".print:eq("+i+")").children("tr td:eq(4)").html(specifications);
+                        $(".print:eq("+i+")").children("tr td:eq(5)").html(unit);
+                    }
+                    if(!$("#c-pickor").val()){
+                        status = 2;
+                    }
+                    if(!$("#c-warehouseor").val()){
+                        status = 2;
+                    }
+
+
+                    if (status == 2){
+                        layer.confirm('领料人或仓管人为空,请检查!');return false;
+                    }
+
+                    // createQrcode(bach,80,80);
+                    var img = document.getElementById("myImage"); /// get image element
+                    var canvas = document.getElementsByTagName('canvas')[0];
+                    // img.src = canvas.toDataURL();                     /// update image
+                    $.print('#print_area');
+                    return false;
+                });
+                function createQrcode(txt,width,height) {
+                    $("#qrcode").qrcode({
+                        render: "canvas",//canvas和table两种渲染方式
+                        width: width,
+                        height: height,
+                        correctLevel:2,//二维码纠错级别
+                        background:"#ffffff",//背景颜色
+                        foreground:"#000000", //二维码颜色
+                        text:txt
+                    });
+                }
+            });
         },
         edit: function () {
             Controller.api.bindevent();