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

📄 function.js

📁 学生档案与成绩管理(1)学生档案管理:记录每个学生的档案信息
💻 JS
📖 第 1 页 / 共 3 页
字号:
//****************************************************************************
//【版权所有·尊重他人创作】
// History:
// Created by 郭宝华(bob guo), bhguo@163.com, 2003.12.17 
//****************************************************************************

//数据表树中用于识别哪个部分的变量
var SheetInfor_ID = 1
var SheetStructure_ID = 2
var SheetReport_ID = 3
var SheetRole_ID = 4
var SheetMail_ID = 5
var SheetTable_ID = 6
var SheetRelation_ID = 7

//字典树中用于识别哪个部分的变量
var DictInfor_ID = 1
var DictItem_ID = 2

//数据字段类型常量
var DataType_Command = 0   //非数据,系统命令
var DataType_Number = 1    //数字
var DataType_Text = 2    //文字
var DataType_TextArea = 3    //文字段
var DataType_Date = 4      //日期
var DataType_DateAndTime = 5      //日期和时间
var DataType_Option = 6    //下拉框
var DataType_Email = 7     //email
var DataType_HyperLink = 8 //超链
var DataType_Attach = 9 //附件
var DataType_Counter = 10 //自动编号
var DataType_Checkbox = 11 //勾选框

var NumberMaxLen = 15	//最多允许用户输入的有效位数,如:123456789012.34

//公式选项
var FormulaType_No = 1					//一般字段
var FormulaType_Simple = 2				//简单数值计算
var FormulaType_Condition = 3			//条件数值计算
var FormulaType_SimpleDateDiff = 4		//简单日期间隔
var FormulaType_ConditionDateDiff = 5	//条件日期间隔
var FormulaType_SimpleDateAdd = 6		//简单日期计算
var FormulaType_ConditionDateAdd = 7	//条件日期计算
var FormulaType_SimpleText = 8			//简单文字拼接
var FormulaType_ConditionText = 9		//条件文字拼接
var FormulaType_ConditionOption = 10	//自动推定选项

//公式字串的分隔符
var ConItemSep=String.fromCharCode(5);	
var FormulaSep=String.fromCharCode(3);
var ItemSep=String.fromCharCode(2);
var GroupSep = String.fromCharCode(1)	//group seperator 

//颜色选项
var FieldColorType_No = 1					//未设置
var FieldColorType_Condition = 2			//按条件选用颜色

//尾数处理选项
var HowRound_4Cut5Step = 1					//四舍五入
var HowRound_Cut = 2								//截断
var HowRound_TailStep = 3						//见尾即进

//图表类型
var Chart_Bar = 1
var Chart_Line = 2
var Chart_Pie = 3

//引用字段的引用时机
var RefTime_Always = 1			//始终引用其数据;
var RefTime_CanModify = 2		//引用后可自由修改

//记录数作为一个统计字段呈现在用户设定界面,赋给一个特殊的FieldID
var RecordCount_ID = 207 
var RecordCount_Caption = "记录数"

//各数据类型是否有范围概念
var DataType_HasRange = new Array(1,0,0,1,1,0,0,0,0,0,0);

//各数据类型的本真类型,,只有日期<-->日期和时间认作是相同的类型
var DataType_Core = new Array(1,2,3,4,4,5,6,7,8,2,9);

//各数据类型的标题,应与数据库中的 Option203 一致
var DataType_Caption = new Array("数值","文字","文字段","日期","日期和时间","下拉框","Email","超链","附件","自动编号","勾选框")

var FldMaxSize = 120	//用户可以设定的字段的最大长度


//系统字段、系统表的起始编号,用户字定义的应小于这个数量
var SystemFrom_ID = 201

//数据表操作的最小最大编号
var SheetOperationMin=1
var SheetOperationMax=100

var MaxPageSize = 100	//每页最大记录数

//拼写Javascript 端object名称用的特征字符
var JoinChar = "A"

//页面上不要打印的区域
var	NoPrintStart="<!--NoPrintStart-->";
var	NoPrintEnd="<!--NoPrintEnd-->";

//提醒计划类型
var RemindPlan_OnceOnly = 1
var RemindPlan_PerHour = 2
var RemindPlan_PerDay = 3
var RemindPlan_PerWeek = 4
var RemindPlan_PerMonth = 5
var RemindPlan_BirthDay = 6

//系统内部短信组别
var MsgGroupReceived_ID=1
var MsgGroupSended_ID=2
var MsgGroupDeleted_ID=3

//设置提醒模板时选择用户的“所有用户”
var AllUser_ID = 0
var AllUser_Caption = "所有用户" 

var browser = navigator.appName;

var ErrorMessage;

function MoveListItem(From,To)
{
	var FromIndex,FromCount,ToIndex,ToCount;
	FromIndex=From.selectedIndex
	FromCount=From.length
	if(FromIndex!=-1)
	{
		//获得待移动的项目
		var ValueFrom,TextFrom,ValueTo,TextTo
		ValueFrom=From.options[FromIndex].value
		TextFrom=From.options[FromIndex].text

		//向待插入的list插入待移动项目
		var ToCount=To.length
		To.options[ToCount]=new Option("temp",1)
		for (var i=0;i<ToCount;i++)
		{
			//根据名称寻找正序的插入位置
			TextTo=From.options[i].text
			if(TextFrom<=TextTo)
			{
				var j= ToCount
				while (j>i)
				{
					To.options[j].value=To.options[j-1].value
					To.options[j].text=To.options[j-1].text
					j=j-1
				}
				break
			}			
		}
			
		//插入位置为i
		To.options[i].value=ValueFrom
		To.options[i].text=TextFrom
		To.selectedIndex=i

		//在可选list中去掉选中的项目
		for (var i=FromIndex;i<FromCount-1;i++)
		{
			From.options[i].value=From.options[i+1].value
			From.options[i].text=From.options[i+1].text
		}
		From.length=FromCount-1
		if(From.length>0)
		{
			if(FromIndex>=From.length)
			{
				From.selectedIndex=FromIndex-1
			}
			else
			{
				From.selectedIndex=FromIndex
			}
		}
		else
		{
			From.selectedIndex=-1
		}
	}
	else
	{
		if(FromCount>0)
		{
			alert("您要选择哪个列表项?请选择。"); 
		}
		else
		{
			alert("列表空,没有可选列表项。"); 
		}
	}
}

//数据类型、数值范围合法性判断
function DataCheck(Caption,Type,Value,RangeFrom,RangeTo) 
{
	switch (Type)
	{
		case DataType_Number:
			if (!isEmpty(Value))
			{
				Value=Value.replace(/,/g,''); //去掉逗号
				if(!isNumber(Value))
				{
					alert(Caption + "输入不正确,请输入数字。");
					return(false);	
				}
				else
				{
					if(!isEmpty(RangeFrom))
					{
						RangeFrom=RangeFrom.replace(/,/g,''); //去掉逗号
						if(parseFloat(Value)<parseFloat(RangeFrom))
						{
							alert(Caption + "输入的数值范围不正确,大小颠倒,请更正。");
							return(false);	
						}
					}
					if(!isEmpty(RangeTo))
					{
						RangeTo=RangeTo.replace(/,/g,''); //去掉逗号
						if(parseFloat(Value)>parseFloat(RangeTo))
						{
							alert(Caption + "输入的数值范围不正确,大小颠倒,请更正。");
							return(false);	
						}
					}
					Value=replace(Value,'-',''); //去掉符号
					Value=replace(Value,'+',''); //去掉符号
					Value=replace(Value,'.',''); //去掉小数点
					Value=JTrim(Value)
					if(Value.length>NumberMaxLen)
					{
						alert(Caption + "输入的数值太长,最多容纳" + NumberMaxLen + "位有效数字,请更正。");
						return(false);	
					}
				}
			}
			break;
		case DataType_Date:
			if (!isEmpty(Value))
			{
				if(!isValidDate(Value))
				{
					alert(Caption + "输入不正确。\n" + ErrorMessage);
					return(false);	
				}
				else
				{
					if(!isEmpty(RangeFrom))
					{
						if(isValidDatePeriod(Value,RangeFrom)==1)
						{
							alert(Caption + "输入的日期范围不正确,前后颠倒,请更正。");
							return(false);	
						}
					}
					if(!isEmpty(RangeTo))
					{
						if(isValidDatePeriod(RangeTo,Value)==1)
						{
							alert(Caption + "输入的日期范围不正确,前后颠倒,请更正。");
							return(false);	
						}
					}
				}
			}
			break;
		case DataType_DateAndTime:
			if (!isEmpty(Value))
			{
				if(!isValidDateAndTime(Value))
				{
					alert(Caption + "输入不正确。\n" + ErrorMessage);
					return(false);	
				}
				else
				{
					if(!isEmpty(RangeFrom))
					{
						if(isValidDateAndTimePeriod(Value,RangeFrom)==1)
						{
							alert(Caption + "输入的日期时间范围不正确,前后颠倒,请更正。");
							return(false);	
						}
					}
					if(!isEmpty(RangeTo))
					{
						if(isValidDateAndTimePeriod(RangeTo,Value)==1)
						{
							alert(Caption + "输入的日期时间范围不正确,前后颠倒,请更正。");
							return(false);	
						}
					}
				}
			}
			break;
		case DataType_Email:
			if (!isEmpty(Value))
			{
				if(!isVaildEmail(Value))
				{
					alert(Caption + "输入不正确。\n" + ErrorMessage);
					return(false);	
				}
			}
			break;
		case DataType_Attach:
			break;
	}

	return(true);	
	
}

function isNumber( str )
{
	var num = JTrim( str );
	if ( num == "" || isNaN(num))
	{
		return (false);
	}
	return (true);
}

//将日期型数据转换成适合的格式
//参数:
//ToType,要求的格式,2种:DataType_Date,或 DataType_DateAndTime
//AppendEndTime,当要求的格式为 DataType_DateAndTime且未填写时间时起作用,
//如果为1,补 23:59:59,否则补 00:00:00
//Value,数值
//返回参数:
//History:
//Created by 郭宝华(bob guo) 2004 6 23
function DateConvert(ToType,AppendEndTime,Value)
{
	var OldValue,NewValue;
	var parts;

	Value=Value.replace(/  /g,' ');  //双空格以上的,改为单空格
	OldValue=Value;
	if(ToType==DataType_Date)
	{
		if(isValidDateAndTime(Value))
		{
			parts=strDateAndTime.split(" ");
			NewValue=parts[0];
			return NewValue;
		}
		else
		{
			return OldValue;
		}
	}
	else
	{
		if(isValidDate(Value))
		{
			if(AppendEndTime==1)
				NewValue=Value + " 23:59:59";
			else
				NewValue=Value + " 00:00:00";
			return NewValue;
		}
		else
		{
			return OldValue;
		}
	}
}

//格式化数值类型的数据
//参数:
//TypeFormat,要求的格式。从左致右,各位的意义分别是:小数位数,是否使用千分位,尾数处置(1--四舍五入,2--截断,3--见尾即进)
//Value,数值
//返回参数:
//History:
//Created by 郭宝华(bob guo) 2004 2 4
function FormatNumber(TypeFormat, Value)
{
	var strInt,strDecimal;
	var OldValue,NewValue;
	var decimalLength,NeedComma,HowRound
	
	OldValue=Value;
	Value=Value.replace(/,/g,'');  //去掉逗号
	Value=Value.replace(/ /g,'');  //去掉空格
	//如果不是数字,返回原值
	if(isNumber(Value)!=true)
	{
		return(OldValue);
	}
	else
	{
		if(TypeFormat.length != 3 || isNumber(TypeFormat)!=true)
			//如果格式字串无法解释,则不做格式转换,返回原值
			return(OldValue);
		else
		{
			//解析要求的格式信息
			decimalLength=parseInt(TypeFormat.charAt(0))
			NeedComma=parseInt(TypeFormat.charAt(1));
			HowRound=parseInt(TypeFormat.charAt(2));
			
			//获得原整数部分、小数部分
			var parts
			parts=Value.split(".");
			if(parts.length==2)
			{
				strInt=parts[0];
				strDecimal=parts[1];
			}
			else
			{
				if(parts.length==1)
				{
					strInt=parts[0];
					strDecimal="";
				}
			}

			//多余尾数的舍入
			if(strDecimal!="" && strDecimal.length>decimalLength)
			{
				var tempDecimal,Old,OldInt,NewInt;
				tempDecimal="."+strDecimal;
				Old=Math.pow(10,decimalLength) * parseFloat(tempDecimal);
				if(HowRound==HowRound_4Cut5Step)
				{
					NewInt=Math.round(Old);
					if(decimalLength>0)
						strDecimal=NewInt.toString();
					else
					if(NewInt>0)
					{
						strInt=parseInt(strInt)+1;
						strInt=strInt.toString();
					}
				}
				
				if(HowRound==HowRound_Cut)
					if(decimalLength>0)
						strDecimal=tempDecimal.substr(1,decimalLength);
					else
						strDecimal="";

				if(HowRound==HowRound_TailStep)
					if(parseFloat(tempDecimal.substr(decimalLength+1,1))>=1)
					{
						if(decimalLength>0)
						{
							NewInt=parseFloat(tempDecimal.substr(1,decimalLength))+1;
							strDecimal=NewInt.toString();
						}
						else
						{
							strInt=parseInt(strInt)+1;
							strInt=strInt.toString();
						}
					}
			}
			
			//处理整数部分的千分位
			var intLength,strNewInt,strRemain;
			strNewInt=strInt;
			if(NeedComma == 1)
			{
				intLength=strInt.length;
				if(intLength>3)
				{
					strNewInt="";
					for(var i=3;i<intLength;i=i+3)
					{
						strRemain=strInt.slice(0,intLength-i);
						if(isNumber(strRemain)==true)
						{
							strNewInt= "," + strInt.slice(intLength-i,intLength-i+3) + strNewInt;
						}
						else
						{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -