Member.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 山西牛酷信息科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com.cn
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace app\admin\controller;
  13. use app\model\member\Member as MemberModel;
  14. use app\model\member\MemberAddress as MemberAddressModel;
  15. use app\model\member\MemberLabel as MemberLabelModel;
  16. use app\model\member\MemberLevel as MemberLevelModel;
  17. use app\model\member\MemberVip as MemberVipModel;
  18. use app\model\member\MemberAccount as MemberAccountModel;
  19. use app\model\member\Config as ConfigModel;
  20. use think\facade\Db;
  21. use app\model\order\Order as OrderModel;
  22. use app\model\order\OrderCommon as OrderCommonModel;
  23. use phpoffice\phpexcel\Classes\PHPExcel;
  24. use phpoffice\phpexcel\Classes\PHPExcel\Writer\Excel2007;
  25. /**
  26. * 会员管理 控制器
  27. */
  28. class Member extends BaseAdmin
  29. {
  30. /**
  31. * 会员列表
  32. */
  33. public function memberList()
  34. {
  35. if (request()->isAjax()) {
  36. $page = input('page', 1);
  37. $page_size = input('page_size', PAGE_LIST_ROWS);
  38. $search_text = input('search_text', '');
  39. $search_text_type = input('search_text_type', 'username');//可以传username mobile email
  40. $level_id = input('level_id', 0);
  41. $label_id = input('label_id', 0);
  42. $reg_start_date = input('reg_start_date', '');
  43. $reg_end_date = input('reg_end_date', '');
  44. $status = input('status', '');
  45. $condition = [];
  46. //下拉选择
  47. $condition[] = [ $search_text_type, 'like', "%" . $search_text . "%" ];
  48. //会员等级
  49. if ($level_id != 0) {
  50. $condition[] = [ 'member_level', '=', $level_id ];
  51. }
  52. //会员标签
  53. if ($label_id != 0) {
  54. //raw方法变为public类型 需要实例化以后调用
  55. $condition[] = [ "", 'exp', Db::raw("FIND_IN_SET({$label_id}, member_label)") ];
  56. }
  57. //注册时间
  58. if ($reg_start_date != '' && $reg_end_date != '') {
  59. $condition[] = [ 'reg_time', 'between', [ strtotime($reg_start_date), strtotime($reg_end_date) ] ];
  60. } else if ($reg_start_date != '' && $reg_end_date == '') {
  61. $condition[] = [ 'reg_time', '>=', strtotime($reg_start_date) ];
  62. } else if ($reg_start_date == '' && $reg_end_date != '') {
  63. $condition[] = [ 'reg_time', '<=', strtotime($reg_end_date) ];
  64. }
  65. //会员状态
  66. if ($status != '') {
  67. $condition[] = [ 'status', '=', $status ];
  68. }
  69. $order = 'reg_time desc';
  70. $field = 'member_id, username, mobile, email, status, headimg, member_level, member_level_name, member_label, member_label_name, qq, qq_openid, wx_openid, wx_unionid, ali_openid, baidu_openid, toutiao_openid, douyin_openid, login_ip, login_type, login_time, last_login_ip, last_login_type, last_login_time, login_num, nickname, realname, sex, location, birthday, reg_time, point, balance, balance_money, growth, account5';
  71. $member_model = new MemberModel();
  72. $list = $member_model->getMemberPageList($condition, $page, $page_size, $order, $field);
  73. return $list;
  74. } else {
  75. //会员等级
  76. $member_level_model = new MemberLevelModel();
  77. $member_level_list = $member_level_model->getMemberLevelList([], 'level_id, level_name', 'growth asc');
  78. $this->assign('member_level_list', $member_level_list['data']);
  79. //会员标签
  80. $member_label_model = new MemberLabelModel();
  81. $member_label_list = $member_label_model->getMemberLabelList([], 'label_id, label_name', 'sort asc');
  82. $this->assign('member_label_list', $member_label_list['data']);
  83. /*奖励规则*/
  84. //积分
  85. $point = event('MemberAccountRule',['account' => 'point']);
  86. $this->assign('point',$point);
  87. //余额
  88. $balance = event('MemberAccountRule',['account' => 'balance_money']);
  89. $this->assign('balance',$balance);
  90. //成长值
  91. $growth = event('MemberAccountRule',['account' => 'growth']);
  92. $this->assign('growth',$growth);
  93. return $this->fetch('member/member_list');
  94. }
  95. }
  96. /**
  97. * 会员详情
  98. */
  99. public function memberDetail()
  100. {
  101. //会员信息
  102. $member_id = input('member_id', 0);
  103. $member_model = new MemberModel();
  104. $member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_id ] ]);
  105. $this->assign('member_info', $member_info);
  106. return $this->fetch('member/member_detail');
  107. }
  108. /**
  109. * 会员添加
  110. */
  111. public function addMember()
  112. {
  113. if (request()->isAjax()) {
  114. $data = [
  115. 'username' => input('username', ''),
  116. 'mobile' => input('mobile', ''),
  117. 'email' => input('email', ''),
  118. 'password' => data_md5(input('password', '')),
  119. 'status' => input('status', 1),
  120. 'headimg' => input('headimg', ''),
  121. 'member_level' => input('member_level', ''),
  122. 'member_level_name' => input('member_level_name', ''),
  123. 'nickname' => input('nickname', ''),
  124. 'sex' => input('sex', 0),
  125. 'birthday' => input('birthday', '') ? strtotime(input('birthday', '')) : 0,
  126. 'realname' => input('realname', ''),
  127. 'reg_time' => time(),
  128. ];
  129. $member_model = new MemberModel();
  130. $this->addLog("添加会员" . $data['username'] . $data['mobile']);
  131. return $member_model->addMember($data);
  132. } else {
  133. //会员等级
  134. $member_level_model = new MemberVipModel();
  135. $member_level_list = $member_level_model->getMemberViplList([], 'id, name', 'id asc');
  136. $this->assign('member_level_list', $member_level_list['data']);
  137. return $this->fetch('member/add_member');
  138. }
  139. }
  140. /**
  141. * 会员编辑
  142. */
  143. public function editMember()
  144. {
  145. if (request()->isAjax()) {
  146. $data = [
  147. 'mobile' => input('mobile', ''),
  148. 'email' => input('email', ''),
  149. 'status' => input('status', 1),
  150. 'headimg' => input('headimg', ''),
  151. 'member_level' => input('member_level', ''),
  152. 'member_level_name' => input('member_level_name', ''),
  153. 'nickname' => input('nickname', ''),
  154. 'vip_enddate' => input('start_time', ''),
  155. 'sex' => input('sex', 0),
  156. 'birthday' => input('birthday', '') ? strtotime(input('birthday', '')) : 0,
  157. ];
  158. $member_id = input('member_id', 0);
  159. $member_model = new MemberModel();
  160. $this->addLog("编辑会员:id" . $member_id, $data);
  161. return $member_model->editMember($data, [ [ 'member_id', '=', $member_id ] ]);
  162. } else {
  163. //会员等级
  164. $member_level_model = new MemberVipModel();
  165. $member_level_list = $member_level_model->getMemberViplList([], 'id, name', 'id asc');
  166. $this->assign('member_level_list', $member_level_list['data']);
  167. //会员信息
  168. $member_id = input('member_id', 0);
  169. $member_model = new MemberModel();
  170. $member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_id ] ]);
  171. $this->assign('member_info', $member_info);
  172. //会员详情四级菜单
  173. $this->forthMenu([ 'member_id' => $member_id ]);
  174. return $this->fetch('member/edit_member');
  175. }
  176. }
  177. /**
  178. * 会员删除
  179. */
  180. public function deleteMember()
  181. {
  182. $member_ids = input('member_ids', '');
  183. $member_model = new MemberModel();
  184. $this->addLog("删除会员:id" . $member_ids);
  185. return $member_model->deleteMember([ [ 'member_id', 'in', $member_ids ] ]);
  186. }
  187. /**
  188. * 修改会员标签
  189. */
  190. public function modifyLabel()
  191. {
  192. $member_ids = input('member_ids', '');
  193. $label_ids = input('label_ids', '');
  194. $member_model = new MemberModel();
  195. return $member_model->modifyMemberLabel($label_ids, [ [ 'member_id', 'in', $member_ids ] ]);
  196. }
  197. /**
  198. * 修改会员状态
  199. */
  200. public function modifyStatus()
  201. {
  202. $member_ids = input('member_ids', '');
  203. $status = input('status', 0);
  204. $member_model = new MemberModel();
  205. return $member_model->modifyMemberStatus($status, [ [ 'member_id', 'in', $member_ids ] ]);
  206. }
  207. /**
  208. * 修改会员密码
  209. */
  210. public function modifyPassword()
  211. {
  212. $member_ids = input('member_ids', '');
  213. $password = input('password', '123456');
  214. $member_model = new MemberModel();
  215. return $member_model->resetMemberPassword($password, [ [ 'member_id', 'in', $member_ids ] ]);
  216. }
  217. /**
  218. * 账户详情
  219. */
  220. public function accountDetail()
  221. {
  222. if (request()->isAjax()) {
  223. $page = input('page', 1);
  224. $page_size = input('page_size', PAGE_LIST_ROWS);
  225. $account_type = input('account_type', '');
  226. $from_type = input('from_type', '');
  227. $start_date = input('start_date', '');
  228. $end_date = input('end_date', '');
  229. $member_id = input('member_id', 0);
  230. $condition = [];
  231. $condition[] = [ 'member_id', '=', $member_id ];
  232. //账户类型
  233. if ($account_type != '') {
  234. $condition[] = [ 'account_type', '=', $account_type ];
  235. }
  236. //来源类型
  237. if ($from_type != '') {
  238. $condition[] = [ 'from_type', '=', $from_type ];
  239. }
  240. //发生时间
  241. if ($start_date != '' && $end_date != '') {
  242. $condition[] = [ 'create_time', 'between', [ strtotime($start_date), strtotime($end_date) ] ];
  243. } else if ($start_date != '' && $end_date == '') {
  244. $condition[] = [ 'create_time', '>=', strtotime($start_date) ];
  245. } else if ($start_date == '' && $end_date != '') {
  246. $condition[] = [ 'create_time', '<=', strtotime($end_date) ];
  247. }
  248. $member_account_model = new MemberAccountModel();
  249. $res = $member_account_model->getMemberAccountPageList($condition, $page, $page_size);
  250. $account_type_arr = $member_account_model->getAccountType();
  251. foreach ($res['data']['list'] as $key => $val) {
  252. $res['data']['list'][ $key ]['account_type_name'] = $account_type_arr[ $val['account_type'] ];
  253. }
  254. return $res;
  255. } else {
  256. $member_id = input('member_id', 0);
  257. //会员信息
  258. $member_model = new MemberModel();
  259. $member_info = $member_model->getMemberDetail($member_id);
  260. $this->assign('member_info', $member_info['data']);
  261. //账户类型和来源类型
  262. $member_account_model = new MemberAccountModel();
  263. $account_type_arr = $member_account_model->getAccountType();
  264. // $from_type_arr = $member_account_model->getFromType();
  265. $this->assign('account_type_arr', $account_type_arr);
  266. // $this->assign('from_type_arr', $from_type_arr['point']);
  267. //会员详情四级菜单
  268. $this->forthMenu([ 'member_id' => $member_id ]);
  269. return $this->fetch('member/account_detail');
  270. }
  271. }
  272. /**
  273. * 余额调整(不可提现)
  274. */
  275. public function adjustBalance()
  276. {
  277. $member_id = input('member_id', 0);
  278. $adjust_num = input('adjust_num', 0);
  279. $remark = input('remark', '');
  280. $this->addLog("会员余额调整id:" . $member_id . "金额" . $adjust_num);
  281. $member_account_model = new MemberAccountModel();
  282. return $member_account_model->addMemberAccount($member_id, 'balance', $adjust_num, 'adjust', 0, $remark);
  283. }
  284. /**
  285. * 余额调整(可提现)
  286. */
  287. public function adjustBalanceMoney()
  288. {
  289. $member_id = input('member_id', 0);
  290. $adjust_num = input('adjust_num', 0);
  291. $remark = input('remark', '');
  292. $this->addLog("会员余额调整id:" . $member_id . "金额" . $adjust_num);
  293. $member_account_model = new MemberAccountModel();
  294. return $member_account_model->addMemberAccount($member_id, 'balance_money', $adjust_num, 'adjust', 0, $remark);
  295. }
  296. /**
  297. * 积分调整
  298. */
  299. public function adjustPoint()
  300. {
  301. $member_id = input('member_id', 0);
  302. $adjust_num = input('adjust_num', 0);
  303. $remark = input('remark', '');
  304. $this->addLog("会员积分调整id:" . $member_id . "数量" . $adjust_num);
  305. $member_account_model = new MemberAccountModel();
  306. return $member_account_model->addMemberAccount($member_id, 'point', $adjust_num, 'adjust', 0, $remark);
  307. }
  308. /**
  309. * 成长值调整
  310. */
  311. public function adjustGrowth()
  312. {
  313. $member_id = input('member_id', 0);
  314. $adjust_num = input('adjust_num', 0);
  315. $remark = input('remark', '');
  316. $this->addLog("会员成长值调整id:" . $member_id . "数量" . $adjust_num);
  317. $member_account_model = new MemberAccountModel();
  318. return $member_account_model->addMemberAccount($member_id, 'growth', $adjust_num, 'adjust', 0, $remark);
  319. }
  320. /**
  321. * 注册协议
  322. */
  323. public function regAgreement()
  324. {
  325. if (request()->isAjax()) {
  326. //设置注册协议
  327. $title = input('title', '');
  328. $content = input('content', '');
  329. $config_model = new ConfigModel();
  330. return $config_model->setRegisterDocument($title, $content);
  331. } else {
  332. //获取注册协议
  333. $config_model = new ConfigModel();
  334. $document_info = $config_model->getRegisterDocument();
  335. $this->assign('document_info', $document_info);
  336. return $this->fetch('member/reg_agreement');
  337. }
  338. }
  339. /**
  340. * 注册设置
  341. */
  342. public function regConfig()
  343. {
  344. $config_model = new ConfigModel();
  345. if (request()->isAjax()) {
  346. //设置注册设置
  347. $data = array(
  348. 'is_enable' => input('is_enable', 1),
  349. 'type' => input('type', ''),
  350. 'keyword' => input('keyword', ''),
  351. 'pwd_len' => input('pwd_len', 6),
  352. 'pwd_complexity' => input('pwd_complexity', 'number,letter,upper_case,symbol'),
  353. 'dynamic_code_login' => input('dynamic_code_login', 1)
  354. );
  355. return $config_model->setRegisterConfig($data);
  356. } else {
  357. //获取注册设置
  358. $config_info = $config_model->getRegisterConfig();
  359. $value = $config_info['data']['value'];
  360. if (!empty($value)) {
  361. $value['type_arr'] = explode(',', $value['type']);
  362. $value['pwd_complexity_arr'] = explode(',', $value['pwd_complexity']);
  363. }
  364. $this->assign('value', $value);
  365. return $this->fetch('member/reg_config');
  366. }
  367. }
  368. /**
  369. * 搜索会员
  370. * 不是菜单 不入权限
  371. */
  372. public function searchMember()
  373. {
  374. $search_text = input('search_text', '');
  375. $member_model = new MemberModel();
  376. $member_info = $member_model->getMemberInfo([ [ 'username|mobile', '=', $search_text ] ]);
  377. return $member_info;
  378. }
  379. /**
  380. * 导出会员信息
  381. */
  382. public function exportMember()
  383. {
  384. //获取会员信息
  385. $search_text = input('search_text', '');
  386. $search_text_type = input('search_text_type', 'username');//可以传username mobile email
  387. $level_id = input('level_id', 0);
  388. $label_id = input('label_id', 0);
  389. $reg_start_date = input('reg_start_date', '');
  390. $reg_end_date = input('reg_end_date', '');
  391. $status = input('status', '');
  392. $condition = [];
  393. //下拉选择
  394. $condition[] = [ $search_text_type, 'like', "%" . $search_text . "%" ];
  395. //会员等级
  396. if ($level_id != 0) {
  397. $condition[] = [ 'member_level', '=', $level_id ];
  398. }
  399. //会员标签
  400. if ($label_id != 0) {
  401. //raw方法变为public类型 需要实例化以后调用
  402. $condition[] = [ "", 'exp', Db::raw("FIND_IN_SET({$label_id}, member_label)") ];
  403. }
  404. //注册时间
  405. if ($reg_start_date != '' && $reg_end_date != '') {
  406. $condition[] = [ 'reg_time', 'between', [ strtotime($reg_start_date), strtotime($reg_end_date) ] ];
  407. } else if ($reg_start_date != '' && $reg_end_date == '') {
  408. $condition[] = [ 'reg_time', '>=', strtotime($reg_start_date) ];
  409. } else if ($reg_start_date == '' && $reg_end_date != '') {
  410. $condition[] = [ 'reg_time', '<=', strtotime($reg_end_date) ];
  411. }
  412. //会员状态
  413. if ($status != '') {
  414. $condition[] = [ 'status', '=', $status ];
  415. }
  416. $order = 'reg_time desc';
  417. $field = 'username,nickname,realname,mobile,sex,birthday,email,member_level_name,member_label_name,
  418. qq,location,balance,balance_money,point,growth,reg_time,last_login_ip,last_login_time';
  419. $member_model = new MemberModel();
  420. $list = $member_model->getMemberList($condition, $field, $order);
  421. // 实例化excel
  422. $phpExcel = new \PHPExcel();
  423. $phpExcel->getProperties()->setTitle("会员信息");
  424. $phpExcel->getProperties()->setSubject("会员信息");
  425. // 对单元格设置居中效果
  426. $phpExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  427. $phpExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  428. $phpExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  429. $phpExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  430. $phpExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  431. $phpExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  432. $phpExcel->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  433. $phpExcel->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  434. $phpExcel->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  435. $phpExcel->getActiveSheet()->getStyle('J')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  436. $phpExcel->getActiveSheet()->getStyle('K')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  437. $phpExcel->getActiveSheet()->getStyle('L')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  438. $phpExcel->getActiveSheet()->getStyle('M')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  439. $phpExcel->getActiveSheet()->getStyle('N')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  440. $phpExcel->getActiveSheet()->getStyle('O')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  441. $phpExcel->getActiveSheet()->getStyle('P')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  442. $phpExcel->getActiveSheet()->getStyle('Q')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  443. //单独添加列名称
  444. $phpExcel->setActiveSheetIndex(0);
  445. $phpExcel->getActiveSheet()->setCellValue('A1', '会员账号');//可以指定位置
  446. $phpExcel->getActiveSheet()->setCellValue('B1', '会员昵称');
  447. $phpExcel->getActiveSheet()->setCellValue('C1', '真实姓名');
  448. $phpExcel->getActiveSheet()->setCellValue('D1', '手机号');
  449. $phpExcel->getActiveSheet()->setCellValue('E1', '性别');
  450. $phpExcel->getActiveSheet()->setCellValue('F1', '生日');
  451. $phpExcel->getActiveSheet()->setCellValue('G1', '邮箱');
  452. $phpExcel->getActiveSheet()->setCellValue('H1', '会员等级');
  453. $phpExcel->getActiveSheet()->setCellValue('I1', '会员标签');
  454. $phpExcel->getActiveSheet()->setCellValue('J1', 'qq');
  455. $phpExcel->getActiveSheet()->setCellValue('K1', '地址');
  456. $phpExcel->getActiveSheet()->setCellValue('L1', '余额');
  457. $phpExcel->getActiveSheet()->setCellValue('M1', '积分');
  458. $phpExcel->getActiveSheet()->setCellValue('N1', '成长值');
  459. $phpExcel->getActiveSheet()->setCellValue('O1', '上次登录时间');
  460. $phpExcel->getActiveSheet()->setCellValue('P1', '上次登录ip');
  461. $phpExcel->getActiveSheet()->setCellValue('Q1', '注册时间');
  462. //循环添加数据(根据自己的逻辑)
  463. $sex = [ '保密', '男', '女' ];
  464. foreach ($list['data'] as $k => $v) {
  465. $i = $k + 2;
  466. $phpExcel->getActiveSheet()->setCellValue('A' . $i, $v['username']);
  467. $phpExcel->getActiveSheet()->setCellValue('B' . $i, $v['nickname']);
  468. $phpExcel->getActiveSheet()->setCellValue('C' . $i, $v['realname']);
  469. $phpExcel->getActiveSheet()->setCellValue('D' . $i, $v['mobile']);
  470. $phpExcel->getActiveSheet()->setCellValue('E' . $i, $sex[ $v['sex'] ]);
  471. $phpExcel->getActiveSheet()->setCellValue('F' . $i, date('Y-m-d', $v['birthday']));
  472. $phpExcel->getActiveSheet()->setCellValue('G' . $i, $v['email']);
  473. $phpExcel->getActiveSheet()->setCellValue('H' . $i, $v['member_level_name']);
  474. $phpExcel->getActiveSheet()->setCellValue('I' . $i, $v['member_label_name']);
  475. $phpExcel->getActiveSheet()->setCellValue('J' . $i, $v['qq']);
  476. $phpExcel->getActiveSheet()->setCellValue('K' . $i, $v['location']);
  477. $phpExcel->getActiveSheet()->setCellValue('L' . $i, $v['balance'] + $v['balance_money']);
  478. $phpExcel->getActiveSheet()->setCellValue('M' . $i, $v['point']);
  479. $phpExcel->getActiveSheet()->setCellValue('N' . $i, $v['growth']);
  480. $phpExcel->getActiveSheet()->setCellValue('O' . $i, date('Y-m-d H:i:s', $v['last_login_time']));
  481. $phpExcel->getActiveSheet()->setCellValue('P' . $i, $v['last_login_ip']);
  482. $phpExcel->getActiveSheet()->setCellValue('Q' . $i, date('Y-m-d H:i:s', $v['reg_time']));
  483. }
  484. // // 重命名工作sheet
  485. // $phpExcel->getActiveSheet()->setTitle('会员信息');
  486. // // 对文件进行保存
  487. // $filename = date('Y年m月d日-会员信息表',time()).'.xlsx';
  488. // header('Content-Type: application/vnd.ms-excel');
  489. // header("Content-Disposition: attachment;filename=\"$filename\"");
  490. // header('Cache-Control: max-age=0');
  491. // // 通过工厂类实例化excel5,本来我想使用 excel2007,但是本地测试没有问题,到线上就出错,报错链接找不到
  492. // $objWriter = \PHPExcel_IOFactory::createWriter($phpExcel, 'Excel5');
  493. // $objWriter->save('php://output'); //文件通过浏览器下载
  494. // 重命名工作sheet
  495. $phpExcel->getActiveSheet()->setTitle('会员信息');
  496. // 设置第一个sheet为工作的sheet
  497. $phpExcel->setActiveSheetIndex(0);
  498. // 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
  499. $objWriter = \PHPExcel_IOFactory::createWriter($phpExcel, 'Excel2007');
  500. $file = date('Y年m月d日-会员信息表', time()) . '.xlsx';
  501. $objWriter->save($file);
  502. header("Content-type:application/octet-stream");
  503. $filename = basename($file);
  504. header("Content-Disposition:attachment;filename = " . $filename);
  505. header("Accept-ranges:bytes");
  506. header("Accept-length:" . filesize($file));
  507. readfile($file);
  508. unlink($file);
  509. exit;
  510. }
  511. /**
  512. * 订单管理
  513. */
  514. public function order()
  515. {
  516. $member_id = input("member_id", 0);//会员id
  517. $this->assign('member_id', $member_id);
  518. //会员详情四级菜单
  519. $this->forthMenu([ 'member_id' => $member_id ]);
  520. return $this->fetch('member/order');
  521. }
  522. /**
  523. * 会员地址
  524. */
  525. public function addressDetail()
  526. {
  527. if (request()->isAjax()) {
  528. $page = input('page', 1);
  529. $page_size = input('page_size', PAGE_LIST_ROWS);
  530. $member_id = input('member_id', 0);
  531. $condition = [];
  532. $condition[] = [ 'member_id', '=', $member_id ];
  533. //会员地址
  534. $member_address_model = new MemberAddressModel();
  535. $res = $member_address_model->getMemberAddressPageList($condition, $page, $page_size);
  536. return $res;
  537. } else {
  538. $member_id = input('member_id', 0);
  539. $this->assign('member_id', $member_id);
  540. //会员详情四级菜单
  541. $this->forthMenu([ 'member_id' => $member_id ]);
  542. return $this->fetch('member/address_detail');
  543. }
  544. }
  545. /**
  546. * 根据账户类型获取来源类型
  547. * @return array
  548. */
  549. public function getFromType()
  550. {
  551. $type = input('type','');
  552. $model = new MemberAccountModel();
  553. $res = $model->getFromType();
  554. return $res[$type];
  555. }
  556. }