Feedback.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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 Feedback 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. ];
  15. switch ($status) {
  16. case '0':
  17. $order = $this->getOrder();
  18. if($order===''){
  19. $order='id desc';
  20. }
  21. $map = $this->getMap();
  22. $data_list = Db::name('feedbacks')->where('type_id','2')->where($map)->order($order)->paginate();
  23. $page = $data_list->render();
  24. return ZBuilder::make('table')
  25. ->setPageTitle('') // 设置页面标题
  26. ->setPageTips('') // 设置页面提示信息
  27. ->setTabNav($list_tab, $status)//分组
  28. ->hideCheckbox() //隐藏第一列多选框
  29. ->setTableName('feedbacks') // 指定数据表名
  30. ->addOrder('id,created_at') // 添加排序
  31. ->addTopSelect('status', '全部状态', ['0'=>'未回复','1'=>'已回复']) //添加顶部下拉筛选
  32. ->setSearch(['id' => 'ID', 'content' => '建议内容'], '', '', '搜索') // 设置搜索参数
  33. ->addTimeFilter('created_at') // 添加时间段筛选
  34. ->addColumns([
  35. ['id', 'ID'],
  36. ['name', '反馈者','callback',function($value,$data){
  37. $arr=[];
  38. if($user=db('users')->where('id',$data['user_id'])->find()){
  39. $arr[]='用户:'.$user['name'];
  40. }
  41. if($salesman=db('salesmen')->where('id',$data['salesman_id'])->find()){
  42. $arr[]='代理商:'.$salesman['truename'];
  43. }
  44. return implode('<br>', $arr);
  45. },'__data__'],
  46. ['content', '建议内容','callback',function($value){
  47. return "<p style='max-width:50%;'>{$value}</p>";
  48. }],
  49. ['created_at', '建议时间','datetime', '未知','Y-m-d H:i'],
  50. ['status', '回复状态','status','',['0'=>'未回复','1'=>'已回复']],
  51. ['run', '操作','callback',function($value,$data){
  52. if($data['status']){
  53. $json=json_encode(['area'=>['800px','450px'],'title'=>'查看回复']);
  54. return '<div class="btn-group"><a title="查看回复" icon="fa fa-smile-o" class="btn btn-xs btn-default ajax-get pop" href="'.url('look',['id'=>$data['id'],'',false]).'?_pop=1" data-layer=\''.$json.'\' _tag="custom">查看回复</a></div>';
  55. }else{
  56. $json=json_encode(['area'=>['800px','450px'],'title'=>'开始回复']);
  57. return '<div class="btn-group"><a title="点击回复" icon="fa fa-smile-o" class="btn btn-xs btn-default ajax-get pop" href="'.url('handle',['id'=>$data['id'],'',false]).'?_pop=1" data-layer=\''.$json.'\' _tag="custom">点击回复</a></div>';
  58. }
  59. },'__data__'],
  60. ]) //添加多列数据
  61. ->setRowList($data_list) // 设置表格数据
  62. ->setPages($page) // 设置分页数据
  63. ->fetch();
  64. break;
  65. case '1':
  66. $order = $this->getOrder();
  67. if($order===''){
  68. $order='id desc';
  69. }
  70. $map = $this->getMap();
  71. $data_list = Db::name('feedbacks')->where('type_id','in','1,3')->where($map)->order($order)->paginate();
  72. $page = $data_list->render();
  73. return ZBuilder::make('table')
  74. ->setPageTitle('') // 设置页面标题
  75. ->setPageTips('') // 设置页面提示信息
  76. ->setTabNav($list_tab, $status)//分组
  77. ->hideCheckbox() //隐藏第一列多选框
  78. ->setTableName('feedbacks') // 指定数据表名
  79. ->addOrder('id,created_at') // 添加排序
  80. ->addTopSelect('status', '全部状态', ['0'=>'未处理','1'=>'已处理']) //添加顶部下拉筛选
  81. ->setSearch(['id' => 'ID', 'content' => '投诉内容'], '', '', '搜索') // 设置搜索参数
  82. ->addTimeFilter('created_at') // 添加时间段筛选
  83. ->addColumns([
  84. ['id', 'ID'],
  85. ['name', '投诉者','callback',function($value,$data){
  86. $arr=[];
  87. if($user=db('users')->where('id',$data['user_id'])->find()){
  88. $arr[]='用户:'.$user['name'];
  89. }
  90. if($salesman=db('salesmen')->where('id',$data['salesman_id'])->find()){
  91. $arr[]='代理商:'.$salesman['truename'];
  92. }
  93. return implode('<br>', $arr);
  94. },'__data__'],
  95. ['type_id', '投诉对象','callback',function($value,$data){
  96. if($value=='1'){
  97. return '商城';
  98. }elseif($value=='3'){
  99. $arr=[];
  100. if($user=db('users')->where('id',$data['user_id'])->find()){
  101. $arr[]='代理商';
  102. }
  103. if($salesman=db('salesmen')->where('id',$data['salesman_id'])->find()){
  104. $arr[]='供应商';
  105. }
  106. return implode('<br>',$arr);;
  107. }else{
  108. return '';
  109. }
  110. },'__data__'],
  111. ['content', '投诉内容','callback',function($value){
  112. return "<p style='max-width:50%;'>{$value}</p>";
  113. }],
  114. ['created_at', '投诉时间','datetime', '未知','Y-m-d H:i'],
  115. ['status', '处理状态','status','',['0'=>'未处理','1'=>'已处理']],
  116. ['run', '操作','callback',function($value,$data){
  117. if($data['status']){
  118. $json=json_encode(['area'=>['800px','450px'],'title'=>'查看处理']);
  119. return '<div class="btn-group"><a title="查看处理" icon="fa fa-smile-o" class="btn btn-xs btn-default ajax-get pop" href="'.url('look',['id'=>$data['id'],'',false]).'?_pop=1" data-layer=\''.$json.'\' _tag="custom">查看处理</a></div>';
  120. }else{
  121. $json=json_encode(['area'=>['800px','450px'],'title'=>'开始处理']);
  122. return '<div class="btn-group"><a title="点击处理" icon="fa fa-smile-o" class="btn btn-xs btn-default ajax-get pop" href="'.url('handle',['id'=>$data['id'],'',false]).'?_pop=1" data-layer=\''.$json.'\' _tag="custom">点击处理</a></div>';
  123. }
  124. },'__data__'],
  125. ]) //添加多列数据
  126. ->setRowList($data_list) // 设置表格数据
  127. ->setPages($page) // 设置分页数据
  128. ->fetch();
  129. break;
  130. default:
  131. break;
  132. }
  133. }
  134. public function look($id=''){
  135. $feedback=Db::name("feedbacks")->where('status','1')->where('id',$id)->find();
  136. if(!$feedback){
  137. return $this->error('请求错误');
  138. }
  139. // 使用ZBuilder快速创建表单
  140. return '<div style="padding:20px 2%">'.$feedback['handle'].'</div>';
  141. }
  142. public function handle($id=''){
  143. //判断是否为post请求
  144. if (Request::instance()->isPost()) {
  145. //获取请求的post数据
  146. $data=input('post.');
  147. //数据输入验证
  148. $feedback=Db::name("feedbacks")->where('id',$data['id'])->find();
  149. if($feedback['type_id']=='2'){
  150. $tips='回复';
  151. }else{
  152. $tips='处理';
  153. }
  154. $validate = new Validate([
  155. 'handle|'.$tips=> 'require|length:1,500',
  156. ]);
  157. if (!$validate->check($data)) {
  158. return $this->error($validate->getError());
  159. }
  160. //数据处理
  161. $update=array();
  162. $update['id']=$data['id'];
  163. $update['handle']=$data['handle'];
  164. $update['status']='1';
  165. $update['updated_at']=time();
  166. //数据更新
  167. $rt=Db::name("feedbacks")->update($update);
  168. //跳转
  169. if($rt!==false){
  170. return $this->success($tips.'成功',null,['_parent_reload' => 1]);
  171. } else {
  172. return $this->error($tips.'失败');
  173. }
  174. }
  175. // 接收id
  176. if ($id>0) {
  177. // 查处数据
  178. $feedback=Db::name("feedbacks")->where('status','0')->where('id',$id)->find();
  179. if(!$feedback){
  180. return $this->error('请求错误');
  181. }
  182. if($feedback['type_id']=='2'){
  183. $tips='回复';
  184. }else{
  185. $tips='处理';
  186. }
  187. // 使用ZBuilder快速创建表单
  188. return ZBuilder::make('form')
  189. ->setPageTitle('') // 设置页面标题
  190. ->setPageTips('') // 设置页面提示信息
  191. ->hideBtn([ 'back'])//隐藏按钮
  192. ->setBtnTitle('submit', '确定') //修改默认按钮标题
  193. ->addBtn('<button type="reset" class="btn btn-default">重置</button>') //添加额外按钮
  194. ->addTextarea('handle', $tips,'必填,限制在500个字以内')
  195. ->addHidden('id',$feedback['id'])
  196. //->isAjax(false) //默认为ajax的post提交
  197. ->fetch();
  198. }
  199. }
  200. }