|
|
@@ -0,0 +1,383 @@
|
|
|
+/**
|
|
|
+ * 自定义动态列表.js
|
|
|
+ */
|
|
|
+shr.defineClass("shr.custom.CustomDynamicList", shr.compensation.CmpTBDynamicList, {
|
|
|
+ //编辑列数组(大小写不区分)
|
|
|
+ editColumns: null,
|
|
|
+ initalizeDOM: function () {
|
|
|
+ shr.custom.CustomDynamicList.superClass.initalizeDOM.call(this);
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 返回
|
|
|
+ */
|
|
|
+ backAction: function () {
|
|
|
+ var self = this;
|
|
|
+ self.beforeSave();
|
|
|
+ if (self.checkEditCell()) {
|
|
|
+ shr.showConfirm("您有编辑数据未保存,是否忽略?", function () {
|
|
|
+ self.back();
|
|
|
+ }, function () {
|
|
|
+ return;
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ self.back();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 获取可以编辑列
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+ getEditColumns: function () {
|
|
|
+ return this.editColumns;
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 扩展jqgrid options,供子类复写
|
|
|
+ */
|
|
|
+ extendGridOptions: function (options) {
|
|
|
+ var _self = this;
|
|
|
+ var editCol = _self.getEditColumns();
|
|
|
+ $.extend(true, options, {
|
|
|
+ gridOption: {
|
|
|
+ cellEdit: true,
|
|
|
+ cellsubmit: 'clientArray'
|
|
|
+ }
|
|
|
+ });
|
|
|
+ $.extend(true, options.gridConfig, {
|
|
|
+ editCol: editCol
|
|
|
+ });
|
|
|
+
|
|
|
+ _self.editColumnsSetting = _self.initData.editColumnsSetting;
|
|
|
+ if (_self.editColumnsSetting && !$.isEmptyObject(_self.editColumnsSetting) && options.gridConfig) {
|
|
|
+ var columns = options.gridConfig.columns;
|
|
|
+ if (columns) {
|
|
|
+ $.each(columns, function (key, value) {
|
|
|
+ if (value) {
|
|
|
+ var name = value.name;
|
|
|
+ var editSetting = _self.editColumnsSetting[name];
|
|
|
+ if (editSetting) {
|
|
|
+ $.extend(value, editSetting);
|
|
|
+ if (value.editable && (value.editable == "true" || value.editable == true)) {
|
|
|
+ if (value.formatter && value.formatter == "promptBox") {
|
|
|
+ if (options.datatype == "json") {
|
|
|
+ value.name = value.name + ".*";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 处理表格操作
|
|
|
+ * @param {*} options
|
|
|
+ */
|
|
|
+ handleGridOptions: function (options) {
|
|
|
+ var columns = options.gridConfig.columns;
|
|
|
+ var editCol = options.gridConfig.editCol;
|
|
|
+ for (var i = 0; editCol && i < editCol.length; i++) {
|
|
|
+ editCol[i] = editCol[i].toUpperCase();
|
|
|
+ }
|
|
|
+ if (editCol && editCol.length > 0 && columns && columns.length > 0) {
|
|
|
+ for (var i = 0; i < columns.length; i++) {
|
|
|
+ var column = columns[i];
|
|
|
+ var columnName = column.name;
|
|
|
+ var index = $.inArray(columnName.toUpperCase(), editCol);
|
|
|
+ if (index >= 0) {
|
|
|
+ column.editable = true;
|
|
|
+ if ("number" == column.type.toLowerCase() || "double" == column.type.toLowerCase() || "integer" == column.type.toLowerCase() || "bigdecimal" == column.type.toLowerCase()) {
|
|
|
+ column.edittype = 'numberfield';
|
|
|
+ column.editoptions = { maxlength: '50' };
|
|
|
+ column.editoptions.inputJson = column.extendOptions.numberOptions;
|
|
|
+ } else if ("date" == column.type.toLowerCase()) {
|
|
|
+ column.edittype = 'shrDateTimePicker';
|
|
|
+ column.formatter = 'shrDateTimePicker';
|
|
|
+ } else if (!column.edittype) {
|
|
|
+ column.edittype = 'shrtext';
|
|
|
+ column.editoptions = { maxlength: '100' };
|
|
|
+ }
|
|
|
+ column.classes = "cellEditItem";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $.extend(true, options, options.gridOption);
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 设置插件,非002信息集必须复写
|
|
|
+ */
|
|
|
+ getParamPlus: function () {
|
|
|
+ return {};
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 获取插件过滤条件,非002信息集必须复写
|
|
|
+ */
|
|
|
+ getPlusFilterItems: function () {
|
|
|
+ return null;
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断是否存在修改的单元格
|
|
|
+ */
|
|
|
+ checkEditCell: function () {
|
|
|
+ var _self = this;
|
|
|
+ var tds = $("#grid td[class*='dirty-cell']");
|
|
|
+ //判断是否存在已经修改但是没有切换的单元格
|
|
|
+ var editCell = $("#grid input[type='text']");
|
|
|
+ if (tds && tds.length > 0) {
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ if (editCell) {
|
|
|
+ var value = $("#grid input[type='text']").parent().attr('title');
|
|
|
+ if (editCell.val() != value) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ },
|
|
|
+ /*
|
|
|
+ * 确认是否存在已经修改但是没有保存的数据
|
|
|
+ */
|
|
|
+ dynCalonfirm: function (message, action, cancel) {
|
|
|
+ shr.msgHideAll();
|
|
|
+ var _self = this;
|
|
|
+ // var tds = $("#grid td[class='dirty-cell']");
|
|
|
+ if (_self.checkEditCell()) {
|
|
|
+ var msg = top.Messenger().post({
|
|
|
+ message: message,
|
|
|
+ hideAfter: null,
|
|
|
+ actions: {
|
|
|
+ retry: {
|
|
|
+ label: '确认',
|
|
|
+ auto: false,
|
|
|
+ delay: 0,
|
|
|
+ showCloseButton: true,
|
|
|
+ action: function () {
|
|
|
+ shr.msgHideAll();
|
|
|
+ if (action && $.isFunction(action)) {
|
|
|
+ action.call(this);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ cancel: {
|
|
|
+ label: '取消',
|
|
|
+ action: function () {
|
|
|
+ shr.msgHideAll();
|
|
|
+ if (cancel && $.isFunction(cancel)) {
|
|
|
+ cancel.call(this);
|
|
|
+ } else {
|
|
|
+ return msg.cancel();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return msg;
|
|
|
+ } else {
|
|
|
+ shr.msgHideAll();
|
|
|
+ if (action && $.isFunction(action)) {
|
|
|
+ action.call(this);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 校验 子类可重写
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+ validate: function () {
|
|
|
+ // shr.showWarning({
|
|
|
+ // message: "提示",
|
|
|
+ // });
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 组装保存时传至服务端的数据 有编辑列 子类必须重写
|
|
|
+ */
|
|
|
+ assembleSaveData: function (action) {
|
|
|
+ // var _self = this;
|
|
|
+ // var data = _self.prepareParam(action + 'Action');
|
|
|
+ // data.method = action;
|
|
|
+ // //data.operateState = _self.getOperateState();
|
|
|
+ // data.model = shr.toJSON(_self.assembleModel());
|
|
|
+ // // relatedFieldId
|
|
|
+ // var relatedFieldId = this.getRelatedFieldId();
|
|
|
+ // if (relatedFieldId) {
|
|
|
+ // data.relatedFieldId = relatedFieldId;
|
|
|
+ // }
|
|
|
+
|
|
|
+ // return data;
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 根据列名称获取字段类型
|
|
|
+ */
|
|
|
+ getColumnType: function (col) {
|
|
|
+ var cols = $('#dynamicGrid').data("options").gridConfig.columns;
|
|
|
+ var item;
|
|
|
+ for (var i = 0; i < cols.length; i++) {
|
|
|
+ item = cols[i];
|
|
|
+ if (col.toUpperCase() == item.name.toUpperCase()) {
|
|
|
+ return item.type;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //默认数字
|
|
|
+ return "NUMBER";
|
|
|
+ },
|
|
|
+ //判断是否为数字,整数位和小数位分别不超过10位
|
|
|
+ checkNumValid: function (value, type) {
|
|
|
+ var mesasage;
|
|
|
+ if (value == null) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ value = value.toString();
|
|
|
+ if (type != undefined && !type) {//type为空默认校验数字
|
|
|
+ mesasage = "未获取到该列的数据类型";
|
|
|
+ }
|
|
|
+ if ('NUMBER' == type.toUpperCase() || 'INTEGER' == type.toUpperCase() || 'BIGDECIMAL' == type.toUpperCase()) {
|
|
|
+ // if (!/^-?[0-9]{1,10}\.?[0-9]{0,5}$/.test(value)) {
|
|
|
+ // return false;
|
|
|
+ // }
|
|
|
+ // 移除小数点和指数符号后的长度就是有效数字位数
|
|
|
+ let significantDigits = value.replace('.', '').replace('e+', '').length;
|
|
|
+ if (significantDigits > 12) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 保存前置方法
|
|
|
+ */
|
|
|
+ beforeSave: function () {
|
|
|
+ var _self = this;
|
|
|
+ //将处于编辑状态的单元格执行savecell方法
|
|
|
+ var $table = $("#grid")[0];
|
|
|
+ var iRow = $table.p.iRow;
|
|
|
+ var iCol = $table.p.iCol;
|
|
|
+ $("#grid").jqGrid("saveCell", iRow, iCol);
|
|
|
+ //var tds = $("#grid td[class*='dirty-cell']");
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 增加action参数,执行保存后继续执行其他方法
|
|
|
+ */
|
|
|
+ saveDynGridAction: function (action) {
|
|
|
+ if (this.validate()) {
|
|
|
+ var _self = this;
|
|
|
+ this.beforeSave();
|
|
|
+ if (!_self.checkEditCell()) {
|
|
|
+ shr.showWarning({
|
|
|
+ message: "您没有修改列表中的数据,不需要保存!"
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ var data = _self.assembleSaveData(action);
|
|
|
+ } catch (error) {
|
|
|
+ // 捕获到异常后的处理代码
|
|
|
+ shr.showWarning({
|
|
|
+ message: error.message,
|
|
|
+ hideAfter: 3
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!data) {
|
|
|
+ shr.showWarning({
|
|
|
+ message: "请求参数为空!"
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $.block.show();
|
|
|
+ _self.remoteCall({
|
|
|
+ method: "saveDynGrid",
|
|
|
+ async: false,
|
|
|
+ param: { modi: JSON.stringify(data) },
|
|
|
+ success: function (res) {
|
|
|
+ //存在action则先不刷新
|
|
|
+ if (action && $.isFunction(action)) {
|
|
|
+ action.call(this);
|
|
|
+ } else {
|
|
|
+ shr.showInfo({
|
|
|
+ message: res,
|
|
|
+ hideAfter: 3
|
|
|
+ });
|
|
|
+ _self.queryGrid();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ error: function (res) {
|
|
|
+ shr.showError({
|
|
|
+ message: res.summary
|
|
|
+ });
|
|
|
+ },
|
|
|
+ complete: function (jqXHR, textStatus) {
|
|
|
+ if (jqXHR.responseText.indexOf("\"result\":\"error\"") > 0) {
|
|
|
+ $.block.hide();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // /**
|
|
|
+ // * 描述: 导入action
|
|
|
+ // */
|
|
|
+ // importAction: function () {
|
|
|
+ // var self = this;
|
|
|
+ // //自定义参数
|
|
|
+ // //var parentId = shr.getUrlParam('parentId');
|
|
|
+ // var customParam = {};
|
|
|
+ // self.setFastFilterMap();
|
|
|
+ // this.setGridTreeParam();
|
|
|
+ // this.setGridCustomParam();
|
|
|
+ // //this.setBotpFilterItems($grid);
|
|
|
+ // //this.queryFastFilterGrid();
|
|
|
+ // // selector
|
|
|
+ // // var selector = this.getSelector();
|
|
|
+ // // if (typeof selector !== 'undefined') {
|
|
|
+ // // $grid.setGridParam({ selector: selector });
|
|
|
+ // // }
|
|
|
+ // // filter
|
|
|
+ // var filterItems = this.getFilterItems();
|
|
|
+ // filterItems = shr.strEscape(filterItems);
|
|
|
+ // customParam.filterItems = filterItems;
|
|
|
+
|
|
|
+ // // fastFilter
|
|
|
+ // var fastFilterItems = this.getFastFilterItems();
|
|
|
+ // if (fastFilterItems) {
|
|
|
+ // customParam.fastFilterItems = JSON.stringifyOnce(fastFilterItems);
|
|
|
+ // }
|
|
|
+ // //seniorFilter
|
|
|
+ // var advancedFilter = this.getAdvancedFilterItems();
|
|
|
+ // if (self.fastFilterMap && self.fastFilterMap.fastFilterItems && self.isReturn) {
|
|
|
+ // advancedFilter = self.fastFilterMap.fastFilterItems.advancedFilter;
|
|
|
+ // }
|
|
|
+ // if (advancedFilter) {
|
|
|
+ // customParam.advancedFilter = JSON.stringifyOnce(advancedFilter);
|
|
|
+ // } else {
|
|
|
+ // customParam.advancedFilter = null;
|
|
|
+ // }
|
|
|
+ // //gridHeadFilter
|
|
|
+ // var gridHeadFilter = this.getGridHeadFilterItems(advancedFilter);
|
|
|
+ // if (gridHeadFilter) {
|
|
|
+ // customParam.advancedFilter = JSON.stringifyOnce(gridHeadFilter);
|
|
|
+ // }
|
|
|
+ // // sorter
|
|
|
+ // var sorterItems = this.getSorterItems();
|
|
|
+ // if (sorterItems) {
|
|
|
+ // customParam.sorterItems = sorterItems;
|
|
|
+ // }
|
|
|
+ // var keyField = this.getBillIdFieldName();
|
|
|
+ // if (keyField) {
|
|
|
+ // customParam.keyField = keyField;
|
|
|
+ // }
|
|
|
+ // self.beforeSave();
|
|
|
+ // if (self.checkEditCell()) {
|
|
|
+ // shr.showConfirm("您有编辑数据未保存,是否忽略?", function () {
|
|
|
+ // self.doImportData('import', customParam);
|
|
|
+ // }, function () {
|
|
|
+ // return;
|
|
|
+ // });
|
|
|
+ // } else {
|
|
|
+ // self.doImportData('import', customParam);
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+});
|
|
|
+
|