Prechádzať zdrojové kódy

变更审批人能修改变更信息

ellisran 4 dní pred
rodič
commit
ce474dadf1

+ 5 - 3
app/controller/change_controller.js

@@ -503,6 +503,11 @@ module.exports = app => {
                 renderData.changeLedgerList = await ctx.service.changeLedger.getAllDataByCondition({ where: { tender_id: ctx.tender.id } });
                 renderData.changePosList = await ctx.service.changePos.getAllDataByCondition({ where: { tid: ctx.tender.id } });
                 renderData.changeUnits = changeConst.units;
+                if (!change.readOnly || change.shenpiPower) {
+                    // 获取公司列表
+                    const companyList = await ctx.service.changeCompany.getAllDataByCondition({ where: { tid: ctx.tender.id } });
+                    renderData.companyList = companyList;
+                }
                 if (!change.readOnly || ctx.session.sessionUser.is_admin) {
                     // 获取所有项目参与者
                     const accountList = await ctx.service.projectAccount.getAllSubProjectAccount(ctx.subProject);
@@ -511,9 +516,6 @@ module.exports = app => {
                         const groupList = accountList.filter(item1 => item1.company === item.name);
                         return { groupName: item.name, groupList };
                     }).filter(x => { return x.groupList.length > 0; });
-                    // 获取公司列表
-                    const companyList = await ctx.service.changeCompany.getAllDataByCondition({ where: { tid: ctx.tender.id } });
-                    renderData.companyList = companyList;
                     const stateInfo = ctx.helper._.find(fun_set.change_state, { order: ctx.change.state });
                     renderData.deLimit = stateInfo.value;
                     if (!change.readOnly) {

+ 71 - 86
app/public/js/change_information.js

@@ -5761,7 +5761,7 @@ $(document).ready(() => {
             xmjSpread.refresh();
         }
     });
-    if (!readOnly) {
+    if (!readOnly || shenpiPower) {
         // 自动编号
         $('.reduction-code').click(function () {
             const code = $(this).attr('data-code');
@@ -5846,24 +5846,6 @@ $(document).ready(() => {
             }
             toastr.success('已还原到上次保存状态');
         });
-
-        // 判断是否有更改过
-        function judgeChange() {
-            let change = false;
-            console.log(changeInfo, back_changeInfo);
-            if (!isObjEqual(changeInfo, back_changeInfo)) {
-                change = true;
-            }
-            if (change) {
-                $('#show-save-btn').show();
-                $('#sp-btn').hide();
-                $('.title-main').addClass('bg-warning');
-            } else {
-                $('#show-save-btn').hide();
-                $('#sp-btn').show();
-                $('.title-main').removeClass('bg-warning');
-            }
-        }
         function changeFormRemake() {
             changeInfo = Object.assign({}, back_changeInfo);
             $('#change_form input[name="code"]').val(changeInfo.code);
@@ -5884,85 +5866,88 @@ $(document).ready(() => {
             $('#change_form input[name="charge"][value="'+ changeInfo.charge +'"]').prop('checked', true);
             $('#change_form input[name="state"][value="'+ changeInfo.state +'"]').prop('checked', true);
             $('#change_form input[name="type[]"]').prop('checked', false);
+            $('#change_form input[name="w_code"]').val(changeInfo.w_code);
             const typecheck = changeInfo.type.split(',');
             for (const type of typecheck) {
                 $('#change_form input[name="type[]"][value="'+ type +'"]').prop('checked', true);
             }
         }
-        $('.checkChangeFrom').on('click', function () {
-            let returnFlag = false;
-            // 表单判断
-            if ($('input[name="code"]').val() === '') {
-                toastr.error('申请编号不能为空!');
-                returnFlag = true;
-            }
-            if ($('input[name="name"]').val() === '') {
-                toastr.error('变更工程名称不能为空!');
-                returnFlag = true;
-            }
-            if ($('textarea[name="content"]').val() === '') {
-                toastr.error('工程变更理由及内容不能为空!');
-                returnFlag = true;
-            }
-            if (changeList.length === 0) {
-                toastr.error('请添加变更清单!');
-                returnFlag = true;
-            } else {
-                const whiteList = _.filter(changeList, item => item.lid == 0 && (item.name === '' || item.name === null));
-                if (whiteList.length > 0) {
-                    toastr.error('存在空白清单未完整填写数据(名称不可为空)');
+        if (!readOnly) {
+            $('.checkChangeFrom').on('click', function () {
+                let returnFlag = false;
+                // 表单判断
+                if ($('input[name="code"]').val() === '') {
+                    toastr.error('申请编号不能为空!');
                     returnFlag = true;
                 }
-                // for (const [i,cl] of changeSpreadSheet.zh_data.entries()) {
-                //     if (cl.name === '') {
-                //         toastr.error('清单第' + (i+1) + '行未完整填写数据(名称不可为空)');
-                //         returnFlag = true;
-                //     }
-                // }
-            }
-            if(!checkAuditorFrom ()) {
-                returnFlag = true;
-            }
-            // 判断非空白变更清单是否有重复值(gcl_id及mx_id),如果存在完全相同则需要提示并删除,上报失败,这功能主要是因为清单数据过多服务器处理不过来偶然出现
-            const doubleList = findDuplicates(_.filter(changeList, item => item.lid != 0));
-            console.log(doubleList);
-            if (doubleList.length > 0) {
-                for (const double of doubleList) {
-                    const msgIndex = [];
-                    for (const one of double) {
-                        const index = _.findIndex(changeSpreadSheet.zh_data[double[0].order - 1].children, { id: one.id });
-                        if (index !== -1) msgIndex.push(index+1);
+                if ($('input[name="name"]').val() === '') {
+                    toastr.error('变更工程名称不能为空!');
+                    returnFlag = true;
+                }
+                if ($('textarea[name="content"]').val() === '') {
+                    toastr.error('工程变更理由及内容不能为空!');
+                    returnFlag = true;
+                }
+                if (changeList.length === 0) {
+                    toastr.error('请添加变更清单!');
+                    returnFlag = true;
+                } else {
+                    const whiteList = _.filter(changeList, item => item.lid == 0 && (item.name === '' || item.name === null));
+                    if (whiteList.length > 0) {
+                        toastr.error('存在空白清单未完整填写数据(名称不可为空)');
+                        returnFlag = true;
+                    }
+                    // for (const [i,cl] of changeSpreadSheet.zh_data.entries()) {
+                    //     if (cl.name === '') {
+                    //         toastr.error('清单第' + (i+1) + '行未完整填写数据(名称不可为空)');
+                    //         returnFlag = true;
+                    //     }
+                    // }
+                }
+                if(!checkAuditorFrom ()) {
+                    returnFlag = true;
+                }
+                // 判断非空白变更清单是否有重复值(gcl_id及mx_id),如果存在完全相同则需要提示并删除,上报失败,这功能主要是因为清单数据过多服务器处理不过来偶然出现
+                const doubleList = findDuplicates(_.filter(changeList, item => item.lid != 0));
+                console.log(doubleList);
+                if (doubleList.length > 0) {
+                    for (const double of doubleList) {
+                        const msgIndex = [];
+                        for (const one of double) {
+                            const index = _.findIndex(changeSpreadSheet.zh_data[double[0].order - 1].children, { id: one.id });
+                            if (index !== -1) msgIndex.push(index+1);
+                        }
+                        if (msgIndex.length > 0) {
+                            toastr.error('第 ' + double[0].order + ' 行' + double[0].code + '清单项目节第 ' + msgIndex.splice(',') + '行重复,请只保留一条数据');
+                        }
                     }
-                    if (msgIndex.length > 0) {
-                        toastr.error('第 ' + double[0].order + ' 行' + double[0].code + '清单项目节第 ' + msgIndex.splice(',') + '行重复,请只保留一条数据');
+                    returnFlag = true;
+                }
+                if (returnFlag) {
+                    return false;
+                }
+                postData(window.location.pathname + '/audit/start', {}, function (result) {
+                    window.location.reload();
+                })
+            });
+            // 检查上报情况
+            function checkAuditorFrom () {
+                if ($('#auditList li').length === 0) {
+                    if(shenpi_status === shenpiConst.sp_status.gdspl) {
+                        toastr.error('请联系管理员添加审批人');
+                    } else {
+                        toastr.error('请先选择审批人,再上报数据');
                     }
+                    return false;
                 }
-                returnFlag = true;
+                return true;
             }
-            if (returnFlag) {
-                return false;
+            // 找出数组中相同的清单
+            function findDuplicates(arr, keys = ['lid', 'gcl_id', 'mx_id']) {
+                const groupedData = _.groupBy(arr, item => JSON.stringify(_.pick(item, keys)));
+                const duplicates = _.filter(groupedData, group => group.length > 1);
+                return _.values(duplicates);
             }
-            postData(window.location.pathname + '/audit/start', {}, function (result) {
-                window.location.reload();
-            })
-        });
-        // 检查上报情况
-        function checkAuditorFrom () {
-            if ($('#auditList li').length === 0) {
-                if(shenpi_status === shenpiConst.sp_status.gdspl) {
-                    toastr.error('请联系管理员添加审批人');
-                } else {
-                    toastr.error('请先选择审批人,再上报数据');
-                }
-                return false;
-            }
-            return true;
-        }
-        // 找出数组中相同的清单
-        function findDuplicates(arr, keys = ['lid', 'gcl_id', 'mx_id']) {
-            const groupedData = _.groupBy(arr, item => JSON.stringify(_.pick(item, keys)));
-            const duplicates = _.filter(groupedData, group => group.length > 1);
-            return _.values(duplicates);
         }
     }
 

+ 34 - 7
app/view/change/information.ejs

@@ -59,7 +59,7 @@
                     <% } %>
                 </div>
                 <!--info状态区分-->
-                <% if (!change.readOnly || (change.status === auditConst.status.checked && (ctx.session.sessionUser.is_admin || ctx.helper._.findIndex(change.auditors, { uid: ctx.session.sessionUser.accountId }) !== -1))) { %>
+                <% if (!change.readOnly || change.shenpiPower || (change.status === auditConst.status.checked && (ctx.session.sessionUser.is_admin || ctx.helper._.findIndex(change.auditors, { uid: ctx.session.sessionUser.accountId }) !== -1))) { %>
                     <div class="pull-right px-3" id="show-save-btn" style="display: none">
 <!--                        <span>您修改了变更信息,记得保存修改。</span>-->
                         <button class="btn btn-sm btn-primary save_change_btn" id="save_change"><i class="fa fa-save"></i> 保存修改</button>
@@ -103,18 +103,26 @@
                 <div class="tab-content">
                     <div class="tab-pane active" id="bgxinxi">
                         <div class="sjs-sh-1" style="overflow-y: auto;">
-                            <% if (!change.readOnly) { %>
+                            <% if (!change.readOnly || change.shenpiPower) { %>
                             <form class="p-2" action="/tender/<%- change.tid %>/change/<%- change.cid %>/information/save?_csrf_j=<%= ctx.csrf %>" method="post" id="change_form">
                                 <% if (ctx.subProject.page_show.openChangeState) { %>
                                 <div class="form-group">
                                     <label>变更状态</label>
                                     <div>
+                                        <% if (!change.readOnly) { %>
                                         <% for (const cs of changeState) { %>
                                         <div class="form-check form-check-inline">
                                             <input class="form-check-input" type="radio" id="state_<%- cs.order %>" value="<%- cs.order %>" name="state" <% if (cs.order === change.state) { %>checked<% } %>>
                                             <label class="form-check-label" for="state_<%- cs.order %>"><%- cs.name %></label>
                                         </div>
                                         <% } %>
+                                        <% } else if (change.shenpiPower) { %>
+                                        <% const cState = ctx.helper._.find(changeState, { order: change.state }) %>
+                                        <div class="form-check form-check-inline">
+                                            <input class="form-check-input" type="radio" id="state_<%- cState.order %>" name="state" disabled checked>
+                                            <label class="form-check-label" for="state_<%- cState.order %>"><%- cState.name %></label>
+                                        </div>
+                                        <% } %>
                                     </div>
                                 </div>
                                 <% } %>
@@ -607,13 +615,9 @@
     changeUnits.push('');
     let changeUsedData = JSON.parse(unescape('<%- escape(JSON.stringify(changeUsedData)) %>'));
 </script>
-<% if (!change.readOnly) { %>
+<% if (!change.readOnly || change.shenpiPower) { %>
 <script>
-    const shenpi_status = <%- ctx.tender.info.shenpi.change %>;
-    const shenpiConst = JSON.parse('<%- JSON.stringify(shenpiConst) %>');
     const unitList = JSON.parse(unescape('<%- escape(JSON.stringify(unitList)) %>'));
-    const changesUid = <%- change.uid %>;
-
     let back_changeInfo = {
         code: JSON.parse(unescape('<%- escape(JSON.stringify(change.code ? change.code : '')) %>')),
         name: JSON.parse(unescape('<%- escape(JSON.stringify(change.name ? change.name : '')) %>')),
@@ -635,6 +639,29 @@
         w_code: JSON.parse(unescape('<%- escape(JSON.stringify(change.w_code ? change.w_code : '')) %>')),
     };
     let changeInfo = Object.assign({}, back_changeInfo);
+    // 判断是否有更改过
+    function judgeChange() {
+        let change = false;
+        if (!isObjEqual(changeInfo, back_changeInfo)) {
+            change = true;
+        }
+        if (change) {
+            $('#show-save-btn').show();
+            $('#sp-btn').hide();
+            $('.title-main').addClass('bg-warning');
+        } else {
+            $('#show-save-btn').hide();
+            $('#sp-btn').show();
+            $('.title-main').removeClass('bg-warning');
+        }
+    }
+</script>
+<% } %>
+<% if (!change.readOnly) { %>
+<script>
+    const shenpi_status = <%- ctx.tender.info.shenpi.change %>;
+    const shenpiConst = JSON.parse('<%- JSON.stringify(shenpiConst) %>');
+    const changesUid = <%- change.uid %>;
     const openChangeWhiteList = <%- ctx.subProject.page_show.openChangeWhiteList %>;
     let deLimit = parseInt('<%- deLimit %>');
     console.log(changeInfo);

+ 3 - 3
app/view/change/information_modal.ejs

@@ -1,4 +1,4 @@
-<% if (!change.readOnly) { %>
+<% if (!change.readOnly || change.shenpiPower) { %>
     <!--变更单位-->
     <div class="modal fade" id="editcompany" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
         <div class="modal-dialog" role="document">
@@ -30,9 +30,9 @@
             </div>
         </div>
     </div>
-
     <script src="/public/js/change_company.js"></script>
-
+<% } %>
+<% if (!change.readOnly) { %>
     <!--添加清单-->
     <div class="modal fade " tabindex="-1" role="dialog" aria-hidden="true" id="addlist" data-backdrop="static">
         <div class="modal-dialog modal-lg" style="max-width:1100px;">