Commit c41be807 authored by Scott Sun's avatar Scott Sun

s

parent 3e3d572f
...@@ -9,6 +9,12 @@ ...@@ -9,6 +9,12 @@
type : 'LineEdit', type : 'LineEdit',
property : {tool_tip : 'pcs step名,默认是cad'} property : {tool_tip : 'pcs step名,默认是cad'}
}, },
{
name : 'cam_type',
title : 'cam_type',
type : 'LineEdit',
property : {tool_tip : 'cam_type'}
},
{ {
name : 'vc_src_01005_pad_result', name : 'vc_src_01005_pad_result',
title : 'vc_src_01005_pad_result', title : 'vc_src_01005_pad_result',
...@@ -114,7 +120,7 @@ try { ...@@ -114,7 +120,7 @@ try {
if(v.context == "board" && v.layer_type == "drill"){ if(v.context == "board" && v.layer_type == "drill"){
if(v.type == "laser_drill"){ if(v.type == "laser_drill"){
GEN.affectedLayer({affected:'no',mode:'all'}) GEN.affectedLayer({affected:'no',mode:'all'})
GEN.workLayer({name:v.name,display_number:2,clear_before:'yes'}) GEN.workLayer({name:v.odb_name,display_number:2,clear_before:'yes'})
GEN.selClearFeature() GEN.selClearFeature()
GEN.selAllFeat() GEN.selAllFeat()
if(GEN.getSelectCount()>0){ if(GEN.getSelectCount()>0){
...@@ -125,7 +131,7 @@ try { ...@@ -125,7 +131,7 @@ try {
GEN.selClearFeature() GEN.selClearFeature()
} else if(v.type == "main_drill" || v.type == "blind_drill" || v.type == "bury_drill") { } else if(v.type == "main_drill" || v.type == "blind_drill" || v.type == "bury_drill") {
GEN.affectedLayer({affected:'no',mode:'all'}) GEN.affectedLayer({affected:'no',mode:'all'})
GEN.workLayer({name:v.name,display_number:2,clear_before:'yes'}) GEN.workLayer({name:v.odb_name,display_number:2,clear_before:'yes'})
GEN.selClearFeature() GEN.selClearFeature()
GEN.selRefFeat({layers:v.drl_start,use:'filter',mode:'touch',f_types:"pad"}) GEN.selRefFeat({layers:v.drl_start,use:'filter',mode:'touch',f_types:"pad"})
GEN.selRefFeat({layers:v.drl_end,use:'filter',mode:'touch',f_types:"pad"}) GEN.selRefFeat({layers:v.drl_end,use:'filter',mode:'touch',f_types:"pad"})
...@@ -172,23 +178,23 @@ try { ...@@ -172,23 +178,23 @@ try {
if(drl_side == "Top"){ if(drl_side == "Top"){
if((drl_start_num-1)==0){ drl_filler = "None" } if((drl_start_num-1)==0){ drl_filler = "None" }
else { else {
var top_l = "d" + (drl_start_num-1) + "-" + (drl_end_num-1) var top_l = "ftdrill" + (drl_start_num-1) + "-" + (drl_end_num-1) + "l"
if(GEN.isLayerExists({job:job, layer:top_l})){ if(GEN.isLayerExists({job:job, layer:top_l})){
GEN.clearLayers() GEN.clearLayers()
GEN.selClearFeature() GEN.selClearFeature()
GEN.workLayer({name:top_l,display_number:2,clear_before:'yes'}) GEN.workLayer({name:top_l,display_number:2,clear_before:'yes'})
GEN.selRefFeat({layers:drill.name,use:'filter',mode:'touch'}) GEN.selRefFeat({layers:drill.odb_name,use:'filter',mode:'touch'})
if(GEN.getSelectCount()>0){ if(GEN.getSelectCount()>0){
GEN.selClearFeature() GEN.selClearFeature()
drl_filler="Via Filling" drl_filler="Via Filling"
} }
} }
} }
var bot_l = "d" + (drl_start_num+1) + "-" + (drl_end_num+1) var bot_l = "ftdrill" + (drl_start_num+1) + "-" + (drl_end_num+1) + "l"
if(GEN.isLayerExists({job:job, layer:bot_l})){ if(GEN.isLayerExists({job:job, layer:bot_l})){
GEN.clearLayers() GEN.clearLayers()
GEN.selClearFeature() GEN.selClearFeature()
GEN.workLayer({name:drill.name,display_number:2,clear_before:'yes'}) GEN.workLayer({name:drill.odb_name,display_number:2,clear_before:'yes'})
GEN.selRefFeat({layers:bot_l,use:'filter',mode:'touch'}) GEN.selRefFeat({layers:bot_l,use:'filter',mode:'touch'})
if(GEN.getSelectCount()>0){ if(GEN.getSelectCount()>0){
GEN.selClearFeature() GEN.selClearFeature()
...@@ -200,23 +206,23 @@ try { ...@@ -200,23 +206,23 @@ try {
}else if (drl_side == "Bot"){ }else if (drl_side == "Bot"){
if((drl_end_num-layerCount)==0){ drl_filler = "None" } if((drl_end_num-layerCount)==0){ drl_filler = "None" }
else { else {
var top_l = "d" + (drl_start_num+1) + "-" + (drl_end_num+1) var top_l = "ftdrill" + (drl_start_num+1) + "-" + (drl_end_num+1) + "l"
if(GEN.isLayerExists({job:job, layer:top_l})){ if(GEN.isLayerExists({job:job, layer:top_l})){
GEN.clearLayers() GEN.clearLayers()
GEN.selClearFeature() GEN.selClearFeature()
GEN.workLayer({name:top_l,display_number:2,clear_before:'yes'}) GEN.workLayer({name:top_l,display_number:2,clear_before:'yes'})
GEN.selRefFeat({layers:drill.name,use:'filter',mode:'touch'}) GEN.selRefFeat({layers:drill.odb_name,use:'filter',mode:'touch'})
if(GEN.getSelectCount()>0){ if(GEN.getSelectCount()>0){
GEN.selClearFeature() GEN.selClearFeature()
drl_filler="Via Filling" drl_filler="Via Filling"
} }
} }
} }
var bot_l = "d" + (drl_start_num-1) + "-" + (drl_end_num-1) var bot_l = "ftdrill" + (drl_start_num-1) + "-" + (drl_end_num-1) + "l"
if(GEN.isLayerExists({job:job, layer:bot_l})){ if(GEN.isLayerExists({job:job, layer:bot_l})){
GEN.clearLayers() GEN.clearLayers()
GEN.selClearFeature() GEN.selClearFeature()
GEN.workLayer({name:drill.name,display_number:2,clear_before:'yes'}) GEN.workLayer({name:drill.odb_name,display_number:2,clear_before:'yes'})
GEN.selRefFeat({layers:bot_l,use:'filter',mode:'touch'}) GEN.selRefFeat({layers:bot_l,use:'filter',mode:'touch'})
if(GEN.getSelectCount()>0){ if(GEN.getSelectCount()>0){
GEN.selClearFeature() GEN.selClearFeature()
...@@ -227,8 +233,9 @@ try { ...@@ -227,8 +233,9 @@ try {
}else{ drill_info.drl_overlap = "No" } }else{ drill_info.drl_overlap = "No" }
} }
} else { } else {
GEN.workLayer({name:drill.name,display_number:2,clear_before:'yes'}) GEN.clearLayers()
GEN.selectByFilter({attribute:'.drill',option:'plated'}) GEN.workLayer({name:drill.odb_name,display_number:2,clear_before:'yes'})
GEN.selectByFilter({attribute:[{attribute:".drill",option:"plated"}],profile:"in"})
if(GEN.getSelectCount()>0){ if(GEN.getSelectCount()>0){
GEN.selClearFeature() GEN.selClearFeature()
drill_info.drl_type = "PTH" drill_info.drl_type = "PTH"
...@@ -336,10 +343,10 @@ try { ...@@ -336,10 +343,10 @@ try {
return {name:v, type:type}}) return {name:v, type:type}})
// glod_finger // glod_finger
var gold_fingers = Object.keys(tmp_matrix).filter(function(v){return /^top_enig$|^bot_enig$/ig.test(v)}) var gold_fingers = Object.keys(tmp_matrix).filter(function(v){return /^enig_top$|^enig_bot$/ig.test(v)})
if(gold_fingers.length){ if(gold_fingers.length){
gold_fingers = gold_fingers.map(function(v){ gold_fingers = gold_fingers.map(function(v){
var type = (v=="top_enig") ? "top" : "bot" var type = (v=="enig_top") ? "top" : "bot"
return {name:v, type:type} return {name:v, type:type}
}) })
} }
...@@ -503,11 +510,11 @@ try { ...@@ -503,11 +510,11 @@ try {
}) })
}) })
// console.log("=============================> 6 set smd bga") console.log("=============================> 6 set smd bga genesistype:" + GEN.GEN_TYPE)
var allStep = GEN.getStepList({job:job}) var allStep = GEN.getStepList({job:job})
allStep.forEach(function(step){ allStep.forEach(function(step){
GEN.openStep({job:job,name:step}) GEN.openStep({job:job,name:step})
if(GEN.GEN_TYPE == "genesis"){ if(par.cam_type == "genesis"){
GEN.COM("chklist_single,action=valor_cleanup_set_smd,show=yes") GEN.COM("chklist_single,action=valor_cleanup_set_smd,show=yes")
GEN.COM("chklist_cupd,chklist=valor_cleanup_set_smd,nact=1,params=((pp_layer=.type=signal|mixed&side=top|bottom)(pp_drill=No)(pp_rotate=No)(pp_ignore_covered=Yes)(pp_sm=No)(pp_types=Square\;Rect\;Oval)(pp_other=)(pp_delete=No)),mode=regular") GEN.COM("chklist_cupd,chklist=valor_cleanup_set_smd,nact=1,params=((pp_layer=.type=signal|mixed&side=top|bottom)(pp_drill=No)(pp_rotate=No)(pp_ignore_covered=Yes)(pp_sm=No)(pp_types=Square\;Rect\;Oval)(pp_other=)(pp_delete=No)),mode=regular")
GEN.COM("chklist_run,chklist=valor_cleanup_set_smd,nact=1,area=profile") GEN.COM("chklist_run,chklist=valor_cleanup_set_smd,nact=1,area=profile")
...@@ -852,7 +859,7 @@ function ANALYSIS_STACKUP(props){ ...@@ -852,7 +859,7 @@ function ANALYSIS_STACKUP(props){
layer.side = layer.enum_tl_side; layer.side = layer.enum_tl_side;
layer.input_file_name = layer.file_name; layer.input_file_name = layer.file_name;
layer.odb_row_num = layer.row; layer.odb_row_num = layer.row;
if (layer.odb_name == 'drill'){ if (layer.odb_name == 'ftdrill'){
layer.name = 'drill'; layer.name = 'drill';
layer.drl_start_num = 1; layer.drl_start_num = 1;
layer.drl_end_num = layer_count; layer.drl_end_num = layer_count;
...@@ -860,8 +867,8 @@ function ANALYSIS_STACKUP(props){ ...@@ -860,8 +867,8 @@ function ANALYSIS_STACKUP(props){
layer.drl_to_num = layer_count; layer.drl_to_num = layer_count;
layer.type = 'main_drill'; layer.type = 'main_drill';
} }
else if (/^d(\d+)\-(\d+)$/.test(layer.odb_name)){ else if (/^ftdrill(\d+)-(\d+)l$/.test(layer.odb_name)){ // /^d(\d+)\-(\d+)$/
var tmp = /^d(\d+)\-(\d+)$/.exec(layer.odb_name) var tmp = /^ftdrill(\d+)-(\d+)l$/.exec(layer.odb_name)
var drl_star = tmp[1]; var drl_star = tmp[1];
var drl_end = tmp[2]; var drl_end = tmp[2];
layer.name = 'd' + drl_star + '-' + drl_end; layer.name = 'd' + drl_star + '-' + drl_end;
...@@ -1005,10 +1012,15 @@ function save_job_info(props){ // 保存料号信息 ...@@ -1005,10 +1012,15 @@ function save_job_info(props){ // 保存料号信息
function save_layerinfo(props){ // 保存层信息 function save_layerinfo(props){ // 保存层信息
var jobid = props.jobid; var jobid = props.jobid;
var layer = props.layer; var layer = props.layer;
// if(Omatrix[layer] && Omatrix[layer].tl_name){
// if(!(/^drill/ig.test(Omatrix[layer].tl_name))){
// layer = Omatrix[layer].tl_name
// }
// }
if(Omatrix[layer] && Omatrix[layer].tl_name){ if(Omatrix[layer] && Omatrix[layer].tl_name){
if(!(/^drill/ig.test(Omatrix[layer].tl_name))){ // if(!(/^drill/ig.test(Omatrix[layer].tl_name))){
layer = Omatrix[layer].tl_name layer = Omatrix[layer].tl_name
} // }
} }
var layerinfohash = props.layerinfohash; var layerinfohash = props.layerinfohash;
Object.keys(layerinfohash).forEach(function(key){ Object.keys(layerinfohash).forEach(function(key){
...@@ -1159,8 +1171,8 @@ function analysis(props){ ...@@ -1159,8 +1171,8 @@ function analysis(props){
laser_layers = laser_layers.sort(function(a,b){return Number(a.row)-Number(b.row)}) laser_layers = laser_layers.sort(function(a,b){return Number(a.row)-Number(b.row)})
var laser_info = {} var laser_info = {}
for(var i = 0; i < laser_layers.length-1; i++){ for(var i = 0; i < laser_layers.length-1; i++){
var start_layer = laser_layers[i].name var start_layer = laser_layers[i].odb_name
var cover_layer = laser_layers[i+1].name var cover_layer = laser_layers[i+1].odb_name
GEN.workLayer({name:start_layer,display_number:2,clear_before:'yes'}) GEN.workLayer({name:start_layer,display_number:2,clear_before:'yes'})
GEN.selClearFeature() GEN.selClearFeature()
GEN.selRefFeat({layers:cover_layer,use:'filter',mode:'cover'}) GEN.selRefFeat({layers:cover_layer,use:'filter',mode:'cover'})
...@@ -1177,9 +1189,9 @@ function analysis(props){ ...@@ -1177,9 +1189,9 @@ function analysis(props){
var via_vias_info = [] var via_vias_info = []
function analysis_via_number(layers){ function analysis_via_number(layers){
if(layers.length < 2){return} if(layers.length < 2){return}
var startlayer = layers[0].name + "_cover" var startlayer = layers[0].odb_name + "_cover"
GEN.selClearFeature() GEN.selClearFeature()
GEN.workLayer({name:layers[0].name,display_number:2,clear_before:'yes'}) GEN.workLayer({name:layers[0].odb_name,display_number:2,clear_before:'yes'})
GEN.selAllFeat() GEN.selAllFeat()
selCopyLayer({job:t.job,layer:startlayer}) selCopyLayer({job:t.job,layer:startlayer})
var end_index = start_cover_next(startlayer,layers,0) var end_index = start_cover_next(startlayer,layers,0)
...@@ -1194,13 +1206,13 @@ function analysis(props){ ...@@ -1194,13 +1206,13 @@ function analysis(props){
layers = layers.slice(1) layers = layers.slice(1)
GEN.workLayer({name:start,display_number:2,clear_before:'yes'}) GEN.workLayer({name:start,display_number:2,clear_before:'yes'})
GEN.selClearFeature() GEN.selClearFeature()
GEN.selRefFeat({layers:layers[0].name,use:'filter',mode:'cover'}) GEN.selRefFeat({layers:layers[0].odb_name,use:'filter',mode:'cover'})
var count = GEN.getSelectCount() var count = GEN.getSelectCount()
if (count < 1) { if (count < 1) {
GEN.deleteLayer({job:t.job,layer:start}) GEN.deleteLayer({job:t.job,layer:start})
return ++end_index return ++end_index
} }
var nextstartlayer = layers[0].name + "_cover" var nextstartlayer = layers[0].odb_name + "_cover"
selCopyLayer({job:t.job,layer:nextstartlayer}) selCopyLayer({job:t.job,layer:nextstartlayer})
GEN.deleteLayer({job:t.job,layer:start}) GEN.deleteLayer({job:t.job,layer:start})
return start_cover_next(nextstartlayer,layers,++end_index) return start_cover_next(nextstartlayer,layers,++end_index)
...@@ -1631,6 +1643,9 @@ function analysisChkAttr(par) { ...@@ -1631,6 +1643,9 @@ function analysisChkAttr(par) {
} }
return a return a
}, "N/A") }, "N/A")
if(hash[v][key]=="N/A"){
hash[v][key] = 999
}
}) })
}) })
return hash return hash
...@@ -2052,3 +2067,5 @@ function has_steps(props){ ...@@ -2052,3 +2067,5 @@ function has_steps(props){
return res.indexOf(pcs_step) >= 0 return res.indexOf(pcs_step) >= 0
} }
...@@ -138,9 +138,9 @@ try { ...@@ -138,9 +138,9 @@ try {
}) })
}); });
var job_file_baseName = job var job_file_baseName = job
if(vc_position && vc_position != "" && !(/null/ig.test(vc_position))){ // if(vc_position && vc_position != "" && !(/null/ig.test(vc_position))){
job_file_baseName = job_file_baseName + "_" + vc_position // job_file_baseName = job_file_baseName + "_" + vc_position
} // }
var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName}) var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName})
if(jobFile.length == 0){throw "job file is not exist"} if(jobFile.length == 0){throw "job file is not exist"}
var jobFiles = [] // 记录要分析的文件 var jobFiles = [] // 记录要分析的文件
...@@ -160,9 +160,10 @@ try { ...@@ -160,9 +160,10 @@ try {
} else { // 多个tgz文件 说明需要合并 } else { // 多个tgz文件 说明需要合并
console.log("==========合并的情况"); console.log("==========合并的情况");
var jobs = jobInfo.data.map(function(item, i){ var jobs = jobInfo.data.map(function(item, i){
var err = importJob({name:job + "_tmp_" + i,db:custCfg.db,path:item.file.path},config.delSameJob) var tmp_job_name = job + "_tmp_" + i
var err = importJob({name:tmp_job_name,db:custCfg.db,path:item.file.path},config.delSameJob)
if(err){throw err} if(err){throw err}
return job + "_tmp_" + i return tmp_job_name
}) })
// 分析arr_job 和 pcs_job // 分析arr_job 和 pcs_job
jobs = jobs.map(function(jobname){ jobs = jobs.map(function(jobname){
......
...@@ -267,8 +267,8 @@ ...@@ -267,8 +267,8 @@
} }
], ],
"tl_name": [ "tl_name": [
{"orig_name" : ["top_enig"], "tl_name" : "top_enig" }, {"orig_name" : ["top_enig","top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["bot_enig"], "tl_name" : "bot_enig" }, {"orig_name" : ["bot_enig","bot-enig","enig_bot"], "tl_name" : "enig_bot" },
{"orig_name" : ["^spt$","^past_top$"], "tl_name" : "past_top" }, {"orig_name" : ["^spt$","^past_top$"], "tl_name" : "past_top" },
{"orig_name" : ["^spb$","^past_botm$"], "tl_name" : "past_botm" }, {"orig_name" : ["^spb$","^past_botm$"], "tl_name" : "past_botm" },
{"orig_name" : ["^sst$","^silk_top$"], "tl_name" : "silk_top" }, {"orig_name" : ["^sst$","^silk_top$"], "tl_name" : "silk_top" },
...@@ -419,8 +419,8 @@ ...@@ -419,8 +419,8 @@
{"orig_name" : "fab.art", "tl_name" : "fab.art" }, {"orig_name" : "fab.art", "tl_name" : "fab.art" },
{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" }, {"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
{"orig_name" : ["^outline"], "tl_name" : "outline" }, {"orig_name" : ["^outline"], "tl_name" : "outline" },
{"orig_name" : ["top-enig","top_enig"], "tl_name" : "top_enig" }, {"orig_name" : ["top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["bot-enig","bot_enig"], "tl_name" : "bot_enig" }, {"orig_name" : ["bot-enig","enig_bot"], "tl_name" : "enig_bot" },
] ]
}, },
"New_data": { "New_data": {
...@@ -548,19 +548,19 @@ ...@@ -548,19 +548,19 @@
} }
}, },
"data_format": [ "data_format": [
{"tl_name":"top_enig" , "new_name":"top_enig" , "attr":{ "context":"board", "type":"document" }}, {"tl_name":"enig_top" , "new_name":"enig_top" , "attr":{ "context":"board", "type":"document" }},
{"tl_name":"past_top" , "new_name":"past_top" , "attr":{ "context":"board", "type":"solder_paste" }}, {"tl_name":"past_top" , "new_name":"past_top" , "attr":{ "context":"board", "type":"solder_paste" }},
{"tl_name":"silk_top" , "new_name":"silk_top" , "attr":{ "context":"board", "type":"silk_screen" }}, {"tl_name":"silk_top" , "new_name":"silk_top" , "attr":{ "context":"board", "type":"silk_screen" }},
{"tl_name":"sm_top" , "new_name":"sm_top" , "attr":{ "context":"board", "type":"solder_mask" }}, {"tl_name":"sm_top" , "new_name":"sm_top" , "attr":{ "context":"board", "type":"solder_mask" }},
{"tl_name":"^top$" , "new_name":"top" , "attr":{ "context":"board", "type":"signal" }}, {"tl_name":"^top$" , "new_name":"top" , "attr":{ "context":"board", "type":"signal" }},
{"tl_name":"l_(\\d+)","new_name":"layer_($1)" ,"attr":{"context":"board","type":"signal"}}, {"tl_name":"l_(\\d+)","new_name":"l($1)" ,"attr":{"context":"board","type":"signal"}},
{"tl_name":"^bottom$","new_name":"bottom" ,"attr":{"context":"board","type":"signal"}}, {"tl_name":"^bottom$","new_name":"bottom" ,"attr":{"context":"board","type":"signal"}},
{"tl_name":"sm_botm" , "new_name":"sm_botm" , "attr":{ "context":"board", "type":"solder_mask" }}, {"tl_name":"sm_botm" , "new_name":"sm_botm" , "attr":{ "context":"board", "type":"solder_mask" }},
{"tl_name":"silk_bot" , "new_name":"silk_bot" , "attr":{ "context":"board", "type":"silk_screen" }}, {"tl_name":"silk_bot" , "new_name":"silk_bot" , "attr":{ "context":"board", "type":"silk_screen" }},
{"tl_name":"past_botm" , "new_name":"past_botm" , "attr":{ "context":"board", "type":"solder_paste" }}, {"tl_name":"past_botm" , "new_name":"past_botm" , "attr":{ "context":"board", "type":"solder_paste" }},
{"tl_name":"bot_enig" , "new_name":"bot_enig" , "attr":{ "context":"board", "type":"document" }}, {"tl_name":"enig_bot" , "new_name":"enig_bot" , "attr":{ "context":"board", "type":"document" }},
{"tl_name":"d_(\\d+)-(\\d+)","new_name":"d($1)-($2)" ,"attr":{"context":"board","type":"drill"}}, {"tl_name":"d_(\\d+)-(\\d+)","new_name":"ftdrill($1)-($2)l" ,"attr":{"context":"board","type":"drill"}},
{"tl_name":"drill","new_name":"drill" ,"attr":{"context":"board","type":"drill"}}, {"tl_name":"drill","new_name":"ftdrill" ,"attr":{"context":"board","type":"drill"}},
{"tl_name":"rout","new_name":"rout" ,"attr":{"context":"board","type":"rout"}}, {"tl_name":"rout","new_name":"rout" ,"attr":{"context":"board","type":"rout"}},
{"tl_name":"outline","new_name":"outline" ,"attr":{"context":"board","type":"rout"}}, {"tl_name":"outline","new_name":"outline" ,"attr":{"context":"board","type":"rout"}},
{"tl_name":"array","new_name":"array" ,"attr":{"context":"misc"}}, {"tl_name":"array","new_name":"array" ,"attr":{"context":"misc"}},
......
...@@ -16,7 +16,7 @@ try { ...@@ -16,7 +16,7 @@ try {
var layer = "l3" var layer = "l3"
GEN.copyLayer({source_job:job, source_step:step,source_layer:"gko",dest_layer:"gko_tmp"}) GEN.copyLayer({source_job:job, source_step:step,source_layer:"gko",dest_layer:"gko_tmp"})
GEN.selectByFilter({profile:"in"})
return "Done" return "Done"
} catch (e) { } catch (e) {
IKM.msg(e) IKM.msg(e)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment