Browse Source

Task#3084 千分位相关

MaiXinRong 5 years ago
parent
commit
ec4c3143e1

+ 4 - 0
app/const/tender_info.js

@@ -92,6 +92,10 @@ const defaultInfo = {
             dgnQty: false,
             clQty: false,
         },
+        thousandth: false,
+        stage: {
+            realComplete: false,
+        }
     },
     chapter: [
         {code: '100', name: '总则'},

+ 1 - 0
app/controller/ledger_audit_controller.js

@@ -62,6 +62,7 @@ module.exports = app => {
             try {
                 const renderData = {
                     tender: ctx.tender.data,
+                    tenderInfo: ctx.tender.info,
                     tenderMenu: this.menu.tenderMenu,
                     preUrl: '/tender/' + ctx.tender.id,
                     measureType,

+ 1 - 1
app/lib/stage_im.js

@@ -61,7 +61,7 @@ class StageIm {
         this.ImData = [];
         this.ImBillsData = [];
         //
-        this.imFields = ['uuid', 'doc_code', 'peg', 'bw', 'xm', 'drawing_code', 'calc_memo', 'calc_memo_org', 'calc_memo_remark', 'calc_img', 'position', 'jldy'];
+        this.imFields = ['uuid', 'doc_code', 'peg', 'bw', 'xm', 'drawing_code', 'calc_memo', 'calc_memo_org', 'calc_img_remark', 'calc_img', 'position', 'jldy'];
         this.splitChar = '-';
     }
 

+ 1 - 0
app/public/js/ledger.js

@@ -940,6 +940,7 @@ $(document).ready(function() {
         },
     };
     sjsSettingObj.setFxTreeStyle(ledgerSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(ledgerSpreadSetting);
     ledgerTreeCol.initSpreadSetting(ledgerSpreadSetting);
     SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), ledgerSpreadSetting);
     SpreadJsObj.selChangedRefreshBackColor(ledgerSpread.getActiveSheet());

+ 1 - 0
app/public/js/ledger_audit.js

@@ -36,6 +36,7 @@ $(document).ready(() => {
     }
     const ledgerTree = createNewPathTree('fx', treeSetting);
     sjsSettingObj.setFxTreeStyle(ledgerSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(ledgerSpreadSetting);
     SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), ledgerSpreadSetting);
 
     // 初始化 部位明细

+ 2 - 0
app/public/js/ledger_bwtz.js

@@ -14,10 +14,12 @@ $(document).ready(() => {
     const xmjSpread = SpreadJsObj.createNewSpread($('#xmj-spread')[0]);
     const xmjSheet = xmjSpread.getActiveSheet();
     sjsSettingObj.setFxTreeStyle(xmjSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(xmjSpreadSetting);
     SpreadJsObj.initSheet(xmjSheet, xmjSpreadSetting);
 
     const unitSpread = SpreadJsObj.createNewSpread($('#unit-spread')[0]);
     const unitSheet = unitSpread.getActiveSheet();
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(xmjSpreadSetting);
     SpreadJsObj.initSheet(unitSheet, unitSpreadSetting);
 
     const unitTreeObj = {

+ 11 - 7
app/public/js/ledger_gather.js

@@ -11,7 +11,7 @@
 $(document).ready(() => {
     autoFlashHeight();
     const gclSpread = SpreadJsObj.createNewSpread($('#gcl-spread')[0]);
-    SpreadJsObj.initSheet(gclSpread.getActiveSheet(), {
+    const gclSpreadSetting = {
         cols: [
             {title: '清单编号', colSpan: '1', rowSpan: '2', field: 'b_code', hAlign: 0, width: 120, formatter: '@'},
             {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 230, formatter: '@'},
@@ -37,17 +37,19 @@ $(document).ready(() => {
             colWidth: true,
         },
         getColor: function (sheet, data, row, col, defaultColor) {
-            return data 
-                ? $('#compare-tag')[0].checked && data.compare_differ 
-                    ? '#f8d7da' 
+            return data
+                ? $('#compare-tag')[0].checked && data.compare_differ
+                    ? '#f8d7da'
                     : (data.differ ? '#FFE699' : defaultColor)
                 : defaultColor;
             //return data && data.differ ? '#FFE699' : defaultColor;
         }
-    });
+    };
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(gclSpreadSetting);
+    SpreadJsObj.initSheet(gclSpread.getActiveSheet(), gclSpreadSetting);
     const gclSheet = gclSpread.getActiveSheet();
     const leafXmjSpread = SpreadJsObj.createNewSpread($('#leaf-xmj-spread')[0]);
-    SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), {
+    const leafXmjSpreadSetting = {
         cols: [
             {title: '项目节编号', colSpan: '1', rowSpan: '1', field: 'code', hAlign: 0, width: 120, formatter: '@'},
             {title: '台账数量', colSpan: '1', rowSpan: '1', field: 'quantity', hAlign: 2, width: 80, type: 'Number'},
@@ -70,7 +72,9 @@ $(document).ready(() => {
             key: 'ledger-gather-leafXmj',
             colWidth: true,
         },
-    });
+    };
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(leafXmjSpreadSetting);
+    SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), leafXmjSpreadSetting);
     const leafXmjSheet = leafXmjSpread.getActiveSheet();
 
     let gclGatherData;

+ 2 - 0
app/public/js/measure_compare.js

@@ -98,9 +98,11 @@ $(document).ready(() => {
     const billsSpread = SpreadJsObj.createNewSpread($('#bills-spread')[0]);
     const billsSheet = billsSpread.getActiveSheet();
     sjsSettingObj.setFxTreeStyle(billsSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(billsSpreadSetting);
     SpreadJsObj.initSheet(billsSheet, billsSpreadSetting);
     const posSpread = SpreadJsObj.createNewSpread($('#pos-spread')[0]);
     const posSheet = posSpread.getActiveSheet();
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(posSpreadSetting);
     SpreadJsObj.initSheet(posSheet, posSpreadSetting);
 
     $.subMenu({

+ 2 - 0
app/public/js/revise.js

@@ -35,10 +35,12 @@ $(document).ready(() => {
     const billsSpread = SpreadJsObj.createNewSpread($('#bills-spread')[0]);
     const billsSheet = billsSpread.getActiveSheet();
     sjsSettingObj.setFxTreeStyle(billsSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(billsSpreadSetting);
     SpreadJsObj.initSheet(billsSheet, billsSpreadSetting);
     const posSpread = SpreadJsObj.createNewSpread($('#pos-spread')[0]);
     const posSheet = posSpread.getActiveSheet();
     sjsSettingObj.setGridSelectStyle(posSpreadSetting);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(posSpreadSetting);
     SpreadJsObj.initSheet(posSheet, posSpreadSetting);
 
     const posSearch = $.posSearch({selector: '#pos-search', searchSpread: posSpread});

+ 2 - 0
app/public/js/revise_history.js

@@ -15,10 +15,12 @@ $(document).ready(() => {
     const billsSpread = SpreadJsObj.createNewSpread($('#bills-spread')[0]);
     const billsSheet = billsSpread.getActiveSheet();
     sjsSettingObj.setFxTreeStyle(billsSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(billsSpreadSetting);
     SpreadJsObj.initSheet(billsSheet, billsSpreadSetting);
     const posSpread = SpreadJsObj.createNewSpread($('#pos-spread')[0]);
     const posSheet = posSpread.getActiveSheet();
     sjsSettingObj.setGridSelectStyle(posSpreadSetting);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(posSpreadSetting);
     SpreadJsObj.initSheet(posSheet, posSpreadSetting);
 
     const posSearch = isTz ? $.posSearch({selector: '#pos-search', searchSpread: posSpread}) : null;

+ 15 - 1
app/public/js/shares/sjs_setting.js

@@ -38,5 +38,19 @@ const sjsSettingObj = (function () {
     const setGridSelectStyle = function (setting) {
         setting.selectedBackColor = '#fffacd';
     };
-    return {setFxTreeStyle, FxTreeStyle, setGridSelectStyle};
+    const setTpThousandthFormat = function (setting, fields = []) {
+        for (const col of setting.cols) {
+            if (col.field === 'total_price' || col.field.indexOf('tp') >= 0 || fields.indexOf(col.field) >= 0)
+                col.formatter = '0.000';
+        }
+    };
+    const setThousandthFormat = function (setting, fields) {
+        for (const f of fields) {
+            const col = setting.cols.find(function (x) {
+                return x.field === f
+            });
+            if (col) col.formatter = '0.000';
+        }
+    };
+    return {setFxTreeStyle, FxTreeStyle, setGridSelectStyle, setTpThousandthFormat, setThousandthFormat};
 })();

+ 9 - 0
app/public/js/spreadjs_rela/spreadjs_zh.js

@@ -478,6 +478,15 @@ const SpreadJsObj = {
                 cell.locked(col.readOnly || sheet.zh_setting.readOnly || false).vAlign(1).hAlign(col.hAlign);
             }
 
+            // if(col.type === 'Number') {
+            //     if (col.formatter) {
+            //         cell.formatter(SpreadJsObj.Formatter.getNumberFormatter(col.formatter))
+            //     } else {
+            //         cell.formatter(SpreadJsObj.Formatter.getNumberFormatter('0.######'));
+            //     }
+            // } else if (col.formatter) {
+            //     cell.formatter(col.formatter);
+            // }
             if (col.formatter) {
                 cell.formatter(col.formatter);
             } else if (col.type === 'Number') {

+ 2 - 0
app/public/js/stage.js

@@ -492,6 +492,7 @@ $(document).ready(() => {
         }
     };
     sjsSettingObj.setFxTreeStyle(ledgerSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(ledgerSpreadSetting);
     SpreadJsObj.initSheet(slSpread.getActiveSheet(), ledgerSpreadSetting);
     slSpread.getActiveSheet().frozenColumnCount(5);
     slSpread.getActiveSheet().options.frozenlineColor = '#93b5e4';
@@ -517,6 +518,7 @@ $(document).ready(() => {
         return data && data.end_contract_qty > data.quantity ? '#f8d7da' : defaultColor;
     };
     sjsSettingObj.setGridSelectStyle(posSpreadSetting);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(posSpreadSetting);
     SpreadJsObj.initSheet(spSpread.getActiveSheet(), posSpreadSetting);
 
     const errorList = $.cs_errorList({

+ 2 - 0
app/public/js/stage_bwtz.js

@@ -17,10 +17,12 @@ $(document).ready(() => {
     const xmjSpread = SpreadJsObj.createNewSpread($('#xmj-spread')[0]);
     const xmjSheet = xmjSpread.getActiveSheet();
     sjsSettingObj.setFxTreeStyle(xmjSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(xmjSpreadSetting);
     SpreadJsObj.initSheet(xmjSheet, xmjSpreadSetting);
 
     const unitSpread = SpreadJsObj.createNewSpread($('#unit-spread')[0]);
     const unitSheet = unitSpread.getActiveSheet();
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(xmjSpreadSetting);
     SpreadJsObj.initSheet(unitSheet, unitSpreadSetting);
 
     const unitTreeObj = {

+ 2 - 0
app/public/js/stage_compare.js

@@ -86,10 +86,12 @@ $(document).ready(function () {
     const ledgerSpread = SpreadJsObj.createNewSpread($('#ledger-spread')[0]);
     const ledgerSheet = ledgerSpread.getActiveSheet();
     sjsSettingObj.setFxTreeStyle(ledgerSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(ledgerSpreadSetting);
     SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), ledgerSpreadSetting);
     // 初始化部位
     const posSpread = SpreadJsObj.createNewSpread($('#pos-spread')[0]);
     sjsSettingObj.setGridSelectStyle(posSpreadSetting);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(posSpreadSetting);
     SpreadJsObj.initSheet(posSpread.getActiveSheet(), posSpreadSetting);
 
     $.subMenu({

+ 2 - 0
app/public/js/stage_gather.js

@@ -59,9 +59,11 @@ $(document).ready(function () {
             ? (data.overRange ? '#f8d7da' : data.differ ? '#FFE699' : defaultColor)
             : defaultColor;
     };
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(gclSpreadSetting);
     SpreadJsObj.initSheet(gclSpread.getActiveSheet(), gclSpreadSetting);
     // 初始化所属项目节
     const leafXmjSpread = SpreadJsObj.createNewSpread($('#leaf-xmj-spread')[0]);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(leafXmjSpreadSetting);
     SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), leafXmjSpreadSetting);
 
     let gclGatherData;

+ 1 - 0
app/public/js/stage_pay.js

@@ -280,6 +280,7 @@ $(document).ready(() => {
         },
     };
     SpreadJsObj.initSpreadSettingEvents(paySpreadSetting, payCol);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(paySpreadSetting, ['sprice', 'rprice']);
     SpreadJsObj.initSheet(paySpread.getActiveSheet(), paySpreadSetting);
     SpreadJsObj.loadSheetData(paySpread.getActiveSheet(), SpreadJsObj.DataType.Data, dealPay);
 

+ 1 - 0
app/view/ledger/audit.ejs

@@ -95,6 +95,7 @@
 </div>
 <script type="text/javascript">
     const tender = JSON.parse('<%- JSON.stringify(tender) %>');
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
     const measureType = JSON.parse('<%- JSON.stringify(measureType) %>');
     let ledgerSpreadSetting = '<%- ledgerSpreadSetting %>';
     ledgerSpreadSetting = JSON.parse(ledgerSpreadSetting);

+ 1 - 0
app/view/ledger/bwtz.ejs

@@ -123,5 +123,6 @@
             colWidth: true,
         }
     };
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
     const decimal = <%- ctx.tender.info.decimal.tp %>;
 </script>

+ 1 - 0
app/view/ledger/explode.ejs

@@ -175,6 +175,7 @@
     const readOnly = <%- ctx.tender.ledgerReadOnly %>;
     const tender = JSON.parse('<%- JSON.stringify(tender) %>');
     const tenderInfo = JSON.parse('<%- JSON.stringify(tenderInfo) %>');
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
     const measureType = JSON.parse('<%- JSON.stringify(measureType) %>');
     let ledgerSpreadSetting = '<%- ledgerSpreadSetting %>';
     ledgerSpreadSetting = JSON.parse(ledgerSpreadSetting);

+ 2 - 1
app/view/ledger/gather.ejs

@@ -66,5 +66,6 @@
     </div>
 </div>
 <script>
-    chapter = JSON.parse('<%- JSON.stringify(ctx.tender.info.chapter) %>');
+    const chapter = JSON.parse('<%- JSON.stringify(ctx.tender.info.chapter) %>');
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
 </script>

+ 4 - 1
app/view/measure/compare.ejs

@@ -55,4 +55,7 @@
             </div>
         </div>
     </div>
-</div>
+</div>
+<script>
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
+</script>

+ 10 - 0
app/view/measure/stage.ejs

@@ -45,6 +45,15 @@
                         </td>
                         <td class="text-center"><%- s.s_time %></td>
                         <td class="text-center"><%- s.period %></td>
+                        <% if (ctx.tender.info.display.thousandth) { %>
+                        <td class="text-right"><%- (s.contract_tp ? s.contract_tp.toFixed(3) : '')%></td>
+                        <td class="text-right"><%- (s.qc_tp ? s.qc_tp.toFixed(3) : '')%></td>
+                        <td class="text-right"><%- (s.tp ? s.tp.toFixed(3) : '')%></td>
+                        <td class="text-right"><%- (s.pre_tp ? s.pre_tp.toFixed(3) : '')%></td>
+                        <td class="text-right"><%- (s.end_tp ? s.end_tp.toFixed(3) : '')%></td>
+                        <td class="text-right"><%- (s.yf_tp ? s.yf_tp.toFixed(3) : '') %></td>
+                        <td class="text-right"><%- (s.sf_tp ? s.sf_tp.toFixed(3) : '') %></td>
+                        <% } else { %>
                         <td class="text-right"><%- (s.contract_tp ? s.contract_tp : '')%></td>
                         <td class="text-right"><%- (s.qc_tp ? s.qc_tp : '')%></td>
                         <td class="text-right"><%- (s.tp ? s.tp : '')%></td>
@@ -52,6 +61,7 @@
                         <td class="text-right"><%- (s.end_tp ? s.end_tp : '')%></td>
                         <td class="text-right"><%- (s.yf_tp ? s.yf_tp : '') %></td>
                         <td class="text-right"><%- (s.sf_tp ? s.sf_tp : '') %></td>
+                        <% } %>
                         <td class="<%- auditConst.auditProgressClass[s.status] %>">
                             <% if (s.curAuditor) { %>
                             <a href="#sp-list" data-toggle="modal" data-target="#sp-list" s-order="<%- s.order %>"><%- s.curAuditor.name %><%if (s.curAuditor.role !== '' && s.curAuditor.role !== null) { %>-<%- s.curAuditor.role %><% } %></a>

+ 1 - 0
app/view/revise/history.ejs

@@ -109,4 +109,5 @@
     const readOnly = <%- readOnly %>;
     const isTz = <%- ctx.tender.data.measure_type === measureType.tz.value %>;
     const billsSpreadSetting = JSON.parse('<%- JSON.stringify(ledgerSpread) %>');
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
 </script>

+ 1 - 0
app/view/revise/info.ejs

@@ -215,4 +215,5 @@
     const isTz = <%- ctx.tender.data.measure_type === measureType.tz.value %>;
     const billsSpreadSetting = JSON.parse('<%- JSON.stringify(ledgerSpread) %>');
     const posSpreadSetting = JSON.parse('<%- JSON.stringify(posSpread) %>');
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
 </script>

+ 1 - 0
app/view/stage/bwtz.ejs

@@ -159,4 +159,5 @@
         },
     };
     const decimal = <%- ctx.tender.info.decimal.tp %>;
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
 </script>

+ 1 - 0
app/view/stage/compare.ejs

@@ -81,4 +81,5 @@
     const scCacheKey = 'stage-compare-role-' + stage.tid + '-' + stage.order;
     let scRoles = getLocalCache(scCacheKey);
     scRoles = scRoles ? scRoles.split(',') : [0];
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
 </script>

+ 2 - 1
app/view/stage/gather.ejs

@@ -101,5 +101,6 @@
         key: 'stage-gather-leafXmj',
         colWidth: true,
     }
-    chapter = JSON.parse('<%- JSON.stringify(ctx.tender.info.chapter) %>');
+    const chapter = JSON.parse('<%- JSON.stringify(ctx.tender.info.chapter) %>');
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
 </script>

+ 1 - 0
app/view/stage/index.ejs

@@ -576,6 +576,7 @@
     }
     const tender = JSON.parse('<%- JSON.stringify(tender) %>');
     const tenderInfo = JSON.parse('<%- JSON.stringify(ctx.tender.info) %>');
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
     const measureType = JSON.parse('<%- JSON.stringify(measureType) %>');
     const stage = JSON.parse('<%- JSON.stringify(ctx.stage) %>');
     const imType = JSON.parse('<%- JSON.stringify(imType) %>');

+ 2 - 1
app/view/stage/pay.ejs

@@ -38,7 +38,7 @@
                             <td><%- iBase + 1 %></td>
                             <td><%- calcBase[iBase].name %></td>
                             <td><%- calcBase[iBase].code %></td>
-                            <td><%- calcBase[iBase].value %></td>
+                            <td class="text-right"><%- (ctx.tender.info.display.thousandth ? calcBase[iBase].value.toFixed(3) : calcBase[iBase].value) %></td>
                         </tr>
                         <% } %>
                     </table>
@@ -58,6 +58,7 @@
     const dealPay = JSON.parse('<%- JSON.stringify(dealPay) %>');
     const calcBase = JSON.parse('<%- JSON.stringify(calcBase) %>');
     const decimal = JSON.parse('<%- JSON.stringify(ctx.tender.info.decimal) %>');
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
     const whiteList = JSON.parse('<%- JSON.stringify(whiteList) %>');
     const uploadPermission = <%- uploadPermission %>;
     const preContractTp = <%- (pre.contract_tp || 0) %>;

+ 46 - 4
app/view/tender/detail.ejs

@@ -181,7 +181,13 @@
                 name : '金额',
                 position:'left',
                 axisLabel : {
+                    <% if (ctx.tender.info.display.thousandth) { %>
+                    formatter: function (value, index) {
+                        return value.toFixed(3) + ' 元'
+                    }
+                    <% } else { %>
                     formatter: '{value} 元'
+                    <% } %>
                 },
                 splitArea : {show : true},
                 splitLine : {show : true},
@@ -201,7 +207,16 @@
             {
                 name:'本期合同计量',
                 type:'bar',
-                tooltip : {trigger: 'item',formatter: "{b}  <br/>{a}:{c}元"},
+                tooltip : {
+                    trigger: 'item',
+                    <% if (ctx.tender.info.display.thousandth) { %>
+                    formatter: function (params, ticket, callback) {
+                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.toFixed(3) + ' 元';
+                    }
+                    <% } else { %>
+                    formatter: '{value} 元'
+                    <% } %>
+                },
                 stack: '合同',
                 data:[
                     <% for (const s of stages) {%>
@@ -212,7 +227,16 @@
             {
                 name:'本期数量变更计量',
                 type:'bar',
-                tooltip : {trigger: 'item',formatter: "{b}  <br/>{a}:{c}元"},
+                tooltip : {
+                    trigger: 'item',
+                    <% if (ctx.tender.info.display.thousandth) { %>
+                    formatter: function (params, ticket, callback) {
+                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.toFixed(3) + ' 元';
+                    }
+                    <% } else { %>
+                    formatter: '{value} 元'
+                    <% } %>
+                },
                 stack: '变更',
                 data:[
                     <% for (const s of stages) {%>
@@ -223,7 +247,16 @@
             {
                 name:'截至上期累计完成',
                 type:'bar',
-                tooltip : {trigger: 'item',formatter: "{b}  <br/>{a}:{c}元"},
+                tooltip : {
+                    trigger: 'item',
+                    <% if (ctx.tender.info.display.thousandth) { %>
+                    formatter: function (params, ticket, callback) {
+                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.toFixed(3) + ' 元';
+                    }
+                    <% } else { %>
+                    formatter: '{value} 元'
+                    <% } %>
+                },
                 stack: '完成',
                 data:[
                     <% for (const s of stages) {%>
@@ -234,7 +267,16 @@
             {
                 name:'本期完成计量',
                 type:'bar',
-                tooltip : {trigger: 'item',formatter: "{b}  <br/>{a}:{c}元"},
+                tooltip : {
+                    trigger: 'item',
+                    <% if (ctx.tender.info.display.thousandth) { %>
+                    formatter: function (params, ticket, callback) {
+                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.toFixed(3) + ' 元';
+                    }
+                    <% } else { %>
+                    formatter: '{value} 元'
+                    <% } %>
+                },
                 stack: '完成',
                 data:[
                     <% for (const s of stages) {%>

+ 13 - 1
app/view/tender/detail_modal.ejs

@@ -501,10 +501,18 @@
                         <input type="checkbox" class="form-check-input" id="ledger-dgn-qty" checked="">
                         <label class="form-check-label" for="ledger-dgn-qty">项目节数量</label>
                     </div>
-                    <div class="custom-control custom-checkbox">
+                    <div class="custom-control custom-checkbox mb-2">
                         <input type="checkbox" class="form-check-input" id="ledger-cl-qty" checked="">
                         <label class="form-check-label" for="ledger-cl-qty">错漏增减</label>
                     </div>
+                    <div class="custom-control custom-checkbox mb-2">
+                        <input type="checkbox" class="form-check-input" id="thousandth" checked="">
+                        <label class="form-check-label" for="thousandth">千分位</label>
+                    </div>
+                    <div class="custom-control custom-checkbox mb-2">
+                        <input type="checkbox" class="form-check-input" id="stage-rc" checked="">
+                        <label class="form-check-label" for="stage-rc">实际完成量</label>
+                    </div>
                 </div>
             </div>
             <div class="modal-footer">
@@ -1071,6 +1079,8 @@
     function loadDisplayProperty () {
         $('#ledger-dgn-qty')[0].checked = property.display.ledger.dgnQty;
         $('#ledger-cl-qty')[0].checked = property.display.ledger.clQty;
+        $('#thousandth')[0].checked = property.display.thousandth;
+        $('#stage-rc')[0].checked = property.display.stage.realComplete;
     }
     $('#bd-set-5').on('show.bs.modal', function () {
         loadDisplayProperty();
@@ -1079,6 +1089,8 @@
         const prop = {
             display: {
                 ledger: { dgnQty: $('#ledger-dgn-qty')[0].checked, clQty: $('#ledger-cl-qty')[0].checked, },
+                thousandth: $('#thousandth')[0].checked,
+                stage: { realComplete: $('#stage-rc')[0].checked, },
             },
         };
         const tenderId = window.location.pathname.split('/')[2];

+ 1 - 0
app/view/tender/index.ejs

@@ -16,4 +16,5 @@
     const uid = '<%- uid %>';
     const pid = '<%- pid %>';
     const uphlname = 'user_' + uid + '_pro_' + pid + '_category_hide_list';
+    const thousandth = <%- ctx.tender.info.display.thousandth %>;
 </script>

+ 2 - 0
builder_report_index_define.js

@@ -636,6 +636,7 @@ const stage_im_zl = {
         { name: '台账金额', field: 'total_price', type: dataType.currency },
         { name: '位置', field: 'position', type: dataType.str },
         { name: '计量单元', field: 'jldy', type: dataType.str },
+        { name: '草图备注', field: 'calc_memo_remark', type: dataType.str },
     ],
 };
 const stage_im_tz = {
@@ -671,6 +672,7 @@ const stage_im_tz = {
         { name: '截止本期 - 变更金额', field: 'end_qc_jl', type: dataType.currency },
         { name: '位置', field: 'position', type: dataType.str },
         { name: '计量单元', field: 'jldy', type: dataType.str },
+        { name: '草图备注', field: 'calc_img_remark', type: dataType.str },
     ],
 };
 const stage_im_tz_bills = {

+ 3 - 0
config/web.js

@@ -202,6 +202,7 @@ const JsFiles = {
                     '/public/js/sub_menu.js',
                     '/public/js/div_resizer.js',
                     '/public/js/spreadjs_rela/spreadjs_zh.js',
+                    '/public/js/shares/sjs_setting.js',
                     '/public/js/zh_calc.js',
                     '/public/js/path_tree.js',
                     '/public/js/gcl_gather.js',
@@ -319,6 +320,7 @@ const JsFiles = {
                 mergeFiles: [
                     '/public/js/sub_menu.js',
                     '/public/js/spreadjs_rela/spreadjs_zh.js',
+                    '/public/js/shares/sjs_setting.js',
                     '/public/js/shares/cs_tools.js',
                     '/public/js/stage_pay.js',
                     '/public/js/stage_audit.js',
@@ -376,6 +378,7 @@ const JsFiles = {
                     '/public/js/sub_menu.js',
                     '/public/js/div_resizer.js',
                     '/public/js/spreadjs_rela/spreadjs_zh.js',
+                    '/public/js/shares/sjs_setting.js',
                     '/public/js/shares/cs_tools.js',
                     '/public/js/zh_calc.js',
                     '/public/js/path_tree.js',