customDynamicList.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. /**
  2. * 自定义动态列表.js
  3. */
  4. shr.defineClass("shr.custom.CustomDynamicList", shr.compensation.CmpTBDynamicList, {
  5. //编辑列数组(大小写不区分)
  6. editColumns: null,
  7. initalizeDOM: function () {
  8. shr.custom.CustomDynamicList.superClass.initalizeDOM.call(this);
  9. },
  10. /**
  11. * 返回
  12. */
  13. backAction: function () {
  14. var self = this;
  15. self.beforeSave();
  16. if (self.checkEditCell()) {
  17. shr.showConfirm("您有编辑数据未保存,是否忽略?", function () {
  18. self.back();
  19. }, function () {
  20. return;
  21. });
  22. } else {
  23. self.back();
  24. }
  25. },
  26. /**
  27. * 获取可以编辑列
  28. * @returns
  29. */
  30. getEditColumns: function () {
  31. return this.editColumns;
  32. },
  33. /**
  34. * 扩展jqgrid options,供子类复写
  35. */
  36. extendGridOptions: function (options) {
  37. var _self = this;
  38. var editCol = _self.getEditColumns();
  39. $.extend(true, options, {
  40. gridOption: {
  41. cellEdit: true,
  42. cellsubmit: 'clientArray'
  43. }
  44. });
  45. $.extend(true, options.gridConfig, {
  46. editCol: editCol
  47. });
  48. _self.editColumnsSetting = _self.initData.editColumnsSetting;
  49. if (_self.editColumnsSetting && !$.isEmptyObject(_self.editColumnsSetting) && options.gridConfig) {
  50. var columns = options.gridConfig.columns;
  51. if (columns) {
  52. $.each(columns, function (key, value) {
  53. if (value) {
  54. var name = value.name;
  55. var editSetting = _self.editColumnsSetting[name];
  56. if (editSetting) {
  57. $.extend(value, editSetting);
  58. if (value.editable && (value.editable == "true" || value.editable == true)) {
  59. if (value.formatter && value.formatter == "promptBox") {
  60. if (options.datatype == "json") {
  61. value.name = value.name + ".*";
  62. }
  63. }
  64. }
  65. }
  66. }
  67. });
  68. }
  69. }
  70. },
  71. /**
  72. * 处理表格操作
  73. * @param {*} options
  74. */
  75. handleGridOptions: function (options) {
  76. var columns = options.gridConfig.columns;
  77. var editCol = options.gridConfig.editCol;
  78. for (var i = 0; editCol && i < editCol.length; i++) {
  79. editCol[i] = editCol[i].toUpperCase();
  80. }
  81. if (editCol && editCol.length > 0 && columns && columns.length > 0) {
  82. for (var i = 0; i < columns.length; i++) {
  83. var column = columns[i];
  84. var columnName = column.name;
  85. var index = $.inArray(columnName.toUpperCase(), editCol);
  86. if (index >= 0) {
  87. column.editable = true;
  88. if ("number" == column.type.toLowerCase() || "double" == column.type.toLowerCase() || "integer" == column.type.toLowerCase() || "bigdecimal" == column.type.toLowerCase()) {
  89. column.edittype = 'numberfield';
  90. column.editoptions = { maxlength: '50' };
  91. column.editoptions.inputJson = column.extendOptions.numberOptions;
  92. } else if ("date" == column.type.toLowerCase()) {
  93. column.edittype = 'shrDateTimePicker';
  94. column.formatter = 'shrDateTimePicker';
  95. } else if (!column.edittype) {
  96. column.edittype = 'shrtext';
  97. column.editoptions = { maxlength: '100' };
  98. }
  99. column.classes = "cellEditItem";
  100. }
  101. }
  102. }
  103. $.extend(true, options, options.gridOption);
  104. },
  105. /**
  106. * 设置插件,非002信息集必须复写
  107. */
  108. getParamPlus: function () {
  109. return {};
  110. },
  111. /**
  112. * 获取插件过滤条件,非002信息集必须复写
  113. */
  114. getPlusFilterItems: function () {
  115. return null;
  116. },
  117. /**
  118. * 判断是否存在修改的单元格
  119. */
  120. checkEditCell: function () {
  121. var _self = this;
  122. var tds = $("#grid td[class*='dirty-cell']");
  123. //判断是否存在已经修改但是没有切换的单元格
  124. var editCell = $("#grid input[type='text']");
  125. if (tds && tds.length > 0) {
  126. return true;
  127. } else {
  128. if (editCell) {
  129. var value = $("#grid input[type='text']").parent().attr('title');
  130. if (editCell.val() != value) {
  131. return true;
  132. }
  133. }
  134. }
  135. return false;
  136. },
  137. /*
  138. * 确认是否存在已经修改但是没有保存的数据
  139. */
  140. dynCalonfirm: function (message, action, cancel) {
  141. shr.msgHideAll();
  142. var _self = this;
  143. // var tds = $("#grid td[class='dirty-cell']");
  144. if (_self.checkEditCell()) {
  145. var msg = top.Messenger().post({
  146. message: message,
  147. hideAfter: null,
  148. actions: {
  149. retry: {
  150. label: '确认',
  151. auto: false,
  152. delay: 0,
  153. showCloseButton: true,
  154. action: function () {
  155. shr.msgHideAll();
  156. if (action && $.isFunction(action)) {
  157. action.call(this);
  158. }
  159. }
  160. },
  161. cancel: {
  162. label: '取消',
  163. action: function () {
  164. shr.msgHideAll();
  165. if (cancel && $.isFunction(cancel)) {
  166. cancel.call(this);
  167. } else {
  168. return msg.cancel();
  169. }
  170. }
  171. }
  172. }
  173. });
  174. return msg;
  175. } else {
  176. shr.msgHideAll();
  177. if (action && $.isFunction(action)) {
  178. action.call(this);
  179. }
  180. }
  181. },
  182. /**
  183. * 校验 子类可重写
  184. * @returns
  185. */
  186. validate: function () {
  187. // shr.showWarning({
  188. // message: "提示",
  189. // });
  190. return true;
  191. },
  192. /**
  193. * 组装保存时传至服务端的数据 有编辑列 子类必须重写
  194. */
  195. assembleSaveData: function (action) {
  196. // var _self = this;
  197. // var data = _self.prepareParam(action + 'Action');
  198. // data.method = action;
  199. // //data.operateState = _self.getOperateState();
  200. // data.model = shr.toJSON(_self.assembleModel());
  201. // // relatedFieldId
  202. // var relatedFieldId = this.getRelatedFieldId();
  203. // if (relatedFieldId) {
  204. // data.relatedFieldId = relatedFieldId;
  205. // }
  206. // return data;
  207. },
  208. /**
  209. * 根据列名称获取字段类型
  210. */
  211. getColumnType: function (col) {
  212. var cols = $('#dynamicGrid').data("options").gridConfig.columns;
  213. var item;
  214. for (var i = 0; i < cols.length; i++) {
  215. item = cols[i];
  216. if (col.toUpperCase() == item.name.toUpperCase()) {
  217. return item.type;
  218. }
  219. }
  220. //默认数字
  221. return "NUMBER";
  222. },
  223. //判断是否为数字,整数位和小数位分别不超过10位
  224. checkNumValid: function (value, type) {
  225. var mesasage;
  226. if (value == null) {
  227. return true;
  228. }
  229. value = value.toString();
  230. if (type != undefined && !type) {//type为空默认校验数字
  231. mesasage = "未获取到该列的数据类型";
  232. }
  233. if ('NUMBER' == type.toUpperCase() || 'INTEGER' == type.toUpperCase() || 'BIGDECIMAL' == type.toUpperCase()) {
  234. // if (!/^-?[0-9]{1,10}\.?[0-9]{0,5}$/.test(value)) {
  235. // return false;
  236. // }
  237. // 移除小数点和指数符号后的长度就是有效数字位数
  238. let significantDigits = value.replace('.', '').replace('e+', '').length;
  239. if (significantDigits > 12) {
  240. return false;
  241. }
  242. }
  243. return true;
  244. },
  245. /**
  246. * 保存前置方法
  247. */
  248. beforeSave: function () {
  249. var _self = this;
  250. //将处于编辑状态的单元格执行savecell方法
  251. var $table = $("#grid")[0];
  252. var iRow = $table.p.iRow;
  253. var iCol = $table.p.iCol;
  254. $("#grid").jqGrid("saveCell", iRow, iCol);
  255. //var tds = $("#grid td[class*='dirty-cell']");
  256. },
  257. /**
  258. * 增加action参数,执行保存后继续执行其他方法
  259. */
  260. saveDynGridAction: function (action) {
  261. if (this.validate()) {
  262. var _self = this;
  263. this.beforeSave();
  264. if (!_self.checkEditCell()) {
  265. shr.showWarning({
  266. message: "您没有修改列表中的数据,不需要保存!"
  267. });
  268. return;
  269. }
  270. try {
  271. var data = _self.assembleSaveData(action);
  272. } catch (error) {
  273. // 捕获到异常后的处理代码
  274. shr.showWarning({
  275. message: error.message,
  276. hideAfter: 3
  277. });
  278. return;
  279. }
  280. if (!data) {
  281. shr.showWarning({
  282. message: "请求参数为空!"
  283. });
  284. return;
  285. }
  286. $.block.show();
  287. _self.remoteCall({
  288. method: "saveDynGrid",
  289. async: false,
  290. param: { modi: JSON.stringify(data) },
  291. success: function (res) {
  292. //存在action则先不刷新
  293. if (action && $.isFunction(action)) {
  294. action.call(this);
  295. } else {
  296. shr.showInfo({
  297. message: res,
  298. hideAfter: 3
  299. });
  300. _self.queryGrid();
  301. }
  302. },
  303. error: function (res) {
  304. shr.showError({
  305. message: res.summary
  306. });
  307. },
  308. complete: function (jqXHR, textStatus) {
  309. if (jqXHR.responseText.indexOf("\"result\":\"error\"") > 0) {
  310. $.block.hide();
  311. }
  312. }
  313. });
  314. }
  315. },
  316. // /**
  317. // * 描述: 导入action
  318. // */
  319. // importAction: function () {
  320. // var self = this;
  321. // //自定义参数
  322. // //var parentId = shr.getUrlParam('parentId');
  323. // var customParam = {};
  324. // self.setFastFilterMap();
  325. // this.setGridTreeParam();
  326. // this.setGridCustomParam();
  327. // //this.setBotpFilterItems($grid);
  328. // //this.queryFastFilterGrid();
  329. // // selector
  330. // // var selector = this.getSelector();
  331. // // if (typeof selector !== 'undefined') {
  332. // // $grid.setGridParam({ selector: selector });
  333. // // }
  334. // // filter
  335. // var filterItems = this.getFilterItems();
  336. // filterItems = shr.strEscape(filterItems);
  337. // customParam.filterItems = filterItems;
  338. // // fastFilter
  339. // var fastFilterItems = this.getFastFilterItems();
  340. // if (fastFilterItems) {
  341. // customParam.fastFilterItems = JSON.stringifyOnce(fastFilterItems);
  342. // }
  343. // //seniorFilter
  344. // var advancedFilter = this.getAdvancedFilterItems();
  345. // if (self.fastFilterMap && self.fastFilterMap.fastFilterItems && self.isReturn) {
  346. // advancedFilter = self.fastFilterMap.fastFilterItems.advancedFilter;
  347. // }
  348. // if (advancedFilter) {
  349. // customParam.advancedFilter = JSON.stringifyOnce(advancedFilter);
  350. // } else {
  351. // customParam.advancedFilter = null;
  352. // }
  353. // //gridHeadFilter
  354. // var gridHeadFilter = this.getGridHeadFilterItems(advancedFilter);
  355. // if (gridHeadFilter) {
  356. // customParam.advancedFilter = JSON.stringifyOnce(gridHeadFilter);
  357. // }
  358. // // sorter
  359. // var sorterItems = this.getSorterItems();
  360. // if (sorterItems) {
  361. // customParam.sorterItems = sorterItems;
  362. // }
  363. // var keyField = this.getBillIdFieldName();
  364. // if (keyField) {
  365. // customParam.keyField = keyField;
  366. // }
  367. // self.beforeSave();
  368. // if (self.checkEditCell()) {
  369. // shr.showConfirm("您有编辑数据未保存,是否忽略?", function () {
  370. // self.doImportData('import', customParam);
  371. // }, function () {
  372. // return;
  373. // });
  374. // } else {
  375. // self.doImportData('import', customParam);
  376. // }
  377. // },
  378. });