budgetInstVersion-diff.jsp 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@include file="/context/mytags.jsp"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <t:base type="jquery,easyui,tools,DatePicker"></t:base>
  7. <link rel="stylesheet" type="text/css" href="plug-in/SpreadJS/css/gc.spread.sheets.excel2016colorful.13.1.0.css">
  8. <script src="plug-in/SpreadJS/scripts/gc.spread.sheets.all.13.1.0.min.js" type="text/javascript"></script>
  9. <script src="plug-in/SpreadJS/scripts/resources/zh/gc.spread.sheets.resources.zh.13.1.0.min.js" type="text/javascript"></script>
  10. <script src="plug-in/SpreadJS/license.js" type="text/javascript"></script>
  11. <script src="webpage/cn/com/lzt/budget/data/js/budget_tools.js" type="text/javascript"></script>
  12. <meta charset="utf-8" />
  13. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  14. <style>
  15. html{
  16. height:100%;
  17. }
  18. body{
  19. height:98%;
  20. width:98%;
  21. }
  22. .diffWrap{
  23. height: calc(100% - 40px);
  24. display:flex;
  25. flex-direction: column;
  26. }
  27. .sample-spreadsheets{
  28. width:100%;
  29. height:100%;
  30. }
  31. fieldset{
  32. flex:1;
  33. border: 1px solid #E6E6E6;
  34. width:98%;
  35. padding:5px;
  36. }
  37. </style>
  38. </head>
  39. <body>
  40. 选择预算表:
  41. <input type="hidden" id="instId" name="instId" value="${inst.id}"/>
  42. <input id="instName" name="instName" type="text" style="width: 200px" readonly="readonly" class="inputxt" placeholder="请选择预算表" value="${inst.instName}"/>
  43. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openInst()">选择</a>
  44. 版本一
  45. <input type="hidden" id="version0Id" name="version0" value="${instVersion1.id}"/>
  46. <input id="version0" name="version0" type="text" style="width: 200px" readonly="readonly" class="inputxt" placeholder="请选择版本" value="${instVersion1.name}"/>
  47. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openVersion0()">选择</a>
  48. 版本二
  49. <input type="hidden" id="version1Id" name="version1Id" value="${instVersion2.id}"/>
  50. <input id="version1" name="version1" type="text" style="width: 200px" readonly="readonly" class="inputxt" placeholder="请选择版本" value="${instVersion2.name}"/>
  51. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openVersion1()">选择</a>
  52. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="diff()">对比</a>
  53. <div class="diffWrap">
  54. <fieldset>
  55. <legend>版本1</legend>
  56. <div id="v0" class="sample-spreadsheets"></div>
  57. </fieldset>
  58. <fieldset>
  59. <legend>版本2</legend>
  60. <div id="v1" class="sample-spreadsheets"></div>
  61. </fieldset>
  62. </div>
  63. </body>
  64. <script>
  65. function openInst() {
  66. var url ='budgetInstController.do?select';
  67. _select(url, '选择预算表', function (selectedRows) {
  68. var one = selectedRows[0];
  69. var id = one.id;
  70. var name = one.instName;
  71. $('#instId').val(id);
  72. $('#instName').val(name);
  73. }, '800px', '600px');
  74. }
  75. function openVersion0(){
  76. openVersion(0);
  77. }
  78. function openVersion1(){
  79. openVersion(1);
  80. }
  81. function openVersion(index){
  82. var instId= $('#instId').val();
  83. var url ='budgetInstVersionController.do?select&noAuth=1&instId='+instId;
  84. _select(url, '选择版本', function (selectedRows) {
  85. var one = selectedRows[0];
  86. $('#version'+index).val(one.name);
  87. getSelectVersion(one.id,index);
  88. }, '800px', '600px');
  89. }
  90. function getSelectVersion(id,index){
  91. $.ajax({
  92. url: 'budgetInstVersionController/'+id+".do"
  93. ,dataType:'json'
  94. ,type:'GET'
  95. ,async:false
  96. ,success:function (d) {
  97. var json =d.json;
  98. if(index==0) {
  99. spread0.fromJSON(JSON.parse(json));
  100. ready0=true;
  101. }
  102. if(index==1) {
  103. spread1.fromJSON(JSON.parse(json));
  104. ready1=true;
  105. }
  106. setTimeout(bindRowColumnChange,500);
  107. }
  108. });
  109. }
  110. var spread0,spread1;
  111. var ready0=false;
  112. var ready1=false;
  113. $(function(){
  114. spread0 = new GC.Spread.Sheets.Workbook(document.getElementById("v0"), { sheetCount: 1 });
  115. spread1 = new GC.Spread.Sheets.Workbook(document.getElementById("v1"), { sheetCount: 1 });
  116. var v0Id = $('#version0Id').val()
  117. if(v0Id){
  118. getSelectVersion(v0Id,0);
  119. }
  120. var v1Id = $('#version1Id').val()
  121. if(v1Id){
  122. getSelectVersion(v1Id,1);
  123. }
  124. diff();
  125. })
  126. function diff(){
  127. if(!ready0 | !ready1) return;
  128. var layerIndex = layer.msg('对比中,请稍候···', {
  129. time : 3000*1000,
  130. shade: 0.1});
  131. setTimeout(function(){
  132. spread0.options.highlightInvalidData = true;
  133. spread1.options.highlightInvalidData = true;
  134. var sheet0 = spread0.getActiveSheet();
  135. var sheet1 = spread1.getActiveSheet();
  136. loopAllCell(sheet0,function(row,col){
  137. var v0=sheet0.getValue(row,col);
  138. var v1=sheet1.getValue(row,col);
  139. if(v0!=v1){
  140. var validator = createValidator(v1);
  141. sheet0.getCell(row,col).validator(validator);
  142. }
  143. });
  144. loopAllCell(sheet1,function(row,col){
  145. var v0=sheet0.getValue(row,col);
  146. var v1=sheet1.getValue(row,col);
  147. if(v0!=v1){
  148. var validator = createValidator(v0);
  149. sheet1.getCell(row,col).validator(validator);
  150. }
  151. });
  152. layer.close(layerIndex);
  153. },1000);
  154. }
  155. function loopAllCell(sheet,fn){
  156. var rowCount = sheet.getRowCount();
  157. var colCount = sheet.getColumnCount();
  158. for(var i=0;i<rowCount;i++){
  159. for(var j=0;j<colCount;j++){
  160. fn(i,j);
  161. }
  162. }
  163. }
  164. function createValidator(equalsToValue){
  165. var nCondition = new GC.Spread.Sheets.ConditionalFormatting.Condition(GC.Spread.Sheets.ConditionalFormatting.ConditionType.cellValueCondition);
  166. nCondition.compareType(GC.Spread.Sheets.ConditionalFormatting.GeneralComparisonOperators.equalsTo);
  167. nCondition.expected(equalsToValue);
  168. nCondition.treatNullValueAsZero(false);
  169. var validator = new GC.Spread.Sheets.DataValidation.DefaultDataValidator(nCondition);
  170. validator.type(GC.Spread.Sheets.DataValidation.CriteriaType.custom);
  171. validator.ignoreBlank(false);
  172. validator.highlightStyle({
  173. type: GC.Spread.Sheets.DataValidation.HighlightType.dogEar,
  174. color: 'red',
  175. position: GC.Spread.Sheets.DataValidation.HighlightPosition.topLeft
  176. });
  177. return validator;
  178. }
  179. function bindRowColumnChange(){
  180. if(!ready0 | !ready1) return;
  181. var sheet0 = spread0.getActiveSheet();
  182. var sheet1 = spread1.getActiveSheet();
  183. sheet0.unbindAll();
  184. sheet1.unbindAll();
  185. sheet0.bind(GC.Spread.Sheets.Events.TopRowChanged, function (sender, args) {
  186. //将显示的sheet1的顶部行设置为sheet2(垂直滚动同步)。
  187. sheet1.showRow(args.newTopRow, GC.Spread.Sheets.VerticalPosition.top);
  188. });
  189. sheet1.bind(GC.Spread.Sheets.Events.TopRowChanged, function (sender, args) {
  190. //将显示的sheet1的顶部行设置为sheet2(垂直滚动同步)。
  191. sheet0.showRow(args.newTopRow, GC.Spread.Sheets.VerticalPosition.top);
  192. });
  193. sheet0.bind(GC.Spread.Sheets.Events.LeftColumnChanged, function (sender, args) {
  194. //将sheet1显示的左列设置为sheet2(水平滚动同步)。
  195. sheet1.showColumn(args.newLeftCol, GC.Spread.Sheets.HorizontalPosition.left);
  196. });
  197. sheet1.bind(GC.Spread.Sheets.Events.LeftColumnChanged, function (sender, args) {
  198. //将sheet1显示的左列设置为sheet2(水平滚动同步)。
  199. sheet0.showColumn(args.newLeftCol, GC.Spread.Sheets.HorizontalPosition.left);
  200. });
  201. }
  202. </script>
  203. </html>