Explorar o código

Merge branch 'master' of ssh://git.9026.com:2212/swdz-WangHaijun/BaoMa

zilong %!s(int64=4) %!d(string=hai) anos
pai
achega
78705991c0
Modificáronse 61 ficheiros con 2105 adicións e 12 borrados
  1. 18 0
      app/Admin/Actions/Community/Docter/Chat.php
  2. 30 0
      app/Admin/Actions/Community/Notice/sendNotice.php
  3. 112 0
      app/Admin/Actions/Vaccines/ImportAction.php
  4. 18 0
      app/Admin/Actions/backstage/User/BalanceLog.php
  5. 20 0
      app/Admin/Actions/backstage/User/BlackList.php
  6. 19 0
      app/Admin/Actions/backstage/User/archives.php
  7. 20 0
      app/Admin/Actions/backstage/User/service.php
  8. 13 2
      app/Admin/Controllers/ArticleController.php
  9. 164 0
      app/Admin/Controllers/DocterController.php
  10. 105 0
      app/Admin/Controllers/UserBalanceLogController.php
  11. 100 0
      app/Admin/Controllers/UserListController.php
  12. 105 0
      app/Admin/Controllers/UserPatientsController.php
  13. 127 0
      app/Admin/Controllers/UserServiceController.php
  14. 130 0
      app/Admin/Controllers/VaccinesController.php
  15. 7 0
      app/Admin/routes.php
  16. 34 0
      app/Community/Controllers/ApiController.php
  17. 133 0
      app/Community/Controllers/DocterChatController.php
  18. 100 0
      app/Community/Controllers/NoticeController.php
  19. 5 2
      app/Community/Controllers/StatController.php
  20. 4 0
      app/Community/routes.php
  21. 4 2
      app/Helpers/functions.php
  22. 59 0
      app/Http/Controllers/ScheDuleController.php
  23. 34 0
      app/Imports/Vaccines/ImportMember.php
  24. 10 0
      app/Models/Notice.php
  25. 5 1
      app/Models/Order.php
  26. 7 0
      app/Models/OrderPack.php
  27. 4 1
      app/Models/Patient.php
  28. 10 0
      app/Models/User.php
  29. 3 1
      app/Models/UserBalanceLog.php
  30. 17 0
      app/Models/Vaccines.php
  31. 3 1
      composer.json
  32. 643 2
      composer.lock
  33. 36 0
      database/migrations/2020_11_25_095040_add_field.php
  34. 0 0
      public/assets/css/app.1ef7a076.css
  35. BIN=BIN
      public/assets/img/close001.2835da4d.jpg
  36. BIN=BIN
      public/assets/img/close002.e38ad856.jpg
  37. BIN=BIN
      public/assets/img/close003.f9dff833.jpg
  38. BIN=BIN
      public/assets/img/face002.c9f88acd.jpg
  39. BIN=BIN
      public/assets/img/face003.5df92cea.jpg
  40. BIN=BIN
      public/assets/img/face004.4a1731fa.jpg
  41. BIN=BIN
      public/assets/img/face005.d5784a4b.jpg
  42. 0 0
      public/assets/js/app.a700b62e.js
  43. 0 0
      public/assets/js/app.a700b62e.js.map
  44. 0 0
      public/assets/js/chunk-vendors.95e2f2c7.js
  45. 0 0
      public/assets/js/chunk-vendors.95e2f2c7.js.map
  46. 0 0
      public/cdms/assets/css/app.1ef7a076.css
  47. BIN=BIN
      public/cdms/assets/img/close001.2835da4d.jpg
  48. BIN=BIN
      public/cdms/assets/img/close002.e38ad856.jpg
  49. BIN=BIN
      public/cdms/assets/img/close003.f9dff833.jpg
  50. BIN=BIN
      public/cdms/assets/img/face002.c9f88acd.jpg
  51. BIN=BIN
      public/cdms/assets/img/face003.5df92cea.jpg
  52. BIN=BIN
      public/cdms/assets/img/face004.4a1731fa.jpg
  53. BIN=BIN
      public/cdms/assets/img/face005.d5784a4b.jpg
  54. 0 0
      public/cdms/assets/js/app.a700b62e.js
  55. 0 0
      public/cdms/assets/js/app.a700b62e.js.map
  56. 0 0
      public/cdms/assets/js/chunk-vendors.95e2f2c7.js
  57. 0 0
      public/cdms/assets/js/chunk-vendors.95e2f2c7.js.map
  58. BIN=BIN
      public/dist/favicon.ico
  59. 1 0
      public/dist/index.html
  60. 1 0
      resources/views/chat.blade.php
  61. 4 0
      routes/web.php

+ 18 - 0
app/Admin/Actions/Community/Docter/Chat.php

xqd
@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Admin\Actions\Community\Docter;
+
+use Encore\Admin\Actions\RowAction;
+use Illuminate\Http\Request;
+
+class Chat extends RowAction
+{
+    public $name = '查看';
+
+
+
+    public function href()
+    {
+        return '/cdms/docter_chats/1/edit';
+    }
+}

+ 30 - 0
app/Admin/Actions/Community/Notice/sendNotice.php

xqd
@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Admin\Actions\Community\Notice;
+
+use App\User;
+use Encore\Admin\Actions\BatchAction;
+use Illuminate\Database\Eloquent\Collection;
+
+class sendNotice extends BatchAction
+{
+    public $name = '群发通知';
+
+    public function handle(Collection $collection)
+    {
+        foreach ($collection as $model) {
+            $openid = User::where('id',$model->id)->value('openid');
+            if(empty($openid)) continue;
+        }
+
+        return $this->response()->success('Success message...')->refresh();
+    }
+
+    public function form()
+    {
+        $this->text('title','标题')->value('社区通州')->disable();
+        $this->textarea('content','内容')->value('社区通州')->rows(4);
+        $this->textarea('remark','备注')->value('社区通州')->rows(3);
+    }
+
+}

+ 112 - 0
app/Admin/Actions/Vaccines/ImportAction.php

xqd
@@ -0,0 +1,112 @@
+<?php
+
+namespace App\Admin\Actions\Vaccines;
+
+use Encore\Admin\Actions\Action;
+use Illuminate\Http\Request;
+use App\Imports\Vaccines\ImportMember;
+use Encore\Admin\Admin;
+use Maatwebsite\Excel\Facades\Excel;
+
+class ImportAction extends Action
+{
+    protected $selector = '.import-action';
+
+    public function handle(Request $request)
+    {
+        try{
+            // $request ...
+            $file = $request-> file('file');
+
+            Excel::import(new ImportMember(),$file);
+
+            return $this->response()->success('数据导入成功')->refresh();
+        }catch (\Exception $e){
+            return $this->response()->error($e -> getMessage());
+        }
+    }
+
+    public function html()
+    {
+        return <<<HTML
+        <a class="btn btn-sm btn-default import-action">导入</a>
+HTML;
+    }
+
+
+    //表单
+    public function form()
+    {
+        $this
+            ->file('file', '请选择文件')
+            ->options(['showPreview' => false,
+                'allowedFileExtensions'=>['xlsx','xls','csv'],
+                'showUpload'=>true
+            ]);
+    }
+
+    //上传等待
+    public function handleActionPromise()
+    {
+        $resolve = <<<SCRIPT
+var actionResolverss = function (data) {
+            $('.modal-footer').show()
+            $('.tips').remove()
+            var response = data[0];
+            var target   = data[1];
+
+            if (typeof response !== 'object') {
+                return $.admin.swal({type: 'error', title: 'Oops!'});
+            }
+
+            var then = function (then) {
+                if (then.action == 'refresh') {
+                    $.admin.reload();
+                }
+
+                if (then.action == 'download') {
+                    window.open(then.value, '_blank');
+                }
+
+                if (then.action == 'redirect') {
+                    $.admin.redirect(then.value);
+                }
+            };
+
+            if (typeof response.html === 'string') {
+                target.html(response.html);
+            }
+
+            if (typeof response.swal === 'object') {
+                $.admin.swal(response.swal);
+            }
+
+            if (typeof response.toastr === 'object') {
+                $.admin.toastr[response.toastr.type](response.toastr.content, '', response.toastr.options);
+            }
+
+            if (response.then) {
+              then(response.then);
+            }
+        };
+
+        var actionCatcherss = function (request) {
+            $('.modal-footer').show()
+            $('.tips').remove()
+
+            if (request && typeof request.responseJSON === 'object') {
+                $.admin.toastr.error(request.responseJSON.message, '', {positionClass:"toast-bottom-center", timeOut: 10000}).css("width","500px")
+            }
+        };
+SCRIPT;
+
+        Admin::script($resolve);
+
+        return <<<SCRIPT
+         $('.modal-footer').hide()
+         let html = `<div class='tips' style='color: #ff3249;font-size: 18px;'>导入时间取决于数据量,请耐心等待结果不要关闭窗口!<img src="data:image/gif;base64,R0lGODlhEAAQAPQAAP///1VVVfr6+np6eqysrFhYWG5ubuPj48TExGNjY6Ojo5iYmOzs7Lq6utjY2ISEhI6OjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFUCAgjmRpnqUwFGwhKoRgqq2YFMaRGjWA8AbZiIBbjQQ8AmmFUJEQhQGJhaKOrCksgEla+KIkYvC6SJKQOISoNSYdeIk1ayA8ExTyeR3F749CACH5BAkKAAAALAAAAAAQABAAAAVoICCKR9KMaCoaxeCoqEAkRX3AwMHWxQIIjJSAZWgUEgzBwCBAEQpMwIDwY1FHgwJCtOW2UDWYIDyqNVVkUbYr6CK+o2eUMKgWrqKhj0FrEM8jQQALPFA3MAc8CQSAMA5ZBjgqDQmHIyEAIfkECQoAAAAsAAAAABAAEAAABWAgII4j85Ao2hRIKgrEUBQJLaSHMe8zgQo6Q8sxS7RIhILhBkgumCTZsXkACBC+0cwF2GoLLoFXREDcDlkAojBICRaFLDCOQtQKjmsQSubtDFU/NXcDBHwkaw1cKQ8MiyEAIfkECQoAAAAsAAAAABAAEAAABVIgII5kaZ6AIJQCMRTFQKiDQx4GrBfGa4uCnAEhQuRgPwCBtwK+kCNFgjh6QlFYgGO7baJ2CxIioSDpwqNggWCGDVVGphly3BkOpXDrKfNm/4AhACH5BAkKAAAALAAAAAAQABAAAAVgICCOZGmeqEAMRTEQwskYbV0Yx7kYSIzQhtgoBxCKBDQCIOcoLBimRiFhSABYU5gIgW01pLUBYkRItAYAqrlhYiwKjiWAcDMWY8QjsCf4DewiBzQ2N1AmKlgvgCiMjSQhACH5BAkKAAAALAAAAAAQABAAAAVfICCOZGmeqEgUxUAIpkA0AMKyxkEiSZEIsJqhYAg+boUFSTAkiBiNHks3sg1ILAfBiS10gyqCg0UaFBCkwy3RYKiIYMAC+RAxiQgYsJdAjw5DN2gILzEEZgVcKYuMJiEAOwAAAAAAAAAAAA=="><\/div>`
+         $('.modal-header').append(html)
+process.then(actionResolverss).catch(actionCatcherss);
+SCRIPT;
+    }
+}

+ 18 - 0
app/Admin/Actions/backstage/User/BalanceLog.php

xqd
@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Admin\Actions\backstage\User;
+
+use Encore\Admin\Actions\RowAction;
+use Illuminate\Database\Eloquent\Model;
+
+class BalanceLog extends RowAction
+{
+    public $name = '余额明细';
+
+    public function handle(Model $model)
+    {
+        // $model ...
+        return $this->response()->success('跳转余额成功')->redirect('/admin/user_balance_logs?user_id='.$this->row->id.'');
+    }
+
+}

+ 20 - 0
app/Admin/Actions/backstage/User/BlackList.php

xqd
@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Admin\Actions\backstage\User;
+
+use App\Models\User;
+use Encore\Admin\Actions\RowAction;
+use Illuminate\Database\Eloquent\Model;
+
+class BlackList extends RowAction
+{
+    public $name = '拉黑';
+
+    public function handle(Model $model)
+    {
+        // $model ...
+        User::where('id',$model->id)->update(['status'=>0]);
+        return $this->response()->success('拉黑成功.')->refresh();
+    }
+
+}

+ 19 - 0
app/Admin/Actions/backstage/User/archives.php

xqd
@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Admin\Actions\backstage\User;
+
+use App\Models\Patient;
+use Encore\Admin\Actions\RowAction;
+use Illuminate\Database\Eloquent\Model;
+
+class archives extends RowAction
+{
+    public $name = '档案';
+
+    public function handle(Model $model)
+    {
+        // $model ...
+        return $this->response()->success('跳转档案库成功')->redirect('/admin/user_patients?user_id='.$this->row->id.'');
+    }
+
+}

+ 20 - 0
app/Admin/Actions/backstage/User/service.php

xqd
@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Admin\Actions\backstage\User;
+
+use Encore\Admin\Actions\RowAction;
+use Illuminate\Database\Eloquent\Model;
+
+class service extends RowAction
+{
+    public $name = '服务包-保单';
+
+    public function handle(Model $model)
+    {
+        // $model ...
+
+        return $this->response()->success('跳转订单库成功')->redirect('/admin/user_orders?user_id='.$this->row->id.'&product_type=6');
+
+    }
+
+}

+ 13 - 2
app/Admin/Controllers/ArticleController.php

xqd xqd
@@ -27,12 +27,23 @@ class ArticleController extends AdminController
         $grid = new Grid(new Article());
 
         $grid->column('id', __('Id'));
-        $grid->column('type', __('分类'));
+        $grid->column('type', __('分类'))->using([1=>'没',2=>'有',3=>'分',4=>'类']);
         $grid->column('title', __('标题'))->limit(10,'...')->width(100);
         $grid->column('content', __('内容'))->limit(20,'...')->width(200);
         $grid->column('banner_url', __('图片'))->image('',50,50);
         $grid->column('created_at', __('创建时间'));
         $grid->column('updated_at', __('更新时间'));
+        $grid->filter(function($filter){
+
+            // Remove the default id filter
+            $filter->disableIdFilter();
+
+            // Add a column filter
+            $type = [''=>'全部'];
+            $type = array_merge($type,Article::$_post_type);
+            $filter->equal('type', '类别')->select(Article::$_post_type);
+
+        });
 
         return $grid;
     }
@@ -67,7 +78,7 @@ class ArticleController extends AdminController
     {
         $form = new Form(new Article());
 
-        $form->select('type', __('分类'))->options(Article::$_post_type)->default(1);
+        $form->select('type', __('分类'))->options(Article::$_post_type)->default('1');
         $form->text('title', __('标题'))->rules('required|min:3|max:255',['required'=>'请填写标题','min'=>'标题字符不能少于3个','max'=>'标题长度过长']);
         $form->textarea('content', __('内容'))->rules('required|min:3',['required'=>'请填写标题','min'=>'标题字符不能少于3个']);
         $form->image('banner_url', __('图片'))->rules('required' ,['required'=>'请选择图片!']);

+ 164 - 0
app/Admin/Controllers/DocterController.php

xqd
@@ -0,0 +1,164 @@
+<?php
+
+namespace App\Admin\Controllers;
+
+use App\Models\Docter;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Show;
+
+class DocterController extends AdminController
+{
+    /**
+     * Title for current resource.
+     *
+     * @var string
+     */
+    protected $title = '医生';
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $grid = new Grid(new Docter());
+
+        $grid->column('id', __('Id'));
+        $grid->column('type', __('Type'));
+        $grid->column('name', __('Name'));
+        $grid->column('phone', __('Phone'));
+        $grid->column('sex', __('Sex'));
+        $grid->column('birthday', __('Birthday'));
+        $grid->column('avatar', __('Avatar'));
+        $grid->column('status', __('Status'));
+        $grid->column('label', __('Label'));
+        $grid->column('sign', __('Sign'));
+        $grid->column('intro', __('Intro'));
+        $grid->column('office_id', __('Office id'));
+        $grid->column('qualification_id', __('Qualification id'));
+        $grid->column('score', __('Score'));
+        $grid->column('service_persons', __('Service persons'));
+        $grid->column('eva_num', __('Eva num'));
+        $grid->column('service_days', __('Service days'));
+        $grid->column('phone_minutes', __('Phone minutes'));
+        $grid->column('chat_price', __('Chat price'));
+        $grid->column('phone_price', __('Phone price'));
+        $grid->column('appoint_price', __('Appoint price'));
+        $grid->column('is_chat', __('Is chat'));
+        $grid->column('is_phone', __('Is phone'));
+        $grid->column('is_appoint', __('Is appoint'));
+        $grid->column('latitude', __('Latitude'));
+        $grid->column('longitude', __('Longitude'));
+        $grid->column('created_at', __('Created at'));
+        $grid->column('updated_at', __('Updated at'));
+        $grid->column('user_id', __('User id'));
+        $grid->column('password', __('Password'));
+        $grid->column('is_then', __('Is then'));
+        $grid->column('practice', __('Practice'));
+        $grid->column('card_photo', __('Card photo'));
+        $grid->column('is_quail', __('Is quail'));
+        $grid->column('card_id', __('Card id'));
+        $grid->column('receiving_time', __('Receiving time'));
+
+        return $grid;
+    }
+
+    /**
+     * Make a show builder.
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        $show = new Show(Docter::findOrFail($id));
+
+        $show->field('id', __('Id'));
+        $show->field('type', __('Type'));
+        $show->field('name', __('Name'));
+        $show->field('phone', __('Phone'));
+        $show->field('sex', __('Sex'));
+        $show->field('birthday', __('Birthday'));
+        $show->field('avatar', __('Avatar'));
+        $show->field('status', __('Status'));
+        $show->field('label', __('Label'));
+        $show->field('sign', __('Sign'));
+        $show->field('intro', __('Intro'));
+        $show->field('office_id', __('Office id'));
+        $show->field('qualification_id', __('Qualification id'));
+        $show->field('score', __('Score'));
+        $show->field('service_persons', __('Service persons'));
+        $show->field('eva_num', __('Eva num'));
+        $show->field('service_days', __('Service days'));
+        $show->field('phone_minutes', __('Phone minutes'));
+        $show->field('chat_price', __('Chat price'));
+        $show->field('phone_price', __('Phone price'));
+        $show->field('appoint_price', __('Appoint price'));
+        $show->field('is_chat', __('Is chat'));
+        $show->field('is_phone', __('Is phone'));
+        $show->field('is_appoint', __('Is appoint'));
+        $show->field('latitude', __('Latitude'));
+        $show->field('longitude', __('Longitude'));
+        $show->field('created_at', __('Created at'));
+        $show->field('updated_at', __('Updated at'));
+        $show->field('user_id', __('User id'));
+        $show->field('password', __('Password'));
+        $show->field('is_then', __('Is then'));
+        $show->field('practice', __('Practice'));
+        $show->field('card_photo', __('Card photo'));
+        $show->field('is_quail', __('Is quail'));
+        $show->field('card_id', __('Card id'));
+        $show->field('receiving_time', __('Receiving time'));
+
+        return $show;
+    }
+
+    /**
+     * Make a form builder.
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+        $form = new Form(new Docter());
+
+        $form->switch('type', __('Type'));
+        $form->text('name', __('Name'));
+        $form->mobile('phone', __('Phone'));
+        $form->switch('sex', __('Sex'));
+        $form->text('birthday', __('Birthday'));
+        $form->image('avatar', __('Avatar'));
+        $form->switch('status', __('Status'))->default(1);
+        $form->text('label', __('Label'));
+        $form->text('sign', __('Sign'));
+        $form->text('intro', __('Intro'));
+        $form->number('office_id', __('Office id'));
+        $form->number('qualification_id', __('Qualification id'));
+        $form->decimal('score', __('Score'))->default(0.0);
+        $form->number('service_persons', __('Service persons'));
+        $form->number('eva_num', __('Eva num'));
+        $form->number('service_days', __('Service days'));
+        $form->number('phone_minutes', __('Phone minutes'));
+        $form->number('chat_price', __('Chat price'));
+        $form->number('phone_price', __('Phone price'));
+        $form->number('appoint_price', __('Appoint price'));
+        $form->switch('is_chat', __('Is chat'))->default(1);
+        $form->switch('is_phone', __('Is phone'))->default(1);
+        $form->switch('is_appoint', __('Is appoint'))->default(1);
+        $form->decimal('latitude', __('Latitude'))->default(0.0000000);
+        $form->decimal('longitude', __('Longitude'))->default(0.0000000);
+        $form->number('user_id', __('User id'));
+        $form->password('password', __('Password'));
+        $form->number('is_then', __('Is then'));
+        $form->text('practice', __('Practice'));
+        $form->text('card_photo', __('Card photo'));
+        $form->text('is_quail', __('Is quail'));
+        $form->text('card_id', __('Card id'));
+        $form->number('receiving_time', __('Receiving time'));
+
+        return $form;
+    }
+}

+ 105 - 0
app/Admin/Controllers/UserBalanceLogController.php

xqd
@@ -0,0 +1,105 @@
+<?php
+
+namespace App\Admin\Controllers;
+
+use App\Models\UserBalanceLog;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Show;
+
+class UserBalanceLogController extends AdminController
+{
+    /**
+     * Title for current resource.
+     *
+     * @var string
+     */
+    protected $title = '余额明细';
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $grid = new Grid(new UserBalanceLog());
+        //根据id筛选数据
+        $uesr_id = \request('user_id');
+        $grid->filter(function ($filter){
+            $filter->disableIdFilter();
+            $filter->equal('user_id','用户id');
+        });
+        //关闭全部的操作
+        $grid->disableActions();
+
+        $grid->column('id', __('Id'));
+        $grid->column('user_id', __('用户ID'));
+        $grid->column('user.nickname', __('用户名称'));
+        $grid->column('admin_user_id', __('后台用户ID'));
+        $grid->column('type', __('类型'))
+            ->using([1=>'订单消费',2=>'用户充值',3=>'后台赠送']);
+        $grid->column('relation_id', __('订单id'));
+        $grid->column('before_balance', __('变化前的余额'))->display(function ($price){
+            return $price/100;
+        });
+        $grid->column('change_balance', __('改变的余额'))->display(function ($price){
+            return $price/100;
+        });
+        $grid->column('after_balance', __('变化后的余额'))->display(function ($price){
+            return $price/100;
+        });
+        $grid->column('remark', __('备注'));
+        $grid->column('created_at', __('创建时间'));
+        $grid->column('updated_at', __('更新时间'));
+
+        return $grid;
+    }
+
+    /**
+     * Make a show builder.
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        $show = new Show(UserBalanceLog::findOrFail($id));
+
+        $show->field('id', __('Id'));
+        $show->field('user_id', __('User id'));
+        $show->field('admin_user_id', __('Admin user id'));
+        $show->field('type', __('Type'));
+        $show->field('relation_id', __('Relation id'));
+        $show->field('before_balance', __('Before balance'));
+        $show->field('change_balance', __('Change balance'));
+        $show->field('after_balance', __('After balance'));
+        $show->field('remark', __('Remark'));
+        $show->field('created_at', __('Created at'));
+        $show->field('updated_at', __('Updated at'));
+
+        return $show;
+    }
+
+    /**
+     * Make a form builder.
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+        $form = new Form(new UserBalanceLog());
+
+        $form->number('user_id', __('User id'));
+        $form->number('admin_user_id', __('Admin user id'));
+        $form->switch('type', __('Type'));
+        $form->number('relation_id', __('Relation id'));
+        $form->number('before_balance', __('Before balance'));
+        $form->number('change_balance', __('Change balance'));
+        $form->number('after_balance', __('After balance'));
+        $form->text('remark', __('Remark'));
+
+        return $form;
+    }
+}

+ 100 - 0
app/Admin/Controllers/UserListController.php

xqd
@@ -0,0 +1,100 @@
+<?php
+
+namespace App\Admin\Controllers;
+
+use App\Admin\Actions\backstage\User\archives;
+use App\Admin\Actions\backstage\User\BalanceLog;
+use App\Admin\Actions\backstage\User\BlackList;
+use App\Admin\Actions\backstage\User\service;
+use App\Models\User;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Show;
+
+class UserListController extends AdminController
+{
+    /**
+     * Title for current resource.
+     *
+     * @var string
+     */
+    protected $title = '用户列表';
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $grid = new Grid(new User());
+        $grid->actions(function ($actions) {
+            // 去掉删除
+            $actions->disableDelete();
+            // 去掉编辑
+            $actions->disableEdit();
+            // 去掉查看
+            $actions->disableView();
+            $actions->add(new archives());
+            $actions->add(new service());
+            $actions->add(new BalanceLog());
+            $actions->add(new BlackList());
+        });
+        //筛选
+        $grid->filter(function ($filter){
+            $filter->disableIdFilter();
+            $filter->equal('phone','手机')->mobile()->placeholder("请输入手机");
+            $filter->equal('phone','订单号')->placeholder("请输入订单号");
+            $filter->like('nickname','昵称');
+            $filter->equal('status','用户状态')->radio([
+                ''   => '不限',
+                0    => '黑名单',
+                1    => '正常',
+            ]);
+            $filter->equal('is_pack','用户状态')->radio([
+                ''   => '全部用户',
+                0    => '普通用户',
+                1    => '服务包用户',
+            ]);
+        });
+            $grid ->model()->where('status','>=','0');
+            $grid->column('id', __('用户id'))->sortable();
+            $grid->column('nickname', __('用户名'));
+            $grid->column('sex', __('性别'))->using([0=>'未知',1=>'男',2=>'女']);
+            $grid->column('age', __('年龄'));
+            $grid->column('status', __('状态'))->using([0=>'黑名单',1=>'正常',]);
+            $grid->column('is_pack', __('用户身份'))->using([0=>'普通用户',1=>'付费用户']);
+            $grid->column('balance', __('当前余额'))->display(function ($price){
+                return $price/100;
+            });
+            $grid->column('created_at', __('注册时间'));
+            $grid->column('last_login_time', __('最后登录时间'))->display(function ($time){
+                return date("Y-m-d H:i",$time);
+            });
+        return $grid;
+    }
+
+    /**
+     * Make a show builder.
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        $show = new Show(User::findOrFail($id));
+        return $show;
+    }
+
+    /**
+     * Make a form builder.
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+        $form = new Form(new User());
+        return $form;
+    }
+}

+ 105 - 0
app/Admin/Controllers/UserPatientsController.php

xqd
@@ -0,0 +1,105 @@
+<?php
+
+namespace App\Admin\Controllers;
+
+use App\Models\Patient;
+use Encore\Admin\Controllers\AdminController;
+use Illuminate\Http\Request;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Show;
+
+class UserPatientsController extends AdminController
+{
+    /**
+     * Title for current resource.
+     *
+     * @var string
+     */
+    protected $title = '档案';
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $grid = new Grid(new Patient());
+        $uesr_id = \request('user_id');
+        $grid->filter(function ($filter){
+            $filter->disableIdFilter();
+            $filter->equal('user_id','用户id');
+        });
+        $grid->actions(function ($actions) {
+            // 去掉删除
+            $actions->disableDelete();
+            // 去掉编辑
+            $actions->disableEdit();
+        });
+        $grid->column('id', __('档案id'));
+        $grid->column('user_id', __('用户id'));
+        $grid->column('name', __('姓名'));
+        $grid->column('sex', __('性别'))->using([0=>'未知',1=>'男',2=>'女',]);
+        $grid->column('avatar', __('头像'))->image("",100,100);
+        $grid->column('age', __('年龄'));
+        $grid->column('email', __('邮箱'));
+        $grid->column('phone', __('联系电话'));
+        $grid->column('address', __('家庭住址'))->limit(20,'...');
+        $grid->column('guardian_name', __('监护人姓名'));
+        $grid->column('card_type', __('证件类型'))->using([1=>'身份证',2=>'护照']);
+        $grid->column('card_number', __('证件号'));
+        $grid->column('social_card_number', __('社保卡号'));
+        $grid->column('created_at', __('创建时间'));
+        $grid->column('updated_at', __('更新时间'));
+
+        return $grid;
+    }
+
+    /**
+     * Make a show builder.
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        $show = new Show(Patient::findOrFail($id));
+
+        $show->field('id', __('档案id'));
+        $show->field('user_id', __('用户id'));
+        $show->field('name', __('姓名'));
+        $show->field('sex', __('性别'))->using([0=>'未知',1=>'男',2=>'女',]);
+        $show->field('avatar', __('头像'))->image();
+        $show->field('card_img_url', __('身份证正面照片'))->image();
+        $show->field('card_back_img_url', __('身份证背面照片'))->image();
+        $show->field('birthday', __('生日'));
+        $show->field('age', __('年龄'));
+        $show->field('email', __('邮箱'));
+        $show->field('phone', __('联系电话'));
+        $show->field('address', __('家庭住址'));
+        $show->field('guardian_name', __('监护人姓名'));
+        $show->field('relationship_type', __('与就诊人关系类型'))
+            ->using([1=>'父亲',2=>'母亲',3=>'祖父',4=>'祖母',5=>'外祖父',6=>'外祖母',7=>'叔侄',8=>'其他']);
+        $show->field('info', __('就诊信息'));
+        $show->field('card_type', __('证件类型'))->using([1=>'身份证',2=>'护照']);
+        $show->field('card_number', __('证件号'));
+        $show->field('social_card_number', __('社保卡号'));
+        $show->field('born_hospital', __('出生医院'));
+        $show->field('created_at', __('创建时间'));
+        $show->field('updated_at', __('更新时间'));
+
+        return $show;
+    }
+
+    /**
+     * Make a form builder.
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+        $form = new Form(new Patient());
+        return $form;
+    }
+}

+ 127 - 0
app/Admin/Controllers/UserServiceController.php

xqd
@@ -0,0 +1,127 @@
+<?php
+
+namespace App\Admin\Controllers;
+
+use App\Models\Order;
+use App\Models\OrderPack;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Show;
+
+class UserServiceController extends AdminController
+{
+    /**
+     * Title for current resource.
+     *
+     * @var string
+     */
+    protected $title = '服务包-保单';
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $grid = new Grid(new Order());
+        $product_type = 6;
+        $uesr_id = \request('user_id');
+        $grid->filter(function ($filter){
+            $filter->disableIdFilter();
+            $filter->equal('user_id','用户id');
+            $filter->equal('product_type','订单类型');
+        });
+        $grid->actions(function ($actions) {
+
+            // 去掉删除
+            $actions->disableDelete();
+
+            // 去掉编辑
+            $actions->disableEdit();
+        });
+
+        $grid->column('orderPack.id', __('Id'));
+        $grid->column('orderPack.order_id', __('订单id'));
+        $grid->column('orderPack.service_pack_id', __('服务包id'));
+        $grid->column('orderPack.pack_name', __('服务包名称'));
+        $grid->column('orderPack.pack_intro', __('服务包简介'));
+        $grid->column('orderPack.pack_price', __('服务包价格'))->display(function ($price){
+            return $price/100;
+        });
+        $grid->column('orderPack.insurance_policy', __('保单名称'));
+        $grid->column('orderPack.insurance_img_url', __('	保单图片链接'));
+        $grid->column('orderPack.team_id', __('医生团队ID'));
+
+        $grid->column('orderPack.effective_days', __('有效天数'));
+        $grid->column('orderPack.start_time', __('开始时间'))->display(function ($start_time){
+            return date("Y-m-d H:i",$start_time);
+        });
+        $grid->column('orderPack.end_time', __('结束时间'))->display(function ($end_time){
+            return date("Y-m-d H:i",$end_time);
+        });
+        $grid->column('orderPack.created_at', __('创建时间'));
+        $grid->column('orderPack.updated_at', __('更新时间'));
+        return $grid;
+    }
+
+    /**
+     * Make a show builder.
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        $show = new Show(Order::findOrFail($id));
+
+        $show->field('orderPack.id', __('Id'));
+        $show->field('orderPack.order_id', __('订单ID'));
+        $show->field('orderPack.service_pack_id', __('服务包ID'));
+        $show->field('orderPack.pack_name', __('服务包名称'));
+        $show->field('orderPack.pack_intro', __('服务包简介'));
+        $show->field('orderPack.pack_price', __('服务包价格'))->as(function ($price){
+            return $price/100;
+        });
+        $show->field('orderPack.insurance_policy', __('保单名称'));
+        $show->field('orderPack.insurance_img_url', __('保单图片链接'));
+        $show->field('orderPack.team_id', __('医生团队ID'));
+        $show->field('orderPack.phone_minutes', __('	电话分钟数'));
+        $show->field('orderPack.chat_num', __('图文咨询次数'));
+        $show->field('orderPack.appoint_num', __('门诊预约次数'));
+        $show->field('orderPack.vaccine_limit_amount', __('疫苗总金额限制'))->as(function ($price){
+            return $price/100;
+        });
+        $show->field('orderPack.nurses_limit_amount', __('儿保总金额限制'))->as(function ($price){
+            return $price/100;
+        });
+        $show->field('orderPack.effective_days', __('	有效天数'));
+        $show->field('orderPack.start_time', __('开始时间'))->as(function ($start_time){
+            return date("Y-m-d H:i",$start_time);
+        });
+        $show->field('orderPack.end_time', __('结束时间'))->as(function ($end_time){
+            return date("Y-m-d H:i",$end_time);
+        });
+        $show->field('orderPack.is_security', __('宝贝是否有医保'))
+            ->using([0=>'否',1=>'是']);
+        $show->field('orderPack.guardian_name', __('监护人姓名'));
+        $show->field('orderPack.relationship_type', __('与宝贝的关系'))
+            ->using([1=>'父亲',2=>'母亲',3=>'祖父',4=>'祖母',5=>'外祖父',6=>'外祖母',7=>'叔侄']);
+        $show->field('orderPack.created_at', __('创建时间'));
+        $show->field('orderPack.updated_at', __('更新时间'));
+
+        return $show;
+    }
+
+    /**
+     * Make a form builder.
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+        $form = new Form(new Order());
+        return $form;
+    }
+}

+ 130 - 0
app/Admin/Controllers/VaccinesController.php

xqd
@@ -0,0 +1,130 @@
+<?php
+
+namespace App\Admin\Controllers;
+
+use App\Models\Vaccines;
+use App\Admin\Actions\Vaccines\ImportAction;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Show;
+
+class VaccinesController extends AdminController
+{
+    /**
+     * Title for current resource.
+     *
+     * @var string
+     */
+    protected $title = 'Vaccines';
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $grid = new Grid(new Vaccines());
+
+        $grid->column('id', __('Id'));
+        $grid->column('type', '类型')->using([1=>'Ⅰ类疫苗',2=>'Ⅱ类疫苗']);
+        $grid->column('name', __('名称'));
+        $grid->column('introduction','简介');
+        $grid->column('price', __('价钱'));
+        $grid->column('remark', __('备注'));
+        $grid->column('supplier', __('厂家'));
+        $states = [
+            'on'  => ['value' => 1, 'text' => '启用', 'color' => 'success'],
+            'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
+        ];
+        $grid->column('states','状态')->switch($states);
+        $grid->column('created_at', __('创建时间'));
+        $grid->column('updated_at', __('更新时间'));
+
+        $grid->filter(function($filter){
+            /*
+                搜索:按关键字、ID搜索
+                筛选:类别筛选
+                导入、导出
+            */
+            // 在这里添加字段过滤器
+            $filter->column(1/2, function ($filter) {
+                $filter->equal('type', '类型')->select(Vaccines::$_post_type);
+            });
+
+        });
+
+        //按关键字查询
+        $grid->quickSearch(function ($model, $query) {
+            //$model->whereHas('Vaccines',function ($model) use ($query) {
+                $model->where('type', 'like', "%{$query}%")
+                    ->orWhere('name', 'like', "%{$query}%")
+                    ->orWhere('id',$query)
+                    ->orwhere('supplier','like',"%{$query}%")
+                    ->orwhere('remark','like',"{$query}");
+            //});
+        })->placeholder('请输入疫苗id/名称/厂家/备注');
+
+        $grid->export(function ($export) {
+            //文件名
+            $export->filename('测试');
+            //排除字段不用导出
+            $export->except(['created_at', 'updated_at']);
+            $export->originalValue(['states']);
+        });
+
+        $grid->tools(function (Grid\Tools $tools) {
+            $tools->append(new ImportAction());
+        });
+
+        return $grid;
+    }
+
+    /**
+     * Make a show builder.
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        $show = new Show(Vaccines::findOrFail($id));
+
+        $show->field('id', __('Id'));
+        $show->field('type', __('分类'))->using([1=>'Ⅰ类疫苗',2=>'Ⅱ类疫苗']);
+        $show->field('introduction','简介');
+        $show->field('price', __('价钱'));
+        $show->field('name', __('名称'));
+        $show->field('remark', __('备注'));
+        $show->field('supplier', __('厂家'));
+        $show->field('created_at', __('创建时间'));
+        $show->field('updated_at', __('更新时间'));
+
+        return $show;
+    }
+
+    /**
+     * Make a form builder.
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+        $form = new Form(new Vaccines());
+
+        $form->select('type', __('分类'))->options(Vaccines::$_post_type)->default('1');
+        $form->text('name', __('名称'))->rules('required|min:3|max:255',['required'=>'请填写名称','min'=>'名称不能少于3个字符!','max'=>'名称长度过长!']);
+        $form->text('introduction','简介')->rules('required',['require'=>'请填写疫苗简介!' ]);
+        $form->currency('price', __('价格'))->symbol('分');
+        $form->text('remark', __('备注'))->rules('required',['required'=>'请填写备注!']);;
+        $form->text('supplier', __('厂家'))->rules('required',['required'=>'请填写厂家!']);
+        $states = [
+            'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
+            'on'  => ['value' => 1, 'text' => '启用', 'color' => 'success'],
+        ];
+        $form->switch('states','状态')->states($states);
+
+        return $form;
+    }
+}

+ 7 - 0
app/Admin/routes.php

xqd
@@ -21,5 +21,12 @@ Route::group([
     $router->resource('banners', BannerController::class);
     $router->resource('servebanners', ServebannerController::class);
     $router->resource('articles', ArticleController::class);
+
+    $router->resource('vaccines', VaccinesController::class);
+    $router->resource('docters_management', DoctorManagementController::class);
+    $router->resource('users', UserListController::class);
+    $router->resource('user_patients', UserPatientsController::class);
+    $router->resource('user_orders', UserServiceController::class);
+    $router->resource('user_balance_logs', UserBalanceLogController::class);
 });
 

+ 34 - 0
app/Community/Controllers/ApiController.php

xqd xqd xqd
@@ -7,6 +7,8 @@ namespace App\Community\Controllers;
 use App\Http\Controllers\Controller;
 use App\Models\Docter;
 use App\Models\PatientRemark;
+use App\Models\Schedule;
+use App\Models\TimePeriod;
 use EasyWeChat\Factory;
 
 class ApiController extends Controller
@@ -41,6 +43,20 @@ class ApiController extends Controller
 //            oVxTzvgYlGktIDZXwfLMLQ01Tr5s
         ];
 
+        //3LUhWGlyiljxrT3Jh8orwQZ2LSHjfRs9SIHaB40O6q0
+        //开发者调用模版消息接口时需提供模版ID
+        //标题
+        //offer进度提醒
+        //行业
+        //IT科技 - 互联网|电子商务
+        //详细内容
+        //{{first.DATA}}
+        //人才姓名:{{keyword1.DATA}}
+        //联系方式:{{keyword2.DATA}}
+        //入职职位:{{keyword3.DATA}}
+        //入职公司:{{keyword4.DATA}}
+        //报到时间:{{keyword5.DATA}}
+        //{{remark.DATA}}
         $renyuan = ['oVxTzvhu4gs4RyCt4kJDRWOgsUXw','oVxTzvgYlGktIDZXwfLMLQ01Tr5s']; //周璐
         $renyuan = ['oVxTzvvTnnbjEE9jsalOYj4mtp6U','oVxTzvgu4XnI5F2aF7DcrbJIp5fI']; //简行
         $app = Factory::officialAccount($config );
@@ -49,4 +65,22 @@ class ApiController extends Controller
         dd($res);
     }
 
+
+
+    public function getComSchedule()
+    {
+
+        $time  = TimePeriod::get(['id','start_time_period','end_time_period']);
+        dd($time);
+        $data['community'] = [];
+        $data['docter'] = [];
+
+    }
+
+
+    public function setDocChedule()
+    {
+
+    }
+
 }

+ 133 - 0
app/Community/Controllers/DocterChatController.php

xqd
@@ -0,0 +1,133 @@
+<?php
+
+namespace App\Community\Controllers;
+
+use App\Admin\Actions\Community\Docter\Chat;
+use App\Admin\Actions\Community\Notice\sendNotice;
+use App\Models\Docter;
+use App\Models\Order;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Facades\Admin;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Layout\Content;
+use Encore\Admin\Show;
+use App\Models\User;
+
+class DocterChatController extends AdminController
+{
+    /**
+     * Title for current resource.
+     *
+     * @var string
+     */
+    protected $title = '咨询订单';
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $grid = new Grid(new Order());
+
+        $user = Admin::user();
+        $is_admin = Admin::user()->inRoles(['administrator','devloper']);
+        $grid->batchActions(function ($batch) {
+            $batch->add(new sendNotice());
+        });
+        if(!$is_admin){
+            $org_id = $user->org_id;
+            $docter_id = $user->docter_id;
+
+
+            $grid->model()->whereHas('orders',function ($query) use ($org_id,$docter_id) {
+                $where['organization_id']=$org_id;
+                if($docter_id){
+                    $where['docter_id'] = $docter_id;
+                }
+                $query->where($where);
+            });
+        }
+
+        $grid->column('order_sn', __('订单号'));
+        $grid->column('orderUser.nickname', __('咨询用户'));
+        $grid->column('orderPatient.name', __('咨询患者'));
+        $grid->column('orderPatient.birthday', __('患者年龄'))->display(function ($w){
+            return birthday_to_age($w);
+        });
+        $grid->actions(function ($actions){
+           $actions->add( new Chat());
+           $actions->disableDelete();
+           $actions->disableView();
+           $actions->disableEdit();
+        });
+        $grid->filter(function ($filter){
+            $filter->disableIdFilter();
+            $filter->equal('order_status','订单状态')->select(Order::$_order_status);
+        });
+        $grid->column('order_status', __('订单状态'))->using(Order::$_order_status);
+        $grid->column('created_at', __('下单时间'));
+
+        return $grid;
+    }
+
+    /**
+     * Make a show builder.
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        $show = new Show(Order::findOrFail($id));
+
+        $show->field('id', __('Id'));
+        $show->field('user_id', __('User id'));
+        $show->field('docter_id', __('Docter id'));
+        $show->field('patient_id', __('Patient id'));
+        $show->field('organization_id', __('Organization id'));
+        $show->field('order_sn', __('Order sn'));
+        $show->field('payment_type', __('Payment type'));
+        $show->field('product_type', __('Product type'));
+        $show->field('order_status', __('Order status'));
+        $show->field('payment_status', __('Payment status'));
+        $show->field('total_amount', __('Total amount'));
+        $show->field('payment_amount', __('Payment amount'));
+        $show->field('discount_amount', __('Discount amount'));
+        $show->field('payment_time', __('Payment time'));
+        $show->field('created_at', __('Created at'));
+        $show->field('updated_at', __('Updated at'));
+
+        return $show;
+    }
+
+    /**
+     * Make a form builder.
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+
+        $content = new Content();
+        $form = new Form();
+        $user = Admin::user();
+        $org_id = $user->org_id;
+        $docter_id = $user->docter_id;
+        $form->setView('chat');
+        return $form;
+    }
+
+    function chats(Content $content){
+        $content->title('儿保排班');
+        $content->description('医生用户可以接受接受预约');
+        $user = Admin::user();
+        $org_id = $user->org_id;
+        $docter_id = $user->docter_id;
+        $content->view('chat',['docter_id'=>$docter_id]);
+        return $content;
+        return view('chat', ['data' =>'foo']);
+    }
+}

+ 100 - 0
app/Community/Controllers/NoticeController.php

xqd
@@ -0,0 +1,100 @@
+<?php
+
+namespace App\Community\Controllers;
+
+use App\Models\Notice;
+use App\Models\User;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Layout\Content;
+use Encore\Admin\Show;
+
+class NoticeController extends AdminController
+{
+    /**
+     * Title for current resource.
+     *
+     * @var string
+     */
+    protected $title = '通告列表';
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $grid = new Grid(new Notice());
+
+        $grid->column('id', __('Id'));
+        $grid->column('org_id', __('Org id'));
+        $grid->column('title', __('Title'));
+        $grid->column('content', __('Content'));
+        $grid->column('remark', __('Remark'));
+        $grid->column('created_at', __('Created at'));
+        $grid->column('updated_at', __('Updated at'));
+
+        return $grid;
+    }
+
+    /**
+     * Make a show builder.
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        $show = new Show(Notice::findOrFail($id));
+
+        $show->field('id', __('Id'));
+        $show->field('org_id', __('Org id'));
+        $show->field('title', __('Title'));
+        $show->field('content', __('Content'));
+        $show->field('remark', __('Remark'));
+        $show->field('created_at', __('Created at'));
+        $show->field('updated_at', __('Updated at'));
+
+        return $show;
+    }
+
+    /**
+     * Make a form builder.
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+        $form = new Form(new Notice());
+
+        $form->number('org_id', __('Org id'));
+        $form->text('title', __('Title'));
+        $form->text('content', __('Content'));
+        $form->text('remark', __('Remark'));
+
+        return $form;
+    }
+
+    public function send(Content $content)
+    {
+
+        $content->title('fasong');
+        $content->header('群发邮件');
+        $form = new \Encore\Admin\Widgets\Form();
+        $form->action('send');
+        $form->method('post');
+        $user = User::distinct()->pluck('nickname','id');
+        $form->multipleSelect('user_ids','用户')->options($user);
+        $form->text('title','标题')->rules('required',['requried'=>'请输入标题'])->placeholder('请输入标题,最多50个字');
+        $form->textarea('content','内容')->rules('required')->placeholder('请输入标题,最多200个字');
+        $form->textarea('remark','备注')->placeholder('请输入标题,最多200个字');;
+
+        $content->row($form);
+        $dibu = '<div>这是底部</div>';
+        $content->row($dibu);
+        return $content;
+
+    }
+}

+ 5 - 2
app/Community/Controllers/StatController.php

xqd
@@ -14,16 +14,19 @@ class StatController extends  Controller
     //疫苗统计
     public function vaccine()
     {
-
       $data ['count'] = Vaccine::count();
-      $data['success'] = Order::where('order_status',1)->count();
+      $data['have'] = Vaccine::sum('state');
+      $data['today_spend'] = Order::where(['']);
       return $data;
 
     }
 
+
+
     //实时数据
     public function service()
     {
+        $data['success'] = Order::where(['order_status'=>1])->whereIn('product_type',[3,4,5])->where('created_at','>',date('Y-m-d H:i:s',time()))->count();
 
     }
 

+ 4 - 0
app/Community/routes.php

xqd
@@ -14,6 +14,10 @@ Route::resource('docter_org', DocterOrgController::class);
 Route::resource('docter_verifies', DocterVerifyController::class);
 Route::resource('cdms_roles', PermissionController::class);
 Route::resource('docter_account', DocterAccountController::class);
+Route::resource('notices', NoticeController::class);
+Route::get('send_notices', 'NoticeController@send');
+Route::resource('/docter_chats', DocterChatController::class);
+Route::get('/chats', 'DocterChatController@chats');
 
 //api
 Route::get('/api/getDocter', 'ApiController@getDocter');

+ 4 - 2
app/Helpers/functions.php

xqd xqd
@@ -124,6 +124,10 @@ if (!function_exists('build_sn')) {
 if (!function_exists('birthday_to_age')){
     function birthday_to_age($birthday)
     {
+        if($birthday==null)
+        {
+            return "0岁";
+        }
         list($year, $month, $day) = explode("-", $birthday);
         $year_diff = (date("Y") - $year) > 0 ? date("Y") - $year.'岁':'';
         $month_diff = (date("m") - $month) > 0 ? date("m") - $month.'个月':'';
@@ -131,11 +135,9 @@ if (!function_exists('birthday_to_age')){
         if ($day_diff < 0 || $month_diff < 0) {
             $year_diff--;
         }
-
         return $year_diff.$month_diff.$day_diff ;
     }
 }
-
 //计算经纬度两点之间距离(返回为米)
 if (!function_exists('get_distance')) {
     function get_distance($lat1, $lng1, $lat2, $lng2)

+ 59 - 0
app/Http/Controllers/ScheDuleController.php

xqd
@@ -0,0 +1,59 @@
+<?php
+
+
+namespace App\Http\Controllers;
+
+
+
+use App\Models\CommunitySchedule;
+use App\Models\Schedule;
+use App\Models\SchedulePeriod;
+use App\Models\TimePeriod;
+use Illuminate\Support\Facades\DB;
+
+class ScheDuleController  extends Controller
+{
+
+    public function getComSchedule()
+    {
+
+        $time  = TimePeriod::get(['id','start_time_period','end_time_period']);
+        $arrays = [1,3,4,12,16,10,20];
+        $org_id = 1;
+        $docter_id = 1;
+        $community = CommunitySchedule::where('org_id',$org_id)->orderBy('day_type')->pluck('times_id','day_type');
+        $time_array = [[],[],[],[],[],[],[]];
+        foreach ($community as $key => $ids){
+            $time = TimePeriod::whereIn('id',$ids)->get(['id','start_time_period','end_time_period']);
+            $time_info = [];
+            foreach ($time as $val){
+                if(!in_array(intval($val->id),$arrays)){
+                    $time_info[] = ['id'=>$val->id,'time'=>$val->start_time_period.'-'.$val->end_time_period];
+                }
+            }
+            $time_array[$key-1] = $time_info;
+        }
+        $data['community'] = $time_array;
+        $firstday = date('Y-m-d', strtotime("this week"));
+        $scd_id = Schedule::where(['schedule_date'=>$firstday,'docter_id'=>$docter_id,'organization_id'=>$org_id])->value('id');
+        $docter_schedule = $time_array;
+        if(!empty($scd_id)){
+            $sche_dule = SchedulePeriod::where('schedule_id',$scd_id)->get(['time_period_id','schedule_date'])->GroupBy('schedule_date')->toArray();
+            foreach ($sche_dule as $val){
+                if($val){
+                    $i = 0;
+                    $new_sche_dule[$i] = array_column($val,'time_period_id');
+                    $i++;
+                }
+            }
+        }
+        $data['docter'] = $docter_schedule;
+        return  (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
+    }
+
+
+    public function setDocChedule()
+    {
+
+    }
+}

+ 34 - 0
app/Imports/Vaccines/ImportMember.php

xqd
@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Imports\Vaccines;
+
+use App\Models\Vaccines;
+use Maatwebsite\Excel\Concerns\ToModel;
+use Maatwebsite\Excel\Concerns\WithStartRow;
+use Maatwebsite\Excel\Facades\Excel;
+
+class ImportMember implements ToModel
+{
+    /**
+    * @param array $row
+    *
+    * @return \Illuminate\Database\Eloquent\Model|null
+    */
+    public function model(array $row)
+    {
+        return new Vaccines([
+            //
+            'type' => $row[1],
+            'name' => $row[2],
+            'introduction' => $row[3],
+            'price' => $row[4],
+            'remark' => $row[5],
+            'supplier' => $row[6],
+            'states' => $row[7]
+        ]);
+    }
+    public function startRow(): int
+    {
+        return 2;
+    }
+}

+ 10 - 0
app/Models/Notice.php

xqd
@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class Notice extends Model
+{
+    //
+}

+ 5 - 1
app/Models/Order.php

xqd xqd
@@ -38,7 +38,7 @@ class Order extends BaseModel
 
     public function orderPack()
     {
-        return $this->hasMany(OrderPack::class);
+        return $this->hasOne(OrderPack::class);
     }
 
     public function orderNurse()
@@ -61,6 +61,10 @@ class Order extends BaseModel
         return $this->belongsTo(Organization::class);
     }
 
+    public function user()
+    {
+        return $this->belongsTo(User::class);
+    }
     //支付完成的处理方法
     public static function payCompletedHandle($order_id)
     {

+ 7 - 0
app/Models/OrderPack.php

xqd
@@ -14,4 +14,11 @@ class OrderPack extends BaseModel
     {
         return $this->belongsTo(Team::class);
     }
+    public function order()
+    {
+        return $this->belongsTo(Order::class);
+    }
+    public function user(){
+        return $this->belongsTo(User::class);
+    }
 }

+ 4 - 1
app/Models/Patient.php

xqd xqd
@@ -7,6 +7,7 @@
  */
 
 namespace App\Models;
+use App\Models\User;
 
 class Patient extends BaseModel
 {
@@ -38,8 +39,10 @@ class Patient extends BaseModel
                 $fill++;
             }
         }
-
         $text = round($fill/$total*100) . '%';
         return $text;
     }
+    public function users(){
+        return $this->hasOne(User::class,'id','user_id');
+    }
 }

+ 10 - 0
app/Models/User.php

xqd xqd
@@ -12,6 +12,13 @@ use DB;
 
 class User extends BaseModel
 {
+    protected $appends = ['age'];
+
+    //从生日转成年龄
+    public function getAgeAttribute()
+    {
+        return birthday_to_age($this->birthday);
+    }
     public function getCouponNumAttribute()
     {
         return UserCoupon::where('user_id', $this->id)->where('status', 1)->where('expire_time', '>', time())->count();
@@ -83,4 +90,7 @@ class User extends BaseModel
 
         return true;
     }
+    public function UserBalanceLog(){
+        return $this->hasMany(UserBalanceLog::class);
+    }
 }

+ 3 - 1
app/Models/UserBalanceLog.php

xqd
@@ -10,5 +10,7 @@ namespace App\Models;
 
 class UserBalanceLog extends BaseModel
 {
-
+    public function User(){
+        return $this->belongsTo(User::class);
+    }
 }

+ 17 - 0
app/Models/Vaccines.php

xqd
@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class Vaccines extends Model
+{
+    //
+    protected $table = 'vaccines';
+    public static $_post_type = [
+        1=>"Ⅰ类疫苗",
+        2=>"Ⅱ类疫苗"
+    ];
+
+    protected $fillable = ['type','price',"name","remark","supplier",'states'];
+}

+ 3 - 1
composer.json

xqd
@@ -14,7 +14,9 @@
         "laravel-admin-ext/multitenancy": "^2.1",
         "laravel/framework": "^6.0",
         "laravel/tinker": "^1.0",
-        "overtrue/wechat": "^4.0"
+        "overtrue/wechat": "^4.0",
+        "sven/artisan-view": "^3.3",
+        "maatwebsite/excel": "^3.1"
     },
     "require-dev": {
         "filp/whoops": "^2.0",

+ 643 - 2
composer.lock

xqd xqd xqd xqd xqd xqd xqd
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "6f09d3514cf131189db240b04e0ab14b",
+    "content-hash": "418bc0dda52cb02116262b36b99e5be4",
     "packages": [
         {
             "name": "dnoegel/php-xdg-base-dir",
@@ -1581,6 +1581,352 @@
             "description": "Mime-type detection for Flysystem",
             "time": "2020-09-21T18:10:53+00:00"
         },
+        {
+            "name": "maatwebsite/excel",
+            "version": "3.1.25",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Maatwebsite/Laravel-Excel.git",
+                "reference": "a3e56f1a60e49f21798fd242a3b3d2f4051eeda7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Maatwebsite/Laravel-Excel/zipball/a3e56f1a60e49f21798fd242a3b3d2f4051eeda7",
+                "reference": "a3e56f1a60e49f21798fd242a3b3d2f4051eeda7",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-json": "*",
+                "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0",
+                "php": "^7.0",
+                "phpoffice/phpspreadsheet": "^1.14"
+            },
+            "require-dev": {
+                "orchestra/testbench": "^6.0",
+                "predis/predis": "^1.1"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Maatwebsite\\Excel\\ExcelServiceProvider"
+                    ],
+                    "aliases": {
+                        "Excel": "Maatwebsite\\Excel\\Facades\\Excel"
+                    }
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Maatwebsite\\Excel\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Patrick Brouwers",
+                    "email": "patrick@maatwebsite.nl"
+                }
+            ],
+            "description": "Supercharged Excel exports and imports in Laravel",
+            "keywords": [
+                "PHPExcel",
+                "batch",
+                "csv",
+                "excel",
+                "export",
+                "import",
+                "laravel",
+                "php",
+                "phpspreadsheet"
+            ],
+            "support": {
+                "issues": "https://github.com/Maatwebsite/Laravel-Excel/issues",
+                "source": "https://github.com/Maatwebsite/Laravel-Excel/tree/3.1.25"
+            },
+            "funding": [
+                {
+                    "url": "https://laravel-excel.com/commercial-support",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/patrickbrouwers",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-11-13T10:37:36+00:00"
+        },
+        {
+            "name": "maennchen/zipstream-php",
+            "version": "2.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/maennchen/ZipStream-PHP.git",
+                "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/c4c5803cc1f93df3d2448478ef79394a5981cc58",
+                "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "myclabs/php-enum": "^1.5",
+                "php": ">= 7.1",
+                "psr/http-message": "^1.0",
+                "symfony/polyfill-mbstring": "^1.0"
+            },
+            "require-dev": {
+                "ext-zip": "*",
+                "guzzlehttp/guzzle": ">= 6.3",
+                "mikey179/vfsstream": "^1.6",
+                "phpunit/phpunit": ">= 7.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "ZipStream\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Paul Duncan",
+                    "email": "pabs@pablotron.org"
+                },
+                {
+                    "name": "Jonatan Männchen",
+                    "email": "jonatan@maennchen.ch"
+                },
+                {
+                    "name": "Jesse Donat",
+                    "email": "donatj@gmail.com"
+                },
+                {
+                    "name": "András Kolesár",
+                    "email": "kolesar@kolesar.hu"
+                }
+            ],
+            "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
+            "keywords": [
+                "stream",
+                "zip"
+            ],
+            "support": {
+                "issues": "https://github.com/maennchen/ZipStream-PHP/issues",
+                "source": "https://github.com/maennchen/ZipStream-PHP/tree/master"
+            },
+            "funding": [
+                {
+                    "url": "https://opencollective.com/zipstream",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2020-05-30T13:11:16+00:00"
+        },
+        {
+            "name": "markbaker/complex",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/MarkBaker/PHPComplex.git",
+                "reference": "9999f1432fae467bc93c53f357105b4c31bb994c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/9999f1432fae467bc93c53f357105b4c31bb994c",
+                "reference": "9999f1432fae467bc93c53f357105b4c31bb994c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+                "phpcompatibility/php-compatibility": "^9.0",
+                "phpdocumentor/phpdocumentor": "2.*",
+                "phploc/phploc": "^4.0",
+                "phpmd/phpmd": "2.*",
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3",
+                "sebastian/phpcpd": "^4.0",
+                "squizlabs/php_codesniffer": "^3.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Complex\\": "classes/src/"
+                },
+                "files": [
+                    "classes/src/functions/abs.php",
+                    "classes/src/functions/acos.php",
+                    "classes/src/functions/acosh.php",
+                    "classes/src/functions/acot.php",
+                    "classes/src/functions/acoth.php",
+                    "classes/src/functions/acsc.php",
+                    "classes/src/functions/acsch.php",
+                    "classes/src/functions/argument.php",
+                    "classes/src/functions/asec.php",
+                    "classes/src/functions/asech.php",
+                    "classes/src/functions/asin.php",
+                    "classes/src/functions/asinh.php",
+                    "classes/src/functions/atan.php",
+                    "classes/src/functions/atanh.php",
+                    "classes/src/functions/conjugate.php",
+                    "classes/src/functions/cos.php",
+                    "classes/src/functions/cosh.php",
+                    "classes/src/functions/cot.php",
+                    "classes/src/functions/coth.php",
+                    "classes/src/functions/csc.php",
+                    "classes/src/functions/csch.php",
+                    "classes/src/functions/exp.php",
+                    "classes/src/functions/inverse.php",
+                    "classes/src/functions/ln.php",
+                    "classes/src/functions/log2.php",
+                    "classes/src/functions/log10.php",
+                    "classes/src/functions/negative.php",
+                    "classes/src/functions/pow.php",
+                    "classes/src/functions/rho.php",
+                    "classes/src/functions/sec.php",
+                    "classes/src/functions/sech.php",
+                    "classes/src/functions/sin.php",
+                    "classes/src/functions/sinh.php",
+                    "classes/src/functions/sqrt.php",
+                    "classes/src/functions/tan.php",
+                    "classes/src/functions/tanh.php",
+                    "classes/src/functions/theta.php",
+                    "classes/src/operations/add.php",
+                    "classes/src/operations/subtract.php",
+                    "classes/src/operations/multiply.php",
+                    "classes/src/operations/divideby.php",
+                    "classes/src/operations/divideinto.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mark Baker",
+                    "email": "mark@lange.demon.co.uk"
+                }
+            ],
+            "description": "PHP Class for working with complex numbers",
+            "homepage": "https://github.com/MarkBaker/PHPComplex",
+            "keywords": [
+                "complex",
+                "mathematics"
+            ],
+            "support": {
+                "issues": "https://github.com/MarkBaker/PHPComplex/issues",
+                "source": "https://github.com/MarkBaker/PHPComplex/tree/PHP8"
+            },
+            "time": "2020-08-26T10:42:07+00:00"
+        },
+        {
+            "name": "markbaker/matrix",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/MarkBaker/PHPMatrix.git",
+                "reference": "9567d9c4c519fbe40de01dbd1e4469dbbb66f46a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/9567d9c4c519fbe40de01dbd1e4469dbbb66f46a",
+                "reference": "9567d9c4c519fbe40de01dbd1e4469dbbb66f46a",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+                "phpcompatibility/php-compatibility": "^9.0",
+                "phpdocumentor/phpdocumentor": "2.*",
+                "phploc/phploc": "^4.0",
+                "phpmd/phpmd": "2.*",
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3",
+                "sebastian/phpcpd": "^4.0",
+                "squizlabs/php_codesniffer": "^3.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Matrix\\": "classes/src/"
+                },
+                "files": [
+                    "classes/src/functions/adjoint.php",
+                    "classes/src/functions/antidiagonal.php",
+                    "classes/src/functions/cofactors.php",
+                    "classes/src/functions/determinant.php",
+                    "classes/src/functions/diagonal.php",
+                    "classes/src/functions/identity.php",
+                    "classes/src/functions/inverse.php",
+                    "classes/src/functions/minors.php",
+                    "classes/src/functions/trace.php",
+                    "classes/src/functions/transpose.php",
+                    "classes/src/operations/add.php",
+                    "classes/src/operations/directsum.php",
+                    "classes/src/operations/subtract.php",
+                    "classes/src/operations/multiply.php",
+                    "classes/src/operations/divideby.php",
+                    "classes/src/operations/divideinto.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mark Baker",
+                    "email": "mark@demon-angel.eu"
+                }
+            ],
+            "description": "PHP Class for working with matrices",
+            "homepage": "https://github.com/MarkBaker/PHPMatrix",
+            "keywords": [
+                "mathematics",
+                "matrix",
+                "vector"
+            ],
+            "support": {
+                "issues": "https://github.com/MarkBaker/PHPMatrix/issues",
+                "source": "https://github.com/MarkBaker/PHPMatrix/tree/PHP8"
+            },
+            "time": "2020-08-28T17:11:00+00:00"
+        },
         {
             "name": "monolog/monolog",
             "version": "2.1.1",
@@ -1668,6 +2014,72 @@
             ],
             "time": "2020-07-23T08:41:23+00:00"
         },
+        {
+            "name": "myclabs/php-enum",
+            "version": "1.7.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/php-enum.git",
+                "reference": "d178027d1e679832db9f38248fcc7200647dc2b7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/php-enum/zipball/d178027d1e679832db9f38248fcc7200647dc2b7",
+                "reference": "d178027d1e679832db9f38248fcc7200647dc2b7",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-json": "*",
+                "php": ">=7.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^7",
+                "squizlabs/php_codesniffer": "1.*",
+                "vimeo/psalm": "^3.8"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "MyCLabs\\Enum\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP Enum contributors",
+                    "homepage": "https://github.com/myclabs/php-enum/graphs/contributors"
+                }
+            ],
+            "description": "PHP Enum implementation",
+            "homepage": "http://github.com/myclabs/php-enum",
+            "keywords": [
+                "enum"
+            ],
+            "support": {
+                "issues": "https://github.com/myclabs/php-enum/issues",
+                "source": "https://github.com/myclabs/php-enum/tree/1.7.7"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/mnapoli",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-11-14T18:14:52+00:00"
+        },
         {
             "name": "nesbot/carbon",
             "version": "2.40.0",
@@ -2062,6 +2474,112 @@
             ],
             "time": "2018-07-02T15:55:56+00:00"
         },
+        {
+            "name": "phpoffice/phpspreadsheet",
+            "version": "1.15.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
+                "reference": "a8e8068b31b8119e1daa5b1eb5715a3a8ea8305f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/a8e8068b31b8119e1daa5b1eb5715a3a8ea8305f",
+                "reference": "a8e8068b31b8119e1daa5b1eb5715a3a8ea8305f",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-ctype": "*",
+                "ext-dom": "*",
+                "ext-fileinfo": "*",
+                "ext-gd": "*",
+                "ext-iconv": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-simplexml": "*",
+                "ext-xml": "*",
+                "ext-xmlreader": "*",
+                "ext-xmlwriter": "*",
+                "ext-zip": "*",
+                "ext-zlib": "*",
+                "maennchen/zipstream-php": "^2.1",
+                "markbaker/complex": "^1.5|^2.0",
+                "markbaker/matrix": "^1.2|^2.0",
+                "php": "^7.2|^8.0",
+                "psr/http-client": "^1.0",
+                "psr/http-factory": "^1.0",
+                "psr/simple-cache": "^1.0"
+            },
+            "require-dev": {
+                "dompdf/dompdf": "^0.8.5",
+                "friendsofphp/php-cs-fixer": "^2.16",
+                "jpgraph/jpgraph": "^4.0",
+                "mpdf/mpdf": "^8.0",
+                "phpcompatibility/php-compatibility": "^9.3",
+                "phpunit/phpunit": "^8.5|^9.3",
+                "squizlabs/php_codesniffer": "^3.5",
+                "tecnickcom/tcpdf": "^6.3"
+            },
+            "suggest": {
+                "dompdf/dompdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)",
+                "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
+                "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
+                "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Maarten Balliauw",
+                    "homepage": "https://blog.maartenballiauw.be"
+                },
+                {
+                    "name": "Mark Baker",
+                    "homepage": "https://markbakeruk.net"
+                },
+                {
+                    "name": "Franck Lefevre",
+                    "homepage": "https://rootslabs.net"
+                },
+                {
+                    "name": "Erik Tilt"
+                },
+                {
+                    "name": "Adrien Crivelli"
+                }
+            ],
+            "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
+            "homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
+            "keywords": [
+                "OpenXML",
+                "excel",
+                "gnumeric",
+                "ods",
+                "php",
+                "spreadsheet",
+                "xls",
+                "xlsx"
+            ],
+            "support": {
+                "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
+                "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.15.0"
+            },
+            "time": "2020-10-11T13:20:59+00:00"
+        },
         {
             "name": "phpoption/phpoption",
             "version": "1.7.5",
@@ -2341,6 +2859,67 @@
             ],
             "time": "2020-06-29T06:28:15+00:00"
         },
+        {
+            "name": "psr/http-factory",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-factory.git",
+                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.0.0",
+                "psr/http-message": "^1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interfaces for PSR-7 HTTP message factories",
+            "keywords": [
+                "factory",
+                "http",
+                "message",
+                "psr",
+                "psr-17",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/http-factory/tree/master"
+            },
+            "time": "2019-04-30T12:38:16+00:00"
+        },
         {
             "name": "psr/http-message",
             "version": "1.0.1",
@@ -2723,6 +3302,67 @@
             ],
             "time": "2020-02-21T04:36:14+00:00"
         },
+        {
+            "name": "sven/artisan-view",
+            "version": "v3.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/svenluijten/artisan-view.git",
+                "reference": "2c2cdbebf033ef068ae9bb719ba66e103c81e53c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/svenluijten/artisan-view/zipball/2c2cdbebf033ef068ae9bb719ba66e103c81e53c",
+                "reference": "2c2cdbebf033ef068ae9bb719ba66e103c81e53c",
+                "shasum": ""
+            },
+            "require": {
+                "laravel/framework": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+                "php": "^7.1"
+            },
+            "require-dev": {
+                "graham-campbell/testbench": "^4.0 || ^5.0",
+                "mockery/mockery": "^1.0",
+                "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Sven\\ArtisanView\\ServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Sven\\ArtisanView\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Sven Luijten",
+                    "email": "svenluijten1995@gmail.com",
+                    "homepage": "https://svenluijten.com"
+                }
+            ],
+            "description": "Manage your views in Laravel projects through artisan",
+            "keywords": [
+                "artisan",
+                "blade",
+                "laravel",
+                "templates",
+                "views"
+            ],
+            "support": {
+                "issues": "https://github.com/svenluijten/artisan-view/issues",
+                "source": "https://github.com/svenluijten/artisan-view/tree/3.0"
+            },
+            "time": "2020-09-07T07:19:03+00:00"
+        },
         {
             "name": "swiftmailer/swiftmailer",
             "version": "v6.2.3",
@@ -6986,5 +7626,6 @@
     "platform": {
         "php": "^7.2"
     },
-    "platform-dev": []
+    "platform-dev": [],
+    "plugin-api-version": "2.0.0"
 }

+ 36 - 0
database/migrations/2020_11_25_095040_add_field.php

xqd
@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddField extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        //
+        Schema::table('vaccines', function (Blueprint $table) {
+            $table->unsignedTinyInteger('states')->after('supplier');
+            $table->string('introduction')->after('name');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        //
+        Schema::table('vaccines', function (Blueprint $table) {
+            $table->dropColumn('states');
+            $table->dropColumn('introduction');
+        });
+    }
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
public/assets/css/app.1ef7a076.css


BIN=BIN
public/assets/img/close001.2835da4d.jpg


BIN=BIN
public/assets/img/close002.e38ad856.jpg


BIN=BIN
public/assets/img/close003.f9dff833.jpg


BIN=BIN
public/assets/img/face002.c9f88acd.jpg


BIN=BIN
public/assets/img/face003.5df92cea.jpg


BIN=BIN
public/assets/img/face004.4a1731fa.jpg


BIN=BIN
public/assets/img/face005.d5784a4b.jpg


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
public/assets/js/app.a700b62e.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
public/assets/js/app.a700b62e.js.map


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
public/assets/js/chunk-vendors.95e2f2c7.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
public/assets/js/chunk-vendors.95e2f2c7.js.map


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
public/cdms/assets/css/app.1ef7a076.css


BIN=BIN
public/cdms/assets/img/close001.2835da4d.jpg


BIN=BIN
public/cdms/assets/img/close002.e38ad856.jpg


BIN=BIN
public/cdms/assets/img/close003.f9dff833.jpg


BIN=BIN
public/cdms/assets/img/face002.c9f88acd.jpg


BIN=BIN
public/cdms/assets/img/face003.5df92cea.jpg


BIN=BIN
public/cdms/assets/img/face004.4a1731fa.jpg


BIN=BIN
public/cdms/assets/img/face005.d5784a4b.jpg


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
public/cdms/assets/js/app.a700b62e.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
public/cdms/assets/js/app.a700b62e.js.map


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
public/cdms/assets/js/chunk-vendors.95e2f2c7.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
public/cdms/assets/js/chunk-vendors.95e2f2c7.js.map


BIN=BIN
public/dist/favicon.ico


+ 1 - 0
public/dist/index.html

xqd
@@ -0,0 +1 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>mabaochat</title><link href="assets/css/app.1ef7a076.css" rel="preload" as="style"><link href="assets/js/app.a700b62e.js" rel="preload" as="script"><link href="assets/js/chunk-vendors.95e2f2c7.js" rel="preload" as="script"><link href="assets/css/app.1ef7a076.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but mabaochat doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="assets/js/chunk-vendors.95e2f2c7.js"></script><script src="assets/js/app.a700b62e.js"></script></body></html>

+ 1 - 0
resources/views/chat.blade.php

xqd
@@ -0,0 +1 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>mabaochat</title><link href="/assets/css/app.1ef7a076.css" rel="preload" as="style"><link href="/assets/js/app.a700b62e.js" rel="preload" as="script"><link href="/assets/js/chunk-vendors.95e2f2c7.js" rel="preload" as="script"><link href="/assets/css/app.1ef7a076.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but mabaochat doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/assets/js/chunk-vendors.95e2f2c7.js"></script><script src="/assets/js/app.a700b62e.js"></script></body></html>

+ 4 - 0
routes/web.php

xqd
@@ -14,3 +14,7 @@
 Route::get('/', function () {
     return view('welcome');
 });
+
+
+Route::get('/api/getComSchedule', 'ScheDuleController@getComSchedule');
+

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio