mail.tpl 19 KB

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