std_bills_lib.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. /**
  2. * Created by Mai on 2017/5/16.
  3. */
  4. /**
  5. * showObj = {bills, jobAndFeatureTab, job, feature, remarkTab, remark}
  6. */
  7. /*var stdBillsLibObj = {
  8. createNew: function (sessionID, showObj) {
  9. var tools = {
  10. sessionID: sessionID,
  11. billsSpread: null,
  12. billsJobSpread: null,
  13. billsFeatureSpread: null,
  14. checkSpread: function (spread, spreadObj) {
  15. if (!spread) {
  16. spread = SheetDataHelper.createNewSpread(spreadObj);
  17. }
  18. }
  19. };
  20. var libObj = function () {
  21. this.billsTree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true});
  22. this.spread = tools.billsSpread;
  23. };
  24. libObj.prototype.LoadStdBills = function () {
  25. tools.checkSpread(tools.billsSpread, showObj.bills);
  26. };
  27. return new libObj(sessionID);
  28. },
  29. settings: {
  30. stdBillsTreeSetting: {
  31. "treeCol": 0,
  32. "emptyRows":0,
  33. "headRows":1,
  34. "headRowHeight":[
  35. 35
  36. ],
  37. "cols":[{
  38. "width":100,
  39. "readOnly":null,
  40. "head":{
  41. "titleNames":["项目编码"],
  42. "spanCols":[1],
  43. "spanRows":[1],
  44. "vAlign":[1],
  45. "hAlign":[1],
  46. "font":["12px Arial"]
  47. },
  48. "data":{
  49. "field":"code",
  50. "vAlign":0,
  51. "hAlign":3,
  52. "font":"12px Arial"
  53. }
  54. }, {
  55. "width":120,
  56. "readOnly":null,
  57. "head":{
  58. "titleNames":["项目名称"],
  59. "spanCols":[1],
  60. "spanRows":[1],
  61. "vAlign":[1],
  62. "hAlign":[1],
  63. "font":["12px Arial"]
  64. },
  65. "data":{
  66. "field":"name",
  67. "vAlign":0,
  68. "hAlign":3,
  69. "font":"12px Arial"
  70. }
  71. }, {
  72. "width":40,
  73. "readOnly":null,
  74. "head":{
  75. "titleNames":["计量单位"],
  76. "spanCols":[1],
  77. "spanRows":[1],
  78. "vAlign":[1],
  79. "hAlign":[1],
  80. "font":["12px Arial"],
  81. "wordWrap": true
  82. },
  83. "data":{
  84. "field":"unti",
  85. "vAlign":0,
  86. "hAlign":3,
  87. "font":"12px Arial"
  88. }
  89. }, {
  90. "width":100,
  91. "readOnly": true,
  92. "head":{
  93. "titleNames":["工程量计算规则"],
  94. "spanCols":[1],
  95. "spanRows":[1],
  96. "vAlign":[1],
  97. "hAlign":[1],
  98. "font":["12px Arial"]
  99. },
  100. "data":{
  101. "field":"ruleText",
  102. "vAlign":0,
  103. "hAlign":3,
  104. "font":"12px Arial"
  105. }
  106. }]
  107. },
  108. stdBillsJobSetting: {
  109. "emptyRows":0,
  110. "headRows":1,
  111. "headRowHeight":[
  112. 20
  113. ],
  114. "cols":[{
  115. "width":200,
  116. "readOnly":true,
  117. "head":{
  118. "titleNames":["工程内容"],
  119. "spanCols":[1],
  120. "spanRows":[1],
  121. "vAlign":[1],
  122. "hAlign":[1],
  123. "font":["12px Arial"]
  124. },
  125. "data":{
  126. "field":"content",
  127. "vAlign":0,
  128. "hAlign":3,
  129. "font":"12px Arial"
  130. }
  131. }]
  132. },
  133. stdBillsFeatureSetting: {
  134. "emptyRows":0,
  135. "headRows":1,
  136. "headRowHeight":[
  137. 20
  138. ],
  139. "cols":[{
  140. "width":200,
  141. "readOnly":null,
  142. "head":{
  143. "titleNames":["项目特征"],
  144. "spanCols":[1],
  145. "spanRows":[1],
  146. "vAlign":[1],
  147. "hAlign":[1],
  148. "font":["12px Arial"]
  149. },
  150. "data":{
  151. "field":"content",
  152. "vAlign":0,
  153. "hAlign":3,
  154. "font":"12px Arial"
  155. }
  156. }]
  157. }
  158. }
  159. };*/
  160. CommonAjax.post('/stdBillsEditor/getStdBillsLib', {userId: userID}, function (datas) {
  161. var i, select = $('#stdBillsLibSelect');
  162. select.empty();
  163. datas.forEach(function (data) {
  164. var option = $('<option>').val(data.billsLibId).text(data.billsLibName);
  165. select.append(option);
  166. });
  167. if (select.children.length !== 0) {
  168. LoadStdBills(select.val());
  169. }
  170. });
  171. var LoadStdBills = (function () {
  172. var stdBillsSpread = SheetDataHelper.createNewSpread($('#stdBillsSpread')[0]);
  173. var stdBillsJobSpread = null, stdBillsFeatureSpread = null;
  174. var stdBillsTreeSetting = {
  175. "treeCol": 0,
  176. "emptyRows":0,
  177. "headRows":1,
  178. "headRowHeight":[
  179. 35
  180. ],
  181. "cols":[{
  182. "width":100,
  183. "readOnly":null,
  184. "head":{
  185. "titleNames":["项目编码"],
  186. "spanCols":[1],
  187. "spanRows":[1],
  188. "vAlign":[1],
  189. "hAlign":[1],
  190. "font":["12px Arial"]
  191. },
  192. "data":{
  193. "field":"code",
  194. "vAlign":0,
  195. "hAlign":3,
  196. "font":"12px Arial"
  197. }
  198. }, {
  199. "width":120,
  200. "readOnly":null,
  201. "head":{
  202. "titleNames":["项目名称"],
  203. "spanCols":[1],
  204. "spanRows":[1],
  205. "vAlign":[1],
  206. "hAlign":[1],
  207. "font":["12px Arial"]
  208. },
  209. "data":{
  210. "field":"name",
  211. "vAlign":0,
  212. "hAlign":3,
  213. "font":"12px Arial"
  214. }
  215. }, {
  216. "width":40,
  217. "readOnly":null,
  218. "head":{
  219. "titleNames":["计量单位"],
  220. "spanCols":[1],
  221. "spanRows":[1],
  222. "vAlign":[1],
  223. "hAlign":[1],
  224. "font":["12px Arial"],
  225. "wordWrap": true
  226. },
  227. "data":{
  228. "field":"unti",
  229. "vAlign":0,
  230. "hAlign":3,
  231. "font":"12px Arial"
  232. }
  233. }, {
  234. "width":100,
  235. "readOnly": true,
  236. "head":{
  237. "titleNames":["工程量计算规则"],
  238. "spanCols":[1],
  239. "spanRows":[1],
  240. "vAlign":[1],
  241. "hAlign":[1],
  242. "font":["12px Arial"]
  243. },
  244. "data":{
  245. "field":"ruleText",
  246. "vAlign":0,
  247. "hAlign":3,
  248. "font":"12px Arial"
  249. }
  250. }]
  251. };
  252. var stdBillsData, stdBillsJobData, stdBillsFeatureData;
  253. var stdBillsTree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true});
  254. var stdBillsTreeController = TREE_SHEET_CONTROLLER.createNew(stdBillsTree, stdBillsSpread.getActiveSheet(), stdBillsTreeSetting);
  255. var findData = function (value, field, Array) {
  256. var i = 0;
  257. for (i = 0; i < Array.length - 1; i++) {
  258. if (value === Array[i][field]) {
  259. return Array[i];
  260. }
  261. }
  262. return null;
  263. };
  264. var getBillsJobs = function (node) {
  265. var jobs = [], i, jobData = null;
  266. if (stdBillsJobData && node && node.data.jobs) {
  267. for (i = 0; i < node.data.jobs.length - 1; i++) {
  268. jobData = findData(node.data.jobs[i], 'id', stdBillsJobData);
  269. if (jobData) {
  270. jobs.push(jobData);
  271. }
  272. }
  273. }
  274. return jobs;
  275. };
  276. var getBillsFeatures = function (node) {
  277. var features = [], i, featureData = null;
  278. if (stdBillsFeatureData && node && node.data.items) {
  279. for (i = 0; i < node.data.items.length - 1; i++) {
  280. featureData = findData(node.data.items[i], 'id', stdBillsFeatureData);
  281. if (featureData) {
  282. features.push(featureData);
  283. }
  284. }
  285. }
  286. return features;
  287. };
  288. var showJobs = function (jobs) {
  289. var jobsSetting = {
  290. "emptyRows":0,
  291. "headRows":1,
  292. "headRowHeight":[
  293. 20
  294. ],
  295. "cols":[{
  296. "width":200,
  297. "readOnly":true,
  298. "head":{
  299. "titleNames":["工程内容"],
  300. "spanCols":[1],
  301. "spanRows":[1],
  302. "vAlign":[1],
  303. "hAlign":[1],
  304. "font":["12px Arial"]
  305. },
  306. "data":{
  307. "field":"content",
  308. "vAlign":0,
  309. "hAlign":3,
  310. "font":"12px Arial"
  311. }
  312. }]
  313. };
  314. SheetDataHelper.loadSheetHeader(jobsSetting, stdBillsJobSpread.getActiveSheet());
  315. SheetDataHelper.loadSheetData(jobsSetting, stdBillsJobSpread.getActiveSheet(), jobs);
  316. };
  317. var showFeatures = function (features) {
  318. var featuresSetting = {
  319. "emptyRows":0,
  320. "headRows":1,
  321. "headRowHeight":[
  322. 20
  323. ],
  324. "cols":[{
  325. "width":200,
  326. "readOnly":true,
  327. "head":{
  328. "titleNames":["项目特征"],
  329. "spanCols":[1],
  330. "spanRows":[1],
  331. "vAlign":[1],
  332. "hAlign":[1],
  333. "font":["12px Arial"]
  334. },
  335. "data":{
  336. "field":"content",
  337. "vAlign":0,
  338. "hAlign":3,
  339. "font":"12px Arial"
  340. }
  341. }]
  342. };
  343. SheetDataHelper.loadSheetHeader(featuresSetting, stdBillsFeatureSpread.getActiveSheet());
  344. SheetDataHelper.loadSheetData(featuresSetting, stdBillsFeatureSpread.getActiveSheet(), features);
  345. }
  346. var showJobsAndFeatures = function (node) {
  347. $('#stdBillsJobTab').show();
  348. $('#stdBillsRemarkTab').hide();
  349. if (!stdBillsJobSpread) {
  350. stdBillsJobSpread = SheetDataHelper.createNewSpread($('#stdBillsJobs')[0]);
  351. }
  352. showJobs(getBillsJobs(node));
  353. if (!stdBillsFeatureSpread) {
  354. stdBillsFeatureSpread = SheetDataHelper.createNewSpread($('#stdBillsFeatures')[0]);
  355. }
  356. showFeatures(getBillsFeatures(node));
  357. };
  358. var showBillsRemark = function (node) {
  359. $('#stdBillsJobTab').hide();
  360. $('#stdBillsRemarkTab').show();
  361. $('#stdBillsRemark').text(node && node.data.recharge ? node.data.recharge : '');
  362. };
  363. var showBillsRela = function (node) {
  364. if (node && node.children.length === 0) {
  365. showJobsAndFeatures(node);
  366. } else {
  367. showBillsRemark(node);
  368. }
  369. }
  370. var LoadData = function (stdBillsLibID) {
  371. CommonAjax.post('/stdBillsEditor/getJobContent', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  372. stdBillsJobData = datas;
  373. }, function () {
  374. stdBillsJobData = [];
  375. });
  376. CommonAjax.post('/stdBillsEditor/getItemCharacter', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  377. stdBillsFeatureData = datas;
  378. }, function () {
  379. stdBillsFeatureData = [];
  380. });
  381. CommonAjax.post('/stdBillsEditor/getBills', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  382. stdBills = datas;
  383. stdBillsTree.loadDatas(stdBills);
  384. stdBillsTreeController.showTreeData();
  385. showBillsRela(stdBillsTree.firstNode());
  386. stdBillsTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, showBillsRela);
  387. });
  388. };
  389. return LoadData;
  390. })();
  391. $('#stdBillsLibSelect').change(function () {
  392. var select = $(this);
  393. if (this.children.length !== 0) {
  394. LoadStdBills(select.val());
  395. }
  396. });