calc_program_manage.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570
  1. /**
  2. * Created by CSL on 2017-08-03.
  3. * 计算程序管理。
  4. */
  5. let calcProgramManage = {
  6. datas: [],
  7. mainSpread: null,
  8. detailSpread: null,
  9. mainSheet: null,
  10. detailSheet: null,
  11. mainSetting: {
  12. header: [
  13. // {headerName:"ID",headerWidth:80,dataCode:"ID", hAlign: "center"},
  14. { headerName: "名称", headerWidth: 200, dataCode: "name", dataType: "String" },
  15. ],
  16. view: {
  17. comboBox: [],
  18. lockColumns: [0, 1],
  19. colHeaderHeight: CP_Col_Width.colHeader,
  20. rowHeaderWidth: CP_Col_Width.rowHeader,
  21. },
  22. },
  23. detailSetting: {
  24. header: [
  25. // {headerName:"ID",headerWidth:80,dataCode:"ID", hAlign: "center"},
  26. { headerName: "费用代号", headerWidth: CP_Col_Width.code, dataCode: "code", dataType: "String" },
  27. { headerName: "费用名称", headerWidth: CP_Col_Width.name, dataCode: "name", dataType: "String" },
  28. {
  29. headerName: "计算基数",
  30. headerWidth: CP_Col_Width.dispExprUser,
  31. dataCode: "dispExprUser",
  32. dataType: "String",
  33. cellType: "cusButton",
  34. callback: "calcBase",
  35. disable: "calcBase",
  36. },
  37. { headerName: "费率", headerWidth: CP_Col_Width.feeRate, dataCode: "feeRate", dataType: "Number", hAlign: "right", decimalField: "feeRate" },
  38. { headerName: "费用类别", headerWidth: CP_Col_Width.displayFieldName, dataCode: "displayFieldName", dataType: "String", hAlign: "center" },
  39. { headerName: "基数说明", headerWidth: CP_Col_Width.statement, dataCode: "statement", dataType: "String" },
  40. { headerName: "备注", headerWidth: CP_Col_Width.memo, dataCode: "memo", dataType: "String" },
  41. ],
  42. view: {
  43. comboBox: [],
  44. lockColumns: [2, 5],
  45. colHeaderHeight: CP_Col_Width.colHeader,
  46. rowHeaderWidth: CP_Col_Width.rowHeader,
  47. },
  48. //callback 和disable都是和 cusButton配套使用的
  49. callback: {
  50. calcBase: function (hitinfo) {
  51. calcBaseView.onCalcBaseButtonClick(hitinfo, "ration");
  52. },
  53. },
  54. disable: {
  55. calcBase: function (row, col) {
  56. return projectReadOnly || !calcBaseView.ifEdit("ration", row);
  57. },
  58. },
  59. },
  60. buildSheet: function () {
  61. let me = this;
  62. me.datas = projectObj.project.calcProgram.datas.templates;
  63. if (me.mainSpread) {
  64. me.mainSpread.destroy();
  65. me.mainSpread = null;
  66. }
  67. if (me.detailSpread) {
  68. me.detailSpread.destroy();
  69. me.detailSpread = null;
  70. }
  71. me.mainSpread = sheetCommonObj.buildSheet($("#mainSpread")[0], me.mainSetting, me.datas.length);
  72. me.mainSheet = me.mainSpread.getSheet(0);
  73. sheetCommonObj.spreadDefaultStyle(me.mainSpread);
  74. me.detailSpread = sheetCommonObj.buildSheet($("#detailSpread")[0], me.detailSetting, me.datas[0].calcItems.length);
  75. me.detailSheet = me.detailSpread.getSheet(0);
  76. sheetCommonObj.spreadDefaultStyle(me.detailSpread);
  77. let arr = projectObj.project.calcProgram.compiledFeeTypeNames.slice();
  78. let fieldName = new GC.Spread.Sheets.CellTypes.ComboBox();
  79. fieldName.items(arr);
  80. me.detailSheet.getRange(-1, 4, -1, 1).cellType(fieldName);
  81. me.mainSheet.bind(GC.Spread.Sheets.Events.EnterCell, me.onMainEnterCell);
  82. me.detailSheet.bind(GC.Spread.Sheets.Events.ValueChanged, me.onDetailValueChanged);
  83. me.detailSheet.bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
  84. me.detailSheet.bind(GC.Spread.Sheets.Events.EnterCell, me.onDetailEnterCell);
  85. me.detailSheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
  86. me.detailSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, function (e, info) {
  87. info.sheet.repaint();
  88. });
  89. sheetCommonObj.showData(me.mainSheet, me.mainSetting, me.datas);
  90. me.detailSheet.name("calc_detail");
  91. feeRateObject.setFeeRateCellCol(me.detailSheet, _.findIndex(me.detailSetting.header, { dataCode: "feeRate" }));
  92. sheetCommonObj.showData(me.detailSheet, me.detailSetting, me.datas[0].calcItems);
  93. me.getfeeRateColor(me.datas[0].calcItems);
  94. customRowHeader(me.detailSheet, me.datas[0].calcItems.length);
  95. if (!projectReadOnly) {
  96. me.loadMainContextMenu();
  97. me.loadDetailContextMenu();
  98. } else {
  99. if (me.mainSetting.view.lockColumns) {
  100. me.mainSetting.view.lockColumns = null;
  101. }
  102. if (me.detailSetting.view.lockColumns) {
  103. me.detailSetting.view.lockColumns = null;
  104. }
  105. sheetCommonObj.disableSpread(me.mainSpread);
  106. sheetCommonObj.disableSpread(me.detailSpread);
  107. }
  108. },
  109. getStdCalcProgramFiles: function () {
  110. function getStdCPFilesHtml(stdCPLibs) {
  111. let result = '<option value="">请选择计算程序标准库</option>';
  112. if (stdCPLibs.length <= 0) {
  113. return result;
  114. }
  115. for (let lib of stdCPLibs) {
  116. result += "<option value=" + lib.id + ">" + lib.name + "</option>";
  117. }
  118. return result;
  119. }
  120. let stdCPHtml = getStdCPFilesHtml(projectObj.project.projectInfo.engineeringInfo.program_lib);
  121. $("#calcProgramFileSelect").html(stdCPHtml);
  122. },
  123. onMainEnterCell: function (sender, args) {
  124. var me = calcProgramManage;
  125. var row = args.sheet.getActiveRowIndex();
  126. me.detailSpread.suspendPaint();
  127. var dData = me.datas[row].calcItems;
  128. me.detailSheet.setRowCount(dData.length, GC.Spread.Sheets.SheetArea.viewport);
  129. sheetCommonObj.showData(me.detailSheet, me.detailSetting, dData);
  130. me.getfeeRateColor(dData);
  131. customRowHeader(me.detailSheet, dData.length);
  132. me.detailSpread.resumePaint();
  133. },
  134. onRangeChanged: function (sender, args) {
  135. let me = calcProgramManage;
  136. let editInfo = me.getSelectionInfo();
  137. let dataCode = me.detailSetting.header[args.col].dataCode;
  138. // if (args.action == GC.Spread.Sheets.RangeChangedAction.clear&&args.changedCells.length == 1) {//清除操作
  139. if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {
  140. //清除操作
  141. if (dataCode == "feeRate") {
  142. $.bootstrapLoading.start();
  143. projectObj.project.FeeRate.updateFeeRateFromCalc(null, editInfo);
  144. } else if (dataCode == "displayFieldName") {
  145. $.bootstrapLoading.start();
  146. for (let cell of args.changedCells) {
  147. let curCalcItem = editInfo.template.calcItems[cell.row];
  148. curCalcItem.fieldName = "";
  149. curCalcItem.displayFieldName = "";
  150. }
  151. let data = {
  152. projectID: projectObj.project.ID(),
  153. ID: editInfo.template.ID,
  154. calcItems: editInfo.template.calcItems,
  155. };
  156. calcProgramManage.updateTemplate(data, function (rst) {
  157. if (rst) {
  158. calcProgramManage.refreshDetailSheet();
  159. $.bootstrapLoading.end();
  160. }
  161. });
  162. }
  163. }
  164. },
  165. onDetailValueChanged: function (sender, args) {
  166. $.bootstrapLoading.start();
  167. let me = calcProgramManage;
  168. let editInfo = me.getSelectionInfo();
  169. let curCalcItem = editInfo.calcItem;
  170. let dataCode = me.detailSetting.header[args.col].dataCode;
  171. if (dataCode == "feeRate") {
  172. projectObj.project.FeeRate.updateFeeRateFromCalc(args.newValue, editInfo);
  173. $.bootstrapLoading.end();
  174. return;
  175. }
  176. let template = me.getSelectionInfo().template;
  177. if (dataCode == "displayFieldName") {
  178. if (curCalcItem.displayFieldName == args.newValue) {
  179. $.bootstrapLoading.end();
  180. return;
  181. }
  182. if (analyzer.fieldNameIsUsed(template, args.newValue)) {
  183. let sheet = me.detailSpread.getActiveSheet();
  184. sheet.suspendEvent();
  185. sheet.setValue(args.row, args.col, args.oldValue);
  186. sheet.resumeEvent();
  187. $.bootstrapLoading.end();
  188. let s = hintBox.font(template.fieldNameTempUsed + 1);
  189. hintBox.infoBox("系统提示", `“${args.newValue}” 已被第 ${s} 行使用,不允许重复选择!`, 1);
  190. delete template.fieldNameTempUsed;
  191. return;
  192. }
  193. curCalcItem.fieldName = projectObj.project.calcProgram.compiledFeeTypeMaps[args.newValue];
  194. } else if (dataCode == "dispExprUser") {
  195. // 除非直接改单元格,弹窗不会走这里
  196. hintBox.infoBox("系统提示", "用户直接在sheet中修改了dispExprUser值,触发onDetailEditEnded事件。", 1);
  197. }
  198. curCalcItem[dataCode] = args.newValue;
  199. if (dataCode == "name") {
  200. analyzer.refreshUsedCalcItemsStatement(template, curCalcItem);
  201. let data = {
  202. projectID: projectObj.project.ID(),
  203. ID: template.ID,
  204. calcItems: template.calcItems,
  205. };
  206. calcProgramManage.updateTemplate(data, function (rst) {
  207. if (rst) {
  208. calcProgramManage.refreshDetailSheet();
  209. $.bootstrapLoading.end();
  210. }
  211. });
  212. if (activeSubSheetIsCalcProgram()) calcProgramObj.refreshCalcProgram(projectObj.project.mainTree.selected, 1);
  213. } else {
  214. let data = {
  215. projectID: projectObj.project.ID(),
  216. templatesID: template.ID,
  217. calcItem: curCalcItem,
  218. };
  219. me.saveCalcItem(data, function (rst) {
  220. if (rst) {
  221. let relationNodes = calcTools.getNodesByProgramID(template.ID);
  222. projectObj.project.calcProgram.calcNodesAndSave(relationNodes);
  223. $.bootstrapLoading.end();
  224. }
  225. });
  226. }
  227. },
  228. onDetailEnterCell: function (sender, args) {
  229. // for test.
  230. // let t = calcProgramManage.getSelectionInfo().template;
  231. // let c = calcProgramManage.getSelectionInfo().calcItem;
  232. // let lc = analyzer.calcItemLabourCoe(c);
  233. // c.dispExpr = analyzer.getDispExpr(c.expression, t);
  234. // c.dispExprUser = analyzer.getDispExprUser(c.dispExpr, lc);
  235. // c.compiledExpr = analyzer.getCompiledExpr(c.expression, lc);
  236. // let e = `ID:${c.ID} ${c.expression} ${c.dispExpr} ${c.dispExprUser} ${c.compiledExpr} ${c.custom}`;
  237. // projectObj.testDisplay('', e);
  238. },
  239. onClipboardPasting: function (sender, args) {
  240. args.cancel = true;
  241. },
  242. loadMainContextMenu: function () {
  243. $.contextMenu({
  244. selector: "#mainSpread",
  245. build: function ($trigger, e) {
  246. SheetDataHelper.safeRightClickSelection($trigger, e, calcProgramManage.mainSpread);
  247. },
  248. items: {
  249. copyTemplate: {
  250. name: "另存为",
  251. icon: "copy",
  252. callback: function (key, opt) {
  253. $.bootstrapLoading.start();
  254. let template = calcProgramManage.getSelectionInfo().template;
  255. let idx = calcProgramManage.mainSpread.getActiveSheet().getActiveRowIndex();
  256. let newTemplate = {};
  257. newTemplate.ID = analyzer.templateMaxID() + 1;
  258. newTemplate.name = analyzer.templateNewName(template.name);
  259. newTemplate.custom = true;
  260. newTemplate.calcItems = [];
  261. $.extend(true, newTemplate.calcItems, template.calcItems);
  262. // 清理掉费率ID关联
  263. for (let ci of newTemplate.calcItems) {
  264. if (ci.feeRateID || ci.feeRateID == null) delete ci.feeRateID;
  265. }
  266. let data = {
  267. projectID: projectObj.project.ID(),
  268. ID: newTemplate.ID,
  269. name: newTemplate.name,
  270. custom: newTemplate.custom,
  271. calcItems: newTemplate.calcItems,
  272. };
  273. calcProgramManage.addTemplate(data, function (rst) {
  274. if (rst) {
  275. let ts = projectObj.project.calcProgram.templates;
  276. ts.push(newTemplate);
  277. projectObj.project.calcProgram.compileTemplateMaps();
  278. projectObj.project.calcProgram.compileTemplate(newTemplate);
  279. calcProgramManage.buildSheet();
  280. calcProgramManage.mainSheet.setSelection(ts.length - 1, 0, 1, 1);
  281. calcProgramManage.mainSheet.showRow(ts.length - 1, GC.Spread.Sheets.VerticalPosition.center);
  282. calcProgramManage.refreshDetailSheet();
  283. $.bootstrapLoading.end();
  284. }
  285. });
  286. },
  287. },
  288. reNameTemplate: {
  289. name: "重命名...",
  290. icon: "edit",
  291. disabled: function () {
  292. let custom = calcProgramManage.getSelectionInfo().template.custom;
  293. let canReName = custom ? custom : false;
  294. return !canReName;
  295. },
  296. callback: function (key, opt) {
  297. $.bootstrapLoading.start();
  298. let template = calcProgramManage.getSelectionInfo().template;
  299. let idx = calcProgramManage.mainSpread.getActiveSheet().getActiveRowIndex();
  300. let newName = "";
  301. hintBox.valueBox("重命名", template.name, function () {
  302. newName = hintBox.value;
  303. if (!newName) {
  304. hintBox.error(`名称不能为空!`);
  305. return false;
  306. }
  307. if (newName == template.name) {
  308. $.bootstrapLoading.end();
  309. return;
  310. }
  311. if (analyzer.templateNameIsExist(newName)) {
  312. hintBox.error(`“${newName}” 已存在,请重新输入!`);
  313. return false;
  314. }
  315. template.name = newName;
  316. let data = {
  317. projectID: projectObj.project.ID(),
  318. ID: template.ID,
  319. name: template.name,
  320. };
  321. calcProgramManage.updateTemplate(data, function (rst) {
  322. if (rst) {
  323. projectObj.project.calcProgram.compileTemplateMaps();
  324. projectObj.mainController.refreshTreeNode(calcTools.getNodesByProgramID(template.ID));
  325. sheetCommonObj.showData(calcProgramManage.mainSpread.getSheet(0), calcProgramManage.mainSetting, calcProgramManage.datas);
  326. $.bootstrapLoading.end();
  327. }
  328. });
  329. });
  330. },
  331. },
  332. spr1: "--------",
  333. deleteTemplate: {
  334. name: "删除",
  335. icon: "fa-remove",
  336. disabled: function () {
  337. let custom = calcProgramManage.getSelectionInfo().template.custom;
  338. let canDelete = custom ? custom : false;
  339. return !canDelete;
  340. },
  341. callback: function () {
  342. $.bootstrapLoading.start();
  343. let template = calcProgramManage.getSelectionInfo().template;
  344. if (analyzer.templateIsUsed(template.ID)) {
  345. $.bootstrapLoading.end();
  346. hintBox.infoBox("系统提示", `计算模板“${template.name}”已被使用,不允许删除!`, 1);
  347. return;
  348. }
  349. hintBox.infoBox("系统提示", `确定要删除计算模板“${template.name}”吗?`, 2, cbYes);
  350. function cbYes() {
  351. let data = {
  352. projectID: projectObj.project.ID(),
  353. ID: template.ID,
  354. };
  355. calcProgramManage.deleteTemplate(data, function (rst) {
  356. if (rst) {
  357. let idx = calcProgramManage.mainSheet.getActiveRowIndex();
  358. projectObj.project.calcProgram.templates.splice(idx, 1);
  359. projectObj.project.calcProgram.compileTemplateMaps();
  360. calcProgramManage.buildSheet();
  361. calcProgramManage.mainSheet.setSelection(idx - 1, 0, 1, 1);
  362. calcProgramManage.mainSheet.showRow(idx - 1, GC.Spread.Sheets.VerticalPosition.center);
  363. calcProgramManage.refreshDetailSheet();
  364. $.bootstrapLoading.end();
  365. }
  366. });
  367. }
  368. },
  369. },
  370. },
  371. });
  372. },
  373. loadDetailContextMenu: function () {
  374. $.contextMenu({
  375. selector: "#detailSpread",
  376. build: function ($triggerElement, event) {
  377. SheetDataHelper.safeRightClickSelection($triggerElement, event, calcProgramManage.detailSpread);
  378. },
  379. items: {
  380. newCalcItem: {
  381. name: "插入行",
  382. icon: "fa-sign-in",
  383. callback: function () {
  384. $.bootstrapLoading.start();
  385. let template = calcProgramManage.getSelectionInfo().template;
  386. let idx = calcProgramManage.detailSpread.getActiveSheet().getActiveRowIndex();
  387. let newItem = {};
  388. newItem.ID = analyzer.calcItemMaxID(template) + 1;
  389. // newItem.name = '新建';
  390. newItem.memo = "自定义";
  391. newItem.custom = true;
  392. newItem.expression = "0"; // 这里必须得有值,否则程序内部公式解析会出现诸多问题
  393. template.calcItems.splice(idx + 1, 0, newItem);
  394. let data = {
  395. projectID: projectObj.project.ID(),
  396. ID: template.ID,
  397. calcItems: template.calcItems,
  398. };
  399. calcProgramManage.updateTemplate(data, function (rst) {
  400. if (rst) {
  401. projectObj.project.calcProgram.compileTemplate(template);
  402. calcProgramManage.refreshDetailSheet();
  403. calcProgramManage.detailSpread.getActiveSheet().setSelection(idx + 1, 0, 1, 1);
  404. let relationNodes = calcTools.getNodesByProgramID(template.ID);
  405. projectObj.project.calcProgram.calcNodesAndSave(relationNodes);
  406. }
  407. });
  408. $.bootstrapLoading.end();
  409. },
  410. },
  411. spr1: "--------",
  412. deleteCalcItem: {
  413. name: "删除行",
  414. icon: "fa-remove",
  415. callback: function () {
  416. $.bootstrapLoading.start();
  417. let template = calcProgramManage.getSelectionInfo().template;
  418. let idx = calcProgramManage.detailSpread.getActiveSheet().getActiveRowIndex();
  419. let item = template.calcItems[idx];
  420. if (item.fieldName == "common") {
  421. $.bootstrapLoading.end();
  422. hintBox.infoBox("系统提示", `费用类别为“工程造价”的行不允许删除!`, 1);
  423. return;
  424. }
  425. if (analyzer.calcItemIsUsed(template, item)) {
  426. $.bootstrapLoading.end();
  427. let s = hintBox.font(item.tempUsed + 1);
  428. hintBox.infoBox("系统提示", `第 ${idx + 1} 行“${item.name}”已被第 ${s} 行引用,不允许删除!`, 1);
  429. delete item.tempUsed;
  430. return;
  431. }
  432. hintBox.infoBox("系统提示", `确定要删除计算规则“${item.name}”吗?`, 2, cbYes);
  433. function cbYes() {
  434. template.calcItems.splice(idx, 1);
  435. let data = {
  436. projectID: projectObj.project.ID(),
  437. ID: template.ID,
  438. calcItems: template.calcItems,
  439. };
  440. calcProgramManage.updateTemplate(data, function (rst) {
  441. if (rst) {
  442. projectObj.project.calcProgram.compileTemplate(template);
  443. calcProgramManage.refreshDetailSheet();
  444. let relationNodes = calcTools.getNodesByProgramID(template.ID);
  445. projectObj.project.calcProgram.calcNodesAndSave(relationNodes);
  446. $.bootstrapLoading.end();
  447. }
  448. });
  449. }
  450. },
  451. },
  452. },
  453. });
  454. },
  455. saveCalcItem: function (data, callback) {
  456. //data
  457. CommonAjax.post("/calcProgram/saveCalcItem", data, function (result) {
  458. if (callback) {
  459. callback(result);
  460. }
  461. });
  462. },
  463. updateTemplate: function (data, callback) {
  464. CommonAjax.post("/calcProgram/updateTemplate", data, function (result) {
  465. if (callback) {
  466. callback(result);
  467. }
  468. });
  469. },
  470. addTemplate: function (data, callback) {
  471. CommonAjax.post("/calcProgram/addTemplate", data, function (result) {
  472. if (callback) {
  473. callback(result);
  474. }
  475. });
  476. },
  477. deleteTemplate: function (data, callback) {
  478. $.bootstrapLoading.start();
  479. CommonAjax.post("/calcProgram/deleteTemplate", data, function (result) {
  480. if (callback) {
  481. callback(result);
  482. }
  483. $.bootstrapLoading.end();
  484. });
  485. },
  486. getSelectionInfo: function () {
  487. var templateIndex = this.mainSpread.getActiveSheet().getActiveRowIndex();
  488. var dIndex = this.detailSpread.getActiveSheet().getActiveRowIndex();
  489. var info = {
  490. template: this.datas[templateIndex],
  491. calcItem: this.datas[templateIndex].calcItems[dIndex],
  492. };
  493. return info;
  494. },
  495. refreshDetailSheet: function () {
  496. var me = this;
  497. if (me.mainSpread && me.detailSpread) {
  498. let mainRowIdx = me.mainSpread.getActiveSheet().getActiveRowIndex();
  499. let calcItems = me.datas[mainRowIdx].calcItems;
  500. let detailSheet = me.detailSpread.getActiveSheet();
  501. detailSheet.setRowCount(calcItems.length);
  502. sheetCommonObj.showData(detailSheet, me.detailSetting, calcItems);
  503. me.getfeeRateColor(calcItems);
  504. customRowHeader(detailSheet, calcItems.length);
  505. }
  506. },
  507. getfeeRateColor: function (calcItems) {
  508. // 有费率ID关联的变个色
  509. var me = this;
  510. for (let i = 0; i < calcItems.length; i++) {
  511. if (calcItems[i].feeRateID != undefined && calcItems[i].feeRateID != null) me.detailSheet.getCell(i, 3).foreColor("#0aa8ea");
  512. else me.detailSheet.getCell(i, 3).foreColor("black");
  513. }
  514. },
  515. };
  516. $(document).ready(function () {
  517. $("#tab_calc_program_manage").on("shown.bs.tab", function (e) {
  518. sessionStorage.setItem("mainTab", "#tab_calc_program_manage");
  519. $(e.relatedTarget.hash).removeClass("active");
  520. if (!calcProgramManage.mainSpread) calcProgramManage.buildSheet();
  521. else calcProgramManage.mainSpread.refresh();
  522. });
  523. $("#calcProgramFileSelect").change(function () {
  524. // 取标准库数据过来显示。
  525. let libID = $(this).val();
  526. if (libID == "") {
  527. calcProgramManage.mainSpread.getSheet(0).setRowCount(0);
  528. calcProgramManage.detailSpread.getSheet(0).setRowCount(0);
  529. return false;
  530. }
  531. $.bootstrapLoading.start();
  532. libID = parseFloat(libID);
  533. let projectID = projectObj.project.ID();
  534. CommonAjax.post("/calcProgram/updateTemplateFile", { projectID: projectID, libID: libID }, function (data) {
  535. projectObj.project.calcProgram.datas.templates = data;
  536. projectObj.project.calcProgram.compileAllTemps();
  537. projectObj.project.calcProgram.calcAllNodesAndSave();
  538. calcProgramManage.buildSheet();
  539. $.bootstrapLoading.end();
  540. });
  541. });
  542. });