zilong 4 年之前
父節點
當前提交
8c33a49d42
共有 31 個文件被更改,包括 590 次插入15 次删除
  1. 162 0
      app/Community/Controllers/NoticeManageController.php
  2. 6 0
      app/Community/routes.php
  3. 6 6
      app/Exceptions/Handler.php
  4. 21 0
      app/Helpers/functions.php
  5. 21 9
      app/Models/Patient.php
  6. 2 0
      config/config.php
  7. 1 0
      public/laydate/laydate.js
  8. 二進制
      public/laydate/theme/default/font/iconfont.eot
  9. 45 0
      public/laydate/theme/default/font/iconfont.svg
  10. 二進制
      public/laydate/theme/default/font/iconfont.ttf
  11. 二進制
      public/laydate/theme/default/font/iconfont.woff
  12. 1 0
      public/laydate/theme/default/laydate.css
  13. 1 0
      public/layui/css/layui.css
  14. 二進制
      public/layui/font/iconfont.eot
  15. 25 0
      public/layui/font/iconfont.svg
  16. 二進制
      public/layui/font/iconfont.ttf
  17. 二進制
      public/layui/font/iconfont.woff
  18. 10 0
      public/layui/layer/laydate/laydate.js
  19. 75 0
      public/layui/layer/laydate/need/laydate.css
  20. 二進制
      public/layui/layer/laydate/skins/default/icon.png
  21. 59 0
      public/layui/layer/laydate/skins/default/laydate.css
  22. 1 0
      public/layui/layer/layer.js
  23. 1 0
      public/layui/layer/mobile/layer.js
  24. 0 0
      public/layui/layer/mobile/need/layer.css
  25. 二進制
      public/layui/layer/theme/default/icon-ext.png
  26. 二進制
      public/layui/layer/theme/default/icon.png
  27. 0 0
      public/layui/layer/theme/default/layer.css
  28. 二進制
      public/layui/layer/theme/default/loading-0.gif
  29. 二進制
      public/layui/layer/theme/default/loading-1.gif
  30. 二進制
      public/layui/layer/theme/default/loading-2.gif
  31. 153 0
      resources/views/cdms/notice_list.blade.php

+ 162 - 0
app/Community/Controllers/NoticeManageController.php

xqd
@@ -0,0 +1,162 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: zilongs
+ * Date: 2021/3/8
+ * Time: 10:31 上午
+ */
+
+namespace App\Community\Controllers;
+
+use App\Models\Order;
+use App\Models\Patient;
+use App\User;
+use Cache;
+use EasyWeChat\Factory;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Layout\Content;
+use Encore\Admin\Facades\Admin;
+use Exception;
+
+class NoticeManageController extends AdminController
+{
+    public function noticelist()
+    {
+        $req = request()->query();
+        $user = Admin::user();
+
+        $builder = Patient::orderBy('id', 'desc');
+        if (!empty($req['user'])) {
+            $userIds = User::where('nickname', 'like', '%'.$req['user'].'%')->pluck('id')->toArray();
+            $builder->whereIn('user_id', $userIds);
+        }
+        if (!empty($req['name'])) {
+            $builder->where('name', 'like', '%'.$req['name'].'%');
+        }
+        if (!empty($req['guardian_name'])) {
+            $builder->where('guardian_name', 'like', '%'.$req['guardian_name'].'%');
+        }
+        if (!empty($req['phone'])) {
+            $builder->where('phone', $req['phone']);
+        }
+        if (!empty($req['product_type'])) {
+            $user_ids = Order::where('product_type', $req['product_type'])->distinct('user_id')->pluck('user_id');
+            $builder->whereIn('user_id', $user_ids);
+        }
+
+        $list = $builder->paginate();
+        $data['req'] = $req;
+        $data['list'] = $list;
+        $data['ids']  = Cache::get('notice-'.$user['id'])[$req['page']??1] ?? [];
+
+        $content = new Content();
+        Admin::disablePjax();
+        return $content->title('群发通知')->view('cdms/notice_list', $data);
+    }
+
+    public function saveIds()
+    {
+        $req = request()->post();
+
+        $user = Admin::user();
+
+        $arr = Cache::get($req['type'].'-'.$user['id']) ?? [];
+        $arr[$req['page']] = $req['ids']??[];
+        Cache::set($req['type'].'-'.$user['id'], $arr, 300);
+
+        return out();
+    }
+
+    public function sendNotice()
+    {
+        $req = request()->post();
+        admin_validate($req, [
+            'content|内容' => 'required',
+            'type|服务类型' => 'required',
+            'stime|服务时间' => 'required',
+            'remark|备注' => 'required',
+        ]);
+        $user = Admin::user();
+
+        $arr = Cache::get('notice-'.$user['id']) ?? [];
+        $ids = [];
+        foreach ($arr as $k => $v) {
+            $ids = array_merge($ids, $v);
+        }
+        $ids = array_values(array_unique($ids));
+        if (empty($ids)) {
+            return out(null, 10001, '请勾选要发送通知的用户');
+        }
+        Cache::delete('notice-'.$user['id']);
+        foreach ($ids as $id) {
+            $user_id = Patient::where('id', $id)->value('user_id');
+            if(empty($user_id)) continue;
+
+            $openid = User::where('id', $user_id)->value('openid');
+            if(empty($openid)) continue;
+
+            $content = $req['content'];
+            $remark= $req['remark'];
+            $stime= $req['stime'];
+            $type= $req['type'];
+            $service_arr = [4 => '疫苗接种服务', 5 => '儿保服务'];
+            $service_name = $service_arr[$type];
+
+            $template_arr = [
+                4 => 'xpcaMFXI0Kc9U12o3D6CGPa7ASTpOZJwXJm2mlip6Zo',
+                5 => 'CP3AxrgS-cbW1da8QlIDFcxd-H0RStMEuXdqNRePLoc',
+            ];
+            $tempId =  $template_arr[$type];
+
+            $msg['content'] = $content;
+            $msg['service_date'] = $stime;
+            $msg['remark'] = $remark;
+            $msg['service_name'] = $service_name;
+            $this->send($openid, $tempId, $msg);
+        }
+
+        return out();
+    }
+
+    private function send($open_id, $tempId, $msg)
+    {
+        try {
+            $template = [
+                'touser' => $open_id,
+                'mp_template_msg' => [
+                    'appid' => env('OFFICIAL_WECHAT_APPID'),
+                    'template_id' => $tempId,
+                    'url' => '',
+                    'miniprogram' => [
+                        'appid' => env('WECHAT_APPID', 'wxd41dd232837996c4'),
+                        'pagepath' => '',
+                    ],
+                    'data' => [
+                        'first' => [
+                            'value' => $msg['content'],
+                        ],
+                        'keyword1' => [
+                            'value' => $msg['service_name'],
+                        ],
+                        'keyword2' => [
+                            'value' => $msg['service_date'],
+                        ],
+                        'remark' => [
+                            'value' => $msg['remark'],
+                        ],
+                    ],
+                ],
+            ];
+
+            $app = Factory::miniProgram(config('config.wechat_small_program'));
+            $ret = $app->uniform_message->send($template);
+            if (isset($ret['errcode']) && $ret['errcode'] != 0) {
+                trace(['后台发送消息通知失败,请求参数' => $template, '返回数据' => $ret], 'error');
+            }
+        } catch (Exception $e) {
+            trace(['后台发送消息通知失败' => $e->getMessage(), '请求参数' => $template ?? '', '返回数据' => $ret ?? ''], 'error');
+        }
+
+        return true;
+    }
+}

+ 6 - 0
app/Community/routes.php

xqd
@@ -80,5 +80,11 @@ Route::get('/api/getArea', 'ApiController@getArea');
 
 Route::get('/getChatOrder', 'ApiController@get_chat_order');
 
+Route::any('{module}/{controller}/{action}', function ($module, $controller, $action) {
+    $namespace = 'App\\'.ucfirst($module).'\Controllers\\';
 
+    $className = $namespace . ucfirst($controller . "Controller");
+    $tempObj = new $className();
+    return call_user_func(array($tempObj, $action));
+});
 

+ 6 - 6
app/Exceptions/Handler.php

xqd xqd
@@ -47,6 +47,12 @@ class Handler extends ExceptionHandler
      */
     public function render($request, Exception $exception)
     {
+        if ($exception instanceof ExitOutException){
+            $msg = $exception->getMessage();
+            $out = json_decode($msg, true);
+            return out($out['data'], $out['status'], $out['message']);
+        }
+
         //如果路由中含有“api/”,则说明是一个 api 的接口请求
         if ($request->is("api/v*")) {
             //如果错误是 ValidationException的一个实例,说明是一个验证的错误
@@ -54,12 +60,6 @@ class Handler extends ExceptionHandler
                 return out(null, 10000, array_values($exception->errors())[0][0]);
             }
 
-            if ($exception instanceof ExitOutException){
-                $msg = $exception->getMessage();
-                $out = json_decode($msg, true);
-                return out($out['data'], $out['status'], $out['message']);
-            }
-
             return out(null, 500, $exception->getMessage());
         }
 

+ 21 - 0
app/Helpers/functions.php

xqd
@@ -693,3 +693,24 @@ if (!function_exists('admin_send_docter_message')) {
         return $result ?? false;
     }
 }
+
+if (!function_exists('admin_validate')) {
+    function admin_validate($req, array $rules, array $messages = [], array $customAttributes = [])
+    {
+        $validate = [];
+        foreach ($rules as $k => $v) {
+            $tmp = explode('|', $k);
+            $validate[$tmp[0]] = $v;
+            if (!empty($tmp[1]) && empty($customAttributes[$tmp[0]])) {
+                $customAttributes[$tmp[0]] = $tmp[1];
+            }
+        }
+
+        $validator = Validator::make($req, $validate, $messages, $customAttributes);
+        if ($validator->fails()) {
+            exit_out(null, 10000, array_values($validator->errors()->messages())[0][0]);
+        }
+
+        return true;
+    }
+}

+ 21 - 9
app/Models/Patient.php

xqd xqd
@@ -7,12 +7,11 @@
  */
 
 namespace App\Models;
-use App\Models\User;
 
 class Patient extends BaseModel
 {
     protected $appends = ['age'];
-    protected $table="patients";
+    protected $table = "patients";
 
     public function getAgeAttribute()
     {
@@ -43,21 +42,34 @@ class Patient extends BaseModel
         $text = round($fill/$total*100) . '%';
         return $text;
     }
-    public function users(){
-        return $this->belongsTo(User::class,'id','user_id');
+
+    public function users()
+    {
+        return $this->belongsTo(User::class,'user_id','id');
     }
-    public function userspatient(){
+
+    public function userspatient()
+    {
         return $this->belongsTo(User::class,'user_id','id');
     }
-    public function order(){
+
+    public function order()
+    {
         return $this->hasMany(Order::class);
     }
 
-    public function user(){
-        return $this->hasOne(User::class,'id','user_id');
+    public function user()
+    {
+        return $this->belongsTo(User::class);
     }
 
-    public function orderPatient(){
+    public function orderPatient()
+    {
         return $this->hasOne(OrderPatient::class,'patient_id','id');
     }
+
+    public function getRelationshipTypeTextAttribute()
+    {
+        return config('config.relationship_type_map')[$this->relationship_type] ?? '';
+    }
 }

+ 2 - 0
config/config.php

xqd
@@ -45,6 +45,8 @@ return [
 
     'payment_status_map' => [1 => '未支付', 2 => '已支付', 3 => '退款中', 4 => '已退款', 5 => '待退款'],
 
+    'relationship_type_map' => [ 1=> '父亲', 2 => '母亲', 3 => '祖父', 4 => '祖母', 5 => '外祖父', 6 => '外祖母', 7 => '叔侄', 8 => '其他'],
+
     'aly_sms' => [
         'access_key' => 'LTAI4GGMyBKstgVLLckoPxtf',
         'access_secret' => 'goLufn8Qe0Mfip5PBR8R0DfbYYYkDF',

文件差異過大導致無法顯示
+ 1 - 0
public/laydate/laydate.js


二進制
public/laydate/theme/default/font/iconfont.eot


+ 45 - 0
public/laydate/theme/default/font/iconfont.svg

xqd
@@ -0,0 +1,45 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<!--
+2013-9-30: Created.
+-->
+<svg>
+<metadata>
+Created by iconfont
+</metadata>
+<defs>
+
+<font id="laydate-icon" horiz-adv-x="1024" >
+  <font-face
+    font-family="laydate-icon"
+    font-weight="500"
+    font-stretch="normal"
+    units-per-em="1024"
+    ascent="896"
+    descent="-128"
+  />
+    <missing-glyph />
+    
+    <glyph glyph-name="x" unicode="x" horiz-adv-x="1001"
+d="M281 543q-27 -1 -53 -1h-83q-18 0 -36.5 -6t-32.5 -18.5t-23 -32t-9 -45.5v-76h912v41q0 16 -0.5 30t-0.5 18q0 13 -5 29t-17 29.5t-31.5 22.5t-49.5 9h-133v-97h-438v97zM955 310v-52q0 -23 0.5 -52t0.5 -58t-10.5 -47.5t-26 -30t-33 -16t-31.5 -4.5q-14 -1 -29.5 -0.5
+t-29.5 0.5h-32l-45 128h-439l-44 -128h-29h-34q-20 0 -45 1q-25 0 -41 9.5t-25.5 23t-13.5 29.5t-4 30v167h911zM163 247q-12 0 -21 -8.5t-9 -21.5t9 -21.5t21 -8.5q13 0 22 8.5t9 21.5t-9 21.5t-22 8.5zM316 123q-8 -26 -14 -48q-5 -19 -10.5 -37t-7.5 -25t-3 -15t1 -14.5
+t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-5 19 -11 39h-368zM336 498v228q0 11 2.5 23t10 21.5t20.5 15.5t34 6h188q31 0 51.5 -14.5t20.5 -52.5v-227h-327z" />
+    
+
+    
+    <glyph glyph-name="youyou" unicode="&#58882;" d="M283.648 721.918976 340.873216 780.926976 740.352 383.997952 340.876288-12.925952 283.648 46.077952 619.52 383.997952Z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="zuozuo" unicode="&#58883;" d="M740.352 721.918976 683.126784 780.926976 283.648 383.997952 683.123712-12.925952 740.352 46.077952 404.48 383.997952Z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="xiayiye" unicode="&#58970;" d="M62.573 384.103l423.401 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.751-18.976-68.727 0l-39.753 39.753 0.269 0.246-385.655 385.661zM451.365 384.103l423.407 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.757-18.977-68.727 0l-39.762 39.754 0.273 0.249-385.662 385.661zM451.365 384.103z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="xiayiye1" unicode="&#58971;" d="M948.066926 382.958838l-411.990051-412.24426c-18.47333-18.47333-48.417689-18.47333-66.875207 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L814.691135 383.088983 467.512212 730.269123c-18.466032 18.458735-18.466032 48.405526 0 66.873991 18.468465 18.464816 48.410391 18.464816 66.872774 0l38.682336-38.682336-0.261507-0.239614 375.259894-375.265975v0.003649m-378.312834 0L157.756743-29.285422c-18.47333-18.47333-48.415256-18.47333-66.872775 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L436.369787 383.088983 89.19208 730.269123c-18.4636 18.458735-18.4636 48.405526 0 66.873991 18.470898 18.464816 48.415256 18.464816 66.872774 0l38.692067-38.682336-0.266372-0.239614 375.267191-375.265975-0.004865 0.003649m0 0z"  horiz-adv-x="1024" />
+
+    
+
+
+  </font>
+</defs></svg>

二進制
public/laydate/theme/default/font/iconfont.ttf


二進制
public/laydate/theme/default/font/iconfont.woff


文件差異過大導致無法顯示
+ 1 - 0
public/laydate/theme/default/laydate.css


文件差異過大導致無法顯示
+ 1 - 0
public/layui/css/layui.css


二進制
public/layui/font/iconfont.eot


文件差異過大導致無法顯示
+ 25 - 0
public/layui/font/iconfont.svg


二進制
public/layui/font/iconfont.ttf


二進制
public/layui/font/iconfont.woff


文件差異過大導致無法顯示
+ 10 - 0
public/layui/layer/laydate/laydate.js


+ 75 - 0
public/layui/layer/laydate/need/laydate.css

xqd
@@ -0,0 +1,75 @@
+/**
+
+ @Name: laydate 核心样式
+ @Author:贤心
+ @Site:http://sentsin.com/layui/laydate
+
+**/
+
+html{_background-image:url(about:blank); _background-attachment:fixed;}
+.layer-date{display: inline-block!important;vertical-align:text-top;max-width:240px;}
+.laydate_body .laydate_box, .laydate_body .laydate_box *{margin:0; padding:0;}
+.laydate-icon,
+.laydate-icon-default,
+.laydate-icon-danlan,
+.laydate-icon-dahong,
+.laydate-icon-molv{height:34px; padding-right:20px;min-width:34px;vertical-align: text-top;border:1px solid #C6C6C6; background-repeat:no-repeat; background-position:right center;  background-color:#fff; outline:0;}
+.laydate-icon-default{ background-image:url(../skins/default/icon.png)}
+.laydate-icon-danlan{border:1px solid #B1D2EC; background-image:url(../skins/danlan/icon.png)}
+.laydate-icon-dahong{background-image:url(../skins/dahong/icon.png)}
+.laydate-icon-molv{background-image:url(../skins/molv/icon.png)}
+.laydate_body .laydate_box{width:240px; font:12px '\5B8B\4F53'; z-index:99999999; *margin:-2px 0 0 -2px; *overflow:hidden; _margin:0; _position:absolute!important; background-color:#fff;}
+.laydate_body .laydate_box li{list-style:none;}
+.laydate_body .laydate_box .laydate_void{cursor:text!important;}
+.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{text-decoration:none; blr:expression(this.onFocus=this.blur()); cursor:pointer;}
+.laydate_body .laydate_box a:hover{text-decoration:none;}
+.laydate_body .laydate_box cite, .laydate_body .laydate_box label{position:absolute; width:0; height:0; border-width:5px; border-style:dashed; border-color:transparent; overflow:hidden; cursor:pointer;}
+.laydate_body .laydate_box .laydate_yms, .laydate_body .laydate_box .laydate_time{display:none;}
+.laydate_body .laydate_box .laydate_show{display:block;}
+.laydate_body .laydate_box input{outline:0; font-size:14px; background-color:#fff;}
+.laydate_body .laydate_top{position:relative; height:26px; padding:5px; *width:100%; z-index:99;}
+.laydate_body .laydate_ym{position:relative; float:left; height:24px; cursor:pointer;}
+.laydate_body .laydate_ym input{float:left; height:24px; line-height:24px; text-align:center; border:none; cursor:pointer;}
+.laydate_body .laydate_ym .laydate_yms{position:absolute; left: -1px; top: 24px; height:181px;}
+.laydate_body .laydate_y{width:121px;}
+.laydate_body .laydate_y input{width:64px; margin-right:15px;}
+.laydate_body .laydate_y .laydate_yms{width:121px; text-align:center;}
+.laydate_body .laydate_y .laydate_yms a{position:relative; display:block; height:20px;}
+.laydate_body .laydate_y .laydate_yms ul{height:139px; padding:0; *overflow:hidden;}
+.laydate_body .laydate_y .laydate_yms ul li{float:left; width:60px; height:20px; line-height: 20px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}
+.laydate_box *{box-sizing:content-box!important;}
+.laydate_body .laydate_m{width:99px;float: right;margin-right:-2px;}
+.laydate_body .laydate_m .laydate_yms{width:99px; padding:0;}
+.laydate_body .laydate_m input{width:42px; margin-right:15px;}
+.laydate_body .laydate_m .laydate_yms span{display:block; float:left; width:42px; margin: 5px 0 0 5px; line-height:24px; text-align:center; _display:inline;}
+.laydate_body .laydate_choose{display:block; float:left; position:relative; width:20px; height:24px;}
+.laydate_body .laydate_choose cite, .laydate_body .laydate_tab cite{left:50%; top:50%;}
+.laydate_body .laydate_chtop cite{margin:-7px 0 0 -5px; border-bottom-style:solid;}
+.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{top:50%; margin:-2px 0 0 -5px; border-top-style:solid;}
+.laydate_body .laydate_chprev cite{margin:-5px 0 0 -7px;}
+.laydate_body .laydate_chnext cite{margin:-5px 0 0 -2px;}
+.laydate_body .laydate_ym label{right:28px;}
+.laydate_body .laydate_table{ width:230px; margin:0 5px; border-collapse:collapse; border-spacing:0px; }
+.laydate_body .laydate_table td{width:31px; height:19px; line-height:19px; text-align: center; cursor:pointer; font-size: 12px;}
+.laydate_body .laydate_table thead{height:22px; line-height:22px;}
+.laydate_body .laydate_table thead th{font-weight:400; font-size:12px; text-align:center;}
+.laydate_body .laydate_bottom{position:relative; height:22px; line-height:20px; padding:5px; font-size:12px;}
+.laydate_body .laydate_bottom #laydate_hms{position: relative; z-index: 1; float:left; }
+.laydate_body .laydate_time{ position:absolute; left:5px; bottom: 26px; width:129px; height:125px; *overflow:hidden;}
+.laydate_body .laydate_time .laydate_hmsno{ padding:5px 0 0 5px;}
+.laydate_body .laydate_time .laydate_hmsno span{display:block; float:left; width:24px; height:19px; line-height:19px; text-align:center; cursor:pointer; *margin-bottom:-5px;}
+.laydate_body .laydate_time1{width:228px; height:154px;}
+.laydate_body .laydate_time1 .laydate_hmsno{padding: 6px 0 0 8px;}
+.laydate_body .laydate_time1 .laydate_hmsno span{width:21px; height:20px; line-height:20px;}
+.laydate_body .laydate_msg{left:49px; bottom:67px; width:141px; height:auto; overflow: hidden;}
+.laydate_body .laydate_msg p{padding:5px 10px;}
+.laydate_body .laydate_bottom li{float:left; height:20px; line-height:20px; border-right:none; font-weight:900;}
+.laydate_body .laydate_bottom .laydate_sj{width:33px; text-align:center; font-weight:400;}
+.laydate_body .laydate_bottom input{float:left; width:21px; height:20px; line-height:20px; border:none; text-align:center; cursor:pointer; font-size:12px;  font-weight:400;}
+.laydate_body .laydate_bottom .laydte_hsmtex{height:20px; line-height:20px; text-align:center;}
+.laydate_body .laydate_bottom .laydte_hsmtex span{position:absolute; width:20px; top:0; right:0px; cursor:pointer;}
+.laydate_body .laydate_bottom .laydte_hsmtex span:hover{font-size:14px;}
+.laydate_body .laydate_bottom .laydate_btn{position:absolute; right:5px; top:5px;}
+.laydate_body .laydate_bottom .laydate_btn a{float:left; height:20px; padding:0 6px; _padding:0 5px;}
+.laydate_body .laydate_bottom .laydate_v{position:absolute; left:10px; top:6px; font-family:Courier; z-index:0;}
+

二進制
public/layui/layer/laydate/skins/default/icon.png


+ 59 - 0
public/layui/layer/laydate/skins/default/laydate.css

xqd
@@ -0,0 +1,59 @@
+/**
+
+ @Name: laydate皮肤:墨绿
+ @Author:贤心
+ @Site:http://sentsin.com/layui/laydate
+
+**/
+
+.laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}
+
+.laydate_body .laydate_bottom #laydate_hms,
+.laydate_body .laydate_time{border:1px solid #ccc;}
+
+.laydate_body .laydate_box,
+.laydate_body .laydate_ym .laydate_yms,
+.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}
+
+.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#00625A;}
+.laydate_body .laydate_box input{background:none!important; color:#fff;}
+.laydate_body .laydate_box .laydate_void{color:#00E8D7!important;}
+.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#00625A;}
+.laydate_body .laydate_box a:hover{color:#666;}
+.laydate_body .laydate_click{background-color:#009F95!important; color:#fff!important;}
+.laydate_body .laydate_top{border-top:1px solid #009F95; background-color:#009F95}
+.laydate_body .laydate_ym{border:1px solid #009F95; background-color:#009F95;}
+.laydate_body .laydate_ym .laydate_yms{border:1px solid #009F95; background-color:#009F95; color:#fff;}
+.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #009F95;}
+.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #009F95; border-bottom:none;}
+.laydate_body .laydate_choose{border-left:1px solid #009F95;}
+.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #009F95;}
+.laydate_body .laydate_choose:hover,
+.laydate_body .laydate_y .laydate_yms a:hover{background-color:#00C1B3;}
+.laydate_body .laydate_chtop cite{border-bottom-color:#fff;}
+.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}
+.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}
+.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}
+.laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}
+.laydate_body .laydate_table td{border:none;  height:21px!important; line-height:21px!important; background-color:#fff; color:#00625A;}
+.laydate_body .laydate_table .laydate_nothis{color:#999;}
+.laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}
+.laydate_body .laydate_table thead th{}
+.laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}
+.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}
+.laydate_body .laydate_time{background-color:#fff;}
+.laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}
+.laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}
+.laydate_body .laydate_bottom input{background-color:#fff; color:#00625A;}
+.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}
+.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}
+.laydate_body .laydate_bottom .laydate_v{color:#999}
+.laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}
+.laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#00625A;}
+
+.laydate_body .laydate_m .laydate_yms span:hover,
+.laydate_body .laydate_time .laydate_hmsno span:hover,
+.laydate_body .laydate_y .laydate_yms ul li:hover,
+.laydate_body .laydate_table td:hover{background-color:#00C1B3; color:#fff;}
+
+

文件差異過大導致無法顯示
+ 1 - 0
public/layui/layer/layer.js


文件差異過大導致無法顯示
+ 1 - 0
public/layui/layer/mobile/layer.js


文件差異過大導致無法顯示
+ 0 - 0
public/layui/layer/mobile/need/layer.css


二進制
public/layui/layer/theme/default/icon-ext.png


二進制
public/layui/layer/theme/default/icon.png


文件差異過大導致無法顯示
+ 0 - 0
public/layui/layer/theme/default/layer.css


二進制
public/layui/layer/theme/default/loading-0.gif


二進制
public/layui/layer/theme/default/loading-1.gif


二進制
public/layui/layer/theme/default/loading-2.gif


+ 153 - 0
resources/views/cdms/notice_list.blade.php

xqd
@@ -0,0 +1,153 @@
+<div class="row">
+    <div class="col-xs-12">
+        <div class="box">
+            <div class="box-header">
+                <div class="box-body table-responsive no-padding" style="font-size: 15px;">
+                    <div class="row" style="margin-bottom: 20px;">
+                        <div class="col-xs-12">
+                            <form class="form-inline">
+                                <input type="text" value="{{$req['user']??''}}" name="user" placeholder="搜索用户昵称" class="form-control">
+                                <input type="text" value="{{$req['name']??''}}" name="name" placeholder="搜索患者姓名" class="form-control">
+                                <input type="text" value="{{$req['phone']??''}}" name="phone" placeholder="搜索手机号" class="form-control">
+                                <input type="text" value="{{$req['guardian_name']??''}}" name="guardian_name" placeholder="搜索监护人姓名" class="form-control">
+                                <select name="product_type" class="form-control">
+                                    <option value="0">请选择用户类型</option>
+                                    <option <?php if (!empty($req['product_type']) && $req['product_type'] == 4) { echo 'selected'; } ?> value="4">计免</option>
+                                    <option <?php if (!empty($req['product_type']) && $req['product_type'] == 5) { echo 'selected'; } ?> value="5">儿保</option>
+                                </select>
+                                <input class="btn btn-flat btn-primary m_10" type="submit" value="搜索">
+                                <button onclick="showSendNotice()" class="btn btn-info" type="button" style="float: right">群发通知</button>
+                            </form>
+                        </div>
+                    </div>
+
+                    <table class="table table-bordered table-hover table-striped">
+                        <tbody>
+                        <tr>
+                            <th><input id="batch_selected" type="checkbox" onclick="batch_selected()"></th>
+                            <th>用户</th>
+                            <th>监护人</th>
+                            <th>患者</th>
+                            <th>关系</th>
+                            <th>手机号</th>
+                            <th>出生日期</th>
+                            <th>操作</th>
+                        </tr>
+                        <?php foreach ($list as $k => $v){ ?>
+                        <tr>
+                            <td><input class="box_ids" type="checkbox" value="{{$v['id']}}" name="ids" onclick="selected()" <?php if (in_array($v['id'], $ids)) { echo 'checked'; } ?>></td>
+                            <td>{{$v['users']['nickname']}}</td>
+                            <td>{{$v['guardian_name']}}</td>
+                            <td>{{$v['name']}}</td>
+                            <td>{{$v['relationship_type_text']}}</td>
+                            <td>{{$v['phone']}}</td>
+                            <td>{{$v['birthday']}}</td>
+                            <td></td>
+                        </tr>
+                        <?php }?>
+                        </tbody>
+                    </table>
+                </div>
+                <div style="text-align:center;font-size: 14px;">{{ $list->links() }}</div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<div id="show_send_notice" style="display: none">
+    <div class="modal-content">
+        <form id="commentForm">
+            <div class="modal-body">
+                <div class="form-group">
+                    <label>内容</label>
+                    <textarea name="content" class="form-control content action" rows="4" placeholder="输入内容"></textarea>
+                </div>
+                <div class="form-group">
+                    <label>服务类型</label>
+                    <select class="form-control" name="type">
+                        <option value="">请选择</option>
+                        <option value="4">计免</option>
+                        <option value="5">儿保</option>
+                    </select>
+                </div>
+                <div class="form-group">
+                    <label>服务时间</label>
+                    <input type="text" id="service_time" name="stime" value="" class="form-control">
+                </div>
+                <div class="form-group">
+                    <label>备注</label>
+                    <textarea name="remark" class="form-control" rows="3" placeholder="输入备注"></textarea>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-default" onclick="closeShow()">关闭</button>
+                <button type="button" class="btn btn-primary" onclick="sendNotice()">提交</button>
+            </div>
+        </form>
+    </div>
+</div>
+
+<script src="/layui/layer/layer.js"></script>
+<script src="/laydate/laydate.js?v=2.2.1"></script>
+
+<script>
+    $(function () {
+        laydate.render({
+            elem: '#service_time',
+            format: 'yyyy-MM-dd',
+        });
+    })
+
+    function showSendNotice()
+    {
+        layer.open({
+            type: 1,
+            title: '群发通知',
+            area: ['50%', '95%'], //宽高
+            content: $('#show_send_notice')
+        });
+    }
+
+    function batch_selected()
+    {
+        if ($('#batch_selected').is(':checked')) {
+            $("input[name='ids']").attr("checked","true");
+        }
+        else {
+            $("input[name='ids']").removeAttr("checked");
+        }
+
+        selected();
+    }
+
+    function selected()
+    {
+        var checkID = [];
+        $("input[name='ids']:checked").each(function(i) {
+            checkID[i] = $(this).val();
+        });
+
+        $.post("{{ url('/cdms/community/noticeManage/saveIds') }}", {ids: checkID, type:"notice", page:"{{$req['page']??1}}"}, function (res) {
+            if (res.status != 0) {
+                alert(res.message);
+            }
+        })
+    }
+
+    function closeShow()
+    {
+        layer.closeAll();
+    }
+
+    function sendNotice()
+    {
+        $.post('{{url("/cdms/Community/NoticeManage/sendNotice")}}', $('#commentForm').serialize(), function (res) {
+            if (res.status == 0){
+                location.reload(true);
+            }
+            else {
+                layer.msg(res.message, {icon: 5, time: 3000});
+            }
+        });
+    }
+</script>

部分文件因文件數量過多而無法顯示