Salesmen.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. <?php
  2. namespace app\mall\admin;
  3. use app\admin\controller\Admin;
  4. use think\Db;
  5. use think\Request;
  6. use think\Validate;
  7. use app\common\builder\ZBuilder;
  8. class Salesmen extends Admin
  9. {
  10. public function index($status='-1'){
  11. $list_tab = [
  12. '-1' => ['title' => '已审核', 'url' => url('index', ['status' => '-1'])],
  13. '2' => ['title' => '待审核', 'url' => url('index', ['status' => '2'])],
  14. '3' => ['title' => '驳回', 'url' => url('index', ['status' => '3'])],
  15. ];
  16. switch ($status) {
  17. case '-1':
  18. $order = $this->getOrder();
  19. if($order===''){
  20. $order='id desc';
  21. }
  22. $map = $this->getMap();
  23. $data_list = Db::name('salesmen')->where('status','in','0,1')->where($map)->order($order)->paginate();
  24. $page = $data_list->render();
  25. return ZBuilder::make('table')
  26. ->setPageTitle('') // 设置页面标题
  27. ->setPageTips('') // 设置页面提示信息
  28. ->setTabNav($list_tab, $status)//分组
  29. ->hideCheckbox() //隐藏第一列多选框
  30. ->setTableName('salesmen') // 指定数据表名
  31. ->addOrder('id,created_at') // 添加排序
  32. ->addTimeFilter('created_at') // 添加时间段筛选
  33. ->setSearch(['id' => 'ID', 'truename' => '姓名','mobile'=>'手机'], '', '', '搜索') // 设置搜索参数
  34. ->addTopSelect('level', '区域类型', ['1'=>'一级','2'=>'二级']) //添加顶部下拉筛选
  35. ->addColumns([
  36. ['id', 'ID'],
  37. ['truename', '姓名'],
  38. ['mobile', '手机号码'],
  39. ['level', '区域类型','callback','array_v',['1'=>'一级','2'=>'二级']],
  40. ['region', '负责区域','callback',function($value,$data){
  41. $province=db('regions')->where('id',$data['province_id'])->value('name');
  42. $city=db('regions')->where('id',$data['city_id'])->value('name');
  43. $area=db('regions')->where('id',$data['area_id'])->value('name');
  44. return $province.' '.$city.' '.$area;
  45. }, '__data__'],
  46. ['status', '状态', 'status', '', ['禁用', '正常']],
  47. ['created_at', '注册时间','datetime', '未知','Y-m-d H:i'],
  48. ['right_button', '操作', 'btn'],
  49. ]) //添加多列数据
  50. ->addRightButton('edit',['title'=>'修改'])
  51. ->setRowList($data_list) // 设置表格数据
  52. ->setPages($page) // 设置分页数据
  53. ->fetch();
  54. break;
  55. case '2':
  56. $order = $this->getOrder();
  57. if($order===''){
  58. $order='id desc';
  59. }
  60. $map = $this->getMap();
  61. $data_list = Db::name('salesmen')->where('status','2')->where($map)->order($order)->paginate();
  62. $page = $data_list->render();
  63. return ZBuilder::make('table')
  64. ->setPageTitle('') // 设置页面标题
  65. ->setPageTips('') // 设置页面提示信息
  66. ->setTabNav($list_tab, $status)//分组
  67. ->hideCheckbox() //隐藏第一列多选框
  68. ->setTableName('salesmen') // 指定数据表名
  69. ->addOrder('id,created_at') // 添加排序
  70. ->addTimeFilter('created_at') // 添加时间段筛选
  71. ->setSearch(['id' => 'ID', 'truename' => '姓名','mobile'=>'手机'], '', '', '搜索') // 设置搜索参数
  72. ->addTopSelect('level', '区域类型', ['1'=>'一级','2'=>'二级']) //添加顶部下拉筛选
  73. ->addColumns([
  74. ['id', 'ID'],
  75. ['truename', '姓名'],
  76. ['mobile', '手机号码'],
  77. ['level', '区域类型','callback','array_v',['1'=>'一级','2'=>'二级']],
  78. ['region', '负责区域','callback',function($value,$data){
  79. $province=db('regions')->where('id',$data['province_id'])->value('name');
  80. $city=db('regions')->where('id',$data['city_id'])->value('name');
  81. $area=db('regions')->where('id',$data['area_id'])->value('name');
  82. return $province.' '.$city.' '.$area;
  83. }, '__data__'],
  84. ['created_at', '注册时间','datetime', '未知','Y-m-d H:i'],
  85. ['right_button', '操作', 'btn'],
  86. ]) //添加多列数据
  87. ->addRightButton('custom',['title'=>'审核','href'=>url('audit',['id'=>'__ID__'])])
  88. ->setRowList($data_list) // 设置表格数据
  89. ->setPages($page) // 设置分页数据
  90. ->fetch();
  91. break;
  92. case '3':
  93. $order = $this->getOrder();
  94. if($order===''){
  95. $order='id desc';
  96. }
  97. $map = $this->getMap();
  98. $data_list = Db::name('salesmen')->where('status','3')->where($map)->order($order)->paginate();
  99. $page = $data_list->render();
  100. return ZBuilder::make('table')
  101. ->setPageTitle('') // 设置页面标题
  102. ->setPageTips('') // 设置页面提示信息
  103. ->setTabNav($list_tab, $status)//分组
  104. ->hideCheckbox() //隐藏第一列多选框
  105. ->setTableName('salesmen') // 指定数据表名
  106. ->addOrder('id,created_at') // 添加排序
  107. ->addTimeFilter('created_at') // 添加时间段筛选
  108. ->setSearch(['id' => 'ID', 'truename' => '姓名','mobile'=>'手机'], '', '', '搜索') // 设置搜索参数
  109. ->addTopSelect('level', '区域类型', ['1'=>'一级','2'=>'二级']) //添加顶部下拉筛选
  110. ->addColumns([
  111. ['id', 'ID'],
  112. ['truename', '姓名'],
  113. ['mobile', '手机号码'],
  114. ['level', '区域类型','callback','array_v',['1'=>'一级','2'=>'二级']],
  115. ['region', '负责区域','callback',function($value,$data){
  116. $province=db('regions')->where('id',$data['province_id'])->value('name');
  117. $city=db('regions')->where('id',$data['city_id'])->value('name');
  118. $area=db('regions')->where('id',$data['area_id'])->value('name');
  119. return $province.' '.$city.' '.$area;
  120. }, '__data__'],
  121. ['created_at', '注册时间','datetime', '未知','Y-m-d H:i'],
  122. ['auditmsg','上次驳回原因','callback',function($value,$data){
  123. return db('salesman_audits')->where('salesman_id',$data['id'])->order('audit_at desc')->value('auditmsg');
  124. },'__data__']
  125. //['right_button', '操作', 'btn'],
  126. ]) //添加多列数据
  127. //->addRightButton('custom',['title'=>'查看详情','href'=>url('look',['id'=>'__ID__'])],true)
  128. ->setRowList($data_list) // 设置表格数据
  129. ->setPages($page) // 设置分页数据
  130. ->fetch();
  131. break;
  132. default:
  133. break;
  134. }
  135. }
  136. public function audit($id=''){
  137. //判断是否为post请求
  138. if (Request::instance()->isPost()) {
  139. $now=time();
  140. //获取请求的post数据
  141. $data=input('post.');
  142. // 查处数据
  143. $salesman=Db::name("salesmen")->where('status','1')->where('id',$data['id'])->find();
  144. if(!$salesman){
  145. return $this->error('请求错误');
  146. }
  147. //数据输入验证
  148. $validate = new Validate([
  149. 'status|审核' => 'require|in:1,3',
  150. ]);
  151. if (!$validate->check($data)) {
  152. return $this->error($validate->getError());
  153. }
  154. if($data['status']=='3'){
  155. $validate = new Validate([
  156. 'auditmsg|驳回理由' => 'require|length:1,20',
  157. ]);
  158. if (!$validate->check($data)) {
  159. return $this->error($validate->getError());
  160. }
  161. Db::name('salesman_audits')->insertGetId(['salesman_id'=>$data['id'],'auditmsg'=>$data['auditmsg'],'audit_at'=>$now]);
  162. }
  163. //数据处理
  164. $update=array();
  165. $update['id']=$data['id'];
  166. $update['status']=$data['status'];
  167. $update['updated_at']=$now;
  168. //数据更新
  169. $rt=Db::name("salesmen")->update($update);
  170. //跳转
  171. if($rt!==false){
  172. //正式发短信
  173. if($salesman['mobile']!=''){
  174. import('aliyun_sms.SmsDemo');
  175. if($data['status']=='1'){
  176. $response = \SmsDemo::sendSms(
  177. "五金商城", // 短信签名
  178. "SMS_125022257", // 短信模板编号
  179. $salesman['mobile'], // 短信接收者
  180. Array(),
  181. "001" // 流水号,选填
  182. );
  183. }else{
  184. $response = \SmsDemo::sendSms(
  185. "五金商城", // 短信签名
  186. "SMS_125027328", // 短信模板编号
  187. $salesman['mobile'], // 短信接收者
  188. Array(
  189. "auditmsg"=>trim(trim($data['auditmsg'],'。'),'.'),
  190. ),
  191. "001" // 流水号,选填
  192. );
  193. }
  194. }
  195. return $this->success('审核成功',url('index',['status'=>$data['status']=='3'?'3':'-1']));
  196. } else {
  197. return $this->error('审核失败');
  198. }
  199. }
  200. // 接收id
  201. if ($id>0) {
  202. // 查处数据
  203. $salesman=Db::name("salesmen")->where('status','1')->where('id',$id)->find();
  204. if(!$salesman){
  205. return $this->error('请求错误');
  206. }
  207. $province=db('regions')->where('id',$salesman['province_id'])->value('name');
  208. $city=db('regions')->where('id',$salesman['city_id'])->value('name');
  209. $area=db('regions')->where('id',$salesman['area_id'])->value('name');
  210. $region=$province.' '.$city.' '.$area;
  211. switch ($salesman['level']) {
  212. case '1':
  213. $level='大区代理';
  214. break;
  215. case '2':
  216. $level='县级代理';
  217. break;
  218. default:
  219. $level='';
  220. break;
  221. }
  222. // 使用ZBuilder快速创建表单
  223. return ZBuilder::make('form')
  224. ->setPageTitle('代理商审核') // 设置页面标题
  225. ->setPageTips('请认真审核相关信息') // 设置页面提示信息
  226. ->setBtnTitle('submit', '确定') //修改默认按钮标题
  227. //->addBtn('<button type="reset" class="btn btn-default">重置</button>') //添加额外按钮
  228. ->addStatic('truename', '姓名','',$salesman['truename'])
  229. ->addStatic('mobile', '手机号码','',$salesman['mobile'])
  230. ->addStatic('idcard_pic', '照片','应为手持身份证照片,否则无效',staticText($salesman['idcard_pic'],'pic'))
  231. ->addStatic('idcard', '身份证号码','',$salesman['idcard'])
  232. ->addStatic('level', '代理类型','',$level)
  233. ->addStatic('region', '负责地区','',$region)
  234. ->addRadio('status', '审核', '必选', ['1' => '通过', '3' => '驳回'])
  235. ->addText('auditmsg', '驳回理由','必填,限制在20字以内')
  236. ->addHidden('id',$salesman['id'])
  237. ->setTrigger('status', '3', 'auditmsg',false)
  238. //->isAjax(false) //默认为ajax的post提交
  239. ->fetch();
  240. }
  241. }
  242. public function edit($id=''){
  243. //判断是否为post请求
  244. if (Request::instance()->isPost()) {
  245. $now=time();
  246. //获取请求的post数据
  247. $data=input('post.');
  248. // 查处数据
  249. $salesman=Db::name("salesmen")->where('status','in','0,1')->where('id',$data['id'])->find();
  250. if(!$salesman){
  251. return $this->error('请求错误');
  252. }
  253. //数据输入验证
  254. $validate = new Validate([
  255. 'level|代理类型' => 'require|in:1,2',
  256. 'status|代理状态' => 'require|in:0,1',
  257. ]);
  258. if (!$validate->check($data)) {
  259. return $this->error($validate->getError());
  260. }
  261. $update=array();
  262. if($data['level']=='1'){
  263. $validate = new Validate([
  264. 'region1|负责地区' => 'require',
  265. ]);
  266. if (!$validate->check($data)) {
  267. return $this->error($validate->getError());
  268. }
  269. $update['area_id']='0';
  270. $update['city_id']=$data['region1'];
  271. $update['province_id']=db('regions')->where('id',$data['region1'])->value('parent_id');
  272. }
  273. if($data['level']=='2'){
  274. $validate = new Validate([
  275. 'region2|负责地区' => 'require',
  276. ]);
  277. if (!$validate->check($data)) {
  278. return $this->error($validate->getError());
  279. }
  280. $update['area_id']=$data['region2'];
  281. $update['city_id']=db('regions')->where('id',$data['region2'])->value('parent_id');
  282. $update['province_id']=db('regions')->where('id',$update['city_id'])->value('parent_id');
  283. }
  284. if($data['status']=='0'){
  285. $validate = new Validate([
  286. 'disablemsg|禁用理由' => 'require|length:1,20',
  287. ]);
  288. if (!$validate->check($data)) {
  289. return $this->error($validate->getError());
  290. }
  291. Db::name('salesman_disables')->insertGetId(['salesman_id'=>$data['id'],'disablemsg'=>$data['disablemsg'],'audit_at'=>$now]);
  292. }
  293. //数据处理
  294. $update['id']=$data['id'];
  295. $update['status']=$data['status'];
  296. $update['level']=$data['level'];
  297. $update['updated_at']=$now;
  298. //数据更新
  299. $rt=Db::name("salesmen")->update($update);
  300. //跳转
  301. if($rt!==false){
  302. return $this->success('修改成功',url('index',['status'=>$data['status']=='3'?'3':'-1']));
  303. } else {
  304. return $this->error('修改失败');
  305. }
  306. }
  307. // 接收id
  308. if ($id>0) {
  309. // 查处数据
  310. $salesman=Db::name("salesmen")->where('status','in','0,1')->where('id',$id)->find();
  311. if(!$salesman){
  312. return $this->error('请求错误');
  313. }
  314. $disable=db('salesman_disables')->where('salesman_id',$id)->order('disable_at desc')->find();
  315. if($disable){
  316. $disablemsg=$disable['disablemsg'];
  317. }else{
  318. $disablemsg='';
  319. }
  320. if($salesman['level']=='1' && $salesman['area_id']=='0') {
  321. $salesman['area_id']=db('regions')->where('parent_id',$salesman['city_id'])->value('id');
  322. $user_num=db('users')->where('city_id',$salesman['city_id'])->count('id');
  323. $order_num_1=db('orders a')->join('users b','a.user_id=b.id','LEFT')->where('b.city_id',$salesman['city_id'])->where('a.state','in','1,3,4,5,8')->where('a.refund_state','in','-1,0,1,2,3,6,9,10,11')->count('a.id');
  324. $order_num_2=db('collage_orders a')->join('users b','a.user_id=b.id','LEFT')->where('b.city_id',$salesman['city_id'])->where('a.state','in','1,4')->count('a.id');
  325. $order_num=$order_num_1+$order_num_2;
  326. $amount_num=db('trades a')->join('users b','a.user_id=b.id','LEFT')->where('b.city_id',$salesman['city_id'])->where('a.state','1')->count('a.id');
  327. }else{
  328. $user_num=db('users')->where('area_id',$salesman['area_id'])->count('id');
  329. $order_num_1=db('orders a')->join('users b','a.user_id=b.id','LEFT')->where('b.area_id',$salesman['area_id'])->where('a.state','in','1,3,4,5,8')->where('a.refund_state','in','-1,0,1,2,3,6,9,10,11')->count('a.id');
  330. $order_num_2=db('collage_orders a')->join('users b','a.user_id=b.id','LEFT')->where('b.area_id',$salesman['area_id'])->where('a.state','in','1,4')->count('a.id');
  331. $order_num=$order_num_1+$order_num_2;
  332. $amount_num=db('trades a')->join('users b','a.user_id=b.id','LEFT')->where('b.area_id',$salesman['area_id'])->where('a.state','1')->count('a.id');
  333. }
  334. // 使用ZBuilder快速创建表单
  335. return ZBuilder::make('form')
  336. ->setPageTitle('修改代理商') // 设置页面标题
  337. ->setPageTips('请认真修改相关信息') // 设置页面提示信息
  338. ->setBtnTitle('submit', '确定') //修改默认按钮标题
  339. ->addBtn('<button type="reset" class="btn btn-default">重置</button>') //添加额外按钮
  340. ->addStatic('truename', '姓名','',$salesman['truename'])
  341. ->addStatic('mobile', '手机号码','',$salesman['mobile'])
  342. ->addStatic('idcard_pic', '照片','应为手持身份证照片,否则无效',staticText($salesman['idcard_pic'],'pic'))
  343. ->addStatic('idcard', '身份证号码','',$salesman['idcard'])
  344. ->addStatic('survey_num', '调研信息数量','',db('surveys')->where('salesman_id',$salesman['id'])->count('id'))
  345. ->addStatic('user_num', '地区用户数量','',$user_num)
  346. ->addStatic('order_num', '地区订单数量','',$order_num)
  347. ->addStatic('amount_num', '地区交易额','',$amount_num)
  348. ->addStatic('complaint_num', '被投诉次数','',db('feedbacks')->where(['type_id'=>'3','salesman_id'=>$salesman['id']])->count('id'))
  349. ->addRadio('level', '代理类型', '必选', ['1' => '大区代理','2' => '县级代理'],$salesman['level'])
  350. ->addLinkages('region1', '负责地区', '必选', 'regions', 3, $salesman['city_id'], 'id,name,parent_id')
  351. ->addLinkages('region2', '负责地区', '必选', 'regions', 4, $salesman['area_id'], 'id,name,parent_id')
  352. ->addRadio('status', '代理状态', '必选', ['1' => '正常','0' => '禁用'],$salesman['status'])
  353. ->addText('disablemsg', '禁用理由','必填,限制在20字以内',$disablemsg)
  354. ->addHidden('id',$salesman['id'])
  355. ->setTrigger('level', '1', 'region1',false)
  356. ->setTrigger('level', '2', 'region2',false)
  357. ->setTrigger('status', '0', 'disablemsg',false)
  358. //->isAjax(false) //默认为ajax的post提交
  359. ->fetch();
  360. }
  361. }
  362. }