feat: 期权交易后端 — 下单+自动结算+后台管理

This commit is contained in:
testadmin
2026-04-28 16:05:00 +08:00
parent db5ed78ea9
commit dc19fdb5da
6 changed files with 387 additions and 0 deletions
@@ -0,0 +1,79 @@
@extends('admin._layoutNew')
@section('title', '期权订单管理')
@section('page-content')
<div class="layui-card">
<div class="layui-card-header">期权订单管理</div>
<div class="layui-card-body">
<form class="layui-form" style="margin-bottom:10px;">
<div class="layui-inline">
<input id="f_keyword" class="layui-input" placeholder="用户ID/邮箱">
</div>
<div class="layui-inline">
<select id="f_status">
<option value="">全部状态</option>
<option value="0">待交割</option>
<option value="1">盈利</option>
<option value="2">亏损</option>
</select>
</div>
<div class="layui-inline">
<button type="button" class="layui-btn layui-btn-sm" onclick="searchList()">搜索</button>
</div>
</form>
<div class="layui-btn-group" style="margin-bottom:15px;">
<button class="layui-btn layui-btn-sm" onclick="loadData()"><i class="layui-icon">&#xe9aa;</i> 刷新</button>
<button class="layui-btn layui-btn-sm layui-btn-normal" onclick="settle('')"><i class="layui-icon">&#xe63c;</i> 自动结算</button>
<button class="layui-btn layui-btn-sm" style="background:#00c48c;" onclick="settle('win')"><i class="layui-icon">&#xe605;</i> 强制盈利</button>
<button class="layui-btn layui-btn-sm layui-btn-danger" onclick="settle('lose')"><i class="layui-icon">&#x1006;</i> 强制亏损</button>
</div>
<table id="optionTable" lay-filter="optionTable"></table>
</div>
</div>
@endsection
@section('scripts')
<script>
layui.use(['table','layer','form'], function(){
var table = layui.table;
window.loadData = function(){ table.reload('optionTable', {where:{keyword:$('#f_keyword').val(), status:$('#f_status').val()}}); };
window.searchList = loadData;
table.render({
elem:'#optionTable', id:'optionTable', url:'/admin/option/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:170},
{field:'coinname',title:'交易对',width:100},
{field:'direction',title:'方向',width:80,templet:function(d){
return d.direction=='up'?'<span style="color:#00c48c;font-weight:600">买涨</span>':'<span style="color:#ff4040;font-weight:600">买跌</span>';
}},
{field:'amount',title:'金额',width:100},
{field:'open_price',title:'开仓价',width:110},
{field:'close_price',title:'平仓价',width:110},
{field:'profit_rate',title:'收益率%',width:80},
{field:'income',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:'delivery_time',title:'交割时间',width:160},
{field:'created_at',title:'下单时间',width:160}
]]
});
window.settle = function(force){
var checked = table.checkStatus('optionTable').data;
if(!checked.length) return layer.msg('请先选择订单');
var ids = checked.map(function(d){return d.id}).join(',');
var msg = force==='win'?'强制盈利':(force==='lose'?'强制亏损':'自动结算');
layer.confirm('确定对选中的 '+checked.length+' 个订单执行"'+msg+'"', function(ci){
layer.close(ci);
$.post('/admin/option/order/settle',{ids:ids,force:force,_token:'{{csrf_token()}}'},function(r){
if(r.type=='ok'){layer.msg(r.message);loadData();}else layer.msg(r.message,{icon:2});
});
});
};
});
</script>
@endsection