From b7a7e27a53494e51efe64c0c9d1564c93b937f1d Mon Sep 17 00:00:00 2001 From: ldjun Date: Wed, 18 Mar 2026 14:02:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E9=A1=B9=E7=9B=AE=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- back/application/api/controller/Hr.php | 50 ++++++++++++++++++ back/application/api/controller/Project.php | 39 ++++++++++---- back/application/api/controller/Story.php | 44 ++++++++------- back/application/api/controller/User.php | 4 +- .../api/controller_74GYL3/Project.php | 9 ++++ .../api/controller_74GYL3/User.php | 4 +- back/application/database.php | 4 +- back/composer.json | 7 ++- .../5e6ffed6bf3bb71a10b08d4a561c582d.png | Bin 11002 -> 0 bytes 9 files changed, 125 insertions(+), 36 deletions(-) delete mode 100644 back/public/uploads/20260310/5e6ffed6bf3bb71a10b08d4a561c582d.png diff --git a/back/application/api/controller/Hr.php b/back/application/api/controller/Hr.php index 673aa22..2ba1c20 100644 --- a/back/application/api/controller/Hr.php +++ b/back/application/api/controller/Hr.php @@ -87,6 +87,56 @@ class Hr extends Common return $this->sendSuccess($StaffList); } + public function GetStaffPage() + { + + $param = request()->post(); + + $currPage = isset($param['currPage']) ? $param['currPage'] : 1; + $pageSize = isset($param['pageSize']) ? $param['pageSize'] : 20; + + $result = db('hr_staff')->alias('i') + ->join('hr_staff_type t', 'i.staff_type=t.id', 'left') + ->where('i.del_time',null) + ->field('i.*, t.desp as staff_type_desp') + ->page($currPage, $pageSize) + ->select(); + + + $total = db('hr_staff')->alias('i') + ->join('hr_staff_type t', 'i.staff_type=t.id', 'left') + ->where('i.del_time',null) + ->field('i.*, t.desp as staff_type_desp') + ->count(); + //查找员工所属部门信息 + for ($i=0; $iwhere('dept_id', 'in', $dept_arr)->column('dept_name'); + $result[$i]['staff_dept_desp'] = implode(',', $dept_desp); + } + + + $StaffList = []; + if (isset($param['type'])) + { + for ($i=0; $isendSuccess($res); + } //获取项目部门所有的员工信息 public function GetProjectDeptStaffList() diff --git a/back/application/api/controller/Project.php b/back/application/api/controller/Project.php index 35968f8..58d4d76 100644 --- a/back/application/api/controller/Project.php +++ b/back/application/api/controller/Project.php @@ -197,7 +197,18 @@ class Project extends Common { $ProjectInfo['project_manager'] = $ret['staff_name']; } - + $ProjectInfo['sale_name'] = ''; + if (!empty($ProjectInfo['sale_manager'])){ + $retSale = db('system_user')->alias('u') + ->join('hr_staff s','s.staff_id=u.user_id', 'left') + ->where('u.user_type', 1) + ->where('u.id', $ProjectInfo['sale_manager']) + ->find(); + if (null != $retSale) + { + $ProjectInfo['sale_name'] = $retSale['staff_name']; + } + } return $this->sendSuccess($ProjectInfo); } @@ -260,32 +271,40 @@ class Project extends Common $project_id = $param['project_id']; $remove_member = $param['staff_id'].''; - - + + $ret = db('project_info')->where('project_id', $project_id)->find(); $member_arr = explode(',', $ret['involve_members']); - + // 使用array_filter()函数删除指定值 $resultArray = array_filter($member_arr, function ($value) use ($remove_member) { return $value !== $remove_member; }); - - $update['involve_members'] = implode(',', $resultArray); + + $update['involve_members'] = implode(',', $resultArray); $ret = db('project_info')->where('project_id',$project_id)->update($update); - + return $this->sendSuccess('移除成功'); } - - + + public function UpdateProjectMember() { $param = request()->post(); - + $update['involve_members'] = implode(',', $param['involve_members']); //数组转字符串 $ret = db('project_info')->where('project_id',$param['project_id'])->update($update); return $this->sendSuccess('更新成功'); } + public function UpdateSaleManager() + { + $param = request()->post(); + + $update['sale_manager'] = $param['sale_manager']; //数组转字符串 + $ret = db('project_info')->where('project_id',$param['project_id'])->update($update); + return $this->sendSuccess('更新成功'); + } diff --git a/back/application/api/controller/Story.php b/back/application/api/controller/Story.php index 10a6fb5..4a058be 100644 --- a/back/application/api/controller/Story.php +++ b/back/application/api/controller/Story.php @@ -49,23 +49,31 @@ class Story extends Common $members = explode(',', $opStory['story_member']); $opStory['story_members'] = ''; - $ret = []; - for ($i=0; $iGetUserInfoByLoginId($members[$i]); - if ($user_info && isset($user_info['name'])) { - $ret[] = $user_info['name']; - } - } - $opStory['story_members'] = implode(',', $ret); - $opStory['story_managers'] = ''; - if ($opStory['story_manager'] !== null) { - $user_info = $user->GetUserInfoByLoginId($opStory['story_manager']); - if ($user_info && isset($user_info['name'])) { - $opStory['story_managers'] = $user_info['name']; - } + $opStory['story_members'] = ''; + if (count($members)>0) + { + $ret = db('system_user')->alias('u') + ->join('hr_staff s','s.staff_id=u.user_id', 'left') + ->where('u.user_type', 1) + ->where('u.id', 'in', $members) + ->column('s.staff_name'); + + $opStory['story_members'] = implode(',', $ret); //数组转字符串 } + $opStory['story_managername'] = ''; + + $ret = db('system_user')->alias('u') + ->join('hr_staff s','s.staff_id=u.user_id', 'left') + ->where('u.user_type', 1) + ->where('u.id', $opStory['story_manager']) + ->find(); + + if (null != $ret) + { + $opStory['story_managername'] = $ret['staff_name']; + } + $result[] = $opStory; } @@ -185,12 +193,12 @@ class Story extends Common ->where('story_id', $param['story_id']) ->find(); if ($story_info) { - + $user = new User(); - + $story_info_member = explode(',', $story_info['story_member']); foreach ($story_info_member as $memberId) { - + $user_info = $user->GetUserInfoByLoginId($memberId); $item['id'] = $user_info['id']; $item['staff_name'] = $user_info['name']; diff --git a/back/application/api/controller/User.php b/back/application/api/controller/User.php index f8fdddc..426b47a 100644 --- a/back/application/api/controller/User.php +++ b/back/application/api/controller/User.php @@ -42,7 +42,7 @@ class User extends Common ->find(); if ($ret != null) { - $ret['company'] = "苏州维达奇智能科技有限公司"; + $ret['company'] = "上海诺力智能科技有限公司"; } } //客户 @@ -318,7 +318,7 @@ class User extends Common ->find(); if ($ret != null) { - $ret['company'] = "苏州维达奇智能科技有限公司"; + $ret['company'] = "上海诺力智能科技有限公司"; } $ret['id'] = $login_id; $ret['name'] = $res['user_name']; diff --git a/back/application/api/controller_74GYL3/Project.php b/back/application/api/controller_74GYL3/Project.php index 39ea325..3f25d30 100644 --- a/back/application/api/controller_74GYL3/Project.php +++ b/back/application/api/controller_74GYL3/Project.php @@ -297,6 +297,15 @@ class Project extends Common $ret = db('project_info')->where('project_id',$param['project_id'])->update($update); return $this->sendSuccess('更新成功'); } + + public function UpdateSaleManager() + { + $param = request()->post(); + + $update['sale_manager'] = $param['sale_manager']; //数组转字符串 + $ret = db('project_info')->where('project_id',$param['project_id'])->update($update); + return $this->sendSuccess('更新成功'); + } //添加项目外部成员 public function AddProjectExternalMember() diff --git a/back/application/api/controller_74GYL3/User.php b/back/application/api/controller_74GYL3/User.php index 8d889c5..96f2b5d 100644 --- a/back/application/api/controller_74GYL3/User.php +++ b/back/application/api/controller_74GYL3/User.php @@ -42,7 +42,7 @@ class User extends Common ->find(); if ($ret != null) { - $ret['company'] = "苏州维达奇智能科技有限公司"; + $ret['company'] = "上海诺力智能科技有限公司"; } } //客户 @@ -318,7 +318,7 @@ class User extends Common ->find(); if ($ret != null) { - $ret['company'] = "苏州维达奇智能科技有限公司"; + $ret['company'] = "上海诺力智能科技有限公司"; } $ret['id'] = $login_id; } diff --git a/back/application/database.php b/back/application/database.php index ea49943..8163f85 100644 --- a/back/application/database.php +++ b/back/application/database.php @@ -13,13 +13,13 @@ return [ // 数据库类型 'type' => 'mysql', // 服务器地址 - 'hostname' => '127.0.0.1', + 'hostname' => '192.168.81.251', // 数据库名 'database' => 'oms', // 用户名 'username' => 'root', // 密码 - 'password' => '12356', + 'password' => 'P@ssw0rd.', // 端口 'hostport' => '', // 连接dsn diff --git a/back/composer.json b/back/composer.json index 8a2fc60..61feb50 100644 --- a/back/composer.json +++ b/back/composer.json @@ -26,7 +26,7 @@ "topthink/think-oracle": "1.*", "phpoffice/phpexcel": "^1.8", "aliyuncs/oss-sdk-php": "^2.3", - "topthink/think-worker": "^3.0" + "topthink/think-worker": "^1.0" }, "autoload": { "psr-4": { @@ -37,6 +37,9 @@ "think-path": "thinkphp" }, "config": { - "preferred-install": "dist" + "preferred-install": "dist", + "allow-plugins": { + "topthink/think-installer": true + } } } diff --git a/back/public/uploads/20260310/5e6ffed6bf3bb71a10b08d4a561c582d.png b/back/public/uploads/20260310/5e6ffed6bf3bb71a10b08d4a561c582d.png deleted file mode 100644 index 8e386c01149e725b334bbfeeb208f3dfa65cc35a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11002 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 Tx`)2g3Q&BjDhqq_{_}qWW>^XR