budgetInst-fill4Hr.js 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. var headerCount;//头部行高
  2. var nextDataRowIndex;//下条数据所在行
  3. var bgColor1='rgb(226,239,218)';
  4. var selfNumCol=3;
  5. $(function(){
  6. spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 1 });
  7. initSpread();
  8. });
  9. function initSpread(){
  10. spread.suspendPaint();
  11. if(dbJson){//数据库
  12. spread.fromJSON(dbJson);
  13. }
  14. var sheet = spread.getActiveSheet();
  15. removeMenu(sheet);
  16. if(readOnly) {
  17. setSheetReadOnly(sheet);
  18. spread.resumePaint();
  19. return;
  20. }else {
  21. setInstDefault(spread);
  22. }
  23. addMenu(sheet);
  24. spread.options.newTabVisible = false;//取消新增sheet按钮
  25. spread.options.allowExtendPasteRange =true;//扩展粘贴区域
  26. // bindEvent(spread);
  27. setDefaultLock(sheet);
  28. setCellEdit(sheet);
  29. var setting = sheet.tag();
  30. if(setting){
  31. if(setting.sheetVar) {
  32. headerCount = setting.sheetVar.headerCount;
  33. }
  34. if(setting.nextDataRowIndex){
  35. nextDataRowIndex = setting.nextDataRowIndex;
  36. }
  37. }
  38. if(!nextDataRowIndex){
  39. nextDataRowIndex = headerCount;
  40. }
  41. if(needInitData){
  42. initData();
  43. }
  44. sheet.clearSelection();
  45. sheet.showColumn(0, GC.Spread.Sheets.HorizontalPosition.left);
  46. spread.bind(GC.Spread.Sheets.Events.RowChanging, function (e, info) {
  47. //info.propertyName="deleteRows" //删除行
  48. if(info.propertyName="deleteRows"){
  49. var deleteRow = info.row;
  50. var deleteCount = info.count;
  51. var sheetTag = sheet.tag();
  52. var ids = sheetTag.ids;
  53. for(var i=deleteRow;i<deleteRow+deleteCount;i++) {
  54. if(nextDataRowIndex>headerCount) nextDataRowIndex--;
  55. var rowTag = sheet.getTag(i,-1);
  56. if(!rowTag) continue;
  57. for(var j=0;j<ids.length;j++){
  58. if(ids[j]==rowTag.id){
  59. delete ids[j];
  60. }
  61. }
  62. }
  63. addSheetTagValue(sheet,{ids:ids,nextDataRowIndex:nextDataRowIndex});
  64. }
  65. });
  66. spread.resumePaint();
  67. }
  68. function setDefaultLock(sheet){
  69. var option = {
  70. allowSelectLockedCells:true,
  71. allowSelectUnlockedCells:true,
  72. allowFilter: true,
  73. allowSort: false,
  74. allowResizeRows: true,
  75. allowResizeColumns: true,
  76. allowEditObjects: false,
  77. allowDragInsertRows: false,
  78. allowDragInsertColumns: false,
  79. allowInsertRows: false,
  80. allowInsertColumns: false,
  81. allowDeleteRows: true,
  82. allowDeleteColumns: false
  83. };
  84. sheet.options.protectionOptions = option;
  85. sheet.options.isProtected = true;
  86. var defaultStyle = sheet.getDefaultStyle() //默认的样式,
  87. defaultStyle.locked=false;
  88. defaultStyle.formatter=_format;
  89. sheet.setDefaultStyle(defaultStyle);
  90. }
  91. function setCellEdit(sheet){
  92. var rowCount = sheet.getRowCount();
  93. var colCount = sheet.getColumnCount();
  94. for(var i=0;i<rowCount;i++){
  95. for(var j=0;j<colCount;j++){
  96. // dataCell
  97. var tag = sheet.getTag(i,j);
  98. if(tag){
  99. if(tag.dataCell){
  100. if(!tag.readOnly || tag.readOnly==0){
  101. sheet.getRange(i,j,1,1).locked(false);
  102. }
  103. }
  104. }
  105. }
  106. }
  107. }
  108. function initData(){
  109. for(var i=0;i<budgetPostEntityList.length;i++){
  110. var one = budgetPostEntityList[i];
  111. addRow(one);
  112. }
  113. }
  114. function getDoubleValidator() {
  115. return GC.Spread.Sheets.DataValidation.createFormulaValidator('^(-?\d+)(\.\d+)?$');
  116. }
  117. function addRow(one){
  118. var sheet = spread.getActiveSheet();
  119. var sheetTag = sheet.tag();
  120. if(!sheetTag) sheetTag={};
  121. if(!sheetTag.ids) sheetTag.ids=[];
  122. var id = one.id;
  123. var postName=one.postName;
  124. var type = one.type;
  125. var typeString = one.typeString;
  126. var userType = one.userType;
  127. var userTypeString = one.userTypeString;
  128. if($.inArray(id, sheetTag.ids)!=-1){
  129. return;
  130. }
  131. sheetTag.ids.push(id);
  132. addSheetTagValue(sheet,{ids:sheetTag.ids});
  133. var row = nextDataRowIndex++;
  134. sheet.addRows(row,1);//总计行
  135. var sheetRowCount = sheet.getRowCount();
  136. if(row>sheetRowCount-1){
  137. sheet.addRows(sheetRowCount,1)
  138. }
  139. var rowSetting={};//行变量
  140. rowSetting.type=type;
  141. rowSetting.userType=userType;
  142. var col=0;
  143. // sheet.setFormula(row, 0, "row()-"+headerCount);
  144. //项目岗位
  145. sheet.setValue(row, col, postName);
  146. sheet.getCell(row,col).backColor(bgColor1).locked(true);
  147. col++;
  148. //岗位类型
  149. sheet.setValue(row, col,typeString);
  150. sheet.getCell(row,col).backColor(bgColor1).locked(true);
  151. col++;
  152. //人员类型
  153. sheet.setValue(row, col,userTypeString);
  154. sheet.getCell(row,col).backColor(bgColor1).locked(true);
  155. var renyuanleixing=getCellStr(sheet,row,col);
  156. col++;
  157. //自有数量
  158. var ziyoushuliang=getCellStr(sheet,row,col);
  159. sheet.getCell(row,col).value(postNumDetailList[id]).hAlign(GC.Spread.Sheets.HorizontalAlign.center);
  160. col++;
  161. // 缴金人数比例
  162. var jiaojinbili=getCellStr(sheet,row,col);
  163. sheet.getCell(row,col).formatter('0%').hAlign(GC.Spread.Sheets.HorizontalAlign.center);
  164. col++;
  165. //月度工资 (含固定补贴)
  166. sheet.getCell(row,col).formatter(_format);
  167. var yuedugongzi =getCellStr(sheet,row,col);
  168. col++;
  169. //证书补贴
  170. sheet.getCell(row,col).formatter(_format);
  171. var zhengshubutie =getCellStr(sheet,row,col);
  172. col++;
  173. //社保缴纳基数
  174. sheet.getCell(row,col).formatter(_format);
  175. var shebaojishu =getCellStr(sheet,row,col);
  176. col++;
  177. //社保缴纳比例
  178. sheet.getCell(row,col).formatter('0%');
  179. var shebaobili =getCellStr(sheet,row,col);
  180. col++;
  181. //公积金缴纳基数
  182. sheet.getCell(row,col).formatter(_format);
  183. var gongjijinjishu =getCellStr(sheet,row,col);
  184. col++;
  185. //公积金缴纳比例
  186. sheet.getCell(row,col).formatter('0%');
  187. var gongjijinbili =getCellStr(sheet,row,col);
  188. col++;
  189. //年度工资 (含固定补贴)
  190. var niandugongzi =getCellStr(sheet,row,col);
  191. sheet.setFormula(row,col,ziyoushuliang+"*"+yuedugongzi+"*12+"+ziyoushuliang+"*"+zhengshubutie+"*12");
  192. sheet.getCell(row,col).backColor(bgColor1);
  193. col++;
  194. //高温补贴
  195. sheet.setFormula(row,col,'IF('+renyuanleixing+'="一线外岗",1200,800)*'+ziyoushuliang);
  196. sheet.getCell(row,col).backColor(bgColor1);
  197. col++;
  198. //法定及额外加(值)班费
  199. if(postName!='大区经理' && postName!='项目经理' && postName!='项目副经理' && postName!='项目经理助理') {
  200. sheet.setFormula(row,col, sheetTag.basePay+"/21.75*11*3*0.5*"+ziyoushuliang);
  201. }
  202. col++;
  203. //工作餐补及中夜班津贴
  204. col++;
  205. //社保
  206. sheet.setFormula(row,col,ziyoushuliang+"*"+shebaojishu+"*"+shebaobili+"*12*"+jiaojinbili);
  207. sheet.getCell(row,col).backColor(bgColor1);
  208. col++;
  209. //公积金
  210. sheet.setFormula(row,col,ziyoushuliang+"*"+gongjijinjishu+"*"+gongjijinbili+"*12*"+jiaojinbili);
  211. sheet.getCell(row,col).backColor(bgColor1);
  212. col++;
  213. //奖金
  214. col++;
  215. //春节、中秋
  216. sheet.setFormula(row,col,ziyoushuliang+"*200");
  217. sheet.getCell(row,col).backColor(bgColor1);
  218. col++;
  219. // 年夜饭
  220. sheet.setFormula(row,col,ziyoushuliang+"*150");
  221. sheet.getCell(row,col).backColor(bgColor1);
  222. col++;
  223. // 健康体检、旅游
  224. var lvyou =getCellStr(sheet,row,col);
  225. sheet.setFormula(row,col,'IF('+renyuanleixing+'="管理人员",2000,0)*'+ziyoushuliang);
  226. sheet.getCell(row,col).backColor(bgColor1);
  227. col++;
  228. //隐藏列
  229. col++;
  230. // 人工费用
  231. sheet.setFormula(row,col,"sum("+niandugongzi+":"+lvyou+")");
  232. sheet.getCell(row,col).backColor(bgColor1);
  233. col++;
  234. // 内训费
  235. col++;
  236. // 外训费
  237. col++;
  238. //边框
  239. var lineStyle = GC.Spread.Sheets.LineStyle.thin;
  240. var lineBorder = new GC.Spread.Sheets.LineBorder('black', lineStyle);
  241. var sheetArea = GC.Spread.Sheets.SheetArea.viewport;
  242. var columnCount = sheet.getColumnCount();
  243. for(var col=0;col<columnCount;col++) {
  244. sheet.getRange(row,col).setBorder(lineBorder, { left: true, right: true,top:true,bottom:true}, sheetArea);
  245. }
  246. // sheet.getCell(row,1).text(one.costPrice);
  247. addSheetTagValue(sheet,{nextDataRowIndex:nextDataRowIndex});
  248. rowSetting.id=id;
  249. addCellTagValue(sheet,row,-1,rowSetting);
  250. }
  251. function fitColumn(){
  252. var sheet = spread.getActiveSheet();
  253. sheet.autoFitColumn(0);sheet.autoFitColumn(1);sheet.autoFitColumn(2);
  254. }
  255. function removeMenu(){
  256. for(var i=0;i< spread.contextMenu.menuData.length;i++){
  257. var menu = spread.contextMenu.menuData[i];
  258. var text=menu.text;
  259. if(text=='清除' || text=='插入'|| text=='隐藏'|| text=='显示' ){//去掉过滤、排序
  260. delete spread.contextMenu.menuData[i];
  261. }
  262. }
  263. }
  264. function addMenu(){
  265. }
  266. function refushNum(){
  267. var sheet=spread.getActiveSheet();
  268. $.post('budgetInstController.do?getPostNum',{entityId:entityId,periodYear:periodYear},function(d){
  269. if(d.success){
  270. loopAllRow(sheet,function(row){
  271. var rowTag = sheet.getTag(row,-1);
  272. if(rowTag) {
  273. var rowId = rowTag.id;
  274. if(rowId){
  275. for(var i=0;i<d.obj.length;i++){
  276. var one = d.obj[i];
  277. if(one.postId==rowId){
  278. sheet.setValue(row,selfNumCol,one.num);
  279. break;
  280. }
  281. }
  282. }
  283. }
  284. });
  285. // postNumDetailList['${postNumDetail.postId}']='${postNumDetail.num}';
  286. tip('刷新成功');
  287. }else {
  288. tip(d.msg);
  289. }
  290. },'json');
  291. }