|
@@ -0,0 +1,172 @@
|
|
|
+/**
|
|
|
+ * Created by Zhong on 2018/3/7.
|
|
|
+ */
|
|
|
+let indicativeInfoObj = {
|
|
|
+ feeType: {common: 'common', labour: 'labour', material: 'material', machine: 'machine', mainMaterial: 'mainMaterial', equipment: 'equipment',
|
|
|
+ labourDiff: 'labourDiff', materialDiff: 'materialDiff', machineDiff: 'machineDiff', manage: 'manage', profit: 'profit'},
|
|
|
+ workBook: null,
|
|
|
+ setting:{
|
|
|
+ header: [
|
|
|
+ {name: '名称', dataCode: 'name', width: 200, vAlign: 'center', hAlign: 'left'},
|
|
|
+ {name: '金额', dataCode: 'price', width: 120, vAlign: 'center', hAlign: 'right'},
|
|
|
+ {name: '占造价比例(%)', dataCode: 'rate', width: 100, vAlign: 'center', hAlign: 'right'},
|
|
|
+ {name: '单方造价', dataCode: 'perCentiare', width: 80, vAlign: 'center', hAlign: 'right'}
|
|
|
+ ],
|
|
|
+ options: {
|
|
|
+ tabStripVisible: false,
|
|
|
+ allowCopyPasteExcelStyle : false,
|
|
|
+ allowExtendPasteRange: false,
|
|
|
+ allowUserDragDrop : false,
|
|
|
+ allowUserDragFill: false,
|
|
|
+ scrollbarMaxAlign : true
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ renderSheetFuc: function (sheet, fuc) {
|
|
|
+ sheet.suspendPaint();
|
|
|
+ sheet.suspendEvent();
|
|
|
+ fuc();
|
|
|
+ sheet.resumePaint();
|
|
|
+ sheet.resumeEvent();
|
|
|
+ },
|
|
|
+
|
|
|
+ setOptions: function (workbook, opts) {
|
|
|
+ for(let opt in opts){
|
|
|
+ workbook.options[opt] = opts[opt];
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ buildHeader: function (sheet, headers) {
|
|
|
+ let me = projFeatureView;
|
|
|
+ let fuc = function () {
|
|
|
+ sheet.setColumnCount(headers.length);
|
|
|
+ sheet.setRowHeight(0, 40, GC.Spread.Sheets.SheetArea.colHeader);
|
|
|
+ for(let i = 0, len = headers.length; i < len; i++){
|
|
|
+ sheet.setValue(0, i, headers[i].name, GC.Spread.Sheets.SheetArea.colHeader);
|
|
|
+ sheet.setColumnWidth(i, headers[i].width, GC.Spread.Sheets.SheetArea.colHeader);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ me.renderSheetFuc(sheet, fuc);
|
|
|
+ },
|
|
|
+
|
|
|
+ buildSheet: function () {
|
|
|
+ if(!this.workBook){
|
|
|
+ this.workBook = new GC.Spread.Sheets.Workbook($('#indicativeInfoSpread')[0], {sheetCount: 1});
|
|
|
+ this.setOptions(this.workBook, this.setting.options);
|
|
|
+ this.workBook.getSheet(0).options.isProtected = true;
|
|
|
+ this.buildHeader(this.workBook.getActiveSheet(), this.setting.header);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ showData(datas){
|
|
|
+ let sheet = this.workBook.getActiveSheet();
|
|
|
+ let cols = this.setting.header;
|
|
|
+ let fuc = function () {
|
|
|
+ sheet.setRowCount(datas.length);
|
|
|
+ for(let col = 0, cLen = cols.length; col < cLen; col++){
|
|
|
+ sheet.getRange(-1, col, -1, 1, GC.Spread.Sheets.SheetArea.viewport).hAlign(GC.Spread.Sheets.HorizontalAlign[cols[col]['hAlign']]);
|
|
|
+ sheet.getRange(-1, col, -1, 1, GC.Spread.Sheets.SheetArea.viewport).vAlign(GC.Spread.Sheets.VerticalAlign[cols[col]['vAlign']]);
|
|
|
+ for(let row = 0, rLen = datas.length; row < rLen; row++){
|
|
|
+ sheet.setValue(row, col, datas[row][cols[col]['dataCode']]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ this.renderSheetFuc(sheet, fuc);
|
|
|
+ },
|
|
|
+ //是清单
|
|
|
+ isBills: function (node) {
|
|
|
+ return node && node.sourceType === projectObj.project.Bills.getSourceType();
|
|
|
+ },
|
|
|
+ //是大项费用
|
|
|
+ isDXFY: function (node) {
|
|
|
+ return this.isBills(node) && node.data.type === billType.DXFY;
|
|
|
+ },
|
|
|
+ //是分部分项工程
|
|
|
+ isFBFX: function (node) {
|
|
|
+ return this.isDXFY(node) && node.data.flagsIndex && node.data.flagsIndex.fixed && node.data.flagsIndex.fixed.flag === fixedFlag.SUB_ENGINERRING;
|
|
|
+ },
|
|
|
+ //是措施项目
|
|
|
+ isCSXM: function (node) {
|
|
|
+ return this.isDXFY(node) && node.data.flagsIndex && node.data.flagsIndex.fixed && node.data.flagsIndex.fixed.flag === fixedFlag.MEASURE;
|
|
|
+ },
|
|
|
+ //是工程造价
|
|
|
+ isEngieeringCost: function (node) {
|
|
|
+ return this.isDXFY(node) && node.data.flagsIndex && node.data.flagsIndex.fixed && node.data.flagsIndex.fixed.flag === fixedFlag.ENGINEERINGCOST;
|
|
|
+ },
|
|
|
+ //存在某个费用
|
|
|
+ fee: function (node, feeType) {
|
|
|
+ return node && node.data.feesIndex && node.data.feesIndex[feeType] ? node.data.feesIndex[feeType].totalFee : 0;
|
|
|
+ },
|
|
|
+ //根据固定行ID获取固定行清单节点
|
|
|
+ getFixedBill: function (flag) {
|
|
|
+ for(let node of projectObj.project.mainTree.items){
|
|
|
+ if(node && node.data.flagsIndex && node.data.flagsIndex.fixed && node.data.flagsIndex.fixed.flag === flag){
|
|
|
+ return node;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ },
|
|
|
+ getDXFY: function (node) {
|
|
|
+ let dxfy = Object.create(null);
|
|
|
+ let engCostFee = this.fee(this.getFixedBill(fixedFlag.ENGINEERINGCOST), this.feeType.common);
|
|
|
+ let commonFee = this.fee(node, this.feeType.common);
|
|
|
+ let buildingArea = projFeatureView.getFeature('projFeature', 'buildingArea');
|
|
|
+ let areaNum = !buildingArea.value || buildingArea.value == '' || isNaN(buildingArea.value) ? 0 : buildingArea.value;
|
|
|
+ dxfy.name = node.data.name;
|
|
|
+ dxfy.price = commonFee ? parseFloat(commonFee).toDecimal(decimalObj.bills.totalPrice) : 0;
|
|
|
+ dxfy.rate = engCostFee == 0 || this.isEngieeringCost(node) ? '' : parseFloat(dxfy.price/engCostFee*100).toDecimal(2);
|
|
|
+ dxfy.perCentiare = areaNum == 0 ? '' : parseFloat(dxfy.price/areaNum).toDecimal(decimalObj.bills.totalPrice);
|
|
|
+ return dxfy;
|
|
|
+ },
|
|
|
+ getIndicativeInfo: function () {
|
|
|
+ let rst = [];
|
|
|
+ for(let node of projectObj.project.mainTree.items){
|
|
|
+ if(this.isDXFY(node)){
|
|
|
+ if(this.isFBFX(node)){
|
|
|
+ rst.push(this.getDXFY(node));
|
|
|
+ rst.push({name: '其中:', price: '', rate: '', perCentiare: ''});
|
|
|
+ rst.push({name: ' 人工费', price: parseFloat(this.fee(node, this.feeType.labour)).toDecimal(decimalObj.bills.totalPrice), rate: '', perCentiare: ''});
|
|
|
+ rst.push({name: ' 材料费', price: parseFloat(this.fee(node, this.feeType.material)).toDecimal(decimalObj.bills.totalPrice), rate: '', perCentiare: ''});
|
|
|
+ rst.push({name: ' 机械费', price: parseFloat(this.fee(node, this.feeType.machine)).toDecimal(decimalObj.bills.totalPrice), rate: '', perCentiare: ''});
|
|
|
+ rst.push({name: ' 主材费', price: parseFloat(this.fee(node, this.feeType.mainMaterial)).toDecimal(decimalObj.bills.totalPrice), rate: '', perCentiare: ''});
|
|
|
+ rst.push({name: ' 设备费', price: parseFloat(this.fee(node, this.feeType.equipment)).toDecimal(decimalObj.bills.totalPrice), rate: '', perCentiare: ''});
|
|
|
+ let labourDiff = this.fee(node, this.feeType.labourDiff),
|
|
|
+ materialDiff = this.fee(node, this.feeType.materialDiff),
|
|
|
+ machineDiff = this.fee(node, this.feeType.machineDiff),
|
|
|
+ rcjDiff = labourDiff + materialDiff + machineDiff;
|
|
|
+ rst.push({name: '人材机价差', price: parseFloat(rcjDiff).toDecimal(decimalObj.bills.totalPrice), rate: '', perCentiare: ''});
|
|
|
+ rst.push({name: '企业管理费', price: parseFloat(this.fee(node, this.feeType.manage)).toDecimal(decimalObj.bills.totalPrice), rate: '', perCentiare: ''});
|
|
|
+ rst.push({name: '利润', price: parseFloat(this.fee(node, this.feeType.profit)).toDecimal(decimalObj.bills.totalPrice), rate: '', perCentiare: ''});
|
|
|
+ }
|
|
|
+ else if(this.isCSXM(node)){
|
|
|
+ rst.push(this.getDXFY(node));
|
|
|
+ rst.push({name: '其中:', price: '', rate: '', perCentiare: ''});
|
|
|
+ let safeConst = this.getDXFY(this.getFixedBill(fixedFlag.SAFETY_CONSTRUCTION));
|
|
|
+ safeConst.name = ` ${safeConst.name}`;
|
|
|
+ rst.push(safeConst);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ rst.push(this.getDXFY(node));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+$(document).ready(function () {
|
|
|
+ $('#poj-set').on('shown.bs.modal', function () {
|
|
|
+ indicativeInfoObj.buildSheet();
|
|
|
+ indicativeInfoObj.showData(indicativeInfoObj.getIndicativeInfo());
|
|
|
+ });
|
|
|
+
|
|
|
+ $('#poj-set').on('hidden.bs.modal', function () {
|
|
|
+ if(indicativeInfoObj.workBook){
|
|
|
+ indicativeInfoObj.workBook.destroy();
|
|
|
+ indicativeInfoObj.workBook = null;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ $('#tab_poj-settings-indicativeInfo').on('shown.bs.tab', function () {
|
|
|
+ indicativeInfoObj.workBook.refresh();
|
|
|
+ });
|
|
|
+});
|