User.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\shop\controller;
  11. use app\model\store\Store;
  12. use app\model\system\Group;
  13. use app\model\system\Menu;
  14. use app\model\system\User as UserModel;
  15. use addon\cashier\model\Group as StoreUserGroup;
  16. use app\model\system\UserGroup;
  17. use think\facade\Db;
  18. /**
  19. * 用户
  20. * Class User
  21. * @package app\shop\controller
  22. */
  23. class User extends BaseShop
  24. {
  25. /**
  26. * 用户列表
  27. * @return mixed
  28. */
  29. public function user()
  30. {
  31. if (request()->isAjax()) {
  32. $page = input('page', 1);
  33. $page_size = input('page_size', PAGE_LIST_ROWS);
  34. $status = input('status', '');
  35. $search_keys = input('search_keys', "");
  36. $condition = [];
  37. $condition[] = [ "site_id", "=", $this->site_id ];
  38. $condition[] = [ "app_module", "=", $this->app_module ];
  39. if (!empty($search_keys)) {
  40. $condition[] = [ 'username', 'like', '%' . $search_keys . '%' ];
  41. }
  42. if ($status != "") {
  43. $condition[ "status" ] = [ "status", "=", $status ];
  44. }
  45. $user_model = new UserModel();
  46. $list = $user_model->getUserPageList($condition, $page, $page_size, "is_admin desc,create_time desc");
  47. if (!empty($list['data']['list']) && addon_is_exit('cashier', $this->site_id)) {
  48. $join = [
  49. ['store s', 's.store_id = ug.store_id', 'left'],
  50. ['cashier_auth_group cag', 'cag.group_id = ug.group_id', 'left']
  51. ];
  52. foreach ($list['data']['list'] as $k => $item) {
  53. $list['data']['list'][$k]['user_group_list'] = (new UserGroup())->getUserList([ ['ug.uid', '=', $item['uid'] ] ], 's.store_name,cag.group_name', '', 'ug', $join)['data'];
  54. }
  55. }
  56. return $list;
  57. } else {
  58. $this->forthMenu();
  59. $this->assign('store_is_exit', addon_is_exit('store', $this->site_id));
  60. $this->assign('cashier_is_exit', addon_is_exit('cashier', $this->site_id));
  61. return $this->fetch("user/user_list");
  62. }
  63. }
  64. /**
  65. * 添加用户
  66. * @return mixed
  67. */
  68. public function addUser()
  69. {
  70. if (request()->isAjax()) {
  71. $username = input("username", "");
  72. $password = input("password", "");
  73. $group_id = input("group_id", "");
  74. $store = input("store", "[]");
  75. $user_model = new UserModel();
  76. $data = array (
  77. "username" => $username,
  78. "password" => $password,
  79. "group_id" => $group_id,
  80. "app_module" => $this->app_module,
  81. "site_id" => $this->site_id,
  82. "store" => json_decode($store, true)
  83. );
  84. $result = $user_model->addUser($data, '', 'add');
  85. return $result;
  86. } else {
  87. $group_model = new Group();
  88. $group_list_result = $group_model->getGroupList([ [ "site_id", "=", $this->site_id ], [ "app_module", "=", $this->app_module ] ]);
  89. $group_list = $group_list_result[ "data" ];
  90. $this->assign("group_list", $group_list);
  91. $cashier_is_exit = addon_is_exit('cashier', $this->site_id);
  92. $this->assign('store_is_exit', addon_is_exit('store', $this->site_id));
  93. $this->assign('cashier_is_exit', $cashier_is_exit);
  94. if ($cashier_is_exit) {
  95. $store_user_group = (new StoreUserGroup())->getGroupList([ ['', 'exp', Db::raw("keyword = '' OR site_id = {$this->site_id}") ] ], 'group_id,group_name')['data'];
  96. $this->assign('store_user_group', $store_user_group);
  97. $store_info = (new Store())->getDefaultStore($this->site_id)['data'] ?? [];
  98. $this->assign('default_store_id', $store_info['store_id'] ?? 0);
  99. }
  100. return $this->fetch("user/add_user");
  101. }
  102. }
  103. /**
  104. * 编辑用户
  105. * @return mixed
  106. */
  107. public function editUser()
  108. {
  109. $user_model = new UserModel();
  110. if (request()->isAjax()) {
  111. $group_id = input("group_id", "");
  112. $status = input("status", "");
  113. $uid = input("uid", 0);
  114. $store = input("store", "[]");
  115. //用户信息
  116. $condition = array (
  117. [ "uid", "=", $uid ],
  118. [ "site_id", "=", $this->site_id ],
  119. [ "app_module", "=", $this->app_module ],
  120. );
  121. $user_info_result = $user_model->getUserInfo($condition, 'is_admin, uid');
  122. $user_info = $user_info_result[ "data" ];
  123. if ($user_info[ 'is_admin' ]) {
  124. return error('-1', '超级管理员不可编辑');
  125. }
  126. $condition = array (
  127. [ "uid", "=", $uid ],
  128. [ "site_id", "=", $this->site_id ],
  129. [ "app_module", "=", $this->app_module ],
  130. );
  131. $data = array (
  132. "group_id" => $group_id,
  133. "status" => $status,
  134. "store" => json_decode($store, true)
  135. );
  136. $this->addLog("编辑用户:" . $uid);
  137. $result = $user_model->editUser($data, $condition);
  138. return $result;
  139. } else {
  140. $uid = input("uid", 0);
  141. //用户信息
  142. $condition = array (
  143. [ "uid", "=", $uid ],
  144. [ "site_id", "=", $this->site_id ],
  145. [ "app_module", "=", $this->app_module ],
  146. );
  147. $user_info_result = $user_model->getUserInfo($condition);
  148. $user_info = $user_info_result[ "data" ];
  149. if (empty($user_info)) $this->error('未获取到用户数据', addon_url('shop/user/user'));
  150. if ($user_info[ 'is_admin' ]) $this->error('超级管理员不可编辑');
  151. $this->assign("uid", $uid);
  152. $this->assign("edit_user_info", $user_info);
  153. //用户组
  154. $group_model = new Group();
  155. $group_list_result = $group_model->getGroupList([ [ "site_id", "=", $this->site_id ], [ "app_module", "=", $this->app_module ] ]);
  156. $group_list = $group_list_result[ "data" ];
  157. $this->assign("group_list", $group_list);
  158. $cashier_is_exit = addon_is_exit('cashier', $this->site_id);
  159. $this->assign('store_is_exit', addon_is_exit('store', $this->site_id));
  160. $this->assign('cashier_is_exit', $cashier_is_exit);
  161. if ($cashier_is_exit) {
  162. $store_user_group = (new StoreUserGroup())->getGroupList([ ['', 'exp', Db::raw("keyword = '' OR site_id = {$this->site_id}") ] ], 'group_id,group_name')['data'];
  163. $this->assign('store_user_group', $store_user_group);
  164. $store_info = (new Store())->getDefaultStore($this->site_id)['data'] ?? [];
  165. $this->assign('default_store_id', $store_info['store_id'] ?? 0);
  166. }
  167. return $this->fetch("user/edit_user");
  168. }
  169. }
  170. /**
  171. * 删除用户
  172. */
  173. public function deleteUser()
  174. {
  175. if (request()->isAjax()) {
  176. $uid = input("uid", 0);
  177. $user_model = new UserModel();
  178. //用户信息
  179. $condition = array (
  180. [ "uid", "=", $uid ],
  181. [ "site_id", "=", $this->site_id ],
  182. [ "app_module", "=", $this->app_module ],
  183. );
  184. $user_info_result = $user_model->getUserInfo($condition, 'is_admin, uid');
  185. $user_info = $user_info_result[ "data" ];
  186. if ($user_info[ 'is_admin' ]) {
  187. return error('-1', '超级管理员不可编辑');
  188. }
  189. $condition = array (
  190. [ "uid", "=", $uid ],
  191. [ "app_module", "=", $this->app_module ],
  192. [ "site_id", "=", $this->site_id ],
  193. );
  194. $result = $user_model->deleteUser($condition);
  195. return $result;
  196. }
  197. }
  198. /**
  199. * 清除后台所有用户的登录信息
  200. */
  201. public function deleteUserLoginInfo()
  202. {
  203. $app_module = $this->app_module;
  204. $site_id = $this->site_id;
  205. $user_model = new UserModel();
  206. $result = $user_model->deleteUserLoginInfo($app_module, $site_id);
  207. return $result;
  208. }
  209. /**
  210. * 编辑管理员状态
  211. */
  212. public function modifyUserStatus()
  213. {
  214. if (request()->isAjax()) {
  215. $uid = input('uid', 0);
  216. $status = input('status', 0);
  217. $user_model = new UserModel();
  218. //用户信息
  219. $condition = array (
  220. [ "uid", "=", $uid ],
  221. [ "site_id", "=", $this->site_id ],
  222. [ "app_module", "=", $this->app_module ],
  223. );
  224. $user_info_result = $user_model->getUserInfo($condition, 'is_admin, uid');
  225. $user_info = $user_info_result[ "data" ];
  226. if ($user_info[ 'is_admin' ]) {
  227. return error('-1', '超级管理员不可编辑');
  228. }
  229. $condition = array (
  230. [ "uid", "=", $uid ],
  231. [ "site_id", "=", $this->site_id ],
  232. [ "app_module", "=", $this->app_module ],
  233. );
  234. $result = $user_model->modifyUserStatus($status, $condition);
  235. return $result;
  236. }
  237. }
  238. /**
  239. * 重置密码
  240. */
  241. public function modifyPassword()
  242. {
  243. if (request()->isAjax()) {
  244. $password = input('password', '123456');
  245. $uid = input('uid', 0);
  246. $site_id = $this->site_id;
  247. $user_model = new UserModel();
  248. //用户信息
  249. $condition = array (
  250. [ "uid", "=", $uid ],
  251. [ "site_id", "=", $this->site_id ],
  252. [ "app_module", "=", $this->app_module ],
  253. );
  254. $user_info_result = $user_model->getUserInfo($condition, 'is_admin, uid');
  255. $user_info = $user_info_result[ "data" ];
  256. if ($user_info[ 'is_admin' ]) {
  257. return error('-1', '超级管理员不可编辑');
  258. }
  259. return $user_model->modifyUserPassword($password, [ [ 'uid', '=', $uid ], [ 'site_id', '=', $site_id ] ]);
  260. }
  261. }
  262. /**
  263. * 用户列表
  264. * @return mixed
  265. */
  266. public function group()
  267. {
  268. if (request()->isAjax()) {
  269. $page = input('page', 1);
  270. $page_size = input('page_size', PAGE_LIST_ROWS);
  271. $search_keys = input('search_keys', "");
  272. $condition = array (
  273. [ 'site_id', "=", $this->site_id ],
  274. [ "app_module", "=", $this->app_module ]
  275. );
  276. if (!empty($search_keys)) {
  277. $condition[] = [ 'desc', 'like', '%' . $search_keys . '%' ];
  278. }
  279. $group_model = new Group();
  280. $list = $group_model->getGroupPageList($condition, $page, $page_size);
  281. return $list;
  282. } else {
  283. $this->forthMenu();
  284. return $this->fetch("user/group_list");
  285. }
  286. }
  287. /**
  288. * 添加用户组
  289. * @return mixed
  290. */
  291. public function addGroup()
  292. {
  293. if (request()->isAjax()) {
  294. $group_name = input('group_name', '');
  295. $menu_array = input('menu_array', '');
  296. $desc = input('desc', '');
  297. $group_model = new Group();
  298. $data = array (
  299. "group_name" => $group_name,
  300. "site_id" => $this->site_id,
  301. "app_module" => $this->app_module,
  302. "group_status" => 1,
  303. "menu_array" => $menu_array,
  304. "desc" => $desc,
  305. "is_system" => 0,
  306. "create_time" => time(),
  307. );
  308. $result = $group_model->addGroup($data);
  309. return $result;
  310. } else {
  311. $menu_model = new Menu();
  312. $menu_list = $menu_model->getMenuList([ [ 'app_module', '=', $this->app_module ], [ "is_control", "=", 1 ] ,["is_show",'=',1]], '*', 'level asc,sort ASC');
  313. $menu_tree = list_to_tree($menu_list[ 'data' ], 'name', 'parent', 'child_list', '');
  314. $this->assign('tree_data', $menu_tree);
  315. return $this->fetch('user/add_group');
  316. }
  317. }
  318. /**
  319. * 编辑用户组
  320. * @return mixed
  321. */
  322. public function editGroup()
  323. {
  324. $group_model = new Group();
  325. if (request()->isAjax()) {
  326. $group_name = input('group_name', '');
  327. $menu_array = input('menu_array', '');
  328. $group_id = input('group_id', 0);
  329. $desc = input('desc', '');
  330. if(is_array('USER_LIST',$menu_array)){
  331. array_push($menu_array,['USER_ADD','USER_EDIT','USER_DELETE','USER_MODIFY_STATUS']);
  332. }
  333. $data = array (
  334. "group_name" => $group_name,
  335. "menu_array" => $menu_array,
  336. "desc" => $desc,
  337. );
  338. $condition = array (
  339. [ "group_id", "=", $group_id ],
  340. [ "site_id", "=", $this->site_id ],
  341. [ "app_module", "=", $this->app_module ]
  342. );
  343. $result = $group_model->editGroup($data, $condition);
  344. return $result;
  345. } else {
  346. $group_id = input('group_id', 0);
  347. $condition = array (
  348. [ "group_id", "=", $group_id ],
  349. [ "site_id", "=", $this->site_id ],
  350. [ "app_module", "=", $this->app_module ]
  351. );
  352. $group_info_result = $group_model->getGroupInfo($condition);
  353. $group_info = $group_info_result[ "data" ];
  354. if (empty($group_info)) $this->error('未获取到用户组数据', addon_url('shop/user/group'));
  355. $this->assign("group_info", $group_info);
  356. $this->assign("group_id", $group_id);
  357. //获取菜单权限
  358. $menu_model = new Menu();
  359. $menu_list = $menu_model->getMenuList([ [ 'app_module', '=', $this->app_module ], [ "is_control", "=", 1 ],["is_show",'=',1] ], '*', 'sort ASC');
  360. //处理选中数据
  361. $group_array = $group_info[ 'menu_array' ];
  362. $checked_array = explode(',', $group_array);
  363. foreach ($menu_list[ 'data' ] as $key => $val) {
  364. if (in_array($val[ 'name' ], $checked_array)) {
  365. $menu_list[ 'data' ][ $key ][ 'checked' ] = true;
  366. } else {
  367. $menu_list[ 'data' ][ $key ][ 'checked' ] = false;
  368. }
  369. }
  370. $menu_tree = list_to_tree($menu_list[ 'data' ], 'name', 'parent', 'child_list', '');
  371. $this->assign('tree_data', $menu_tree);
  372. return $this->fetch('user/edit_group');
  373. }
  374. }
  375. /**
  376. * 删除用户组
  377. */
  378. public function deleteGroup()
  379. {
  380. if (request()->isAjax()) {
  381. $group_id = input('group_id', '');
  382. $condition = array (
  383. [ "group_id", "=", $group_id ],
  384. [ "site_id", "=", $this->site_id ],
  385. [ "app_module", "=", $this->app_module ],
  386. );
  387. $group_model = new Group();
  388. $result = $group_model->deleteGroup($condition);
  389. return $result;
  390. }
  391. }
  392. /**
  393. * 用户组状态
  394. */
  395. public function modifyGroupStatus()
  396. {
  397. if (request()->isAjax()) {
  398. $group_id = input('group_id', 0);
  399. $status = input('status', 0);
  400. $group_model = new Group();
  401. $condition = array (
  402. [ "group_id", "=", $group_id ],
  403. [ "site_id", "=", $this->site_id ],
  404. [ "app_module", "=", $this->app_module ],
  405. );
  406. $result = $group_model->modifyGroupStatus($status, $condition);
  407. return $result;
  408. }
  409. }
  410. /**
  411. * 用户日志
  412. */
  413. public function userLog()
  414. {
  415. $user_model = new UserModel();
  416. if (request()->isAjax()) {
  417. $page = input('page', 1);
  418. $page_size = input('page_size', PAGE_LIST_ROWS);
  419. $uid = input('uid', '0');
  420. $condition = [];
  421. $condition[] = [ "site_id", "=", $this->site_id ];
  422. $search_keys = input('search_keys', "");
  423. if (!empty($search_keys)) {
  424. $condition[] = [ 'action_name', 'like', '%' . $search_keys . '%' ];
  425. }
  426. if ($uid > 0) {
  427. $condition[] = [ 'uid', '=', $uid ];
  428. }
  429. $list = $user_model->getUserlogPageList($condition, $page, $page_size, "create_time desc");
  430. return $list;
  431. } else {
  432. $this->forthMenu();
  433. //获取站点所有用户
  434. $condition = [];
  435. $condition[] = [ "site_id", "=", $this->site_id ];
  436. $condition[] = [ "app_module", "=", $this->app_module ];
  437. $user_list_result = $user_model->getUserList($condition);
  438. $user_list = $user_list_result[ "data" ];
  439. $this->assign("user_list", $user_list);
  440. return $this->fetch('user/user_log');
  441. }
  442. }
  443. /**
  444. * 批量删除日志
  445. */
  446. public function deleteUserLog()
  447. {
  448. if (request()->isAjax()) {
  449. $user_model = new UserModel();
  450. $id = input("id", "");
  451. $condition = array (
  452. [ "id", "in", $id ],
  453. [ "site_id", '=', $this->site_id ],
  454. );
  455. $res = $user_model->deleteUserLog($condition);
  456. return $res;
  457. }
  458. }
  459. }