Просмотр исходного кода

控制目标,实际投资,附加属性

MaiXinRong 2 дней назад
Родитель
Сommit
857184e503

+ 17 - 0
app/controller/budget_controller.js

@@ -219,6 +219,8 @@ module.exports = app => {
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.budget.detail),
                     needGcl,
                     validDskProjType: ValidDskProject[ctx.params.btype],
+                    optimize_rate: this.ctx.budget[ctx.params.btype + '_optimize_rate'] || 0,
+                    profit: this.ctx.budget[ctx.params.btype + '_profit'] || 0,
                 };
                 [renderData.stdBills, renderData.stdChapters] = await ctx.service.budgetStd.getStdList(ctx.budget.std_id, ctx.params.btype);
                 await this.layout('budget/detail.ejs', renderData, 'budget/detail_modal.ejs');
@@ -440,6 +442,21 @@ module.exports = app => {
                 this.ajaxErrorBody(err, '保存小数位数失败');
             }
         }
+        async extraInfo(ctx) {
+            try {
+                if (!ctx.budget) throw '项目数据错误';
+                if (ctx.budget.readOnly) throw '你无权修改附加属性';
+
+                const data = JSON.parse(ctx.request.body.data);
+                if (!data || !data.btype) throw '缺少必要参数';
+
+                const refreshData = await ctx.service.budget.saveExtraInfo(data, data.btype);
+                ctx.body = { err: 0, msg: '', data: refreshData };
+            } catch (err) {
+                this.log(err);
+                this.ajaxErrorBody(err, '保存附加属性失败');
+            }
+        }
     }
 
     return BudgetController;

+ 10 - 0
app/public/js/budget_detail.js

@@ -879,6 +879,16 @@ $(document).ready(() => {
             $('#budget-set').modal('hide');
         })
     });
+    $('#budget-extra-info-ok').click(() => {
+        const updateData = {
+            optimize_rate: parseFloat($('#bei-optimize_rate').val()),
+            profit: parseFloat($('#bei-profit').val()),
+            btype: window.location.pathname.split('/')[4]
+        };
+        postData('extra-info', updateData, function(){
+            $('#budget-extra-info').modal('hide');
+        })
+    });
 
     $('#upload-ybp-file').click(function () {
         const file = $('#ybp-file')[0];

+ 1 - 0
app/router.js

@@ -438,6 +438,7 @@ module.exports = app => {
     app.post('/sp/:id/budget/:btype/ybp', sessionAuth, subProjectCheck, budgetCheck, 'budgetController.uploadYbp');
     app.post('/sp/:id/budget/:btype/dsk', sessionAuth, subProjectCheck, budgetCheck, 'budgetController.importDsk');
     app.post('/sp/:id/budget/decimal', sessionAuth, subProjectCheck, budgetCheck, 'budgetController.decimal');
+    app.post('/sp/:id/budget/extra-info', sessionAuth, subProjectCheck, budgetCheck, 'budgetController.extraInfo');
 
     // 进度管理-标段进度
     app.get('/sp/:id/schedule/tender', sessionAuth, subProjectCheck, 'scheduleController.tender');

+ 7 - 0
app/service/budget.js

@@ -264,6 +264,13 @@ module.exports = app => {
             }
         }
 
+        async saveExtraInfo(data, page) {
+            const updateData = { id: this.ctx.budget.id };
+            updateData[page + '_profit'] = data.profit || 0;
+            updateData[page + '_optimize_rate'] = data.optimize_rate || 0;
+            await this.defaultUpdate(updateData);
+        }
+
         async doFinal(budget, final, stage, contract) {
             const finalObj = new FinalObj(this.ctx);
             let finalData;

+ 29 - 1
app/view/budget/detail_modal.ejs

@@ -47,7 +47,29 @@
         </div>
     </div>
 </div>
-
+<div class="modal fade" id="budget-extra-info" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">附加属性</h5>
+            </div>
+            <div class="modal-body">
+                <div class="form-group">
+                    <label for="">设计优化率(%):</label>
+                    <input type="number" class="form-control form-control-sm nospin" id="bei-optimize_rate" value="<%- optimize_rate %>" onchange="checkNumberValid(this)">
+                </div>
+                <div class="form-group">
+                    <label for="">收益金额:</label>
+                    <input type="number" class="form-control form-control-sm nospin" id="bei-profit" value="<%- profit %>" onchange="checkNumberValid(this)">
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-sm btn-primary" id="budget-extra-info-ok" data-dismiss="modal">确定</button>
+            </div>
+        </div>
+    </div>
+</div>
 <!--上传计价文件-->
 <div class="modal fade" id="import-dsk" data-backdrop="static" aria-modal="true">
     <div class="modal-dialog" role="document" style="width:400px">
@@ -113,3 +135,9 @@
     </div>
 </div>
 <% include ../shares/dsk_modal.ejs %>
+<script>
+    function checkNumberValid(obj) {
+        const value = _.toNumber(obj.value);
+        obj.value = value ? value : '';
+    }
+</script>

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

@@ -14,5 +14,10 @@
 <% } %>
 <!--<nav-menu title="输出报表" url="/sp/<%= ctx.subProject.id %>/budget/report" ml="3" active="<%= ctx.url.indexOf('/report') %>"></nav-menu>-->
 <% if (!ctx.budget.readOnly && (ctx.url.indexOf('/gu') > 0 || ctx.url.indexOf('/gai') > 0 || ctx.url.indexOf('/yu') > 0 || ctx.url.indexOf('/zb') > 0 || ctx.url.indexOf('/ctrl') > 0 || ctx.url.indexOf('/real') > 0)) { %>
-<div class="contarl-box"><button class="btn btn-primary btn-sm btn-block" data-toggle="modal" data-target="#budget-set">设置</button></div>
+<div class="contarl-box">
+    <button class="btn btn-primary btn-sm btn-block" data-toggle="modal" data-target="#budget-set">设置</button>
+    <% if ( ctx.url.indexOf('/ctrl') > 0 || ctx.url.indexOf('/real') > 0) { %>
+    <button class="btn btn-primary btn-sm btn-block" data-toggle="modal" data-target="#budget-extra-info">附加属性</button>
+    <% } %>
+</div>
 <% } %>

+ 6 - 0
sql/update.sql

@@ -69,6 +69,12 @@ ADD COLUMN `real_bills_id` varchar(255) CHARACTER SET ascii COLLATE ascii_genera
 ALTER TABLE `zh_sub_project_info`
 ADD COLUMN `proj_scale` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '建设项目规模' AFTER `chief_department`;
 
+ALTER TABLE `zh_budget`
+ADD COLUMN `ctrl_optimize_rate` decimal(24, 8) NOT NULL DEFAULT 0 COMMENT '控制目标-优化率' AFTER `final_type`,
+ADD COLUMN `ctrl_profit` decimal(24, 8) NOT NULL DEFAULT 0 COMMENT '控制目标-收益金额' AFTER `ctrl_optimize_rate`,
+ADD COLUMN `real_optimize_rate` decimal(24, 8) NOT NULL DEFAULT 0 COMMENT '实际投资-优化率' AFTER `ctrl_profit`,
+ADD COLUMN `real_profit` decimal(24, 8) NOT NULL DEFAULT 0 COMMENT '实际投资-收益金额' AFTER `real_optimize_rate`;
+
 ------------------------------------
 -- 表数据
 ------------------------------------