User.php 18 KB

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