| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146 | <div class="modal fade" id="paper" data-backdrop="static">    <div class="modal-dialog" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title">页边距(毫米)</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <div class="row mb-1 justify-content-center">                    <div class="col-3">                        <div class="input-group input-group-sm ">                            <div class="input-group-prepend">                                <span class="input-group-text">上</span>                            </div>                            <input type="number" class="form-control form-control-sm" id="elementMargin_Top" value="12" onchange="rptControlObj.changeMargin('Top', this)" onkeyup="rptControlObj.changeMargin('Top', this)">                        </div>                    </div>                </div>                <div class="row mb-1 align-items-center">                    <div class="col-3">                        <div class="input-group input-group-sm ">                            <div class="input-group-prepend">                                <span class="input-group-text">左</span>                            </div>                            <input type="number" class="form-control form-control-sm" id="elementMargin_Left" value="12" onchange="rptControlObj.changeMargin('Left', this)" onkeyup="rptControlObj.changeMargin('Left', this)">                        </div>                    </div>                    <div class="col-6">                        <h1 class="display-4 text-center"><i class="fa fa-file-o"></i></h1>                    </div>                    <div class="col-3">                        <div class="input-group input-group-sm ">                            <div class="input-group-prepend">                                <span class="input-group-text">右</span>                            </div>                            <input type="number" class="form-control form-control-sm" id="elementMargin_Right" value="12" onchange="rptControlObj.changeMargin('Right', this)" onkeyup="rptControlObj.changeMargin('Right', this)">                        </div>                    </div>                </div>                <div class="row mb-1 justify-content-center">                    <div class="col-3">                        <div class="input-group input-group-sm ">                            <div class="input-group-prepend">                                <span class="input-group-text">下</span>                            </div>                            <input type="number" class="form-control form-control-sm" id="elementMargin_Bottom"value="12" onchange="rptControlObj.changeMargin('Bottom', this)" onkeyup="rptControlObj.changeMargin('Bottom', this)">                        </div>                    </div>                </div>            </div>            <div class="modal-footer">                <button type="button" class="btn btn-link btn-sm float-left" data-dismiss="modal" onclick="rptControlObj.restoreMargine(); zTreeOprObj.changeCfg();">恢复默认值</button>                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" onclick="rptControlObj.cancelCfgChange()">取消</button>                <a href="javascript:void(0)" class="btn btn-primary btn-sm" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</a>            </div>        </div>    </div></div><div class="modal fade" id="format" data-backdrop="static">    <div class="modal-dialog" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title">格式</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <div class="row mb-1" id="font_cfg_blank_flag"></div>                <div class="row mb-1">                    <div class="col-3">边框线粗</div>                    <div class="col-4">                        <select class="form-control form-control-sm" id="cfg_border_thick" onchange="rptControlObj.changeBorderWeight(this)"><option>1</option><option>2</option></select>                    </div>                </div>            </div>            <div class="modal-footer">                <button type="button" class="btn btn-link btn-sm float-left" data-dismiss="modal" onclick="rptControlObj.restoreFormat(); zTreeOprObj.changeCfg();">恢复默认值</button>                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" onclick="rptControlObj.cancelCfgChange()">取消</button>                <a href="javascript:void(0)" class="btn btn-primary btn-sm" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</a>            </div>        </div>    </div></div><!--弹出设置--><div class="modal fade" id="setting" data-backdrop="static">    <div class="modal-dialog" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title">设置</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <div class="row mb-1">                    <div class="col-12 mb-1">                        <div class="form-check">                            <label class="form-check-label">                                <input type="checkbox" class="form-check-input" id="cfg_rpt_vertical_line" onchange="rptControlObj.changeCfgOption('showVerticalLine', this)">                                报表边框竖线                            </label>                        </div>                    </div>                    <div class="col-12 mb-1">                        <div class="form-check">                            <label class="form-check-label">                                <input type="checkbox" class="form-check-input" id="cfg_rpt_narrow" onchange="rptControlObj.changeCfgOption('isNarrow', this)">                                内容窄体输出                            </label>                        </div>                    </div>                    <div class="col-12 mb-1">                        <div class="form-check">                            <label class="form-check-label">                                <input type="checkbox" class="form-check-input" id="cfg_rpt_fill_zero" onchange="rptControlObj.changeCfgOption('fillZero', this)">                                小数补0                            </label>                        </div>                    </div>                    <div class="col-12 mb-1" id="cfg_rpt_close_warter_mark_div" >                        <div class="form-check">                            <label class="form-check-label">                                <input type="checkbox" class="form-check-input" id="cfg_rpt_close_warter_mark" onchange="rptControlObj.changeCfgOption('closeWarterMark', this)">                                导出Excel-不带水印                            </label>                        </div>                    </div>                    <div class="col-12 mb-1">                        <div class="form-check">                            <label class="form-check-label">                                <input type="checkbox" class="form-check-input" id="cfg_rpt_continuous" onchange="rptControlObj.changeCfgOption('continuousOutput', this)">                                导出Excel-连续输出(仅流水内容报表有效)                            </label>                        </div>                    </div>                </div>            </div>            <div class="modal-footer">                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal" onclick="rptControlObj.cancelCfgChange()">取消</button>                <a href="javascript:void(0)" class="btn btn-primary btn-sm" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</a>            </div>        </div>    </div></div><div class="modal fade" id="export_excel" data-backdrop="static">    <div class="modal-dialog" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title">批量导出Excel</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <div class="row">                    <div class="col-6">                        <div class="card">                            <img class="card-img-top" src="/public/images/p2.png">                            <div class="card-body px-3">                                <div class="form-check">                                    <input class="form-check-input" type="radio" name="excelExportTypeRadio" id="excelExportType_AllInOneBook" value="option1" checked>                                    <label class="form-check-label" for="excelExportType_AllInOneBook">                                        多个表导出一个Excel文件                                    </label>                                </div>                            </div>                        </div>                    </div>                    <div class="col-6">                        <div class="card">                            <img class="card-img-top" src="/public/images/p1.png">                            <div class="card-body px-3">                                <div class="form-check">                                    <input class="form-check-input" type="radio" name="excelExportTypeRadio" id="excelExportType_IndividualBook" value="option2" checked>                                    <label class="form-check-label" for="excelExportType_IndividualBook">                                        每个表导出一个Excel文件                                    </label>                                </div>                            </div>                        </div>                    </div>                </div>            </div>            <div class="modal-footer">                <a onclick="rptControlObj.getExcel()" class="btn btn-primary btn-sm" data-dismiss="modal">确定导出</a>                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>            </div>        </div>    </div></div><div class="modal fade" id="eSignature" data-backdrop="static">    <div class="modal-dialog modal-lg" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title">设置签字(审核通过后才显示)</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body" id="eSignatureBodyDiv">            </div>            <div class="modal-footer">                <% if ((pageShow !== null) && (parseInt(pageShow.openSign) === 1)) { %>                    <button type="button" id="btn_cross_tender" class="btn btn-sm btn-link float-left" data-dismiss="modal" data-toggle="modal" data-target="#batch-eSignature" id="batch-setupProjSignature" onclick="rptSignatureHelper.resetESignature(zTreeOprObj.currentRptPageRst, 'batch-eSignatureBodyDiv'); buildTendersTree();">批量设置其他标段</button>                <% } %>                <!--                <button type="button" class="btn btn-sm btn-link float-left" data-toggle="modal" data-target="#batch-eSignature" id="hidden_show_batch_eSignature" style="display:none"></button>                <button type="button" class="btn btn-sm btn-link float-left" data-dismiss="modal" onclick="setTimeout(function(){$('#hidden_show_batch_eSignature').trigger('click');}, 50);">批量设置其他标段</button>                -->                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" onclick="rptSignatureHelper.removeSelectSignature()">取消</button>                <a href="javascript:void(0);" onclick="rptSignatureHelper.setupAfterSelectSignature('eSignatureBodyDiv')" class="btn btn-primary btn-sm" data-dismiss="modal">确定</a>            </div>        </div>    </div></div><div class="modal fade" id="batch-eSignature" data-backdrop="static">    <div class="modal-dialog modal-xl" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title">批量设置签字</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <div class="modal-height-300">                    <div class="row">                        <div class="col-4">                            <table class="table table-hover table-bordered" id="batch_tenders_individual">                            </table>                        </div>                        <div class="col-8" id="batch-eSignatureBodyDiv"></div>                    </div>                </div>                <div class="alert alert-warning">批量操作会覆盖已设置好的签字,请谨慎操作。</div>            </div>            <div class="modal-footer">                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>                <a href="javascript:void(0);" onclick="rptSignatureHelper.setupAfterSelectMultiTenders(SELECTED_TENDERS, 'batch-eSignatureBodyDiv')" class="btn btn-sm btn-primary" data-dismiss="modal">确定</a>            </div>        </div>    </div></div><!--弹出添加签名人--><div class="modal fade" id="add-sign" data-backdrop="static">    <div class="modal-dialog modal-sm" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title">添加签字</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <ul class="nav nav-tabs justify-content-center mb-1" role="tablist">                    <li class="nav-item">                        <a class="nav-link active px-3 p-1" data-toggle="tab" href="#adst-1" role="tab">项目</a>                    </li>                    <li class="nav-item">                        <a class="nav-link px-3 p-1" data-toggle="tab" href="#adst-2" role="tab"><i class="fa fa-user"></i> 角色</a>                    </li>                    <li class="nav-item">                        <a class="nav-link px-3 p-1" data-toggle="tab" href="#adst-3" role="tab">最近使用</a>                    </li>                </ul>                <div class="tab-content">                    <div class="tab-pane fade show active" id="adst-1" role="tabpanel" aria-labelledby="home-tab">                        <div class="input-group input-group-sm mt-1 mb-2">                            <div class="input-group-prepend">                                <span class="input-group-text" id="inputGroup-sizing-sm"><i class="fa fa-search" onclick="rptSignatureHelper.buildSelectableAccount(this);"></i></span>                            </div>                            <input type="text" id="search_account" class="form-control form-control-sm" placeholder="搜索..."  onkeypress="searchAccount()">                        </div>                        <div class="modal-height-300" id="project_account_select_div">                        </div>                    </div>                    <div class="tab-pane fade" id="adst-2" role="tabpanel" aria-labelledby="profile-tab">                        <a href="javascript:void(0)" onclick="rptSignatureHelper.switchAddRoleDiv(this)" class="btn btn-sm btn-link">添加角色</a>                        <div class="modal-height-300">                            <!--添加角色-->                            <div class="card" id="role_select_acc_div" style="display:none">                                <div class="p-2">                                    <div class="input-group input-group-sm mb-1">                                        <div class="input-group-prepend">                                            <span class="input-group-text" id="inputGroup-sizing-sm">角色名称</span>                                        </div>                                        <input type="text" class="form-control form-control-sm" id="acc_role_name" placeholder="最多10个字符">                                    </div>                                    <div class="input-group input-group-sm mb-1">                                        <div class="input-group-prepend">                                            <span class="input-group-text" id="inputGroup-sizing-sm">绑定成员</span>                                        </div>                                        <select class="form-control form-control-sm" id="project_account_select_dom">                                        </select>                                    </div>                                    <a href="javascript:void(0)" onclick="rptSignatureHelper.createNewRole(this)" class="btn btn-sm btn-primary">添加角色</a>                                </div>                            </div>                            <ul class="list-group p-2" id="existed_roles_ul">                            </ul>                        </div>                    </div>                    <div class="tab-pane fade" id="adst-3" role="tabpanel" aria-labelledby="contact-tab">                        <div class="modal-height-300">                            <ul class="list-group" id="account_used_select_div"></ul>                        </div>                    </div>                </div>            </div>        </div>    </div></div><!--选择个人章--><div class="modal fade" id="chose-private-stamp-path" data-backdrop="static">    <div class="modal-dialog modal-lg" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title" id="audit-select-title">选择个人章</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                           </div>            <div class="modal-footer">                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>                <button id="audit-select-ok" class="btn btn-primary btn-sm" onclick="rptSignatureHelper.setPrivateStamp(this)">确定</button>            </div>        </div>    </div></div><!--选择审批人--><div class="modal fade" id="audit-select" data-backdrop="static">    <div class="modal-dialog" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title" id="audit-select-title">重置</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <table class="table table-bordered">                    <tr><th style="width: 50%">报表数据</th><th>审批人</th></tr>                    <tbody id="audit-select-list">                    </tbody>                </table>                <div id="audit-select-hint" class="text-danger">                </div>            </div>            <div class="modal-footer">                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>                <button id="audit-select-ok" class="btn btn-primary btn-sm" onclick="rptCustomObj.resetAuditSelect(this)">确定</button>            </div>        </div>    </div></div><!--选择标段--><div class="modal fade" id="gather-select" data-backdrop="static">    <div class="modal-dialog modal-lgx" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title" id="gather-select-title">选择标段</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <div class="row">                    <div class="col-7">                        <h5>可选标段 </h5>                        <div class="modal-height-500" id="gather-source-spread">                        </div>                    </div>                    <div class="col-5">                        <h5>已选标段 </h5>                        <div class="modal-height-500" id="gather-result-spread">                        </div>                        <div class="mt-1" id="gather-by-month" style="width: 60%" name="gather-type">                            <div class="input-group input-group-sm">                                <div class="input-group-prepend">                                    <span class="input-group-text">汇总年月</span>                                </div>                                <input id="gather-month" class="datepicker-here form-control form-control-sm" auto-close="true" autocomplete="off" placeholder="点击选择年月" data-view="months" data-min-view="months" data-date-format="yyyy-MM" data-language="zh" type="text" autocomplete="off">                            </div>                        </div>                        <div id="gather-by-zone" name="gather-type">                            <div class="input-group input-group-sm">                                <div class="input-group-prepend">                                    <span class="input-group-text">汇总周期</span>                                </div>                                <input id="gather-zone" class="datepicker-here form-control mt-0" placeholder="点击选择周期" data-range="true" data-multiple-dates-separator=" - "  data-min-view="months" data-view="months" data-date-format="yyyy-MM" data-language="zh" type="text" autocomplete="off">                            </div>                        </div>                        <div id="gather-by-checked-zone" name="gather-type">                            <div class="input-group input-group-sm">                                <div class="input-group-prepend">                                    <span class="input-group-text">汇总周期</span>                                </div>                                <input id="gather-checked-zone" class="datepicker-here form-control mt-0" placeholder="点击选择周期" data-range="true" data-multiple-dates-separator=" - "  data-min-view="days" data-view="days" data-date-format="yyyy-MM-dd" data-language="zh" type="text" autocomplete="off">                            </div>                        </div>                        <div id="gather-by-stage" name="gather-type">                            <div class="input-group input-group-sm">                                <div class="input-group-prepend">                                    <span class="input-group-text">选择期</span>                                </div>                                <select class="form-control" id="gather-stage">                                    <option>第1期</option>                                </select>                            </div>                        </div>                        <div id="gather-by-stage-zone" name="gather-type">                            <div class="input-group input-group-sm">                                <div class="input-group-prepend">                                    <span class="input-group-text">汇总</span>                                </div>                                <select class="form-control" id="gather-stage-begin">                                    <option>第1期</option>                                </select>                                <div class="input-group-prepend">                                    <span class="input-group-text">至</span>                                </div>                                <select class="form-control" id="gather-stage-end">                                    <option>第5期</option>                                </select>                            </div>                        </div>                    </div>                    <div class="text-danger text-center ml-3" id="gather-hint">我是提示呀</div>                </div>            </div>            <div class="modal-footer">                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>                <button class="btn btn-sm btn-primary" id="gather-select-ok">确定</button>            </div>        </div>    </div></div><div class="modal fade" id="stage-select" data-backdrop="static">    <div class="modal-dialog" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title" id="stage-select-title">选择期</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <div class="row">                    <% for (const s of stages) { %>                    <div class="col-3">                        <div class="custom-control custom-checkbox custom-control-inline">                            <input type="checkbox" id="stage-select-<%- s.order %>" name="stage-select-check" stage-order="<%- s.order %>" class="custom-control-input">                            <label class="custom-control-label" for="stage-select-<%- s.order %>">第<%- s.order %>期</label>                        </div>                    </div>                    <% } %>                </div>                <div class="alert alert-danger my-2 p-2" id="stage-select-hint">我是提示呀</div>            </div>            <div class="modal-footer">                <div class="form-check form-check-inline mr-auto">                    <input class="form-check-input" type="checkbox" id="stage-select-all">                    <label class="form-check-label" for="stage-select-all">全选</label>                </div>                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>                <button class="btn btn-sm btn-primary" id="stage-select-ok">确定</button>            </div>        </div>    </div></div><div class="modal fade" id="material-sum-select" data-backdrop="static">    <div class="modal-dialog" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title" id="material-sum-select-title">选择期(材料调差)</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <div class="row">                    <% for (const m of materialList) { %>                    <div class="col-3">                        <div class="custom-control custom-checkbox custom-control-inline">                            <input type="checkbox" id="material-sum-select-<%- m.order %>" name="material-sum-select-check" material-order="<%- m.order %>" class="custom-control-input">                            <label class="custom-control-label" for="material-sum-select-<%- m.order %>">第<%- m.order %>期</label>                        </div>                    </div>                    <% } %>                </div>                <div class="alert alert-danger my-2 p-2" id="material-sum-select-hint">我是提示呀</div>            </div>            <div class="modal-footer">                <div class="form-check form-check-inline mr-auto">                    <input class="form-check-input" type="checkbox" id="material-sum-select-all">                    <label class="form-check-label" for="material-sum-select-all">全选</label>                </div>                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>                <button class="btn btn-sm btn-primary" id="material-sum-select-ok">确定</button>            </div>        </div>    </div></div><div class="modal" id="change-select" data-backdrop="static">    <div class="modal-dialog modal-lg" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title" id="change-select-title">请选择变更令</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <div class="row">                    <div class="col-6">                        <h5>可选变更令 </h5>                        <table class="table table-bordered">                            <tr class="text-center"><th>选择</th><th>变更令号</th><th>工程名称</th></tr>                            <tbody id="change-select-list">                            </tbody>                        </table>                    </div>                    <div class="col-6">                        <h5>已选变更令 </h5>                        <table class="table table-bordered">                            <tr class="text-center"><th>序号</th><th>变更令号</th><th>工程名称</th></tr>                            <tbody id="change-select-result">                            </tbody>                        </table>                    </div>                </div>                <div class="alert alert-danger my-2 p-2" id="change-select-hint" style="display: none">我是提示呀</div>            </div>            <div class="modal-footer">                <div class="form-check form-check-inline mr-auto">                    <input class="form-check-input" type="checkbox" id="change-select-all">                    <label class="form-check-label" for="change-select-all">全选</label>                </div>                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>                <button class="btn btn-sm btn-primary" id="change-select-ok">确定</button>            </div>        </div>    </div></div><div class="modal" id="select-change-rela" data-backdrop="static">    <div class="modal-dialog" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title" id="scr-title">请选择变更令</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <table class="table table-bordered">                    <thead id="scr-header"><tr class="text-center"><th>选择</th><th>变更令号</th><th>工程名称</th></tr></thead>                    <tbody id="scr-list">                    </tbody>                </table>            </div>            <div class="modal-footer">                <div class="form-check form-check-inline mr-auto">                    <input class="form-check-input" type="checkbox" id="scr-all">                    <label class="form-check-label" for="scr-all">全选</label>                </div>                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>                <button class="btn btn-sm btn-primary" id="scr-ok" onclick="rptChangeRela.updateChangeRela();">确定</button>            </div>        </div>    </div></div><div class="modal" id="select-other-stage" data-backdrop="static">    <div class="modal-dialog" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title" id="sos-title">请选择预付款</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <table class="table table-bordered">                    <thead id="sos-header"><tr class="text-center"><th>选择</th><th>变更令号</th><th>工程名称</th></tr></thead>                    <tbody id="sos-list">                    </tbody>                </table>            </div>            <div class="modal-footer">                <div class="form-check form-check-inline mr-auto">                    <input class="form-check-input" type="checkbox" id="sos-all">                    <label class="form-check-label" for="sos-all">全选</label>                </div>                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>                <button class="btn btn-sm btn-primary" id="sos-ok" onclick="rptOtherStage.updateOtherStage();">确定</button>            </div>        </div>    </div></div><div class="modal" id="select-show-level" data-backdrop="static">    <div class="modal-dialog" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title" id="ssl-title">请选择显示层级</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <div class="form-group" id="ssl-list">                </div>            </div>            <div class="modal-footer">                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>                <button class="btn btn-sm btn-primary" id="sos-ok" onclick="rptShowLevel.update();">确定</button>            </div>        </div>    </div></div><!--管理推荐报表--><div class="modal fade" id="man-c" 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">                <div class="modal-height-500" style="overflow: auto;">                    <table class="table table-sm table-bordered" id="report_cust_group_common">                    </table>                </div>            </div>            <div class="modal-footer">                <button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="revertCommonCustRptCfg();">关闭</button>                <!--有结果出现添加-->                <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="updateCustRptCfg()">确认</button>            </div>        </div>    </div></div><!--管理定制报表--><div class="modal fade" id="man-i" 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">                <div class="modal-height-500" style="overflow: auto;">                    <table class="table table-sm table-bordered" id="report_cust_group_individual">                    </table>                </div>            </div>            <div class="modal-footer">                <button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="revertIndividualCustRptCfg();">关闭</button>                <!--有结果出现添加-->                <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="updateCustRptCfg()">确认</button>            </div>        </div>    </div></div><!--弹出归档--><div class="modal fade" id="guidang" data-backdrop="static">    <div class="modal-dialog" role="document">        <div class="modal-content">            <div class="modal-header">                <h5 class="modal-title">归档本张报表</h5>                <button type="button" class="close" data-dismiss="modal" aria-label="Close">                    <span aria-hidden="true">×</span>                </button>            </div>            <div class="modal-body">                <h6>归档后,本期报表将自动导出PDF格式,不再受新一期数据影响;</h6>                <h6>请确认报表数据无误(正确添加签字、设置页面格式等),继续归档操作。</h6>                <div class="card">                    <div class="card-body" id="cardArchiveInfo">                    </div>                </div>            </div>            <div class="modal-footer">                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>                <a href="javascript: void(0);" class="btn btn-sm btn-primary" data-dismiss="modal" onclick="rptArchiveObj.archiveCurrentReport(zTreeOprObj.currentRptPageRst, zTreeOprObj.currentNode)">确定归档</a>            </div>        </div>    </div></div><!--全屏显示报表--><div class="modal fade" id="fullscreen" data-backdrop="static">    <div class="modal-dialog modal-full" role="document">        <div class="modal-content">            <div class="modal-header d-flex justify-content-between">                <h5 class="modal-title" id="fullScrTitle"></h5>                <div class="print-toolsbar">                    <!--                    <div class="panel">                        <div class="panel-body">                            <div class="btn-group" role="group">                                <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="缩小">-</button>                                <button class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="重置默认大小">1000%</button>                                <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="放大">+</button>                            </div>                        </div>                    </div>                    -->                    <div class="panel">                        <div class="panel-body">                            <div class="input-group input-group-sm">                                <div class="input-group-prepend">                                    <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上一页" onclick="rptControlObj.prePage(this)"><i class="fa fa-angle-left "></i></button>                                </div>                                <input id="rpt_fullscreen_page_num" class="form-control" value="1/10" style="width:60px" onKeydown="rptControlObj.onKeydown(event, this)" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="输入页码按回车键,快速跳转">                                <div class="input-group-append">                                    <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="下一页" onclick="rptControlObj.nextPage(this)"><i class="fa fa-angle-right"></i></button>                                </div>                            </div>                        </div>                    </div>                    <div class="panel">                        <div class="panel-body">                            <button type="button" class="btn btn-outline-primary btn-sm" data-dismiss="modal" ><i class="fa fa-window-close-o"></i> 退出全屏</button>                        </div>                    </div>                </div>            </div>            <div class="modal-body">                <div class="modal-fullscreen pageContainer">                    <canvas id="fullScrCanvas" height="100%" width="100%"></canvas>                </div>            </div>        </div>    </div></div><% include ../stage/audit_modal.ejs %><script>    zTreeOprObj.getCustomerCfg();    zTreeOprObj.iniFontCfgDom(CUST_CFG);    buildCustRptCommon('report_cust_group_common', ORG_TOP_TREE_NODES[1], CUST_TREE_NODES.common, 'true');    buildCustRptCommon('report_cust_group_individual', ORG_TOP_TREE_NODES[0], CUST_TREE_NODES.customize, 'false');    let SELECTED_TENDERS = [];    function buildTendersTree() {        let sortedCat = [];        SELECTED_TENDERS = [];        for (const cat of category) {            if (cat.level > 0) {                sortedCat.push(cat);            }        }        let treeCache = [];        //1. 选择用户已设置的分类        if (sortedCat.length > 0) {            sortedCat.sort(function(i1, i2){                return i1.level - i2.level;            });            const _createItems = function (parentItems, grpLv) {                if (grpLv < sortedCat.length) {                    let cat = sortedCat[grpLv];                    for (const nv of cat.value) {                        let item = {                            name: nv.value,                            id : nv.id,                            cid : nv.cid,                            items: [],                            isParent: true                        };                        parentItems.push(item);                        _createItems(item.items, grpLv + 1);                    }                }            }            _createItems(treeCache, 0);        }        //2. 建立treeNodes        let hasCat = false;        for (const tender of tenders) {            if (tender.category && tender.category.length > 0) {                hasCat = true;                break;            }        }        //3. 把标段挂上去        let tmpCacheArr = []; //这个临时用来储存相应标段节点挂接信息        let _createTenderItem = function (tender) {            let rst = {                name: tender.name,                id : -1,                cid : -1,                tender_id: tender.id,                last_stage: tender.lastStage.order,                last_stage_id: tender.lastStage.id,                report_id: zTreeOprObj.currentNode.refId,                signature: '',                items: [],                isParent: false            }            return rst;        }        let _putTender = function (catLv, tender, parentItems) {            if (tender.lastStage !== undefined && tender.lastStage !== null) {                if (hasCat) {                    let isSorted = false;                    for (let sCat of sortedCat) {                        if (sCat.level <= tender.category.length && sCat.level > 0 && sCat.id === tender.category[catLv].cid) {                            isSorted = true;                            break;                        }                    }                    if (isSorted) {                        for (const item of parentItems) {                            if (item.cid === tender.category[catLv].cid && item.id === tender.category[catLv].value) {                                if (item.items.length > 0 && tender.category.length > (catLv + 1)) {                                    //递归循环                                    _putTender(catLv + 1, tender, item.items);                                } else {                                    //就是这个了                                    let tdItem = _createTenderItem(tender); //标段节点                                    tmpCacheArr.push([item, tdItem]);                                }                            }                        }                    } else {                        //超界了                        //let tdItem = _createTenderItem(tender); //标段节点                        //tmpCacheArr.push([item, tdItem]);                    }                } else {                    // 没有设置category                    let tdItem = _createTenderItem(tender); //标段节点                    tmpCacheArr.push([null, tdItem]);                }            }        }        for (const tender of tenders) {            //console.log('tender.name: ' + tender.name);            _putTender(0, tender, treeCache);        }        if (hasCat) {            for (const pairItem of tmpCacheArr) {                pairItem[0].items.push(pairItem[1]);            }        }        //4. 剔除空items的项        if (hasCat) {            let _removeEmptyItems = function (parentItem) {                let rst = false;                if (parentItem.items.length === 0) {                    if (parentItem.isParent) {                        rst = true;                    }                } else {                    for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {                        if (_removeEmptyItems(parentItem.items[idx])) {                            parentItem.items.splice(idx, 1);                        }                    }                    rst = parentItem.items.length === 0;                }                return rst;            }            for (let idx = treeCache.length - 1; idx >= 0; idx--) {                if (hasCat) {                    if (_removeEmptyItems(treeCache[idx])) {                        treeCache.splice(idx, 1);                    }                }            }        }        //console.log(treeCache);        //还要请求各标段的原签名数据        let params = {};        params.selectedTenders = [];        let _getTenderRelatedInfos = function(parentItem, rstArr) {            if (parentItem.items.length === 0) {                if (!parentItem.isParent) {                    rstArr.push([parentItem.tender_id, parentItem.last_stage_id, parentItem.report_id]);                }            } else {                for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {                    _getTenderRelatedInfos(parentItem.items[idx], rstArr);                }            }        };        let _addHint = function(parentItem, relArr) {            if (parentItem.items.length === 0) {                if (!parentItem.isParent) {                    for (const rel of relArr) {                        if (rel.tender_id === parentItem.tender_id && rel.sid === parentItem.last_stage_id && rel.rpt_id === parentItem.report_id) {                            let hintStr = '';                            if (rel.rel_content instanceof Array) {                                for (let idx = 0; idx < rel.rel_content.length; idx++) {                                    const dtlRel = rel.rel_content[idx];                                    if (idx > 0) {                                        hintStr = hintStr + '、';                                    }                                    hintStr = hintStr + '(' + dtlRel.signature_name + ')' + dtlRel.user_name;                                }                            }                            parentItem.signature = hintStr;                            break;                        }                    }                }            } else {                for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {                    _addHint(parentItem.items[idx], relArr);                }            }        };        if (hasCat) {            for (let idx = treeCache.length - 1; idx >= 0; idx--) {                _getTenderRelatedInfos(treeCache[idx], params.selectedTenders);            }        } else {            for (let idx = tmpCacheArr.length - 1; idx >= 0; idx--) {                _getTenderRelatedInfos(tmpCacheArr[idx][1], params.selectedTenders);                treeCache.push(tmpCacheArr[idx][1]);            }        }        $.bootstrapLoading.start();        CommonAjax.postXsrfEx("/tender/report_api/getMultiRoleRelationships", params, 30000, true, getCookie('csrfToken_j'),            function(result){                $.bootstrapLoading.end();                let relArr = result.data;                for (const rel of relArr) {                    rel.rel_content = JSON.parse(rel.rel_content);                }                console.log(relArr);                //5. 加hint                for (let idx = treeCache.length - 1; idx >= 0; idx--) {                    _addHint(treeCache[idx], relArr);                }                //6. 建树                _buildTenderTree('batch_tenders_individual', treeCache);            }, function(err){                $.bootstrapLoading.end();            }, function(ex){                $.bootstrapLoading.end();            }        );    }    function searchAccount() {        if (event.keyCode == 13) {            rptSignatureHelper.buildSelectableAccount(this);        }    }    function _buildTenderTree(tbDomId, tendersArr) {        let tbDom = $("#" + tbDomId);        tbDom.empty();        let domStrs = [];        domStrs.push('<thead><tr><th>名称</th><th width="50">计量期</th><th width="40">签名</th><th width="40">选择</th></tr></thead>');        domStrs.push('<tbody>');        const _createRow = function (rowItem, lv) {            let tdClassStr = 'in-' + lv;            if (rowItem.isParent) {                //tbDom.append('<tr><td class="' + tdClassStr + '"><i class="fa fa-folder-o"></i>  ' + rowItem.name + '</td><td></td><td></td><td></td></tr>');                domStrs.push('<tr><td class="' + tdClassStr + '"><i class="fa fa-folder-o"></i>  ' + rowItem.name + '</td><td></td><td></td><td></td></tr>');            } else {                let hrefStr = '/tender/' + rowItem.tender_id;                //<a href="biaoduan-panel.html" target="_blank">WWUJ-1</a>                let lastStgStr = '';                if (rowItem.last_stage === -1) {                    lastStgStr = '台账';                } else {                    lastStgStr = '第' + rowItem.last_stage + '期';                }                if (rowItem.signature !== undefined && rowItem.signature !== null && rowItem.signature !== '') {                    let hintStr = '<i class="fa fa-exclamation-circle text-primary" data-container="body" data-toggle="tooltip" data-placement="bottom" data-original-title="' + rowItem.signature + '"></i>';                    domStrs.push('<tr><td class="' + tdClassStr + '"><a href="' + hrefStr + '" target="_blank">' + rowItem.name + '</a></td><td>' + lastStgStr + '</td><td>' + hintStr + '</td><td><input type="checkbox" onclick="changeCrossTender(this, SELECTED_TENDERS, ' + rowItem.tender_id + ', ' + rowItem.last_stage_id + ', ' + rowItem.report_id + ')' + '"></td></tr>');                } else {                    domStrs.push('<tr><td class="' + tdClassStr + '"><a href="' + hrefStr + '" target="_blank">' + rowItem.name + '</a></td><td>' + lastStgStr + '</td><td></td><td><input type="checkbox" onclick="changeCrossTender(this, SELECTED_TENDERS, ' + rowItem.tender_id + ', ' + rowItem.last_stage_id + ', ' + rowItem.report_id + ')' + '"></td></tr>');                }            }            if (rowItem.items && rowItem.items.length > 0) {                for (const subItem of rowItem.items) {                    _createRow(subItem, lv + 1);                }            }        }        let grpLv = 1;        for (const tItem of tendersArr) {            _createRow(tItem, grpLv);        }        domStrs.push('</tbody>');        tbDom.append(domStrs.join(''));        $('[data-toggle="tooltip"]').tooltip();    }    function buildCustRptCommon(tbDomId, topTreeNode, checkingArr, isCommonStr) {        let tbDom = $("#" + tbDomId);        tbDom.empty();        tbDom.append('<tr><th>类别</th><th>包含报表</th><th>显示</th></tr>');        let _countAvailableTpls = function (tItem) {            let rst = 0;            if (tItem.nodeType === 1 && tItem.items && tItem.items.length > 0) {                for (const dItem of tItem.items) {                    if (dItem.nodeType === 2) {                        if (dItem.released) rst++;                    } else {                        rst += _countAvailableTpls(dItem);                    }                }            }            return rst;        };        let _pushRptLine = function (parentItem, rptItem, level, needChk, parentNodeIdStr, thisItemSeq, pHiddenVal) {            if (rptItem.nodeType === 1) {                let amt = _countAvailableTpls(rptItem);                if (amt > 0) {                    let padding_leftStr = '';                    // classStr = '',                    if (level > 0) {                        // classStr = 'pl-' + (level + 3);                        let rem = 1.5 * level;                        padding_leftStr = 'padding-left: ' + rem + 'rem!important'; //不受层数限制                    }                    if (needChk) {                        let chkName = pHiddenVal + parentItem.name + FOLDER_SEPERATER + rptItem.name;                        let checkedStr = (checkingArr.indexOf(chkName) >= 0) ? ' checked' : '';                        let sIdStr = parentNodeIdStr + '_sub_' + thisItemSeq;                        // tbDom.append('<tr><td class="' + classStr + '">' + rptItem.name + '</td><td>' + amt + '</td><td><input id="' + sIdStr + '" onchange="changeFolder(this, ' + isCommonStr + ', \'' + parentNodeIdStr + '\' )" hiddenval="' + chkName + '" type="checkbox"' + checkedStr + '></td></tr>');                        tbDom.append('<tr><td style="' + padding_leftStr + '">' + rptItem.name + '</td><td>' + amt + '</td><td><input id="' + sIdStr + '" onchange="changeFolder(this, ' + isCommonStr + ', \'' + parentNodeIdStr + '\' )" hiddenval="' + chkName + '" type="checkbox"' + checkedStr + '></td></tr>');                    } else {                        // tbDom.append('<tr><td class="' + classStr + '">' + rptItem.name + '</td><td>' + amt + '</td><td></td></tr>');                        tbDom.append('<tr><td style="' + padding_leftStr + '">' + rptItem.name + '</td><td>' + amt + '</td><td></td></tr>');                    }                    if (rptItem.items && rptItem.items.length > 0) {                        let subDtlSeq = 0;                        for (const subItem of rptItem.items) {                            _pushRptLine(rptItem, subItem, level + 1, true, '', subDtlSeq, parentItem.name + FOLDER_SEPERATER);                            subDtlSeq++;                        }                    }                }            }        }        let TplAmts = [];        let parentIdx = 0;        let subCnt = topTreeNode.items.length;        for (const topItem of topTreeNode.items) {            const avRpts = _countAvailableTpls(topItem);            if (avRpts > 0) {                TplAmts.push(avRpts);                let checkedStr = (checkingArr.indexOf(topItem.name) >= 0) ? ' checked' : '';                let pIdStr = tbDomId + '_' + parentIdx + '_' + subCnt;                tbDom.append('<tr><td>' + topItem.name + '</td><td>' + TplAmts[TplAmts.length - 1] + '</td><td><input id="' + pIdStr + '" onchange="changeFolder(this, ' + isCommonStr + ', null)" hiddenval="' + topItem.name + '" type="checkbox"' + checkedStr + '></td></tr>');                if (topItem.items && topItem.items.length > 0) {                    let subSeq = 0;                    for (const subItem of topItem.items) {                        _pushRptLine(topItem, subItem, 1, true, pIdStr, subSeq, '');                    }                    subSeq++;                }                parentIdx++;            }        }    }    function updateCustRptCfg(){        let params = {};        params.nodeItems = CUST_TREE_NODES;        CommonAjax.postXsrfEx("/tender/report_api/updateCustNode", params, 60000, true, getCookie('csrfToken_j'),            function(result){                try {                    // console.log(result);                    ORG_CUST_TREE_NODES.common = JSON.parse(JSON.stringify(CUST_TREE_NODES.common));                    ORG_CUST_TREE_NODES.customize = JSON.parse(JSON.stringify(CUST_TREE_NODES.customize));                    //刷新报表模板树                    TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));                    // 移除未被选择的模板                    filterUnchkTplTreeNode(TOP_TREE_NODES[0], CUST_TREE_NODES.customize);                    filterUnchkTplTreeNode(TOP_TREE_NODES[1], CUST_TREE_NODES.common);                    zTreeOprObj.getReportTemplateTree();                } catch(err) {                }            }, function(err){                // hintBox.unWaitBox();            }, function(ex){                // hintBox.unWaitBox();            }        );    }    function revertCommonCustRptCfg(){        CUST_TREE_NODES.common = JSON.parse(JSON.stringify(ORG_CUST_TREE_NODES.common));        buildCustRptCommon('report_cust_group_common', ORG_TOP_TREE_NODES[1], CUST_TREE_NODES.common, 'true');    }    function revertIndividualCustRptCfg(){        CUST_TREE_NODES.customize = JSON.parse(JSON.stringify(ORG_CUST_TREE_NODES.customize));        buildCustRptCommon('report_cust_group_individual', ORG_TOP_TREE_NODES[0], CUST_TREE_NODES.customize, 'false');    }    function changeCrossTender(dom, rstArr, tenderId, stageId, reportId) {        if (dom.checked) {            let item = [tenderId, stageId, reportId];            rstArr.push(item);        } else {            for (let idx = rstArr.length - 1; idx >= 0; idx--) {                if (rstArr[idx][0] === tenderId && rstArr[idx][1] === stageId && rstArr[idx][2] === reportId) {                    rstArr.splice(idx, 1); //删除当前标段                    //这里不break,防止一些冗余数据                }            }        }    }    function changeFolder(dom, isCommon, parentIdStr) {        let prop = null;        if (isCommon) {            prop = CUST_TREE_NODES.common;        } else {            prop = CUST_TREE_NODES.customize;        }        let idx = prop.indexOf(dom.attributes['hiddenval'].value);        if (dom.checked) {            if (idx < 0) {                prop.push(dom.attributes['hiddenval'].value);                if (parentIdStr === null) {                    //这是父节点,需要把所有子节点都勾上                    //后期补上                }            }        } else {            if (idx >= 0) {                prop.splice(idx, 1);                if (parentIdStr === null) {                    //这是父节点,需要把所有子节点都uncheck                    //后期补上                }            }        }    }</script>
 |