123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- /**
- * 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: {
- allowContextMenu: false,
- 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++){
- //设置小数位数
- if(cols[col]['dataCode'] !== 'name'){
- sheet.setFormatter(-1, col, MainTreeCol.getNumberFormatter(decimalObj.bills.totalPrice, true));
- }
- 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) {
- if(!node) return null;
- 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('buildingArea');
- let areaNum = !buildingArea || buildingArea == '' || isNaN(buildingArea) ? 0 : buildingArea;
- 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)){
- let dxfy = this.getDXFY(node);
- if(!dxfy) continue;
- if(this.isFBFX(node)){
- rst.push(dxfy);
- 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(dxfy);
- rst.push({name: '其中:', price: '', rate: '', perCentiare: ''});
- let safeConst = this.getDXFY(this.getFixedBill(fixedFlag.SAFETY_CONSTRUCTION));
- if(safeConst){
- safeConst.name = ` ${safeConst.name}`;
- rst.push(safeConst);
- }
- }
- else{
- rst.push(dxfy);
- }
- }
- }
- return rst;
- }
- };
- $(document).ready(function () {
- $('#tab_poj-settings-indicativeInfo').on('shown.bs.tab', function(){
- if(indicativeInfoObj.workBook){
- indicativeInfoObj.workBook.destroy();
- indicativeInfoObj.workBook = null;
- }
- indicativeInfoObj.buildSheet();
- indicativeInfoObj.showData(indicativeInfoObj.getIndicativeInfo());
- });
- $('#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();
- });
- });
|