tender.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. /**
  2. * 标段相关js
  3. *
  4. * @author CaiAoLin
  5. * @date 2018/2/5
  6. * @version
  7. */
  8. // 整理数据
  9. let tenderData = [];
  10. try {
  11. if (tenderList.length <= 0) {
  12. throw '数据为空';
  13. }
  14. for(const tmp of tenderList) {
  15. const tmpData = {
  16. value: 7814964.00,
  17. name: tmp.name,
  18. };
  19. tenderData.push(tmpData);
  20. }
  21. } catch (error) {
  22. }
  23. // 属性
  24. function loadCommonProperty () {
  25. // 合同信息
  26. $('#build-name').val(property.deal_info.buildName);
  27. $('#deal-code').val(property.deal_info.dealCode);
  28. $('#deal-name').val(property.deal_info.dealName);
  29. // 参建单位
  30. // 建设单位
  31. $('#build-company').val(property.construction_unit.build.company);
  32. $('#build-corporation').val(property.construction_unit.build.corporation);
  33. $('#build-date').val(property.construction_unit.build.date);
  34. // 承包单位1
  35. $('#contract1-company').val(property.construction_unit.contract1.company);
  36. $('#contract1-corporation').val(property.construction_unit.contract1.corporation);
  37. $('#contract1-date').val(property.construction_unit.contract1.date);
  38. // 承包单位2
  39. $('#contract2-company').val(property.construction_unit.contract2.company);
  40. $('#contract2-corporation').val(property.construction_unit.contract2.corporation);
  41. $('#contract2-date').val(property.construction_unit.contract2.date);
  42. // 监理单位1
  43. $('#supervision1-company').val(property.construction_unit.supervision1.company);
  44. $('#supervision1-corporation').val(property.construction_unit.supervision1.corporation);
  45. $('#supervision1-date').val(property.construction_unit.supervision1.date);
  46. // 监理单位2
  47. $('#supervision2-company').val(property.construction_unit.supervision2.company);
  48. $('#supervision2-corporation').val(property.construction_unit.supervision2.corporation);
  49. $('#supervision2-date').val(property.construction_unit.supervision2.date);
  50. // 技术参数
  51. $('#loadLevel').val(property.tech_param.loadLevel);
  52. $('#length').val(property.tech_param.loadLength);
  53. $('#start-peg').val(property.tech_param.startPeg);
  54. $('#end-peg').val(property.tech_param.endPeg);
  55. $('#lane-count').val(property.tech_param.laneCount);
  56. $('#deal-period').val(property.tech_param.dealPeriod);
  57. $('#start-date').val(property.tech_param.startDate);
  58. $('#plan-end-date').val(property.tech_param.planEndDate);
  59. }
  60. // 小数位数
  61. function loadCalculateProperty () {
  62. $('#decimal-up').val(property.decimal.up);
  63. $('#decimal-tp').val(property.decimal.tp);
  64. $('#decimal-pay')[0].checked = property.decimal.pay;
  65. $('#decimal-pay-tp').val(property.decimal.payTp);
  66. }
  67. // 清单精度
  68. function loadPrecisionProperty () {
  69. $('#unit-t').val(property.precision.t.value);
  70. $('#unit-km').val(property.precision.km.value);
  71. $('#unit-m').val(property.precision.m.value);
  72. $('#unit-m2').val(property.precision.m2.value);
  73. $('#unit-m3').val(property.precision.m3.value);
  74. $('#unit-kg').val(property.precision.kg.value);
  75. $('#unit-ge').val(property.precision.ge.value);
  76. $('#unit-tai').val(property.precision.tai.value);
  77. $('#unit-tao').val(property.precision.tao.value);
  78. $('#unit-ke').val(property.precision.ke.value);
  79. $('#unit-zu').val(property.precision.zu.value);
  80. $('#unit-xitong').val(property.precision.xitong.value);
  81. $('#unit-other').val(property.precision.other.value);
  82. }
  83. // 合同参数
  84. function loadDealProperty () {
  85. $('#contract-price').val(property.deal_param.contractPrice);
  86. $('#zan-lie-price').val(property.deal_param.zanLiePrice);
  87. const iDecimal = property.decimal.pay ? property.decimal.payTp : property.decimal.tp;
  88. $('#c-zl').val(ZhCalc.round(ZhCalc.minus(property.deal_param.contractPrice, property.deal_param.zanLiePrice), iDecimal));
  89. $('#start-advance').val(property.deal_param.startAdvance);
  90. $('#material-advance').val(property.deal_param.materialAdvance);
  91. }
  92. // 显示设置
  93. function loadDisplayProperty () {
  94. $('#ledger-dgn-qty')[0].checked = property.display.ledger.dgnQty;
  95. $('#ledger-cl-qty')[0].checked = property.display.ledger.clQty;
  96. }
  97. // 设置某个div下全部的input、select是否只读
  98. function setReadOnly(obj, readOnly) {
  99. if (readOnly) {
  100. $('input', obj).attr('readonly', '');
  101. $('select', obj).attr('disabled', '');
  102. $('input[type=checkbox]', obj).attr('disabled', '');
  103. } else {
  104. $('input', obj).removeAttr('readonly');
  105. $('select', obj).removeAttr('disabled');
  106. $('input[type=checkbox]', obj).removeAttr('disabled');
  107. }
  108. }
  109. // 获取当前合同支付应该使用的小数位数
  110. function getDealTpDecimal() {
  111. const spec = $('#decimal-pay')[0].checked;
  112. return spec ? _.toNumber($('#decimal-pay-tp').val()) : _.toNumber($('#decimal-tp').val());
  113. }
  114. // 四舍五入
  115. function roundPrice(obj) {
  116. //const iDecimal = getDealTpDecimal();
  117. //obj.val(ZhCalc.round(_.toNumber(obj.val()), iDecimal));
  118. }
  119. // 计算签约合同价(不含暂列金额)
  120. function calculateC2() {
  121. const constract = _.toNumber($('#contract-price').val());
  122. const zanLie = _.toNumber($('#zan-lie-price').val());
  123. //const iDecimal = getDealTpDecimal();
  124. //$('#c-zl').val(ZhCalc.round(constract - zanLie, iDecimal));
  125. $('#c-zl').val(ZhCalc.minus(constract, zanLie));
  126. }
  127. // 根据小数位数,计算全部的合同参数
  128. function CalculateAllDealParam() {
  129. roundPrice($('#contract-price'));
  130. roundPrice($('#zan-lie-price'));
  131. roundPrice($('#start-advance'));
  132. roundPrice($('#material-advance'));
  133. calculateC2();
  134. }
  135. // 根据Min Max限制Input输入
  136. function limitInputMinMax (obj) {
  137. if (_.toNumber(obj.value) > _.toNumber(obj.max)) {
  138. obj.value = obj.max;
  139. }
  140. if(_.toNumber(obj.value) < _.toNumber(obj.min)) {
  141. obj.value = obj.min;
  142. }
  143. }
  144. // 根据Maxlength限制input输入
  145. function limitMaxLength (obj) {
  146. if (obj.value.length > obj.maxLength) {
  147. obj.value = obj.value.substr(0, obj.maxLength);
  148. }
  149. }
  150. // 根据正则限制输入
  151. function limitReg(obj, reg) {
  152. obj.value = obj.value.replace(reg, '');
  153. }
  154. // 小数位数 input 输入限制
  155. function limitDecimal(obj) {
  156. limitReg(obj, /[^\d]/g);
  157. limitMaxLength(obj);
  158. limitInputMinMax(obj);
  159. }
  160. function limitDealParamLength(obj) {
  161. limitReg(obj, /[^\d\.]/g); // 过滤数字和.
  162. limitReg(obj, /\.{2,}/g); // 过滤第二个.
  163. limitInputMinMax(obj);
  164. }
  165. function checkNumberValid(obj) {
  166. const value = _.toNumber(obj.value);
  167. obj.value = value ? value : '';
  168. }
  169. $(document).ready(function() {
  170. // 章节设置
  171. const chapterObj = (function () {
  172. const spreadSetting = {
  173. cols: [
  174. {title: '章节', colSpan: '1', rowSpan: '1', field: 'code', hAlign: 0, width: 100, formatter: '@', readOnly: true},
  175. {title: '名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 230, formatter: '@', readOnly: true},
  176. ],
  177. emptyRows: 0,
  178. headRows: 1,
  179. headRowHeight: [40],
  180. defaultRowHeight: 21,
  181. };
  182. const spread = SpreadJsObj.createNewSpread($('#chapter-spread')[0]);
  183. spread.options.showVerticalScrollbar = false;
  184. spread.options.showHorizontalScrollbar = false;
  185. SpreadJsObj.initSheet(spread.getActiveSheet(), spreadSetting);
  186. function checkSheetData(sheet) {
  187. let hint = '';
  188. for (let iRow = 0; iRow < sheet.getRowCount(); iRow++) {
  189. const cell = sheet.getCell(iRow, 1);
  190. const defaultStype = sheet.getDefaultStyle();
  191. if (cell.text().length > 50) {
  192. cell.backColor('#f8d7da');
  193. hint = '章节名称的长度超出范围,请重新输入';
  194. } else {
  195. cell.backColor(defaultStype.backColor);
  196. }
  197. }
  198. if (hint === '') {
  199. $('#hint-6').hide();
  200. } else {
  201. $('#hint-6').html('<i class="fa fa-smile-o mr-2"></i>' + hint).show();
  202. }
  203. }
  204. spread.bind(spreadNS.Events.EditEnding, function (e, info) {
  205. checkSheetData(info.sheet);
  206. });
  207. spread.bind(spreadNS.Events.ClipboardPasted, function (e, info) {
  208. checkSheetData(info.sheet);
  209. });
  210. function loadChapterProperty() {
  211. SpreadJsObj.loadSheetData(spread.getActiveSheet(), SpreadJsObj.DataType.Data, property.chapter);
  212. $('#hint-6').hide();
  213. const sheet = spread.getActiveSheet();
  214. const defaultStype = sheet.getDefaultStyle();
  215. sheet.getRange(0, 0, sheet.getRowCount(), sheet.getColumnCount()).backColor(defaultStype.backColor);
  216. }
  217. function setReadOnly(readOnly) {
  218. SpreadJsObj.resetFieldReadOnly(spread.getActiveSheet(), 'name', readOnly);
  219. }
  220. function getNewChapterData() {
  221. const result = [];
  222. const sheet = spread.getActiveSheet();
  223. for (let iRow = 0; iRow < sheet.getRowCount(); iRow++) {
  224. const data = {};
  225. for (let iCol = 0; iCol < sheet.getColumnCount(); iCol++) {
  226. const col = spreadSetting.cols[iCol];
  227. data[col.field] = sheet.getText(iRow, iCol);
  228. if (col.field === 'name') {
  229. if (data.name.length > 50) {
  230. return null;
  231. }
  232. }
  233. }
  234. result.push(data);
  235. }
  236. return result;
  237. }
  238. return { loadChapterProperty, setReadOnly, getNewChapterData, }
  239. })();
  240. // 标段属性
  241. function loadTenderProperty() {
  242. // 加载属性
  243. loadCommonProperty();
  244. loadCalculateProperty();
  245. loadPrecisionProperty();
  246. loadDealProperty();
  247. loadDisplayProperty();
  248. chapterObj.loadChapterProperty();
  249. // 设置只读
  250. setReadOnly('#shuxing', true);
  251. }
  252. loadTenderProperty();
  253. /**
  254. * 属性
  255. */
  256. // 编辑
  257. $('#edit-1').click(() => {
  258. setReadOnly('#v-pills-1', false);
  259. $('#post-1').parent().show();
  260. $('#edit-1').parent().hide();
  261. });
  262. // 取消
  263. $('#cancel-1').click(() => {
  264. setReadOnly('#v-pills-1', true);
  265. loadCommonProperty();
  266. $('#post-1').parent().hide();
  267. $('#edit-1').parent().show();
  268. });
  269. // 提交
  270. $('#post-1').click(() => {
  271. const prop = {
  272. deal_info: {
  273. buildName: $('#build-name').val(),
  274. dealCode: $('#deal-code').val(),
  275. dealName: $('#deal-name').val(),
  276. },
  277. construction_unit: {
  278. build: {
  279. company: $('#build-company').val(),
  280. corporation: $('#build-corporation').val(),
  281. date: $('#build-date').val(),
  282. },
  283. contract1: {
  284. company: $('#contract1-company').val(),
  285. corporation: $('#contract1-corporation').val(),
  286. date: $('#contract1-date').val(),
  287. },
  288. contract2: {
  289. company: $('#contract2-company').val(),
  290. corporation: $('#contract2-corporation').val(),
  291. date: $('#contract2-date').val(),
  292. },
  293. supervision1: {
  294. company: $('#supervision1-company').val(),
  295. corporation: $('#supervision1-corporation').val(),
  296. date: $('#supervision1-date').val(),
  297. },
  298. supervision2: {
  299. company: $('#supervision2-company').val(),
  300. corporation: $('#supervision2-corporation').val(),
  301. date: $('#supervision2-date').val(),
  302. },
  303. },
  304. tech_param: {
  305. loadLevel: _.toNumber($('#loadLevel').val()),
  306. loadLength: _.toNumber($('#length').val()),
  307. startPeg: $('#start-peg').val(),
  308. endPeg: $('#end-peg').val(),
  309. laneCount: _.toNumber($('#lane-count').val()),
  310. dealPeriod: $('#deal-period').val(),
  311. startDate: $('#start-date').val(),
  312. planEndDate: $('#plan-end-date').val(),
  313. }
  314. };
  315. const tenderId = window.location.pathname.split('/')[2];
  316. postData('/tender/' + tenderId + '/save', prop, function (data) {
  317. setReadOnly('#v-pills-1', true);
  318. property.deal_info = data.deal_info;
  319. property.construction_unit = data.construction_unit;
  320. property.tech_param = data.tech_param;
  321. $('#post-1').parent().hide();
  322. $('#edit-1').parent().show();
  323. });
  324. });
  325. /**
  326. * 计算参数
  327. */
  328. // 编辑
  329. $('#edit-2').click(() => {
  330. setReadOnly('#v-pills-2', false);
  331. $('#post-2').parent().show();
  332. $('#edit-2').parent().hide();
  333. });
  334. // 取消
  335. $('#cancel-2').click(() => {
  336. setReadOnly('#v-pills-2', true);
  337. loadCalculateProperty();
  338. $('#post-2').parent().hide();
  339. $('#edit-2').parent().show();
  340. });
  341. // 提交
  342. $('#post-2').click(() => {
  343. const prop = {
  344. decimal: {
  345. up: _.toNumber($('#decimal-up').val()),
  346. tp: _.toNumber($('#decimal-tp').val()),
  347. pay: $('#decimal-pay')[0].checked,
  348. payTp: _.toNumber($('#decimal-pay-tp').val()),
  349. }
  350. };
  351. const tenderId = window.location.pathname.split('/')[2];
  352. postData('/tender/' + tenderId + '/save', prop, function (data) {
  353. setReadOnly('#v-pills-2', true);
  354. property.decimal = data.decimal;
  355. $('#post-2').parent().hide();
  356. $('#edit-2').parent().show();
  357. });
  358. });
  359. /**
  360. * 清单精度
  361. */
  362. // 编辑
  363. $('#edit-3').click(() => {
  364. setReadOnly('#v-pills-3', false);
  365. $('#post-3').parent().show();
  366. $('#edit-3').parent().hide();
  367. });
  368. // 取消
  369. $('#cancel-3').click(() => {
  370. setReadOnly('#v-pills-3', true);
  371. loadPrecisionProperty();
  372. $('#post-3').parent().hide();
  373. $('#edit-3').parent().show();
  374. });
  375. // 提交
  376. $('#post-3').click(() => {
  377. const prop = { precision: JSON.parse(JSON.stringify(property.precision)) };
  378. prop.precision.t.value = _.toNumber($('#unit-t').val());
  379. prop.precision.km.value = _.toNumber($('#unit-km').val());
  380. prop.precision.m.value = _.toNumber($('#unit-m').val());
  381. prop.precision.m2.value = _.toNumber($('#unit-m2').val());
  382. prop.precision.m3.value = _.toNumber($('#unit-m3').val());
  383. prop.precision.kg.value = _.toNumber($('#unit-kg').val());
  384. prop.precision.ge.value = _.toNumber($('#unit-ge').val());
  385. prop.precision.tai.value = _.toNumber($('#unit-tai').val());
  386. prop.precision.tao.value = _.toNumber($('#unit-tao').val());
  387. prop.precision.ke.value = _.toNumber($('#unit-ke').val());
  388. prop.precision.zu.value = _.toNumber($('#unit-zu').val());
  389. prop.precision.xitong.value = _.toNumber($('#unit-xitong').val());
  390. prop.precision.other.value = _.toNumber($('#unit-other').val());
  391. const tenderId = window.location.pathname.split('/')[2];
  392. postData('/tender/' + tenderId + '/save', prop, function (data) {
  393. setReadOnly('#v-pills-3', true);
  394. property.precision = data.precision;
  395. $('#post-3').parent().hide();
  396. $('#edit-3').parent().show();
  397. });
  398. });
  399. /**
  400. * 合同参数
  401. */
  402. // 编辑
  403. $('#edit-4').click(() => {
  404. setReadOnly('#v-pills-4', false);
  405. $('#post-4').parent().show();
  406. $('#edit-4').parent().hide();
  407. });
  408. // 取消
  409. $('#cancel-4').click(() => {
  410. setReadOnly('#v-pills-4', true);
  411. loadDealProperty();
  412. $('#post-4').parent().hide();
  413. $('#edit-4').parent().show();
  414. });
  415. // 提交
  416. $('#post-4').click(() => {
  417. const prop = {
  418. deal_param: {
  419. contractPrice: _.toNumber($('#contract-price').val()),
  420. zanLiePrice: _.toNumber($('#zan-lie-price').val()),
  421. startAdvance: _.toNumber($('#start-advance').val()),
  422. materialAdvance: _.toNumber($('#material-advance').val()),
  423. }
  424. };
  425. const tenderId = window.location.pathname.split('/')[2];
  426. postData('/tender/' + tenderId + '/save', prop, function (data) {
  427. setReadOnly('#v-pills-4', true);
  428. property.deal_param = data.deal_param;
  429. $('#post-4').parent().hide();
  430. $('#edit-4').parent().show();
  431. });
  432. });
  433. /**
  434. * 显示设置
  435. */
  436. // 编辑
  437. $('#edit-5').click(() => {
  438. setReadOnly('#v-pills-5', false);
  439. $('#post-5').parent().show();
  440. $('#edit-5').parent().hide();
  441. });
  442. // 取消
  443. $('#cancel-5').click(() => {
  444. setReadOnly('#v-pills-5', true);
  445. loadDisplayProperty();
  446. $('#post-5').parent().hide();
  447. $('#edit-5').parent().show();
  448. });
  449. // 提交
  450. $('#post-5').click(() => {
  451. const prop = {
  452. display: {
  453. ledger: { dgnQty: $('#ledger-dgn-qty')[0].checked, clQty: $('#ledger-cl-qty')[0].checked, },
  454. },
  455. };
  456. const tenderId = window.location.pathname.split('/')[2];
  457. postData('/tender/' + tenderId + '/save', prop, function (data) {
  458. setReadOnly('#v-pills-5', true);
  459. property.display = data.display;
  460. $('#post-5').parent().hide();
  461. $('#edit-5').parent().show();
  462. });
  463. });
  464. /**
  465. * 章节设置
  466. */
  467. // 编辑
  468. $('#edit-6').click(() => {
  469. chapterObj.setReadOnly(false);
  470. $('#post-6').parent().show();
  471. $('#edit-6').parent().hide();
  472. });
  473. // 取消
  474. $('#cancel-6').click(() => {
  475. chapterObj.loadChapterProperty();
  476. chapterObj.setReadOnly(true);
  477. $('#hint-6').hide();
  478. $('#post-6').parent().hide();
  479. $('#edit-6').parent().show();
  480. });
  481. // 提交
  482. $('#post-6').click(() => {
  483. const chapter = chapterObj.getNewChapterData();
  484. if (!chapter) { return; }
  485. const tenderId = window.location.pathname.split('/')[2];
  486. postData('/tender/' + tenderId + '/save', { chapter: chapter }, function (data) {
  487. chapterObj.setReadOnly(true);
  488. property.chapter = data.chapter;
  489. $('#post-6').parent().hide();
  490. $('#edit-6').parent().show();
  491. });
  492. });
  493. //标段类型选择
  494. $('#tender_type_select').change(function () {
  495. const type = $(this).val() != 0 ? '/?type='+$(this).val() : '';
  496. window.location.href = '/tender' + type;
  497. });
  498. //编辑标段 选择
  499. $('.save-btn').on('click',function () {
  500. $('#saveid').val($(this).attr('tender-id'));
  501. $('#savename').val($(this).attr('tender-name'));
  502. $('#savetype').val($(this).attr('tender-type'));
  503. });
  504. //删除标段 选择
  505. $('.del-btn').on('click',function () {
  506. $('#delid').val($(this).attr('tender-id'));
  507. });
  508. });