fee_rate_view.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494
  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. setTimeout("feeRateObject.createSpreadView()",100);
  118. }
  119. },
  120. updateBySelect:function (rate,selectMap,mapID) {
  121. var selected = this.mainViews.getSelections()[0];
  122. var item = this.datas[selected.sourceRow];
  123. item.rate = rate;
  124. _.forEach(selectMap,function (value,key) {
  125. var recode = item.subFeeRate.recodes[key];
  126. var optionList = recode.optionList;
  127. _.forEach(optionList,function (o) {
  128. if(o.value==value){
  129. o.selected=true;
  130. }else {
  131. o.selected = false;
  132. }
  133. })
  134. })
  135. if($('#cascadeSet').prop('checked')){
  136. this.cascadeSetRates(item,selected.sourceRow,mapID,selectMap)
  137. }else {
  138. this.mainViews.data.updateItem(selected.sourceRow,item);
  139. }
  140. projectObj.project.FeeRate.synchronizeFeeRate();
  141. //this.views.data.updateItem()
  142. },
  143. cascadeSetRates:function(selectedItem,sourceRow,mapID,selectMap){
  144. var items=[];
  145. items.push({rateIndex:sourceRow,rate:selectedItem});
  146. _.forEach(this.datas,function (recode,Index) {
  147. if(Index!=sourceRow&&recode.subFeeRate){
  148. var valueMaps = recode.subFeeRate.valueMaps;
  149. var valueMap = _.find(valueMaps,{ID:mapID});
  150. if(valueMap){//选项完全一样的情况
  151. if(valueMap.value==recode.rate){
  152. return;
  153. }else {
  154. recode.rate = valueMap.value;
  155. _.forEach(selectMap,function (value,key) {
  156. var tempRecode = recode.subFeeRate.recodes[key];
  157. var optionList = tempRecode.optionList;
  158. _.forEach(optionList,function (o) {
  159. if(o.value==value){
  160. o.selected=true;
  161. }else {
  162. o.selected = false;
  163. }
  164. })
  165. })
  166. items.push({rateIndex:Index,rate:recode});
  167. }
  168. }else {//某条选项一样的情况
  169. var needUpdate = false;
  170. var selectList = mapID.split('-');
  171. var newList=[];
  172. _.forEach(recode.subFeeRate.recodes,function (r) {
  173. var oList = r.optionList;
  174. var oldSelectIndex=0;
  175. var hasChange=false;
  176. _.forEach(oList,function (o,key) {
  177. if(o.selected){
  178. oldSelectIndex = key;
  179. }
  180. if(_.includes(selectList,o.value)){
  181. needUpdate=true;
  182. o.selected=true;
  183. hasChange=true;
  184. newList.push(o.value);
  185. }else {
  186. o.selected=false;
  187. }
  188. })
  189. if(!hasChange){
  190. oList[oldSelectIndex].selected=true;
  191. newList.push(oList[oldSelectIndex].value)
  192. }
  193. })
  194. if(needUpdate){
  195. var newValue = _.find(valueMaps,{ID:newList.join("-")})//取出费率值并更新
  196. if(newValue){
  197. if(recode.rate != newValue.value){
  198. recode.rate = newValue.value
  199. items.push({rateIndex:Index,rate:recode});
  200. }
  201. }
  202. }
  203. }
  204. }
  205. })
  206. _.forEach(items,function (t) {
  207. feeRateObject.mainViews.data.updateItem(t.rateIndex,t.rate);
  208. })
  209. projectObj.project.FeeRate.batchUpdateFeeRate(items,feeRateObject.activateFeeRate);
  210. },
  211. loadPageContent:function(){
  212. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  213. var usageProjects = feeRateFile.usageProjects;
  214. $('#feeRateFileName').text(feeRateFile.name);
  215. $('#feeRateLibName').text(feeRateFile.libName);
  216. $('#projectCount').text(usageProjects.length);
  217. },
  218. loadFeeRateSelection:function() {
  219. if(!this.selectionLoad){
  220. var selectedID=0;
  221. _.forEach(projectObj.project.FeeRate.datas,function (data) {
  222. var option = $("<option>").val(data.ID).text(data.libName);
  223. $('#inlineFormCustomSelect').append(option);
  224. if(data.status=='activate'){
  225. selectedID=data.ID;
  226. }
  227. })
  228. $('#inlineFormCustomSelect').val(selectedID);
  229. }
  230. },
  231. getFeeRateStandards:function (callback) {
  232. CommonAjax.post('/feeRates/getFeeRateStandards', {"rootProjectID": this.activateFeeRate.rootProjectID}, function (data) {
  233. if (data) {
  234. callback(data);
  235. }
  236. });
  237. },
  238. changeFeeRateStandard:function(newVal){
  239. var callback=function () {
  240. feeRateObject.createSpreadView();
  241. feeRateObject.loadPageContent();
  242. projectObj.project.FeeRate.synchronizeFeeRate();
  243. };
  244. projectObj.project.FeeRate.changeFeeRateStandard(newVal,callback);
  245. },
  246. checkFeeRateName:function (newVal) {
  247. if(!newVal||newVal==""){
  248. $('#saveAsConfirm').attr("disabled","disabled");
  249. $('#nameError').text("请输入文件名称。").show();
  250. return;
  251. }
  252. var callback=function (data) {
  253. if(data){
  254. $('#saveAsConfirm').attr("disabled","disabled");
  255. $('#nameError').text("已存在同名费率文件。").show();
  256. }else {
  257. $('#saveAsConfirm').removeAttr("disabled");
  258. $('#nameError').hide();
  259. }
  260. console.log(data);
  261. };
  262. projectObj.project.FeeRate.checkFeeRateName(newVal,callback);
  263. },
  264. feeRateFileSaveAs:function (newName) {
  265. this.activateFeeRate = projectObj.project.FeeRate.feeRateFileSaveAs(newName);
  266. feeRateObject.loadPageContent();
  267. },
  268. getChangeInfo:function () {
  269. var me = this;
  270. var callback=function (data) {
  271. me.changeInfo=data;
  272. me.loadChangePageContent(data);
  273. console.log(data);
  274. };
  275. projectObj.project.FeeRate.getChangeInfo(callback);
  276. },
  277. loadChangePageContent:function (data) {
  278. $('#currentProject').text(data.currentProject.name);
  279. $('#currentOptions').empty();
  280. _.forEach(data.currentProject.currentOptions,function (s) {
  281. var option = $("<option>").val(s.ID).text(s.name);
  282. $('#currentOptions').append(option);
  283. })
  284. $('#currentOptions').val(projectObj.project.FeeRate.getActivateFeeRateID());
  285. $('#otherProject').empty();
  286. _.forEach(data.others,function (p) {
  287. var option = $("<option>").val(p.projectID).text(p.name);
  288. $('#otherProject').append(option);
  289. });
  290. $('#otherFeeRateOption').empty();
  291. if(data.others.length>0){
  292. _.forEach(data.others[0].optionList,function (f) {
  293. var option = $("<option>").val(f.ID).text(f.name);
  294. $('#otherFeeRateOption').append(option);
  295. });
  296. }
  297. },
  298. changeFeeRateFileFromCurrent:function(){
  299. var newVal = $("#currentOptions").val();
  300. if($("#currentOptions").val()==this.activateFeeRate.ID){
  301. return;
  302. }
  303. var callback=function () {
  304. feeRateObject.createSpreadView();
  305. feeRateObject.loadPageContent();
  306. projectObj.project.FeeRate.synchronizeFeeRate();
  307. }
  308. projectObj.project.FeeRate.changeFeeRateFileFromCurrent(newVal,callback);
  309. },
  310. changeFeeRateFileFromOthers:function () {
  311. var feeRateFileID = $("#otherFeeRateOption").val();
  312. var name =$("#otherFeeRateOption").find("option:selected").text();
  313. var currentOption = _.find(this.changeInfo.currentProject.currentOptions,{name:name})
  314. if(currentOption){
  315. $("#rename-lv").modal({show:true});
  316. $("#newFeeRateID").val(feeRateFileID);
  317. $("#newFeeRateName").val(name);
  318. }else {
  319. this.changeFeeRateFileConfirm(feeRateFileID,name);
  320. }
  321. },
  322. changeFeeRateFileConfirm:function(feeRateFileID,name){
  323. var callback=function () {
  324. feeRateObject.createSpreadView();
  325. feeRateObject.loadPageContent();
  326. projectObj.project.FeeRate.synchronizeFeeRate();
  327. }
  328. projectObj.project.FeeRate.changeFeeRateFileFromOthers(feeRateFileID,name,callback);
  329. }
  330. }
  331. function getPopoverContent() {
  332. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  333. var usageProjects = feeRateFile.usageProjects;
  334. var popover_content = "";
  335. _.forEach(usageProjects,function (p,index) {
  336. if(index>0){
  337. popover_content+='<br>';
  338. }
  339. popover_content+=p.name;
  340. })
  341. return popover_content;
  342. }
  343. $('#pop-lv').popover({
  344. placement:"bottom",
  345. html:true,
  346. trigger:"hover | focus",
  347. content:getPopoverContent
  348. }
  349. );
  350. $('#tab_fee_rate').bind('click', function () {
  351. feeRateObject.reFreshRateViews();
  352. feeRateObject.loadPageContent();
  353. //feeRateObject.loadFeeRateSelection();
  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. feeRateObject.getFeeRateStandards(function (data) {
  364. $('#standardSelect').empty();
  365. _.forEach(data,function (s) {
  366. var option = $("<option>").val(s.ID).text(s.libName);
  367. $('#standardSelect').append(option);
  368. })
  369. $('#standardSelect').val(feeRateFile.libID);
  370. });
  371. });
  372. $('#changeConfirm').bind('click', function (){
  373. var newVal=$('#standardSelect').val();
  374. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  375. if(newVal&&newVal!=feeRateFile.libID){
  376. feeRateObject.changeFeeRateStandard(newVal);
  377. }
  378. });
  379. $('#saveAs').bind('click', function (){
  380. var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
  381. $('#copyFeeRateName').val(feeRateFile.name+'副本');
  382. });
  383. $('#saveAsConfirm').bind('click',function () {
  384. feeRateObject.feeRateFileSaveAs($('#copyFeeRateName').val());
  385. })
  386. $('#copyFeeRateName').change(function () {
  387. feeRateObject.checkFeeRateName(this.value);
  388. });
  389. $('#newFeeRateName').change(function () {
  390. var newName = $(this).val();
  391. if(!newName||newName==""){
  392. $('#renameConfirm').attr("disabled","disabled");
  393. $('#renameError').text("请输入文件名称。").show();
  394. return;
  395. }
  396. var callback=function (data) {
  397. if(data){
  398. $('#renameConfirm').attr("disabled","disabled");
  399. $('#renameError').text("本建设项目中已存在同名费率文件。").show();
  400. }else {
  401. $('#renameConfirm').removeAttr("disabled");
  402. $('#renameError').hide();
  403. }
  404. };
  405. projectObj.project.FeeRate.checkFeeRateName(newName,callback);
  406. });
  407. function changeFRadioClick() {
  408. var radioV= $("input[name='chaneg-lv-Radio']:checked").val();
  409. if(radioV==='0'){
  410. $("#fromProject").show();
  411. $("#fromOther").hide();
  412. }else {
  413. $("#fromProject").hide();
  414. $("#fromOther").show();
  415. }
  416. }
  417. $('#changeFeeRateConfirm').bind('click',function (){
  418. var radioV= $("input[name='chaneg-lv-Radio']:checked").val();
  419. if(radioV==='0'){
  420. feeRateObject.changeFeeRateFileFromCurrent();
  421. }else {
  422. feeRateObject.changeFeeRateFileFromOthers();
  423. }
  424. })
  425. $('#changFeeRateFile').bind('click',function (){
  426. $("input[name='chaneg-lv-Radio']")[0].checked=true;
  427. $("#fromProject").show();
  428. $("#fromOther").hide();
  429. feeRateObject.getChangeInfo();
  430. })
  431. $('#otherProject').change(function(){
  432. var newVal = $(this).val();
  433. var projects = feeRateObject.changeInfo.others;
  434. var selected = _.find(projects,{projectID:parseInt(newVal)});
  435. $('#otherFeeRateOption').empty();
  436. _.forEach(selected.optionList,function (f) {
  437. var option = $("<option>").val(f.ID).text(f.name);
  438. $('#otherFeeRateOption').append(option);
  439. });
  440. })
  441. $('#renameConfirm').bind('click',function (){
  442. var feeRateFileID= $("#newFeeRateID").val();
  443. var name = $("#newFeeRateName").val();
  444. feeRateObject.changeFeeRateFileConfirm(feeRateFileID,name);
  445. })
  446. $('#inlineFormCustomSelect').change(function(){
  447. var updateTask = [];
  448. var selectID = $(this).val();
  449. var oldValue=0;
  450. _.forEach(projectObj.project.FeeRate.datas,function (feeRate) {
  451. if(feeRate.status=='activate'){
  452. oldValue=feeRate.ID;
  453. }
  454. if(feeRate.ID ==selectID){
  455. feeRate.status='activate';
  456. }else {
  457. feeRate.status='disable';
  458. }
  459. updateTask.push({query:{ID:feeRate.feeRateID},doc:{status:feeRate.status}});
  460. })
  461. projectObj.project.FeeRate.updateStatusBySelected(updateTask);
  462. feeRateObject.createSpreadView();
  463. subRateObject.destorySpreadView();
  464. socket.emit('changeActivateFeeRate',{oldRoom:oldValue,newRoom:selectID});
  465. })