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