feat: IEO后端 — 申购+配售码+开奖+后台
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
@extends('admin._layoutNew')
|
||||
@section('title', 'IEO订单管理')
|
||||
@section('page-content')
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">IEO订单管理</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-btn-group" style="margin-bottom:15px;">
|
||||
<button class="layui-btn layui-btn-sm" onclick="loadData()"><i class="layui-icon"></i> 刷新</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-normal" onclick="forceResult(1)"><i class="layui-icon"></i> 强制中签</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-danger" onclick="forceResult(2)"><i class="layui-icon">ဆ</i> 强制未中</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-warm" onclick="runLottery()"><i class="layui-icon"></i> 执行开奖</button>
|
||||
</div>
|
||||
<table id="orderTable" lay-filter="orderTable"></table>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@section('scripts')
|
||||
<script>
|
||||
layui.use(['table','layer'], function(){
|
||||
var table = layui.table;
|
||||
window.loadData = function(){ table.reload('orderTable'); };
|
||||
|
||||
table.render({
|
||||
elem:'#orderTable', url:'/admin/ieo/order/list', page:true,
|
||||
cols:[[
|
||||
{type:'checkbox'},
|
||||
{field:'id',title:'ID',width:60},
|
||||
{field:'user_id',title:'用户ID',width:70},
|
||||
{field:'user_email',title:'邮箱',width:180},
|
||||
{field:'project_name',title:'项目',width:120},
|
||||
{field:'symbol',title:'代号',width:80},
|
||||
{field:'amount',title:'申购金额',width:100},
|
||||
{field:'token_amount',title:'获得代币',width:100},
|
||||
{field:'status_text',title:'状态',width:90,templet:function(d){
|
||||
var cls=d.status==1?'layui-bg-green':(d.status==2?'':'layui-bg-orange');
|
||||
return '<span class="layui-badge '+cls+'">'+d.status_text+'</span>';
|
||||
}},
|
||||
{field:'force_text',title:'强制结果',width:100},
|
||||
{field:'created_at',title:'申购时间',width:170}
|
||||
]]
|
||||
});
|
||||
|
||||
window.forceResult = function(result){
|
||||
var checked = table.checkStatus('orderTable').data;
|
||||
if(!checked.length) return layer.msg('请先选择订单');
|
||||
var ids = checked.map(function(d){return d.id}).join(',');
|
||||
$.post('/admin/ieo/order/force',{ids:ids,result:result,_token:'{{csrf_token()}}'},function(r){
|
||||
if(r.type=='ok'){layer.msg(r.message);loadData();}else layer.msg(r.message,{icon:2});
|
||||
});
|
||||
};
|
||||
|
||||
window.runLottery = function(){
|
||||
layer.prompt({title:'请输入项目ID'}, function(pid,index){
|
||||
layer.close(index);
|
||||
layer.confirm('确定对项目ID '+pid+' 执行开奖?', function(ci){
|
||||
layer.close(ci);
|
||||
$.post('/admin/ieo/order/lottery',{project_id:pid,_token:'{{csrf_token()}}'},function(r){
|
||||
if(r.type=='ok'){layer.msg(r.message);loadData();}else layer.msg(r.message,{icon:2});
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
@@ -0,0 +1,162 @@
|
||||
@extends('admin._layoutNew')
|
||||
@section('title', 'IEO项目管理')
|
||||
@section('page-content')
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">IEO项目管理</div>
|
||||
<div class="layui-card-body">
|
||||
<button class="layui-btn layui-btn-sm" onclick="addProject()"><i class="layui-icon"></i> 添加项目</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-primary" onclick="loadData()"><i class="layui-icon"></i> 刷新</button>
|
||||
<table id="projectTable" lay-filter="projectTable"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="statusTpl">
|
||||
@{{# if(d.status==0){ }}<span class="layui-badge layui-bg-gray">待发行</span>@{{# } }}
|
||||
@{{# if(d.status==1){ }}<span class="layui-badge layui-bg-green">发行中</span>@{{# } }}
|
||||
@{{# if(d.status==2){ }}<span class="layui-badge">已结束</span>@{{# } }}
|
||||
</script>
|
||||
<script type="text/html" id="typeTpl">
|
||||
@{{# if(d.type==1){ }}申购@{{# } }}
|
||||
@{{# if(d.type==2){ }}配售@{{# } }}
|
||||
</script>
|
||||
<script type="text/html" id="actionTpl">
|
||||
<button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button>
|
||||
@{{# if(d.type==2){ }}
|
||||
<button class="layui-btn layui-btn-xs layui-btn-normal" lay-event="codes">配售码</button>
|
||||
@{{# } }}
|
||||
<button class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</button>
|
||||
</script>
|
||||
|
||||
@endsection
|
||||
@section('scripts')
|
||||
<script>
|
||||
layui.use(['table','layer','form','laydate'], function(){
|
||||
var table = layui.table;
|
||||
var laydate = layui.laydate;
|
||||
window.loadData = function(){ table.reload('projectTable'); };
|
||||
|
||||
table.render({
|
||||
elem:'#projectTable', url:'/admin/ieo/project/list', page:true,
|
||||
cols:[[
|
||||
{field:'id',title:'ID',width:60,sort:true},
|
||||
{field:'name',title:'项目名称',width:120},
|
||||
{field:'symbol',title:'代号',width:80},
|
||||
{field:'type',title:'类型',width:80,templet:'#typeTpl'},
|
||||
{field:'token_price',title:'发行价',width:90},
|
||||
{field:'total_supply',title:'总量',width:100},
|
||||
{field:'real_sold',title:'已售',width:90},
|
||||
{field:'fake_progress',title:'展示进度%',width:90},
|
||||
{field:'min_buy',title:'最低申购',width:90},
|
||||
{field:'max_buy',title:'最高申购',width:90},
|
||||
{field:'subscription_limit',title:'限购次数',width:80},
|
||||
{field:'status',title:'状态',width:80,templet:'#statusTpl'},
|
||||
{field:'start_time',title:'开始时间',width:150},
|
||||
{field:'end_time',title:'结束时间',width:150},
|
||||
{field:'announce_time',title:'公告时间',width:150},
|
||||
{field:'listing_time',title:'上市时间',width:150},
|
||||
{field:'unlock_time',title:'解锁时间',width:150},
|
||||
{fixed:'right',title:'操作',width:200,toolbar:'#actionTpl'}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(projectTable)', function(obj){
|
||||
if(obj.event==='edit') editProject(obj.data);
|
||||
if(obj.event==='codes') openCodes(obj.data);
|
||||
if(obj.event==='del'){
|
||||
layer.confirm('确定删除该项目?',function(i){
|
||||
$.post('/admin/ieo/project/delete',{id:obj.data.id,_token:'{{csrf_token()}}'},function(r){
|
||||
layer.close(i); if(r.type=='ok'){layer.msg('删除成功');loadData();}else layer.msg(r.message,{icon:2});
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
window.addProject = function(){ openForm({}); };
|
||||
window.editProject = function(d){ openForm(d); };
|
||||
|
||||
function openForm(d){
|
||||
var html = '<form class="layui-form" style="padding:20px;">'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">项目名称</label><div class="layui-input-block"><input name="name" class="layui-input" value="'+(d.name||'')+'"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">代号(Symbol)</label><div class="layui-input-block"><input name="symbol" class="layui-input" value="'+(d.symbol||'')+'"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">发行价(USDT)</label><div class="layui-input-block"><input name="token_price" class="layui-input" value="'+(d.token_price||'')+'"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">总供应量</label><div class="layui-input-block"><input name="total_supply" class="layui-input" value="'+(d.total_supply||'')+'"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">最低申购额</label><div class="layui-input-block"><input name="min_buy" class="layui-input" value="'+(d.min_buy||100)+'"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">最高申购额</label><div class="layui-input-block"><input name="max_buy" class="layui-input" value="'+(d.max_buy||10000)+'"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">限购次数</label><div class="layui-input-block"><input name="subscription_limit" class="layui-input" value="'+(d.subscription_limit||0)+'" placeholder="0=不限次数"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">开始时间</label><div class="layui-input-block"><input id="dt_start" name="start_time" class="layui-input" value="'+(d.start_time||'')+'" placeholder="点击选择时间"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">结束时间</label><div class="layui-input-block"><input id="dt_end" name="end_time" class="layui-input" value="'+(d.end_time||'')+'" placeholder="点击选择时间"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">公告时间</label><div class="layui-input-block"><input id="dt_announce" name="announce_time" class="layui-input" value="'+(d.announce_time||'')+'" placeholder="点击选择时间"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">上市时间</label><div class="layui-input-block"><input id="dt_listing" name="listing_time" class="layui-input" value="'+(d.listing_time||'')+'" placeholder="点击选择时间"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">解锁时间</label><div class="layui-input-block"><input id="dt_unlock" name="unlock_time" class="layui-input" value="'+(d.unlock_time||'')+'" placeholder="点击选择时间"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">类型</label><div class="layui-input-block"><select name="type"><option value="1" '+(d.type==1?'selected':'')+'>申购</option><option value="2" '+(d.type==2?'selected':'')+'>配售</option></select></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">状态</label><div class="layui-input-block"><select name="status"><option value="0" '+(d.status==0?'selected':'')+'>待发行</option><option value="1" '+(d.status==1?'selected':'')+'>发行中</option><option value="2" '+(d.status==2?'selected':'')+'>已结束</option></select></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">展示进度%</label><div class="layui-input-block"><input name="fake_progress" class="layui-input" value="'+(d.fake_progress||0)+'"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">项目描述</label><div class="layui-input-block"><textarea name="description" class="layui-textarea">'+(d.description||'')+'</textarea></div></div>'
|
||||
+'</form>';
|
||||
layer.open({
|
||||
type:1, title:d.id?'编辑项目':'添加项目', area:['560px','700px'], content:html,
|
||||
success:function(){
|
||||
['dt_start','dt_end','dt_announce','dt_listing','dt_unlock'].forEach(function(id){
|
||||
laydate.render({elem:'#'+id, type:'datetime', format:'yyyy-MM-dd HH:mm:ss'});
|
||||
});
|
||||
},
|
||||
btn:['保存','取消'],
|
||||
yes:function(index,layero){
|
||||
var form = layero.find('form');
|
||||
var postData = {};
|
||||
form.find('input,select,textarea').each(function(){postData[this.name]=this.value;});
|
||||
if(d.id) postData.id = d.id;
|
||||
postData._token = '{{csrf_token()}}';
|
||||
$.post('/admin/ieo/project/save', postData, function(r){
|
||||
layer.close(index);
|
||||
if(r.type=='ok'){layer.msg('保存成功');loadData();}else layer.msg(r.message,{icon:2});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function openCodes(d){
|
||||
var html = '<div style="padding:15px;">'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">项目</label><div class="layui-input-block"><input class="layui-input" value="'+d.name+' ('+d.symbol+')" readonly></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">生成数量</label><div class="layui-input-block"><input id="gc_count" class="layui-input" value="10" placeholder="要生成多少个配售码"></div></div>'
|
||||
+'<div class="layui-form-item"><label class="layui-form-label">每码金额(USDT)</label><div class="layui-input-block"><input id="gc_amount" class="layui-input" value="'+(d.min_buy||100)+'" placeholder="每个配售码的金额"></div></div>'
|
||||
+'<div class="layui-form-item"><div class="layui-input-block">'
|
||||
+'<button class="layui-btn layui-btn-sm" onclick="doGen('+d.id+')">生成</button>'
|
||||
+'<button class="layui-btn layui-btn-sm layui-btn-primary" onclick="reloadCodes('+d.id+')">刷新</button>'
|
||||
+'</div></div>'
|
||||
+'<table id="codeTable" lay-filter="codeTable"></table>'
|
||||
+'</div>';
|
||||
layer.open({
|
||||
type:1, title:'配售码管理 - '+d.name, area:['800px','600px'], content:html,
|
||||
success:function(){
|
||||
layui.use('table', function(){
|
||||
layui.table.render({
|
||||
elem:'#codeTable', id:'codeTable',
|
||||
url:'/admin/ieo/codes?project_id='+d.id, page:true, limit:20,
|
||||
cols:[[
|
||||
{field:'id',title:'ID',width:60},
|
||||
{field:'code',title:'配售码',width:120},
|
||||
{field:'amount',title:'金额',width:100},
|
||||
{field:'used_text',title:'状态',width:100,templet:function(d){return d.used?'<span class="layui-badge layui-bg-gray">已使用</span>':'<span class="layui-badge layui-bg-green">可用</span>';}},
|
||||
{field:'user_phone',title:'用户手机',width:140},
|
||||
{field:'user_email',title:'用户邮箱'}
|
||||
]]
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
window.doGen = function(pid){
|
||||
var count = $('#gc_count').val(), amount = $('#gc_amount').val();
|
||||
$.post('/admin/ieo/generate_codes', {project_id:pid, count:count, amount:amount, _token:'{{csrf_token()}}'}, function(r){
|
||||
if(r.type=='ok'){ layer.msg(r.message); reloadCodes(pid); }
|
||||
else layer.msg(r.message,{icon:2});
|
||||
});
|
||||
};
|
||||
window.reloadCodes = function(pid){
|
||||
layui.table.reload('codeTable', {url:'/admin/ieo/codes?project_id='+pid});
|
||||
};
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user