fee_rate_view.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. /**
  2. * Created by chen on 2017/8/1.
  3. */
  4. var feeRateObject={
  5. mainViews:null,
  6. datas:null,
  7. canEdit:false,
  8. activateFeeRate:null,
  9. needCascadeSet:false,
  10. selectionLoad:false,
  11. changeInfo:null,
  12. columns: [
  13. {
  14. id: 'name',
  15. caption: '专业名称',
  16. dataField: 'name',
  17. width: 450,
  18. allowEditing: false
  19. },
  20. {
  21. id: 'rate',
  22. caption: '值%',
  23. dataField: 'rate',
  24. format: '0.000',
  25. width: 120,
  26. minWidth: 50,
  27. allowEditing: true
  28. },
  29. {
  30. id: 'memo',
  31. caption: '备注',
  32. dataField: 'memo',
  33. minWidth: 120,
  34. allowEditing: true
  35. },
  36. {
  37. id: 'ID',
  38. caption: 'ID',
  39. dataField: 'ID',
  40. width: 80,
  41. visible: false,
  42. allowEditing: false
  43. },
  44. {
  45. id: 'subFeeRate',
  46. caption: '子费率',
  47. dataField: 'subFeeRate',
  48. width: 80,
  49. visible: false,
  50. allowEditing: false
  51. },
  52. {
  53. id: '_id',
  54. caption: '自动ID',
  55. dataField: '_id',
  56. width: 80,
  57. visible: false,
  58. allowEditing: false
  59. },
  60. {
  61. id: 'ParentID',
  62. caption: '父结点ID',
  63. dataField: 'ParentID',
  64. width: 80,
  65. visible: false,
  66. allowEditing: false
  67. }
  68. ],
  69. options :{
  70. allowSorting: false,
  71. showRowHeader: true,
  72. colMinWidth: 80,
  73. rowHeight: 30,
  74. allowEditing: true,
  75. editMode: 'inline',
  76. editUnit: 'cell',
  77. selectionUnit: "row",
  78. hierarchy: {
  79. keyField: 'ID',
  80. parentField: 'ParentID',
  81. collapsed: false,
  82. column: 'name'
  83. }
  84. },
  85. dataSource : {
  86. loadRange: function(params) {
  87. params.success(feeRateObject.datas);
  88. },
  89. update: function(params) {
  90. if(!params.hasOwnProperty('sourceIndex')){
  91. var selected = feeRateObject.mainViews.getSelections()[0];
  92. params.sourceIndex = selected.sourceRow;
  93. }
  94. params.success();
  95. if(!$('#cascadeSet').prop('checked')||params.hasOwnProperty('viewIndex')){
  96. projectObj.project.FeeRate.updateFeeRateByEdit(params,feeRateObject.activateFeeRate);
  97. }
  98. }
  99. },
  100. createSpreadView:function () {
  101. if (this.mainViews) {
  102. this.mainViews.destroy();
  103. this.mainViews = null;
  104. }
  105. this.activateFeeRate = projectObj.project.FeeRate.getActivateFeeRate();
  106. this.datas = this.activateFeeRate.rates;
  107. this.mainViews = new GC.Spread.Views.DataView($('#divFee')[0],
  108. this.dataSource, this.columns, new GC.Spread.Views.Plugins.GridLayout(this.options));
  109. this.mainViews["rowClick"].addHandler(subRateObject.reFreshRateViews);
  110. this.mainViews .invalidate();
  111. document.querySelector('#divFee').focus();
  112. },
  113. reFreshRateViews:function() {
  114. if(this.mainViews){
  115. this.mainViews.refresh()
  116. }else {
  117. feeRateObject.createSpreadView();
  118. //setTimeout("feeRateObject.createSpreadView()",100);
  119. }
  120. },
  121. updateBySelect:function (rate,selectMap,mapID) {
  122. var selected = this.mainViews.getSelections()[0];
  123. var item = this.datas[selected.sourceRow];
  124. item.rate = rate;
  125. _.forEach(selectMap,function (value,key) {
  126. var recode = item.subFeeRate.recodes[key];
  127. var optionList = recode.optionList;
  128. _.forEach(optionList,function (o) {
  129. if(o.value==value){
  130. o.selected=true;
  131. }else {
  132. o.selected = false;
  133. }
  134. })
  135. })
  136. if($('#cascadeSet').prop('checked')){
  137. this.cascadeSetRates(item,selected.sourceRow,mapID,selectMap)
  138. }else {
  139. this.mainViews.data.updateItem(selected.sourceRow,item);
  140. }
  141. projectObj.project.FeeRate.synchronizeFeeRate();
  142. //this.views.data.updateItem()
  143. },
  144. cascadeSetRates:function(selectedItem,sourceRow,mapID,selectMap){
  145. var items=[];
  146. items.push({rateIndex:sourceRow,rate:selectedItem});
  147. _.forEach(this.datas,function (recode,Index) {
  148. if(Index!=sourceRow&&recode.subFeeRate){
  149. var valueMaps = recode.subFeeRate.valueMaps;
  150. var valueMap = _.find(valueMaps,{ID:mapID});
  151. if(valueMap){//选项完全一样的情况
  152. if(valueMap.value==recode.rate){
  153. return;
  154. }else {
  155. recode.rate = valueMap.value;
  156. _.forEach(selectMap,function (value,key) {
  157. var tempRecode = recode.subFeeRate.recodes[key];
  158. var optionList = tempRecode.optionList;
  159. _.forEach(optionList,function (o) {
  160. if(o.value==value){
  161. o.selected=true;
  162. }else {
  163. o.selected = false;
  164. }
  165. })
  166. })
  167. items.push({rateIndex:Index,rate:recode});
  168. }
  169. }else {//某条选项一样的情况
  170. var needUpdate = false;
  171. var selectList = mapID.split('-');
  172. var newList=[];
  173. _.forEach(recode.subFeeRate.recodes,function (r) {
  174. var oList = r.optionList;
  175. var oldSelectIndex=0;
  176. var hasChange=false;
  177. _.forEach(oList,function (o,key) {
  178. if(o.selected){
  179. oldSelectIndex = key;
  180. }
  181. if(_.includes(selectList,o.value)){
  182. needUpdate=true;
  183. o.selected=true;
  184. hasChange=true;
  185. newList.push(o.value);
  186. }else {
  187. o.selected=false;
  188. }
  189. })
  190. if(!hasChange){
  191. oList[oldSelectIndex].selected=true;
  192. newList.push(oList[oldSelectIndex].value)
  193. }
  194. })
  195. if(needUpdate){
  196. var newValue = _.find(valueMaps,{ID:newList.join("-")})//取出费率值并更新
  197. if(newValue){
  198. if(recode.rate != newValue.value){
  199. recode.rate = newValue.value
  200. items.push({rateIndex:Index,rate:recode});
  201. }
  202. }
  203. }
  204. }
  205. }
  206. })
  207. _.forEach(items,function (t) {
  208. feeRateObject.mainViews.data.updateItem(t.rateIndex,t.rate);
  209. })
  210. projectObj.project.FeeRate.batchUpdateFeeRate(items,feeRateObject.activateFeeRate);
  211. },
  212. loadPageContent:function(){
  213. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  214. var usageProjects = feeRateFile.usageProjects;
  215. $('#feeRateFileName').text(feeRateFile.name);
  216. $('#feeRateLibName').text(feeRateFile.libName);
  217. $('#projectCount').text(usageProjects.length);
  218. },
  219. loadFeeRateSelection:function() {
  220. if(!this.selectionLoad){
  221. var selectedID=0;
  222. _.forEach(projectObj.project.FeeRate.datas,function (data) {
  223. var option = $("<option>").val(data.ID).text(data.libName);
  224. $('#inlineFormCustomSelect').append(option);
  225. if(data.status=='activate'){
  226. selectedID=data.ID;
  227. }
  228. })
  229. $('#inlineFormCustomSelect').val(selectedID);
  230. }
  231. },
  232. getFeeRateStandards:function (callback) {
  233. CommonAjax.post('/feeRates/getFeeRateStandards', {"projectID": projectObj.project.ID()}, function (data) {
  234. if (data) {
  235. callback(data);
  236. }
  237. });
  238. },
  239. changeFeeRateStandard:function(newVal){
  240. var callback=function () {
  241. feeRateObject.createSpreadView();
  242. feeRateObject.loadPageContent();
  243. projectObj.project.FeeRate.synchronizeFeeRate();
  244. subRateObject.destorySpreadView();
  245. };
  246. projectObj.project.FeeRate.changeFeeRateStandard(newVal,callback);
  247. },
  248. checkFeeRateName:function (newVal) {
  249. if(!newVal||newVal==""){
  250. $('#saveAsConfirm').attr("disabled","disabled");
  251. $('#nameError').text("请输入文件名称。").show();
  252. return;
  253. }
  254. var callback=function (data) {
  255. if(data){
  256. $('#saveAsConfirm').attr("disabled","disabled");
  257. $('#nameError').text("已存在同名费率文件。").show();
  258. $('#valid_name').val('');
  259. }else {
  260. $('#valid_name').val(newVal);
  261. $('#saveAsConfirm').removeAttr("disabled");
  262. $('#nameError').hide();
  263. }
  264. console.log(data);
  265. };
  266. projectObj.project.FeeRate.checkFeeRateName(newVal,callback);
  267. },
  268. feeRateFileSaveAs:function (newName) {
  269. if(!newName||newName==""){
  270. $('#saveAsConfirm').attr("disabled","disabled");
  271. $('#nameError').text("请输入文件名称。").show();
  272. return;
  273. }
  274. var valideName = $('#valid_name').val();
  275. if(valideName==''||valideName!==newName){
  276. var callback=function (data) {
  277. if(data){
  278. $('#saveAsConfirm').attr("disabled","disabled");
  279. $('#nameError').text("已存在同名费率文件。").show();
  280. $('#valid_name').val('');
  281. }else {
  282. feeRateObject.submitSaveAs(newName);
  283. }
  284. }
  285. projectObj.project.FeeRate.checkFeeRateName(newName,callback)
  286. }else {
  287. feeRateObject.submitSaveAs(newName);
  288. }
  289. },
  290. submitSaveAs:function (newName) {
  291. this.activateFeeRate = projectObj.project.FeeRate.feeRateFileSaveAs(newName);
  292. feeRateObject.loadPageContent();
  293. $('#copy-lv').modal('hide');
  294. },
  295. getChangeInfo:function () {
  296. var me = this;
  297. var callback=function (data) {
  298. me.changeInfo=data;
  299. me.loadChangePageContent(data);
  300. console.log(data);
  301. };
  302. projectObj.project.FeeRate.getChangeInfo(callback);
  303. },
  304. loadChangePageContent:function (data) {
  305. $('#currentProject').text(data.currentProject.name);
  306. $('#currentOptions').empty();
  307. _.forEach(data.currentProject.currentOptions,function (s) {
  308. var option = $("<option>").val(s.ID).text(s.name);
  309. $('#currentOptions').append(option);
  310. })
  311. $('#currentOptions').val(projectObj.project.FeeRate.getActivateFeeRateID());
  312. $('#otherProject').empty();
  313. _.forEach(data.others,function (p) {
  314. var option = $("<option>").val(p.ID).text(p.name);
  315. $('#otherProject').append(option);
  316. });
  317. $('#otherFeeRateOption').empty();
  318. if(data.others.length>0){
  319. _.forEach(data.others[0].optionList,function (f) {
  320. var option = $("<option>").val(f.ID).text(f.name);
  321. $('#otherFeeRateOption').append(option);
  322. });
  323. }
  324. },
  325. changeFeeRateFileFromCurrent:function(){
  326. var newVal = $("#currentOptions").val();
  327. if($("#currentOptions").val()==this.activateFeeRate.ID){
  328. return;
  329. }
  330. var name =$("#currentOptions").find("option:selected").text();
  331. var newFeeRateFile = {
  332. id:newVal,
  333. name:name
  334. }
  335. var callback=function () {
  336. feeRateObject.createSpreadView();
  337. feeRateObject.loadPageContent();
  338. projectObj.project.FeeRate.synchronizeFeeRate();
  339. }
  340. projectObj.project.FeeRate.changeFeeRateFileFromCurrent(newFeeRateFile,callback);
  341. },
  342. changeFeeRateFileFromOthers:function () {
  343. var feeRateFileID = $("#otherFeeRateOption").val();
  344. var name =$("#otherFeeRateOption").find("option:selected").text();
  345. if(null===feeRateFileID){
  346. alert("请选择一个费率文件!");
  347. return;
  348. }
  349. var currentOption = _.find(this.changeInfo.currentProject.currentOptions,{name:name})
  350. if(currentOption){
  351. $("#rename-lv").modal({show:true});
  352. $("#newFeeRateID").val(feeRateFileID);
  353. $("#newFeeRateName").val(name);
  354. }else {
  355. this.changeFeeRateFileConfirm(feeRateFileID,name);
  356. }
  357. },
  358. changeFeeRateFileConfirm:function(feeRateFileID,name){
  359. var callback=function () {
  360. feeRateObject.createSpreadView();
  361. feeRateObject.loadPageContent();
  362. projectObj.project.FeeRate.synchronizeFeeRate();
  363. }
  364. projectObj.project.FeeRate.changeFeeRateFileFromOthers(feeRateFileID,name,callback);
  365. }
  366. }
  367. function getPopoverContent() {
  368. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  369. var usageProjects = feeRateFile.usageProjects;
  370. var popover_content = "";
  371. _.forEach(usageProjects,function (p,index) {
  372. if(index>0){
  373. popover_content+='<br>';
  374. }
  375. popover_content+=p.name;
  376. })
  377. return popover_content;
  378. }
  379. $('#pop-lv').popover({
  380. placement:"bottom",
  381. html:true,
  382. trigger:"hover | focus",
  383. content:getPopoverContent
  384. }
  385. );
  386. $('#tab_fee_rate').on('shown.bs.tab', function (e) {
  387. feeRateObject.reFreshRateViews();
  388. feeRateObject.loadPageContent();
  389. });
  390. $('#setNewFeeRate').bind('click', function () {
  391. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  392. var usageProjects = feeRateFile.usageProjects;
  393. var listString ='';
  394. _.forEach(usageProjects,function (u) {
  395. listString+="<li>"+u.name+"</li>"
  396. })
  397. $("#usageProjectList").html(listString);
  398. $("#set-lv-feeRateName").text(feeRateFile.name);
  399. $("#set-use-feeRateName").text(feeRateFile.name);
  400. feeRateObject.getFeeRateStandards(function (data) {
  401. $('#standardSelect').empty();
  402. _.forEach(data,function (s) {
  403. var option = $("<option>").val(s.ID).text(s.libName);
  404. $('#standardSelect').append(option);
  405. })
  406. $('#standardSelect').val(feeRateFile.libID);
  407. });
  408. });
  409. $('#changeConfirm').bind('click', function (){
  410. var newVal=$('#standardSelect').val();
  411. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  412. if(newVal&&newVal!=feeRateFile.libID){
  413. feeRateObject.changeFeeRateStandard(newVal);
  414. }
  415. });
  416. $('#saveAs').bind('click', function (){
  417. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  418. $('#copyFeeRateName').val(feeRateFile.name+'副本');
  419. $('#valid_name').val(feeRateFile.name+'副本');
  420. $('#nameError').hide();
  421. });
  422. $('#saveAsConfirm').bind('click',function () {
  423. feeRateObject.feeRateFileSaveAs($('#copyFeeRateName').val());
  424. })
  425. $('#copyFeeRateName').change(function () {
  426. feeRateObject.checkFeeRateName(this.value);
  427. });
  428. $('#newFeeRateName').change(function () {
  429. var newName = $(this).val();
  430. if(!newName||newName==""){
  431. $('#renameConfirm').attr("disabled","disabled");
  432. $('#renameError').text("请输入文件名称。").show();
  433. return;
  434. }
  435. var callback=function (data) {
  436. if(data){
  437. $('#renameConfirm').attr("disabled","disabled");
  438. $('#renameError').text("本建设项目中已存在同名费率文件。").show();
  439. }else {
  440. $('#renameConfirm').removeAttr("disabled");
  441. $('#renameError').hide();
  442. }
  443. };
  444. projectObj.project.FeeRate.checkFeeRateName(newName,callback);
  445. });
  446. function changeFRadioClick() {
  447. var radioV= $("input[name='chaneg-lv-Radio']:checked").val();
  448. if(radioV==='0'){
  449. $("#fromProject").show();
  450. $("#fromOther").hide();
  451. }else {
  452. $("#fromProject").hide();
  453. $("#fromOther").show();
  454. }
  455. }
  456. $('#changeFeeRateConfirm').bind('click',function (){
  457. var radioV= $("input[name='chaneg-lv-Radio']:checked").val();
  458. if(radioV==='0'){
  459. feeRateObject.changeFeeRateFileFromCurrent();
  460. }else {
  461. feeRateObject.changeFeeRateFileFromOthers();
  462. }
  463. })
  464. $('#changFeeRateFile').bind('click',function (){
  465. $("input[name='chaneg-lv-Radio']")[0].checked=true;
  466. $("#fromProject").show();
  467. $("#fromOther").hide();
  468. feeRateObject.getChangeInfo();
  469. })
  470. $('#otherProject').change(function(){
  471. var newVal = $(this).val();
  472. var projects = feeRateObject.changeInfo.others;
  473. var selected = _.find(projects,{ID:parseInt(newVal)});
  474. $('#otherFeeRateOption').empty();
  475. _.forEach(selected.optionList,function (f) {
  476. var option = $("<option>").val(f.ID).text(f.name);
  477. $('#otherFeeRateOption').append(option);
  478. });
  479. })
  480. $('#renameConfirm').bind('click',function (){
  481. var feeRateFileID= $("#newFeeRateID").val();
  482. var name = $("#newFeeRateName").val();
  483. feeRateObject.changeFeeRateFileConfirm(feeRateFileID,name);
  484. })
  485. $('#inlineFormCustomSelect').change(function(){
  486. var updateTask = [];
  487. var selectID = $(this).val();
  488. var oldValue=0;
  489. _.forEach(projectObj.project.FeeRate.datas,function (feeRate) {
  490. if(feeRate.status=='activate'){
  491. oldValue=feeRate.ID;
  492. }
  493. if(feeRate.ID ==selectID){
  494. feeRate.status='activate';
  495. }else {
  496. feeRate.status='disable';
  497. }
  498. updateTask.push({query:{ID:feeRate.feeRateID},doc:{status:feeRate.status}});
  499. })
  500. projectObj.project.FeeRate.updateStatusBySelected(updateTask);
  501. feeRateObject.createSpreadView();
  502. subRateObject.destorySpreadView();
  503. socket.emit('changeActivateFeeRate',{oldRoom:oldValue,newRoom:selectID});
  504. })