if (typeof jQuery === "undefined") { throw new Error("jQuery plugins need to be before this file"); } var log = true, abp = abp || {}; /*JQuery扩展*/ $.extend({ //表单赋值 formDeserialize: function ($form, data) { //isSelect2 = isSelect2 === undefined; if (!data) { return; } var $input = $form.find("input"); var $textarea = $form.find("textarea"); var $select = $form.find("select"); var $checkbox = $form.find("input[type='checkbox']"); var $radio = $form.find("input[type='radio']"); $.merge($input, $textarea); $input.each(function () { var $input = $form.find($(this)); var name = $input.attr("name"); if (data[name] !== "") { $input.val(data[name]); } }); $select.each(function () { var $select = $form.find($(this)); var name = $select.attr("name"); if (typeof data[name] === "boolean") { data[name] = data[name] + ""; } if (data[name] !== "") { $select.val(data[name]); //if (isSelect2) { // $select.val(data[name]).select2(); //} else { //} } }); $checkbox.each(function () { var input = $form.find($(this)); //var name = input.attr("name").replace(/(\w)/, function (v) { return v.toUpperCase() }); var name = input.attr("name"); if (data[name] !== "") { //console.log(array[name]); //console.log("---"); input.val(data[name] === "True" || input.val(data[name]) === "1" || input.val(data[name]) === "true"); } }); $radio.each(function () { var input = $form.find($(this)); //var name = input.attr("name").replace(/(\w)/, function (v) { return v.toUpperCase() }); var name = input.attr("name"); if (data[name] !== "") { //console.log(array[name]); $("input[name='" + name + "'][value='" + data[name] + "']").prop("checked", true); $("input[name='" + name + "'][value!='" + data[name] + "']").prop("checked", false); } }); }, //将form表单元素的值序列化成对象 formSerialize: function ($form) { var disableEle = $form.find("[disabled]"); disableEle.each(function (i, e) { $(e).prop("disabled", false); }); var data = {}; $.each($form.serializeArray(), function () { if (data[this['name']]) { data[this['name']] = data[this['name']] + "," + this['value']; } else { data[this['name']] = this['value']; } }); disableEle.each(function (i, e) { $(e).prop("disabled", true); }); return data; }, //表单验证 formValidate: function ($form, opt) { var defaults = { noValid: false, form: "form", modal: "modal", errorPlacement: function (error, element) { if (element.parent().parent().find('label.error').length === 0) { element.parent().after(error); } element.focus(); }, rules: {} }; opt = opt || {}; var options = $.extend({}, defaults, opt); var $modal = options.modal ? typeof (options.modal) === 'string' ? $('#' + options.modal) : $(options.modal) : null; $form = $form ? $form : options.form ? $(options.form) : $modal.find('form'); $form.validate({ errorPlacement: options.errorPlacement, rules: options.rules, ignore: ".ignore" }); //.settings.ignore = ":disabled"; if (!options.noValid) { var valid = $form.valid(); console.log("FormValidate", $form.attr('id'), valid); return valid; } return options.noValid; }, formatterDate: function (fmt, date, isFix) { date = date || new Date(); isFix = isFix === undefined ? true : isFix; var year = date.getFullYear(); var month = date.getMonth() + 1; fmt = fmt.replace("yyyy", year); fmt = fmt.replace("yy", year % 100); fmt = fmt.replace("MM", fix(month)); fmt = fmt.replace("dd", fix(date.getDate())); fmt = fmt.replace("HH", fix(date.getHours())); fmt = fmt.replace("mm", fix(date.getMinutes())); fmt = fmt.replace("ss", fix(date.getSeconds())); return fmt; function fix(n) { return isFix ? (n < 10 ? "0" + n : n) : n; } }, blinkTitle: { start: function (msg) { msg = msg || abp.localization.iwbZero('NewNotificationRemind'); this.title = document.title; this.messages = [msg]; if (!this.action) { try { this.element = document.getElementsByTagName('title')[0]; this.element.innerHTML = this.title; this.action = function (ttl) { this.element.innerHTML = ttl; }; } catch (e) { this.action = function (ttl) { document.title = ttl; }; delete this.element; } this.toggleTitle = function () { this.index = this.index === 0 ? 1 : 0; this.action('【' + this.messages[this.index] + '】' + this.title); }; } var n = msg.length; var s = ''; if (this.element) { var num = msg.match(/\w/g); if (num) { var n2 = num.length; n -= n2; while (n2 > 0) { s += " "; n2--; } } } while (n > 0) { s += ' '; n--; } this.messages.push(s); this.index = 0; //this.title = this.title.replace("【" + msg + "】", "").replace("【" + s + "】", ""); var that = this; this.timer = setInterval(function () { that.toggleTitle(); }, 500); }, stop: function () { if (this.timer) { clearInterval(this.timer); var t = this.title ? this.title : document.title; this.action(t); delete this.timer; delete this.messages; } } }, metPageCss: function (url, id) { id = id || 'dy-css'; if ($('#' + id).length > 0) { return; } var link = document.createElement('link'); link.type = 'text/css'; link.rel = 'stylesheet'; link.id = id; link.href = url + '?v=' + Math.floor(Math.random() * 100000); var flag = document.getElementById('flag'); var head = document.getElementsByTagName('head')[0]; if (flag) { head.insertBefore(link, flag.nextSibling); } else { head.appendChild(link); } }, metPageJs: function (src, id) { id = id || 'dy-js'; if ($('#' + id).length > 0) { return; } var script = document.createElement('script'); script.id = id; script.type = 'text/javascript'; script.charset = 'UTF-8'; script.src = src + '?v=' + Math.floor(Math.random() * 100000); $('head').append(script); }, loadScript: function (url, loadCallback, failCallback) { /* UrlStates enum */ var urlStates = { LOADING: 'LOADING', LOADED: 'LOADED', FAILED: 'FAILED' }; /* UrlInfo class */ function UrlInfo() { this.state = urlStates.LOADING; this.loadCallbacks = []; this.failCallbacks = []; } UrlInfo.prototype.succeed = function () { this.state = urlStates.LOADED; for (var i = 0; i < this.loadCallbacks.length; i++) { this.loadCallbacks[i](); } }; UrlInfo.prototype.failed = function () { this.state = urlStates.FAILED; for (var i = 0; i < this.failCallbacks.length; i++) { this.failCallbacks[i](); } }; UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { switch (this.state) { case urlStates.LOADED: loadCallback && loadCallback(); break; case urlStates.FAILED: failCallback && failCallback(); break; case urlStates.LOADING: this.addCallbacks(loadCallback, failCallback); break; } }; UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { loadCallback && this.loadCallbacks.push(loadCallback); failCallback && this.failCallbacks.push(failCallback); }; var urlInfos = {}; var loadScript = function (url, loadCallback, failCallback) { var urlInfo = urlInfos[url]; if (urlInfo) { urlInfo.handleCallbacks(loadCallback, failCallback); return; } urlInfos[url] = urlInfo = new UrlInfo(); urlInfo.addCallbacks(loadCallback, failCallback); $.getScript(url).done(function (script, textStatus) { urlInfo.succeed(); }).fail(function (jqxhr, settings, exception) { urlInfo.failed(); }); }; loadScript(url, loadCallback, failCallback); }, //jsonTree 转成 array Json2Array: function (data, opts) { var defaults = { id: 'id', parentId: 'parentId', children: 'children' }; var opt = $.extend({}, defaults, opts || {}); var Json2ArrayChild = function (data, dataArray) { var newData = $.extend([], data); var children = data[opt.children]; delete newData[opt.children]; dataArray.push(newData); if (children && children.length > 0) { children.forEach(function (v) { Json2ArrayChild(v, dataArray); }); } } var dataArray = []; var children = data[opt.children]; var newData = $.extend([], data); delete newData[opt.children]; dataArray.push(newData); if (children && children.length > 0) { children.forEach(function (v) { Json2ArrayChild(v, dataArray); }); } return dataArray; }, //array 转成 JsonTree Array2Json: function (dataArray, opts) { var defaults = { root: '', id: 'id', parentId: 'parentId', children: 'children' }; var opt = $.extend({}, defaults, opts || {}); var Json2DataChild = function (parentId, dataArray) { var children = dataArray.filter(function (v) { return v[opt.parentId] === parentId; }); if (children && children.length > 0) { children.forEach(function (v) { v[opt.children] = Json2DataChild(v[opt.id], dataArray); }); } return children; } var index = dataArray.findIndex(function (v) { return v[opt.parentId] === opt.root; }); var dataJson = dataArray[index]; dataJson[opt.children] = Json2DataChild(dataJson.id, dataArray); return dataJson; } }); /*AJAX*/ $.extend({ //ajax iwbAjax: function (url, opt) { this.defaults = { async: true, type: "Post", contentType: 'application/json; charset=UTF-8', //contentType: 'application/x-www-form-urlencoded; charset=UTF-8', data: null, dataFun: null, log: window.log, dataType: "json", isAlert: true, isValidate: true, isRefresh: true,//默认刷新表格 success: null, error: null, table: undefined, modal: undefined, form: undefined, errorPlacement: function (error, element) { element.parent().before(error); element.focus(); }, rules: {}, blockUI: true }; if (!opt) { opt = url; url = opt.url; } var options = $.extend({}, this.defaults, opt); var $table = !options.table ? undefined : typeof options.table === 'string' ? $('#' + options.table) : $(options.table); var $modal = !options.modal ? undefined : typeof options.modal === 'string' ? $('#' + options.modal) : $(options.modal); var $form = !options.form ? ($modal ? $modal.find("form") : undefined) : typeof options.form === 'string' ? $('#' + options.form) : $(options.form); var isValidated = true; if (options.isValidate && $form) { isValidated = $.formValidate($form); } if (isValidated) { if (options.dataFun !== null && typeof options.dataFun === 'function') { options.data = options.dataFun(); } else { options.data = options.data ? (typeof options.data === 'function' ? options.data() : options.data) : $form ? $.formSerialize($form) : undefined; } var guid = Math.floor(Math.random() * 10000); var log = options.log; if (log) { console.log('[' + guid + ']url:' + url, 'data:', options.data); } var success = options.success && typeof options.success === 'function' ? function (res) { if (log) { console.log('[' + guid + ']', res); } options.success(res); if (options.isRefresh && $table) { $table.iwbTable('refresh', true); } if ($modal) { $modal.iwbModal('hide'); } } : function (res) { if (log) { console.log('[' + guid + ']', res); } if (options.isRefresh && $table) { $table.iwbTable('refresh', true); } if ($modal) { $modal.iwbModal('hide'); } }; var ajaxSuccess = options.isAlert ? function (res) { abp.message.success(abp.localization.iwbZero('OpSuccess')).done(success(res)); } : success; var data = typeof (options.data) === 'string' ? options.data : JSON.stringify(options.data); var ajaxOption = { url: url, async: options.async, type: options.type, contentType: options.contentType, data: data, dataType: options.dataType, success: ajaxSuccess, error: options.error, abpHandleError: options.isAlert, blockUI: options.blockUI }; abp.ajax(ajaxOption); } } }); $.extend({ iwbAjax1: function (opt) { opt = $.extend({}, { isValidate: false }, opt); $.iwbAjax(opt); }, iwbAjax2: function (opt) { opt = $.extend({}, { isAlert: false }, opt); $.iwbAjax(opt); }, iwbAjax3: function (opt) { opt = $.extend({}, { isValidate: false, isAlert: false, blockUI: false }, opt); $.iwbAjax(opt); }, iwbAjax4: function (opt) { opt = $.extend({}, { isValidate: false, isAlert: false, isRefresh: false }, opt); $.iwbAjax(opt); }, iwbAjax5: function (opt) { opt = $.extend({}, { isValidate: false, isAlert: false, isRefresh: false, blockUI: false }, opt); $.iwbAjax(opt); }, iwbGet: function (opt) { opt = $.extend({}, { type: 'get', modal: null, form: null }, opt); $.iwbAjax4(opt); } }); /*Table*/ (function ($, window, document, undefined) { //构造函数 'use strict'; var abp = window.abp || {}, selectionRows = [], searchList = [], isSearching, modalDefaults = { modal: 'modal', modaltitle: '', data: null, form: null, errorPlacement: function (error, element) { if (element.is('select')) { if (!element.next().next().hasClass('error')) { element.next().after(error); element.focus(); } } else { element.after(error); element.focus(); } }, rules: {}, readonly: '', disabled: '', select2: true, select2tree: false, url: '', savebtn: null, save: null, success: null, shownBefore: null, shownAfter: null, draggable: false, searchValidate: true }; //modalOptions = {}; var getSearchList = function ($that) { var o = $that.options; var $searchForm = (typeof (o.searchForm) === 'string' ? $('#' + o.searchForm) : $(o.searchForm)); searchList = []; if (o.searchFun && typeof o.searchFun === "function") { o.searchFun(searchList); } if (o.searchList && o.searchList.length > 0) { o.searchList.forEach(function (v) { if (v.KeyWords) { searchList.push(v); } }); } if (!o.onlySearchList) { $searchForm.find('.KeyWords').each(function () { var $this = $(this), keyWords = $this.val(); if (keyWords) { if ($this.hasClass('dataRange')) { try { var dates = keyWords.split(' - '); searchList.push({ KeyWords: dates[0], KeyField: $this.data('field'), FieldType: $this.data('ftype'), ExpType: 4 }); if (dates.length === 2) { var dateArr = dates[1].split(' ')[0].split('-'); var date = new Date(dateArr[0], dateArr[1] - 1, dateArr[2], 0, 0, 0); var newDate = new Date(date.getTime() + 24 * 60 * 60 * 1000 - 1); keyWords = $.formatterDate('yyyy-MM-dd HH:mm:ss', newDate); searchList.push({ KeyWords: keyWords, KeyField: $this.data('field'), FieldType: $this.data('ftype'), ExpType: 5 }); } } catch (e) { console.log(e); } } else { searchList.push({ KeyWords: keyWords, KeyField: $this.data('field'), FieldType: $this.data('ftype'), ExpType: $this.data('etype') }); } } }); } }; var queryParams = function (params, $that) { var o = $that.options; getSearchList($that); var $searchForm = (typeof (o.searchForm) === 'string' ? $('#' + o.searchForm) : $(o.searchForm)); var $keyWord = $searchForm.find('#keyWords'); if (o.onlySearchList) { return { MaxResultCount: params.limit, SkipCount: params.offset, //sort: params.sort, //排序列名 //sortOrder: params.order, //排位命令(desc,asc) sorting: params.sort ? params.sort + ' ' + params.order : '', SearchList: searchList }; } return { MaxResultCount: params.limit, SkipCount: params.offset, sorting: params.sort ? params.sort + ' ' + params.order : '', keyField: $keyWord.data('field'), fieldType: $keyWord.data('ftype'), expType: $keyWord.data('etype'), keyWords: $keyWord.val(), SearchList: searchList }; }; var responseHandler = function (res) { if (res.success) { var data = JSON.parse('{"total":' + res.result.totalCount + ',"rows":' + JSON.stringify(res.result.items) + '}'); if (selectionRows.length > 0) { data.rows.forEach(function (row) { row.state = selectionRows.findIndex(function (v) { return v.id === row.id; }) !== -1; }); } console.log(data); return data; } else { console.log('Table load failed'); if (res.error) { if (res.error.details) { return abp.message.error(res.error.details, res.error.message); } else { if (res.error.message && res.error.message.indexOf('登陆超时') >= 0) { return abp.message.error(res.error.message).done(function () { window.top.location.reload(); }); } else { return abp.message.error(res.error.message || abp.ajax.defaultError.message); } } } } return JSON.parse('{"total":0,"rows":[]}'); }; var responseHandlerNoPage = function (res) { if (res.success) { var data = res.result; console.log(data); return data; } else { console.log('Table load failed'); if (res.error) { if (res.error.details) { return abp.message.error(res.error.details, res.error.message); } else { if (res.error.message && res.error.message.indexOf('登陆超时') >= 0) { return abp.message.error(res.error.message).done(function () { window.top.location.reload(); }); } else { return abp.message.error(res.error.message || abp.ajax.defaultError.message); } } } } return JSON.parse('[]'); }; var onAll = function (eName, eData, $that) { isSearching = false; var o = $that.options; var $table = (typeof (o.table) === 'string' ? $('#' + o.table) : $(o.table)); $table.closest('.table-box').find('.tableTool .menu-btn[data-type^=\'btn\']') .prop('disabled', $table.bootstrapTable('getSelections').length !== 1); }; var onLoadSuccess = function (data, $that) { var o = $that.options; var $table = (typeof (o.table) === 'string' ? $('#' + o.table) : $(o.table)); // $table.find('.bs-checkbox').find('input').addClass('filled-in').after('