user.js 153 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435
  1. define(['jquery', 'bootstrap', 'frontend', 'form', 'template'], function ($, undefined, Frontend, Form, Template) {
  2. var validatoroptions = {
  3. invalid: function (form, errors) {
  4. $.each(errors, function (i, j) {
  5. Layer.msg(j);
  6. });
  7. }
  8. };
  9. var Controller = {
  10. login: function () {
  11. //本地验证未通过时提示
  12. $("#login-form").data("validator-options", validatoroptions);
  13. //为表单绑定事件
  14. Form.api.bindevent($("#login-form"), function (data, ret) {
  15. setTimeout(function () {
  16. location.href = ret.url ? ret.url : "/";
  17. }, 1000);
  18. });
  19. // 获取用户名和密码输入框
  20. const usernameInput = $("#account");
  21. const passwordInput = $("#password");
  22. const keeploginCheck = $('#keeplogin');
  23. // 获取记住密码复选框
  24. const keepLoginCheckbox = $("input[name='keeplogin']");
  25. // 表单提交时判断记住密码复选框是否被选中
  26. $("#login-form").submit(function(event) {
  27. if (keepLoginCheckbox.is(":checked")) {
  28. // 将用户名和密码存储在 localStorage 中
  29. localStorage.setItem("username", usernameInput.val());
  30. localStorage.setItem("password", passwordInput.val());
  31. localStorage.setItem("keeplogin", keepLoginCheckbox.is(":checked"));
  32. }
  33. });
  34. // 下次用户访问时,如果 localStorage 中存在用户名和密码,则自动填充到登录表单中
  35. $(document).ready(function() {
  36. if (localStorage.getItem("username") && localStorage.getItem("password")) {
  37. usernameInput.val(localStorage.getItem("username"));
  38. passwordInput.val(localStorage.getItem("password"));
  39. keeploginCheck.attr('checked', localStorage.getItem("keeplogin"))
  40. }
  41. });
  42. //忘记密码
  43. $(document).on("click", ".btn-forgot", function () {
  44. var id = "resetpwdtpl";
  45. var content = Template(id, {});
  46. Layer.open({
  47. type: 1,
  48. title: 'Reset password',
  49. area: ["450px", "355px"],
  50. content: content,
  51. success: function (layero) {
  52. var rule = $("#resetpwd-form input[name='captcha']").data("rule");
  53. Form.api.bindevent($("#resetpwd-form", layero), function (data) {
  54. Layer.closeAll();
  55. });
  56. $(layero).on("change", "input[name=type]", function () {
  57. var type = $(this).val();
  58. $("div.form-group[data-type]").addClass("hide");
  59. $("div.form-group[data-type='" + type + "']").removeClass("hide");
  60. $('#resetpwd-form').validator("setField", {
  61. captcha: rule.replace(/remote\((.*)\)/, "remote(" + $(this).data("check-url") + ", event=resetpwd, " + type + ":#" + type + ")")
  62. });
  63. $(".btn-captcha").data("url", $(this).data("send-url")).data("type", type);
  64. });
  65. }
  66. });
  67. });
  68. },
  69. register: function () {
  70. $(document).ready(function () {
  71. $('.submit-button').prop('type', 'button');
  72. });
  73. $('.submit-button').click(function () {
  74. if ($(this).prop('type') == 'button') {
  75. $('.privacy_text').show();
  76. }
  77. });
  78. $(document).on('click', '#privacy_checkbox', function () {
  79. if (!$(this).prop('checked')) {
  80. $('.privacy_text').show();
  81. $('.submit-button').prop('type', 'button');
  82. } else {
  83. $('.privacy_text').hide();
  84. $('.submit-button').prop('type', 'submit');
  85. }
  86. });
  87. //本地验证未通过时提示
  88. $("#register-form").data("validator-options", validatoroptions);
  89. //为表单绑定事件
  90. Form.api.bindevent($("#register-form"), function (data, ret) {
  91. setTimeout(function () {
  92. location.href = ret.url ? ret.url : "/";
  93. }, 6000);
  94. }, function (data) {
  95. $("input[name=captcha]").next(".input-group-btn").find("img").trigger("click");
  96. });
  97. },
  98. changepwd: function () {
  99. //本地验证未通过时提示
  100. $("#changepwd-form").data("validator-options", validatoroptions);
  101. //为表单绑定事件
  102. Form.api.bindevent($("#changepwd-form"), function (data, ret) {
  103. setTimeout(function () {
  104. location.href = ret.url ? ret.url : "/";
  105. }, 1000);
  106. });
  107. },
  108. profile: function () {
  109. // 给上传按钮添加上传成功事件
  110. $("#faupload-avatar").data("upload-success", function (data) {
  111. var url = Fast.api.cdnurl(data.url);
  112. $(".profile-user-img").prop("src", url);
  113. Toastr.success('Uploaded successful');
  114. });
  115. Form.api.bindevent($("#profile-form"));
  116. $(document).on("click", ".btn-change", function () {
  117. var that = this;
  118. var id = $(this).data("type") + "tpl";
  119. var content = Template(id, {});
  120. Layer.open({
  121. type: 1,
  122. title: "修改",
  123. area: ["400px", "250px"],
  124. content: content,
  125. success: function (layero) {
  126. var form = $("form", layero);
  127. Form.api.bindevent(form, function (data) {
  128. location.reload();
  129. Layer.closeAll();
  130. });
  131. }
  132. });
  133. });
  134. },
  135. attachment: function () {
  136. require(['table'], function (Table) {
  137. // 初始化表格参数配置
  138. Table.api.init({
  139. extend: {
  140. index_url: 'user/attachment',
  141. }
  142. });
  143. var urlArr = [];
  144. var multiple = Fast.api.query('multiple');
  145. multiple = multiple == 'true' ? true : false;
  146. var table = $("#table");
  147. table.on('check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table', function (e, row) {
  148. if (e.type == 'check' || e.type == 'uncheck') {
  149. row = [row];
  150. } else {
  151. urlArr = [];
  152. }
  153. $.each(row, function (i, j) {
  154. if (e.type.indexOf("uncheck") > -1) {
  155. var index = urlArr.indexOf(j.url);
  156. if (index > -1) {
  157. urlArr.splice(index, 1);
  158. }
  159. } else {
  160. urlArr.indexOf(j.url) == -1 && urlArr.push(j.url);
  161. }
  162. });
  163. });
  164. // 初始化表格
  165. table.bootstrapTable({
  166. url: $.fn.bootstrapTable.defaults.extend.index_url,
  167. sortName: 'id',
  168. showToggle: false,
  169. showExport: false,
  170. fixedColumns: true,
  171. fixedRightNumber: 1,
  172. columns: [
  173. [
  174. {field: 'state', checkbox: multiple, visible: multiple, operate: false},
  175. {field: 'id', title: __('Id'), operate: false},
  176. {
  177. field: 'url', title: __('Preview'), formatter: function (value, row, index) {
  178. var html = '';
  179. if (row.mimetype.indexOf("image") > -1) {
  180. html = '<a href="' + row.fullurl + '" target="_blank"><img src="' + row.fullurl + row.thumb_style + '" alt="" style="max-height:60px;max-width:120px"></a>';
  181. } else {
  182. html = '<a href="' + row.fullurl + '" target="_blank"><img src="' + Fast.api.fixurl("ajax/icon") + "?suffix=" + row.imagetype + '" alt="" style="max-height:90px;max-width:120px"></a>';
  183. }
  184. return '<div style="width:120px;margin:0 auto;text-align:center;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;">' + html + '</div>';
  185. }
  186. },
  187. {
  188. field: 'filename', title: __('Filename'), formatter: function (value, row, index) {
  189. return '<div style="width:150px;margin:0 auto;text-align:center;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;">' + Table.api.formatter.search.call(this, value, row, index) + '</div>';
  190. }, operate: 'like'
  191. },
  192. {field: 'imagewidth', title: __('Imagewidth'), operate: false},
  193. {field: 'imageheight', title: __('Imageheight'), operate: false},
  194. {field: 'mimetype', title: __('Mimetype'), formatter: Table.api.formatter.search},
  195. {
  196. field: 'createtime',
  197. title: __('Createtime'),
  198. width: 120,
  199. formatter: Table.api.formatter.datetime,
  200. datetimeFormat: 'YYYY-MM-DD',
  201. operate: 'RANGE',
  202. addclass: 'datetimerange',
  203. sortable: true
  204. },
  205. {
  206. field: 'operate', title: __('Operate'), width: 85, events: {
  207. 'click .btn-chooseone': function (e, value, row, index) {
  208. Fast.api.close({url: row.url, multiple: multiple});
  209. },
  210. }, formatter: function () {
  211. return '<a href="javascript:;" class="btn btn-danger btn-chooseone btn-xs"><i class="fa fa-check"></i> ' + __('Choose') + '</a>';
  212. }
  213. }
  214. ]
  215. ]
  216. });
  217. // 选中多个
  218. $(document).on("click", ".btn-choose-multi", function () {
  219. Fast.api.close({url: urlArr.join(","), multiple: multiple});
  220. });
  221. // 为表格绑定事件
  222. Table.api.bindevent(table);
  223. require(['upload'], function (Upload) {
  224. Upload.api.upload($("#toolbar .faupload"), function () {
  225. $(".btn-refresh").trigger("click");
  226. });
  227. });
  228. });
  229. },
  230. inbox: function () {
  231. $(document).ready(function () {
  232. $(document).on('click', '#read-button', function () {
  233. let email_id = $(this).attr('data-id');
  234. $.ajax({
  235. url: '/api/user/read_email', // 后台处理数据请求的接口地址
  236. type: 'POST',
  237. dataType: 'json',
  238. data: {
  239. email_id: email_id,
  240. },
  241. success: function (res) {
  242. if (res.code === 1) {
  243. layer.msg(res.msg, {
  244. icon: 1,
  245. time: 2000,
  246. }, function () {
  247. location.reload();
  248. });
  249. }
  250. },
  251. error: function (xhr, status, error) {
  252. console.error(error);
  253. }
  254. });
  255. });
  256. });
  257. },
  258. unread: function () {
  259. $(document).ready(function () {
  260. $(document).on('click', '#read-button', function () {
  261. let email_id = $(this).attr('data-id');
  262. $.ajax({
  263. url: '/api/user/read_email', // 后台处理数据请求的接口地址
  264. type: 'POST',
  265. dataType: 'json',
  266. data: {
  267. email_id: email_id,
  268. },
  269. success: function (res) {
  270. if (res.code === 1) {
  271. layer.msg(res.msg, {
  272. icon: 1,
  273. time: 2000,
  274. }, function () {
  275. location.reload();
  276. });
  277. }
  278. },
  279. error: function (xhr, status, error) {
  280. console.error(error);
  281. }
  282. });
  283. });
  284. });
  285. },
  286. submit_manuscript: function () {
  287. // 初始化分页参数
  288. var currentPage = 1;
  289. var pageSize = 10;
  290. var index = 0;
  291. var is_next = false;
  292. var button_next = false;
  293. var manuscript_id = $("#c-manuscript_id").val();
  294. var custom_mousemove_x = 490;
  295. var custom_mousemove_y = 350;
  296. $(document).ready(function () {
  297. // 下一步按钮
  298. $('.next-button').on('click', function () {
  299. // 陈述内容可点击下一步按钮
  300. if ($('.statement-content').css('display') == 'block') {
  301. is_next = true;
  302. }
  303. // 推荐内容可点击下一步按钮
  304. if ($('.recommended-content').css('display') == 'block') {
  305. is_next = true;
  306. }
  307. // 判断当前页面的必填项是否都填写
  308. if (index == 0) {
  309. $("#c-manuscript-zip").trigger("validate");
  310. let manuscript_zip = $("#c-manuscript-zip").isValid();
  311. if (!manuscript_zip) {
  312. return true;
  313. }
  314. }
  315. // 手稿信息
  316. if (index == 1) {
  317. // $("#c-image").trigger("validate");
  318. $('#c-journal').trigger("validate");
  319. $('#c-article-type').trigger("validate");
  320. $('#c-title').trigger("validate");
  321. $('#c-abstract').trigger("validate");
  322. $("#c-keywords").trigger("validate");
  323. // let image = $("#c-image").isValid();
  324. let journal = $('#c-journal').isValid();
  325. let article_type = $('#c-article-type').isValid();
  326. let title = $('#c-title').isValid();
  327. let abstract = $("#c-abstract").isValid();
  328. let keywords = $('#c-keywords').isValid();
  329. // if (!image) {
  330. // return true;
  331. // }
  332. if (!journal) {
  333. return true;
  334. }
  335. if (!article_type) {
  336. return true;
  337. }
  338. if (!title) {
  339. return true;
  340. }
  341. if (!abstract) {
  342. return true;
  343. }
  344. if (!keywords) {
  345. return true;
  346. }
  347. // if (!number_page) {
  348. // return true;
  349. // }
  350. is_next = true;
  351. }
  352. // 作者信息
  353. if (index == 2) {
  354. ;
  355. for (let i = 0; i < $('.add-author-item').length; i++) {
  356. $("[name='row[author][" + i + "][email]']").trigger("validate");
  357. $("[name='row[author][" + i + "][first_name]']").trigger("validate");
  358. $("[name='row[author][" + i + "][author_affiliation]']").trigger("validate");
  359. $("[name='row[author][" + i + "][author_country]']").trigger("validate");
  360. let email = $("[name='row[author][" + i + "][email]']").isValid();
  361. let first_name = $("[name='row[author][" + i + "][first_name]']").isValid();
  362. let author_affiliation = $("[name='row[author][" + i + "][author_affiliation]']").isValid();
  363. let author_country = $("[name='row[author][" + i + "][author_country]']").isValid();
  364. if (!email) {
  365. return true;
  366. }
  367. if (!first_name) {
  368. return true;
  369. }
  370. if (!author_affiliation) {
  371. return true;
  372. }
  373. if (!author_country) {
  374. return true;
  375. }
  376. }
  377. is_next = true;
  378. }
  379. if (is_next || index == 0) {
  380. index++;
  381. $("ul.nav-justified li").removeClass("active");
  382. $("ul.nav-justified .nav-item .nav-content .nav-li-desc").removeClass("finish");
  383. $("ul.nav-justified li:eq(" + index + ")").addClass("active");
  384. $("ul.nav-justified .nav-item:eq(" + index + ") .nav-content .nav-li-desc").addClass('finish');
  385. if (index == 5) {
  386. button_next = true;
  387. // 如果是最后一页操作时显示提交按钮,隐藏下一步按钮
  388. $('.next-button').css('display', 'none');
  389. $('.submit-button').css('display', 'block');
  390. $(".manuscript-content").show();
  391. $(".journal-content").show();
  392. $(".add-author-content").show();
  393. $('.recommended-button').hide();
  394. $('.become-review').show();
  395. // 最后一步设置鼠标移动时div的x与y轴的减少距离
  396. custom_mousemove_x = 500;
  397. custom_mousemove_y = 2000;
  398. } else if (index == 4) {
  399. $('.recommended-button').show();
  400. $(".form-item").hide();
  401. $('.become-review').hide();
  402. $(".form-item:eq(" + index + ")").show();
  403. } else if (index == 2) {
  404. $(".author-button").show();
  405. $(".form-item").hide();
  406. $('.become-review').hide();
  407. $(".form-item:eq(" + index + ")").show();
  408. $(".recommended-button").hide();
  409. } else {
  410. $('.recommended-button').hide();
  411. $(".author-item").hide();
  412. $('.author-button').hide();
  413. $(".form-item").hide();
  414. $('.become-review').hide();
  415. $(".form-item:eq(" + index + ")").show();
  416. }
  417. is_next = false;
  418. }
  419. });
  420. // 隐藏所有表单内容
  421. $(".form-item").hide();
  422. // 显示第一个表单内容
  423. $(".form-item:first").show();
  424. // 点击步骤条切换表单
  425. $("ul.nav-justified .nav-item").click(function () {
  426. if (manuscript_id) {
  427. let li_index = $(this).index();
  428. $("ul.nav-justified li").removeClass("active");
  429. $("ul.nav-justified .nav-item .nav-content .nav-li-desc").removeClass("finish");
  430. $("ul.nav-justified li:eq(" + li_index + ")").addClass("active");
  431. $("ul.nav-justified .nav-item:eq(" + li_index + ") .nav-content .nav-li-desc").addClass('finish');
  432. index = li_index;
  433. if (li_index == 5) {
  434. $('.next-button').css('display', 'none');
  435. $('.submit-button').css('display', 'block');
  436. $(".manuscript-content").show();
  437. $(".journal-content").show();
  438. $(".add-author-content").show();
  439. $('.recommended-button').hide();
  440. $('.become-review').show();
  441. // 最后一步设置鼠标移动时div的x与y轴的减少距离
  442. custom_mousemove_x = 500;
  443. custom_mousemove_y = 2000;
  444. } else if (li_index == 4) {
  445. $('.recommended-button').show();
  446. $(".form-item").hide();
  447. $(".form-item:eq(" + li_index + ")").show();
  448. $(".author-button").hide();
  449. } else if (li_index == 2) {
  450. $(".author-button").show();
  451. $(".form-item").hide();
  452. $(".form-item:eq(" + li_index + ")").show();
  453. $('.recommended-button').hide();
  454. } else {
  455. $('.recommended-button').hide();
  456. $(".author-item").hide();
  457. $('.author-button').hide();
  458. $(".form-item").hide();
  459. $(".form-item:eq(" + li_index + ")").show();
  460. }
  461. if (li_index != 5) {
  462. $('.next-button').css('display', 'block');
  463. $('.submit-button').css('display', 'none');
  464. $('.become-review').hide();
  465. }
  466. } else {
  467. if (button_next) {
  468. index = 5;
  469. }
  470. if ($(this).index() <= index) {
  471. let li_index = $(this).index();
  472. $("ul.nav-justified li").removeClass("active");
  473. $("ul.nav-justified .nav-item .nav-content .nav-li-desc").removeClass("finish");
  474. $("ul.nav-justified li:eq(" + li_index + ")").addClass("active");
  475. $("ul.nav-justified .nav-item:eq(" + li_index + ") .nav-content .nav-li-desc").addClass('finish');
  476. index = li_index;
  477. if (li_index == 5) {
  478. $('.next-button').css('display', 'none');
  479. $('.submit-button').css('display', 'block');
  480. $(".manuscript-content").show();
  481. $(".journal-content").show();
  482. $(".add-author-content").show();
  483. $('.recommended-button').hide();
  484. $('.become-review').show();
  485. // 最后一步设置鼠标移动时div的x与y轴的减少距离
  486. custom_mousemove_x = 500;
  487. custom_mousemove_y = 2000;
  488. } else if (li_index == 4) {
  489. $('.recommended-button').show();
  490. $(".form-item").hide();
  491. $(".form-item:eq(" + li_index + ")").show();
  492. $(".author-button").hide();
  493. } else if (li_index == 2) {
  494. $(".author-button").show();
  495. $(".form-item").hide();
  496. $(".form-item:eq(" + li_index + ")").show();
  497. $('.recommended-button').hide();
  498. } else {
  499. $('.recommended-button').hide();
  500. $(".author-item").hide();
  501. $('.author-button').hide();
  502. $(".form-item").hide();
  503. $(".form-item:eq(" + li_index + ")").show();
  504. }
  505. if (li_index != 5) {
  506. $('.next-button').css('display', 'block');
  507. $('.submit-button').css('display', 'none');
  508. $('.become-review').hide();
  509. }
  510. }
  511. }
  512. });
  513. // 删除对应作者信息
  514. $(document).on('click', '.author-delete-button', function () {
  515. let author_content_length = $('.add-author-content').children('.add-author-item').length;
  516. if (author_content_length > 1) {
  517. $(this).parent().parent().parent().remove();
  518. // 删除后更新 input 的 name 值
  519. updateInputNames();
  520. }
  521. });
  522. // 审稿人列表按钮
  523. $(document).on('click', '.reviewer-list-button', function () {
  524. let selected_id = [];
  525. $('.recommended-del').each(function () {
  526. let id = $(this).data('id');
  527. selected_id.push(id);
  528. })
  529. // 清空表格内容和分页区域
  530. $('#modal-table tbody').html('');
  531. $('#modal-pagination').html('');
  532. // 发送 Ajax 请求获取数据并填充表格和分页
  533. $.ajax({
  534. url: 'user/getReviewerList', // 后台处理数据请求的接口地址
  535. type: 'GET',
  536. dataType: 'json',
  537. data: {
  538. page: currentPage,
  539. limit: pageSize
  540. },
  541. success: function (data) {
  542. if (data.code === 1) {
  543. var tableData = data.data.data;
  544. for (var i = 0; i < tableData.length; i++) {
  545. var rowData = tableData[i];
  546. let is_disabled = '';
  547. if (selected_id.includes(rowData.id)) {
  548. is_disabled = 'disabled';
  549. }
  550. var rowHtml = '<tr>' +
  551. '<td><input type="checkbox" class="check-single review-check" ' + is_disabled + ' data-id="' + rowData.id + '" data-name="' + rowData.user.nickname + '" data-email="' + rowData.user.email + '" data-first="' + rowData.user.first_name + '" data-last="' + rowData.user.last_name + '" data-affiliation="' + rowData.user.affiliation + '" data-field="' + rowData.field + '"></td>' +
  552. '<td>' + rowData.user.nickname + '</td>' +
  553. '<td>' + rowData.user.email + '</td>' +
  554. '<td>' + rowData.user.first_name + '</td>' +
  555. '<td>' + rowData.user.last_name + '</td>' +
  556. '<td>' + rowData.affiliation + '</td>' +
  557. '<td>' + rowData.field + '</td>' +
  558. '</tr>';
  559. $('#modal-table tbody').append(rowHtml);
  560. }
  561. // 计算总页数
  562. var totalPage = Math.ceil(data.data.total / pageSize);
  563. // 动态生成分页按钮,使用省略号表示更多页码
  564. var pageHtml = '';
  565. if (totalPage <= 7) { // 当总页数小于等于7时,显示所有页码按钮
  566. for (var i = 1; i <= totalPage; i++) {
  567. if (i === currentPage) {
  568. pageHtml += '<a href="#" class="pagination-link active">' + i + '</a>';
  569. } else {
  570. pageHtml += '<a href="#" class="pagination-link">' + i + '</a>';
  571. }
  572. }
  573. } else { // 当总页数大于7时,进行分段显示
  574. if (currentPage <= 4) {
  575. pageHtml += generatePagination(1, 5);
  576. pageHtml += '<span>...</span>';
  577. pageHtml += '<a href="#" class="pagination-link">' + totalPage + '</a>';
  578. } else if (currentPage >= totalPage - 3) {
  579. pageHtml += '<a href="#" class="pagination-link">1</a>';
  580. pageHtml += '<span>...</span>';
  581. pageHtml += generatePagination(totalPage - 4, totalPage);
  582. } else {
  583. pageHtml += '<a href="#" class="pagination-link">1</a>';
  584. pageHtml += '<span>...</span>';
  585. //只需要更改这一行的逻辑即可
  586. var startPage = currentPage - 2;
  587. var endPage = currentPage + 2;
  588. pageHtml += generatePagination(startPage, endPage);
  589. //只需要更改这一行的逻辑即可
  590. }
  591. }
  592. $('#modal-pagination').html(pageHtml);
  593. // 绑定分页按钮点击事件
  594. $('.pagination-link').click(function (e) {
  595. $('.pagination-link').removeClass('active');
  596. $(this).addClass('active');
  597. e.preventDefault();
  598. var page = parseInt($(this).text());
  599. currentPage = page;
  600. // 发送 Ajax 请求获取对应页的数据并填充表格
  601. $.ajax({
  602. url: 'user/getReviewerList',
  603. type: 'GET',
  604. dataType: 'json',
  605. data: {
  606. page: currentPage,
  607. limit: pageSize
  608. },
  609. success: function (data) {
  610. if (data.code === 1) {
  611. var tableData = data.data.data;
  612. $('#modal-table tbody').html('');
  613. for (var i = 0; i < tableData.length; i++) {
  614. var rowData = tableData[i];
  615. let is_disabled = '';
  616. if (selected_id.includes(rowData.id)) {
  617. is_disabled = 'disabled';
  618. }
  619. var rowHtml = '<tr>' +
  620. '<td><input type="checkbox" class="check-single review-check" ' + is_disabled + ' data-id="' + rowData.id + '" data-name="' + rowData.user.nickname + '" data-email="' + rowData.user.email + '" data-first="' + rowData.user.first_name + '" data-last="' + rowData.user.last_name + '" data-affiliation="' + rowData.user.affiliation + '" data-field="' + rowData.field + '"></td>' +
  621. '<td>' + rowData.user.nickname + '</td>' +
  622. '<td>' + rowData.user.email + '</td>' +
  623. '<td>' + rowData.user.first_name + '</td>' +
  624. '<td>' + rowData.user.last_name + '</td>' +
  625. '<td>' + rowData.affiliation + '</td>' +
  626. '<td>' + rowData.field + '</td>' +
  627. '</tr>';
  628. $('#modal-table tbody').append(rowHtml);
  629. }
  630. }
  631. },
  632. error: function (xhr, status, error) {
  633. console.error(error);
  634. }
  635. });
  636. });
  637. }
  638. },
  639. error: function (xhr, status, error) {
  640. console.error(error);
  641. }
  642. });
  643. });
  644. // 选择审稿人后确定选择
  645. $(document).on('click', '.add-review-button', function () {
  646. let tr_length = $('#recommended-table tbody tr').length;
  647. var selectedValues = [];
  648. // 使用 jQuery 的 each 函数遍历所有 name 为 option 的复选框
  649. $('input[type=checkbox]:checked').each(function () {
  650. let obj = {};
  651. obj['id'] = $(this).data('id');
  652. obj['name'] = $(this).data('name');
  653. obj['email'] = $(this).data('email');
  654. obj['first_name'] = $(this).data('first');
  655. obj['last_name'] = $(this).data('last');
  656. obj['affiliation'] = $(this).data('affiliation');
  657. obj['field'] = $(this).data('field');
  658. selectedValues.push(obj); // 将选中的值添加到数组中
  659. });
  660. for (var i = 0; i < selectedValues.length; i++) {
  661. var rowData = selectedValues[i];
  662. if (selectedValues.length > 1) {
  663. if (i > 0) {
  664. tr_length++;
  665. }
  666. }
  667. let html = '<input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-name]" value="' + rowData.name + '">\n' +
  668. ' <input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-email]" value="' + rowData.email + '">\n' +
  669. ' <input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-first-name]" value="' + rowData.first_name + '">\n' +
  670. ' <input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-last-name]" value="' + rowData.last_name + '">\n' +
  671. ' <input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-affiliation]" value="' + rowData.affiliation + '">\n' +
  672. ' <input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-field]" value="' + rowData.field + '">';
  673. var rowHtml = '<tr>' +
  674. '<td>' + rowData.name + '</td>' +
  675. '<td>' + rowData.email + '</td>' +
  676. '<td>' + rowData.first_name + '</td>' +
  677. '<td>' + rowData.last_name + '</td>' +
  678. '<td>' + rowData.affiliation + '</td>' +
  679. '<td>' + rowData.field + '</td>' +
  680. '<td class="recommended-del" data-id="' + rowData.id + '" data-index="' + tr_length + '"><a href="#">删除</a></td>' +
  681. '</tr>';
  682. $('#recommended-table tbody').append(rowHtml);
  683. $('.reviewer-hidden-content').append(html);
  684. }
  685. $('#myModal').modal('hide');
  686. });
  687. // 自定义添加审稿人按钮
  688. $(document).on('click', '.add-reviewer-button', function () {
  689. let input_index = $('.custom-reviewer-content').children('.custom-reviewer-item').length;
  690. let str = '<div class="custom-reviewer-item">\n' +
  691. ' <div class="form-group">\n' +
  692. ' <label class="control-label col-xs-12 col-sm-11">\n' +
  693. ' </label>\n' +
  694. ' <div class="reviewer-delete-button text-delete-button mb-3 col-xs-12 col-sm-1">\n' +
  695. ' <i class="fa fa-trash"></i> Delete\n' +
  696. ' </div>\n' +
  697. ' </div>\n' +
  698. ' <div class="form-group">\n' +
  699. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  700. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Name\n' +
  701. ' </label>\n' +
  702. ' <div class="col-xs-12 col-sm-10">\n' +
  703. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-name" name="row[reviewer][' + input_index + '][reviewer-name]" placeholder="Type here...">\n' +
  704. ' <div class="input-group-addon no-border no-padding">\n' +
  705. ' <span class="msg-box n-right" for="c-add-review-name"></span>\n' +
  706. ' </div>\n' +
  707. ' </div>\n' +
  708. ' </div>\n' +
  709. ' <div class="form-group">\n' +
  710. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  711. ' <span style="color:#ed534b;margin-right: 10px;">*</span>E-mail Address\n' +
  712. ' </label>\n' +
  713. ' <div class="col-xs-12 col-sm-10">\n' +
  714. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-email" name="row[reviewer][' + input_index + '][reviewer-email]" placeholder="Type here...">\n' +
  715. ' <div class="input-group-addon no-border no-padding">\n' +
  716. ' <span class="msg-box n-right" for="c-add-review-email"></span>\n' +
  717. ' </div>\n' +
  718. ' </div>\n' +
  719. ' </div>\n' +
  720. '\n' +
  721. ' <div class="form-group">\n' +
  722. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  723. ' <span style="color:#ed534b;margin-right: 10px;">*</span>First Name\n' +
  724. ' </label>\n' +
  725. ' <div class="col-xs-12 col-sm-10">\n' +
  726. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-first-name" name="row[reviewer][' + input_index + '][reviewer-first-name]" placeholder="Type here...">\n' +
  727. ' <div class="input-group-addon no-border no-padding">\n' +
  728. ' <span class="msg-box n-right" for="c-add-review-first-name"></span>\n' +
  729. ' </div>\n' +
  730. ' </div>\n' +
  731. ' </div>\n' +
  732. '\n' +
  733. ' <div class="form-group">\n' +
  734. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  735. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Last Name\n' +
  736. ' </label>\n' +
  737. ' <div class="col-xs-12 col-sm-10">\n' +
  738. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-last-name" name="row[reviewer][' + input_index + '][reviewer-last-name]" placeholder="Type here...">\n' +
  739. ' <div class="input-group-addon no-border no-padding">\n' +
  740. ' <span class="msg-box n-right" for="c-add-review-last-name"></span>\n' +
  741. ' </div>\n' +
  742. ' </div>\n' +
  743. ' </div>\n' +
  744. '\n' +
  745. ' <div class="form-group">\n' +
  746. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  747. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Affiliation\n' +
  748. ' </label>\n' +
  749. ' <div class="col-xs-12 col-sm-10">\n' +
  750. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-affiliation" name="row[reviewer][' + input_index + '][reviewer-affiliation]" placeholder="Type here...">\n' +
  751. ' <div class="input-group-addon no-border no-padding">\n' +
  752. ' <span class="msg-box n-right" for="c-add-review-affiliation"></span>\n' +
  753. ' </div>\n' +
  754. ' </div>\n' +
  755. ' </div>\n' +
  756. '\n' +
  757. ' <div class="form-group">\n' +
  758. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  759. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Field\n' +
  760. ' </label>\n' +
  761. ' <div class="col-xs-12 col-sm-10">\n' +
  762. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-field" name="row[reviewer][' + input_index + '][reviewer-field]" placeholder="Type here...">\n' +
  763. ' <div class="input-group-addon no-border no-padding">\n' +
  764. ' <span class="msg-box n-right" for="c-add-review-field"></span>\n' +
  765. ' </div>\n' +
  766. ' </div>\n' +
  767. ' </div>\n' +
  768. ' </div>';
  769. $('.custom-reviewer-content').append(str);
  770. updateReviewerInputNames();
  771. });
  772. // 排序input 的 name 值
  773. var updateReviewerInputNames = function () {
  774. // 遍历所有的div元素
  775. $(".custom-reviewer-item").each(function (index) {
  776. var name_input = $(this).find('input[id="c-add-review-name"]');
  777. var email_input = $(this).find('input[id="c-add-review-email"]');
  778. var first_name_input = $(this).find('input[id="c-add-review-first-name"]');
  779. var last_name_input = $(this).find('input[id="c-add-review-last-name"]');
  780. var affiliation_input = $(this).find('input[id="c-add-review-affiliation"]');
  781. var field_input = $(this).find('input[id="c-add-review-field"]');
  782. name_input.attr('name', "row[reviewer][" + index + "][reviewer-name]");
  783. email_input.attr('name', "row[reviewer][" + index + "][reviewer-email]");
  784. first_name_input.attr('name', "row[reviewer][" + index + "][reviewer-first-name]");
  785. last_name_input.attr('name', "row[reviewer][" + index + "][reviewer-last-name]");
  786. affiliation_input.attr('name', "row[reviewer][" + index + "][reviewer-affiliation]");
  787. field_input.attr('name', "row[reviewer][" + index + "][reviewer-field]");
  788. });
  789. };
  790. // 删除对应的审稿人信息
  791. $(document).on('click', '.reviewer-delete-button', function () {
  792. let reviewer_content_length = $('.custom-reviewer-content').children('.custom-reviewer-item').length;
  793. if (reviewer_content_length > 1) {
  794. $(this).parent().parent().remove();
  795. // 删除后更新 input 的 name 值
  796. updateReviewerInputNames();
  797. }
  798. });
  799. // 自定义审稿人信息提交按钮操作
  800. $(document).on('click', '.add-reviewer-submit', function () {
  801. let tr_length = $('#recommended-table tbody tr').length;
  802. let key = $(".custom-reviewer-item").length;
  803. let addReviewerInputValue = [];
  804. for (let i = 0; i < key; i++) {
  805. let obj = {};
  806. if ($(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-name]']").val() == '') {
  807. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-name]']").css('border', '1px solid red');
  808. return false;
  809. } else {
  810. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-name]']").css('border', 'none');
  811. }
  812. if ($(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-email]']").val() == '') {
  813. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-email]']").css('border', '1px solid red');
  814. return false
  815. } else {
  816. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-email]']").css('border', 'none');
  817. }
  818. if ($(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-first-name]']").val() == '') {
  819. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-first-name]']").css('border', '1px solid red');
  820. return false;
  821. } else {
  822. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-first-name]']").css('border', 'none');
  823. }
  824. if ($(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-last-name]']").val() == '') {
  825. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-last-name]']").css('border', '1px solid red');
  826. return false;
  827. } else {
  828. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-last-name]']").css('border', 'none');
  829. }
  830. if ($(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-affiliation]']").val() == '') {
  831. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-affiliation]']").css('border', '1px solid red');
  832. return false;
  833. } else {
  834. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-affiliation]']").css('border', 'none');
  835. }
  836. if ($(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-field]']").val() == '') {
  837. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-field]']").css('border', '1px solid red');
  838. return false;
  839. } else {
  840. $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-field]']").css('border', 'none');
  841. }
  842. obj['name'] = $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-name]']").val();
  843. obj['email'] = $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-email]']").val();
  844. obj['first_name'] = $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-first-name]']").val();
  845. obj['last_name'] = $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-last-name]']").val();
  846. obj['affiliation'] = $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-affiliation]']").val();
  847. obj['field'] = $(this).parent().parent().find("input[name='row[reviewer][" + i + "][reviewer-field]']").val();
  848. addReviewerInputValue.push(obj);
  849. }
  850. for (var i = 0; i < addReviewerInputValue.length; i++) {
  851. var rowData = addReviewerInputValue[i];
  852. if (addReviewerInputValue.length > 1) {
  853. if (i > 0) {
  854. tr_length++;
  855. }
  856. }
  857. let html = '<input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-name]" value="' + rowData.name + '">\n' +
  858. ' <input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-email]" value="' + rowData.email + '">\n' +
  859. ' <input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-first-name]" value="' + rowData.first_name + '">\n' +
  860. ' <input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-last-name]" value="' + rowData.last_name + '">\n' +
  861. ' <input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-affiliation]" value="' + rowData.affiliation + '">\n' +
  862. ' <input type="hidden" name="row[reviewer][' + tr_length + '][reviewer-field]" value="' + rowData.field + '">';
  863. var rowHtml = '<tr>' +
  864. '<td>' + rowData.name + '</td>' +
  865. '<td>' + rowData.email + '</td>' +
  866. '<td>' + rowData.first_name + '</td>' +
  867. '<td>' + rowData.last_name + '</td>' +
  868. '<td>' + rowData.affiliation + '</td>' +
  869. '<td>' + rowData.field + '</td>' +
  870. '<td class="recommended-del" data-index="' + tr_length + '"><a href="#">删除</a></td>' +
  871. '</tr>';
  872. $('#recommended-table tbody').append(rowHtml);
  873. $('.reviewer-hidden-content').append(html);
  874. }
  875. // 清空已填内容
  876. $('.custom-reviewer-content').html('');
  877. $('.custom-reviewer-content').append('<div class="custom-reviewer-item">\n' +
  878. ' <div class="form-group">\n' +
  879. ' <label class="control-label col-xs-12 col-sm-11">\n' +
  880. ' </label>\n' +
  881. ' <div class="reviewer-delete-button text-delete-button mb-3 col-xs-12 col-sm-1">\n' +
  882. ' <i class="fa fa-trash"></i> Delete\n' +
  883. ' </div>\n' +
  884. ' </div>\n' +
  885. ' <div class="form-group">\n' +
  886. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  887. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Name\n' +
  888. ' </label>\n' +
  889. ' <div class="col-xs-12 col-sm-10">\n' +
  890. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-name" name="row[reviewer][0][reviewer-name]" placeholder="Type here...">\n' +
  891. ' <div class="input-group-addon no-border no-padding">\n' +
  892. ' <span class="msg-box n-right" for="c-add-review-name"></span>\n' +
  893. ' </div>\n' +
  894. ' </div>\n' +
  895. ' </div>\n' +
  896. ' <div class="form-group">\n' +
  897. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  898. ' <span style="color:#ed534b;margin-right: 10px;">*</span>E-mail Address\n' +
  899. ' </label>\n' +
  900. ' <div class="col-xs-12 col-sm-10">\n' +
  901. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-email" name="row[reviewer][0][reviewer-email]" placeholder="Type here...">\n' +
  902. ' <div class="input-group-addon no-border no-padding">\n' +
  903. ' <span class="msg-box n-right" for="c-add-review-email"></span>\n' +
  904. ' </div>\n' +
  905. ' </div>\n' +
  906. ' </div>\n' +
  907. '\n' +
  908. ' <div class="form-group">\n' +
  909. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  910. ' <span style="color:#ed534b;margin-right: 10px;">*</span>First Name\n' +
  911. ' </label>\n' +
  912. ' <div class="col-xs-12 col-sm-10">\n' +
  913. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-first-name" name="row[reviewer][0][reviewer-first-name]" placeholder="Type here...">\n' +
  914. ' <div class="input-group-addon no-border no-padding">\n' +
  915. ' <span class="msg-box n-right" for="c-add-review-first-name"></span>\n' +
  916. ' </div>\n' +
  917. ' </div>\n' +
  918. ' </div>\n' +
  919. '\n' +
  920. ' <div class="form-group">\n' +
  921. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  922. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Last Name\n' +
  923. ' </label>\n' +
  924. ' <div class="col-xs-12 col-sm-10">\n' +
  925. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-last-name" name="row[reviewer][0][reviewer-last-name]" placeholder="Type here...">\n' +
  926. ' <div class="input-group-addon no-border no-padding">\n' +
  927. ' <span class="msg-box n-right" for="c-add-review-last-name"></span>\n' +
  928. ' </div>\n' +
  929. ' </div>\n' +
  930. ' </div>\n' +
  931. '\n' +
  932. ' <div class="form-group">\n' +
  933. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  934. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Affiliation\n' +
  935. ' </label>\n' +
  936. ' <div class="col-xs-12 col-sm-10">\n' +
  937. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-affiliation" name="row[reviewer][0][reviewer-affiliation]" placeholder="Type here...">\n' +
  938. ' <div class="input-group-addon no-border no-padding">\n' +
  939. ' <span class="msg-box n-right" for="c-add-review-affiliation"></span>\n' +
  940. ' </div>\n' +
  941. ' </div>\n' +
  942. ' </div>\n' +
  943. '\n' +
  944. ' <div class="form-group">\n' +
  945. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  946. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Field\n' +
  947. ' </label>\n' +
  948. ' <div class="col-xs-12 col-sm-10">\n' +
  949. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-field" name="row[reviewer][0][reviewer-field]" placeholder="Type here...">\n' +
  950. ' <div class="input-group-addon no-border no-padding">\n' +
  951. ' <span class="msg-box n-right" for="c-add-review-field"></span>\n' +
  952. ' </div>\n' +
  953. ' </div>\n' +
  954. ' </div>\n' +
  955. ' </div>');
  956. $('#addReviewModal').modal('hide');
  957. });
  958. // 删除已选中的审稿人
  959. $(document).on('click', '.recommended-del', function () {
  960. let index = $(this).data('index');
  961. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\[' + index + '\\]\\[reviewer-name\\]"]').remove();
  962. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\[' + index + '\\]\\[reviewer-email\\]"]').remove();
  963. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\[' + index + '\\]\\[reviewer-first-name\\]"]').remove();
  964. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\[' + index + '\\]\\[reviewer-last-name\\]"]').remove();
  965. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\[' + index + '\\]\\[reviewer-affiliation\\]"]').remove();
  966. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\[' + index + '\\]\\[reviewer-field\\]"]').remove();
  967. $(this).parent().remove();
  968. // 重新排列键值
  969. });
  970. // 辅助函数:生成指定起始页码和结束页码的分页按钮HTML代码
  971. function generatePagination(startPage, endPage) {
  972. var pageHtml = '';
  973. for (var i = startPage; i <= endPage; i++) {
  974. if (i === currentPage) {
  975. pageHtml += '<a href="#" class="pagination-link active">' + i + '</a>';
  976. } else {
  977. pageHtml += '<a href="#" class="pagination-link">' + i + '</a>';
  978. }
  979. }
  980. return pageHtml;
  981. }
  982. let copyright_files_value = $("input[name='row[is_copyright]']:checked").val();
  983. if (copyright_files_value == 'normal') {
  984. $('.copyright_files').show();
  985. } else {
  986. $('.copyright_files').hide();
  987. }
  988. let is_funding_value = $("input[name='row[is_funding]']:checked").val();
  989. if (is_funding_value == 'normal') {
  990. $('.funding_content').show();
  991. } else {
  992. $('.funding_content').hide();
  993. }
  994. let is_interest_value = $("input[name='row[is_interest]']:checked").val();
  995. if (is_interest_value == 'normal') {
  996. $('.interest_content').show();
  997. } else {
  998. $('.interest_content').hide();
  999. }
  1000. let is_become_review = $("input[name='row[is_become_review]']:checked").val();
  1001. if (is_become_review == 'normal') {
  1002. $('.field_content').show();
  1003. } else {
  1004. $('.field_content').hide();
  1005. }
  1006. });
  1007. // 添加作者
  1008. $('.author-button').click(function () {
  1009. let input_index = $('.add-author-content').children('.add-author-item').length;
  1010. // let input_index = author_content_length - 1;
  1011. // 克隆作者信息
  1012. let str = `<div class="add-author-item div" style="margin-bottom: 10px;">
  1013. <div class="author-content-button-item">
  1014. <div class="author-sort-number">
  1015. <i class="fa fa-angle-down"></i> <span class="author-sort-number-text">Author ${input_index + 1}</span>
  1016. </div>
  1017. <div class="author-operate-button">
  1018. <div class="author-sort-button text-sort-button text-button">
  1019. <i class="fa fa-sort"></i> Sort
  1020. </div>
  1021. <div class="author-delete-button text-delete-button text-button">
  1022. <i class="fa fa-trash"></i> Delete
  1023. </div>
  1024. </div>
  1025. </div>
  1026. <div class="form-group">
  1027. <label class="control-label col-xs-12 col-sm-4">
  1028. <span style="color:#ed534b;margin-right: 10px;">*</span>Institution E-Mail Address:
  1029. </label>
  1030. <div class="col-xs-12 col-sm-8">
  1031. <input type="text" data-rule="required" class="form-control" id="c-email" name="row[author][${input_index}][email]" value="" placeholder="Type here...">
  1032. <div class="input-group-addon no-border no-padding">
  1033. <span class="msg-box n-right" for="c-email"></span>
  1034. </div>
  1035. </div>
  1036. </div>
  1037. <div class="form-group">
  1038. <label class="control-label col-xs-12 col-sm-4">
  1039. <span style="color:#ed534b;margin-right: 10px;">*</span>First Name:
  1040. </label>
  1041. <div class="col-xs-12 col-sm-8">
  1042. <input type="text" data-rule="required" class="form-control" id="c-first-name" name="row[author][${input_index}][first_name]" value="" placeholder="Type here...">
  1043. <div class="input-group-addon no-border no-padding">
  1044. <span class="msg-box n-right" for="c-first_name"></span>
  1045. </div>
  1046. </div>
  1047. </div>
  1048. <div class="form-group">
  1049. <label class="control-label col-xs-12 col-sm-4">
  1050. Middle Name:
  1051. </label>
  1052. <div class="col-xs-12 col-sm-8">
  1053. <input type="text" class="form-control" id="c-middle-name" name="row[author][${input_index}][middle_name]" value="" placeholder="Type here...">
  1054. </div>
  1055. </div>
  1056. <div class="form-group">
  1057. <label class="control-label col-xs-12 col-sm-4">
  1058. Last Name:
  1059. </label>
  1060. <div class="col-xs-12 col-sm-8">
  1061. <input type="text" class="form-control" id="c-last-name" name="row[author][${input_index}][last_name]" value="" placeholder="Type here...">
  1062. </div>
  1063. </div>
  1064. <div class="form-group">
  1065. <label class="control-label col-xs-12 col-sm-4">
  1066. <span style="color:#ed534b;margin-right: 10px;">*</span>Display E-Mail:
  1067. </label>
  1068. <div class="col-xs-12 col-sm-8">
  1069. <div class="input-group mb-3">
  1070. <div class="radio radio-inline pl-0">
  1071. <label><input data-rule="required" id="c-display-e-mail-yes" name="row[author][${input_index}][display_email]" type="radio" value="yes" checked="checked" />Yes</label>
  1072. <label><input data-rule="required" id="c-display-e-mail-no" name="row[author][${input_index}][display_email]" type="radio" value="no" />No</label>
  1073. </div>
  1074. </div>
  1075. </div>
  1076. </div>
  1077. <div class="form-group">
  1078. <label class="control-label col-xs-12 col-sm-4">
  1079. <span style="color:#ed534b;margin-right: 10px;">*</span>Correspondsing Author:
  1080. </label>
  1081. <div class="col-xs-12 col-sm-8">
  1082. <div class="input-group mb-3">
  1083. <div class="radio radio-inline pl-0">
  1084. <label><input data-rule="required" id="c-correspondsing-author-yes" name="row[author][${input_index}][correspondsing_author]" type="radio" value="yes" checked="checked" />Yes</label>
  1085. <label><input data-rule="required" id="c-correspondsing-author-no" name="row[author][${input_index}][correspondsing_author]" type="radio" value="no" />No</label>
  1086. </div>
  1087. </div>
  1088. </div>
  1089. </div>
  1090. <div class="form-group">
  1091. <label class="control-label col-xs-12 col-sm-4">
  1092. <span style="color:#ed534b;margin-right: 10px;">*</span>Affiliation:
  1093. </label>
  1094. <div class="col-xs-12 col-sm-8">
  1095. <input data-rule="required" type="text" class="form-control" id="c-author-affiliation" name="row[author][${input_index}][author_affiliation]" value="" placeholder="Type here...">
  1096. <div class="input-group-addon no-border no-padding">
  1097. <span class="msg-box n-right" for="c-author-affiliation"></span>
  1098. </div>
  1099. </div>
  1100. </div>
  1101. <div class="form-group">
  1102. <label class="control-label col-xs-12 col-sm-4">
  1103. <span style="color:#ed534b;margin-right: 10px;">*</span>Country / Temitory:
  1104. </label>
  1105. <div class="col-xs-12 col-sm-8">
  1106. <select id="c-author_country" data-rule="required" class="form-control" name="row[author][${input_index}][author_country]">
  1107. <option value="">Please select</option>
  1108. <option value="china">china</option>
  1109. <option value="japan">japan</option>
  1110. <option value="england">england</option>
  1111. </select>
  1112. </div>
  1113. </div>
  1114. </div>`;
  1115. $('.add-author-content').append(str);
  1116. // 更新 name 值为按顺序增加的索引值
  1117. updateInputNames();
  1118. });
  1119. // 排序input 的 name 值
  1120. function updateInputNames() {
  1121. // 遍历所有的div元素
  1122. $(".add-author-item").each(function (index) {
  1123. var email_input = $(this).find('input[id="c-email"]');
  1124. var first_name_input = $(this).find('input[id="c-first-name"]');
  1125. var middle_name_input = $(this).find('input[id="c-middle-name"]');
  1126. var last_name_input = $(this).find('input[id="c-last-name"]');
  1127. var author_affiliation_input = $(this).find('input[id="c-author-affiliation"]');
  1128. var display_email_yes_radio = $(this).find('input[id="c-display-e-mail-yes"]');
  1129. var display_email_no_radio = $(this).find('input[id="c-display-e-mail-no"]');
  1130. var correspondsing_author_yes_radio = $(this).find('input[id="c-correspondsing-author-yes"]');
  1131. var correspondsing_author_no_radio = $(this).find('input[id="c-correspondsing-author-no"]');
  1132. var select = $(this).find("select");
  1133. email_input.attr('name', "row[author][" + index + "][email]");
  1134. first_name_input.attr('name', "row[author][" + index + "][first_name]");
  1135. middle_name_input.attr('name', "row[author][" + index + "][middle_name]");
  1136. last_name_input.attr('name', "row[author][" + index + "][last_name]");
  1137. author_affiliation_input.attr('name', "row[author][" + index + "][author_affiliation]");
  1138. display_email_yes_radio.attr('name', "row[author][" + index + "][display_email]");
  1139. display_email_no_radio.attr('name', "row[author][" + index + "][display_email]");
  1140. if (display_email_yes_radio[0].checked) {
  1141. display_email_yes_radio.prop('checked', 'checked');
  1142. }
  1143. if (display_email_no_radio[0].checked) {
  1144. display_email_no_radio.prop('checked', 'checked');
  1145. }
  1146. if (correspondsing_author_yes_radio[0].checked) {
  1147. correspondsing_author_yes_radio.prop('checked', 'checked');
  1148. }
  1149. if (correspondsing_author_no_radio[0].checked) {
  1150. correspondsing_author_no_radio.prop('checked', 'checked');
  1151. }
  1152. correspondsing_author_yes_radio.attr('name', "row[author][" + index + "][correspondsing_author]");
  1153. correspondsing_author_no_radio.attr('name', "row[author][" + index + "][correspondsing_author]");
  1154. $(this).find('.author-sort-number-text').html('Author' + (index + 1));
  1155. select.attr('name', "row[author][" + index + "][author_country]");
  1156. });
  1157. }
  1158. $.fn.serializeObject = function () {
  1159. var obj = {};
  1160. var arrayTmp = this.serializeArray();
  1161. $.each(arrayTmp, function () {
  1162. if (obj[this.name]) {
  1163. if (!obj[this.name].push) {
  1164. obj[this.name] = [obj[this.name]];
  1165. }
  1166. obj[this.name].push(this.value || '');
  1167. } else {
  1168. obj[this.name] = this.value || '';
  1169. }
  1170. });
  1171. return obj;
  1172. };
  1173. // 实时保存
  1174. $(document).on('mouseup', function () {
  1175. let values = $('#submit-manuscript-form').serializeObject();
  1176. if (index != 2) {
  1177. $.ajax({
  1178. url: '/api/user/incomplete_submit',
  1179. type: 'POST',
  1180. dataType: 'json',
  1181. data: values,
  1182. success: function (res) {
  1183. // 如果保存了就代表接下来都是修改,所以记录返回的id
  1184. if (res.code == 1) {
  1185. $('#c-manuscript_id').val(res.data);
  1186. }
  1187. },
  1188. error: function (xhr, status, error) {
  1189. top.window.Toastr.error('Save failed');
  1190. }
  1191. });
  1192. }
  1193. })
  1194. // 单选框选择显示对应input
  1195. $(document).on('click', '.radio-inline', function () {
  1196. let copyright_files_value = $("input[name='row[is_copyright]']:checked").val();
  1197. if (copyright_files_value === 'normal') {
  1198. $('.copyright_files').show();
  1199. } else {
  1200. $('.copyright_files').hide();
  1201. }
  1202. let is_funding_value = $("input[name='row[is_funding]']:checked").val();
  1203. if (is_funding_value === 'normal') {
  1204. $('.funding_content').show();
  1205. } else {
  1206. $('.funding_content').hide();
  1207. }
  1208. let is_interest_value = $("input[name='row[is_interest]']:checked").val();
  1209. if (is_interest_value === 'normal') {
  1210. $('.interest_content').show();
  1211. } else {
  1212. $('.interest_content').hide();
  1213. }
  1214. let is_become_review = $("input[name='row[is_become_review]']:checked").val();
  1215. if (is_become_review === 'normal') {
  1216. $('.field_content').show();
  1217. } else {
  1218. $('.field_content').hide();
  1219. }
  1220. });
  1221. // 折叠作者文本
  1222. $(document).on('click', '.author-content-button-item', function () {
  1223. var content = $(this).parent('.add-author-item')[0];
  1224. content.style.height = content.offsetHeight === 520 ? 42 + 'px' : 520 + 'px';
  1225. // 改为图片向上
  1226. if (content.style.height === '42px') {
  1227. $(this).children('.author-sort-number').children('.fa').attr('class', 'fa fa-angle-up');
  1228. // 设置拖动class
  1229. $(this).parent('.add-author-item').addClass('sort-author-item');
  1230. }
  1231. // 改为图片向下
  1232. if (content.style.height === '520px') {
  1233. $(this).children('.author-sort-number').children('.fa').attr('class', 'fa fa-angle-down');
  1234. $(this).parent('.add-author-item').removeClass('sort-author-item');
  1235. }
  1236. });
  1237. //flag用于判断鼠标状态点击后是否松开
  1238. let flag = false;
  1239. //移动的对象代码
  1240. let str = ''
  1241. //移动对象本身宽度
  1242. let obj_width = 0;
  1243. //移动对象本身高度
  1244. let obj_height = 0;
  1245. //移动对象
  1246. let obj_target = ''
  1247. //移动对象同等级下标 判断比较对象是在当前移动对象上面还是下面
  1248. let obj_index = 0;
  1249. //监听拖拽对象鼠标点击事件
  1250. $(document).on('mousedown', '.author-sort-button', function () {
  1251. // 存值
  1252. obj_target = $(this).parent().parent().parent()[0];
  1253. str = obj_target.outerHTML;
  1254. obj_width = $(obj_target).width()
  1255. obj_height = $(obj_target).height()
  1256. obj_index = $(obj_target).index()
  1257. //复制拖拽对象进入隐藏的box2并设置透明度(视觉效果好一些),移动到当前位置
  1258. $('#box2').html(str)
  1259. $('#box2').fadeTo(1, 0.5);
  1260. //obj_height除以二和obj_width除以二是为了让鼠标在复制对象的中间,视觉效果好一些
  1261. $('#box2').offset({top: event.pageY - (obj_height / 2), left: event.pageX - (obj_width / 2)});
  1262. setTimeout(function () {
  1263. $('#box2').show();
  1264. }, 100)
  1265. //点击标识修改为true
  1266. flag = true;
  1267. });
  1268. //监听页面鼠标释放事件
  1269. $(document).mouseup(function (event) {
  1270. //清空box2
  1271. $("#box2").html('');
  1272. //点击标识修改为false
  1273. flag = false;
  1274. updateInputNames();
  1275. });
  1276. //监听页面鼠标移动事件
  1277. $(document).mousemove(function (event) {
  1278. if (flag) {
  1279. //复制对象跟随鼠标移动
  1280. $("#box2").offset({top: event.pageY - (obj_height / 2), left: event.pageX - (obj_width / 2)});
  1281. //循环要排序的对象
  1282. $("#box .add-author-item").each(function (k, v) {
  1283. //判断在移动对象上面的数据,判断鼠标所在距离顶部位置小于上面对象距顶部位置的位置+上面对象的高度时则移动
  1284. if (k < obj_index && event.pageY <= $(this).offset().top + $(this).height()) {
  1285. $(this).before(obj_target)
  1286. obj_index = $(obj_target).index()
  1287. return false;
  1288. }
  1289. //判断在移动对象下面的数据,判断鼠标所在距离顶部位置大于下面对象的距顶部位置则移动
  1290. if (k > obj_index && event.pageY >= $(this).offset().top) {
  1291. $(this).after(obj_target)
  1292. obj_index = $(obj_target).index();
  1293. return false;
  1294. }
  1295. });
  1296. }
  1297. });
  1298. // 阻止鼠标选中文本
  1299. $(document).bind("selectstart",function(){return false;});
  1300. Form.api.bindevent($("#submit-manuscript-form"), function () {
  1301. setTimeout(function () {
  1302. location.href = '/index/user/display_submitted';
  1303. }, 2000);
  1304. });
  1305. },
  1306. invite_reviewers: function () {
  1307. // updateHidden();
  1308. // 全选
  1309. $('#reviewer-table').on('click', '.chk', function () {
  1310. var checkedStatus = this.checked;
  1311. $('#reviewer-table .son-chk').prop('checked', checkedStatus);
  1312. updateHidden()
  1313. });
  1314. $('#reviewer-table').on('click', '.son-chk', function () {
  1315. updateHidden();
  1316. })
  1317. function updateHidden() {
  1318. var checkedVals = [];
  1319. $('.son-chk:checked').each(function () {
  1320. let obj = {};
  1321. obj['id'] = $(this).data('id');
  1322. obj['user_id'] = $(this).data('user-id');
  1323. obj['name'] = $(this).data('name');
  1324. obj['education'] = $(this).data('education');
  1325. obj['affiliation'] = $(this).data('affiliation');
  1326. obj['field'] = $(this).data('field');
  1327. checkedVals.push(obj);
  1328. });
  1329. $('#submit-invite-reviewers-form .reviewer-content').empty();
  1330. console.log(checkedVals);
  1331. $.each(checkedVals, function (i, val) {
  1332. var str = '<input type="hidden" name="row[reviewer][' + i + '][id]" value="' + val.id + '">\n' +
  1333. '<input type="hidden" name="row[reviewer][' + i + '][user_id]" value="' + val.user_id + '">\n' +
  1334. ' <input type="hidden" name="row[reviewer][' + i + '][name]" value="' + val.name + '">\n' +
  1335. ' <input type="hidden" name="row[reviewer][' + i + '][education]" value="' + val.education + '">\n' +
  1336. ' <input type="hidden" name="row[reviewer][' + i + '][affiliation]" value="' + val.affiliation + '">\n' +
  1337. ' <input type="hidden" name="row[reviewer][' + i + '][field]" value="' + val.field + '">';
  1338. ' <input type="hidden" name="row[reviewer][' + i + '][journal]" value="' + val.journal + '">';
  1339. $('#submit-invite-reviewers-form .reviewer-content').append(str);
  1340. });
  1341. }
  1342. // 点击按钮后获取选择
  1343. Form.api.bindevent($("#submit-invite-reviewers-form"), function () {
  1344. // 清理缓存
  1345. localStorage.removeItem('selectedTableVals');
  1346. setTimeout(function () {
  1347. location.href = '/index/user/editing_manuscripts';
  1348. }, 2000);
  1349. });
  1350. },
  1351. handing_suggestions: function () {
  1352. Form.api.bindevent($("#submit-comments-form"), function () {
  1353. setTimeout(function () {
  1354. location.href = '/index/user/show_reviewed_manuscripts';
  1355. }, 2000);
  1356. });
  1357. },
  1358. display_submitted: function () {
  1359. // 初始化分页参数
  1360. var currentPage = 1;
  1361. var pageSize = 10;
  1362. $('#c-search').on("keyup", function (e) {
  1363. if (e.keyCode === 13) {
  1364. let keyword = $(this).val();
  1365. // 点击回车后进行搜索
  1366. $.ajax({
  1367. url: 'user/display_submitted',
  1368. type: 'GET',
  1369. dataType: 'json',
  1370. data: {
  1371. page: currentPage,
  1372. limit: pageSize,
  1373. keyword: keyword,
  1374. },
  1375. success: function (res) {
  1376. if (res.code === 1) {
  1377. $('.article-list').html('');
  1378. var tableData = res.data.data;
  1379. for (var i = 0; i < tableData.length; i++) {
  1380. let rowData = tableData[i];
  1381. let edit_str = '';
  1382. let comments_str = '';
  1383. let view_comments_str = '';
  1384. if (rowData.is_edit) {
  1385. edit_str = '<div class="article-read">\n' +
  1386. ' <a href="submit_manuscript?id=' + rowData.id + '" style="color: #007bff;" target="_blank">\n' +
  1387. ' <img src="/assets/img/index/personal_data_icon.png" alt="">\n' +
  1388. ' Edit\n' +
  1389. ' </a>\n' +
  1390. ' </div>\n';
  1391. }
  1392. if (rowData.is_comments) {
  1393. comments_str = '<div class="article-read">\n' +
  1394. ' <a href="review_comments.html?id=' + rowData.id + '&type=author" style="color: #007bff;" target="_blank">\n' +
  1395. ' <img src="/assets/img/index/reply.png" alt="">\n' +
  1396. ' Reply review comments\n' +
  1397. ' </a>\n' +
  1398. ' </div>';
  1399. }
  1400. if (rowData.is_view_comments) {
  1401. view_comments_str = '<div class="article-read">\n' +
  1402. ' <a href="article_details.html?id={$vo.id}&type=author" style="color: #007bff;" target="_blank">\n' +
  1403. ' <img src="/assets/img/index/view_comments.png" alt="">\n' +
  1404. ' View\'s comments\n' +
  1405. ' </a>\n' +
  1406. ' </div>';
  1407. }
  1408. let html = '<article class="article-item">\n' +
  1409. ' <div class="media">\n' +
  1410. ' <div class="media-left">\n' +
  1411. ' <a href="javascript:;">\n' +
  1412. ' <div class="embed-responsive embed-responsive-4by3 img-zoom p-0">\n' +
  1413. ' <img src="' + rowData.image + '">\n' +
  1414. ' </div>\n' +
  1415. ' </a>\n' +
  1416. ' </div>\n' +
  1417. ' <div class="media-body">\n' +
  1418. ' <h3 class="article-title">\n' +
  1419. ' <a href="javascript:;">' + rowData.title + '</a>\n' +
  1420. ' <div class="article-title-id">\n' +
  1421. ' ID:' + rowData.id + '\n' +
  1422. ' </div>\n' +
  1423. ' </h3>\n' +
  1424. ' <div class="article-intro">\n' +
  1425. ' <span class="label label-info article-intro-label">' + rowData.journal + '</span>\n' +
  1426. ' </div>\n' +
  1427. ' <div class="article-tag">\n' +
  1428. ' <div itemprop="date">Submission date:' + rowData.createtime + '</div>\n' +
  1429. ' </div>\n' +
  1430. ' <div class="article-tag">\n' +
  1431. ' ' + edit_str + '' +
  1432. ' ' + comments_str + '' +
  1433. ' <div class="article-read">\n' +
  1434. ' <a href="send_email.html?id=' + rowData.id + '&type=author" style="color: #007bff;" target="_blank">\n' +
  1435. ' <img src="/assets/img/index/email.png" alt="">\n' +
  1436. ' Send Email' +
  1437. ' </a>\n' +
  1438. ' </div>\n' +
  1439. ' </div>\n' +
  1440. ' </div>\n' +
  1441. ' </div>\n' +
  1442. ' </article>';
  1443. $('.article-list').append(html);
  1444. }
  1445. }
  1446. },
  1447. error: function (xhr, status, error) {
  1448. console.error(error);
  1449. }
  1450. });
  1451. }
  1452. });
  1453. },
  1454. editing_manuscripts: function () {
  1455. // 初始化分页参数
  1456. var currentPage = 1;
  1457. var pageSize = 10;
  1458. var status = $('#editor_manuscripts_status').val();
  1459. $('#c-search').on("keyup", function (e) {
  1460. if (e.keyCode === 13) {
  1461. let keyword = $(this).val();
  1462. // 点击回车后进行搜索
  1463. $.ajax({
  1464. url: 'user/editing_manuscripts',
  1465. type: 'GET',
  1466. dataType: 'json',
  1467. data: {
  1468. page: currentPage,
  1469. limit: pageSize,
  1470. keyword: keyword,
  1471. status: status,
  1472. },
  1473. success: function (res) {
  1474. if (res.code === 1) {
  1475. if (res.data.total > 0) {
  1476. $('.article-list').html('');
  1477. var tableData = res.data.data;
  1478. for (var i = 0; i < tableData.length; i++) {
  1479. let rowData = tableData[i];
  1480. let str = '';
  1481. if (rowData.is_chief) {
  1482. str = `<div class="article-read">
  1483. <a href="invite_editor.html?id=${rowData.id}&type=chief" style="color: #007bff;" target="_blank">
  1484. <img src="/assets/img/index/invite-editor.png" alt="">
  1485. Invite Editor
  1486. </a>
  1487. </div>`;
  1488. }
  1489. let html = `<article class="article-item">
  1490. <div class="media">
  1491. <div class="media-left">
  1492. <a href="article_details?id=${rowData.id}&type=editor">
  1493. <div class="embed-responsive embed-responsive-4by3 img-zoom p-0">
  1494. <img src="${rowData.image}">
  1495. </div>
  1496. </a>
  1497. </div>
  1498. <div class="media-body">
  1499. <h3 class="article-title">
  1500. <a href="article_details?id=${rowData.id}&type=editor">${rowData.title}</a>
  1501. </h3>
  1502. <div class="article-tag" style="display: flex;justify-content: space-between;">
  1503. <span itemprop="date">Submission date:${rowData.createtime}</span>
  1504. <div class="article-title-id">
  1505. ID:${rowData.id}
  1506. </div>
  1507. </div>
  1508. <div class="article-intro">
  1509. <span class="label label-success article-intro-label">${rowData.journal}</span>
  1510. </div>
  1511. <div class="article-tag">
  1512. <div class="article-read">
  1513. <a href="handing_suggestions.html?id=${rowData.id}&type=editor" style="color: #007bff;" target="_blank">
  1514. <img src="/assets/img/index/suggestions_button.png" alt="">
  1515. Handing suggestions
  1516. </a>
  1517. </div>
  1518. <div class="article-read">
  1519. <a href="article_details.html?id=${rowData.id}&type=editor" style="color: #007bff;" target="_blank">
  1520. <img src="/assets/img/index/view_button.png" alt="">
  1521. View
  1522. </a>
  1523. </div>
  1524. <div class="article-read">
  1525. <a href="invite_reviewers.html?id=${rowData.id}&type=editor" style="color: #007bff;" target="_blank">
  1526. <img src="/assets/img/index/editor_button.png" alt="">
  1527. Invite Reviewers
  1528. </a>
  1529. </div>
  1530. ${str}
  1531. <div class="article-read">
  1532. <a href="send_email.html?id=${rowData.id}&type=editor" style="color: #007bff;" target="_blank">
  1533. <img src="/assets/img/index/email.png" alt="">
  1534. Send Email
  1535. </a>
  1536. </div>
  1537. </div>
  1538. </div>
  1539. </div>
  1540. </article>`;
  1541. $('.article-list').append(html);
  1542. }
  1543. }
  1544. }
  1545. },
  1546. error: function (xhr, status, error) {
  1547. console.error(error);
  1548. }
  1549. });
  1550. }
  1551. });
  1552. },
  1553. show_reviewed_manuscripts: function () {
  1554. // 初始化分页参数
  1555. var currentPage = 1;
  1556. var pageSize = 10;
  1557. var status = $('#reviewed_manuscripts_status').val();
  1558. $('#c-search').on("keyup", function (e) {
  1559. if (e.keyCode === 13) {
  1560. let keyword = $(this).val();
  1561. // 点击回车后进行搜索
  1562. $.ajax({
  1563. url: 'user/show_reviewed_manuscripts',
  1564. type: 'GET',
  1565. dataType: 'json',
  1566. data: {
  1567. status: status,
  1568. page: currentPage,
  1569. limit: pageSize,
  1570. keyword: keyword,
  1571. },
  1572. success: function (res) {
  1573. if (res.code === 1) {
  1574. $('.article-list').html('');
  1575. var tableData = res.data.data;
  1576. for (var i = 0; i < tableData.length; i++) {
  1577. let rowData = tableData[i];
  1578. let html = '<article class="article-item">\n' +
  1579. ' <div class="media">\n' +
  1580. ' <div class="media-left">\n' +
  1581. ' <a href="article_details?id=' + rowData.id + '&type=review">\n' +
  1582. ' <div class="embed-responsive embed-responsive-4by3 img-zoom">\n' +
  1583. ' <img src="' + rowData.image + '">\n' +
  1584. ' </div>\n' +
  1585. ' </a>\n' +
  1586. ' </div>\n' +
  1587. ' <div class="media-body">\n' +
  1588. ' <h3 class="article-title">\n' +
  1589. ' <a href="article_details?id=' + rowData.id + '&type=review">' + rowData.title + '</a>\n' +
  1590. ' <div class="article-title-id">\n' +
  1591. ' ID:' + rowData.id + '\n' +
  1592. ' </div>\n' +
  1593. ' </h3>\n' +
  1594. ' <div class="article-intro">\n' +
  1595. ' <span class="label label-success article-intro-label">' + rowData.journal + '</span>\n' +
  1596. ' </div>\n' +
  1597. ' <div class="article-tag">\n' +
  1598. ' <span itemprop="date">Submission date:' + rowData.createtime + '</span>\n' +
  1599. ' <span class="article-read">\n' +
  1600. ' <a href="conduct_review?id=' + rowData.id + '&type=reviewer" style="color: #007bff;" target="_blank">\n' +
  1601. ' <img src="/assets/img/index/review_button.png" alt="">\n' +
  1602. ' Review\n' +
  1603. ' </a>\n' +
  1604. ' <span/>\n' +
  1605. ' <div class="article-read">\n' +
  1606. ' <a href="send_email.html?id=' + rowData.id + '&type=reviewer" style="color: #007bff;" target="_blank">\n' +
  1607. ' <img src="/assets/img/index/email.png" alt="">\n' +
  1608. ' Send Email\n' +
  1609. ' </a>\n' +
  1610. ' </div>'
  1611. ' </div>\n' +
  1612. ' </div>\n' +
  1613. ' </div>\n' +
  1614. ' </article>';
  1615. $('.article-list').append(html);
  1616. }
  1617. }
  1618. },
  1619. error: function (xhr, status, error) {
  1620. console.error(error);
  1621. }
  1622. });
  1623. }
  1624. });
  1625. },
  1626. invitation_letter: function () {
  1627. // 初始化分页参数
  1628. var currentPage = 1;
  1629. var pageSize = 10;
  1630. var status = $('#manuscript_invite_status').val();
  1631. $('#c-search').on("keyup", function (e) {
  1632. if (e.keyCode === 13) {
  1633. let keyword = $(this).val();
  1634. // 点击回车后进行搜索
  1635. $.ajax({
  1636. url: 'user/invitation_letter',
  1637. type: 'GET',
  1638. dataType: 'json',
  1639. data: {
  1640. status: status,
  1641. page: currentPage,
  1642. limit: pageSize,
  1643. keyword: keyword,
  1644. },
  1645. success: function (res) {
  1646. if (res.code === 1) {
  1647. $('.article-list').html('');
  1648. var tableData = res.data.data;
  1649. for (var i = 0; i < tableData.length; i++) {
  1650. let rowData = tableData[i];
  1651. let html = '<article class="article-item">\n' +
  1652. ' <div class="media">\n' +
  1653. ' <div class="media-left">\n' +
  1654. ' <a href="article_details?id=' + rowData.id + '&type=invita_review">\n' +
  1655. ' <div class="embed-responsive embed-responsive-4by3 img-zoom p-0">\n' +
  1656. ' <img src="' + rowData.image + '">\n' +
  1657. ' </div>\n' +
  1658. ' </a>\n' +
  1659. ' </div>\n' +
  1660. ' <div class="media-body">\n' +
  1661. ' <h3 class="article-title">\n' +
  1662. ' <a href="article_details?id=' + rowData.id + '&type=invita_review">' + rowData.title + '</a>\n' +
  1663. ' <div class="article-title-id">\n' +
  1664. ' ID:' + rowData.id + '\n' +
  1665. ' </div>\n' +
  1666. ' </h3>\n' +
  1667. ' <div class="article-intro">\n' +
  1668. ' <span class="label label-success article-intro-label">' + rowData.journal + '</span>\n' +
  1669. ' </div>\n' +
  1670. ' <div class="article-tag">\n' +
  1671. ' <div itemprop="date">Submission date:' + rowData.createtime + '</div>\n' +
  1672. ' </div>\n' +
  1673. ' <div class="article-tag">\n' +
  1674. ' <div class="article-read">\n' +
  1675. ' <a href="javascript:;" class="invite-letter" data-id="' + rowData.id + '" data-status="accept" style="color: #007bff;">\n' +
  1676. ' <img src="/assets/img/index/accept.png" alt="">\n' +
  1677. ' Accept\n' +
  1678. ' </a>\n' +
  1679. ' </div>\n' +
  1680. ' <div class="article-read">\n' +
  1681. ' <a href="javascript:;" class="invite-letter" data-id="' + rowData.id + '" data-status="refuse" style="color: #007bff;">\n' +
  1682. ' <img src="/assets/img/index/refuse.png" alt="">\n' +
  1683. ' Refuse\n' +
  1684. ' </a>\n' +
  1685. ' </div>\n' +
  1686. ' </div>\n' +
  1687. ' </div>\n' +
  1688. ' </div>\n' +
  1689. ' </article>';
  1690. $('.article-list').append(html);
  1691. }
  1692. }
  1693. },
  1694. error: function (xhr, status, error) {
  1695. console.error(error);
  1696. }
  1697. });
  1698. }
  1699. });
  1700. // 接受/拒绝操作
  1701. $(document).on('click', '.invite-letter', function () {
  1702. let id = $(this).attr('data-id');
  1703. let status = $(this).attr('data-status');
  1704. $.ajax({
  1705. url: '/index/user/invitation_letter_operate',
  1706. type: 'POST',
  1707. dataType: 'json',
  1708. data: {
  1709. id: id,
  1710. status: status,
  1711. },
  1712. success: function (res) {
  1713. if (res.code === 1) {
  1714. Toastr.success(res.msg);
  1715. setTimeout(function () {
  1716. location.reload();
  1717. }, 2000);
  1718. }
  1719. },
  1720. error: function (xhr, status, error) {
  1721. console.error(error);
  1722. }
  1723. });
  1724. });
  1725. },
  1726. special_issue: function () {
  1727. // 自定义添加作者按钮
  1728. $(document).on('click', '.add-editor-button', function () {
  1729. let input_index = $('.custom-editor-content').children('.custom-editor-item').length;
  1730. let str = '<div class="custom-editor-item">\n' +
  1731. ' <div class="form-group">\n' +
  1732. ' <label class="control-label col-xs-12 col-sm-11">\n' +
  1733. ' </label>\n' +
  1734. ' <div class="editor-delete-button text-delete-button mb-3 col-xs-12 col-sm-1">\n' +
  1735. ' <i class="fa fa-trash"></i> Delete\n' +
  1736. ' </div>\n' +
  1737. ' </div>\n' +
  1738. ' <div class="form-group">\n' +
  1739. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1740. ' <span style="color:#ed534b;margin-right: 10px;">*</span>E-mail Address\n' +
  1741. ' </label>\n' +
  1742. ' <div class="col-xs-12 col-sm-10">\n' +
  1743. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-email" name="row[editor][' + input_index + '][email]" placeholder="Type here...">\n' +
  1744. ' <div class="input-group-addon no-border no-padding">\n' +
  1745. ' <span class="msg-box n-right" for="c-add-review-email"></span>\n' +
  1746. ' </div>\n' +
  1747. ' </div>\n' +
  1748. ' </div>\n' +
  1749. '\n' +
  1750. ' <div class="form-group">\n' +
  1751. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1752. ' <span style="color:#ed534b;margin-right: 10px;">*</span>First Name\n' +
  1753. ' </label>\n' +
  1754. ' <div class="col-xs-12 col-sm-10">\n' +
  1755. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-first-name" name="row[editor][' + input_index + '][first_name]" placeholder="Type here...">\n' +
  1756. ' <div class="input-group-addon no-border no-padding">\n' +
  1757. ' <span class="msg-box n-right" for="c-add-review-first-name"></span>\n' +
  1758. ' </div>\n' +
  1759. ' </div>\n' +
  1760. ' </div>\n' +
  1761. '\n' +
  1762. ' <div class="form-group">\n' +
  1763. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1764. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Last Name\n' +
  1765. ' </label>\n' +
  1766. ' <div class="col-xs-12 col-sm-10">\n' +
  1767. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-last-name" name="row[editor][' + input_index + '][last_name]" placeholder="Type here...">\n' +
  1768. ' <div class="input-group-addon no-border no-padding">\n' +
  1769. ' <span class="msg-box n-right" for="c-add-review-last-name"></span>\n' +
  1770. ' </div>\n' +
  1771. ' </div>\n' +
  1772. ' </div>\n' +
  1773. '\n' +
  1774. ' <div class="form-group">\n' +
  1775. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1776. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Affiliation\n' +
  1777. ' </label>\n' +
  1778. ' <div class="col-xs-12 col-sm-10">\n' +
  1779. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-affiliation" name="row[editor][' + input_index + '][affiliation]" placeholder="Type here...">\n' +
  1780. ' <div class="input-group-addon no-border no-padding">\n' +
  1781. ' <span class="msg-box n-right" for="c-add-review-affiliation"></span>\n' +
  1782. ' </div>\n' +
  1783. ' </div>\n' +
  1784. ' </div>\n' +
  1785. '\n' +
  1786. ' <div class="form-group">\n' +
  1787. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1788. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Publication Record Link\n' +
  1789. ' </label>\n' +
  1790. ' <div class="col-xs-12 col-sm-10">\n' +
  1791. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-record_link" name="row[editor][' + input_index + '][record_link]" placeholder="Type here...">\n' +
  1792. ' <div class="input-group-addon no-border no-padding">\n' +
  1793. ' <span class="msg-box n-right" for="c-add-review-record_link"></span>\n' +
  1794. ' </div>\n' +
  1795. ' </div>\n' +
  1796. ' </div>\n' +
  1797. ' </div>';
  1798. $('.custom-editor-content').append(str);
  1799. updateEditorInputNames();
  1800. });
  1801. // 排序input 的 name 值
  1802. var updateEditorInputNames = function () {
  1803. // 遍历所有的div元素
  1804. $(".custom-editor-item").each(function (index) {
  1805. var email_input = $(this).find('input[id="c-add-editor-email"]');
  1806. var first_name_input = $(this).find('input[id="c-add-editor-first-name"]');
  1807. var last_name_input = $(this).find('input[id="c-add-editor-last-name"]');
  1808. var affiliation_input = $(this).find('input[id="c-add-editor-affiliation"]');
  1809. var record_link_input = $(this).find('input[id="c-add-editor-record_link"]');
  1810. email_input.attr('name', "row[editor][" + index + "][email]");
  1811. first_name_input.attr('name', "row[editor][" + index + "][first_name]");
  1812. last_name_input.attr('name', "row[editor][" + index + "][last_name]");
  1813. affiliation_input.attr('name', "row[editor][" + index + "][affiliation]");
  1814. record_link_input.attr('name', "row[editor][" + index + "][record_link]");
  1815. });
  1816. };
  1817. // 删除对应的作者信息
  1818. $(document).on('click', '.editor-delete-button', function () {
  1819. let editor_content_length = $('.custom-editor-content').children('.custom-editor-item').length;
  1820. if (editor_content_length > 1) {
  1821. $(this).parent().parent().remove();
  1822. // 删除后更新 input 的 name 值
  1823. updateEditorInputNames();
  1824. }
  1825. });
  1826. // 自定义作者信息提交按钮操作
  1827. $(document).on('click', '.add-editor-submit', function () {
  1828. let tr_length = $('#recommended-table tbody tr').length;
  1829. let key = $(".custom-editor-item").length;
  1830. let addEditorInputValue = [];
  1831. for (let i = 0; i < key; i++) {
  1832. let obj = {};
  1833. obj['email'] = $(this).parent().parent().find("input[name='row[editor][" + i + "][email]']").val();
  1834. obj['first_name'] = $(this).parent().parent().find("input[name='row[editor][" + i + "][first_name]']").val();
  1835. obj['last_name'] = $(this).parent().parent().find("input[name='row[editor][" + i + "][last_name]']").val();
  1836. obj['affiliation'] = $(this).parent().parent().find("input[name='row[editor][" + i + "][affiliation]']").val();
  1837. obj['record_link'] = $(this).parent().parent().find("input[name='row[editor][" + i + "][record_link]']").val();
  1838. addEditorInputValue.push(obj);
  1839. }
  1840. for (var i = 0; i < addEditorInputValue.length; i++) {
  1841. var rowData = addEditorInputValue[i];
  1842. if (addEditorInputValue.length > 1) {
  1843. if (i > 0) {
  1844. tr_length++;
  1845. }
  1846. }
  1847. let html = ' <input type="hidden" name="row[editor][' + tr_length + '][email]" value="' + rowData.email + '">\n' +
  1848. ' <input type="hidden" name="row[editor][' + tr_length + '][first_name]" value="' + rowData.first_name + '">\n' +
  1849. ' <input type="hidden" name="row[editor][' + tr_length + '][last_name]" value="' + rowData.last_name + '">\n' +
  1850. ' <input type="hidden" name="row[editor][' + tr_length + '][affiliation]" value="' + rowData.affiliation + '">\n' +
  1851. ' <input type="hidden" name="row[editor][' + tr_length + '][record_link]" value="' + rowData.record_link + '">';
  1852. var rowHtml = '<tr>' +
  1853. '<td>' + rowData.email + '</td>' +
  1854. '<td>' + rowData.first_name + '</td>' +
  1855. '<td>' + rowData.last_name + '</td>' +
  1856. '<td>' + rowData.affiliation + '</td>' +
  1857. '<td>' + rowData.record_link + '</td>' +
  1858. '<td class="recommended-del" data-index="' + tr_length + '"><a href="#">删除</a></td>' +
  1859. '</tr>';
  1860. $('#recommended-table tbody').append(rowHtml);
  1861. $('.editor-hidden-content').append(html);
  1862. }
  1863. // 清空已填内容
  1864. $('.custom-editor-content').html('');
  1865. $('.custom-editor-content').append('<div class="custom-editor-item">\n' +
  1866. ' <div class="form-group">\n' +
  1867. ' <label class="control-label col-xs-12 col-sm-11">\n' +
  1868. ' </label>\n' +
  1869. ' <div class="editor-delete-button text-delete-button mb-3 col-xs-12 col-sm-1">\n' +
  1870. ' <i class="fa fa-trash"></i> Delete\n' +
  1871. ' </div>\n' +
  1872. ' </div>\n' +
  1873. ' <div class="form-group">\n' +
  1874. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1875. ' <span style="color:#ed534b;margin-right: 10px;">*</span>E-mail Address\n' +
  1876. ' </label>\n' +
  1877. ' <div class="col-xs-12 col-sm-10">\n' +
  1878. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-email" name="row[editor][0][email]" placeholder="Type here...">\n' +
  1879. ' <div class="input-group-addon no-border no-padding">\n' +
  1880. ' <span class="msg-box n-right" for="c-add-review-email"></span>\n' +
  1881. ' </div>\n' +
  1882. ' </div>\n' +
  1883. ' </div>\n' +
  1884. '\n' +
  1885. ' <div class="form-group">\n' +
  1886. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1887. ' <span style="color:#ed534b;margin-right: 10px;">*</span>First Name\n' +
  1888. ' </label>\n' +
  1889. ' <div class="col-xs-12 col-sm-10">\n' +
  1890. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-first-name" name="row[editor][0][first_name]" placeholder="Type here...">\n' +
  1891. ' <div class="input-group-addon no-border no-padding">\n' +
  1892. ' <span class="msg-box n-right" for="c-add-review-first-name"></span>\n' +
  1893. ' </div>\n' +
  1894. ' </div>\n' +
  1895. ' </div>\n' +
  1896. '\n' +
  1897. ' <div class="form-group">\n' +
  1898. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1899. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Last Name\n' +
  1900. ' </label>\n' +
  1901. ' <div class="col-xs-12 col-sm-10">\n' +
  1902. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-last-name" name="row[editor][0][last_name]" placeholder="Type here...">\n' +
  1903. ' <div class="input-group-addon no-border no-padding">\n' +
  1904. ' <span class="msg-box n-right" for="c-add-review-last-name"></span>\n' +
  1905. ' </div>\n' +
  1906. ' </div>\n' +
  1907. ' </div>\n' +
  1908. '\n' +
  1909. ' <div class="form-group">\n' +
  1910. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1911. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Affiliation\n' +
  1912. ' </label>\n' +
  1913. ' <div class="col-xs-12 col-sm-10">\n' +
  1914. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-affiliation" name="row[editor][0][affiliation]" placeholder="Type here...">\n' +
  1915. ' <div class="input-group-addon no-border no-padding">\n' +
  1916. ' <span class="msg-box n-right" for="c-add-review-affiliation"></span>\n' +
  1917. ' </div>\n' +
  1918. ' </div>\n' +
  1919. ' </div>\n' +
  1920. '\n' +
  1921. ' <div class="form-group">\n' +
  1922. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1923. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Publication Record Link\n' +
  1924. ' </label>\n' +
  1925. ' <div class="col-xs-12 col-sm-10">\n' +
  1926. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-record_link" name="row[editor][0][record_link]" placeholder="Type here...">\n' +
  1927. ' <div class="input-group-addon no-border no-padding">\n' +
  1928. ' <span class="msg-box n-right" for="c-add-review-record_link"></span>\n' +
  1929. ' </div>\n' +
  1930. ' </div>\n' +
  1931. ' </div>\n' +
  1932. ' </div>');
  1933. $('#addEditorModal').modal('hide');
  1934. });
  1935. // 删除已选中的作者
  1936. $(document).on('click', '.recommended-del', function () {
  1937. let index = $(this).data('index');
  1938. $('.editor-hidden-content').find('input[name="row[editor]\\[' + index + '\\]\\[email\\]"]').remove();
  1939. $('.editor-hidden-content').find('input[name="row[editor]\\[' + index + '\\]\\[first_name\\]"]').remove();
  1940. $('.editor-hidden-content').find('input[name="row[editor]\\[' + index + '\\]\\[last_name\\]"]').remove();
  1941. $('.editor-hidden-content').find('input[name="row[editor]\\[' + index + '\\]\\[affiliation\\]"]').remove();
  1942. $('.editor-hidden-content').find('input[name="row[editor]\\[' + index + '\\]\\[record_link\\]"]').remove();
  1943. $(this).parent().remove();
  1944. // 重新排列键值
  1945. });
  1946. // 辅助函数:生成指定起始页码和结束页码的分页按钮HTML代码
  1947. function generatePagination(startPage, endPage) {
  1948. var pageHtml = '';
  1949. for (var i = startPage; i <= endPage; i++) {
  1950. if (i === currentPage) {
  1951. pageHtml += '<a href="#" class="pagination-link active">' + i + '</a>';
  1952. } else {
  1953. pageHtml += '<a href="#" class="pagination-link">' + i + '</a>';
  1954. }
  1955. }
  1956. return pageHtml;
  1957. }
  1958. Form.api.bindevent($("#submit-issue-form"), function () {
  1959. setTimeout(function () {
  1960. location.href = '/index/user/special_issue_list'
  1961. }, 2000);
  1962. });
  1963. },
  1964. article_details: function () {
  1965. // 意见转呈给作者
  1966. $(document).on('click', '#send-button', function () {
  1967. let comment_id = $(this).attr('data-id');
  1968. Layer.confirm("Are you sure you want to forward it to the author?", {
  1969. title: "Tips",
  1970. icon: 0,
  1971. btn: ["Confirm", "Cancel"]
  1972. }, function () {
  1973. $.ajax({
  1974. url: 'user/send_author_comments',
  1975. type: 'POST',
  1976. dataType: 'json',
  1977. data: {
  1978. comment_id: comment_id
  1979. },
  1980. success: function (res) {
  1981. console.log(res);
  1982. if (res.code === 1) {
  1983. Toastr.success(res.msg);
  1984. setTimeout(function () {
  1985. location.reload();
  1986. }, 2000);
  1987. }
  1988. },
  1989. error: function (xhr, status, error) {
  1990. console.error(error);
  1991. }
  1992. });
  1993. });
  1994. });
  1995. // 点击tab切换表格
  1996. $(document).on('click', '.breadcrumb-item', function () {
  1997. let status = $(this).children().attr('data-value');
  1998. let manuscript_id = $(this).children().attr('data-id');
  1999. let user_id = $(this).children().attr('data-user');
  2000. $.ajax({
  2001. url: '/api/user/get_article_detail_table',
  2002. type: 'POST',
  2003. dataType: 'json',
  2004. data: {
  2005. status: status,
  2006. manuscript_id: manuscript_id,
  2007. },
  2008. success: function (res) {
  2009. if (res.code === 1) {
  2010. // 邀请的审稿人信息
  2011. let result = res.data;
  2012. if (status == 'reviewer_details') {
  2013. $('.reviewer_suggestion').hide();
  2014. $('.review_report').hide();
  2015. $('.author_report').hide();
  2016. $('.reviewer_details').show();
  2017. let data = result.reviewer;
  2018. let str = '';
  2019. for (let i = 0; i < data.length; i++) {
  2020. str += '<tr>\n' +
  2021. ' <td>'+ data[i].nickname +'</td>\n' +
  2022. ' <td>'+ data[i].invited_time +'</td>\n' +
  2023. ' <td>'+ data[i].reply_time +'</td>\n' +
  2024. ' <td>'+ data[i].submission_time +'</td>\n' +
  2025. ' <td>'+ data[i].status +'</td>\n' +
  2026. ' </tr>';
  2027. }
  2028. $('.reviewer_details_content').html(str);
  2029. }
  2030. // 审稿人信息
  2031. if (status == 'reviewer_suggestion') {
  2032. $('.reviewer_suggestion').show();
  2033. $('.review_report').hide();
  2034. $('.author_report').hide();
  2035. $('.reviewer_details').hide();
  2036. let data = result.reviewer;
  2037. let str = '';
  2038. for (let i = 0; i < data.length; i++) {
  2039. str += '<tr>\n' +
  2040. ' <td>'+ data[i].nickname +'</td>\n' +
  2041. ' <td>'+ data[i].affiliation +'</td>\n' +
  2042. ' <td>'+ data[i].comment_num +'</td>\n' +
  2043. ' </tr>';
  2044. }
  2045. $('.reviewer_suggestion_content').html(str);
  2046. }
  2047. // 审稿人意见信息
  2048. if (status == 'review_report') {
  2049. $('.reviewer_suggestion').hide();
  2050. $('.review_report').show();
  2051. $('.author_report').hide();
  2052. $('.reviewer_details').hide();
  2053. let data = result.reviewer;
  2054. let str = '';
  2055. let is_button = '';
  2056. for (let i = 0; i < data.length; i++) {
  2057. if (data.user_id != user_id) {
  2058. if (data[i].is_send == 'hidden') {
  2059. is_button = '<a href="javascript:;" id="send-button" data-id="'+ data[i].comment_id +'">SEND</a>'
  2060. }
  2061. }
  2062. str += '<tr>\n' +
  2063. ' <td>'+ data[i].nickname +'</td>\n' +
  2064. ' <td>'+ data[i].recommendation +'</td>\n' +
  2065. ' <td>'+ data[i].comment +'</td>\n' +
  2066. ' <td>'+ data[i].createtime +'</td>\n' +
  2067. ' <td>\n' +
  2068. ' '+ is_button +' \n' +
  2069. ' </td>\n' +
  2070. ' </tr>';
  2071. }
  2072. $('.review_report_content').html(str);
  2073. }
  2074. // 作者回复意见
  2075. if (status == 'author_report') {
  2076. $('.reviewer_suggestion').hide();
  2077. $('.review_report').hide();
  2078. $('.author_report').show();
  2079. $('.reviewer_details').hide();
  2080. let data = result.author;
  2081. let str = '';
  2082. for (let i = 0; i < data.length; i++) {
  2083. str += '<tr>\n' +
  2084. ' <td>'+ data[i].nickname +'</td>\n' +
  2085. ' <td>'+ data[i].comment +'</td>\n' +
  2086. ' <td>'+ data[i].createtime +'</td>\n' +
  2087. ' </tr>';
  2088. }
  2089. $('.author_report_content').html(str);
  2090. }
  2091. } else {
  2092. Toastr.error(res.msg);
  2093. }
  2094. },
  2095. error: function (xhr, status, error) {
  2096. console.error(error);
  2097. }
  2098. });
  2099. })
  2100. $(document).ready(function () {
  2101. $('.reviewer_details').show();
  2102. });
  2103. setTimeout(function () {
  2104. $('.btn-delete').remove();
  2105. $('.input-group-addon').remove();
  2106. }, 300);
  2107. Form.api.bindevent($("#article-details-form"), function () {
  2108. setTimeout(function () {
  2109. location.href = window.history.go(-1);
  2110. }, 2000);
  2111. });
  2112. },
  2113. conduct_review: function () {
  2114. Form.api.bindevent($("#submit-comments-form"), function () {
  2115. setTimeout(function () {
  2116. location.href = '/index/user/show_reviewed_manuscripts';
  2117. }, 2000);
  2118. });
  2119. },
  2120. submit_conference: function () {
  2121. Form.api.bindevent($("#conference-form"), function () {
  2122. setTimeout(function () {
  2123. location.href = '/p/conference';
  2124. }, 2000);
  2125. }, function (data) {
  2126. $("input[name=captcha]").next(".input-group-addon").find("img").trigger("click");
  2127. });
  2128. },
  2129. conference_participate: function () {
  2130. Form.api.bindevent($("#conference-participate-form"), function () {
  2131. setTimeout(function () {
  2132. location.href = window.history.go(-1);
  2133. }, 2000);
  2134. });
  2135. },
  2136. reviewer_information: function () {
  2137. //为表单绑定事件
  2138. Form.api.bindevent($("#reviewer-information-form"), function (data, ret) {
  2139. }, function (data) {
  2140. });
  2141. },
  2142. become_an_editor: function () {
  2143. let is_radio_checked = false;
  2144. // 点击单选框时触发事件
  2145. $("input[type='radio']").on("click", function () {
  2146. // 判断单选框是否更改
  2147. var isChecked = $("input[type='radio']").is(":checked");
  2148. if (isChecked) {
  2149. is_radio_checked = true;
  2150. }
  2151. });
  2152. // 获取表单内所有单选框
  2153. var radios = $("input[type='radio']");
  2154. // 遍历单选框
  2155. for (let i = 0; i < radios.length; i++) {
  2156. if ($(radios[i]).is(":checked")) {
  2157. is_radio_checked = true;
  2158. }
  2159. }
  2160. // 如果更改了单选框的值则需要提示
  2161. $('#submit-button').click(function () {
  2162. if (is_radio_checked) {
  2163. Layer.confirm("If you have selected a character, the corresponding character attributes will be lost. Do you want to continue?", {
  2164. title: "Tips",
  2165. icon: 0,
  2166. btn: ["Continue", "Cancel"]
  2167. }, function () {
  2168. is_radio_checked = false;
  2169. $('#submit-button').click();
  2170. });
  2171. return false;
  2172. }
  2173. })
  2174. //为表单绑定事件
  2175. Form.api.bindevent($("#become-an-editor-form"), function (data, ret) {
  2176. setTimeout(function () {
  2177. // location.reload();
  2178. }, 2000);
  2179. }, function (data) {
  2180. // $("input[name=captcha]").next(".input-group-btn").find("img").trigger("click");
  2181. });
  2182. },
  2183. review_comments: function () {
  2184. //为表单绑定事件
  2185. Form.api.bindevent($("#review-comments-form"), function (data, ret) {
  2186. setTimeout(function () {
  2187. location.href = '/index/user/display_submitted';
  2188. }, 2000);
  2189. }, function (data) {
  2190. });
  2191. },
  2192. // 发送邮件
  2193. send_email: function () {
  2194. $('#submit-button').prop('disabled', true);
  2195. let mail_smtp_host = $('input[name="mail_smtp_host"]').val();
  2196. let mail_smtp_port = $('input[name="mail_smtp_port"]').val();
  2197. let mail_smtp_user = $('input[name="mail_smtp_user"]').val();
  2198. let mail_smtp_pass = $('input[name="mail_smtp_pass"]').val();
  2199. if (!mail_smtp_host && !mail_smtp_port && !mail_smtp_user && !mail_smtp_pass) {
  2200. Layer.confirm("You have not filled in the email configuration yet, which may cause sending the specified email to fail", {
  2201. title: "Tips",
  2202. icon: 0,
  2203. btn: ["Go to fill out", "Ignore/Cancel"]
  2204. }, function () {
  2205. location.href = '/index/user/profile';
  2206. });
  2207. } else {
  2208. $('#submit-button').prop('disabled', false);
  2209. }
  2210. //为表单绑定事件
  2211. Form.api.bindevent($("#send-email-form"), function (data, ret) {
  2212. setTimeout(function () {
  2213. location.href = '/index/user/inbox';
  2214. }, 2000);
  2215. }, function (data) {
  2216. });
  2217. },
  2218. // 邀请编辑
  2219. invite_editor: function () {
  2220. //为表单绑定事件
  2221. Form.api.bindevent($("#invite-editor-form"), function (data, ret) {
  2222. setTimeout(function () {
  2223. location.href = '/index/user/editing_manuscripts';
  2224. }, 2000);
  2225. }, function (data) {
  2226. });
  2227. },
  2228. special_issue_list: function () {
  2229. // 初始化分页参数
  2230. var currentPage = 1;
  2231. var pageSize = 10;
  2232. $('#c-search').on("keyup", function (e) {
  2233. if (e.keyCode === 13) {
  2234. let keyword = $(this).val();
  2235. // 点击回车后进行搜索
  2236. $.ajax({
  2237. url: 'user/special_issue_list',
  2238. type: 'GET',
  2239. dataType: 'json',
  2240. data: {
  2241. page: currentPage,
  2242. limit: pageSize,
  2243. keyword: keyword,
  2244. },
  2245. success: function (res) {
  2246. if (res.code === 1) {
  2247. $('.article-list').html('');
  2248. var tableData = res.data.data;
  2249. for (var i = 0; i < tableData.length; i++) {
  2250. let rowData = tableData[i];
  2251. let html = '<article class="article-item">\n' +
  2252. ' <div class="media">\n' +
  2253. ' <div class="media-left">\n' +
  2254. ' <a href="special_issue?id=' + rowData.id + '}">\n' +
  2255. ' <div class="embed-responsive embed-responsive-4by3 img-zoom p-0">\n' +
  2256. ' <img src="' + rowData.image + '">\n' +
  2257. ' </div>\n' +
  2258. ' </a>\n' +
  2259. ' </div>\n' +
  2260. ' <div class="media-body">\n' +
  2261. ' <h3 class="article-title">\n' +
  2262. ' <a href="special_issue?id=' + rowData.id + '">' + rowData.issue_name + '</a>\n' +
  2263. ' <div class="article-title-id">\n' +
  2264. ' ID:' + rowData.id + '\n' +
  2265. ' </div>\n' +
  2266. ' </h3>\n' +
  2267. ' <div class="article-intro">\n' +
  2268. ' <span class="label label-info article-intro-label">' + rowData.journal + '</span>\n' +
  2269. ' </div>\n' +
  2270. ' <div class="article-tag">\n' +
  2271. ' <div itemprop="date">Submission date:' + rowData.createtime + '</div>\n' +
  2272. ' </div>\n' +
  2273. ' <div class="article-tag">\n' +
  2274. ' <div class="article-read">\n' +
  2275. ' <a href="special_issue?id=' + rowData.id + '" style="color: #007bff;">\n' +
  2276. ' <img src="__CDN__/assets/img/index/personal_data_icon.png" alt="">\n' +
  2277. ' Edit\n' +
  2278. ' </a>\n' +
  2279. ' </div>\n' +
  2280. ' </div>\n' +
  2281. ' </div>\n' +
  2282. ' </div>\n' +
  2283. ' </article>';
  2284. $('.article-list').append(html);
  2285. }
  2286. }
  2287. },
  2288. error: function (xhr, status, error) {
  2289. console.error(error);
  2290. }
  2291. });
  2292. }
  2293. });
  2294. },
  2295. };
  2296. return Controller;
  2297. });