请分析下面代码,指出前端有什么校验:<script>
function getHoldLotInfo(){
checkRuncardStatus();
//if(checkRuncardStatus()){
var form = document.forms['updateRequestForm'];
var lotId = form.elements["requestForm.lotId"].value;
var holdStepNo= form.elements["requestForm.holdStepNo"].value;
if(lotId==""){alert("Please key-in one LotId");return false;}
if(holdStepNo==""){ form.action="updateHoldLotInfo.action";
checkboxSync();form.submit();alert("Please key-in Hold Step No#:");}
if (lotId.indexOf(" ")>0){alert("Lot Id is not allowed space!"); return false;}
form.action="updateHoldLotInfo.action";
checkboxSync();form.submit();
//}
}
function EndQtimeHanle(id){
//alert (id);
var QtimeHanle = document.getElementById("EndQtimeHanle"+id);
var sQtimeHanle = QtimeHanle.options[QtimeHanle.selectedIndex].text;
//alert(sQtimeHanle);
var tObj = document.getElementById("allEndQtimeHandle");
var allEndQtimeHandle= tObj.value;
//alert (allEndQtimeHandle);
if (allEndQtimeHandle==""){
//alert(1);
tObj.value = id +","+ sQtimeHanle+ ";";
}else{
//alert(2)
//alert (allEndQtimeHandle.indexOf(id+","));
if (allEndQtimeHandle.indexOf(id+",")>=0){
//alert ("Replace");
allEndQtimeHandle=allEndQtimeHandle.replace(id +",;",id +","+ sQtimeHanle+ ";");
//alert ("Replace 1:"+allEndQtimeHandle );
allEndQtimeHandle=allEndQtimeHandle.replace(id +",Mapping;",id +","+ sQtimeHanle+ ";");
//alert ("Replace 2:"+allEndQtimeHandle );
allEndQtimeHandle=allEndQtimeHandle.replace(id +",Ignore;",id +","+ sQtimeHanle+ ";");
//alert ("Replace 3:"+allEndQtimeHandle );
allEndQtimeHandle=allEndQtimeHandle.replace(id +",NULL;",id +","+ sQtimeHanle+ ";");
//alert ("Replace 3:"+allEndQtimeHandle );
tObj.value = allEndQtimeHandle;
}else{
//alert (2);
tObj.value = allEndQtimeHandle +id +","+ sQtimeHanle+ ";"
}
}
}
</script>
<#import "/decorators/includes/macros.ftl" as m>
<#assign ww = JspTaglibs["/WEB-INF/webwork.tld"] />
<#include "/template/includes/actionerrors.ftl">
<@m.subRefreshForm "/user/stepForm/includeStepForm.ftl","SPAN_STEPFORM"/>
<style type="text/css">
<!--
.TextBoxReadOnly
{
border:1px solid #C0C0C0;
text-align:left;
background-color:#D3D3D3;
width:200px;
readonly:expression(this.readOnly=true);
}
.TextBoxReadWrite
{
border:1px solid #C0C0C0;
text-align:left;
background-color:#FFFFFF;
width:200px;
readonly:expression(this.readOnly=false);
}
-->
</style>
<script>
var area="${command?if_exists}";
window.onload=function(){
<#if requestForm.stepForms?has_content>
//opener.document.updateRequestForm.updateWaferGroupResultBtn.click();
</#if>
var fabName=document.forms['stepForm'].elements["stepForm.fabName"].value;
if((fabName=="FAB1" ||fabName=="FAB2") && area.indexOf("DIFF")!=-1){
document.getElementById("showRemark").style.display='';
}
var area=document.forms['stepForm'].elements["stepForm.area"];
if('${requestForm.fabId?default('')}'=="S1" && '${requestForm.formType?if_exists}'=="Scan Defect" && area.value == ""){
if(fabName=="A"){
area.value="S1A-PHOTO-M";
}
else if(fabName=="B"){
area.value="S1B-PHOTO-M";
}
else if(fabName=="C"){
area.value="S1C-CMP";
}
}
}
function checkboxSync(){
var stepForm=document.forms['stepForm'];
if (
(typeof stepForm.elements["rcpCheck"]!= "undefined") &&
stepForm.elements["rcpCheck"].checked){
stepForm.elements["stepForm.RCP"].value="on";
}else{
stepForm.elements["stepForm.RCP"].value="uncheck";
}
if (
(typeof stepForm.elements["noStepNoPar"]!= "undefined") &&
stepForm.elements["noStepNoPar"].checked){
stepForm.elements["stepForm.noStepNo"].value="on";
}else{
stepForm.elements["stepForm.noStepNo"].value="uncheck";
}
}
function changeShow(object){
var stepForm=document.forms['stepForm'];
var fabName=object.value;
if("Engineering"==fabName)
{ if(!confirm("请注意您现在选择使用的是engineer folder 下的recipe!"))
{
stepForm["stepForm.recipeType"][0].checked=true;
stepForm.action="viewStepForm.action";
checkboxSync();
stepForm.submit();
}
}
if("Matrix"==fabName)
{ if(!confirm("请注意您现在选择的是FEM run模式!"))
{ stepForm["stepForm.batchType"][0].checked=true;
return false;
}
}
if(object.value=="")
{
alert("Please select the fab area!");
return false;
}
if((fabName=="FAB1" ||fabName=="FAB2") && area.indexOf("DIFF")!=-1)
{
document.getElementById("showRemark").style.display='';
}
else
{
document.getElementById("showRemark").style.display='none';
}
if("Engineering"==fabName || "Production"==fabName || "Matrix"==fabName)
{
if("Engineering"==fabName)
stepForm.action="viewStepForm.action?stepForm.batchType=Production";
else if("Matrix"==fabName)
stepForm.action="viewStepForm.action?stepForm.energyStep=&stepForm.focusStep=";
else
stepForm.action="viewStepForm.action";
}
else
stepForm.action="viewStepForm.action?command=&stepForm.area=";
checkboxSync();
stepForm.submit();
}
function restrictLength(object){
var stepForm=document.forms['stepForm'];
var value=object.value;
if(value=="Eqp ID")
{
alert("输入的Eqp ID 的最大长度为7位!");
}
}
function checkNA(object){
var stepForm=document.forms['stepForm'];
var eqpName=stepForm.elements["stepForm.eqpModeName"].value;
var value=object.value;
if(eqpName=="DUMMY" ||eqpName.indexOf("DMY02")!=-1){
if(value!="NA"){
alert("EQPName is DUMMY.You must select the 'NA'!");
object[object.length-1].selected=true;
return false;
}
}
}
function showOvl(){
window.open('showOvl.action','','left=0,top=200,width=760,height=200');
}
function defalutValue(){
var stepForm=document.forms['stepForm'];
var chk=stepForm.elements['rcpCheck'];
var area=stepForm.elements['stepForm.area'];
var trackOutRecipe= stepForm.elements["stepForm.trackOutRecipe"];
if(chk.checked==false)
{
alert("如果想指定Chamber去auto run,可以把“Check with RCP”前边的勾去掉,Recipe里填写recipe name_chamber list(或者中划线“-”)");
if(areaValue=="PHOTO" || areaValue=="S1A-PHOTO" || areaValue=="S1B-PHOTO" ||areaValue=="S1C-PHOTO" || areaValue=="M1A-PHOTO" || areaValue=="M1B-PHOTO" || areaValue=="M1C-PHOTO" || areaValue=="SXA-PHOTO" || areaValue=="SXC-PHOTO")
trackOutRecipe.value="recipe name_chamber list";
else
stepForm.elements["stepForm.recipe"].value="recipe name_chamber list";
}
else
{
alert("请填写正确的Recipe");
if(areaValue=="PHOTO" || areaValue=="S1A-PHOTO" || areaValue=="S1B-PHOTO" ||areaValue=="S1C-PHOTO" || areaValue=="M1A-PHOTO" || areaValue=="M1B-PHOTO" || areaValue=="M1C-PHOTO" || areaValue=="SXA-PHOTO" || areaValue=="SXC-PHOTO")
trackOutRecipe.value="waiting Pi_Run Result";
else
stepForm.elements["stepForm.recipe"].value="waiting Pi_Run Result";
}
}
function clearSpec(){
var stepForm=document.forms['stepForm'];
stepForm.elements['stepForm.spec'].value="";
}
function showSpec(){
var stepForm=document.forms['stepForm'];
//stepForm.elements['stepForm.spec'].value="";
var value= stepForm.elements['stepForm.ecdPlanName'].value;
if(value==""){
alert("Please input the EdcPlan");
return false;}
window.open('showSpec.action?requestFormId=${requestForm.id}&edcPlan=' + value + '','','status=no,scrollbars=yes,location=no,resizable=yes,left=0,top=200,width=760');
}
function changeByArea(object){
var stepForm=document.forms['stepForm'];
if($F("stepForm.fabName")==""){
alert("Please select the fab area !");
return false;
}
var value=object.value;
var eqpId=stepForm.elements["stepForm.eqpMode"].value;
var eqpValue=stepForm.elements["stepForm.eqpModeName"].value;
if(eqpId=="Eqp ID"){
if(eqpValue=="dummy" ||eqpValue=="DUMMY" || eqpValue.indexOf("DMY02")!=-1){ //DMY02 for cension
if(areaValue=="PHOTO" || areaValue=="S1A-PHOTO" || areaValue=="S1B-PHOTO" ||areaValue=="S1C-PHOTO" || areaValue=="M1A-PHOTO" || areaValue=="M1B-PHOTO" || areaValue=="M1C-PHOTO" || areaValue=="SXA-PHOTO" || areaValue=="SXC-PHOTO"){
alert("Please do not set area as PHOTO for DUMMY Eqp ID!")
stepForm.elements["stepForm.area"].focus();
}
}
}
stepForm.elements["stepForm.eqpModeName"].value="";
if(typeof stepForm.elements["stepForm.recipe"]!= "undefined")
stepForm.elements["stepForm.recipe"].value="";
if(typeof stepForm.elements["stepForm.trackOutRecipe"]!= "undefined")
stepForm.elements["stepForm.trackOutRecipe"].value="";
stepForm.action="changeArea.action?stepForm.recipeType=Production";
checkboxSync();
stepForm.submit();
}
function changeValeuToNumber(object){
var objectValue=object.value;
var pattern = /[^\d\.\+\-]/g;
if(pattern.test(objectValue)){
alert("请输入正确的数字格式");
object.value="";
object.focus();
}
if("energyStep"==object.id)
{if( eval(objectValue)>1000 || eval(objectValue)<-1000.0)
{ alert("EnergyStep的范围在 (-1000~1000).");
object.value="";
object.focus();
}
}
if("focusStep"==object.id)
{if( eval(objectValue)>2 || eval(objectValue)<-2)
{ alert("FocusStep的范围在 (-2~2).");
object.value="";
object.focus();
}
}
}
function eqpToUpper(object){
var form = document.forms['stepForm'];
var mode=form.elements["stepForm.eqpMode"].value;
var areaValue=form.elements["stepForm.area"].value;
var value=object.value;
var reg=/\s/g;
var stringLength=value.replace(reg,"");
if(mode!="Eqp Group"){
object.value=stringLength.toUpperCase();
}
if(mode=="Eqp ID"){
if(stringLength.length>7)
{alert("最多7个字符!");
object.value="";
object.focus();
return false;
}
if(stringLength=="dummy" ||stringLength=="DUMMY" || stringLength.indexOf("DMY02")!=-1){ //DMY02 for cension
if(areaValue=="PHOTO" || areaValue=="S1A-PHOTO" || areaValue=="S1B-PHOTO" ||areaValue=="S1C-PHOTO" || areaValue=="M1A-PHOTO" || areaValue=="M1B-PHOTO" || areaValue=="M1C-PHOTO" || areaValue=="SXA-PHOTO" || areaValue=="SXC-PHOTO"){
alert("Please do not set area as PHOTO for DUMMY Eqp ID!");
form.elements["stepForm.area"].focus();
return false;
}
if (typeof form.elements["stepForm.recipe"]!= "undefined"){
form.elements["stepForm.recipe"].value="DUMMY";
form.elements["stepForm.recipe"].className="TextBoxReadOnly";
// checkNA(form.elements['stepForm.contaminationFlag']);
}
}else if(typeof form.elements["stepForm.recipe"]!= "undefined")
form.elements["stepForm.recipe"].className="TextBoxReadWrite";
}
}
function scannerToUpper(){
var form = document.forms['stepForm'];
var element = form.elements["stepForm.scannerRecipe"];
element.value =element.value.toUpperCase();
}
function trackToUpper(){
var form = document.forms['stepForm'];
var element = form.elements["stepForm.trackOutRecipe"];
element.value =element.value.toUpperCase();
}
function recipeToUpper(){
var form = document.forms['stepForm'];
var element = form.elements["stepForm.recipe"];
element.value =element.value.toUpperCase();
}
function getStepLotInfo(){
var form = document.forms['stepForm'];
var chk= form.elements['rcpCheck'];
var noStepNo= form.elements['noStepNoPar'];
if (typeof form.elements["noStepNoPar"]!= "undefined"){
if (!noStepNo.checked && form.elements["stepForm.stepNo"].value==""){
alert("Please input step No.");
form.elements["stepForm.stepNo"].focus();
return false;
}
if (noStepNo.checked && form.elements["stepForm.stepNo"].value!=""){
alert("Please unCheck NA.");
return false;
}
}
form.action="updateStepInfo.action?ercParams=true";
checkboxSync();
disableButton();
form.submit();
}
function checkBoxValue(param){
var returnPara=param;
var form = document.forms['stepForm'];
var chk= form.elements['rcpCheck'];
var noStepNo= form.elements['noStepNoPar'];
if (typeof form.elements["noStepNoPar"]!= "undefined"){
}
return returnPara;
}
function checkPageToSubmit(){
var form = document.forms['stepForm'];
var chk= form.elements['rcpCheck'];
var noStepNo= form.elements['noStepNoPar'];
var eqpID=$F("stepForm.eqpMode");
var eqpIDValue=$F("stepForm.eqpModeName");
var areaValue=$F("stepForm.area");
var stepNo=form.elements["stepForm.stepNo"];
if (typeof form.elements["noStepNoPar"]!= "undefined"){
var elementMes = form.elements["stepForm.stepNoMes"].value;
var element = form.elements["stepForm.stepNo"].value;
if (elementMes==null || element!=elementMes){
alert("Please click [go] to get MES information.");
form.elements["stepForm.stepNo"].focus();
return false;
}
}
<#if !stepForm?exists || stepForm.stepSerialNo?default(0)==0 || !(stepForm.stepQtimes?has_content || stepForm.stepQtimeEnds?has_content)>
<#if stepQtimes?has_content>
alert("Q time configuration start at this step in mainflow. If need start this Q time. Need setting it at Group result");
</#if>
</#if>
<#list stepQtimeEnds as stepQtimeEnd>
EndQtimeHanle(${stepQtimeEnd.id});
</#list>
if((eqpIDValue=="dummy" || eqpIDValue=="DUMMY")&& (areaValue=="PHOTO" || areaValue=="S1A-PHOTO" || areaValue=="S1B-PHOTO" ||areaValue=="S1C-PHOTO" || areaValue=="M1A-PHOTO" || areaValue=="M1B-PHOTO" || areaValue=="M1C-PHOTO" || areaValue=="SXA-PHOTO" || areaValue=="SXC-PHOTO") && eqpID=="Eqp ID"){
alert("Please do not set area as PHOTO for DUMMY Eqp ID!");
$("stepForm.area").focus();
return false;
}
if (typeof form.elements["noStepNoPar"]!= "undefined"){
if (!noStepNo.checked && form.elements["stepForm.stepNo"].value==""){
alert("Please input step No.");
form.elements["stepForm.stepNo"].focus();
return false;
}
if (noStepNo.checked && form.elements["stepForm.stepNo"].value!=""){
alert("Please unCheck NA.");
return false;
}
}
if(form.elements['stepForm.slotId'].value!="")
{ if(form.elements['stepForm.ecdPlanName'].value=="")
{alert("Please Input Corrective EDC Plan Name!");
form.elements['stepForm.ecdPlanName'].focus();
return false;}
}
if(form.elements['stepForm.ecdPlanName'].value!="")
{
if(form.elements['stepForm.slotId'].value=="")
{
alert("Please select SlotId!");
return false;
}
else
{
if(!checkWaferIdIsEqualSlotId(form)){
alert("Meas slot id is not in wafer id list");
return false;
}
}
}
if (typeof form.elements["stepForm.spec"]!= "undefined"){
var element = form.elements["stepForm.spec"].value;
if (element==""&&form.elements['stepForm.slotId'].value!=""){
alert("Please Input Corrective EDC Plan Name!");
form.elements["stepForm.ecdPlanName"].focus();
return false;
}
}
if (typeof form.elements["stepForm.area"]!= "undefined"){
var element = form.elements["stepForm.area"].value;
if (element=="Please Select"){
alert("Please select area.");
form.elements["stepForm.area"].focus();
return false;
}
}
if (typeof form.elements["stepForm.waferId"]!= "undefined"){
var element = form.elements["stepForm.waferId"].value;
if (element==""){
alert("Please select waferId.");
form.elements["stepForm.waferId"].focus();
return false;
}
}
if (typeof form.elements["stepForm.eqpModeName"]!= "undefined"){
var element = form.elements["stepForm.eqpModeName"].value;
var elementFlag = form.elements["stepForm.contaminationFlag"].value;
if (element=="" || element=="NA"){
alert("Equipment ID/Group can not be null or NA!");
form.elements["stepForm.eqpModeName"].focus();
return false;
}
if((element=="DUMMY" || element.indexOf("DMY02")!=-1)&& elementFlag!="NA"){
alert("EQPName is DUMMY.You must select the Contamination Flag 'NA'!");
return false;
}
}
if (typeof form.elements["stepForm.recipe"]!= "undefined"){
var element = form.elements["stepForm.recipe"].value;
if (element==""){
alert("Recipe can not be null");
form.elements["stepForm.recipe"].focus();
return false;
}
}
if (typeof form.elements["stepForm.area"]!= "undefined"){
var element = form.elements["stepForm.area"].value;
if (element==""){
alert("Area can not be empty");
form.elements["stepForm.area"].focus();
return false;
}
}
if (typeof form.elements["stepForm.scannerRecipe"]!= "undefined"){
var element = form.elements["stepForm.scannerRecipe"].value;
if (element==""){
alert("Scanner Recipe can not be null");
form.elements["stepForm.scannerRecipe"].focus();
return false;
}
}
if (typeof form.elements["stepForm.trackOutRecipe"]!= "undefined"){
var element = form.elements["stepForm.trackOutRecipe"].value;
if (element==""){
alert("Track Recipe can not be null");
form.elements["stepForm.trackOutRecipe"].focus();
return false;
}
}
if (typeof form.elements["stepForm.waferSlotId"]!= "undefined"){
var element = form.elements["stepForm.waferSlotId"].value;
if (element==""){
alert("Wafer/Slot Id can not be null");
form.elements["stepForm.waferSlotId"].focus();
return false;
}
}
if (typeof form.elements["stepForm.contaminationFlag"]!= "undefined"){
var element = form.elements["stepForm.contaminationFlag"].value;
var eqpName = form.elements["stepForm.eqpModeName"];
if (element=="Please Select"){
alert("Please Select Contamination Flag:");
form.elements["stepForm.contaminationFlag"].focus();
return false;
}
}
if (typeof form.elements["stepForm.remark"]!= "undefined"){
var element = form.elements["stepForm.remark"].value;
if(element.length>150)
{
alert("Remark 最多150个字符");
return false;
}
if(element.indexOf(">")!=-1 ||element.indexOf("<")!=-1){
alert("Remark can not have special character!");
form.elements["stepForm.remark"].focus();
return false;
}
if (element==""){
alert("Remark can not be null!");
form.elements["stepForm.remark"].focus();
return false;
}else{
removeEnter(form.elements["stepForm.remark"]);
}
}
if (typeof form.elements["stepForm.reticleId"]!= "undefined"){
var element = form.elements["stepForm.reticleId"].value;
if (element==""){
alert("ReticleID can not be null!");
form.elements["stepForm.reticleId"].focus();
return false;
}
}
if (typeof form.elements["stepForm.energy"]!= "undefined"){
var element = form.elements["stepForm.energy"].value;
if (element==""){
alert("Energy can not be null!");
form.elements["stepForm.energy"].focus();
return false;
}
}
if (typeof form.elements["stepForm.focus"]!= "undefined"){
var element = form.elements["stepForm.focus"].value;
if (element==""){
alert("Focus can not be null!");
form.elements["stepForm.focus"].focus();
return false;
}
}
if (typeof form.elements["stepForm.ovlData"]!= "undefined"){
var element = form.elements["stepForm.ovlData"].value;
if (element==""){
alert("OVL Data can not be null!");
form.elements["stepForm.ovlData"].focus();
return false;
}
}
if (typeof form.elements["stepForm.fabName"]!= "undefined"){
var element = form.elements["stepForm.fabName"].value;
if (element==""){
alert("Please Select the Fab Area!");
form.elements["stepForm.fabName"].focus();
return false;
}
}
if( typeof form.elements["stepForm.energyStep"]!= "undefined")
{
if(""==$F("stepForm.energyStep"))
{
alert("Please input the energyStep");
$("stepForm.energyStep").focus();
return false;
}
}
if( typeof form.elements["stepForm.focusStep"]!= "undefined")
{
if(""==$F("stepForm.focusStep"))
{
alert("Please input the energyStep");
$("stepForm.focusStep").focus();
return false;
}
}
form.action="addStepForm.action?ercParams=true";
checkboxSync();
disableButton();
form.submit();
}
function checkWaferIdIsEqualSlotId(object){
//第二个参数中的 g 表示全部匹配,i表示忽略大小写
var regS = new RegExp("S","gi");
var regS1=new RegExp("#","gi");
var slotIds;
var waferIds;
var slotId=object.elements["stepForm.slotId"].value;
var waferId=object.elements["stepForm.waferId"].value;
if(slotId.indexOf("S")!=-1){
slotIds=slotId.replace(regS,"");
}else{
slotIds=slotId.replace(regS1,"");
}
if(waferId.indexOf("S")!=-1){
waferIds=waferId.replace(regS,"");
}else{
waferIds=waferId.replace(regS1,"");
}
var array=slotIds.split(",");
for(var i=0;i<array.length;i++){
if(waferIds.indexOf(array[i])==-1) return false;
}
return true;
}
function removeEnter(object)
{
var regS = new RegExp(/\s*(.*?)\s*(\r\n)\s*/mg);
var s = object.value;
object.value = s.replace(regS, "$1"); //回车前后的空格都替换掉
}
function showWaferId(){
var windowOptions = "directories=no,location=no,width=700,height=500,alwaysRaised=yes,resizable=yes,scrollbars=yes";
var win= window.open('showWaferId.action?w&requestFormId=${requestForm.id}','stepFormWaferid','left=500,top=20,width=150,height=450');
win.focus();
}
function showSlotId(){
var win=window.open('showSlotId.action?s&requestFormId=${requestForm.id}','stepFormSlotid','left=500,top=20,width=150,height=450');
win.focus();
}
function showWaferIdStr(){
var windowOptions = "directories=no,location=no,width=700,height=500,alwaysRaised=yes,resizable=yes,scrollbars=yes";
var win= window.open('showWaferIdStr.action?w&requestFormId=${requestForm.id}','stepFormWaferid','left=500,top=20,width=150,height=450');
win.focus();
}
function showSlotIdStr(){
var win=window.open('showSlotIdStr.action?s&requestFormId=${requestForm.id}','stepFormSlotid','left=500,top=20,width=150,height=450');
win.focus();
}
function check(object){
var Number ="0123456789";
var holdStepNo="${requestForm.holdStepNo?if_exists}";
var repositStepNo="${requestForm.ercStepNo?if_exists}";
var stepNo=object.value;
for (i = 0; i < stepNo.length;i++){
var c = stepNo.charAt(i);
if(Number.indexOf(c)==-1){
alert("StepNo must be number!");
object.value="";
object.focus();
return false;
}
}
/*if(eval(stepNo)>eval(repositStepNo)||eval(stepNo)<eval(holdStepNo) )
{ alert("StepNo: "+stepNo+" must be between "+holdStepNo+" and "+repositStepNo);
object.value="";
object.focus();
return false;
}*/
}
function checkRemarkLength(object){
var value=object.value;
if(value.length>150){
alert("Remark 最多150个字符");
return false;
}
var pattern = /[^\x00-\xff]/;
if('${requestForm.formType?if_exists}'=="Scan Defect" && pattern.test(object.value)){
alert("只能输入英文!");
object.focus();
return false;
}
}
function checkEqpID(eqpID){
var form = document.forms['stepForm'];
var areaValue=form.elements["stepForm.area"].value;
form.elements["stepForm.eqpModeName"].value="";
if(typeof form.elements["stepForm.recipe"]!= "undefined")
form.elements["stepForm.recipe"].value="";
if(typeof form.elements["stepForm.trackOutRecipe"]!= "undefined")
form.elements["stepForm.trackOutRecipe"].value="";
var eqpId=eqpID.value;
var eqpValue=form.elements["stepForm.eqpModeName"].value;
var reg=/\s/g;
var stringLength=eqpValue.replace(reg,"");
if(eqpId=="Eqp ID"){
if(stringLength.length>7)
{alert("最多7个字符!请重新输入Eqp ID");
form.elements["stepForm.eqpModeName"].value="";
form.elements["stepForm.eqpModeName"].focus();
return false;
}
if(eqpValue=="dummy" ||eqpValue=="DUMMY" || eqpValue.indexOf("DMY02")!=-1){ //DMY02 for cension
if(areaValue=="PHOTO" || areaValue=="S1A-PHOTO" || areaValue=="S1B-PHOTO" ||areaValue=="S1C-PHOTO" || areaValue=="M1A-PHOTO" || areaValue=="M1B-PHOTO" || areaValue=="M1C-PHOTO" || areaValue=="SXA-PHOTO" || areaValue=="SXC-PHOTO")
{
alert("Please do not set area as PHOTO for DUMMY Eqp ID!");
form.elements["stepForm.area"].focus();
return false;
}
if(typeof form.elements["stepForm.recipe"]!= "undefined"){
form.elements["stepForm.recipe"].value="DUMMY";
form.elements["stepForm.recipe"].className="TextBoxReadOnly";
}
}
}else if(typeof form.elements["stepForm.recipe"]!= "undefined")
form.elements["stepForm.recipe"].className="TextBoxReadWrite";
}
</script>
<#if requestForm.status=="DRAFT">
<div class="app">
<h3 class="center">Add Runcard Step</h3>
<@ww.form name="'stepForm'" action="'addStepForm'" validate="'true'" method="'post'">
<@ww.hidden name="'requestFormId'" value="${requestForm.id}"/>
<@ww.hidden name="'stepFormId'"/>
<@ww.hidden name="'command'"/>
<@ww.hidden name="'stepForm.RCP'"/>
<@ww.hidden name="'stepForm.noStepNo'"/>
<@ww.hidden name="'stepForm.stepNoMes'"/>
<#--@ww.hidden name="'maxStep'"/-->
<input type="hidden" name="stepForm.measurementSpecNo" id="measurementSpecNo" value="<#if requestForm.formType?if_exists=='Scan Defect'>1<#else><@ww.property value='stepForm.measurementSpecNo'/></#if>"/>
<TABLE STYLE="display:none" BORDER=0 CELLSPACING=0 CELLPADDING=0>
<@ww.select name="'strCondition'" list="strConditions" listKey="wafers" listValue="description" theme="'simple'"/>
</TABLE>
<table border="0" cellspacing="1" cellpadding="8" width="100%">
<tr class="b">
<td>* Fab Area:</td>
<td>
<@ww.select name="'stepForm.fabName'" list="@com.smics.apps.erc.ErcConstants@FabAreaList" onchange="'changeShow(this)'" required="true" emptyOption="true" theme="'simple'"/>
</td>
<#if requestForm.formType?if_exists=="Scan Defect">
<td/><td/>
<@ww.textfield name="'stepForm.stepNo'" id="stepNo" size="10" theme="'simple'" cssStyle="'display:none'"/>
<input type="button" value="Go" onclick="getStepLotInfo();" style="display:none">
<input type="button" name="getStepList" value="ViewFutureStep" class="btn" onclick="doViewFutureStep('stepNo','getStepLotInfo()');">
<#else>
<td>StepNo:</td>
<td>
<#if !stepForm?exists || stepForm.stepSerialNo?default(0)==0 || !(stepForm.stepQtimes?has_content || stepForm.stepQtimeEnds?has_content)>
NA
<@ww.checkbox name="'noStepNoPar'" fieldValue="'true'" theme="'simple'"/>
<@ww.textfield name="'stepForm.stepNo'" id="stepNo" size="10" theme="'simple'" onblur="'check(this)'"/>
<input type="button" value="Go" onclick="getStepLotInfo();" >
<input type="button" name="getStepList" value="ViewFutureStep" class="btn" onclick="doViewFutureStep('stepNo','getStepLotInfo()');">
<#else>
NA
<@ww.checkbox name="'noStepNoPar'" fieldValue="'true'" theme="'simple'" disabled="true"/>
<@ww.textfield name="'stepForm.stepNo'" size="10" theme="'simple'" disabled="true"/>
</#if>
<font color="red">(RunCard Step与MES Step做Compare)</font></td>
</#if>
</tr>
<tr class="b" id="area" >
<td>* Area:</td>
<td colspan="3">
<@ww.select name="'stepForm.area'" list="areaList" onchange="'changeByArea(this)'" required="true" emptyOption="true" theme="'simple'"/>
<#--@ww.select name="'stepForm.area'" onchange="'changeByArea(this)'" required="true" emptyOption="true" theme="'simple'"/-->
<#if stepForm?exists>
Check With RCP<@ww.checkbox name="'rcpCheck'" fieldValue="'true'" theme="'simple'" onclick="'defalutValue();'"/>
<#else>
Check With RCP<@ww.checkbox name="'rcpCheck'" fieldValue="'true'" value="true" theme="'simple'" onclick="'defalutValue();'"/>
</#if>
</td>
</tr>
<tr id="showRemark" style="display:none;background: #efefef">
<td colspan="4">
<pre><font color="red" face="Arial">Is it Batch run at chamber:
ADASM01_N&ADASM01_O or ADASM02_P&ADASM02_G or BDASM91_H&BDASM91_P
If it is auto run, please fill in the special Eqp Group :
ADVF_RCN_1&ADVF_RCO_1 or ADVF_RCP_1&ADVF_RCG_1 or ADVF_RCH_1&ADVF_RCP_2</font></pre>
</td>
</tr>
<tr class="b">
<td>* Equipment:</td>
<td colspan="3"><@ww.select name="'stepForm.eqpMode'" list="{'Eqp ID','Eqp Group'}" required="true" onchange="'checkEqpID(this)'"
theme="'simple'"/>:<@ww.textfield name="'stepForm.eqpModeName'" size="25" theme="'simple'" onblur="'eqpToUpper(this)'" /><font color="red"> (Eqp Group区分大小写.输入的Eqp ID 的最大长度为7位!)</font></td>
</tr>
<#if command=="PHOTO" || command=="S1A-PHOTO" || command=="S1B-PHOTO" || command=="S1C-PHOTO" || command=="M1A-PHOTO" || command=="M1B-PHOTO" || command=="M1C-PHOTO"|| command=="SXA-PHOTO" || command=="SXC-PHOTO">
<tr class="b">
<td>* Track Recipe</td>
<td colspan="3"><@ww.textfield name="'stepForm.trackOutRecipe'" value="'${stepForm.trackOutRecipe?default('waiting Pi_Run Result'?if_exists)}'" size="40" theme="'simple'"/> <font color="red">(区分大小写)</font></td>
</tr>
<tr class="b">
<td>* Scanner Recipe</td>
<td colspan="3"><@ww.textfield name="'stepForm.scannerRecipe'" value="stepForm.scannerRecipe" size="40" theme="'simple'"/> <font color="red">(区分大小写)</font>  <@ww.radio name="'stepForm.recipeType'" list="@com.smics.apps.erc.ErcConstants@recipeTypes" value="'${stepForm.recipeType?default('Production'?if_exists)}'" onclick="'changeShow(this)'" theme="'simple'"/></td>
</tr>
<#else>
<tr class="b" >
<td>* Recipe:</td>
<td colspan="3"><input type="input" name="stepForm.recipe" size="40" value="<#if stepFormId?exists || (stepForm?exists && stepForm.recipe?exists)><@ww.property value='stepForm.recipe'/><#else>waiting Pi_Run Result</#if>"/> <font color="red">(区分大小写)</font></td>
</tr>
</#if>
<tr class="b">
<td>* Wafer ID:</td>
<td colspan="3">
<#if requestForm.formType?if_exists=="Scan Defect">
<input type="text" readonly="true" name="stepForm.waferId" value="<@ww.property value="requestForm.waferId"/>" id="wId" size="75" onclick="showWaferId()"/>
Qty.:<input type="text" name="stepForm.waferIdQty" value="<@ww.property value="requestForm.lotQty"/>" size="10" id="wQty" Style="background: #efefef;border:none"/>
<#else>
<#if requestForm.ercCategory?if_exists=="STR">
<input type="text" readonly="true" name="stepForm.waferId" value="<@ww.property value="stepForm.waferId"/>" id="wId" size="75" onclick="showWaferIdStr()"/>
Qty.:<input type="text" name="stepForm.waferIdQty" value="<@ww.property value="stepForm.waferIdQty"/>" size="10" id="wQty" Style="background: #efefef;border:none"/>
<#else>
<input type="text" readonly="true" name="stepForm.waferId" value="<@ww.property value="stepForm.waferId"/>" id="wId" size="75" onclick="showWaferId()"/>
Qty.:<input type="text" name="stepForm.waferIdQty" value="<@ww.property value="stepForm.waferIdQty"/>" size="10" id="wQty" Style="background: #efefef;border:none"/>
</#if>
</#if>
</td>
</tr>
<tr class="b">
<td>MeasSlotId:</td>
<#if requestForm.ercCategory?if_exists=="STR">
<td colspan="3"><input type="text" readonly="true" name="stepForm.slotId" value="<@ww.property value="stepForm.slotId"/>" id="sId" size="75" onclick="showSlotIdStr();"/>
Qty.:<input type="text" name="stepForm.slotIdQty" value="<@ww.property value="stepForm.slotIdQty"/>" size="10" id="sQty" Style="background: #efefef;border:none"/></td>
<#else>
<td colspan="3"><input type="text" readonly="true" name="stepForm.slotId" value="<@ww.property value="stepForm.slotId"/>" id="sId" size="75" onclick="showSlotId();"/>
Qty.:<input type="text" name="stepForm.slotIdQty" value="<@ww.property value="stepForm.slotIdQty"/>" size="10" id="sQty" Style="background: #efefef;border:none"/></td>
</#if>
</tr>
<tr class="b">
<td>* Contamination Flag: </td>
<td colspan="3">
<#if stepForm?exists && requestForm.fabId?default('')=="S1" && stepForm.fabName?default('')=="C">
<@ww.select name="'stepForm.contaminationFlag'" onchange="'checkNA(this)'" list="{'11--Without PR and Metal','12--With PR Without Metal','13--With Metal Without PR','14--With Metal With Barc','15--With AL Without PR','16--Thin Wafer','17--With AL and PR','NA'}"
headerKey="'Please Select'" headerValue="'Please Select'" emptyOption="false" theme="'simple'"/>
<#elseif stepForm?exists && requestForm.fabId?default('')=="M1">
<@ww.select name="'stepForm.contaminationFlag'" onchange="'checkNA(this)'" list="{'1--Front end w/o PR','2--Front end w/i PR (photo-resist)','3--TiSix (eDRAM process)','4--Metal (W/Ti/TiN/AI-Cu) w/o PR','5--Metal (W/Ti/TiN/AI-Cu) w/i PR (photo-resist)','6--Cobalt salicide','6.5--Cosix process b/f glue layer dep','7--Metal CAP dielectric','11--Without PR and Metal (Cu line)','12--With PR without Metal (Cu line)','13--With metal without PR (Cu line)','14--With metal with barc (Cu line)','15--With AL without PR (Cu line)','16--Thin wafer(Cu line)','17--With AL and PR(Cu line)','21--Without PR and Metal (Au line)','22--With PR without Metal (Au line)','23--With metal without PR (Au line)','24--With metal with PR (Au line)','NA'}" headerKey="'Please Select'" headerValue="'Please Select'" emptyOption="false" theme="'simple'"/>
<#elseif stepForm?exists && requestForm.fabId?default('')=="SX">
<@ww.select name="'stepForm.contaminationFlag'" onchange="'checkNA(this)'" list="{'1--Front end w/o PR','2--Front end w/i PR (photo-resist)','3--TiSix (eDRAM process)','4--Metal (W/Ti/TiN/AI-Cu) w/o PR','5--Metal (W/Ti/TiN/AI-Cu) w/i PR (photo-resist)','6--Cobalt salicide','6.5--Cosix process b/f glue layer dep','7--Metal CAP dielectric','11--Without PR and Metal (Cu line)','12--With PR without Metal (Cu line)','13--With metal without PR (Cu line)','14--With metal with barc (Cu line)','15--With AL without PR (Cu line)','16--Thin wafer(Cu line)','17--With AL and PR(Cu line)','21--Without PR and Metal (Au line)','22--With PR without Metal (Au line)','23--With metal without PR (Au line)','24--With metal with PR (Au line)','NA'}" headerKey="'Please Select'" headerValue="'Please Select'" emptyOption="false" theme="'simple'"/>
<#elseif stepForm?exists && stepForm.fabName?default('')=="FAB15">
<@ww.select name="'stepForm.contaminationFlag'" onchange="'checkNA(this)'" list="{'1--Front end w/o PR','2--Front end w/i PR (photo-resist)','3--TiSix (eDRAM process)','4--Metal (W/Ti/TiN/AI-Cu) w/o PR','5--Metal (W/Ti/TiN/AI-Cu) w/i PR (photo-resist)','6--Cobalt salicide','6.5--Cosix process b/f glue layer dep','7--Metal CAP dielectric','NA'}" headerKey="'Please Select'" headerValue="'Please Select'" emptyOption="false" theme="'simple'"/>
<#elseif stepForm?exists && stepForm.fabName?default('')=="FABJ1A">
<@ww.select name="'stepForm.contaminationFlag'" onchange="'checkNA(this)'" list="{'NA'}" headerKey="'Please Select'" headerValue="'Please Select'" emptyOption="false" theme="'simple'"/>
<#elseif stepForm?exists && (stepForm.fabName?default('')=="SILTECH" || stepForm.fabName?default('')=="FAB9")>
<@ww.select name="'stepForm.contaminationFlag'" onchange="'checkNA(this)'" list="{'NA'}" headerKey="'Please Select'" headerValue="'Please Select'" emptyOption="false" theme="'simple'"/>
<#else>
<@ww.select name="'stepForm.contaminationFlag'" onchange="'checkNA(this)'" list="{'1--Front end w/o PR','2--Front end w/i PR (photo-resist)','3--TiSix (eDRAM process)','4--Metal (W/Ti/TiN/AI-Cu) w/o PR','5--Metal (W/Ti/TiN/AI-Cu) w/i PR (photo-resist)','6--Cobalt salicide','6.5--Cosix process b/f glue layer dep','7--Metal CAP dielectric','NA'}" headerKey="'Please Select'" headerValue="'Please Select'" emptyOption="false" theme="'simple'"/>
</#if>
<b> current lot's contamination level:
<#if stepForm?exists && stepForm.lotCl?has_content>
<font color="#FF00">${stepForm.lotCl?if_exists}</font>
<#else>
Please refer to Queen.
</#if></b>
</td>
</tr>
<tr class="b">
<td colspan="4"><strong>实际下货Tools:</strong></td>
</tr>
<#if requestForm.formType?if_exists!="Scan Defect">
<tr class="b">
<td>* Remark:</td>
<td colspan="3"><@ww.textarea name="'stepForm.remark'" value="stepForm.remark" onblur="'checkRemarkLength(this)'" cols="35" rows="3" theme="'simple'"/><font color="red">(如果输入中文,Runcard只能Manual Run!!)</font></td>
</tr>
</#if>
<tr class="b">
<td>EDC Plan Name:</td>
<!--onchange="showSpec();" -->
<td colspan="3"><input type="text" name="stepForm.ecdPlanName" onchange="clearSpec();" <#if requestForm.formType?if_exists=="Scan Defect">value="DYINDF1H" readonly="true" <#else>value="<@ww.property value="stepForm.ecdPlanName"/>" </#if> size="20" /><#if requestForm.formType?if_exists!="Scan Defect"><input type="button" onclick="showSpec();" value="Go"></#if></td>
</tr>
<!-- Modity-->
<tr class="b">
<td>量测规格SPEC</td>
<td colspan="3">
<#if requestForm.formType=="Scan Defect">
<@ww.textarea name="'stepForm.spec'" cssStyle="'background: #efefef;border:none'" value="'DMY-09LG-LOOP-DFT:EA:100000:'" cols="65" readonly="true" rows="2" theme="'simple'"/>
<#else>
<@ww.textarea name="'stepForm.spec'" cssStyle="'background: #efefef;border:none'" id="spec" value="stepForm.spec" cols="65" readonly="true" rows="2" theme="'simple'"/>
</#if>
</td>
</tr>
<#if command=="PHOTO" || command=="S1A-PHOTO" || command=="S1B-PHOTO" || command=="S1C-PHOTO" || command=="M1A-PHOTO" || command=="M1B-PHOTO" || command=="M1C-PHOTO" || command=="SXA-PHOTO" || command=="SXC-PHOTO">
<#if stepForm.recipeType?default('')?if_exists=="Engineering">
<tr class="b" >
<td>* BatchType:</td>
<td colspan="3"><@ww.radio name="'stepForm.batchType'" list="@com.smics.apps.erc.ErcConstants@batchTypes" value="'${stepForm.batchType?default('Production'?if_exists)}'" onclick="'changeShow(this)'" theme="'simple'"/></td>
</tr>
</#if>
<tr class="b" >
<td>* ReticleID:</td>
<td colspan="3"><@ww.textfield name="'stepForm.reticleId'" value="stepForm.reticleId" size="65" theme="'simple'"/></td>
</tr>
<tr class="b" >
<td>* Energy:</td>
<td colspan="3"><@ww.textfield name="'stepForm.energy'" onblur="'changeValeuToNumber(this)'" value="stepForm.energy" size="65" theme="'simple'"/></td>
</tr>
<#if stepForm.batchType?default('')?if_exists=="Matrix" && stepForm.recipeType?default('')?if_exists=="Engineering" >
<tr class="b" >
<td>* EnergyStep:</td>
<td colspan="3"><@ww.textfield name="'stepForm.energyStep'" id="energyStep" onblur="'changeValeuToNumber(this)'" size="65" theme="'simple'"/> <font color="red">(Value:-1000.0~1000.0)</font></td>
</tr>
</#if>
<tr class="b">
<td>* Focus:</td>
<td colspan="3"><@ww.textfield name="'stepForm.focus'" onblur="'changeValeuToNumber(this)'" value="stepForm.focus" size="65" theme="'simple'"/></td>
</tr>
<#if stepForm.batchType?default('')?if_exists=="Matrix" && stepForm.recipeType?default('')?if_exists=="Engineering">
<tr class="b">
<td>* FocusStep:</td>
<td colspan="3"><@ww.textfield name="'stepForm.focusStep'" id="focusStep" onblur="'changeValeuToNumber(this)'" size="65" theme="'simple'"/> <font color="red">(Value:-2.00~2.00)</font></td>
</tr>
</#if>
<tr class="b">
<td>* OVL Data:</td>
<td colspan="3"><textarea name="stepForm.ovlData" readonly="true" id="stepForm.ovlData" value="<@ww.property value="stepForm.ovlData"/>" onclick="showOvl();" cols="65" rows="3"><@ww.property value="stepForm.ovlData"/></textarea></td>
</tr>
</#if>
</table>
<#if !stepForm?exists || stepForm.stepSerialNo?default(0)==0 || !(stepForm.stepQtimes?has_content || stepForm.stepQtimeEnds?has_content)>
<h3>Runcard Qtime Inforamtion</h3>
<table width="100%">
<#if stepQtimes?has_content>
<tr>
<td bgcolor="#87CEFF" colspan=9>
<b>
Below information <font color="#FF0000">just for reference</font>,Qtime Configuration Start at this Step in Mainflow,<font color="#FF0000">need setting at 'addmainflowQtime'</font>:
</b>
</td>
</tr>
<tr >
<td bgcolor="#DCDCDC" width=15% colspan=2><b>Qtime info:</b></td>
<td bgcolor="#DCDCDC" colspan=7>
<TABLE border=0 cellSpacing=1 cellSpacing=1 width="100%">
<TR>
<TD ><font color="#0000FF"><B><Red>StrStepSeq</font></TD>
<TD >EndStepSeq</TD>
<TD >IntervalTime</TD>
<TD >ControlType</TD>
<TD >ExpireAction</TD>
</TR>
<#list stepQtimes as stepQtimeStr>
<TR>
<TD ><font color="#0000FF"><B>${stepQtimeStr.strStepSeq?if_exists}</font></TD>
<TD >${stepQtimeStr.endStepSeq?if_exists}</TD>
<TD >${stepQtimeStr.intervalTime?if_exists}</TD>
<TD >${stepQtimeStr.controlType?if_exists}</TD>
<TD >${stepQtimeStr.expireAction?if_exists}</TD>
</TR>
</#list>
</Table>
</td>
</tr>
</#if>
<#if stepQtimeEnds?has_content>
<tr>
<td bgcolor="#87CEFA" colspan=9>
<b>
Qtime Configuration
<font color="#0000FF">End </font>
at this Step in Mainflow,pls select the 'Action'.
</b>
</td>
</tr>
<tr style="display:none">
<td>
<@ww.textfield name="'allEndQtimeHandle'" theme="'simple'" />
</TD>
</tr>
<tr>
<td bgcolor="#E6E6FA" width=15% colspan=2><b>End Qtime info:</b></td>
<td bgcolor="#E6E6FA" colspan=7>
<TABLE border=0 cellSpacing=1 cellSpacing=1 width="100%">
<TR>
<TD >Plan ID </TD>
<TD >Plan Ver </TD>
<TD >StrStepSeq</TD>
<TD ><font color="#0000FF"><B>EndStepSeq</font></TD>
<TD >IntervalTime</TD>
<TD >ControlType</TD>
<TD >ExpireAction</TD>
<TD >Action</TD>
</TR>
<#list stepQtimeEnds as stepQtimeEnd>
<TR>
<TD >${stepQtimeEnd.planId?if_exists}</TD>
<TD >${stepQtimeEnd.planVer?if_exists}</TD>
<TD >${stepQtimeEnd.strStepSeq?if_exists}</TD>
<TD ><font color="#0000FF"><B>${stepQtimeEnd.endStepSeq?if_exists}</font></TD>
<TD >${stepQtimeEnd.intervalTime?if_exists}</TD>
<TD >${stepQtimeEnd.controlType?if_exists}</TD>
<TD >${stepQtimeEnd.expireAction?if_exists}</TD>
<TD >
<@ww.select name="'endQtimeHanle${stepQtimeEnd.id}'"
list="{'Mapping','NULL'}"
emptyOption="false"
theme="'simple' "
onchange="'EndQtimeHanle(${stepQtimeEnd.id})'"/>
</TD>
</TR>
</#list>
</Table>
</td>
</tr>
</#if>
</table>
</#if>
<table width="100%">
<tr class="a">
<tr class="b"><td colspan="4" class="center"><input type="button" onclick="checkPageToSubmit()" value="Submit" class="btn1" /> <input type="Button" class="btn1" value="Close" onclick="window.close();"></td>
</tr>
</table>
</@ww.form>
<h3>Runcard Step Inforamtion</h3>
<#assign showAction = true >
<#assign showWGAction = true >
<#include "/user/stepForm/includeStepForm.ftl"/>
<#else>
<script>
alert("This runcard had been issued,please apply new application!"); window.close();
</script>
</#if>
</div>
<script>
function doViewFutureStep(callField,functionCall) {
var employeeSearchPopup;
var windowOptions = "directories=no,location=no,width=700,height=500,alwaysRaised=yes,resizable=yes,scrollbars=yes";
employeeSearchPopup = window.open('../user/popUpFetchStepInfo.action?method=peFetchStepInfo&catalogue=StepSeq&fetchDirection=0&requestFormId=${requestForm.id}', 'employeeSearchPopup', windowOptions);
employeeSearchPopup.focus();
callback = function (employeeNo){
document.getElementById(callField).value = employeeNo;
employeeSearchPopup.close();
if (functionCall!=null) eval(functionCall);
};
}
</script>
最新发布