dimFunction.jsp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494
  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. <meta charset="utf-8" />
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  9. <style>
  10. .function_left {
  11. flex:1;
  12. border:1px solid #cccccc;
  13. padding:5px;
  14. margin-right:10px;
  15. margin-top:10px;
  16. }
  17. .function_right {
  18. flex:1
  19. }
  20. .unSignItem {
  21. width:100px;
  22. height:20px;
  23. display: inline-block;
  24. font-size:20px;
  25. text-align: center;
  26. padding:2px;
  27. cursor:pointer;
  28. border:2px solid gray;
  29. border-radius:20px;
  30. }
  31. .signItem {
  32. font-size:20px;
  33. text-align: center;
  34. }
  35. .itemSelected{
  36. border:2px solid green;
  37. border-radius:20px;
  38. }
  39. .table-bordered td {
  40. border-bottom: 1px solid #cbcbcb;
  41. padding-top:5px;
  42. padding-bottom:5px;
  43. }
  44. .table-bordered tbody>tr:last-child>td {
  45. border-bottom-width: 0;
  46. }
  47. .formtable tr {
  48. height:45px;
  49. }
  50. </style>
  51. </head>
  52. <body style="width:99%">
  53. <input id="id" name="id" type="hidden" value="${entity.id }"/>
  54. <div>
  55. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" onclick="sign('+')">&nbsp;+&nbsp;</a>
  56. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" onclick="sign('-')">&nbsp;-&nbsp;</a>
  57. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" onclick="sign('*')">&nbsp;*&nbsp;</a>
  58. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" onclick="sign('/')">&nbsp;/&nbsp;</a>
  59. </div>
  60. <div style="width:100%;display: flex;">
  61. <fieldset class="function_left">
  62. <legend>公式内容</legend>
  63. <div id="function_txt">
  64. </div>
  65. </fieldset>
  66. <div class="function_right">
  67. <table cellpadding="0" cellspacing="1" class="formtable">
  68. <%--<tr>
  69. <td>维度</td>
  70. <td>选值</td>
  71. </tr>--%>
  72. <tr >
  73. <td align="right"><label class="Validform_label">公式名称:</label></td>
  74. <td class="value">
  75. <input id="name" name="name" type="text" style="width: 150px" class="inputxt" placeholder="请输入公式名称"/>
  76. </td>
  77. </tr>
  78. <tr>
  79. <td align="right">样表:</td>
  80. <td class="value">
  81. <input id="tempSheetId" name="tempSheetId" type="hidden"/>
  82. <input id="tempSheetName" name="tempSheetName" type="text" style="width: 150px" readonly="readonly" class="inputxt" placeholder="请选择预算样表"/>
  83. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openTempSheet()">选择</a>
  84. </td>
  85. </tr>
  86. <tr>
  87. <td align="right">预算主体:</td>
  88. <td class="value">
  89. <input id="entityId" name="entityId" type="hidden"/>
  90. <input id="entityName" name="entityName" type="text" style="width: 150px" readonly="readonly" class="inputxt" placeholder="请选择预算主体"/>
  91. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openEntity('select')">选择</a>
  92. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openEntity('current','当前主体')">当前主体</a>
  93. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openEntity('all','所有主体')">所有主体</a>
  94. </td>
  95. </tr>
  96. <tr>
  97. <td align="right">指标维度:</td>
  98. <td class="value">
  99. <input id="measureId" name="measureId" type="hidden"/>
  100. <input id="measureName" name="measureName" type="text" style="width: 150px" readonly="readonly" class="inputxt" placeholder="请选择指标维度"/>
  101. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openMeasure('select')">选择</a>
  102. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openMeasure('current','当前指标')">当前指标</a>
  103. </td>
  104. </tr>
  105. <tr>
  106. <td align="right">时间维度:</td>
  107. <td class="value">
  108. <input id="periodId" name="periodId" type="hidden"/>
  109. <input id="periodName" name="periodName" type="text" style="width: 150px" readonly="readonly" class="inputxt" placeholder="请选择时间维度"/>
  110. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openPeriodDetail('select')">选择</a>
  111. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openPeriodDetail('current','当前时间')">当前时间</a>
  112. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="openPeriodDetail('all','全年')">全年</a>
  113. </td>
  114. </tr>
  115. <tr>
  116. <td align="right">含税维度:</td>
  117. <td class="value">
  118. <input type="radio" name="includeTax" value="1" checked="checked">含税
  119. <input type="radio" name="includeTax" value="0">不含税
  120. </td>
  121. </tr>
  122. <tr>
  123. <td align="right">预实维度:</td>
  124. <td class="value">
  125. <input type="radio" name="expect" value="1" checked="checked">预算数
  126. <input type="radio" name="expect" value="0">实际数
  127. </td>
  128. </tr>
  129. </table>
  130. <table class="table-bordered">
  131. <tr>
  132. <td>
  133. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-add" operationCode="add" onclick="addDetail()" id="addDetailButton">增加</a>
  134. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-save" onclick="updateDetail()" id="updateDetailButton" style="display:none">保存</a>
  135. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-remove" operationCode="remove" onclick="delDetail()" id="delDetailButton" style="display:none">删除</a>
  136. <a href="javascript:void(0)" class="easyui-linkbutton" plain="true" icon="icon-select" onclick="selectOtherDetail()" >选择已有公式</a>
  137. </td>
  138. </tr>
  139. </table>
  140. </div>
  141. </div>
  142. <script>
  143. var signFlag = true;
  144. var dialog;
  145. function openTempSheet() {
  146. var url ='budgetTempSheetController.do?select';
  147. _select(url, '选择样表', function (selectedRows) {
  148. var one = selectedRows[0];
  149. var id = one.id;
  150. var name = one.name;
  151. $('#tempSheetId').val(id);
  152. $('#tempSheetName').val(name);
  153. clear(false);
  154. }, '800px', '600px')
  155. }
  156. function addDetail(update){
  157. if(signFlag||update){
  158. var name=$('#name').val();
  159. if(!name) {
  160. _alert('请输入公式名称');
  161. return;
  162. }
  163. var tempSheetId=$('#tempSheetId').val();
  164. if(!tempSheetId){
  165. _alert('请选择样表');
  166. return;
  167. }
  168. var entityId=$('#entityId').val();
  169. if(!entityId){
  170. _alert('请选择预算主体');
  171. return;
  172. }
  173. var measureId=$('#measureId').val();
  174. if(!measureId){
  175. _alert('请选择指标维度');
  176. return;
  177. }
  178. var periodId=$('#periodId').val();
  179. if(!periodId){
  180. _alert('请选择时间维度');
  181. return;
  182. }
  183. var params={};
  184. params.fkId=$("#id").val();
  185. params.name=name;
  186. params.tempSheetId=tempSheetId;
  187. params.tempSheetName=$("#tempSheetName").val();
  188. params.entityId=entityId;
  189. params.entityName=$("#entityName").val();
  190. params.measureId=measureId;
  191. params.measureName=$('#measureName').val();
  192. params.periodId=$('#periodId').val();
  193. params.periodName=$('#periodName').val();
  194. params.includeTax=$('input[name="includeTax"]:checked').val();
  195. params.expect=$('input[name="expect"]:checked').val();
  196. params.type='tempsheet';
  197. if(currentClickItem){
  198. params.id=currentClickItem.attr('id');
  199. }
  200. $.ajax({
  201. url: 'budgetDimFunctionDetailController.do?doAdd'
  202. ,data:params
  203. ,dataType:'json'
  204. ,type:'POST'
  205. ,async:false
  206. ,success:function (d) {
  207. if(currentClickItem){
  208. tip('保存成功')
  209. currentClickItem.html(name);
  210. }else{
  211. var item=$('<span></span>');
  212. item.html(name);
  213. item.attr('id',d.obj);
  214. item.attr('sign',false);
  215. item.attr('class','unSignItem');
  216. item.attr('onclick','itemClick(this)');
  217. $('#function_txt').append(item);
  218. clear(true);
  219. signFlag =false;
  220. }
  221. }
  222. });
  223. }
  224. }
  225. function sign(s){
  226. var last=$('#function_txt').children(':last');
  227. if(last.length==0) return;
  228. if(last.attr('sign')=='false'){
  229. var obj = $('<span></span>');
  230. obj.attr('sign',true);
  231. obj.attr('class','signItem');
  232. obj.html(s);
  233. $('#function_txt').append(obj);
  234. }else{
  235. last.html(s);
  236. }
  237. signFlag=true;
  238. }
  239. function updateDetail(){
  240. addDetail(true);
  241. }
  242. function getDimFunctionInfo(){
  243. var obj = {};
  244. obj.functionId = $('#id').val();
  245. obj.functionTxt=$('#function_txt').text();
  246. obj.functionType='tempsheet';
  247. return obj;
  248. }
  249. function makeInfo(d) {
  250. var info =d.attributes;
  251. var budgetDemoDep = info.budgetDemoDep;
  252. for(var i=0;i<budgetDemoDep.length;i++){
  253. console.log(budgetDemoDep[i])
  254. }
  255. }
  256. function saveFunction(){
  257. var url = "budgetDimFunctionController.do?doUpdate";
  258. var params={};
  259. params.id=$('#id').val();
  260. var functionTxt = $('#function_txt');
  261. params.expressionTxt=functionTxt.html().trim();
  262. var children = functionTxt.children();
  263. var exp="";
  264. for(var i=0;i<children.length;i++){
  265. var child = $(children[i]);
  266. var sign = child.attr('sign');
  267. if(sign=='true'){
  268. exp+=child.html();
  269. }else {
  270. exp+=child.attr('id');
  271. }
  272. }
  273. params.expression =exp;
  274. $.post(url,params,function(){});
  275. }
  276. function openEntity(selectType,selectName) {
  277. var tempSheetId=$('#tempSheetId').val();
  278. if(!tempSheetId){
  279. _alert('请先选择样表');
  280. return;
  281. }
  282. if(selectType=='select'){
  283. var url ='budgetEntityController.do?selectByTempSheet&tempSheetId='+tempSheetId;
  284. dialog=_select(url, '选择预算主体', function (selectedRows) {
  285. var one = selectedRows[0];
  286. var id = one.id;
  287. var entityName = one.entityName;
  288. $('#entityId').val(id);
  289. $('#entityName').val(entityName);
  290. }, '800px', '600px');
  291. }else {
  292. $('#entityId').val(selectType);
  293. $('#entityName').val(selectName);
  294. }
  295. }
  296. function openMeasure(selectType,selectName) {
  297. var tempSheetId=$('#tempSheetId').val();
  298. if(!tempSheetId){
  299. _alert('请先选择样表');
  300. return;
  301. }
  302. if(selectType=='select') {
  303. var url = 'budgetMeasureController.do?selectByTempSheet&tempSheetId=' + tempSheetId;
  304. dialog = _select(url, '选择指标维度', function (selectedRows) {
  305. var one = selectedRows[0];
  306. var id = one.id;
  307. var name = one.name;
  308. $('#measureId').val(id);
  309. $('#measureName').val(name);
  310. }, '800px', '600px')
  311. }else {
  312. $('#measureId').val(selectType);
  313. $('#measureName').val(selectName);
  314. }
  315. }
  316. function openPeriodDetail(selectType,selectName){
  317. var tempSheetId=$('#tempSheetId').val();
  318. if(!tempSheetId){
  319. _alert('请先选择样表');
  320. return;
  321. }
  322. if(selectType=='select') {
  323. var url ='budgetPeriodDetailController.do?selectByTempSheet&tempSheetId='+tempSheetId;
  324. _select(url, '选择时间维度', function (selectedRows) {
  325. var ids = new Array();
  326. var names=new Array();
  327. for(var i=0;i<selectedRows.length;i++){
  328. var one = selectedRows[i];
  329. var id = one.id;
  330. var name = one.name;
  331. ids.push(id);
  332. names.push(name);
  333. }
  334. $('#periodId').val(ids.join(','));
  335. $('#periodName').val(names.join(','));
  336. }, '800px', '600px')
  337. }else {
  338. $('#periodId').val(selectType);
  339. $('#periodName').val(selectName);
  340. }
  341. }
  342. $(function(){
  343. init();
  344. })
  345. function init() {
  346. $('#function_txt').html('${entity.expressionTxt}');
  347. $('#function_txt').find('span').each(function () {
  348. var t=$(this);
  349. if(t.attr('isSelect')=='true'){
  350. itemClick(t);
  351. }
  352. })
  353. resetSignFlag();
  354. $(document).keyup(function(e){
  355. if(e.keyCode == 46) {
  356. delDetail();
  357. }
  358. });
  359. }
  360. function clear(includeDemo){
  361. if(includeDemo) {
  362. $('#name').val('');
  363. $('#tempSheetId').val('');
  364. $("#tempSheetName").val('');
  365. }
  366. $('#entityId').val('');
  367. $("#entityName").val('');
  368. $('#measureId').val('');
  369. $('#measureName').val('');
  370. $('#periodId').val('');
  371. $('#periodName').val('');
  372. }
  373. var currentClickItem;
  374. function itemClick(obj){
  375. var t=$(obj);
  376. if(t.attr('isSelect')=='true'){
  377. clear(true);
  378. t.attr('isSelect',false);
  379. t.removeClass('itemSelected');
  380. $('#addDetailButton').show();
  381. $('#updateDetailButton').hide();
  382. $('#delDetailButton').hide();
  383. currentClickItem = null;
  384. }else {
  385. t.parent().children().each(function(){
  386. $(this).removeClass('itemSelected');
  387. $(this).attr('isSelect',false);
  388. });
  389. t.addClass('itemSelected');
  390. t.attr('isSelect',true);
  391. if(t.attr('sign')=='false'){
  392. var id = t.attr('id');
  393. var url='budgetDimFunctionDetailController/'+id+'.do';
  394. $.get(url,{},function(d){
  395. $('#name').val(d.name);
  396. $('#tempSheetId').val(d.tempSheetId);
  397. $("#tempSheetName").val(d.tempSheetName);
  398. $('#entityId').val(d.entityId);
  399. $("#entityName").val(d.entityName);
  400. $('#measureId').val(d.measureId);
  401. $('#measureName').val(d.measureName);
  402. $('#periodId').val(d.periodId);
  403. $('#periodName').val(d.periodName);
  404. $('input[name="includeTax"][value="'+d.includeTax+'"]').attr("checked","checked");
  405. $('input[name="expect"][value="'+d.expect+'"]').attr("checked","checked");
  406. $('#addDetailButton').hide();
  407. $('#updateDetailButton').show();
  408. $('#delDetailButton').show();
  409. currentClickItem = t;
  410. },'json');
  411. }
  412. }
  413. }
  414. function delDetail() {
  415. if(currentClickItem!=null) {
  416. var next = currentClickItem.next();
  417. if(next.length>0) next.remove();
  418. currentClickItem.remove();
  419. clear(true);
  420. resetSignFlag();
  421. currentClickItem=null;
  422. $('#addDetailButton').show();
  423. $('#updateDetailButton').hide();
  424. $('#delDetailButton').hide();
  425. }
  426. }
  427. function resetSignFlag(){
  428. var last=$('#function_txt').children(':last');
  429. if(last.length!=0) {
  430. signFlag = last.attr('sign')=='true';
  431. }else {
  432. signFlag = true;
  433. }
  434. }
  435. function setMacro(item,k,v) {
  436. if(item=='dep'){
  437. $('#entityId').val(k);
  438. $('#entityName').val(v);
  439. }else if(item=='measure'){
  440. $('#measureId').val(k);
  441. $('#measureName').val(v);
  442. }
  443. dialog.close();
  444. }
  445. function selectOtherDetail(){
  446. var url ='budgetDimFunctionDetailController.do?select';
  447. _openDialog(url,'选择公式',function(iframe){
  448. var selectedRows = iframe.getSelectRows();
  449. if(selectedRows.length==0){
  450. iframe.tip('请至少选择一项');
  451. return false;
  452. }
  453. var one = selectedRows[0];
  454. $('#name').val(one.name);
  455. $('#tempSheetId').val(one.tempSheetId);
  456. $('#tempSheetName').val(one.tempSheetName);
  457. $('#entityId').val(one.entityId);
  458. $('#entityName').val(one.entityName);
  459. $('#measureId').val(one.measureId);
  460. $('#measureName').val(one.measureName);
  461. $('#periodId').val(one.periodId);
  462. $('#periodName').val(one.periodName);
  463. // $('#includeTax').val(one.includeTax);
  464. // $('#expect').val(one.expect);
  465. $('input[name="includeTax"]').removeAttr("checked");
  466. $('input[name="expect"]').removeAttr("checked");
  467. $('input[name="includeTax"][value="'+one.includeTax+'"]').attr("checked","checked");
  468. $('input[name="expect"][value="'+one.expect+'"]').attr("checked","checked");
  469. });
  470. }
  471. </script>
  472. <script src="webpage/cn/com/lzt/budget/data/js/budget_tools.js" type="text/javascript"></script>
  473. </body>
  474. </html>