fix(wxlogin): 修复微信登录 40029 + 新增商家(企业账号)全流程
微信登录修复: - 根因:manifest.json 的 mp-weixin.appid 为空 → 开发者工具用测试号,code 与服务端 appid 不匹配 - 修复:填入 wx40ca4b02d4d1cb58 - WxLogin 增加错误码语义映射(40029 appid 不一致 / 40125 secret 错 / 45011 频繁 / 40226 风控) - 登录页新增手机号登录兜底通道(微信不可用时业务不被卡住) 商家(企业账号): - 新表 fa_merchant / fa_merchant_order / fa_invoice(纯新增,DB 40→45 表) - Merchant 控制器:apply/info/update/bills/invoices/invoice/bindBatch 入驻含企业信息+营业执照+开票信息+结算方式(预付/月结) 账单按月汇总、开票额度按已付-已开票校验、批量下单按批次归属 - Auth::switchRole 支持 merchant(2001/2002/2003 语义码 + redirect) - Auth::profile 增加 is_merchant / merchant 前端: - 登录页角色扩为 业主/师傅/商家 三类 - pages/merchant/apply 企业入驻;workbench 商家工作台(经营数据+按月账单+近期订单+六宫格) - pages/merchant/batch 批量下单(多地址×多数量)→ 逐单建单支付 → 绑定批次 - pages/merchant/invoice 开票申请与记录 - pages/mine 增加商家入驻/切换商家端入口;角色徽章三态 验证:163 项断言全通过(page_flow 47 + e2e 65 + phase2 27 + phase3 24)
这个提交包含在:
@@ -87,6 +87,19 @@ class Auth extends Base
|
||||
];
|
||||
}
|
||||
|
||||
$merchant = Db::name('merchant')->where('user_id', $uid)->find();
|
||||
$merchantInfo = null;
|
||||
if ($merchant) {
|
||||
$merchantInfo = [
|
||||
'id' => (int)$merchant['id'],
|
||||
'name' => $merchant['name'],
|
||||
'verify_status' => $merchant['verify_status'],
|
||||
'audit_msg' => $merchant['audit_msg'],
|
||||
'settle_type' => $merchant['settle_type'],
|
||||
'can_order' => $merchant['verify_status'] === 'pass',
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => (int)$user['id'],
|
||||
'nickname' => $user['nickname'] ?: ('用户' . substr((string)$user['mobile'], -4)),
|
||||
@@ -97,6 +110,8 @@ class Auth extends Base
|
||||
'unread_count' => (int)$unread,
|
||||
'is_master' => $master ? true : false,
|
||||
'master' => $masterInfo,
|
||||
'is_merchant' => $merchant ? true : false,
|
||||
'merchant' => $merchantInfo,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -141,9 +156,10 @@ class Auth extends Base
|
||||
public function switchRole()
|
||||
{
|
||||
$role = $this->request->post('role', 'user');
|
||||
if (!in_array($role, ['user', 'master'], true)) {
|
||||
if (!in_array($role, ['user', 'master', 'merchant'], true)) {
|
||||
$this->error('角色参数错误');
|
||||
}
|
||||
|
||||
if ($role === 'master') {
|
||||
$master = $this->masterInfo();
|
||||
if (!$master) {
|
||||
@@ -156,9 +172,27 @@ class Auth extends Base
|
||||
$this->error('资质未通过:' . $master['audit_msg'], ['verify_status' => 'reject'], 2003);
|
||||
}
|
||||
}
|
||||
$this->success('切换成功', [
|
||||
'role' => $role,
|
||||
'redirect' => $role === 'master' ? '/pages/master/workbench' : '/YJYF/YJYF',
|
||||
]);
|
||||
|
||||
if ($role === 'merchant') {
|
||||
$merchant = Db::name('merchant')->where('user_id', $this->uid())->find();
|
||||
if (!$merchant) {
|
||||
$this->error('请先完成商家入驻', ['need_apply' => 1], 2001);
|
||||
}
|
||||
if ($merchant['verify_status'] === 'pending') {
|
||||
$this->error('商家资质审核中,请耐心等待', ['verify_status' => 'pending'], 2002);
|
||||
}
|
||||
if ($merchant['verify_status'] === 'reject') {
|
||||
$this->error('资质未通过:' . $merchant['audit_msg'], ['verify_status' => 'reject'], 2003);
|
||||
}
|
||||
}
|
||||
|
||||
$redirect = '/YJYF/YJYF';
|
||||
if ($role === 'master') {
|
||||
$redirect = '/pages/master/workbench';
|
||||
} elseif ($role === 'merchant') {
|
||||
$redirect = '/pages/merchant/workbench';
|
||||
}
|
||||
|
||||
$this->success('切换成功', ['role' => $role, 'redirect' => $redirect]);
|
||||
}
|
||||
}
|
||||
|
||||
在新工单中引用
屏蔽一个用户