增加可上传的文件类型:/application/extra/upload.php

增加供应商选择

\application\admin\library\traits\Backend.php  import()

controller:

 $file = $this->request->request('file');
        $sid = $this->request->request('sid');
        if (!$file) {
            $this->error(__('Parameter %s can not be empty', 'file'));
        }
        $filePath = ROOT_PATH . DS . 'public' . DS . $file;
        if (!is_file($filePath)) {
            $this->error(__('No results were found'));
        }
        //实例化reader
        $ext = pathinfo($filePath, PATHINFO_EXTENSION);
        if (!in_array($ext, ['csv', 'xls', 'xlsx'])) {
            $this->error(__('Unknown data format'));
        }
        if ($ext === 'csv') {
            $file = fopen($filePath, 'r');
            $filePath = tempnam(sys_get_temp_dir(), 'import_csv');
            $fp = fopen($filePath, "w");
            $n = 0;
            while ($line = fgets($file)) {
                $line = rtrim($line, "\n\r\0");
                $encoding = mb_detect_encoding($line, ['utf-8', 'gbk', 'latin1', 'big5']);
                if ($encoding != 'utf-8') {
                    $line = mb_convert_encoding($line, 'utf-8', $encoding);
                }
                if ($n == 0 || preg_match('/^".*"$/', $line)) {
                    fwrite($fp, $line . "\n");
                } else {
                    fwrite($fp, '"' . str_replace(['"', ','], ['""', '","'], $line) . "\"\n");
                }
                $n++;
            }
            fclose($file) || fclose($fp);

            $reader = new Csv();
        } elseif ($ext === 'xls') {
            $reader = new Xls();
        } else {
            $reader = new Xlsx();
        }

        //导入文件首行类型,默认是注释,如果需要使用字段名称请使用name
        $importHeadType = isset($this->importHeadType) ? $this->importHeadType : 'comment';

        $table = $this->model->getQuery()->getTable();
        $database = \think\Config::get('database.database');
        $fieldArr = [];
        $list = db()->query("SELECT COLUMN_NAME,COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ? AND TABLE_SCHEMA = ?", [$table, $database]);
        foreach ($list as $k => $v) {
            if ($importHeadType == 'comment') {
                $fieldArr[$v['COLUMN_COMMENT']] = $v['COLUMN_NAME'];
            } else {
                $fieldArr[$v['COLUMN_NAME']] = $v['COLUMN_NAME'];
            }
        }

        //加载文件
        $insert = [];
        try {
            if (!$PHPExcel = $reader->load($filePath)) {
                $this->error(__('Unknown data format'));
            }
            $currentSheet = $PHPExcel->getSheet(0);  //读取文件中的第一个工作表
            $allColumn = $currentSheet->getHighestDataColumn(); //取得最大的列号
            $allRow = $currentSheet->getHighestRow(); //取得一共有多少行
            $maxColumnNumber = Coordinate::columnIndexFromString($allColumn);
            $fields = [];
            for ($currentRow = 1; $currentRow <= 1; $currentRow++) {
                for ($currentColumn = 1; $currentColumn <= $maxColumnNumber; $currentColumn++) {
                    $val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();
                    $fields[] = $val;
                }
            }

            for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {
                $values = [];
                for ($currentColumn = 1; $currentColumn <= $maxColumnNumber; $currentColumn++) {
                    $val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();
                    $values[] = is_null($val) ? '' : $val;
                }
                $row = [];
                $temp = array_combine($fields, $values);
                foreach ($temp as $k => $v) {
                    if (isset($fieldArr[$k]) && $k !== '') {
                        $row[$fieldArr[$k]] = $v;
                        $row[$fieldArr[$k]] = $v;
                    }
                }
                if ($row) {
                    $insert[] = $row;
                }
            }
        } catch (Exception $exception) {
            $this->error($exception->getMessage());
        }
        if (!$insert) {
            $this->error(__('No rows were updated'));
        }

        try {
            //是否包含admin_id字段
            $has_admin_id = false;
            foreach ($fieldArr as $name => $key) {
                if ($key == 'admin_id') {
                    $has_admin_id = true;
                    break;
                }
            }
            if ($has_admin_id) {
                $auth = Auth::instance();
                foreach ($insert as &$val) {
                    if (!isset($val['admin_id']) || empty($val['admin_id'])) {
                        $val['admin_id'] = $auth->isLogin() ? $auth->id : 0;
                    }
                }
            }
            $this->model->saveAll($insert);
        } catch (PDOException $exception) {
            $msg = $exception->getMessage();
            if (preg_match("/.+Integrity constraint violation: 1062 Duplicate entry '(.+)' for key '(.+)'/is", $msg, $matches)) {
                $msg = "导入失败,包含【{$matches[1]}】的记录已存在";
            };
            $this->error($msg);
        } catch (Exception $e) {
            $this->error($e->getMessage());
        }

        $this->success();

view:


<a href="javascript:;" class="btn btn-danger " title="{:__('Import')}" onclick="showImportPannel()"><i class="fa fa-upload"></i> {:__('Import')}</a>
<script>
    function showImportPannel(){
        if($('#importPanel').is(':hidden')){
             $("#importPanel").modal("show");
             // $("#importPanel").show();
        }else{
              $("#importPanel").hide();
        }
    }
    function changeSup(){
        var sidVal=$("#c-sid").val();
        console.log(sidVal);
        $("#btn-import-file").show();
         $("#btn-import-file").data('sid',sidVal);
         console.log($("#btn-import-file").data('sid'));
    }
</script>
<div class="modal fade" id="importPanel" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" style="display:none;">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title" id="myModalLabel">{:__('选择供应商')}</h4>
            </div>
            <div class="modal-body">
                <form action="" role="form">
                <div id="lays-row" class="row toolbar1" style="padding-right: 10px;padding-left: 10px;">
                     <div class="form-group">
                        <div class="col-xs-12 col-sm-8">
                            <input id="c-sid" type="text" class="form-control selectpage" data-source="outuser/Supplier/index"  data-primary-key="sCode" data-field="name" name="sid" onchange="changeSup()"/>
                        </div>
                    </div>
                  
                    <a href="javascript:;" class="btn btn-danger btn-import1 {:$auth->check('ykjp/product/product/import')?'':'hide'}" title="{:__('Import')}" id="btn-import-file" data-url="ajax/upload" data-sid="" data-mimetype="csv,xls,xlsx" data-multiple="false" style="display:none;"><i class="fa fa-upload"></i> {:__('Import')}</a>
                </div>
                </form>
            </div>
        </div>
        
    </div>
</div>
<style>
    .sp_result_area_open {
        z-index: 99999 !important;
    }
</style>

js:



// 导入按钮事件
            if ($('.btn-import1', '.toolbar1').size() > 0) {
                require(['upload'], function (Upload) {
                    Upload.api.upload($('.btn-import1', '.toolbar1'), function (data, ret) {
                        console.log(data);console.log(ret);
                        var sidVal=$("#c-sid").val();
                        Fast.api.ajax({
                            url: $.fn.bootstrapTable.defaults.extend.import_url,
                            data: {file: data.url,sid:sidVal},
                        }, function (data, ret) {
                            table.trigger("uncheckbox");
                            table.bootstrapTable('refresh');
                        });
                    });
                });
            }
             Controller.api.bindevent();


点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
返回
顶部