Browse Source

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

TonyKang 3 years ago
parent
commit
f74670eb49

+ 10 - 6
app/controller/tender_controller.js

@@ -435,7 +435,7 @@ module.exports = app => {
                     if (tender.ledger_status !== auditConst.ledger.status.uncheck) {
                         const status_name = await this.ctx.service.ledgerAudit.getStatusName(tender.id, tender.ledger_times);
                         tender.status_users = status_name ? status_name.name : '';
-                        const times = tender.status === auditConst.ledger.status.checkNo ? tender.times - 1 : tender.times;
+                        const times = tender.ledger_status === auditConst.ledger.status.checkNo ? tender.ledger_times - 1 : tender.ledger_times;
                         tender.auditors = await ctx.service.ledgerAudit.getFinalAuditGroup(tender.id, times);
                     } else {
                         const status_name = await this.ctx.service.projectAccount.getAccountInfoById(tender.user_id);
@@ -510,6 +510,7 @@ module.exports = app => {
                 // 地图
                 const tenderALLInfo = await ctx.service.tender.getDataById(tender.id);
                 const hadMap = tenderALLInfo.had_map;
+                const tenderMapList = await ctx.service.tenderMap.getAllDataByCondition({ where: { tid: tender.id } });
                 const renderData = {
                     tenders,
                     categoryData,
@@ -531,6 +532,7 @@ module.exports = app => {
                     hadMap,
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.tender.tenderInfo),
                     gclChapter,
+                    tenderMapList,
                 };
                 if (ctx.session.sessionUser.is_admin) {
                     renderData.tourists = await ctx.service.tenderTourist.getTourists(tender.id);
@@ -1229,19 +1231,21 @@ module.exports = app => {
                     throw '你没有权限修改概况设置';
                 }
                 let info = '';
+                let result = '';
                 switch (data.type) {
                     case 'select-map':
-                        const result = await ctx.service.tender.saveTenderData(ctx.tender.id, { had_map: data.value });
+                        result = await ctx.service.tender.saveTenderData(ctx.tender.id, { had_map: data.value });
                         if (!result) {
                             throw '修改概况设置失败';
                         }
                         info = result;
                         break;
-                    case 'del':
-                        await ctx.service.tenderTourist.removeAudit(data);
+                    case 'add-map':
+                        result = await ctx.service.tenderMap.addMap(ctx.tender.id, data.name);
+                        info = await ctx.service.tenderMap.getDataById(result.insertId);
                         break;
-                    case 'permission':
-                        await ctx.service.tenderTourist.setPermission(data);
+                    case 'del-map':
+                        await ctx.service.tenderMap.deleteById(data.id);
                         break;
                     default:break;
                 }

+ 10 - 2
app/lib/sum_load.js

@@ -94,6 +94,7 @@ class loadGclBaseTree {
             }
         } else {
             const p = this.ctx.helper.findPrecision(this.ctx.tender.info.precision, node.unit);
+            node.deal_qty = this.ctx.helper.round(node.deal_qty, p.value);
             node.sgfh_qty = this.ctx.helper.round(node.sgfh_qty, p.value);
             node.sjcl_qty = this.ctx.helper.round(node.sjcl_qty, p.value);
             node.qtcl_qty = this.ctx.helper.round(node.qtcl_qty, p.value);
@@ -104,6 +105,7 @@ class loadGclBaseTree {
                 if (!db) return;
                 node.unit_price = db.unit_price;
             }
+            node.deal_tp = this.ctx.helper.mul(node.deal_qty, node.unit_price, this.ctx.tender.info.decimal.tp);
             node.sgfh_tp = this.ctx.helper.mul(node.sgfh_qty, node.unit_price, this.ctx.tender.info.decimal.tp);
             node.sjcl_tp = this.ctx.helper.mul(node.sjcl_qty, node.unit_price, this.ctx.tender.info.decimal.tp);
             node.qtcl_tp = this.ctx.helper.mul(node.qtcl_qty, node.unit_price, this.ctx.tender.info.decimal.tp);
@@ -118,6 +120,7 @@ class loadGclBaseTree {
 class loadLedgerGclTree extends loadGclBaseTree {
     gather(source, parent) {
         const node = this.addNode(source, parent);
+        node.deal_qty = this.ctx.helper.add(node.deal_qty, source.deal_qty);
         node.sgfh_qty = this.ctx.helper.add(node.sgfh_qty, source.sgfh_qty);
         node.qtcl_qty = this.ctx.helper.add(node.qtcl_qty, source.qtcl_qty);
         node.sjcl_qty = this.ctx.helper.add(node.sjcl_qty, source.sjcl_qty);
@@ -134,6 +137,7 @@ class loadLedgerGclTree extends loadGclBaseTree {
                 id: i.id, tender_id: i.tender_id, ledger_id: i.ledger_id, ledger_pid: i.ledger_pid,
                 level: i.level, order: i.order, full_path: i.full_path, is_leaf: !i.children || i.children.length === 0,
                 b_code: i.b_code, name: i.name, unit: i.unit, unit_price: i.unit_price || 0,
+                deal_qty: i.deal_qty, deal_tp: i.deal_tp || 0,
                 sgfh_qty: i.sgfh_qty, sjcl_qty: i.sjcl_qty, qtcl_qty: i.qtcl_qty, quantity: i.quantity,
                 sgfh_tp: i.sgfh_tp || 0, sjcl_tp: i.sjcl_tp || 0, qtcl_tp: i.qtcl_tp || 0, total_price: i.total_price || 0,
             });
@@ -168,6 +172,7 @@ class updateReviseGclTree extends loadGclBaseTree {
                 name: d.name,
                 unit: d.unit,
                 unit_price: d.unit_price,
+                org_deal_qty: d.deal_qty || 0,
                 org_sgfh_qty: d.sgfh_qty || 0,
                 org_sjcl_qty: d.sjcl_qty || 0,
                 org_qtcl_qty: d.qtcl_qty || 0,
@@ -186,6 +191,7 @@ class updateReviseGclTree extends loadGclBaseTree {
     }
     gather(source, parent) {
         const node = this.addNode(source, parent);
+        node.deal_qty = this.ctx.helper.add(node.deal_qty, source.deal_qty);
         node.sgfh_qty = this.ctx.helper.add(node.sgfh_qty, source.sgfh_qty);
         node.qtcl_qty = this.ctx.helper.add(node.qtcl_qty, source.qtcl_qty);
         node.sjcl_qty = this.ctx.helper.add(node.sjcl_qty, source.sjcl_qty);
@@ -200,15 +206,16 @@ class updateReviseGclTree extends loadGclBaseTree {
             for (const bn of this.baseNodes) {
                 if (bn.children && bn.children.length > 0) continue;
 
-                if (bn.sjcl_qty < bn.org_sjcl_qty || bn.qtcl_qty < bn.org_qtcl_qty || bn.sgfh_qty < bn.org_sgfh_qty) {
+                if (bn.deal_qty < bn.org_deal_qty || bn.sjcl_qty < bn.org_sjcl_qty || bn.qtcl_qty < bn.org_qtcl_qty || bn.sgfh_qty < bn.org_sgfh_qty) {
                     result.errors.push({
                         ledger_id: bn.ledger_id,
                         b_code: bn.b_code, name: bn.name, unit: bn.unit,
-                        sgfh_qty: bn.sgfh_qty, sjcl_qty: bn.sjcl_qty, qtcl_qty: bn.qtcl_qty, qty: bn.quantity, type: 'less',
+                        deal_qty: bn.deal_qty, sgfh_qty: bn.sgfh_qty, sjcl_qty: bn.sjcl_qty, qtcl_qty: bn.qtcl_qty, qty: bn.quantity, type: 'less',
                     });
                 } else if (bn.sjcl_qty !== bn.org_sjcl_qty || bn.qtcl_qty !== bn.org_qtcl_qty || bn.sgfh_qty !== bn.org_sgfh_qty) {
                     result.update.push({
                         id: bn.id, ledger_id: bn.ledger_id, unit_price: bn.unit_price || 0,
+                        deal_qty: bn.deal_qty, deal_tp: bn.deal_tp || 0,
                         sgfh_qty: bn.sgfh_qty, sjcl_qty: bn.sjcl_qty, qtcl_qty: bn.qtcl_qty, quantity: bn.quantity,
                         sgfh_tp: bn.sgfh_tp || 0, sjcl_tp: bn.sjcl_tp || 0, qtcl_tp: bn.qtcl_tp || 0, total_price: bn.total_price || 0,
                     })
@@ -220,6 +227,7 @@ class updateReviseGclTree extends loadGclBaseTree {
                 id: i.id, tender_id: i.tender_id, ledger_id: i.ledger_id, ledger_pid: i.ledger_pid,
                 level: i.level, order: i.order, full_path: i.full_path, is_leaf: !i.children || i.children.length === 0,
                 b_code: i.b_code, name: i.name, unit: i.unit, unit_price: i.unit_price || 0,
+                deal_qty: i.deal_qty, deal_tp: i.deal_tp || 0,
                 sgfh_qty: i.sgfh_qty, sjcl_qty: i.sjcl_qty, qtcl_qty: i.qtcl_qty, quantity: i.quantity,
                 sgfh_tp: i.sgfh_tp || 0, sjcl_tp: i.sjcl_tp || 0, qtcl_tp: i.qtcl_tp || 0, total_price: i.total_price || 0,
             })

File diff suppressed because it is too large
+ 10 - 0
app/public/css/bootstrap/bootstrap-colorpicker.min.css


File diff suppressed because it is too large
+ 10 - 0
app/public/js/bootstrap/bootstrap-colorpicker.min.js


+ 10 - 3
app/public/report/js/rpt_archive.js

@@ -137,7 +137,10 @@ let rptArchiveObj = {
         if (me.currentNode && me.currentArchiveUuid) {
             try {
                 if (can_netcasign) {
-                    const msgSign = _.find(ARCHIVE_ENCRYPTION_LIST, {rpt_id: me.currentNode.ID});
+                    let msgSign = _.find(ARCHIVE_ENCRYPTION_LIST, {rpt_id: me.currentNode.ID, uuid: me.currentArchiveUuid});
+                    if (!msgSign) {
+                        msgSign = _.find(ARCHIVE_ENCRYPTION_LIST, {rpt_id: me.currentNode.ID});
+                    }
                     console.log(current_stage_id, msgSign, me.currentArchiveUuid);
                     me.currentEncryptionList = msgSign;
                     const uSignLogList = _.filter(signLogList, { uuid: me.currentArchiveUuid });
@@ -210,7 +213,8 @@ let rptArchiveObj = {
                 $('#iframe_made').html('<iframe src="/archive/pdf/show?file=' + me.currentArchivePdfPath + '" height="750px" width="100%" style="border: none;"></iframe>');
                 me._buildeArchiveDateSelect();
             });
-            me._updateSignHtmlAndFrame();
+            // me._updateSignHtmlAndFrame();
+            me._requestArchiveReport();
         } else {
             me.currentArchivePdfPath = oss_path + '/'+ me.currentArchiveUuid +'.PDF?' + new Date(me.currentArchiveDateStr.slice(3).replace(/-/g, '/')).getTime();
             $('#iframe_made').html('<iframe src="/archive/pdf/show?file=' + me.currentArchivePdfPath + '" height="750px" width="100%" style="border: none;"></iframe>');
@@ -251,7 +255,10 @@ let rptArchiveObj = {
         }
         let uhtml = '';
         let pagetr = '';
-        const msgSign = _.find(ARCHIVE_ENCRYPTION_LIST, {rpt_id: me.currentNode.ID});
+        let msgSign = _.find(ARCHIVE_ENCRYPTION_LIST, {rpt_id: me.currentNode.ID, uuid: me.currentArchiveUuid});
+        if (!msgSign) {
+            msgSign = _.find(ARCHIVE_ENCRYPTION_LIST, {rpt_id: me.currentNode.ID});
+        }
         for (const us of uSignLogList) {
             uhtml += '<span class="text-success"><i class="fa fa-check"></i> '+ us.role +'('+ us.name +')</span>';
         }

+ 1 - 1
app/service/stage.js

@@ -453,7 +453,7 @@ module.exports = app => {
             const param = tenderInfo.deal_param;
             for (const cb of calcBase) {
                 const sum = await this.ctx.service.stageBills.getSumTotalPrice(stage);
-                const bg = await this.ctx.service.stageChange.getQualityTotalPrice(stage.id);
+                const bg = await this.ctx.service.stageChange.getQualityTotalPrice(stage);
                 switch (cb.code) {
                     case 'htj':
                         cb.value = param.contractPrice;

+ 13 - 4
app/service/stage_change.js

@@ -395,23 +395,32 @@ module.exports = app => {
             return this.ctx.helper.filterLastestData(data, ['lid', 'pid', 'cid', 'cbid']);
         }
 
-        async getQualityTotalPrice(sid) {
+        async _getTender(stage) {
+            if (this.ctx.tender) return this.ctx.tender;
+            const tender = { id: stage.tid };
+            tender.data = await this.ctx.service.tender.getTender(stage.tid);
+            tender.info = await this.service.tenderInfo.getTenderInfo(tender.id);
+            return tender;
+        }
+
+        async getQualityTotalPrice(stage) {
             const helper = this.ctx.helper;
+            const tender = await this._getTender(stage);
             const sql = 'SELECT sc.*, c.quality FROM ' + this.tableName + ' sc' +
                 '  LEFT JOIN ' + this.ctx.service.change.tableName + ' c ON sc.cid = c.cid' +
                 '  WHERE sid = ?';
-            const data = await this.db.query(sql, [sid]);
+            const data = await this.db.query(sql, [stage.id]);
             const bqData = [];
             for (const d of data) {
                 if (!d.qty) continue;
                 let bd = bqData.find(x => { return x.lid === d.lid && x.quality === d.quality; });
                 if (!bd) {
-                    const bills = await this.ctx.service.ledger.getDataById(d.lid);
+                    const bills = await this.db.get(this.ctx.service.ledger.departTableName(tender.id), { id: d.lid });
                     if (!bills) continue;
                     bd = { lid: d.lid, quality: d.quality, unit_price: bills.unit_price };
                     bqData.push(bd);
                 }
-                const tp = this.ctx.helper.mul(d.qty, bd.unit_price, this.ctx.tender.info.decimal.tp);
+                const tp = this.ctx.helper.mul(d.qty, bd.unit_price, tender.info.decimal.tp);
                 bd.tp = this.ctx.helper.add(bd.tp, tp);
             }
             const result = {};

+ 41 - 0
app/service/tender_map.js

@@ -0,0 +1,41 @@
+'use strict';
+
+/**
+ * 标段数据模型
+ *
+ * @author CaiAoLin
+ * @date 2021/8/23
+ * @version
+ */
+
+module.exports = app => {
+
+    class TenderMap extends app.BaseService {
+
+        /**
+         * 构造函数
+         *
+         * @param {Object} ctx - egg全局变量
+         * @return {void}
+         */
+        constructor(ctx) {
+            super(ctx);
+            this.tableName = 'tender_map';
+        }
+
+        async addMap(tid, name) {
+            const data = {
+                tid,
+                name,
+                create_time: new Date(),
+            };
+            return await this.db.insert(this.tableName, data);
+        }
+
+        async saveMap(id, updateData) {
+            return await this.db.update(this.tableName, updateData, { where: { id } });
+        }
+    }
+
+    return TenderMap;
+};

File diff suppressed because it is too large
+ 7 - 6
app/view/tender/detail.ejs


+ 96 - 74
app/view/tender/detail_modal.ejs

@@ -2011,17 +2011,22 @@
                 <h5 class="modal-title">地图路线</h5>
             </div>
             <div class="modal-body">
-                <a href="#" class="btn btn-primary btn-sm">添加路线</a>
-                <table class="table table-bordered table-sm">
-                    <tr><th>路线</th><th width="150">编辑</th></tr>
-                    <tr><td>路线1</td><td><a href="#bd-set-11-2" data-toggle="modal" data-target="#bd-set-11-2" data-dismiss="modal">编辑坐标</a> <a href="" class="text-danger">删除</a></td></tr>
-                    <tr><td>路线2</td><td><a href="#bd-set-11-2" data-toggle="modal" data-target="#bd-set-11-2" data-dismiss="modal">编辑坐标</a> <a href="" class="text-danger">删除</a></td></tr>
-                    <tr><td>路线2</td><td><a href="#bd-set-11-2" data-toggle="modal" data-target="#bd-set-11-2" data-dismiss="modal">编辑坐标</a> <a href="" class="text-danger">删除</a></td></tr>
-                </table>
+                <a href="javascript:void(0)" id="add-map" class="btn btn-primary btn-sm">添加路线</a>
+                <div style="max-height:450px;overflow: auto">
+                    <table class="table table-bordered table-sm">
+                        <tr><th>路线</th><th width="150">编辑</th></tr>
+                        <tbody id="map-table">
+                        <% for (const tm of tenderMapList) { %>
+                        <tr><td><%- tm.name %></td><td><a href="#bd-set-11-2" data-mid="<%- tm.id %>" data-toggle="modal" data-target="#bd-set-11-2" data-dismiss="modal" class="save-map-btn">编辑坐标</a> <a href="#bd-set-11-3" data-mid="<%- tm.id %>" data-toggle="modal" data-target="#bd-set-11-3" data-dismiss="modal" class="text-danger del-map-btn">删除</a></td></tr>
+                        <% } %>
+                        </tbody>
+                    </table>
+                </div>
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
                 <!--<button type="button" class="btn btn-sm btn-primary" >确认修改</button>-->
+                <button type="button" class="btn btn-sm btn-success" >刷新显示</button>
             </div>
         </div>
     </div>
@@ -2033,84 +2038,51 @@
                 <h5 class="modal-title">地图路线</h5>
             </div>
             <div class="modal-body">
-                <!-- <div class="form-group ">
-                  <label class="d-flex justify-content-between">路线1<a href="" class="text-danger">移除</a></label>
-                  <div class="row">
-                    <div class="col-5 pr-0">
-                      <div class="input-group input-group-sm">
-                        <div class="input-group-prepend">
-                          <span class="input-group-text">起点</span>
-                        </div>
-                        <input type="text" class="form-control" value="" placeholder="X轴坐标">
-                        <input type="text" class="form-control" value="" placeholder="Y轴坐标">
-                      </div>
-                    </div>
-                    <div class="col-5 pr-0">
-                      <div class="input-group input-group-sm">
-                        <div class="input-group-prepend">
-                          <span class="input-group-text">终点</span>
-                        </div>
-                        <input type="text" class="form-control" value="" placeholder="X轴坐标">
-                        <input type="text" class="form-control" value="" placeholder="Y轴坐标">
-                      </div>
-                    </div>
-                    <div class="col-2">
-                      <div class="input-group input-group-sm">
-                        <input type="color" class="form-control">
-                      </div>
-                    </div>
-                  </div>
-                </div>
-                <div class="form-group">
-                  <label class="d-flex justify-content-between">路线2<a href="" class="text-danger">移除</a></label>
-                  <div class="row">
-                    <div class="col-5 pr-0">
-                      <div class="input-group input-group-sm">
-                        <div class="input-group-prepend">
-                          <span class="input-group-text">起点</span>
-                        </div>
-                        <input type="text" class="form-control" value="" placeholder="X轴坐标">
-                        <input type="text" class="form-control" value="" placeholder="Y轴坐标">
-                      </div>
-                    </div>
-                    <div class="col-5 pr-0">
-                      <div class="input-group input-group-sm">
-                        <div class="input-group-prepend">
-                          <span class="input-group-text">终点</span>
-                        </div>
-                        <input type="text" class="form-control" value="" placeholder="X轴坐标">
-                        <input type="text" class="form-control" value="" placeholder="Y轴坐标">
-                      </div>
-                    </div>
-                    <div class="col-2">
-                      <div class="input-group input-group-sm">
-                        <input type="color" class="form-control">
-                      </div>
-                    </div>
-                  </div>
-                </div>
-                 <button type="button" class="btn btn-sm btn-primary mt-2" >添加路线</button> -->
                 <input class="form-control form-control-sm mb-1" type="text" value="路线1" placeholder="请输入路线名称">
-                <table class="table table-bordered table-sm">
-                    <tr><th>坐标/备注</th><th>N(X)</th><th>E(Y)</th><th>色值(选填)</th></tr>
-                    <tr><td>K0+000</td><td>324234.22</td><td>121212.09</td><td>#ff6501</td></tr>
-                    <tr><td>K1+356</td><td>9861253.22</td><td>28234234.09</td><td></td></tr>
-                    <tr><td>K2+534</td><td>651278.22</td><td>64122.09</td><td></td></tr>
-                    <tr><td>&nbsp;</td><td>&nbsp; </td><td></td><td></td></tr>
-                    <tr><td>&nbsp;</td><td>&nbsp; </td><td></td><td></td></tr>
-                    <tr><td>&nbsp;</td><td> &nbsp;</td><td></td><td></td></tr>
-                    <tr><td>&nbsp;</td><td> &nbsp;</td><td></td><td></td></tr>
-                </table>
+                <input class="form-control form-control-sm mb-1" type="text" id="color-select" value="#ff0000" placeholder="请选择路线颜色">
+                <!--<table class="table table-bordered table-sm">-->
+                    <!--<tr><th>坐标/备注</th><th>N(X)</th><th>E(Y)</th><th>色值(选填)</th></tr>-->
+                    <!--<tr><td>K0+000</td><td>324234.22</td><td>121212.09</td><td>#ff6501</td></tr>-->
+                    <!--<tr><td>K1+356</td><td>9861253.22</td><td>28234234.09</td><td></td></tr>-->
+                    <!--<tr><td>K2+534</td><td>651278.22</td><td>64122.09</td><td></td></tr>-->
+                    <!--<tr><td>&nbsp;</td><td>&nbsp; </td><td></td><td></td></tr>-->
+                    <!--<tr><td>&nbsp;</td><td>&nbsp; </td><td></td><td></td></tr>-->
+                    <!--<tr><td>&nbsp;</td><td> &nbsp;</td><td></td><td></td></tr>-->
+                    <!--<tr><td>&nbsp;</td><td> &nbsp;</td><td></td><td></td></tr>-->
+                <!--</table>-->
+                <div class="modal-height-300" style="overflow-y: auto">
+                    <div id="map-spread" style="height: 297px; width: 465px;"></div>
+                </div>
             </div>
             <div class="modal-footer">
                 <a href="#bd-set-11-1" class="btn btn-sm btn-secondary" data-toggle="modal" data-target="#bd-set-11-1" data-dismiss="modal">关闭</a>
                 <!--<a href="#bd-set-11" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#bd-set-11-1" data-dismiss="modal">确认修改</a>-->
+                <button type="button" class="btn btn-sm btn-primary" id="save-map" data-mid="">确认修改</button>
+            </div>
+        </div>
+    </div>
+</div>
+<!--删除路线-->
+<div class="modal fade" id="bd-set-11-3" 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>
+            <div class="modal-footer">
+                <a href="#bd-set-11-1" class="btn btn-sm btn-secondary" data-toggle="modal" data-target="#bd-set-11-1" data-dismiss="modal">关闭</a>
+                <!--<button type="button" class="btn btn-sm btn-primary" >确认修改</button>-->
+                <button type="button" class="btn btn-sm btn-danger" id="del-map" data-mid="">确认删除</button>
             </div>
         </div>
     </div>
 </div>
 <script>
     const hadMap = parseInt(<%- hadMap %>);
+    const tenderMapList = JSON.parse(unescape('<%- escape(JSON.stringify(tenderMapList)) %>'));
     $(function () {
         $('body').on('click', '#bd-set-11 .select-map', function () {
             // const val = parseInt($(this).data('value'));
@@ -2136,6 +2108,56 @@
                 toastr.warning('未更改当前设置,无需提交');
             }
         })
+        $('#color-select').colorpicker();
+        $('#add-map').click(function () {
+            const num = $('#map-table tr').length;
+            const name = '路线' + (num+1);
+            postData('/tender/' + tenderId + '/map/save', { type: 'add-map', name }, function (result) {
+                tenderMapList.push(result);
+                $('#map-table').append('<tr><td>'+ name +'</td><td><a href="#bd-set-11-2" data-mid="'+ result.id +'" data-toggle="modal" data-target="#bd-set-11-2" data-dismiss="modal" class="save-map-btn">编辑坐标</a> <a href="#bd-set-11-3" data-mid="'+ result.id +'" data-toggle="modal" data-target="#bd-set-11-3" data-dismiss="modal" class="text-danger del-map-btn">删除</a></td></tr>');
+            });
+        });
+        $('body').on('click', '#bd-set-11-1 .del-map-btn', function () {
+            $('#del-map').attr('data-mid', $(this).data('mid'));
+        });
+        $('#del-map').on('click', function () {
+            const id = parseInt($(this).attr('data-mid'));
+            postData('/tender/' + tenderId + '/map/save', { type: 'del-map', id }, function (result) {
+                const index = _.findIndex(tenderMapList, { id });
+                $('#map-table tr').eq(index).remove();
+                _.remove(tenderMapList,{id})
+                $('#bd-set-11-3').modal('hide');
+                $('#bd-set-11-1').modal('show');
+            });
+        });
+        const mapSpreadSetting = {
+            cols: [
+                {title: '坐标/备注', colSpan: '1', rowSpan: '1', field: 'b_code', hAlign: 0, width: 100, formatter: '@'},
+                {title: '经度', colSpan: '1', rowSpan: '1', field: 'x', hAlign: 2, width: 120, type: 'Number'},
+                {title: '纬度', colSpan: '1', rowSpan: '1', field: 'y', hAlign: 2, width: 120, type: 'Number'},
+            ],
+            emptyRows: 20,
+            headRows: 1,
+            headRowHeight: [25, 25],
+            defaultRowHeight: 21,
+            headerFont: '12px 微软雅黑',
+            font: '12px 微软雅黑',
+            readOnly: false,
+        };
+        const mapSpread = SpreadJsObj.createNewSpread($('#map-spread')[0]);
+        SpreadJsObj.initSheet(mapSpread.getActiveSheet(), mapSpreadSetting);
+        $('body').on('click', '#bd-set-11-1 .save-map-btn', function () {
+            const id = parseInt($(this).data('mid'));
+            $('#save-map').attr('data-mid', id);
+            // 加载sjs
+            const mapInfo = _.find(tenderMapList, { id });
+            console.log(mapInfo);
+            SpreadJsObj.loadSheetData(mapSpread.getActiveSheet(), SpreadJsObj.DataType.Data, (mapInfo.map_json ? mapInfo.map_json : []));
+        });
+        $('#save-map').on('click', function () {
+            const id = parseInt($(this).attr('data-mid'));
+            console.log(id);
+        });
     })
 </script>
 <% } %>

+ 1 - 1
config/web.js

@@ -99,7 +99,7 @@ const JsFiles = {
                 mergeFile: 'tender_list_manage',
             },
             tenderInfo: {
-                files: ['/public/js/echarts/echarts.min.js', '/public/js/spreadjs/sheets/v11/gc.spread.sheets.all.11.2.2.min.js', '/public/js/decimal.min.js'],
+                files: ['/public/js/echarts/echarts.min.js', '/public/js/spreadjs/sheets/v11/gc.spread.sheets.all.11.2.2.min.js', '/public/js/decimal.min.js', '/public/js/bootstrap/bootstrap-colorpicker.min.js'],
                 mergeFiles: [
                     '/public/js/spreadjs_rela/spreadjs_zh.js',
                     '/public/js/zh_calc.js',