Browse Source

质量巡检权限分离前台部分

ellisran 1 month ago
parent
commit
36982e922c

+ 1 - 0
app/const/sp_page_show.js

@@ -110,6 +110,7 @@ const defaultSetting = {
     openInfo: 1,
     correctCalcContractTp: 0,
     quality: 1,
+    qualityInspection: 1,
 };
 
 module.exports = {

+ 55 - 17
app/controller/quality_controller.js

@@ -74,6 +74,42 @@ module.exports = app => {
             }
         }
 
+        async inspectionTender(ctx) {
+            try {
+                if (!ctx.subProject.page_show.qualityInspection) throw '该功能已关闭';
+
+                const renderData = {
+                    is_inspection: ctx.url.includes('inspection') ? 1 : 0,
+                    jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.quality.tender),
+                };
+
+                const accountList = await ctx.service.projectAccount.getAllSubProjectAccount(ctx.subProject);
+                renderData.accountList = accountList;
+                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, groupList };
+                }).filter(x => { return x.groupList.length > 0; });
+                // const unitList = await ctx.service.constructionUnit.getAllDataByCondition({ where: { pid: ctx.session.sessionProject.id } });
+                // renderData.accountGroup = unitList.map(item => {
+                //     const groupList = accountList.filter(item1 => item1.company === item.name);
+                //     return { groupName: item.name, groupList };
+                // });
+                renderData.accountGroup = accountGroupList;
+                renderData.accountInfo = await ctx.service.projectAccount.getDataById(ctx.session.sessionUser.accountId);
+                renderData.tenderList = await ctx.service.tender.getSpecList(ctx.service.tenderPermission, 'inspection', ctx.session.sessionUser.is_admin ? 'all' : '');
+                renderData.categoryData = await this.ctx.service.category.getAllCategory(this.ctx.subProject);
+                renderData.selfCategoryLevel = this.ctx.subProject.permission.self_category_level;
+                renderData.permissionConst = ctx.service.tenderPermission.partPermissionConst('inspection');
+                renderData.permissionBlock = ctx.service.tenderPermission.partPermissionBlock('inspection');
+                await this.layout('quality/tender.ejs', renderData, 'quality/tender_modal.ejs');
+            } catch (err) {
+                ctx.log(err);
+                ctx.postError(err, '无法查看质量巡检数据');
+                ctx.redirect('/dashboard');
+            }
+        }
+
         async member(ctx) {
             try {
                 const data = JSON.parse(ctx.request.body.data);
@@ -114,10 +150,11 @@ module.exports = app => {
                 let auditList = [];
                 switch (data.type) {
                     case 'add-audit':
+                        if (!data.key || !['quality', 'inspection'].includes(data.key)) throw '参数有误';
                         // // 判断用户是单个还是数组
                         uids = data.id instanceof Array ? data.id : [data.id];
                         // // 判断该用户的组是否已加入到表中,已加入则提示无需添加
-                        auditList = await ctx.service.tenderPermission.getPartsPermission(tenderInfo.id, ['quality']);
+                        auditList = await ctx.service.tenderPermission.getPartsPermission(tenderInfo.id, [data.key]);
                         const addAidList = ctx.helper._.difference(uids, ctx.helper._.map(auditList, 'uid'));
                         if (addAidList.length === 0) {
                             throw '用户已存在成员管理中,无需重复添加';
@@ -125,18 +162,18 @@ module.exports = app => {
                         const accountList = await ctx.service.projectAccount.getAllDataByCondition({ where: { id: addAidList } });
                         const insert_members = [];
                         for (const account of accountList) {
-                            insert_members.push({
-                                uid: account.id,
-                                quality: ['1'],
-                            });
+                            const insert_member = { uid: account.id };
+                            insert_member[data.key] = ['1'];
+                            insert_members.push(insert_member);
                         }
-                        await ctx.service.tenderPermission.saveOnePermission(tenderInfo.id, ctx.helper._.map(accountList, 'id'), insert_members, ['quality']);
-                        responseData.data = await ctx.service.tenderPermission.getPartsPermission(tenderInfo.id, ['quality']);
+                        await ctx.service.tenderPermission.saveOnePermission(tenderInfo.id, ctx.helper._.map(accountList, 'id'), insert_members, [data.key]);
+                        responseData.data = await ctx.service.tenderPermission.getPartsPermission(tenderInfo.id, [data.key]);
                         break;
                     case 'del-audit':
+                        if (!data.key || !['quality', 'inspection'].includes(data.key)) throw '参数有误';
                         uids = data.id instanceof Array ? data.id : [data.id];
                         if (uids.length === 0) throw '没有选择要移除的用户';
-                        auditList = await ctx.service.tenderPermission.getPartsPermission(tenderInfo.id, ['quality']);
+                        auditList = await ctx.service.tenderPermission.getPartsPermission(tenderInfo.id, [data.key]);
                         // 判断uids和auditList中是否有相同的uid
                         const commonUids = ctx.helper._.intersection(uids, ctx.helper._.map(auditList, 'uid'));
                         if (commonUids.length === 0) {
@@ -144,20 +181,21 @@ module.exports = app => {
                         }
                         const del_members = [];
                         for (const uid of uids) {
-                            del_members.push({
-                                uid,
-                                quality: [],
-                            });
+                            const del_member = { uid };
+                            del_member[data.key] = [];
+                            del_members.push(del_member);
                         }
-                        await ctx.service.tenderPermission.saveOnePermission(tenderInfo.id, uids, del_members, ['quality']);
-                        responseData.data = await ctx.service.tenderPermission.getPartsPermission(tenderInfo.id, ['quality']);
+                        await ctx.service.tenderPermission.saveOnePermission(tenderInfo.id, uids, del_members, [data.key]);
+                        responseData.data = await ctx.service.tenderPermission.getPartsPermission(tenderInfo.id, [data.key]);
                         break;
                     case 'save-permission':
+                        if (!data.key || !['quality', 'inspection'].includes(data.key)) throw '参数有误';
                         uids = data.uid instanceof Array ? data.uid : [data.uid];
-                        await ctx.service.tenderPermission.saveOnePermission(tenderInfo.id, uids, data.members, ['quality']);
+                        await ctx.service.tenderPermission.saveOnePermission(tenderInfo.id, uids, data.members, [data.key]);
                         break;
                     case 'list':
-                        responseData.data = await ctx.service.tenderPermission.getPartsPermission(tenderInfo.id, ['quality']);
+                        if (!data.key || !['quality', 'inspection'].includes(data.key)) throw '参数有误';
+                        responseData.data = await ctx.service.tenderPermission.getPartsPermission(tenderInfo.id, [data.key]);
                         break;
                     default: throw '参数有误';
                 }
@@ -500,7 +538,7 @@ module.exports = app => {
          */
         async inspection(ctx) {
             try {
-                if (!ctx.subProject.page_show.quality) throw '该功能已关闭';
+                if (!ctx.subProject.page_show.qualityInspection) throw '该功能已关闭';
                 const status = parseInt(ctx.query.status) || 0;
                 await this._filterInspection(ctx, status);
             } catch (err) {

+ 5 - 4
app/controller/sub_proj_setting_controller.js

@@ -592,8 +592,8 @@ module.exports = app => {
                     subProjects,
                 };
                 renderData.selfCategoryLevel = await this.ctx.service.projectAccount.getSelfCategoryLevel(this.ctx.session.sessionUser.accountId);
-                renderData.permissionConst = ctx.service.tenderPermission.partPermissionConst('quality');
-                renderData.permissionBlock = ctx.service.tenderPermission.partPermissionBlock('quality');
+                renderData.permissionConst = ctx.service.tenderPermission.partPermissionConst(['quality', 'inspection']);
+                renderData.permissionBlock = ctx.service.tenderPermission.partPermissionBlock(['quality', 'inspection']);
                 await this.layout('sp_setting/manage.ejs', renderData, 'sp_setting/manage_modal.ejs');
             } catch (error) {
                 ctx.log(error);
@@ -647,6 +647,7 @@ module.exports = app => {
                         responseData.data.contractAuditList = await ctx.service.contractAudit.getList({ tid: tender.id });
                         responseData.data.constructionAuditList = await ctx.service.constructionAudit.getList(tender.id);
                         responseData.data.qualityAuditList = await ctx.service.tenderPermission.getPartsPermission(tender.id, ['quality']);
+                        responseData.data.inspectionAuditList = await ctx.service.tenderPermission.getPartsPermission(tender.id, ['inspection']);
                         break;
                     case 'copy2otu':
                         if (data.userType === 'tourist') {
@@ -657,8 +658,8 @@ module.exports = app => {
                             await ctx.service.contractAudit.setOtherTender(data.tidList, data.auditList);
                         } else if (data.userType === 'construction') {
                             await ctx.service.constructionAudit.setOtherTender(data.tidList, data.auditList);
-                        } else if (data.userType === 'quality') {
-                            await ctx.service.tenderPermission.setOtherTender(data.tidList, data.auditList, ['quality']);
+                        } else if (data.userType === 'quality' || data.userType === 'inspection') {
+                            await ctx.service.tenderPermission.setOtherTender(data.tidList, data.auditList, [data.userType]);
                         } else {
                             throw '参数有误';
                         }

+ 52 - 22
app/public/js/setting_manage.js

@@ -176,9 +176,10 @@ $(document).ready(() => {
         contract: '合同管理',
         construction: '施工日志',
         quality: '质量管理',
+        inspection: '质量巡检',
     };
-    const tabTypeKeys = ['tourist', 'schedule', 'contract', 'construction', 'quality'];
-    
+    const tabTypeKeys = ['tourist', 'schedule', 'contract', 'construction', 'quality', 'inspection'];
+
     const $filterTenderDone = $('body #filter-tender-done')
     if (window.location.search && window.location.search.split('done=')[1]) {
       $filterTenderDone.prop('checked', window.location.search.split('done=')[1] === '1' ? true : false);
@@ -214,7 +215,8 @@ $(document).ready(() => {
             setScheduleHtml(result.scheduleAuditList);
             setContractHtml(result.contractAuditList);
             setConstructionHtml(result.constructionAuditList);
-            setQualityHtml(result.qualityAuditList);
+            setTenderPermissionHtml(result.qualityAuditList, 'quality');
+            setTenderPermissionHtml(result.inspectionAuditList, 'inspection');
             resetAddUserHtml();
         });
     });
@@ -241,6 +243,8 @@ $(document).ready(() => {
                 $('#add_user_dropdownMenuButton').attr('data-type', 'construction');
             } else if ($(this).attr('href') === '#zlgl') {
                 $('#add_user_dropdownMenuButton').attr('data-type', 'quality');
+            } else if ($(this).attr('href') === '#zlxj') {
+                $('#add_user_dropdownMenuButton').attr('data-type', 'inspection');
             }
         }
     });
@@ -338,6 +342,30 @@ $(document).ready(() => {
             type: 'save-permission',
             uid,
             members: [member],
+            key: 'quality',
+        };
+        const _self = $(this);
+        postData('/sp/' + spid + '/quality/' + cur_tenderid + '/audit/save', prop, function (data) {
+        });
+    });
+
+    // 权限更改
+    $('body').on('click', '#inspection-users input[type="checkbox"]', function () {
+        const uid = parseInt($(this).parents('tr').data('uid'));
+        const member = {
+            uid,
+            inspection: [1],
+        };
+        $(this).parents('tr').find('input[type="checkbox"]').each(function () {
+            if ($(this).is(':checked')) {
+                member.inspection.push($(this).data('value'));
+            }
+        });
+        const prop = {
+            type: 'save-permission',
+            uid,
+            members: [member],
+            key: 'inspection',
         };
         const _self = $(this);
         postData('/sp/' + spid + '/quality/' + cur_tenderid + '/audit/save', prop, function (data) {
@@ -369,8 +397,8 @@ $(document).ready(() => {
                 $('#'+ type + '-users').find('tr[data-id="'+ id +'"]').remove();
                 $('#remove-user').modal('hide');
             });
-        } else if (type === 'quality') {
-            postData('/sp/' + spid + '/' + type + '/' + cur_tenderid + '/audit/save', { type: 'del-audit', id }, function (data) {
+        } else if (type === 'quality' || type === 'inspection') {
+            postData('/sp/' + spid + '/quality/' + cur_tenderid + '/audit/save', { type: 'del-audit', id, key: type }, function (data) {
                 $('#'+ type + '-users').find('tr[data-uid="'+ id +'"]').remove();
                 $('#remove-user').modal('hide');
             });
@@ -578,13 +606,13 @@ $(document).ready(() => {
                 postData('/sp/' + spid + '/construction/' + cur_tenderid + '/audit/save', prop, function (datas) {
                     setConstructionHtml(datas);
                 });
-            } else if (type === 'quality') {
+            } else if (type === 'quality' || type === 'inspection') {
                 const user = _.find(accountList, function (item) {
                     return item.id === id;
                 });
                 const saIdList = [];
-                for (let i = 0; i < $('#quality-users tr').length; i++) {
-                    saIdList.push(parseInt($('#quality-users tr').eq(i).data('uid')));
+                for (let i = 0; i < $('#' + type + '-users tr').length; i++) {
+                    saIdList.push(parseInt($('#' + type + '-users tr').eq(i).data('uid')));
                 }
                 if (_.includes(saIdList, id)) {
                     toastr.error('该用户已存在列表中,无需重复添加');
@@ -594,9 +622,10 @@ $(document).ready(() => {
                 const prop = {
                     id: id,
                     type: 'add-audit',
+                    key: type,
                 };
                 postData('/sp/' + spid + '/quality/' + cur_tenderid + '/audit/save', prop, function (datas) {
-                    setQualityHtml(datas);
+                    setTenderPermissionHtml(datas, type);
                 });
             }
         }
@@ -750,7 +779,9 @@ $(document).ready(() => {
                 userData.member = [1];
                 if ($('#quality-users tr').eq(i).find('input[data-block="upload"]').eq(0).is(':checked')) userData.member.push(2);
                 if ($('#quality-users tr').eq(i).find('input[data-block="add"]').eq(0).is(':checked')) userData.member.push(3);
-                if ($('#quality-users tr').eq(i).find('input[data-block="add_inspection"]').eq(0).is(':checked')) userData.member.push(4);
+            } else if (userType === 'inspection') {
+                userData.member = [1];
+                if ($('#inspection-users tr').eq(i).find('input[data-block="add"]').eq(0).is(':checked')) userData.member.push(2);
             }
             saIdList.push(userData);
         }
@@ -1088,26 +1119,25 @@ function setConstructionHtml(constructionAuditList) {
     $('#construction-users').html(html);
 }
 
-function setQualityHtml(qualityAuditList) {
+function setTenderPermissionHtml(auditList, key) {
     const html = [];
-    for (const m of qualityAuditList) {
-        html.push(getUserPermissionHtml(m));
+    for (const m of auditList) {
+        html.push(getUserPermissionHtml(m, key));
     }
-    $('#quality-users').html(html.join(''));
+    $('#' + key + '-users').html(html.join(''));
 }
 
-const getUserPermissionHtml = function(user) {
+const getUserPermissionHtml = function(user, key) {
     const html = [];
     html.push(`<tr data-uid="${user.uid}" data-id="${user.id}">`);
     html.push(`<td>${user.name}</td>`, `<td>${user.role}</td>`);
-    for (const block of permissionBlock) {
-        for (const p of block.permission) {
-            if (p.isDefault) continue;
-            const checked = user[block.key] ? (user[block.key].indexOf(p.value) >= 0 ? 'checked' : '') : '';
-            html.push(`<td class="text-center"><input type="checkbox" data-block="${p.key}" data-value="${p.value}" ${checked}></td>`);
-        }
+    const block = _.find(permissionBlock, { key: key });
+    for (const p of block.permission) {
+        if (p.isDefault) continue;
+        const checked = user[block.key] ? (user[block.key].indexOf(p.value) >= 0 ? 'checked' : '') : '';
+        html.push(`<td class="text-center"><input type="checkbox" data-block="${p.key}" data-value="${p.value}" ${checked}></td>`);
     }
-    html.push(`<td class="text-center"><a href="#remove-user1" data-id="${user.uid}" data-toggle="modal" data-target="#remove-user" class="btn btn-sm btn-outline-danger remove-quality-user">移除</a></td>`);
+    html.push(`<td class="text-center"><a href="#remove-user1" data-id="${user.uid}" data-toggle="modal" data-target="#remove-user" class="btn btn-sm btn-outline-danger remove-${key}-user">移除</a></td>`);
     html.push('</tr>');
     return html.join('');
 };

+ 1 - 1
app/router.js

@@ -468,7 +468,7 @@ module.exports = app => {
 
     // 质量管理
     app.get('/sp/:id/quality', sessionAuth, subProjectCheck, 'qualityController.tender');
-    app.get('/sp/:id/quality/inspection', sessionAuth, subProjectCheck, 'qualityController.tender');
+    app.get('/sp/:id/quality/inspection', sessionAuth, subProjectCheck, 'qualityController.inspectionTender');
     app.get('/sp/:id/quality/tender', sessionAuth, subProjectCheck, 'qualityController.tender');
     app.post('/sp/:id/quality/member', sessionAuth, subProjectCheck, projectManagerCheck, 'qualityController.member');
     app.post('/sp/:id/quality/memberSave', sessionAuth, subProjectCheck, projectManagerCheck, 'qualityController.memberSave');

+ 6 - 6
app/service/quality_inspection_audit.js

@@ -97,14 +97,14 @@ module.exports = app => {
                     audit_order: newAuditOrder,
                 };
                 const result = await transaction.insert(this.tableName, data);
-                const auditList = await this.ctx.service.tenderPermission.getPartsPermission(this.ctx.tender.id, ['quality']);
+                const auditList = await this.ctx.service.tenderPermission.getPartsPermission(this.ctx.tender.id, ['inspection']);
                 const addAid = this._.includes(this._.map(auditList, 'uid'), auditorId);
                 if (!addAid) {
                     const insert_members = [{
                         uid: auditorId,
-                        quality: ['1'],
+                        inspection: ['1'],
                     }];
-                    await this.ctx.service.tenderPermission.saveOnePermission(this.ctx.tender.id, [auditorId], insert_members, ['quality'], transaction);
+                    await this.ctx.service.tenderPermission.saveOnePermission(this.ctx.tender.id, [auditorId], insert_members, ['inspection'], transaction);
                 }
                 await transaction.commit();
                 return (result.effectRows = 1);
@@ -679,14 +679,14 @@ module.exports = app => {
                             times: inspection.times, order: selfAudit.order + 1, status: auditConst.status.rectification,
                             is_rectification: 1, begin_time: time, audit_order: selfAudit.audit_order + 1,
                         });
-                        const auditList = await this.ctx.service.tenderPermission.getPartsPermission(inspection.tid, ['quality']);
+                        const auditList = await this.ctx.service.tenderPermission.getPartsPermission(inspection.tid, ['inspection']);
                         const addAid = this._.includes(this._.map(auditList, 'uid'), checkData.rectification_uid);
                         if (!addAid) {
                             const insert_members = [{
                                 uid: checkData.rectification_uid,
-                                quality: ['1'],
+                                inspection: ['1'],
                             }];
-                            await this.ctx.service.tenderPermission.saveOnePermission(inspection.tid, [checkData.rectification_uid], insert_members, ['quality'], transaction);
+                            await this.ctx.service.tenderPermission.saveOnePermission(inspection.tid, [checkData.rectification_uid], insert_members, ['inspection'], transaction);
                         }
                         await transaction.update(this.ctx.service.qualityInspection.tableName, {
                             id: inspection.id, status: auditConst.status.rectification, rectification_uid: checkData.rectification_uid,

+ 6 - 1
app/service/tender_permission.js

@@ -26,11 +26,16 @@ module.exports = app => {
                     view: { title: '查看', value: 1, isDefault: 1 },
                     upload: { title: '上传文件', value: 2 },
                     add: { title: '新增功能', value: 3 },
-                    add_inspection: { title: '添加质量巡检', value: 4 },
+                    // add_inspection: { title: '添加质量巡检', value: 4 },
                 },
+                inspection: {
+                    view: { title: '查看', value: 1, isDefault: 1 },
+                    add: { title: '新增巡检', value: 2 },
+                }
             };
             this.PermissionBlock = [
                 { key: 'quality', name: '质量管理', field: 'quality' },
+                { key: 'inspection', name: '质量巡检', field: 'inspection' },
             ];
             for (const p of this.PermissionBlock) {
                 if (p.children) {

+ 1 - 1
app/view/quality/inspection.ejs

@@ -53,7 +53,7 @@
                 </div>
             </div>
             <div class="ml-auto">
-                <% if (permission.add_inspection) { %>
+                <% if (permission.add) { %>
                 <a href="#add-bj" data-toggle="modal" data-target="#add-bj" class="btn btn-sm btn-primary pull-right ml-1">新建巡检</a>
                 <a href="#setting" data-toggle="modal" data-target="#setting" class="btn btn-sm btn-outline-primary pull-right ml-1"><i class="fa fa-cog"></i></a>
                 <% } %>

+ 1 - 1
app/view/quality/inspection_modal.ejs

@@ -47,7 +47,7 @@
         </div>
     </div>
 </div>
-<% if (permission.add_inspection) { %>
+<% if (permission.add) { %>
     <!--弹出添加变更令-->
     <div class="modal fade" id="add-bj-modal" data-backdrop="static">
         <div class="modal-dialog" role="document">

+ 31 - 10
app/view/sp_setting/manage.ejs

@@ -29,6 +29,7 @@
                     <a class="nav-item nav-link" data-toggle="tab" href="#htgl" role="tab">合同管理</a>
                     <a class="nav-item nav-link" data-toggle="tab" href="#sgrz" role="tab">施工日志</a>
                     <a class="nav-item nav-link" data-toggle="tab" href="#zlgl" role="tab">质量管理</a>
+                    <a class="nav-item nav-link" data-toggle="tab" href="#zlxj" role="tab">质量巡检</a>
 <!--                    <a class="nav-item nav-link" data-toggle="tab" href="#subadmin" role="tab">标段管理员</a>-->
                     <div class="ml-auto" id="user-set" style="display: none">
                         <div class="row">
@@ -226,7 +227,7 @@
                             </table>
                         </div>
                     </div>
-                    <!--质量巡检 -->
+                    <!--质量管理 -->
                     <div id="zlgl" class="tab-pane">
                         <div class="col-8" style="max-width: 800px">
                             <table class="table table-hover table-bordered table-sm">
@@ -234,17 +235,14 @@
                                 <tr>
                                     <th class="align-middle" rowspan="2">成员名称</th>
                                     <th class="align-middle" rowspan="2">角色/职位</th>
-                                    <% for (const pb of permissionBlock) { %>
-                                        <th colspan="<%- pb.permission.filter(x => { return !x.isDefault; }).length %>"><%- pb.name %></th>
-                                    <% } %>
+                                    <% const pb = permissionBlock.find(item => item.key === 'quality'); %>
+                                    <th colspan="<%- pb.permission.filter(x => { return !x.isDefault; }).length %>"><%- pb.name %></th>
                                     <th class="align-middle" rowspan="2">操作</th>
                                 </tr>
                                 <tr>
-                                    <% for (const pb of permissionBlock) { %>
-                                        <% for (const p of pb.permission) { %>
-                                            <% if (p.isDefault) continue; %>
-                                            <th><%- p.title %></th>
-                                        <% } %>
+                                    <% for (const p of pb.permission) { %>
+                                        <% if (p.isDefault) continue; %>
+                                        <th><%- p.title %></th>
                                     <% } %>
                                 </tr>
                                 </thead>
@@ -253,6 +251,30 @@
                             </table>
                         </div>
                     </div>
+                    <!--质量巡检 -->
+                    <div id="zlxj" class="tab-pane">
+                        <div class="col-8" style="max-width: 800px">
+                            <table class="table table-hover table-bordered table-sm">
+                                <thead class="text-center">
+                                <tr>
+                                    <th class="align-middle" rowspan="2">成员名称</th>
+                                    <th class="align-middle" rowspan="2">角色/职位</th>
+                                    <% const inspectionPb = permissionBlock.find(item => item.key === 'inspection'); %>
+                                    <th colspan="<%- inspectionPb.permission.filter(x => { return !x.isDefault; }).length %>"><%- inspectionPb.name %></th>
+                                    <th class="align-middle" rowspan="2">操作</th>
+                                </tr>
+                                <tr>
+                                    <% for (const p of inspectionPb.permission) { %>
+                                        <% if (p.isDefault) continue; %>
+                                        <th><%- p.title %></th>
+                                    <% } %>
+                                </tr>
+                                </thead>
+                                <tbody id="inspection-users">
+                                </tbody>
+                            </table>
+                        </div>
+                    </div>
                     <!--标段管理员 -->
                     <div id="subadmin" class="tab-pane">
                         <div class="col-6">
@@ -393,5 +415,4 @@
     let sp_lc, sp_type, sp_status, sp_status_list, cur_tenderid, cur_uid;
     const permissionConst = JSON.parse('<%- JSON.stringify(permissionConst) %>');
     const permissionBlock = JSON.parse('<%- JSON.stringify(permissionBlock) %>');
-    
 </script>

+ 2 - 2
config/menu.js

@@ -125,7 +125,7 @@ const menu = {
     },
     quality: {
         name: '质量管理',
-        icon: 'fa-file-text-o',
+        icon: 'fa-balance-scale',
         display: true,
         children: null,
         caption: '质量管理',
@@ -134,7 +134,7 @@ const menu = {
     },
     inspection: {
         name: '质量巡检',
-        icon: 'fa-file-text-o',
+        icon: 'fa-newspaper-o',
         display: true,
         children: null,
         caption: '质量巡检',

+ 3 - 0
sql/update.sql

@@ -62,6 +62,9 @@ ALTER TABLE `zh_s2b_spec_pull`
 ADD COLUMN `extra_option` varchar(1000) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '{}' COMMENT '额外配置' AFTER `pull_class`,
 ADD COLUMN `check_api` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'api验证方法' AFTER `extra_option`;
 
+ALTER TABLE `zh_tender_permission`
+ADD COLUMN `inspection` varchar(255) NOT NULL DEFAULT '' COMMENT '质量巡检权限(,分隔,具体见代码定义)' AFTER `quality`;
+
 ------------------------------------
 -- 表数据
 ------------------------------------