You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1135 lines
49 KiB
1135 lines
49 KiB
<!DOCTYPE html>
|
|
<html lang="zh-cn">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<!--#include file="/widget/head.html"-->
|
|
<link href="../css/sendEmail.css" rel="stylesheet" type="text/css">
|
|
<script src="/js/guid.js"></script>
|
|
<script type="text/javascript" src="../js/notice/xm-select.js"></script>
|
|
<script type="text/javascript" src="../js/load_realmlist.js"></script>
|
|
<style>
|
|
.layui-table-cell {
|
|
height: auto;
|
|
}
|
|
|
|
.col-sm-2 select {
|
|
height: 30px;
|
|
font-size: 20px;
|
|
}
|
|
|
|
#herodiv select {
|
|
font-size: 25px;
|
|
}
|
|
|
|
.select2-results__option, .select2-selection__rendered {
|
|
font-size: 20px !important;
|
|
}
|
|
|
|
.select2-results__options {
|
|
max-height: 350px !important;
|
|
}
|
|
.label-content{
|
|
max-height: 150px;
|
|
overflow-y: auto;
|
|
}
|
|
.label-content::-webkit-scrollbar-thumb {
|
|
-webkit-border-radius: 10px;
|
|
-moz-border-radius: 10px;
|
|
-ms-border-radius: 10px;
|
|
border-radius: 10px;
|
|
background-color: #C2C2C2;
|
|
}
|
|
/*定义滚动条轨道 内阴影+圆角*/
|
|
.label-content::-webkit-scrollbar-track {
|
|
border-radius: 10px;
|
|
}
|
|
/*定义滚动条高宽及背景*/
|
|
.label-content::-webkit-scrollbar {
|
|
width: 10px;
|
|
}
|
|
</style>
|
|
<script src="/js/template-web.js"></script>
|
|
</head>
|
|
<body class="layui-layout-body" layadmin-themealias="default">
|
|
<div id="wrapper">
|
|
<!-- Navigation -->
|
|
<!--#include file="/widget/nav.html"-->
|
|
<div id="page-wrapper" class="layui-body layadmin-tabsbody-item layui-show layui-fluid layui-row layui-col-space12">
|
|
<div class="layui-card" id="card-page-wrapper">
|
|
<div class="row">
|
|
<div class="col-lg-11">
|
|
<h2 class="page-header">发送邮件</h2>
|
|
</div>
|
|
</div>
|
|
<ul class="nav nav-tabs" role="tablist">
|
|
<li role="presentation" class="active"><a href="#write" role="tab" data-toggle="tab" id="titleWrite">写邮件</a></li>
|
|
<li role="presentation"><a href="#review" role="tab" data-toggle="tab" id="titleReview">待审核</a></li>
|
|
<li role="presentation"><a href="#send" role="tab" data-toggle="tab" id="titleSend">已发送</a></li>
|
|
</ul>
|
|
<div class="" style="margin-right: 220px">
|
|
<div role="tabpanel" class="tab-pane active" id="write">
|
|
<form class="form-horizontal" role="form">
|
|
<div class="form-group">
|
|
<label class="col-sm-2 control-label">收件人</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="layui-input" id="name" placeholder="请输入发送者">
|
|
<button type="button" class="layui-btn" value="UID文本文件" onclick="uidtext.click();" ><i class="layui-icon layui-icon-upload">UID文本文件</i></button>
|
|
<input type="file" id="uidtext" onchange="readtext();" style="display:none;">
|
|
<label style="color:red;">文本文件支持 换行 和 | 两种格式 </label>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="col-sm-2 control-label">服务器</label>
|
|
<div class="col-sm-10" id="realmlistdiv">
|
|
<div id="realmlistSelect" style="display: inline-block;width: 300px;margin-left: 20px;"></div>
|
|
<div id="realmlistRule" style="display: inline-block;margin-left: 20px;"></div>
|
|
<button type="button" class="layui-btn pull-right col-sm-2" onclick="AddLanguage()">添加语言</button>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="col-sm-2 control-label">是否发送给全部玩家</label>
|
|
<div class="col-sm-10">
|
|
<label>是 <input type="radio" name="isSendToAll" value="1"></label>
|
|
<label>否 <input type="radio" checked="checked" name="isSendToAll" value="0"></label>
|
|
(是:发送给全服玩家;否:只发给对应语言玩家)
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="col-sm-2 control-label">是否需要审核</label>
|
|
<div class="col-sm-10">
|
|
<label>是 <input type="radio"checked="checked" name="isReview" value="1"></label>
|
|
<label>否 <input type="radio" name="isReview" value="0"></label>
|
|
</div>
|
|
</div>
|
|
<div style="border: 1px solid #ccc;border-radius: 4px;" id="LanguageDiv">
|
|
</div>
|
|
|
|
|
|
|
|
<div style="border: 1px solid #ccc;border-radius: 4px;padding-bottom: 50px;">
|
|
<div class="form-group" style="margin-top:10px;" data-id="itemdiv">
|
|
<label class="col-sm-2 control-label">道具ID1</label>
|
|
<div class="col-sm-3">
|
|
<!-- <input type="text" class="form-control zero" id="item1" data-id="itemid" value="0" placeholder=""> -->
|
|
<select class="form-control zero" data-id="itemid" id="item1">
|
|
<option value="-1">-----请选择-----</option>
|
|
</select>
|
|
|
|
</div>
|
|
<label class="col-sm-2 control-label">道具1数量</label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="itemCount1" data-id="itemnum" value="0" placeholder="">
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<button type="button" class="layui-btn col-sm-2" id="adddj" style=" float:left; ">
|
|
增加道具
|
|
</button>
|
|
</div>
|
|
|
|
|
|
<div style="border: 1px solid #ccc;border-radius: 4px;padding-bottom: 50px;">
|
|
<div class="form-group" style="margin-top:10px;" data-id="equipdiv">
|
|
<label class="col-sm-2 control-label">武器ID1</label>
|
|
<div class="col-sm-3">
|
|
<!-- <input type="text" class="form-control zero" id="item1" data-id="itemid" value="0" placeholder=""> -->
|
|
<select class="form-control zero" data-id="equipid" id="equip1">
|
|
<option value="-1">-----请选择-----</option>
|
|
</select>
|
|
|
|
</div>
|
|
<label class="col-sm-2 control-label">武器1数量</label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="equipCount1" data-id="equipnum" value="0" placeholder="">
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<button type="button" class="layui-btn col-sm-2" id="addEquip" style=" float:left; ">
|
|
增加武器
|
|
</button>
|
|
</div>
|
|
|
|
<div style="border: 1px solid #ccc;border-radius: 4px;padding-bottom: 50px;">
|
|
<div class="form-group" style="margin-top:10px;" data-id="gemdiv">
|
|
<label class="col-sm-2 control-label">宝石ID1</label>
|
|
<div class="col-sm-3">
|
|
<!-- <input type="text" class="form-control zero" id="item1" data-id="itemid" value="0" placeholder=""> -->
|
|
<select class="form-control zero" data-id="gemid" id="gem1">
|
|
<option value="-1">-----请选择-----</option>
|
|
</select>
|
|
|
|
</div>
|
|
<label class="col-sm-2 control-label">宝石1数量</label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="gemCount1" data-id="gemnum" value="0" placeholder="">
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<button type="button" class="layui-btn col-sm-2" id="addGem" style=" float:left; ">
|
|
增加宝石
|
|
</button>
|
|
</div>
|
|
|
|
<div style="border: 1px solid #ccc;border-radius: 4px;padding-bottom: 50px;">
|
|
<div class="form-group" style="margin-top:10px;" data-id="skindiv">
|
|
<label class="col-sm-2 control-label">皮肤ID1</label>
|
|
<div class="col-sm-3">
|
|
<!-- <input type="text" class="form-control zero" id="item1" data-id="itemid" value="0" placeholder=""> -->
|
|
<select class="form-control zero" data-id="skinid" id="skin1">
|
|
<option value="-1">-----请选择-----</option>
|
|
</select>
|
|
|
|
</div>
|
|
<label class="col-sm-2 control-label">皮肤1数量</label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="skinCount1" data-id="skinnum" value="0" placeholder="">
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<button type="button" class="layui-btn col-sm-2" id="addSkin" style=" float:left; ">
|
|
增加皮肤
|
|
</button>
|
|
</div>
|
|
|
|
|
|
<div class="form-group">
|
|
<label class="col-sm-2 control-label">有效时长 <label style="color:red;"> (最小一天,最大15天)</label></label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="timeLimit_start" placeholder="开始时间">
|
|
<!-- <input type="text" class="form-control zero" id="timeLimit" placeholder=""> -->
|
|
</div>
|
|
<label class="col-sm-2 control-label"></label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="timeLimit_end" placeholder="结束时间">
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="col-sm-2 control-label">apk版本参数</label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="versionParam" placeholder="">
|
|
</div>
|
|
<label class="col-sm-2 control-label">玩家创建时间</label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="playerCreateTime" placeholder="">
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<div class="col-sm-offset-2 col-sm-10">
|
|
<button type="button" class="layui-btn pull-right col-sm-2" data-toggle="modal" data-target="#myModal" id="btn">发送</button>
|
|
<button type="reset" class="layui-btn layui-btn-danger pull-right col-sm-2" style="margin-right: 5px;">清空</button>
|
|
<!-- <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal">
|
|
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
|
</button>
|
|
<h4 class="modal-title" id="myModalLabel">是否确定发送?</h4>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
|
|
<button type="button" class="btn btn-primary" data-dismiss="modal" id="sure">确定</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div> -->
|
|
<div id="waite-send">
|
|
<div class="ajax-loader"></div>
|
|
<!--<div id="text"><span>发送中,请稍后。。。</span></div>-->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div role="tabpanel" class="tab-pane" id="send">
|
|
|
|
<div class="layui-form">
|
|
<div class="layui-form-item layui-inline" style="width:400px;">
|
|
<label class="layui-form-label" style="width: 120px;">开始时间</label>
|
|
<div class="layui-inline" style="width:220px;">
|
|
<input type="text" name="title" id="stadate" autocomplete="off" class="layui-input">
|
|
</div>
|
|
</div>
|
|
<div class="layui-form-item layui-inline" style="width:400px;">
|
|
<label class="layui-form-label" style="width: 120px;">结束时间</label>
|
|
<div class="layui-inline" style="width:220px;">
|
|
<input type="text" name="title" id="enddate" autocomplete="off" class="layui-input">
|
|
</div>
|
|
</div>
|
|
<div class="layui-form-item layui-inline" style="width:100px;">
|
|
<div class="layui-inline" style="width:100px;">
|
|
<button class="layui-btn" type="button" id="query">查询</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="sendDatatab" lay-filter="sendDatatab" style="margin-left: 10px;"></div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script type="text/template" id="contenthtml">
|
|
<div style="border-bottom:2px solid #ccc" data-id="contentdiv" >
|
|
<div class="form-group">
|
|
<label class="col-sm-2 control-label">语言</label>
|
|
<div class="col-sm-10">
|
|
<select data-id="language" style="width:150px;height:30px;font-size:18px;">
|
|
{{each list v k}}
|
|
<option value="{{v.lang_abbr}}">{{v.skip}}</option>
|
|
{{/each}}
|
|
</select>
|
|
<button type="button" class="layui-btn layui-btn-danger pull-right col-sm-2" style="background-color:red;" onclick="DelLanguage(this)">删除语言</button>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="col-sm-2 control-label">标题</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" data-id="title" placeholder="" maxlength="100" oninput="changeTitle()">
|
|
<div style="position: absolute;right: 20px;top: 7px;"><span id="title">0</span><span>/</span><span>100</span></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="col-sm-2 control-label">内容</label>
|
|
<div class="col-sm-10">
|
|
<textarea class="form-control" data-id="content" style="height:120px;" maxlength="1000" oninput="changeContent()"></textarea>
|
|
<div style="position: absolute;right: 20px;bottom: 7px;"><span id="content">0</span><span>/</span><span>1000</span></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="col-sm-2 control-label">发送者</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" data-id="senderName" placeholder="" maxlength="100" oninput="changeSenderName()">
|
|
<div style="position: absolute;right: 20px;top: 7px;"><span id="senderName">0</span><span>/</span><span>100</span></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
<script type="text/template" id="itemhtml" >
|
|
<div class="form-group" style="margin-top:10px;" data-id="itemdiv" id="itemdiv{{djnum}}">
|
|
<label class="col-sm-2 control-label">道具ID{{djnum}}</label>
|
|
<div class="col-sm-3">
|
|
<!-- <input type="text" class="form-control zero" data-id="itemid" id="item{{djnum}}" value="0" placeholder=""> -->
|
|
<select class="form-control zero" data-id="itemid" id="item{{djnum}}">
|
|
<option value="-1">-----请选择-----</option>
|
|
</select>
|
|
|
|
</div>
|
|
<label class="col-sm-2 control-label">道具{{djnum}}数量</label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="itemCount{{djnum}}" data-id="itemnum" value="0" placeholder="">
|
|
</div>
|
|
<button type="button" class="layui-btn layui-btn-danger col-sm-2" data-toggle="modal" onclick="del({{djnum}})" style="float:left;">
|
|
删除道具
|
|
</button>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/template" id="equiphtml" >
|
|
<div class="form-group" style="margin-top:10px;" data-id="equipdiv" id="equipdiv{{djnum}}">
|
|
<label class="col-sm-2 control-label">武器ID{{djnum}}</label>
|
|
<div class="col-sm-3">
|
|
<!-- <input type="text" class="form-control zero" data-id="itemid" id="item{{djnum}}" value="0" placeholder=""> -->
|
|
<select class="form-control zero" data-id="equipid" id="equip{{djnum}}">
|
|
<option value="-1">-----请选择-----</option>
|
|
</select>
|
|
|
|
</div>
|
|
<label class="col-sm-2 control-label">武器{{djnum}}数量</label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="equipCount{{djnum}}" data-id="equipnum" value="0" placeholder="">
|
|
</div>
|
|
<button type="button" class="layui-btn layui-btn-danger col-sm-2" data-toggle="modal" onclick="delEquip({{djnum}})" style="float:left;">
|
|
删除武器
|
|
</button>
|
|
</div>
|
|
</script>
|
|
|
|
|
|
<script type="text/template" id="gemhtml" >
|
|
<div class="form-group" style="margin-top:10px;" data-id="gemdiv" id="gemdiv{{djnum}}">
|
|
<label class="col-sm-2 control-label">宝石ID{{djnum}}</label>
|
|
<div class="col-sm-3">
|
|
<!-- <input type="text" class="form-control zero" data-id="itemid" id="item{{djnum}}" value="0" placeholder=""> -->
|
|
<select class="form-control zero" data-id="gemid" id="gem{{djnum}}">
|
|
<option value="-1">-----请选择-----</option>
|
|
</select>
|
|
|
|
</div>
|
|
<label class="col-sm-2 control-label">宝石{{djnum}}数量</label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="gemCount{{djnum}}" data-id="gemnum" value="0" placeholder="">
|
|
</div>
|
|
<button type="button" class="layui-btn layui-btn-danger col-sm-2" data-toggle="modal" onclick="delGem({{djnum}})" style="float:left;">
|
|
删除宝石
|
|
</button>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/template" id="skinhtml" >
|
|
<div class="form-group" style="margin-top:10px;" data-id="skindiv" id="skindiv{{djnum}}">
|
|
<label class="col-sm-2 control-label">皮肤ID{{djnum}}</label>
|
|
<div class="col-sm-3">
|
|
<!-- <input type="text" class="form-control zero" data-id="itemid" id="item{{djnum}}" value="0" placeholder=""> -->
|
|
<select class="form-control zero" data-id="skinid" id="skin{{djnum}}">
|
|
<option value="-1">-----请选择-----</option>
|
|
</select>
|
|
|
|
</div>
|
|
<label class="col-sm-2 control-label">皮肤{{djnum}}数量</label>
|
|
<div class="col-sm-2">
|
|
<input type="text" class="form-control zero" id="skinCount{{djnum}}" data-id="skinnum" value="0" placeholder="" max="1">
|
|
</div>
|
|
<button type="button" class="layui-btn layui-btn-danger col-sm-2" data-toggle="modal" onclick="delSkin({{djnum}})" style="float:left;">
|
|
删除皮肤
|
|
</button>
|
|
</div>
|
|
</script>
|
|
|
|
|
|
<script id="bt" type="text/template">
|
|
{{# if(d.status >=0 && d.status != 4 && (new Date(d.endTimeStr).getTime() > new Date().getTime())) { }}
|
|
<button class="layui-btn layui-btn-xs" lay-event="recall">撤回</button>
|
|
{{# } }}
|
|
{{# if(d.status >=0 && d.status != 4 && (new Date(d.dateStr).getTime() > new Date().getTime())) { }}
|
|
<span class="layui-badge layui-bg-blue">待发送</span>
|
|
{{# } }}
|
|
{{# if(d.status >=0 && new Date(d.endTimeStr).getTime() <= new Date().getTime()) { }}
|
|
<span class="layui-badge">已过期</span>
|
|
{{# } }}
|
|
{{# if(d.status == 4) { }}
|
|
<span class="layui-badge layui-bg-cyan">已撤回</span>
|
|
{{# } }}
|
|
{{# if(d.status == -1) { }}
|
|
<button class="layui-btn layui-btn-xs" lay-event="review">待审核</button>
|
|
{{# } }}
|
|
{{# if(d.status == -2) { }}
|
|
<span class="layui-badge layui-bg-cyan">已拒绝</span>
|
|
<button class="layui-btn layui-btn-xs" lay-event="delete">删除</button>
|
|
{{# } }}
|
|
</script>
|
|
<script id="btDetail" type="text/template">
|
|
<button class="layui-btn layui-btn-xs" lay-event="openDetail">详情</button>
|
|
</script>
|
|
|
|
<!--<script src="../js/email-chartTable.js"></script>-->
|
|
<!--#include file="/widget/email-tail.html"-->
|
|
|
|
<script type="text/javascript">
|
|
|
|
$(function(){
|
|
updateUUID()
|
|
$("#name").focus(function (){
|
|
layer.tips("收件人可为“all”,“android”,“ios”或UID,若有多个收件人,请使用符号“|”分隔开。如,10086|10010|10000", '#name',{tips: 1,time:10000});
|
|
})
|
|
|
|
})
|
|
|
|
|
|
function changeTitle() {
|
|
const len = $('input[data-id="title"]').val().length
|
|
$('#title').text(len)
|
|
}
|
|
function changeContent() {
|
|
const len = $('textarea[data-id="content"]').val().length
|
|
$('#content').text(len)
|
|
}
|
|
function changeSenderName() {
|
|
const len = $('input[data-id="senderName"]').val().length
|
|
$('#senderName').text(len)
|
|
}
|
|
var uuid = getUuid();
|
|
var herolist;
|
|
var djnum = 1;
|
|
var adddjcur = 1;
|
|
var heronum = 1;
|
|
var equipNum = 1;
|
|
var gemNum=1;
|
|
var customItemNum = 1;
|
|
var skinNum = 1;
|
|
|
|
var languagelist;
|
|
var skinList
|
|
var itemList;
|
|
var itemCostList;
|
|
|
|
var equipList;
|
|
var gemList;
|
|
|
|
var pageTail=0;
|
|
|
|
function AddItemList(uiId){
|
|
var data =new Array();
|
|
|
|
for (let [key, value] of Object.entries(itemList)) {
|
|
data.push({id:key,text:value})
|
|
}
|
|
$('#'+uiId).select2({
|
|
placeholder: '请选择',
|
|
data:data
|
|
});
|
|
}
|
|
|
|
function AddEquipList(uiId){
|
|
var data =new Array();
|
|
|
|
for (let [key, value] of Object.entries(equipList)) {
|
|
data.push({id:key,text:value})
|
|
}
|
|
$('#'+uiId).select2({
|
|
placeholder: '请选择',
|
|
data:data
|
|
});
|
|
}
|
|
|
|
function AddGemList(uiId){
|
|
var data =new Array();
|
|
|
|
for (let [key, value] of Object.entries(gemList)) {
|
|
data.push({id:key,text:value})
|
|
}
|
|
$('#'+uiId).select2({
|
|
placeholder: '请选择',
|
|
data:data
|
|
});
|
|
}
|
|
|
|
function AddSkinList(uiId){
|
|
var data =new Array();
|
|
|
|
for (let [key, value] of Object.entries(skinList)) {
|
|
data.push({id:key,text:value})
|
|
}
|
|
$('#'+uiId).select2({
|
|
placeholder: '请选择',
|
|
data:data
|
|
});
|
|
}
|
|
|
|
|
|
const hashMap = new Map();
|
|
function selectCustomItem(id,type){
|
|
if(type==-1){
|
|
$('#customItemId'+id).html('')
|
|
return;
|
|
}
|
|
console.log(id+"--"+type)
|
|
if(hashMap.has(type)){
|
|
let data=hashMap.get(type);
|
|
viewCustomItem(id,data)
|
|
return;
|
|
}
|
|
$.get(Page.SvrIp + "/api/select_itemlist",
|
|
{ token: cookie.get("token"),type:type }
|
|
, function (d) {
|
|
if (d.data !== undefined) {
|
|
hashMap[type] = d.data;
|
|
viewCustomItem(id,d.data)
|
|
}
|
|
});
|
|
}
|
|
function viewCustomItem(id,data){
|
|
|
|
debugger
|
|
$('#customItemId'+id).html('')
|
|
var list =new Array();
|
|
|
|
for (let [key, value] of Object.entries(data)) {
|
|
list.push({id:key,text:value})
|
|
}
|
|
$('#customItemId'+id).select2({
|
|
placeholder: '请选择',
|
|
data:list
|
|
});
|
|
}
|
|
function AddLanguage() {
|
|
$("#LanguageDiv").append(template("contenthtml", { list: languagelist }));
|
|
}
|
|
|
|
function DelLanguage(t) {
|
|
$(t).parents("[data-id=contentdiv]").remove();
|
|
|
|
}
|
|
function getUuid() {
|
|
if(sessionStorage.getItem('uuid')) return sessionStorage.getItem('uuid');
|
|
sessionStorage.setItem('uuid', Guid.NewGuid().ToString());
|
|
return sessionStorage.getItem('uuid');
|
|
}
|
|
function updateUUID() {
|
|
sessionStorage.setItem('uuid', Guid.NewGuid().ToString());
|
|
}
|
|
//lang_abbr
|
|
function Load_languagelist() {
|
|
$.get(Page.SvrIp + "/api/select_language",
|
|
{ token: cookie.get("token") }
|
|
, function (d) {
|
|
languagelist = JSON.parse(d.Data);
|
|
AddLanguage();
|
|
});
|
|
}
|
|
|
|
function Load_ItemList() {
|
|
$.get(Page.SvrIp + "/api/select_itemlist",
|
|
{ token: cookie.get("token"),type:2 }
|
|
, function (d) {
|
|
itemList = d.data;
|
|
AddItemList("item1");
|
|
});
|
|
}
|
|
function Load_EquipList() {
|
|
$.get(Page.SvrIp + "/api/select_itemlist",
|
|
{ token: cookie.get("token"),type: 1 }
|
|
, function (d) {
|
|
equipList = d.data;
|
|
AddEquipList("equip1");
|
|
});
|
|
}
|
|
|
|
function Load_GemList() {
|
|
$.get(Page.SvrIp + "/api/select_itemlist",
|
|
{ token: cookie.get("token"),type: 5 }
|
|
, function (d) {
|
|
gemList = d.data;
|
|
AddGemList("gem1");
|
|
});
|
|
}
|
|
function Load_SkinList() {
|
|
$.get(Page.SvrIp + "/api/select_itemlist",
|
|
{ token: cookie.get("token"),type: 4 }
|
|
, function (d) {
|
|
skinList = d.data;
|
|
AddSkinList("skin1");
|
|
});
|
|
}
|
|
|
|
function Load_ItemCostList() {
|
|
$.get(Page.SvrIp + "/api/select_item_cost",
|
|
{ token: cookie.get("token") }
|
|
, function (d) {
|
|
itemCostList = d.data;
|
|
});
|
|
}
|
|
|
|
|
|
function del(i) {
|
|
--djnum;
|
|
$("#itemdiv" + i).remove();
|
|
}
|
|
function delcur(i) {
|
|
--adddjcur;
|
|
$("#curdiv" + i).remove();
|
|
}
|
|
function delhero(i) {
|
|
--heronum;
|
|
$("#herodiv" + i).remove();
|
|
}
|
|
function delEquip(i) {
|
|
--equipNum;
|
|
$("#equipdiv" + i).remove();
|
|
}
|
|
|
|
function delGem(i) {
|
|
--gemNum;
|
|
$("#gemdiv" + i).remove();
|
|
}
|
|
function delSkin(i) {
|
|
--skinNum;
|
|
$("#skindiv" + i).remove();
|
|
}
|
|
function delCustomItem(i) {
|
|
--customItemNum;
|
|
$("#customItemDiv" + i).remove();
|
|
}
|
|
|
|
$("#adddj").click(function () {
|
|
if (GetAllNum() >= 12) {
|
|
layer.alert("附件总量不超过12");
|
|
return;
|
|
}
|
|
if (djnum == 12) {
|
|
alert("道具数量不能多于12种");
|
|
return;
|
|
}
|
|
++djnum;
|
|
$("#adddj").before(template("itemhtml", {
|
|
djnum: djnum
|
|
}));
|
|
AddItemList('item'+djnum);
|
|
});
|
|
|
|
|
|
|
|
$("#addEquip").click(function () {
|
|
if(GetAllNum() >= 12) {
|
|
layer.alert("附件总量不超过12");
|
|
return;
|
|
}
|
|
++equipNum;
|
|
$("#addEquip").before(template("equiphtml", {
|
|
djnum: equipNum
|
|
}));
|
|
AddEquipList('equip'+equipNum);
|
|
});
|
|
|
|
$("#addGem").click(function () {
|
|
if(GetAllNum() >= 12) {
|
|
layer.alert("附件总量不超过12");
|
|
return;
|
|
}
|
|
++gemNum;
|
|
$("#addGem").before(template("gemhtml", {
|
|
djnum: gemNum
|
|
}));
|
|
AddGemList('gem'+gemNum);
|
|
});
|
|
|
|
$("#addSkin").click(function () {
|
|
if(GetAllNum() >= 12) {
|
|
layer.alert("附件总量不超过12");
|
|
return;
|
|
}
|
|
++skinNum;
|
|
$("#addSkin").before(template("skinhtml", {
|
|
djnum: skinNum
|
|
}));
|
|
AddSkinList('skin'+skinNum);
|
|
});
|
|
|
|
|
|
function GetAllNum() {
|
|
return djnum + heronum + equipNum + gemNum + skinNum;
|
|
}
|
|
|
|
function iniselect2(id) {
|
|
$('#' + id).select2({
|
|
placeholder: '请选择',
|
|
data: herolist,
|
|
width: "100%"
|
|
});
|
|
}
|
|
|
|
|
|
function Oncheck(i) {
|
|
var ti = $(i).val();
|
|
console.info(ti);
|
|
//默认选中全服
|
|
if ($("input[name=Realm]:checked").length == 0) {
|
|
$("input[name=Realm][value=0]").prop('checked', true);
|
|
return;
|
|
}
|
|
if (ti == 0) {
|
|
if ($("input[name=Realm][value=0]").prop('checked')) {
|
|
$("input[name=Realm]:not([value=0])").prop('checked', false);
|
|
return;
|
|
}
|
|
} else {
|
|
if ($("input[name=Realm][value=0]").prop('checked')) {
|
|
$("input[name=Realm][value=0]").prop('checked', false);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$(function () {
|
|
Load_realmlist();
|
|
Load_languagelist();
|
|
// Load_skins()
|
|
Load_ItemList()
|
|
Load_EquipList()
|
|
Load_GemList();
|
|
Load_SkinList();
|
|
Load_ItemCostList()
|
|
$.get(Page.SvrIp + "/api/select_heros",
|
|
{
|
|
token: cookie.get("token")
|
|
},
|
|
function (d) {
|
|
|
|
}
|
|
);
|
|
})
|
|
var uidtext;
|
|
function readtext() {
|
|
var file = $("#uidtext")[0].files[0];
|
|
if(file) {
|
|
var index= file.name.lastIndexOf(".");//获取最后一个.的位置
|
|
var ext = file.name.substr(index+1);//获取后缀
|
|
var pattern = /^(txt|csv)$/;
|
|
if(!pattern.test(ext)) {
|
|
layer.msg("文件格式不支持");
|
|
return false;
|
|
}
|
|
var reader = new FileReader();
|
|
reader.readAsText(file);
|
|
reader.onload = function () {
|
|
//统一格式 |
|
|
if(ext === 'txt') {
|
|
uidtext = reader.result.replace(new RegExp("\r\n", "gm"), "|");
|
|
} else {
|
|
uidtext = reader.result.match(/\d{6}/g).join('|')
|
|
}
|
|
console.info(uidtext);
|
|
layer.msg("检测到" + uidtext.split('|').length + "条UID");
|
|
$("#name").val(uidtext);
|
|
$("#name").prop("disabled", true);
|
|
}
|
|
}
|
|
}
|
|
$(function () {
|
|
$("#query").click(function () {
|
|
setuptChartTable_new(pageTail);
|
|
});
|
|
var _d = new Date();
|
|
layui.laydate.render({
|
|
elem: '#stadate',
|
|
value: _d.getFullYear() + "-" + (_d.getMonth() + 1) + "-" + _d.getDate()
|
|
});
|
|
layui.laydate.render({
|
|
elem: '#enddate',
|
|
value: _d.getFullYear() + "-" + (_d.getMonth() + 1) + "-" + _d.getDate()
|
|
});
|
|
layui.laydate.render({
|
|
elem: '#playerCreateTime'
|
|
, type: 'datetime'
|
|
});
|
|
layui.laydate.render({
|
|
elem: '#timeLimit_start',
|
|
type: 'datetime',
|
|
format: 'yyyy-MM-dd HH:mm',
|
|
});
|
|
layui.laydate.render({
|
|
elem: '#timeLimit_end',
|
|
type: 'datetime',
|
|
format: 'yyyy-MM-dd HH:mm',
|
|
});
|
|
|
|
var args = initPage('已发送');
|
|
});
|
|
|
|
function merge(res) {
|
|
var data = res.data;
|
|
var mergeIndex = 0;//定位需要添加合并属性的行数
|
|
var mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数
|
|
var columsName = ['dateStr', 'uuid'];//需要合并的列名称
|
|
var columsIndex = [0,9];//需要合并的列索引值
|
|
|
|
for (var k = 0; k < columsName.length; k++) { //这里循环所有要合并的列
|
|
var trArr = $(".layui-table-body>.layui-table").find("tr");//所有行
|
|
for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据
|
|
var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列
|
|
var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列
|
|
if (data[i][columsName[k]] == data[i-1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并
|
|
mark += 1;
|
|
tdPreArr.each(function () {//相同列的第一列增加rowspan属性
|
|
$(this).attr("rowspan", mark);
|
|
});
|
|
tdCurArr.each(function () {//当前行隐藏
|
|
$(this).css("display", "none");
|
|
});
|
|
}else {
|
|
mergeIndex = i;
|
|
mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
|
|
}
|
|
}
|
|
mergeIndex = 0;
|
|
mark = 1;
|
|
}
|
|
}
|
|
|
|
function dateToString(d, afterMinutes = 0) {
|
|
let date = new Date(d); //1. js获取当前时间
|
|
|
|
let min = date.getMinutes(); //2. 获取当前分钟
|
|
date.setMinutes(min + afterMinutes); //3. 设置当前时间+afterMinutes分钟:把当前分钟数+afterMinutes后的值重新设置为date对象的分钟数
|
|
console.log(afterMinutes)
|
|
let year = date.getFullYear();
|
|
let month = (date.getMonth() + 1) < 10 ? ("0" + (date.getMonth() + 1)) : (date.getMonth() + 1);
|
|
let day = date.getDate() < 10 ? ("0" + date.getDate()) : date.getDate();
|
|
let hours = date.getHours() < 10 ? ('0' + date.getHours()) : date.getHours()
|
|
let minutes = date.getMinutes() < 10 ? ('0' + date.getMinutes()) : date.getMinutes()
|
|
let seconds = date.getSeconds() < 10 ? ('0' + date.getSeconds()) : date.getSeconds()
|
|
let formatDate = year+'-'+month+'-'+day + " " + hours + ":" + minutes + ":" + seconds;
|
|
return formatDate;
|
|
}
|
|
|
|
function setuptChartTable_new(tail) {
|
|
pageTail=tail;
|
|
layui.table.render({
|
|
elem: '#sendDatatab'
|
|
, url: Page.SvrIp + '/api/select_email' //数据接口
|
|
, where: {
|
|
token: cookie.get("token"),
|
|
startDate: $("#stadate").val(),
|
|
endDate: $("#enddate").val(),
|
|
tail:tail
|
|
}
|
|
, page: true
|
|
, cols: [[
|
|
{ field: 'id', title: '邮件ID', width: 100 },
|
|
{ field: 'is_sync', title: '是否发送', width: 100 },
|
|
{ field: 'dateStr', title: '开始日期', width: 160 },
|
|
{ field: 'endTimeStr', title: '结束日期', width: 160 }
|
|
// , { field: 'timeLimit', title: '到期时间', width: 160, templet: function (d) {
|
|
// var str = dateToString(d.dateStr, d.timeLimit);
|
|
// return str;
|
|
// }
|
|
// }
|
|
, { field: 'name', title: '收件人', width: 80 }
|
|
, { field: 'title', title: '标题', width: 180 }
|
|
// , {
|
|
// field: 'curstr', title: '货币', width: 140, templet: function (d) {
|
|
// var str = "";
|
|
// if (!d.curstr) {
|
|
// return "";
|
|
// }
|
|
// var list = d.curstr.split('#');
|
|
// for (var i in list) {
|
|
// var x = list[i].split('|');
|
|
// str += `id ${x[0]} 数量 ${x[1]}<br/>`;
|
|
// }
|
|
// return str;
|
|
// }
|
|
// }
|
|
, {
|
|
field: 'itemstr', title: '道具', width: 140, templet: function (d) {
|
|
var str = "";
|
|
if (!d.itemstr) {
|
|
return "";
|
|
}
|
|
var list = d.itemstr.split('#');
|
|
for (var i in list) {
|
|
var x = list[i].split('|');
|
|
str += `id ${x[0]} 数量 ${x[1]} <br/>`;
|
|
}
|
|
return str;
|
|
}
|
|
},
|
|
{
|
|
field: 'equipStr', title: '武器', width: 140, templet: function (d) {
|
|
var str = "";
|
|
if (!d.equipStr) {
|
|
return "";
|
|
}
|
|
var list = d.equipStr.split('#');
|
|
for (var i in list) {
|
|
var x = list[i].split('|');
|
|
str += `id ${x[0]} 数量 ${x[1]} <br/>`;
|
|
}
|
|
return str;
|
|
}
|
|
},
|
|
{
|
|
field: 'customItemStr', title: '其他物品', width: 140, templet: function (d) {
|
|
var str = "";
|
|
if (!d.customItemStr) {
|
|
return "";
|
|
}
|
|
var list = d.customItemStr.split('#');
|
|
for (var i in list) {
|
|
var x = list[i].split('|');
|
|
var type="";
|
|
if(x[0]=='4'){
|
|
type='皮肤'
|
|
}if(x[0]=='5'){
|
|
type ="宝石"
|
|
}
|
|
str += `类型:${type},id ${x[1]} 数量 ${x[2]} <br/>`;
|
|
}
|
|
return str;
|
|
}
|
|
}
|
|
, { field: 'realmlist', title: '服务器', width: 80 }
|
|
, { field: 'content', title: '邮件正文', width: 200 }
|
|
, { field: 'uuid', title: '编辑', width: 180, templet: '#bt'}
|
|
, { field: 'contentList', title: '详情', width: 80, templet: '#btDetail'}
|
|
]]
|
|
, parseData: function (res) { //res 即为原始返回的数据
|
|
console.dir(res)
|
|
debugger;
|
|
return {
|
|
"code": res.ret, //解析接口状态
|
|
"msg": res.msg, //解析提示文本
|
|
"count": res.count, //解析数据长度
|
|
"data": res.data //解析数据列表
|
|
};
|
|
},
|
|
done : function(res, curr, count) {
|
|
// merge(res);
|
|
}
|
|
});
|
|
}
|
|
|
|
layui.table.on('tool(sendDatatab)', function(obj){
|
|
var uuid = obj.data.uuid ;
|
|
var id =obj.data.id;
|
|
if(obj.event === 'recall') {
|
|
|
|
layer.confirm('确定撤回该条邮件吗?', function(index){
|
|
var asyncSend=(new Date(obj.data.dateStr).getTime() > new Date().getTime())
|
|
var table="mail_box";
|
|
if(asyncSend){
|
|
table="mail_box_temp"
|
|
}
|
|
$.get(Page.SvrIp + "/api/recall_email",
|
|
{
|
|
token: cookie.get("token"),
|
|
uuid,
|
|
table
|
|
},
|
|
function (data) {
|
|
if (data.ret == 0) {
|
|
layer.msg('撤回成功');
|
|
setuptChartTable_new(pageTail);
|
|
}
|
|
});
|
|
layer.close(index);
|
|
});
|
|
} else if (obj.event === 'openDetail') {
|
|
|
|
var data = obj.data;
|
|
console.log(data.contentList)
|
|
layer.open({
|
|
type: 1
|
|
,offset: 'auto' //具体配置参考:/docs/modules/layer.html#offset
|
|
,id: 'layerDemoAuto'//防止重复弹出
|
|
,content: '<div style="padding: 20px 40px;">'+
|
|
`<p>发送日期:${data.dateStr}</p>` +
|
|
`<p>收件人:${data.name}</p>` +
|
|
`<p>标题:${data.title}</p>` +
|
|
`<p>货币:${data.curstr}</p>` +
|
|
`<p>道具:${data.itemstr}</p>` +
|
|
`<p>自定义:${data.customItemStr }</p>` +
|
|
`<p>服务器:${data.realmlist}</p>` +
|
|
`<p>apk版本参数:${data.versionParam}</p>` +
|
|
`<p>开始时间:${data.dateStr}</p>` +
|
|
`<p>到期时间:${data.endTimeStr}</p>` +
|
|
`<p>玩家创建时间:${getLocalTime(data.playerCreateTime)}</p>` +
|
|
`<p>邮件正文:${data.content}</p>` +
|
|
`<b>邮件正文列表:</b>` +
|
|
`<p>${data.contentList.map(item => {
|
|
return `<p><span>标题:${item.title}</span> <span>内容:${item.content}</span> <span>语言:${item.language}</span> <span>发送者:${item.senderName}</span></p>`
|
|
}).join('')}</p>`
|
|
+'</div>'
|
|
,btn: '关闭'
|
|
,btnAlign: 'c' //按钮居中
|
|
,shade: 0 //不显示遮罩
|
|
,yes: function(){
|
|
layer.closeAll();
|
|
}
|
|
});
|
|
}else if(obj.event=="review"){
|
|
layer.msg('确定将这封邮件发送出去吗?<br>请仔细核对邮件内容', {
|
|
time: 200000, //20s后自动关闭
|
|
btn: ['同意', '拒绝', '再想想'],
|
|
yes: function(index, layero){
|
|
reviewMail(uuid,id,0)
|
|
layer.msg('同意');
|
|
},
|
|
btn2:function(index, layero){
|
|
reviewMail(uuid,id,-2)
|
|
layer.msg('拒绝');
|
|
},
|
|
btn3:function(index,layero){
|
|
layer.msg('好好想想');
|
|
}
|
|
});
|
|
}
|
|
else if(obj.event=="delete"){
|
|
layer.msg('确定要删除?', {
|
|
time: 200000, //20s后自动关闭
|
|
btn: ['删除', '再想想'],
|
|
yes: function(index, layero){
|
|
DeleteReviewMail(uuid,id)
|
|
layer.msg('删除');
|
|
},
|
|
btn2:function(index, layero){
|
|
layer.msg('再想想');
|
|
},
|
|
|
|
});
|
|
}
|
|
|
|
})
|
|
|
|
|
|
function reviewMail(uuid,id,status){
|
|
$.get(Page.SvrIp + "/api/review_mail",
|
|
{
|
|
token: cookie.get("token"),
|
|
uuid,
|
|
id,
|
|
status
|
|
},
|
|
function (data) {
|
|
if (data.ret == 0) {
|
|
layer.msg('操作成功');
|
|
setuptChartTable_new(pageTail);
|
|
}
|
|
});
|
|
}
|
|
function DeleteReviewMail(uuid,id){
|
|
$.get(Page.SvrIp + "/api/delete_refuse_mail",
|
|
{
|
|
token: cookie.get("token"),
|
|
uuid,
|
|
id
|
|
},
|
|
function (data) {
|
|
if (data.ret == 0) {
|
|
layer.msg('操作成功');
|
|
setuptChartTable_new(pageTail);
|
|
}
|
|
});
|
|
}
|
|
|
|
function getLocalTime(nS) {
|
|
return new Date(parseInt(nS) * 1000).toLocaleString();
|
|
}
|
|
</script>
|
|
|
|
|
|
<script type="text/x-handlebars-template" id="box">
|
|
<div class="panel-heading">
|
|
<div class="selectbox pull-right" id="{{chartId}}_datepicker">
|
|
<i class="fa fa-calendar"></i>
|
|
<span>{{startDate}} 至 {{endDate}}</span> <b class="caret"></b>
|
|
</div>
|
|
<div class="pull-right btn-group" data-toggle="buttons">
|
|
<lable class="btn btn-default active" title="图表模式" name="{{chartId}}_mode_chart">
|
|
<input type="radio"><i class="fa fa-bar-chart-o" />
|
|
</lable>
|
|
<lable class="btn btn-default" title="表格模式" name="{{chartId}}_mode_table">
|
|
<input type="radio"><i class="fa fa-table" />
|
|
</lable>
|
|
</div>
|
|
<div>
|
|
<!-- Nav tabs -->
|
|
<ul class="nav nav-pills multibox-tab">
|
|
{{#each tabs}}
|
|
<li{{#if @first}} class="active" {{/if}}>
|
|
<a href="#{{../chartId}}_tab_{{@index}}" data-toggle="tab" desc="{{this}}">{{this}}</a></li>
|
|
{{/each}}
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<!-- /.panel-heading -->
|
|
<div class="panel-body">
|
|
<div class="flot-chart mtss-chart">
|
|
<div class="flot-chart-content" id="{{chartId}}_chartZone"></div>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
<!--<script src="../js/send-email.js"></script>-->
|
|
|
|
<link href="../bower_components/select2/select2.min.css" rel="stylesheet" type="text/css">
|
|
<script type="text/javascript" src="../bower_components/select2/select2.min.js"></script>
|
|
</body>
|
|
|
|
</html>
|
|
|