define(['jquery', 'table', 'form', 'upload'], function($, Table, Form, Upload) {
var form = layui.form,
table = layui.table;
var Controller = {
index: function() {
Table.init = {
table_elem: '#currentTable',
table_render_id: 'currentTable',
add_url: "general.attachments/add",
edit_url: "general.attachments/edit",
delete_url: "general.attachments/del",
};
Table.render({
init: Table.init,
elem: Table.init.table_elem,
toolbar: ['refresh','add','delete', {
text: '归类',
auth: 'edit',
icon: 'iconfont icon-drag-move-2-fill',
class: 'layui-btn layui-btn-sm layui-btn-normal btn-classify btn-disabled layui-btn-disabled',
extend: '',
}],
url: 'general.attachments/index',
lineStyle: 'height: 50px;',
cols: [
[
{ type: 'checkbox', fixed: 'left' },
{ field: 'id', width: 80, title: 'ID', sort: true },
{ field: 'category', width: 90, title: '类别', templet: Table.formatter.label, selectList: Config.categoryList, searchOp: 'in'},
{ field: 'admin_id', width: 80, title: '管理员', hide: true, addClass: "selectpage", extend: "data-source='auth.manager/index' data-field='username'" },
{ field: 'user_id', width: 80, title: '会员', hide: true, addClass: "selectpage", extend: "data-source='user.user/index' data-field='username'" },
{ field: 'path', width: 70, align: "center", title: '图片', search: false, templet: Controller.api.formatter.thumb },
{ field: 'name', minWidth: 150, title: '文件名', searchOp: 'like' },
{ field: 'imagewidth', width: 90, title: '宽度', sort: true},
{ field: 'imageheight', width: 90, title: '高度', sort: true},
{ field: 'path', width: 450, align: "center", title: '物理路径', hide:true, searchOp: 'like' },
{ field: 'size', width: 100, title: '大小', sort: true,search: 'between', searchTip: '文件大小',templet: function(d){
var size = parseFloat(d.size);
var i = Math.floor(Math.log(size) / Math.log(1024));
return (size / Math.pow(1024, i)).toFixed(i < 2 ? 0 : 2) * 1 + ' ' + ['B', 'KB', 'MB', 'GB', 'TB'][i];
}
},
{ field: 'ext', width: 80, title: '类型', searchOp: 'like' },
{ field: 'mime', width: 140, title: 'Mime类型', selectList: Config.mimetypeList, extend: "lay-search lay-creatable" },
{ field: 'driver', width: 90, title: '存储引擎', searchOp: 'like' },
{ field: 'create_time', width: 170, title: '上传时间', search: 'range' },
{ width: 90, title: '操作', templet: Table.formatter.tool, operat: ['edit','delete'] }
]
],
page: {}
});
$('body').on('click', '.btn-classify', function() {
var checkStatus = layui.table.checkStatus('currentTable'),
ids = [],
data = checkStatus.data;
if (data.length > 0) {
$.each(data, function(i, v) {
ids.push(v.id);
});
Layer.open({
title: '归类',
content: layui.laytpl($("#typeTpl").html()).render({}),
area: ['300px', '250px'],
success: function(){
layui.form.render('select');
},
yes: function(index, layero) {
var category = $("select[name='category']", layero).val();
Yzn.api.ajax({
url: "general.attachments/classify",
data: { 'id': ids, 'category': category },
}, function(data) {
layui.table.reload('currentTable');
Layer.close(index);
})
},
});
} else {
Layer.msg("请选择需要归类的数据", { icon: 2 });
}
});
Table.api.bindevent();
},
add: function () {
//上传完成后刷新父窗口
$(".faupload").data("upload-complete", function (files) {
setTimeout(function () {
window.parent.$(".btn-refresh").trigger("click");
}, 100);
});
// 获取上传类别
form.on('select(category-local-filter)', function(data){
$("#faupload-local,#faupload-local-chunking").data("category",data.value);
})
Controller.api.bindevent();
},
edit: function () {
Controller.api.bindevent();
},
select: function() {
Table.init = {
table_elem: '#currentTable',
table_render_id: 'currentTable',
};
var multiple = Backend.api.query('multiple');
multiple = multiple == 'true' ? true : false;
var toolbar = ['refresh', {
html: ''
}];
if (multiple) {
toolbar.push({
html: ' '
});
}
Table.render({
init: Table.init,
elem: Table.init.table_elem,
renderDefault: true,
toolbar: toolbar,
url: 'general.attachments/index',
lineStyle: 'height: 50px;',
cols: [
[
{ type: 'checkbox', fixed: 'left', hide: (multiple ? false : true) },
{ field: 'id', width: 80, title: 'ID', sort: true },
{ field: 'name', title: '名称' },
{ field: 'path', width: 70, align: "center", title: '图片', search: false, templet: Controller.api.formatter.thumb },
{ field: 'size', width: 100, title: '大小', sort: true, templet: function(d){
var size = parseFloat(d.size);
var i = Math.floor(Math.log(size) / Math.log(1024));
return (size / Math.pow(1024, i)).toFixed(i < 2 ? 0 : 2) * 1 + ' ' + ['B', 'KB', 'MB', 'GB', 'TB'][i];
}
},
{ field: 'mime', width: 120, title: 'Mime类型',searchOp:'LIKE %...%',
process: function (value, arg) {
return value.replace(/\*/g, '%');
}
},
{ field: 'create_time', width: 160, title: '上传时间', search: 'range' },
{ fixed: 'right', width: 85, title: '操作', toolbar: '#barTool' }
]
],
page: {},
done: function(res, curr, count) {
Upload.api.upload('.faupload', function() {
$(".btn-refresh").trigger("click");
});
}
});
var urlArr = [];
table.on('checkbox', function(obj) {
var checkStatus = table.checkStatus('currentTable').data;
urlArr = [];
for (var i = 0; i < checkStatus.length; i++) {
urlArr.push(checkStatus[i]['path']);
}
})
//选择单个
$(document).on('click', '.btn-chooseone', function() {
var that = $(this),
index = that.parents('tr').eq(0).data('index'),
tr = $('.layui-table-body').find('tr[data-index="' + index + '"]'),
href = !that.attr('data-href') ? that.attr('href') : that.attr('data-href');
Yzn.api.close({ url: href, multiple: multiple });
});
// 选中多个 todo翻页失效
$(document).on("click", ".btn-choose-multi", function() {
Yzn.api.close({ url: urlArr.join(","), multiple: multiple });
});
Table.api.bindevent();
},
cropper: function() {
require(['../libs/cropper/cropper.min'], function() {
var URL = window.URL || window.webkitURL;
var $image = $('#image');
var $download = $('#download');
/*var $dataX = $('#dataX');
var $dataY = $('#dataY');*/
var $dataHeight = $('#dataHeight');
var $dataWidth = $('#dataWidth');
/*var $dataRotate = $('#dataRotate');
var $dataScaleX = $('#dataScaleX');
var $dataScaleY = $('#dataScaleY');*/
var options = {
aspectRatio: 16 / 9,
preview: '.img-preview',
crop: function(e) {
/*$dataX.val(Math.round(e.detail.x));
$dataY.val(Math.round(e.detail.y));*/
$dataHeight.val(Math.round(e.detail.height));
$dataWidth.val(Math.round(e.detail.width));
/*$dataRotate.val(e.detail.rotate);
$dataScaleX.val(e.detail.scaleX);
$dataScaleY.val(e.detail.scaleY);*/
}
};
var originalImageURL = $image.attr('src');
var uploadedImageName = 'cropped.jpg';
var uploadedImageType = 'image/jpeg';
var uploadedImageURL;
// Cropper
$image.cropper(options);
$(document).on("click", ".getCroppedCanvas", function() {
layer.open({
type: 1,
title: false,
area: '340px',
content: $('#getCroppedCanvasModal')
});
})
//确认事件
$(document).on("click", ".btn-submit", function() {
var data = $image.cropper('getData');
var dataURI = $image.cropper('getCroppedCanvas').toDataURL('image/png');
data.dataURI = dataURI;
Yzn.api.close(data);
});
//取消事件
$(document).on("click", ".btn-cancel", function() {
var index = parent.layer.getFrameIndex(window.name); //获取窗口索引
parent.layer.close(index);
});
// Buttons
if (!$.isFunction(document.createElement('canvas').getContext)) {
$('button[data-method="getCroppedCanvas"]').prop('disabled', true);
}
if (typeof document.createElement('cropper').style.transition === 'undefined') {
$('button[data-method="rotate"]').prop('disabled', true);
$('button[data-method="scale"]').prop('disabled', true);
}
// 选择比例
$('.docs-toggles').on('click', 'button', function() {
var $this = $(this);
var name = $this.data('name');
var type = $this.prop('type');
var cropBoxData;
var canvasData;
if (!$image.data('cropper')) {
return;
}
options[name] = $this.val();
$image.cropper('destroy').cropper(options);
});
// 按钮组操作
$('.docs-buttons').on('click', '[data-method]', function() {
var $this = $(this);
var data = $this.data();
var cropper = $image.data('cropper');
var cropped;
var $target;
var result;
if ($this.prop('disabled') || $this.hasClass('disabled')) {
return;
}
if (cropper && data.method) {
data = $.extend({}, data); // Clone a new one
if (typeof data.target !== 'undefined') {
$target = $(data.target);
if (typeof data.option === 'undefined') {
try {
data.option = JSON.parse($target.val());
} catch (e) {
console.log(e.message);
}
}
}
cropped = cropper.cropped;
switch (data.method) {
case 'rotate':
if (cropped && options.viewMode > 0) {
$image.cropper('clear');
}
break;
case 'getCroppedCanvas':
if (uploadedImageType === 'image/jpeg') {
if (!data.option) {
data.option = {};
}
data.option.fillColor = '#fff';
}
break;
}
result = $image.cropper(data.method, data.option, data.secondOption);
switch (data.method) {
case 'rotate':
if (cropped && options.viewMode > 0) {
$image.cropper('crop');
}
break;
case 'scaleX':
case 'scaleY':
$(this).data('option', -data.option);
break;
case 'getCroppedCanvas':
if (result) {
// Bootstrap's Modal
$('#getCroppedCanvasModal').find('.modal-body').html(result);
if (!$download.hasClass('disabled')) {
download.download = uploadedImageName;
$download.attr('href', result.toDataURL(uploadedImageType));
}
}
break;
case 'destroy':
if (uploadedImageURL) {
URL.revokeObjectURL(uploadedImageURL);
uploadedImageURL = '';
$image.attr('src', originalImageURL);
}
break;
}
if ($.isPlainObject(result) && $target) {
try {
$target.val(JSON.stringify(result));
} catch (e) {
console.log(e.message);
}
}
}
});
// 键盘支持
$(document.body).on('keydown', function(e) {
if (e.target !== this || !$image.data('cropper') || this.scrollTop > 300) {
return;
}
switch (e.which) {
case 37:
e.preventDefault();
$image.cropper('move', -1, 0);
break;
case 38:
e.preventDefault();
$image.cropper('move', 0, -1);
break;
case 39:
e.preventDefault();
$image.cropper('move', 1, 0);
break;
case 40:
e.preventDefault();
$image.cropper('move', 0, 1);
break;
}
});
// 上传图片
var $inputImage = $('#inputImage');
if (URL) {
$inputImage.change(function() {
var files = this.files;
var file;
if (!$image.data('cropper')) {
return;
}
if (files && files.length) {
file = files[0];
if (/^image\/\w+$/.test(file.type)) {
uploadedImageName = file.name;
uploadedImageType = file.type;
if (uploadedImageURL) {
URL.revokeObjectURL(uploadedImageURL);
}
uploadedImageURL = URL.createObjectURL(file);
$image.cropper('destroy').attr('src', uploadedImageURL).cropper(options);
$inputImage.val('');
} else {
window.alert('Please choose an image file.');
}
}
});
} else {
$inputImage.prop('disabled', true).parent().addClass('disabled');
}
})
},
api: {
bindevent: function() {
Form.api.bindevent($("form.layui-form"));
},
formatter: {
thumb: function(row) {
var html = '';
if (row.mime.indexOf("image") > -1) {
html = '';
} else {
html = '
';
}
return '