budgetTempSheet-measure.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880
  1. //var columnCount = sheet.getColumnCount();
  2. //var rowCount = sheet.getRowCount();
  3. //sheet.deleteRows(1,1); 删除行
  4. //var menuData = spread.contextMenu.menuData;
  5. //workArea :工作区域,“复制”操作的可用区域为viewport + colHeader + rowHeader + slicer + corner。
  6. $(function(){
  7. spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 1 });
  8. initSpread();
  9. });
  10. function initSpread(){
  11. spread.suspendPaint();
  12. if(dbJson){//数据库
  13. // spread.fromJSON(JSON.parse(dbJson));
  14. spread.fromJSON(dbJson);
  15. }
  16. spread.options.newTabVisible = false;//取消新增sheet按钮
  17. spread.options.allowExtendPasteRange =true;//扩展粘贴区域
  18. bindEvent(spread);
  19. var sheet = spread.getActiveSheet();
  20. var setting = sheet.tag();
  21. addContextMenu(spread);
  22. addDataCellMenu(spread)
  23. setMenuView(spread);
  24. // sheet.frozenRowCount(headRowCount);//冻结头部
  25. // sheet.options.frozenlineColor = 'red';//冻结线颜色
  26. setDefaultLock(sheet);
  27. // sheet.selectionPolicy(GC.Spread.Sheets.SelectionPolicy.single);//不让多选
  28. spread.resumePaint();
  29. }
  30. function bindEvent(spread){
  31. bindCheckNum(spread);
  32. spread.bind(GC.Spread.Sheets.Events.EnterCell, function (event, data) {//点击cell事件
  33. var row = data.row;
  34. var col = data.col;
  35. var sheet = data.sheet;
  36. var cellTag = sheet.getTag(row,col);
  37. disableBindButton(true);
  38. if(readOnly=='false') {
  39. $('#rowInfo').show();
  40. $('#colInfo').show();
  41. $('#info3').show();
  42. $('#info2').hide();
  43. if(cellTag) {
  44. var bindDirection=cellTag.bindDirection;
  45. if(bindDirection){//表头
  46. if(bindDirection=='row'){
  47. $('#rowTimeInput').val(cellTag.periodDetailName);
  48. if(cellTag.measureName) {
  49. $('#rowGoalsInput').val(cellTag.customCode + " " + cellTag.measureName);
  50. }
  51. $('input[name="includeTaxRow"][value=' + cellTag.includeTax + ']').attr('checked', 'checked');
  52. $('input[name="expectRow"][value=' + cellTag.expect + ']').attr('checked', 'checked');
  53. }else if(bindDirection=='col'){
  54. $('#colTimeInput').val(cellTag.periodDetailName);
  55. if(cellTag.measureName){
  56. $('#colGoalsInput').val(cellTag.customCode+" "+cellTag.measureName);
  57. }
  58. $('input[name="includeTaxCol"][value=' + cellTag.includeTax + ']').attr('checked', 'checked');
  59. $('input[name="expectCol"][value=' + cellTag.expect + ']').attr('checked', 'checked');
  60. }
  61. }else {//非表头
  62. showCellBindInfo(sheet,row,col);
  63. }
  64. }
  65. }else if(readOnly=='true'){
  66. showCellBindInfo(sheet,row,col);
  67. }
  68. //单元格属性
  69. if(cellTag){
  70. var datatype =cellTag.datatype;
  71. var datatypeValue= measureDataTypeList[datatype];
  72. if(!datatypeValue) datatypeValue='';
  73. $('#goalsDataType').html(datatypeValue);
  74. if(cellTag.readOnly==1){
  75. $('#readOnly').html('是');
  76. }else {
  77. $('#readOnly').html('否');
  78. }
  79. var showFuntionTxt = $('#showFuntionTxt');
  80. if(cellTag.functionId){
  81. showFuntionTxt.show();
  82. showFuntionTxt.find('span').html(cellTag.functionTxt);
  83. }else{
  84. showFuntionTxt.hide();
  85. }
  86. var controlFlagNameDiv = $('#controlFlagName');
  87. if(cellTag.controlFlagName){
  88. controlFlagNameDiv.show();
  89. controlFlagNameDiv.find('span').html(cellTag.controlFlagName);
  90. }else {
  91. controlFlagNameDiv.hide();
  92. }
  93. }else {
  94. $('#readOnly').html('');
  95. $('#showFuntionTxt').hide();
  96. }
  97. // sheet.startEdit(false); //单击修改
  98. });
  99. /* spread.bind(GC.Spread.Sheets.Events.ButtonClicked, function (e, args) {//点击按钮事件
  100. var sheet = args.sheet, row = args.row, col = args.col;
  101. var cellType = sheet.getCellType(row, col);
  102. });*/
  103. spread.bind(GC.Spread.Sheets.Events.CellChanged, function (e, info) {
  104. // console.log(info)
  105. if(info.sheetArea === GC.Spread.Sheets.SheetArea.viewport){
  106. var sheet =info.sheet;
  107. var row = info.row;
  108. var col = info.col;
  109. if(info.propertyName=='value'){//值变化
  110. }
  111. if(info.propertyName=='formula'){//公式
  112. if(info.newValue==null){
  113. sheet.getCell(row,col).backColor('white');
  114. }else{
  115. sheet.getCell(row,col).backColor('yellow');
  116. }
  117. }
  118. }
  119. });
  120. // alert("Cell index (" + info.row + "," + info.col + ")");
  121. }
  122. function setDefaultLock(sheet){
  123. var option = {
  124. allowSelectLockedCells:true,
  125. allowSelectUnlockedCells:true,
  126. allowFilter: true,
  127. allowSort: false,
  128. allowResizeRows: true,
  129. allowResizeColumns: true,
  130. allowEditObjects: false,
  131. allowDragInsertRows: false,
  132. allowDragInsertColumns: false,
  133. allowInsertRows: true,
  134. allowInsertColumns: true,
  135. allowDeleteRows: true,
  136. allowDeleteColumns: true
  137. };
  138. sheet.options.protectionOptions = option;
  139. sheet.options.isProtected = true;
  140. var defaultStyle = sheet.getDefaultStyle() //默认的样式,
  141. defaultStyle.locked=false;
  142. sheet.setDefaultStyle(defaultStyle);
  143. }
  144. function addContextMenu(){
  145. for(var i=0;i< spread.contextMenu.menuData.length;i++){
  146. var menu = spread.contextMenu.menuData[i];
  147. var menuName=menu.name;
  148. if(menuName=='gc.spread.filter' || menuName=='gc.spread.sort' ){//去掉过滤、排序
  149. delete spread.contextMenu.menuData[i];
  150. }
  151. }
  152. // command: showLoginDialog,
  153. }
  154. //固定后 右键菜单
  155. function addDataCellMenu(spread){
  156. var sheet=spread.getActiveSheet();
  157. /*var controlFlag ={text: '预算控制方案',name: 'controlFlag',workArea: 'viewport',dataCellMenu:1};
  158. controlFlag.subMenu=[];
  159. if(budgetControlArray.length>0) {
  160. spread.contextMenu.menuData.push(controlFlag);
  161. for(var i=0;i<budgetControlArray.length;i++){
  162. let one = budgetControlArray[i];
  163. controlFlag.subMenu.push({text: one.name,name: 'controlFlag_'+one.id,workArea: 'viewport',command:function(){
  164. setSelectionTagValue(sheet,'cell',{controlFlag:one.id,controlFlagName:one.name});
  165. }});
  166. }
  167. }*/
  168. var readOnly ={text: '只读',name: 'readOnly',workArea: 'viewport',dataCellMenu:1};
  169. readOnly.subMenu= [{text: '是',name: 'readOnly_yes',workArea: 'viewport',command:setReadonly}
  170. ,{text: '否',name: 'readOnly_no',workArea: 'viewport',command:setReadonly}]
  171. spread.contextMenu.menuData.push(readOnly);
  172. var clearNotSelectMenu ={text: '清空其他区域',name: 'clearNotSelect',workArea: 'viewport',command:clearNotSelect};
  173. spread.contextMenu.menuData.push(clearNotSelectMenu);
  174. addDimFunctionMenu(spread);
  175. addDimFunctionCostbreakdownMenu(spread);
  176. var dimMatchMenu ={text: '维度匹配',name: 'dimLike',workArea: 'viewport',command:dimMatch};
  177. dimMatchMenu.subMenu= [{text: '匹配行维度',name: 'dimLikeRow',workArea: 'viewport',command:dimMatchRow}
  178. ,{text: '匹配列维度',name: 'dimLikeCol',workArea: 'viewport',command:dimMatchCol}]
  179. spread.contextMenu.menuData.push(dimMatchMenu);
  180. }
  181. function setMenuView(spread){
  182. function CustomMenuView() {
  183. }
  184. CustomMenuView.prototype = new GC.Spread.Sheets.ContextMenu.MenuView();
  185. CustomMenuView.prototype.createMenuItemElement = function (menuItemData) {
  186. var self = this;
  187. if (menuItemData.name === "bind") {
  188. /* var containers = GC.Spread.Sheets.ContextMenu.MenuView.prototype.createMenuItemElement.call(self, menuItemData);
  189. var supMenuItemContainer = containers[0];
  190. while (supMenuItemContainer.firstChild) {
  191. supMenuItemContainer.removeChild(supMenuItemContainer.firstChild);
  192. }
  193. var colorPicker = createColorpicker();
  194. supMenuItemContainer.appendChild(colorPicker);
  195. return supMenuItemContainer;*/
  196. } else {
  197. var menuItemView = GC.Spread.Sheets.ContextMenu.MenuView.prototype.createMenuItemElement.call(self, menuItemData);
  198. return menuItemView;
  199. }
  200. };
  201. CustomMenuView.prototype.getCommandOptions = function (menuItemData, host, event) {
  202. var option={};
  203. if (menuItemData) {
  204. var name =menuItemData.name;
  205. if(name && name.indexOf('timeRowMenu')==0) {
  206. var text = menuItemData.text;
  207. for(var i=0;i<periodDetailList.length;i++){
  208. var detail = periodDetailList[i];
  209. if(detail.name==text){
  210. option.id=detail.id;
  211. option.name=detail.name;
  212. break;
  213. }
  214. }
  215. }
  216. if(name && name=='controlFlag1') {
  217. option.controlFlag=1;
  218. }
  219. if(name && name=='readOnly_yes') {
  220. option.readOnly=1;
  221. }else if(name && name=='readOnly_no'){
  222. option.readOnly=0;
  223. }
  224. /*if(name && name.indexOf('goalsDataType')==0){
  225. var code = name.substr('goalsDataType_'.length);
  226. for(var i=0;i<goalsDataTypeList.length;i++){
  227. var dataType = goalsDataTypeList[i];
  228. if(dataType.code==code){
  229. option.goalsDataType=code;
  230. option.goalsDataTypeName=dataType.name;
  231. break;
  232. }
  233. }
  234. }*/
  235. }
  236. // console.log(option);
  237. return option;
  238. };
  239. spread.contextMenu.menuView = new CustomMenuView();
  240. }
  241. //添加常用style
  242. function addNameStyle(sheet){
  243. var lockStyle = new GC.Spread.Sheets.Style();
  244. lockStyle.name='lock';
  245. lockStyle.locked = true;
  246. sheet.addNamedStyle(lockStyle);
  247. var unLockStyle = new GC.Spread.Sheets.Style();
  248. unLockStyle.name='unLock';
  249. unLockStyle.locked = false;
  250. sheet.addNamedStyle(unLockStyle);
  251. }
  252. function save(afterSaveFunction){
  253. var sheet = spread.getActiveSheet();
  254. var tag = sheet.tag();
  255. var hasFix = false;
  256. if(tag) {
  257. if(tag.fix==true){
  258. hasFix=true;
  259. }
  260. }
  261. if(!hasFix){
  262. _alert('请先生成数据单元格');
  263. return;
  264. }
  265. _commonSave({type:'normal'},afterSaveFunction);
  266. }
  267. function SheetSetting() {
  268. this.bindTime=false;
  269. this.bindIncludeTax=false;
  270. this.bindGoals=false;
  271. }
  272. SheetSetting.prototype.toJSON = function () {
  273. var settings ={};
  274. var keys =Object.keys(this);
  275. for(var i=0;i<keys.length;i++){
  276. var key =keys[i];
  277. settings[key]=this[key];
  278. }
  279. return settings;
  280. };
  281. SheetSetting.prototype.fromJSON = function (settings) {
  282. };
  283. function CellSetting() {
  284. }
  285. CellSetting.prototype.toJSON = function () {
  286. var settings ={};
  287. var keys =Object.keys(this);
  288. for(var i=0;i<keys.length;i++){
  289. var key =keys[i];
  290. settings[key]=this[key];
  291. }
  292. return settings;
  293. };
  294. CellSetting.prototype.fromJSON = function (settings) {
  295. console.log('fromjson');
  296. };
  297. function RowSetting(measureId,measureName) {
  298. this.measureId = measureId;
  299. this.measureName= measureName;
  300. }
  301. RowSetting.prototype.toJSON = function () {
  302. var settings ={};
  303. var keys =Object.keys(this);
  304. for(var i=0;i<keys.length;i++){
  305. var key =keys[i];
  306. settings[key]=this[key];
  307. }
  308. return settings;
  309. };
  310. RowSetting.prototype.fromJSON = function (settings) {
  311. };
  312. function ColSetting() {}
  313. ColSetting.prototype.toJSON = function () {
  314. var settings ={};
  315. var keys =Object.keys(this);
  316. for(var i=0;i<keys.length;i++){
  317. var key =keys[i];
  318. settings[key]=this[key];
  319. }
  320. return settings;
  321. };
  322. ColSetting.prototype.fromJSON = function (settings) {
  323. console.log('fromjson');
  324. };
  325. function _openDialog(url,title,okCallback,width,height){
  326. if(!width){
  327. width='500px';
  328. }
  329. if(!height){
  330. height='350px';
  331. }
  332. if(width=="100%"){
  333. width = window.top.document.body.offsetWidth;
  334. }
  335. if(height=="100%") {
  336. height =window.top.document.body.offsetHeight-100;
  337. }
  338. var _selectDialog= $.dialog({content:'url:'+url
  339. , zIndex: getzIndex()
  340. , title:title , lock: true, width:width, height: height, opacity: 0.4, button: [
  341. {name: '确定', callback:function () {
  342. var iframe = _selectDialog.iframe.contentWindow;
  343. if(okCallback){
  344. var b = okCallback(iframe);
  345. return b;
  346. }
  347. }
  348. , focus: true},
  349. {name: '取消', callback: function (){}}
  350. ]}).zindex();
  351. return _selectDialog;
  352. }
  353. function setIncludeTaxRow() {
  354. setIncludeTax('row');
  355. }
  356. function setIncludeTaxCol() {
  357. setIncludeTax('col');
  358. }
  359. function setIncludeTax(type){
  360. var sheet = spread.getActiveSheet();
  361. var itemName='';
  362. disableBindButton();
  363. if(type=='row'){
  364. itemName="includeTaxRow"
  365. }else {
  366. itemName="includeTaxCol"
  367. }
  368. $('input[name="'+itemName+'"]').removeAttr('disabled');
  369. var include = $('input[name="'+itemName+'"]:checked').val();
  370. beforeBindDim(sheet,type);
  371. setSelectionTagValue(sheet,'cell',{includeTax:include});
  372. setSelectionTagValue(sheet,'cell',{bindDirection:type});
  373. setHeader(sheet,type);
  374. }
  375. function setTimeRow(){
  376. setTime('row');
  377. }
  378. function setTimeCol(){
  379. setTime('col');
  380. }
  381. function setTime(type){
  382. var sheet = spread.getActiveSheet();
  383. var url ='budgetPeriodDetailController.do?select&periodYear='+periodYear;
  384. _select(url, '选择时间维度', function (selectedRows) {
  385. var one = selectedRows[0];
  386. var id = one.id;
  387. var name = one.name;
  388. var obj = {periodDetailId:id,periodDetailName:name};
  389. setTimeValue(sheet,type,obj);
  390. }, '800px', '600px');
  391. }
  392. function setTimeValue(sheet,type,valueObj){
  393. var name = valueObj.periodDetailName;
  394. disableBindButton();
  395. if(type=='row'){
  396. $('#rowTimeInput').val(name);
  397. $('#rowTimeBind').show();
  398. }else {
  399. $('#colTimeInput').val(name);
  400. $('#colTimeBind').show();
  401. }
  402. beforeBindDim(sheet,type);
  403. setSelectionTagValue(sheet,'cell',valueObj);
  404. setSelectionTagValue(sheet,'cell',{bindDirection:type});
  405. setHeader(sheet,type);
  406. }
  407. function setMeasureRow() {
  408. setMeasure('row');
  409. }
  410. function setMeasureCol() {
  411. setMeasure('col');
  412. }
  413. function setMeasure(type){
  414. var sheet = spread.getActiveSheet();
  415. var url = 'budgetMeasureController.do?select';
  416. _openDialog(url,'选择预算指标',function(iframe){
  417. var selectedRows = iframe.getSelectedRow();
  418. if(selectedRows.length==0){
  419. iframe.tip('请选择预算指标');
  420. return false;
  421. }
  422. var one = selectedRows[0];
  423. var code = one.code;
  424. var id = one.id;
  425. var name = one.name;
  426. var o={measureId:id,measureName:name};
  427. o.datatype=one.datatype;
  428. o.fractionNum=one.fractionNum;
  429. o.currencySymbol=one.currencySymbol;
  430. o.showType=one.showType;
  431. o.thousandth=one.thousandth;
  432. o.controlFlag=one.controlFlag;
  433. o.customCode=one.customCode;
  434. setMeasureValue(sheet,type,o);
  435. },'800px','600px');
  436. }
  437. function setMeasureValue(sheet,type,valueObj){
  438. var name = valueObj.customCode+" "+valueObj.measureName;
  439. disableBindButton();
  440. if(type=='row'){
  441. $('#rowGoalsInput').val(name);
  442. $('#rowGoalsBind').show();
  443. }else {
  444. $('#colGoalsInput').val(name);
  445. $('#colGoalsBind').show();
  446. }
  447. beforeBindDim(sheet,type);
  448. setSelectionTagValue(sheet,'cell',valueObj);
  449. setSelectionTagValue(sheet,'cell',{bindDirection:type});
  450. setHeader(sheet,type);
  451. }
  452. //生成数据单元格
  453. function fix() {
  454. var sheet = spread.getActiveSheet();
  455. var tag = sheet.tag();
  456. var headerArr=tag.headerArr;
  457. for(var i in headerArr){
  458. var arr=i.split('#');
  459. var row = arr[0];
  460. var col = arr[1];
  461. var cellTag = sheet.getTag(row,col);
  462. var rcObj = $.extend({},cellTag);
  463. delete rcObj['bindDirection'];
  464. delete rcObj['rowHeader'];
  465. delete rcObj['colHeader'];
  466. if(cellTag.bindDirection=='row'){
  467. sheet.setTag(row,-1,rcObj);
  468. }
  469. if(cellTag.bindDirection=='col'){
  470. sheet.setTag(-1,col,rcObj);
  471. }
  472. }
  473. /*
  474. sheet.getRange(0,-1,dataStartRow,-1).locked(true);
  475. sheet.getRange(-1,0,-1,dataStartCol).locked(true);
  476. spread.contextMenu.menuData.forEach(function (item, index) {
  477. if (item && (item.name == "bindCol" || item.name == "bindRow")) {
  478. delete spread.contextMenu.menuData.splice(index);
  479. }
  480. });
  481. */
  482. // addDataCellMenu(spread);
  483. var selections = sheet.getSelections();
  484. var changeCell =0;
  485. for(var i=0;i<selections.length;i++){
  486. var select = selections[i];
  487. var row = select.row;
  488. var col = select.col;
  489. var rowCount = select.rowCount;
  490. var colCount = select.colCount;
  491. for(var r=row;r<row+rowCount;r++){
  492. for(var c=col;c<col+colCount;c++){
  493. var rs = sheet.getTag(r,-1);
  494. var cs = sheet.getTag(-1,c);
  495. var cellSetting = sheet.getTag(r, c);
  496. if (!cellSetting) {
  497. cellSetting = new CellSetting();
  498. }
  499. if(rs) $.extend(cellSetting,rs);
  500. if(cs) $.extend(cellSetting,cs);
  501. $.extend(cellSetting,{'dataCell':true});
  502. var cellString = getCellStr(sheet,r,c);
  503. cellString=cellString.replace(/\$/g,'');
  504. if(!cellSetting.measureId) {
  505. _alert("单元格:"+cellString+"未绑定指标维度")
  506. return;
  507. }
  508. if(!cellSetting.periodDetailId) {
  509. _alert("单元格:"+cellString+"未绑定时间维度")
  510. return;
  511. }
  512. if(typeof cellSetting.includeTax =='undefined') {
  513. _alert("单元格:"+cellString+"未绑定含税维度")
  514. return;
  515. }
  516. if(typeof cellSetting.expect =='undefined') {
  517. _alert("单元格:"+cellString+"未绑定预实维度")
  518. return;
  519. }
  520. sheet.setTag(r,c, cellSetting);
  521. changeCell++;
  522. if(cellSetting.datatype=='amount'){
  523. var currencySymbol = cellSetting.currencySymbol;//货币符号
  524. var thousandth = cellSetting.thousandth;//千分位
  525. var fractionNum = cellSetting.fractionNum;//小数位
  526. var format='';
  527. if(currencySymbol) format+=currencySymbol+'* ';
  528. if(thousandth) format+='#,###';
  529. if(!fractionNum&&fractionNum!=0) {
  530. fractionNum='2';
  531. }
  532. if(fractionNum!=0){
  533. format+='.';
  534. for(var n=0;n<fractionNum;n++) {
  535. format+='0';
  536. }
  537. }
  538. sheet.setFormatter(r, c, format);
  539. }
  540. }
  541. }
  542. }
  543. if(changeCell>0){
  544. setSheetTag(sheet,{fix:true})
  545. $.messager.alert('信息','操作成功');
  546. }else{
  547. $.messager.alert('信息','请选择单元格');
  548. }
  549. }
  550. function setControlFlag(spread,options){
  551. var sheet = spread.getActiveSheet();
  552. setSelectionTagValue(sheet,'cell',options);
  553. }
  554. function setSheetTag(sheet,value) {
  555. var setting = sheet.tag();
  556. if(!setting){
  557. setting = new SheetSetting();
  558. }
  559. $.extend(setting,value);
  560. sheet.tag(setting);
  561. }
  562. function setDataStartIndex(sheet,type,row,col){
  563. }
  564. function setReadonly(spread,options){
  565. var sheet = spread.getActiveSheet();
  566. var selections = sheet.getSelections();
  567. var select = selections[0];
  568. var row = select.row;
  569. var col = select.col;
  570. if(options.readOnly==1){
  571. sheet.getCell(row,col).backColor('grey');
  572. }else {
  573. sheet.getCell(row,col).backColor('white');
  574. }
  575. setSelectionTagValue(sheet,'cell',options);
  576. }
  577. function setHeader(sheet,type){
  578. var o = {};
  579. //inst 会用到 显示行表头 或 列表头
  580. if(type=='row'){
  581. o[_vars.rowHeader]='true';
  582. }else if(type=='col'){
  583. o[_vars.colHeader]='true';
  584. }
  585. setSelectionTagValue(sheet,'cell',o);
  586. }
  587. function disableBindButton(clearValue){
  588. if(clearValue){
  589. $('#rowTimeInput').val('');
  590. $('#colTimeInput').val('');
  591. $('#rowGoalsInput').val('');
  592. $('#colGoalsInput').val('');
  593. $('input[name="includeTaxRow"]').removeAttr('checked');
  594. $('input[name="includeTaxCol"]').removeAttr('checked');
  595. $('input[name="expectRow"]').removeAttr('checked');
  596. $('input[name="expectCol"]').removeAttr('checked');
  597. }
  598. /*
  599. $('#rowTimeBind').hide();
  600. $('#rowGoalsBind').hide();
  601. $('input[name="includeTaxRow"]').attr('disabled','disabled');
  602. $('input[name="expectRow"]').attr('disabled','disabled');
  603. $('#colTimeBind').hide();
  604. $('#colGoalsBind').hide();
  605. $('input[name="includeTaxCol"]').attr('disabled','disabled');
  606. $('input[name="expectCol"]').attr('disabled','disabled');
  607. */
  608. }
  609. function clearBind(sheet,type,row,col){
  610. if(type=='row'){
  611. clearRowBindInput();
  612. }else {
  613. clearColBindInput();
  614. }
  615. sheet.setTag(row,col,{});
  616. }
  617. function clearRowBindInput(){
  618. $('#rowTimeInput').val('');
  619. $('#rowGoalsInput').val('');
  620. $('input[name="includeTaxRow"]').removeAttr('checked');
  621. $('input[name="expectRow"]').removeAttr('checked');
  622. }
  623. function clearColBindInput(){
  624. $('#colTimeInput').val('');
  625. $('#colGoalsInput').val('');
  626. $('input[name="includeTaxCol"]').removeAttr('checked');
  627. $('input[name="expectCol"]').removeAttr('checked');
  628. }
  629. function setExpectRow(){
  630. setExpect('row');
  631. }
  632. function setExpectCol(){
  633. setExpect('col');
  634. }
  635. function setExpect(type){
  636. var sheet = spread.getActiveSheet();
  637. var itemName='';
  638. disableBindButton();
  639. if(type=='row'){
  640. itemName="expectRow"
  641. }else {
  642. itemName="expectCol"
  643. }
  644. $('input[name="'+itemName+'"]').removeAttr('disabled');
  645. var expect = $('input[name="'+itemName+'"]:checked').val();
  646. beforeBindDim(sheet,type);
  647. setSelectionTagValue(sheet,'cell',{expect:expect});
  648. setSelectionTagValue(sheet,'cell',{bindDirection:type});
  649. setHeader(sheet,type);
  650. }
  651. function dimMatchRow(spread,options){
  652. dimMatch(spread,options,'row')
  653. }
  654. function dimMatchCol(spread,options){
  655. dimMatch(spread,options,'col')
  656. }
  657. function dimMatch(spread,options,type) {
  658. var sheet = spread.getActiveSheet();
  659. var selections = sheet.getSelections();
  660. var select = selections[0];
  661. var row = select.row;
  662. var col = select.col;
  663. var rowCount = select.rowCount;
  664. var colCount = select.colCount;
  665. var params= {};
  666. var totalCol = col + colCount;
  667. var c = 0;
  668. for(var i=row;i<row+rowCount;i++) {
  669. for (var j = col; j < totalCol; j++) {
  670. var cellValue = sheet.getValue(i,j);
  671. if(cellValue){
  672. params['list['+c+'].row']=i;
  673. params['list['+c+'].col']=j;
  674. params['list['+c+'].cellValue']=cellValue;
  675. c++;
  676. }
  677. }
  678. }
  679. params.periodId=periodId;
  680. $.post('budgetTempSheetController.do?dimMatch',params,function(d){
  681. if(d.success){
  682. sheet.clearSelection();
  683. var list = d.obj.list;
  684. for(var i=0;i<list.length;i++){
  685. var one = list[i];
  686. var row =one.row;
  687. var col = one.col;
  688. var bindDirection =type?type:one.bindDirection;
  689. if(one.bindDim=='measure'){
  690. sheet.setSelection(row,col, 1, 1);
  691. setMeasureValue(sheet,bindDirection,one.bindValue);
  692. }
  693. if(one.bindDim=='period'){
  694. sheet.setSelection(row,col, 1, 1);
  695. setTimeValue(sheet,bindDirection,one.bindValue);
  696. }
  697. }
  698. sheet.clearSelection();
  699. tip('匹配成功');
  700. }else {
  701. tip('匹配失败');
  702. }
  703. },'json')
  704. }
  705. function beforeBindDim(sheet,type){
  706. checkChangeDircetion(sheet,type);
  707. addHeaderCell(sheet);
  708. }
  709. //检查是否换方向绑定
  710. function checkChangeDircetion(sheet,type){
  711. var selections = sheet.getSelections();
  712. var select = selections[0];
  713. var row = select.row;
  714. var col = select.col;
  715. var cellTag=sheet.getTag(row,col);
  716. if(!cellTag) return;
  717. var oldBindDirection = cellTag.bindDirection;
  718. if(oldBindDirection && oldBindDirection!=type){
  719. clearBind(sheet,oldBindDirection,row,col);
  720. }
  721. }
  722. function bindCheckNum(spread) {
  723. spread.bind(GC.Spread.Sheets.Events.EditEnding, function (sender, args) {
  724. var sheet = args.sheet;
  725. var row=args.row;
  726. var col=args.col;
  727. var cellTag = sheet.getTag(row,col);
  728. if(cellTag) {
  729. if(cellTag.dataCell==true && cellTag.datatype && cellTag.datatype!='txt'){
  730. var value =args.editingText;
  731. var reg=/^(-?\d+)(\.\d+)?$/;
  732. if(value){
  733. if(value.indexOf('=')!=0){
  734. if(!reg.test(value)){
  735. args.cancel = true;
  736. }
  737. }
  738. }
  739. }
  740. }
  741. });
  742. }
  743. function addHeaderCell(sheet){
  744. var selections = sheet.getSelections();
  745. var select = selections[0];
  746. var row = select.row;
  747. var col = select.col;
  748. var tag = sheet.tag();
  749. if(!tag) tag={};
  750. var headerArr=tag.headerArr;
  751. if(!headerArr){
  752. headerArr={};
  753. tag.headerArr=headerArr;
  754. addSheetTagValue(sheet,tag);
  755. }
  756. var key = row+"#"+col;
  757. headerArr[key]='1';
  758. }
  759. function removeHeaderCell(sheet,row,col){
  760. var tag = sheet.tag();
  761. var headerArr=tag.headerArr;
  762. var key = row+"#"+col;
  763. delete headerArr[key];
  764. }
  765. //清空行维度
  766. function removeRowBind(){
  767. var sheet=spread.getActiveSheet();
  768. var selections = sheet.getSelections();
  769. var select = selections[0];
  770. var row = select.row;
  771. var col = select.col;
  772. var cellTag = sheet.getTag(row,col);
  773. if(cellTag){
  774. var bindDirection = cellTag.bindDirection;
  775. if(bindDirection){
  776. if(bindDirection=='row'){
  777. clearRowBindInput();
  778. sheet.setTag(row,col,{});
  779. removeHeaderCell(sheet,row,col);
  780. }
  781. }
  782. }
  783. }
  784. //清空列维度
  785. function removeColBind(){
  786. var sheet=spread.getActiveSheet();
  787. var selections = sheet.getSelections();
  788. var select = selections[0];
  789. var row = select.row;
  790. var col = select.col;
  791. var cellTag = sheet.getTag(row,col);
  792. if(cellTag){
  793. var bindDirection = cellTag.bindDirection;
  794. if(bindDirection){
  795. if(bindDirection=='col'){
  796. clearColBindInput();
  797. sheet.setTag(row,col,{});
  798. removeHeaderCell(sheet,row,col);
  799. }
  800. }
  801. }
  802. }
  803. function showCellBindInfo(sheet,row,col){
  804. $('#rowInfo').hide();$('#colInfo').hide();
  805. $('#info3').show();$('#info2').show();
  806. var cellTag = sheet.getTag(row,col);
  807. var periodDetailName=cellTag.periodDetailName;
  808. var measureName=cellTag.customCode+" "+cellTag.measureName;
  809. var includeTax=cellTag.includeTax;
  810. var expect = cellTag.expect;
  811. $('#timeInput').val(periodDetailName);
  812. $('#goalsInput').val(measureName);
  813. $('input[name="includeTax"]').removeAttr('checked');
  814. $('input[name="includeTax"][value=' + includeTax + ']').attr('checked', 'checked');
  815. $('input[name="expect"]').removeAttr('checked');
  816. $('input[name="expect"][value=' + expect + ']').attr('checked', 'checked');
  817. }