```
feat(shopro_huifu): 完善进件功能支持编辑模式 - 修改Onboard控制器中的saveDraft方法,增加onboardId参数以支持编辑现有记录 - 在前端模板中优化用户和角色显示,添加条件渲染和样式类 - 新增resolveRoleLabel方法用于解析角色标签,优化角色标签显示逻辑 - 调整表单数据处理流程,确保编辑模式下正确获取用户和角色信息 - 增强数据验证逻辑,防止非法操作和数据不一致问题 ```
这个提交包含在:
@@ -145,7 +145,8 @@ class Onboard extends Base
|
||||
}
|
||||
try {
|
||||
$service = new HuifuOnboardAdminService();
|
||||
$saved = $service->saveDraft($userId, $roleType, $roleRefId, $form);
|
||||
$onboardId = $row ? intval($row['id']) : 0;
|
||||
$saved = $service->saveDraft($userId, $roleType, $roleRefId, $form, $onboardId);
|
||||
$this->success('进件资料已保存,状态为待后台审核', null, [
|
||||
'id' => $saved ? $saved['id'] : 0,
|
||||
]);
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户" v-else>
|
||||
<span>{{ userLabel }}</span>
|
||||
<div>{{ userLabel }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="进件角色" v-if="!isEdit">
|
||||
<el-select v-model="roleKey" placeholder="请先选择用户" class="form-input" :disabled="!roleOptions.length" @change="onRoleChange">
|
||||
@@ -209,7 +209,8 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="进件角色" v-else>
|
||||
<span>{{ roleLabel }}</span>
|
||||
<span v-if="roleLabel" class="user-role-tag" :class="'user-role-tag--' + roleType">{{ roleLabel }}</span>
|
||||
<span v-else style="color:#909399;">-</span>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -7,20 +7,31 @@ use think\Db;
|
||||
|
||||
class HuifuOnboardAdminService
|
||||
{
|
||||
public function saveDraft($userId, $roleType, $roleRefId, array $formData)
|
||||
public function saveDraft($userId, $roleType, $roleRefId, array $formData, $onboardId = 0)
|
||||
{
|
||||
$userId = intval($userId);
|
||||
$roleRefId = intval($roleRefId);
|
||||
if ($userId <= 0) {
|
||||
throw new \InvalidArgumentException('请选择用户');
|
||||
$onboardId = intval($onboardId);
|
||||
if ($onboardId > 0) {
|
||||
$row = Onboard::get($onboardId);
|
||||
if (!$row) {
|
||||
throw new \InvalidArgumentException('进件记录不存在');
|
||||
}
|
||||
$userId = intval($row['user_id']);
|
||||
$roleType = (string) $row['role_type'];
|
||||
$roleRefId = intval($row['role_ref_id']);
|
||||
} else {
|
||||
$userId = intval($userId);
|
||||
$roleRefId = intval($roleRefId);
|
||||
if ($userId <= 0) {
|
||||
throw new \InvalidArgumentException('请选择用户');
|
||||
}
|
||||
if (!in_array($roleType, ['promoter', 'regional_agent'], true)) {
|
||||
throw new \InvalidArgumentException('请选择进件角色');
|
||||
}
|
||||
$this->assertRoleBinding($userId, $roleType, $roleRefId);
|
||||
}
|
||||
if (!in_array($roleType, ['promoter', 'regional_agent'], true)) {
|
||||
throw new \InvalidArgumentException('请选择进件角色');
|
||||
}
|
||||
$this->assertRoleBinding($userId, $roleType, $roleRefId);
|
||||
|
||||
$service = new HuifuOnboardService();
|
||||
return $service->saveDraft($userId, $roleType, $roleRefId, $formData);
|
||||
return $service->saveDraft($userId, $roleType, $roleRefId, $formData, $onboardId);
|
||||
}
|
||||
|
||||
protected function assertRoleBinding($userId, $roleType, $roleRefId)
|
||||
|
||||
@@ -506,6 +506,27 @@ class HuifuOnboardAdminView
|
||||
];
|
||||
}
|
||||
|
||||
protected static function resolveRoleLabel($roleType, $roleRefId, array $roles = [])
|
||||
{
|
||||
foreach ($roles as $role) {
|
||||
if ($role['role_type'] === $roleType && intval($role['role_ref_id']) === intval($roleRefId)) {
|
||||
return $role['role_label'];
|
||||
}
|
||||
}
|
||||
if ($roleType === 'promoter') {
|
||||
return '分销商';
|
||||
}
|
||||
if ($roleType === 'regional_agent') {
|
||||
$agent = Db::name('shopro_regional_agent')->where('id', $roleRefId)->find();
|
||||
$label = '区域公司';
|
||||
if ($agent && !empty($agent['area_name'])) {
|
||||
$label .= '(' . $agent['area_name'] . ')';
|
||||
}
|
||||
return $label;
|
||||
}
|
||||
return $roleType;
|
||||
}
|
||||
|
||||
public static function formDataFromRow($row)
|
||||
{
|
||||
$data = is_array($row) ? $row : $row->toArray();
|
||||
@@ -516,22 +537,20 @@ class HuifuOnboardAdminView
|
||||
$form[$field] = self::fullUrl($form[$field]);
|
||||
}
|
||||
}
|
||||
$user = self::fetchUser($data['user_id'] ?? 0);
|
||||
$roles = self::listRolesForUser($data['user_id'] ?? 0);
|
||||
$roleLabel = '';
|
||||
foreach ($roles as $role) {
|
||||
if ($role['role_type'] === ($data['role_type'] ?? '') && intval($role['role_ref_id']) === intval($data['role_ref_id'] ?? 0)) {
|
||||
$roleLabel = $role['role_label'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
$userId = intval($data['user_id'] ?? 0);
|
||||
$user = self::fetchUser($userId);
|
||||
$userOption = self::formatUserOption($user);
|
||||
$roles = self::listRolesForUser($userId);
|
||||
$roleType = (string) ($data['role_type'] ?? '');
|
||||
$roleRefId = intval($data['role_ref_id'] ?? 0);
|
||||
$roleLabel = self::resolveRoleLabel($roleType, $roleRefId, $roles);
|
||||
|
||||
return [
|
||||
'onboard_id' => intval($data['id'] ?? 0),
|
||||
'user_id' => intval($data['user_id'] ?? 0),
|
||||
'user_label' => trim(($user['nickname'] ?? '') . ' (' . ($user['mobile'] ?? $data['user_id']) . ')'),
|
||||
'role_type' => $data['role_type'] ?? '',
|
||||
'role_ref_id' => intval($data['role_ref_id'] ?? 0),
|
||||
'user_id' => $userId,
|
||||
'user_label' => $userOption['option_label'] ?? trim(($user['nickname'] ?? '') . ' (' . ($user['mobile'] ?? $userId) . ')'),
|
||||
'role_type' => $roleType,
|
||||
'role_ref_id' => $roleRefId,
|
||||
'role_label' => $roleLabel,
|
||||
'onboard_status' => $data['onboard_status'] ?? '',
|
||||
'form' => $form,
|
||||
|
||||
@@ -31,7 +31,7 @@ class HuifuOnboardService
|
||||
/**
|
||||
* 用户申请时仅保存进件资料,待后台业务审核通过后再提交汇付
|
||||
*/
|
||||
public function saveDraft($userId, $roleType, $roleRefId, array $formData)
|
||||
public function saveDraft($userId, $roleType, $roleRefId, array $formData, $onboardId = 0)
|
||||
{
|
||||
if (!HuifuOnboardGate::isOnboardRequired()) {
|
||||
return null;
|
||||
@@ -41,7 +41,15 @@ class HuifuOnboardService
|
||||
}
|
||||
|
||||
$form = HuifuOnboardValidator::validateSubmit($formData);
|
||||
$row = Onboard::findByRole($userId, $roleType, $roleRefId);
|
||||
$onboardId = intval($onboardId);
|
||||
if ($onboardId > 0) {
|
||||
$row = Onboard::get($onboardId);
|
||||
if (!$row || intval($row['user_id']) !== intval($userId)) {
|
||||
throw new \InvalidArgumentException('进件记录不存在');
|
||||
}
|
||||
} else {
|
||||
$row = Onboard::findByRole($userId, $roleType, $roleRefId);
|
||||
}
|
||||
if ($row && $row['onboard_status'] === Onboard::STATUS_APPROVED) {
|
||||
return $row;
|
||||
}
|
||||
|
||||
@@ -147,7 +147,8 @@ class Onboard extends Base
|
||||
}
|
||||
try {
|
||||
$service = new HuifuOnboardAdminService();
|
||||
$saved = $service->saveDraft($userId, $roleType, $roleRefId, $form);
|
||||
$onboardId = $row ? intval($row['id']) : 0;
|
||||
$saved = $service->saveDraft($userId, $roleType, $roleRefId, $form, $onboardId);
|
||||
$this->success('进件资料已保存,状态为待后台审核', null, [
|
||||
'id' => $saved ? $saved['id'] : 0,
|
||||
]);
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户" v-else>
|
||||
<span>{{ userLabel }}</span>
|
||||
<div>{{ userLabel }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="进件角色" v-if="!isEdit">
|
||||
<el-select v-model="roleKey" placeholder="请先选择用户" class="form-input" :disabled="!roleOptions.length" @change="onRoleChange">
|
||||
@@ -209,7 +209,8 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="进件角色" v-else>
|
||||
<span>{{ roleLabel }}</span>
|
||||
<span v-if="roleLabel" class="user-role-tag" :class="'user-role-tag--' + roleType">{{ roleLabel }}</span>
|
||||
<span v-else style="color:#909399;">-</span>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户