mail.tpl 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>欢迎页面-X-admin2.0</title>
  6. <link rel="stylesheet" href="./static/css/font.css">
  7. <link rel="stylesheet" href="./static/css/xadmin.css">
  8. <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
  9. <script src="./static/lib/layui/layui.js" charset="utf-8"></script>
  10. <script type="text/javascript" src="./static/js/xadmin.js"></script>
  11. </head>
  12. <body>
  13. <input type="text" id="token" value={{.token}} hidden=true>
  14. <dialog open id="modalItem" class="x-body layui-anim layui-anim-up" hidden=true style = "center;">
  15. <form class="layui-form layui-form-pane">
  16. <input id="item_id" name="item_id" placeholder="物品ID" type="number" lay-verify="required" class="layui-input">
  17. <br>
  18. <input id="item_count" name="item_count" placeholder="物品数量" type="number" lay-verify="required" class="layui-input">
  19. <hr class="hr15">
  20. <input id="btn" value="新增" class="layui-btn" style="width:100%;" type="button" onclick="addItem()">
  21. <br>
  22. <br>
  23. <input value="关闭" class="layui-btn" style="width:100%;" type="button" onclick="closeModalItem()">
  24. <hr class="hr15">
  25. <table class="radio-table" border="1" id="tb_item">
  26. <thead>
  27. <th style="width:100px;">物品ID</th>
  28. <th style="width:100px;">物品数量</th>
  29. <th style="width:256px;">操作</th>
  30. </thead>
  31. </table>
  32. <hr class="hr20" >
  33. </form>
  34. </dialog>
  35. <dialog open id="modalPlayer" class="x-body layui-anim layui-anim-up" hidden=true style = "center;">
  36. <form class="layui-form layui-form-pane">
  37. <input id="player_id" name="item_id" placeholder="角色ID" type="number" lay-verify="required" class="layui-input">
  38. <hr class="hr15">
  39. <input id="btn" value="新增" class="layui-btn" style="width:100%;" type="button" onclick="addPlayer()">
  40. <br>
  41. <br>
  42. <input value="关闭" class="layui-btn" style="width:100%;" type="button" onclick="closeModalPlayer()">
  43. <hr class="hr15">
  44. <table class="radio-table" border="1" id="tb_player">
  45. <thead>
  46. <th style="width:100px;">玩家ID</th>
  47. <th style="width:256px;">操作</th>
  48. </thead>
  49. </table>
  50. <hr class="hr20" >
  51. </form>
  52. </dialog>
  53. <dialog open id="modalServer" class="x-body layui-anim layui-anim-up" hidden=true style = "center;">
  54. <form class="layui-form layui-form-pane">
  55. <select name="" id="server_id" onchange="gradeServerChange(this.options[this.options.selectedIndex].value)">
  56. {{range .ServerList}}
  57. <option value={{.ServerId}}>{{.ServerName}}</option>
  58. {{end}}
  59. </select>
  60. <hr class="hr15">
  61. <input id="btn" value="新增" class="layui-btn" style="width:100%;" type="button" onclick="addServer()">
  62. <br>
  63. <br>
  64. <input value="关闭" class="layui-btn" style="width:100%;" type="button" onclick="closeModalServer()">
  65. <hr class="hr15">
  66. <table class="radio-table" border="1" id="tb_server">
  67. <thead>
  68. <th style="width:100px;">服务器ID</th>
  69. <th style="width:256px;">操作</th>
  70. </thead>
  71. </table>
  72. <hr class="hr20" >
  73. </form>
  74. </dialog>
  75. 邮件类型:
  76. <select name="" id="mail_ty" onchange="gradeChange(this.options[this.options.selectedIndex].value)">
  77. <option value="ROLE">玩家</option>
  78. <option value="SERVER">服务器</option>
  79. </select>
  80. <br>
  81. <br>
  82. <input id="title" name="title" placeholder="邮件标题" type="text" lay-verify="required" class="layui-input">
  83. <br>
  84. <input id="content" name="content" placeholder="邮件内容" type="text" lay-verify="required" class="layui-input">
  85. <hr class="hr15">
  86. <input id="effect_days" name="effect_days" placeholder="有效天数" type="number" lay-verify="required" class="layui-input">
  87. <br>
  88. 有效注册时间止:
  89. <input id="register_time" name="register_time" placeholder="有效注册时间止" type="text" lay-verify="required" class="layui-input">
  90. <hr class="hr15">
  91. <input id="items" name="items" disabled="disabled" placeholder="邮件物品" type="text" lay-verify="required" class="layui-input">
  92. <br>
  93. <input class="layui-btn" type="button" onclick="modalAddItem()" value=新增>
  94. <hr class="hr15">
  95. <input id="uidList" name="uidList" disabled="disabled" placeholder="玩家ID列表" type="text" lay-verify="required" class="layui-input">
  96. <input id="sidList" name="sidList" disabled="disabled" placeholder="服务器ID列表" type="hidden" lay-verify="required" class="layui-input">
  97. <br>
  98. <input id="btn_add_player" class="layui-btn" type="button" onclick="modalAddPlayer()" value=新增玩家>
  99. <input id="btn_add_server" class="layui-btn" type="hidden" onclick="modalAddServer()" value=新增服务器ID>
  100. <hr class="hr15">
  101. <input class="layui-btn" type="button" onclick="sendMail()" value=发送>
  102. <script language="JavaScript">
  103. function formaData(timer) {
  104. const year = timer.getFullYear()
  105. const month = (timer.getMonth() + 1).toString().padStart(2, '0') // 由于月份从0开始,因此需加1
  106. const day = timer.getDate().toString().padStart(2, '0')
  107. const hour = timer.getHours().toString().padStart(2, '0')
  108. const minute = timer.getMinutes().toString().padStart(2, '0')
  109. const second = timer.getSeconds().toString().padStart(2, '0')
  110. return `${(year)}-${(month)}-${(day)} ${(hour)}:${(minute)}:${(second)}`
  111. }
  112. var timer = new Date();
  113. document.getElementById("register_time").value = formaData(timer);
  114. function gradeChange(tx){
  115. if (tx == "ROLE") {
  116. document.getElementById("uidList").type = "text"
  117. document.getElementById("btn_add_player").type = "button"
  118. document.getElementById("sidList").type = "hidden"
  119. document.getElementById("btn_add_server").type = "hidden"
  120. }else{
  121. document.getElementById("uidList").type = "hidden"
  122. document.getElementById("btn_add_player").type = "hidden"
  123. document.getElementById("sidList").type = "text"
  124. document.getElementById("btn_add_server").type = "button"
  125. }
  126. var timer = new Date();
  127. document.getElementById("register_time").value = formaData(timer);
  128. }
  129. // 物品弹窗
  130. function modalAddItem() {
  131. var items = document.getElementById("items").value;
  132. console.log("modalAddItem items:"+items)
  133. var obj = document.getElementById("tb_item")
  134. var tbody = obj.getElementsByTagName("tbody")[0];
  135. if (tbody) {
  136. if (-[1,]) {
  137. obj.removeChild(tbody);
  138. }else{
  139. obj.removeNode(tbody);
  140. }
  141. }
  142. var arrItems = items.split("|")
  143. if (arrItems.length > 0 && arrItems[0] != "") {
  144. tbody = document.createElement("tbody")
  145. for (var i = 0; i < arrItems.length; i++){
  146. var arrItem = arrItems[i].split(":")
  147. var tr = document.createElement("tr")
  148. var td1 = document.createElement("td")
  149. td1.style = "text-align:center;"
  150. td1.innerHTML = arrItem[0]
  151. tr.appendChild(td1)
  152. var td2 = document.createElement("td")
  153. td2.style = "text-align:center;"
  154. td2.innerHTML = arrItem[1]
  155. tr.appendChild(td2)
  156. var td3 = document.createElement("td")
  157. td3.style = "text-align:center;"
  158. td3.innerHTML = '<input class="layui-btn" type="button" onclick="itemDelete(' + arrItem[0] + ')" value=删除>'
  159. tr.appendChild(td3)
  160. tbody.appendChild(tr)
  161. }
  162. obj.appendChild(tbody)
  163. }
  164. document.getElementById("modalItem").hidden = false;
  165. }
  166. function closeModalItem() {
  167. document.getElementById("modalItem").hidden = true;
  168. }
  169. function addItem() {
  170. var item_id = document.getElementById("item_id").value;
  171. var item_count = document.getElementById("item_count").value;
  172. var items = document.getElementById("items").value;
  173. // 转化物品表
  174. var mapItem = new Map();
  175. var arrItems = items.split("|")
  176. if (arrItems.length > 0 && arrItems[0] != "") {
  177. for (var i = 0; i < arrItems.length; i++){
  178. var arrItem = arrItems[i].split(":")
  179. mapItem.set(arrItem[0], parseInt(arrItem[1]))
  180. }
  181. }
  182. var count = parseInt(item_count)
  183. if (mapItem.get(item_id)) {
  184. count += mapItem.get(item_id)
  185. }
  186. mapItem.set(item_id, count)
  187. // 更新物品列表
  188. items = ""
  189. for (var i of mapItem) {
  190. if (items != "") {
  191. items += "|"
  192. }
  193. items += i[0] + ":" + i[1]
  194. }
  195. document.getElementById("items").value = items
  196. document.getElementById("modalItem").hidden = true;
  197. }
  198. // 删除物品
  199. function itemDelete(itemId) {
  200. var items = document.getElementById("items").value;
  201. // 转化物品表
  202. var mapItem = new Map();
  203. var arrItems = items.split("|");
  204. if (arrItems.length > 0 && arrItems[0] != "") {
  205. for (var i = 0; i < arrItems.length; i++){
  206. var arrItem = arrItems[i].split(":");
  207. mapItem.set(arrItem[0], parseInt(arrItem[1]));
  208. }
  209. }
  210. mapItem.delete(itemId);
  211. // 更新物品列表
  212. items = "";
  213. for (var i of mapItem) {
  214. console.log(i);
  215. if(i[0] != itemId){
  216. if (items != "") {
  217. items += "|"
  218. }
  219. items += i[0] + ":" + i[1];
  220. }
  221. }
  222. console.log(items);
  223. document.getElementById("items").value = items;
  224. document.getElementById("modalItem").hidden = true;
  225. }
  226. // 玩家
  227. function modalAddPlayer() {
  228. var uidList = document.getElementById("uidList").value;
  229. var arrPlayer = uidList.split("|")
  230. if (arrPlayer.length > 0 && arrPlayer[0] != "") {
  231. var obj = document.getElementById("tb_player")
  232. var tbody = obj.getElementsByTagName("tbody")[0];
  233. if (tbody) {
  234. if (-[1,]) {
  235. obj.removeChild(tbody);
  236. }else{
  237. obj.removeNode(tbody);
  238. }
  239. }
  240. tbody = document.createElement("tbody")
  241. for (var i = 0; i < arrPlayer.length; i++){
  242. var uid = arrPlayer[i]
  243. var tr = document.createElement("tr")
  244. var td1 = document.createElement("td")
  245. td1.style = "text-align:center;"
  246. td1.innerHTML = uid
  247. tr.appendChild(td1)
  248. var td3 = document.createElement("td")
  249. td3.style = "text-align:center;"
  250. td3.innerHTML = '<input class="layui-btn" type="button" onclick="playerDelete(' + uid + ')" value=删除>'
  251. tr.appendChild(td3)
  252. tbody.appendChild(tr)
  253. }
  254. obj.appendChild(tbody)
  255. }
  256. document.getElementById("modalPlayer").hidden = false;
  257. }
  258. function closeModalPlayer() {
  259. document.getElementById("modalPlayer").hidden = true;
  260. }
  261. // 新增玩家
  262. function addPlayer() {
  263. var player_id = document.getElementById("player_id").value;
  264. var uidList = document.getElementById("uidList").value;
  265. var arrPlayer = uidList.split("|")
  266. for (var i = 0; i < arrPlayer.length; i++) {
  267. if (player_id == arrPlayer[i]) {
  268. alert("玩家"+player_id+"已在列表中")
  269. return
  270. }
  271. }
  272. arrPlayer.push(player_id)
  273. uidList = ""
  274. for (var i = 0; i < arrPlayer.length; i++) {
  275. if (uidList != "") {
  276. uidList += "|"
  277. }
  278. uidList += arrPlayer[i]
  279. }
  280. document.getElementById("uidList").value = uidList
  281. document.getElementById("modalPlayer").hidden = true;
  282. }
  283. // 删除玩家
  284. function playerDelete(uid) {
  285. var uidList = document.getElementById("uidList").value;
  286. var arrPlayer = uidList.split("|");
  287. var isMatch = false;
  288. for (var i = 0; i < arrPlayer.length; i++) {
  289. if (uid == arrPlayer[i]) {
  290. isMatch = true;
  291. break;
  292. }
  293. }
  294. if (isMatch == false) {
  295. alert("玩家"+uid+"不在列表中")
  296. return
  297. }
  298. uidList = ""
  299. for (var i = 0; i < arrPlayer.length; i++) {
  300. if (arrPlayer[i] != uid) {
  301. if (uidList != "") {
  302. uidList += "|"
  303. }
  304. uidList += arrPlayer[i]
  305. }
  306. }
  307. document.getElementById("uidList").value = uidList
  308. document.getElementById("modalPlayer").hidden = true;
  309. }
  310. // 服务器ID
  311. function modalAddServer() {
  312. var sidList = document.getElementById("sidList").value;
  313. var arrServer = sidList.split("|")
  314. if (arrServer.length > 0 && arrServer[0] != "") {
  315. var obj = document.getElementById("tb_server")
  316. var tbody = obj.getElementsByTagName("tbody")[0];
  317. if (tbody) {
  318. if (-[1,]) {
  319. obj.removeChild(tbody);
  320. }else{
  321. obj.removeNode(tbody);
  322. }
  323. }
  324. tbody = document.createElement("tbody")
  325. for (var i = 0; i < arrServer.length; i++){
  326. var sid = arrServer[i]
  327. var tr = document.createElement("tr")
  328. var td1 = document.createElement("td")
  329. td1.style = "text-align:center;"
  330. td1.innerHTML = sid
  331. tr.appendChild(td1)
  332. var td3 = document.createElement("td")
  333. td3.style = "text-align:center;"
  334. td3.innerHTML = '<input class="layui-btn" type="button" onclick="serverDelete(' + sid + ')" value=删除>'
  335. tr.appendChild(td3)
  336. tbody.appendChild(tr)
  337. }
  338. obj.appendChild(tbody)
  339. }
  340. document.getElementById("modalServer").hidden = false;
  341. }
  342. function closeModalServer() {
  343. document.getElementById("modalServer").hidden = true;
  344. }
  345. // 新增服务器ID
  346. function addServer() {
  347. var server_id = document.getElementById("server_id").value;
  348. var sidList = document.getElementById("sidList").value;
  349. var arrServer = sidList.split("|")
  350. for (var i = 0; i < arrServer.length; i++) {
  351. if (server_id == arrServer[i]) {
  352. alert("服务器ID"+server_id+"已在列表中")
  353. return
  354. }
  355. }
  356. arrServer.push(server_id)
  357. sidList = ""
  358. for (var i = 0; i < arrServer.length; i++) {
  359. if (sidList != "") {
  360. sidList += "|"
  361. }
  362. sidList += arrServer[i]
  363. }
  364. document.getElementById("sidList").value = sidList
  365. document.getElementById("modalServer").hidden = true;
  366. }
  367. // 删除服务器ID
  368. function serverDelete(sid) {
  369. var sidList = document.getElementById("sidList").value;
  370. var arrServer = sidList.split("|");
  371. var isMatch = false;
  372. for (var i = 0; i < arrServer.length; i++) {
  373. if (sid == arrServer[i]) {
  374. isMatch = true;
  375. break;
  376. }
  377. }
  378. if (isMatch == false) {
  379. alert("服务器ID"+sid+"不在列表中")
  380. return
  381. }
  382. sidList = ""
  383. for (var i = 0; i < arrServer.length; i++) {
  384. if (arrServer[i] != sid) {
  385. if (sidList != "") {
  386. sidList += "|"
  387. }
  388. sidList += arrServer[i]
  389. }
  390. }
  391. document.getElementById("sidList").value = sidList
  392. document.getElementById("modalServer").hidden = true;
  393. }
  394. // 发送邮件
  395. function sendMail () {
  396. var token = document.getElementById("token").value;
  397. var mail_ty = document.getElementById("mail_ty").value;
  398. var title = document.getElementById("title").value;
  399. var content = document.getElementById("content").value;
  400. var effect_days = document.getElementById("effect_days").value;
  401. var register_time = document.getElementById("register_time").value;
  402. var items = document.getElementById("items").value;
  403. var uidList = document.getElementById("uidList").value;
  404. var sidList = document.getElementById("sidList").value;
  405. if (title == "") {
  406. alert("请输入邮件标题")
  407. return
  408. }
  409. if (content == "") {
  410. alert("请输入邮件内容")
  411. return
  412. }
  413. if (mail_ty == "ROLE"){
  414. var arrPlayer = uidList.split("|")
  415. if (arrPlayer[0] == "") {
  416. alert("请输入邮件发送玩家")
  417. return
  418. }
  419. }
  420. if (mail_ty == "SERVER"){
  421. var arr = sidList.split("|")
  422. if (arr[0] == "") {
  423. alert("请输入邮件发送服务器")
  424. return
  425. }
  426. }
  427. var text = "token=" + encodeURI(token);
  428. text += "&mail_ty=" + encodeURI(mail_ty);
  429. text += "&title=" + encodeURI(title);
  430. text += "&content=" + encodeURI(content);
  431. text += "&effect_days=" + encodeURI(effect_days);
  432. text += "&register_time=" + encodeURI(register_time);
  433. text += "&items=" + encodeURI(items);
  434. text += "&uidList=" + encodeURI(uidList);
  435. text += "&sidList=" + encodeURI(sidList);
  436. $.ajax({
  437. type:"post",
  438. url:"/mail?" + text,
  439. success:function (data) {
  440. // alert(data.status);
  441. if (data.status){
  442. window.location.href="/mail";
  443. }else{
  444. if (data.info){
  445. alert(data.info);
  446. }else{
  447. window.location.href="/accountlogin";
  448. }
  449. }
  450. }
  451. });
  452. }
  453. </script>
  454. </body>
  455. </html>