Supplier.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  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 Supplier extends Admin
  9. {
  10. public function index($status='0'){
  11. $list_tab = [
  12. '0' => ['title' => '已通过', 'url' => url('index', ['status' => '0'])],
  13. '1' => ['title' => '待审核', 'url' => url('index', ['status' => '1'])],
  14. '2' => ['title' => '驳回', 'url' => url('index', ['status' => '2'])],
  15. ];
  16. switch ($status) {
  17. case '0':
  18. $order = $this->getOrder();
  19. if($order===''){
  20. $order='id desc';
  21. }
  22. $map = $this->getMap();
  23. //省市联动条件处理
  24. if(isset($map['province_id']) && $map['province_id']>0){
  25. if(isset($map['city_id']) && $map['city_id']>0){
  26. $parent_id=db('regions')->where('id',$map['city_id'])->value('parent_id');
  27. if($parent_id!=$map['province_id']){
  28. unset($map['city_id']);
  29. if(isset($map['area_id'])){
  30. unset($map['area_id']);
  31. }
  32. }else{
  33. if(isset($map['area_id']) && $map['area_id']>0){
  34. $parent_id=db('regions')->where('id',$map['area_id'])->value('parent_id');
  35. if($parent_id!=$map['city_id']){
  36. unset($map['area_id']);
  37. }
  38. }
  39. }
  40. }else{
  41. if(isset($map['area_id'])){
  42. unset($map['area_id']);
  43. }
  44. }
  45. }else{
  46. if(isset($map['city_id'])){
  47. unset($map['city_id']);
  48. }
  49. if(isset($map['area_id'])){
  50. unset($map['area_id']);
  51. }
  52. }
  53. $data_list = Db::name('users')->where($map)->order($order)->paginate();
  54. $page = $data_list->render();
  55. //省份
  56. $province_selects=[];
  57. $provinces=db('regions')->where('level',1)->select();
  58. foreach ($provinces as $key => $value) {
  59. $province_selects[$value['id']]=$value['name'];
  60. }
  61. //地市
  62. $city_selects=[];
  63. if(isset($map['province_id']) && $map['province_id']>0){
  64. $citys=db('regions')->where('level',2)->where('parent_id',$map['province_id'])->select();
  65. foreach ($citys as $key => $value) {
  66. $city_selects[$value['id']]=$value['name'];
  67. }
  68. }
  69. //区县
  70. $area_selects=[];
  71. if(isset($map['city_id']) && $map['city_id']>0){
  72. $areas=db('regions')->where('level',3)->where('parent_id',$map['city_id'])->select();
  73. foreach ($areas as $key => $value) {
  74. $area_selects[$value['id']]=$value['name'];
  75. }
  76. }
  77. $data_list = Db::name('suppliers')->where('audit_state','1')->where($map)->order($order)->paginate();
  78. $page = $data_list->render();
  79. return ZBuilder::make('table')
  80. ->setPageTitle('') // 设置页面标题
  81. ->setPageTips('') // 设置页面提示信息
  82. ->setTabNav($list_tab, $status)//分组
  83. ->hideCheckbox() //隐藏第一列多选框
  84. ->setTableName('suppliers') // 指定数据表名
  85. ->addOrder('id,created_at') // 添加排序
  86. ->addTopSelect('province_id', '选择省份', $province_selects) //添加顶部下拉筛选
  87. ->addTopSelect('city_id', '选择地市', $city_selects) //添加顶部下拉筛选
  88. ->addTopSelect('area_id', '选择区县', $area_selects) //添加顶部下拉筛选
  89. ->addTopSelect('state', '全部状态', ['1'=>'正常','0'=>'禁用']) //添加顶部下拉筛选
  90. ->addTimeFilter('created_at') // 添加时间段筛选
  91. ->setSearch(['id' => 'ID','serial_num'=>'编号', 'name' => '名称'], '', '', '搜索') // 设置搜索参数
  92. ->addColumns([
  93. ['id', 'ID'],
  94. ['serial_num', '编号'],
  95. ['name', '名称'],
  96. ['region', '区域','callback',function($value,$data){
  97. $province=db('regions')->where('id',$data['province_id'])->value('name');
  98. $city=db('regions')->where('id',$data['city_id'])->value('name');
  99. $area=db('regions')->where('id',$data['area_id'])->value('name');
  100. return $province.' '.$city.' '.$area;
  101. }, '__data__'],
  102. ['linkman', '联系人'],
  103. ['mobile', '联系电话'],
  104. ['product_type_id', '分类','callback',function($value){
  105. return db('product_types')->where('id',$value)->value('name');
  106. }],
  107. ['rebate', '返点比例','callback',function($value){
  108. return $value.'%';
  109. }],
  110. ['created_at', '创建时间','datetime', '未知','Y-m-d H:i'],
  111. ['state','状态','switch'],
  112. ['right_button', '操作', 'btn'],
  113. ]) //添加多列数据
  114. ->addRightButton('custom',['title'=>'查看详情','href'=>url('look',['id'=>'__ID__'])],true)
  115. ->addRightButton('edit',['title'=>'修改'])
  116. ->setRowList($data_list) // 设置表格数据
  117. ->setPages($page) // 设置分页数据
  118. ->fetch();
  119. break;
  120. case '1':
  121. $order = $this->getOrder();
  122. if($order===''){
  123. $order='id desc';
  124. }
  125. $map = $this->getMap();
  126. $data_list = Db::name('suppliers')->where('audit_state','0')->where($map)->order($order)->paginate();
  127. $page = $data_list->render();
  128. return ZBuilder::make('table')
  129. ->setPageTitle('') // 设置页面标题
  130. ->setPageTips('') // 设置页面提示信息
  131. ->setTabNav($list_tab, $status)//分组
  132. ->hideCheckbox() //隐藏第一列多选框
  133. ->setTableName('suppliers') // 指定数据表名
  134. ->addOrder('id,created_at') // 添加排序
  135. ->addTimeFilter('created_at') // 添加时间段筛选
  136. ->setSearch(['id' => 'ID','name' => '名称'], '', '', '搜索') // 设置搜索参数
  137. ->addColumns([
  138. ['id', 'ID'],
  139. ['name', '名称'],
  140. ['region', '区域','callback',function($value,$data){
  141. $province=db('regions')->where('id',$data['province_id'])->value('name');
  142. $city=db('regions')->where('id',$data['city_id'])->value('name');
  143. $area=db('regions')->where('id',$data['area_id'])->value('name');
  144. return $province.' '.$city.' '.$area;
  145. }, '__data__'],
  146. ['linkman', '联系人'],
  147. ['mobile', '联系电话'],
  148. ['product_type_id', '分类','callback',function($value){
  149. return db('product_types')->where('id',$value)->value('name');
  150. }],
  151. ['created_at', '创建时间','datetime', '未知','Y-m-d H:i'],
  152. ['right_button', '操作', 'btn'],
  153. ]) //添加多列数据
  154. ->addRightButton('custom',['title'=>'审核','href'=>url('audit',['id'=>'__ID__'])])
  155. ->setRowList($data_list) // 设置表格数据
  156. ->setPages($page) // 设置分页数据
  157. ->fetch();
  158. break;
  159. case '2':
  160. $order = $this->getOrder();
  161. if($order===''){
  162. $order='id desc';
  163. }
  164. $map = $this->getMap();
  165. $data_list = Db::name('suppliers')->where('audit_state','2')->where($map)->order($order)->paginate();
  166. $page = $data_list->render();
  167. return ZBuilder::make('table')
  168. ->setPageTitle('') // 设置页面标题
  169. ->setPageTips('') // 设置页面提示信息
  170. ->setTabNav($list_tab, $status)//分组
  171. ->hideCheckbox() //隐藏第一列多选框
  172. ->setTableName('suppliers') // 指定数据表名
  173. ->addOrder('id,created_at') // 添加排序
  174. ->addTimeFilter('created_at') // 添加时间段筛选
  175. ->setSearch(['id' => 'ID','name' => '名称'], '', '', '搜索') // 设置搜索参数
  176. ->addColumns([
  177. ['id', 'ID'],
  178. ['name', '名称'],
  179. ['region', '区域','callback',function($value,$data){
  180. $province=db('regions')->where('id',$data['province_id'])->value('name');
  181. $city=db('regions')->where('id',$data['city_id'])->value('name');
  182. $area=db('regions')->where('id',$data['area_id'])->value('name');
  183. return $province.' '.$city.' '.$area;
  184. }, '__data__'],
  185. ['linkman', '联系人'],
  186. ['mobile', '联系电话'],
  187. ['product_type_id', '分类','callback',function($value){
  188. return db('product_types')->where('id',$value)->value('name');
  189. }],
  190. ['auditmsg','上次驳回原因','callback',function($value,$data){
  191. return db('supplier_audits')->where('supplier_id',$data['id'])->order('audit_at desc')->value('auditmsg');
  192. },'__data__'],
  193. ['created_at', '创建时间','datetime', '未知','Y-m-d H:i'],
  194. ]) //添加多列数据
  195. ->setRowList($data_list) // 设置表格数据
  196. ->setPages($page) // 设置分页数据
  197. ->fetch();
  198. break;
  199. default:
  200. break;
  201. }
  202. }
  203. public function audit($id=''){
  204. //判断是否为post请求
  205. if (Request::instance()->isPost()) {
  206. $now=time();
  207. //获取请求的post数据
  208. $data=input('post.');
  209. $supplier=Db::name("suppliers")->where('audit_state','0')->where('id',$data['id'])->find();
  210. if(!$supplier){
  211. return $this->error('请求错误');
  212. }
  213. //数据输入验证
  214. $validate = new Validate([
  215. 'audit_state|审核' => 'require|in:1,2',
  216. ]);
  217. if (!$validate->check($data)) {
  218. return $this->error($validate->getError());
  219. }
  220. $update=array();
  221. if($data['audit_state']=='1'){
  222. $validate = new Validate([
  223. 'rebate|返点比例' => [
  224. 'require',
  225. 'egt'=>'0',
  226. 'elt'=>'100',
  227. 'regex'=>'/^(((\d|[1-9]\d)(\.\d{1,2})?)|100|100.0|100.00)$/',
  228. ],
  229. ]);
  230. if (!$validate->check($data)) {
  231. return $this->error($validate->getError());
  232. }
  233. $update['rebate']=$data['rebate'];
  234. $update['serial_num']=get_supplier_serial_num();
  235. }
  236. if($data['audit_state']=='2'){
  237. $validate = new Validate([
  238. 'auditmsg|驳回理由' => 'require|length:1,20',
  239. ]);
  240. if (!$validate->check($data)) {
  241. return $this->error($validate->getError());
  242. }
  243. Db::name('supplier_audits')->insertGetId(['supplier_id'=>$data['id'],'auditmsg'=>$data['auditmsg'],'audit_at'=>$now]);
  244. }
  245. //数据处理
  246. $update['id']=$data['id'];
  247. $update['audit_state']=$data['audit_state'];
  248. $update['updated_at']=$now;
  249. //数据更新
  250. $rt=Db::name("suppliers")->update($update);
  251. //跳转
  252. if($rt!==false){
  253. //正式发短信
  254. if($supplier['mobile']!=''){
  255. import('aliyun_sms.SmsDemo');
  256. if($data['audit_state']=='1'){
  257. $response = \SmsDemo::sendSms(
  258. "五金商城", // 短信签名
  259. "SMS_125017389", // 短信模板编号
  260. $supplier['mobile'], // 短信接收者
  261. Array(
  262. "serial_num"=>$update['serial_num'],
  263. ),
  264. "001" // 流水号,选填
  265. );
  266. }else{
  267. $response = \SmsDemo::sendSms(
  268. "五金商城", // 短信签名
  269. "SMS_125027329", // 短信模板编号
  270. $supplier['mobile'], // 短信接收者
  271. Array(
  272. "auditmsg"=>trim(trim($data['auditmsg'],'。'),'.'),
  273. ),
  274. "001" // 流水号,选填
  275. );
  276. }
  277. }
  278. return $this->success('审核成功',url('index',['status'=>$data['audit_state']=='2'?'2':'0']));
  279. } else {
  280. return $this->error('审核失败');
  281. }
  282. }
  283. // 接收id
  284. if ($id>0) {
  285. // 查处数据
  286. $supplier=Db::name("suppliers")->where('audit_state','0')->where('id',$id)->find();
  287. if(!$supplier){
  288. return $this->error('请求错误');
  289. }
  290. $province=db('regions')->where('id',$supplier['province_id'])->value('name');
  291. $city=db('regions')->where('id',$supplier['city_id'])->value('name');
  292. $area=db('regions')->where('id',$supplier['area_id'])->value('name');
  293. $region=$province.' '.$city.' '.$area;
  294. // 使用ZBuilder快速创建表单
  295. return ZBuilder::make('form')
  296. ->setPageTitle('供应商审核') // 设置页面标题
  297. ->setPageTips('请认真审核相关信息') // 设置页面提示信息
  298. ->setBtnTitle('submit', '确定') //修改默认按钮标题
  299. //->addBtn('<button type="reset" class="btn btn-default">重置</button>') //添加额外按钮
  300. ->addStatic('name', '供应商名称','',$supplier['name'])
  301. ->addStatic('company', '公司名称','',$supplier['company'])
  302. ->addStatic('linkman', '联系人','',$supplier['linkman'])
  303. ->addStatic('mobile', '联系电话','',$supplier['mobile'])
  304. ->addStatic('region', '区域','',$region)
  305. ->addStatic('address', '公司地址','',$supplier['address'])
  306. ->addStatic('idcard_pic', '身份证','',staticText($supplier['idcard_pic'],'img'))
  307. ->addStatic('license', '营业执照','',staticText($supplier['license'],'img'))
  308. ->addRadio('audit_state', '审核', '必选', ['1' => '通过', '2' => '驳回'])
  309. ->addText('rebate', '返点比例','必填,百分比,规则范围:0.00~~100.00','',['','%'])
  310. ->addText('auditmsg', '驳回理由','必填,限制在20字以内')
  311. ->addHidden('id',$supplier['id'])
  312. ->setTrigger('audit_state', '1', 'rebate',false)
  313. ->setTrigger('audit_state', '2', 'auditmsg',false)
  314. //->isAjax(false) //默认为ajax的post提交
  315. ->fetch();
  316. }
  317. }
  318. public function edit($id=''){
  319. //判断是否为post请求
  320. if (Request::instance()->isPost()) {
  321. $now=time();
  322. //获取请求的post数据
  323. $data=input('post.');
  324. // 查处数据
  325. $supplier=Db::name("suppliers")->where('audit_state','1')->where('id',$data['id'])->find();
  326. if(!$supplier){
  327. return $this->error('请求错误');
  328. }
  329. //数据输入验证
  330. $validate = new Validate([
  331. 'company|公司名称' => ['require'],
  332. 'linkman|联系人' => ['require'],
  333. 'mobile|联系电话' => ['require'],
  334. 'region|区域' => ['require','number'],
  335. 'address|公司地址' => ['require'],
  336. 'product_type_id|主营品类' => ['require','number'],
  337. 'rebate|返点比例' => [
  338. 'require',
  339. 'egt'=>'0',
  340. 'elt'=>'100',
  341. 'regex'=>'/^(((\d|[1-9]\d)(\.\d{1,2})?)|100|100.0|100.00)$/',
  342. ],
  343. 'state|状态' => 'require|in:0,1',
  344. ]);
  345. if (!$validate->check($data)) {
  346. return $this->error($validate->getError());
  347. }
  348. //数据处理
  349. $update=array();
  350. $update['id']=$data['id'];
  351. $update['company']=$data['company'];
  352. $update['linkman']=$data['linkman'];
  353. $update['mobile']=$data['mobile'];
  354. $update['area_id']=$data['region'];
  355. $update['city_id']=db('regions')->where('id',$data['region'])->value('parent_id');
  356. $update['province_id']=db('regions')->where('id',$update['city_id'])->value('parent_id');
  357. $update['address']=$data['address'];
  358. $update['product_type_id']=$data['product_type_id'];
  359. $update['rebate']=$data['rebate'];
  360. $update['state']=$data['state'];
  361. $update['updated_at']=$now;
  362. //数据更新
  363. $rt=Db::name("suppliers")->update($update);
  364. //跳转
  365. if($rt!==false){
  366. return $this->success('修改成功',url('index'));
  367. } else {
  368. return $this->error('修改失败');
  369. }
  370. }
  371. // 接收id
  372. if ($id>0) {
  373. // 查处数据
  374. $supplier=Db::name("suppliers")->where('audit_state','1')->where('id',$id)->find();
  375. if(!$supplier){
  376. return $this->error('请求错误');
  377. }
  378. $cates=Db::name('product_types')->field('id,parent_id,level,name')->where('level',config('mall.product_class_level'))->order('sort asc')->select();
  379. $cates=get_tree_ids($cates,'0',1);
  380. // 使用ZBuilder快速创建表单
  381. return ZBuilder::make('form')
  382. ->setPageTitle('修改供应商资料') // 设置页面标题
  383. ->setPageTips('请认真编辑相关信息') // 设置页面提示信息
  384. ->setBtnTitle('submit', '确定') //修改默认按钮标题
  385. //->addBtn('<button type="reset" class="btn btn-default">重置</button>') //添加额外按钮
  386. ->addStatic('name', '供应商名称','',$supplier['name'])
  387. ->addText('company', '公司名称','必填',$supplier['company'])
  388. ->addText('linkman', '联系人','必填',$supplier['linkman'])
  389. ->addText('mobile', '联系电话','必填',$supplier['mobile'])
  390. ->addLinkages('region', '区域', '必选', 'regions', 4, $supplier['area_id'], 'id,name,parent_id')
  391. ->addText('address', '公司地址','必填',$supplier['address'])
  392. ->addSelect('product_type_id', '主营品类','必选',$cates,$supplier['product_type_id'])
  393. ->addText('rebate', '返点比例','必填,百分比,规则范围:0.00~~100.00',$supplier['rebate'],['','%'])
  394. ->addRadio('state', '状态', '必选', ['1' => '正常','0' => '禁用'],$supplier['state'])
  395. ->addHidden('id',$supplier['id'])
  396. ->setTrigger('audit_state', '2', 'auditmsg',false)
  397. //->isAjax(false) //默认为ajax的post提交
  398. ->fetch();
  399. }
  400. }
  401. public function look($id=''){
  402. $supplier=Db::name("suppliers")->where('audit_state','1')->where('id',$id)->find();
  403. if(!$supplier){
  404. return $this->error('请求错误');
  405. }
  406. $province=db('regions')->where('id',$supplier['province_id'])->value('name');
  407. $city=db('regions')->where('id',$supplier['city_id'])->value('name');
  408. $area=db('regions')->where('id',$supplier['area_id'])->value('name');
  409. $region=$province.' '.$city.' '.$area;
  410. // 使用ZBuilder快速创建表单
  411. return ZBuilder::make('form')
  412. ->setPageTitle('供应商详情') // 设置页面标题
  413. //->addBtn('<button type="reset" class="btn btn-default">重置</button>') //添加额外按钮
  414. ->hideBtn(['submit', 'back'])//隐藏按钮
  415. ->addStatic('serial_num', '供应商编号','',$supplier['serial_num'])
  416. ->addStatic('name', '供应商名称','',$supplier['name'])
  417. ->addStatic('company', '公司名称','',$supplier['company'])
  418. ->addStatic('linkman', '联系人','',$supplier['linkman'])
  419. ->addStatic('mobile', '联系电话','',$supplier['mobile'])
  420. ->addStatic('region', '区域','',$supplier['address'])
  421. ->addStatic('address', '公司地址','',$supplier['address'])
  422. ->addStatic('product_type_id', '主营品类','',db('product_types')->where('id',$supplier['product_type_id'])->value('name'))
  423. ->addStatic('address', '商品数','统计的是审核通过的商品数',db('products')->where('audit_state','1')->where('state','in','1,2')->count())
  424. ->addStatic('address', '订单数','','暂未处理')
  425. ->addStatic('address', '退款订单数','','暂未处理')
  426. ->addStatic('address', '账户余额','','暂未处理')
  427. ->addStatic('idcard_pic', '身份证','',staticText($supplier['idcard_pic'],'img'))
  428. ->addStatic('license', '营业执照','',staticText($supplier['license'],'img'))
  429. ->addStatic('created_at', '创建时间','',staticText($supplier['created_at'],'time'))
  430. //->isAjax(false) //默认为ajax的post提交
  431. ->fetch();
  432. }
  433. }