⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setconditionformula.asp

📁 学生档案与成绩管理(1)学生档案管理:记录每个学生的档案信息
💻 ASP
📖 第 1 页 / 共 2 页
字号:
<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 + -