edit.js 49 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679
  1. if (!window.wd) {
  2. var wd = {};
  3. }
  4. if (!wd.edit) {
  5. wd.edit = {};
  6. }
  7. if (!wd.edit.cascadingSelect) {
  8. wd.edit.cascadingSelect = {};
  9. }
  10. wd.edit.datePicker = function (param) {
  11. var event=window.event;
  12. if($(event.srcElement||event.target).attr("readonly")=="readonly"){
  13. return ;
  14. }
  15. WdatePicker(param);
  16. }
  17. wd.edit.initDatePicker = function () {
  18. function getP(name) {
  19. this.switchParam = {
  20. date: {
  21. source: [{
  22. desc: "年",
  23. value: "1"
  24. }, {
  25. desc: "月",
  26. value: "2"
  27. }, {
  28. desc: "日",
  29. value: "3"
  30. }
  31. ]
  32. }
  33. };
  34. return this.switchParam[name];
  35. }
  36. function getPValue(name, v, findcurrent) {
  37. var c = getP(name);
  38. var cc = c["source"];
  39. if (!v)
  40. return cc[0];
  41. var i = 0;
  42. for (var i = 0; i < cc.length; i++) {
  43. if (cc[i].value == v) {
  44. if (findcurrent) {
  45. return cc[i];
  46. } else if (i + 1 < cc.length) {
  47. return cc[i + 1];
  48. }
  49. break;
  50. }
  51. }
  52. return cc[0];
  53. }
  54. //日期
  55. $("[ssType=date]").each(function () { // [wdType=。Lin
  56. var wdName = $(this).attr("ssName"); // ("wdName")。Lin
  57. if ($("[name=" + wdName + "]").val()) {
  58. var matchNumArr = $("[name=" + wdName + "]").val().match(/\d+/g);
  59. if (matchNumArr) {
  60. var matchNum = matchNumArr.length;
  61. $(this).attr("ssVal", matchNum); // ("wdVal",。Lin
  62. }
  63. }
  64. $(this).click(function () {
  65. var ccc = getPValue("date", $(this).attr("ssVal")); // ("wdVal"))。Lin
  66. $(this).val(ccc.desc).attr("ssVal", ccc.value); // ("wdVal",。Lin
  67. })
  68. var ccc = getPValue("date", $(this).attr("ssVal"), true); // ("wdVal"),。Lin
  69. $(this).val(ccc.desc).attr("ssVal", ccc.value); // ("wdVal",。Lin
  70. $("[name=" + wdName + "]").click(function () {
  71. $(this).attr("autocomplete","off");
  72. var radioVal = $('[ssName="' + $(this).attr("name") + '"]').attr("ssVal"); // ('[wdName="' +。("wdVal")。Lin
  73. if (1 == radioVal) {
  74. wd.edit.datePicker({
  75. dateFmt: 'yyyy'
  76. });
  77. } else if (2 == radioVal) {
  78. wd.edit.datePicker({
  79. dateFmt: 'yyyy-MM'
  80. });
  81. } else if (3 == radioVal) {
  82. wd.edit.datePicker({
  83. dateFmt: 'yyyy-MM-dd'
  84. });
  85. }
  86. })
  87. });
  88. }
  89. /**
  90. * 初始化全选的checkBox
  91. */
  92. wd.edit.initSelectAllCheckBox = function (selectAllCheckBoxNameOrId, //控制全选的复选框的name或id
  93. checkBoxName) { //被全选或全不选的checkBox名字
  94. var selectAllCheckBox = wd.c.g(selectAllCheckBoxNameOrId);
  95. if (!selectAllCheckBox)
  96. return;
  97. var checkBoxs = document.getElementsByName(checkBoxName);
  98. if (!checkBoxs || checkBoxs.length < 1)
  99. return;
  100. selectAllCheckBox.onclick = function () {
  101. for (var i = 0; i < checkBoxs.length; i++) {
  102. var c = checkBoxs[i];
  103. c.checked = this.checked;
  104. }
  105. }
  106. }
  107. //初始化页面radio checkbox 的值
  108. /*
  109. wd.edit.setChecked = function(obj){
  110. var name = obj.name;
  111. var value = obj.value;
  112. var inputs = document.getElementsByName(name);
  113. if(inputs==null||inputs.length<1)
  114. return;
  115. var type = inputs[0].type;
  116. //获得最后一个form
  117. var formArr = document.getElementsByTagName('FORM');
  118. var formObj = formArr[formArr.length-1];
  119. if(type!='radio'){
  120. var inputObj = window.document.createElement("input");//创建一个input标签对象
  121. inputObj.setAttribute("type", "HIDDEN");//设置元素的类型
  122. inputObj.setAttribute("value", "");
  123. inputObj.setAttribute("name", name);
  124. formObj.appendChild(inputObj);
  125. }
  126. if(value===undefined||value===null)
  127. return;
  128. if(typeof(value)!='object'){//不是数组,则变成数组
  129. var inputType = inputs[0].type;
  130. if(inputType=='checkbox'){
  131. value=value.split('|');//如果是checkbox,则可能传用 "|" 分隔的多值
  132. }else{//如果是radioButton
  133. value=[value];
  134. }
  135. }
  136. var valueObj={};
  137. for(index in value){
  138. valueObj[value[index]]=true;
  139. }
  140. for(var i=0;i<inputs.length;i++){
  141. var r = inputs[i];
  142. if(valueObj[r.value]){
  143. r.checked=true;
  144. continue;
  145. }
  146. }
  147. }
  148. */
  149. /**
  150. * 使用对象参数obj,初始化页面各表单元素的值。
  151. * 如果DOM对象为input、textArea、select元素,则填充其value值,如果为checkbox、radioButton则使其选中。
  152. * obj的格式必需为:
  153. * {属性名1:'属性值1',属性名2:['属性值2','属性值3'], ... }
  154. * 其中属性名对应页面需要填充值的DOM元素的name,属性值对应页面需要填充值的DOM元素的值。
  155. */
  156. wd.edit.initFormElemValue = function (obj) {
  157. console.info("obj>>>>>>>");
  158. console.info(obj);
  159. if (!obj)
  160. return;
  161. function setValueIntoFormElem(elem, value) {
  162. var TAGNAME_TEXTAREA = 'TEXTAREA'; //标签名
  163. var TAGNAME_INPUT = 'INPUT'; //标签名
  164. var TAGNAME_SELECT = 'SELECT'; //标签名
  165. var tabName = elem.tagName;
  166. //如果为表单元素
  167. console.info("elem>>>>>>>>>>>");
  168. console.info(elem);
  169. console.info("value:" + value);
  170. if (tabName == TAGNAME_INPUT || tabName == TAGNAME_SELECT || tabName == TAGNAME_TEXTAREA) {
  171. if (elem.type == 'radio' || elem.type == 'checkbox') {
  172. if (elem.value == value)
  173. elem.checked = true;
  174. } else if ((tabName == TAGNAME_INPUT) && (!(elem.type == 'submit' || elem.type == 'reset'))) {
  175. elem.value = value;
  176. } else if (tabName == TAGNAME_SELECT) {
  177. elem.value = value;
  178. elem.setAttribute("value", value);
  179. } else if (tabName == TAGNAME_TEXTAREA) {
  180. elem.innerHTML = value;
  181. }
  182. }
  183. }
  184. for (name in obj) {
  185. //尝试从页面获得DOM元素
  186. var arr = document.getElementsByName(name);
  187. if (!arr)
  188. continue;
  189. for (var i = 0; i < arr.length; i++) {
  190. var elem = arr[i];
  191. var value = obj[name]; //DOM元素的值
  192. if (typeof(value) == 'object') { //如果是数组
  193. for (var j = 0; j < value.length; j++) {
  194. setValueIntoFormElem(elem, value[j]);
  195. }
  196. } else { //如果值是字符串
  197. setValueIntoFormElem(elem, value);
  198. }
  199. }
  200. }
  201. }
  202. /**
  203. * 把name为srcSelectName的多选菜单中当前选中的且下标大于等于startOffset的option,
  204. * 移动到name为destSelectName的多选菜单中
  205. */
  206. wd.edit.moveOptBetweenSelects = function (srcSelectName, destSelectName, startOffset) {
  207. var startOffset = startOffset - 1;
  208. var srcSelect = document.getElementsByName(srcSelectName)[0];
  209. var destSelect = document.getElementsByName(destSelectName)[0];
  210. var isMatched = false;
  211. var curItem;
  212. for (var i = srcSelect.options.length - 1; i >= startOffset; ) {
  213. if (srcSelect.options[i].selected) {
  214. curItem = srcSelect.options[i].value;
  215. isMatched = false;
  216. for (var j = destSelect.length - 1; j >= startOffset; j--) {
  217. if (curItem == destSelect.options[j].value) {
  218. isMatched = true;
  219. break;
  220. }
  221. }
  222. if (!isMatched)
  223. wd.edit.addOptToSelectElem(destSelect,
  224. srcSelect.options[i].value, srcSelect.options[i].text);
  225. srcSelect.options[i] = null;
  226. if (i >= srcSelect.options.length)
  227. i--;
  228. } else
  229. i--;
  230. }
  231. }
  232. wd.edit.addOptToSelectElem = function (selectElem, value, text) {
  233. var opt = document.createElement("option");
  234. opt.value = value;
  235. opt.text = text;
  236. selectElem.add(opt);
  237. }
  238. /**
  239. * 把name为targetSelectName的下拉菜单中与name为refSelectName的下拉菜单重复且下标大于等于startOffset的option去掉
  240. */
  241. wd.edit.removeDuplicateOpt = function (targetSelectName, refSelectName, startOffset) {
  242. var startOffset = startOffset - 1;
  243. var targetSelect = document.getElementsByName(targetSelectName)[0];
  244. var refSelect = document.getElementsByName(refSelectName)[0];
  245. var obj = {}; //用来排重的对象
  246. for (var i = 0; i < refSelect.options.length; i++) {
  247. var opt = refSelect.options[i];
  248. obj[opt.value] = true;
  249. }
  250. for (var i = targetSelect.options.length - 1; i >= startOffset; i--) {
  251. var value = targetSelect.options[i].value;
  252. if (obj[value]) //如果有重复
  253. targetSelect.options[i] = null;
  254. }
  255. }
  256. /**
  257. * 把name为selectName的下拉从下标为startOffset开始的选项全部选中
  258. */
  259. wd.edit.selectAllOpt = function (selectName, startOffset) {
  260. var startOffset = startOffset - 1;
  261. var targetSelect = document.getElementsByName(selectName)[0];
  262. for (var i = startOffset; i < targetSelect.options.length; i++) {
  263. var opt = targetSelect.options[i];
  264. opt.selected = true;
  265. }
  266. }
  267. /**
  268. * 提交formName指定的表单到url指定的路径中,如果formName为空,则提交页面中最后一个表单。
  269. */
  270. wd.edit.submitForm = function (url, formName) {
  271. var f = null;
  272. if (formName)
  273. f = document.getElementsByName(formName)[0];
  274. else {
  275. f = document.getElementsByTagName('FORM');
  276. f = f[f.length - 1];
  277. }
  278. f.action = url;
  279. f.submit();
  280. }
  281. /**
  282. * 加载批阅器的方法
  283. * @param divId 需要加载的div的id
  284. * @param args 有三种加载的模式:1)创建一个批阅器:{type:"create",editorId:"xxx",filePath:"xxx",save:function(){},param:{xxx:xxx}};其中save和param为可选参数
  285. * 2)加载一个已经存在的批阅器,并且是可编辑状态:{type:"edit",nrid:"xxx"};
  286. * 3)加载一个已经存在的批阅器,并且是播放状态:{type:"play",nrid:'xxx'}
  287. * 例子:wd.edit.loadCMSEditor('outDiv',{'type':'create',editorId:'T-440120101310'});
  288. */
  289. wd.edit.loadCMSEditor = function (divId, args) {
  290. var nrid = null;
  291. //创建内容时返回新建内容id
  292. //编辑,播放时返回编辑播放器id
  293. var result = null;
  294. if (args.editorId) {
  295. containerId = args.editorId.substring(2);
  296. }
  297. if (args.type == "create") {
  298. $.ajax({
  299. type: "get",
  300. /* 再改,规范命名。Lin
  301. * 去掉 ?wdApplication=,不支持多个应用 -- 服务名可以写 ss.xxx
  302. * &wdService= 改为 ssServ
  303. url: "/service?wdApplication_old=nr&wdService=makePsCms&wdtest=false",
  304. */ url: "/service?ssServ=makePsCms",
  305. async: false,
  306. data: {
  307. 'editorId': args.editorId.substring(2),
  308. 'filePath': args.filePath
  309. },
  310. dataType: "json",
  311. success: function (data) { //data是返回的批阅容id
  312. nrid = data.id;
  313. result = nrid;
  314. $.ajax({
  315. type: "GET",
  316. /* 再改,规范命名。Lin
  317. * 去掉 ?wdApplication=,不支持多个应用 -- 服务名可以写 ss.xxx
  318. * &wdService= 改为 ssServ
  319. url: "/service?wdApplication_old=nr&wdService=wrPsCmsPlay", // wdService=loadPiYueNrDesignAndPlayerData。Lin
  320. */ url: "/service?ssServ=wrPsCmsPlay", // wdService=loadPiYueNrDesignAndPlayerData。Lin
  321. data: {
  322. 'id': data.id,
  323. 'type': data.type //批阅器包括编辑器和播放器,其中11代表编辑器,1代表播放器
  324. },
  325. async: false,
  326. dataType: 'json',
  327. success: function (data) {
  328. var dataInit = {};
  329. dataInit.design = data.design;
  330. dataInit.resDesign = data.resDesign;
  331. $('#' + divId).attr('data-init', JSON.stringify(dataInit));
  332. if (args.param) {
  333. $('#' + divId).attr('data-param', JSON.stringify(args.param));
  334. }
  335. $('#' + divId).html(data.data);
  336. if (args.save) { //添加保存事件
  337. var selector = '#' + divId
  338. $(selector).find('#saveButton').on('click', function (e) {
  339. args.save();
  340. });
  341. }
  342. }
  343. });
  344. }
  345. });
  346. } else if (args.type == "edit" || args.type == "play") {
  347. nrid = args.nrid;
  348. var type = null;
  349. if (args.type == "edit") {
  350. type = "11";
  351. } else if (args.type == "play") {
  352. type = "1"
  353. }
  354. $.ajax({
  355. type: "GET",
  356. /* 再改,规范命名。Lin
  357. * 去掉 ?wdApplication=,不支持多个应用 -- 服务名可以写 ss.xxx
  358. * &wdService= 改为 ssServ
  359. url: "/service?wdApplication_old=nr&wdService=wrPsCmsPlay", // wdService=loadPiYueNrDesignAndPlayerData。Lin
  360. */ url: "/service?ssServ=wrPsCmsPlay", // wdService=loadPiYueNrDesignAndPlayerData。Lin
  361. data: {
  362. 'id': nrid,
  363. 'type': type //批阅器包括编辑器和播放器,其中11代表编辑器,1代表播放器
  364. },
  365. async: false,
  366. dataType: 'json',
  367. success: function (data) {
  368. result = data.design.ID.substring(2); ;
  369. var dataInit = {};
  370. dataInit.design = data.design;
  371. dataInit.resDesign = data.resDesign;
  372. $('#' + divId).attr('data-init', JSON.stringify(dataInit));
  373. if (args.param) {
  374. $('#' + divId).attr('data-param', JSON.stringify(args.param));
  375. }
  376. $('#' + divId).html(data.data);
  377. if (args.save) { //添加保存事件
  378. var selector = '#' + divId
  379. $(selector).find('#saveButton').on('click', function (e) {
  380. args.save();
  381. });
  382. }
  383. }
  384. });
  385. }
  386. console.log(result)
  387. return result;
  388. // return nrid;
  389. }
  390. /**
  391. * 加载批阅器的方法
  392. * @param divId 需要加载的div的id
  393. * @param type 加载编辑器的编辑模式
  394. * @param args 有三种加载的模式:1)创建一个批阅器:type='create', args= {'loadParam':{'xxx':xxx},'createParam':{editorNrid:"xxx",filePath:"xxx"},dataParam:{xxx:xxx}};其中loadParam是加载编辑器的参数,createParam是创建编辑器的参数,dataParam是保存到outDiv上的参数
  395. * 2)加载一个已经存在的批阅器,并且是可编辑状态:type='edit', args= {loadParam:{id:"xxx"}};
  396. * 3)加载一个已经存在的批阅器,并且是播放状态:type='play', args = {loadParam:{id:'xxx'}}
  397. * 例子:wd.edit.loadCMSEditor('outDiv',{'type':'create',editorId:'440120101310'});
  398. */
  399. wd.edit.loadCMSEditor2 = function (divId, type, args) {
  400. var nrid = null;
  401. if (type == "create") {
  402. var editorId = args.createParam.editorId;
  403. var filePath = args.createParam.filePath;
  404. $.ajax({
  405. type: "get",
  406. /* 再改,规范命名。Lin
  407. * 去掉 ?wdApplication=,不支持多个应用 -- 服务名可以写 ss.xxx
  408. * &wdService= 改为 ssServ
  409. url: "/service?wdApplication_old=nr&wdService=makePsCms",
  410. */ url: "/service?ssServ=makePsCms",
  411. async: false,
  412. data: {
  413. 'editorId': editorId.substring(2),
  414. 'filePath': args.filePath,
  415. 'shid': document.getElementById(divId).dataset.shid // 增加,解决 "每次进入办理页都会产生一个 CMS 内容(最后一次仍会垃圾)" 的问题。Lin
  416. },
  417. dataType: "json",
  418. success: function (data) { //data是返回的批阅容id
  419. nrid = data.id;
  420. if (args.loadParam.idInputName) {
  421. $('input[name="' + args.loadParam.idInputName + '"]').val(nrid.substring(2));
  422. }
  423. $.ajax({
  424. type: "GET",
  425. /* 再改,规范命名。Lin
  426. * 去掉 ?wdApplication=,不支持多个应用 -- 服务名可以写 ss.xxx
  427. * &wdService= 改为 ssServ
  428. url: "/service?wdApplication_old=nr&wdService=wrPsCmsPlay", // wdService=loadPiYueNrDesignAndPlayerData。Lin
  429. */ url: "/service?ssServ=wrPsCmsPlay", // wdService=loadPiYueNrDesignAndPlayerData。Lin
  430. data: {
  431. 'id': data.id,
  432. 'type': data.type //批阅器包括编辑器和播放器,其中11代表编辑器,1代表播放器
  433. },
  434. async: false,
  435. dataType: 'json',
  436. success: function (data) {
  437. var dataInit = {};
  438. dataInit.design = data.design;
  439. dataInit.resDesign = data.resDesign;
  440. $('#' + divId).attr('data-init', JSON.stringify(dataInit));
  441. if (args.dataParam) {
  442. $('#' + divId).attr('data-param', JSON.stringify(args.dataParam));
  443. }
  444. $('#' + divId).html(data.data);
  445. }
  446. });
  447. }
  448. });
  449. } else if (type == "edit" || type == "play") {
  450. nrid = args.loadParam.id;
  451. var type2 = null;
  452. if (type == "edit") {
  453. type2 = "11";
  454. } else if (type == "play") {
  455. type2 = "1"
  456. }
  457. $.ajax({
  458. type: "GET",
  459. /* 再改,规范命名。Lin
  460. * 去掉 ?wdApplication=,不支持多个应用 -- 服务名可以写 ss.xxx
  461. * &wdService= 改为 ssServ
  462. url: "/service?wdApplication_old=nr&wdService=wrPsCmsPlay", // wdService=loadPiYueNrDesignAndPlayerData。Lin
  463. */ url: "/service?ssServ=wrPsCmsPlay", // wdService=loadPiYueNrDesignAndPlayerData。Lin
  464. data: {
  465. 'id': nrid,
  466. 'type': type2 //批阅器包括编辑器和播放器,其中11代表编辑器,1代表播放器
  467. },
  468. async: false,
  469. dataType: 'json',
  470. success: function (data) {
  471. var dataInit = {};
  472. dataInit.design = data.design;
  473. dataInit.resDesign = data.resDesign;
  474. $('#' + divId).attr('data-init', JSON.stringify(dataInit));
  475. if (args.dataParam) {
  476. $('#' + divId).attr('data-param', JSON.stringify(args.dataParam));
  477. }
  478. $('#' + divId).html(data.data);
  479. }
  480. });
  481. }
  482. }
  483. wd.edit.initInputter = function (name, ynrid, encode_shid, encode_ynrid) {
  484. //文本
  485. var TEXTAREAEDITORID = 440120100230;
  486. //录音
  487. var VOICERECORDEDITORID = 440120100250;
  488. //手写
  489. var HANDWRITEREDITORID = 440120100210;
  490. var PIYUEEDITORID = 440120100310; //测试先用文本编辑器做测试
  491. var DEFAULTEDITOR = TEXTAREAEDITORID;
  492. var $selects = $('select[name=' + name + 'Editor]');
  493. if ($selects.find("[value=" + TEXTAREAEDITORID + "]").length == 0) {
  494. $selects.append("<option value=\"" + TEXTAREAEDITORID + "\">文本</option>");
  495. }
  496. if ($selects.find("[value=" + VOICERECORDEDITORID + "]").length == 0) {
  497. $selects.append("<option value=\"" + VOICERECORDEDITORID + "\">录音</option>");
  498. }
  499. console.log(this);
  500. if ($selects.find("[value=" + HANDWRITEREDITORID + "]").length == 0) {
  501. $selects.append("<option value=\"" + HANDWRITEREDITORID + "\">手写</option>");
  502. }
  503. if ($selects.length == 0)
  504. DEFAULTEDITOR = PIYUEEDITORID;
  505. //默认用文本编辑器
  506. $selects.val(DEFAULTEDITOR);
  507. function changeSelector(editorId, isloadEditor) {
  508. window.destroyEditor && window.destroyEditor();
  509. if (!editorId)
  510. return;
  511. var textDiv = document.querySelector("#" + name + "Text");
  512. var otherDiv = document.querySelector("#" + name + "Other");
  513. console.log(textDiv)
  514. //文本编辑器
  515. if (editorId == TEXTAREAEDITORID) {
  516. if (textDiv)
  517. textDiv.style.display = "none";
  518. if (otherDiv)
  519. otherDiv.style.display = "";
  520. } else {
  521. if (textDiv)
  522. textDiv.style.display = "";
  523. if (otherDiv)
  524. otherDiv.style.display = "none";
  525. }
  526. if (isloadEditor)
  527. wd.edit.loadCMSEditor2(name + 'Edit', 'create', {
  528. createParam: {
  529. 'editorId': "T-" + editorId
  530. },
  531. loadParam: {
  532. 'idInputName': name + 'id'
  533. }
  534. });
  535. }
  536. $selects.on('change', function (e) {
  537. changeSelector.call(this, this.value, true);
  538. });
  539. $(document).ready(function () {
  540. //拦截表单提交
  541. try {}
  542. catch (e) {
  543. console.log(e)
  544. }
  545. //申请者处理
  546. if (encode_shid) {
  547. //只使用文本编辑器
  548. // $selects.val(TEXTAREAEDITORID).trigger("change").hide();
  549. changeSelector(TEXTAREAEDITORID, true);
  550. //弹窗显示领导批示
  551. if (encode_ynrid) {
  552. //关闭当前弹窗
  553. wd.display.dxwindowsCloseMaskDiv();
  554. var url = document.querySelector('[name=' + name + '_WATCHURL]').value;
  555. url = wd.display.replaceDynamicParam(url, {
  556. 'id': encode_ynrid
  557. });
  558. var dialogid = eval(url);
  559. //不能同年同月生,却要同年同月关
  560. $(window).unload((function () {
  561. var id = dialogid
  562. return function () {
  563. wd.topWindow.dhxWins.window(id).close();
  564. }
  565. })())
  566. setTimeout(wd.display.dxwindowsCloseMaskDiv,2000)
  567. }
  568. } else {
  569. //回显功能
  570. if (ynrid)
  571. document.querySelector("[name=" + name + "id]").value = ynrid;
  572. //初始化
  573. var id = document.querySelector("[name=" + name + "id]").value;
  574. if (id) {
  575. wd.edit.loadCMSEditor2(name + 'Edit', 'edit', {
  576. 'loadParam': {
  577. 'id': "T-" + id
  578. }
  579. });
  580. } else {
  581. if ($selects.LENGTHADJUST_SPACING > 0) {
  582. $selects.trigger("change");
  583. } else {
  584. changeSelector(DEFAULTEDITOR, true);
  585. }
  586. }
  587. }
  588. try {
  589. window.setAttachmentButton()
  590. } catch (e) {}
  591. });
  592. }
  593. //2017年9月4日10:19:08 林泽旭
  594. //onoffButton
  595. //点击onoffboxbtn事件
  596. wd.edit.onoffClick = function (btn, type, nullable, onClass, offClass) {
  597. if (type == "checkbox") {
  598. //更改隐藏的用户选中的值
  599. var onoffhidden = document.querySelectorAll("input[name='" + btn.name + "'][type='checkbox']");
  600. if (onoffhidden) {
  601. for (var i = 0; i < onoffhidden.length; i++) {
  602. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  603. if (onoffhidden[i].value == btn.getAttribute("wdValue")) {
  604. */ if (onoffhidden[i].value == btn.getAttribute("ssVal")) {
  605. if (onoffhidden[i].checked) {
  606. onoffhidden[i].checked = false;
  607. } else {
  608. onoffhidden[i].checked = true;
  609. }
  610. }
  611. }
  612. if (btn.classList.contains(offClass)) {
  613. btn.classList.remove(offClass);
  614. btn.classList.add(onClass);
  615. } else {
  616. btn.classList.remove(onClass);
  617. btn.classList.add(offClass);
  618. }
  619. }
  620. } else {
  621. //更改隐藏的用户选中的值
  622. var onoffhidden = document.querySelectorAll("input[name='" + btn.name + "'][type='hidden']");
  623. if (onoffhidden) {
  624. var hidden = onoffhidden[0];
  625. if (nullable == false) {
  626. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  627. hidden.value = btn.getAttribute("wdValue");
  628. */ hidden.value = btn.getAttribute("ssVal");
  629. } else {
  630. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  631. if (hidden.value == btn.getAttribute("wdValue")) {
  632. */ if (hidden.value == btn.getAttribute("ssVal")) {
  633. hidden.value = '';
  634. } else {
  635. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  636. hidden.value = btn.getAttribute("wdValue");
  637. */ hidden.value = btn.getAttribute("ssVal");
  638. }
  639. }
  640. //寻找name对应的btn
  641. var onoffbtn = document.querySelectorAll("input[name='" + btn.name + "'][type='button']");
  642. for (var i = 0; i < onoffbtn.length; i++) {
  643. var btns = onoffbtn[i];
  644. //alert(btns.getAttribute("wdValue")+"!!!"+btn.getAttribute("wdValue")+"!!!"+btns.className+"!!!"+nullable)
  645. //存在value采用onclass样式
  646. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  647. if (btns.getAttribute("wdValue") == btn.getAttribute("wdValue") && (btns.classList.contains(offClass) || nullable == false)) {
  648. */ if (btns.getAttribute("ssVal") == btn.getAttribute("ssVal") &&
  649. (btns.classList.contains(offClass) || nullable == false)) {
  650. btns.classList.remove(offClass);
  651. btns.classList.add(onClass);
  652. }
  653. //不存在采用offclass样式
  654. else {
  655. btns.classList.remove(onClass);
  656. btns.classList.add(offClass);
  657. }
  658. }
  659. }
  660. }
  661. }
  662. // 初始化事件
  663. wd.edit.onoffInit = function (type, name, value, nullable, onClass, offClass, callback, mode) {
  664. if ("null" == value)
  665. value = null;
  666. if (onClass == null || onClass == "" || onClass == "null") {
  667. onClass = "content-onButton";
  668. }
  669. if (offClass == null || offClass == "" || offClass == "null") {
  670. offClass = "content-offButton";
  671. }
  672. var onoffbutton_list = document.createElement("Input");
  673. onoffbutton_list.id = name + "_onoffbutton_list";
  674. onoffbutton_list.value = value;
  675. onoffbutton_list.type = type;
  676. onoffbutton_list.style.display = "none";
  677. onoffbutton_list.setAttribute("ssname", name); // ("wdname",。不是 wdName,先改???Lin
  678. onoffbutton_list.setAttribute("nullable", nullable);
  679. onoffbutton_list.setAttribute("onClass", onClass);
  680. onoffbutton_list.setAttribute("offClass", offClass);
  681. //寻找name对应的btn
  682. var onoffbtn = document.querySelectorAll("input[name='" + name + "'][type='button']");
  683. function bindBtn(btn, type, name, nullable, onClass, offClass, callback) {
  684. //原先是const ---2020.1.2更改
  685. var const_btn = btn;
  686. var const_type = type;
  687. var const_name = name;
  688. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  689. var const_wdValue = btn.getAttribute("wdValue");
  690. */ var const_wdValue = btn.getAttribute("ssVal");
  691. var const_nullable = nullable;
  692. var const_onClass = onClass;
  693. var const_offClass = offClass;
  694. if (btn.addEventListener) {
  695. btn.addEventListener('click', function () {
  696. wd.edit.onoffClick(const_btn, const_type, const_nullable, const_onClass, const_offClass);
  697. //$(document).ready(function () {eval(onclick);});
  698. if (callback) {
  699. if(typeof(callback) == "string"){
  700. eval(callback)(const_btn);
  701. }else if(typeof(callback) == "function"){
  702. eval(callback(const_btn));
  703. }
  704. }
  705. });
  706. } else if (btn.attachEvent) {
  707. btn.attachEvent('onclick', function () {
  708. wd.edit.onoffClick(const_btn, const_type, const_nullable, const_onClass, const_offClass);
  709. if (callback) {
  710. if(typeof(callback) == "string"){
  711. eval(callback)(const_btn);
  712. }else if(typeof(callback) == "function"){
  713. eval(callback(const_btn));
  714. }
  715. }
  716. });
  717. } else {
  718. btn['onclick'] = function () {
  719. wd.edit.onoffClick(const_btn, const_type, const_nullable, const_onClass, const_offClass);
  720. if (callback) {
  721. if(typeof(callback) == "string"){
  722. eval(callback)(const_btn);
  723. }else if(typeof(callback) == "function"){
  724. eval(callback(const_btn));
  725. }
  726. }
  727. };
  728. }
  729. }
  730. if (type == "checkbox") {
  731. //拆分value值
  732. value = value;
  733. var wdValues = new Array();
  734. if (value)
  735. wdValues = value.split(",");
  736. //对每个btn进行对应处理
  737. for (var i = 0; i < onoffbtn.length; i++) {
  738. var btn = onoffbtn[i];
  739. if (i == 0) {
  740. btn.parentNode.insertBefore(onoffbutton_list, btn);
  741. }
  742. //添加隐藏字段(checkbox)
  743. var hidden_value = document.createElement("Input");
  744. hidden_value.name = name;
  745. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  746. hidden_value.id = name + btn.getAttribute("wdValue");
  747. hidden_value.value = btn.getAttribute("wdValue");
  748. */
  749. hidden_value.id = name + btn.getAttribute("ssVal");
  750. hidden_value.value = btn.getAttribute("ssVal");
  751. hidden_value.type = "checkbox";
  752. hidden_value.style.display = "none";
  753. if (value != null && value != "") {
  754. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  755. if (wdValues.indexOf(btn.getAttribute("wdValue")) > -1) {
  756. */ if (wdValues.indexOf(btn.getAttribute("ssVal")) > -1) {
  757. hidden_value.checked = true;
  758. btn.classList.add(onClass);
  759. //$(document).ready(function () {eval(onclick);});
  760. } else {
  761. hidden_value.checked = false;
  762. btn.classList.add(offClass);
  763. }
  764. } else {
  765. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  766. if (btn.getAttribute("wdValue") == "" || btn.getAttribute("wdValue") == null) {
  767. */ if (btn.getAttribute("ssVal") == "" ||
  768. btn.getAttribute("ssVal") == null) {
  769. hidden_value.checked = true;
  770. btn.classList.add(onClass);
  771. } else {
  772. hidden_value.checked = false;
  773. btn.classList.add(offClass);
  774. }
  775. }
  776. btn.parentNode.insertBefore(hidden_value, btn);
  777. if (mode == "edit") {
  778. //添加点击事件
  779. bindBtn(btn, type, name, nullable, onClass, offClass, callback);
  780. }
  781. }
  782. } else {
  783. //对每个btn进行对应处理
  784. for (var i = 0; i < onoffbtn.length; i++) {
  785. var btn = onoffbtn[i];
  786. //存在value采用onclass样式
  787. if (i == 0) {
  788. if (nullable != true && (value == "null" || value == "" || value == null)) {
  789. var sfmrzyk = 0; //是否有默认值有空
  790. for (var j = 0; j < onoffbtn.length; j++) {
  791. var btn0 = onoffbtn[j];
  792. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  793. if (btn0.getAttribute("wdValue") == "") {
  794. */ if (btn0.getAttribute("ssVal") == "") {
  795. sfmrzyk = 1;
  796. }
  797. }
  798. if (sfmrzyk == 0) {
  799. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  800. value = btn.getAttribute("wdValue");
  801. */ value = btn.getAttribute("ssVal");
  802. }
  803. }
  804. //添加隐藏字段
  805. var hidden_value = document.createElement("Input");
  806. hidden_value.name = name;
  807. hidden_value.value = value;
  808. hidden_value.type = "hidden";
  809. btn.parentNode.insertBefore(hidden_value, btn);
  810. btn.parentNode.insertBefore(onoffbutton_list, btn);
  811. }
  812. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  813. if (btn.getAttribute("wdValue") == "" && (value == "null" || value == "" || value == null)) {
  814. */ if (btn.getAttribute("ssVal") == "" &&
  815. (value == "null" || value == "" || value == null)) {
  816. btn.classList.add(onClass);
  817. } else {
  818. //存在value采用onclass样式
  819. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  820. if (btn.getAttribute("wdValue") == value) {
  821. */ if (btn.getAttribute("ssVal") == value) {
  822. btn.classList.add(onClass);
  823. //$(document).ready(function () {eval(onclick);});
  824. }
  825. //不存在采用offclass样式
  826. else {
  827. btn.classList.add(offClass);
  828. }
  829. }
  830. if (mode == "edit") {
  831. //添加点击事件
  832. bindBtn(btn, type, name, nullable, onClass, offClass, callback);
  833. }
  834. // const const_btn = btn;
  835. // const const_type = type;
  836. // const const_name = name;
  837. // const const_wdValue = btn.getAttribute("wdValue");
  838. // const const_nullable = nullable;
  839. // const const_onClass = onClass;
  840. // const const_offClass = offClass;
  841. // if (btn.addEventListener) {
  842. // btn.addEventListener('click', function () {
  843. // wd.edit.onoffClick(const_btn, const_type, const_nullable, const_onClass, const_offClass);
  844. // //$(document).ready(function () {eval(onclick);});
  845. // if (callback) {
  846. // eval(callback(const_btn));
  847. // }
  848. // });
  849. // } else if (btn.attachEvent) {
  850. // btn.attachEvent('onclick', function () {
  851. // wd.edit.onoffClick(const_btn, const_type, const_nullable, const_onClass, const_offClass);
  852. // if (callback) {
  853. // eval(callback(const_btn));
  854. // }
  855. // });
  856. // } else {
  857. // btn['onclick'] = function () {
  858. // wd.edit.onoffClick(const_btn, const_type, const_nullable, const_onClass, const_offClass);
  859. // if (callback) {
  860. // eval(callback(const_btn));
  861. // }
  862. // };
  863. // }
  864. }
  865. }
  866. }
  867. // 更改onoffbutton事件
  868. wd.edit.onoffEdit = function (name, value) {
  869. //寻找name对应的btn
  870. var onoffbtn_list = document.getElementById(name + "_onoffbutton_list");
  871. //寻找name对应的btn
  872. var onoffbtn = document.querySelectorAll("input[name='" + name + "'][type='button']");
  873. var type = onoffbtn_list.type;
  874. var nullable = onoffbtn_list.getAttribute("nullable");
  875. var onClass = onoffbtn_list.getAttribute("onClass");
  876. var offClass = onoffbtn_list.getAttribute("offClass");
  877. if (type == "checkbox") {
  878. //拆分value值
  879. var wdValues = new Array();
  880. wdValues = value.split(",");
  881. //对每个btn进行对应处理
  882. for (var i = 0; i < onoffbtn.length; i++) {
  883. var btn = onoffbtn[i];
  884. //添加隐藏字段(checkbox)
  885. /* 改 wdValue -- 规范 wdValue= 命名。Lin
  886. var hidden_value = document.getElementById(name + btn.getAttribute("wdValue"));
  887. */ var hidden_value = document.getElementById(name + btn.getAttribute("ssVal"));
  888. if (value != null && value != "") {
  889. if (wdValues.indexOf(btn.getAttribute("wdValue")) > -1) {
  890. hidden_value.checked = true;
  891. btn.classList.remove(offClass);
  892. btn.classList.add(onClass);
  893. //$(document).ready(function () {eval(onclick);});
  894. } else {
  895. hidden_value.checked = false;
  896. btn.classList.remove(onClass);
  897. btn.classList.add(offClass);
  898. }
  899. } else {
  900. if (btn.getAttribute("wdValue") == "" || btn.getAttribute("wdValue") == null) {
  901. hidden_value.checked = true;
  902. btn.classList.remove(offClass);
  903. btn.classList.add(onClass);
  904. } else {
  905. hidden_value.checked = false;
  906. btn.classList.remove(onClass);
  907. btn.classList.add(offClass);
  908. }
  909. }
  910. }
  911. } else {
  912. //更改隐藏的用户选中的值
  913. var onoffhidden = document.querySelectorAll("input[name='" + name + "'][type='hidden']");
  914. if (onoffhidden) {
  915. var hidden = onoffhidden[0];
  916. if (nullable == "false") {
  917. hidden.value = value;
  918. } else {
  919. if (hidden.value == value) {
  920. hidden.value = '';
  921. } else {
  922. hidden.value = value;
  923. }
  924. }
  925. for (var i = 0; i < onoffbtn.length; i++) {
  926. var btn = onoffbtn[i];
  927. if (btn.getAttribute("wdValue") == "" && (value == "null" || value == "" || value == null)) {
  928. btn.classList.remove(offClass);
  929. btn.classList.add(onClass);
  930. } else {
  931. //存在value采用onclass样式
  932. if (btn.getAttribute("wdValue") == value && (btn.classList.contains(offClass) || nullable == "false")) {
  933. btn.classList.remove(offClass);
  934. btn.classList.add(onClass);
  935. }
  936. //不存在采用offclass样式
  937. else {
  938. btn.classList.remove(onClass);
  939. btn.classList.add(offClass);
  940. }
  941. }
  942. }
  943. }
  944. }
  945. };
  946. function initEditorGrowHeightStyle(editor) {
  947. editor.onfocus = function () {
  948. // $(editor.parentNode).addClass("editorparenton");
  949. // editor.className = "editorclasson";
  950. }
  951. editor.onblur = function () {
  952. // $(editor.parentNode).addClass("editorparentno");
  953. // editor.className = "editorclassno";
  954. }
  955. }
  956. wd.edit.initGrowHigh = function (areaId, maxHeight, buttons, multimedia, multiline) {
  957. if (!getGrowHeight) {
  958. console.log("没找到growheight");
  959. } else {
  960. getGrowHeight(areaId, maxHeight, buttons, multimedia ? 1 : 0, multiline);
  961. }
  962. }
  963. function setUpAttachement(editor, buttons) {
  964. return
  965. if (!buttons.fj)
  966. return;
  967. var fj = buttons.fj;
  968. var fjInput = document.getElementsByName(fj.key + "id")[0];
  969. if (!fjInput) {
  970. fjInput = document.createElement("input");
  971. fjInput.type = "hidden";
  972. fjInput.name = fj.key + "id";
  973. editor.parentNode.insertBefore(fjInput, editor);
  974. }
  975. fjInput.value = fj.value;
  976. var attachment = document.createElement("span");
  977. attachment.className = 'attachment';
  978. attachment.onclick = window[fj.key + "fjEdit"];
  979. var fnName = fj.key + "CallbackName";
  980. var fnName = window[fnName] = fj.key + "mouseover";
  981. window[fnName] = function () {
  982. var fjid = document.getElementsByName(fj.key + "id")[0].value;
  983. if (fjid != null && fjid != "") {
  984. $.ajax({
  985. type: "post",
  986. url: "/service?ssServ=wrCcmsList", // =getSubNrCount",。Lin
  987. data: {
  988. nrid: "T-" + fjid,
  989. jlztm:1
  990. },
  991. dataType: "json", // 增加,统一 Ajax 返回标准 -- .ssCode、.ssMsg、.ssData。Lin
  992. success: function (data) {
  993. /* 改,增加错误处理 -- 统一 Ajax 返回标准 -- .ssCode、.ssMsg、.ssData。Lin
  994. var count = parseInt(data);
  995. */
  996. if (data.ssCode != 0) {
  997. alert(data.ssMsg);
  998. return;
  999. }
  1000. var count = parseInt(data.ssData);
  1001. var num = attachment.querySelector(".attachment_count");
  1002. if (count) {
  1003. if (!num) {
  1004. num = document.createElement("span");
  1005. num.className = "attachment_count";
  1006. attachment.appendChild(num);
  1007. }
  1008. num.innerText = count;
  1009. }
  1010. },
  1011. error: function (data) {
  1012. console.log(data);
  1013. }
  1014. })
  1015. }
  1016. }
  1017. attachment.onmouseover = window[fnName];
  1018. attachment.onmouseover();
  1019. function style_(element, name) {
  1020. var v = window.getComputedStyle(element)[name];
  1021. return v;
  1022. }
  1023. function $width(element) {
  1024. return parseFloat(style_(element, "width"));
  1025. }
  1026. function $right(element) {
  1027. return parseFloat(style_(element, "right"));
  1028. }
  1029. function $mLeft(element) {
  1030. return parseFloat(style_(element, "margin-left"));
  1031. }
  1032. function $top(element) {
  1033. return parseFloat(style_(element, "top"))
  1034. }
  1035. function $bottom(element) {
  1036. return parseFloat(style_(element, "bottom"))
  1037. }
  1038. editor.parentNode.appendChild(attachment);
  1039. editor.wrapper = editor.parentNode;
  1040. var fjWidth = $width(attachment),
  1041. r = $right(attachment),
  1042. ml = $mLeft(attachment);
  1043. editor.style.width = $width(editor) - fjWidth - ml - r;
  1044. // editor.style.marginRight = fjWidth + ml + r;
  1045. var oriTop = $top(attachment);
  1046. var oriBottom = $bottom(attachment);
  1047. var oriLeft = $mLeft(attachment);
  1048. var oriRight = $right(attachment);
  1049. function updateButtonSize() {
  1050. if (editor.shadow == null && editor.style.position == "absolute") { //浮动的
  1051. document.body.appendChild(attachment);
  1052. var bound = editor.getBoundingClientRect();
  1053. attachment.style.top = bound.top + oriTop + "px";
  1054. attachment.style.height = bound.height - oriTop - oriBottom + "px";
  1055. attachment.style.left = bound.right + oriLeft + "px";
  1056. attachment.style.zIndex = "10000";
  1057. attachment.style.position = 'absolute';
  1058. } else { //不是浮动的
  1059. if (attachment.parentNode != editor.wrapper) {
  1060. editor.wrapper.insertBefore(attachment, editor.nextSibling);
  1061. } else {}
  1062. // attachment.style.top=attachment.style.bottom=0;
  1063. attachment.style.position = "";
  1064. attachment.style.height = "100%";
  1065. attachment.style.display = "inline-block";
  1066. }
  1067. // attachment.style.right = $width(editor.parentNode) - $width(editor) - fjWidth - ml - (editor.scrollHeight == editor.clientHeight ? 0 : 16);
  1068. }
  1069. var id = setInterval(updateButtonSize, 100);
  1070. }
  1071. /**旧版批示器初始化方法**/
  1072. //function ynrInit() {
  1073. // var ynrid = document.getElementsByName('ynrid')[0].value;
  1074. // if(ynrid) {
  1075. // var nrid = 'T-' + ynrid;
  1076. // wd.edit.loadCMSEditor2('ynrEdit','edit', {'loadParam':{'id': nrid}});
  1077. // } else {
  1078. // createynr();
  1079. // }
  1080. //}
  1081. //function ynrEvent() {
  1082. // $('select[name=ynrEditor]').on('change', function(e) {
  1083. // createynr();
  1084. // });
  1085. //}
  1086. //function createynr() {
  1087. // var nrid = document.getElementsByName('ynrEditor')[0].value;
  1088. // var id = 'T-' + nrid;
  1089. // wd.edit.loadCMSEditor2('ynrEdit', 'create', {createParam:{'editorId': id},loadParam:{'idInputName':'ynrid'}});
  1090. //}
  1091. //(function(){ynrInit();})();
  1092. //(function(){ynrEvent();})();
  1093. wd.edit.clearGrowHeightContent = function (id) {
  1094. document.querySelector("#" + id).innerHTML = "";
  1095. }
  1096. wd.edit.addClearTextButton = function (name) {
  1097. var isGrowHeight = false;
  1098. var ele = document.querySelector("[name=" + name + "]");
  1099. if (ele && ele.GrowHeight) {
  1100. isGrowHeight = true;
  1101. }
  1102. var mouseoverElement = isGrowHeight ? growHeightList[name].container : ele
  1103. var locationele=isGrowHeight?mouseoverElement.parentNode:ele;
  1104. var $button = $("<span class='smallButton icon-clear'></span>")
  1105. $button.insertAfter(locationele).hide().on("click", function () {
  1106. $(ele).val("").trigger("blur,keyup");
  1107. $button.hide();
  1108. if (isGrowHeight)
  1109. growHeightList[name].val("")
  1110. });
  1111. var timeid=null;
  1112. $(mouseoverElement).on("mouseenter", function () {
  1113. clearTimeout(timeid);
  1114. if (isGrowHeight ? growHeightList[name].val() : $(ele).val()) {
  1115. $button.css({
  1116. display: "",
  1117. position:"absolute"
  1118. });
  1119. var pos=$(locationele).position();
  1120. $button.css({
  1121. left: Math.abs(locationele.offsetWidth + pos.left),
  1122. top: Math.abs(pos.top+(locationele.offsetHeight-$button[0].offsetHeight)*0.5)
  1123. })
  1124. }
  1125. }).on("mouseout", function () {
  1126. timeid=setTimeout(function(){
  1127. $button.hide();
  1128. },1000)
  1129. })
  1130. $button.hover(function(){
  1131. clearTimeout(timeid);
  1132. },function(){
  1133. $button.hide();
  1134. })
  1135. }
  1136. //保存个人选值
  1137. wd.edit.insertRecord=function(zhi){
  1138. if(!zhi){
  1139. console.error("找不到zhi")
  1140. return;
  1141. }else if(typeof zhi!="object"){
  1142. console.error("zhi error");
  1143. return;
  1144. }
  1145. var ps=window.location.href.replace(/.*\?/,"").split("&");
  1146. var token;
  1147. for(var i=0;i<ps.length;i++){
  1148. if(ps[i].indexOf("ssToken=")>-1){ // ("token=")>。Lin
  1149. token=ps[i].replace("ssToken\=",''); // ("token\=",。Lin
  1150. break;
  1151. }
  1152. }
  1153. if(!token){
  1154. console.error("找不到token!")
  1155. return;
  1156. }
  1157. $.ajax({
  1158. type:"post",
  1159. url:"/service?ssServ=insertRecords",
  1160. async:true,
  1161. data:{
  1162. zhi:JSON.stringify(zhi),
  1163. tokenstring:token
  1164. },
  1165. success:function(data){
  1166. if(data=="fail"){
  1167. console.error("保存选值失败");
  1168. }
  1169. },error:function(){
  1170. console.error("保存选值失败");
  1171. }
  1172. });
  1173. }
  1174. //获取个人选值
  1175. wd.edit.getRecord=function(){
  1176. var ps=window.location.href.replace(/.*\?/,"").split("&");
  1177. var token;
  1178. for(var i=0;i<ps.length;i++){
  1179. if(ps[i].indexOf("ssToken=")>-1){ // ("token=")>。Lin
  1180. token=ps[i].replace("ssToken\=",''); // ("token\=",。Lin
  1181. break;
  1182. }
  1183. }
  1184. if(!token){
  1185. console.error("找不到token!")
  1186. return;
  1187. }
  1188. var result;
  1189. $.ajax({
  1190. type:"post",
  1191. url:"/service?ssServ=getRecords",
  1192. async:false,
  1193. data:{
  1194. tokenstring:token
  1195. },
  1196. success:function(data){
  1197. if(data=="fail"){
  1198. console.error("保存选值失败");
  1199. }else if(data){
  1200. result=eval("("+data+")");
  1201. }
  1202. },error:function(){
  1203. console.error("保存选值失败");
  1204. }
  1205. });
  1206. return result;
  1207. }
  1208. wd.edit.initObjectFunctionService=function(buttonID,objectName,funcName){
  1209. var $button=$("#"+buttonID);
  1210. var onclickString="void(0);";
  1211. var temp = wd.display.createObjectService(objectName,funcName);
  1212. if(temp.pluginList){
  1213. for(var iii=0;iii<temp.pluginList.length;iii++){
  1214. var pluginobj=temp.pluginList[iii];
  1215. var clicksss = "wd.display.showComponent({show:['wdDialog'],hide:[],url:'"+pluginobj.url+"',title:'"+pluginobj.title+"',width:"+pluginobj.width+",height:"+pluginobj.height+",minHeight:"+pluginobj.minHeight+",maxHeight:"+pluginobj.maxHeight+"});";
  1216. $button.append('<span style="display:none;" class="'+buttonID+'children" onclick="'+clicksss+'" value="'+pluginobj.pluginDesc+'"></span>')
  1217. }
  1218. wd.display.attachButton(buttonID,buttonID+"children");
  1219. }else{
  1220. onclickString = "wd.display.showComponent({show:['wdDialog'],hide:[],url:'"+temp.url+"',title:'"+temp.title+"',width:"+temp.width+",height:"+temp.height+",minHeight:"+temp.minHeight+",maxHeight:"+temp.maxHeight+"});";
  1221. }
  1222. $button.attr("onclick",onclickString);
  1223. }
  1224. //
  1225. window.beforeBatchSubmit=window.beforeBatchSubmit||null;
  1226. /**
  1227. *储存批量录入实例,应用程序不可以直接使用
  1228. */
  1229. window._batchInputInputInstance=window._batchInputInputInstance||{};
  1230. wd.edit.addBatchInputLine=function(param){
  1231. wd.edit._createBatchInputInstance(param)._addBatchInputLine(param);
  1232. }
  1233. wd.edit.initBatchInput=function(param){
  1234. wd.edit._createBatchInputInstance(param)._init(param);
  1235. }
  1236. wd.edit._createBatchInputInstance=function(p){
  1237. var c=$("#"+p.container);
  1238. if(c.length==0)return null;
  1239. var instance=_batchInputInputInstance[p.container];
  1240. if(instance){
  1241. return instance;
  1242. }
  1243. var batchInput=function(param){
  1244. this._addBatchInputLine=null;
  1245. this._init=null;
  1246. var addButton=$("#"+param.addButton);
  1247. var container=$("#"+param.container);
  1248. container.html("");
  1249. var obj=param.object;
  1250. //初始空行数,如果为0表示初始没空行
  1251. var blankRow=param.blankRow?param.blankRow:1;
  1252. //批量录入表格的初始化数据,这些数据会变为隐藏字段自动插入到包含每条记录的div中
  1253. var initData=param.initData||{};
  1254. var wdgrouplistVal=$("<input type=\"hidden\" name=\"wdgrouplist\"/>").appendTo(container);
  1255. var wdgrouplist=[];
  1256. var wdgroupDiv={};
  1257. var wdgroup=0;
  1258. //记录当前行数
  1259. var rowCount=0;
  1260. //限制最大行数
  1261. var maxrow=isNaN(param.maxRow)?NaN:parseInt(param.maxRow);
  1262. var maxRowMessage=param.maxRowMessage||("已超过允许最大行数"+maxrow);
  1263. if(window.wdVm){
  1264. window.wdVm.validationInfos=[];
  1265. }
  1266. function showMaxRowMessage(targetInput){
  1267. try{
  1268. wd.flashMsg.show({
  1269. el: targetInput||container, // 吸附的元素
  1270. msg: maxRowMessage, // 内容
  1271. animate:false,
  1272. offset:"u"
  1273. });
  1274. }catch(e){
  1275. console.log(e);
  1276. }
  1277. }
  1278. function batchMini(bdata,autofucus,initData_){
  1279. initData_=initData_||initData;
  1280. bdata=bdata?bdata:[{}];
  1281. var thiswdgrouplist=[];
  1282. //合并数据
  1283. for(var i=0;i<bdata.length;i++){
  1284. bdata[i]=bdata[i]?bdata[i]:{};
  1285. bdata[i]=$.extend({},initData_,bdata[i]);
  1286. wdgroup++;
  1287. rowCount++;
  1288. bdata[i].wdgroup=wdgroup;
  1289. }
  1290. var allscript={};
  1291. $("script[src]").each(function(){
  1292. allscript[this.getAttribute("src")]=1;
  1293. })
  1294. var inputurl="/service?ssServ=batchMini&requestobject="+obj;
  1295. $.post(inputurl,{wdgroupdata:JSON.stringify(bdata)},function(result){
  1296. var newDiv=$(result);
  1297. newDiv.find("script[src]").each(function(){
  1298. var src=this.getAttribute("src");
  1299. if(allscript[src]==1){
  1300. $(this).remove();
  1301. //console.log("remove src:"+src);
  1302. }else{
  1303. allscript[src]=1;
  1304. }
  1305. })
  1306. for(var i=0;i<bdata.length;i++){
  1307. var readonly="true"==bdata[i].readonly;
  1308. var thisdiv=$(newDiv.children("div")[i]);
  1309. if(readonly){
  1310. //thisdiv.css("filter","grayscale(100%)");
  1311. continue;
  1312. }
  1313. var gn=obj+bdata[i].wdgroup;
  1314. wdgrouplist.push(gn);
  1315. thiswdgrouplist.push(gn);
  1316. wdgrouplistVal.val(wdgrouplist.join(","));
  1317. wdgroupDiv[gn]=thisdiv;
  1318. for(var key in initData_){
  1319. var hiddenName=gn+"."+key;
  1320. if($(newDiv).find("[name='"+hiddenName+"']").length==0){
  1321. thisdiv.append("<input type=\"hidden\" name=\""+hiddenName+"\" value=\""+initData_[key]+"\"/>");
  1322. }
  1323. }
  1324. }
  1325. newDiv.appendTo(container);
  1326. var wdtabno=window.wdTabNoList;//[xm,xbm]
  1327. if(!wdtabno||wdtabno.length==0){
  1328. return
  1329. }
  1330. if(autofucus){
  1331. var box=wd.display.getInputBox(thiswdgrouplist[thiswdgrouplist.length-1] +"."+wdtabno[0]);
  1332. if(box){
  1333. box.focus();
  1334. }
  1335. }
  1336. for(var j=0;j<thiswdgrouplist.length;j++){
  1337. var gn=thiswdgrouplist[j];
  1338. for(var i=0;i<wdtabno.length;i++){
  1339. (function(no){
  1340. var lastno=(wdtabno.length-1)==no;
  1341. wd.display.getInputBox(gn+'.'+wdtabno[no]).onKeyDown([9,13],function(){
  1342. if(lastno){
  1343. if(maxrow&&!isNaN(maxrow)&&maxrow<=rowCount){
  1344. showMaxRowMessage();
  1345. return
  1346. }
  1347. //最后一个录入,跳到下一组第一个录入,如果没下一组就创建下一组
  1348. var groupindex=wdgrouplist.indexOf(gn);
  1349. if((wdgrouplist.length-1)==groupindex){
  1350. batchMini(null,true);
  1351. }else{
  1352. wd.display.getInputBox(wdgrouplist[groupindex+1]+'.'+wdtabno[0]).focus();
  1353. }
  1354. }else{
  1355. //下一个录入
  1356. wd.display.getInputBox(gn+'.'+wdtabno[no+1]).focus();
  1357. }
  1358. return false;
  1359. });
  1360. })(i);
  1361. }
  1362. }
  1363. });
  1364. }
  1365. // window.wdVm =window.wdVm|| new ValidationManager();
  1366. window.beforeBatchSubmit=function(){
  1367. //批量录入form提交前调用,自动删除记录为空的录入
  1368. if(!window.wdVm)return;
  1369. var validationInfos=[];
  1370. validationInfos=validationInfos.concat(window.wdVm.validationInfos);
  1371. //倒序循环,最后一个开始删空行
  1372. for(var i=(wdgrouplist.length-1);i>=0;i--){
  1373. //剩下一个录入,不清除
  1374. if(wdgrouplist.length==1){
  1375. break;
  1376. }
  1377. var gn=wdgrouplist[i];
  1378. var allNull=true;
  1379. //不含单前组的校验器
  1380. var newvalidationInfos=[];
  1381. for(var j=0;j<validationInfos.length;j++){
  1382. if(validationInfos[j].argsObj.namePrefix==(gn+".")){
  1383. if(!validationInfos[j].isNull()){
  1384. allNull=false;
  1385. }
  1386. }else{
  1387. newvalidationInfos.push(validationInfos[j]);
  1388. }
  1389. }
  1390. if(allNull){
  1391. validationInfos=newvalidationInfos;
  1392. wdgroupDiv[gn].remove();
  1393. wdgrouplist.splice(i,1);
  1394. rowCount--;
  1395. }
  1396. }
  1397. window.wdVm.validationInfos=validationInfos;
  1398. wdgrouplistVal.val(wdgrouplist.join(","));
  1399. }
  1400. addButton.off("click").on("click",function(){
  1401. if(!isNaN(maxrow)&&maxrow<=rowCount){
  1402. showMaxRowMessage(this);
  1403. return
  1404. }
  1405. batchMini();
  1406. });
  1407. this._init=function(np){
  1408. if(np){
  1409. param=np;
  1410. }
  1411. container.html("");
  1412. //批量录入表格的初始化数据,这些数据会变为隐藏字段自动插入到包含每条记录的div中
  1413. wdgrouplistVal=$("<input type=\"hidden\" name=\"wdgrouplist\"/>").appendTo(container);
  1414. wdgrouplist=[];
  1415. wdgroupDiv={};
  1416. if(window.wdVm){
  1417. window.wdVm.validationInfos=[];
  1418. }
  1419. initData=param.initData||{};
  1420. var data=param.data;
  1421. if(data&&data.length>0){
  1422. batchMini(data,false,{});
  1423. }else{
  1424. //空白行
  1425. if(blankRow>0){
  1426. batchMini(new Array(blankRow),true);
  1427. }
  1428. }
  1429. }
  1430. this._addBatchInputLine=function(np){
  1431. var thisInitData=np.initData;
  1432. var data=np.data;
  1433. if(!isNaN(maxrow)&&maxrow<(rowCount+data.length)){
  1434. showMaxRowMessage();
  1435. return
  1436. }
  1437. batchMini(data,false,thisInitData);
  1438. }
  1439. }
  1440. instance=new batchInput(p);
  1441. _batchInputInputInstance[p.container]=instance;
  1442. return instance;
  1443. }
  1444. window.editPhotoList= window.editPhotoList || {};
  1445. wd.edit.initEditPhoto=function(param){
  1446. if(window.editPhotoList[param.name+"wj"])return;
  1447. window.editPhotoList[param.name+"wj"]=new (function(param){
  1448. var THIS=this;
  1449. var _enable=true;
  1450. var nameee=param.name;
  1451. var url=param.url;
  1452. var width=param.width;
  1453. var height=param.height;
  1454. var imgEle=$("[id='"+nameee+"Img']");
  1455. var defaultPhoto=imgEle.attr("defaultSrc");
  1456. var hiddenEle=$("[name='"+nameee+"wj']");
  1457. this.setValue=function(v){
  1458. hiddenEle.val(v);
  1459. imgEle.attr('src', url+"&path="+encodeURIComponent(v));
  1460. }
  1461. this.getValue=function(){
  1462. return hiddenEle.val();
  1463. }
  1464. this.modify=function(canmodify){
  1465. _enable=canmodify?true:false;
  1466. }
  1467. this._uploadcallback=function(){
  1468. imgEle.attr('src', url+"&path="+encodeURIComponent(hiddenEle.val()));
  1469. }
  1470. this._loadError=function(){
  1471. console.log("loaderror");
  1472. if(imgEle.attr('src')!=defaultPhoto){
  1473. imgEle.attr('src',defaultPhoto);
  1474. }
  1475. }
  1476. this._beforeClick=function(){
  1477. return _enable;
  1478. }
  1479. imgEle.on("error",this._loadError);
  1480. if(this.getValue()){
  1481. imgEle.attr('src',url+"&path="+encodeURIComponent(hiddenEle.val()));
  1482. }else{
  1483. imgEle.attr('src',defaultPhoto);
  1484. }
  1485. /* 再改,改了 upload.js -- 去掉 "",去掉重复的,去掉大写的。Lin
  1486. var uploadparam={validation:'"JPG","JPEG","PNG","BPM","GIF"',width:width,height:height,name:nameee,callback:this._uploadcallback,beforeClick:this._beforeClick};
  1487. */
  1488. /* 再改,增加 type="img",分开处理图片的 上传、下载 -- sltwj 字段 -- <ulImg.ss、dlByHttp。Lin
  1489. * 上传,只保存相对文件名 -- D:/pms/data/img/xxx/yyy 里的 xxx/yyy
  1490. * 下载,使用 AppB.imgBaseDir,不使用 AppB.appRoot
  1491. var uploadparam={validation:'jpg,jpeg,png,bpm,gif',width:width,height:height,name:nameee,callback:this._uploadcallback,beforeClick:this._beforeClick};
  1492. */ var uploadparam={type:'img',validation:'jpg,jpeg,png,bpm,gif',width:width,height:height,name:nameee,callback:this._uploadcallback,beforeClick:this._beforeClick};
  1493. var editName=nameee+"Edit";
  1494. this.container=$("[id='"+editName+"']")[0];
  1495. $(function(){
  1496. $(THIS.container).uploadFile(uploadparam);
  1497. })
  1498. })(param);
  1499. }