第二阶段完善代理商激活码
This commit is contained in:
108
app/agent/controller/Index.php
Normal file
108
app/agent/controller/Index.php
Normal file
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
namespace app\agent\controller;
|
||||
|
||||
use think\admin\Controller;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* 代理商后台
|
||||
*/
|
||||
class Index extends Controller
|
||||
{
|
||||
/**
|
||||
* 生成激活码
|
||||
*/
|
||||
public function generate()
|
||||
{
|
||||
if ($this->request->isPost()) {
|
||||
$count = intval(input('count', 1));
|
||||
$count = max(1, min($count, 100)); // 限制一次最多生成100个
|
||||
|
||||
// 获取当前代理商信息
|
||||
$agentId = session('agent.id');
|
||||
$agent = Db::name('cursor_agents')->where('id', $agentId)->find();
|
||||
if (empty($agent)) {
|
||||
$this->error('代理商信息不存在!');
|
||||
}
|
||||
|
||||
// 开启事务
|
||||
Db::startTrans();
|
||||
try {
|
||||
$codes = [];
|
||||
$agentCodes = [];
|
||||
$now = date('Y-m-d H:i:s');
|
||||
|
||||
for ($i = 0; $i < $count; $i++) {
|
||||
// 生成激活码
|
||||
$codes[] = [
|
||||
'code' => strtoupper(substr(md5(uniqid() . mt_rand()), 0, 16)),
|
||||
'days' => 30, // 固定30天
|
||||
'created_at' => $now,
|
||||
'is_used' => 0
|
||||
];
|
||||
}
|
||||
|
||||
// 批量插入激活码
|
||||
$codeIds = Db::name('cursor_activation_codes')->insertAll($codes);
|
||||
|
||||
// 计算佣金
|
||||
$price = 100; // 固定价格100元
|
||||
$commission = $price * ($agent['commission_rate'] / 100);
|
||||
|
||||
// 如果是二级代理,计算上级佣金
|
||||
$parentCommission = 0;
|
||||
if ($agent['level'] == 2 && $agent['parent_id'] > 0) {
|
||||
$parent = Db::name('cursor_agents')->where('id', $agent['parent_id'])->find();
|
||||
if ($parent) {
|
||||
$parentCommission = $price * ($parent['commission_rate'] / 100);
|
||||
}
|
||||
}
|
||||
|
||||
// 准备代理商激活码数据
|
||||
foreach ($codes as $index => $code) {
|
||||
$agentCodes[] = [
|
||||
'agent_id' => $agentId,
|
||||
'code_id' => $codeIds[$index],
|
||||
'price' => $price,
|
||||
'commission' => $commission,
|
||||
'parent_commission' => $parentCommission,
|
||||
'status' => 0,
|
||||
'created_at' => $now,
|
||||
'updated_at' => $now
|
||||
];
|
||||
}
|
||||
|
||||
// 批量插入代理商激活码关联
|
||||
Db::name('cursor_agent_codes')->insertAll($agentCodes);
|
||||
|
||||
Db::commit();
|
||||
$this->success('生成成功!');
|
||||
} catch (\Exception $e) {
|
||||
Db::rollback();
|
||||
$this->error('生成失败:' . $e->getMessage());
|
||||
}
|
||||
} else {
|
||||
$this->fetch();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的激活码列表
|
||||
*/
|
||||
public function codes()
|
||||
{
|
||||
$this->title = '我的激活码';
|
||||
$agentId = session('agent.id');
|
||||
|
||||
$query = $this->_query('cursor_agent_codes')->alias('ac')
|
||||
->join('cursor_activation_codes c', 'c.id = ac.code_id')
|
||||
->where('ac.agent_id', $agentId)
|
||||
->field('ac.*, c.code, c.days, c.is_used, c.used_at, c.used_by');
|
||||
|
||||
// 数据列表处理
|
||||
$query->equal('c.is_used')->equal('ac.status');
|
||||
// 列表排序并显示
|
||||
$query->order('ac.id desc')->page();
|
||||
}
|
||||
}
|
||||
83
app/agent/view/index/codes.html
Normal file
83
app/agent/view/index/codes.html
Normal file
@@ -0,0 +1,83 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
|
||||
{block name="button"}
|
||||
<button class='layui-btn layui-btn-sm layui-btn-primary' data-modal='{:url("generate")}'>生成激活码</button>
|
||||
{/block}
|
||||
|
||||
{block name="content"}
|
||||
<div class="think-box-shadow">
|
||||
<form class="layui-form layui-form-pane form-search" action="{:sysuri()}" onsubmit="return false" method="get" autocomplete="off">
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">使用状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name='is_used' lay-search class='layui-select'>
|
||||
<option value=''>-- 全部 --</option>
|
||||
<option value='0' {if isset($get.is_used) and $get.is_used=='0'}selected{/if}>未使用</option>
|
||||
<option value='1' {if isset($get.is_used) and $get.is_used=='1'}selected{/if}>已使用</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">结算状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name='status' lay-search class='layui-select'>
|
||||
<option value=''>-- 全部 --</option>
|
||||
<option value='0' {if isset($get.status) and $get.status=='0'}selected{/if}>未结算</option>
|
||||
<option value='1' {if isset($get.status) and $get.status=='1'}selected{/if}>已结算</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<button class="layui-btn layui-btn-primary"><i class="layui-icon"></i> 搜 索</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<table class="layui-table margin-top-10" lay-skin="line">
|
||||
{notempty name='list'}
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='text-left'>激活码</th>
|
||||
<th class='text-left'>有效天数</th>
|
||||
<th class='text-left'>销售价格</th>
|
||||
<th class='text-left'>佣金</th>
|
||||
<th class='text-left'>使用状态</th>
|
||||
<th class='text-left'>使用时间</th>
|
||||
<th class='text-left'>使用者</th>
|
||||
<th class='text-left'>结算状态</th>
|
||||
<th class='text-left'>生成时间</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{/notempty}
|
||||
<tbody>
|
||||
{foreach $list as $key=>$vo}
|
||||
<tr>
|
||||
<td class='text-left'>{$vo.code}</td>
|
||||
<td class='text-left'>{$vo.days} 天</td>
|
||||
<td class='text-left'>{$vo.price}</td>
|
||||
<td class='text-left'>{$vo.commission}</td>
|
||||
<td class='text-left'>
|
||||
{if $vo.is_used eq 1}
|
||||
<span class="color-red">已使用</span>
|
||||
{else}
|
||||
<span class="color-green">未使用</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class='text-left'>{$vo.used_at|format_datetime|default='--'}</td>
|
||||
<td class='text-left'>{$vo.used_by|default='--'}</td>
|
||||
<td class='text-left'>
|
||||
{if $vo.status eq 1}
|
||||
<span class="color-blue">已结算</span>
|
||||
{else}
|
||||
<span class="color-red">未结算</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class='text-left'>{$vo.created_at|format_datetime}</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
{empty name='list'}<span class="notdata">没有记录哦</span>{else}{$pagehtml|raw|default=''}{/empty}
|
||||
</div>
|
||||
{/block}
|
||||
20
app/agent/view/index/generate.html
Normal file
20
app/agent/view/index/generate.html
Normal file
@@ -0,0 +1,20 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
|
||||
{block name="content"}
|
||||
<form class="layui-form layui-card" action="{:request()->url()}" data-auto="true" method="post">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">生成数量</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="count" value="1" required placeholder="请输入要生成的激活码数量" class="layui-input">
|
||||
<tip class="help-block">一次最多可生成100个激活码,每个激活码售价100元</tip>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hr-line-dashed"></div>
|
||||
<div class="layui-form-item text-center">
|
||||
<button class="layui-btn" type="submit">确定生成</button>
|
||||
<button class="layui-btn layui-btn-danger" type="button" data-close>取消</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
Reference in New Issue
Block a user