Role.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. <?php
  2. namespace app\admin\controller;
  3. use think\App;
  4. use think\facade\Db;
  5. use think\facade\Validate;
  6. use app\admin\model\ActionProcess as APModel;
  7. use app\admin\model\Process as PModel;
  8. //角色
  9. class Role extends Base
  10. {
  11. public function __construct(App $app)
  12. {
  13. parent::__construct($app);
  14. }
  15. /**角色权限列表分页 page size
  16. * @return \think\response\Json|void
  17. * @throws \think\db\exception\DataNotFoundException
  18. * @throws \think\db\exception\DbException
  19. * @throws \think\db\exception\ModelNotFoundException
  20. */
  21. public function roleList()
  22. {
  23. $post = $this->request->only(["status" => "", "role_name" => "", "relaComNo" => "", "companyName" => "", "companyNo" => "", "level" => "",
  24. "page" => 1, "size" => 10], "post", "trim");
  25. $condition = [];
  26. isset($post['status']) && $post['status'] !== "" ? $condition[] = ['a.status', "=", $post['status']] : "";
  27. isset($post['role_name']) && $post['role_name'] !== "" ? $condition[] = ['a.role_name', "like", "%" . $post['role_name'] . "%"] : "";
  28. isset($post['level']) && $post['level'] !== "" ? $condition[] = ["a.level", "=", $post['level']] : "";
  29. isset($post['relaComNo']) && $post['relaComNo'] !== "" ? $condition[] = ["a.companyNo", "=", $post['relaComNo']] : "";
  30. isset($post['companyNo']) && $post['companyNo'] !== "" ? $condition[] = ["a.companyNo", "=", $post['companyNo']] : "";
  31. isset($post['companyName']) && $post['companyName'] !== "" ? $condition[] = ["b.name", "like", "%{$post['companyName']}%"] : "";
  32. $count = Db::name("role")->alias("a")
  33. ->leftJoin("supplier_info b", "a.companyNo=b.code")
  34. ->where($condition)->count();
  35. $page = isset($post['page']) ? intval($post['page']) : 1;
  36. $size = isset($post['size']) ? intval($post['size']) : 10;
  37. $page >= ceil($count / $size) ? $page = (int)ceil($count / $size) : "";
  38. $list = Db::name("role")
  39. ->alias("a")
  40. ->leftJoin("supplier_info b", "a.companyNo=b.code")
  41. ->leftJoin("role_action t", "a.id=t.role_id")
  42. ->field("a.*,b.name as companyName,t.action_conllect as action,t.action_data")
  43. ->order("a.addtime desc")
  44. ->where($condition)
  45. ->page($page, $size)
  46. ->select()
  47. ->toArray();
  48. return app_show(0, "获取成功", ["list" => $list, "count" => $count]);
  49. }
  50. /** 角色新建
  51. * @role_name 角色名称
  52. * @level 角色等级
  53. * @action 功能权限
  54. * @action_data 操作权限
  55. * @private_data 私有权限
  56. * @return \think\response\Json|void
  57. * @throws \think\db\exception\DataNotFoundException
  58. * @throws \think\db\exception\DbException
  59. * @throws \think\db\exception\ModelNotFoundException
  60. */
  61. public function roleAdd()
  62. {
  63. $post = $this->request->only(["role_name" => "", "level" => "", "action" => "", "action_data" => "", "private_data" => "", "relaComNo" => "", "companyNo" => "",'is_allow_see_price'], "post");
  64. $valid = Validate::rule([
  65. "role_name|角色名称" => "require|max:255|min:2",
  66. "level|角色级别" => "require|number|in:1,2,3",
  67. "relaComNo|业务公司编号" => "max:255",
  68. "companyNo|业务公司编号" => "max:255",
  69. "action|角色权限" => "require|array",
  70. "is_allow_see_price|是否允许查看价格" => "require|in:0,1",
  71. ]);
  72. if ($valid->check($post) == false) return error_show(1004, $valid->getError());
  73. if ($post['relaComNo'] != "" && $post["level"] == 1) {
  74. return error_show(1002, "超管权限角色不可关联业务公司");
  75. }
  76. if ($this->level == 1) $companyNo = $post['companyNo'] ?? "";
  77. else $companyNo = $post['relaComNo'] ?? "";
  78. $where = [["role_name", "=", $post['role_name']]];
  79. if ($companyNo != "") {
  80. $where[] = ["companyNo", "=", $companyNo];
  81. // $company =Db::name("supplier_info")->where(["code"=>$companyNo])->find();
  82. }
  83. $isT = Db::name("role")->field('id')->where($where)->find();
  84. if ($isT) return error_show(1002, "角色名称已存在");
  85. $action = isset($post['action']) && is_array($post['action']) ? implode(",", $post['action']) : "";
  86. $data = isset($post['action_data']) && is_array($post['action_data']) ? implode(",", $post['action_data']) : "";
  87. $private_data = isset($post['private_data']) && is_array($post['private_data']) ? implode(",", $post['private_data']) : "";
  88. Db::startTrans();
  89. try {
  90. $list = [
  91. "role_name" => $post['role_name'],
  92. "companyNo" => $companyNo,
  93. "status" => 1,
  94. "addtime" => date("Y-m-d H:i:s"),
  95. "updatetime" => date("Y-m-d H:i:s"),
  96. "level" => $post['level'],
  97. 'is_allow_see_price'=>$post['is_allow_see_price']
  98. ];
  99. $role = Db::name("role")->insert($list, true);
  100. if ($role > 0) {
  101. $role_action = [
  102. "role_id" => $role,
  103. "action_conllect" => $action,
  104. "action_data" => $data,
  105. "private_data" => $private_data,
  106. "status" => 1,
  107. "addtime" => date("Y-m-d H:i:s"),
  108. "updatetime" => date("Y-m-d H:i:s"),
  109. ];
  110. $roleaction = Db::name("role_action")->insert($role_action, true);
  111. if ($roleaction) {
  112. Db::commit();
  113. return app_show(0, "新建成功");
  114. } else {
  115. Db::rollback();
  116. return app_show(1005, "权限录入失败");
  117. }
  118. } else {
  119. Db::rollback();
  120. return app_show(1006, "角色新建失败");
  121. }
  122. } catch (\Exception $e) {
  123. Db::rollback();
  124. return error_show(1008, $e->getMessage());
  125. }
  126. }
  127. /**查询角色信息
  128. * @roleid 角色id
  129. * @return \think\response\Json|void
  130. * @throws \think\db\exception\DataNotFoundException
  131. * @throws \think\db\exception\DbException
  132. * @throws \think\db\exception\ModelNotFoundException
  133. */
  134. public function roleInfo()
  135. {
  136. $post = $this->post;
  137. $roleid = isset($post['roleid']) ? intval($post['roleid']) : "";
  138. if ($roleid == "") {
  139. return error_show(1001, 'roleid不能为空');
  140. }
  141. $info = Db::name("role")
  142. ->alias("a")
  143. ->leftJoin("cfp_role_action t", "a.id=t.role_id")
  144. ->field("a.*,t.action_conllect,t.action_data,t.private_data")
  145. ->where("a.id", "=", $roleid)
  146. ->find();
  147. if (!$info) {
  148. return error_show(1002, "未找到对应的数据");
  149. }
  150. $info['action'] = explode(",", $info['action_conllect']);
  151. $info['action_data'] = $info['action_data'] != "" ? explode(",", $info['action_data']) : "";
  152. $info['private_data'] = $info['private_data'] != "" ? explode(",", $info['private_data']) : "";
  153. return app_show(0, "获取成功", $info);
  154. }
  155. /** 角色信息编辑
  156. * @param role_name 角色名称
  157. * @param level 等级
  158. * @param action 功能权限
  159. * @param action_data 操作权限
  160. * @param roleid 角色id
  161. * @param private_data 私有权限
  162. * @return \think\response\Json|void
  163. * @throws \think\db\exception\DataNotFoundException
  164. * @throws \think\db\exception\DbException
  165. * @throws \think\db\exception\ModelNotFoundException
  166. */
  167. public function roleSave()
  168. {
  169. $post = $this->request->only(["roleid" => "", "role_name" => "", "level" => "", "relaComNo" => "", "companyNo" => "", "action" => "", "action_data" => "", "private_data" => "",'is_allow_see_price'], "post");
  170. $valid = Validate::rule([
  171. "role_name|角色名称" => "require|max:255|min:2",
  172. "relaComNo|业务公司编号" => "max:255",
  173. "companyNo|业务公司编号" => "max:255",
  174. "action|角色权限" => "require|array",
  175. "level|角色级别" => "require|in:1,2,3",
  176. "is_allow_see_price|是否允许查看价格" => "require|in:0,1",
  177. ]);
  178. if ($valid->check($post) == false) return error_show(1004, $valid->getError());
  179. $info = Db::name("role")->where("id", "=", $post['roleid'])->find();
  180. if (!$info) return error_show(1002, "未找到对应的数据");
  181. if ($post['relaComNo'] != "" && $info["level"] == 1) return error_show(1002, "超管权限角色不可关联业务公司");
  182. // if($this->level==1){
  183. // $companyNo =$post['companyNo']??"";
  184. // }else{
  185. // $companyNo =$post['relaComNo']??"";
  186. // }
  187. $vers = Db::name("role")->where([["id", '<>', $post['roleid']], ["role_name", "=", $post['role_name']], ["companyNo", "=", $info['companyNo']]])->find();
  188. if ($vers) return error_show(1002, "角色名已存在");
  189. $action = isset($post['action']) && is_array($post['action']) ? implode(",", $post['action']) : "";
  190. if ($action == "") {
  191. return error_show(1004, "功能权限不能为空");
  192. }
  193. $data = isset($post['action_data']) && is_array($post['action_data']) ? implode(",", $post['action_data']) : "";
  194. $private_data = isset($post['private_data']) && is_array($post['private_data']) ? implode(",", $post['private_data']) : "";
  195. Db::startTrans();
  196. try {
  197. $list = [
  198. "role_name" => $post['role_name'],
  199. "level" => $post['level'],
  200. "updatetime" => date("Y-m-d H:i:s"),
  201. 'id' => $post['roleid'],
  202. 'is_allow_see_price' => $post['is_allow_see_price']
  203. ];
  204. $role = Db::name("role")->save($list);
  205. if ($role) {
  206. $role_action = [
  207. "role_id" => $post['roleid'],
  208. "action_conllect" => $action,
  209. "action_data" => $data,
  210. "private_data" => $private_data,
  211. "updatetime" => date("Y-m-d H:i:s")
  212. ];
  213. $roleaction = Db::name("role_action")->where("role_id", "=", $post['roleid'])->update($role_action);
  214. if ($roleaction) {
  215. Db::commit();
  216. return app_show(0, "更新成功");
  217. } else {
  218. Db::rollback();
  219. return app_show(1005, "权限更新失败");
  220. }
  221. } else {
  222. Db::rollback();
  223. return app_show(1006, "角色更新失败");
  224. }
  225. } catch (\Exception $e) {
  226. Db::rollback();
  227. return error_show(1008, $e->getMessage());
  228. }
  229. }
  230. /**
  231. * 角色状态更新
  232. * @roleid 角色id
  233. * @status 角色状态 0 /1
  234. * @return \think\response\Json
  235. * @throws \think\exception\DbException
  236. */
  237. public function roleStatus()
  238. {
  239. $post = $this->request->only(["roleid" => "", "status" => ""], "post", "intval");
  240. $valid = Validate::rule([
  241. "roleid|角色id" => "require|number|gt:0",
  242. "status|状态" => "require|number|in:0,1"
  243. ]);
  244. if ($valid->check($post) == false) return error_show(1004, $valid->getError());
  245. Db::startTrans();
  246. try {
  247. $dat = [
  248. 'status' => $post['status'], 'updatetime' => date("Y-m-d H:i:s"), 'id' => $post['roleid']
  249. ];
  250. $re = Db::name("role")->save($dat);
  251. if ($re) {
  252. $dat2 = [
  253. 'status' => $post['status'], 'updatetime' => date("Y-m-d H:i:s")
  254. ];
  255. $action = Db::name("role_action")->where("role_id", "=", $post['roleid'])->update($dat2);
  256. if ($action) {
  257. Db::commit();
  258. return app_show(0, "状态更新成功");
  259. }
  260. }
  261. Db::rollback();
  262. return error_show(1003, "状态更新失败");
  263. } catch (\Exception $e) {
  264. Db::rollback();
  265. return error_show(1002, $e->getMessage());
  266. }
  267. }
  268. /**
  269. * 获取所有角色
  270. * @return \think\response\Json
  271. * @throws \think\exception\DbException
  272. */
  273. public function RoleAll()
  274. {
  275. $post = $this->request->only(["relaComNo" => "", "companyNo" => ""], "post", "trim");
  276. $where = [];
  277. if (isset($post['relaComNo']) && $post['relaComNo'] != '') $where[] = ["companyNo", "=", $post['relaComNo']];
  278. if (isset($post['companyNo']) && $post['companyNo'] != '') $where[] = ["companyNo", "=", $post['companyNo']];
  279. $list = Db::name("role")->alias("a")
  280. ->leftJoin("supplier_info b", "a.companyNo=b.code")
  281. ->field("a.*,b.name as companyName")
  282. ->where($where)->select();
  283. return app_show(0, "获取成功", $list);
  284. }
  285. //获取角色对应的流程权限id
  286. public function roleProcessInfo()
  287. {
  288. $roleid = $this->request->filter('trim')->post('roleid/d', 0);
  289. $res = Db::name("role")
  290. ->alias("a")
  291. ->leftJoin("role_process b", "a.id=b.role_id AND b.is_del=0")
  292. ->field("a.*,b.action_data")
  293. ->withAttr('action_data', function ($val) {
  294. return explode(',', $val);
  295. })->where("a.id", $roleid)
  296. ->findOrEmpty();
  297. return app_show(0, '请求成功', $res);
  298. }
  299. //修改角色对应的流程权限
  300. public function roleProcessSave()
  301. {
  302. $param = $this->request->filter('trim')->only(['token', 'roleid', 'action_data'], 'post');
  303. $val = Validate::rule([
  304. 'token' => 'require',
  305. 'roleid|角色ID' => 'require|number|gt:0',
  306. 'action_data|所选节点id' => 'require|array',
  307. ]);
  308. if (!$val->check($param)) return error_show(1005, $val->getError());
  309. $user = GetUserInfo($param['token']);
  310. $uid = isset($user['data']['id']) ? $user['data']['id'] : 0;
  311. $uname = isset($user['data']['nickname']) ? $user['data']['nickname'] : '';
  312. $date = date('Y-m-d H:i:s');
  313. $res = Db::name('role_process')
  314. ->where(['is_del' => 0, 'role_id' => $param['roleid']])
  315. ->field('id')
  316. ->findOrEmpty();
  317. if (empty($res)) {
  318. $rs = Db::name('role_process')
  319. ->insert([
  320. 'role_id' => $param['roleid'],
  321. 'action_data' => implode(',', $param['action_data']),
  322. 'is_del' => 0,
  323. 'createrid' => $uid,
  324. 'creater' => $uname,
  325. 'addtime' => $date,
  326. 'updaterid' => $uid,
  327. 'updater' => $uname,
  328. 'updatetime' => $date,
  329. ]);
  330. } else {
  331. $rs = Db::name('role_process')
  332. ->where('id', $res['id'])
  333. ->update([
  334. 'action_data' => implode(',', $param['action_data']),
  335. 'updaterid' => $uid,
  336. 'updater' => $uname,
  337. 'updatetime' => $date
  338. ]);
  339. }
  340. return $rs ? app_show(0, '操作成功') : error_show(1005, '操作失败');
  341. }
  342. //获取角色对应的流程权限详情
  343. public function roleProcessDetail()
  344. {
  345. $roleid = $this->request->filter('trim')->post('roleid/d', 0);
  346. $action_data = Db::name("role_process")
  347. ->where('role_id', $roleid)
  348. ->value('action_data');
  349. $data = PModel::where(['is_del' => PModel::$is_del_normal, 'status' => PModel::$status_normal])
  350. ->append(['child'])
  351. ->withAttr('child', function () {
  352. return [];
  353. })
  354. ->column('id,process_name,process_type', 'id');
  355. $action = APModel::where([
  356. 'is_del' => APModel::$is_del_normal,
  357. 'status' => APModel::$status_normal,
  358. 'operation_type' => APModel::$operation_type_approval
  359. ])->whereIn('id', $action_data)
  360. ->field('id,process_id,order_process,status_name')
  361. ->cursor();
  362. foreach ($action as $item) {
  363. if (isset($data[$item->process_id])) $data[$item->process_id]['child'][] = $item->toArray();
  364. }
  365. return app_show(0, '请求成功', array_column($data, null, null));
  366. }
  367. }