main.js 4.87 KB
Newer Older
Scott Sun's avatar
s  
Scott Sun committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
var items = {
    name: 'main',
    type: 'FormGridLayout',
    property: { margin: 18, spacing: 20, columns: 3 },
    pack: {},
    child: [
        {
            name: "num1",
            type: "LineEdit",
            pack: { label: "参数1", column_span: 1, label_alignment:"Left" },
            validate: function(obj,val,title,moment,self){
                if(moment === "EDIT"){
                    // return [title+'必须小于10','Error']
                    var reg = /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g
                    if(!reg.test(val)){
                        GUI.msgbox({
                            title: '错误提示',
                            detail: '请输入数字或小数'
                        })
                        this.getObject("num1").setData("value", 0);
                    }
                }
                return
            }
        },
        {
            name: "operator",
            type: "ComboBox",
            property: {
                item_list: ["+","-","*","/","%"],
                value: "+",
            },
            pack: { label: "操作", column_span: 1, label_alignment:"Left"  },
            validate: function(obj,val,title,moment,self){
                if(moment === "EDIT"){
                    // return [title+'必须小于10','Error']
                    if(val == "") {
                         GUI.msgbox({
                            title: '错误提示',
                            detail: '请输入符号'
                        })
                    }
                }
                return
            }
        },
        {
            name: "num2",
            type: "LineEdit",
            pack: { label: "参数2", column_span: 1, label_alignment:"Left"  },
            validate: function(obj,val,title,moment,self){
                if(moment === "EDIT"){
                    // return [title+'必须小于10','Error']
                    var reg = /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g
                    if(!reg.test(val)){
                        GUI.msgbox({
                            title: '错误提示',
                            detail: '请输入数字或小数'
                        })
                        this.getObject("num2").setData("value", 0);
                    }
                }
                return
            }
        },
        {
            type: "ToolButton",
            property: {
                text: "计算"
            },
            pack: { column_span: 1, label_alignment:"Left" },
            callback: function(obj, check, self) {
                var tempData = this.getAllValues();
                var num1 = tempData.num1
                var num1len = getNumFixed(num1)
                var num2 = tempData.num2
                var num2len = getNumFixed(num2)
                var temp = num1len >= num2len ? num1len : num2len
                temp = Number("1" + Array(temp+1).join(0))
                if(!num1 || !num2){
                    GUI.msgbox({
                        title: 'err',
                        detail: "缺少参数"
                    })
                    return
                }
                operator = tempData.operator
                if(operator == ""){
                    GUI.msgbox({
                        title: 'err',
                        detail: "缺少符号"
                    })
                }
                var res = ""
                switch (operator) {
                    case "+":
                        res = (Number(num1)*temp + Number(num2)*temp)/temp
                    break;
                    case "-":
                        res = (Number(num1)*temp - Number(num2)*temp)/temp
                    break;
                    case "*":
                        res = (Number(num1)*temp * Number(num2)*temp)/temp/temp
                    break;
                    case "/":
Scott Sun's avatar
s  
Scott Sun committed
106
                        res = ((Number(num1)*temp) / (Number(num2)*temp))
Scott Sun's avatar
s  
Scott Sun committed
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
                    break;
                    case "%":
                        res = (Number(num1)*temp % Number(num2)*temp)/temp
                    break;
                    default:
                        break;
                }
                this.getObject("res").setData("value", String(res));
            }
        },
        {
            name: "res",
            type: "label",
            pack: { label: "结果", column_span: 2, label_alignment:"Left"  },
        },
        {
            type: 'stretch'
        }
    ]
}

var box = {
    title: "简易计算器",
    size: "600x400",
    items: items,
    values: {},
    self: this
}

var data = GUI.showForm(box)


function getNumFixed(num){
    if(!/\./g.test(num)){ 
        return 0
    } else {
Scott Sun's avatar
s  
Scott Sun committed
143 144
        var res = String(num).split(".")[1]
        return removeZero(res).length
Scott Sun's avatar
s  
Scott Sun committed
145
    }
Scott Sun's avatar
s  
Scott Sun committed
146 147 148 149 150 151 152 153
}

function removeZero(str){
    var s = str[str.length-1]
    if(s == "0"){
        return removeZero(str.substring(0, str.length-1)) 
    } 
    return str
Scott Sun's avatar
s  
Scott Sun committed
154
}