objectPicker.js 73 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722
  1. "use strict";
  2. //{(function(){objectPicker(
  3. //"ffry",
  4. //"null",
  5. //"testRy",
  6. //"true",
  7. //"env.rycx",
  8. //"null",
  9. //"{'input':'true','visible':'xm','invisible':'ryid','name':'ffry','codebook':'env.rycx','object':'testRy'}",
  10. //"/service?token=7548c1572b6149cfb1e03f7cc4675cc2",
  11. //"null",
  12. //"null");})()}
  13. var wd=window.wd;
  14. if (!wd) {
  15. var wd = {};
  16. }
  17. if(!wd.edit){
  18. wd.edit={};
  19. }
  20. if(!wd.edit.objectPicker){
  21. wd.edit.objectPicker={};
  22. }
  23. if(!wd.edit.objectPicker.instance){
  24. wd.edit.objectPicker.instance={};
  25. }
  26. if(!wd.edit.objectPicker.activeInstance){
  27. wd.edit.objectPicker.activeInstance={};
  28. }
  29. if(!wd.edit.objectPicker.tipWinList){
  30. wd.edit.objectPicker.tipWinList=[];
  31. //绑定清除元素时间
  32. $(window).unload(function(){
  33. if(wd.edit.objectPicker.tipWinList.length==0)return;
  34. var removeId="";
  35. $(wd.edit.objectPicker.tipWinList).each(function(index,ele){
  36. removeId+="#"+ele+",";
  37. })
  38. removeId=removeId.substring(0,removeId.length-1);
  39. wd.topWindow.window.$(removeId).remove();
  40. })
  41. }
  42. if(!wd.edit.objectPicker.getInstance){
  43. wd.edit.objectPicker.getInstance=function(name){
  44. return wd.edit.objectPicker.instance[name];
  45. };
  46. }
  47. if(!wd.topWindow){
  48. wd.topWindow=window;
  49. }
  50. if(!wd.edit.objectPicker.setValue)
  51. wd.edit.objectPicker.setValue=function(objectID){
  52. // console.log(objectID);
  53. wd.topWindow.objectPickerObject.initValueWithOption(objectID)
  54. wd.topWindow.objectPickerObject=null;
  55. wd.display.closeDialog();
  56. }
  57. if(!wd.edit.objectPicker.getDisplayValue)
  58. wd.edit.objectPicker.getDisplayValue=function(dataElement){
  59. return dataElement.objectPickerBody.getElementValue();
  60. }
  61. if(!wd.edit.objectPicker.isObjectPicker)
  62. wd.edit.objectPicker.isObjectPicker=function(dataElement){
  63. if(!dataElement)return false
  64. return dataElement.objectPickerBody?true:false;
  65. }
  66. if(!wd.edit.objectPicker.bodyClick){
  67. wd.edit.objectPicker.bodyClick=function(e){
  68. for(var key in wd.edit.objectPicker.activeInstance){
  69. var aa=wd.edit.objectPicker.activeInstance[key];
  70. if(!aa)continue;
  71. aa.elementBlurFunction(e);
  72. }
  73. }
  74. $("body").on("click",window.wd.edit.objectPicker.bodyClick);
  75. $(".content-div,.list-div").scroll(wd.edit.objectPicker.bodyClick);
  76. $(function(){
  77. //app用
  78. setTimeout(function(){
  79. $("#app").on("click",window.wd.edit.objectPicker.bodyClick);
  80. $("#app").scroll(wd.edit.objectPicker.bodyClick);
  81. },3000)
  82. })
  83. }
  84. if(!wd.edit.objectPicker.hideAllOptions){
  85. wd.edit.objectPicker.hideAllOptions=function(e){
  86. for(var key in wd.edit.objectPicker.activeInstance){
  87. var aa=wd.edit.objectPicker.activeInstance[key];
  88. if(!aa)continue;
  89. aa.hiddenOptions(e);
  90. }
  91. }
  92. }
  93. if(typeof wd.edit.objectPicker.initScrollId =="undefined")
  94. wd.edit.objectPicker.initScrollId=null;
  95. if(typeof wd.edit.objectPicker.addButtonClickName =="undefined")
  96. wd.edit.objectPicker.addButtonClickName=null;
  97. if(!wd.edit.cascading)
  98. wd.edit.cascading={}
  99. if(!wd.edit.cascading.instance)
  100. wd.edit.cascading.instance={}
  101. if(!wd.edit.cascading.display)
  102. wd.edit.cascading.display=function(data){
  103. var data=eval("("+data+")");
  104. // console.log(data);
  105. for(var key in data){
  106. $("[name="+key+"]").hide().after("<span>"+data[key]+"</span>")
  107. }
  108. }
  109. if(!wd.edit.cascading.getInstance)
  110. wd.edit.cascading.getInstance=function(name){
  111. //console.log("cascading "+name);
  112. var s=wd.edit.cascading.instance[name];
  113. if(!s)return ;
  114. var casFunction= function(){
  115. this.param={
  116. cascadingInputsRule:null,
  117. cascadingLevel:null,
  118. cascadingInputsName:null,
  119. cascadingInputsElement:null
  120. };
  121. // this.extension={
  122. // onchange:null,
  123. // getValue:null,
  124. // getDisplayValue:null,
  125. // getDisplayElement:null,
  126. // validation:null,
  127. // passValidation:null,
  128. // failValidation:null,
  129. // getName:null,
  130. // refreshOption:null,
  131. // initValue:null,
  132. // getOptionsSize:null
  133. // }
  134. this.init=function(param){
  135. this.param=param;
  136. return this;
  137. }
  138. this.setValue=function(val){
  139. //console.log("cascading value :"+val)
  140. val+="";
  141. var values=[]
  142. for(var i=0;i<this.param.cascadingLevel.length;i++){
  143. var level=(i+1);
  144. var v="";
  145. //112233
  146. for(var j=0;j<this.param.cascadingInputsRule.length;j++){
  147. var rulNum=parseInt( this.param.cascadingInputsRule.substr(j,1));
  148. if(level>=rulNum){
  149. v+=val.substr(j,1);
  150. }else{
  151. v+="0";
  152. }
  153. }
  154. values.push(v);
  155. }
  156. for(var i=0;i<this.param.cascadingLevel.length;i++){
  157. var cas=this.param.cascadingLevel[i];
  158. wd.edit.objectPicker.getInstance(cas).refreshElementDisplay({value:values[i]});
  159. // wd.edit.objectPicker.getInstance(cas).initValue(values[i],{refreshCascadingOption:false});
  160. // if(i==(this.param.cascadingLevel.length-1))
  161. // wd.edit.objectPicker.getInstance(cas).refreshCascadingInputsValue();
  162. }
  163. // console.log(values);
  164. return values;
  165. }
  166. }
  167. return new casFunction().init(s);
  168. }
  169. if(!wd.edit.objectPicker.showHelp){
  170. wd.edit.objectPicker.showHelpid=null;
  171. var dialog=wd.topWindow.$("#objectpicker_helptip");
  172. if(dialog.length==0){
  173. dialog=wd.topWindow.$("<div id=\"objectpicker_helptip\" class=\"flashMsg-div\" style=\"position: absolute;z-index: 1014;opacity:1;\" class=\"flashMsg-div\">"
  174. // +"<style>.help-size-l{width: 700px;}.help-size-m{width: 500px;}.help-size-s{width: 300px;}</style>"
  175. // + ((data.helpSize.toLowerCase() == "l") ? "" : "<div class=\"triangle smallHelp-div-triangle\"><span></span></div>")
  176. +"<div class=\"arrowup flashMsg-up\"></div>"
  177. +"<div class=\"arrowdown flashMsg-down\"></div>"
  178. +"<div class=\"flashMsg-title\">"
  179. +" <div title=\"帮助标题\" class=\"title\"></div>"
  180. // +" <div title=\"复制代码\" class=\"copy invertIcon-key\" ></div>"
  181. +" <div title=\"已锁定\" class=\"pin invertIcon-unpin\" ></div>"
  182. +" <div title=\"关闭\" class=\"close invertIcon-close\" ></div>"
  183. +"</div>"
  184. +"<div class=\"content\"></div>"
  185. +"</div>"
  186. ).appendTo("body");
  187. dialog.on("click",".pin",function(){
  188. dialog.find(".pin").hide();
  189. dialog.find(".close").show();
  190. clearTimeout(wd.edit.objectPicker.showHelpid);
  191. })
  192. dialog.on("click",".close",function(){
  193. wd.edit.objectPicker.hideHelp();
  194. })
  195. }
  196. wd.edit.objectPicker.showHelp=function(element,data){
  197. dialog.find(".content").html(data.content);
  198. dialog.find(".pin").show();
  199. dialog.find(".close").hide();
  200. var bounding=element.getBoundingClientRect();
  201. var left=bounding.left+bounding.width;
  202. var top=bounding.top+bounding.height;
  203. dialog.show();
  204. if(top+dialog.outerHeight()>wd.topWindow.innerHeight){
  205. top=bounding.top-dialog.outerHeight();
  206. dialog.find(".arrowup").hide();
  207. dialog.find(".arrowdown").show();
  208. }else{
  209. dialog.find(".arrowup").show();
  210. dialog.find(".arrowdown").hide();
  211. }
  212. dialog.css({left:left+"px",top:top+"px"});
  213. clearTimeout(wd.edit.objectPicker.showHelpid);
  214. wd.edit.objectPicker.showHelpid=setTimeout(function(){
  215. wd.edit.objectPicker.hideHelp();
  216. },3000);
  217. }
  218. wd.edit.objectPicker.hideHelp=function(){
  219. dialog.hide();
  220. }
  221. }
  222. //根据查找id或name查找元素,可传入多个参数一起查找, 返回找到的第一个
  223. if(!wd.edit.objectPicker.getElementByIdOrByName){
  224. wd.edit.objectPicker.getElementByIdOrByName=function(val){
  225. var result;
  226. for(var a=0;a<arguments.length ;a++){
  227. //name属性优先,再到id
  228. if(!result){
  229. result=document.querySelector("[id='objectPicker_"+arguments[a]+"']")||document.querySelector("[name='"+arguments[a]+"']")
  230. }
  231. }
  232. return result;
  233. }
  234. }
  235. wd.edit.objectPicker.initMobileSelectOption = function (id) {
  236. wd.topWindow.$("#" + id).remove();
  237. var ele = $("<div id=\"" + id + "\" class=\"mobilePopup-div hLine-highlightBlod\" >"
  238. + "<div class=\"scrollbar\" style=\"max-height:250px;overflow-x:auto;padding-right:16px;\"></div>"
  239. + "</div>")[0];
  240. wd.topWindow.document.body.appendChild(ele);
  241. return ele
  242. }
  243. wd.edit.objectPicker.buildMobileSelectOption = function (dom, datalist, valueKey, nameKey, selectValue, hasNullOption) {
  244. var ul = dom.childNodes[0];
  245. var st=''
  246. if (datalist && datalist.length > 0) {
  247. var listr = hasNullOption ? '<div class=\"mobilePopupList\" style=\"'+st+'\" status="noitem">&nbsp;&nbsp;&nbsp;</div>' : '';
  248. for (var i = 0; i < datalist.length; i++) {
  249. var name = datalist[i][nameKey];
  250. var value = datalist[i][valueKey];
  251. listr += '<div class=\"' + (value == selectValue ? ' selected ' : '') + 'mobilePopupList\" style=\"'+st+'\" status="people" value="' + value + '"' + 'index="' + i + '">' + name + '</div>';
  252. }
  253. ul.innerHTML = listr;
  254. } else {
  255. ul.innerHTML = hasNullOption ? '<div class=\"mobilePopupList\" style=\"'+st+'\" status="noitem">找不到相关项</div>' : '';
  256. }
  257. }
  258. if(!wd.edit.objectPicker.body)
  259. wd.edit.objectPicker.body=function(){
  260. var THIS=this;
  261. this.service=null;
  262. this.IS_MOBILE=false;
  263. //最小输入触发长度,大于等于
  264. this.MINIMUM_INPUT_SIZE=1;
  265. //是否每个输入都要查询
  266. this.REAL_TIME_SEARCH=true;
  267. //输入停止后触发搜索延迟时间,毫秒
  268. this.SEARCH_DELAY_TIME=1000;
  269. //延迟显示详细信息时间 毫秒
  270. this.SHOW_DELAY_TIME=1000;
  271. this.VIEW_OBJECT_NAME=null;
  272. this.MODIFYABLE=true;
  273. //搜索服务,显示服务
  274. this.searchService=null;
  275. this.previewService=null;
  276. this.name=null;//种子
  277. //唯一标识
  278. this.ID=null;
  279. this.initparam=null//初始化参数
  280. this.OTHER_PARAM={}; //其他参数
  281. this.element=null;
  282. this.dataElement=null;
  283. this.playElement=null;
  284. //表面要显示的数据
  285. this.face_name=null;
  286. //背后隐藏的数据
  287. this.back_name=null;
  288. this.helptip_name=null;
  289. this.tipWin=null;
  290. this.tipWin_option=null;
  291. this.tipWin_button=null;
  292. this.tipWin_detail=null;
  293. this.selectOption
  294. // 搜索结果
  295. this.searchResult=null;
  296. this.staticResult=null;
  297. this.firstClick=true;
  298. //已经输入过
  299. this.haveComfirm=true;
  300. // ajax请求时的参数
  301. this.CONNECT_PARAM=null;
  302. this.QUERY_PARAM={};
  303. this.wins=null;
  304. //弹窗选择器
  305. this.dialogFinderButton=null
  306. this.input=false;
  307. this.cascadingLevel=null;
  308. this.cascadingInputsRule=null;
  309. this.cascadingInputsName=null;
  310. this.cascadingInputsElement=null;
  311. this.addButton=null;
  312. this.WINDOWS=null;
  313. this.instantSearch=null;
  314. this.dropdown=null;
  315. // this.$objectPickerNameDiv=$("<span class=\"objectpicker-nameDiv-value\"></span>"+"<span class=\"objectpicker-nameDiv-placeholder form-insideLabel\"></span>")
  316. this.placeholder=null;
  317. this.GrowHeightInstance=null;
  318. this.filterField=null;
  319. this.getCascadingInputsValue=function(){
  320. if(!this.cascadingInputsElement)return
  321. return this.cascadingInputsElement.value
  322. }
  323. this.setCascadingInputsValue=function(){
  324. if(!this.cascadingInputsElement)return
  325. //112233
  326. var rule=this.cascadingInputsRule+"";
  327. var vs=[];
  328. for(var i=0;i<this.cascadingLevel.length;i++){
  329. var instance=wd.edit.objectPicker.getInstance(this.cascadingLevel[i]);
  330. var thisValue=instance.getValue()
  331. vs.push(thisValue);
  332. }
  333. var result="";
  334. for(var i=0;i<rule.length;i++){
  335. var num=parseInt(rule.substr(i,1))-1;
  336. if(num<0||num>(rule.length-1)||!vs[num]){
  337. result+="0"
  338. }else{
  339. result+=vs[num].substr(i,1);
  340. }
  341. }
  342. if(result.replace(/0+/,"").length==0)
  343. result="";
  344. // if(!v){
  345. //
  346. // var preObjectPickerName=this.getPreCascadingName();
  347. // var preObjectPicker=wd.edit.objectPicker.getInstance(preObjectPickerName);
  348. //
  349. // if(preObjectPicker){
  350. // v=preObjectPicker.getValue();
  351. // }else{
  352. // v=""
  353. // }
  354. // }
  355. //
  356. this.cascadingInputsElement.value=result;
  357. try{
  358. //校验器
  359. // $(this.cascadingInputsElement).trigger("blur").trigger("focus").trigger("keyup");
  360. $(this.cascadingInputsElement).trigger("keyup")
  361. }catch(e){
  362. console.log(e);
  363. }
  364. }
  365. //外部调用
  366. this.extension={
  367. onchange:null,
  368. getValue:null,
  369. getDisplayValue:null,
  370. getDisplayElement:null,
  371. validation:null,
  372. passValidation:null,
  373. failValidation:null,
  374. getName:null,
  375. refreshOption:null,
  376. initValue:null,
  377. getOptionsSize:null,
  378. getOptions:null,
  379. refreshCascadingInputsValue:null,
  380. refreshElementDisplay:null,
  381. setwdCloseWindowParamData:null,
  382. setQueryParam:null,
  383. copyObjectPicker:null,
  384. focus:null,
  385. modify:null
  386. }
  387. this.extension.onchange=null;
  388. this.extension.getValue=function getDataElementValue(){
  389. return THIS.getDataElementValue();
  390. }
  391. this.extension.getDisplayValue=function(){
  392. return THIS.getElementValue();
  393. }
  394. this.extension.passValidation=function(){
  395. return THIS.passValidation()
  396. }
  397. this.extension.failValidation=function(){
  398. return THIS.failValidation()
  399. }
  400. this.extension.getName=function(){
  401. return THIS.name;
  402. }
  403. this.extension.refreshOption=function(args){
  404. var setting=$.extend({},{refreshCascadingOption:true,refreshCascadingName:""},args);
  405. THIS.receiveData({async:true,callback:function(){
  406. THIS.showOptions();
  407. THIS.buildOptions();
  408. THIS.setDataElementValue("");
  409. if(!THIS.isCascading()){
  410. THIS.initElementValue();
  411. THIS.showOptions();
  412. }else{
  413. //THIS.initElementValue();
  414. // THIS.confirmOption(true);
  415. THIS.setDataElementValue("");
  416. THIS.setElementValue("");
  417. THIS.setCascadingInputsValue(THIS.getDataElementValue());
  418. THIS.hiddenOptions();
  419. THIS.hiddenDetail();
  420. THIS.changeFinish(setting);
  421. if(THIS.getOptionsSize()>0&&setting.refreshCascadingName==THIS.name){
  422. THIS.showOptions();
  423. }
  424. }
  425. }});
  426. }
  427. this.extension.initValue=function(v,args){
  428. THIS.setDataElementValue(v);
  429. THIS.initElementValue();
  430. THIS.changeFinish(args);
  431. }
  432. this.extension.getDisplayElement=function(){
  433. return THIS.getElement();
  434. }
  435. this.extension.getOptionsSize=function(){
  436. return THIS.getAllData().length;
  437. }
  438. this.extension.refreshCascadingInputsValue=function(){
  439. return THIS.setCascadingInputsValue();
  440. }
  441. this.extension.refreshElementDisplay=function(args){
  442. if(args.value)
  443. THIS.setDataElementValue(args.value);
  444. THIS.initElementDisplay(args);
  445. //THIS.changeFinish(args);
  446. }
  447. this.extension.setwdCloseWindowParamData=function(datas){
  448. THIS.setwdCloseWindowParamData(datas);
  449. THIS.WINDOWS.wd.edit.objectPicker.addButtonClickName=null;
  450. }
  451. this.extension.setQueryParam=function(name,v){
  452. console.log(THIS.QUERY_PARAM);
  453. THIS.QUERY_PARAM[name]=v;
  454. }
  455. this.extension.copyObjectPicker=function(name){
  456. //不支持级联
  457. var newinitparam=$.extend({},THIS.initparam,{name:name});
  458. new wd.edit.objectPicker.body().init(newinitparam);
  459. }
  460. this.extension.focus=function(){
  461. THIS.elementInputFunction();
  462. }
  463. this.extension.modify=function(canModify){
  464. THIS.MODIFYABLE=canModify?true:false;
  465. THIS.$objectPickerSelectTriangle.css("opacity",canModify?1:0);
  466. }
  467. this.extension.getOptions=function(){
  468. var setting={refreshCascadingOption:false};
  469. THIS.receiveData({async:false,callback:function(){
  470. }});
  471. return THIS.getAllData();
  472. }
  473. //初始化
  474. this.init=function(initparam){
  475. this.name=initparam.name;
  476. this.input=initparam.input;
  477. this.IS_MOBILE=initparam.isMobile
  478. var name=this.name;
  479. var placeholder="";
  480. //目标输入元素
  481. var elem,hiddenElem,playElem,$elem,$elem_mobile;
  482. hiddenElem=wd.edit.objectPicker.getElementByIdOrByName(name,name+"m",name+"id",name+"Id",name+"ID");
  483. playElem=wd.edit.objectPicker.getElementByIdOrByName(name+"Play");
  484. $elem=$("<div name='"+name+"NameDiv' id=\"objectPickergrowheight"+name+"\" class=\"objectPickerNameDiv-"+name+" input-div\"></div>");
  485. $elem_mobile=$("<div class=\"mobileInput-div input-s\" name='"+name+"NameDiv' ><textarea class=\"form-text smallScrollbar border-textarea\" style=\"resize:none\"></textarea></div>");
  486. elem=wd.edit.objectPicker.getElementByIdOrByName(name+"name",name+"Name",name+"NAME");
  487. var cssElement;
  488. cssElement=elem||hiddenElem;
  489. if(cssElement.getAttribute("placeholder")){
  490. placeholder=cssElement.getAttribute("placeholder");
  491. $elem.attr("placeholder",placeholder);
  492. $elem_mobile.attr("placeholder",placeholder);
  493. }
  494. $elem.attr("style",cssElement.getAttribute("style"));
  495. $elem_mobile.attr("style",cssElement.getAttribute("style"));
  496. if(playElem){
  497. playElem.setAttribute("style",cssElement.getAttribute("style"));
  498. playElem.style.display="inline-block";
  499. }
  500. if(cssElement.getAttribute("width")){
  501. $elem.css({width:cssElement.getAttribute("width")});
  502. $elem_mobile.css({width:cssElement.getAttribute("width")});
  503. }
  504. this.placeholder=placeholder;
  505. hiddenElem.setAttribute("type","hidden");
  506. if(elem){
  507. $(elem).remove();
  508. }
  509. var GrowHeightInstance;
  510. if(this.IS_MOBILE){
  511. $(hiddenElem).before($elem_mobile);
  512. var $elem_mobile_textarea=$($elem_mobile).find("textarea");
  513. this.GrowHeightInstance={val:function(v){
  514. if(typeof v=="undefined"){
  515. return $elem_mobile_textarea.val()||'';
  516. }
  517. $elem_mobile_textarea.val(v);
  518. }};
  519. if(!this.input){
  520. $elem_mobile_textarea.attr("disabled",true);
  521. }
  522. elem=$elem_mobile[0];
  523. }else{
  524. $(hiddenElem).before($elem);
  525. var thisid=$elem.attr("id");
  526. try{
  527. if(!window.getGrowHeight||!wd.edit.initGrowHigh){
  528. $("head").append("<script type=\"text/javascript\" src=\"/ss/js/edit.js\"></script>")
  529. $("head").append("<script type=\"text/javascript\" src=\"/ss/js/growHeight.js\"></script>")
  530. }
  531. if(window.growHeightList&&window.growHeightList[thisid]){
  532. $(window.growHeightList[thisid].container.parentNode).remove();
  533. delete window.growHeightList[thisid];
  534. }
  535. wd.edit.initGrowHigh(thisid,'null',{});
  536. GrowHeightInstance=window.growHeightList[thisid];
  537. elem=GrowHeightInstance.getInputElement().parentNode;
  538. if(!this.input){
  539. GrowHeightInstance.getInputElement().setAttribute("disabled",true);
  540. }
  541. this.GrowHeightInstance=GrowHeightInstance;
  542. }catch(e){
  543. console.log(e);
  544. return;
  545. }
  546. }
  547. // target:elem,
  548. // datatarget:hiddenElem,
  549. // playElem:playElem,
  550. //////this.element=initparam.target;
  551. //////this.dataElement=initparam.datatarget
  552. //////this.playElement=initparam.playElem;
  553. this.element=elem;
  554. this.dataElement=hiddenElem;
  555. this.playElement=playElem
  556. ///////////////////////////////////////
  557. if(!wd.topWindow)wd.topWindow=top
  558. this.WINDOWS=window;
  559. // console.log(initparam);
  560. this.wins=window;
  561. /////this.GrowHeightInstance=initparam.GrowHeightInstance;
  562. // this.ID=initparam.ID;
  563. this.initparam=initparam
  564. ////this.element=initparam.target;
  565. ////this.dataElement=initparam.datatarget
  566. ////this.playElement=initparam.playElem;
  567. this.element.objectPickerBody=this;
  568. this.dataElement.objectPickerBody=this;
  569. this.elementValue=null
  570. this.dataElementValue=null
  571. this.searchService=initparam.search
  572. this.previewService=initparam.preview
  573. this.face_name=initparam.facename;
  574. this.back_name=initparam.backname;
  575. this.helptip_name=initparam.helptipname;
  576. // this.tipWin_button=initparam.okbutton//按钮
  577. this.VIEW_OBJECT_NAME=initparam.viewobject;
  578. //eval+stringify复制这个对象
  579. this.OTHER_PARAM=initparam.otherparam;
  580. ////this.placeholder=initparam.placeholder;
  581. this.addButton=initparam.addButton;
  582. this.instantSearch=initparam.instantSearch;
  583. this.dropdown=initparam.dropdown;
  584. this.filterField=initparam.filterField;
  585. var p=initparam.connectparam;
  586. this.CONNECT_PARAM=JSON.stringify(initparam.connectparam);
  587. this.cascadingLevel=initparam.cascadingLevel;
  588. this.cascadingInputsRule=initparam.cascadingInputsRule;
  589. this.cascadingInputsName=initparam.cascadingInputsName;
  590. if(this.cascadingInputsName){
  591. this.cascadingInputsElement=document.querySelector("[name="+this.cascadingInputsName+"]");
  592. if(this.cascadingInputsElement){
  593. wd.edit.cascading.instance[this.cascadingInputsName]={}
  594. wd.edit.cascading.instance[this.cascadingInputsName]["cascadingInputsRule"]=this.cascadingInputsRule;
  595. wd.edit.cascading.instance[this.cascadingInputsName]["cascadingLevel"]=this.cascadingLevel;
  596. wd.edit.cascading.instance[this.cascadingInputsName]["cascadingInputsName"]=this.cascadingInputsName;
  597. wd.edit.cascading.instance[this.cascadingInputsName]["cascadingInputsElement"]=this.cascadingInputsName;
  598. }
  599. }
  600. // this.helptip_name="meow";
  601. initparam.helptipData=initparam.helptipData||{};
  602. //初始化转换数据
  603. if(initparam.codebookData){ // {1: '男性', 2: '女性'}。Lin
  604. this.searchResult=[];
  605. for(var i=0;i<initparam.codebookData.length;i++){
  606. for(var key in initparam.codebookData[i]){
  607. var aa={};
  608. aa[this.face_name]=initparam.codebookData[i][key]; // "mc"。Lin
  609. aa[this.back_name]=key; // "xbm"。Lin
  610. // initparam.helptipData[key]="咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕";
  611. if(this.helptip_name&&initparam.helptipData&&initparam.helptipData[key]){
  612. aa[this.helptip_name]=initparam.helptipData[key];
  613. }
  614. this.searchResult.push(aa); // {mc: '男性', xbm: '1'}, {mc: '女性', xbm: '2'}。Lin
  615. }
  616. }
  617. }
  618. this.createTipWin();
  619. this.hiddenOptions();
  620. this.hiddenDetail();
  621. this.dialogFinderButton=wd.edit.objectPicker.getElementByIdOrByName(this.name+"selector",this.name+"Selector",this.name+"SELECTOR");
  622. this.initdialogFinderButton();
  623. var THIS=this;
  624. if(this.playElement)
  625. this.element.style.display="none";
  626. // if(!this.input){
  627. // $(this.objectPickerSelectTriangle).appendTo(this.element);
  628. // $("<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABeSURBVDhPtcvRCcAgEAPQ7r+Bo7mCS1joRdFQT8UY8iHm3pPHCTHhNcgE+/4ONun7C7iVVgx91JhYLeYmUkyAiqMSHabT3+L0iwjTkVMADaZ5WlPHmIbFHmP62mhML1ikLSQ2ZIrUAAAAAElFTkSuQmCC'></img>").insertAfter(this.element);
  629. // console.log(this.element);
  630. // }
  631. // console.log(this.extension);
  632. wd.edit.objectPicker.instance[this.name]=this.extension
  633. this.initElementDisplay({isInit:true,triggerChange:false});
  634. // this.initElementValue();//初始化姓名
  635. return this;
  636. }
  637. this.initdialogFinderButton=function(){
  638. if(!this.dialogFinderButton)return;
  639. var THIS=this;
  640. $(this.dialogFinderButton).on("click",(function(){
  641. return function(){
  642. // console.log(THIS);
  643. wd.topWindow.objectPickerObject=THIS
  644. }
  645. })())
  646. }
  647. this.initElementDisplay=function(args){
  648. var setting=$.extend({},{iteration:false,isInit:false,triggerChange:true},args);
  649. this.setElementValue("");
  650. var receive=false;
  651. if(setting.iteration){
  652. receive=true;
  653. }else if(this.isCascading()){
  654. //级联从最后一级往上初始化
  655. receive=!THIS.getNextCascadingName()
  656. if(setting.isInit){
  657. // 根据rule填充值
  658. var cascadingV=this.calCascadingInputValue();
  659. if(cascadingV)
  660. this.setDataElementValue(cascadingV);
  661. }
  662. if(receive){
  663. args={refreshPreCascading:true,iteration:true,triggerChange:false};
  664. }
  665. }else if(this.getDataElementValue()){
  666. receive=true;
  667. }
  668. if(receive){//单独picker
  669. this.receiveData({async:true,searchValue:true,dataValue:this.getDataElementValue(),callback:function(){
  670. var thisData=null;
  671. for(var i=0;THIS.searchResult&&i<THIS.searchResult.length;i++){
  672. if(THIS.searchResult[i][THIS.back_name]==THIS.getDataElementValue()){ // "1" == "1".Lin
  673. thisData=THIS.searchResult[i]; // mc:"居民身份证", sfzjlbm:"1"。Lin
  674. THIS.setElementValue(THIS.searchResult[i][THIS.face_name]); // "居民身份证"。Lin
  675. break;
  676. }
  677. }
  678. THIS.changeFinish(args);
  679. }});
  680. }
  681. // else if(setting.isInit&&!this.getDataElementValue()&&!this.isCascading()){
  682. // THIS.receiveData({searchAll:true,async:true,callback:function(){
  683. //
  684. // if(THIS.searchResult.length==1){
  685. // var thisData=THIS.searchResult[0];
  686. // THIS.setDataElementValue(thisData[THIS.back_name]);
  687. // THIS.setElementValue(thisData[THIS.face_name]);
  688. // THIS.changeFinish(args);
  689. // }
  690. // }});
  691. // }
  692. }
  693. //初始化
  694. this.initElementValue=function(){
  695. var v=this.getDataElementValue()||"";
  696. this.setElementValue("");
  697. //当隐藏元素长度为0是不需要初始化
  698. if(v.length==0){return}
  699. this.receiveData({searchValue:true,dataValue:v});
  700. if(!this.searchResult)
  701. console.log("初始化找不到查询结果"+v)
  702. var thisData=this.findDataByValue(v);
  703. if(thisData){
  704. this.setElementValue(thisData[this.face_name]);
  705. }
  706. // for(var i=0;this.searchResult&&i<this.searchResult.length;i++){
  707. // if(this.searchResult[i][this.back_name]==v){
  708. // thisData=this.searchResult[i];
  709. // this.setElementValue(this.searchResult[i][this.face_name]);
  710. // break;
  711. // }
  712. // }
  713. // if(thisData){
  714. // var preObjectPickerName=this.getPreCascadingName();
  715. // var preObjectPicker=wd.edit.objectPicker.getInstance(preObjectPickerName);
  716. //
  717. // if(preObjectPicker){
  718. // var n=preObjectPicker.getName();
  719. // if(thisData[n]){
  720. // preObjectPicker.initValue(thisData[n]);
  721. // }
  722. // }
  723. // }
  724. return thisData?true:false;
  725. }
  726. /**
  727. * 使用id初始化,数值不会马上填入隐藏字段,
  728. * 先生成一个只有一个选项的下拉,显示ok按钮,按ok后设置数值
  729. */
  730. this.initValueWithOption=function(id){
  731. var v=id||"";
  732. THIS.setDataElementValue(v);
  733. THIS.initElementDisplay();
  734. // var v=id||"";
  735. //
  736. // this.setDataElementValue(v);
  737. //
  738. // this.receiveData({searchValue:true,dataValue:v});
  739. //
  740. // if(this.searchResult&&this.searchResult.length==1){
  741. // var elementvalue=this.searchResult[0][this.face_name]
  742. //
  743. // this.setElementValue(elementvalue);
  744. // var data=null;
  745. //
  746. // this.showOptions();
  747. // this.receiveData({callback:this.buildOptions});
  748. //
  749. // }else{
  750. // this.setElementValue("");
  751. //
  752. // }
  753. }
  754. //创建输入提示主题最外层
  755. this.createTipWin=function(){
  756. // var old=wd.topWindow.document.querySelector(".objectpicker");
  757. // if(old){
  758. // old.parentNode.removeChild(old)
  759. // }
  760. this.tipWin=document.createElement("div");
  761. // var options_Width=this.element.offsetWidth+"px"
  762. //下拉
  763. // var content="<div class=\"objectPickerOption\" style='border:1px solid #ccc;position:absolute;overflow-x: auto;max-height:250px;background:#ffffff;z-index:1003;z-index:1013;width:"+(options_Width*3)+"px;'>"
  764. // +"<div>"
  765. // +"<button class='close_option'>关闭</button>"
  766. //// +"<button class='show_all_option'>全部</button>"
  767. // +"</div>"
  768. // +"<div><ul style='padding:0 0;margin: 0 0'></ul></div>"
  769. // var content="<div class=\"objectPickerOption popup-div hLine-highlightBlod\" >"
  770. // +"<div class=\"scrollbar\" style=\"max-height:250px;overflow-x:auto;padding-right:16px;\"></div>"
  771. // +"</div>"
  772. var content=""
  773. //详细信息
  774. +"<div class=\"objectPickerMinniPlay\" style='position:absolute;left:600px;z-index:1003;top:200px;'>"
  775. // +"<div style='border: 20px solid transparent;border-right-color: #ccc;width: 26px;border-top-right-radius: 5px;float:left;'></div>"
  776. +"<div class='detail_body' style='float:left;border: 1px solid #ccc;border-radius: 10px;width: auto;top: -10px;height: auto;background-color: #ffffff;'></div>"
  777. +"</div>"
  778. //确认按钮
  779. // position:absolute;left:10px;top:10px;display:none;z-index:1003;
  780. +"<div class=\"objectPickerButton\" style='display:none;'>"
  781. // +"<div class='button'><button>OK</button></div>"
  782. +"<input title=\"确认\" style=\"padding:0 0;margin: 0 0;height: inherit;display:inline-block\" type=\"button\" class=\"bottom-button\" value=\"OK\"/>"
  783. +"</div>"
  784. try{
  785. this.ID="objectPickerBody_"+this.name.replace(/\./,'');
  786. var usableId=this.ID;
  787. var count=1;
  788. var exitTopWin=wd.topWindow.$("#"+usableId);
  789. while(exitTopWin.length>0){
  790. var opw=exitTopWin[0].objectpickerwindow;
  791. if(opw&&opw.closed===true){//清除无用的div
  792. exitTopWin.remove();
  793. break;
  794. }
  795. count++;
  796. usableId=THIS.ID+"_"+count;
  797. exitTopWin=wd.topWindow.$("#"+usableId)
  798. }
  799. this.ID=usableId;
  800. this.tipWin.setAttribute("class"," objectPickerBody");
  801. this.tipWin.setAttribute("id",this.ID);
  802. // $(window).unload(function(){
  803. // wd.topWindow.window.$("#"+THIS.ID).remove();
  804. // })
  805. this.tipWin.objectpickerwindow=window;
  806. // wd.topWindow.window.$("."+this.ID).remove();
  807. wd.topWindow.document.body.appendChild(this.tipWin);
  808. wd.edit.objectPicker.tipWinList.push(this.ID);
  809. }catch(e){
  810. console.log(e)
  811. }
  812. this.tipWin.innerHTML=content
  813. var initSelectOption=this.IS_MOBILE?wd.edit.objectPicker.initMobileSelectOption:wd.display.initSelectOption;
  814. this.tipWin.appendChild(initSelectOption(this.ID+"_selectOption"))
  815. // console.log(this.tipWin.childNodes)
  816. this.tipWin_option=this.tipWin.childNodes[2]
  817. $(this.tipWin_option).addClass("objectPickerOption");
  818. this.tipWin_detail=this.tipWin.childNodes[0]
  819. if(this.IS_MOBILE){
  820. this.$objectPickerSelectTriangle=$("<span class=\"mobileSmallButton icon-down\"></span><span class=\"mobileIcon-down\"></span>");
  821. this.tipWin_option_list_class="mobilePopupList";
  822. }else{
  823. this.$objectPickerSelectTriangle=$("<span class=\"smallButton icon-down\"></span><span class=\"icon-down\"></span>");
  824. this.tipWin_option_list_class="popupList";
  825. }
  826. if(!this.dropdown){
  827. this.$objectPickerSelectTriangle.hide();
  828. }else if(this.input){
  829. this.$objectPickerSelectTriangle.last().hide();
  830. }else{
  831. this.$objectPickerSelectTriangle.first().hide();
  832. }
  833. this.$objectPickerSelectTriangle.appendTo(this.element);
  834. $(this.element).find("textarea").css("width","calc(100% - "+(this.$objectPickerSelectTriangle.width()+4)+"px)");
  835. // //确认按钮可能已经在页面设置好
  836. // if(!this.tipWin_button){
  837. // console.log("找不到ok按钮")
  838. // this.tipWin_button=this.tipWin.childNodes[1]
  839. // }
  840. $(this.tipWin_option).on("mouseover","."+this.tipWin_option_list_class,this.tipWinOptionMouseOverFun)
  841. $(this.tipWin_option).on("mouseout","."+this.tipWin_option_list_class,this.tipWinOptionMouseOutFun)
  842. $(this.tipWin_option).on("click",this.tipWinOptionClickFun);
  843. $(this.tipWin_option).on("contextmenu",function(){return false});
  844. $(this.tipWin_option).on("mousedown","."+this.tipWin_option_list_class,this.tipWinOptionRightClickFun);
  845. //关闭按钮\n
  846. // $(this.tipWin_option).on("click",".close_option",this.tipWinOptionCloseFun());
  847. //显示全部按钮
  848. // $(this.tipWin_option).on("click",".show_all_option",this.tipWinOptionShowAllFun());
  849. //$(this.tipWin_button).on("click",this.tipWinButtonClickFun).insertAfter(this.element);
  850. // $(this.tipWin_button).on("mouseover","button,input[type=button]",this.tipWinButtonMouseOverFun())
  851. // $(this.tipWin_button).on("mouseout","button,input[type=button]",this.tipWinButtonMouseOutFun())
  852. // $(this.element).on("contextmenu",function(){return false});
  853. // $(this.element).on("mouseover",this.elementMouseoverFunction);
  854. // $(this.element).on("mouseout",this.elementMouseOutFunction);
  855. if(this.input){
  856. if(this.instantSearch){
  857. $(this.element).find("textarea").on("input",this.elementInputFunction);
  858. }else{
  859. $(this.element).find("textarea").on("keyup",this.elementEnterKeyFunction);
  860. }
  861. // $(this.element).find("input").on("keyup",this.keyupAndDownFunction());
  862. $(this.element).find("textarea").focus(this.elementFocusFunction).blur(this.elementFocusToBlurFunction);
  863. }else{
  864. $(this.element).on("click",this.elementInputFunction);
  865. }
  866. this.$objectPickerSelectTriangle.on("click",this.triangleClickFunction);
  867. // try{
  868. // wd.topWindow.$("body").on("click",this.elementBlurFunction);
  869. // }catch(e){
  870. // console.log(e)
  871. // }
  872. //
  873. // //$(".content-div,.list-div").scroll(this.elementBlurFunction);
  874. }
  875. this.tipWinOptionMouseOutFun=function(){
  876. if(THIS.selectOneOption){
  877. THIS.uncheckOption(THIS.selectOneOption);
  878. }
  879. THIS.selectOneOption=null;
  880. }
  881. this.selectOneOption=null;
  882. //列表上预览信息
  883. this.tipWinOptionMouseOverFun=function(){
  884. //console.log(this);
  885. var lis=THIS.tipWin_option.querySelectorAll("."+THIS.tipWin_option_list_class)
  886. THIS.selectOneOption=this;
  887. THIS.checkOption(this)
  888. for(var i=0;i<lis.length;i++){
  889. if(lis[i]!=this){
  890. THIS.uncheckOption(lis[i]);
  891. }
  892. }
  893. var index=this.getAttribute("index");
  894. if(index){ // "1"。Lin
  895. if(THIS.previewService&&"null"!=THIS.previewService){
  896. $(this).addClass("cursor-help");
  897. }
  898. if(THIS.searchResult[index]&&THIS.searchResult[index][THIS.helptip_name]){ // mc: '女性', xbm: '2'。Lin
  899. $(this).addClass("cursor-help");
  900. }
  901. }
  902. // if(this.getAttribute("status")=="people"){
  903. // var bounding=this.getBoundingClientRect()
  904. // // var left=bounding.left+bounding.width
  905. // var left=THIS.tipWin_option.getBoundingClientRect().left+THIS.tipWin_option.getBoundingClientRect().width
  906. // var top=bounding.top;
  907. //
  908. //
  909. // var li=THIS.tipWin_option.querySelector("[checkstate=selected]")
  910. // var index=li.getAttribute("index");
  911. //// var xy=THIS.recursionIframe();
  912. //
  913. // THIS.showDetail(left,top,index);
  914. //
  915. //
  916. // var searchResult=THIS.searchResult[index];
  917. //
  918. // if(searchResult[THIS.helptip_name]){
  919. // THIS.WINDOWS.wd.edit.objectPicker.showHelp(this,{title:this.innerHTML,content:searchResult[THIS.helptip_name]});
  920. // }else{
  921. // THIS.WINDOWS.wd.edit.objectPicker.hideHelp();
  922. // }
  923. //
  924. //
  925. //
  926. //
  927. //
  928. //
  929. // }else{
  930. // THIS.hiddenDetail()
  931. // }
  932. }
  933. this.tipWinOptionRightClickFun=function(){
  934. var e=window.event;
  935. if(e.which!=3){
  936. return ;
  937. }
  938. var index=this.getAttribute("index");
  939. if(index){
  940. if(THIS.previewService&&"null"!=THIS.previewService){
  941. var bounding=this.getBoundingClientRect();
  942. var left=THIS.tipWin_option.getBoundingClientRect().left+THIS.tipWin_option.getBoundingClientRect().width
  943. var top=bounding.top;
  944. THIS.showDetail(left,top,index);
  945. }else{
  946. var searchResult=THIS.searchResult[index];
  947. if(searchResult[THIS.helptip_name]){
  948. THIS.WINDOWS.wd.edit.objectPicker.showHelp(this,{title:this.innerHTML,content:searchResult[THIS.helptip_name]});
  949. }else{
  950. THIS.WINDOWS.wd.edit.objectPicker.hideHelp();
  951. }
  952. }
  953. return false;
  954. }
  955. }
  956. this.checkOption=function(ele,scroll){
  957. if(!ele)return
  958. if(scroll){
  959. var op=this.tipWin_option;
  960. var index=parseInt( ele.getAttribute("index"));
  961. var boundingOp=op.getBoundingClientRect();
  962. var boundingEle=ele.getBoundingClientRect();
  963. var capacity= parseInt (boundingOp.height/boundingEle.height)
  964. var current=boundingEle.height*index;
  965. //位置在上边界
  966. if(current<op.scrollTop){
  967. op.scrollTop=boundingEle.height*(index)
  968. //位置在下边界
  969. }else if(current>op.scrollTop+boundingEle.height*capacity){
  970. op.scrollTop=boundingEle.height*(index-capacity)
  971. }
  972. // //新位置看不到,滚动到底部
  973. // if(ele.offsetHeight*index>op.getBoundingClientRect().height){
  974. // op.scrollTop=ele.offsetHeight*(index+capacity)
  975. // }
  976. }
  977. ele.setAttribute("checkstate","selected");
  978. // ele.style.backgroundColor="#ccc"
  979. // ele.style.border="1px solid"
  980. }
  981. //根据提供字符串的相识度选中最高的下拉
  982. this.checkMatchingOption=function(inputValue){
  983. var op=this.tipWin_option;
  984. var all=op.querySelectorAll("."+this.tipWin_option_list_class+"[status=people]")
  985. //完全匹配
  986. var ferfectMatch=false;
  987. for(var i=0;i<all.length;i++){
  988. var li=all[i];
  989. var index=parseInt(li.getAttribute("index"));
  990. var data=this.searchResult[index];
  991. if(data[this.face_name]==inputValue){
  992. this.checkOption(li,true);
  993. ferfectMatch=true
  994. break;
  995. }
  996. }
  997. //包含匹配
  998. var includeMatch=false
  999. if(!ferfectMatch&&inputValue){
  1000. for(var i=0;i<all.length;i++){
  1001. var li=all[i];
  1002. var index=parseInt(li.getAttribute("index"));
  1003. var data=this.searchResult[index];
  1004. if(data[this.face_name].indexOf(inputValue)!=-1){
  1005. this.checkOption(li,true);
  1006. includeMatch=true;
  1007. break;
  1008. }
  1009. }
  1010. }
  1011. //未完成,相似度计算
  1012. var similarityMatch=false
  1013. if(!includeMatch){
  1014. }
  1015. }
  1016. this.uncheckOption=function(ele){
  1017. ele.setAttribute("checkstate","unselected");
  1018. // ele.style.backgroundColor="";
  1019. }
  1020. // 鼠标选中点击
  1021. this.tipWinOptionClickFun=function(){
  1022. THIS.checkOption(window.event.srcElement);
  1023. var nextCascadingName=THIS.getNextCascadingName();
  1024. THIS.confirmOption(true,{refreshCascadingName:nextCascadingName});
  1025. }
  1026. // this.tipWinButtonMouseOverFun=function(){
  1027. // var THIS=this;
  1028. // return function(){
  1029. //
  1030. // if(false&&THIS.searchResult){
  1031. // var bounding=this.getBoundingClientRect()
  1032. // var left=bounding.left+50
  1033. // var top=bounding.top;
  1034. //
  1035. // var li=THIS.tipWin_option.querySelector("li[status=people].selected")
  1036. // var index=li.getAttribute("index");
  1037. // THIS.showDetail(left,top,index);
  1038. //
  1039. //
  1040. // }else{
  1041. //// THIS.hiddenDetail()
  1042. // }
  1043. // }
  1044. // }
  1045. // this.tipWinButtonMouseOutFun=function(){
  1046. // var THIS=this;
  1047. // return function(){
  1048. //// THIS.hiddenDetail()
  1049. // }
  1050. // }
  1051. // 确定按钮确认
  1052. this.tipWinButtonClickFun=function(){
  1053. // console.log("OK")
  1054. }
  1055. this.confirmOption=function(cannull,args){
  1056. var newdata={};
  1057. newdata[THIS.face_name]="";
  1058. newdata[THIS.back_name]="";
  1059. var li=this.tipWin_option.querySelector("."+this.tipWin_option_list_class+"[checkstate=selected][status=people]")
  1060. if(li){
  1061. var value=li.getAttribute("value");
  1062. var data=this.findDataByValue(value);
  1063. if(data){
  1064. newdata[THIS.face_name]=data[THIS.face_name];
  1065. newdata[THIS.back_name]=data[THIS.back_name];
  1066. }
  1067. }
  1068. THIS.confirmOptionData(cannull,args,newdata);
  1069. }
  1070. this.confirmOptionData=function(cannull,args,newdata){
  1071. var setting=$.extend({},{refreshCascadingOption:true,refreshCascadingName:""},args);
  1072. var name=newdata[THIS.face_name];
  1073. var value=newdata[THIS.back_name];
  1074. if(cannull){
  1075. this.setDataElementValue(value);
  1076. this.setElementValue(name);
  1077. }else{
  1078. if(value){
  1079. this.setDataElementValue(value);
  1080. this.setElementValue(name);
  1081. }
  1082. }
  1083. this.setCascadingInputsValue(this.getDataElementValue());
  1084. this.hiddenOptions();
  1085. this.hiddenDetail()
  1086. this.changeFinish(setting);
  1087. }
  1088. // 显示详细信息
  1089. this.showDetail=function(left,top,index){
  1090. if(this.previewService&&"null"!=this.previewService){
  1091. }else{
  1092. return
  1093. }
  1094. this.tipWin_detail.style.display="";
  1095. this.tipWin_detail.style.left=(left)+"px";
  1096. this.tipWin_detail.style.top=(top)+"px";
  1097. var data=this.searchResult[index];
  1098. this.buildDetailContent(data)
  1099. }
  1100. this.showDetailByValue=function(left,top,value){
  1101. if(this.previewService&&"null"!=this.previewService){
  1102. }else{
  1103. return
  1104. }
  1105. this.tipWin_detail.style.display="";
  1106. this.tipWin_detail.style.left=(left)+"px";
  1107. this.tipWin_detail.style.top=(top)+"px";
  1108. var p={}
  1109. p[this.back_name]=value
  1110. this.buildDetailContent(p)
  1111. }
  1112. this.hiddenDetail=function(){
  1113. this.tipWin_detail.style.display="none"
  1114. }
  1115. this.buildDetailContentTimeOutId=null
  1116. this.buildDetailData=null;//当前回显的数据
  1117. this.buildDetailContent=function(data){
  1118. if(this.previewService&&"null"!=this.previewService){
  1119. if(this.buildDetailContentTimeOutId)clearTimeout(this.buildDetailContentTimeOutId);
  1120. this.buildDetailData=data;
  1121. this.buildDetailContentTimeOutId=setTimeout(function(){
  1122. var div= THIS.tipWin_detail.getElementsByClassName("detail_body")[0]
  1123. div.style.display="";
  1124. var content="<table>";
  1125. content+="<iframe src='"+THIS.previewService+"&"+THIS.back_name+"="+THIS.buildDetailData[THIS.back_name]+"'>";
  1126. content+="</table>";
  1127. div.innerHTML=content;
  1128. },1000)
  1129. }else{
  1130. // div.style.display="none";
  1131. }
  1132. }
  1133. this.tipWinOptionShowAllFun=function(){
  1134. var THIS=this;
  1135. return function(){
  1136. console.log("开发中")
  1137. }
  1138. }
  1139. this.tipWinOptionCloseFun=function(){
  1140. var THIS=this;
  1141. return function(){
  1142. THIS.hiddenDetail();
  1143. THIS.hiddenOptions();
  1144. }
  1145. }
  1146. this.hiddenButton=function(){
  1147. // this.tipWin_button.style.display="none";
  1148. $(this.tipWin_button).hide();
  1149. }
  1150. this.showButton=function(){
  1151. var xy=this.recursionIframe()
  1152. var bounding= this.element.getBoundingClientRect();
  1153. //确认按钮先显示,先可以获取宽度
  1154. // if(false&&this.input)
  1155. // this.tipWin_button.style.display="none";
  1156. if(false&&this.input)
  1157. $(this.tipWin_button).show();
  1158. // this.tipWin_button.style.display="";
  1159. // this.tipWin_button.style.left=xy.left+bounding.left+bounding.width-this.tipWin_button.clientWidth+"px";
  1160. // var correction=1;//偏差修正值
  1161. // this.tipWin_button.style.top=xy.top+bounding.top+correction+"px";
  1162. //
  1163. // this.tipWin_button.style.height=bounding.height-correction+"px";
  1164. // $(this.tipWin_button).children("input").insertAfter(this.element).css({height:(bounding.height-correction)});
  1165. }
  1166. this._optionishidden=false;
  1167. this.optionisHidden=function(){
  1168. return this._optionishidden;
  1169. }
  1170. this.showOptions=function(){
  1171. this._optionishidden=false;
  1172. this.tipWin_option.style.display=""
  1173. wd.edit.objectPicker.activeInstance[this.name]=this;
  1174. if(this.IS_MOBILE){
  1175. }else{
  1176. //减少调用次数
  1177. if(wd.edit.objectPicker.initScrollId){
  1178. window.clearTimeout(wd.edit.objectPicker.initScrollId)
  1179. }
  1180. wd.edit.objectPicker.initScrollId=setTimeout(function(){
  1181. try{
  1182. if(wd.topWindow.initNiceScorll)
  1183. wd.topWindow.initNiceScorll();
  1184. }catch(e){
  1185. console.log(e);
  1186. }
  1187. },1000)
  1188. }
  1189. }
  1190. this.hiddenOptions=function(){
  1191. this._optionishidden=true
  1192. this.tipWin_option.style.display="none"
  1193. wd.edit.objectPicker.activeInstance[this.name]=null;
  1194. wd.edit.objectPicker.hideHelp();
  1195. }
  1196. this.elementKeyUpFunction=function(){
  1197. var THIS=this;
  1198. return function(){
  1199. }
  1200. }
  1201. this.showLeftSpan=function(){
  1202. // console.log(this);
  1203. var leftSpan=document.getElementById(this.name+"Span");
  1204. if(!leftSpan){
  1205. leftSpan=document.createElement("span");
  1206. leftSpan.setAttribute("id",this.name+"Span");
  1207. leftSpan.setAttribute("class","border-input-error");
  1208. this.getElement().parentNode.insertBefore(leftSpan,this.getElement());
  1209. }
  1210. leftSpan.style.display= "";
  1211. }
  1212. this.hideLeftSpan=function(){
  1213. var leftSpan=document.getElementById(this.name+"Span");
  1214. if(!leftSpan)return;
  1215. leftSpan.style.display= "none";
  1216. }
  1217. this.lastInputValue=null;
  1218. this.keyupAndDownFunction=function(){
  1219. var THIS=this;
  1220. return function(){
  1221. var keycode=window.event.keyCode;
  1222. //按下键盘上,键盘下
  1223. // console.log(keycode)
  1224. if(keycode==38||keycode==40||keycode==13){
  1225. window.event.stopPropagation()
  1226. //UP
  1227. if(keycode==38){
  1228. THIS.nextOption(-1)
  1229. }
  1230. //DOWN
  1231. if(keycode==40){
  1232. THIS.nextOption(1)
  1233. }
  1234. //ENTER
  1235. if(keycode==13){
  1236. THIS.confirmOption(true)
  1237. }
  1238. return true
  1239. }
  1240. }
  1241. }
  1242. this.elementInputTimeOutId=null;
  1243. this.elementInputFunction=function(){
  1244. //wd.topWindow.$(".objectPickerOption").css({display:"none"});
  1245. wd.edit.objectPicker.hideAllOptions();
  1246. var inputValue=THIS.getElementValue();//当前数值
  1247. if(!THIS.MODIFYABLE|| THIS.input&&!inputValue)return
  1248. THIS.haveComfirm=false;
  1249. THIS.showOptions();
  1250. if(!THIS.searchResult||THIS.REAL_TIME_SEARCH){
  1251. if(THIS.input){//延时请求
  1252. if(THIS.elementInputTimeOutId){
  1253. clearTimeout(THIS.elementInputTimeOutId);
  1254. THIS.elementInputTimeOutId=null;
  1255. }
  1256. THIS.elementInputTimeOutId=setTimeout(function(){
  1257. THIS.receiveData({callback:function(){
  1258. //查询出结果集之后,如果只有一个值就自动选中
  1259. if(THIS.searchResult.length==1){
  1260. var nextCascadingName=THIS.getNextCascadingName();
  1261. THIS.confirmOptionData(true,{refreshCascadingName:nextCascadingName},THIS.searchResult[0]);
  1262. }else{
  1263. THIS.buildOptions();
  1264. }
  1265. },async:true});
  1266. },THIS.SEARCH_DELAY_TIME)
  1267. }else{
  1268. THIS.receiveData({callback:THIS.buildOptions,async:true});
  1269. }
  1270. }
  1271. THIS.lastInputValue=inputValue;
  1272. return false;
  1273. }
  1274. this.elementEnterKeyFunction=function(){
  1275. if(window.event.keyCode===13){
  1276. THIS.elementInputFunction();
  1277. return false;
  1278. }
  1279. }
  1280. this.triangleClickFunction=function(){
  1281. if(!THIS.MODIFYABLE||!THIS.optionisHidden()){
  1282. THIS.hiddenOptions();
  1283. return false
  1284. }
  1285. //wd.topWindow.$(".objectPickerOption").css({display:"none"});
  1286. wd.edit.objectPicker.hideAllOptions();
  1287. var inputValue=THIS.getElementValue();//当前数值
  1288. THIS.haveComfirm=false;
  1289. THIS.showOptions();
  1290. if(!THIS.searchResult||THIS.REAL_TIME_SEARCH){
  1291. THIS.receiveData({callback:THIS.buildOptions,searchAll:true,async:true});
  1292. }
  1293. THIS.lastInputValue=inputValue;
  1294. return false;
  1295. }
  1296. this.calCascadingInputValue=function(){
  1297. if(!this.cascadingInputsRule)return null;
  1298. var inputsV=this.getCascadingInputsValue();
  1299. if(!inputsV)return null;
  1300. if(inputsV.length!=this.cascadingInputsRule.length)return null;
  1301. var index=0;
  1302. var inIt=false;
  1303. for(var i=0;i<this.cascadingLevel.length;i++){
  1304. if(this.cascadingLevel[i]==this.name){
  1305. index=i;
  1306. inIt=true;
  1307. break;
  1308. }
  1309. }
  1310. if(!inIt)return null;
  1311. index++;
  1312. var result="";
  1313. for(var i=0;i<this.cascadingInputsRule.length;i++){
  1314. var cv=parseInt(this.cascadingInputsRule.substr(i,1));
  1315. if(index>=cv){
  1316. result+=inputsV.substr(i,1)
  1317. }else{
  1318. result+="0"
  1319. }
  1320. }
  1321. return result;
  1322. }
  1323. //是否级联
  1324. this.isCascading=function(){
  1325. return (!this.cascadingLevel||this.cascadingLevel.length==0)?false:true;
  1326. }
  1327. this.getPreCascadingName=function(searchname){
  1328. if(!this.isCascading())return null;
  1329. if(!searchname)
  1330. searchname=this.name;
  1331. var index=0;
  1332. for(var i=0;i<this.cascadingLevel.length;i++){
  1333. if(this.cascadingLevel[i]==searchname){
  1334. index=i;
  1335. break;
  1336. }
  1337. }
  1338. if(index==0)return null;
  1339. return this.cascadingLevel[index-1]
  1340. }
  1341. this.getNextCascadingName=function(){
  1342. if(!this.isCascading())return null;
  1343. var index=0;
  1344. for(var i=0;i<this.cascadingLevel.length;i++){
  1345. if(this.cascadingLevel[i]==this.name){
  1346. index=i;
  1347. break;
  1348. }
  1349. }
  1350. if(index==(this.cascadingLevel.length-1))return null;
  1351. return this.cascadingLevel[index+1]
  1352. }
  1353. this.parsefilterField=function(param){
  1354. if(THIS.filterField){
  1355. var ff=THIS.filterField.split(",");
  1356. for(var i=0;i<ff.length;i++){
  1357. try{
  1358. var name=ff[i];
  1359. var box=THIS.WINDOWS.wd.display.getInputBox(name);
  1360. param[name]=box?box.getValue():$("[name="+name+"]").val();
  1361. }catch(e){
  1362. console.log(e);
  1363. }
  1364. }
  1365. }
  1366. }
  1367. //结束ajax数据
  1368. this.receiveData=function(args){
  1369. // searchValue,callback,searchAll,async
  1370. var receiveDataDefault={
  1371. searchValue:false,
  1372. callback:null,
  1373. searchAll:false,
  1374. async:false,
  1375. dataValue:null
  1376. }
  1377. var setting=$.extend({},receiveDataDefault,args)
  1378. var THIS=this;
  1379. var param=$.extend({},THIS.QUERY_PARAM);
  1380. var requestData=THIS.searchService?true:false;
  1381. //全局数据
  1382. param["objectpickerparam"]=THIS.CONNECT_PARAM;
  1383. THIS.parsefilterField(param);
  1384. if(THIS.input)
  1385. param["objectpickerinput"]=THIS.getElementValue();
  1386. param["objectpickertype"]=1;
  1387. //回显数值
  1388. if(setting.searchValue){
  1389. param["objectpickervalue"]=setting.dataValue;
  1390. param["objectpickertype"]=2;
  1391. if(requestData)
  1392. requestData=param["objectpickervalue"]?true:false;//没值不连接服务器
  1393. }
  1394. if(setting.searchAll)
  1395. param["objectpickersearchAll"]=1;
  1396. if(THIS.isCascading()){//级联查询数据,参数填充上级值
  1397. var preObjectPickerName,preObjectPicker;
  1398. preObjectPickerName=this.name;
  1399. var count=0;//防止死循环
  1400. while(THIS.getPreCascadingName(preObjectPickerName)!=null){
  1401. if(count>10)break;
  1402. count++;
  1403. preObjectPickerName=THIS.getPreCascadingName(preObjectPickerName);
  1404. // console.log(preObjectPickerName)
  1405. preObjectPicker=wd.edit.objectPicker.getInstance(preObjectPickerName);
  1406. if(preObjectPicker){
  1407. var v=preObjectPicker.getValue();
  1408. param[preObjectPickerName]=v;
  1409. if(!param["upperValue"])
  1410. param["upperValue"]=v;
  1411. }else{
  1412. break;
  1413. }
  1414. }
  1415. }
  1416. if(setting.searchAll){
  1417. param["objectpickerinput"]="";
  1418. }
  1419. if(requestData){
  1420. if(THIS.IS_MOBILE){
  1421. }else{
  1422. wd.display.showLoad();
  1423. }
  1424. $.ajax({
  1425. url:this.searchService,
  1426. data:param,
  1427. dataType:'json',
  1428. async:setting.async,
  1429. timeout:10000,
  1430. error:function(data){
  1431. if(THIS.IS_MOBILE){
  1432. }else{
  1433. if("timeout"==data.statusText){
  1434. wd.display.alert("网络连接超时!");
  1435. }else{
  1436. wd.display.alert("网络连接失败!");
  1437. }
  1438. wd.display.closeLoad();
  1439. }
  1440. return false;
  1441. },
  1442. success:function(data){
  1443. ///// 再增加,增加错误处理 -- 统一 Ajax 返回标准 -- .ssCode、.ssMsg、.ssData。Lin
  1444. /* 再去掉,改为 (data.ssCode != 0) 后一直显示 "undefined" 错误信息 -- data.ssMsg 值为 "undefined"。Lin
  1445. * ObjpServ.loadOptByA() 还没有使用 Ajax 返回标准 -- .ssCode、.ssMsg、.ssData
  1446. * data.ssCode 为 undefined 时,之前写的 (data.ssCode == 0) 为 false,改为 (data.ssCode != 0) 则为 true -- ssCode,把 0 = 错误、1 = 成功 改为 0 = 成功,1 = 错误
  1447. if (data.ssCode != 0) {
  1448. /// * 再改,要用 alert(,要有弹出窗口 -- 一闪而过,以为没错。Lin
  1449. // wd.display.alert(data.msg); // 不用 alert( -- 有弹出窗口。Lin
  1450. /// *
  1451. alert(data.ssMsg);
  1452. return;
  1453. }
  1454. */
  1455. /////
  1456. if(THIS.IS_MOBILE){
  1457. }else{
  1458. wd.display.closeLoad();
  1459. if(data.errmsg){
  1460. console.log(data.errmsg);
  1461. wd.display.alert(data.errmsg);
  1462. return false;
  1463. }
  1464. }
  1465. /* 再改 data.result(List<Map<String, Object>>) 为 Map<String, String>。Lin
  1466. * 原 List<Map<"xbm":"1","mc":"男">,Map<"xbm":"2","mc":"女">> 改为 Map<"1":"男","2":"女">
  1467. * 在这再转回 List<Map<"1":Map<"xbm":"1","mc":"男">,Map<"xbm":"2","mc":"女">> -- 先把 Java 改好,不改 JS 先
  1468. * 先不支持 Tips 内容,用到再弄
  1469. THIS.searchResult=data.result;
  1470. */
  1471. /// 抄自 init( 里的。Lin
  1472. //初始化转换数据
  1473. if (data.result) { // {1:'男性', 2:'女性'}。Lin
  1474. THIS.searchResult = [];
  1475. for (var key in data.result) {
  1476. var aa = {};
  1477. aa[data.invisiable] = key; // "xbm"。Lin
  1478. aa[data.visiable] = data.result[key]; // "mc"。Lin
  1479. THIS.searchResult.push(aa); // {mc: '男性', xbm: '1'}, {mc: '女性', xbm: '2'}。Lin
  1480. }
  1481. }
  1482. ///
  1483. if(data.visiable)
  1484. THIS.face_name=data.visiable;
  1485. if(data.invisiable)
  1486. THIS.back_name=data.invisiable;
  1487. if(data.helptip_name)
  1488. THIS.helptip_name=data.helptip_name
  1489. if(typeof THIS.searchResult=="string"){
  1490. THIS.searchResult=eval("("+THIS.searchResult+")")
  1491. }
  1492. if(setting.callback){
  1493. //定时器
  1494. setting.callback.apply(THIS)
  1495. }
  1496. }
  1497. })
  1498. }else{
  1499. if(setting.callback){
  1500. //定时器
  1501. setting.callback.apply(THIS)
  1502. }
  1503. }
  1504. }
  1505. this.getOptionsSize=function(){
  1506. var op=this.tipWin_option;
  1507. var queryselector=op.querySelectorAll("."+this.tipWin_option_list_class);
  1508. return queryselector.length-1;
  1509. }
  1510. this.getAllData=function(){
  1511. var result=[];
  1512. if(this.staticResult){
  1513. result=result.concat(this.staticResult); // null。Lin
  1514. }
  1515. if(this.searchResult){
  1516. result=result.concat(this.searchResult); // {mc: '男性', xbm: '1'}, {mc: '女性', xbm: '2'}。Lin
  1517. }
  1518. return result;
  1519. }
  1520. this.findDataByValue=function(v){
  1521. var alldata=this.getAllData();
  1522. for(var i=0;i<alldata.length;i++){
  1523. if(alldata[i][this.back_name]==v){
  1524. return alldata[i];
  1525. }
  1526. }
  1527. return null;
  1528. }
  1529. this.setStaticData=function(optionList){
  1530. this.staticResult=[];
  1531. for(var i=0;i<optionList.length;i++){
  1532. for(var key in optionList[i]){
  1533. var aa={};
  1534. aa[this.face_name]=optionList[i][key];
  1535. aa[this.back_name]=key;
  1536. this.staticResult.push(aa);
  1537. }
  1538. }
  1539. }
  1540. this.setwdCloseWindowParamData=function(data){
  1541. if(!data||!data.option){
  1542. return
  1543. }
  1544. var optionList=data.option;
  1545. this.staticResult=[];
  1546. for(var i=0;i<optionList.length;i++){
  1547. var aa={};
  1548. aa[this.face_name]=optionList[i]["name"];
  1549. aa[this.back_name]=optionList[i]["id"];;
  1550. this.staticResult.push(aa);
  1551. this.setElementValue(aa[this.face_name]);
  1552. this.setDataElementValue(aa[this.back_name]);
  1553. }
  1554. this.changeFinish();
  1555. }
  1556. // this.getStaticData=function(){
  1557. // this.staticResult=[];
  1558. // var aaa={};
  1559. // aaa[this.face_name]="aaaaaaaaaaaaaaaaaaaaaaaaaaa";
  1560. // aaa[this.back_name]="99";
  1561. // this.staticResult.push(aaa);
  1562. // return this.staticResult
  1563. // }
  1564. //生成下拉,并且选中匹配值
  1565. this.buildOptions=function(){
  1566. // console.log(this.getStaticData());
  1567. // console.log(this.tipWin_option)
  1568. var op=this.tipWin_option
  1569. var ul=op.childNodes[0];
  1570. var inputValue=this.getElementValue();//当前数值
  1571. // style="list-style-type:none; height: 30px;line-height: 30px;width: 100%;color: #666;padding-left: 5px;border-bottom: 1px solid #ccc;box-sizing: border-box;cursor: pointer;"
  1572. // if(this.searchResult.length>0){
  1573. // this.hideLeftSpan();
  1574. //
  1575. // var listr = '<div class=\"'+this.tipWin_option_list_class+'\" status="noitem">请选择</div>',arr = this.searchResult;
  1576. // for(var i = 0;i<arr.length;i++){
  1577. // listr+= '<div class=\"'+(arr[i][this.back_name]==this.getDataElementValue()?' selected ':'')+ this.tipWin_option_list_class+'\" status="people" value="'+arr[i][this.back_name]+'"'+'index="'+i+'">'+arr[i][this.face_name]+'</div>';
  1578. // }
  1579. // ul.innerHTML=listr;
  1580. //// this.checkMatchingOption(inputValue)
  1581. // }else{
  1582. // this.showLeftSpan();
  1583. // ul.innerHTML='<div class=\"'+this.tipWin_option_list_class+'\" status="noitem">找不到相关项</div>'
  1584. // }
  1585. // console.log(this.addButton);
  1586. var buildSelectOption=THIS.IS_MOBILE?wd.edit.objectPicker.buildMobileSelectOption:wd.display.buildSelectOption;
  1587. buildSelectOption(this.tipWin_option,this.getAllData(),this.back_name,this.face_name,this.getDataElementValue(),true)
  1588. if(this.addButton)
  1589. $('<div class="icon-add popupList button cursor-click" style="padding: unset;margin: 0px 0px 3px 3px;background-position-y: center;float: right;"></div>').appendTo(ul).on("click",function(){
  1590. THIS.WINDOWS.wd.edit.objectPicker.addButtonClickName=THIS.name;
  1591. THIS.hiddenOptions();
  1592. eval(THIS.addButton);
  1593. })
  1594. if(this.searchResult.length>0){
  1595. this.hideLeftSpan();
  1596. }else{
  1597. this.showLeftSpan();
  1598. }
  1599. //定位位置
  1600. var bounding=this.element.getBoundingClientRect();
  1601. var xy=this.recursionIframe();
  1602. var left=bounding.left+xy.left;
  1603. var top;
  1604. if(THIS.IS_MOBILE){
  1605. top=bounding.top+bounding.height;
  1606. }else{
  1607. top=bounding.top+xy.top+bounding.height;
  1608. }
  1609. this.tipWin_option.style.left=left+"px";
  1610. this.tipWin_option.style.top=top+"px";
  1611. this.tipWin_option.style.minWidth=this.element.offsetWidth+"px";
  1612. this.tipWin_option.style.maxWidth=`calc(100vw - ${bounding.left}px - 18px)`;
  1613. ul.style.minWidth=this.element.offsetWidth-18+"px";
  1614. this.tipWin_option.style.width="auto";
  1615. ul.style.width="auto";
  1616. ul.style.maxWidth=`calc(100vw - ${bounding.left}px - 18px)`;
  1617. if(top+this.tipWin_option.offsetHeight>wd.topWindow.innerHeight){
  1618. var options=$(ul).children().detach();
  1619. for(var i=options.length-1;i>=0;i--){
  1620. $(options[i]).appendTo(ul);
  1621. }
  1622. top=bounding.top+xy.top-this.tipWin_option.offsetHeight
  1623. this.tipWin_option.style.top=top+"px";
  1624. ul.scrollTop=ul.scrollHeight;
  1625. }
  1626. }
  1627. //计算字符串相似度
  1628. this.calSimilarity=function(s1,s2){
  1629. }
  1630. this.inputMouseUpAndDown_Interaval_ID=null;
  1631. //向上选择
  1632. this.nextOption=function(step){
  1633. var op=this.tipWin_option;
  1634. // if(op.querySelectorAll("li[status=noitem]").length>0){return}
  1635. var index=null;
  1636. var queryselector=op.querySelectorAll("."+this.tipWin_option_list_class);
  1637. var selection=null;
  1638. var index=0;
  1639. var all=op.querySelectorAll("."+this.tipWin_option_list_class+"[status=people]");
  1640. if(queryselector.length>0){
  1641. selection= queryselector[0]
  1642. this.uncheckOption(selection)
  1643. index=parseInt(selection.getAttribute("index"));
  1644. index+=step;
  1645. }
  1646. if(index<0){
  1647. index=0;
  1648. }else if(index>all.length){
  1649. index=all.length
  1650. }
  1651. var nextselection=all[index];
  1652. this.checkOption(nextselection,true)
  1653. var bounding=this.tipWin_option.getBoundingClientRect()
  1654. var xy=this.recursionIframe();
  1655. // this.showDetail(xy.left+bounding.left+bounding.width,xy.top+bounding.top,index);
  1656. }
  1657. // this.oneclickhiddendetail=false;
  1658. //
  1659. //
  1660. // this.elementMouseoverFunction=function(){
  1661. //
  1662. // if(THIS.optionisHidden()&&THIS.haveComfirm&& THIS.getDataElementValue()){
  1663. // var xy=THIS.recursionIframe();
  1664. // var bounding=this.getBoundingClientRect();
  1665. //
  1666. // var left=bounding.left+xy.left;
  1667. // var top=bounding.top+bounding.height+xy.top;
  1668. //
  1669. // THIS.showDetailByValue(left,top,THIS.getDataElementValue())
  1670. //
  1671. // if(!THIS.oneclickhiddendetail){
  1672. // $(document).one("click",function(){
  1673. // THIS.oneclickhiddendetail=false;
  1674. // THIS.hiddenDetail()
  1675. // })
  1676. // THIS.oneclickhiddendetail=true;
  1677. // }
  1678. //
  1679. //
  1680. //
  1681. // }else{
  1682. // THIS.hiddenDetail()
  1683. // }
  1684. // return false;
  1685. // }
  1686. //
  1687. //
  1688. //
  1689. // this.elementMouseOutFunction=function(){
  1690. //
  1691. // THIS.hiddenDetail();
  1692. // return false;
  1693. // }
  1694. this.elementFocusFunction=function(){
  1695. console.log("elementFocusFunction");
  1696. if(THIS.getElementValue().length>=THIS.MINIMUM_INPUT_SIZE){
  1697. THIS.showOptions();
  1698. THIS.receiveData({callback:THIS.buildOptions,async:true});
  1699. }
  1700. if(THIS.IS_MOBILE){
  1701. $(THIS.element).addClass("mobileInput-div-selected input-s");
  1702. }else{
  1703. $(THIS.element).addClass("input-div-selected input-s");
  1704. }
  1705. }
  1706. this.elementFocusToBlurFunction=function(){
  1707. if(THIS.getElementValue()!=THIS.elementValue){
  1708. THIS.setElementValue(THIS.elementValue);
  1709. }
  1710. $(THIS.element).removeClass("mobileInput-div-selected input-div-selected input-s");
  1711. return false;
  1712. }
  1713. this.elementBlurFunction=function(e){
  1714. if(THIS.optionisHidden()){
  1715. return
  1716. }else{
  1717. if(THIS.cascadingInputsRule){
  1718. }
  1719. }
  1720. if(!e)e=window.event;
  1721. if(!e)return;
  1722. if(e.target&&(e.target==THIS.element))return;
  1723. if(e.target&&$(THIS.element).children().is(e.target))return;
  1724. if($(e.target).parents(".objectPickerBody").length>0)return;
  1725. THIS.refreshElementValue();
  1726. THIS.hiddenOptions();
  1727. THIS.hiddenDetail();
  1728. return false;
  1729. }
  1730. this.recursionIframe=function(win){
  1731. if(!win){
  1732. win=this.wins;
  1733. }
  1734. function getTop (e){
  1735. var offset=e.offsetTop;
  1736. if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
  1737. return offset;
  1738. }
  1739. function getLeft (e){
  1740. var offset=e.offsetLeft;
  1741. if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
  1742. return offset;
  1743. }
  1744. if(win.parent==top&&win.parent==win){
  1745. return {"left": 0, "top": 0 };
  1746. }
  1747. var winPar = win.parent;// .opener
  1748. var iframeArr = winPar.document.getElementsByTagName('IFRAME');
  1749. var targetIframe;
  1750. var iframeArr1 = win.document.getElementsByTagName('IFRAME');
  1751. for(var i=0;i<iframeArr1.length;i++){
  1752. var iframeElem = iframeArr1[i];
  1753. if(iframeElem.contentWindow==win){
  1754. targetIframe = iframeElem;
  1755. break;
  1756. }
  1757. }
  1758. for(var i=0;i<iframeArr.length;i++){
  1759. var iframeElem = iframeArr[i];
  1760. if(iframeElem.contentWindow==win){
  1761. targetIframe = iframeElem;
  1762. break;
  1763. }
  1764. }
  1765. var xy={left:getLeft(targetIframe),top:getTop(targetIframe)}
  1766. if(winPar.parent!=winPar){
  1767. var xy2 =this.recursionIframe(winPar);
  1768. xy.left += xy2.left;
  1769. xy.top += xy2.top;
  1770. }
  1771. return xy
  1772. }
  1773. this.getElement=function(){
  1774. return this.element;
  1775. }
  1776. this.getElementValue=function(){
  1777. return this.GrowHeightInstance.val();
  1778. // return $(this.element).find("textarea").val();
  1779. // if(this.input){
  1780. // return this.element.querySelector("input").value
  1781. // }else{
  1782. // var c=this.element.querySelector("span");
  1783. // if(!c)return "";
  1784. // if(c.getAttribute("class")=="objectpicker-nameDiv-placeholder")return ""
  1785. //
  1786. // return c.innerHTML;
  1787. //
  1788. //
  1789. // }
  1790. }
  1791. this.refreshElementValue=function(){
  1792. this.GrowHeightInstance.val(this.elementValue);
  1793. }
  1794. this.setElementValue=function(v){
  1795. this.elementValue=v;
  1796. //console.log(this.GrowHeightInstance);
  1797. this.GrowHeightInstance.val(v);
  1798. // $(this.element).find("textarea").val(v).attr("placeholder",this.placeholder);
  1799. // if(this.input){
  1800. // $(this.element).find("input").addClass("form-insideLabel").val(v).attr("placeholder",this.placeholder);
  1801. //// this.element.querySelector("input").setAttribute("placeholder",this.placeholder);
  1802. //// this.element.querySelector("input").value=v;
  1803. // }else{
  1804. //
  1805. //// if(!v){
  1806. //// this.element.innerHTML="<span class=\"objectpicker-nameDiv-placeholder\">"+this.placeholder+"</span>"
  1807. //// +this.objectPickerSelectTriangle;
  1808. //// }else{
  1809. //// this.element.innerHTML="<span class=\"objectpicker-nameDiv-value\">"+v+"</span>"
  1810. //// +this.objectPickerSelectTriangle;
  1811. //// }
  1812. // if(!v){
  1813. // this.$objectPickerNameDiv.last().show().html(this.placeholder);
  1814. // this.$objectPickerNameDiv.first().hide();
  1815. // }else{
  1816. // this.$objectPickerNameDiv.last().hide();
  1817. // this.$objectPickerNameDiv.first().show().html(v);;
  1818. // }
  1819. //
  1820. // }
  1821. if(this.playElement)
  1822. this.playElement.innerHTML=v;
  1823. // var $triangle=$(this.element.childNodes[1]);
  1824. // this.element.childNodes[0].style.maxWidth=$(this.element).width()-$triangle.width()-parseInt($triangle.css('marginLeft'));
  1825. //
  1826. }
  1827. this.getDataElement=function(){
  1828. return this.dataElement;
  1829. }
  1830. this.getDataElementValue=function(){
  1831. return this.dataElement.value;
  1832. }
  1833. this.setDataElementValue=function(v){
  1834. $(this.dataElement).val(v);
  1835. this.dataElementValue=v;
  1836. }
  1837. this.changeFinish=function(args){
  1838. //console.log("change fish "+this.name);
  1839. var setting=$.extend({},{triggerChange:true,refreshCascadingOption:false,refreshPreCascading:false,refreshNextCascading:false},args);
  1840. if(setting.refreshCascadingOption){//刷新下一个选项卡选项
  1841. var nextCascadingName=this.getNextCascadingName();
  1842. var nextCascading=wd.edit.objectPicker.getInstance(nextCascadingName);
  1843. if(nextCascading){
  1844. nextCascading.refreshOption(args);
  1845. }
  1846. }
  1847. //刷新上一个级联
  1848. if(setting.refreshPreCascading){
  1849. var preCascadingName=this.getPreCascadingName();
  1850. //console.log("preCascadingName:"+preCascadingName);
  1851. var preCascading=wd.edit.objectPicker.getInstance(preCascadingName);
  1852. if(preCascading){
  1853. preCascading.refreshElementDisplay(args);
  1854. }else{
  1855. this.setCascadingInputsValue()
  1856. }
  1857. }
  1858. //刷新下一个级联
  1859. if(setting.refreshNextCascading){
  1860. var nextCascadingName=this.getNextCascadingName();
  1861. var nextCascading=wd.edit.objectPicker.getInstance(preCascadingName);
  1862. if(nextCascading){
  1863. nextCascading.refreshElementDisplay(args);
  1864. }
  1865. }
  1866. if(setting.triggerChange){
  1867. $(this.element).trigger("change");
  1868. $(this.dataElement).trigger("change").trigger("keyup");
  1869. if(this.extension.onchange){
  1870. this.extension.onchange.call(this.extension,this.extension);
  1871. }
  1872. }
  1873. }
  1874. this.passValidation=function(){
  1875. this.getElement().style.border="";
  1876. }
  1877. this.failValidation=function(){
  1878. this.getElement().style.border="red 1px solid";
  1879. }
  1880. }
  1881. if(!wd.edit.objectPicker.createObjectPicker)
  1882. wd.edit.objectPicker.createObjectPicker=function(name,field,viewobject,input,defaultValue,param,sservice,miniPlay,codebookData,addButton,instantSearch,dropdown,filterField,helptipData,isMobile_){
  1883. // var parentRoot;
  1884. // //根据查找id或name查找元素,可传入多个参数一起查找, 返回找到的第一个
  1885. // function getElementByIdOrByName(val){
  1886. // var result;
  1887. // for(var a=0;a<arguments.length ;a++){
  1888. // //name属性优先,再到id
  1889. //// if(!result&&parentRoot){
  1890. //// result=parentRoot.querySelector("#objectPicker_"+arguments[a])||parentRoot.querySelector("[name="+arguments[a]+"]")
  1891. ////
  1892. //// }
  1893. // if(!result){
  1894. // result=document.querySelector("#objectPicker_"+arguments[a])||document.querySelector("[name="+arguments[a]+"]")
  1895. // }
  1896. // }
  1897. // return result;
  1898. // }
  1899. //不可输入转态
  1900. // if((function(){
  1901. // if(param&&param.indexOf("visible")==-1){
  1902. // return true;
  1903. // }else{
  1904. // return false;
  1905. // }
  1906. //
  1907. // })()&&( !input||"false"==input)){
  1908. //
  1909. //// window.addEventListener("load",function(){
  1910. // var root=getElementByIdOrByName(name)
  1911. // if(!root){console.log("找不到"+name+"元素");return true}
  1912. // var wdValue=root.getAttribute("wdValue");
  1913. // //解析codebook
  1914. // codebookData=codebookData?eval("("+codebookData+")"):[];
  1915. //
  1916. //
  1917. //// console.log(codebookData)
  1918. // if(root.tagName=="INPUT"&&"text"==root.getAttribute("type")){
  1919. // //<select>
  1920. // var selectElement=document.createElement("select");
  1921. // selectElement.setAttribute("name",name);
  1922. //
  1923. // //nulloption
  1924. // var nulloption=document.createElement("option");
  1925. // selectElement.appendChild(nulloption)
  1926. //
  1927. // //<option>
  1928. // for(var i=0 ;i<codebookData.length;i++){
  1929. // for(var key in codebookData[i]){
  1930. // var optionElement=document.createElement("option");
  1931. // optionElement.value=key;
  1932. // if(key==root.value){
  1933. // optionElement.selected="selected";
  1934. // }
  1935. // optionElement.innerHTML=codebookData[i][key];
  1936. // selectElement.appendChild(optionElement);
  1937. // }
  1938. //
  1939. // }
  1940. //
  1941. // var moves=["id","class","name","wdValue"]
  1942. // for(var key in moves){
  1943. // var n=moves[key];
  1944. // var v=root.getAttribute(n);
  1945. // if(v){
  1946. // selectElement.setAttribute(n,v);
  1947. // }
  1948. // }
  1949. // root.parentNode.replaceChild(selectElement,root);
  1950. //
  1951. // }else{
  1952. // console.log(root);
  1953. // console.log("需要有标签:<input name="+name+" type=\"text\" value=\"\"/>")
  1954. // }
  1955. //
  1956. //
  1957. //
  1958. //
  1959. // return true;
  1960. // }
  1961. //
  1962. //
  1963. //可输入状态
  1964. var facename=field;//显示搜索结果优先名称
  1965. var backname=name+"id";//隐藏字段名称
  1966. // var ID=name+"_"+backname+"_"+backname+(wd.display.getwdDialogId()||1);
  1967. var inputType=(("true"==input)?true:false);
  1968. //undefined设置为true
  1969. var instantSearchType=typeof instantSearch=="undefined"||"true"==instantSearch;
  1970. var dropdownType=typeof dropdown=="undefined"||"true"==dropdown;
  1971. var helptipname;
  1972. if(!codebookData)codebookData=[];
  1973. if(typeof codebookData=="string"){
  1974. codebookData=eval("("+codebookData+")");
  1975. }
  1976. if(typeof helptipData=="string"){
  1977. helptipData=eval("("+helptipData+")");
  1978. }
  1979. //弹窗选择器
  1980. // var dialogFinderButton=wd.edit.objectPicker.getElementByIdOrByName(name+"selector",name+"Selector",name+"SELECTOR");
  1981. //搜索服务
  1982. var searchService=sservice;
  1983. if(searchService&&searchService.indexOf("null")!=-1)
  1984. searchService=null;
  1985. var cascadingLevel=null;
  1986. var cascadingInputsName=null;
  1987. var cascadingInputsRule=null;
  1988. //预览服务
  1989. var previewService=miniPlay
  1990. var otherparam={}
  1991. if(param){
  1992. otherparam=eval("("+param+")")
  1993. if(!otherparam)otherparam={}
  1994. //显示的字段名称
  1995. if(otherparam["visible"]){
  1996. facename=otherparam["visible"]
  1997. }
  1998. //隐藏数据的字段名
  1999. if(otherparam["invisible"]){
  2000. backname=otherparam["invisible"]
  2001. }
  2002. //帮助提示
  2003. if(otherparam["helptip"]){
  2004. helptipname=otherparam["helptip"]
  2005. }
  2006. if(otherparam["cascadingLevel"])
  2007. cascadingLevel=otherparam["cascadingLevel"].split(/\,/);
  2008. if(otherparam["cascadingInputsName"]){
  2009. cascadingInputsName=otherparam["cascadingInputsName"]
  2010. }
  2011. if(otherparam["cascadingInputsRule"]){
  2012. cascadingInputsRule=otherparam["cascadingInputsRule"]
  2013. }
  2014. }
  2015. // console.log(name+","+backname+","+backname);
  2016. //每个后台请求都会发送的数据
  2017. var connectparam={}
  2018. //复制otherparam
  2019. for(var key in otherparam){
  2020. connectparam[key]=otherparam[key];
  2021. }
  2022. // if(!inputType){
  2023. // facename="v1"
  2024. // backname="v2"
  2025. // }
  2026. var isMobile="true"==isMobile_?true:false;
  2027. var args={name:name,
  2028. facename:facename,
  2029. backname:backname,
  2030. // target:elem,
  2031. // datatarget:hiddenElem,
  2032. // playElem:playElem,
  2033. search:searchService,
  2034. preview:previewService,
  2035. viewobject:viewobject,
  2036. otherparam:otherparam,
  2037. connectparam:connectparam,
  2038. input:inputType,
  2039. codebookData:codebookData,
  2040. cascadingLevel:cascadingLevel,
  2041. cascadingInputsRule:cascadingInputsRule,
  2042. cascadingInputsName:cascadingInputsName,
  2043. // placeholder:placeholder,
  2044. // GrowHeightInstance:GrowHeightInstance,
  2045. addButton:addButton,
  2046. instantSearch:instantSearchType,
  2047. dropdown:dropdownType,
  2048. filterField:filterField,
  2049. helptipData:helptipData,
  2050. helptipname:helptipname,
  2051. isMobile:isMobile
  2052. }
  2053. new wd.edit.objectPicker.body().init(args);
  2054. }
  2055. //初始化
  2056. ////
  2057. //$("[name=dwlbm]").on("change",function(){
  2058. // console.log("change!!!1111111111");
  2059. // console.log(wd.edit.objectPicker.getDisplayValue(this));
  2060. //})
  2061. //$("[name=dwlbm]").on("change",function(){
  2062. // var objectPickerObj= wd.edit.objectPicker.getInstance("dwlbm");
  2063. // console.log(objectPickerObj.getValue());
  2064. // console.log(objectPickerObj.getDisplayValue());
  2065. //})
  2066. //$(function(){
  2067. // var objectPickerObj= wd.edit.objectPicker.getInstance("dwlbm");
  2068. // if(objectPickerObj){
  2069. // objectPickerObj.onchange=function(obj){
  2070. // console.log(obj);
  2071. // console.log(this);
  2072. // console.log(obj.getValue());
  2073. // console.log(obj.getDisplayValue());
  2074. //
  2075. // }
  2076. // }
  2077. //
  2078. //
  2079. //
  2080. //})