📄 setconditionformula.asp
字号:
<style type="text/css">
#FieldToTextFormulaSelect {position:absolute;visibility:hidden;left:0;top:0;width:0;height:0;z-index:-1}
#ItemToOptionFormulaSelect {position:absolute;visibility:hidden;left:0;top:0;width:0;height:0;z-index:-1}
#FieldToConditionSelect {position:absolute;visibility:hidden;left:0;top:0;width:0;height:0;z-index:-1}
#AllConditionDetail {position:absolute;visibility:hidden;left:0;top:0;width:0;height:0;z-index:-1}
#ConditionListRow {position:absolute;visibility:hidden;left:0;top:0;width:0;height:0;z-index:-1}
</style>
<link href="../../../include/main.css" rel="stylesheet" type="text/css">
<script src="../../../include/function.js" type="text/javascript"></script>
<script src="../../../include/formulaedit.js" type="text/javascript"></script>
<script ID="clientEventHandlersJS" LANGUAGE="javascript">
<!--
var FormulaStr; //公式内部结构串,Condition ItemSep SQLDesc ItemSep Divisor FormulaSep Condition ItemSep SQLDesc ItemSep Divisor FormulaSep .....
//其中的Condition,采用与查询条件类似的结构:Fldxxx ConItemSep Value GroupSep Fldxxx ConItemSep Value
var FormulaType; //当前公式类型
var FieldToNumberFormulaSelectStr; //公式中可参与数值运算的数值型字段选择框
var FieldToTextFormulaSelectStr; //公式中可参与字符运算的字段选择框
var ItemToOptionFormulaSelectStr; //公式中可用做选项值的选择框
var FieldToDateFromSelectStr; //公式中可参与日期运算的(从)选择框,包括:[系统日期]、[指定日期]、[Fld...]
var FieldToDateToSelectStr; //公式中可参与日期运算的(至)选择框
var FieldToDateAddSelectStr; //公式中可参与日期运算的加减项选择框
var FieldToConditionSelectStr; //公式中的条件字段选择框
var FieldToConditionDataTypeStr; //公式中各条件字段的数据类型
var ConditionDataType;
var AllConditionDetailStr;
var FormulaChanged;
//初始化
function Init()
{
ReadArgs();
InitTitle();
InitFormula();
}
//读取父窗口传来的公式数据
function ReadArgs()
{
var parts;
FormulaStr=JTrim(window.dialogArguments[0]);
parts=FormulaStr.split(FormulaSep); //传上来的格式为FormulaType FormulaSep ...
FormulaType=parts[0];
FormulaStr=FormulaStr.substr(parts[0].length+1);
if(FormulaType==FormulaType_Condition)
{
FieldToNumberFormulaSelectStr=window.dialogArguments[1];
FieldToConditionSelectStr=window.dialogArguments[2];
FieldToConditionDataTypeStr=window.dialogArguments[3];
AllConditionDetailStr=window.dialogArguments[4];
}
else if(FormulaType==FormulaType_ConditionDateDiff)
{
FieldToDateFromSelectStr=window.dialogArguments[1];
FieldToDateToSelectStr=window.dialogArguments[2];
FieldToConditionSelectStr=window.dialogArguments[3];
FieldToConditionDataTypeStr=window.dialogArguments[4];
AllConditionDetailStr=window.dialogArguments[5];
}
else if(FormulaType==FormulaType_ConditionDateAdd)
{
FieldToDateFromSelectStr=window.dialogArguments[1];
FieldToDateAddSelectStr=window.dialogArguments[2];
FieldToConditionSelectStr=window.dialogArguments[3];
FieldToConditionDataTypeStr=window.dialogArguments[4];
AllConditionDetailStr=window.dialogArguments[5];
}
else if(FormulaType==FormulaType_ConditionText)
{
FieldToTextFormulaSelectStr=window.dialogArguments[1];
FieldToConditionSelectStr=window.dialogArguments[2];
FieldToConditionDataTypeStr=window.dialogArguments[3];
AllConditionDetailStr=window.dialogArguments[4];
}
else if(FormulaType==FormulaType_ConditionOption)
{
ItemToOptionFormulaSelectStr=window.dialogArguments[1];
FieldToConditionSelectStr=window.dialogArguments[2];
FieldToConditionDataTypeStr=window.dialogArguments[3];
AllConditionDetailStr=window.dialogArguments[4];
}
}
//初始化标题
function InitTitle()
{
if(FormulaType==FormulaType_Condition)
{
myTitle.innerHTML ="设置公式---条件数值计算";
}
else if(FormulaType==FormulaType_ConditionDateDiff)
{
myTitle.innerHTML ="设置公式---条件日期间隔";
}
else if(FormulaType==FormulaType_ConditionDateAdd)
{
myTitle.innerHTML ="设置公式---条件日期计算";
}
else if(FormulaType==FormulaType_ConditionText)
{
myTitle.innerHTML ="设置公式---条件文字拼接";
}
else if(FormulaType==FormulaType_ConditionOption)
{
myTitle.innerHTML ="设置公式---自动设置选项";
}
}
//初始化公式
function InitFormula()
{
FieldToConditionSelect.innerHTML =FieldToConditionSelectStr;
if(FormulaType==FormulaType_ConditionText)
{
FieldToTextFormulaSelect.innerHTML =FieldToTextFormulaSelectStr;
}
else if(FormulaType==FormulaType_ConditionOption)
{
ItemToOptionFormulaSelect.innerHTML =ItemToOptionFormulaSelectStr;
}
AllConditionDetail.innerHTML = AllConditionDetailStr;
ConditionDataType=FieldToConditionDataTypeStr.split(",");
DrawList();
FormulaChanged=false;
frmData.btnAdd.disabled=false;
frmData.btnDel.disabled=false;
frmData.btnSetOrder.disabled=false;
frmData.btnSave.disabled=false;
frmData.btnCancel.disabled=false;
}
//根据公式数据,初始化公式的数据界面,条件List,计数
function DrawList()
{
var ConList;
var Count;
ConList="";
Count=0;
if(FormulaStr!='')
{
parts=FormulaStr.split(FormulaSep);
Count=parts.length;
if(Count>0)
{
for(var i=1;i<=Count;i++)
{
var Cols,CurRow;
Cols=parts[i-1].split(ItemSep);
CurRow=ConditionListRow.innerHTML;
CurRow=replace(CurRow,"[RowNum]",i);
if(!isEmpty(Cols[0]))
{
//如果选择了条件
CurRow=replace(CurRow,"[ConditionDesc]",FormatConditionToCaption(Cols[0]));
}
else
{
//如果未选择条件
CurRow=replace(CurRow,"[ConditionDesc]","");
}
CurRow=replace(CurRow,"[FormulaDesc]",FormatToCaption(Cols[1]));
ConList=ConList + CurRow
}
}
}
ConCount.innerHTML ="目前共有" + Count + "个条件公式";
ConditionList.innerHTML = "<table width=100% cellspacing=1 bgcolor=999999>"+ConList+"</table>";
}
//表达式中的字段id还原成字段名称[XXX],用于在页面中显示
function FormatToCaption(Desc)
{
if(FormulaType==FormulaType_ConditionDateDiff || FormulaType==FormulaType_ConditionDateAdd)
{
//如果是日期计算,则需要转换成一般用户能看懂的形式,例如
//datediff("d",[Fld1],[Fld2])转换成:从Fld1至Fld2的日数
//dateadd("d",[Fld1],[Fld2])转换成:Fld2加Fld1个日数
var parts,unit;
parts=Desc.split(",");
if(parts.length>=3)
{
//判断时间单位
if(parts[0].lastIndexOf("yyyy")>=parts[0].length-5)
//最后5个字符中包含yyyy,则单位为年
unit="年";
else if(parts[0].lastIndexOf("m")>=parts[0].length-2)
//最后2个字符中包含m,则单位为月
unit="月";
else if(parts[0].lastIndexOf("d")>=parts[0].length-2)
//最后2个字符中包含d,则单位为日
unit="日";
else if(parts[0].lastIndexOf("h")>=parts[0].length-2)
//最后2个字符中包含h,则单位为小时
unit="小时";
else if(parts[0].lastIndexOf("n")>=parts[0].length-2)
//最后2个字符中包含n,则单位为分
unit="分钟";
if(FormulaType==FormulaType_ConditionDateDiff)
{
if(parts[2].indexOf("+iif(")>0)
{
//计算整年整月整日时,公式中还含有偏移量的修正,去掉之
parts[2]=parts[2].substr(0,parts[2].indexOf("+iif("));
}
Desc="从"+parts[1]+"至"+parts[2]+"的"+unit+"数";
}
else
{
if(parts[1].indexOf("-")>=0)
Desc=parts[2]+"减"+parts[1].substr(parts[1].indexOf("-")+1)+unit;
else
Desc=parts[2]+"加"+parts[1]+unit;
}
Desc=replace(Desc,"now()","[系统时间]");
Desc=replace(Desc,"cdate(","") //去掉其中的cdate(
Desc=replace(Desc,")","") //去掉其中的右括弧
Desc=replace(Desc,"'","");
}
}
var Count,Caption,FieldID;
Count=FieldToCondition.length
for(var i=1;i<=Count-1;i++) //抛弃了最前面的空选项
{
Caption=FieldToCondition[i].text;
Caption='['+Caption+']';
FieldID=FieldToCondition[i].value;
FieldID='[Fld'+FieldID+']';
Desc=replace(Desc,FieldID,Caption);
}
if(FormulaType==FormulaType_ConditionText)
{
Count=FieldToTextFormula.length
for(var i=1;i<=Count-1;i++) //抛弃了最前面的空选项
{
Caption=FieldToTextFormula[i].text;
Caption='['+Caption+']';
FieldID=FieldToTextFormula[i].value;
FieldID='[Fld'+FieldID+']';
Desc=replace(Desc,FieldID,Caption);
}
}
if(FormulaType==FormulaType_ConditionOption)
{
if(isNumber(Desc))
{
Desc=GetOptionName(ItemToOptionFormula,Desc)
}
}
return(Desc);
}
function AddRecord()
{
var myScreen,myTop,myLeft;
myTop=window.screenTop-45;
myLeft=window.screenLeft+15;
var ret;
if(FormulaType==FormulaType_Condition)
{
var Args=new Array(5)
Args[0]="";
Args[1]=FieldToNumberFormulaSelectStr;
Args[2]=FieldToConditionSelectStr;
Args[3]=FieldToConditionDataTypeStr;
Args[4]=AllConditionDetailStr;
myScreen="dialogwidth:500px;dialogheight:290px;dialogtop:"+myTop+"px;dialogleft:"+myLeft+"px;Status:0;center:1;resizable=1;"
ret=window.showModalDialog("setcondition.asp",Args,myScreen);
}
else if(FormulaType==FormulaType_ConditionDateDiff)
{
var Args=new Array(6)
Args[0]="";
Args[1]=FieldToDateFromSelectStr;
Args[2]=FieldToDateToSelectStr;
Args[3]=FieldToConditionSelectStr;
Args[4]=FieldToConditionDataTypeStr;
Args[5]=AllConditionDetailStr;
myScreen="dialogwidth:500px;dialogheight:295px;dialogtop:"+myTop+"px;dialogleft:"+myLeft+"px;Status:0;center:1;resizable=1;"
ret=window.showModalDialog("setconditiondatediff.asp",Args,myScreen);
}
else if(FormulaType==FormulaType_ConditionDateAdd)
{
var Args=new Array(6)
Args[0]="";
Args[1]=FieldToDateFromSelectStr;
Args[2]=FieldToDateAddSelectStr;
Args[3]=FieldToConditionSelectStr;
Args[4]=FieldToConditionDataTypeStr;
Args[5]=AllConditionDetailStr;
myScreen="dialogwidth:500px;dialogheight:295px;dialogtop:"+myTop+"px;dialogleft:"+myLeft+"px;Status:0;center:1;resizable=1;"
ret=window.showModalDialog("setconditiondateadd.asp",Args,myScreen);
}
else if(FormulaType==FormulaType_ConditionText)
{
var Args=new Array(5)
Args[0]="";
Args[1]=FieldToTextFormulaSelectStr;
Args[2]=FieldToConditionSelectStr;
Args[3]=FieldToConditionDataTypeStr;
Args[4]=AllConditionDetailStr;
myScreen="dialogwidth:500px;dialogheight:325px;dialogtop:"+myTop+"px;dialogleft:"+myLeft+"px;Status:0;center:1;resizable=1;"
ret=window.showModalDialog("setconditiontext.asp",Args,myScreen);
}
else if(FormulaType==FormulaType_ConditionOption)
{
var Args=new Array(5)
Args[0]="";
Args[1]=ItemToOptionFormulaSelectStr;
Args[2]=FieldToConditionSelectStr;
Args[3]=FieldToConditionDataTypeStr;
Args[4]=AllConditionDetailStr;
myScreen="dialogwidth:500px;dialogheight:255px;dialogtop:"+myTop+"px;dialogleft:"+myLeft+"px;Status:0;center:1;resizable=1;"
ret=window.showModalDialog("setconditionoption.asp",Args,myScreen);
}
if(typeof(ret)!="undefined")
{
//ret返回值,公式内部结构串,ConFieldID,ConRangeFrom,ConRangeTo,SQLDesc,Divisor
if(ret.charAt(0)=="1")
{
AddFormula(ret.substr(2))
FormulaChanged="1";
DrawList();
}
}
}
function AddFormula(formula)
{
if(FormulaStr=="")
FormulaStr=formula;
else
FormulaStr=FormulaStr+FormulaSep+formula;
}
function DelRecord()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -