2025-04-10 23:19:13 +08:00

538 lines
21 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use yii\helpers\Html;
use yii\helpers\Url;
use \yii\widgets\LinkPager;
$max_multi = 30; //单次最多上传数量默认是300张
$max_size = 1024*1024*15; //15M换算成字节
$total_size = 1024*1024*450; //450M
?>
<?=Html::cssFile('@web/css/plugins/webuploader/webuploader.css')?>
<?=Html::cssFile('@web/css/demo/webuploader-demo.min.css')?>
<!--日期时间选择器-->
<?=Html::jsFile('@web/js/plugins/layer/laydate/laydate.js')?>
<?=Html::cssFile('@web/js/plugins/layer/laydate/need/laydate.css')?>
<?=Html::cssFile('@web/js/plugins/layer/laydate/skins/molv/laydate.css')?>
<style>
#laydate_box{
margin-left: -50px;
}
.laydate_body .laydate_top{
padding:0;
}
.laydate_body .laydate_ym{
/*margin:0;
padding:5px;*/
}
.laydate_body .laydate_table{
border:0;
border-bottom: 1px solid rgb(204, 204, 204);
}
.laydate_body .laydate_bottom {
border: 0;
margin-bottom: 10px;
}
</style>
<script>
laydate.skin('molv');
</script>
<div class="wrapper wrapper-content animated fadeIn">
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>图片上传</h5>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<div class="page-container">
<p>您可以尝试文件拖拽使用QQ截屏工具然后激活窗口后粘贴或者点击添加图片按钮.</p>
<div id="uploader" class="wu-example">
<div class="queueList">
<div id="dndArea" class="placeholder">
<div id="filePicker"></div>
<p>或将照片拖到这里,单次最多可选<?php echo $max_multi;?>张;单张图片大小不超过<?php echo $max_size/1024/1024?>M</p>
</div>
</div>
<div class="statusBar" style="display:none;">
<div class="progress">
<span class="text">0%</span>
<span class="percentage"></span>
</div>
<div class="info"></div>
<div class="btns">
<div id="filePicker2"></div>
<div class="uploadBtn">开始上传</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-12">
<div class="input-group">
<span class="input-group-btn"> <button id="callback-title" type="button" class="btn btn-primary">图片标题
</button> </span>
<input class="form-control" type="text" id="callback" name="callback" placeholder="文件保存地址" autocomplete="off">
</div>
</div>
</div>
</div>
<script>
var UPLOAD_BUTTON_LABEL = '点击选择图片';
var UPLOAD_BASE_URL = 'js/plugins/webuploader'; //上传组件目录定义
var UPLOAD_SERVER_URL = '<?php echo Yii::getAlias("@web");?>/js/plugins/webuploader/upload.php?pid=<?php echo $_SESSION['pid'];?>&dir=<?php echo Yii::getAlias("@upload");?>&type=pics'; //服务器上传处理地址
var UPLOAD_JSON_POST_URL = '<?=Url::toRoute(["upload/image_save"])?>'; //上传成功后的业务逻辑地址
var UPLOAD_ACCEPT_EXTENSIONS = "gif,jpg,jpeg,bmp,png"; //允许的文件后缀
var UPLOAD_ACCEPT_FILETYPE = "image/*"; //允许的文件类型
var UPLOAD_ACCEPT_TITLE = 'Images';
var UPLOAD_MAX_NUM = '<?php echo $max_multi;?>'; //最大同时上传文件数
var UPLOAD_MAX_SIZE = '<?php echo $max_size;?>'; //最大单文件大小,bytes
var UPLOAD_TOTAL_SIZE = '<?php echo $total_size;?>'; //最大同时上传文件大小,bytes
</script>
<?=Html::jsFile('@web/js/plugins/webuploader/webuploader.min.js')?>
<<script>
jQuery(function() {
function e(e) {
var a = o('<li id="' + e.id + '"><p class="title">' + e.name + '</p><p class="imgWrap"></p><p class="progress"><span></span></p></li>'),
s = o('<div class="file-panel"><span class="cancel">删除</span><span class="rotateRight">向右旋转</span><span class="rotateLeft">向左旋转</span></div>').appendTo(a),
i = a.find("p.progress span"),
t = a.find("p.imgWrap"),
r = o('<p class="error"></p>'),
d = function(e) {
switch (e) {
case "exceed_size":
text = "文件大小超出限制";
break;
case "interrupt":
text = "上传暂停";
break;
default:
text = "上传失败,请重试"
}
r.text(text).appendTo(a)
};
"invalid" === e.getStatus() ? d(e.statusText) : (t.text("预览中"), n.makeThumb(e,
function(e, a) {
if (e) return void t.text("不能预览");
var s = o('<img src="' + a + '">');
t.empty().append(s)
},
v, b), w[e.id] = [e.size, 0], e.rotation = 0),
e.on("statuschange",
function(t, n) {
"progress" === n ? i.hide().width(0) : "queued" === n && (a.off("mouseenter mouseleave"), s.remove()),
"error" === t || "invalid" === t ? (console.log(e.statusText), d(e.statusText), w[e.id][1] = 1) : "interrupt" === t ? d("interrupt") : "queued" === t ? w[e.id][1] = 0 : "progress" === t ? (r.remove(), i.css("display", "block")) : "complete" === t && a.append('<span class="success"></span>'),
a.removeClass("state-" + n).addClass("state-" + t)
}),
a.on("mouseenter",
function() {
s.stop().animate({
height: 30
})
}),
a.on("mouseleave",
function() {
s.stop().animate({
height: 0
})
}),
s.on("click", "span",
function() {
var a, s = o(this).index();
switch (s) {
case 0:
return void n.removeFile(e);
case 1:
e.rotation += 90;
break;
case 2:
e.rotation -= 90
}
x ? (a = "rotate(" + e.rotation + "deg)", t.css({
"-webkit-transform": a,
"-mos-transform": a,
"-o-transform": a,
transform: a
})) : t.css("filter", "progid:DXImageTransform.Microsoft.BasicImage(rotation=" + ~~ (e.rotation / 90 % 4 + 4) % 4 + ")")
}),
a.appendTo(l)
}
function a(e) {
var a = o("#" + e.id);
delete w[e.id],
s(),
a.off().find(".file-panel").off().end().remove()
}
function s() {
var e, a = 0,
s = 0,
t = f.children();
o.each(w,
function(e, i) {
s += i[0],
a += i[0] * i[1]
}),
e = s ? a / s: 0,
t.eq(0).text(Math.round(100 * e) + "%"),
t.eq(1).css("width", Math.round(100 * e) + "%"),
i()
}
function i() {
var e, a = "";
"ready" === k ? a = "选中" + m + "张图片,共" + WebUploader.formatSize(h) + "。": "confirm" === k ? (e = n.getStats(), e.uploadFailNum && (a = "已成功上传" + e.successNum + "张照片," + e.uploadFailNum + '张照片上传失败,<a class="retry" href="#">重新上传</a>失败图片或<a class="ignore" href="#">忽略</a>')) : (e = n.getStats(), a = "共" + m + "张(" + WebUploader.formatSize(h) + "),已上传" + e.successNum + "张", e.uploadFailNum && (a += ",失败" + e.uploadFailNum + "张")),
p.html(a)
}
function t(e) {
var a;
if (e !== k) {
switch (c.removeClass("state-" + k), c.addClass("state-" + e), k = e) {
case "pedding":
u.removeClass("element-invisible"),
l.parent().removeClass("filled"),
l.hide(),
d.addClass("element-invisible"),
n.refresh();
break;
case "ready":
u.addClass("element-invisible"),
o("#filePicker2").removeClass("element-invisible"),
l.parent().addClass("filled"),
l.show(),
d.removeClass("element-invisible"),
n.refresh();
break;
case "uploading":
o("#filePicker2").addClass("element-invisible"),
f.show(),
c.text("暂停上传");
break;
case "paused":
f.show(),
c.text("继续上传");
break;
case "confirm":
//处理上传完成事件
if (f.hide(), c.text("开始上传").addClass("disabled"), a = n.getStats(), a.successNum && !a.uploadFailNum) return void t("finish");
break;
case "finish":
//上传完成后执行
a = n.getStats(),
a.successNum ? alert("上传成功") : (k = "done", location.reload());
o("#filePicker2").removeClass("element-invisible");
c.text("再次上传").removeClass("disabled");
n.refresh();
break;
}
i()
}
}
function fpost(data,url){
//异步提交文件上传成功后获取的JSON字符串解析传到指定的网址以便进行下一步的处理
jQuery.post(url,data,function(res){
console.log(res);
res = $.parseJSON(res);
var img = res.path;
$('#callback').val(img);
//将刚上传成功的图片显示到现有列表中
var $img = '<div class="col-sm-2 col-md-1 col-lg-1">'+
'<div class="thumbnail selected" data-toggle="tooltip" data-placement="top" title="点击图片即可选择">'+
'<img style="max-height:150px;" class="used" alt="新上传图片" src="<?=$src?>'+img+'" data-src="'+img+'" title="新上传图片" onclick="markImage(this);" />'+
'</div>'+
'</div>';
$('#imageList').prepend($img);
});
}
var n, o = jQuery,
r = o("#uploader"),
l = o('<ul class="filelist"></ul>').appendTo(r.find(".queueList")),
d = r.find(".statusBar"),
p = d.find(".info"),
c = r.find(".uploadBtn"),
u = r.find(".placeholder"),
f = d.find(".progress").hide(),
m = 0,
h = 0,
g = window.devicePixelRatio || 1,
v = 110 * g,
b = 110 * g,
k = "pedding",
w = {},
x = function() {
var e = document.createElement("p").style,
a = "transition" in e || "WebkitTransition" in e || "MozTransition" in e || "msTransition" in e || "OTransition" in e;
return e = null,
a
} ();
if (!WebUploader.Uploader.support()) throw alert("Web Uploader 不支持您的浏览器如果你使用的是IE浏览器请尝试升级 flash 播放器"),
new Error("WebUploader does not support the browser you are using.");
//初始化上传组件
n = WebUploader.create({
pick: {
id: "#filePicker",
innerHTML: UPLOAD_BUTTON_LABEL
},
dnd: "#uploader .queueList",
paste: document.body,
accept: {
title: UPLOAD_ACCEPT_TITLE,
extensions: UPLOAD_ACCEPT_EXTENSIONS,
mimeTypes: UPLOAD_ACCEPT_FILETYPE
},
swf: UPLOAD_BASE_URL + "/Uploader.swf",
disableGlobalDnd: !0,
chunked: true, //开启分片上传
duplicate: true, //去重
server: UPLOAD_SERVER_URL,
fileNumLimit: UPLOAD_MAX_NUM,
fileSizeLimit: UPLOAD_TOTAL_SIZE,
fileSingleSizeLimit: UPLOAD_MAX_SIZE //单张图大小限制
}),
n.addButton({
id: "#filePicker2",
label: "继续添加"
}),
n.onUploadProgress = function(e, a) {
var i = o("#" + e.id),
t = i.find(".progress span");
t.css("width", 100 * a + "%"),
w[e.id][1] = a,
s()
},
n.onFileQueued = function(a) {
m++,
h += a.size,
1 === m && (u.addClass("element-invisible"), d.show()),
e(a),
t("ready"),
s()
},
n.onFileDequeued = function(e) {
m--,
h -= e.size,
m || t("pedding"),
a(e),
s()
},
n.on("all",
function(e) {
switch (e) {
case "uploadFinished":
t("confirm");
break;
case "startUpload":
t("uploading");
break;
case "stopUpload":
t("paused");
break;
}
}),
n.onError = function(e) {
alert("Error: " + e)
},
n.on("uploadSuccess",
function($file,$res){
//$file,当前上传的文件信息
console.log($file);
//$res,服务器返回的信息(服务端返回了文件路径跟链接等信息)
console.log($res);
$res = $res._raw;
console.log($res);
$res = $res + '}';
console.log($res);
$res = $.parseJSON($res); //由JSON字符串转换为JSON对象
console.log($res);
var res = $res.result;
console.log(res);
$('#callback-title').html(res.name);
if(UPLOAD_JSON_POST_URL){
res.size = $file.size;
res.type = $file.type;
res.lasttime = $file.lastModifiedDate;
res.ext = $file.ext;
res.params = $file._info;
fpost(res,UPLOAD_JSON_POST_URL);
}
}
),
c.on("click",
function() {
return o(this).hasClass("disabled") ? !1 : void("ready" === k ? n.upload() : "paused" === k ? n.upload() : "uploading" === k && n.stop())
}),
p.on("click", ".retry",
function() {
n.retry()
}),
p.on("click", ".ignore",
function(e) {
alert("好的");
console.log('取消了已经上传失败的文件');
}),
c.addClass("state-" + k),
s()
});
</script>
<div class="wrapper wrapper-content">
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-content" style="text-align: center;">
<h1>搜索与筛选</h1>
<form role="form" class="form-horizontal m-t" action="" method="post">
<input type="hidden" name="_csrf-backend" value="<?= Yii::$app->getRequest()->getCsrfToken();?>" />
<div class="form-group">
<div class="col-sm-3">
<div class="input-group">
<span class="input-group-btn">
<button type="button" class="btn btn-sm btn-primary">上传时间</button>
</span>
<input class="input-sm form-control layer-date" type="text" name="search[create_m]" placeholder="请选择月份" autocomplete="off" onclick="laydate({istime: false, format: 'YYYY-MM'})" value="<?=isset($search['create_m'])?$search['create_m']:''?>">
</div>
</div>
<div class="col-sm-3">
<div class="input-group">
<span class="input-group-btn">
<button type="button" class="btn btn-sm btn-primary">时间不早于</button>
</span>
<input class="input-sm form-control layer-date" type="text" name="search[create_after]" placeholder="请选择日期" autocomplete="off" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})" value="<?=isset($search['create_after'])?$search['create_after']:''?>">
</div>
</div>
<div class="col-sm-3">
<div class="input-group">
<span class="input-group-btn">
<button type="button" class="btn btn-sm btn-primary">时间不晚于</button>
</span>
<input class="input-sm form-control layer-date" type="text" name="search[create_before]" placeholder="请选择日期" autocomplete="off" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})" value="<?=isset($search['create_before'])?$search['create_before']:''?>">
</div>
</div>
<div class="col-sm-3">
<div class="input-group">
<input class="form-control" type="text" placeholder="模糊检索图片标题" name="search[title]" id="title" value="<?=isset($search['title'])?$search['title']:''?>">
<span class="input-group-btn">
<button type="button" class="btn btn-info" onclick="clearBind('title')">清除</button>
</span>
</div>
</div>
<script>
function clearBind(id)
{
$('#'+id).val('');
}
</script>
</div>
<div class="form-group">
<div class="col-sm-12">
<button type="submit" class="btn btn-sm btn-info"> 搜索</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>您还可以直接选取已有图片</h5>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="ibox-content">
<div class="row" id="imageList">
<?php foreach($list as $val){ ?>
<div class="col-sm-2 col-md-1 col-lg-1">
<div class="thumbnail" data-toggle="tooltip" data-placement="top" title="<?=$val['title']?> 点击图片即可选择">
<img style="max-height:150px;" alt="<?=$val['title']?>" src="<?=$src.$val['route']?>" data-src="<?=$val['route']?>" title="<?=$val['title']?>" onclick="markImage(this);" />
</div>
</div>
<?php } ?>
</div>
<div class="row">
<div class="table-responsive">
<div>
<!--分页-->
<div class="f-r" style="text-align: center;">
<?= LinkPager::widget([
'pagination'=>$pager,
'firstPageLabel' => '首页',
'nextPageLabel' => '下一页',
'prevPageLabel' => '上一页',
'lastPageLabel' => '末页',
]) ?>
</div>
</div>
</div><!-- /.row -->
</div><!-- /.main-container -->
</div>
</div>
<div class="col-sm-12 " style="text-align: center;margin-top:15px;">
<div id="SelectPhotos" class="btn btn-info" onclick="confirm();">确认</div>
<div id="CancelPhotos" class="btn btn-warning" onclick="cancel();">取消</div>
</div>
</div>
</div>
<style>
#imageList .selected{
border-color:#0095f6;
background-color:#0095f6;
box-shadow: 3px 5px 2px;
}
</style>
<script>
$('[data-toggle="tooltip"]').tooltip();
// function markImage(obj){
// $('#imageList .selected').removeClass('selected');
// $(obj).parent().addClass('selected');
// $(obj).parent().css({"border-color":"#0095f6","background-color":"#0095f6"});
// }
function markImage(obj){
$(obj).parent().toggleClass('selected');
$(obj).toggleClass('used');
}
function cancel(){
parent.layer.closeAll();
layer.msg('取消操作!');
}
function confirm(){
var obj = $('#imageList .selected>img');
var l=obj.length,imgs=[];
for (i = 0; i < l; i++) {
var a = $(obj[i]);
imgs.push(a.context.dataset.src);
}
parent.selectImages(imgs,'<?=$callback?>');
}
</script>