/*!
* Document : form.js
* Author : caiweiming <314013107@qq.com>
* Description: 表单构建器
*/
jQuery(document).ready(function() {
// 文件上传集合
var webuploader = [];
// 当前上传对象
var curr_uploader = {};
// editordm编辑器集合
var editormds = {};
// ueditor编辑器集合
var ueditors = {};
// wangeditor编辑器集合
var wangeditors = {};
// 当前图标选择器
var curr_icon_picker;
var layer_icon;
// 打开图标选择器
$('.js-icon-picker').click(function(){
curr_icon_picker = $(this);
var icon_input = curr_icon_picker.find('.icon_input');
if (icon_input.is(':disabled')) {
return;
}
layer_icon = layer.open({
type: 1,
title: '图标选择器',
area: ['90%', '90%'],
scrollbar: false,
content: $('#icon_tab')
});
});
// 开启图标搜索
Dolphin.iconSearch();
// 选择图标
$('.js-icon-content li').click(function () {
var icon = $(this).find('i').attr('class');
curr_icon_picker.find('.input-group-addon.icon').html('');
curr_icon_picker.find('.icon_input').val(icon);
layer.close(layer_icon);
});
// 清空图标
$('.delete-icon').click(function(event){
event.stopPropagation();
if ($(this).prev().is(':disabled')) {
return;
}
$(this).prev().val('');
$(this).prev().prev().html('');
});
// 百度地图
$('.js-bmap').each(function () {
var $self = $(this);
var map_canvas = $self.find('.bmap').attr('id');
var address = $self.find('.bmap-address');
var address_id = address.attr('id');
var map_point = $self.find('.bmap-point');
var search_result = $self.find('.searchResultPanel');
var point_lng = 116.331398;
var point_lat = 39.897445;
var map_level = $self.data('level');
// 百度地图API功能
var map = new BMap.Map(map_canvas);
//开启鼠标滚轮缩放
map.enableScrollWheelZoom(true);
// 左上角,添加比例尺
var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});
// 左上角,添加默认缩放平移控件
var top_left_navigation = new BMap.NavigationControl();
map.addControl(top_left_control);
map.addControl(top_left_navigation);
// 智能搜索
var local = new BMap.LocalSearch(map, {
onSearchComplete: function () {
var point = local.getResults().getPoi(0).point; //获取第一个智能搜索的结果
map.centerAndZoom(point, map_level);
// 创建标注
create_mark(point);
}
});
// 创建标注
var create_mark = function (point) {
// 清空所有标注
map.clearOverlays();
var marker = new BMap.Marker(point); // 创建标注
map.addOverlay(marker); //添加标注
marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
// 写入坐标
map_point.val(point.lng + "," + point.lat);
};
// 建立一个自动完成的对象
var ac = new BMap.Autocomplete({
"input" : address_id,
"location" : map
});
// 鼠标放在下拉列表上的事件
ac.addEventListener("onhighlight", function(e) {
var str = "";
var _value = e.fromitem.value;
var value = "";
if (e.fromitem.index > -1) {
value = _value.province + _value.city + _value.district + _value.street + _value.business;
}
str = "FromItem
index = " + e.fromitem.index + "
value = " + value;
value = "";
if (e.toitem.index > -1) {
_value = e.toitem.value;
value = _value.province + _value.city + _value.district + _value.street + _value.business;
}
str += "
ToItem
index = " + e.toitem.index + "
value = " + value;
search_result.html(str);
});
// 鼠标点击下拉列表后的事件
var myValue;
ac.addEventListener("onconfirm", function(e) {
var _value = e.item.value;
myValue = _value.province + _value.city + _value.district + _value.street + _value.business;
search_result.html("onconfirm
index = " + e.item.index + "
myValue = " + myValue);
local.search(myValue);
});
// 监听点击地图时间
map.addEventListener("click", function (e) {
// 创建标注
create_mark(e.point);
});
if (map_point.val() != '') {
var curr_point = map_point.val().split(',');
point_lng = curr_point[0];
point_lat = curr_point[1];
} else if(address.val() != '') {
local.search(address.val());
} else {
// 根据ip获取当前城市,并定位到当前城市
var myCity = new BMap.LocalCity();
myCity.get(function (result) {
var cityName = result.name;
map.setCenter(cityName);
});
}
// 初始化地图,设置中心点坐标和地图级别
var point = new BMap.Point(point_lng, point_lat);
map.centerAndZoom(point, map_level);
if (map_point.val() != '') {
// 创建标注
create_mark(point);
}
if(address.val()!=''){
ac.setInputValue(address.val())
}
});
// 图片裁剪
$('.js-jcrop-interface').each(function () {
var jcrop_api = '';
var $self = $(this);
var $jcrop = $self.find('.js-jcrop');
var $options = $jcrop.data('options') || {};
var $thumb = $jcrop.data('thumb');
var $watermark = $jcrop.data('watermark');
var $jcrop_cut_btn = $self.find('.js-jcrop-cut-btn');
var $jcrop_upload_btn = $self.find('.js-jcrop-upload-btn');
var $jcrop_file = $self.find('.js-jcrop-file');
var $jcrop_cut_info = $self.find('.js-jcrop-cut-info');
var $jcrop_preview = $self.find('.jcrop-preview');
var $jcrop_input = $self.find('.js-jcrop-input');
var $remove_picture = $self.find('.remove-picture');
var $thumbnail = $self.find('.thumbnail');
var $modal = $self.find('.modal-popin');
var $pic_height = '';
// 设置预览图监听
$options.onChange = showPreview;
$options.onSelect = showPreview;
$options.boxWidth = 750;
$options.boxHeight = 750;
$options.saveWidth = $options.saveWidth || null;
$options.saveHeight = $options.saveHeight || null;
$options.aspectRatio = $options.aspectRatio || ($options.saveWidth / $options.saveHeight);
// 点击上传按钮,选择图片
$jcrop_upload_btn.click(function () {
$jcrop_file.trigger('click');
});
// 加载图片(用于判断图片是否加载完毕)
function loadImage(url, callback) {
var img = new Image(); //创建一个Image对象,实现图片的预下载
img.src = url;
if(img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数
callback.call(img);
return; // 直接返回,不用再处理onload事件
}
img.onload = function () { //图片下载完毕时异步调用callback函数。
callback.call(img);//将回调函数的this替换为Image对象
};
}
// 实时显示预览图
function showPreview(coords)
{
var ratio = coords.w / coords.h; // 选区比例
var rx,ry;
var preview_width = '';
var preview_height = '';
if ((100 / ratio) > $pic_height) {
preview_width = $pic_height * ratio;
preview_height = $pic_height;
} else {
preview_width = 100;
preview_height = 100 / ratio;
}
rx = preview_width / coords.w;
ry = (preview_width / ratio) / coords.h;
if (jcrop_api) {
$jcrop_preview.css({
width: Math.round(rx * jcrop_api.ui.stage.width) + 'px',
height: Math.round(ry * jcrop_api.ui.stage.height) + 'px',
marginLeft: '-' + Math.round(rx * coords.x) + 'px',
marginTop: '-' + Math.round(ry * coords.y) + 'px'
}).parent().css({
width: preview_width + 'px',
height: preview_height + 'px'
});
}
var jcrop_info = [coords.w, coords.h, coords.x, coords.y, $options.saveWidth, $options.saveHeight];
$jcrop_cut_info.val(jcrop_info.join(','));
}
// 选择图片后
$jcrop_file.change(function () {
var files = this.files;
var file;
if (files && files.length) {
file = files[0];
if (/^image\/\w+$/.test(file.type)) {
// 创建FormData对象
var data = new FormData();
// 为FormData对象添加数据
data.append('file', file);
Dolphin.loading();
// 上传图片
$.ajax({
url: dolphin.jcrop_upload_url,
type: 'POST',
cache: false,
contentType: false, //不可缺
processData: false, //不可缺
data: data,
success: function (res) {
if (res.code == 1) {
$jcrop.attr('src', res.src).data('id', res.id).show();
$jcrop_preview.attr('src', res.src).parent().show();
loadImage(res.src, function () {
Dolphin.loading('hide');
if (jcrop_api != '') {
jcrop_api.destroy();
$.Jcrop.component.DragState.prototype.touch = null;
}
$jcrop.Jcrop($options, function () {
jcrop_api = this;
$pic_height = Math.round(jcrop_api.getContainerSize()[1]);
$modal.modal('show');
});
});
} else {
Dolphin.loading('hide');
Dolphin.notify(res.msg||'上传失败,请重新上传', 'warning');
}
}
}).fail(function(res) {
Dolphin.loading('hide');
Dolphin.notify($(res.responseText).find('h1').text() || '服务器内部错误~', 'danger');
});
$jcrop_file.val('');
} else {
Dolphin.notify('请选择一张图片', 'warning');
}
}
});
// 关闭裁剪框
$modal.on('hidden.bs.modal', function (e) {
$jcrop_cut_info.val('');
});
// 删除图片
$remove_picture.click(function () {
$(this).parent().hide();
$jcrop_input.val('');
});
// 裁剪图片
$jcrop_cut_btn.click(function () {
var $cut_value = $jcrop_cut_info.val();
if ($jcrop.attr('src') == '') {
Dolphin.notify('请上传图片', 'danger');
return false;
}
if ($cut_value != '') {
var $data = {
path: $jcrop_preview.attr('src'),
cut: $cut_value,
thumb: $thumb,
watermark: $watermark
};
Dolphin.loading();
$.ajax({
url: dolphin.jcrop_upload_url,
type: 'POST',
dataType: 'json',
data: $data
})
.done(function(res) {
Dolphin.loading('hide');
if (res.code == '1') {
$thumbnail.show().find('img').attr('src', res.thumb || res.src).attr('data-original', res.src);
$jcrop_input.val(res.id);
$jcrop_cut_info.val('');
$modal.modal('hide');
} else {
Dolphin.notify(res.msg, 'danger');
}
})
.fail(function(res) {
Dolphin.loading('hide');
Dolphin.notify($(res.responseText).find('h1').text() || '请求失败~', 'danger');
});
} else {
Dolphin.notify('请选择要裁剪的大小', 'warning');
}
});
// 查看大图
Dolphin.viewer();
});
// editormd编辑器
$('.js-editormd').each(function () {
var editormd_name = $(this).attr('name');
var image_formats = $(this).data('image-formats') || [];
var watch = $(this).data('watch');
editormds[editormd_name] = editormd(editormd_name, {
height: 500, // 高度
placeholder: '海豚PHP,为提升开发效率而生!!',
watch : watch,
searchReplace : true,
toolbarAutoFixed: false, // 取消工具栏固定
path : dolphin.editormd_mudule_path, // 用于自动加载其他模块
codeFold: true, // 开启代码折叠
dialogLockScreen : false, // 设置弹出层对话框不锁屏
imageUpload : true, // 开启图片上传
imageFormats : image_formats, // 允许上传的图片后缀
imageUploadURL : dolphin.editormd_upload_url,
toolbarIcons : function() {
return [
"undo", "redo", "|",
"bold", "del", "italic", "quote", "|",
"h1", "h2", "h3", "h4", "h5", "h6", "|",
"list-ul", "list-ol", "hr", "|",
"link", "reference-link", "image", "code", "preformatted-text", "code-block", "datetime", "html-entities", "pagebreak", "|",
"goto-line", "watch", "preview", "fullscreen", "clear", "search", "|",
"help", "info"
]
}
});
});
// ueditor编辑器
$('.js-ueditor').each(function () {
var ueditor_name = $(this).attr('name');
ueditors[ueditor_name] = UE.getEditor(ueditor_name, {
initialFrameHeight:400, //初始化编辑器高度,默认320
autoHeightEnabled:false, //是否自动长高
maximumWords: 50000, //允许的最大字符数
serverUrl: dolphin.ueditor_upload_url
});
});
// wangeditor编辑器
$('.js-wangeditor').each(function () {
var wangeditor_name = $(this).attr('name');
var imgExt = $(this).data('img-ext') || '';
// 关闭调试信息
wangEditor.config.printLog = false;
// 实例化编辑器
wangeditors[wangeditor_name] = new wangEditor(wangeditor_name);
// 上传图片地址
wangeditors[wangeditor_name].config.uploadImgUrl = dolphin.wangeditor_upload_url;
// 允许上传图片后缀
wangeditors[wangeditor_name].config.imgExt = imgExt;
// 配置文件名
wangeditors[wangeditor_name].config.uploadImgFileName = 'file';
// 去掉地图
wangeditors[wangeditor_name].config.menus = $.map(wangEditor.config.menus, function(item, key) {
if (item === 'location') {
return null;
}
return item;
});
// 添加表情
wangeditors[wangeditor_name].config.emotions = {
'default': {
title: '默认',
data: dolphin.wangeditor_emotions
}
};
wangeditors[wangeditor_name].create();
});
// 注册WebUploader事件,实现秒传
if (window.WebUploader) {
WebUploader.Uploader.register({
"before-send-file": "beforeSendFile" // 整个文件上传前
}, {
beforeSendFile:function(file){
var $li = $( '#'+file.id );
var deferred = WebUploader.Deferred();
var owner = this.owner;
owner.md5File(file).then(function(val){
$.ajax({
type: "POST",
url: dolphin.upload_check_url,
data: {
md5: val
},
cache: false,
timeout: 10000, // 超时的话,只能认为该文件不曾上传过
dataType: "json"
}).then(function(res, textStatus, jqXHR){
if(res.code){
// 已上传,触发上传完成事件,实现秒传
deferred.reject();
curr_uploader.trigger('uploadSuccess', file, res);
curr_uploader.trigger('uploadComplete', file);
}else{
// 文件不存在,触发上传
deferred.resolve();
$li.find('.file-state').html('正在上传...');
$li.find('.img-state').html('