Kaynağa Gözat

标段合同树结构调整为以项目为树

ellisran 8 ay önce
ebeveyn
işleme
2ba8b68794

+ 18 - 5
app/controller/contract_controller.js

@@ -33,6 +33,7 @@ module.exports = app => {
                 const renderData = {
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.contract.index),
                     auditConst,
+                    isTender: false,
                 };
                 // renderData.budgetStd = await ctx.service.budgetStd.getDataByProjectId(ctx.session.sessionProject.id);
                 renderData.projectList = await ctx.service.subProject.getSubProjectByContract(ctx.session.sessionProject.id, ctx.session.sessionUser.accountId, ctx.session.sessionUser.is_admin);
@@ -48,7 +49,6 @@ module.exports = app => {
                         t.income_yf_price = incomeList.reduce((total, item) => ctx.helper.add(total, item.yf_price), 0);
                     }
                 }
-                renderData.tenderList = await ctx.service.tender.getList4Select('stage');
                 const accountList = await ctx.service.projectAccount.getAllDataByCondition({
                     where: { project_id: ctx.session.sessionProject.id, enable: 1 },
                     columns: ['id', 'name', 'company', 'role', 'enable', 'is_admin', 'account_group', 'mobile'],
@@ -87,7 +87,15 @@ module.exports = app => {
                 const userPermission = accountInfo !== undefined && accountInfo.permission !== ''
                     ? JSON.parse(accountInfo.permission) : null;
                 const tenderList = await ctx.service.tender.getContractList('', userPermission, ctx.session.sessionUser.is_admin);
+                const projectList = await ctx.service.subProject.getSubProjectByTender(ctx.session.sessionProject.id, tenderList);
                 for (const t of tenderList) {
+                    const spInfo = ctx.helper._.find(projectList, { id: t.spid });
+                    spInfo.child_order = spInfo.child_order ? spInfo.child_order : 0;
+                    spInfo.is_folder = 1;
+                    t.tree_pid = spInfo.id;
+                    t.tree_level = spInfo.tree_level + 1;
+                    t.tree_order = spInfo.child_order + 1;
+                    spInfo.child_order++;
                     const expensessList = await ctx.service.contract.getListByUsers({ tid: t.id, contract_type: contractConst.type.expenses }, ctx.session.sessionUser);
                     t.expenses_count = expensessList.length;
                     t.expenses_total_price = expensessList.reduce((total, item) => ctx.helper.add(total, item.total_price), 0);
@@ -99,11 +107,15 @@ module.exports = app => {
                 }
                 const categoryData = await ctx.service.category.getAllCategory(ctx.session.sessionProject.id);
                 const renderData = {
-                    jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.contract.tender),
-                    tenderList,
+                    // jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.contract.tender),
+                    jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.contract.index),
+                    auditConst,
+                    // tenderList,
+                    projectList: projectList.concat(tenderList),
                     categoryData,
+                    isTender: true,
                     // selfCategoryLevel: accountInfo ? accountInfo.self_category_level : '',
-                    selfCategoryLevel: '',
+                    // selfCategoryLevel: '',
                     pid: ctx.session.sessionProject.id,
                     uid: ctx.session.sessionUser.accountId,
                 };
@@ -122,7 +134,8 @@ module.exports = app => {
                     renderData.accountList = accountList;
                     renderData.accountGroup = accountGroupList;
                 }
-                await this.layout('contract/tender.ejs', renderData, 'contract/modal.ejs');
+                // await this.layout('contract/tender.ejs', renderData, 'contract/modal.ejs');
+                await this.layout('contract/index.ejs', renderData, 'contract/modal.ejs');
             } catch (err) {
                 ctx.log(err);
                 ctx.session.postError = err.toString();

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

@@ -556,7 +556,7 @@ const createNewPathTree = function (type, setting) {
         getPosterity(node) {
             const self = this;
             let posterity;
-            if (node[self.setting.fullPath] !== '') {
+            if (node[self.setting.fullPath] !== undefined && node[self.setting.fullPath] !== '') {
                 const reg = new RegExp('^' + node[self.setting.fullPath] + '-');
                 posterity = this.datas.filter(function (x) {
                     return reg.test(x[self.setting.fullPath]);

+ 12 - 0
app/service/sub_project.js

@@ -478,6 +478,18 @@ module.exports = app => {
             });
             return this._filterEmptyFolder(result);
         }
+
+        async getSubProjectByTender(pid, tenders, filterFolder = false) {
+            if (tenders.length === 0) return [];
+            const spids = this._.uniq(this._.map(tenders, 'spid'));
+            let result = await this.getAllDataByCondition({ where: { project_id: pid, is_delete: 0 } });
+            result = result.filter(x => {
+                if (x.is_folder) return !filterFolder;
+                if (!x.rela_tender) return false;
+                return this._.includes(spids, x.id);
+            });
+            return this._filterEmptyFolder(result);
+        }
     }
 
     return SubProject;

+ 6 - 6
app/service/tender.js

@@ -625,16 +625,16 @@ module.exports = app => {
             if (getAll === 1) {
                 // 具有查看所有标段权限的用户查阅标段
                 sql = 'SELECT t.`id`, t.`project_id`, t.`name`, t.`status`, t.`category`, t.`user_id`, t.`create_time`,' +
-                    '    pa.`name` As `user_name`, pa.`role` As `user_role`, pa.`company` As `user_company` ' +
+                    '    pa.`name` As `user_name`, pa.`role` As `user_role`, pa.`company` As `user_company`, t.`spid` ' +
                     '  FROM ?? As t ' +
                     '  Left Join ?? As pa ' +
                     '  ON t.`user_id` = pa.`id` ' +
-                    '  WHERE t.`project_id` = ? ORDER BY CONVERT(t.`name` USING GBK) ASC';
-                sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, session.sessionProject.id];
+                    '  WHERE t.`project_id` = ? AND t.`spid` != ? ORDER BY CONVERT(t.`name` USING GBK) ASC';
+                sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, session.sessionProject.id, ''];
             } else {
                 // 根据用户权限查阅标段
                 sql = 'SELECT t.`id`, t.`project_id`, t.`name`, t.`status`, t.`category`, t.`user_id`, t.`create_time`,' +
-                    '    pa.`name` As `user_name`, pa.`role` As `user_role`, pa.`company` As `user_company` ' +
+                    '    pa.`name` As `user_name`, pa.`role` As `user_role`, pa.`company` As `user_company`, t.`spid` ' +
                     // '  FROM ?? As t, ?? As pa ' +
                     // '  WHERE t.`project_id` = ? AND t.`user_id` = pa.`id` AND (' +
                     '  FROM ?? As t ' +
@@ -643,9 +643,9 @@ module.exports = app => {
                     '  WHERE t.`project_id` = ? AND ' +
                     // 参与施工 的标段
                     ' t.id IN ( SELECT ca.`tid` FROM ?? As ca WHERE ca.`uid` = ?)' +
-                    ' ORDER BY CONVERT(t.`name` USING GBK) ASC';
+                    ' AND t.`spid` != ? ORDER BY CONVERT(t.`name` USING GBK) ASC';
                 sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, session.sessionProject.id,
-                    this.ctx.service.contractAudit.tableName, session.sessionUser.accountId,
+                    this.ctx.service.contractAudit.tableName, session.sessionUser.accountId, '',
                 ];
             }
             const list = await this.db.query(sql, sqlParam);

+ 2 - 3
app/view/contract/index.ejs

@@ -3,10 +3,10 @@
         <div class="title-main  d-flex">
             <div class="d-inline-block">
                 <div class="btn-group group-tab">
-                    <a href="javascript:void(0);" class="btn btn-sm btn-light active">
+                    <a href="<% if (!isTender) { %>javascript:void(0);<% } else { %>/contract<% } %>" class="btn btn-sm btn-light<% if (!isTender) { %> active<% } %>">
                         项目合同
                     </a>
-                    <a href="/contract/tender" class="btn btn-sm btn-light">
+                    <a href="<% if (isTender) { %>javascript:void(0);<% } else { %>/contract/tender<% } %>" class="btn btn-sm btn-light<% if (isTender) { %> active<% } %>">
                         标段合同
                     </a>
                 </div>
@@ -50,7 +50,6 @@
 </div>
 <script>
     const projectList = JSON.parse(unescape('<%- escape(JSON.stringify(projectList)) %>'));
-    console.log(projectList);
     const category = JSON.parse(unescape('<%- escape(JSON.stringify(categoryData)) %>'));
     const is_admin = <%- ctx.session.sessionUser.is_admin %>;
 </script>