| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 | 'use strict';/** * * * @author Mai * @date 2018/4/23 * @version */$(document).ready(function () {    /**     * 判断是否是 加减乘除 符号     * @param value     * @returns {boolean}     */    const isOperate1 = function (value) {        const operatorString = "+-*/";        return operatorString.indexOf(value) > -1;    };    // 删除规则计算参数按钮是否显示    const refreshDelParamVisible = function () {        if ($('#rule').children().length > 1) {            $('#delParam').show();        } else {            $('#delParam').hide();        }    };    // 合成新增参数的html    const addParamHtml = function (html, param) {        if (!param || param.length === 0) { return; }        html.push('<span class="badge badge-light" title="' + param.text() + '"');        html.push(' name="' + param.text() + '"');        html.push(' code="' + param.attr('value') + '">');        html.push(param.text());        html.push('</span>');    };    // 弹窗设置指标计算规则    $('a[name=setRule]').click(function () {        const isOperator = function (value) {            const operatorString = "+-*/()";            return operatorString.indexOf(value) > -1;        };        const splitByOperator = function (expr) {            const exprStack = [];            const result = [];            for(let i = 0, len = expr.length; i < len; i++){                const cur = expr[i];                if(cur !== ' ' ){                    exprStack.push(cur);                }            }            let param = '', isParamBefore = false;            while(exprStack.length > 0){                const cur = exprStack.shift();                if (isOperator(cur)) {                    if (isParamBefore) {                        result.push(param);                        param = '';                    }                    result.push(cur);                    isParamBefore = false;                } else {                    param = param + cur;                    isParamBefore = true;                    if (exprStack.length === 0) {                        result.push(param);                        param = '';                    }                }            }            return result;        };        const rule = $(this).attr('value');        const index = this.parentNode.parentNode;        $('#rule').attr('curIndex', index.attributes['index_id'].nodeValue);        $('span', $('#rule')).remove();        const html = [];        const params = splitByOperator(rule);        for (let i = 0, iLen = params.length; i < iLen; i++) {            if (isOperator(params[i])) {                html.push('<span class="badge badge-light" title="' + params[i] + '" code="' + params[i] + '" name="' + params[i] + '">' + params[i] + '</span>');            } else {                const p = $('option[value='+ params[i] +']:first');                addParamHtml(html, p);            }        }        $('#delParam').before(html.join(''));        refreshDelParamVisible();        $('#set-count').modal('show');    });    // 编辑计算规则,选择要添加的计算参数类型    $('#paramType').change(function () {        const param = this.selectedIndex === 0 ? 'globalParams' : (this.selectedIndex === 1 ? 'nodeParams' : 'calcParams');        $('div[name=param]').hide();        $('#' + param).show();    });    // 编辑计算规则,添加计算参数到规则    $('#addParam').click(function () {        const lastParam = $('#delParam').prev();        const paramType = $('#paramType')[0];        const addParam = function () {            const paramId = paramType.selectedIndex === 0 ? 'globalParams' : (paramType.selectedIndex === 1 ? 'nodeParams' : 'calcParams');            const paramSelect = $('select', $('#' + paramId))[0];            if (paramSelect.children.length > 0 && paramSelect.selectedIndex >= 0) {                const param = paramSelect.children[paramSelect.selectedIndex];                const html = [];                addParamHtml(html, $(param));                $('#delParam').before(html.join(''));                $('#paramAlert').hide();            } else {                $('#paramAlert').text('无选定参数').show();            }        };        if (lastParam && lastParam.length > 0) {            const calcSelect = $('select', $('#calcParams'))[0];            if (isOperate1(lastParam.attr('code'))) {                if (paramType.selectedIndex === 2) {                    if (calcSelect.selectedIndex !== 4) {                        $('#paramAlert').text('计算式后请输入参数').show();                    } else {                        addParam();                    }                } else {                    addParam();                }            } else if (lastParam.attr('code') === '(') {                if (paramType.selectedIndex === 2) {                    $('#paramAlert').text('左括号后请输入参数').show();                } else {                    addParam();                }            } else if (lastParam.attr('code') === ')') {                if (paramType.selectedIndex === 2) {                    if (calcSelect.selectedIndex < 4) {                        addParam();                    } else {                        $('#paramAlert').text('右括号后请输入计算式').show();                    }                } else {                    $('#paramAlert').text('右括号后请输入计算式').show();                }            } else {                if (paramType.selectedIndex === 2) {                    if (calcSelect.selectedIndex === 4) {                        $('#paramAlert').text('2个参数之间需要一个计算式').show();                    } else {                        addParam();                    }                } else {                    $('#paramAlert').text('2个参数之间需要一个计算式').show();                }            }            // if (!isOperate1(lastParam.attr('code')) && paramType.selectedIndex !== 2) {            //     $('#paramAlert').text('2个参数之间需要一个计算式').show();            // } else if (isOperate1(lastParam.attr('code')) && paramType.selectedIndex === 2 ) {            //     const paramSelect = $('select', $('#calcParams'));            //     if (paramSelect.selectedIndex === 4) {            //         addParam();            //     } else if (paramSelect.selectedIndex === 5) {            //         const leftBracket = $('span[code=(]');            //         const rightBracket = $('span[code=)]');            //         if (leftBracket.length > rightBracket.length) {            //             addParam();            //         } else {            //             $('#paramAlert').text('添加")"前请先添加"("').show();            //         }            //     } else {            //         $('#paramAlert').text('计算式后只可添加参数').show();            //     }            // } else {            //     addParam();            // }        } else if (paramType.selectedIndex === 2) {            const paramSelect = $('select', $('#calcParams'));            if (paramSelect.selectedIndex === 4) {                addParam()            } else {                $('#paramAlert').text('计算式前需含有参数').show();            }        } else {            addParam();        }    });    // 编辑计算规则,删除规则中计算参数    $('#delParam').click(function () {        $('#delParam').prev().remove();        refreshDelParamVisible();    });    // 设置指标计算规则    $('#ruleOk').click(function () {        const lastParam = $('#delParam').prev();        const leftBracket = $("span[code='(']").length, rightBracket = $("span[code=')']").length;        if (!lastParam) {            $('#paramAlert').text('未设置计算规则').show();        } else if (isOperate1(lastParam.attr('code'))) {            $('#paramAlert').text('计算式后应添加参数').show();        } else if (lastParam.attr('code') === '(' || leftBracket !== rightBracket) {            $('#paramAlert').text('计算式错误,请检查').show();        } else {            const indexRow = $('tr[index_id=' + $('#rule').attr('curIndex') + ']');            const params = $('span', $('#rule'));            const data = {                id: $('#rule').attr('curIndex'),                rule: '',                calc_rule: '',                parse_rule: '',            };            for (const p of params) {                const code = $(p).attr('code');                const name = $(p).attr('name');                data.rule = data.rule + name;                data.calc_rule = data.calc_rule + code;                data.parse_rule = code === name ? data.parse_rule + code : data.parse_rule + code + '(' + name + ')';            }            postData('/template/setIndexRule', data, function () {                $('a', indexRow).val(data.calc_rule);                $('td[name=rule]', indexRow).text(data.rule);                const aHtml = $('a', indexRow)[0].outerHTML;                $('td[name=parse_rule]', indexRow).empty();                $('td[name=parse_rule]', indexRow).append(data.parse_rule + aHtml);                $('paramAlert').hide();                $('#set-count').modal('hide');            }, function () {                $('#paramAlert').text('提交计算规则失败,请重试').show();            })        }    });    // 指标节点,绑定分项节点    $('#nodeMatchCode').blur(function () {        const self = $(this);        if (self.val() === self.attr('org-value')) { return; }        const nodeId = GetUrlQueryString('id');        postData('/template/updateNodeMatch', {            id: nodeId ? nodeId : 1,            match_key: $(this).val(),        }, function (data) {            self.attr('org-value', data.match_key);            self.attr('title', data.match_type_str);            self.attr('data-original-title', data.match_type_str);;        }, function (data) {            self.val(data.match_key);            self.attr('org-value', data.match_key);            self.attr('title', data.match_type_str);            self.attr('data-original-title', data.match_type_str);;        });    });    // 指标参数,绑定参数取值(分项编号)    $('input[name=nodeParamMatchCode]').blur(function () {        const self = $(this);        if (self.val() === self.attr('org-value')) { return; }        const nodeId = GetUrlQueryString('id');        const paramCode = $(this).parent().parent().prev().attr('code');        postData('/template/updateParamMatch', {            node_id: nodeId ? nodeId : 1,            code: paramCode,            match_key: $(this).val(),        }, function (data) {            self.attr('org-value', data.match_key);        }, function () {            self.val(self.attr('org-value'));        })    });    // 全局指标参数,绑定参数取值(分项编号)    $('input[name=globalParamMatchCode]').blur(function () {        const self = $(this);        if (self.val() === self.attr('org-value')) { return; }        const nodeId = GetUrlQueryString('id');        const paramCode = $(this).parent().parent().prev().attr('code');        postData('/template/updateParamMatch', {            node_id: 0,            code: paramCode,            match_key: $(this).val(),        }, function (data) {            self.attr('org-value', data.match_key);        }, function () {            self.val(self.attr('org-value'));        })    });    // 指标参数,选择取值类别    $('a[name=nodeParamMatchNum]').click(function () {        const self = $(this);        const newMatchNum = self.attr('value');        const oldMatchNum = self.parent().prev().val();        if (newMatchNum === oldMatchNum) { return; }        const nodeId = GetUrlQueryString('id');        const paramCode = $(this).parent().parent().parent().parent().prev().attr('code');        postData('/template/updateParamMatch', {            node_id: nodeId ? nodeId : 1,            code: paramCode,            match_num: newMatchNum,        }, function (data) {            self.parent().prev().val(data.match_num);            self.parent().prev().text(data.match_num_str);        }, function (data) {            self.parent().prev().val(data.match_num);            self.parent().prev().text(data.match_num_str);        })    });    // 全局指标参数,选择取值类别    $('a[name=globalParamMatchNum]').click(function () {        const self = $(this);        const newMatchNum = self.attr('value');        const oldMatchNum = self.parent().prev().val();        if (newMatchNum === oldMatchNum) { return; }        const paramCode = $(this).parent().parent().parent().parent().prev().attr('code');        postData('/template/updateParamMatch', {            node_id: 0,            code: paramCode,            match_num: newMatchNum,        }, function (data) {            self.parent().prev().val(data.match_num);            self.parent().prev().text(data.match_num_str);        }, function (data) {            self.parent().prev().val(data.match_num);            self.parent().prev().text(data.match_num_str);        })    });});
 |