Bläddra i källkod

feat: tabler theme in admin/invite

M1Screw 2 år sedan
förälder
incheckning
f76beb7664

+ 5 - 23
app/routes.php

@@ -159,12 +159,6 @@ return static function (Slim\App $app): void {
     $app->group('/admin', static function (RouteCollectorProxy $group): void {
     $app->group('/admin', static function (RouteCollectorProxy $group): void {
         $group->get('', App\Controllers\AdminController::class . ':index');
         $group->get('', App\Controllers\AdminController::class . ':index');
         $group->get('/', App\Controllers\AdminController::class . ':index');
         $group->get('/', App\Controllers\AdminController::class . ':index');
-
-        $group->get('/invite', App\Controllers\AdminController::class . ':invite');
-        $group->post('/invite', App\Controllers\AdminController::class . ':addInvite');
-        $group->post('/chginvite', App\Controllers\AdminController::class . ':chgInvite');
-        $group->post('/payback/ajax', App\Controllers\AdminController::class . ':ajaxPayback');
-
         // Node Mange
         // Node Mange
         $group->get('/node', App\Controllers\Admin\NodeController::class . ':index');
         $group->get('/node', App\Controllers\Admin\NodeController::class . ':index');
         $group->get('/node/create', App\Controllers\Admin\NodeController::class . ':create');
         $group->get('/node/create', App\Controllers\Admin\NodeController::class . ':create');
@@ -175,7 +169,6 @@ return static function (Slim\App $app): void {
         $group->put('/node/{id}', App\Controllers\Admin\NodeController::class . ':update');
         $group->put('/node/{id}', App\Controllers\Admin\NodeController::class . ':update');
         $group->delete('/node/{id}', App\Controllers\Admin\NodeController::class . ':delete');
         $group->delete('/node/{id}', App\Controllers\Admin\NodeController::class . ':delete');
         $group->post('/node/ajax', App\Controllers\Admin\NodeController::class . ':ajax');
         $group->post('/node/ajax', App\Controllers\Admin\NodeController::class . ':ajax');
-
         // Ticket Mange
         // Ticket Mange
         $group->get('/ticket', App\Controllers\Admin\TicketController::class . ':index');
         $group->get('/ticket', App\Controllers\Admin\TicketController::class . ':index');
         $group->post('/ticket', App\Controllers\Admin\TicketController::class . ':add');
         $group->post('/ticket', App\Controllers\Admin\TicketController::class . ':add');
@@ -184,7 +177,6 @@ return static function (Slim\App $app): void {
         $group->put('/ticket/{id}', App\Controllers\Admin\TicketController::class . ':update');
         $group->put('/ticket/{id}', App\Controllers\Admin\TicketController::class . ':update');
         $group->delete('/ticket/{id}', App\Controllers\Admin\TicketController::class . ':delete');
         $group->delete('/ticket/{id}', App\Controllers\Admin\TicketController::class . ':delete');
         $group->post('/ticket/ajax', App\Controllers\Admin\TicketController::class . ':ajax');
         $group->post('/ticket/ajax', App\Controllers\Admin\TicketController::class . ':ajax');
-
         // Shop Mange
         // Shop Mange
         $group->get('/shop', App\Controllers\Admin\ShopController::class . ':index');
         $group->get('/shop', App\Controllers\Admin\ShopController::class . ':index');
         $group->post('/shop/ajax', App\Controllers\Admin\ShopController::class . ':ajaxShop');
         $group->post('/shop/ajax', App\Controllers\Admin\ShopController::class . ':ajaxShop');
@@ -193,12 +185,10 @@ return static function (Slim\App $app): void {
         $group->get('/shop/{id}/edit', App\Controllers\Admin\ShopController::class . ':edit');
         $group->get('/shop/{id}/edit', App\Controllers\Admin\ShopController::class . ':edit');
         $group->put('/shop/{id}', App\Controllers\Admin\ShopController::class . ':update');
         $group->put('/shop/{id}', App\Controllers\Admin\ShopController::class . ':update');
         $group->delete('/shop', App\Controllers\Admin\ShopController::class . ':deleteGet');
         $group->delete('/shop', App\Controllers\Admin\ShopController::class . ':deleteGet');
-
         // Bought Mange
         // Bought Mange
         $group->get('/bought', App\Controllers\Admin\ShopController::class . ':bought');
         $group->get('/bought', App\Controllers\Admin\ShopController::class . ':bought');
         $group->delete('/bought', App\Controllers\Admin\ShopController::class . ':deleteBoughtGet');
         $group->delete('/bought', App\Controllers\Admin\ShopController::class . ':deleteBoughtGet');
         $group->post('/bought/ajax', App\Controllers\Admin\ShopController::class . ':ajaxBought');
         $group->post('/bought/ajax', App\Controllers\Admin\ShopController::class . ':ajaxBought');
-
         // Ann Mange
         // Ann Mange
         $group->get('/announcement', App\Controllers\Admin\AnnController::class . ':index');
         $group->get('/announcement', App\Controllers\Admin\AnnController::class . ':index');
         $group->get('/announcement/create', App\Controllers\Admin\AnnController::class . ':create');
         $group->get('/announcement/create', App\Controllers\Admin\AnnController::class . ':create');
@@ -207,7 +197,6 @@ return static function (Slim\App $app): void {
         $group->put('/announcement/{id}', App\Controllers\Admin\AnnController::class . ':update');
         $group->put('/announcement/{id}', App\Controllers\Admin\AnnController::class . ':update');
         $group->delete('/announcement/{id}', App\Controllers\Admin\AnnController::class . ':delete');
         $group->delete('/announcement/{id}', App\Controllers\Admin\AnnController::class . ':delete');
         $group->post('/announcement/ajax', App\Controllers\Admin\AnnController::class . ':ajax');
         $group->post('/announcement/ajax', App\Controllers\Admin\AnnController::class . ':ajax');
-
         // Detect Mange
         // Detect Mange
         $group->get('/detect', App\Controllers\Admin\DetectController::class . ':index');
         $group->get('/detect', App\Controllers\Admin\DetectController::class . ':index');
         $group->get('/detect/create', App\Controllers\Admin\DetectController::class . ':create');
         $group->get('/detect/create', App\Controllers\Admin\DetectController::class . ':create');
@@ -218,19 +207,16 @@ return static function (Slim\App $app): void {
         $group->get('/detect/log', App\Controllers\Admin\DetectController::class . ':log');
         $group->get('/detect/log', App\Controllers\Admin\DetectController::class . ':log');
         $group->post('/detect/ajax', App\Controllers\Admin\DetectController::class . ':ajaxRule');
         $group->post('/detect/ajax', App\Controllers\Admin\DetectController::class . ':ajaxRule');
         $group->post('/detect/log/ajax', App\Controllers\Admin\DetectController::class . ':ajaxLog');
         $group->post('/detect/log/ajax', App\Controllers\Admin\DetectController::class . ':ajaxLog');
-
         // IP Mange
         // IP Mange
         $group->get('/login', App\Controllers\Admin\IpController::class . ':login');
         $group->get('/login', App\Controllers\Admin\IpController::class . ':login');
         $group->get('/alive', App\Controllers\Admin\IpController::class . ':alive');
         $group->get('/alive', App\Controllers\Admin\IpController::class . ':alive');
         $group->post('/login/ajax', App\Controllers\Admin\IpController::class . ':ajaxLogin');
         $group->post('/login/ajax', App\Controllers\Admin\IpController::class . ':ajaxLogin');
         $group->post('/alive/ajax', App\Controllers\Admin\IpController::class . ':ajaxAlive');
         $group->post('/alive/ajax', App\Controllers\Admin\IpController::class . ':ajaxAlive');
-
         // Code Mange
         // Code Mange
         $group->get('/code', App\Controllers\Admin\CodeController::class . ':index');
         $group->get('/code', App\Controllers\Admin\CodeController::class . ':index');
         $group->get('/code/create', App\Controllers\Admin\CodeController::class . ':create');
         $group->get('/code/create', App\Controllers\Admin\CodeController::class . ':create');
         $group->post('/code', App\Controllers\Admin\CodeController::class . ':add');
         $group->post('/code', App\Controllers\Admin\CodeController::class . ':add');
         $group->post('/code/ajax', App\Controllers\Admin\CodeController::class . ':ajaxCode');
         $group->post('/code/ajax', App\Controllers\Admin\CodeController::class . ':ajaxCode');
-
         // User Mange
         // User Mange
         $group->get('/user', App\Controllers\Admin\UserController::class . ':index');
         $group->get('/user', App\Controllers\Admin\UserController::class . ':index');
         $group->get('/user/{id}/edit', App\Controllers\Admin\UserController::class . ':edit');
         $group->get('/user/{id}/edit', App\Controllers\Admin\UserController::class . ':edit');
@@ -239,26 +225,26 @@ return static function (Slim\App $app): void {
         $group->post('/user/create', App\Controllers\Admin\UserController::class . ':createNewUser');
         $group->post('/user/create', App\Controllers\Admin\UserController::class . ':createNewUser');
         $group->delete('/user/{id}', App\Controllers\Admin\UserController::class . ':delete');
         $group->delete('/user/{id}', App\Controllers\Admin\UserController::class . ':delete');
         $group->post('/user/ajax', App\Controllers\Admin\UserController::class . ':ajax');
         $group->post('/user/ajax', App\Controllers\Admin\UserController::class . ':ajax');
-
         // Coupon Mange
         // Coupon Mange
         $group->get('/coupon', App\Controllers\Admin\CouponController::class . ':index');
         $group->get('/coupon', App\Controllers\Admin\CouponController::class . ':index');
         $group->post('/coupon', App\Controllers\Admin\CouponController::class . ':add');
         $group->post('/coupon', App\Controllers\Admin\CouponController::class . ':add');
         $group->post('/coupon/ajax', App\Controllers\Admin\CouponController::class . ':ajax');
         $group->post('/coupon/ajax', App\Controllers\Admin\CouponController::class . ':ajax');
         $group->delete('/coupon/{id}', App\Controllers\Admin\CouponController::class . ':delete');
         $group->delete('/coupon/{id}', App\Controllers\Admin\CouponController::class . ':delete');
         $group->post('/coupon/{id}/disable', App\Controllers\Admin\CouponController::class . ':disable');
         $group->post('/coupon/{id}/disable', App\Controllers\Admin\CouponController::class . ':disable');
-
         // Subscribe Log Mange
         // Subscribe Log Mange
         $group->get('/subscribe', App\Controllers\Admin\SubscribeLogController::class . ':index');
         $group->get('/subscribe', App\Controllers\Admin\SubscribeLogController::class . ':index');
         $group->post('/subscribe/ajax', App\Controllers\Admin\SubscribeLogController::class . ':ajaxSubscribeLog');
         $group->post('/subscribe/ajax', App\Controllers\Admin\SubscribeLogController::class . ':ajaxSubscribeLog');
-
+        // 邀请日志
+        $group->get('/invite', App\Controllers\Admin\InviteController::class . ':invite');
+        $group->post('/invite/update_invite', App\Controllers\Admin\InviteController::class . ':update');
+        $group->post('/invite/add_invite', App\Controllers\Admin\InviteController::class . ':add');
+        $group->post('/invite/ajax', App\Controllers\Admin\InviteController::class . ':ajax');
         // Traffic Log Mange
         // Traffic Log Mange
         $group->get('/trafficlog', App\Controllers\Admin\TrafficLogController::class . ':index');
         $group->get('/trafficlog', App\Controllers\Admin\TrafficLogController::class . ':index');
         $group->post('/trafficlog/ajax', App\Controllers\Admin\TrafficLogController::class . ':ajaxTrafficLog');
         $group->post('/trafficlog/ajax', App\Controllers\Admin\TrafficLogController::class . ':ajaxTrafficLog');
-
         // Detect Ban Mange
         // Detect Ban Mange
         $group->get('/detect/ban', App\Controllers\Admin\DetectBanLogController::class . ':index');
         $group->get('/detect/ban', App\Controllers\Admin\DetectBanLogController::class . ':index');
         $group->post('/detect/ban/ajax', App\Controllers\Admin\DetectBanLogController::class . ':ajaxLog');
         $group->post('/detect/ban/ajax', App\Controllers\Admin\DetectBanLogController::class . ':ajaxLog');
-
         // 设置中心
         // 设置中心
         $group->get('/setting/billing', App\Controllers\Admin\Setting\BillingController::class . ':billing');
         $group->get('/setting/billing', App\Controllers\Admin\Setting\BillingController::class . ':billing');
         $group->post('/setting/billing', App\Controllers\Admin\Setting\BillingController::class . ':saveBilling');
         $group->post('/setting/billing', App\Controllers\Admin\Setting\BillingController::class . ':saveBilling');
@@ -279,13 +265,11 @@ return static function (Slim\App $app): void {
         $group->get('/setting/feature', App\Controllers\Admin\Setting\FeatureController::class . ':feature');
         $group->get('/setting/feature', App\Controllers\Admin\Setting\FeatureController::class . ':feature');
         $group->post('/setting/feature', App\Controllers\Admin\Setting\FeatureController::class . ':saveFeature');
         $group->post('/setting/feature', App\Controllers\Admin\Setting\FeatureController::class . ':saveFeature');
         $group->post('/setting/test_email', App\Controllers\Admin\Setting\EmailController::class . ':testEmail');
         $group->post('/setting/test_email', App\Controllers\Admin\Setting\EmailController::class . ':testEmail');
-
         // 礼品卡
         // 礼品卡
         $group->get('/giftcard', App\Controllers\Admin\GiftCardController::class . ':index');
         $group->get('/giftcard', App\Controllers\Admin\GiftCardController::class . ':index');
         $group->post('/giftcard', App\Controllers\Admin\GiftCardController::class . ':add');
         $group->post('/giftcard', App\Controllers\Admin\GiftCardController::class . ':add');
         $group->post('/giftcard/ajax', App\Controllers\Admin\GiftCardController::class . ':ajax');
         $group->post('/giftcard/ajax', App\Controllers\Admin\GiftCardController::class . ':ajax');
         $group->delete('/giftcard/{id}', App\Controllers\Admin\GiftCardController::class . ':delete');
         $group->delete('/giftcard/{id}', App\Controllers\Admin\GiftCardController::class . ':delete');
-
         // 商品
         // 商品
         $group->get('/product', App\Controllers\Admin\ProductController::class . ':index');
         $group->get('/product', App\Controllers\Admin\ProductController::class . ':index');
         $group->get('/product/create', App\Controllers\Admin\ProductController::class . ':create');
         $group->get('/product/create', App\Controllers\Admin\ProductController::class . ':create');
@@ -295,14 +279,12 @@ return static function (Slim\App $app): void {
         $group->put('/product/{id}', App\Controllers\Admin\ProductController::class . ':update');
         $group->put('/product/{id}', App\Controllers\Admin\ProductController::class . ':update');
         $group->delete('/product/{id}', App\Controllers\Admin\ProductController::class . ':delete');
         $group->delete('/product/{id}', App\Controllers\Admin\ProductController::class . ':delete');
         $group->post('/product/ajax', App\Controllers\Admin\ProductController::class . ':ajax');
         $group->post('/product/ajax', App\Controllers\Admin\ProductController::class . ':ajax');
-
         // 订单
         // 订单
         $group->get('/order', App\Controllers\Admin\OrderController::class . ':index');
         $group->get('/order', App\Controllers\Admin\OrderController::class . ':index');
         $group->get('/order/{id}/view', App\Controllers\Admin\OrderController::class . ':detail');
         $group->get('/order/{id}/view', App\Controllers\Admin\OrderController::class . ':detail');
         $group->post('/order/{id}/cancel', App\Controllers\Admin\OrderController::class . ':cancel');
         $group->post('/order/{id}/cancel', App\Controllers\Admin\OrderController::class . ':cancel');
         $group->delete('/order/{id}', App\Controllers\Admin\OrderController::class . ':delete');
         $group->delete('/order/{id}', App\Controllers\Admin\OrderController::class . ':delete');
         $group->post('/order/ajax', App\Controllers\Admin\OrderController::class . ':ajax');
         $group->post('/order/ajax', App\Controllers\Admin\OrderController::class . ':ajax');
-
         // 账单
         // 账单
         $group->get('/invoice', App\Controllers\Admin\InvoiceController::class . ':index');
         $group->get('/invoice', App\Controllers\Admin\InvoiceController::class . ':index');
         $group->get('/invoice/{id}/view', App\Controllers\Admin\InvoiceController::class . ':detail');
         $group->get('/invoice/{id}/view', App\Controllers\Admin\InvoiceController::class . ':detail');

+ 0 - 142
resources/views/tabler/admin/invite.tpl

@@ -1,142 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">邀请</h1>
-        </div>
-    </div>
-    <div class="container">
-        <section class="content-inner margin-top-no">
-
-            <div class="card">
-                <div class="card-main">
-                    <div class="card-inner">
-                        <p>公共邀请码功能已废弃,如需开放注册请在 .config.php 中将 register_mode 项目设置为 open </p>
-                    </div>
-                </div>
-            </div>
-
-            <div class="card">
-				<div class="card-main">
-					<div class="card-inner">
-						<div class="form-group form-group-label">
-							<label class="floating-label" for="userid">需要修改邀请者的用户</label>
-							<input class="form-control maxwidth-edit" id="userid" type="text">
-							<p class="form-control-guide"><i class="mdi mdi-information"></i>填写用户的ID</p>
-						</div>
-						<div class="form-group form-group-label">
-							<label class="floating-label" for="refid">邀请者的ID</label>
-							<input class="form-control maxwidth-edit" id="refid" type="number">
-						</div>
-					</div>
-					<div class="card-action">
-						<div class="card-action-btn pull-left">
-							<a class="btn btn-flat waves-attach" id="confirm"><span class="mdi mdi-check"></span>&nbsp;更改</a>
-						</div>
-					</div>
-				</div>
-			</div>
-            <div class="card">
-                <div class="card-main">
-                    <div class="card-inner">
-
-                        <div class="form-group form-group-label">
-                            <label class="floating-label" for="uid">需要增加邀请链接数量的用户</label>
-                            <input class="form-control maxwidth-edit" id="uid" type="text">
-                            <p class="form-control-guide"><i class="mdi mdi-information"></i>填写用户的ID,或者用户的完整邮箱</p>
-                        </div>
-                        <div class="form-group form-group-label">
-                            <label class="floating-label" for="prefix">邀请链接数量</label>
-                            <input class="form-control maxwidth-edit" id="num" type="number">
-                        </div>
-                    </div>
-                    <div class="card-action">
-                        <div class="card-action-btn pull-left">
-                            <a class="btn btn-flat waves-attach" id="invite"><span class="mdi mdi-check"></span>&nbsp;增加</a>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <div class="card margin-bottom-no">
-                <div class="card-main">
-                    <div class="card-inner">
-                        <p class="card-heading">返利记录</p>
-                        <p>显示表项: {include file='table/checkbox.tpl'}
-                        </p>
-                        <div class="card-table">
-                            <div class="table-responsive">
-                                {include file='table/table.tpl'}
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            {include file='dialog.tpl'}
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    $$.getElementById('invite').addEventListener('click', () => {
-        $.ajax({
-            type: "POST",
-            url: "/admin/invite",
-            dataType: "json",
-            data: {
-                prefix: $$getValue('invite'),
-                uid: $$getValue('uid'),
-                num: $$getValue('num'),
-            },
-            success: data => {
-                if (data.ret) {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    window.setTimeout("location.href='/admin/invite'", {$config['jump_delay']} );
-                } else {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                }
-                // window.location.reload();
-            },
-            error: jqXHR => {
-                alert(`发生错误:${
-                        jqXHR.status
-                        }`);
-            }
-        })
-    })
-
-    $$.getElementById('confirm').addEventListener('click', () => {
-        $.ajax({
-            type: "POST",
-            url: "/admin/chginvite",
-            dataType: "json",
-            data: {
-                prefix: $$.getElementById('confirm').value,
-                userid: $$.getElementById('userid').value,
-                refid: $$.getElementById('refid').value,
-            },
-            success: data => {
-                if (data.ret) {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    window.setTimeout("location.href='/admin/invite'", {$config['jump_delay']} );
-                } else {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                }
-                // window.location.reload();
-            },
-            error: jqXHR => {
-                alert(`发生错误:${ldelim}jqXHR.status{rdelim}`);
-            }
-        })
-    })
-
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 251 - 0
resources/views/tabler/admin/log/invite.tpl

@@ -0,0 +1,251 @@
+{include file='admin/tabler_header.tpl'}
+
+<div class="page-wrapper">
+    <div class="container-xl">
+        <div class="page-header d-print-none text-white">
+            <div class="row align-items-center">
+                <div class="col">
+                    <h2 class="page-title">
+                        <span class="home-title">返利记录</span>
+                    </h2>
+                    <div class="page-pretitle my-3">
+                        <span class="home-subtitle">查看用户的返利记录</span>
+                    </div>
+                </div>
+                <div class="col-auto ms-auto d-print-none">
+                    <div class="btn-list">
+                        <button href="#" class="btn btn-primary d-none d-sm-inline-block" data-bs-toggle="modal"
+                            data-bs-target="#update-invite-dialog">
+                            <i class="icon ti ti-user-edit"></i>
+                            修改邀请者
+                        </button>
+                        <button href="#" class="btn btn-primary d-none d-sm-inline-block" data-bs-toggle="modal"
+                            data-bs-target="#add-invite-dialog">
+                            <i class="icon ti ti-plus"></i>
+                            添加邀请数量
+                        </button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="page-body">
+        <div class="container-xl">
+            <div class="row row-deck row-cards">
+                <div class="col-12">
+                    <div class="card">
+                        <div class="table-responsive">
+                            <table id="data_table" class="table card-table table-vcenter text-nowrap datatable">
+                                <thead>
+                                    <tr>
+                                        {foreach $details['field'] as $key => $value}
+                                            <th>{$value}</th>
+                                        {/foreach}
+                                    </tr>
+                                </thead>
+                            </table>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="modal modal-blur fade" id="update-invite-dialog" tabindex="-1" role="dialog" aria-hidden="true">
+        <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title">修改邀请者</h5>
+                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+                </div>
+                <div class="modal-body">
+                    {foreach $details['update_dialog'] as $from}
+                        {if $from['type'] == 'input'}
+                            <div class="form-group mb-3 row">
+                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
+                                <div class="col">
+                                    <input id="{$from['id']}" type="text" class="form-control"
+                                        placeholder="{$from['placeholder']}">
+                                </div>
+                            </div>
+                        {/if}
+                        {if $from['type'] == 'textarea'}
+                            <div class="form-group mb-3 row">
+                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
+                                <textarea id="{$from['id']}" class="col form-control" rows="{$from['rows']}"
+                                    placeholder="{$from['placeholder']}"></textarea>
+                            </div>
+                        {/if}
+                        {if $from['type'] == 'select'}
+                            <div class="form-group mb-3 row">
+                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
+                                <div class="col">
+                                    <select id="{$from['id']}" class="col form-select">
+                                        {foreach $from['select'] as $key => $value}
+                                            <option value="{$key}">{$value}</option>
+                                        {/foreach}
+                                    </select>
+                                </div>
+                            </div>
+                        {/if}
+                    {/foreach}
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn me-auto" data-bs-dismiss="modal">取消</button>
+                    <button id="update-invite-button" type="button" class="btn btn-primary" data-bs-dismiss="modal">提交</button>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="modal modal-blur fade" id="add-invite-dialog" tabindex="-1" role="dialog" aria-hidden="true">
+        <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title">添加邀请数量</h5>
+                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+                </div>
+                <div class="modal-body">
+                    {foreach $details['add_dialog'] as $from}
+                        {if $from['type'] == 'input'}
+                            <div class="form-group mb-3 row">
+                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
+                                <div class="col">
+                                    <input id="{$from['id']}" type="text" class="form-control"
+                                        placeholder="{$from['placeholder']}">
+                                </div>
+                            </div>
+                        {/if}
+                        {if $from['type'] == 'textarea'}
+                            <div class="form-group mb-3 row">
+                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
+                                <textarea id="{$from['id']}" class="col form-control" rows="{$from['rows']}"
+                                    placeholder="{$from['placeholder']}"></textarea>
+                            </div>
+                        {/if}
+                        {if $from['type'] == 'select'}
+                            <div class="form-group mb-3 row">
+                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
+                                <div class="col">
+                                    <select id="{$from['id']}" class="col form-select">
+                                        {foreach $from['select'] as $key => $value}
+                                            <option value="{$key}">{$value}</option>
+                                        {/foreach}
+                                    </select>
+                                </div>
+                            </div>
+                        {/if}
+                    {/foreach}
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn me-auto" data-bs-dismiss="modal">取消</button>
+                    <button id="add-invite-button" type="button" class="btn btn-primary" data-bs-dismiss="modal">提交</button>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <script>
+        var table = $('#data_table').DataTable({
+            ajax: {
+                url: '/admin/invite/ajax',
+                type: 'POST',
+                dataSrc: 'paybacks'
+            },
+            "autoWidth":false,
+            'iDisplayLength': 10,
+            'scrollX': true,
+            'order': [
+                [1, 'asc']
+            ],
+            columns: [
+                {foreach $details['field'] as $key => $value}
+                { data: '{$key}' },
+                {/foreach}
+            ],
+            "columnDefs":[
+                { targets:[0],orderable:false },
+            ],
+            "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
+                "<'row'<'col-sm-12'tr>>" +
+                "<'row card-footer d-flex align-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
+            language: {
+                "sProcessing": "处理中...",
+                "sLengthMenu": "显示 _MENU_ 条",
+                "sZeroRecords": "没有匹配结果",
+                "sInfo": "第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
+                "sInfoEmpty": "第 0 至 0 项结果,共 0 项",
+                "sInfoFiltered": "(在 _MAX_ 项中查找)",
+                "sInfoPostFix": "",
+                "sSearch": "<i class=\"ti ti-search\"></i> ",
+                "sUrl": "",
+                "sEmptyTable": "表中数据为空",
+                "sLoadingRecords": "载入中...",
+                "sInfoThousands": ",",
+                "oPaginate": {
+                    "sFirst": "首页",
+                    "sPrevious": "<i class=\"ti ti-arrow-left\"></i>",
+                    "sNext": "<i class=\"ti ti-arrow-right\"></i>",
+                    "sLast": "末页"
+                },
+                "oAria": {
+                    "sSortAscending": ": 以升序排列此列",
+                    "sSortDescending": ": 以降序排列此列"
+                }
+            }
+        });
+
+        $("#update-invite-button").click(function() {
+            $.ajax({
+                type: "POST",
+                url: "/admin/invite/update_invite",
+                dataType: "json",
+                data: {
+                    {foreach $details['update_dialog'] as $from}
+                        {$from['id']}: $('#{$from['id']}').val(),
+                    {/foreach}
+                },
+                success: function(data) {
+                    if (data.ret == 1) {
+                        $('#success-message').text(data.msg);
+                        $('#success-dialog').modal('show');
+                        reloadTableAjax();
+                    } else {
+                        $('#fail-message').text(data.msg);
+                        $('#fail-dialog').modal('show');
+                    }
+                }
+            })
+        });
+
+        $("#add-invite-button").click(function() {
+            $.ajax({
+                type: "POST",
+                url: "/admin/invite/add_invite",
+                dataType: "json",
+                data: {
+                    {foreach $details['add_dialog'] as $from}
+                        {$from['id']}: $('#{$from['id']}').val(),
+                    {/foreach}
+                },
+                success: function(data) {
+                    if (data.ret == 1) {
+                        $('#success-message').text(data.msg);
+                        $('#success-dialog').modal('show');
+                        reloadTableAjax();
+                    } else {
+                        $('#fail-message').text(data.msg);
+                        $('#fail-dialog').modal('show');
+                    }
+                }
+            })
+        });
+
+        function loadTable() {
+            table;
+        }
+
+        loadTable();
+    </script>
+
+{include file='admin/tabler_footer.tpl'}

+ 1 - 1
resources/views/tabler/admin/log/login.tpl

@@ -6,7 +6,7 @@
             <div class="row align-items-center">
             <div class="row align-items-center">
                 <div class="col">
                 <div class="col">
                     <h2 class="page-title">
                     <h2 class="page-title">
-                        <span class="home-title">登录IP</span>
+                        <span class="home-title">登录记录</span>
                     </h2>
                     </h2>
                     <div class="page-pretitle my-3">
                     <div class="page-pretitle my-3">
                         <span class="home-subtitle">查看用户账户的登录记录</span>
                         <span class="home-subtitle">查看用户账户的登录记录</span>

+ 2 - 18
resources/views/tabler/admin/user/index.tpl

@@ -16,15 +16,11 @@
                 </div>
                 </div>
                 <div class="col-auto ms-auto d-print-none">
                 <div class="col-auto ms-auto d-print-none">
                     <div class="btn-list">
                     <div class="btn-list">
-                        <a href="#" class="btn btn-primary d-none d-sm-inline-block" data-bs-toggle="modal"
+                        <button href="#" class="btn btn-primary d-none d-sm-inline-block" data-bs-toggle="modal"
                             data-bs-target="#create-dialog">
                             data-bs-target="#create-dialog">
                             <i class="icon ti ti-plus"></i>
                             <i class="icon ti ti-plus"></i>
                             创建
                             创建
-                        </a>
-                        <a href="#" class="btn btn-primary d-sm-none btn-icon" data-bs-toggle="modal"
-                            data-bs-target="#create-dialog">
-                            <i class="icon ti ti-plus"></i>
-                        </a>
+                        </button>
                     </div>
                     </div>
                 </div>
                 </div>
             </div>
             </div>
@@ -90,17 +86,6 @@
                             </div>
                             </div>
                         {/if}
                         {/if}
                     {/foreach}
                     {/foreach}
-                    <div class="form-group mb-3 row">
-                        <label class="form-label col-3 col-form-label">开通套餐</label>
-                        <div class="col">
-                            <select id="new_user_add_shop" class="col form-select">
-                                <option value="0">不开通</option>
-                                {foreach $shops as $shop}
-                                    <option value="{$shop->id}">{$shop->name}</option>
-                                {/foreach}
-                            </select>
-                        </div>
-                    </div>
                 </div>
                 </div>
                 <div class="modal-footer">
                 <div class="modal-footer">
                     <button type="button" class="btn me-auto" data-bs-dismiss="modal">取消</button>
                     <button type="button" class="btn me-auto" data-bs-dismiss="modal">取消</button>
@@ -173,7 +158,6 @@
                     {foreach $details['create_dialog'] as $from}
                     {foreach $details['create_dialog'] as $from}
                         {$from['id']}: $('#{$from['id']}').val(),
                         {$from['id']}: $('#{$from['id']}').val(),
                     {/foreach}
                     {/foreach}
-                    product: $('#new_user_add_shop').val(),
                 },
                 },
                 success: function(data) {
                 success: function(data) {
                     if (data.ret == 1) {
                     if (data.ret == 1) {

+ 166 - 0
src/Controllers/Admin/InviteController.php

@@ -0,0 +1,166 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Controllers\Admin;
+
+use App\Controllers\BaseController;
+use App\Models\Payback;
+use App\Models\User;
+use App\Utils\Tools;
+use Slim\Http\Response;
+use Slim\Http\ServerRequest;
+
+final class InviteController extends BaseController
+{
+    public static $details =
+    [
+        'field' => [
+            'id' => '事件ID',
+            'total' => '原始金额',
+            'userid' => '发起用户ID',
+            'user_name' => '发起用户名',
+            'ref_by' => '获利用户ID',
+            'ref_user_name' => '获利用户名',
+            'ref_get' => '获利金额',
+            'datetime' => '时间',
+        ],
+        'update_dialog' => [
+            [
+                'id' => 'userid',
+                'info' => '修改的用户',
+                'type' => 'input',
+                'placeholder' => '需要修改邀请者的用户 ID 或 Email',
+            ],
+            [
+                'id' => 'refid',
+                'info' => '邀请者 ID',
+                'type' => 'input',
+                'placeholder' => '目标邀请者的用户 ID',
+            ],
+        ],
+        'add_dialog' => [
+            [
+                'id' => 'userid',
+                'info' => '修改的用户',
+                'type' => 'input',
+                'placeholder' => '需要邀请数量的用户 ID 或 Email',
+            ],
+            [
+                'id' => 'invite_num',
+                'info' => '邀请数量',
+                'type' => 'input',
+                'placeholder' => '需要添加的邀请数量',
+            ],
+        ],
+    ];
+
+    /**
+     * 后台邀请记录页面
+     *
+     * @param array     $args
+     */
+    public function invite(ServerRequest $request, Response $response, array $args)
+    {
+        return $response->write(
+            $this->view()
+                ->assign('details', self::$details)
+                ->fetch('admin/log/invite.tpl')
+        );
+    }
+
+    /**
+     * 更改用户邀请者
+     *
+     * @param array     $args
+     */
+    public function update(ServerRequest $request, Response $response, array $args)
+    {
+        $userid = $request->getParam('userid');
+
+        if ($userid === null) {
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '参数错误',
+            ]);
+        }
+
+        if (strpos($userid, '@') !== false) {
+            $user = User::where('email', '=', $userid)->first();
+        } else {
+            $user = User::find((int) $userid);
+        }
+
+        if ($user === null) {
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '邀请者更改失败,检查用户 ID/Email 是否输入正确',
+            ]);
+        }
+
+        $user->ref_by = $request->getParam('refid', 0);  //如未提供,则删除用户的邀请者
+        $user->save();
+
+        return $response->withJson([
+            'ret' => 1,
+            'msg' => '邀请者更改成功',
+        ]);
+    }
+
+    /**
+     * 为用户添加邀请次数
+     *
+     * @param array     $args
+     */
+    public function add(ServerRequest $request, Response $response, array $args)
+    {
+        $invite_num = $request->getParam('invite_num');
+
+        if (Tools::isInt($invite_num) === false) {
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '参数错误',
+            ]);
+        }
+
+        if (strpos($request->getParam('userid'), '@') !== false) {
+            $user = User::where('email', '=', $request->getParam('userid'))->first();
+        } else {
+            $user = User::find((int) $request->getParam('userid'));
+        }
+
+        if ($user === null) {
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '邀请次数添加失败,检查用户 ID/Email 是否输入正确',
+            ]);
+        }
+
+        $user->addInviteNum((int) $invite_num);
+
+        return $response->withJson([
+            'ret' => 1,
+            'msg' => '邀请次数添加成功',
+        ]);
+    }
+
+    /**
+     * 后台登录记录页面 AJAX
+     *
+     * @param array     $args
+     */
+    public function ajax(ServerRequest $request, Response $response, array $args)
+    {
+        $paybacks = Payback::orderBy('id', 'desc')->get();
+
+        foreach ($paybacks as $payback) {
+            $payback->datetime = Tools::toDateTime((int) $payback->datetime);
+            $payback->user_name = User::find($payback->userid)->user_name;
+            $payback->ref_user_name = User::find($payback->ref_by)->user_name;
+        }
+
+        return $response->withJson([
+            'paybacks' => $paybacks,
+        ]);
+    }
+}

+ 0 - 23
src/Controllers/Admin/UserController.php

@@ -6,8 +6,6 @@ namespace App\Controllers\Admin;
 
 
 use App\Controllers\AuthController;
 use App\Controllers\AuthController;
 use App\Controllers\BaseController;
 use App\Controllers\BaseController;
-use App\Models\Bought;
-use App\Models\Shop;
 use App\Models\User;
 use App\Models\User;
 use App\Services\Auth;
 use App\Services\Auth;
 use App\Utils\Check;
 use App\Utils\Check;
@@ -98,7 +96,6 @@ final class UserController extends BaseController
     {
     {
         return $response->write(
         return $response->write(
             $this->view()
             $this->view()
-                ->assign('shops', Shop::orderBy('name')->get())
                 ->assign('details', self::$details)
                 ->assign('details', self::$details)
                 ->fetch('admin/user/index.tpl')
                 ->fetch('admin/user/index.tpl')
         );
         );
@@ -113,7 +110,6 @@ final class UserController extends BaseController
         $ref_by = $request->getParam('ref_by');
         $ref_by = $request->getParam('ref_by');
         $password = $request->getParam('password');
         $password = $request->getParam('password');
         $balance = $request->getParam('balance');
         $balance = $request->getParam('balance');
-        $shop_id = $request->getParam('product');
 
 
         try {
         try {
             if ($email === '') {
             if ($email === '') {
@@ -131,25 +127,6 @@ final class UserController extends BaseController
             }
             }
             AuthController::registerHelper($response, 'user', $email, $password, '', 1, '', 0, $balance, 1);
             AuthController::registerHelper($response, 'user', $email, $password, '', 1, '', 0, $balance, 1);
             $user = User::where('email', $email)->first();
             $user = User::where('email', $email)->first();
-            if ($shop_id > 0) {
-                $shop = Shop::find($shop_id);
-                if ($shop !== null) {
-                    $bought = new Bought();
-                    $bought->userid = $user->id;
-                    $bought->shopid = $shop->id;
-                    $bought->datetime = \time();
-                    $bought->renew = 0;
-                    $bought->coupon = '';
-                    $bought->price = $shop->price;
-                    $bought->save();
-                    $shop->buy($user);
-                } else {
-                    return $response->withJson([
-                        'ret' => 0,
-                        'msg' => '添加失败,套餐不存在',
-                    ]);
-                }
-            }
             if ($ref_by !== '') {
             if ($ref_by !== '') {
                 $user->ref_by = (int) $ref_by;
                 $user->ref_by = (int) $ref_by;
                 $user->save();
                 $user->save();

+ 0 - 117
src/Controllers/AdminController.php

@@ -4,13 +4,7 @@ declare(strict_types=1);
 
 
 namespace App\Controllers;
 namespace App\Controllers;
 
 
-use App\Models\User;
 use App\Services\Analytics;
 use App\Services\Analytics;
-use App\Services\Config;
-use App\Utils\ResponseHelper;
-use App\Utils\Tools;
-use Ozdemir\Datatables\Datatables;
-use Ozdemir\Datatables\DB\MySQL;
 use Slim\Http\Response;
 use Slim\Http\Response;
 use Slim\Http\ServerRequest;
 use Slim\Http\ServerRequest;
 
 
@@ -32,115 +26,4 @@ final class AdminController extends BaseController
                 ->fetch('admin/index.tpl')
                 ->fetch('admin/index.tpl')
         );
         );
     }
     }
-
-    /**
-     * 后台邀请返利页面
-     *
-     * @param array     $args
-     */
-    public function invite(ServerRequest $request, Response $response, array $args)
-    {
-        return $response->write(
-            $this->view()
-                ->assign('table_config', ResponseHelper::buildTableConfig([
-                    'id' => 'ID',
-                    'total' => '原始金额',
-                    'event_user_id' => '发起用户ID',
-                    'event_user_name' => '发起用户名',
-                    'ref_user_id' => '获利用户ID',
-                    'ref_user_name' => '获利用户名',
-                    'ref_get' => '获利金额',
-                    'datetime' => '时间',
-                ], 'payback/ajax'))
-                ->fetch('admin/invite.tpl')
-        );
-    }
-
-    /**
-     * 后台邀请返利页面 AJAX
-     *
-     * @param array     $args
-     */
-    public function ajaxPayback(ServerRequest $request, Response $response, array $args)
-    {
-        $datatables = new Datatables(new MySQL(Config::getDbConfig()));
-        $datatables->query('Select payback.id,payback.total,payback.userid as event_user_id,event_user.user_name as event_user_name,payback.ref_by as ref_user_id,ref_user.user_name as ref_user_name,payback.ref_get,payback.datetime from payback,user as event_user,user as ref_user where event_user.id = payback.userid and ref_user.id = payback.ref_by');
-        $datatables->edit('datetime', static function ($data) {
-            return date('Y-m-d H:i:s', $data['datetime']);
-        });
-        return $response->write(
-            (string) $datatables->generate()
-        );
-    }
-
-    /**
-     * 更改用户邀请者
-     *
-     * @param array     $args
-     */
-    public function chgInvite(ServerRequest $request, Response $response, array $args)
-    {
-        $userid = $request->getParam('userid');
-        if ($userid === null) {
-            return $response->withJson([
-                'ret' => 0,
-                'msg' => '邀请者更改失败,检查用户id是否输入正确',
-            ]);
-        }
-        if (strpos($userid, '@') !== false) {
-            $user = User::where('email', '=', $userid)->first();
-        } else {
-            $user = User::find((int) $userid);
-        }
-        if ($user === null) {
-            return $response->withJson([
-                'ret' => 0,
-                'msg' => '邀请者更改失败,检查用户id是否输入正确',
-            ]);
-        }
-        $user->ref_by = $request->getParam('refid', 0);  //如未提供,则删除用户的邀请者
-        $user->save();
-        return $response->withJson([
-            'ret' => 1,
-            'msg' => '邀请者更改成功',
-        ]);
-    }
-
-    /**
-     * 为用户添加邀请次数
-     *
-     * @param array     $args
-     */
-    public function addInvite(ServerRequest $request, Response $response, array $args)
-    {
-        $num = $request->getParam('num');
-        if (Tools::isInt($num) === false) {
-            return $response->withJson([
-                'ret' => 0,
-                'msg' => '非法请求',
-            ]);
-        }
-        if ($request->getParam('uid') === '0') {
-            return $response->withJson([
-                'ret' => 0,
-                'msg' => '邀请次数添加失败,检查用户id或者用户邮箱是否输入正确',
-            ]);
-        }
-        if (strpos($request->getParam('uid'), '@') !== false) {
-            $user = User::where('email', '=', $request->getParam('uid'))->first();
-        } else {
-            $user = User::find((int) $request->getParam('uid'));
-        }
-        if ($user === null) {
-            return $response->withJson([
-                'ret' => 0,
-                'msg' => '邀请次数添加失败,检查用户id或者用户邮箱是否输入正确',
-            ]);
-        }
-        $user->addInviteNum((int) $num);
-        return $response->withJson([
-            'ret' => 1,
-            'msg' => '邀请次数添加成功',
-        ]);
-    }
 }
 }