fee_rate_view.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  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. if(!$('#cascadeSet').prop('checked')||params.hasOwnProperty('viewIndex')){
  95. projectObj.project.FeeRate.updateFeeRateByEdit(params,feeRateObject.activateFeeRate);
  96. }
  97. params.success();
  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', {"rootProjectID": this.activateFeeRate.rootProjectID}, 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. };
  245. projectObj.project.FeeRate.changeFeeRateStandard(newVal,callback);
  246. },
  247. checkFeeRateName:function (newVal) {
  248. if(!newVal||newVal==""){
  249. $('#saveAsConfirm').attr("disabled","disabled");
  250. $('#nameError').text("请输入文件名称。").show();
  251. return;
  252. }
  253. var callback=function (data) {
  254. if(data){
  255. $('#saveAsConfirm').attr("disabled","disabled");
  256. $('#nameError').text("已存在同名费率文件。").show();
  257. }else {
  258. $('#saveAsConfirm').removeAttr("disabled");
  259. $('#nameError').hide();
  260. }
  261. console.log(data);
  262. };
  263. projectObj.project.FeeRate.checkFeeRateName(newVal,callback);
  264. },
  265. feeRateFileSaveAs:function (newName) {
  266. this.activateFeeRate = projectObj.project.FeeRate.feeRateFileSaveAs(newName);
  267. feeRateObject.loadPageContent();
  268. },
  269. getChangeInfo:function () {
  270. var me = this;
  271. var callback=function (data) {
  272. me.changeInfo=data;
  273. me.loadChangePageContent(data);
  274. console.log(data);
  275. };
  276. projectObj.project.FeeRate.getChangeInfo(callback);
  277. },
  278. loadChangePageContent:function (data) {
  279. $('#currentProject').text(data.currentProject.name);
  280. $('#currentOptions').empty();
  281. _.forEach(data.currentProject.currentOptions,function (s) {
  282. var option = $("<option>").val(s.ID).text(s.name);
  283. $('#currentOptions').append(option);
  284. })
  285. $('#currentOptions').val(projectObj.project.FeeRate.getActivateFeeRateID());
  286. $('#otherProject').empty();
  287. _.forEach(data.others,function (p) {
  288. var option = $("<option>").val(p.projectID).text(p.name);
  289. $('#otherProject').append(option);
  290. });
  291. $('#otherFeeRateOption').empty();
  292. if(data.others.length>0){
  293. _.forEach(data.others[0].optionList,function (f) {
  294. var option = $("<option>").val(f.ID).text(f.name);
  295. $('#otherFeeRateOption').append(option);
  296. });
  297. }
  298. },
  299. changeFeeRateFileFromCurrent:function(){
  300. var newVal = $("#currentOptions").val();
  301. if($("#currentOptions").val()==this.activateFeeRate.ID){
  302. return;
  303. }
  304. var callback=function () {
  305. feeRateObject.createSpreadView();
  306. feeRateObject.loadPageContent();
  307. projectObj.project.FeeRate.synchronizeFeeRate();
  308. }
  309. projectObj.project.FeeRate.changeFeeRateFileFromCurrent(newVal,callback);
  310. },
  311. changeFeeRateFileFromOthers:function () {
  312. var feeRateFileID = $("#otherFeeRateOption").val();
  313. var name =$("#otherFeeRateOption").find("option:selected").text();
  314. var currentOption = _.find(this.changeInfo.currentProject.currentOptions,{name:name})
  315. if(currentOption){
  316. $("#rename-lv").modal({show:true});
  317. $("#newFeeRateID").val(feeRateFileID);
  318. $("#newFeeRateName").val(name);
  319. }else {
  320. this.changeFeeRateFileConfirm(feeRateFileID,name);
  321. }
  322. },
  323. changeFeeRateFileConfirm:function(feeRateFileID,name){
  324. var callback=function () {
  325. feeRateObject.createSpreadView();
  326. feeRateObject.loadPageContent();
  327. projectObj.project.FeeRate.synchronizeFeeRate();
  328. }
  329. projectObj.project.FeeRate.changeFeeRateFileFromOthers(feeRateFileID,name,callback);
  330. }
  331. }
  332. function getPopoverContent() {
  333. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  334. var usageProjects = feeRateFile.usageProjects;
  335. var popover_content = "";
  336. _.forEach(usageProjects,function (p,index) {
  337. if(index>0){
  338. popover_content+='<br>';
  339. }
  340. popover_content+=p.name;
  341. })
  342. return popover_content;
  343. }
  344. $('#pop-lv').popover({
  345. placement:"bottom",
  346. html:true,
  347. trigger:"hover | focus",
  348. content:getPopoverContent
  349. }
  350. );
  351. $('#tab_fee_rate').on('shown.bs.tab', function (e) {
  352. feeRateObject.reFreshRateViews();
  353. feeRateObject.loadPageContent();
  354. });
  355. $('#setNewFeeRate').bind('click', function () {
  356. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  357. var usageProjects = feeRateFile.usageProjects;
  358. var listString ='';
  359. _.forEach(usageProjects,function (u) {
  360. listString+="<li>"+u.name+"</li>"
  361. })
  362. $("#usageProjectList").html(listString);
  363. $("#set-lv-feeRateName").text(feeRateFile.name);
  364. feeRateObject.getFeeRateStandards(function (data) {
  365. $('#standardSelect').empty();
  366. _.forEach(data,function (s) {
  367. var option = $("<option>").val(s.ID).text(s.libName);
  368. $('#standardSelect').append(option);
  369. })
  370. $('#standardSelect').val(feeRateFile.libID);
  371. });
  372. });
  373. $('#changeConfirm').bind('click', function (){
  374. var newVal=$('#standardSelect').val();
  375. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  376. if(newVal&&newVal!=feeRateFile.libID){
  377. feeRateObject.changeFeeRateStandard(newVal);
  378. }
  379. });
  380. $('#saveAs').bind('click', function (){
  381. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  382. $('#copyFeeRateName').val(feeRateFile.name+'副本');
  383. });
  384. $('#saveAsConfirm').bind('click',function () {
  385. feeRateObject.feeRateFileSaveAs($('#copyFeeRateName').val());
  386. })
  387. $('#copyFeeRateName').change(function () {
  388. feeRateObject.checkFeeRateName(this.value);
  389. });
  390. $('#newFeeRateName').change(function () {
  391. var newName = $(this).val();
  392. if(!newName||newName==""){
  393. $('#renameConfirm').attr("disabled","disabled");
  394. $('#renameError').text("请输入文件名称。").show();
  395. return;
  396. }
  397. var callback=function (data) {
  398. if(data){
  399. $('#renameConfirm').attr("disabled","disabled");
  400. $('#renameError').text("本建设项目中已存在同名费率文件。").show();
  401. }else {
  402. $('#renameConfirm').removeAttr("disabled");
  403. $('#renameError').hide();
  404. }
  405. };
  406. projectObj.project.FeeRate.checkFeeRateName(newName,callback);
  407. });
  408. function changeFRadioClick() {
  409. var radioV= $("input[name='chaneg-lv-Radio']:checked").val();
  410. if(radioV==='0'){
  411. $("#fromProject").show();
  412. $("#fromOther").hide();
  413. }else {
  414. $("#fromProject").hide();
  415. $("#fromOther").show();
  416. }
  417. }
  418. $('#changeFeeRateConfirm').bind('click',function (){
  419. var radioV= $("input[name='chaneg-lv-Radio']:checked").val();
  420. if(radioV==='0'){
  421. feeRateObject.changeFeeRateFileFromCurrent();
  422. }else {
  423. feeRateObject.changeFeeRateFileFromOthers();
  424. }
  425. })
  426. $('#changFeeRateFile').bind('click',function (){
  427. $("input[name='chaneg-lv-Radio']")[0].checked=true;
  428. $("#fromProject").show();
  429. $("#fromOther").hide();
  430. feeRateObject.getChangeInfo();
  431. })
  432. $('#otherProject').change(function(){
  433. var newVal = $(this).val();
  434. var projects = feeRateObject.changeInfo.others;
  435. var selected = _.find(projects,{projectID:parseInt(newVal)});
  436. $('#otherFeeRateOption').empty();
  437. _.forEach(selected.optionList,function (f) {
  438. var option = $("<option>").val(f.ID).text(f.name);
  439. $('#otherFeeRateOption').append(option);
  440. });
  441. })
  442. $('#renameConfirm').bind('click',function (){
  443. var feeRateFileID= $("#newFeeRateID").val();
  444. var name = $("#newFeeRateName").val();
  445. feeRateObject.changeFeeRateFileConfirm(feeRateFileID,name);
  446. })
  447. $('#inlineFormCustomSelect').change(function(){
  448. var updateTask = [];
  449. var selectID = $(this).val();
  450. var oldValue=0;
  451. _.forEach(projectObj.project.FeeRate.datas,function (feeRate) {
  452. if(feeRate.status=='activate'){
  453. oldValue=feeRate.ID;
  454. }
  455. if(feeRate.ID ==selectID){
  456. feeRate.status='activate';
  457. }else {
  458. feeRate.status='disable';
  459. }
  460. updateTask.push({query:{ID:feeRate.feeRateID},doc:{status:feeRate.status}});
  461. })
  462. projectObj.project.FeeRate.updateStatusBySelected(updateTask);
  463. feeRateObject.createSpreadView();
  464. subRateObject.destorySpreadView();
  465. socket.emit('changeActivateFeeRate',{oldRoom:oldValue,newRoom:selectID});
  466. })