user.js 124 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945
  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. $(document).on("click", ".btn-forgot", function () {
  21. var id = "resetpwdtpl";
  22. var content = Template(id, {});
  23. Layer.open({
  24. type: 1,
  25. title: __('Reset password'),
  26. area: ["450px", "355px"],
  27. content: content,
  28. success: function (layero) {
  29. var rule = $("#resetpwd-form input[name='captcha']").data("rule");
  30. Form.api.bindevent($("#resetpwd-form", layero), function (data) {
  31. Layer.closeAll();
  32. });
  33. $(layero).on("change", "input[name=type]", function () {
  34. var type = $(this).val();
  35. $("div.form-group[data-type]").addClass("hide");
  36. $("div.form-group[data-type='" + type + "']").removeClass("hide");
  37. $('#resetpwd-form').validator("setField", {
  38. captcha: rule.replace(/remote\((.*)\)/, "remote(" + $(this).data("check-url") + ", event=resetpwd, " + type + ":#" + type + ")")
  39. });
  40. $(".btn-captcha").data("url", $(this).data("send-url")).data("type", type);
  41. });
  42. }
  43. });
  44. });
  45. },
  46. register: function () {
  47. //本地验证未通过时提示
  48. $("#register-form").data("validator-options", validatoroptions);
  49. //为表单绑定事件
  50. Form.api.bindevent($("#register-form"), function (data, ret) {
  51. setTimeout(function () {
  52. location.href = ret.url ? ret.url : "/";
  53. }, 6000);
  54. }, function (data) {
  55. $("input[name=captcha]").next(".input-group-btn").find("img").trigger("click");
  56. });
  57. },
  58. changepwd: function () {
  59. //本地验证未通过时提示
  60. $("#changepwd-form").data("validator-options", validatoroptions);
  61. //为表单绑定事件
  62. Form.api.bindevent($("#changepwd-form"), function (data, ret) {
  63. setTimeout(function () {
  64. location.href = ret.url ? ret.url : "/";
  65. }, 1000);
  66. });
  67. },
  68. profile: function () {
  69. // 给上传按钮添加上传成功事件
  70. $("#faupload-avatar").data("upload-success", function (data) {
  71. var url = Fast.api.cdnurl(data.url);
  72. $(".profile-user-img").prop("src", url);
  73. Toastr.success('Uploaded successful');
  74. });
  75. Form.api.bindevent($("#profile-form"));
  76. $(document).on("click", ".btn-change", function () {
  77. var that = this;
  78. var id = $(this).data("type") + "tpl";
  79. var content = Template(id, {});
  80. Layer.open({
  81. type: 1,
  82. title: "修改",
  83. area: ["400px", "250px"],
  84. content: content,
  85. success: function (layero) {
  86. var form = $("form", layero);
  87. Form.api.bindevent(form, function (data) {
  88. location.reload();
  89. Layer.closeAll();
  90. });
  91. }
  92. });
  93. });
  94. },
  95. attachment: function () {
  96. require(['table'], function (Table) {
  97. // 初始化表格参数配置
  98. Table.api.init({
  99. extend: {
  100. index_url: 'user/attachment',
  101. }
  102. });
  103. var urlArr = [];
  104. var multiple = Fast.api.query('multiple');
  105. multiple = multiple == 'true' ? true : false;
  106. var table = $("#table");
  107. table.on('check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table', function (e, row) {
  108. if (e.type == 'check' || e.type == 'uncheck') {
  109. row = [row];
  110. } else {
  111. urlArr = [];
  112. }
  113. $.each(row, function (i, j) {
  114. if (e.type.indexOf("uncheck") > -1) {
  115. var index = urlArr.indexOf(j.url);
  116. if (index > -1) {
  117. urlArr.splice(index, 1);
  118. }
  119. } else {
  120. urlArr.indexOf(j.url) == -1 && urlArr.push(j.url);
  121. }
  122. });
  123. });
  124. // 初始化表格
  125. table.bootstrapTable({
  126. url: $.fn.bootstrapTable.defaults.extend.index_url,
  127. sortName: 'id',
  128. showToggle: false,
  129. showExport: false,
  130. fixedColumns: true,
  131. fixedRightNumber: 1,
  132. columns: [
  133. [
  134. {field: 'state', checkbox: multiple, visible: multiple, operate: false},
  135. {field: 'id', title: __('Id'), operate: false},
  136. {
  137. field: 'url', title: __('Preview'), formatter: function (value, row, index) {
  138. var html = '';
  139. if (row.mimetype.indexOf("image") > -1) {
  140. html = '<a href="' + row.fullurl + '" target="_blank"><img src="' + row.fullurl + row.thumb_style + '" alt="" style="max-height:60px;max-width:120px"></a>';
  141. } else {
  142. 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>';
  143. }
  144. return '<div style="width:120px;margin:0 auto;text-align:center;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;">' + html + '</div>';
  145. }
  146. },
  147. {
  148. field: 'filename', title: __('Filename'), formatter: function (value, row, index) {
  149. 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>';
  150. }, operate: 'like'
  151. },
  152. {field: 'imagewidth', title: __('Imagewidth'), operate: false},
  153. {field: 'imageheight', title: __('Imageheight'), operate: false},
  154. {field: 'mimetype', title: __('Mimetype'), formatter: Table.api.formatter.search},
  155. {
  156. field: 'createtime',
  157. title: __('Createtime'),
  158. width: 120,
  159. formatter: Table.api.formatter.datetime,
  160. datetimeFormat: 'YYYY-MM-DD',
  161. operate: 'RANGE',
  162. addclass: 'datetimerange',
  163. sortable: true
  164. },
  165. {
  166. field: 'operate', title: __('Operate'), width: 85, events: {
  167. 'click .btn-chooseone': function (e, value, row, index) {
  168. Fast.api.close({url: row.url, multiple: multiple});
  169. },
  170. }, formatter: function () {
  171. return '<a href="javascript:;" class="btn btn-danger btn-chooseone btn-xs"><i class="fa fa-check"></i> ' + __('Choose') + '</a>';
  172. }
  173. }
  174. ]
  175. ]
  176. });
  177. // 选中多个
  178. $(document).on("click", ".btn-choose-multi", function () {
  179. Fast.api.close({url: urlArr.join(","), multiple: multiple});
  180. });
  181. // 为表格绑定事件
  182. Table.api.bindevent(table);
  183. require(['upload'], function (Upload) {
  184. Upload.api.upload($("#toolbar .faupload"), function () {
  185. $(".btn-refresh").trigger("click");
  186. });
  187. });
  188. });
  189. },
  190. inbox: function () {
  191. $(document).ready(function () {
  192. $(document).on('click', '#read-button', function () {
  193. let email_id = $(this).attr('data-id');
  194. $.ajax({
  195. url: '/api/user/read_email', // 后台处理数据请求的接口地址
  196. type: 'POST',
  197. dataType: 'json',
  198. data: {
  199. email_id: email_id,
  200. },
  201. success: function(res) {
  202. if (res.code === 1) {
  203. layer.msg(res.msg, {
  204. icon: 1,
  205. time: 2000,
  206. }, function () {
  207. location.reload();
  208. });
  209. }
  210. },
  211. error: function(xhr, status, error) {
  212. console.error(error);
  213. }
  214. });
  215. });
  216. });
  217. },
  218. unread: function () {
  219. $(document).ready(function () {
  220. $(document).on('click', '#read-button', function () {
  221. let email_id = $(this).attr('data-id');
  222. $.ajax({
  223. url: '/api/user/read_email', // 后台处理数据请求的接口地址
  224. type: 'POST',
  225. dataType: 'json',
  226. data: {
  227. email_id: email_id,
  228. },
  229. success: function(res) {
  230. if (res.code === 1) {
  231. layer.msg(res.msg, {
  232. icon: 1,
  233. time: 2000,
  234. }, function () {
  235. location.reload();
  236. });
  237. }
  238. },
  239. error: function(xhr, status, error) {
  240. console.error(error);
  241. }
  242. });
  243. });
  244. });
  245. },
  246. submit_manuscript: function () {
  247. // 初始化分页参数
  248. var currentPage = 1;
  249. var pageSize = 10;
  250. var index = 0;
  251. var is_next = false;
  252. var button_next = false;
  253. var manuscript_id = $("#c-manuscript_id").val();
  254. var custom_mousemove_x = 490;
  255. var custom_mousemove_y = 350;
  256. $(document).ready(function () {
  257. // 下一步按钮
  258. $('.next-button').on('click', function () {
  259. // 陈述内容可点击下一步按钮
  260. if ($('.statement-content').css('display') == 'block') {
  261. is_next = true;
  262. }
  263. // 推荐内容可点击下一步按钮
  264. if ($('.recommended-content').css('display') == 'block') {
  265. is_next = true;
  266. }
  267. // 判断当前页面的必填项是否都填写
  268. if (index == 0) {
  269. $("#c-manuscript-zip").trigger("validate");
  270. let manuscript_zip = $("#c-manuscript-zip").isValid();
  271. if(!manuscript_zip) {
  272. return true;
  273. }
  274. }
  275. // 手稿信息
  276. if (index == 1) {
  277. $("#c-image").trigger("validate");
  278. $('#c-journal').trigger("validate");
  279. $('#c-article-type').trigger("validate");
  280. $('#c-title').trigger("validate");
  281. $('#c-abstract').trigger("validate");
  282. $("#c-keywords").trigger("validate");
  283. $("#c-number_page").trigger("validate");
  284. let image = $("#c-image").isValid();
  285. let journal = $('#c-journal').isValid();
  286. let article_type = $('#c-article-type').isValid();
  287. let title = $('#c-title').isValid();
  288. let abstract = $("#c-abstract").isValid();
  289. let keywords = $('#c-keywords').isValid();
  290. let number_page = $('#c-number_page').isValid();
  291. if (!image) {
  292. return true;
  293. }
  294. if (!journal) {
  295. return true;
  296. }
  297. if (!article_type) {
  298. return true;
  299. }
  300. if (!title) {
  301. return true;
  302. }
  303. if (!abstract) {
  304. return true;
  305. }
  306. if (!keywords) {
  307. return true;
  308. }
  309. if (!number_page) {
  310. return true;
  311. }
  312. is_next = true;
  313. }
  314. // 作者信息
  315. if (index == 2) {;
  316. for (let i = 0; i < $('.add-author-item').length; i++) {
  317. $("[name='row[author]["+ i +"][email]']").trigger("validate");
  318. $("[name='row[author]["+ i +"][first_name]']").trigger("validate");
  319. $("[name='row[author]["+ i +"][author_affiliation]']").trigger("validate");
  320. $("[name='row[author]["+ i +"][author_country]']").trigger("validate");
  321. let email = $("[name='row[author]["+ i +"][email]']").isValid();
  322. let first_name = $("[name='row[author]["+ i +"][first_name]']").isValid();
  323. let author_affiliation = $("[name='row[author]["+ i +"][author_affiliation]']").isValid();
  324. let author_country = $("[name='row[author]["+ i +"][author_country]']").isValid();
  325. if (!email) {
  326. return true;
  327. }
  328. if (!first_name) {
  329. return true;
  330. }
  331. if (!author_affiliation) {
  332. return true;
  333. }
  334. if (!author_country) {
  335. return true;
  336. }
  337. }
  338. is_next = true;
  339. }
  340. if (is_next || index == 0) {
  341. index++;
  342. $("ul.nav-justified li").removeClass("active");
  343. $("ul.nav-justified .nav-item .nav-content .nav-li-desc").removeClass("finish");
  344. $("ul.nav-justified li:eq(" + index + ")").addClass("active");
  345. $("ul.nav-justified .nav-item:eq(" + index + ") .nav-content .nav-li-desc").addClass('finish');
  346. if (index == 5) {
  347. button_next = true;
  348. // 如果是最后一页操作时显示提交按钮,隐藏下一步按钮
  349. $('.next-button').css('display', 'none');
  350. $('.submit-button').css('display', 'block');
  351. $(".manuscript-content").show();
  352. $(".journal-content").show();
  353. $(".add-author-content").show();
  354. $('.recommended-button').hide();
  355. // 最后一步设置鼠标移动时div的x与y轴的减少距离
  356. custom_mousemove_x = 500;
  357. custom_mousemove_y = 2000;
  358. } else if (index == 4) {
  359. $('.recommended-button').show();
  360. $(".form-item").hide();
  361. $(".form-item:eq(" + index + ")").show();
  362. } else if (index == 2) {
  363. $(".author-button").show();
  364. $(".form-item").hide();
  365. $(".form-item:eq(" + index + ")").show();
  366. $(".recommended-button").hide();
  367. } else {
  368. $('.recommended-button').hide();
  369. $(".author-item").hide();
  370. $('.author-button').hide();
  371. $(".form-item").hide();
  372. $(".form-item:eq(" + index + ")").show();
  373. }
  374. is_next = false;
  375. }
  376. });
  377. // 隐藏所有表单内容
  378. $(".form-item").hide();
  379. // 显示第一个表单内容
  380. $(".form-item:first").show();
  381. // 点击步骤条切换表单
  382. $("ul.nav-justified .nav-item").click(function () {
  383. if (manuscript_id) {
  384. let li_index = $(this).index();
  385. $("ul.nav-justified li").removeClass("active");
  386. $("ul.nav-justified .nav-item .nav-content .nav-li-desc").removeClass("finish");
  387. $("ul.nav-justified li:eq(" + li_index + ")").addClass("active");
  388. $("ul.nav-justified .nav-item:eq(" + li_index + ") .nav-content .nav-li-desc").addClass('finish');
  389. index = li_index;
  390. if (li_index == 5) {
  391. $('.next-button').css('display', 'none');
  392. $('.submit-button').css('display', 'block');
  393. $(".manuscript-content").show();
  394. $(".journal-content").show();
  395. $(".add-author-content").show();
  396. $('.recommended-button').hide();
  397. // 最后一步设置鼠标移动时div的x与y轴的减少距离
  398. custom_mousemove_x = 500;
  399. custom_mousemove_y = 2000;
  400. } else if (li_index == 4) {
  401. $('.recommended-button').show();
  402. $(".form-item").hide();
  403. $(".form-item:eq(" + li_index + ")").show();
  404. $(".author-button").hide();
  405. } else if (li_index == 2) {
  406. $(".author-button").show();
  407. $(".form-item").hide();
  408. $(".form-item:eq(" + li_index + ")").show();
  409. $('.recommended-button').hide();
  410. } else {
  411. $('.recommended-button').hide();
  412. $(".author-item").hide();
  413. $('.author-button').hide();
  414. $(".form-item").hide();
  415. $(".form-item:eq(" + li_index + ")").show();
  416. }
  417. if (li_index != 5) {
  418. $('.next-button').css('display', 'block');
  419. $('.submit-button').css('display', 'none');
  420. }
  421. } else {
  422. if (button_next) {
  423. index = 5;
  424. }
  425. if ($(this).index() <= index) {
  426. let li_index = $(this).index();
  427. $("ul.nav-justified li").removeClass("active");
  428. $("ul.nav-justified .nav-item .nav-content .nav-li-desc").removeClass("finish");
  429. $("ul.nav-justified li:eq(" + li_index + ")").addClass("active");
  430. $("ul.nav-justified .nav-item:eq(" + li_index + ") .nav-content .nav-li-desc").addClass('finish');
  431. index = li_index;
  432. if (li_index == 5) {
  433. $('.next-button').css('display', 'none');
  434. $('.submit-button').css('display', 'block');
  435. $(".manuscript-content").show();
  436. $(".journal-content").show();
  437. $(".add-author-content").show();
  438. $('.recommended-button').hide();
  439. // 最后一步设置鼠标移动时div的x与y轴的减少距离
  440. custom_mousemove_x = 500;
  441. custom_mousemove_y = 2000;
  442. } else if (li_index == 4) {
  443. $('.recommended-button').show();
  444. $(".form-item").hide();
  445. $(".form-item:eq(" + li_index + ")").show();
  446. $(".author-button").hide();
  447. } else if (li_index == 2) {
  448. $(".author-button").show();
  449. $(".form-item").hide();
  450. $(".form-item:eq(" + li_index + ")").show();
  451. $('.recommended-button').hide();
  452. } else {
  453. $('.recommended-button').hide();
  454. $(".author-item").hide();
  455. $('.author-button').hide();
  456. $(".form-item").hide();
  457. $(".form-item:eq(" + li_index + ")").show();
  458. }
  459. if (li_index != 5) {
  460. $('.next-button').css('display', 'block');
  461. $('.submit-button').css('display', 'none');
  462. }
  463. }
  464. }
  465. });
  466. // 删除对应作者信息
  467. $(document).on('click', '.author-delete-button', function () {
  468. let author_content_length = $('.add-author-content').children('.add-author-item').length;
  469. if (author_content_length > 1) {
  470. $(this).parent().parent().remove();
  471. // 删除后更新 input 的 name 值
  472. updateInputNames();
  473. }
  474. });
  475. // 审稿人列表按钮
  476. $(document).on('click', '.reviewer-list-button', function () {
  477. let selected_id = [];
  478. $('.recommended-del').each(function () {
  479. let id = $(this).data('id');
  480. selected_id.push(id);
  481. })
  482. // 清空表格内容和分页区域
  483. $('#modal-table tbody').html('');
  484. $('#modal-pagination').html('');
  485. // 发送 Ajax 请求获取数据并填充表格和分页
  486. $.ajax({
  487. url: 'user/getReviewerList', // 后台处理数据请求的接口地址
  488. type: 'GET',
  489. dataType: 'json',
  490. data: {
  491. page: currentPage,
  492. limit: pageSize
  493. },
  494. success: function(data) {
  495. if (data.code === 1) {
  496. var tableData = data.data.data;
  497. for (var i = 0; i < tableData.length; i++) {
  498. var rowData = tableData[i];
  499. let is_disabled = '';
  500. if (selected_id.includes(rowData.id)) {
  501. is_disabled = 'disabled';
  502. }
  503. var rowHtml = '<tr>' +
  504. '<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>' +
  505. '<td>' + rowData.user.nickname + '</td>' +
  506. '<td>' + rowData.user.email + '</td>' +
  507. '<td>' + rowData.user.first_name + '</td>' +
  508. '<td>' + rowData.user.last_name + '</td>' +
  509. '<td>' + rowData.affiliation + '</td>' +
  510. '<td>' + rowData.field + '</td>' +
  511. '</tr>';
  512. $('#modal-table tbody').append(rowHtml);
  513. }
  514. // 计算总页数
  515. var totalPage = Math.ceil(data.data.total / pageSize);
  516. // 动态生成分页按钮,使用省略号表示更多页码
  517. var pageHtml = '';
  518. if (totalPage <= 7) { // 当总页数小于等于7时,显示所有页码按钮
  519. for (var i = 1; i <= totalPage; i++) {
  520. if (i === currentPage) {
  521. pageHtml += '<a href="#" class="pagination-link active">' + i + '</a>';
  522. } else {
  523. pageHtml += '<a href="#" class="pagination-link">' + i + '</a>';
  524. }
  525. }
  526. } else { // 当总页数大于7时,进行分段显示
  527. if (currentPage <= 4) {
  528. pageHtml += generatePagination(1, 5);
  529. pageHtml += '<span>...</span>';
  530. pageHtml += '<a href="#" class="pagination-link">' + totalPage + '</a>';
  531. } else if (currentPage >= totalPage - 3) {
  532. pageHtml += '<a href="#" class="pagination-link">1</a>';
  533. pageHtml += '<span>...</span>';
  534. pageHtml += generatePagination(totalPage - 4, totalPage);
  535. } else {
  536. pageHtml += '<a href="#" class="pagination-link">1</a>';
  537. pageHtml += '<span>...</span>';
  538. //只需要更改这一行的逻辑即可
  539. var startPage = currentPage - 2;
  540. var endPage = currentPage + 2;
  541. pageHtml += generatePagination(startPage, endPage);
  542. //只需要更改这一行的逻辑即可
  543. }
  544. }
  545. $('#modal-pagination').html(pageHtml);
  546. // 绑定分页按钮点击事件
  547. $('.pagination-link').click(function(e) {
  548. $('.pagination-link').removeClass('active');
  549. $(this).addClass('active');
  550. e.preventDefault();
  551. var page = parseInt($(this).text());
  552. currentPage = page;
  553. // 发送 Ajax 请求获取对应页的数据并填充表格
  554. $.ajax({
  555. url: 'user/getReviewerList',
  556. type: 'GET',
  557. dataType: 'json',
  558. data: {
  559. page: currentPage,
  560. limit: pageSize
  561. },
  562. success: function(data) {
  563. if (data.code === 1) {
  564. var tableData = data.data.data;
  565. $('#modal-table tbody').html('');
  566. for (var i = 0; i < tableData.length; i++) {
  567. var rowData = tableData[i];
  568. let is_disabled = '';
  569. if (selected_id.includes(rowData.id)) {
  570. is_disabled = 'disabled';
  571. }
  572. var rowHtml = '<tr>' +
  573. '<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>' +
  574. '<td>' + rowData.user.nickname + '</td>' +
  575. '<td>' + rowData.user.email + '</td>' +
  576. '<td>' + rowData.user.first_name + '</td>' +
  577. '<td>' + rowData.user.last_name + '</td>' +
  578. '<td>' + rowData.affiliation + '</td>' +
  579. '<td>' + rowData.field + '</td>' +
  580. '</tr>';
  581. $('#modal-table tbody').append(rowHtml);
  582. }
  583. }
  584. },
  585. error: function(xhr, status, error) {
  586. console.error(error);
  587. }
  588. });
  589. });
  590. }
  591. },
  592. error: function(xhr, status, error) {
  593. console.error(error);
  594. }
  595. });
  596. });
  597. // 选择审稿人后确定选择
  598. $(document).on('click', '.add-review-button', function () {
  599. let tr_length = $('#recommended-table tbody tr').length;
  600. var selectedValues = [];
  601. // 使用 jQuery 的 each 函数遍历所有 name 为 option 的复选框
  602. $('input[type=checkbox]:checked').each(function() {
  603. let obj = {};
  604. obj['id'] = $(this).data('id');
  605. obj['name'] = $(this).data('name');
  606. obj['email'] = $(this).data('email');
  607. obj['first_name'] = $(this).data('first');
  608. obj['last_name'] = $(this).data('last');
  609. obj['affiliation'] = $(this).data('affiliation');
  610. obj['field'] = $(this).data('field');
  611. selectedValues.push(obj); // 将选中的值添加到数组中
  612. });
  613. for (var i = 0; i < selectedValues.length; i++) {
  614. var rowData = selectedValues[i];
  615. if (selectedValues.length > 1) {
  616. if (i > 0) {
  617. tr_length++;
  618. }
  619. }
  620. let html = '<input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-name]" value="'+ rowData.name +'">\n' +
  621. ' <input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-email]" value="'+ rowData.email +'">\n' +
  622. ' <input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-first-name]" value="'+ rowData.first_name +'">\n' +
  623. ' <input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-last-name]" value="'+ rowData.last_name +'">\n' +
  624. ' <input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-affiliation]" value="'+ rowData.affiliation +'">\n' +
  625. ' <input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-field]" value="'+ rowData.field +'">';
  626. var rowHtml = '<tr>' +
  627. '<td>' + rowData.name + '</td>' +
  628. '<td>' + rowData.email + '</td>' +
  629. '<td>' + rowData.first_name + '</td>' +
  630. '<td>' + rowData.last_name + '</td>' +
  631. '<td>' + rowData.affiliation + '</td>' +
  632. '<td>' + rowData.field + '</td>' +
  633. '<td class="recommended-del" data-id="'+ rowData.id +'" data-index="'+ tr_length +'"><a href="#">删除</a></td>' +
  634. '</tr>';
  635. $('#recommended-table tbody').append(rowHtml);
  636. $('.reviewer-hidden-content').append(html);
  637. }
  638. $('#myModal').modal('hide');
  639. });
  640. // 自定义添加审稿人按钮
  641. $(document).on('click', '.add-reviewer-button', function () {
  642. let input_index = $('.custom-reviewer-content').children('.custom-reviewer-item').length;
  643. let str = '<div class="custom-reviewer-item">\n' +
  644. ' <div class="form-group">\n' +
  645. ' <label class="control-label col-xs-12 col-sm-11">\n' +
  646. ' </label>\n' +
  647. ' <div class="reviewer-delete-button text-delete-button mb-3 col-xs-12 col-sm-1">\n' +
  648. ' <i class="fa fa-trash"></i> Delete\n' +
  649. ' </div>\n' +
  650. ' </div>\n' +
  651. ' <div class="form-group">\n' +
  652. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  653. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Name\n' +
  654. ' </label>\n' +
  655. ' <div class="col-xs-12 col-sm-10">\n' +
  656. ' <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' +
  657. ' <div class="input-group-addon no-border no-padding">\n' +
  658. ' <span class="msg-box n-right" for="c-add-review-name"></span>\n' +
  659. ' </div>\n' +
  660. ' </div>\n' +
  661. ' </div>\n' +
  662. ' <div class="form-group">\n' +
  663. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  664. ' <span style="color:#ed534b;margin-right: 10px;">*</span>E-mail Address\n' +
  665. ' </label>\n' +
  666. ' <div class="col-xs-12 col-sm-10">\n' +
  667. ' <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' +
  668. ' <div class="input-group-addon no-border no-padding">\n' +
  669. ' <span class="msg-box n-right" for="c-add-review-email"></span>\n' +
  670. ' </div>\n' +
  671. ' </div>\n' +
  672. ' </div>\n' +
  673. '\n' +
  674. ' <div class="form-group">\n' +
  675. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  676. ' <span style="color:#ed534b;margin-right: 10px;">*</span>First Name\n' +
  677. ' </label>\n' +
  678. ' <div class="col-xs-12 col-sm-10">\n' +
  679. ' <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' +
  680. ' <div class="input-group-addon no-border no-padding">\n' +
  681. ' <span class="msg-box n-right" for="c-add-review-first-name"></span>\n' +
  682. ' </div>\n' +
  683. ' </div>\n' +
  684. ' </div>\n' +
  685. '\n' +
  686. ' <div class="form-group">\n' +
  687. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  688. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Last Name\n' +
  689. ' </label>\n' +
  690. ' <div class="col-xs-12 col-sm-10">\n' +
  691. ' <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' +
  692. ' <div class="input-group-addon no-border no-padding">\n' +
  693. ' <span class="msg-box n-right" for="c-add-review-last-name"></span>\n' +
  694. ' </div>\n' +
  695. ' </div>\n' +
  696. ' </div>\n' +
  697. '\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>Affiliation\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-affiliation" name="row[reviewer]['+ input_index +'][reviewer-affiliation]" 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-affiliation"></span>\n' +
  706. ' </div>\n' +
  707. ' </div>\n' +
  708. ' </div>\n' +
  709. '\n' +
  710. ' <div class="form-group">\n' +
  711. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  712. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Field\n' +
  713. ' </label>\n' +
  714. ' <div class="col-xs-12 col-sm-10">\n' +
  715. ' <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' +
  716. ' <div class="input-group-addon no-border no-padding">\n' +
  717. ' <span class="msg-box n-right" for="c-add-review-field"></span>\n' +
  718. ' </div>\n' +
  719. ' </div>\n' +
  720. ' </div>\n' +
  721. ' </div>';
  722. $('.custom-reviewer-content').append(str);
  723. updateReviewerInputNames();
  724. });
  725. // 排序input 的 name 值
  726. var updateReviewerInputNames = function () {
  727. // 遍历所有的div元素
  728. $(".custom-reviewer-item").each(function (index) {
  729. var name_input = $(this).find('input[id="c-add-review-name"]');
  730. var email_input = $(this).find('input[id="c-add-review-email"]');
  731. var first_name_input = $(this).find('input[id="c-add-review-first-name"]');
  732. var last_name_input = $(this).find('input[id="c-add-review-last-name"]');
  733. var affiliation_input = $(this).find('input[id="c-add-review-affiliation"]');
  734. var field_input = $(this).find('input[id="c-add-review-field"]');
  735. name_input.attr('name', "row[reviewer]["+ index +"][reviewer-name]");
  736. email_input.attr('name', "row[reviewer]["+ index +"][reviewer-email]");
  737. first_name_input.attr('name', "row[reviewer]["+ index +"][reviewer-first-name]");
  738. last_name_input.attr('name', "row[reviewer]["+ index +"][reviewer-last-name]");
  739. affiliation_input.attr('name', "row[reviewer]["+ index +"][reviewer-affiliation]");
  740. field_input.attr('name', "row[reviewer]["+ index +"][reviewer-field]");
  741. });
  742. };
  743. // 删除对应的审稿人信息
  744. $(document).on('click', '.reviewer-delete-button', function () {
  745. let reviewer_content_length = $('.custom-reviewer-content').children('.custom-reviewer-item').length;
  746. if (reviewer_content_length > 1) {
  747. $(this).parent().parent().remove();
  748. // 删除后更新 input 的 name 值
  749. updateReviewerInputNames();
  750. }
  751. });
  752. // 自定义审稿人信息提交按钮操作
  753. $(document).on('click', '.add-reviewer-submit', function () {
  754. let tr_length = $('#recommended-table tbody tr').length;
  755. let key = $(".custom-reviewer-item").length;
  756. let addReviewerInputValue = [];
  757. for (let i = 0; i < key; i++) {
  758. let obj = {};
  759. obj['name'] = $(this).parent().parent().find("input[name='row[reviewer]["+ i +"][reviewer-name]']").val();
  760. obj['email'] = $(this).parent().parent().find("input[name='row[reviewer]["+ i +"][reviewer-email]']").val();
  761. obj['first_name'] = $(this).parent().parent().find("input[name='row[reviewer]["+ i +"][reviewer-first-name]']").val();
  762. obj['last_name'] = $(this).parent().parent().find("input[name='row[reviewer]["+ i +"][reviewer-last-name]']").val();
  763. obj['affiliation'] = $(this).parent().parent().find("input[name='row[reviewer]["+ i +"][reviewer-affiliation]']").val();
  764. obj['field'] = $(this).parent().parent().find("input[name='row[reviewer]["+ i +"][reviewer-field]']").val();
  765. addReviewerInputValue.push(obj);
  766. }
  767. for (var i = 0; i < addReviewerInputValue.length; i++) {
  768. var rowData = addReviewerInputValue[i];
  769. if (addReviewerInputValue.length > 1) {
  770. if (i > 0) {
  771. tr_length++;
  772. }
  773. }
  774. let html = '<input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-name]" value="'+ rowData.name +'">\n' +
  775. ' <input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-email]" value="'+ rowData.email +'">\n' +
  776. ' <input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-first-name]" value="'+ rowData.first_name +'">\n' +
  777. ' <input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-last-name]" value="'+ rowData.last_name +'">\n' +
  778. ' <input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-affiliation]" value="'+ rowData.affiliation +'">\n' +
  779. ' <input type="hidden" name="row[reviewer]['+ tr_length +'][reviewer-field]" value="'+ rowData.field +'">';
  780. var rowHtml = '<tr>' +
  781. '<td>' + rowData.name + '</td>' +
  782. '<td>' + rowData.email + '</td>' +
  783. '<td>' + rowData.first_name + '</td>' +
  784. '<td>' + rowData.last_name + '</td>' +
  785. '<td>' + rowData.affiliation + '</td>' +
  786. '<td>' + rowData.field + '</td>' +
  787. '<td class="recommended-del" data-index="'+ tr_length +'"><a href="#">删除</a></td>' +
  788. '</tr>';
  789. $('#recommended-table tbody').append(rowHtml);
  790. $('.reviewer-hidden-content').append(html);
  791. }
  792. // 清空已填内容
  793. $('.custom-reviewer-content').html('');
  794. $('.custom-reviewer-content').append('<div class="custom-reviewer-item">\n' +
  795. ' <div class="form-group">\n' +
  796. ' <label class="control-label col-xs-12 col-sm-11">\n' +
  797. ' </label>\n' +
  798. ' <div class="reviewer-delete-button text-delete-button mb-3 col-xs-12 col-sm-1">\n' +
  799. ' <i class="fa fa-trash"></i> Delete\n' +
  800. ' </div>\n' +
  801. ' </div>\n' +
  802. ' <div class="form-group">\n' +
  803. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  804. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Name\n' +
  805. ' </label>\n' +
  806. ' <div class="col-xs-12 col-sm-10">\n' +
  807. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-name" name="row[reviewer][0][reviewer-name]" placeholder="Type here...">\n' +
  808. ' <div class="input-group-addon no-border no-padding">\n' +
  809. ' <span class="msg-box n-right" for="c-add-review-name"></span>\n' +
  810. ' </div>\n' +
  811. ' </div>\n' +
  812. ' </div>\n' +
  813. ' <div class="form-group">\n' +
  814. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  815. ' <span style="color:#ed534b;margin-right: 10px;">*</span>E-mail Address\n' +
  816. ' </label>\n' +
  817. ' <div class="col-xs-12 col-sm-10">\n' +
  818. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-email" name="row[reviewer][0][reviewer-email]" placeholder="Type here...">\n' +
  819. ' <div class="input-group-addon no-border no-padding">\n' +
  820. ' <span class="msg-box n-right" for="c-add-review-email"></span>\n' +
  821. ' </div>\n' +
  822. ' </div>\n' +
  823. ' </div>\n' +
  824. '\n' +
  825. ' <div class="form-group">\n' +
  826. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  827. ' <span style="color:#ed534b;margin-right: 10px;">*</span>First Name\n' +
  828. ' </label>\n' +
  829. ' <div class="col-xs-12 col-sm-10">\n' +
  830. ' <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' +
  831. ' <div class="input-group-addon no-border no-padding">\n' +
  832. ' <span class="msg-box n-right" for="c-add-review-first-name"></span>\n' +
  833. ' </div>\n' +
  834. ' </div>\n' +
  835. ' </div>\n' +
  836. '\n' +
  837. ' <div class="form-group">\n' +
  838. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  839. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Last Name\n' +
  840. ' </label>\n' +
  841. ' <div class="col-xs-12 col-sm-10">\n' +
  842. ' <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' +
  843. ' <div class="input-group-addon no-border no-padding">\n' +
  844. ' <span class="msg-box n-right" for="c-add-review-last-name"></span>\n' +
  845. ' </div>\n' +
  846. ' </div>\n' +
  847. ' </div>\n' +
  848. '\n' +
  849. ' <div class="form-group">\n' +
  850. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  851. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Affiliation\n' +
  852. ' </label>\n' +
  853. ' <div class="col-xs-12 col-sm-10">\n' +
  854. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-affiliation" name="row[reviewer][0][reviewer-affiliation]" placeholder="Type here...">\n' +
  855. ' <div class="input-group-addon no-border no-padding">\n' +
  856. ' <span class="msg-box n-right" for="c-add-review-affiliation"></span>\n' +
  857. ' </div>\n' +
  858. ' </div>\n' +
  859. ' </div>\n' +
  860. '\n' +
  861. ' <div class="form-group">\n' +
  862. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  863. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Field\n' +
  864. ' </label>\n' +
  865. ' <div class="col-xs-12 col-sm-10">\n' +
  866. ' <input type="text" data-rule="required" class="form-control" id="c-add-review-field" name="row[reviewer][0][reviewer-field]" placeholder="Type here...">\n' +
  867. ' <div class="input-group-addon no-border no-padding">\n' +
  868. ' <span class="msg-box n-right" for="c-add-review-field"></span>\n' +
  869. ' </div>\n' +
  870. ' </div>\n' +
  871. ' </div>\n' +
  872. ' </div>');
  873. $('#addReviewModal').modal('hide');
  874. });
  875. // 删除已选中的审稿人
  876. $(document).on('click', '.recommended-del', function () {
  877. let index = $(this).data('index');
  878. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\['+ index +'\\]\\[reviewer-name\\]"]').remove();
  879. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\['+ index +'\\]\\[reviewer-email\\]"]').remove();
  880. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\['+ index +'\\]\\[reviewer-first-name\\]"]').remove();
  881. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\['+ index +'\\]\\[reviewer-last-name\\]"]').remove();
  882. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\['+ index +'\\]\\[reviewer-affiliation\\]"]').remove();
  883. $('.reviewer-hidden-content').find('input[name="row[reviewer]\\['+ index +'\\]\\[reviewer-field\\]"]').remove();
  884. $(this).parent().remove();
  885. // 重新排列键值
  886. });
  887. // 辅助函数:生成指定起始页码和结束页码的分页按钮HTML代码
  888. function generatePagination(startPage, endPage) {
  889. var pageHtml = '';
  890. for (var i = startPage; i <= endPage; i++) {
  891. if (i === currentPage) {
  892. pageHtml += '<a href="#" class="pagination-link active">' + i + '</a>';
  893. } else {
  894. pageHtml += '<a href="#" class="pagination-link">' + i + '</a>';
  895. }
  896. }
  897. return pageHtml;
  898. }
  899. });
  900. // 添加作者
  901. $('.author-button').click(function () {
  902. let input_index = $('.add-author-content').children('.add-author-item').length;
  903. // let input_index = author_content_length - 1;
  904. // 克隆作者信息
  905. let str = `<div class="add-author-item div">
  906. <hr style="background: #B8B8B8;">
  907. <div class="form-group author-content-button-item">
  908. <div class="author-delete-button text-delete-button">
  909. <i class="fa fa-trash"></i> Delete
  910. </div>
  911. </div>
  912. <div class="form-group">
  913. <label class="control-label col-xs-12 col-sm-4">
  914. <span style="color:#ed534b;margin-right: 10px;">*</span>Institution E-Mail Address:
  915. </label>
  916. <div class="col-xs-12 col-sm-8">
  917. <input type="text" data-rule="required" class="form-control" id="c-email" name="row[author][${input_index}][email]" value="" placeholder="Type here...">
  918. <div class="input-group-addon no-border no-padding">
  919. <span class="msg-box n-right" for="c-email"></span>
  920. </div>
  921. </div>
  922. </div>
  923. <div class="form-group">
  924. <label class="control-label col-xs-12 col-sm-4">
  925. <span style="color:#ed534b;margin-right: 10px;">*</span>First Name:
  926. </label>
  927. <div class="col-xs-12 col-sm-8">
  928. <input type="text" data-rule="required" class="form-control" id="c-first-name" name="row[author][${input_index}][first_name]" value="" placeholder="Type here...">
  929. <div class="input-group-addon no-border no-padding">
  930. <span class="msg-box n-right" for="c-first_name"></span>
  931. </div>
  932. </div>
  933. </div>
  934. <div class="form-group">
  935. <label class="control-label col-xs-12 col-sm-4">
  936. Middle Name:
  937. </label>
  938. <div class="col-xs-12 col-sm-8">
  939. <input type="text" class="form-control" id="c-middle-name" name="row[author][${input_index}][middle_name]" value="" placeholder="Type here...">
  940. </div>
  941. </div>
  942. <div class="form-group">
  943. <label class="control-label col-xs-12 col-sm-4">
  944. Last Name:
  945. </label>
  946. <div class="col-xs-12 col-sm-8">
  947. <input type="text" class="form-control" id="c-last-name" name="row[author][${input_index}][last_name]" value="" placeholder="Type here...">
  948. </div>
  949. </div>
  950. <div class="form-group">
  951. <label class="control-label col-xs-12 col-sm-4">
  952. <span style="color:#ed534b;margin-right: 10px;">*</span>Display E-Mail:
  953. </label>
  954. <div class="col-xs-12 col-sm-8">
  955. <div class="input-group mb-3">
  956. <div class="radio radio-inline pl-0">
  957. <label for="c-display-e-mail-yes-${input_index}"><input data-rule="required" id="c-display-e-mail-yes-${input_index}" name="row[author][${input_index}][display_email]" type="radio" value="yes" data-tip="" checked/>Yes</label>
  958. <label for="c-display-e-mail-no-${input_index}"><input data-rule="required" id="c-display-e-mail-no-${input_index}" name="row[author][${input_index}][display_email]" type="radio" value="no" data-tip="" />No</label>
  959. </div>
  960. </div>
  961. </div>
  962. </div>
  963. <div class="form-group">
  964. <label class="control-label col-xs-12 col-sm-4">
  965. <span style="color:#ed534b;margin-right: 10px;">*</span>Correspondsing Author:
  966. </label>
  967. <div class="col-xs-12 col-sm-8">
  968. <div class="input-group mb-3">
  969. <div class="radio radio-inline pl-0">
  970. <label for="c-correspondsing-author-yes-${input_index}"><input data-rule="required" id="c-correspondsing-author-yes-${input_index}" name="row[author][${input_index}][correspondsing_author]" type="radio" value="yes" checked/>Yes</label>
  971. <label for="c-correspondsing-author-no-${input_index}"><input data-rule="required" id="c-correspondsing-author-no-${input_index}" name="row[author][${input_index}][correspondsing_author]" type="radio" value="no" />No</label>
  972. </div>
  973. </div>
  974. </div>
  975. </div>
  976. <div class="form-group">
  977. <label class="control-label col-xs-12 col-sm-4">
  978. <span style="color:#ed534b;margin-right: 10px;">*</span>Affiliation:
  979. </label>
  980. <div class="col-xs-12 col-sm-8">
  981. <input data-rule="required" type="text" class="form-control" id="c-author-affiliation" name="row[author][${input_index}][author_affiliation]" value="" placeholder="Type here...">
  982. <div class="input-group-addon no-border no-padding">
  983. <span class="msg-box n-right" for="c-author-affiliation"></span>
  984. </div>
  985. </div>
  986. </div>
  987. <div class="form-group">
  988. <label class="control-label col-xs-12 col-sm-4">
  989. <span style="color:#ed534b;margin-right: 10px;">*</span>Country / Temitory:
  990. </label>
  991. <div class="col-xs-12 col-sm-8">
  992. <select id="c-author_country" data-rule="required" class="form-control" name="row[author][${input_index}][author_country]">
  993. <option value="">Please select</option>
  994. <option value="china">china</option>
  995. <option value="japan">japan</option>
  996. <option value="england">england</option>
  997. </select>
  998. </div>
  999. </div>
  1000. </div>`;
  1001. $('.add-author-content').append(str);
  1002. // 更新 name 值为按顺序增加的索引值
  1003. updateInputNames();
  1004. });
  1005. // 排序input 的 name 值
  1006. function updateInputNames () {
  1007. drags('add-author-item', 'div-dash', 'dash');
  1008. // 遍历所有的div元素
  1009. $(".add-author-item").each(function (index) {
  1010. var email_input = $(this).find('input[id="c-email"]');
  1011. var first_name_input = $(this).find('input[id="c-first-name"]');
  1012. var middle_name_input = $(this).find('input[id="c-middle-name"]');
  1013. var last_name_input = $(this).find('input[id="c-last-name"]');
  1014. var author_affiliation_input = $(this).find('input[id="c-author-affiliation"]');
  1015. var display_email_yes_radio = $(this).find("input[type=radio][id=c-display-e-mail-yes]");
  1016. var display_email_no_radio = $(this).find("input[type=radio][id=c-display-e-mail-no]");
  1017. var correspondsing_author_yes_radio = $(this).find("input[type=radio][id=c-correspondsing-author-yes]");
  1018. var correspondsing_author_no_radio = $(this).find("input[type=radio][id=c-correspondsing-author-no]");
  1019. var select = $(this).find("select");
  1020. email_input.attr('name', "row[author]["+ index +"][email]");
  1021. first_name_input.attr('name', "row[author]["+ index +"][first_name]");
  1022. middle_name_input.attr('name', "row[author]["+ index +"][middle_name]");
  1023. last_name_input.attr('name', "row[author]["+ index +"][last_name]");
  1024. author_affiliation_input.attr('name', "row[author]["+ index +"][author_affiliation]");
  1025. display_email_yes_radio.attr('name', "row[author]["+ index +"][display_email]");
  1026. display_email_no_radio.attr('name', "row[author]["+ index +"][display_email]");
  1027. correspondsing_author_yes_radio.attr('name', "row[author]["+ index +"][correspondsing_author]");
  1028. correspondsing_author_no_radio.attr('name', "row[author]["+ index +"][correspondsing_author]");
  1029. select.attr('name', "row[author]["+ index +"][author_country]");
  1030. });
  1031. };
  1032. // 拖拽初始化
  1033. drags('add-author-item', 'div-dash', 'dash');
  1034. // 拖拽方法
  1035. function drags(name, name2, name3) {
  1036. var range = {x: 0, y: 0}; // 鼠标元素偏移量
  1037. var lastPos = {x: 0, y: 0, x1: 0, y1: 0}; // 拖拽对象的四个坐标
  1038. var tarPos = {x: 0, y: 0, x1: 0, y1: 0}; // 目标元素对象的坐标初始化
  1039. var thidDiv = null, move = false, choose = false; // 拖拽对象 拖拽状态 选中状态
  1040. //拖拽对象的索引、高度、的初始化。
  1041. var thidDivWidth = 0, thidDivHeight = 0, thidDivHalfW = 0, thidDivHalfH = 0, tarFirstX = 0, tarFirstY = 0;
  1042. var tarDiv = null, tarFirst, tempDiv; // 要插入的目标元素的对象, 临时的虚线对象
  1043. var initPos = {x: 0, y: 0}; // 记录拖拽元素初始鼠标元素偏移量
  1044. // 当鼠标按下时
  1045. $('.' + name).on('mousedown', function (event) {
  1046. console.log(event.target.tagName);
  1047. // 判断是否点击了 input 元素
  1048. if (event.target.tagName === 'INPUT') {
  1049. return;
  1050. }
  1051. if (event.target.tagName === 'SELECT') {
  1052. return;
  1053. }
  1054. if (event.target.tagName === 'LABEL') {
  1055. return;
  1056. }
  1057. // 判断如果鼠标是删除按钮则终止拖拽
  1058. let class_name = event.target.className.split(" ");
  1059. if (class_name[0] == 'author-delete-button') {
  1060. return;
  1061. }
  1062. choose = true;
  1063. // 拖拽对象
  1064. thidDiv = $(this);
  1065. // 记录拖拽元素初始位置
  1066. initPos.x = thidDiv.offset().left;
  1067. initPos.y = thidDiv.offset().top;
  1068. // 鼠标元素相对偏移量
  1069. range.x = event.pageX - thidDiv.offset().left;
  1070. range.y = event.pageY - thidDiv.offset().top;
  1071. thidDivWidth = thidDiv.width();
  1072. thidDivHeight = thidDiv.height();
  1073. thidDivHalfW = thidDivWidth / 2;
  1074. thidDivHalfH = thidDivHeight / 2;
  1075. thidDiv.attr("class", name2);
  1076. thidDiv.css({
  1077. left: (event.pageX + range.x) + 'px',
  1078. top: (event.pageY + range.y) + 'px',
  1079. });
  1080. // 创建新元素 插入拖拽元素之前的位置(虚线框)
  1081. $("<div class='" + name3 + "' style='float: right;'></div>").insertBefore(thidDiv);
  1082. tempDiv = $("." + name3);
  1083. });
  1084. // 当鼠标抬起时
  1085. $(document).on('mouseup', function (event) {
  1086. if (!choose) {
  1087. return false;
  1088. }
  1089. if (!move) {
  1090. thidDiv.attr("class", name);
  1091. tempDiv.remove(); // 删除新建的虚线div
  1092. choose = false;
  1093. return false;
  1094. }
  1095. thidDiv.insertBefore(tempDiv); // 拖拽元素插入到 虚线div的位置上
  1096. thidDiv.attr("class", name); //恢复对象的初始样式
  1097. tempDiv.remove(); // 删除新建的虚线div
  1098. move = false;
  1099. choose = false;
  1100. // 当鼠标移动时
  1101. }).on('mousemove', function (event) {
  1102. if (!choose) return false;
  1103. move = true;
  1104. lastPos.x = event.pageX - range.x;
  1105. lastPos.y = event.pageY - range.y;
  1106. lastPos.x1 = lastPos.x + thidDivWidth;
  1107. lastPos.y1 = lastPos.y + thidDivHeight;
  1108. // 拖拽元素随鼠标移动
  1109. thidDiv.css({
  1110. left: lastPos.x - custom_mousemove_x + 'px',
  1111. top: lastPos.y - custom_mousemove_y + 'px'
  1112. });
  1113. // 拖拽元素随鼠标移动 查找插入目标元素
  1114. var $main = $('.' + name); // 局部变量:按照重新排列过的顺序 再次获取 各个元素的坐标,
  1115. $main.each(function () {
  1116. tarDiv = $(this);
  1117. tarPos.x = tarDiv.offset().left;
  1118. tarPos.y = tarDiv.offset().top;
  1119. tarPos.x1 = tarPos.x + tarDiv.width() / 2;
  1120. tarPos.y1 = tarPos.y + tarDiv.height() / 2;
  1121. tarFirst = $main.eq(0); // 获得第一个元素
  1122. tarFirstX = tarFirst.offset().left + thidDivHalfW; // 第一个元素对象的中心纵坐标
  1123. tarFirstY = tarFirst.offset().top + thidDivHalfH; // 第一个元素对象的中心横坐标
  1124. // 根据 拖拽对象x坐标 与 目标元素对象x坐标 对比,来显示 虚线div 在节点前、后出现的位置
  1125. if (lastPos.x > tarPos.x) {
  1126. // 判断要插入目标元素的 坐标后, 直接插入
  1127. if (lastPos.x >= tarPos.x - thidDivHalfW && lastPos.x1 >= tarPos.x1 && lastPos.y >= tarPos.y - thidDivHalfH && lastPos.y1 >= tarPos.y1) {
  1128. tempDiv.insertAfter(tarDiv);
  1129. }
  1130. //拖拽对象 移动到第一个位置
  1131. if (lastPos.x <= tarFirstX && lastPos.y <= tarFirstY) {
  1132. tempDiv.insertBefore(tarFirst);
  1133. }
  1134. } else {
  1135. //拖拽对象 移动到第一个位置
  1136. if (lastPos.x <= tarFirstX && lastPos.y <= tarFirstY) {
  1137. tempDiv.insertBefore(tarFirst);
  1138. }
  1139. // 判断要插入目标元素的 坐标后, 直接插入
  1140. if (lastPos.x >= tarPos.x - thidDivHalfW && lastPos.x1 >= tarPos.x1 && lastPos.y >= tarPos.y - thidDivHalfH && lastPos.y1 >= tarPos.y1) {
  1141. tempDiv.insertAfter(tarDiv);
  1142. }
  1143. }
  1144. });
  1145. });
  1146. }
  1147. $.fn.serializeObject = function() {
  1148. var obj = {};
  1149. var arrayTmp = this.serializeArray();
  1150. $.each(arrayTmp, function() {
  1151. if (obj[this.name]) {
  1152. if (!obj[this.name].push) {
  1153. obj[this.name] = [ obj[this.name] ];
  1154. }
  1155. obj[this.name].push(this.value || '');
  1156. } else {
  1157. obj[this.name] = this.value || '';
  1158. }
  1159. });
  1160. return obj;
  1161. };
  1162. $(document).on('mouseup', function () {
  1163. let values = $('#submit-manuscript-form').serializeObject();
  1164. $.ajax({
  1165. url: '/api/user/incomplete_submit',
  1166. type: 'POST',
  1167. dataType: 'json',
  1168. data: values,
  1169. success: function(res) {
  1170. // 如果保存了就代表接下来都是修改,所以记录返回的id
  1171. if (res.code == 1) {
  1172. $('#c-manuscript_id').val(res.data);
  1173. }
  1174. },
  1175. error: function(xhr, status, error) {
  1176. top.window.Toastr.error('Save failed');
  1177. }
  1178. });
  1179. })
  1180. Form.api.bindevent($("#submit-manuscript-form"), function () {
  1181. setTimeout(function () {
  1182. location.href = "/index/user/display_submitted";
  1183. }, 2000);
  1184. });
  1185. },
  1186. invite_reviewers: function () {
  1187. updateHidden();
  1188. // 全选
  1189. $('#reviewer-table').on('click', '.chk', function () {
  1190. var checkedStatus = this.checked;
  1191. $('#reviewer-table .son-chk').prop('checked', checkedStatus);
  1192. updateHidden()
  1193. });
  1194. $('#reviewer-table').on('click', '.son-chk', function () {
  1195. updateHidden();
  1196. })
  1197. function updateHidden(){
  1198. var checkedVals = [];
  1199. $('.son-chk:checked').each(function(){
  1200. let obj = {};
  1201. obj['id'] = $(this).data('id');
  1202. obj['user_id'] = $(this).data('user-id');
  1203. obj['name'] = $(this).data('name');
  1204. obj['education'] = $(this).data('education');
  1205. obj['affiliation'] = $(this).data('affiliation');
  1206. obj['field'] = $(this).data('field');
  1207. checkedVals.push(obj);
  1208. });
  1209. $('#submit-invite-reviewers-form .reviewer-content').empty();
  1210. console.log(checkedVals);
  1211. $.each(checkedVals, function(i, val){
  1212. var str = '<input type="hidden" name="row[reviewer]['+ i +'][id]" value="'+ val.id +'">\n' +
  1213. '<input type="hidden" name="row[reviewer]['+ i +'][user_id]" value="'+ val.user_id +'">\n' +
  1214. ' <input type="hidden" name="row[reviewer]['+ i +'][name]" value="'+ val.name +'">\n' +
  1215. ' <input type="hidden" name="row[reviewer]['+ i +'][education]" value="'+ val.education +'">\n' +
  1216. ' <input type="hidden" name="row[reviewer]['+ i +'][affiliation]" value="'+ val.affiliation +'">\n' +
  1217. ' <input type="hidden" name="row[reviewer]['+ i +'][field]" value="'+ val.field +'">';
  1218. ' <input type="hidden" name="row[reviewer]['+ i +'][journal]" value="'+ val.journal +'">';
  1219. $('#submit-invite-reviewers-form .reviewer-content').append(str);
  1220. });
  1221. }
  1222. // 点击按钮后获取选择
  1223. Form.api.bindevent($("#submit-invite-reviewers-form"), function () {
  1224. // 清理缓存
  1225. localStorage.removeItem('selectedTableVals');
  1226. // setTimeout(function () {
  1227. // location.href = "index/user/reviewer_information";
  1228. // }, 2000);
  1229. });
  1230. },
  1231. handing_suggestions: function () {
  1232. Form.api.bindevent($("#submit-comments-form"), function () {
  1233. setTimeout(function () {
  1234. location.href = "index/user/reviewer_information";
  1235. }, 2000);
  1236. });
  1237. },
  1238. display_submitted: function () {
  1239. // 初始化分页参数
  1240. var currentPage = 1;
  1241. var pageSize = 10;
  1242. $('#c-search').on("keyup", function (e) {
  1243. if (e.keyCode === 13) {
  1244. let keyword = $(this).val();
  1245. // 点击回车后进行搜索
  1246. $.ajax({
  1247. url: 'user/display_submitted',
  1248. type: 'GET',
  1249. dataType: 'json',
  1250. data: {
  1251. page: currentPage,
  1252. limit: pageSize,
  1253. keyword: keyword,
  1254. },
  1255. success: function(res) {
  1256. if (res.code === 1) {
  1257. if (res.data.total > 0) {
  1258. $('.article-list').html('');
  1259. var tableData = res.data.data;
  1260. for (var i = 0; i < tableData.length; i++) {
  1261. let rowData = tableData[i];
  1262. let html = '<article class="article-item">\n' +
  1263. ' <div class="media">\n' +
  1264. ' <div class="media-left">\n' +
  1265. ' <a href="submit_manuscript?id='+ rowData.id +'">\n' +
  1266. ' <div class="embed-responsive embed-responsive-4by3 img-zoom">\n' +
  1267. ' <img src="'+ rowData.image +'">\n' +
  1268. ' </div>\n' +
  1269. ' </a>\n' +
  1270. ' </div>\n' +
  1271. ' <div class="media-body">\n' +
  1272. ' <h3 class="article-title">\n' +
  1273. ' <a href="submit_manuscript?id='+ rowData.id +'">'+ rowData.title +'</a>\n' +
  1274. ' <div class="article-title-id">\n' +
  1275. ' ID:'+ rowData.id +'\n' +
  1276. ' </div>\n' +
  1277. ' </h3>\n' +
  1278. ' <div class="article-intro">\n' +
  1279. ' <span class="label label-primary article-intro-label">Open Access</span>\n' +
  1280. ' <span class="label label-success article-intro-label">Feature Paper</span>\n' +
  1281. ' <span class="label label-info article-intro-label">Review</span>\n' +
  1282. ' </div>\n' +
  1283. ' <div class="article-tag">\n' +
  1284. ' <span itemprop="date">Submission date:'+ rowData.createtime +'</span>\n' +
  1285. ' <span class="article-read">\n' +
  1286. ' <a href="submit_manuscript?id='+ rowData.id +'" style="color: #007bff;" target="_blank">\n' +
  1287. ' <img src="__CDN__/assets/img/index/personal_data_icon.png" alt="">\n' +
  1288. ' Edit\n' +
  1289. ' </a>\n' +
  1290. ' <span/>\n' +
  1291. ' </div>\n' +
  1292. ' </div>\n' +
  1293. ' </div>\n' +
  1294. ' </article>';
  1295. $('.article-list').append(html);
  1296. }
  1297. }
  1298. }
  1299. },
  1300. error: function(xhr, status, error) {
  1301. console.error(error);
  1302. }
  1303. });
  1304. }
  1305. });
  1306. },
  1307. editing_manuscripts: function () {
  1308. // 初始化分页参数
  1309. var currentPage = 1;
  1310. var pageSize = 10;
  1311. var status = $('#editor_manuscripts_status').val();
  1312. $('#c-search').on("keyup", function (e) {
  1313. if (e.keyCode === 13) {
  1314. let keyword = $(this).val();
  1315. // 点击回车后进行搜索
  1316. $.ajax({
  1317. url: 'user/editing_manuscripts',
  1318. type: 'GET',
  1319. dataType: 'json',
  1320. data: {
  1321. page: currentPage,
  1322. limit: pageSize,
  1323. keyword: keyword,
  1324. status: status,
  1325. },
  1326. success: function(res) {
  1327. if (res.code === 1) {
  1328. if (res.data.total > 0) {
  1329. $('.article-list').html('');
  1330. var tableData = res.data.data;
  1331. for (var i = 0; i < tableData.length; i++) {
  1332. let rowData = tableData[i];
  1333. let html = `<article class="article-item">
  1334. <div class="media">
  1335. <div class="media-left">
  1336. <a href="article_details?id=${rowData.id}&type=editor">
  1337. <div class="embed-responsive embed-responsive-4by3 img-zoom p-0">
  1338. <img src="${rowData.image}">
  1339. </div>
  1340. </a>
  1341. </div>
  1342. <div class="media-body">
  1343. <h3 class="article-title">
  1344. <a href="article_details?id=${rowData.id}&type=editor">${rowData.title}</a>
  1345. </h3>
  1346. <div class="article-tag">
  1347. <span itemprop="date">Submission date:${rowData.createtime}</span>
  1348. <div class="article-title-id">
  1349. ID:${rowData.id}
  1350. </div>
  1351. </div>
  1352. <div class="article-intro">
  1353. <span class="label label-primary article-intro-label">Open Access</span>
  1354. <span class="label label-success article-intro-label">Feature Paper</span>
  1355. <span class="label label-info article-intro-label">Review</span>
  1356. </div>
  1357. <div class="article-tag">
  1358. <div class="article-read">
  1359. <a href="handing_suggestions.html?id=${rowData.id}&type=editor" style="color: #007bff;" target="_blank">
  1360. <img src="/assets/img/index/suggestions_button.png" alt="">
  1361. Submit handing suggestions
  1362. </a>
  1363. </div>
  1364. <div class="article-read">
  1365. <a href="article_details.html?id=${rowData.id}&type=editor" style="color: #007bff;" target="_blank">
  1366. <img src="/assets/img/index/view_button.png" alt="">
  1367. View
  1368. </a>
  1369. </div>
  1370. <div class="article-read">
  1371. <a href="invite_reviewers.html?id=${rowData.id}&type=editor" style="color: #007bff;" target="_blank">
  1372. <img src="/assets/img/index/editor_button.png" alt="">
  1373. Invite Reviewers
  1374. </a>
  1375. </div>
  1376. </div>
  1377. </div>
  1378. </div>
  1379. </article>`;
  1380. $('.article-list').append(html);
  1381. }
  1382. }
  1383. }
  1384. },
  1385. error: function(xhr, status, error) {
  1386. console.error(error);
  1387. }
  1388. });
  1389. }
  1390. });
  1391. },
  1392. show_reviewed_manuscripts: function () {
  1393. // 初始化分页参数
  1394. var currentPage = 1;
  1395. var pageSize = 10;
  1396. var status = $('#reviewed_manuscripts_status').val();
  1397. $('#c-search').on("keyup", function (e) {
  1398. if (e.keyCode === 13) {
  1399. let keyword = $(this).val();
  1400. // 点击回车后进行搜索
  1401. $.ajax({
  1402. url: 'user/show_reviewed_manuscripts',
  1403. type: 'GET',
  1404. dataType: 'json',
  1405. data: {
  1406. status: status,
  1407. page: currentPage,
  1408. limit: pageSize,
  1409. keyword: keyword,
  1410. },
  1411. success: function(res) {
  1412. console.log(res);
  1413. if (res.code === 1) {
  1414. // if (res.data.total > 0) {
  1415. $('.article-list').html('');
  1416. var tableData = res.data.data;
  1417. for (var i = 0; i < tableData.length; i++) {
  1418. let rowData = tableData[i];
  1419. let html = '<article class="article-item">\n' +
  1420. ' <div class="media">\n' +
  1421. ' <div class="media-left">\n' +
  1422. ' <a href="article_details?id='+ rowData.id +'&type=review">\n' +
  1423. ' <div class="embed-responsive embed-responsive-4by3 img-zoom">\n' +
  1424. ' <img src="'+ rowData.image +'">\n' +
  1425. ' </div>\n' +
  1426. ' </a>\n' +
  1427. ' </div>\n' +
  1428. ' <div class="media-body">\n' +
  1429. ' <h3 class="article-title">\n' +
  1430. ' <a href="article_details?id='+ rowData.id +'&type=review">'+ rowData.title +'</a>\n' +
  1431. ' <div class="article-title-id">\n' +
  1432. ' ID:'+ rowData.id +'\n' +
  1433. ' </div>\n' +
  1434. ' </h3>\n' +
  1435. ' <div class="article-intro">\n' +
  1436. ' <span class="label label-primary article-intro-label">Open Access</span>\n' +
  1437. ' <span class="label label-success article-intro-label">Feature Paper</span>\n' +
  1438. ' <span class="label label-info article-intro-label">Review</span>\n' +
  1439. ' </div>\n' +
  1440. ' <div class="article-tag">\n' +
  1441. ' <span itemprop="date">Submission date:'+ rowData.createtime +'</span>\n' +
  1442. ' <span class="article-read">\n' +
  1443. ' <a href="conduct_review?id='+ rowData.id +'" style="color: #007bff;" target="_blank">\n' +
  1444. ' <img src="__CDN__/assets/img/index/review_button.png" alt="">\n' +
  1445. ' Review\n' +
  1446. ' </a>\n' +
  1447. ' <span/>\n' +
  1448. ' </div>\n' +
  1449. ' </div>\n' +
  1450. ' </div>\n' +
  1451. ' </article>';
  1452. $('.article-list').append(html);
  1453. }
  1454. // }
  1455. }
  1456. },
  1457. error: function(xhr, status, error) {
  1458. console.error(error);
  1459. }
  1460. });
  1461. }
  1462. });
  1463. },
  1464. special_issue: function () {
  1465. // 自定义添加作者按钮
  1466. $(document).on('click', '.add-editor-button', function () {
  1467. let input_index = $('.custom-editor-content').children('.custom-editor-item').length;
  1468. let str = '<div class="custom-editor-item">\n' +
  1469. ' <div class="form-group">\n' +
  1470. ' <label class="control-label col-xs-12 col-sm-11">\n' +
  1471. ' </label>\n' +
  1472. ' <div class="editor-delete-button text-delete-button mb-3 col-xs-12 col-sm-1">\n' +
  1473. ' <i class="fa fa-trash"></i> Delete\n' +
  1474. ' </div>\n' +
  1475. ' </div>\n' +
  1476. ' <div class="form-group">\n' +
  1477. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1478. ' <span style="color:#ed534b;margin-right: 10px;">*</span>E-mail Address\n' +
  1479. ' </label>\n' +
  1480. ' <div class="col-xs-12 col-sm-10">\n' +
  1481. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-email" name="row[editor]['+ input_index +'][email]" placeholder="Type here...">\n' +
  1482. ' <div class="input-group-addon no-border no-padding">\n' +
  1483. ' <span class="msg-box n-right" for="c-add-review-email"></span>\n' +
  1484. ' </div>\n' +
  1485. ' </div>\n' +
  1486. ' </div>\n' +
  1487. '\n' +
  1488. ' <div class="form-group">\n' +
  1489. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1490. ' <span style="color:#ed534b;margin-right: 10px;">*</span>First Name\n' +
  1491. ' </label>\n' +
  1492. ' <div class="col-xs-12 col-sm-10">\n' +
  1493. ' <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' +
  1494. ' <div class="input-group-addon no-border no-padding">\n' +
  1495. ' <span class="msg-box n-right" for="c-add-review-first-name"></span>\n' +
  1496. ' </div>\n' +
  1497. ' </div>\n' +
  1498. ' </div>\n' +
  1499. '\n' +
  1500. ' <div class="form-group">\n' +
  1501. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1502. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Last Name\n' +
  1503. ' </label>\n' +
  1504. ' <div class="col-xs-12 col-sm-10">\n' +
  1505. ' <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' +
  1506. ' <div class="input-group-addon no-border no-padding">\n' +
  1507. ' <span class="msg-box n-right" for="c-add-review-last-name"></span>\n' +
  1508. ' </div>\n' +
  1509. ' </div>\n' +
  1510. ' </div>\n' +
  1511. '\n' +
  1512. ' <div class="form-group">\n' +
  1513. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1514. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Affiliation\n' +
  1515. ' </label>\n' +
  1516. ' <div class="col-xs-12 col-sm-10">\n' +
  1517. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-affiliation" name="row[editor]['+ input_index +'][affiliation]" placeholder="Type here...">\n' +
  1518. ' <div class="input-group-addon no-border no-padding">\n' +
  1519. ' <span class="msg-box n-right" for="c-add-review-affiliation"></span>\n' +
  1520. ' </div>\n' +
  1521. ' </div>\n' +
  1522. ' </div>\n' +
  1523. '\n' +
  1524. ' <div class="form-group">\n' +
  1525. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1526. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Publication Record Link\n' +
  1527. ' </label>\n' +
  1528. ' <div class="col-xs-12 col-sm-10">\n' +
  1529. ' <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' +
  1530. ' <div class="input-group-addon no-border no-padding">\n' +
  1531. ' <span class="msg-box n-right" for="c-add-review-record_link"></span>\n' +
  1532. ' </div>\n' +
  1533. ' </div>\n' +
  1534. ' </div>\n' +
  1535. ' </div>';
  1536. $('.custom-editor-content').append(str);
  1537. updateEditorInputNames();
  1538. });
  1539. // 排序input 的 name 值
  1540. var updateEditorInputNames = function () {
  1541. // 遍历所有的div元素
  1542. $(".custom-editor-item").each(function (index) {
  1543. var email_input = $(this).find('input[id="c-add-editor-email"]');
  1544. var first_name_input = $(this).find('input[id="c-add-editor-first-name"]');
  1545. var last_name_input = $(this).find('input[id="c-add-editor-last-name"]');
  1546. var affiliation_input = $(this).find('input[id="c-add-editor-affiliation"]');
  1547. var record_link_input = $(this).find('input[id="c-add-editor-record_link"]');
  1548. email_input.attr('name', "row[editor]["+ index +"][email]");
  1549. first_name_input.attr('name', "row[editor]["+ index +"][first_name]");
  1550. last_name_input.attr('name', "row[editor]["+ index +"][last_name]");
  1551. affiliation_input.attr('name', "row[editor]["+ index +"][affiliation]");
  1552. record_link_input.attr('name', "row[editor]["+ index +"][record_link]");
  1553. });
  1554. };
  1555. // 删除对应的作者信息
  1556. $(document).on('click', '.editor-delete-button', function () {
  1557. let editor_content_length = $('.custom-editor-content').children('.custom-editor-item').length;
  1558. if (editor_content_length > 1) {
  1559. $(this).parent().parent().remove();
  1560. // 删除后更新 input 的 name 值
  1561. updateEditorInputNames();
  1562. }
  1563. });
  1564. // 自定义作者信息提交按钮操作
  1565. $(document).on('click', '.add-editor-submit', function () {
  1566. let tr_length = $('#recommended-table tbody tr').length;
  1567. let key = $(".custom-editor-item").length;
  1568. let addEditorInputValue = [];
  1569. for (let i = 0; i < key; i++) {
  1570. let obj = {};
  1571. obj['email'] = $(this).parent().parent().find("input[name='row[editor]["+ i +"][email]']").val();
  1572. obj['first_name'] = $(this).parent().parent().find("input[name='row[editor]["+ i +"][first_name]']").val();
  1573. obj['last_name'] = $(this).parent().parent().find("input[name='row[editor]["+ i +"][last_name]']").val();
  1574. obj['affiliation'] = $(this).parent().parent().find("input[name='row[editor]["+ i +"][affiliation]']").val();
  1575. obj['record_link'] = $(this).parent().parent().find("input[name='row[editor]["+ i +"][record_link]']").val();
  1576. addEditorInputValue.push(obj);
  1577. }
  1578. for (var i = 0; i < addEditorInputValue.length; i++) {
  1579. var rowData = addEditorInputValue[i];
  1580. if (addEditorInputValue.length > 1) {
  1581. if (i > 0) {
  1582. tr_length++;
  1583. }
  1584. }
  1585. let html = ' <input type="hidden" name="row[editor]['+ tr_length +'][email]" value="'+ rowData.email +'">\n' +
  1586. ' <input type="hidden" name="row[editor]['+ tr_length +'][first_name]" value="'+ rowData.first_name +'">\n' +
  1587. ' <input type="hidden" name="row[editor]['+ tr_length +'][last_name]" value="'+ rowData.last_name +'">\n' +
  1588. ' <input type="hidden" name="row[editor]['+ tr_length +'][affiliation]" value="'+ rowData.affiliation +'">\n' +
  1589. ' <input type="hidden" name="row[editor]['+ tr_length +'][record_link]" value="'+ rowData.record_link +'">';
  1590. var rowHtml = '<tr>' +
  1591. '<td>' + rowData.email + '</td>' +
  1592. '<td>' + rowData.first_name + '</td>' +
  1593. '<td>' + rowData.last_name + '</td>' +
  1594. '<td>' + rowData.affiliation + '</td>' +
  1595. '<td>' + rowData.record_link + '</td>' +
  1596. '<td class="recommended-del" data-index="'+ tr_length +'"><a href="#">删除</a></td>' +
  1597. '</tr>';
  1598. $('#recommended-table tbody').append(rowHtml);
  1599. $('.editor-hidden-content').append(html);
  1600. }
  1601. // 清空已填内容
  1602. $('.custom-editor-content').html('');
  1603. $('.custom-editor-content').append('<div class="custom-editor-item">\n' +
  1604. ' <div class="form-group">\n' +
  1605. ' <label class="control-label col-xs-12 col-sm-11">\n' +
  1606. ' </label>\n' +
  1607. ' <div class="editor-delete-button text-delete-button mb-3 col-xs-12 col-sm-1">\n' +
  1608. ' <i class="fa fa-trash"></i> Delete\n' +
  1609. ' </div>\n' +
  1610. ' </div>\n' +
  1611. ' <div class="form-group">\n' +
  1612. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1613. ' <span style="color:#ed534b;margin-right: 10px;">*</span>E-mail Address\n' +
  1614. ' </label>\n' +
  1615. ' <div class="col-xs-12 col-sm-10">\n' +
  1616. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-email" name="row[editor][0][email]" placeholder="Type here...">\n' +
  1617. ' <div class="input-group-addon no-border no-padding">\n' +
  1618. ' <span class="msg-box n-right" for="c-add-review-email"></span>\n' +
  1619. ' </div>\n' +
  1620. ' </div>\n' +
  1621. ' </div>\n' +
  1622. '\n' +
  1623. ' <div class="form-group">\n' +
  1624. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1625. ' <span style="color:#ed534b;margin-right: 10px;">*</span>First Name\n' +
  1626. ' </label>\n' +
  1627. ' <div class="col-xs-12 col-sm-10">\n' +
  1628. ' <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' +
  1629. ' <div class="input-group-addon no-border no-padding">\n' +
  1630. ' <span class="msg-box n-right" for="c-add-review-first-name"></span>\n' +
  1631. ' </div>\n' +
  1632. ' </div>\n' +
  1633. ' </div>\n' +
  1634. '\n' +
  1635. ' <div class="form-group">\n' +
  1636. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1637. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Last Name\n' +
  1638. ' </label>\n' +
  1639. ' <div class="col-xs-12 col-sm-10">\n' +
  1640. ' <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' +
  1641. ' <div class="input-group-addon no-border no-padding">\n' +
  1642. ' <span class="msg-box n-right" for="c-add-review-last-name"></span>\n' +
  1643. ' </div>\n' +
  1644. ' </div>\n' +
  1645. ' </div>\n' +
  1646. '\n' +
  1647. ' <div class="form-group">\n' +
  1648. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1649. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Affiliation\n' +
  1650. ' </label>\n' +
  1651. ' <div class="col-xs-12 col-sm-10">\n' +
  1652. ' <input type="text" data-rule="required" class="form-control" id="c-add-editor-affiliation" name="row[editor][0][affiliation]" placeholder="Type here...">\n' +
  1653. ' <div class="input-group-addon no-border no-padding">\n' +
  1654. ' <span class="msg-box n-right" for="c-add-review-affiliation"></span>\n' +
  1655. ' </div>\n' +
  1656. ' </div>\n' +
  1657. ' </div>\n' +
  1658. '\n' +
  1659. ' <div class="form-group">\n' +
  1660. ' <label class="control-label col-xs-12 col-sm-2 text-right">\n' +
  1661. ' <span style="color:#ed534b;margin-right: 10px;">*</span>Publication Record Link\n' +
  1662. ' </label>\n' +
  1663. ' <div class="col-xs-12 col-sm-10">\n' +
  1664. ' <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' +
  1665. ' <div class="input-group-addon no-border no-padding">\n' +
  1666. ' <span class="msg-box n-right" for="c-add-review-record_link"></span>\n' +
  1667. ' </div>\n' +
  1668. ' </div>\n' +
  1669. ' </div>\n' +
  1670. ' </div>');
  1671. $('#addEditorModal').modal('hide');
  1672. });
  1673. // 删除已选中的作者
  1674. $(document).on('click', '.recommended-del', function () {
  1675. let index = $(this).data('index');
  1676. $('.editor-hidden-content').find('input[name="row[editor]\\['+ index +'\\]\\[email\\]"]').remove();
  1677. $('.editor-hidden-content').find('input[name="row[editor]\\['+ index +'\\]\\[first_name\\]"]').remove();
  1678. $('.editor-hidden-content').find('input[name="row[editor]\\['+ index +'\\]\\[last_name\\]"]').remove();
  1679. $('.editor-hidden-content').find('input[name="row[editor]\\['+ index +'\\]\\[affiliation\\]"]').remove();
  1680. $('.editor-hidden-content').find('input[name="row[editor]\\['+ index +'\\]\\[record_link\\]"]').remove();
  1681. $(this).parent().remove();
  1682. // 重新排列键值
  1683. });
  1684. // 辅助函数:生成指定起始页码和结束页码的分页按钮HTML代码
  1685. function generatePagination(startPage, endPage) {
  1686. var pageHtml = '';
  1687. for (var i = startPage; i <= endPage; i++) {
  1688. if (i === currentPage) {
  1689. pageHtml += '<a href="#" class="pagination-link active">' + i + '</a>';
  1690. } else {
  1691. pageHtml += '<a href="#" class="pagination-link">' + i + '</a>';
  1692. }
  1693. }
  1694. return pageHtml;
  1695. }
  1696. Form.api.bindevent($("#submit-issue-form"), function () {
  1697. setTimeout(function () {
  1698. location.reload();
  1699. }, 2000);
  1700. });
  1701. },
  1702. article_details: function () {
  1703. setTimeout(function () {
  1704. $('.btn-delete').remove();
  1705. $('.input-group-addon').remove();
  1706. }, 300);
  1707. Form.api.bindevent($("#article-details-form"), function () {
  1708. setTimeout(function () {
  1709. location.href = "index/user/reviewer_information";
  1710. }, 2000);
  1711. });
  1712. },
  1713. conduct_review: function () {
  1714. Form.api.bindevent($("#submit-comments-form"), function () {
  1715. setTimeout(function () {
  1716. location.href = "index/user/reviewer_information";
  1717. }, 2000);
  1718. });
  1719. },
  1720. submit_conference: function () {
  1721. Form.api.bindevent($("#conference-form"), function () {
  1722. setTimeout(function () {
  1723. location.href = "/p/conference";
  1724. }, 2000);
  1725. }, function (data) {
  1726. $("input[name=captcha]").next(".input-group-addon").find("img").trigger("click");
  1727. });
  1728. },
  1729. conference_participate: function () {
  1730. Form.api.bindevent($("#conference-participate-form"), function () {
  1731. setTimeout(function () {
  1732. location.href = "/p/conference";
  1733. }, 2000);
  1734. });
  1735. },
  1736. reviewer_information: function () {
  1737. //为表单绑定事件
  1738. Form.api.bindevent($("#reviewer-information-form"), function (data, ret) {
  1739. // setTimeout(function () {
  1740. // location.href = ret.url ? ret.url : "/";
  1741. // }, 6000);
  1742. }, function (data) {
  1743. // $("input[name=captcha]").next(".input-group-btn").find("img").trigger("click");
  1744. });
  1745. },
  1746. become_an_editor: function () {
  1747. //为表单绑定事件
  1748. Form.api.bindevent($("#become-an-editor-form"), function (data, ret) {
  1749. // setTimeout(function () {
  1750. // location.href = ret.url ? ret.url : "/";
  1751. // }, 6000);
  1752. }, function (data) {
  1753. // $("input[name=captcha]").next(".input-group-btn").find("img").trigger("click");
  1754. });
  1755. },
  1756. special_issue_list: function () {
  1757. // 初始化分页参数
  1758. var currentPage = 1;
  1759. var pageSize = 10;
  1760. $('#c-search').on("keyup", function (e) {
  1761. if (e.keyCode === 13) {
  1762. let keyword = $(this).val();
  1763. // 点击回车后进行搜索
  1764. $.ajax({
  1765. url: 'user/special_issue_list',
  1766. type: 'GET',
  1767. dataType: 'json',
  1768. data: {
  1769. page: currentPage,
  1770. limit: pageSize,
  1771. keyword: keyword,
  1772. },
  1773. success: function(res) {
  1774. if (res.code === 1) {
  1775. $('.article-list').html('');
  1776. var tableData = res.data.data;
  1777. for (var i = 0; i < tableData.length; i++) {
  1778. let rowData = tableData[i];
  1779. let html = '<article class="article-item">\n' +
  1780. ' <div class="media">\n' +
  1781. ' <div class="media-left">\n' +
  1782. ' <a href="special_issue?id='+ rowData.id +'}">\n' +
  1783. ' <div class="embed-responsive embed-responsive-4by3 img-zoom p-0">\n' +
  1784. ' <img src="'+ rowData.image +'">\n' +
  1785. ' </div>\n' +
  1786. ' </a>\n' +
  1787. ' </div>\n' +
  1788. ' <div class="media-body">\n' +
  1789. ' <h3 class="article-title">\n' +
  1790. ' <a href="special_issue?id='+ rowData.id +'">'+ rowData.issue_name +'</a>\n' +
  1791. ' <div class="article-title-id">\n' +
  1792. ' ID:'+ rowData.id +'\n' +
  1793. ' </div>\n' +
  1794. ' </h3>\n' +
  1795. ' <div class="article-intro">\n' +
  1796. ' <span class="label label-info article-intro-label">'+ rowData.journal +'</span>\n' +
  1797. ' </div>\n' +
  1798. ' <div class="article-tag">\n' +
  1799. ' <div itemprop="date">Submission date:'+ rowData.createtime +'</div>\n' +
  1800. ' </div>\n' +
  1801. ' <div class="article-tag">\n' +
  1802. ' <div class="article-read">\n' +
  1803. ' <a href="special_issue?id='+ rowData.id +'" style="color: #007bff;">\n' +
  1804. ' <img src="__CDN__/assets/img/index/personal_data_icon.png" alt="">\n' +
  1805. ' Edit\n' +
  1806. ' </a>\n' +
  1807. ' </div>\n' +
  1808. ' </div>\n' +
  1809. ' </div>\n' +
  1810. ' </div>\n' +
  1811. ' </article>';
  1812. $('.article-list').append(html);
  1813. }
  1814. }
  1815. },
  1816. error: function(xhr, status, error) {
  1817. console.error(error);
  1818. }
  1819. });
  1820. }
  1821. });
  1822. },
  1823. };
  1824. return Controller;
  1825. });