| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 | <?php/** * 图片上传 * User: Mike * Email: m@9026.com * Date: 2016/6/21 * Time: 11:45 */namespace App\Widget\Tools;use App\Models\CmsLinkModel;class ImgUpload{    /**     * 单个图片上传     * @param $folder     * @param string $position     * @param array $option     */    public function single($id, $name = "data[image]", $file = '')    {        $url = U("/Base/Photos/index");        $imgHtml = "";        if (!empty($file)) {            if (!is_array($file)) {                $img['url'] = $file;                $img['alt'] = '';                $iconImage = in_array(fileExt($img['url']), ['jpg', 'png', 'gif', 'jpeg', 'bmp']) ? " <div class='image'><img src=\"{$img['url']}\" alt= /></div>" : "<div class='icon'><i class='fa fa-file'></i></div>";                $imgHtml .= "<li >                    <div class=\"file\">                        <span class=\"corner\"></span>                        {$iconImage}                        <div class=\"file-name\">                            <p>{$img['alt']}</p>                            <small></small>                        </div>                    </div>                    <em class=\"close\" onclick=\"$(this).parent().remove()\" >×</em>                    <input type=\"hidden\" name=\"data[{$name}]\" value=\"{$img['url']}\">                    </li>";            }        }        $html = <<<EOF                        <link href="/base/plugins/webuploader/webuploader.css" rel="stylesheet">                        <script src="/base/plugins/webuploader/webuploader.js"></script>                            <div style="clear:both">                            <div id="$id" class="layout_upload">                                <ul class="ullit">                                    $imgHtml                                </ul>                               <button class="btn btn-primary"  id="$id" type="button">选择图片</button>                            </div>                             <script>                                $(document).ready(function(){                                   $("#{$id}list").sortable({connectWith:"#{$id}list",tag:"a",constraint:"horizontal",scroll:false}).disableSelection()});                            </script>                             </div>                            <script type="text/javascript">                                                           $("#$id").click(function() {                                    layer.open({                                        type: 2,                                        title: '选择图片',                                        shadeClose: true,                                        shade: 0.8,                                        area: ['80%', '90%'],                                        content: '$url',                                        btn: ['确定'],                                        yes:function(index, layero){                                            var body = layer.getChildFrame('body',index);//建立父子联系                                            var imglist = body.find('div.img-card span.checked');                                            if(imglist.length > 1){                                                alert('只能选择单张图片')                                            }else {                                            $.each(imglist,function(i) {                                               $("#$id ul").html("<li data-uploaderid='WU_FILE_0'><div class='file'><span class='corner'></span><div class='image'><img  src=" + $(this).attr('data-src') + " alt= /></div><div class='file-name'><p>" + $(this).attr('data-name') +"</p><small></small></div></div><em class='close' onclick='$(this).parent().remove()'>×</em><input type='hidden' name='{$name}' value="+ $(this).attr('data-src')+"></li>");                                             })                                            layer.close(index);                                             }                                                                                   }                                                             });                                });                                                            </script>EOF;        return $html;    }    /**     * 统一多张图片     * @param $folder     * @param $id     * @param string $name     * @param array $imgs     * @param null $callBackFun     * @return string     */    public function multi($id, $name = "data[image]", $imgs = [])    {        $url = U("/Base/Photos/index");        $imgHtml = "";        if (!empty($imgs)) {            foreach ($imgs as $key => $val) {                if (is_string($val)) {                    $img['url'] = $val;                    $img['alt'] = '';                } else {                    $img = $val;                }                $iconImage = in_array(fileExt($img['url']), ['jpg', 'png', 'gif', 'jpeg', 'bmp']) ? " <div class='image'><img src=\"{$img['url']}\" alt= /></div>" : "<div class='icon'><i class='fa fa-file'></i></div>";                $imgHtml .= "<li >                        <div class=\"file\">                            <span class=\"corner\"></span>                            {$iconImage}                            <div class=\"file-name\">                                <p>{$img['alt']}</p>                                <small></small>                            </div>                        </div>                        <em class=\"close\" onclick=\"$(this).parent().remove()\" >×</em>                        <input type=\"hidden\" name=\"{$name}[alt][]\" value=\"{$img['alt']}\">                        <input type=\"hidden\" name=\"{$name}[url][]\" value=\"{$img['url']}\">                        </li>";            }        }        $html = <<<EOF                        <link href="/base/plugins/webuploader/webuploader.css" rel="stylesheet">                        <script src="/base/plugins/webuploader/webuploader.js"></script>                            <div style="clear:both">                            <div id="multi" class="layout_upload">                                <ul class="ullit">                                  $imgHtml                                </ul>                               <button class="btn btn-primary"  id="$id" type="button">选择图片</button>                            </div>                             <script>                                $(document).ready(function(){                                   $("#{$id}list").sortable({connectWith:"#{$id}list",tag:"a",constraint:"horizontal",scroll:false}).disableSelection()});                            </script>                             </div>                            <script type="text/javascript">                                                           $("#$id").click(function() {                                    layer.open({                                        type: 2,                                        title: '选择图片',                                        shadeClose: true,                                        shade: 0.8,                                        area: ['80%', '90%'],                                        content: '$url',                                        btn: ['确定'],                                        yes:function(index, layero){                                            var body = layer.getChildFrame('body',index);//建立父子联系                                            var imglist = body.find('div.img-card span.checked');                                            $.each(imglist,function(i) {                                               $('#multi ul').append("<li data-uploaderid='WU_FILE_0'><div class='file'><span class='corner'></span><div class='image'><img  src=" + $(this).attr('data-src') + " alt= /></div><div class='file-name'><p>" + $(this).attr('data-name') +"</p><small></small></div></div><em class='close' onclick='$(this).parent().remove()'>×</em><input type='hidden' name='{$name}[]' value="+ $(this).attr('data-src')+"></li>");                                             })                                                                                     layer.close(index);                                           }                                                             });                                });                                                            </script>EOF;        return $html;    }    /**     * 统一上传     * @param $text         按钮文字     * @param $folder       上传文件夹     * @param $id           id     * @param $option       附加选项     */    public function upload($text, $folder, $id, $option = [])    {        $folder = urlencode($folder);        $trigger = $id . '-trigger';        $modal = $id . '-modal';        $select_btn = $id . '-select-btn';        $upload_btn = $id . '-upload-btn';        $uploader = $id . '_uploader';        $url = isset($option['url']) ? $option['url'] : 'empty';        $upload_url = "/admin/Base/Attachment/webupload?folder=" . $folder;        foreach ($option as $key => $val) {            $upload_url = $upload_url . '&' . $key . '=' . $val;        }        $html = <<<EOF<link rel="stylesheet" type="text/css" href="/base/plugins/webuploader/webuploader.css"><script type="text/javascript" src="/base/plugins/webuploader/webuploader.js"></script><style type="text/css">    .webuploader-pick {        height: 34px    }    .webupload-item {        width: 100%;        padding: 15px 20px;        margin-top: 5px;        border: 1px solid transparent;        background-color: #E8E8E8;        display: inline-block;    }    .webupload-item.success-status {        background-color: #00FF66    }    .webupload-item.error-status {        background-color: #FF9966    }    .webupload-item .info,    .webupload-item .status {        display: inline-block;    }    .webupload-item .webupload-cancel,    .webupload-item .webupload-retry {        float: right;    }    .webupload-item .status {        margin-left: 15px;    }    .uploader-list {        margin: 20px 15px;    }</style>    <div id="$trigger" class="btn btn-sm btn-primary">$text</div>    <div class="modal fade" id="$modal" tabindex="-1" role="dialog" aria-hidden="true">        <div class="modal-dialog">            <div class="modal-content">                <div class="modal-body">                    <div class="row">                        <div class="col-sm-4">                            <div class="btns">                                <div id="$select_btn" style="position: absolute; left: 10px; height: 34px">选择图片</div>                                <div id="$upload_btn" class="btn btn-info" style="position: absolute; left: 110px;">上传图片</div>                            </div>                        </div>                        <div class="col-sm-6">                            <input type="text" class="form-control img-compress-ratio" name="class" placeholder="压缩比,1-50">                        </div>                    </div>                    <div class="row">                        <div class="uploader-list"></div>                    </div>                </div>            </div>        </div>    </div><script type="text/javascript">    var $uploader = WebUploader.create({        pick: {            id: "#$select_btn",        },        server: "$upload_url",        swf: "/base/plugins/webuploader/Uploader.swf",        accept: {            title: 'Images',            extensions: 'gif,jpg,jpeg,bmp,png',            mimeTypes: 'image/*'        }    });    $('#$trigger').on('click', function() {        $uploader.reset();        $('.uploader-list', '#$modal').empty();        $('#$modal').modal('show');    });    $('#$upload_btn').on('click', function() {        ratio = parseInt($('.img-compress-ratio', '#$modal').val());        if(ratio >= 1 && ratio <= 50) {            $uploader.options.server = $uploader.options.server + "&compress_ratio=" + ratio;        } else {            $uploader.options.server = $uploader.options.server;        }        $uploader.upload();    });    $uploader.on('fileQueued', function(file) {        $('.uploader-list', '#$modal').append( '<div id="' + file.id + '" class="webupload-item" data-id="' + file.id + '">' + '<div class="info">' + file.name + '</div>' + '<span class="status">等待上传...</span>' + '<button type="button" class="btn btn-sm btn-default webupload-cancel" data-id="' + file.id + '">取消</button></div>' );    }).on('uploadProgress', function(file, percentage) {        $('#' + file.id).removeClass().addClass('webupload-item');        $('#' + file.id + ' .status').text('正在上传:' + percentage);    }).on('uploadSuccess', function(file, response) {        $('#' + file.id).removeClass().addClass('webupload-item success-status');        $('#' + file.id + ' .status').text('上传完毕');    }).on('uploadError', function(file, reason) {        $('.webupload-retry', '#' + file.id).remove();        $('#' + file.id).removeClass().addClass('webupload-item error-status').append('<button type="button" class="btn btn-sm btn-warning webupload-retry" data-id="' + file.id + '">重试</button>');        $('#' + file.id + ' .status').text(reason.data.message);    }).on('uploadAccept', function(object, ret) {        if(ret.code == 200) {            return true;        } else {            return false;        }    }).on('uploadFinished', function() {        var url = "$url";        console.log($uploader.getStats());        if(url != 'empty') {            window.location = url;        }    });    $uploader.on('error', function(code) {        var err = '';        switch (code) {                case 'F_EXCEED_SIZE':                    err += '单张图片大小不得超过' +  uploader.options.fileSingleSizeLimit + 'kb!';                    break;                case 'Q_EXCEED_NUM_LIMIT':                    err += '最多只能上传' +  uploader.options.fileNumLimit + '张!';                    break;                case 'Q_EXCEED_SIZE_LIMIT':                    err += '上传图片过大!';                    break;                case 'Q_TYPE_DENIED':                    err += '无效图片类型,请上传正确的图片格式!';                    break;                default:                    err += '上传错误,请刷新重试!';                    break;            }            alert(err);            return false;    });    $('#$modal').on('click', '.webupload-cancel', function() {        $uploader.removeFile($(this).attr('data-id'), true);        $(this).closest('.webupload-item').remove();    }).on('click', '.webupload-retry', function() {        $uploader.retry($(this).attr('data-id'));    });</script>EOF;        return $html;    }}
 |