Ver código fonte

计量台账,书签

MaiXinRong 4 anos atrás
pai
commit
81ab55428c

+ 2 - 0
app/controller/stage_controller.js

@@ -324,6 +324,8 @@ module.exports = app => {
                             responseData.data.dealBills = await ctx.service.dealBills.getAllDataByCondition({
                                 where: { tender_id: this.ctx.tender.id },
                             });
+                        case 'tag':
+                            responseData.data.tags = await ctx.service.ledgerTag.getDatas(ctx.tender.id, ctx.stage.id);
                             break;
                     }
                 }

+ 1 - 1
app/public/js/shares/cs_tools.js

@@ -657,7 +657,7 @@ const showSelectTab = function(select, spread, afterShow) {
             tagHtml.push('<div class="d-flex justify-content-between">');
             // 参与人可见
             tagHtml.push('<div class="custom-control custom-switch mr-2">');
-            tagHtml.push('<input type="checkbox" class="custom-control-input custom-control-warning-input" id="tag-share">');
+            tagHtml.push('<input type="checkbox" class="custom-control-input custom-control-warning-input" id="tag-share"', tag.share ? 'checked' : '', '>');
             tagHtml.push('<label class="custom-control-label custom-control-warning-label" for="tag-share" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="所有参与台帐审批管理的用户都可以看到这条书签"><i class="fa fa-users"></i> 参与者可见</label>');
             tagHtml.push('</div>');
             // 编辑按钮

+ 125 - 2
app/public/js/stage.js

@@ -572,6 +572,32 @@ $(document).ready(() => {
     sjsSettingObj.setPropValue(ledgerSpreadSetting, ['gxby'], 'getValue', getGxbyText);
     sjsSettingObj.setPropValue(ledgerSpreadSetting, ['dagl'], 'getValue', getDaglText);
     if (thousandth) sjsSettingObj.setTpThousandthFormat(ledgerSpreadSetting);
+    ledgerSpreadSetting.rowHeader = [
+        {
+            rowHeaderType: 'tag',
+            setting: {
+                getColor: function (index, data) {
+                    if (!data) return;
+                    return billsTag.getBillsTagsColor(data.id);
+                },
+                getTagHtml: function (index, data) {
+                    if (!data) return;
+                    const getHtml = function (list) {
+                        if (!list || list.length === 0) return '';
+                        const html = [];
+                        for (const l of list) {
+                            html.push('<div class="row mr-1">');
+                            html.push(`<div class="col-auto pr-1 ${l.tagClass}">`, '<i class="fa fa-tag"></i>', '</div>');
+                            html.push('<div class="col p-0">', '<p>', l.comment, '</p>', '</div>');
+                            html.push('</div>');
+                        }
+                        return html.join('');
+                    };
+                    return getHtml(billsTag.getBillsTagsInfo(data.id));
+                }
+            },
+        },
+    ];
     SpreadJsObj.initSheet(slSpread.getActiveSheet(), ledgerSpreadSetting);
     slSpread.getActiveSheet().frozenColumnCount(5);
     slSpread.getActiveSheet().options.frozenlineColor = '#93b5e4';
@@ -617,6 +643,21 @@ $(document).ready(() => {
     sjsSettingObj.setPropValue(posSpreadSetting, ['dagl'], 'getValue', getDaglText);
     SpreadJsObj.initSheet(spSpread.getActiveSheet(), posSpreadSetting);
 
+    const billsTag = $.billsTag({
+        selector: '#bills-tag',
+        relaSpread: slSpread,
+        updateUrl: window.location.pathname + '/tag',
+        afterModify: function (nodes) {
+            SpreadJsObj.repaintNodesRowHeader(slSpread.getActiveSheet(), nodes);
+        },
+        afterLocated:  function () {
+            stagePosSpreadObj.loadCurPosData();
+        },
+        afterShow: function () {
+            slSpread.refresh();
+            if (spSpread) spSpread.refresh();
+        },
+    });
     const errorList = $.cs_errorList({
         tabSelector: '#error-list-tab',
         selector: '#error-list',
@@ -630,7 +671,6 @@ $(document).ready(() => {
             if (spSpread) spSpread.refresh();
         },
     });
-
     const checkList = $.ledger_checkList({
         id: 'check-list',
         tabSelector: '#check-list-tab',
@@ -1201,9 +1241,11 @@ $(document).ready(() => {
         });
     }
     stageTreeSpreadObj.loadExprToInput(slSpread.getActiveSheet());
+    let addTagShare = true;
     $.contextMenu({
         selector: '#stage-ledger',
         build: function ($trigger, e) {
+            addTagShare = true;
             const target = SpreadJsObj.safeRightClickSelection($trigger, e, slSpread);
             return target.hitTestType === spreadNS.SheetArea.viewport || target.hitTestType === spreadNS.SheetArea.rowHeader;
         },
@@ -1240,6 +1282,82 @@ $(document).ready(() => {
                     }
                 },
             },
+            tag: {
+                name: '书签',
+                items: {
+                    tagShare: {
+                        name: '参与人可见',
+                        type: 'checkbox',
+                        selected: true,
+                        events: {
+                            change: function () {
+                                addTagShare = this.checked;
+                            }
+                        }
+                    },
+                    tagSpr: '--------------',
+                    tagPrimary: {
+                        icon: 'fa-tag text-primary mt-2 mb-2',
+                        name: '靛青',
+                        callback: function (key, opt, menu, e) {
+                            const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
+                            postData(window.location.pathname + '/tag', {add: { color: '#007bff', lid: node.id, share: addTagShare }}, function (data) {
+                                if (data.add) data.add.node = node;
+                                billsTag.updateDatasAndShow(data);
+                                SpreadJsObj.repaintNodesRowHeader(slSpread.getActiveSheet(), node);
+                            });
+                        },
+                    },
+                    tagSuccess: {
+                        icon: 'fa-tag text-success mt-2 mb-2',
+                        name: '果绿',
+                        callback: function (key, opt) {
+                            const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
+                            postData(window.location.pathname + '/tag', {add: { color: '#28a745', lid: node.id, share: addTagShare }}, function (data) {
+                                if (data.add) data.add.node = node;
+                                billsTag.updateDatasAndShow(data);
+                                SpreadJsObj.repaintNodesRowHeader(slSpread.getActiveSheet(), node);
+                            });
+                        },
+                    },
+                    tagDanger: {
+                        icon: 'fa-tag text-danger mt-2 mb-2',
+                        name: '朱砂',
+                        callback: function (key, opt) {
+                            const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
+                            postData(window.location.pathname + '/tag', {add: { color: '#dc3545', lid: node.id, share: addTagShare }}, function (data) {
+                                if (data.add) data.add.node = node;
+                                billsTag.updateDatasAndShow(data);
+                                SpreadJsObj.repaintNodesRowHeader(slSpread.getActiveSheet(), node);
+                            });
+                        },
+                    },
+                    tagWarning: {
+                        icon: 'fa-tag text-warning mt-2 mb-2',
+                        name: '姜黄',
+                        callback: function (key, opt) {
+                            const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
+                            postData(window.location.pathname + '/tag', {add: { color: '#da9500', lid: node.id, share: addTagShare }}, function (data) {
+                                if (data.add) data.add.node = node;
+                                billsTag.updateDatasAndShow(data);
+                                SpreadJsObj.repaintNodesRowHeader(slSpread.getActiveSheet(), node);
+                            });
+                        },
+                    },
+                    tagInfo: {
+                        icon: 'fa-tag text-info mt-2 mb-2',
+                        name: '天蓝',
+                        callback: function (key, opt) {
+                            const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
+                            postData(window.location.pathname + '/tag', {add: { color: '#17a2b8', lid: node.id, share: addTagShare }}, function (data) {
+                                if (data.add) data.add.node = node;
+                                billsTag.updateDatasAndShow(data);
+                                SpreadJsObj.repaintNodesRowHeader(slSpread.getActiveSheet(), node);
+                            });
+                        },
+                    }
+                },
+            },
         }
     });
 
@@ -1656,7 +1774,7 @@ $(document).ready(() => {
     });
 
     // 加载计量单元数据 - 暂时统一加载,如有需要,切换成动态加载并缓存
-    postData(window.location.pathname + '/load', { filter: 'ledger;pos;detail;change' }, function (result) {
+    postData(window.location.pathname + '/load', { filter: 'ledger;pos;detail;change;tag' }, function (result) {
         // 加载树结构
         stageTree.loadDatas(result.ledgerData);
         // stageTree.loadCurStageData(curStageData);
@@ -1672,6 +1790,11 @@ $(document).ready(() => {
         // 加载中间计量
         stageIm.init(stage, imType, tenderInfo.decimal);
         stageIm.loadData(result.ledgerData, result.posData, result.detailData, result.changeData);
+
+        for (const t of result.tags) {
+            t.node = stageTree.datas.find(x => {return x.id === t.lid});
+        }
+        billsTag.loadDatas(result.tags);
         errorList.loadHisErrorData();
         checkList.loadHisCheckData();
     }, null, true);

+ 1 - 1
app/router.js

@@ -438,5 +438,5 @@ module.exports = app => {
 
     // 书签
     app.post('/tender/:id/ledger/tag', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.billsTag');
-    app.post('/tender/:id/ledger/measure/stage/:order/tag', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'tenderController.billsTag');
+    app.post('/tender/:id/measure/stage/:order/tag', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'tenderController.billsTag');
 };

+ 0 - 1
app/view/ledger/explode.ejs

@@ -151,7 +151,6 @@
                         </div>
                     </div>
                     <div id="bills-tag" class="tab-pane">
-
                     </div>
                     <div id="error-list" class="tab-pane">
                     </div>

+ 5 - 0
app/view/stage/index.ejs

@@ -534,6 +534,8 @@
                         <div class="sjs-bottom" id="ccb-spread">
                         </div>
                     </div>
+                    <div id="bills-tag" class="tab-pane">
+                    </div>
                     <div id="error-list" class="tab-pane">
                     </div>
                     <div id="check-list" class="tab-pane">
@@ -560,6 +562,9 @@
                     <a class="nav-link" content="#checked-change" href="javascript: void(0);">变更令</a>
                 </li>
                 <li class="nav-item">
+                    <a class="nav-link" content="#bills-tag" href="javascript: void(0);">书签</a>
+                </li>
+                <li class="nav-item">
                     <a class="nav-link" content="#check-list" id="check-list-tab" href="javascript: void(0);" style="display: none;">检查错误</a>
                 </li>
                 <li class="nav-item">