数据库: - db/schema_phase1.sql 16 张业务表(类目/服务/地址/师傅/订单/流水/取证/报价/评价/券/钱包/提现/结算/消息) - db/seed_phase1.sql 15 类目 + 32 服务项目 + 新人券(幂等) 后端 API (application/api/controller): - Base/Auth/Home/Address/Order/Master/Review - app/common/library/OrderStatus 11 状态机 + 流转矩阵 - application/api/common.php PHP 8.5 兼容垫片(E_DEPRECATED 不再升级为异常) 测试: - tests/e2e_flow.js 用户下单→支付→师傅抢单→履约→验收→结算→评价 全链路 65 项断言 - 含异常用例:越权/重复操作/非法状态流转/2h 未联系自动回流
28 行
1.9 KiB
HTML
可执行文件
28 行
1.9 KiB
HTML
可执行文件
<!--@formatter:off-->
|
|
{if "[type]" == 'email'}
|
|
<input type="text" name="captcha" class="form-control" data-rule="required;length({$Think.config.fastadmin.ems_captcha_length});digits;remote({:url('api/validate/check_ems_correct')}, event=[event], email:#email)" />
|
|
<span class="input-group-btn" style="padding:0;border:none;">
|
|
<a href="javascript:;" class="btn btn-info btn-captcha" data-url="{:url('api/ems/send')}" data-type="email" data-event="[event]">发送验证码</a>
|
|
</span>
|
|
{elseif "[type]" == 'mobile'/}
|
|
<input type="text" name="captcha" class="form-control" data-rule="required;length({$Think.config.fastadmin.sms_captcha_length});digits;remote({:url('api/validate/check_sms_correct')}, event=[event], mobile:#mobile)" />
|
|
<span class="input-group-btn" style="padding:0;border:none;">
|
|
<a href="javascript:;" class="btn btn-info btn-captcha" data-url="{:url('api/sms/send')}" data-type="mobile" data-event="[event]">发送验证码</a>
|
|
</span>
|
|
{elseif "[type]" == 'wechat'/}
|
|
{if get_addon_info('wechat')}
|
|
<input type="text" name="captcha" class="form-control" data-rule="required;length({$Think.config.captcha.length});remote({:addon_url('wechat/captcha/check')}, event=[event])" />
|
|
<span class="input-group-btn" style="padding:0;border:none;">
|
|
<a href="javascript:;" class="btn btn-info btn-captcha" data-url="{:addon_url('wechat/captcha/send')}" data-type="wechat" data-event="[event]">获取验证码</a>
|
|
</span>
|
|
{else/}
|
|
请在后台插件管理中安装《微信管理插件》
|
|
{/if}
|
|
{elseif "[type]" == 'text' /}
|
|
<input type="text" name="captcha" class="form-control" data-rule="required;length({$Think.config.captcha.length})" />
|
|
<span class="input-group-btn" style="padding:0;border:none;">
|
|
<img src="{:captcha_src()}" width="100" height="32" onclick="this.src = '{:captcha_src()}?r=' + Math.random();"/>
|
|
</span>
|
|
{/if}
|
|
<!--@formatter:on-->
|