| 
					
				 | 
			
			
				@@ -11,8 +11,496 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $(document).ready(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     autoFlashHeight(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const materialSpread = SpreadJsObj.createNewSpread($('#material-spread')[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    materialSpread.options.allowUserDragFill = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    materialSpread.options.defaultDragFillType = spreadNS.Fill.AutoFillType.fillSeries; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     SpreadJsObj.initSheet(materialSpread.getActiveSheet(), billsSpreadSetting); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const paySpreadObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        _checkExprValid(expr, invalidParam) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!expr) return [true, null]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const param = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let num = '', base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let i = 0, iLen = expr.length; i < iLen; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (/^[\d\.%]+/.test(expr[i])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (base !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        param.push({type: 'base', value: base}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    num = num + expr[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (/^[a-z]/.test(expr[i])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (num !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        param.push({type: 'num', value: num}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    base = base + expr[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (expr[i] === '(') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (num !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        param.push({type: 'num', value: num}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (base !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        param.push({type: 'base', value: base}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    param.push({type: 'left', value: '('}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (expr[i] === ')') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (num !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        param.push({type: 'num', value: num}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (base !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        param.push({type: 'base', value: base}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    param.push({type: 'right', value: ')'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (/^[\+\-*\/]/.test(expr[i])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (num !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        param.push({type: 'num', value: num}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (base !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        param.push({type: 'base', value: base}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    param.push({type: 'calc', value: expr[i]}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return [false, '输入的表达式含有非法字符: ' + expr[i]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (num !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                param.push({type: 'num', value: num}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (base !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                param.push({type: 'base', value: base}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (param.length === 0) return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (param.length > 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (param[0].value === '-') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    param[1].value = '-' + param[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                param.unshift(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const iLen = param.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let iLeftCount = 0, iRightCount = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (const [i, p] of param.entries()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (p.type === 'calc') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (i === 0 || i === iLen - 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return [false, '输入的表达式非法:计算符号' + p.value + '前后应有数字或计算基数']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (p.type === 'num') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    num = p.value.replace('%', ''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (p.value.length - num.length > 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return [false, '输入的表达式非法:' + p.value + '不是一个有效的数字']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    num = _.toNumber(num); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (num === undefined || num === null || _.isNaN(num)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return [false, '输入的表达式非法:' + p.value + '不是一个有效的数字']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (i > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (param[i - 1].type !== 'calc') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            return [false, '输入的表达式非法:' + p.value + '前应有运算符']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else if (param[i - 1].value === '/' && num === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            return [false, '输入的表达式非法:请勿除0']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (p.type === 'base') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const baseParam = _.find(calcBase, {code: p.value}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!baseParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return [false, '输入的表达式非法:不存在计算基数' + p.value]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (invalidParam && invalidParam.indexOf(p.value) >= 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return [false, '不可使用计算基数' + p.value]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (i > 0 && param[i - 1].type === 'calc') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return [false, '输入的表达式非法:' + p.value + '前应有运算符']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (p.type === 'left') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    iLeftCount += 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (i !== 0 && param[i-1].type !== 'calc') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return [false, '输入的表达式非法:(前应有运算符']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (p.type === 'right') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    iRightCount += 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (i !== iLen - 1 && param[i+1].type !== 'calc') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return [false, '输入的表达式非法:)后应有运算符']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (iRightCount > iLeftCount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return [false, '输入的表达式非法:")"前无对应的"("']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (iLeftCount > iRightCount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return [false, '输入的表达式非法:"("后无对应的")"']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return [true, '']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        _checkSExpr: function (payNode, text, data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!payNode) return [false, '数据错误']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const num = text ? _.toNumber(text) : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let expr = text ? (num ? null : text) : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            expr = expr ? expr.replace('=', '').toLowerCase(): null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const [valid, msg] = this._checkExprValid(expr, ['bqwc', 'ybbqwc']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!valid) return [valid, msg]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (payBase.isStarted(payNode)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return [false, '已经开始计量,请勿修改起扣金额']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (stage.order > 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const value = expr ? payCalc.calculateExpr(expr) : num; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (wcPay.pre_tp && value < wcPay.pre_tp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return [false, '已进行到第' + stage.order + '期,起扣金额请勿少于本期完成截止上期计量金额' + wcPay.pre_tp]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.sprice = num; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.sexpr = expr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return [true, '']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.sprice = num; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.sexpr = expr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return [true, '']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        _checkRExpr: function (payNode, text, data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!payNode) return [false, '数据错误']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const num = text ? _.toNumber(text) : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let expr = text ? (num ? null : text) : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            expr = expr ? expr.replace('=', '').toLowerCase(): null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const [valid, msg] = this._checkExprValid(expr, ['bqwc', 'ybbqwc']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!valid) return [valid, msg]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (payBase.isStarted(payNode)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (payNode.pre_finish) return [false, '已达扣款限额,请勿修改']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const value = expr ? payCalc.calculateExpr(expr) : num; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (payNode.pre_tp && value < payNode.pre_tp) return [false, '截止上期已计量' + payNode.pre_tp + ',扣款限额请勿少于改值']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data.rprice = num; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data.rexpr = expr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return [true, '']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data.rprice = num; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data.rexpr = expr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return [true, '']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        _checkExpr: function (text, data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (text) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const num = _.toNumber(text); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (num) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.tp = num; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.expr = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const expr = text.replace('=', '').toLowerCase(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const [valid, msg] = this._checkExprValid(expr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!valid) return [valid, msg]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.expr = expr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.tp = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data.tp = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data.expr = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return [true, '']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        refreshActn: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const setObjEnable = function (obj, enable) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (enable) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.removeClass('disabled'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.addClass('disabled'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sheet = paySpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const select = SpreadJsObj.getSelectObject(sheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setObjEnable($('#add'), !readOnly); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const delValid = payBase.isOld(select) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ? !payBase.isStarted(select) && payBase.isYB() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                : payBase.isYB() || payBase.isOwner(select); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setObjEnable($('#del'), !readOnly && select && delValid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setObjEnable($('#up-move'), !readOnly && select && !payBase.isSpecial(select) && dealPay.indexOf(select) > 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setObjEnable($('#down-move'), !readOnly && select && !payBase.isSpecial(select) && dealPay.indexOf(select) < dealPay.length - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        add: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sheet = billsSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            postData(window.location.pathname + '/save', {type: 'add'}, function (result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dealPay.push(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sheet.addRows(dealPay.length - 1, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SpreadJsObj.reLoadRowData(sheet, dealPay.length - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sheet.setSelection(dealPay.length - 1, 0, 1, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    paySpreadObj.refreshActn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        del: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sheet = billsSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const select = SpreadJsObj.getSelectObject(sheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (payBase.isNonZero(select.tp)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                toast('该支付(扣款)项存在数据,如需删除请先清除本期金额!'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (payBase.isOld(select)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (payBase.isStarted(select)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    toast('该合同支付项往期已进行计算,不允许删除'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            postData(window.location.pathname + '/save', {type: 'del', id: select.pid}, function (result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const index = dealPay.indexOf(select); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dealPay.splice(index, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sheet.deleteRows(index, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                loadUpdateDealPays(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SpreadJsObj.reLoadSheetData(paySpread.getActiveSheet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const sel = sheet.getSelections(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sheet.setSelection(index > 0 ? index - 1 : 0, sel.length > 0 ? sel[0].col : 0, 1, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                paySpreadObj.refreshActn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        selectionChanged: function (e, info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            paySpreadObj.refreshActn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sel = info.sheet.getSelections()[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const col = info.sheet.zh_setting.cols[sel.col]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const data = SpreadJsObj.getSelectObject(info.sheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (col.field === 'tp') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $('#expr').val(data.expr).attr('field', 'expr').attr('org', data.expr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .attr('readOnly', readOnly|| payBase.isSpecial(data)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (col.field === 'sprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $('#expr').val(data.sexpr).attr('field', 'sexpr').attr('org', data.sexpr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .attr('readOnly', readOnly|| payCol.readOnly.sprice(data)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (col.field === 'rprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $('#expr').val(data.rexpr).attr('field', 'rexpr').attr('org', data.rexpr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .attr('readOnly', readOnly|| payCol.readOnly.rprice(data)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $('#expr').val('').attr('readOnly', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        editEnded: function (e, info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (info.sheet.zh_setting) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const select = SpreadJsObj.getSelectObject(info.sheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const col = info.sheet.zh_setting.cols[info.col]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (col.field === 'minus') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 未改变值则不提交 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const validText = info.editingText ? info.editingText.replace('\n', '') : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let orgValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (col.field === 'tp') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    orgValue = _.toNumber(validText) ? select.tp : select.expr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (col.field === 'sprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    orgValue = _.toNumber(validText) ? select.sprice : select.sexpr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (col.field === 'rprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    orgValue = _.toNumber(validText) ? select.rexpr : select.rexpr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    orgValue = select[col.field]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (orgValue == validText || ((!orgValue || orgValue === '') && (validText === ''))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SpreadJsObj.reLoadRowData(info.sheet, info.row); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 获取更新信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const data = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    type: (col.field === 'tp' || col.field === 'name') ? 'stage' : 'info', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    updateData: {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 获取更新数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (col.field === 'tp') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.updateData.pid = select.pid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const [valid, msg] = paySpreadObj._checkExpr(validText, data.updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        toastr.warning(msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        SpreadJsObj.reLoadRowData(info.sheet, info.row); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (col.field === 'name') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.updateData.pid = select.pid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.updateData.name = validText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.updateData.id = select.pid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (validText) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (col.field === 'sprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            const [valid, msg] = paySpreadObj._checkSExpr(select, validText, data.updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (!valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                toastr.warning(msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                SpreadJsObj.reLoadRowData(info.sheet, info.row); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else if (col.field === 'rprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            const [valid, msg] = paySpreadObj._checkRExpr(select, validText, data.updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (!valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                toastr.warning(msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                SpreadJsObj.reLoadRowData(info.sheet, info.row); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            data.updateData[col.field] = validText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        data.updateData[col.field] = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 更新至服务器 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                postData(window.location.pathname + '/save', data, function (result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    loadUpdateDealPays(result, col.field === 'name' ? ['name'] : null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SpreadJsObj.reLoadSheetData(paySpread.getActiveSheet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }, function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SpreadJsObj.reLoadRowData(info.sheet, info.row); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        buttonClicked: function (e, info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (info.sheet.zh_setting) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const select = SpreadJsObj.getSelectObject(info.sheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const col = info.sheet.zh_setting.cols[info.col]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (payCol.readOnly.minus(select)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (col.field === 'minus') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (info.sheet.isEditing) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        info.sheet.endEdit(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 获取更新数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 获取更新信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const data = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        type: 'info', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        updateData: {id: select.pid}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data.updateData.minus = info.sheet.getValue(info.row, info.col) || false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 更新至服务器 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    postData(window.location.pathname + '/save', data, function (result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        loadUpdateDealPays(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        SpreadJsObj.reLoadSheetData(paySpread.getActiveSheet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        editStarting: function (e, info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const col = info.sheet.zh_setting.cols[info.col]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (col.field === 'tp') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const select = SpreadJsObj.getSelectObject(info.sheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (select.expr && select.expr !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    info.sheet.getCell(info.row, info.col).text(select.expr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (col.field === 'sprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const select = SpreadJsObj.getSelectObject(info.sheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (select.sexpr && select.sexpr !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    info.sheet.getCell(info.row, info.col).text(select.sexpr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (col.field === 'rprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const select = SpreadJsObj.getSelectObject(info.sheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (select.rexpr && select.rexpr !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    info.sheet.getCell(info.row, info.col).text(select.rexpr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        deletePress: function (sheet) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (sheet.zh_setting && sheet.zh_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const sel = sheet.getSelections()[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!sel) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const col = sheet.zh_setting.cols[sel.col]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (col.readOnly === true) { return; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (sel.colCount > 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    toast('请勿同时删除多列数据', 'warning'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const data = {type: col.field === 'tp' ? 'stage' : 'info', updateData: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let iRow = sel.row; iRow < sel.row + sel.rowCount; iRow++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const node = sheet.zh_data[iRow]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (node && (node.ptype === 1 || node.ptype === 3)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const updateData = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (col.field === 'tp') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            updateData.pid = node.pid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            updateData.tp = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            updateData.expr = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            updateData.id = node.pid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (col.field === 'sprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                const [valid, msg] = paySpreadObj._checkSExpr(node, null, updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (!valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    toastr.warning(msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } else if (col.field === 'rprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                const [valid, msg] = paySpreadObj._checkRExpr(node, null, updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (!valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    toastr.warning(msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                updateData[col.field] = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        data.updateData.push(updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (data.updateData.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (data.updateData.length === 1 && sel.rowCount === 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        data.updateData = data.updateData[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    postData(window.location.pathname + '/save', data, function (result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        loadUpdateDealPays(result, col.field === 'name' ? ['name'] : null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        SpreadJsObj.reLoadSheetData(paySpread.getActiveSheet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        clipboardPasted: function (e, info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (info.sheet.zh_setting && info.sheet.zh_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const col = info.sheet.zh_setting.cols[info.cellRange.col]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (col.readOnly === true) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SpreadJsObj.reLoadSheetData(paySpread.getActiveSheet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (info.cellRange.colCount > 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    toast('请勿同时复制粘贴多列数据', 'warning'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const sortData = info.sheet.zh_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const data = {type: col.field === 'tp' ? 'stage' : 'info', updateData: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let iRow = 0; iRow < info.cellRange.rowCount; iRow++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const curRow = info.cellRange.row + iRow; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const node = sortData[curRow]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (node && (node.ptype === 1 || node.ptype === 3)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const validText = info.sheet.getText(curRow, info.cellRange.col).replace('\n', ''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const updateData = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (col.field === 'tp') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            updateData.pid = node.pid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            const [valid, msg] = paySpreadObj._checkExpr(validText, updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (!valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                toastr.warning(msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                SpreadJsObj.reLoadSheetData(paySpread.getActiveSheet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            updateData.id = node.pid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (validText) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (col.field === 'sprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    const [valid, msg] = paySpreadObj._checkSExpr(node, validText, updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    if (!valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        toastr.warning(msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        SpreadJsObj.reLoadSheetData(paySpread.getActiveSheet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } else if (col.field === 'rprice') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    const [valid, msg] = paySpreadObj._checkRExpr(node, validText, updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    if (!valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        toastr.warning(msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        SpreadJsObj.reLoadSheetData(paySpread.getActiveSheet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    updateData[col.field] = validText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                updateData[col.field] = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        data.updateData.push(updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (data.updateData.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        postData(window.location.pathname + '/save', data, function (result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            loadUpdateDealPays(result, col.field === 'name' ? ['name'] : null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            SpreadJsObj.reLoadSheetData(paySpread.getActiveSheet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }, function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            SpreadJsObj.reLoadSheetData(paySpread.getActiveSheet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 |