library_books 思博业务

用户中心开发文档

目录结构

public/template/clientarea/{模板标识}/
├── {模板标识}.php              # 模板配置文件
├── clientarea.html             # 仪表盘/首页
├── login.html                  # 登录页面
├── register.html               # 注册页面
├── hostlist.html               # 产品列表
├── host.html                   # 产品详情
├── orders.html                 # 订单列表
├── order.html                  # 订单详情
├── addfunds.html               # 充值页面
├── balanceLog.html             # 余额日志
├── profile.html                # 个人资料
├── realname.html               # 实名认证
├── verified.html               # 实名认证检测
├── ticketlist.html             # 工单列表
├── ticket.html                 # 工单详情
├── submitaticket.html          # 提交工单
├── common/                     # 公共组件
│   ├── header.html             # 页面头部
│   ├── footer.html             # 页面底部
│   ├── meta.html               # Meta 标签
│   ├── script.html             # 脚本引用
│   ├── sidenav.html            # 侧边导航
│   └── captcha.html            # 验证码组件
└── assets/                     # 静态资源(可选)
    ├── css/
    ├── js/
    └── images/

路由规范

路由对应模板说明
/clientareaclientarea.html仪表盘
/loginlogin.html登录
/registerregister.html注册
/clientarea/hostlisthostlist.html产品列表
/clientarea/host/{id}host.html产品详情
/clientarea/ordersorders.html订单列表
/clientarea/order/{id}order.html订单详情
/clientarea/addfundsaddfunds.html充值
/clientarea/balanceLogbalanceLog.html余额日志
/clientarea/profileprofile.html个人资料
/clientarea/realnamerealname.html实名认证
/clientarea/verifiedverified.html实名认证检测
/clientarea/ticketlistticketlist.html工单列表
/clientarea/ticket/{id}ticket.html工单详情
/clientarea/submitaticketsubmitaticket.html提交工单
/clientarea/page/{name}{name}.html自定义页面

配置文件

<?php

function {模板标识}_MetaData()
{
    return [
        "DisplayName" => "用户中心模板",
        "APIVersion" => "1.0.0",
        "HelpDoc" => "http://example.com"
    ];
}

function {模板标识}_ConfigOptions()
{
    return [
        [
            'key'     => 'site_title',
            'title'   => '网站标题',
            'type'    => 'input',
            'default' => '',
            'options' => [],
            'tip'     => '显示在浏览器标签页',
        ],
        [
            'key'     => 'footer',
            'title'   => '页脚内容',
            'type'    => 'textarea',
            'default' => '',
            'options' => [],
            'tip'     => '支持HTML',
        ],
        [
            'key'     => 'theme',
            'title'   => '主题风格',
            'type'    => 'select',
            'default' => 'light',
            'options' => [
                'light' => '浅色',
                'dark'  => '深色',
            ],
            'tip'     => '选择配色方案',
        ],
    ];
}

配置访问{$config.clientarea_meta.xxx}

字段类型input(单行)、textarea(多行)、select(下拉)

全局变量

变量说明
$site.name站点名称
$site.favicon站点图标
$site.version站点版本
$config系统配置
$user.id用户ID
$user.nickname昵称
$user.email邮箱
$user.mobile手机号
$user.avatar头像URL
$user.money余额
$Request.tokenCSRF Token

页面变量速查

clientarea.html(仪表盘)

变量说明
$runningServices运行中服务数
$accountBalance账户余额
$pendingTickets待处理工单数
$weekConsumption近7天消费
$securityStatus安全状态
$recentServices最近服务列表
$recentOrders最近订单列表

hostlist.html(产品列表)

变量说明
$hosts产品列表(分页)
$p.id产品ID
$p.domain主机名/域名
$p.status状态
$p.product.product_name产品名称
$p.priceMatrix续费周期价格
$page当前页码
$lastPage总页数

host.html(产品详情)

变量说明
$host.id产品ID
$host.domain主机名
$host.status状态
$host.nextduedate到期时间
$host.product.product_name产品名称
$host.product.billing_type计费类型
$moduleButtons模块操作按钮
$priceMatrix续费价格

orders.html(订单列表)

变量说明
$orders订单列表
$order.ordernum订单号
$order.amount金额
$order.status状态
$order.type类型
$order.product.product_name产品名称
$page当前页码
$lastPage总页数

order.html(订单详情)

变量说明
$order.id订单ID
$order.ordernum订单号
$order.amount金额
$order.status状态
$order.create_time创建时间
$order.pay_time支付时间
$order.payment支付方式
$order.product.product_name产品名称
$pay_channel支付渠道列表

ticketlist.html(工单列表)

变量说明
$tickets工单列表
$ticket.id工单ID
$ticket.tid工单编号
$ticket.title标题
$ticket.user_side_status用户侧状态
$ticket.priority优先级
$ticket.category.name部门名称
$page当前页码
$lastPage总页数

ticket.html(工单详情)

变量说明
$ticket.id工单ID
$ticket.tid工单编号
$ticket.title标题
$ticket.content内容
$ticket.user_side_status用户侧状态
$ticket.priority优先级
$replies回复列表
$reply.content回复内容
$reply.is_staff是否为客服回复
$reply.create_time回复时间

profile.html(个人资料)

变量说明
$user.id用户ID
$user.nickname昵称
$user.email邮箱
$user.mobile手机号
$user.avatar头像URL
$user.money余额
$user.group.name用户组名称
$user.create_time注册时间
$securityStatus安全状态
$countries国家/地区列表

realname.html(实名认证)

变量说明
$realNameStatus认证状态
$idv.name真实姓名
$idv.id_card_no证件号码(脱敏)
$idv.reject_reason拒绝原因
$used已使用认证次数
$plugin.free_times_total免费认证次数
$plugin.fee_after_free超出免费次数后的费用

addfunds.html(充值)

变量说明
$user.money当前余额
$paymentMethods可用支付方式
$minAmount最小充值金额
$maxAmount最大充值金额
$rechargeBonuses充值赠送规则

balanceLog.html(余额日志)

变量说明
$user.money当前余额
$increase较上月增加金额
$logs余额变动记录
$log.type类型
$log.amount变动金额
$log.before变动前余额
$log.after变动后余额
$log.remark备注

模板语法

<!-- 变量输出 -->
{$variable}
{$variable|default='默认值'}

<!-- 条件判断 -->
{if $condition}
    ...
{elseif $other}
    ...
{else}
    ...
{/if}

<!-- Switch -->
{switch name="$variable"}
    {case value="a"}...{/case}
    {default}...{/default}
{/switch}

<!-- 循环 -->
{foreach $list as $item}
    {$item.name}
{/foreach}

{volist name="list" id="item" key="k"}
    {$k} - {$item.name}
{/volist}

<!-- 包含文件 -->
{include file="clientarea/{模板标识}/common/header" /}

<!-- PHP 代码块 -->
{php}
$var = 'value';
{/php}

<!-- 使用函数 -->
{$var|htmlspecialchars}
{$time|date='Y-m-d'}

页面结构

普通页面

{php}
$title='页面标题';
{/php}
{include file="clientarea/{模板标识}/common/header" /}

<div class="container px-3 py-4">
    <!-- 页面内容 -->
</div>

{include file="clientarea/{模板标识}/common/footer" /}

登录/注册页面(独立页面)

<!doctype html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>{$site.name|default='系统'} - 登录</title>
    <link href="__CDN__/assets/css/frontend{$Think.config.app_debug?'':'.min'}.css?v={$Think.config.site.version|htmlentities}" rel="stylesheet">
    <script type="text/javascript">
        var require = { config: {$config|json_encode} };
    </script>
</head>
<body>
    <form id="login-form" method="POST" action="">
        {:token()}
        <input type="text" name="account" placeholder="账号">
        <input type="password" name="password" placeholder="密码">
        <!--@IndexLoginFormEnd-->
        <button type="submit">登录</button>
    </form>
    
    <script src="__CDN__/assets/js/require{$Think.config.app_debug?'':'.min'}.js" 
            data-main="__CDN__/assets/js/require-frontend{$Think.config.app_debug?'':'.min'}.js?v={$site.version|htmlentities}" 
            defer></script>
</body>
</html>

注册页面特殊标记<!--@IndexRegisterFormEnd-->

常用 API 接口

订单相关

接口方法参数说明
/api/order/channelsGET-支付方式列表
/api/order/createRechargeOrderPOSTamount, pay_id创建充值订单
/api/order/createRenewOrderPOSThost_id, period_key创建续费订单
/api/order/payPOSTordernum, payment订单支付
/api/order/cancelPOSTordernum取消订单

主机/产品相关

接口方法参数说明
/api/host/controlPOSThost_id, action主机控制(boot/reboot/shutdown)
/api/host/notesPOSThost_id, notes保存主机备注

用户相关

接口方法参数说明
/api/user/profilePOSTnickname, bio更新用户资料
/api/user/changepwdPOSToldpassword, newpassword修改密码
/api/user/avatarPOSTavatar更新头像
/index/user/loginPOSTaccount, password, captcha用户登录
/index/user/registerPOSTusername, email, password用户注册
/index/user/logoutPOST-退出登录

工单相关

接口方法参数说明
/index/clientarea/submitaticketPOSTtitle, department, priority, description提交工单
/clientarea/replyticketPOSTticket_id, content回复工单
/clientarea/closeticketPOSTticket_id关闭工单

附件/上传

接口方法参数说明
/index/attachment/uploadPOSTfile (multipart/form-data)文件上传

调试

{php}
print_r($user);
var_dump($order);
{/php}

附录

Bootstrap Icons 常用图标

图标用途
bi bi-speedometer2仪表盘
bi bi-server服务器/产品
bi bi-wallet2财务/余额
bi bi-gear设置
bi bi-headset工单/客服
bi bi-person用户
bi bi-cart-plus购买
bi bi-check-circle成功/完成
bi bi-inbox空状态

颜色参考

颜色类名用途
主色primary / #0d6efd主要操作、链接
成功success / #198754成功状态、运行中
警告warning / #ffc107警告状态、待处理
危险danger / #dc3545错误、已暂停
信息info / #0dcaf0提示信息

chat_bubble_outline 评论 0

edit 发表评论

目录