Przeglądaj źródła

refactor: 放号设置重构

zzb 1 rok temu
rodzic
commit
0a897a770f

+ 13 - 5
app/admin/controller/Appointment.php

@@ -18,7 +18,6 @@ class Appointment extends Permissions
     public function publish()
     {
         $pid = $this->request->param('pid', 0, 'intval');
-        $this->assign('pid', $pid);
 
         $post = $this->request->post();
         $post['provider_id'] = $pid;
@@ -40,18 +39,22 @@ class Appointment extends Permissions
         if ($appointment) {
             //修改
             if ($this->request->isPost()) {
+
                 $weeks = $post['weeks']??[];
                 $weeks = array_keys($weeks);
                 $post['weeks'] = implode(',', $weeks);
 
-                $post['morning_time_periods'] = json_encode($post['morning_time_periods']);
-                $post['afternoon_time_periods'] = json_encode($post['afternoon_time_periods']);
+                $post['morning_time_periods'] = json_encode($post['morning_time_periods']??[]);
+                $post['afternoon_time_periods'] = json_encode($post['afternoon_time_periods']??[]);
 
                 if (false == $appointment->allowField(true)->save($post)) {
                     $this->error('修改失败');
                 }
                 $this->success('修改成功', 'index', ['pid' => $pid]);
             } else {
+                $this->assign('data', $appointment);
+                $this->assign('morning_time_periods_json', $appointment->morning_time_periods);
+                $this->assign('afternoon_time_periods_json', $appointment->afternoon_time_periods);
                 return $this->fetch();
             }
 
@@ -63,14 +66,19 @@ class Appointment extends Permissions
                 $weeks = array_keys($weeks);
                 $post['weeks'] = implode(',', $weeks);
 
-                $post['morning_time_periods'] = json_encode($post['morning_time_periods']);
-                $post['afternoon_time_periods'] = json_encode($post['afternoon_time_periods']);
+                $post['morning_time_periods'] = json_encode($post['morning_time_periods']??[]);
+                $post['afternoon_time_periods'] = json_encode($post['afternoon_time_periods']??[]);
 
                 if (false == $model->allowField(true)->save($post)) {
                     $this->error('添加失败');
                 }
                 $this->success('添加成功', 'index', ['pid' => $pid]);
             } else {
+                //输出系统配置
+                $webconfig = \app\common\model\Webconfig::get(1);
+                $this->assign('data', $webconfig);
+                $this->assign('morning_time_periods_json', json_decode($webconfig->morning_time_periods, true));
+                $this->assign('afternoon_time_periods_json', json_decode($webconfig->afternoon_time_periods, true));
                 return $this->fetch();
             }
         }

+ 8 - 0
app/admin/controller/Specialist.php

@@ -116,6 +116,14 @@ class Specialist extends Permissions
                 if (false == $model->allowField(true)->save($post)) {
                     $this->error('添加失败');
                 } else {
+                    //新增放号设置记录
+                    $webconfig = \app\common\model\Webconfig::get(1);
+                    $data['provider_id'] = $model->id;
+                    $data['weeks'] = $webconfig->weeks;
+                    $data['morning_time_periods'] = $webconfig->morning_time_periods;
+                    $data['afternoon_time_periods'] = $webconfig->afternoon_time_periods;
+                    (new \app\common\model\Appointment())->allowField(true)->save($data);
+
                     $this->success('添加成功', 'index');
                 }
             } else {

+ 16 - 3
app/admin/controller/Webconfig.php

@@ -72,17 +72,30 @@ class Webconfig extends Permissions
             $weeks = array_keys($weeks);
             $post['weeks'] = implode(',', $weeks);
 
-            $post['morning_time_periods'] = json_encode($post['morning_time_periods']);
-            $post['afternoon_time_periods'] = json_encode($post['afternoon_time_periods']);
+            $post['morning_time_periods'] = json_encode($post['morning_time_periods']??[]);
+            $post['afternoon_time_periods'] = json_encode($post['afternoon_time_periods']??[]);
 
             $model = (new \app\common\model\Webconfig())->where('id', 1)->find();
             if (false == $model->allowField(true)->save($post)) {
                 $this->error('提交失败');
             } else {
-                $this->success('提交成功', 'admin/webconfig/index');
+
+                //修改系统放号记录, 新增放号记录
+                $speciaIds = (new \app\common\model\Specialist())->column('id');
+                foreach ($speciaIds as $pid) {
+                    if ((new \app\common\model\Appointment())->where('provider_id', $pid)->count() == 0) {
+                        $post['provider_id'] = $pid;
+                        (new \app\common\model\Appointment())->allowField(true)->save($post);
+                    }
+                }
+
+                $this->success('提交成功');
             }
 
         } else {
+            $webconfig = \app\common\model\Webconfig::get(1);
+            $this->assign('morning_time_periods_json', json_decode($webconfig->morning_time_periods, true));
+            $this->assign('afternoon_time_periods_json', json_decode($webconfig->afternoon_time_periods, true));
             return $this->fetch();
         }
     }

+ 54 - 52
app/admin/view/appointment/publish.html

@@ -2,32 +2,15 @@
 <html>
 <head>
     <meta charset="utf-8">
-    <title>放号设置编辑</title>
+    <title>放号设置</title>
     <meta name="renderer" content="webkit">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
-    <link rel="stylesheet" href="/static/public/layui/css/layui.css" media="all">
-    <link rel="stylesheet" href="/static/public/font-awesome/css/font-awesome.min.css" media="all"/>
-    <link rel="stylesheet" href="/static/admin/css/admin.css" media="all">
-    <script src="/static/public/layui/layui.js"></script>
-    <script src="/static/public/jquery/jquery.min.js"></script>
+    <link rel="stylesheet" href="__PUBLIC__/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="__PUBLIC__/font-awesome/css/font-awesome.min.css" media="all"/>
+    <link rel="stylesheet" href="__CSS__/admin.css" media="all">
+    <script src="__PUBLIC__/jquery/jquery.min.js"></script>
 </head>
-<style>
-    .layui-upload-img {
-        cursor: pointer;
-        width: 150px;
-        height: 150px;
-        background: url('/static/public/images/uploadimg.jpg');
-        background-size: contain;
-        border-radius: 2px;
-        border-width: 1px;
-        border-style: solid;
-        border-color: #e6e6e6;
-    }
-    .layui-form-label{
-        width: 90px;
-    }
-</style>
 <body style="padding:10px;">
 <div class="tplay-body-div">
 
@@ -38,22 +21,27 @@
         <div class="layui-form-item">
             <label class="layui-form-label">工作日</label>
             <div class="layui-input-block">
-                <input type="checkbox" name="weeks[1]" title="周一">
-                <input type="checkbox" name="weeks[2]" title="周二">
-                <input type="checkbox" name="weeks[3]" title="周三">
-                <input type="checkbox" name="weeks[4]" title="周四">
-                <input type="checkbox" name="weeks[5]" title="周五" checked>
-                <input type="checkbox" name="weeks[6]" title="周六">
-                <input type="checkbox" name="weeks[7]" title="周日">
+                <input type="checkbox" name="weeks[1]" title="周一" {in name="1" value="$data.weeks"}checked{/in}>
+                <input type="checkbox" name="weeks[2]" title="周二" {in name="2" value="$data.weeks"}checked{/in}>
+                <input type="checkbox" name="weeks[3]" title="周三" {in name="3" value="$data.weeks"}checked{/in}>
+                <input type="checkbox" name="weeks[4]" title="周四" {in name="4" value="$data.weeks"}checked{/in}>
+                <input type="checkbox" name="weeks[5]" title="周五" {in name="5" value="$data.weeks"}checked{/in}>
+                <input type="checkbox" name="weeks[6]" title="周六" {in name="6" value="$data.weeks"}checked{/in}>
+                <input type="checkbox" name="weeks[7]" title="周日" {in name="7" value="$data.weeks"}checked{/in}>
             </div>
         </div>
 
+
+        {empty name="$morning_time_periods_json"}
+        <script id="initjs">$(function(){$('#initjs').after($('#create_input').prop("innerHTML"));init();})</script>
+        {else/}
+        {foreach $morning_time_periods_json as $key => $period}
         <div class="layui-form-item">
             <label class="layui-form-label">上午时段</label>
 
             <div class="layui-input-inline" style="width:350px;">
                 <input type="text" name="morning_time_periods[]" placeholder="请输入,格式如:08:00 - 12:00" autocomplete="off"
-                       class="layui-input test-item" value="">
+                       class="layui-input test-item" value="{$period}">
             </div>
 
             <div class="layui-inline" style="margin-top: 5px;">
@@ -61,24 +49,28 @@
                     <button type="button"
                             class="layui-btn layui-btn-primary layui-btn-sm createinput"
                             lay-filter="createinput"><i class="layui-icon">&#xe654;</i></button>
+                    {neq name="$key" value="0"}
+                    <button type="button"
+                            class="layui-btn layui-btn-primary layui-btn-sm deleteinput"
+                            lay-filter="deleteinput"><i class="layui-icon">&#xe640;</i></button>
+                    {/neq}
                 </div>
             </div>
-
-            <!--<div class="layui-inline">-->
-            <!--<div class="layui-input-inline" style="width:350px;">-->
-            <!--<input type="checkbox" name="show_morning" title="显示" checked>-->
-            <!--</div>-->
-            <!--</div>-->
         </div>
+        {/foreach}
+        {/empty}
 
 
-
+        {empty name="$afternoon_time_periods_json"}
+        <script id="initjs2">$(function(){$('#initjs2').after($('#create_input2').prop("innerHTML"));init();})</script>
+        {else/}
+        {foreach $afternoon_time_periods_json as $key => $period}
         <div class="layui-form-item">
             <label class="layui-form-label">下午时段</label>
 
             <div class="layui-input-inline" style="width:350px;">
                 <input type="text" name="afternoon_time_periods[]" placeholder="请输入,格式如:14:00 - 18:00" autocomplete="off"
-                       class="layui-input test-item" value="">
+                       class="layui-input test-item" value="{$period}">
             </div>
 
             <div class="layui-inline" style="margin-top: 5px;">
@@ -86,23 +78,19 @@
                     <button type="button"
                             class="layui-btn layui-btn-primary layui-btn-sm createinput2"
                             lay-filter="createinput"><i class="layui-icon">&#xe654;</i></button>
+                    {neq name="$key" value="0"}
+                    <button type="button"
+                            class="layui-btn layui-btn-primary layui-btn-sm deleteinput"
+                            lay-filter="deleteinput"><i class="layui-icon">&#xe640;</i></button>
+                    {/neq}
                 </div>
             </div>
-
-            <!--<div class="layui-inline">-->
-            <!--<div class="layui-input-inline" style="width:350px;">-->
-            <!--<input type="checkbox" name="show_afternoon" title="显示" checked>-->
-            <!--</div>-->
-            <!--</div>-->
         </div>
-
+        {/foreach}
+        {/empty}
 
         <input type="hidden" name="pid" value="{$Request.param.pid}">
 
-        {notempty name="$data"}
-        <input type="hidden" name="id" value="{$data.id}">
-        {/notempty}
-
         <div class="layui-form-item">
             <div class="layui-input-block">
                 <button class="layui-btn" lay-submit lay-filter="admin">立即提交</button>
@@ -114,7 +102,7 @@
 
     <div id="create_input" style="display:none">
         <div class="layui-form-item">
-            <label class="layui-form-label"></label>
+            <label class="layui-form-label">上午时段</label>
             <div class="layui-input-inline" style="width:350px;">
                 <input type="text" name="morning_time_periods[]" placeholder="请输入,格式如:08:00 - 12:00" autocomplete="off"
                        class="layui-input test-item" value="">
@@ -136,7 +124,7 @@
 
     <div id="create_input2" style="display:none">
         <div class="layui-form-item">
-            <label class="layui-form-label"></label>
+            <label class="layui-form-label">下午时段</label>
             <div class="layui-input-inline" style="width:350px;">
                 <input type="text" name="afternoon_time_periods[]" placeholder="请输入,格式如:14:00 - 18:00" autocomplete="off"
                        class="layui-input test-item" value="">
@@ -156,14 +144,28 @@
     </div>
 
 
+    {include file="public/foot"}
+
     <script>
         layui.use(['layer', 'form', 'laydate','element'], function () {
             var layer = layui.layer,
                 $ = layui.jquery,
                 form = layui.form;
-            var laydate = layui.laydate;
 
             $(window).on('load', function () {
+
+                //定义验证规则
+                form.verify({
+                    time_period:[
+                        /^(?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9] - (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]$/,
+                        '格式必须为:hh:ii - hh:ii'
+                    ],
+                    data_time:[
+                        /^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/,
+                        '格式必须为:yyyy-mm-dd hh:ii:ss'
+                    ]
+                });
+
                 form.on('submit(admin)', function (data) {
 
                     //获取表单区域所有值

+ 45 - 22
app/admin/view/webconfig/appointment_config.html

@@ -2,13 +2,14 @@
 <html>
 <head>
     <meta charset="utf-8">
-    <title>layui</title>
+    <title>放号设置</title>
     <meta name="renderer" content="webkit">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
     <link rel="stylesheet" href="__PUBLIC__/layui/css/layui.css" media="all">
     <link rel="stylesheet" href="__PUBLIC__/font-awesome/css/font-awesome.min.css" media="all"/>
     <link rel="stylesheet" href="__CSS__/admin.css" media="all">
+    <script src="__PUBLIC__/jquery/jquery.min.js"></script>
 </head>
 <body style="padding:10px;">
 <div class="tplay-body-div">
@@ -32,12 +33,17 @@
             </div>
         </div>
 
+
+        {empty name="$morning_time_periods_json"}
+        <script id="initjs">$(function(){$('#initjs').after($('#create_input').prop("innerHTML"));init();})</script>
+        {else/}
+        {foreach $morning_time_periods_json as $key => $period}
         <div class="layui-form-item">
             <label class="layui-form-label">上午时段</label>
 
             <div class="layui-input-inline" style="width:350px;">
                 <input type="text" name="morning_time_periods[]" placeholder="请输入,格式如:08:00 - 12:00" autocomplete="off"
-                       class="layui-input test-item" value="">
+                       class="layui-input " value="{$period}" lay-verify="time_period">
             </div>
 
             <div class="layui-inline" style="margin-top: 5px;">
@@ -45,24 +51,28 @@
                     <button type="button"
                             class="layui-btn layui-btn-primary layui-btn-sm createinput"
                             lay-filter="createinput"><i class="layui-icon">&#xe654;</i></button>
+                    {neq name="$key" value="0"}
+                    <button type="button"
+                            class="layui-btn layui-btn-primary layui-btn-sm deleteinput"
+                            lay-filter="deleteinput"><i class="layui-icon">&#xe640;</i></button>
+                    {/neq}
                 </div>
             </div>
-
-            <!--<div class="layui-inline">-->
-                <!--<div class="layui-input-inline" style="width:350px;">-->
-                    <!--<input type="checkbox" name="show_morning" title="显示" checked>-->
-                <!--</div>-->
-            <!--</div>-->
         </div>
+        {/foreach}
+        {/empty}
 
 
-
+        {empty name="$afternoon_time_periods_json"}
+        <script id="initjs2">$(function(){$('#initjs2').after($('#create_input2').prop("innerHTML"));init();})</script>
+        {else/}
+        {foreach $afternoon_time_periods_json as $key => $period}
         <div class="layui-form-item">
             <label class="layui-form-label">下午时段</label>
 
             <div class="layui-input-inline" style="width:350px;">
                 <input type="text" name="afternoon_time_periods[]" placeholder="请输入,格式如:14:00 - 18:00" autocomplete="off"
-                       class="layui-input test-item" value="">
+                       class="layui-input " value="{$period}" lay-verify="time_period">
             </div>
 
             <div class="layui-inline" style="margin-top: 5px;">
@@ -70,16 +80,16 @@
                     <button type="button"
                             class="layui-btn layui-btn-primary layui-btn-sm createinput2"
                             lay-filter="createinput"><i class="layui-icon">&#xe654;</i></button>
+                    {neq name="$key" value="0"}
+                    <button type="button"
+                            class="layui-btn layui-btn-primary layui-btn-sm deleteinput"
+                            lay-filter="deleteinput"><i class="layui-icon">&#xe640;</i></button>
+                    {/neq}
                 </div>
             </div>
-
-            <!--<div class="layui-inline">-->
-                <!--<div class="layui-input-inline" style="width:350px;">-->
-                    <!--<input type="checkbox" name="show_afternoon" title="显示" checked>-->
-                <!--</div>-->
-            <!--</div>-->
         </div>
-
+        {/foreach}
+        {/empty}
 
 
 
@@ -95,10 +105,10 @@
 
     <div id="create_input" style="display:none">
         <div class="layui-form-item">
-            <label class="layui-form-label"></label>
+            <label class="layui-form-label">上午时段</label>
             <div class="layui-input-inline" style="width:350px;">
                 <input type="text" name="morning_time_periods[]" placeholder="请输入,格式如:08:00 - 12:00" autocomplete="off"
-                       class="layui-input test-item" value="">
+                       class="layui-input " value="" lay-verify="time_period">
             </div>
 
             <div class="layui-inline" style="margin-top: 5px;">
@@ -117,10 +127,10 @@
 
     <div id="create_input2" style="display:none">
         <div class="layui-form-item">
-            <label class="layui-form-label"></label>
+            <label class="layui-form-label">下午时段</label>
             <div class="layui-input-inline" style="width:350px;">
                 <input type="text" name="afternoon_time_periods[]" placeholder="请输入,格式如:14:00 - 18:00" autocomplete="off"
-                       class="layui-input test-item" value="">
+                       class="layui-input " value="" lay-verify="time_period">
             </div>
 
             <div class="layui-inline" style="margin-top: 5px;">
@@ -144,9 +154,22 @@
             var layer = layui.layer,
                 $ = layui.jquery,
                 form = layui.form;
-            var laydate = layui.laydate;
 
             $(window).on('load', function () {
+
+                //定义验证规则
+                form.verify({
+                    time_period:[
+                        /^(?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9] - (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]$/,
+                        '格式必须为:hh:ii - hh:ii'
+                    ],
+                    data_time:[
+                        /^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/,
+                        '格式必须为:yyyy-mm-dd hh:ii:ss'
+                    ]
+                });
+
+
                 form.on('submit(admin)', function (data) {
                     $.ajax({
                         url: "{:url('admin/webconfig/appointmentConfig')}",

+ 2 - 1
app/api/controller/Appointment.php

@@ -110,8 +110,9 @@ class Appointment extends Base
             //专家信息
             $item->specialist;
             $item->specialist->head_pic = geturl($item->specialist->head_pic, '', true);
-            //预约的时间段
+            //已经预约的时间段
             $ticketPeriods = (new AppointmentApplication())->where('appointment_ticket_id', $item->id)->where('finish_time', 0)->column('appointment_time');
+            //预约的时间段
             $item['morning_time_period'] = $this->setPeriodStatus($appoint->morning_time_periods, $ticketPeriods);
             $item['afternoon_time_period'] = $this->setPeriodStatus($appoint->afternoon_time_periods, $ticketPeriods);
             //剩余预约号码个数

+ 21 - 3
app/common/model/Appointment.php

@@ -18,14 +18,32 @@ class Appointment extends Model
     //morning_time_periods
     public function getMorningTimePeriodsAttr($value, $data)
     {
-        return json_decode($this->morning_time_periods, true);
+        $json = json_decode($value, true);
+        if (!is_array($json)) {
+            return [];
+        } else {
+            foreach ($json as $k => $item) {
+                if (empty($item))
+                    unset($json[$k]);
+            }
+            return $json;
+        }
     }
 
 
     //afternoon_time_periods
     public function getAfternoonTimePeriodsAttr($value, $data)
     {
-        return json_decode($this->afternoon_time_periods, true);
+        $json = json_decode($value, true);
+        if (!is_array($json)) {
+            return [];
+        } else {
+            foreach ($json as $k => $item) {
+                if (empty($item))
+                    unset($json[$k]);
+            }
+            return $json;
+        }
     }
 
 
@@ -39,7 +57,7 @@ class Appointment extends Model
 
         $daytimeWeek = date('w', $daytimestamp);
 
-        $appoints = (new Appointment())->where('weeks', '<>', '')->where('status', self::STATUS_OPEN)->select();
+        $appoints = (new Appointment())->where('weeks', '<>', '')->select();
         foreach ($appoints as $appoint) {
             $weeks = explode(',', $appoint->weeks);
             if (in_array($daytimeWeek, $weeks)) {

+ 1 - 11
app/common/model/AppointmentApplication.php

@@ -18,7 +18,7 @@ class AppointmentApplication extends Model
     const STATUS_CANCEL = 3;
 
     const STATUS = [
-        self::STATUS_NOT_SIGN => '未签到',
+        self::STATUS_NOT_SIGN => '未签到', //除了这个,其他都是完成的状态
         self::STATUS_SIGN => '已签到',
         self::STATUS_NOT_COME => '爽约',
         self::STATUS_CANCEL => '已取消',
@@ -68,16 +68,6 @@ class AppointmentApplication extends Model
     public function getChildsTextAttr($value, $data)
     {
         return $data['childs_num_str'];
-
-        if ($data['childs_num'] == 0) {
-            return 0;
-        } elseif ($data['childs_num'] == 1) {
-            return "一孩: {$data['childs_age1']}岁 性别{$this->childs_sex1_text}";
-        } elseif ($data['childs_num'] == 2) {
-            return "二孩: {$data['childs_age1']}岁 性别{$this->childs_sex1_text}、{$data['childs_age2']}岁 性别{$this->childs_sex2_text}";
-        } elseif ($data['childs_num'] == 3) {
-            return "三孩: {$data['childs_age1']}岁 性别{$this->childs_sex1_text}、{$data['childs_age2']}岁 性别{$this->childs_sex2_text}、{$data['childs_age3']}岁 性别{$this->childs_sex3_text}";
-        }
     }
 
     //sex_text

+ 1 - 1
app/install/data/db.sql

@@ -826,7 +826,7 @@ ALTER TABLE `tplay_webconfig`
 
 
 ALTER TABLE `tplay_webconfig`
-	ADD COLUMN `morning_time_periods` VARCHAR(2000) NOT NULL DEFAULT '' AFTER `show_night`,
+	ADD COLUMN `morning_time_periods` VARCHAR(2000) NOT NULL DEFAULT '' AFTER `show_afternoon`,
 	ADD COLUMN `afternoon_time_periods` VARCHAR(2000) NOT NULL DEFAULT '' AFTER `morning_time_periods`;
 
 ALTER TABLE `tplay_webconfig`