国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

769 lines
25KB

  1. var fixupPos = false;
  2. var canMove = false;
  3. var leftLeaning = 0;
  4. //异步上传缩略图相关变量
  5. var nForm = null;
  6. var nFrame = null;
  7. var picnameObj = null;
  8. var vImg = null;
  9. function GetWinPos(w, h) {
  10. var dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX;
  11. var dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY;
  12. var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
  13. var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
  14. var systemZoom = width / window.screen.availWidth;
  15. var left = (width - w) / 2 / systemZoom + dualScreenLeft;
  16. var top = (height - h) / 2 / systemZoom + dualScreenTop;
  17. return { left: left, top: top };
  18. }
  19. function $Nav() {
  20. if (window.navigator.userAgent.indexOf("MSIE") >= 1) return 'IE';
  21. else if (window.navigator.userAgent.indexOf("Firefox") >= 1) return 'FF';
  22. else return "OT";
  23. }
  24. function $Obj(objname) {
  25. return document.getElementById(objname);
  26. }
  27. function ColorSel(c, oname) {
  28. var tobj = $Obj(oname);
  29. if (!tobj) tobj = eval('document.form1.' + oname);
  30. if (!tobj) {
  31. $Obj('colordlg').style.display = 'none';
  32. return false;
  33. } else {
  34. tobj.value = c;
  35. $Obj('colordlg').style.display = 'none';
  36. return true;
  37. }
  38. }
  39. function ShowColor(e, o) {
  40. LoadNewDiv(e, '../../static/web/img/colornew.htm', 'colordlg');
  41. }
  42. function ShowHide(objname) {
  43. var obj = $Obj(objname);
  44. if (obj.style.display != "none") obj.style.display = "none";
  45. else obj.style.display = "inline-block";
  46. }
  47. function ShowHideT(objname) {
  48. var obj = $Obj(objname);
  49. if (obj.style.display != "none") obj.style.display = "none";
  50. else obj.style.display = ($Nav() == "IE" ? "inline-block" : "table");
  51. }
  52. function ShowObj(objname) {
  53. var obj = $Obj(objname);
  54. if (obj == null) return false;
  55. obj.style.display = ($Nav() == "IE" ? "inline-block" : "table");
  56. }
  57. function ShowObjRow(objname) {
  58. var obj = $Obj(objname);
  59. obj.style.display = ($Nav() == "IE" ? "inline-block" : "table-row");
  60. }
  61. function AddTypeid2() {
  62. ShowObjRow('typeid2tr');
  63. }
  64. function HideObj(objname) {
  65. var obj = $Obj(objname);
  66. if (obj == null) return false;
  67. obj.style.display = "none";
  68. }
  69. function ShowItem1() {
  70. ShowObj('needset'); ShowObj('head1'); HideObj('head2'); HideObj('adset'); ShowObj('votehead');
  71. }
  72. function ShowItem2() {
  73. ShowObj('head2'); ShowObj('adset'); HideObj('voteset'); HideObj('head1'); HideObj('needset'); HideObj('votehead');
  74. }
  75. function SeePic(img, f) {
  76. if (f.value != '') img.src = f.value;
  77. }
  78. function SeePicNew(f, imgdid, frname, hpos, acname) {
  79. var newobj = null;
  80. if (f.value == '') return;
  81. vImg = $Obj(imgdid);
  82. picnameObj = document.getElementById('picname');
  83. nFrame = $Nav() == 'IE' ? eval('document.frames.' + frname) : $Obj(frname);
  84. nForm = f.form;
  85. //修改form的action等参数
  86. if (nForm.detachEvent) nForm.detachEvent("onsubmit", checkSubmit);
  87. else nForm.removeEventListener("submit", checkSubmit, false);
  88. nForm.action = 'archives_do.php';
  89. nForm.target = frname;
  90. nForm.dopost.value = 'uploadLitpic';
  91. nForm.submit();
  92. picnameObj.value = '';
  93. newobj = $Obj('uploadwait');
  94. if (!newobj) {
  95. newobj = document.createElement("DIV");
  96. newobj.id = 'uploadwait';
  97. newobj.style.position = 'absolute';
  98. newobj.className = 'uploadwait';
  99. newobj.style.width = 120;
  100. newobj.style.height = 20;
  101. newobj.style.top = hpos;
  102. newobj.style.left = 100;
  103. newobj.style.display = 'block';
  104. document.body.appendChild(newobj);
  105. newobj.innerHTML = '<img src="../../static/web/img/loadinglit.gif">';
  106. }
  107. newobj.style.display = 'block';
  108. //提交后还原form的action等参数
  109. nForm.action = acname;
  110. nForm.dopost.value = 'save';
  111. nForm.target = '';
  112. nForm.litpic.disabled = true;
  113. }
  114. function SelectFlash() {
  115. var pos = GetWinPos(800,600);
  116. window.open("./dialog/select_media.php?f=form1.flashurl", "popUpFlashWin", "scrollbars=yes,resizable=yes,statebar=no,width=800,height=600,left=" + pos.left + ", top=" + pos.top);
  117. }
  118. function SelectMedia(fname) {
  119. var pos = GetWinPos(800,600);
  120. window.open("./dialog/select_media.php?f=" + fname, "popUpFlashWin", "scrollbars=yes,resizable=yes,statebar=no,width=800,height=600,left=" + pos.left + ", top=" + pos.top);
  121. }
  122. function SelectSoft(fname) {
  123. var pos = GetWinPos(800,600);
  124. window.open("./dialog/select_soft.php?f=" + fname, "popUpImagesWin", "scrollbars=yes,resizable=yes,statebar=no,width=800,height=600,left=" + pos.left + ", top=" + pos.top);
  125. }
  126. function SelectImage(fname, stype, imgsel="") {
  127. var pos = GetWinPos(800,600);
  128. if (!fname) fname = 'form1.picname';
  129. if (imgsel) imgsel = '&noeditor=yes';
  130. if (!stype) stype = 'small';
  131. window.open("./dialog/select_images.php?f=" + fname + "&noeditor=yes&imgstick=" + stype + imgsel, "popUpImagesWin", "scrollbars=yes,resizable=yes,statebar=no,width=800,height=600,left=" + pos.left + ", top=" + pos.top);
  132. }
  133. function SelectImageN(fname, stype, vname) {
  134. var pos = GetWinPos(800,600);
  135. if (!fname) fname = 'form1.picname';
  136. if (!stype) stype = '';
  137. window.open("./dialog/select_images.php?f=" + fname + "&imgstick=" + stype + "&v=" + vname, "popUpImagesWin", "scrollbars=yes,resizable=yes,statebar=no,width=800,height=600,left=" + pos.left + ", top=" + pos.top);
  138. }
  139. function SelectKeywords(f) {
  140. var pos = GetWinPos(800,600);
  141. window.open("article_keywords_select.php?f=" + f, "popUpkwWin", "scrollbars=yes,resizable=yes,statebar=no,width=800,height=600,left=" + pos.left + ", top=" + pos.top);
  142. }
  143. function InitPage() {
  144. var selsource = $Obj('selsource');
  145. var selwriter = $Obj('selwriter');
  146. var colorbt = $Obj('color');
  147. if (selsource) { selsource.onmousedown = function (e) { SelectSource(e); } }
  148. if (selwriter) { selwriter.onmousedown = function (e) { SelectWriter(e); } }
  149. }
  150. function OpenMyWin(surl) {
  151. var pos = GetWinPos(800,600);
  152. window.open(surl, "popUpMyWin", "scrollbars=yes,resizable=yes,statebar=no,width=800,height=600,left="+pos.left+", top="+pos.top);
  153. }
  154. function OpenMyWinCoOne(surl) {
  155. var pos = GetWinPos(800,600);
  156. window.open(surl, "popUpMyWin2", "scrollbars=yes,resizable=yes,statebar=no,width=800,height=600,left="+pos.left+",top="+pos.top);
  157. }
  158. function PutSource(str) {
  159. var osource = $Obj('source');
  160. if (osource) osource.value = str;
  161. $Obj('mysource').style.display = 'none';
  162. ChangeFullDiv('hide');
  163. }
  164. function PutWriter(str) {
  165. var owriter = $Obj('writer');
  166. if (owriter) owriter.value = str;
  167. $Obj('mywriter').style.display = 'none';
  168. ChangeFullDiv('hide');
  169. }
  170. //增加选择投票文档
  171. function PutVote(str) {
  172. var ovote = $Obj('voteid');
  173. if (ovote) {
  174. ovote.value = str;
  175. tb_remove(false);
  176. } else {
  177. parent.document.form1.voteid.value = str;
  178. tb_remove(true);
  179. }
  180. }
  181. function ClearDivCt(objname) {
  182. if (!$Obj(objname)) return;
  183. $Obj(objname).innerHTML = '';
  184. $Obj(objname).style.display = 'none';
  185. ChangeFullDiv("hide");
  186. }
  187. function ChangeFullDiv(showhide, screenheigt) {
  188. var newobj = $Obj('fullpagediv');
  189. if (showhide == 'show') {
  190. if (!newobj) {
  191. newobj = document.createElement("DIV");
  192. newobj.id = 'fullpagediv';
  193. newobj.style.position = 'absolute';
  194. newobj.className = 'fullpagediv';
  195. newobj.style.height = document.body.clientHeight + 50 + 'px';
  196. document.body.appendChild(newobj);
  197. } else {
  198. newobj.style.display = 'block';
  199. }
  200. } else {
  201. if (newobj) newobj.style.display = 'none';
  202. }
  203. }
  204. function SelectSource(e) {
  205. LoadNewDiv(e, 'article_select_sw.php?t=source&k=8&rnd=' + Math.random(), 'mysource');
  206. }
  207. function SelectWriter(e) {
  208. LoadNewDiv(e, 'article_select_sw.php?t=writer&k=8&rnd=' + Math.random(), 'mywriter');
  209. }
  210. function LoadNewDiv(e, surl, oname) {
  211. var pxStr = '';
  212. if ($Nav() == 'IE') {
  213. var posLeft = window.event.clientX - 20;
  214. var posTop = window.event.clientY - 30;
  215. //IE下scrollTop的兼容性问题
  216. var scrollTop = document.documentElement.scrollTop || window.pageYOffset;
  217. if (typeof (scrollTop) == 'undefined') scrollTop = document.body.scrollTop;
  218. posTop += scrollTop;
  219. } else {
  220. var posLeft = e.pageX - 20;
  221. var posTop = e.pageY - 30;
  222. pxStr = 'px';
  223. }
  224. posLeft = posLeft - 100;
  225. var newobj = $Obj(oname);
  226. if (!newobj) {
  227. newobj = document.createElement("DIV");
  228. newobj.id = oname;
  229. newobj.style.position = 'absolute';
  230. newobj.className = oname;
  231. newobj.className += ' dlgws';
  232. newobj.style.top = posTop + pxStr;
  233. newobj.style.left = posLeft + pxStr;
  234. document.body.appendChild(newobj);
  235. } else {
  236. newobj.style.display = "block";
  237. }
  238. if (newobj.innerHTML.length < 10) {
  239. fetch(surl).then(resp => resp.text()).then((d) => { newobj.innerHTML = d });
  240. }
  241. }
  242. function LoadNewDiv2(e, surl, oname, dlgcls) {
  243. var posLeft = 300;
  244. var posTop = 50;
  245. var newobj = $Obj(oname);
  246. if (!newobj) {
  247. newobj = document.createElement("DIV");
  248. newobj.id = oname;
  249. newobj.style.position = 'absolute';
  250. newobj.className = dlgcls;
  251. newobj.style.top = posTop;
  252. newobj.style.left = posLeft;
  253. newobj.style.display = 'none';
  254. document.body.appendChild(newobj);
  255. }
  256. newobj.innerHTML = '';
  257. fetch(surl).then(resp => resp.text()).then((d) => {
  258. newobj.innerHTML = d;
  259. });
  260. if (newobj.innerHTML == '') newobj.style.display = 'none';
  261. else newobj.style.display = 'block';
  262. jQuery(newobj).css('top', '50px').css('left', '300px');
  263. DedeXHTTP = null;
  264. }
  265. function ShowUrlTr() {
  266. var jumpTest = $Obj('flagsj');
  267. var jtr = $Obj('redirecturltr');
  268. var jf = $Obj('redirecturl');
  269. if (jumpTest.checked) jtr.style.display = "block";
  270. else {
  271. jf.value = '';
  272. jtr.style.display = "none";
  273. }
  274. }
  275. function ShowUrlTrEdit() {
  276. ShowUrlTr();
  277. var jumpTest = $Obj('isjump');
  278. var rurl = $Obj('redirecturl');
  279. if (!jumpTest.checked) rurl.value = "";
  280. }
  281. function CkRemote() {
  282. document.getElementById('picname').value = '';
  283. }
  284. //载入指定宽高的AJAX窗体
  285. function LoadQuickDiv(e, surl, oname, w, h) {
  286. if ($Nav() == 'IE') {
  287. if (window.event) {
  288. var posLeft = window.event.clientX - 20;
  289. var posTop = window.event.clientY - 30;
  290. } else {
  291. var posLeft = e.clientX - 20;
  292. var posTop = e.clientY + 30;
  293. }
  294. } else {
  295. var posLeft = e.pageX - 20;
  296. var posTop = e.pageY - 30;
  297. }
  298. posTop += MyGetScrollTop();
  299. posLeft = posLeft - 400;
  300. //固定位置的高度
  301. if (fixupPos) {
  302. posLeft = posTop = 50;
  303. }
  304. var newobj = $Obj(oname);
  305. if (!newobj) {
  306. newobj = document.createElement("DIV");
  307. newobj.id = oname;
  308. newobj.style.position = 'absolute';
  309. newobj.className = 'pubdlg';
  310. newobj.style.width = w;
  311. newobj.style.height = h + 30;
  312. document.body.appendChild(newobj);
  313. }
  314. if (posTop > 500) posTop = 500;
  315. if (posLeft < 50) posLeft = 50;
  316. newobj.style.minWidth = "500px";
  317. newobj.style.top = posTop + "px";
  318. newobj.style.left = posLeft + "px";
  319. newobj.innerHTML = '<img src="../../static/web/img/loadinglit.gif">';
  320. newobj.style.display = 'block';
  321. fetch(surl).then(resp => resp.text()).then((d) => {
  322. newobj.innerHTML = d;
  323. });
  324. fixupPos = false;
  325. }
  326. function MyGetScrollTop() {
  327. return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
  328. }
  329. //通用事件获取接口
  330. function getEvent() {
  331. if ($Nav() == 'IE') return window.event;
  332. func = getEvent.caller;
  333. while (func != null) {
  334. var arg0 = func.arguments[0];
  335. if (arg0) {
  336. if ((arg0.constructor == Event || arg0.constructor == MouseEvent)
  337. || (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) {
  338. return arg0;
  339. }
  340. }
  341. func = func.caller;
  342. }
  343. return null;
  344. }
  345. //模拟ondrop事件相关代码
  346. /*----------------------------
  347. leftLeaning = 300;
  348. 如果对象文档固定,用onmousedown=DropStart去除底下的DropStop
  349. newobj.ondblclick = DropStart;
  350. newobj.onmousemove = DropMove;
  351. newobj.onmousedown = DropStop;
  352. ----------------------------*/
  353. function DropStart() {
  354. this.style.cursor = 'move';
  355. }
  356. function DropStop() {
  357. this.style.cursor = 'default';
  358. }
  359. function DropMove() {
  360. if (this.style.cursor != 'move') return;
  361. var event = getEvent();
  362. if ($Nav() == 'IE') {
  363. var posLeft = event.clientX - 20;
  364. var posTop = event.clientY - 30;
  365. posTop += document.body.scrollTop;
  366. } else {
  367. var posLeft = event.pageX - 20;
  368. var posTop = event.pageY - 30;
  369. }
  370. this.style.top = posTop;
  371. this.style.left = posLeft - leftLeaning;
  372. }
  373. //对指定的元素绑定move事件
  374. /*-----------------------------
  375. onmousemove="DropMoveHand('divname', 225);"
  376. onmousedown="DropStartHand();"
  377. onmouseup="DropStopHand();"
  378. -----------------------------*/
  379. function DropStartHand() {
  380. canMove = (canMove ? false : true);
  381. }
  382. function DropStopHand() {
  383. canMove = false;
  384. }
  385. function DropMoveHand(objid, mleftLeaning) {
  386. var event = getEvent();
  387. var obj = $Obj(objid);
  388. if (!canMove) return;
  389. if ($Nav() == 'IE') {
  390. var posLeft = event.clientX - 20;
  391. var posTop = event.clientY - 20;
  392. posTop += window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
  393. } else {
  394. var posLeft = event.pageX - 20;
  395. var posTop = event.pageY - 20;
  396. }
  397. obj.style.top = posTop + "px";
  398. obj.style.left = posLeft - mleftLeaning + "px";
  399. }
  400. //复制文档到剪切板
  401. function copyToClipboard(txt) {
  402. if (txt == null || txt == '') {
  403. alert("没有选择任何文档");
  404. return;
  405. }
  406. if (window.clipboardData) {
  407. window.clipboardData.clearData();
  408. window.clipboardData.setData("Text", txt);
  409. } else if (navigator.userAgent.indexOf('Opera') != -1) {
  410. window.location = txt;
  411. } else {
  412. try {
  413. netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  414. } catch (e) {
  415. alert("被浏览器拒绝,请在浏览器地址栏输入about:config并回车\n然后把signed.applets.codebase_principal_support设置为true");
  416. }
  417. var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
  418. if (!clip) return;
  419. var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
  420. if (!trans) return;
  421. trans.addDataFlavor('text/unicode');
  422. var str = new Object();
  423. var len = new Object();
  424. var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
  425. var copytext = txt;
  426. str.data = copytext;
  427. trans.setTransferData("text/unicode", str, copytext.length * 2);
  428. var clipid = Components.interfaces.nsIClipboard;
  429. if (!clip) return false;
  430. clip.setData(trans, null, clipid.kGlobalClipboard);
  431. }
  432. }
  433. function getSelTxt() {
  434. var g, r;
  435. if (document.all) {
  436. g = document.selection.createRange().text;
  437. } else {
  438. g = document.getSelection();
  439. }
  440. return g;
  441. }
  442. //显示栏目Map地图
  443. function ShowCatMap(e, obj, cid, targetId, oldvalue) {
  444. fixupPos = true;
  445. LoadQuickDiv(e, 'archives_do.php?dopost=getCatMap&targetid=' + targetId + '&channelid=' + cid + '&oldvalue=' + oldvalue + '&rnd=' + Math.random(), 'getCatMap', '700px', '500px');
  446. ChangeFullDiv('show');
  447. }
  448. function getSelCat(targetId) {
  449. var selBox = document.quicksel.seltypeid;
  450. var targetObj = $Obj(targetId);
  451. var selvalue = '';
  452. //副栏目多选
  453. if (targetId == 'typeid2') {
  454. var j = 0;
  455. for (var i = 0; i < selBox.length; i++) {
  456. if (selBox[i].checked) {
  457. j++;
  458. if (j == 10) break;
  459. selvalue += (selvalue == '' ? selBox[i].value : ',' + selBox[i].value);
  460. }
  461. }
  462. if (targetObj) targetObj.value = selvalue;
  463. }
  464. //主栏目单选
  465. else {
  466. if (selBox) {
  467. for (var i = 0; i < selBox.length; i++) {
  468. if (selBox[i].checked) selvalue = selBox[i].value;
  469. }
  470. }
  471. if (selvalue == '') {
  472. alert('您没有选中任何项目');
  473. return;
  474. }
  475. if (targetObj) {
  476. for (var j = 0; j < targetObj.length; j++) {
  477. op = targetObj.options[j];
  478. if (op.value == selvalue) op.selected = true;
  479. }
  480. }
  481. }
  482. HideObj("getCatMap");
  483. ChangeFullDiv("hide");
  484. }
  485. function getElementLeft(element) {
  486. var actualLeft = element.offsetLeft;
  487. var current = element.offsetParent;
  488. while (current !== null) {
  489. actualLeft += current.offsetLeft;
  490. current = current.offsetParent;
  491. }
  492. return actualLeft;
  493. }
  494. function getElementTop(element) {
  495. var actualTop = element.offsetTop;
  496. var current = element.offsetParent;
  497. while (current !== null) {
  498. actualTop += current.offsetTop;
  499. current = current.offsetParent;
  500. }
  501. return actualTop;
  502. }
  503. //Copyright 2020 The MuEMS Authors. All rights reserved.
  504. //license that can be found in the LICENSE file.
  505. //-----msgbox-------------------------------------
  506. //生成一个随机id
  507. function guid() {
  508. function S4() {
  509. return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
  510. }
  511. return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
  512. }
  513. var _DedeConfirmFuncs = {};
  514. var _DedeConfirmFuncsClose = {};
  515. function __DedeConfirmRun(modalID) {
  516. _DedeConfirmFuncs[modalID]();
  517. }
  518. function __DedeConfirmRunClose(modalID) {
  519. _DedeConfirmFuncsClose[modalID]();
  520. }
  521. function DedeConfirm(content="",title="确认提示") {
  522. let modalID = guid();
  523. return new Promise((resolve, reject) => {
  524. _DedeConfirmFuncs[modalID] = ()=>{
  525. resolve("success");
  526. CloseModal(`DedeModal${modalID}`);
  527. }
  528. _DedeConfirmFuncsClose[modalID] = ()=>{
  529. reject("cancel");
  530. CloseModal(`DedeModal${modalID}`);
  531. }
  532. let footer = `<button type="button" class="btn btn-outline-success btn-sm" onClick="__DedeConfirmRunClose(\'${modalID}\')">取消</button> <button type="button" class="btn btn-success btn-sm" onClick="__DedeConfirmRun(\'${modalID}\')">确定</button>`;
  533. let modal = `<div id="DedeModal${modalID}" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="DedeModalLabel${modalID}">
  534. <div class="modal-dialog modal-dialog-centered" role="document">
  535. <div class="modal-content"><div class="modal-header">
  536. <h6 class="modal-title" id="DedeModalLabel${modalID}">${title}</h6>`;
  537. modal += `<button type="button" class="close" data-dismiss="modal" aria-label="Close">
  538. <span>&times;</span>
  539. </button>`;
  540. modal += `</div><div class="modal-body">${content}</div><div class="modal-footer">${footer}</div></div></div></div>`;
  541. $("body").append(modal)
  542. $("#DedeModal" + modalID).modal({
  543. backdrop: 'static',
  544. show: true
  545. });
  546. $("#DedeModal" + modalID).on('hidden.bs.modal', function (e) {
  547. $("#DedeModal" + modalID).remove();
  548. })
  549. })
  550. }
  551. //函数会返回一个modalID,通过这个id可自已定义一些方法,这里用到了一个展开语法https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax
  552. function ShowMsg(content, ...args) {
  553. title = "系统提示";
  554. size = "";
  555. if (typeof content == "undefined") content = "";
  556. modalID = guid();
  557. var footer = `<button type="button" class="btn btn-primary" onClick="CloseModal(\'GKModal${modalID}\')">确定</button>`;
  558. var noClose = false;
  559. if (args.length == 1) {
  560. //存在args参数
  561. if (typeof args[0].title !== 'undefined' && args[0].title != "") {
  562. title = args[0].title;
  563. }
  564. if (typeof args[0].footer !== 'undefined' && args[0].footer != "") {
  565. footer = args[0].footer;
  566. }
  567. if (typeof args[0].size !== 'undefined' && args[0].size != "") {
  568. size = args[0].size;
  569. }
  570. if (typeof args[0].noClose !== 'undefined' && args[0].noClose == true) {
  571. noClose = true;
  572. }
  573. }
  574. footer = footer.replaceAll("~modalID~", modalID);
  575. content = content.replaceAll("~modalID~", modalID);
  576. var modal = `<div id="GKModal${modalID}" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="GKModalLabel${modalID}">
  577. <div class="modal-dialog ${size}" role="document"><div class="modal-content">
  578. <div class="modal-header"><h5 class="modal-title" id="GKModalLabel${modalID}">${title}</h5>`;
  579. if (!noClose) {
  580. modal += `<button type="button" class="close" data-dismiss="modal" aria-label="Close">
  581. <span>&times;</span>
  582. </button>`;
  583. }
  584. modal += `</div><div class="modal-body">${content}</div><div class="modal-footer">${footer}</div></div></div></div>`;
  585. $("body").append(modal)
  586. $("#GKModal" + modalID).modal({
  587. backdrop: 'static',
  588. show: true
  589. });
  590. $("#GKModal" + modalID).on('hidden.bs.modal', function (e) {
  591. $("#GKModal" + modalID).remove();
  592. })
  593. return modalID;
  594. }
  595. //隐藏并销毁modal
  596. function CloseModal(modalID) {
  597. $("#" + modalID).modal('hide');
  598. $("#" + modalID).on('hidden.bs.modal', function (e) {
  599. if ($("#" + modalID).length > 0) {
  600. $("#" + modalID).remove();
  601. }
  602. })
  603. }
  604. //获取缩略图
  605. var litpicImgSrc = "";
  606. var litpicImg = "";
  607. var currentCID = 0;
  608. var mdlCropperID = "";
  609. var pubAt = 0;
  610. var optCropper = {
  611. preview: ".pv",
  612. crop: function (e) {
  613. $("#cropWidth").text(Math.round(e.detail.height));
  614. $("#cropHeight").text(Math.round(e.detail.width));
  615. if ($(this).cropper("getCroppedCanvas")) {
  616. var dataUrl = $(this).cropper("getCroppedCanvas").toDataURL();
  617. litpicImg = dataUrl;
  618. $("#litPic").attr("src", litpicImg);
  619. }
  620. },
  621. aspectRatio: 4 / 3,
  622. //拖动截取缩略图后,截取的缩略图更新到imageItems中
  623. cropend: function (data) {
  624. //这里的id要单独取出来
  625. var dataUrl = $(this).cropper("getCroppedCanvas").toDataURL();
  626. litpicImg = dataUrl;
  627. $("#litPic").attr("src", litpicImg);
  628. $("#litpic_b64").val(litpicImg);
  629. }
  630. }
  631. var cropperAspectRatio = {
  632. 0: 16 / 9,
  633. 1: 4 / 3,
  634. 2: 1 / 1,
  635. 3: 2 / 3,
  636. 4: NaN,
  637. }
  638. function setAspectRatio(ar) {
  639. var opts = optCropper;
  640. opts.aspectRatio = cropperAspectRatio[ar];
  641. $("#cropImg" + mdlCropperID).cropper('destroy').cropper(opts);
  642. }
  643. function okImage(modalID) {
  644. uploadImage(litpicImg);
  645. $("#litPic").attr("src", litpicImg);
  646. CloseModal('GKModal' + modalID);
  647. }
  648. function useDefault(modalID) {
  649. uploadImage(litpicImgSrc);
  650. $("#litPic").attr("src", litpicImgSrc);
  651. CloseModal('GKModal' + modalID);
  652. }
  653. function uploadImage(litpicImgSrc) {
  654. const formData = new FormData()
  655. formData.append('litpic_b64', litpicImgSrc);
  656. fetch('archives_do.php?dopost=upload_base64_image', {
  657. method: 'POST',
  658. body: formData
  659. })
  660. .then(r => {
  661. if (r.ok) {
  662. return r.json()
  663. }
  664. throw new Error(errMsg);
  665. })
  666. .then(d => {
  667. if (d.code == 200) {
  668. $("#picname").val(d.data.image_url);
  669. }
  670. }).catch((error) => {
  671. alert("上传缩略图错误");
  672. });
  673. }
  674. $(document).ready(function () {
  675. $("#btnClearAll").click(function (event) {
  676. litpicImgSrc = "";
  677. litpicImg = "";
  678. $("#picname").val(litpicImg);
  679. $("#litPic").attr("src", "../../static/web/img/thumbnail.jpg");
  680. })
  681. //添加图片
  682. $("#iptAddImages").change(function (event) {
  683. var files = event.target.files;
  684. for (var i = 0, f; f = files[i]; i++) {
  685. //如果不是图片忽略
  686. if (!f.type.match('image.*')) {
  687. continue;
  688. }
  689. //将图片渲染到浏览器
  690. var reader = new FileReader();
  691. reader.onload = (function (theFile) {
  692. return function (e) {
  693. litpicImgSrc = e.target.result;
  694. if (cfg_uplitpic_cut == 'Y') {
  695. SetThumb(litpicImgSrc);
  696. } else {
  697. uploadImage(litpicImgSrc);
  698. $("#litPic").attr("src", litpicImgSrc);
  699. }
  700. };
  701. })(f);
  702. reader.readAsDataURL(f);
  703. }
  704. $("#iptAddImages").val("");
  705. });
  706. //截取缩略图
  707. function SetThumb(srcURL) {
  708. var footer =
  709. "<p><a href='javascript:useDefault(\"~modalID~\");' class='btn btn-success btn-sm'>使用原图</a><a href='javascript:okImage(\"~modalID~\")' class='btn btn-success btn-sm'>确定</a></p>";
  710. var optButton = `<p>
  711. <label for="aspectRatio">比例</label>
  712. <select id="aspectRatio" onchange="setAspectRatio(this.selectedIndex)">
  713. <option>16:9</option>
  714. <option selected>4:3</option>
  715. <option>1:1</option>
  716. <option>2:3</option>
  717. <option>自定义</option>
  718. </select>
  719. </p>`;
  720. mdlCropperID = ShowMsg(
  721. '<div class="float-left" style="width:320px"><p><img id="cropImg~modalID~" src="' + srcURL + '"></p><p>宽度:<span id="cropWidth"></span>px,高度:<span id="cropHeight"></span>px</p>' + optButton + '</div><div class="pv float-right" style="width:200px;height:100px;overflow:hidden"></div>', {
  722. footer: footer,
  723. noClose: false,
  724. title: '缩略图裁剪',
  725. });
  726. setTimeout(function () {
  727. $("#cropImg" + mdlCropperID).cropper(optCropper);
  728. }, 500);
  729. }
  730. if ($.fn.daterangepicker) {
  731. $('.datepicker').daterangepicker({
  732. "singleDatePicker": true,
  733. "autoApply": true,
  734. "showDropdowns": true,
  735. "linkedCalendars": false,
  736. "timePicker": true,
  737. "timePicker24Hour": true,
  738. "timePickerSeconds": true,
  739. "showCustomRangeLabel": false,
  740. "drops": "up",
  741. ranges: {
  742. '今日': [moment(), moment()],
  743. '昨日': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
  744. '本月': [moment().startOf('month'), moment().startOf('month')],
  745. '上月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').startOf('month')]
  746. },
  747. "locale": {
  748. format: 'YYYY-MM-DD HH:mm:ss',
  749. applyLabel: '确定',
  750. cancelLabel: '取消',
  751. daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'],
  752. monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
  753. firstDay: 1
  754. }
  755. }, function (start) {
  756. $(this).val(start.format("YYYY-MM-DD HH:mm:ss"));
  757. });
  758. $('.datepicker').on('show.daterangepicker', function (ev, picker) {
  759. if (picker.element.offset().top - $(window).scrollTop() + picker.container.outerHeight() > $(window).height()) {
  760. picker.drops = 'up';
  761. } else {
  762. picker.drops = 'down';
  763. }
  764. picker.move();
  765. })
  766. }
  767. })