浏览代码

千分位相关

MaiXinRong 5 年之前
父节点
当前提交
9afa80ee73

+ 54 - 0
app/extend/helper.js

@@ -845,6 +845,60 @@ module.exports = {
         if (noWan.toString().length < 4) noWan = '0' + noWan;
         return overWan ? getWan(overWan) + '万' + getWan(noWan) : getWan(num);
     },
+    formatNum(num, pattern) {
+        var strarr = num?num.toString().split('.'):['0'];
+        var fmtarr = pattern?pattern.split('.'):[''];
+        var retstr='';
+
+        // 整数部分
+        var str = strarr[0];
+        var fmt = fmtarr[0];
+        var i = str.length-1;
+        var comma = false;
+        for(var f=fmt.length-1;f>=0;f--){
+            switch(fmt.substr(f,1)){
+                case '#':
+                    if(i>=0 ) retstr = str.substr(i--,1) + retstr;
+                    break;
+                case '0':
+                    if(i>=0) retstr = str.substr(i--,1) + retstr;
+                    else retstr = '0' + retstr;
+                    break;
+                case ',':
+                    comma = true;
+                    retstr=','+retstr;
+                    break;
+            }
+        }
+        if(i>=0){
+            if(comma){
+                var l = str.length;
+                for(;i>=0;i--){
+                    retstr = str.substr(i,1) + retstr;
+                    if(i>0 && ((l-i)%3)==0) retstr = ',' + retstr;
+                }
+            }
+            else retstr = str.substr(0,i+1) + retstr;
+        }
+
+        retstr = retstr+'.';
+        // 处理小数部分
+        str=strarr.length>1?strarr[1]:'';
+        fmt=fmtarr.length>1?fmtarr[1]:'';
+        i=0;
+        for(var f=0;f<fmt.length;f++){
+            switch(fmt.substr(f,1)){
+                case '#':
+                    if(i<str.length) retstr+=str.substr(i++,1);
+                    break;
+                case '0':
+                    if(i<str.length) retstr+= str.substr(i++,1);
+                    else retstr+='0';
+                    break;
+            }
+        }
+        return retstr.replace(/^,+/,'').replace(/\.$/,'');
+    },
 
     dateTran(time) {
         return moment(time).format('YYYY年MM月DD日 HH:mm');

+ 56 - 0
app/public/js/global.js

@@ -849,3 +849,59 @@ $.fn.extend({
         }
     }
 });
+
+
+Number.prototype.format2Str = function (pattern) {
+    var strarr = this?this.toString().split('.'):['0'];
+    var fmtarr = pattern?pattern.split('.'):[''];
+    var retstr='';
+
+    // 整数部分
+    var str = strarr[0];
+    var fmt = fmtarr[0];
+    var i = str.length-1;
+    var comma = false;
+    for(var f=fmt.length-1;f>=0;f--){
+        switch(fmt.substr(f,1)){
+            case '#':
+                if(i>=0 ) retstr = str.substr(i--,1) + retstr;
+                break;
+            case '0':
+                if(i>=0) retstr = str.substr(i--,1) + retstr;
+                else retstr = '0' + retstr;
+                break;
+            case ',':
+                comma = true;
+                retstr=','+retstr;
+                break;
+        }
+    }
+    if(i>=0){
+        if(comma){
+            var l = str.length;
+            for(;i>=0;i--){
+                retstr = str.substr(i,1) + retstr;
+                if(i>0 && ((l-i)%3)==0) retstr = ',' + retstr;
+            }
+        }
+        else retstr = str.substr(0,i+1) + retstr;
+    }
+
+    retstr = retstr+'.';
+    // 处理小数部分
+    str=strarr.length>1?strarr[1]:'';
+    fmt=fmtarr.length>1?fmtarr[1]:'';
+    i=0;
+    for(var f=0;f<fmt.length;f++){
+        switch(fmt.substr(f,1)){
+            case '#':
+                if(i<str.length) retstr+=str.substr(i++,1);
+                break;
+            case '0':
+                if(i<str.length) retstr+= str.substr(i++,1);
+                else retstr+='0';
+                break;
+        }
+    }
+    return retstr.replace(/^,+/,'').replace(/\.$/,'');
+};

+ 2 - 2
app/public/js/shares/sjs_setting.js

@@ -41,7 +41,7 @@ const sjsSettingObj = (function () {
     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';
+                col.formatter = '#,##0.######';
         }
     };
     const setThousandthFormat = function (setting, fields) {
@@ -49,7 +49,7 @@ const sjsSettingObj = (function () {
             const col = setting.cols.find(function (x) {
                 return x.field === f
             });
-            if (col) col.formatter = '0.000';
+            if (col) col.formatter = '#,##0.######';
         }
     };
     return {setFxTreeStyle, FxTreeStyle, setGridSelectStyle, setTpThousandthFormat, setThousandthFormat};

+ 39 - 25
app/public/js/spreadjs_rela/spreadjs_zh.js

@@ -435,10 +435,14 @@ const SpreadJsObj = {
             }
             cell.vAlign(1).hAlign(col.hAlign);
 
-            if (col.formatter) {
+            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);
-            } else if (col.type === 'Number') {
-                cell.formatter(SpreadJsObj.Formatter.getNumberFormatter('0.######'));
             }
 
             cell.setBorder(sheet.borderLine, {all: true});
@@ -478,19 +482,14 @@ 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) {
+            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);
-            } else if (col.type === 'Number') {
-                cell.formatter(SpreadJsObj.Formatter.getNumberFormatter('0.######'));
             }
 
             cell.backColor(SpreadJsObj._getBackColor(sheet, data, row, col));
@@ -611,6 +610,15 @@ const SpreadJsObj = {
         }
         if (colSetting.formatter) {
             sheet.getRange(-1, col, -1, 1).formatter(colSetting.formatter);
+            if(colSetting.type === 'Number') {
+                if (col.formatter) {
+                    sheet.getRange(-1, col, -1, 1).formatter(SpreadJsObj.Formatter.getNumberFormatter(colSetting.formatter));
+                } else {
+                    sheet.getRange(-1, col, -1, 1).formatter(SpreadJsObj.Formatter.getNumberFormatter('0.######'));
+                }
+            } else if (col.formatter) {
+                cell.formatter(col.formatter);
+            }
         }
     },
     /**
@@ -745,7 +753,13 @@ const SpreadJsObj = {
                         cell.locked(col.readOnly || sheet.zh_setting.readOnly || false).vAlign(1).hAlign(col.hAlign);
                     }
                     // 设置单元格格式
-                    if (col.formatter) {
+                    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);
                     }
                 });
@@ -2080,9 +2094,10 @@ const SpreadJsObj = {
     },
 
     Formatter: {
-        baseNumberFormatter: (function (){
-            const formatter = {};
-            formatter.prototype = GC.Spread.Formatter.FormatterBase;
+        baseNumberFormatter: function () {
+            const formatter = function () {};
+            formatter.prototype = new GC.Spread.Formatter.FormatterBase();
+            const proto = formatter.prototype;
             /**
              * 格式化数字显示方式
              * 用法
@@ -2092,7 +2107,7 @@ const SpreadJsObj = {
              * @param num
              * @param pattern
              */
-            formatter.formatNum = function (num, pattern) {
+            proto.formatNum = function (num, pattern) {
                 var strarr = num?num.toString().split('.'):['0'];
                 var fmtarr = pattern?pattern.split('.'):[''];
                 var retstr='';
@@ -2146,23 +2161,22 @@ const SpreadJsObj = {
                 }
                 return retstr.replace(/^,+/,'').replace(/\.$/,'');
             };
-            formatter.format = function (obj, conditionalForeColor) {
+            proto.format = function (obj, formattedData) {
                 if (this.pattern) {
                     return this.formatNum(obj, this.pattern);
                 } else {
                     return obj;
                 }
             };
-            return formatter;
-        })(),
+            return new formatter();
+        },
         _numFormatter: [],
         getNumberFormatter(pattern) {
             let formatter = this._numFormatter.find(function (f) {
                 return f.pattern === pattern;
             });
             if (!formatter) {
-                formatter = {};
-                formatter.prototype = this.baseNumberFormatter.prototype;
+                formatter = this.baseNumberFormatter();
                 formatter.pattern = pattern;
                 this._numFormatter.push(formatter);
             }

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

@@ -1471,7 +1471,6 @@ $(document).ready(() => {
         },
         selectionChanged: function (e, info) {
             stagePosSpreadObj.loadExprToInput(info.sheet);
-            console.log(SpreadJsObj.getSelectObject(info.sheet));
         },
         addPegs: function (pegs) {
             if (!pegs || pegs.length <= 0) return;
@@ -2601,7 +2600,6 @@ $(document).ready(() => {
                     updateData.imgInfo = itemInfo;
                     updateData.calc_img_remark = img_remark;
                     self.updateImageData = updateData;
-                    console.log(updateData)
                     $('#calc-img').attr('src', updateData.img);
                     $('#view-calc-img').attr('src', updateData.img);
                     $('#show-calc-img').attr('src', updateData.img);

+ 7 - 7
app/view/measure/stage.ejs

@@ -46,13 +46,13 @@
                         <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>
+                        <td class="text-right"><%- (s.contract_tp ? ctx.helper.formatNum(s.contract_tp, '#,##0.######') : '')%></td>
+                        <td class="text-right"><%- (s.qc_tp ? ctx.helper.formatNum(s.qc_tp, '#,##0.######') : '')%></td>
+                        <td class="text-right"><%- (s.tp ? ctx.helper.formatNum(s.tp, '#,##0.######') : '')%></td>
+                        <td class="text-right"><%- (s.pre_tp ? ctx.helper.formatNum(s.pre_tp, '#,##0.######') : '')%></td>
+                        <td class="text-right"><%- (s.end_tp ? ctx.helper.formatNum(s.end_tp, '#,##0.######') : '')%></td>
+                        <td class="text-right"><%- (s.yf_tp ? ctx.helper.formatNum(s.yf_tp, '#,##0.######') : '') %></td>
+                        <td class="text-right"><%- (s.sf_tp ? ctx.helper.formatNum(s.sf_tp, '#,##0.######') : '') %></td>
                         <% } else { %>
                         <td class="text-right"><%- (s.contract_tp ? s.contract_tp : '')%></td>
                         <td class="text-right"><%- (s.qc_tp ? s.qc_tp : '')%></td>

+ 1 - 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 class="text-right"><%- (ctx.tender.info.display.thousandth ? calcBase[iBase].value.toFixed(3) : calcBase[iBase].value) %></td>
+                            <td class="text-right"><%- (ctx.tender.info.display.thousandth ? ctx.helper.formatNum(calcBase[iBase].value, '#,##0.######') : calcBase[iBase].value) %></td>
                         </tr>
                         <% } %>
                     </table>

+ 5 - 5
app/view/tender/detail.ejs

@@ -183,7 +183,7 @@
                 axisLabel : {
                     <% if (ctx.tender.info.display.thousandth) { %>
                     formatter: function (value, index) {
-                        return value.toFixed(3) + ' 元'
+                        return value.format2Str('#,##0.######') + ' 元'
                     }
                     <% } else { %>
                     formatter: '{value} 元'
@@ -211,7 +211,7 @@
                     trigger: 'item',
                     <% if (ctx.tender.info.display.thousandth) { %>
                     formatter: function (params, ticket, callback) {
-                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.toFixed(3) + ' 元';
+                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
                     }
                     <% } else { %>
                     formatter: '{value} 元'
@@ -231,7 +231,7 @@
                     trigger: 'item',
                     <% if (ctx.tender.info.display.thousandth) { %>
                     formatter: function (params, ticket, callback) {
-                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.toFixed(3) + ' 元';
+                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
                     }
                     <% } else { %>
                     formatter: '{value} 元'
@@ -251,7 +251,7 @@
                     trigger: 'item',
                     <% if (ctx.tender.info.display.thousandth) { %>
                     formatter: function (params, ticket, callback) {
-                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.toFixed(3) + ' 元';
+                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
                     }
                     <% } else { %>
                     formatter: '{value} 元'
@@ -271,7 +271,7 @@
                     trigger: 'item',
                     <% if (ctx.tender.info.display.thousandth) { %>
                     formatter: function (params, ticket, callback) {
-                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.toFixed(3) + ' 元';
+                        return params.name + '<br/>' + params.seriesName + ': ' + params.value.format2Str('#,##0.######') + ' 元';
                     }
                     <% } else { %>
                     formatter: '{value} 元'