Selaa lähdekoodia

决策大屏权限及页面控制

ellisran 2 kuukautta sitten
vanhempi
commit
592c65f05c

+ 21 - 21
app/controller/datacollect_controller.js

@@ -57,33 +57,33 @@ module.exports = app => {
                 const categoryData = await this.ctx.service.category.getListByCategoryLevel(ctx.subProject.id);
                 // 默认坐标,否则则取办事处坐标
                 const projectData = await ctx.service.project.getDataById(ctx.session.sessionProject.id);
-                projectData.data_collect_pages = projectData.data_collect_pages ? projectData.data_collect_pages.split(',') : [];
-                let map_json = {
-                    province: mapConst.map[0].province,
-                    lng: mapConst.map[0].lng,
-                    lat: mapConst.map[0].lat,
-                    level: 15,
-                };
-                if (projectData.map_json) {
-                    map_json = JSON.parse(projectData.map_json);
-                } else {
-                    const mapInfo = ctx.helper._.find(mapConst.map, { office: projectData.manager_office });
-                    if (mapInfo) {
-                        map_json.province = mapInfo.province;
-                        map_json.lng = mapInfo.lng;
-                        map_json.lat = mapInfo.lat;
-                    }
-                }
+                ctx.subProject.data_collect_pages = ctx.subProject.data_collect_pages ? ctx.subProject.data_collect_pages.split(',') : [];
+                // let map_json = {
+                //     province: mapConst.map[0].province,
+                //     lng: mapConst.map[0].lng,
+                //     lat: mapConst.map[0].lat,
+                //     level: 15,
+                // };
+                // if (projectData.map_json) {
+                //     map_json = JSON.parse(projectData.map_json);
+                // } else {
+                //     const mapInfo = ctx.helper._.find(mapConst.map, { office: projectData.manager_office });
+                //     if (mapInfo) {
+                //         map_json.province = mapInfo.province;
+                //         map_json.lng = mapInfo.lng;
+                //         map_json.lat = mapInfo.lat;
+                //     }
+                // }
                 if (ctx.params.index) {
-                    ctx.session.sessionProject.dataCollect = parseInt(ctx.params.index);
+                    ctx.subProject.dataCollect = parseInt(ctx.params.index);
                 }
                 const is_dz2 = ['P0505', 'P0506', 'P1201', 'P1202', 'GY18Y', 'GYJJ1', 'P1103'].indexOf(ctx.session.sessionProject.code) !== -1
-                    && projectData.data_collect_pages.includes('6') && ctx.session.sessionProject.dataCollect === 6;
+                    && ctx.subProject.data_collect_pages.includes('6') && ctx.subProject.dataCollect === 6;
                 const renderData = {
                     projectData,
                     noticeList,
                     categoryData,
-                    map_json,
+                    // map_json,
                     acLedger: auditConst.ledger,
                     acStage: auditConst.stage,
                     acChange: auditConst.flow,
@@ -118,7 +118,7 @@ module.exports = app => {
                 const responseData = { err: 0, msg: '', data: {} };
                 // const tenderidList = [];
                 // const noticeList = await ctx.service.noticePush.getNoticeByDataCollect(ctx.session.sessionProject.id, tenderidList);
-                const dcTenders = await ctx.service.datacollectTender.getList(ctx.session.sessionProject.id);
+                const dcTenders = await ctx.service.datacollectTender.getList(ctx.session.sessionProject.id, ctx.subProject.id);
                 const noTids = ctx.app._.map(dcTenders, 'tid');
                 let tenderList = await ctx.service.tender.getList('', null, 1);
                 // let tenderList = await this.ctx.service.tender.getBuildList('', null, 1);

+ 23 - 44
app/controller/sub_proj_setting_controller.js

@@ -418,19 +418,18 @@ module.exports = app => {
                     throw '该功能已关闭或无法查看';
                 }
                 ctx.subProject.data_collect_pages = ctx.subProject.data_collect_pages ? ctx.subProject.data_collect_pages.split(',') : [];
-                ctx.session.sessionProject.dataCollect = ctx.subProject.data_collect;
                 if (ctx.session.sessionUser.is_admin === 0) throw '没有访问权限';
-                const dataCollectAudits = await ctx.service.datacollectAudit.getList(ctx.subProject.project_id);
+                const dataCollectAudits = await ctx.service.subProjPermission.getDatacollectAuditList(ctx.subProject.id);
                 // 获取所有项目参与者
                 const accountList = await ctx.service.projectAccount.getAllSubProjectAccount(ctx.subProject);
                 const unitList = await ctx.service.constructionUnit.getAllDataByCondition({where: {pid: ctx.session.sessionProject.id}});
                 const accountGroupList = unitList.map(item => {
                     const groupList = accountList.filter(item1 => item1.company === item.name);
                     return {groupName: item.name, companyId: item.id, groupList};
-                });
+                }).filter(x => { return x.groupList.length > 0; });
                 const categoryData = await ctx.service.category.getAllCategory(ctx.subProject);
                 const tenders = await ctx.service.tender.getList('', null, 1);
-                const dcTenders = await ctx.service.datacollectTender.getList(ctx.subProject.project_id);
+                const dcTenders = await ctx.service.datacollectTender.getList(ctx.subProject.project_id, ctx.subProject.id);
                 const is_dz2 = ['P0505', 'P0506', 'P1201', 'P1202', 'GY18Y', 'GYJJ1', 'P1103'].indexOf(ctx.session.sessionProject.code) !== -1 ? 6 : false;
                 const renderData = {
                     dataCollectAudits,
@@ -441,6 +440,7 @@ module.exports = app => {
                     dcTenders,
                     is_dz1: ['P0505', 'MI22U'].indexOf(ctx.session.sessionProject.code) !== -1 ? 5 : false,
                     is_dz2,
+                    selfCategoryLevel: await ctx.service.projectAccount.getSelfCategoryLevel(this.ctx.session.sessionUser.accountId),
                 };
                 if (is_dz2) {
                     const projectData = await this.ctx.service.project.getDataById(ctx.subProject.project_id);
@@ -467,6 +467,8 @@ module.exports = app => {
                 if (!data.type) {
                     throw '提交数据错误';
                 }
+                let uids;
+                let auditList = [];
                 switch (data.type) {
                     case 'show':
                         responseData.data = await ctx.service.subProject.update({
@@ -477,58 +479,35 @@ module.exports = app => {
                         ctx.subProject.showDataCollect = data.data_collect ? 1 : 0;
                         break;
                     case 'add-audit':
+                        uids = data.id instanceof Array ? data.id : [data.id];
                         // 判断该用户是否已加入到表中,已加入则提示无需添加
-                        const auditInfo = await ctx.service.datacollectAudit.getDataByCondition({
-                            pid: ctx.subProject.project_id,
-                            uid: data.id
-                        });
-                        if (auditInfo) {
-                            throw '该用户已存在权限中,无需重复添加';
+                        auditList = await ctx.service.subProjPermission.getDatacollectAuditList(ctx.subProject.id, uids);
+                        const addAidList = ctx.helper._.difference(uids, ctx.helper._.map(auditList, 'uid'));
+                        if (addAidList.length === 0) {
+                            throw '用户已存在权限中,无需重复添加';
                         }
                         await ctx.service.datacollectAudit.saveAudit(ctx.subProject.project_id, data.id);
-                        responseData.data = await ctx.service.datacollectAudit.getList(ctx.subProject.project_id);
-                        break;
-                    case 'add-company':
-                        const companyInfo = await ctx.service.datacollectAudit.getCompanyInfo(ctx.subProject.project_id, data.id);
-                        if (companyInfo) {
-                            throw '该单位已存在权限中,无需重复添加';
-                        }
-                        await ctx.service.datacollectAudit.saveCompany(ctx.subProject.project_id, data.id);
-                        responseData.data = await ctx.service.datacollectAudit.getList(ctx.subProject.project_id);
+                        await ctx.service.subProjPermission.saveDatacollectPermissionAudits(ctx.subProject.id, addAidList, 'add');
+                        responseData.data = await ctx.service.subProjPermission.getDatacollectAuditList(ctx.subProject.id);
                         break;
                     case 'del-audit':
-                        const auditInfo2 = await ctx.service.datacollectAudit.getDataById(data.id);
-                        if (!auditInfo2) {
+                        uids = data.id instanceof Array ? data.id : [data.id];
+                        auditList = await ctx.service.subProjPermission.getDatacollectAuditList(ctx.subProject.id, uids);
+                        if (auditList.length !== uids.length) {
                             throw '该用户已不存在权限中,移除失败';
                         }
-                        await ctx.service.datacollectAudit.delAudit(data.id);
-                        responseData.data = await ctx.service.datacollectAudit.getList(ctx.subProject.project_id);
-                        break;
-                    case 'del-group':
-                        const groupInfo3 = await ctx.service.datacollectAudit.getDataById(data.id);
-                        if (!groupInfo3) {
-                            throw '该单位已不存在权限中,移除失败';
-                        }
-                        await ctx.service.datacollectAudit.delAudit(data.id);
-                        responseData.data = await ctx.service.datacollectAudit.getList(ctx.subProject.project_id);
-                        break;
-                    case 'del-company':
-                        const companyInfo2 = await ctx.service.datacollectAudit.getDataById(data.id);
-                        if (!companyInfo2) {
-                            throw '该单位已不存在权限中,移除失败';
-                        }
-                        await ctx.service.datacollectAudit.delAudit(data.id);
-                        responseData.data = await ctx.service.datacollectAudit.getList(ctx.subProject.project_id);
+                        await ctx.service.subProjPermission.saveDatacollectPermissionAudits(ctx.subProject.id, uids, 'del');
+                        responseData.data = await ctx.service.subProjPermission.getDatacollectAuditList(ctx.subProject.id);
                         break;
                     case 'tender':
-                        if (ctx.session.sessionProject.page_show.addDataCollect !== parseInt(data.add_datacollect)) {
-                            ctx.session.sessionProject.page_show.addDataCollect = parseInt(data.add_datacollect);
-                            await ctx.service.project.updatePageshow(ctx.subProject.project_id);
+                        if (ctx.subProject.page_show.addDataCollect !== parseInt(data.add_datacollect)) {
+                            ctx.subProject.page_show.addDataCollect = parseInt(data.add_datacollect);
+                            await ctx.service.subProject.updatePageshow(ctx.subProject.id);
                         }
                         await ctx.service.datacollectTender.updateList(ctx.subProject.project_id, data.tids);
                         responseData.data = {
-                            dcTenders: await ctx.service.datacollectTender.getList(ctx.subProject.project_id),
-                            addDatacollect: ctx.session.sessionProject.page_show.addDataCollect,
+                            dcTenders: await ctx.service.datacollectTender.getList(ctx.subProject.project_id, ctx.subProject.id),
+                            addDatacollect: ctx.subProject.page_show.addDataCollect,
                         };
                         break;
                     case 'save-dp06':

+ 0 - 1
app/middleware/session_auth.js

@@ -35,7 +35,6 @@ module.exports = options => {
             const projectData = yield this.service.project.getDataById(this.session.sessionProject.id);
             this.session.sessionProject.page_show = yield this.service.projectAccount.getPageShow(projectData.page_show);
             this.session.sessionProject.custom = projectData.custom;
-            this.session.sessionProject.dataCollect = projectData.data_collect;
             this.session.sessionProject.customType = projectData.customType;
             this.session.sessionProject.funSet = projectData.fun_set ? JSON.parse(projectData.fun_set) : null;
 

+ 14 - 42
app/middleware/sub_project_check.js

@@ -59,48 +59,20 @@ module.exports = options => {
             }
 
             // 判断是否有权限查看决策大屏
-            // const accountInfo = yield this.service.projectAccount.getDataById(this.session.sessionUser.accountId);
-            // const projectData = yield this.service.project.getDataById(this.session.sessionProject.id);
-            // let showDataCollect = 0;
-            // if (projectData.data_collect && this.subProject.page_show.openDataCollect) {
-            //     if (this.session.sessionUser.is_admin) {
-            //         showDataCollect = 1;
-            //     } else {
-            //         const auditInfo = yield this.service.datacollectAudit.getDataByCondition({ pid: projectData.id, uid: accountInfo.id });
-            //         if (auditInfo) {
-            //             showDataCollect = 1;
-            //         } else {
-            //             let companyInfo = null;
-            //             if (accountInfo.company_id) {
-            //                 companyInfo = yield this.service.datacollectAudit.getDataByCondition({
-            //                     pid: projectData.id,
-            //                     company_id: accountInfo.company_id,
-            //                 });
-            //             } else {
-            //                 const cuInfo = yield this.service.constructionUnit.getDataByCondition({
-            //                     pid: projectData.id,
-            //                     name: accountInfo.company,
-            //                 });
-            //                 if (cuInfo) {
-            //                     companyInfo = yield this.service.datacollectAudit.getDataByCondition({
-            //                         pid: projectData.id,
-            //                         company_id: cuInfo.id,
-            //                     });
-            //                     yield this.service.projectAccount.update({ company_id: cuInfo.id }, { id: accountInfo.id });
-            //                 }
-            //             }
-            //             if (companyInfo) {
-            //                 showDataCollect = 1;
-            //             } else {
-            //                 const grounpInfo = yield this.service.datacollectAudit.getGroupInfo(projectData.id, accountInfo.account_group);
-            //                 if (grounpInfo) {
-            //                     showDataCollect = 1;
-            //                 }
-            //             }
-            //         }
-            //     }
-            // }
-            // this.session.sessionProject.showDataCollect = showDataCollect;
+            const accountInfo = yield this.service.projectAccount.getDataById(this.session.sessionUser.accountId);
+            const projectData = yield this.service.project.getDataById(this.session.sessionProject.id);
+            let showDataCollect = 0;
+            if (projectData.data_collect && this.subProject.page_show.openDataCollect) {
+                if (this.session.sessionUser.is_admin) {
+                    showDataCollect = 1;
+                } else {
+                    const auditInfo = yield this.service.subProjPermission.getDataByCondition({ spid: this.subProject.id, uid: accountInfo.id });
+                    if (auditInfo && auditInfo.datacollect_permission === '1') {
+                        showDataCollect = 1;
+                    }
+                }
+            }
+            this.subProject.showDataCollect = showDataCollect;
             // 判断是否有权限查看支付审批
             let showPayment = 0;
             if (this.session.sessionUser.is_admin) {

+ 25 - 5
app/public/js/setting_datacollect_tender.js

@@ -6,6 +6,7 @@
  * @date 2020/11/13
  * @version
  */
+let selfLevelSort;
 const tenderTree = [];
 let parentId = 0;
 // 查询方法
@@ -17,15 +18,29 @@ function findNode (key, value, arr) {
     }
 }
 // 分类数据排序
+// 分类数据排序
+function loadSelfCategoryLevel(selfLevel){
+    selfLevelSort = selfLevel ? selfLevel.split(',') : [];
+    selfLevelSort = selfLevelSort.filter(x => {
+        return category.find(c => { return c.id + '' === x; });
+    });
+    category.forEach(cate => {
+        cate.is_self = selfLevelSort.length > 0;
+        cate.self_level = selfLevelSort.indexOf(cate.id + '') + 1;
+    });
+}
 function sortCategory() {
+    category.forEach(cate => {
+        cate.show_level = cate.is_self ? cate.self_level : cate.level;
+    });
     category.sort(function (a, b) {
-        return a.level ? (b.level ? a.level - b.level : -1) : a.id - b.id;
+        return a.show_level ? (b.show_level ? a.show_level - b.show_level : -1) : a.id - b.id;
     });
 }
 // 初始化TenderTree数据
 function initTenderTree () {
     const levelCategory = category.filter(function (c) {
-        return c.level && c.level > 0;
+        return c.show_level && c.show_level > 0;
     });
     function findCategoryNode(cid, value, array) {
         for (const a of array) {
@@ -45,7 +60,7 @@ function initTenderTree () {
                 vid: value,
                 name: cateValue.value,
                 children: [],
-                level: i ? i : category.level,
+                level: i ? i : category.show_level,
                 sort_id: ++parentId,
                 sort: cateValue.sort,
             };
@@ -63,7 +78,11 @@ function initTenderTree () {
                 if (index === 0 && tender.category) {
                     for (const [i,c] of tender.category.entries()) {
                         const cate = findNode('id', c.cid, category);
-                        tenderCategory = getCategoryNode(cate, c.value, tenderCategory, i+1);
+                        if (cate) {
+                            tenderCategory = getCategoryNode(cate, c.value, tenderCategory, i+1);
+                        } else {
+                            console.log(tender.name, c.cid, c.value);
+                        }
                     }
                 }
                 return tenderCategory;
@@ -140,6 +159,7 @@ function getTenderTreeHtml () {
     }
 }
 $(document).ready(function () {
+    loadSelfCategoryLevel(selfCategoryLevel);
     sortCategory();
     initTenderTree();
     $('#tenderBtn').click(() => {
@@ -172,7 +192,7 @@ $(document).ready(function () {
             is_collect_update = false;
         }
         if (is_list_update || is_collect_update) {
-            postData('/setting/datacollect/save', { type: 'tender', add_datacollect: parseInt(add_datacollect), tids: noTidList }, function (result) {
+            postData('/sp/' + spid + '/setting/datacollect/save', { type: 'tender', add_datacollect: parseInt(add_datacollect), tids: noTidList }, function (result) {
                 addDataCollect = result.addDataCollect;
                 dcTenders = result.dcTenders;
                 toastr.success('修改成功');

+ 5 - 3
app/service/datacollect_tender.js

@@ -54,15 +54,17 @@ module.exports = app => {
         //     return await this.db.delete(this.tableName, { id });
         // }
 
-        async getList(pid) {
-            return await this.db.select(this.tableName, { where: { pid } });
+        async getList(pid, spid = this.ctx.subProject.id || '') {
+            const sql = 'SELECT dt.* FROM ?? AS dt LEFT JOIN ?? AS t ON dt.tid = t.id WHERE dt.pid = ? AND t.spid = ?';
+            const sqlParam = [this.tableName, this.ctx.service.tender.tableName, pid, spid];
+            return await this.db.query(sql, sqlParam);
         }
 
         async updateList(pid, tids) {
             // 初始化事务
             const transaction = await this.db.beginTransaction();
             try {
-                const oldList = await this.getList(pid);
+                const oldList = await this.getList(pid, this.ctx.subProject.id);
                 const oldIds = this._.map(oldList, 'tid');
                 const insertTids = this._.difference(tids, oldIds);
                 const delTids = this._.difference(oldIds, tids);

+ 35 - 2
app/service/sub_proj_permission.js

@@ -394,7 +394,7 @@ module.exports = app => {
         };
 
         async getContractAuditList(spid, uid = null) {
-            const uidSql = uid ? 'AND uid in (' + uid.join(',') + ')' : '';
+            const uidSql = uid ? ' AND uid in (' + uid.join(',') + ')' : '';
             const sql = `SELECT * FROM ?? WHERE spid = ? AND contract_permission <> ''` + uidSql;
             const sqlParams = [this.tableName, spid];
             const result = await this.db.query(sql, sqlParams);
@@ -460,7 +460,7 @@ module.exports = app => {
         }
 
         async getPaymentAuditList(spid, uid = null) {
-            const uidSql = uid ? 'AND uid in (' + uid.join(',') + ')' : '';
+            const uidSql = uid ? ' AND uid in (' + uid.join(',') + ')' : '';
             const sql = `SELECT * FROM ?? WHERE spid = ? AND payment_permission <> ''` + uidSql;
             const sqlParams = [this.tableName, spid];
             const result = await this.db.query(sql, sqlParams);
@@ -526,6 +526,39 @@ module.exports = app => {
             if (oldPermission.view_all) permissionArr.push(3);
             return permissionArr.join(',');
         }
+
+        async getDatacollectAuditList(spid, uid = null) {
+            const uidSql = uid ? ' AND uid in (' + uid.join(',') + ')' : '';
+            const sql = `SELECT * FROM ?? WHERE spid = ? AND datacollect_permission <> ''` + uidSql;
+            const sqlParams = [this.tableName, spid];
+            const result = await this.db.query(sql, sqlParams);
+            const list = [];
+            for (const r of result) {
+                const accountInfo = await this.ctx.service.projectAccount.getDataById(r.uid);
+                list.push({
+                    id: r.id,
+                    name: accountInfo.name,
+                    company: accountInfo.company,
+                    company_id: accountInfo.company_id,
+                    uid: r.uid,
+                });
+            }
+            return list;
+        }
+
+        async saveDatacollectPermissionAudits(spid, uids, operation = 'add', transaction= null) {
+            const updateArr = [];
+            const spAudits = await this.getAllDataByCondition({ where: { spid: spid, uid: uids } });
+            for (const a of spAudits) {
+                if (operation === 'add' && a.datacollect_permission !== '') continue;
+                updateArr.push({
+                    id: a.id,
+                    datacollect_permission: operation === 'add' ? '1' : (operation === 'del' ? '' : a.datacollect_permission),
+                });
+            }
+            if (updateArr.length > 0) transaction ? await transaction.updateRows(this.tableName, updateArr) : await this.db.updateRows(this.tableName, updateArr);
+        }
+
     }
 
     return subProjPermission;

+ 14 - 44
app/view/datacollect/index.ejs

@@ -40,9 +40,9 @@
             <div>
                 <a href="javascript:void(0)"  title="全屏显示" id="showFull" class="text-white"><i class="fa fa-arrows-alt"></i></a>
                 <div class="btn-group">
-                    <button type="button" class="btn btn-sm btn-outline-dark text-white dropdown-toggle" data-toggle="dropdown" id="zhankai">决策大屏<span><%- ctx.session.sessionProject.dataCollect %></span></button>
+                    <button type="button" class="btn btn-sm btn-outline-dark text-white dropdown-toggle" data-toggle="dropdown" id="zhankai">决策大屏<span><%- ctx.subProject.data_collect %></span></button>
                     <div class="dropdown-menu" aria-labelledby="zhankai">
-                        <% for (const i of projectData.data_collect_pages) { %>
+                        <% for (const i of ctx.subProject.data_collect_pages) { %>
                         <% if (i === '6') { %>
                             <a class="dropdown-item" href="/sp/<%- ctx.subProject.id %>/datacollect/index/<%- i %>">决策大屏<%- i %></a>
                         <% } else { %>
@@ -65,7 +65,7 @@
             </div>
         </div>
         <div class="c-body" style="background:#2c3237 !important">
-            <div class="flex-content" data-content="1" <% if (ctx.session.sessionProject.dataCollect !== 1 && ctx.session.sessionProject.dataCollect !== 3) { %>style="display: none"<% } %>>
+            <div class="flex-content" data-content="1" <% if (ctx.subProject.data_collect !== 1 && ctx.subProject.data_collect !== 3) { %>style="display: none"<% } %>>
                 <div class="row">
                     <div class="col-3 pr-0">
                         <div class="left-content">
@@ -140,15 +140,15 @@
                             <div class="center-chart-content">
                                 <div class="center-di">
                                     <div class="card bg-dark height-100">
-                                        <div class="jlchart" data-chart-num="1" id="jlchart" style="height: 100%; width: 100%; <% if (ctx.session.sessionProject.dataCollect === 3) { %>display:none;<% } %>"></div>
-                                        <div class="di-content mb-2" id="map1" style="background: #343A40; width: 100%; <% if (ctx.session.sessionProject.dataCollect === 1) { %>display:none;<% } %>">
+                                        <div class="jlchart" data-chart-num="1" id="jlchart" style="height: 100%; width: 100%; <% if (ctx.subProject.data_collect === 3) { %>display:none;<% } %>"></div>
+                                        <div class="di-content mb-2" id="map1" style="background: #343A40; width: 100%; <% if (ctx.subProject.data_collect === 1) { %>display:none;<% } %>">
                                         </div>
                                     </div>
                                 </div>
                                 <div class="center-chart">
                                     <div class="card height-100 bg-dark mt-2">
-                                        <div class="jlchart" data-chart-num="2" id="jlchart" style="height: 100%; width: 100%; <% if (ctx.session.sessionProject.dataCollect === 1) { %>display:none;<% } %>"></div>
-                                        <div class="di-content mb-2" <% if (ctx.session.sessionProject.dataCollect === 3) { %>style="display:none;"<% } %>>
+                                        <div class="jlchart" data-chart-num="2" id="jlchart" style="height: 100%; width: 100%; <% if (ctx.subProject.data_collect === 1) { %>display:none;<% } %>"></div>
+                                        <div class="di-content mb-2" <% if (ctx.subProject.data_collect === 3) { %>style="display:none;"<% } %>>
                                             <div class="jldbchart" data-chart-num="1" id="jldbchart" style="height: 100%; width: 100%;"></div>
                                         </div>
                                     </div>
@@ -336,7 +336,7 @@
                     </div>
                 </div>
             </div>
-            <div class="flex-content" data-content="2" <% if (ctx.session.sessionProject.dataCollect !== 2 && ctx.session.sessionProject.dataCollect !== 4) { %>style="display: none"<% } %>>
+            <div class="flex-content" data-content="2" <% if (ctx.subProject.data_collect !== 2 && ctx.subProject.data_collect !== 4) { %>style="display: none"<% } %>>
                 <div class="mx-3">
                     <div class="row">
                         <div class="col-6 pr-1">
@@ -443,8 +443,8 @@
                                 <div class="right-big-chart-content mr-3">
                                     <div class="height-60 mt-2">
                                         <div class="card height-100 bg-dark">
-                                            <div class="jldbchart" data-chart-num="2" id="jldbchart" style="height: 100%; width: 100%; <% if (ctx.session.sessionProject.dataCollect === 4) { %>display:none;<% } %>"></div>
-                                            <div class="di-content mb-2" id="map2" style="height: 100%; width: 100%; <% if (ctx.session.sessionProject.dataCollect === 2) { %>display:none;<% } %>"></div>
+                                            <div class="jldbchart" data-chart-num="2" id="jldbchart" style="height: 100%; width: 100%; <% if (ctx.subProject.data_collect === 4) { %>display:none;<% } %>"></div>
+                                            <div class="di-content mb-2" id="map2" style="height: 100%; width: 100%; <% if (ctx.subProject.data_collect === 2) { %>display:none;<% } %>"></div>
                                         </div>
                                     </div>
                                     <div class="height-36 mt-2">
@@ -603,8 +603,8 @@
                     </div>
                 </div>
             </div>
-            <% if (ctx.helper._.includes(projectData.data_collect_pages, '5')) { %>
-            <div class="flex-content" data-content="5" <% if (ctx.session.sessionProject.dataCollect !== 5) { %>style="display: none"<% } %>>
+            <% if (ctx.helper._.includes(ctx.subProject.data_collect_pages, '5')) { %>
+            <div class="flex-content" data-content="5" <% if (ctx.subProject.data_collect !== 5) { %>style="display: none"<% } %>>
                 <div class="row">
                     <div class="col-3 pr-0">
                         <div class="left-content">
@@ -838,7 +838,7 @@
 <script src="/public/js/datacollect_scroll.js"></script>
 <script type="text/javascript">  autoFlashHeight();</script>
 <script type="text/javascript">
-    const is_dz = <%- ctx.helper._.includes(projectData.data_collect_pages, '5') %>;
+    const is_dz = <%- ctx.helper._.includes(ctx.subProject.data_collect_pages, '5') %>;
     // 分类金额饼图表
     var chart1 = document.getElementsByClassName('jechart');
     // var myChart1 = echarts.init(document.getElementById('jechart'), 'dark');
@@ -1431,27 +1431,10 @@
         }
     });
 </script>
-<!--<script src="/public/js/map/turf.min.js"></script>-->
-<!--<script src="/public/js/map/gcoord.js"></script>-->
-<!--<script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=C3hLZAjuWTaCdwnwoYY83APrwlPEj4v7"></script>-->
 <script>
-    // let map1, map2;
-    // function loadScript() {
-    //     var script = document.createElement("script");
-    //     script.src = "https://api.map.baidu.com/api?v=1.0&type=webgl&ak=C3hLZAjuWTaCdwnwoYY83APrwlPEj4v7&callback=initialize";
-    //     document.body.appendChild(script);
-    // }
-    // window.onload = loadScript;
-    // const map1 = new BMapGL.Map("map1");
-    // const map2 = new BMapGL.Map("map2");
-    // map1.enableScrollWheelZoom(true);
-    // map1.setMapStyleV2({styleId: '20d4aea41cf71387395f2dc835f1c4b6'});
-    // map2.enableScrollWheelZoom(true);
-    // map2.setMapStyleV2({styleId: '20d4aea41cf71387395f2dc835f1c4b6'});
 
-    const originDataCollect = parseInt('<%- ctx.session.sessionProject.dataCollect %>');
+    const originDataCollect = parseInt('<%- ctx.subProject.data_collect %>');
     const category = JSON.parse(unescape('<%- escape(JSON.stringify(categoryData)) %>'));
-    <!--const mapJson = JSON.parse(unescape('<%- escape(JSON.stringify(map_json)) %>'));-->
     let tenders = '';
     // let noticeList = '';
     $(function () {
@@ -1837,19 +1820,6 @@
             if (is_dz) {
                 $('#tableId2').css({'margin-top': 0});
             }
-
-            // 地图设置
-            // const polyLineList = [];
-            // const centerPoint = { lng: mapJson.lng, lat: mapJson.lat };
-            // let level = mapJson.level;
-            // // 初始化地图,设置中心点坐标和地图级别
-            // const point = new BMapGL.Point(centerPoint.lng, centerPoint.lat);
-            // // 创建地图实例
-            // map1.centerAndZoom(point, level);
-            // // 创建地图实例
-            // map2.centerAndZoom(point, level);
-            // map1.reset();
-            // map2.reset();
         }
 
         $('.change-collect').on('click', function () {

+ 20 - 16
app/view/sp_setting/datacollect.ejs

@@ -13,31 +13,31 @@
             <div class="sjs-height-0">
                 <nav class="nav nav-tabs m-3" id="tablist" role="tablist">
                     <% for (let i = 1; i <= 2; i++) { %>
-                        <a class="nav-item nav-link<% if ((ctx.session.sessionProject.dataCollect === 0 && i === 1) || ctx.session.sessionProject.dataCollect === i) { %> active<% } %>" data-datacollect="<%- i %>" data-toggle="tab" href="#shujudaping-<%- i %>" role="tab">
-                            决策大屏<%- ctx.helper.transFormToChinese(i) %><% if (ctx.helper._.indexOf(ctx.subProject.data_collect_pages, i.toString()) !== -1) { %>(已开启<% if (i === ctx.session.sessionProject.dataCollect) { %>、默认<% } %>)<% } %></a>
+                        <a class="nav-item nav-link<% if ((ctx.subProject.data_collect === 0 && i === 1) || ctx.subProject.data_collect === i) { %> active<% } %>" data-datacollect="<%- i %>" data-toggle="tab" href="#shujudaping-<%- i %>" role="tab">
+                            决策大屏<%- ctx.helper.transFormToChinese(i) %><% if (ctx.helper._.indexOf(ctx.subProject.data_collect_pages, i.toString()) !== -1) { %>(已开启<% if (i === ctx.subProject.data_collect) { %>、默认<% } %>)<% } %></a>
                     <% } %>
                     <% if (is_dz1) { %>
-                        <a class="nav-item nav-link<% if (ctx.session.sessionProject.dataCollect === is_dz1) { %> active<% } %>" data-datacollect="<%- is_dz1 %>" data-toggle="tab" href="#shujudaping-<%- is_dz1 %>" role="tab">
-                            决策大屏<%- ctx.helper.transFormToChinese(is_dz1) %><% if (ctx.helper._.indexOf(ctx.subProject.data_collect_pages, is_dz1.toString()) !== -1) { %>(已开启<% if (ctx.session.sessionProject.dataCollect === is_dz1) { %>、默认<% } %>)<% } %></a>
+                        <a class="nav-item nav-link<% if (ctx.subProject.data_collect === is_dz1) { %> active<% } %>" data-datacollect="<%- is_dz1 %>" data-toggle="tab" href="#shujudaping-<%- is_dz1 %>" role="tab">
+                            决策大屏<%- ctx.helper.transFormToChinese(is_dz1) %><% if (ctx.helper._.indexOf(ctx.subProject.data_collect_pages, is_dz1.toString()) !== -1) { %>(已开启<% if (ctx.subProject.data_collect === is_dz1) { %>、默认<% } %>)<% } %></a>
                     <% } %>
                     <% if (is_dz2) { %>
-                        <a class="nav-item nav-link<% if (ctx.session.sessionProject.dataCollect === is_dz2) { %> active<% } %>" data-datacollect="<%- is_dz2 %>" data-toggle="tab" href="#shujudaping-<%- is_dz2 %>" role="tab">
-                            决策大屏<%- ctx.helper.transFormToChinese(is_dz2) %><% if (ctx.helper._.indexOf(ctx.subProject.data_collect_pages, is_dz2.toString()) !== -1) { %>(已开启<% if (ctx.session.sessionProject.dataCollect === is_dz2) { %>、默认<% } %>)<% } %></a>
+                        <a class="nav-item nav-link<% if (ctx.subProject.data_collect === is_dz2) { %> active<% } %>" data-datacollect="<%- is_dz2 %>" data-toggle="tab" href="#shujudaping-<%- is_dz2 %>" role="tab">
+                            决策大屏<%- ctx.helper.transFormToChinese(is_dz2) %><% if (ctx.helper._.indexOf(ctx.subProject.data_collect_pages, is_dz2.toString()) !== -1) { %>(已开启<% if (ctx.subProject.data_collect === is_dz2) { %>、默认<% } %>)<% } %></a>
                     <% } %>
                     <div class="ml-auto">
                         <!--<div class="form-check form-check-inline">-->
-                            <!--<input class="form-check-input" type="checkbox" id="show-datacollect" value="option1" <% if (ctx.session.sessionProject.dataCollect) { %>checked<% } %>>-->
+                            <!--<input class="form-check-input" type="checkbox" id="show-datacollect" value="option1" <% if (ctx.subProject.data_collect) { %>checked<% } %>>-->
                             <!--<label class="form-check-label" for="show-datacollect">数据大屏显示</label>-->
                         <!--</div>-->
                         <div class="d-inline-block form-group form-check mt-2">
                             <div class="custom-control custom-switch">
-                                <input type="checkbox" class="custom-control-input" id="show_datacollect" <% if (ctx.session.sessionProject.dataCollect !== 0) { %>checked<% } %>>
+                                <input type="checkbox" class="custom-control-input" id="show_datacollect" <% if (ctx.subProject.data_collect !== 0) { %>checked<% } %>>
                                 <label class="custom-control-label" for="show_datacollect">开启<i class="fa fa-question-circle text-primary" data-placement="bottom" data-toggle="tooltip" data-original-title="开启后,在决策大屏模块显示"></i></label>
                             </div>
                         </div>
                         <div class="d-inline-block form-group form-check mt-2">
                             <div class="custom-control custom-switch">
-                                <input type="checkbox" class="custom-control-input" id="default_datacollect" <% if (ctx.session.sessionProject.dataCollect !== 0) { %>checked<% } %>>
+                                <input type="checkbox" class="custom-control-input" id="default_datacollect" <% if (ctx.subProject.data_collect !== 0) { %>checked<% } %>>
                                 <label class="custom-control-label" for="default_datacollect">默认<i class="fa fa-question-circle text-primary" data-placement="bottom" data-toggle="tooltip" data-original-title="决策大屏第一个显示"></i></label>
                             </div>
                         </div>
@@ -45,15 +45,15 @@
                 </nav>
                 <div class="tab-content m-3">
                     <% for (let i = 1; i <= 2; i++) { %>
-                        <div id="shujudaping-<%- i %>" class="tab-pane<% if ((ctx.session.sessionProject.dataCollect === 0 && i === 1) || ctx.session.sessionProject.dataCollect === i) { %> active<% } %>"><img src="/public/images/juecedaping0<%- i %>.png" width="100%"></div>
+                        <div id="shujudaping-<%- i %>" class="tab-pane<% if ((ctx.subProject.data_collect === 0 && i === 1) || ctx.subProject.data_collect === i) { %> active<% } %>"><img src="/public/images/juecedaping0<%- i %>.png" width="100%"></div>
                     <% } %>
                     <% if (is_dz1) { %>
-                        <div id="shujudaping-<%- is_dz1 %>" class="tab-pane<% if (ctx.session.sessionProject.dataCollect === is_dz1) { %> active<% } %>">
+                        <div id="shujudaping-<%- is_dz1 %>" class="tab-pane<% if (ctx.subProject.data_collect === is_dz1) { %> active<% } %>">
                             山东济邹项目定制(MI22U)<img src="/public/images/juecedaping0<%- is_dz1 %>.png" width="100%">
                         </div>
                     <% } %>
                     <% if (is_dz2) { %>
-                        <div id="shujudaping-<%- is_dz2 %>" class="tab-pane<% if (ctx.session.sessionProject.dataCollect === is_dz2) { %> active<% } %>">
+                        <div id="shujudaping-<%- is_dz2 %>" class="tab-pane<% if (ctx.subProject.data_collect === is_dz2) { %> active<% } %>">
                             <span>四川广元路桥集团计量内控管理云平台定制(GY18Y)</span><a class="nav-link" style="display: inline-block;" data-toggle="modal" href="#dpsix-set" data-target="#dpsix-set" title="决策大屏六设置"><i class="fa fa-cog"></i></a><img src="/public/images/juecedaping0<%- is_dz2 %>.png" width="100%">
                         </div>
                     <% } %>
@@ -64,15 +64,19 @@
 </div>
 <script src="/public/js/setting_datacollect_tender.js"></script>
 <script src="/public/js/PinYinOrder.bundle.js"></script>
+<script src="/public/js/shares/show_level.js"></script>
 <script src="/public/js/tender_showhide.js"></script>
 <script src="/public/js/shares/tender_list_order.js"></script>
+
 <script>
     let dataCollectPages = JSON.parse(unescape('<%- escape(JSON.stringify(ctx.subProject.data_collect_pages)) %>'));
-    let dataCollect = parseInt('<%- ctx.session.sessionProject.dataCollect %>');
+    let dataCollect = parseInt('<%- ctx.subProject.data_collect %>');
     const category = JSON.parse(unescape('<%- escape(JSON.stringify(categoryData)) %>'));
+    const selfCategoryLevel = '<%- (selfCategoryLevel || '') %>';
+    console.log(category);
     const tenders = JSON.parse(unescape('<%- escape(JSON.stringify(tenders)) %>'));
     let dcTenders = JSON.parse(unescape('<%- escape(JSON.stringify(dcTenders)) %>'));
-    let addDataCollect = JSON.parse(unescape('<%- escape(JSON.stringify(ctx.session.sessionProject.page_show.addDataCollect)) %>'));
+    let addDataCollect = JSON.parse(unescape('<%- escape(JSON.stringify(ctx.subProject.page_show.addDataCollect)) %>'));
     let is_dz1 = <% if (is_dz1) { %>parseInt('<%- is_dz1 %>');<% } else { %>false;<% } %>
     let is_dz2 = <% if (is_dz2) { %>parseInt('<%- is_dz2 %>');<% } else { %>false;<% } %>
     $(function () {
@@ -100,7 +104,7 @@
                 }
                 $('#default_datacollect').prop('checked', false);
             }
-            postData('/setting/datacollect/save', { type: 'show', data_collect_pages: dataCollectPages, data_collect: dataCollect }, function (result) {
+            postData('/sp/' + spid + '/setting/datacollect/save', { type: 'show', data_collect_pages: dataCollectPages, data_collect: dataCollect }, function (result) {
                 updateTab();
             })
         });
@@ -124,7 +128,7 @@
                 }
             }
             updateTab();
-            postData('/setting/datacollect/save', { type: 'show', data_collect_pages: dataCollectPages, data_collect: dataCollect }, function (result) {
+            postData('/sp/' + spid + '/setting/datacollect/save', { type: 'show', data_collect_pages: dataCollectPages, data_collect: dataCollect }, function (result) {
                 updateTab();
             })
         })

+ 33 - 27
app/view/sp_setting/datacollect_modal.ejs

@@ -10,13 +10,13 @@
                     <span>新增的标段是否默认展示到决策大屏:</span>
                     <a class="btn btn-sm btn-light">
                         <div class="custom-control custom-checkbox">
-                            <input type="radio" name="add_datacollect" class="custom-control-input" value="1" <% if (ctx.session.sessionProject.page_show.addDataCollect === 1) { %>checked<% } %> id="yes_datacollect">
+                            <input type="radio" name="add_datacollect" class="custom-control-input" value="1" <% if (ctx.subProject.page_show.addDataCollect === 1) { %>checked<% } %> id="yes_datacollect">
                             <label class="custom-control-label text-primary" for="yes_datacollect">是</label>
                         </div>
                     </a>
                     <a class="btn btn-sm btn-light">
                         <div class="custom-control custom-checkbox">
-                            <input type="radio" name="add_datacollect" class="custom-control-input" value="0" <% if (ctx.session.sessionProject.page_show.addDataCollect === 0) { %>checked<% } %> id="no_datacollect">
+                            <input type="radio" name="add_datacollect" class="custom-control-input" value="0" <% if (ctx.subProject.page_show.addDataCollect === 0) { %>checked<% } %> id="no_datacollect">
                             <label class="custom-control-label text-primary" for="no_datacollect">否</label>
                         </div>
                     </a>
@@ -82,7 +82,7 @@
                                     <dt><a href="javascript: void(0);" class="acc-btn" data-groupid="<%- idx %>"
                                            data-type="hide"><i class="fa fa-plus-square"></i></a> <%- group.groupName %></dt>
                                     <div class="dd-content" data-toggleid="<%- idx %>">
-                                        <dd class="border-bottom p-2 mb-0" data-companyid="<%- group.companyId %>"><p class="mb-0 d-flex"><span class="text-primary">该单位下所有组员</span></p></dd>
+                                        <dd class="border-bottom p-2 mb-0" data-groupname="<%- group.groupName %>"><p class="mb-0 d-flex"><span class="text-primary">该单位下所有组员</span></p></dd>
                                         <% group.groupList.forEach(item => { %>
                                             <% if (item.id !== ctx.session.sessionUser.accountId) { %>
                                                 <dd class="border-bottom p-2 mb-0 " data-id="<%- item.id %>">
@@ -100,12 +100,11 @@
                             <ul class="list-unstyled modal-height-500" id="audit-list" style="overflow: auto">
                                 <% for (const audit of dataCollectAudits) { %>
                                 <li class="border-bottom p-2 mb-0">
-                                    <a href="javascript:void(0)" class="text-danger pull-right" data-id="<%- audit.id %>" data-type="<% if (audit.uid) { %>audit<% } else if (audit.groupid) { %>group<% } else { %>company<% } %>">
+                                    <a href="javascript:void(0)" class="text-danger pull-right" data-id="<%- audit.uid %>" data-type="audit">
                                         <i class="fa fa-remove text-danger remove-audit"></i></a><%- audit.name %>
-                                    <small class="text-muted ml-1"><% if (audit.company_id) { %>参建单位<% } else { %>账号<% if (!audit.uid) { %>组<% } %><% } %></small>
+                                    <small class="text-muted ml-1"><%- audit.company %></small>
                                 </li>
                                 <% } %>
-                                    <!--<li class="border-bottom p-2 mb-0"><a href="" class="text-danger pull-right"><i class="fa fa-remove text-danger"></i></a>梁琪波<small class="text-muted ml-1">账号</small></li>-->
                             </ul>
                         </div>
                     </div>
@@ -207,6 +206,7 @@
             $('#cb_cate_value_select').html(cate ? cate.value.map(item => `<option value="${item.id}">${item.value}</option>`).join('') : '<option value="0">请选择值</option>');
         });
         $('#dpsix-set').on('show.bs.modal', function (e) {
+            console.log(daPing06Set);
             if (daPing06Set.sr) {
                 $('#sr_cate_select').val(daPing06Set.sr);
                 $('#sr_cate_value_select').html(category.find(item => item.id === parseInt(daPing06Set.sr)).value.map(item => `<option value="${item.id}" ${daPing06Set.sr_value === item.id ? 'selected' : ''}>${item.value}</option>`).join(''));
@@ -274,7 +274,7 @@
             daPing06Set.cb_value = parseInt($('#cb_cate_value_select').val());
             daPing06Set.cb_show = $('#cb_show_select input:checked').map((index, item) => parseInt($(item).val())).get();
             console.log(daPing06Set);
-            postData('/setting/datacollect/save', { type: 'save-dp06', daPing06Set }, function (result) {
+            postData('/sp/' + spid + '/setting/datacollect/save', { type: 'save-dp06', daPing06Set }, function (result) {
                 toastr.success('设置成功');
                 $('#dpsix-set').modal('hide');
             })
@@ -288,6 +288,7 @@
         let oldSearchVal = null
         const accountGroup = JSON.parse(unescape('<%- escape(JSON.stringify(accountGroup)) %>'));
         const accountList = JSON.parse(unescape('<%- escape(JSON.stringify(accountList)) %>'));
+        let dataCollectAudits = JSON.parse(unescape('<%- escape(JSON.stringify(dataCollectAudits)) %>'));
         const cur_uid = parseInt(<%- ctx.session.sessionUser.accountId %>);
         $('#gr-search').bind('input propertychange', function(e) {
             oldSearchVal = e.target.value
@@ -312,7 +313,7 @@
                             html += `<dt><a href="javascript: void(0);" class="acc-btn" data-groupid="${idx}" data-type="hide"><i class="fa fa-plus-square"></i>
                         </a> ${group.groupName}</dt>
                         <div class="dd-content" data-toggleid="${idx}">
-                        <dd class="border-bottom p-2 mb-0" data-companyid="${group.companyId}"><p class="mb-0 d-flex"><span class="text-primary">该单位下所有组员</span></p></dd>`
+                        <dd class="border-bottom p-2 mb-0" data-groupname="${group.groupName}"><p class="mb-0 d-flex"><span class="text-primary">该单位下所有组员</span></p></dd>`
                             group.groupList.forEach(item => {
                                 if (item.id !== cur_uid) {
                                     html += `<dd class="border-bottom p-2 mb-0 " data-id="${item.id}" >
@@ -351,31 +352,36 @@
         // 添加到成员中
         $('dl').on('click', 'dd', function () {
             const id = parseInt($(this).data('id'));
-            const compnayId = parseInt($(this).data('companyid'));
+            const groupName = $(this).data('groupname');
             if (!isNaN(id) && id !== 0) {
-                postData('/setting/datacollect/save', { type: 'add-audit', id }, function (result) {
-                    setList(result);
-                })
-            } else if (!isNaN(compnayId) && compnayId !== 0) {
-                postData('/setting/datacollect/save', { type: 'add-company', id: compnayId }, function (result) {
-                    setList(result);
+                postData('/sp/' + spid + '/setting/datacollect/save', { type: 'add-audit', id }, function (result) {
+                    dataCollectAudits = result;
+                    setList(dataCollectAudits);
                 })
+            } else if (groupName && groupName !== '') {
+                const groupAuditList = _.filter(accountList, { company: groupName });
+                const groupAidList = _.map(groupAuditList, 'id');
+                const groupDAList = _.map(dataCollectAudits, 'uid');
+                const addAidList = _.difference(groupAidList, groupDAList);
+                console.log(groupAidList, groupDAList, addAidList);
+                if (addAidList.length > 0) {
+                    postData('/sp/' + spid + '/setting/datacollect/save', { type: 'add-audit', id: addAidList }, function (result) {
+                        // toastr.success(`成功添加 位用户`);
+                        dataCollectAudits = result;
+                        setList(dataCollectAudits);
+                    })
+                } else {
+                    toastr.warning('暂无用户添加');
+                }
             }
         });
         // 删除审批人
         $('body').on('click', '#audit-list li>a', function () {
             console.log($(this).attr('data-id'), $(this).attr('data-type'));
             if ($(this).attr('data-type') === 'audit') {
-                postData('/setting/datacollect/save', { type: 'del-audit', id: $(this).attr('data-id') }, function (result) {
-                    setList(result);
-                })
-            } else if ($(this).attr('data-type') === 'group') {
-                postData('/setting/datacollect/save', { type: 'del-group', id: $(this).attr('data-id') }, function (result) {
-                    setList(result);
-                })
-            } else if ($(this).attr('data-type') === 'company') {
-                postData('/setting/datacollect/save', { type: 'del-company', id: $(this).attr('data-id') }, function (result) {
-                    setList(result);
+                postData('/sp/' + spid + '/setting/datacollect/save', { type: 'del-audit', id: $(this).attr('data-id') }, function (result) {
+                    dataCollectAudits = result;
+                    setList(dataCollectAudits);
                 })
             }
         });
@@ -383,8 +389,8 @@
         function setList(datas) {
             let list = '';
             for (const audit of datas) {
-                list += '<li class="border-bottom p-2 mb-0"><a href="javascript:void(0)" class="text-danger pull-right" data-id="'+ audit.id +'"' + ' data-type="'+ (audit.uid ? 'audit' : (audit.groupid ? 'group' : 'company')) +'">' +
-                    '<i class="fa fa-remove text-danger remove-audit"></i></a>'+ audit.name +'<small class="text-muted ml-1">'+ (audit.company_id ? '参建单位' : '账号'+ (!audit.uid ? '组' : '')) +'</small></li>';
+                list += '<li class="border-bottom p-2 mb-0"><a href="javascript:void(0)" class="text-danger pull-right" data-id="'+ audit.uid +'"' + ' data-type="audit">' +
+                    '<i class="fa fa-remove text-danger remove-audit"></i></a>'+ audit.name +'<small class="text-muted ml-1">'+ audit.company +'</small></li>';
             }
             $('#audit-list').html(list);
         }

+ 45 - 0
db_script/sub_project.js

@@ -102,6 +102,7 @@ const doComplete = async function(code) {
             for (const c of category) {
                 c.value = categoryValue.filter(x => { return x.cid === c.id; });
             }
+            const dataCollectAudits = await querySql('SELECT * FROM zh_datacollect_audit where pid = ?', [p.id]);
             for (const sp of subProj) {
                 console.log(`Copy sub_project ${sp.name}(${sp.id}) category`);
                 // 存在分类信息跳过 --- 防止脚本执行问题,需要重复执行
@@ -142,6 +143,50 @@ const doComplete = async function(code) {
                         await querySql('UPDATE zh_tender SET category = ? WHERE id = ?', [JSON.stringify(newTCateGory), t.id]);
                     }
                 }
+
+                if (dataCollectAudits.length > 0) {
+                    console.log(`Copy sub_project ${sp.name}(${sp.id}) datacollect_permission`);
+                    const updateAudits = [];
+                    const insertAudits = [];
+                    const spAudits = await querySql('SELECT * FROM zh_sub_project_permission where spid = ?', [sp.id]);
+                    for (const d of dataCollectAudits) {
+                        if (d.uid) {
+                            const spAudit = spAudits.find(x => { return x.uid === d.uid; });
+                            if (!spAudit) {
+                                const user = await querySql('SELECT * FROM zh_project_account where id = ?', [d.uid]);
+                                if (user.length === 0) continue;
+                                insertAudits.push({ id: uuid.v4(), spid: sp.id, pid: p.id, uid: d.uid, self_category_level: user[0].self_category_level, datacollect_permission: '1' });
+                            } else {
+                                updateAudits.push({ id: spAudit.id, datacollect_permission: '1' });
+                            }
+                        } else if (d.company_id) {
+                            const constructionUnits = await querySql('SELECT * FROM zh_construction_unit where id = ?', [d.company_id]);
+                            if (constructionUnits.length === 0) continue;
+                            const users = await querySql('SELECT * FROM zh_project_account where company_id = ?', [d.company_id]);
+                            for (const user of users) {
+                                const spAudit = spAudits.find(x => { return x.uid === user.id; });
+                                if (!spAudit) {
+                                    if (insertAudits.find(x => { return x.uid === user.id; })) continue;
+                                    insertAudits.push({ id: uuid.v4(), spid: sp.id, pid: p.id, uid: user.id, self_category_level: user.self_category_level, datacollect_permission: '1' });
+                                } else {
+                                    if (updateAudits.find(x => { return x.id === spAudit.id; })) continue;
+                                    updateAudits.push({ id: spAudit.id, datacollect_permission: '1' });
+                                }
+                            }
+                        }
+                    }
+                    if (insertAudits.length > 0) {
+                        for (const audit of insertAudits) {
+                            const [spSql, spSqlParam] = getInsertSql('zh_sub_project_permission', audit);
+                            await querySql(spSql, spSqlParam);
+                        }
+                    }
+                    if (updateAudits.length > 0) {
+                        for (const audit of updateAudits) {
+                            await querySql('UPDATE zh_sub_project_permission SET datacollect_permission = ? WHERE id = ?', ['1', audit.id]);
+                        }
+                    }
+                }
             }
 
             for (const sp of subProj) {