Browse Source

Merge branch 'dev' of http://192.168.1.41:3000/maixinrong/Calculation into dev

MaiXinRong 4 years ago
parent
commit
f772692b59

+ 65 - 0
app/controller/schedule_controller.js

@@ -0,0 +1,65 @@
+'use strict';
+
+/**
+ *
+ *
+ * @author Ellisran
+ * @date 2020/7/2
+ * @version
+ */
+
+const moment = require('moment');
+const measureType = require('../const/tender').measureType;
+const billsPosConvert = require('../lib/bills_pos_convert');
+
+module.exports = app => {
+    class ScheduleController extends app.BaseController {
+        async index(ctx) {
+            try {
+                const renderData = {
+                    tender: ctx.tender.data,
+                    tenderMenu: this.menu.tenderMenu,
+                    preUrl: '/tender/' + ctx.tender.id,
+                };
+                await this.layout('schedule/index.ejs', renderData);
+            } catch (err) {
+                this.log(err);
+                ctx.redirect(this.menu.menu.dashboard.url);
+            }
+        }
+
+        async ledger(ctx) {
+            const tender = ctx.tender;
+            const renderData = {
+                tender: tender.data,
+                tenderInfo: tender.info,
+                measureType,
+                jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.schedule.ledger),
+            };
+            await this.layout('schedule/ledger.ejs', renderData, 'schedule/ledger_modal.ejs');
+        }
+
+        /**
+         * 获取部位明细数据(Ajax)
+         *
+         * @param ctx
+         * @return {Promise<void>}
+         */
+        async loadLedgerData(ctx) {
+            try {
+                const ledgerData = await ctx.service.ledger.getData(ctx.tender.id);
+                const posData = this.ctx.tender.data.measure_type === measureType.tz.value
+                    ? await ctx.service.pos.getPosData({ tid: ctx.tender.id }) : [];
+                const convert = new billsPosConvert(ctx);
+                convert.loadData(ledgerData, posData, []);
+                const result = await convert.convert();
+                ctx.body = { err: 0, msg: '', data: result };
+            } catch (err) {
+                this.log(err);
+                ctx.body = { err: 1, msg: err.toString(), data: [] };
+            }
+        }
+    }
+
+    return ScheduleController;
+};

+ 2 - 1
app/public/js/ledger_bwtz.js

@@ -55,6 +55,7 @@ $(document).ready(() => {
                 n.unitTree.loadDatas(n.unitTreeData);
             }
         }
+        console.log(xmjTree);
         SpreadJsObj.loadSheetData(xmjSheet, SpreadJsObj.DataType.Tree, xmjTree);
         unitTreeObj.loadCurUnitData();
     });
@@ -234,4 +235,4 @@ $(document).ready(() => {
 
         SpreadExcelObj.exportSimpleXlsxSheet(setting, data, $('.sidebar-title').attr('data-original-title') + "-部位台账.xlsx");
     });
-});
+});

+ 92 - 0
app/public/js/schedule_ledger.js

@@ -0,0 +1,92 @@
+/**
+ * 进度台账相关js
+ *
+ * @author Ellisran
+ * @date 2020/11/6
+ * @version
+ */
+function getTenderId() {
+    return window.location.pathname.split('/')[2];
+}
+$(function () {
+    autoFlashHeight();
+    // 初始化台账
+    const ledgerSpread = SpreadJsObj.createNewSpread($('#ledger-spread')[0]);
+    const treeSetting = {
+        id: 'ledger_id',
+        pid: 'ledger_pid',
+        order: 'order',
+        level: 'level',
+        rootId: -1,
+        fullPath: 'full_path',
+        calcFields: ['total_price']
+        //treeCacheKey: 'ledger_bills_fold' + '_' + getTenderId(),
+        // markFoldKey: 'bills-fold',
+        // markFoldSubKey: window.location.pathname.split('/')[2],
+    };
+    treeSetting.calcFun = function (node) {
+        node.dgn_price = ZhCalc.round(ZhCalc.div(node.total_price, node.dgn_qty1), 2);
+    };
+    const ledgerTree = createNewPathTree('base', treeSetting);
+
+    const ledgerSpreadSetting = {
+        cols: [
+            {title: '', colSpan: '1', rowSpan: '2', field: 'is_select', hAlign: 1, width: 40, formatter: '@', cellType: 'checkbox'},
+            {title: '编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 185, formatter: '@', readOnly: true, cellType: 'tree'},
+            {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 205, formatter: '@', readOnly: true},
+            {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 100, formatter: '@', readOnly: true},
+            {title: '经济指标', colSpan: '1', rowSpan: '2', field: 'dgn_price', hAlign: 2, width: 100, type: 'Number', readOnly: true},
+            {title: '工程量', colSpan: '1', rowSpan: '2', field: 'dgn_qty1', hAlign: 2, width: 100, type: 'Number', readOnly: true},
+            {title: '金额', colSpan: '1', rowSpan: '2', field: 'total_price', hAlign: 2, width: 100, type: 'Number', readOnly: true},
+        ],
+        emptyRows: 0,
+        headRows: 1,
+        headRowHeight: [25, 25],
+        defaultRowHeight: 21,
+        headerFont: '12px 微软雅黑',
+        font: '12px 微软雅黑',
+        readOnly: true,
+        localCache: {
+            key: 'ledger-bills',
+            colWidth: true,
+        }
+    };
+
+    sjsSettingObj.setFxTreeStyle(ledgerSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(ledgerSpreadSetting);
+    SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), ledgerSpreadSetting);
+    SpreadJsObj.selChangedRefreshBackColor(ledgerSpread.getActiveSheet());
+
+    postData(window.location.pathname + '/load', {}, function (data) {
+        ledgerTree.loadDatas(data);
+        treeCalc.calculateAll(ledgerTree);
+        SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Tree, ledgerTree);
+    }, null, true);
+
+    // // 显示层次
+    // (function (select, sheet) {
+    //     $(select).click(function () {
+    //         const tag = $(this).attr('tag');
+    //         const tree = sheet.zh_tree;
+    //         if (!tree) return;
+    //         switch (tag) {
+    //             case "1":
+    //             case "2":
+    //             case "3":
+    //             case "4":
+    //             case "5":
+    //                 tree.expandByLevel(parseInt(tag));
+    //                 SpreadJsObj.refreshTreeRowVisible(sheet);
+    //                 break;
+    //             case "last":
+    //                 tree.expandByCustom(() => { return true; });
+    //                 SpreadJsObj.refreshTreeRowVisible(sheet);
+    //                 break;
+    //             case "leafXmj":
+    //                 tree.expandToLeafXmj();
+    //                 SpreadJsObj.refreshTreeRowVisible(sheet);
+    //                 break;
+    //         }
+    //     });
+    // })('a[name=showLevel]', ledgerSpread.getActiveSheet());
+});

+ 5 - 0
app/router.js

@@ -417,4 +417,9 @@ module.exports = app => {
     app.get('/wx/project', wechatAuth, 'wechatController.project');
     app.get('/wx/test', 'wechatController.testwx');
     app.get('/MP_verify_t3MkWAMqplVxPjmr.txt', 'wechatController.oauthTxt');
+
+    // 形象进度
+    app.get('/tender/:id/schedule', sessionAuth, tenderCheck, uncheckTenderCheck, 'scheduleController.index');
+    app.get('/tender/:id/schedule/ledger', sessionAuth, tenderCheck, uncheckTenderCheck, 'scheduleController.ledger');
+    app.post('/tender/:id/schedule/ledger/load', sessionAuth, tenderCheck, uncheckTenderCheck, 'scheduleController.loadLedgerData');
 };

+ 6 - 6
app/view/ledger/bwtz.ejs

@@ -10,12 +10,12 @@
                             <i class="fa fa-list-ol"></i> 显示层级
                         </button>
                         <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
-                            <a class="dropdown-item" name="showLevel" tag="1" href="javascirpt: void(0);">第一层</a>
-                            <a class="dropdown-item" name="showLevel" tag="2" href="javascirpt: void(0);">第二层</a>
-                            <a class="dropdown-item" name="showLevel" tag="3" href="javascirpt: void(0);">第三层</a>
-                            <a class="dropdown-item" name="showLevel" tag="4" href="javascirpt: void(0);">第四层</a>
-                            <a class="dropdown-item" name="showLevel" tag="5" href="javascirpt: void(0);">第五层</a>
-                            <a class="dropdown-item" name="showLevel" tag="last" href="javascirpt: void(0);">最底层</a>
+                            <a class="dropdown-item" name="showLevel" tag="1" href="javascript:void(0);">第一层</a>
+                            <a class="dropdown-item" name="showLevel" tag="2" href="javascript:void(0);">第二层</a>
+                            <a class="dropdown-item" name="showLevel" tag="3" href="javascript:void(0);">第三层</a>
+                            <a class="dropdown-item" name="showLevel" tag="4" href="javascript:void(0);">第四层</a>
+                            <a class="dropdown-item" name="showLevel" tag="5" href="javascript:void(0);">第五层</a>
+                            <a class="dropdown-item" name="showLevel" tag="last" href="javascript:void(0);">最底层</a>
                         </div>
                     </div>
                 </div>

+ 7 - 7
app/view/ledger/explode.ejs

@@ -10,13 +10,13 @@
                             <i class="fa fa-list-ol"></i> 显示层级
                         </button>
                         <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
-                            <a class="dropdown-item" name="showLevel" tag="1" href="javascirpt: void(0);">第一层</a>
-                            <a class="dropdown-item" name="showLevel" tag="2" href="javascirpt: void(0);">第二层</a>
-                            <a class="dropdown-item" name="showLevel" tag="3" href="javascirpt: void(0);">第三层</a>
-                            <a class="dropdown-item" name="showLevel" tag="4" href="javascirpt: void(0);">第四层</a>
-                            <a class="dropdown-item" name="showLevel" tag="5" href="javascirpt: void(0);">第五层</a>
-                            <a class="dropdown-item" name="showLevel" tag="last" href="javascirpt: void(0);">最底层</a>
-                            <a class="dropdown-item" name="showLevel" tag="leafXmj" href="javascirpt: void(0);">只显示项目节</a>
+                            <a class="dropdown-item" name="showLevel" tag="1" href="javascript:void(0);">第一层</a>
+                            <a class="dropdown-item" name="showLevel" tag="2" href="javascript:void(0);">第二层</a>
+                            <a class="dropdown-item" name="showLevel" tag="3" href="javascript:void(0);">第三层</a>
+                            <a class="dropdown-item" name="showLevel" tag="4" href="javascript:void(0);">第四层</a>
+                            <a class="dropdown-item" name="showLevel" tag="5" href="javascript:void(0);">第五层</a>
+                            <a class="dropdown-item" name="showLevel" tag="last" href="javascript:void(0);">最底层</a>
+                            <a class="dropdown-item" name="showLevel" tag="leafXmj" href="javascript:void(0);">只显示项目节</a>
                         </div>
                     </div>
                 </div>

+ 323 - 0
app/view/schedule/index.ejs

@@ -0,0 +1,323 @@
+<% include ../tender/tender_sub_menu.ejs %>
+<div class="panel-content">
+    <div class="panel-title">
+        <div class="title-main d-flex">
+            <% include ../tender/tender_sub_mini_menu.ejs %>
+            <h2>
+                计划至至 2020年12月
+            </h2>
+            <div class="ml-auto">
+                <a href="/tender/<%- ctx.tender.id %>/schedule/ledger" class="btn btn-sm btn-outline-primary">进度台帐</a>
+            </div>
+        </div>
+    </div>
+    <div class="content-wrap">
+        <div class="c-body">
+            <div class="sjs-height-0">
+                <div class="m-3">
+                    <!--模式切换-->
+                    <div class="col-12 mb-4">
+                        <ul class="nav nav-tabs justify-content-center">
+                            <li class="nav-item">
+                                <a class="nav-link px-5 py-2 active" href="#">金额模式</a>
+                            </li>
+                            <li class="nav-item">
+                                <a class="nav-link px-5 py-2" href="#">工程量模式</a>
+                            </li>
+                        </ul>
+                    </div>
+                    <!--金额概况-->
+                    <div class="row mx-0 mb-3 justify-content-center">
+                        <div class="col-auto p-0">
+                            <div class="card text-center">
+                                <div class="card-body">
+                                    <h5 class="card-title">163,000.00 <small class="text-danger"  data-toggle="tooltip" data-placement="bottom" title="" data-original-title="占设计比例">20%</small></h5>
+                                    <p class="card-text text-muted">计划完成金额</p>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="col-auto pr-0">
+                            <div class="card text-center">
+                                <div class="card-body">
+                                    <h5 class="card-title">50,000.00 <small class="text-danger"  data-toggle="tooltip" data-placement="bottom" title="" data-original-title="占计划比例">5%</small></h5>
+                                    <p class="card-text text-muted">已完成计划金额</p>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="col-auto pr-0">
+                            <div class="card text-center">
+                                <div class="card-body">
+                                    <h5 class="card-title">50,000.00 <small class="text-danger"  data-toggle="tooltip" data-placement="bottom" title="" data-original-title="占设计比例">15%</small></h5>
+                                    <p class="card-text text-muted">实际完成金额</p>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <!--进度条-->
+                    <div class="mb-3">
+                        计划工程量进度
+                        <div class="progress">
+                            <div class="progress-bar bg-info" style="width:24%;" data-placement="bottom" data-toggle="tooltip" data-original-title="计划完成工程量:30,000.00">24%</div>
+                            <div class="progress-bar bg-gray" style="width:76%;" data-placement="bottom" data-toggle="tooltip" data-original-title="合同未计划:930,00.00">66%</div>
+                        </div>
+                        <p class="mt-2 mb-0">实际工程量进度</p>
+                        <div class="progress">
+                            <div class="progress-bar bg-info" style="width: 18%;" data-placement="bottom" data-toggle="tooltip" data-original-title="实际完成工程量:40,000.00">18%</div>
+                            <div class="progress-bar bg-gray" style="width:82%;" data-placement="bottom" data-toggle="tooltip" data-original-title="合同未完成:930,00.00">72%</div>
+                        </div>
+                        <p class="mt-2 mb-0">计划金额进度(万元)</p>
+                        <div class="progress">
+                            <div class="progress-bar bg-success" style="width:24%;" data-placement="bottom" data-toggle="tooltip" data-original-title="计划完成金额:¥300.00">24%</div>
+                            <div class="progress-bar bg-gray" style="width:76%;" data-placement="bottom" data-toggle="tooltip" data-original-title="合同未计划:¥930.00">66%</div>
+                        </div>
+                        <p class="mt-2 mb-0">实际金额进度哦(万元)</p>
+                        <div class="progress">
+                            <div class="progress-bar bg-success" style="width: 18%;" data-placement="bottom" data-toggle="tooltip" data-original-title="实际完成金额:¥400.00">18%</div>
+                            <div class="progress-bar bg-gray" style="width:82%;" data-placement="bottom" data-toggle="tooltip" data-original-title="合同未完成:¥930.00">72%</div>
+                        </div>
+                    </div>
+                    <!--图表-->
+                    <div class="card mb-3">
+                        <div class="card-body">
+                            <h5 class="card-title">工程量进度表</h5>
+                            <div id="chartContainer3" style="height: 300px; width: 100%;">
+                            </div>
+                        </div>
+                    </div>
+                    <div class="card mb-3">
+                        <div class="card-body">
+                            <h5 class="card-title">完成金额进度表</h5>
+                            <div id="chartContainer4" style="height: 300px; width: 100%;">
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="/public/js/echarts/echarts.min.js"></script>
+<script type="text/javascript">
+    //计划进度//
+    // 基于准备好的dom,初始化echarts图表
+    var myChart = echarts.init(document.getElementById('chartContainer3'));
+    var option = {
+        color: ['#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
+            '#17a2b8','#28a745','#e4575a','#959eac','#6699FF',
+            '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
+            '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
+        title : {
+            text: ''
+        },
+        tooltip : {
+            trigger: 'axis'
+        },
+        calculable : true,
+        legend: {
+            data:['计划完成工程量','实际完成工程量','实际占设计比例']
+        },
+        dataZoom: [
+            {show: true,start: 0, end: 100}
+        ],
+        xAxis : [
+            {
+                type : 'category',
+                splitLine : {show : true},
+                data : ['2020年1月','2020年2月','2020年3月','2020年4月','2020年5月','2020年6月','2020年7月']
+            }
+        ],
+        yAxis : [
+            {
+                type : 'value',
+                name : '工程量',
+                position:'left',
+                axisLabel : {
+                    formatter: '{value}'
+                },
+                splitArea : {show : true}
+            },
+            {
+                type : 'value',
+                name:'完成度',
+                axisLabel : {
+                    formatter: '{value} %'
+                },
+                position: 'right',
+                splitArea : {show : true}
+            }
+        ],
+        series : [
+            {
+                name:'计划完成工程量',
+                type:'bar',
+                tooltip : {trigger: 'item',formatter: "{b}<br/>{a}:{c}"},
+                stack: '计划',
+                data:[320, 332, 301, 334, 390, 330, 320]
+            },
+            {
+                name:'实际完成工程量',
+                type:'bar',
+                tooltip : {trigger: 'item',formatter: "{b}<br/>{a}:{c}"},
+                stack: '实际',
+                data:[310, 330, 301, 334, 390, 330, 320]
+            },
+            {
+                name:'实际占设计比例',
+                type:'line',
+                tooltip : {trigger: 'axis',formatter: "{b}占合同比例<br/>{a}:{c} %"},
+                yAxisIndex: 1,
+                data:[10, 15, 20, 13, 11, 9, 5]
+            },
+        ]
+    };
+    // 为echarts对象加载数据
+    myChart.setOption(option);
+    //4 完成金额进度进度//
+    var myChart = echarts.init(document.getElementById('chartContainer4'));
+    var option = {
+        color: ['#e9af68','#57b7b6','#e4575a','#959eac','#6699FF',
+            '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
+            '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
+            '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
+        title : {
+            text: ''
+        },
+        tooltip : {
+            trigger: 'axis'
+        },
+        calculable : true,
+        legend: {
+            data:['计划完成金额','实际完成金额','实际占设计比例']
+        },
+        dataZoom: [
+            {show: true,start: 0, end: 100}
+        ],
+        xAxis : [
+            {
+                type : 'category',
+                splitLine : {show : true},
+                data : ['2020年1月','2020年2月','2020年3月','2020年4月','2020年5月','2020年6月','2020年7月']
+            }
+        ],
+        yAxis : [
+            {
+                type : 'value',
+                name : '金额',
+                position:'left',
+                axisLabel : {
+                    formatter: '{value} 万元'
+                },
+                splitArea : {show : true}
+            },
+            {
+                type : 'value',
+                name:'完成度',
+                axisLabel : {
+                    formatter: '{value} %'
+                },
+                position: 'right',
+                splitArea : {show : true}
+            }
+        ],
+        series : [
+            {
+                name:'计划完成金额',
+                type:'bar',
+                tooltip : {trigger: 'item',formatter: "{b}<br/>{a}:{c}万元"},
+                stack: '计划',
+                data:[320, 332, 301, 334, 390, 330, 320]
+            },
+            {
+                name:'实际完成金额',
+                type:'bar',
+                tooltip : {trigger: 'item',formatter: "{b}<br/>{a}:{c}万元"},
+                stack: '实际',
+                data:[310, 330, 301, 334, 390, 330, 320]
+            },
+            {
+                name:'实际占合同比例',
+                type:'line',
+                tooltip : {trigger: 'axis',formatter: "{b}占合同比例<br/>{a}:{c} %"},
+                yAxisIndex: 1,
+                data:[10, 15, 20, 13, 11, 9, 5]
+            },
+        ]
+    };
+
+    // 为echarts对象加载数据
+    myChart.setOption(option);
+</script>
+<!--sjs-->
+<script>
+    $(document).ready(function () {
+        const data = [
+            {
+                单位:'稍等',
+                精度:3,
+            },{
+                单位:'km',
+                精度:3,
+            },{
+                单位:'m',
+                精度:3,
+            },{
+                单位:'m2',
+                精度:3,
+            },{
+                单位:'m3',
+                精度:3,
+            },{
+                单位:'kg',
+                精度:3,
+            },{
+                单位:'个',
+                精度:3,
+            },{
+                单位:'台',
+                精度:3,
+            },{
+                单位:'套',
+                精度:3,
+            },{
+                单位:'棵',
+                精度:3,
+            },{
+                单位:'组',
+                精度:3,
+            },{
+                单位:'总额',
+                精度:3,
+            },{
+                单位:'系统',
+                精度:3,
+            },{
+                单位:'其他未列单位',
+                精度:3,
+            }
+        ];
+        const spread = new GC.Spread.Sheets.Workbook($('#option-spread1')[0], {
+            sheetCount: 1
+        });
+        spread.getActiveSheet().setDataSource(data);
+        spread.options.tabStripVisible = false;
+    })
+</script>
+<script src="/public/js/sub_menu.js"></script>
+<script>
+    $.subMenu({
+        menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
+        toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
+        key: 'menu.1.0.0',
+        miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1',
+        callback: function (info) {
+            if (info.mini) {
+                $('.panel-title').addClass('fluid');
+                $('#sub-menu').removeClass('panel-sidebar');
+            } else {
+                $('.panel-title').removeClass('fluid');
+                $('#sub-menu').addClass('panel-sidebar');
+            }
+            autoFlashHeight();
+        }
+    });
+</script>

+ 63 - 0
app/view/schedule/ledger.ejs

@@ -0,0 +1,63 @@
+<% include ../tender/tender_sub_menu.ejs %>
+<div class="panel-content">
+    <div class="panel-title">
+        <div class="title-main d-flex">
+            <% include ../tender/tender_sub_mini_menu.ejs %>
+            <div>
+                <div class="d-inline-block">
+                    <a class="btn btn-sm btn-light">
+                        <div class="custom-control custom-checkbox">
+                            <input type="checkbox" class="custom-control-input" id="customCheckDisabled" checked="">
+                            <label class="custom-control-label text-primary" for="customCheckDisabled">自动选择同级项</label>
+                        </div>
+                    </a>
+                </div>
+                <div class="d-inline-block">
+                    <a class="btn btn-sm btn-light">
+                        <div class="custom-control custom-checkbox">
+                            <input type="checkbox" class="custom-control-input" id="customCheckDisabled2">
+                            <label class="custom-control-label text-primary" for="customCheckDisabled2">跨级选择同级项</label>
+                        </div>
+                    </a>
+                </div>
+            </div>
+            <div class="ml-auto">
+                <a href="#add-qi" data-toggle="modal" data-target="#add-qi" class="btn btn-primary btn-sm pull-right">确认提交<div></div></a>
+            </div>
+        </div>
+    </div>
+    <div class="content-wrap">
+        <div class="c-header p-0"></div>
+        <div class="w-100 sub-content row">
+            <div class="c-body col-12">
+                <div class="sjs-height-0" style="overflow: auto;" id="ledger-spread">
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="/public/js/sub_menu.js"></script>
+<script>
+    const tender = JSON.parse('<%- JSON.stringify(tender) %>');
+    const tenderInfo = JSON.parse(unescape('<%- escape(JSON.stringify(tenderInfo)) %>'));
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
+    const measureType = JSON.parse('<%- JSON.stringify(measureType) %>');
+</script>
+<script>
+    $.subMenu({
+        menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
+        toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
+        key: 'menu.1.0.0',
+        miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1',
+        callback: function (info) {
+            if (info.mini) {
+                $('.panel-title').addClass('fluid');
+                $('#sub-menu').removeClass('panel-sidebar');
+            } else {
+                $('.panel-title').removeClass('fluid');
+                $('#sub-menu').addClass('panel-sidebar');
+            }
+            autoFlashHeight();
+        }
+    });
+</script>

+ 21 - 0
app/view/schedule/ledger_modal.ejs

@@ -0,0 +1,21 @@
+<!--首次使用提示-->
+<div class="modal fade" id="first" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">进度台帐</h5>
+            </div>
+            <div class="modal-body">
+                <h5>首次使用形象进度需要进行进度台帐初始化设置</h5>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-sm btn-primary" data-dismiss="modal">开始设置</button>
+            </div>
+        </div>
+    </div>
+</div>
+<script type="text/javascript">
+    $(function () {
+        // $('#first').modal('show');
+    })
+</script>

+ 18 - 0
config/web.js

@@ -656,6 +656,24 @@ const JsFiles = {
                 mergeFile: 'advance_audit',
             },
         },
+        schedule: {
+            ledger: {
+                files: [
+                    '/public/js/spreadjs/sheets/v11/gc.spread.sheets.all.11.2.2.min.js',
+                    '/public/js/decimal.min.js',
+                ],
+                mergeFiles: [
+                    '/public/js/sub_menu.js',
+                    '/public/js/div_resizer.js',
+                    '/public/js/spreadjs_rela/spreadjs_zh.js',
+                    '/public/js/shares/sjs_setting.js',
+                    '/public/js/zh_calc.js',
+                    '/public/js/path_tree.js',
+                    '/public/js/schedule_ledger.js',
+                ],
+                mergeFile: 'ledger',
+            },
+        },
     },
 };