浏览代码

TASK #3928 概算投资的关联标段、决算对比界面,标段名称列 显示出标段的所属文件夹

MaiXinRong 3 年之前
父节点
当前提交
6bffada390

+ 6 - 1
app/controller/budget_controller.js

@@ -50,6 +50,7 @@ module.exports = app => {
                     return { groupName: item, groupList };
                 });
                 renderData.permissionConst = ctx.service.budgetPermission.PermissionConst;
+                renderData.categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
                 await this.layout('budget/list.ejs', renderData, 'budget/list_modal.ejs');
             } catch (err) {
                 ctx.log(err);
@@ -111,7 +112,7 @@ module.exports = app => {
                     err: 0,
                     msg: '',
                     data: tenderList.filter(x => { return otherRela.indexOf(x.id) === -1})
-                        .map(y => { return {id: y.id, name: y.name, lastStageOrder: y.lastStage.order, lastStageStatus: auditConst.stage.statusString[y.lastStage.status]}}),
+                        .map(y => { return {id: y.id, name: y.name, lastStageOrder: y.lastStage.order, lastStageStatus: auditConst.stage.statusString[y.lastStage.status], category: y.category}}),
                 };
             } catch (err) {
                 ctx.log(err);
@@ -153,6 +154,10 @@ module.exports = app => {
                 renderData.tenderList = relaTenderId.length > 0 ? tenderList.filter(x => {
                     return relaTenderId.indexOf(x.id) >= 0;
                 }) : tenderList;
+                renderData.tenderList = renderData.tenderList.map(y => {
+                    return { id: y.id, name: y.name, lastStageOrder: y.lastStage.order, lastStageStatus: auditConst.stage.statusString[y.lastStage.status], category: y.category };
+                });
+                renderData.categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
                 await this.layout('budget/compare.ejs', renderData, 'budget/compare_modal.ejs');
             } catch (err) {
                 ctx.log(err);

+ 19 - 1
app/public/js/budget_compare.js

@@ -47,7 +47,6 @@ $(document).ready(() => {
         rootId: -1,
     });
 
-
     function compareCode(str1, str2, symbol = '-') {
         if (!str1) {
             return 1;
@@ -238,4 +237,23 @@ $(document).ready(() => {
             }, 100);
         });
     })('a[name=showLevel]', compareSheet);
+
+
+    $('#valid-tender-list').html((function() {
+        const html = [];
+        const tree = Tender2Tree.convert(category, tenderList, null, null, function (node, source) {
+            node.lastStageOrder = source.lastStageOrder;
+            node.lastStageStatus = source.lastStageStatus;
+        });
+
+        for (const t of tree.nodes) {
+            if (t.cid) {
+                html.push(`<tr><td></td><td class="in-${t.level}"><i class="fa fa-folder-o"></i> ${t.name}</td><td></td><td></td></tr>`);
+            } else if (t.tid) {
+                const icon = tree.isLastSibling(t) ? '└' : '├';
+                html.push(`<tr><td class="text-center"><input type="checkbox" name="select-rela-check" tid="${t.id}"></td><td class="in-${t.level}">${icon} ${t.name}</td><td>第${t.lastStageOrder}期</td><td>${t.lastStageStatus}</td></tr>`);
+            }
+        }
+        return html.join('');
+    })());
 });

+ 12 - 2
app/public/js/budget_list.js

@@ -79,8 +79,18 @@ $(document).ready(() => {
         postData(`/budget/rela?id=${curBudget.id}`, {}, tenders => {
             const rela = curBudget.rela_tender ? curBudget.rela_tender.split(',') : [];
             const html = [];
-            for (const t of tenders) {
-                html.push(`<tr><td class="text-center"><input type="checkbox" name="select-rela-check" tid="${t.id}"></td><td>${t.name}</td><td>第${t.lastStageOrder}期</td><td>${t.lastStageStatus}</td></tr>`);
+            const tree = Tender2Tree.convert(category, tenders, null, null, function (node, source) {
+                node.lastStageOrder = source.lastStageOrder;
+                node.lastStageStatus = source.lastStageStatus;
+            });
+
+            for (const t of tree.nodes) {
+                if (t.cid) {
+                    html.push(`<tr><td></td><td class="in-${t.level}"><i class="fa fa-folder-o"></i> ${t.name}</td><td></td><td></td></tr>`);
+                } else if (t.tid) {
+                    const icon = tree.isLastSibling(t) ? '└' : '├';
+                    html.push(`<tr><td class="text-center"><input type="checkbox" name="select-rela-check" tid="${t.id}"></td><td class="in-${t.level}">${icon} ${t.name}</td><td>第${t.lastStageOrder}期</td><td>${t.lastStageStatus}</td></tr>`);
+                }
             }
             $('#valid-rela-tender').html(html.join(''));
             for (const r of rela) {

+ 1 - 0
app/public/js/path_tree.js

@@ -1822,6 +1822,7 @@ const createNewPathTree = function (type, setting) {
                 delete x.grow_dgn_qty;
                 delete x.grow_tp;
             });
+            this.loadDatas(this.datas);
         }
         resortChildrenByCustom(fun) {
             for (const n of this.nodes) {

+ 4 - 3
app/public/js/shares/tenders2tree.js

@@ -53,7 +53,7 @@ const Tender2Tree = (function () {
         return cate;
     }
 
-    function loadCategoryTreeNode ( tender, levelCate) {
+    function loadCategoryTreeNode (category, tender, levelCate) {
         let tenderCategory = null;
         for (const [i, lc] of levelCate.entries()) {
             const tenderCate = findNode('cid', lc.id, tender.category);
@@ -73,7 +73,7 @@ const Tender2Tree = (function () {
         return tenderCategory;
     }
 
-    function convert (category, tenders, ledgerAuditConst, stageAuditConst) {
+    function convert (category, tenders, ledgerAuditConst, stageAuditConst, loadFun) {
         tenderTree.clearDatas();
 
         const levelCategory = category.filter(function (c) {
@@ -81,7 +81,7 @@ const Tender2Tree = (function () {
         });
 
         for (const t of tenders) {
-            const parent = (t.category && levelCategory.length > 0) ? loadCategoryTreeNode(t, levelCategory) : null;
+            const parent = (t.category && levelCategory.length > 0) ? loadCategoryTreeNode(category, t, levelCategory) : null;
             const node = {
                 tid: t.id,
                 name: t.name,
@@ -91,6 +91,7 @@ const Tender2Tree = (function () {
             if (ledgerAuditConst && stageAuditConst) {
                 node.status = t.lastStage ? stageAuditConst.statusString[t.lastStage.status] : ledgerAuditConst.statusString[t.ledger_status];
             }
+            if (loadFun) loadFun(node, t);
             tenderTree.addNode(node, parent);
         }
         tenderTree.sortTreeNode(true);

+ 5 - 1
app/view/budget/compare.ejs

@@ -33,4 +33,8 @@
             </div>
         </div>
     </div>
-</div>
+</div>
+<script>
+    const category = JSON.parse(unescape('<%- escape(JSON.stringify(categoryData)) %>'));
+    const tenderList = JSON.parse(unescape('<%- escape(JSON.stringify(tenderList)) %>'));
+</script>

+ 1 - 6
app/view/budget/compare_modal.ejs

@@ -15,12 +15,7 @@
                         <th>状态</th>
                     </tr>
                     </thead>
-                    <tbody>
-                    <% for (const t of tenderList) { %>
-                    <tr>
-                        <td class="text-center"><input type="checkbox" name="sf-tender" tid="<%- t.id %>"><td><%- t.name %></td><td>第<%- t.lastStage.order %>期</td><td><%- auditConst.stage.statusString[t.lastStage.status] %></td>
-                    </tr>
-                    <% } %>
+                    <tbody id="valid-tender-list">
                     </tbody>
                 </table>
             </div>

+ 4 - 1
app/view/budget/list.ejs

@@ -44,4 +44,7 @@
             </div>
         </div>
     </div>
-</div>
+</div>
+<script>
+    const category = JSON.parse(unescape('<%- escape(JSON.stringify(categoryData)) %>'));
+</script>

+ 6 - 1
config/web.js

@@ -891,8 +891,12 @@ const JsFiles = {
         },
         budget: {
             list: {
-                files: ['/public/js/moment/moment.min.js'],
+                files: [
+                    '/public/js/moment/moment.min.js',
+                ],
                 mergeFiles: [
+                    '/public/js/path_tree.js',
+                    '/public/js/shares/tenders2tree.js',
                     '/public/js/budget_list.js',
                 ],
                 mergeFile: 'budget_list',
@@ -910,6 +914,7 @@ const JsFiles = {
                     '/public/js/shares/sjs_setting.js',
                     '/public/js/zh_calc.js',
                     '/public/js/path_tree.js',
+                    '/public/js/shares/tenders2tree.js',
                     '/public/js/budget_compare.js',
                 ],
                 mergeFile: 'budget_compare.js'