/* *Author:jxx *Contact:283591387@qq.com *Date:2018-07-01 */ var htmlUtil = { enCode: function (str) { if (!str) return ''; return str.replace(/&/g, "&"). replace(//g, ">"). replace(/ /g, " "). replace(/\'/g, "'"). replace(/\"/g, """); }, deCode: function (str) { if (!str) return ''; return str.replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/ /g, " ") .replace(/'/g, "\'") .replace(/"/g, "\""); } }; var formatterClass = ['#d9534f', '#5bc0de ', '#5cb85c', '#FF5722', '#FF9800', '#4CAF50', '#009688', '#ff6398', '#42e1d2', '#c34a93', '#d739f2', '#9834ca', '#9E9E9E']; function setCellClass(options, cellText, val) { if (!this.completed) { $.each(this, function (i, v) { this.cellClass = formatterClass[i > 12 ? 12 : i]; }); this.completed = true; } var cellClass = 'none;color: #898b8b;'; $.each(this, function (i, v) { if (this[options.valueField] == val) { cellClass = this.cellClass; return false; } }); return "" + cellText + ""; } //格式化带数据来源列 Array.prototype.textFormatter = function (options, val, row, index) { var cellText = ''; if (!this || typeof this != 'object' || this.length == 0) { cellText = val; } //如果vlaue与text是同一个字段,直接返回当前值(不需要翻译) else if (options.valueField == options.textField) { cellText = val; } //如果当前的text字段存在,直接返回对应字段的值 else if (row.hasOwnProperty(options.textField) && row[options.textField]) {//如果出现rows的text与实际数据不一致,可将后面条件去掉 cellText = row[options.textField]; } else { //如果当产有字段的值不存在,则遍历数据来源对象,根据value的值找到textField的值 $.each(this, function () { if (row[options.valueField] == this[options.valueField]) { //获取数据源的值 cellText = this[options.textField]; return false; } }); } if (cellText == '' || cellText == null || cellText == undefined) { return val; } return setCellClass.call(this, options, cellText, val); } function getDate() { var date = new Date(); var seperator1 = "-"; var seperator2 = ":"; var month = date.getMonth() + 1; var strDate = date.getDate(); if (month >= 1 && month <= 9) { month = "0" + month; } if (strDate >= 0 && strDate <= 9) { strDate = "0" + strDate; } var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate + " " + date.getHours() + seperator2 + date.getMinutes(); return currentdate; } Array.prototype.convertToValueText = function (options) { if (!this || typeof this != 'object' || this.length == 0 || !this[0].DicName) { return this; } //如果是两个相同的字段只取生成一个字段的数组对象 var valueEqualText = false; if (options.valueField == options.textField) { options.textField = options.textField + 'V'; } //如果是value与name值不同使用 方式配置,读取的时候只会读取 //valueField: 'Remark', // textField: 'Remark',//如果只有value或text,配置时将value/textField写成相同 var convertReslut = this.map(function (data, index) { var configObj = {}; configObj[options.valueField] = data.DicValue; configObj[options.textField] = data.DicName; return configObj; }); return convertReslut; } var formatDateTime = { date: function () { return formatDateTime.result.call(this, "yyyy-MM-dd"); }, datetime: function () { return formatDateTime.result.call(this, "yyyy-MM-dd hh:mm:ss"); }, result: function (format) { var _regex = /-?\d+/; var datePart = _regex.exec(this); if (!(datePart && datePart.length > 0)) { return ""; } var _newDate = new Date(parseInt(datePart[0])); var o = { "M+": _newDate.getMonth() + 1, //month "d+": _newDate.getDate(), //day "h+": _newDate.getHours(), //hour "m+": _newDate.getMinutes(), //minute "s+": _newDate.getSeconds(), //second "q+": Math.floor((_newDate.getMonth() + 3) / 3), //quarter "S": _newDate.getMilliseconds() //millisecond } if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (_newDate.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); return format; } } //layout相关value操作 var layOutValue = { rgexInt: /^[0-9]*[1-9][0-9]*$/, regxDate: function (date) { date = date.replace(/(^\s+|\s+$)/g, ''); var result = date.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); if (result == null) { result = date.match(/^(\d+)-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/); if (result == null) { return false; } } var d; if (date.length == 10) { d = new Date(result[1], result[3] - 1, result[4]); return (d.getFullYear() == result[1] && (d.getMonth() + 1) == result[3] && d.getDate() == result[4]); } result[2] = result[2] - 1; var d = new Date(result[1], result[2], result[3], result[4], result[5], result[6]); if (d.getFullYear() != result[1]) return false; if (d.getMonth() != result[2]) return false; if (d.getDate() != result[3]) return false; if (d.getHours() != result[4]) return false; if (d.getMinutes() != result[5]) return false; if (d.getSeconds() != result[6]) return false; return true; }, formatMsg: function (msg) { $.message('
' + msg + '
!'); }, pushObj: function (argsValues, val, displayType) { if (!val && val != "0") { if (!this.require || ((this.readonly || this.disabled) && this.displayType != layOutElement.BIND_TYPE.select && this.displayType != layOutElement.BIND_TYPE.selectList && this.displayType != layOutElement.BIND_TYPE.drop && this.displayType != layOutElement.BIND_TYPE.dropList)) { argsValues.push({ Name: this.id, Value: null, DisplayType: displayType || this.displayType }); return true; } if (this.displayType == 'data' || this.displayType == 'dropList') { this.element.find("input:eq(0)").click(); } else if (this.displayType == 'date' || this.displayType == 'datetime') { this.element.find("input:eq(1)").focus(); } else { this.element.focus(); } layOutValue.formatMsg((this.text || this.id) + '是必填项!'); argsValues = []; return false; } var vailMsg; if ((this.columnType == 'int' || this.columnType == 'long') && val != '0') { var vals = []; if (this.displayType == layOutElement.BIND_TYPE.dropList || this.displayType == layOutElement.BIND_TYPE.selectList) { vals = val.split(','); } else { vals.push(val); } for (var i = 0; i < vals.length; i++) { if (!layOutValue.rgexInt.test(vals[i])) { vailMsg = (this.text || this.id) + '必须是数字'; return false; } } } else if (this.columnType == 'decimal' && isNaN(Number(val))) { vailMsg = (this.text || this.id) + '格式不正确'; } else if (this.columnType == 'datetime' && !layOutValue.regxDate(val)) { vailMsg = (this.text || this.id) + '必须是日期格式'; } if (vailMsg) { layOutValue.formatMsg(vailMsg); this.element.focus(); argsValues = []; return false; } argsValues.push({ Name: this.id, Value: val, DisplayType: displayType || this.displayType }); return true; }, file: function () { return layOutFile.getValue.call(this); }, richText: function () { return layOutUEditor.getContent.call(this); }, text: function () { return this.val(); }, drop: function (argsValues) { var bindOptions = $.data(this[0], 'data'); var getMethod = 'getValue'; //查询时,判断是否指定了包含的字段,如果包含第1个值为value则取value,否则取key //编辑时,如果指定了包含字段,则根据包含字段第一个值来判断是要获取value或text //如果没有指定包含字段,如果value与text不相同则,把两个值都提交到后台 //如果value与text相同则默认提交value的值 //查询时只需要获取value待完善 if (bindOptions.containField && bindOptions.containField.length > 0) { var selectedData = this.jqDrop('getSelected'); if (selectedData && selectedData.length > 0) { for (var i = 0; i < bindOptions.containField.length; i++) { if (bindOptions.valueField != bindOptions.containField[i]) { argsValues.push({ Name: bindOptions.containField[i], Value: selectedData[0][bindOptions.containField[i]], DisplayType: 'text' }); } } } //&& bindOptions.valueField != bindOptions.containField[0]) { //getMethod = 'getText'; } //如果没有指定字段,默认取valueField,就必须给valueField对应字段绑定下拉框 return this.jqDrop(getMethod); }, dropList: function () { //var bindOptions = $.data(this[0], 'data'); //var getMethod = 'getValue'; ////查询时,判断是否指定了包含的字段,如果包含第1个值为value则取value,否则取key ////编辑时,如果指定了包含字段,则根据包含字段第一个值来判断是要获取value或text ////如果没有指定包含字段,如果value与text不相同则,把两个值都提交到后台 ////如果value与text相同则默认提交value的值 //if (bindOptions.containField && bindOptions.containField.length > 0 // && bindOptions.valueField != bindOptions.containField[0]) { // getMethod = 'getText'; //} ////如果没有指定字段,默认取valueField,就必须给valueField对应字段绑定下拉框 //return this.jqDrop(getMethod); return this.jqDrop('getValue'); }, select: function () { return this.jqSelect('getValue'); }, selectList: function () { return this.jqSelect('getValue'); }, textarea: function () { return this.val(); //.replace(/\n/g, ','). //replace(/\r\n/g, ','). //replace(/\n/, ','). //replace(',', ','); }, dateValue: function (isDateBox, callBack) { var dateClass = isDateBox ? 'input.datebox' : 'input.datetimebox'; var dateVal = ''; this.find(dateClass).each(function (i) { dateVal = callBack(this, i); }); return dateVal; }, datebox: function (argsValues, data) { return layOutValue.datetimebox.call(this, argsValues, data, true); }, datetimebox: function (argsValues, data, isDateBox) { return layOutValue.dateValue.call(this, isDateBox || false, function (obj, i) { var dateVal = $(obj)[isDateBox ? 'datebox' : 'datetimebox']('getValue'); if (!layOutValue.pushObj.call(data, argsValues, dateVal, ['thanorequal', 'lessorequal'][i && 1])) { return false; } return dateVal; }); }, requireVal: function () { }, //重置所有值,valObj==false,清空所有值,否则对指定字段设置值如{price:8.000}对price设置值 reset: function (valObj) { var elementData = $.data(this[0], 'data'), objEmpty = true; if (!valObj) { valObj = {}; } else { objEmpty = false; } $.each(elementData, function () { $.each(this, function () { var val = ''; if (objEmpty || valObj.hasOwnProperty(this.id)) { if (valObj.hasOwnProperty(this.id)) { val = valObj[this.id]; } switch (this.displayType) { case 'date': case 'datetime': var disType = this.displayType; var isDate = disType == 'date' ? true : false; //格式化日期 if (val && val.indexOf('/Date') != -1) { val = formatDateTime[this.displayType].call(val); } layOutValue.dateValue.call(this.element, isDate, function (obj) { $(obj)[disType + 'box']('setValue', val); }); break; case layOutElement.BIND_TYPE.select: case layOutElement.BIND_TYPE.selectList: this.element.jqSelect('setValue', val); break; case layOutElement.BIND_TYPE.drop: case layOutElement.BIND_TYPE.dropList: //如果设置了值,那么直接用绑定的val的字段取valObj的值,再通过值去比较drop绑定数据源与value相的项 if (val || val == '0') { val = valObj[this.element.jqDrop('getOptions').valueField]; val = !val && val != '0' ? '' : val; } this.element.jqDrop('setValue', val); break; case layOutElement.BIND_TYPE.file: layOutFile.fileSetValue.call(this.element, val); // layOutImage.createImage.call(this.element, { val: val }); break; case layOutElement.BIND_TYPE.richText: layOutUEditor.setContent.call(this.element, val || ''); var xxx = 1; break; default: this.element.val(valObj[this.id]); break; } } }) }); },//编辑或新增时,获取drop/list,select/list配置字段的其他的值 getOtherValue: function (editValues) { $.each($.data(this[0], 'data'), function () { $.each(this, function () { if (this.displayType == layOutElement.BIND_TYPE.drop || this.displayType == layOutElement.BIND_TYPE.dropList || this.displayType == layOutElement.BIND_TYPE.select || this.displayType == layOutElement.BIND_TYPE.selectList ) { var _options = $.data(this.element[0], 'data'); var selectData = this.element[0].select; if (_options.containField && _options.containField.length > 0) { for (var i = 0; i < _options.containField.length; i++) { $.each(selectData, function () { if (this.hasOwnProperty(_options.containField[i])) { editValues.push({ Name: _options.containField[i], Value: this[_options.containField[i]] }); } }) } } } }) }); }, getOption: function (fieldName) { //根据字段名获取整个字段对象的参数 var fieldOption = []; var elementData = $.data(this[0], 'data'); if (!elementData) { return fieldOption; } $.each(elementData, function () { $.each(this, function () { if (fieldName == this.id) { fieldOption = this; return false; } }); }); return fieldOption; }, getValues: function (fields) {//获取指定字段的值如:['name','age'] var elementData = $.data(this[0], 'data'); if (!elementData) { return []; } var argsValues = []; var vali = true; fields = fields || []; $.each(elementData, function () { $.each(this, function () { if (fields.length > 0 && fields.indexOf(this.id) == -1) { return true; } if (!layOutValue[this.method]) { return; } var val = layOutValue[this.method].call(this.element, argsValues, this); if (this.method == 'datebox' || this.method == 'datetimebox') { if (!val && (this.require || typeof val == 'boolean')) { vali = false; return false; } return; } if (this.displayType == layOutElement.BIND_TYPE.file) { if (val && val.length > this.fileMaxCount) { $.alert("最多只能选择【" + this.fileMaxCount + "】个文件"); vali = false; return false; } val = (val || []).join(','); } vali = layOutValue.pushObj.call(this, argsValues, val); if (!vali) { return false; } }) if (!vali) { argsValues = []; return false; } }) return argsValues; },//根据字段获取绑定的对象,如:$layElement.content.layOut('getElement','ProductCode') getElement: function (id) { var element; var elementData = $.data(this[0], 'data'); if (!elementData) { return []; } $.each(elementData, function () { $.each(this, function () { if (this.id == id) { element = this.element; return false; } }); }); return element; } }; var layOutUEditor = { setContent: function (_content) { if (this.body) { this.setContent(_content); return; } var _ue = this; _ue.ready(function () {//编辑器初始化完成再赋值 _ue.setContent(_content); }); }, insertHtml: function (_html) { this.execCommand('insertHtml', _html); }, execFileCommand: function (url, id) { if (layOutFile.isImage.call(url)) { this.execCommand('insertimage', [{ src: url }]); return; } if (!id) { helper.post('/Sys_ImageLibrary/GetFile', { url: url }, function (result) { if (!result.Status) { $.message(result.Desc); return; } id = result.Desc; }, false); } this.execCommand('insertHtml', '

'); }, getContent: function () { return this.getContent(); }, getEditor: function (richId) { var _ue = UE.getEditor(richId, { initialFrameHeight: 200, maximumWords: 10000, toolbars: [[ 'fullscreen', 'source', '|', 'undo', 'redo', '|', 'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|', 'rowspacingtop', 'rowspacingbottom', 'lineheight', '|', 'paragraph', 'fontfamily', 'fontsize', '|', 'directionalityltr', 'directionalityrtl', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|', 'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|', 'insertframe', 'pagebreak', '|', 'horizontal', 'spechars', '|', 'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', '|' ]] }); return _ue; } } var layOutFile = { isImage: function () { if (!this) return false; if (this.indexOf('@w_') != -1) { return true; } return /\.(gif|jpg|jpeg|png|gif|jpg|png)$/.test(this); }, fileType: ['image', 'video'], url: "/RequestSDK/GetBceSTS", stsConfig: null, createNewFileName: function () { var padLeft = function (str, totalLen, padChar) { var arr = []; if (!padChar) { padChar = "0"; } for (var i = 0; i < totalLen; i++) { arr.push(padChar); } return (arr.join("") + str).slice(0 - totalLen); } var dt = new Date(); //年月日/毫秒数+4位随机数 var fileName = dt.getFullYear().toString().substring(2) + padLeft((dt.getMonth() + 1), 2) + padLeft(dt.getDate(), 2) + "/" + dt.getTime() + padLeft(Math.pow(10, 4) * Math.random(), 4); return fileName; }, getSTS: function () { if (layOutFile.stsConfig && (layOutFile.stsConfig.Sts.Expiration.getTime() - new Date().getTime()) / 1000 / 60 > 30) return; helper.post(layOutFile.url, {}, function (data) { data = JSON.parse(data); if (!data.Status) return; layOutFile.stsConfig = data; var _d = new Date(); _d.setTime(Date.parse(data.Expiration)); layOutFile.stsConfig.Sts.Expiration = _d; }, false); }, start: function (thisFile, $fileGroup) { layOutFile.getSTS(); helper.filterBox.show(); var clientConfig = { credentials: { ak: layOutFile.stsConfig.Sts.AccessKeyId, sk: layOutFile.stsConfig.Sts.SecretAccessKey }, sessionToken: layOutFile.stsConfig.Sts.SessionToken, endpoint: layOutFile.stsConfig.Endpoint }; var bucket = layOutFile.stsConfig.Bucket, client = new baidubce.sdk.BosClient(clientConfig), ext = this.name.split(/\./g).pop(), objInfo = { FileExtension: "." + ext, OriginFileName: this.name, ContentLength: this.size, TableName: '', Creator: '' }; objInfo.NewFileName = layOutFile.createNewFileName() + objInfo.FileExtension; objInfo.AbsUrl = layOutFile.stsConfig.Endpoint + "/" + layOutFile.stsConfig.Bucket + "/" + objInfo.NewFileName; var mimeType = baidubce.sdk.MimeType.guess(ext); if (/^text\//.test(mimeType)) { mimeType += '; charset=UTF-8'; } var options = { 'Content-Type': mimeType }; var pathFile = layOutFile.stsConfig.Endpoint + "/" + layOutFile.stsConfig.Bucket + "/" + objInfo.NewFileName; client.putObjectFromBlob(bucket, objInfo.NewFileName, this, options).then(function (response) { thisFile.filesArr.push(pathFile); if (thisFile.fileLenght == thisFile.filesArr.length) { // console.log(JSON.stringify(thisFile.filesArr)); helper.filterBox.hide(); layOutFile.fileSetValue.call($fileGroup, null, { saveImage: true, append: true, data: thisFile.filesArr, foots: layOutFile.CKFoots }); } }).catch(function (error) { $.message("文件上传出错"); }); client.on('progress', function (event) { layOutFile.processCallback(event); // helper.filterBox.hide(); }); }, upload: function ($fileGroup, fileMaxCount) { if (this.files.length > 3) { $.message('一次最多只能选择3个文件'); return; } this.filesArr = []; this.fileLenght = this.files.length; var checkUpData = { hasImage: false, haseVideo: false }; for (var i = 0; i < this.files.length; i++) { if (this.files[i].size / 1024.00 / 1024.00 > 50) { $.message("上传的文件不能超过50M,请压缩后上传", "red"); return; } if (layOutFile.isImage.call(this.files[i].name)) { checkUpData.hasImage = true } else if (this.files[i].name.indexOf('.mp4') != -1) { checkUpData.haseVideo = true; } if (checkUpData.haseVideo && checkUpData.hasImage) { $.message("请将视频和图片分开上传", "red"); return; } } for (var i = 0; i < this.files.length; i++) { layOutFile.start.call(this.files[i], this, $fileGroup); } }, onBrowseClick: function ($fileGroup) { if (this.window) { $('.icon-check', this.window).removeClass('icon-check').addClass('icon-check-empty'); if (gridParameters.richText) { $('.file-menu input:checked', this.window).attr('checked', false); } this.window.jqWindow('open'); return; } this.window = $('
').jqWindow({ title: '选择文件', titleIcon: 'icon-info-sign', layOutBg: '', showFooter: false, width: document.body.clientWidth * 0.7,//默认window宽度 height: document.body.clientHeight * 0.77,//默认window高度 footer: true,//是否显示底部button里 text: '
\ \
\
',//window文本 mask: false,//是否显示遮罩 headStyle: 'background: #2dc4f3;',//head样式 cache: true,//关闭后是否清空内容 shade: false,//显示最外层的遮罩效果 }); this.browseTabs = $('.tabs', this.window).jqTabs([ { title: "上传", text: '
\
', showRemove: false }, { title: '图片', text: '', showRemove: false }, { title: '视频', text: '', showRemove: false } ]); var $tbs = this.browseTabs, $fileWindow = this.window; $tbs.find(".upload-group input:file").change(function () { layOutFile.upload.call(this, $tbs.find('#upload-files'), 5); }); $tbs.find(".upload-group .btn").click(function () { $(this).next().click(); }); if (!gridParameters.richText) { $fileWindow.find("#_title").attr("checked", "1"); $fileWindow.find("#_content").attr("disabled", "disabled"); } //后台加载文件 $fileWindow.find('.file-menu .load-file').click(function () { var selectIndex = $tbs.jqTabs('getIndex'); if ($tbs.jqTabs('getIndex') == 0) { $tbs.jqTabs('setSelect', 1); selectIndex = 1; } this.page = this.page || { image: 0, video: 0 }; if (selectIndex == 1) { this.page.image++; } else { this.page.video++; } layOutFile.getFileLibrary.call($tbs, { page: selectIndex == 1 ? this.page.image : this.page.video, loadType: selectIndex }); }); //设置视频封面 $fileWindow.find('.file-menu .video-conver').click(function () { layOutFile.setConver.call($tbs); }); //添加文件 this.window.find('.file-menu > ul > li.add-file').click(function () { var appendToIndex = $fileWindow.find('.file-menu > ul > li input:checked').val(); if (!appendToIndex) { $.message('请选择文件添加类型'); return; } var files = $.map($tbs.jqTabs('getBody', '.icon-check'), function (ck_file) { var _obj = $(ck_file).parents('li')[0];//.src; return _obj.src || $.data(_obj, 'data');//.ImageUrls; }); if (!files || files.length == 0) { $.message("请选择文件"); return; } if (appendToIndex == 1) { $fileGroup.layOutFile('createFile', $.extend({}, { fileType: layOutFile.fileType[0], data: files ? files : [], append: true, foots: layOutFile.foots })); } else { if (!$layElement) return; var _UE = $layElement.content.layOut('getElement', 'Content'); for (var i = 0; i < files.length; i++) { layOutUEditor.execFileCommand.call(_UE, files[i].ImageUrls || files[i], files[i].Id || 0); } } $.message('添加成功'); $fileWindow.jqWindow("close"); }); }, foots: [{ text: '', handler: function ($this_file, _fileEventData) { $.jqWindow({ title: "图片", width: document.body.clientWidth * 0.7, height: document.body.clientHeight * 0.8, text: '
' }); } }, { text: '', handler: function () { $(this).parents('li').remove(); } }], CKFoots: [{ text: '', handler: function () { this.checked = !this.checked; if (this.checked) { $(this).addClass('icon-check').removeClass('icon-check-empty'); } else { $(this).addClass('icon-check-empty').removeClass('icon-check'); } } }], fileSetValue: function (val, options) { //$.data(this[0], 'data'); var fileUrls = val ? val.split(',') : (options && options.data); //if (!fileUrls || fileUrls.length == 0) { // return; //} return this.layOutFile('createFile', $.extend({ fileType: fileUrls && layOutFile.isImage.call(fileUrls[0]) ? 'image' : 'video', data: fileUrls || [], foots: layOutFile.foots, }, options || {})); }, getValue: function () { return $.map(this.find(".ul-item-group > li"), function (_element) { return _element.src; });//.join(','); }, getFileLibrary: function (pageData) { var $fileLibrary = this.jqTabs('getBody'); var url = pageData.loadType == 1 ? "/Sys_ImageLibrary/GetImage" : "/Sys_ImageLibrary/GetVideo"; helper.post(url, pageData, function (data) { if (!data) { $.message('数据已全部加载'); return; } $fileLibrary.layOutFile('createFile', { data: (pageData.loadType == 1 && data) ? data.split(',') : data, append: true, fileType: pageData.loadType == 1 ? "image" : "video", foots: layOutFile.CKFoots }); return false; }); }, processCallback: function () { }, setConver: function () { //设置封面 var CKVideos = $('.tabs-body > div:eq(2) .icon-check', this); if (CKVideos.length == 0) { $.message('请先选择要设置封面的视频'); return; } if (this.jqTabs('getIndex') != -1) { this.jqTabs('setSelect', 1); } var CKImages = $('.tabs-body > div:eq(1) .icon-check', this); if (CKImages.length == 0) { $.message('请先选择要设置封面的图片'); return; } if (CKVideos.length != CKImages.length) { $.message('已选择【' + CKVideos.length + '】个视频,需要选择【' + CKVideos.length + '】张图片!'); return; } var videoArr = $.map(CKImages, function (obj, i) { var _obj = $.data($(CKVideos[i]).parents('li')[0], 'data'); _obj.cover = $(obj).parents('li')[0].src; return _obj; }); helper.post('/Sys_ImageLibrary/Update', { coverInfo: JSON.stringify(videoArr) }, function (result) { if (result.Status) { $.message('视频封面已更新,请刷新页面查看.', 'red'); return; } $.message(result.Desc); }); } }; //layout相关元素操作 var layOutElement = { BIND_TYPE: { text: 'text', drop: 'drop', dropList: 'dropList', select: 'select', selectList: 'selectList', date: 'datebox', datetime: 'datetimebox', textarea: 'textarea', richText: 'richText',//富文本编辑 file: 'file' //文件(图片,视频) }, defaultOptions: { valueField: 'ID', textField: 'Name', all: true, multiple: false, data: null }, createElement: function (args) { var method = layOutElement.BIND_TYPE[this.displayType] || 'text'; var $element = layOutElement[method].call(this); this.method = method; return $element; }, drop: function () { return layOutElement.dropList.call(this, true); }, richText: function () { return $('
'); }, file: function (options) { var fileMaxCount = this.fileMaxCount; var _options = $.extend({}, { fileChange: function ($file) { layOutFile.upload.call(this, $file, fileMaxCount); }, browse: function ($file) { layOutFile.onBrowseClick.call(this, $file); }, data: this.data || [], fileType: this.displayType || 'image' }, options || {} ); return $('
').layOutFile(_options); }, dropList: function (multiple) { var defaults = $.extend({}, layOutElement.defaultOptions, { //超过15项的默认启用搜索功能 search: (this.dataSource && this.dataSource.data.length >= 15) ? true : false }, this.dataSource, { readonly: this.disabled, multiple: (!multiple) && true }); return $('
').jqDrop(defaults); }, select: function () { return layOutElement.selectList.call(this, true); }, selectList: function (multiple) { var defaults = $.extend({}, layOutElement.defaultOptions, this.dataSource, { multiple: (!multiple) && true }); return $('').jqSelect(defaults); }, datebox: function () { return layOutElement.datetimebox.call(this, true); }, datetimebox: function (isDateBox) { var dateClass = isDateBox ? 'datebox' : 'datetimebox'; var dateStyle = " height:30px;"; var _readonly = ''; if (this.disabled) { _readonly = "readonly=1"; } if (this.edit) { dateStyle += "width:" + (this.dateWidth - 15) + "px;"; return $(''); } dateStyle += "width:" + ((this.dateWidth - 15) / 2) + "px;"; return $(''); }, text: function (args) { var placeholder = this.placeholder ? 'placeholder="' + this.placeholder + '"' : ""; var $text = $(''); if (!this.disabled && this.columnType && ['int', 'long', 'decimal'].indexOf(this.columnType.toLowerCase()) != -1) { var columnType = this.columnType; $text.keyup(function (e) { if (columnType == 'int' || columnType == 'long') { $text.val(parseInt($text.val()) || 0); return; } var val = $text.val(); if (e.keyCode == 48) { return; } if (e.keyCode == 190) { var codeIndex = val.indexOf('.'); if (val.substring(codeIndex + 1, val.length).indexOf('.') == -1) { return; } } $text.val(parseFloat(val) || 0); }); } return $text; }, textarea: function (args) { var areaStyle = ""; if (this.style) { areaStyle = 'style="' + this.style + '"'; } else if (this.colSize >= 6) { areaStyle = 'style="height:120px;"'; } else { areaStyle = 'style="height:45px;"'; } var placeholder = this.placeholder ? 'placeholder="' + this.placeholder + '"' : ""; return $(''); }, createRequire: function () { if (!this.require) { return ''; } return '*'; }, createBtns: function (tools) {//splitNumber从第几个按钮开始截段(最多显示按钮数),分成下拉框显示 tools = $.extend({ btns: null, displayCount: 4,//最多显示几个按钮 position: null //是否把按钮添加到第一行的最后 }, tools); var moreOptions = []; var hasPosition = false; if (tools.position && tools.position == 'right') { hasPosition = true; //if (tools.displayCount==4) { // tools.displayCount = 4; //} } return this.each(function () { var $btnGroup = $('
'); $.each(tools.btns, function (i) { if (i >= tools.displayCount) { moreOptions.push(this); return; } var $elementBtn = $('
'); $elementBtn.append(''); $btnGroup.append($elementBtn); var bindHandler = this.handler; if (bindHandler) { $elementBtn.bind('click', function () { bindHandler(); }); } }); if (moreOptions.length > 0) { var elementDrop = $('
') .jqDrop({ valueField: 'text',//数据key/val字段(实际字段) textField: 'text', btn: { icon: 'icon-caret-down', text: '更多' }, icon: "icon-signin", data: moreOptions }); $btnGroup.append(elementDrop); } if (hasPosition) { $btnGroup.css({ position: 'absolute', right: '50px', top: '1px' }); $btnGroup.find('.drop-list').css({ 'margin-left': '-125px' }); $btnGroup.addClass("lay-tools"); $btnGroup.find('.btn').css({ border: '0px', padding: '5px', 'margin-left': '6px' }); } $(this).append($btnGroup); }); return this; }, showView: function (gridParameters) { var tr = "字段描述类型" $.each(gridParameters.columns[0], function () { tr += "" + this.field + "" + this.title + "" + (this.datatype || "") + ""; }) $.jqWindow({ title: '数据字典', top: 60, width: 670, height: 350, text: '' + tr + '
' }); }, createWindow: function (args) { helper.filterBox.show(); var windowOptions = { title: '基本信息', headStyle: 'background-image:linear-gradient(135deg, #009aae 10%, #00c1d9 100%);',//"background: #d00a0a;", text: '', width: '800px', height: '600px', buttons: args.editBtns } if (args.gridParameters.richText) { //待完善 windowOptions.buttons.push({ text: '预 览', icon: 'btn btn-info icon-camera', handler: function () { var browserUrl = $layElement.content.layOut('getValue', 'DetailUrl'); browserUrl && window.open(browserUrl); } }); args.editBtns.length >= 3 && windowOptions.buttons.push({ text: '生成app页面', icon: 'btn btn-success icon-cloud', handler: function () { if (!$layElement || !$layElement.content) return; var urlData = { Content: $layElement.content.layOut('getValue', 'Content'), DetailUrl: $layElement.content.layOut('getValue', 'DetailUrl'), Title: $layElement.content.layOut('getValue', 'Title'), Template: $layElement.content.layOut('getOption', 'Content').Template }; var fileUrl = layOutElement.createStaticFile({ htmlDic: JSON.stringify(urlData), tableName: args.gridParameters.queryParams.TableName, key: $layElement.editRow[args.gridParameters.key] }); if (fileUrl) { if (fileUrl != urlData.DetailUrl) { $layElement.content.layOut('setValue', { DetailUrl: fileUrl }); $.message('app页面创建成功,请保存最新数据'); } else { $.message('app页面创建成功'); } } } }); } var windowSize = layOutElement.getWindowSize(args); $.extend(windowOptions, windowSize); var $windowObject = $('
').jqWindow(windowOptions); var $content = $('.content:eq(0)', $windowObject); var $content_head = $("
"); $content.append($content_head); var $detailGrid; if (args.gridDetailParameters) { args.gridDetailParameters.pageSize = 500; args.gridDetailParameters.pageList = [500, 1000, 1500, 2000]; $detailGrid = $("
"); $content.append($detailGrid); } $content_head.layOut({ title: '' + args.gridParameters.cnName + '', edit: true, colSize: windowSize.colSize, data: args.editData || [], headStyle: 'padding: 0px;background: #ffffff;' }); helper.filterBox.hide(); return { window: $windowObject, content: $content_head, detailGrid: $detailGrid ? $detailGrid.find('.gridDetail-table') : null, detailHead: $detailGrid ? $detailGrid.find('.gridDetail-head') : null }; }, getWindowSize: function (args) { var maxColunms = 0, editData = args.editData, gridParameters = args.gridParameters; var rows = editData.length; $.each(editData, function () { if (this.length > maxColunms) { maxColunms = this.length; } }); var colSize = 4; if (maxColunms < 3) { colSize = 6; } var widthRatio = 0.95; var heightRatio = 0.95; //是否有明细数据 if (!args.gridDetailParameters) { if (maxColunms < 3) { widthRatio = 0.55; } else { widthRatio = 0.650; } heightRatio = rows * 0.1 ;//+ 0.12; if (heightRatio > 1) { heightRatio = 0.95; } } var _clientWidth = document.body.clientWidth; var _clientHeight = document.body.clientHeight; args.height = args.height ? parseInt(args.height, 10) : 0; args.width = args.width ? parseInt(args.width, 10) : 0; if (args.gridParameters.richText) { args.height = _clientHeight * 0.95; args.width = _clientWidth * 0.77; } else if (args.gridParameters.fileLink) { args.height = _clientHeight * 0.75; args.width = _clientWidth * 0.75; } if (args.height) { if (args.height > _clientHeight) { args.height = _clientHeight * 0.95; } } else { args.height = _clientHeight * (heightRatio < 0.4 ? heightRatio + 0.2 : heightRatio < 0.7 ? heightRatio + 0.1 : heightRatio); } if (args.width) { if (args.width > _clientWidth) { args.width = _clientWidth * 0.95; } } else { args.width = _clientWidth * widthRatio; } return { colSize: colSize, width: args.width, height: args.height } }, initPanel: function ($element_li, colSize) { var $element_group = $('
'); $element_group.append(' '); var $element_target = $('
'); var defaultColSize = 0; if (this.colSize) { defaultColSize = this.colSize; if (defaultColSize > 6) { defaultColSize = 10; } else if (defaultColSize == 6) { defaultColSize = 9; } else { defaultColSize = 8; } // defaultColSize = this.colSize; } this.colSize = this.colSize || (colSize || 4); if (this.displayType == 'select' || this.displayType == 'selectList') { $element_target.addClass('lay-select-group'); $element_group.addClass('lay-select'); } else { $element_group.addClass('col-sm-' + this.colSize); $element_target.addClass('col-sm-' + (defaultColSize ? defaultColSize : (this.colSize + (this.colSize == 12 ? -5 : (this.colSize == 4 ? 3 : 2))))); } var $element = layOutElement.createElement.call(this); this.element = $element; if (this.displayType == 'date' || this.displayType == 'datetime') { $element_group.append($element); } else { $element_target.append($element); $element_group.append($element_target); } return $element_li.append($element_group); }, initDetailHead: function (args) { this.append("" + args.title + ""); var $head = this; args.gridBtns && $.each(args.gridBtns, function () { var $headSpan = $("" + this.text + ""); var handler = this.handler; handler && $headSpan.click(function () { handler(); }); $head.append($headSpan); }); }, validate: function (editValues) { }, createStaticFile: function (data) { //{ htmlDic: JSON.stringify(options.mainData), tableName: gridParameters.queryParams.TableName, path: '' } var fileUrl; helper.post("/UEditor/CreateStaticFile", data, function (pathData) { if (!pathData.Status) { $.message(pathData.Desc); return; } fileUrl = pathData.Desc; }, false); return fileUrl; }, submitBefore: function (data, url, isEdit) { return true; }, submitAfter: function (data, result, isEdit) {//isEdit是否编辑 return true; }, submit: function (elements) { var editValues = layOutValue.getValues.call(elements.content); if (!editValues || editValues.length == 0) { return; } //获取drop/list,select/list 配置containField字段其他的值 layOutValue.getOtherValue.call(elements.content, editValues); // $layElement, $elementGrid var options = { mainData: {}, detailData: null, delKeys: null }; $.map(editValues, function (data) { options.mainData[data.Name] = data.Value; }); var gridOptions = this.datagrid("options"); //结束编辑 if (elements.detailGrid) { elements.detailGrid.endEditing(); options.detailData = elements.detailGrid.layOut("getRow"); options.delKeys = $.data(elements.detailGrid, 'delData'); if (!layOutGrid.validateGridData.call(options, elements.detailGrid)) { return; } } var action = "add", isEdit = false; if (elements.editRow) { options.mainData[gridOptions.key] = elements.editRow[gridOptions.key]; action = "edit"; isEdit = true; } var tableName = gridOptions.queryParams.TableName; var url = "/" + tableName + "/" + action; var $this = this; if (!layOutElement.submitBefore(options, url, isEdit)) { return false; } //创建html页面 if (gridParameters.richText && !options.mainData['DetailUrl']) { var fileUrl = layOutElement.createStaticFile({ htmlDic: JSON.stringify(options.mainData), tableName: tableName }); if (fileUrl) { options.mainData['DetailUrl'] = fileUrl; } } helper.post(url, { mainData: JSON.stringify(options.mainData), detailData: JSON.stringify(options.detailData), delKeys: JSON.stringify(options.delKeys) }, function (data) { if (typeof data == 'string') { data = JSON.parse(data); } if (data.Status) { //如果是编辑操作,可能会存在分页显示的问题,后台把没有分页显示的数据也删除了,(需要记录删除的主键,后台删除提交的删除的主键) if (data.Data) { if (!elements.editRow) { elements.content.find(" > .lay-heading").html('' + gridOptions.cnName + "编辑" + ''); } // elements.editState = true; $elementGrid.datagrid('reload'); elements.editRow = data.Data.data; //刷新主表 elements.editRow && elements.content.layOut('reset', elements.editRow); //刷新明细 elements.detailGrid && data.Data.list && elements.detailGrid.datagrid("loadData", data.Data.list); } } !layOutElement.submitAfter(options, data, isEdit) || $.message(data.Desc); }); }, delBefore: function (keys, url) { return true; }, delAfter: function (keys, url) { }, del: function () { var removeRows = $elementGrid.datagrid('getSelections'); if (!removeRows || removeRows.length == 0) { $.message("请选中要删除的行"); return; } var gridOptions = $elementGrid.datagrid("options"); var warningMessage = '
确认要删除数据?
'; $.alert({ shade: true, text: warningMessage, buttons: [{ text: '确认', icon: 'btn btn-danger icon-ok-sign', handler: function (_evenWin, winHtml) { var delArr = $.map(removeRows, function (delRow) { return delRow[gridOptions.key]; }); var url = "/" + gridOptions.queryParams.TableName + "/del"; if (!layOutElement.delBefore()) { return false; } _evenWin.hide(); helper.post(url, { keys: delArr.join(',') }, function (data) { if (data.Status) { $.message("删除成功"); $elementGrid.datagrid("reload") return; } $.message(data.Desc || data.Msg); layOutElement.delAfter(); }); } }] }) }, upload: function () { if ($layElement.uploadWindow) { $layElement.uploadWindow.jqWindow("open"); return; } var uploadoptions = { title: '选择上传文件', headStyle: 'background-image: linear-gradient(135deg, #009aae 10%, #00c1d9 100%);',//"background: #d00a0a;", text: '', width: '600px', height: '300px', buttons: [] } $layElement.uploadWindow = $('
').jqWindow(uploadoptions); var $content = $('.content:eq(0)', $layElement.uploadWindow); var $file = $(''); var $changeBtn = $(''); var $startBtn = $(''); var $templteBtn = $(''); var $btnGroup = $('
'); var $uploadFileInfo = $('
\
\
1、上传的文件的格式只能为xls、xlsx
\
2、上传的文件大小不能超过10M
\
\
'); $changeBtn.click(function () { $file.click(); }); $file.change(function () { $uploadFileInfo.find('.select-file').html('' + this.files[0].name + '大小:' + ~~(this.files[0].size/1024) + 'KB'); }); $startBtn.click(function () { if ($file[0].files.length==0) { $.message("请选择文件"); } var file = $file[0].files[0]; var data = new FormData(); data.append("fileInput", file); $.ajax({ type: "POST", url: "/" + $elementGrid.datagrid("options").queryParams.TableName+"/upload", contentType: false, processData: false, data: data, success: function (result) { // $file.value = '' // $file[0].outerHTML = $file[0].outerHTML; $.message(result.Desc); } }); }); $btnGroup.append($file).append($changeBtn).append($startBtn).append($templteBtn); $content.append($btnGroup).append($uploadFileInfo); } } //grid操作 var layOutGrid = { createViewField: function (data) { if (!data.val) return; return '' + data.val + ''; // return '' + data.val + ''; }, imageOnerror: function () { $(this).css("display", "none"); //$(this).after('') //this.src = "../Content/image/default.jpg"; }, createImageUrl: function (data) { var images = data.row[data.key]; if (!images) { return ''; //''; } var imageArr = images.split(','), imgUrls = []; for (var i = 0; i < imageArr.length; i++) { var _src = imageArr[i]; if (_src && _src.length > 10) { if (_src.indexOf('bcebos.') != -1 && _src.indexOf('@w_') == -1) { _src = _src + '@w_' + (data.row.ImageSize || 350); } imgUrls.push(''); } } return imgUrls.join(','); }, getRow: function () { return this.datagrid("getData").rows || []; }, addRow: function () { this.datagrid('appendRow', {}); }, delRow: function () { var deletedData = this.datagrid('getChecked'); if (deletedData.length == 0) { $.message("请选择要删除的行!"); return; } var gridKey = this.datagrid('options').key; var delKeyArr = $.data(this, 'delData') || []; for (var i = deletedData.length - 1; i >= 0; i--) { //获取删除的key if (gridKey && deletedData[i][gridKey] && delKeyArr.indexOf(deletedData[i][gridKey]) == -1) { delKeyArr.push(deletedData[i][gridKey]); } var rowIndex = this.datagrid('getRowIndex', deletedData[i]); this.datagrid('deleteRow', rowIndex); } if (delKeyArr.length > 0) { $.data(this, 'delData', delKeyArr); } }, validateGridData: function () { return true; } , formatTime: function (gridData) {//格式化日期 if (!gridData || typeof gridData != 'object') { return; } $.each(gridData, function () { if (!this || !this.columns || this.columns.length == 0) { return; } $.each(this.columns[0], function () { if (this.datatype && this.datatype.toLowerCase() == 'date' || this.datatype.toLowerCase() == 'datetime') { var dateField = this.field; this.formatter = function (val, row, index) { if (!val || typeof val != 'string' || val.indexOf('/Date') == -1) { return val; } var formatReslut = formatDateTime[this.datatype.toLowerCase()].call(val); row[dateField] = formatReslut; return formatReslut; } } }) }) } } $(function () { $.fn.layOut = function (options, data) { if (typeof options == 'string') { return $.fn.layOut.methods[options].call(this, data); } var defaultOptions = $.extend({}, { title: ' 数据信息', colSize: 4,//指定列宽度,如4:显示12/4=3列,12/6=2列 data: [], showHead: true, edit: true, headStyle: 'padding: 5px 10px;height: 30px;background: #009688;' }, options); return this.each(function () { var $rootElement = $(this); if (defaultOptions.showHead) { var headStyle = defaultOptions.headStyle || ''; headStyle = 'style="' + headStyle + '"'; $rootElement.append('
\ ' + defaultOptions.title + ' \
'); } $rootElement.append('
'); var $element_ul = $('
'); $.each(options.data, function () { var $element_li = $('
'); $.each(this, function () { //计算日期标签的宽度 if ((this.displayType == 'datetime' || this.displayType == 'date')) { if (!$rootElement.dateWidth) { var colWidth = $rootElement.width() / (12 / defaultOptions.colSize); $rootElement.dateWidth = colWidth * (defaultOptions.colSize == 4 ? 0.6 : 0.7);// - colWidth * 0.1;//右边间距col-sm-1 } this.dateWidth = $rootElement.dateWidth; } this.edit = defaultOptions.edit; layOutElement.initPanel.call(this, $element_li, defaultOptions.colSize); if (this.displayType == layOutElement.BIND_TYPE.richText) { this.element = layOutUEditor.getEditor(this.id); } }) $element_ul.append($element_li); }) $('.lay-body', $(this)).append($element_ul); var $dateTime = $('.datebox', $element_ul); if ($dateTime.length > 0) { $dateTime.datebox(); } $dateTime = $('.datetimebox', $element_ul); if ($dateTime.length > 0) { $dateTime.datetimebox(); } $.data(this, 'data', options.data); }); } $.fn.layOut.methods = { getValue: function (field) {//获取指定字段的值 var values = $.fn.layOut.methods.getValues.call(this, field && [field], false); if (values && values.length > 0) { return values[0].Value; } return ''; }, getQueryWheres: function () {//获取查询条件的值对象 var queryObj = $.fn.layOut.methods.getValues.call(this, null, true); if (!(queryObj && queryObj.length > 0)) { return queryObj; } var queryKeys = $.map($.data(this[0], 'data'), function (_data) { return $.map(_data, function (_options) { return _options.id; }) }); //移除不是查询的列 for (var i = 0; i < queryObj.length; i++) { if (queryKeys.indexOf(queryObj[i].Name) == -1) { queryObj.splice(i, 1); i--; } else if (queryObj[i].DisplayType == 'textarea') { queryObj[i].Value = queryObj[i].Value.replace(/\n/g, ','). replace(/\r\n/g, ','). replace(/\n/, ','). replace(',', ',').replace(',,', ','); } } return queryObj; }, getValues: function (fields, _filter) {//fields获取指定字段的值如:['name','age']//逻辑待完 var elementValues = layOutValue.getValues.call(this, fields); //_filter为bool类型判断是否包含空值的数据(查询用到)true过滤空值,false:不过滤 if (typeof _filter === 'boolean' && _filter) { var filterValues = []; $.each(elementValues, function () { if (this.Value != null) { filterValues.push(this); } }) return filterValues; } return elementValues; }, getOption: function (fieldName) { //根据字段名获取整个字段对象的参数 return layOutValue.getOption.call(this, fieldName); }, getKeyValues: function (fields) { var _kv = {}, _kvData = $.fn.layOut.methods.getValues.call(this); if (_kvData.length == 0) return null; $.each(_kvData, function () { _kv[this.Name] = this.Value; }) return _kv; }, setValue: function (row) {//格式row {page:1,title:'测试设置值'} return layOutValue.reset.call(this, row); }, reset: function (row) {//格式row {page:1,title:'测试设置值'} return layOutValue.reset.call(this, row); }, createBtns: function (tools) { return layOutElement.createBtns.call(this, tools); }, getElement: function (id) {//获取查询或编辑项下ID的对象 return layOutValue.getElement.call(this, id); }, submit: function ($elementGrid) { return layOutElement.submit.call(this, $elementGrid); }, del: function () { return layOutElement.del.call(this); }, showView: function (gridParameters) { return layOutElement.showView.call(this, gridParameters); }, createWindow: function (args) { return layOutElement.createWindow.call(this, args); }, initDetailHead: function (args) { return layOutElement.initDetailHead.call(this, args); }, getRow: function () { return layOutGrid.getRow.call(this); }, addRow: function (args) { return layOutGrid.addRow.call(this); }, createViewField: function (data) { return layOutGrid.createViewField(data); }, createImageUrl: function (data) { return layOutGrid.createImageUrl(data); }, delRow: function (args) { return layOutGrid.delRow.call(this, args); }, audit: function (options) { return layOutElement.audit.call(this, args); }, export: function () { }, upload: function () { return layOutElement.upload.call(this); }, formatTime: function (args) { return layOutGrid.formatTime.call(this, args); } }; })