timepieceSchemeBillEx.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. var cellColor = '#90EE90' ; // 浅绿色
  2. var yellColor = '#FFFF46' ; // 黄色
  3. // var checkField = 'S83'; // 点检率字段
  4. // var booleanField = 'S93'; // 布尔字段
  5. var COMRATE = 'MQ005'; // 点检率编码
  6. var JOBTYPE = "MQ004"; // 岗位类型
  7. var SKILLLEVEL = "MQ003"; // 技能等级 SKILLLEVEL
  8. var ONSITE = "MQ007"; // 是否现场作业
  9. var TEAMAPP = "MQ012"; // 是否片长
  10. var SALARYSEQ = "MQ015"; //MQ运维工资序列
  11. var booleanNum = 'boolean01'; // 布尔编码
  12. // 使用方括号表示法动态设置fieldMap的key
  13. var fieldMap = {
  14. [booleanNum]: "",
  15. [COMRATE]: "",
  16. [JOBTYPE]: "",
  17. [SKILLLEVEL]: "",
  18. [ONSITE]: "",
  19. [TEAMAPP]: "",
  20. [SALARYSEQ]: ""
  21. }; // 字段映射
  22. //数组
  23. var fieldArr = [booleanNum,COMRATE,JOBTYPE,SKILLLEVEL,ONSITE,TEAMAPP,SALARYSEQ];
  24. shr.defineClass("shr.compensation.TimepieceSchemeBillEx", shr.compensation.TimepieceSchemeBill, {
  25. initalizeDOM: function() {
  26. var _self = this;
  27. shr.compensation.TimepieceSchemeBillEx.superClass.initalizeDOM.call(this);
  28. _self.remoteCall({
  29. method:"getFieldRemark",
  30. param: {fieldArr:fieldArr.toString()},
  31. async: false,
  32. success:function( data ){
  33. if(data ){
  34. //循环data,如果key等于fieldMap的key,则将data的value赋值给fieldMap的value
  35. for(var key in data){
  36. if(fieldMap.hasOwnProperty(key)){
  37. fieldMap[key] = data[key];
  38. }
  39. }
  40. }
  41. },
  42. error:function(){
  43. },
  44. });
  45. },
  46. afterRenderGrid: function() {
  47. var _self = this;
  48. _self.setCellStyle();
  49. },
  50. setCellStyle: function() {
  51. var $entry = $('#entry');
  52. // 使用jqGrid的方法获取所有行id
  53. var rowIds = $entry.jqGrid('getDataIDs');
  54. var bFeild = fieldMap[booleanNum];
  55. var comFeild = fieldMap[COMRATE];
  56. var errorRow = "" ;
  57. for (var i = 0; i < rowIds.length; i++) {
  58. var rowId = rowIds[i];
  59. // 获取行数据
  60. var rowData = $entry.jqGrid('getRowData', rowId);
  61. // 注意:列名大小写是否匹配?这里假设列名是'S93'
  62. //如果cellname存在fieldArr中,并且不等于booleanNum,则进行点检率校验
  63. var booleanField = fieldMap[booleanNum];
  64. //如果rowData[booleanField]不为空
  65. //循环fieldMap,如果rowData[booleanField]的数据值中,(包含对应列名fieldMap[key]),则对对应字段列(fieldMap[key])进行背景色改变
  66. if (booleanField) {
  67. var boolVal = rowData[booleanField];
  68. for (var key in fieldMap) {
  69. // 确保key是fieldMap自身的属性,且不是booleanNum
  70. if (fieldMap.hasOwnProperty(key) && key !== booleanNum) {
  71. var checkField = fieldMap[key];
  72. if(checkField && rowData[checkField] !== undefined && (rowData[checkField] == null || rowData[checkField] == "" ) ){
  73. //点检率为空,黄色
  74. $entry.jqGrid('setCell', rowId, checkField, rowData[checkField], {
  75. 'background-color': yellColor
  76. });
  77. if( key == COMRATE ){
  78. errorRow += (i+1)+"," ;
  79. }
  80. }
  81. // 确保checkField存在且rowData中有该字段 锁定的字段绿色
  82. if (checkField && rowData[checkField] !== undefined && boolVal && boolVal.indexOf(checkField)!== -1 ) {
  83. $entry.jqGrid('setCell', rowId, checkField, rowData[checkField], {
  84. 'background-color': cellColor
  85. });
  86. }
  87. }
  88. }
  89. }
  90. }
  91. if(errorRow != ""){
  92. //去除errorRow最后一个“,”
  93. errorRow = errorRow.substring(0,errorRow.length-1);
  94. var errorMsg = "第"+ errorRow+ "行,点检率数据为空,请检查";
  95. shr.showWarning({message: errorMsg, hideAfter: 6});
  96. }
  97. $entry.jqGrid('hideCol', bFeild); // 隐藏列
  98. },
  99. /**
  100. * 编辑表格姓名F7新增点击事件
  101. */
  102. setGridNameEvent: function() {
  103. var _self = this;
  104. $entry = $('#entry');
  105. $entry.jqGrid("option",{"afterEditCell":function(rowid, colName, value,iRow, iCol,rowData){
  106. if(colName === "person"){
  107. var id = "#"+iRow + "_person";
  108. var option = $(id).shrPromptBox("option");
  109. var subWidgetOptions = option.subWidgetOptions
  110. subWidgetOptions.multiselect = true;
  111. subWidgetOptions.filter = " hrOrgUnit.id = '" + $("#hrOrgUnit").shrPromptBox("getValue").id + "'";
  112. subWidgetOptions.otherParams = {adminOrgId:$("#adminOrg").shrPromptBox("getValue").id,hrOrgUnitId:$("#hrOrgUnit").shrPromptBox("getValue").id};
  113. $(id).shrPromptBox("option",{
  114. "subWidgetOptions":subWidgetOptions,
  115. "onchange":function(e, val) {
  116. var personData = val.current;
  117. var prevPersonData = val.previous;
  118. var length = personData.length;
  119. var newRowData = [];
  120. for(var i =0; i<length; i++){
  121. var item = personData[i];
  122. var updateItem = {};
  123. var oldData = $entry.wafGrid("getRowData",rowid);
  124. if (oldData.hasOwnProperty('entrycalstatus')&&item['person.id']!==oldData['person']['id']){
  125. oldData.entrycalstatus ='0';
  126. }
  127. if(i==0){
  128. if(!prevPersonData || prevPersonData.id !== item["person.id"]){
  129. updateItem = {
  130. "number": item["person.number"],
  131. "adminOrgUnit":{id : item["adminOrg.id"], name : item["adminOrg.name"]},
  132. "position":{id : item["position.id"], name : item["position.name"]},
  133. "cmpEmpORelation":{id : item.id,name : item.id},
  134. "person":{id : item["person.id"],name : item["person.name"]},
  135. "submitElement":oldData.submitElement,
  136. "id":oldData.id,
  137. "tempId":oldData.tempId,
  138. "effectDate":oldData.effectDate,
  139. "entrycalstatus":oldData.entrycalstatus,
  140. "currency":oldData.currency,
  141. "dealStatus":oldData.dealStatus
  142. }
  143. var newData = _self.updateRow(updateItem,oldData);
  144. $entry.wafGrid("setRowData",rowid,newData);
  145. }else{
  146. $entry.wafGrid("setRowData",rowid,oldData);
  147. }
  148. }else{
  149. var newData = _self.createNewEntryModel();
  150. newData.number = item["person.number"];
  151. newData.person = {id : item["person.id"],name : item["person.name"]};
  152. newData.adminOrgUnit = {id : item["adminOrg.id"], name : item["adminOrg.name"]};
  153. newData.position = {id : item["position.id"], name : item["position.name"]};
  154. newData.cmpEmpORelation = {id : item.id,name : item.id};
  155. newRowData.push(newData);
  156. }
  157. }
  158. if(newRowData.length){
  159. $entry.jqGrid('addBlockData','id',newRowData);
  160. $("#entry").jqGrid('setGridHeight', 300);
  161. }
  162. setTimeout(function(){
  163. var frozenScrollTop = $(".frozen-bdiv").scrollTop();
  164. $("#entry").parents(".ui-jqgrid-bdiv").scrollTop(frozenScrollTop);
  165. })
  166. }
  167. })
  168. }
  169. }})
  170. $entry.delegate('input', 'focus', function() {
  171. _self.setCellLength();
  172. });
  173. $entry.wafGrid("option", {
  174. afterSaveCell : function (rowid, cellname, value, iRow, iCol) {
  175. if ($("#entry").jqGrid('getCellObject', rowid, 'entrycalstatus')[0]){
  176. $("#entry").jqGrid('setCell', rowid,"entrycalstatus", '0');
  177. }
  178. //如果cellname存在fieldMap的值中,并且不等于booleanNum,则进行点检率校验
  179. var booleanField = fieldMap[booleanNum];
  180. if (isValueInFieldMap(cellname) && cellname != booleanField) {
  181. var boolVal = $("#entry").jqGrid('getCell', rowid, booleanField );
  182. //如果boolVal不为空,则将boolVal的值赋值给booleanField字段
  183. if(boolVal && "" != boolVal){
  184. //判断boolVal中是否包含cellname,如包含则不处理,否则使用","将cellname与boolVal拼接成新的boolVal
  185. var boolValStr = boolVal.toString();
  186. if(boolValStr.indexOf(cellname) == -1){
  187. boolValStr = boolValStr + "," + cellname;
  188. }
  189. // 4. 更新 boolVal
  190. boolVal = boolValStr;
  191. } else{
  192. boolVal = cellname;
  193. }
  194. $("#entry").jqGrid('setCell', rowid, booleanField , boolVal);
  195. //并更新点检率单元格背景色为绿色
  196. $("#entry").jqGrid('setCell', rowid, cellname, value, {
  197. 'background-color': cellColor // 浅绿色
  198. });
  199. }
  200. else if(colName === "person"){
  201. //去除当前行所有的颜色
  202. var rowData = $entry.jqGrid('getRowData', rowid);
  203. for(var key in rowData){
  204. $("#entry").jqGrid('setCell', rowid, key, rowData[key], {
  205. 'background-color': '' // 白色
  206. });
  207. }
  208. }
  209. },
  210. });
  211. },
  212. saveAction: function(event) {
  213. var _self = this;
  214. if(_self.validate('save') && _self.verify()){// 需要先进行基本的校验
  215. _self.weakVerify(function() {
  216. // 修改这里:直接调用当前类的doSave方法
  217. _self.doSave(event, 'save'); // 关键修改点
  218. }, "save");
  219. }else{
  220. if(_self != top){// in iframe
  221. shr.setIframeHeight(window.name);
  222. }
  223. }
  224. },
  225. checkHeadData: function() {
  226. var flag = true;
  227. var hrOrgUnit = $('#hrOrgUnit').shrPromptBox('getValue');
  228. var adminOrg = $('#adminOrg').shrPromptBox('getValue');
  229. var submitScheme = $('#submitScheme').shrPromptBox('getValue');
  230. var emsg= '';
  231. if(null == hrOrgUnit || "" == hrOrgUnit.id){
  232. flag = false;
  233. emsg += "[业务组织]";
  234. }
  235. if(null == adminOrg || "" == adminOrg.id){
  236. flag = false;
  237. emsg += "[行政组织]";
  238. }
  239. if(null == submitScheme || "" == submitScheme.id){
  240. flag = false;
  241. emsg += "<[日薪方案]";
  242. }
  243. if(!flag){
  244. emsg += "字段不能为空,请完善信息再操作!"
  245. shr.showWarning({
  246. message: emsg,
  247. hideAfter: 5
  248. });
  249. }
  250. return flag;
  251. },
  252. validate: function(exeVal) {
  253. var _self = this;
  254. var workArea = this.getWorkarea();
  255. var $form = $("form", workArea);
  256. var flag = this.checkNoPermFields();
  257. if(!flag){
  258. return flag;
  259. }
  260. if(exeVal == 'save'){
  261. flag = _self.checkHeadData()
  262. }else{
  263. flag = $form.wafFormValidator("validateForm", true);
  264. }
  265. if(exeVal == 'save' && !flag){
  266. return flag;
  267. }
  268. //判断是否有必填的头像没有上传
  269. $("[ctrlrole='headUpload']").each(function(index, item){
  270. var rule = $.validator.attributeRules(item);
  271. var isRequired = rule && rule.required;
  272. if($(item).attr('src') == 'images/default_headsmall.png' && isRequired){
  273. flag = false;
  274. }
  275. })
  276. if (!flag) {
  277. this.handleErrorTip($form);
  278. return flag;
  279. }
  280. if (this.checkAttachment().length > 0) {
  281. flag = false;
  282. shr.showWarning({
  283. message: this.checkAttachment().join(',') + $.shrI18n.framework.tips.attachmentNeedUpload,
  284. hideAfter: 5
  285. });
  286. }
  287. return flag;
  288. },
  289. /**
  290. * 保存真正执行方法
  291. */
  292. doSave: function(event, action) {
  293. var _self = this;
  294. var data = _self.assembleSaveData(action);
  295. var target;
  296. if (event && event.currentTarget) {
  297. target = event.currentTarget;
  298. }
  299. shr.doAction({
  300. target: target,
  301. url: _self.dynamicPage_url,
  302. type: 'post',
  303. data: data,
  304. success : function(data) {
  305. var responseData = data.responseData
  306. if (_self.isFromF7()) {
  307. // 来自F7,关闭当前界面,并给F7设置
  308. var dataF7 = {
  309. id : responseData,
  310. name : $.parseJSON(data.model).name
  311. };
  312. dialogClose(dataF7);
  313. } else {
  314. var assignedRowsCount = data.assignedRowsCount;
  315. // 普通保存,去除最后一个面包屑,防止修改名字造成面包屑重复
  316. shrDataManager.pageNavigationStore.pop();
  317. if( 0 != assignedRowsCount && null != assignedRowsCount){
  318. shr.showInfo({
  319. message: "保存成功,已填入了"+assignedRowsCount+"条点检率数据."
  320. });
  321. //3秒后再执行其他操作
  322. setTimeout(function(){
  323. _self.viewAction(responseData);
  324. }, 1800);
  325. }else{
  326. _self.viewAction(responseData);
  327. }
  328. }
  329. }
  330. });
  331. },
  332. });
  333. // 检查cellname是否存在于fieldMap的值(value)中
  334. function isValueInFieldMap(cellname) {
  335. for (var key in fieldMap) {
  336. if (fieldMap.hasOwnProperty(key) && fieldMap[key] === cellname) {
  337. return true;
  338. }
  339. }
  340. return false;
  341. }