瀏覽代碼

添加列表、出工、清除今日出工人员

dong025 4 天之前
父節點
當前提交
e7588d49bb

+ 99 - 0
app/admin/controller/user/WorkerOut.php

@@ -0,0 +1,99 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\admin\controller\user;
+
+use app\common\controller\Backend;
+use app\admin\traits\Actions;
+use think\annotation\route\Group;
+use think\annotation\route\Route;
+use app\common\model\WorkerOut as WorkerOutModel;
+
+#[Group("user/worker_out")]
+class WorkerOut extends Backend
+{
+    use Actions{
+        index as private _index;
+        add as private _add;
+        edit as private _edit;
+        del as private _del;
+        multi as private _multi;
+        import as private _import;
+        download as private _download;
+    }
+
+    protected function _initialize()
+    {
+        parent::_initialize();
+        $this->model = new WorkerOutModel();
+    }
+
+    //查看
+    #[Route("GET,JSON","index")]
+    public function index()
+    {
+        return $this->_index();
+    }
+
+    //添加
+    #[Route("GET,POST","add")]
+    public function add()
+    {
+        //通过定义postParams来增加或覆盖post提交的表单
+        $this->postParams=[];
+        //通过定义callback回调函数来执行添加后的操作
+        $this->callback=function ($model){};
+        return $this->_add();
+    }
+
+    //修改
+    #[Route("GET,POST","edit")]
+    public function edit()
+    {
+        //通过定义postParams来增加或覆盖post提交的表单
+        $this->postParams=[];
+        //通过定义callback回调函数来执行修改后的操作
+        $this->callback=function ($model){};
+        return $this->_edit();
+    }
+
+    //删除
+    #[Route("GET,POST","del")]
+    public function del()
+    {
+        //通过定义callback回调函数来执行删除后的操作
+        $this->callback=function ($ids){};
+        return $this->_del();
+    }
+
+    //更新
+    #[Route("GET,POST","multi")]
+    public function multi()
+    {
+        //通过定义callback回调函数来执行更新后的操作
+        $this->callback=function ($ids,$field,$value){};
+        return $this->_multi();
+    }
+
+    //导入
+    #[Route("GET,POST","import")]
+    public function import()
+    {
+        //通过定义callback回调函数来处理导入的数据
+        $this->callback=function ($inserData){
+            return $inserData;
+        };
+        return $this->_import();
+    }
+
+    //下载
+    #[Route("GET,POST","download")]
+    public function download()
+    {
+        //通过定义callback回调函数来处理下载的数据
+        $this->callback=function ($downloadData){
+            return $downloadData;
+        };
+        return $this->_download();
+    }
+}

+ 80 - 0
app/admin/view/user/worker_out/add.html

@@ -0,0 +1,80 @@
+<template>
+    <el-card shadow="never" style="border: 0;">
+        <yun-form
+            ref="yunform"
+            @render="onFormRender"
+            @submit="onSubmit"
+            @success="onSuccess"
+            @fail="onFail"
+            :data="row"
+            :columns="columns">
+            <template #default>
+                {:token_field()}
+            </template>
+            <template #pid="{rows}">
+            <el-form-item label="{:__('管理id')}:" prop="pid">
+                <span>插槽内容</span>
+            </el-form-item>
+        </template>
+        </yun-form>
+    </el-card>
+</template>
+<script>
+import form from "@components/Form.js";
+export default{
+    components:{
+        'YunForm':form
+    },
+    data:{
+        columns:[
+            {field:"id",title:"ID",edit:"hidden"},
+            {field:"user_id",title:"工人id",edit:"number"},
+            {field:"pid",title:"管理id",edit:"slot",rules:"required"},
+            {field:"createtime",title:"创建时间"},
+        ],
+        row:Yunqi.data.row || {}
+    },
+    //页面加载完成时执行
+    onLoad:function(query){
+        console.log(query);
+    },
+    //页面初始显示或在框架内显示时执行
+    onShow:function(){
+
+    },
+    //页面在框架内隐藏时执行
+    onHide:function(){
+
+    },
+    //页面在框架内关闭时执行
+    onUnload:function(){
+
+    },
+    methods: {
+        onFormRender:function(rows){
+            //表单渲染完成后执行
+        },
+        onSubmit:function(rows){
+            //表单提交前执行,返回false可以阻止表单提交
+            /**
+             * form常用方法
+             * this.$refs.yunform.setError(field,message);//聚焦表单项并显示错误信息
+             * this.$refs.yunform.hideField(field);//隐藏表单项
+             * this.$refs.yunform.showField(field);//显示表单项
+             * this.$refs.yunform.setValue(field,value);//为表单项设置值
+             * this.$refs.yunform.getValue(field);//为获取表单项的值
+             * this.$refs.yunform.setField(field,key,value);//修改表单json的其他属性值,比如rules,title,searchList等
+             */
+            return true;
+        },
+        onSuccess:function(response){
+            //表单提交成功后执行
+        },
+        onFail:function(err){
+            //表单提交失败后执行
+        }
+    }
+}
+</script>
+<style>
+</style>

+ 1 - 0
app/admin/view/user/worker_out/edit.html

@@ -0,0 +1 @@
+{include vue="user/worker_out/add" /}

+ 91 - 0
app/admin/view/user/worker_out/index.html

@@ -0,0 +1,91 @@
+<template>
+    <el-card shadow="never">
+        <yun-table
+                :columns="columns"
+                ref="yuntable"
+                @render="onTableRender"
+                toolbar="refresh,add,edit,del,import,download"
+                :auth="{
+                    add:{:$auth->check('app\\admin\\controller\\user\\WorkerOut','add')},
+                    edit:{:$auth->check('app\\admin\\controller\\user\\WorkerOut','edit')},
+                    del:{:$auth->check('app\\admin\\controller\\user\\WorkerOut','del')},
+                    multi:{:$auth->check('app\\admin\\controller\\user\\WorkerOut','multi')},
+                    import:{:$auth->check('app\\admin\\controller\\user\\WorkerOut','import')},
+                    download:{:$auth->check('app\\admin\\controller\\user\\WorkerOut','download')},
+                }"
+                :extend="extend">
+        </yun-table>
+    </el-card>
+</template>
+<script>
+import table from "@components/Table.js";
+export default{
+    components:{
+        'YunTable':table
+    },
+    data:{
+        extend:{
+            index_url: 'user/worker_out/index',
+            add_url: 'user/worker_out/add',
+            edit_url: 'user/worker_out/edit',
+            del_url: 'user/worker_out/del',
+            multi_url: 'user/worker_out/multi',
+            download_url: 'user/worker_out/download',
+            import_url: 'user/worker_out/import',
+        },
+        columns:[
+            {checkbox: true,selectable:function (row,index){
+                //可以根据业务需求返回false让某些行不可选中
+                return true;
+            }},
+            {field:"id",title:"ID",operate:false},
+            {field:"user_id",title:"工人id"},
+            {field:"pid",title:"管理id",operate:false},
+            {field:"createtime",title:"创建时间",operate:"daterange",formatter:Yunqi.formatter.datetime},
+            {
+                field: 'operate',
+                title: __('操作'),
+                width:130,
+                action:{
+                    edit:function(row){
+                        //可以根据业务需求返回false让按钮不显示
+                        return true
+                    },
+                    del:true,
+                }
+            }
+        ]
+    },
+    //页面加载完成时执行
+    onLoad:function(query){
+        console.log(query);
+    },
+    //页面初始显示或在框架内显示时执行
+    onShow:function(){
+
+    },
+    //页面在框架内隐藏时执行
+    onHide:function(){
+
+    },
+    //页面在框架内关闭时执行
+    onUnload:function(){
+
+    },
+    methods: {
+        onTableRender:function(list){
+            //表格渲染完成后执行
+            /**
+             * table常用方法
+             * this.$refs.yuntable.reset();//重新渲染整个组件,当columns修改时,需要重新渲染表格才能生效,可以执行该方法。
+             * this.$refs.yuntable.reload();//保持当前的page,重新获取数据
+             * this.$refs.yuntable.submit();//返回第一页,重新获取数据
+             * this.$refs.yuntable.expandAllTree();//树形表格展开所有节点
+             * this.$refs.yuntable.expandTree(topid);//树形表格展开指定节点
+             */
+        }
+    }
+}
+</script>
+<style>
+</style>

+ 209 - 72
app/api/controller/GroupUser.php

@@ -8,8 +8,9 @@ use app\api\validate\User as UserValidate;
 use think\exception\ValidateException;
 use app\common\model\GroupUser as GroupUserModel;
 use app\common\model\User as UserModel;
+use app\common\model\WorkerOut as WorkerOutModel;
 use \think\facade\Filesystem;
-
+use app\admin\controller\user\GroupUser as AdminGroupUser;
 class GroupUser extends Base
 {
 
@@ -96,14 +97,14 @@ class GroupUser extends Base
     public function group_list(GroupUserModel $userModel)
     {
         $list = $userModel->where('status', 'normal')->where('pid', $this->userinfo['id'])->select()->each(function ($item, $key) {
-                $item['avatar']=request()->domain().'/' . $item['avatar'];
-                return $item;
-            });;
+            $item['avatar'] = request()->domain() . '/' . $item['avatar'];
+            return $item;
+        });;
         return $this->success('ok', $list);
     }
 
     //添加组员
-    public function add_group_user(GroupUserModel $groupUserModel,UserModel $userModel)
+    public function add_group_user(GroupUserModel $groupUserModel, UserModel $userModel)
     {
         $file = request()->file('avatar');
         $param = $this->request->post();
@@ -113,36 +114,36 @@ class GroupUser extends Base
 
             //判断手机号和身份证号是否注册今天是否添加到该团队
             $where_item_id_card = [];
-            $where_item_id_card[]=['pid', '=',$this->userinfo['id']];
-            $where_item_id_card[]=['id_card', '=',$param['id_card']];
+            $where_item_id_card[] = ['pid', '=', $this->userinfo['id']];
+            $where_item_id_card[] = ['id_card', '=', $param['id_card']];
             // $where_item_id_card[]=['createtime', '>=',$todayTime];
-            
+
             $group_user_data = $groupUserModel->where($where_item_id_card)->find();
-            if(!empty($group_user_data)) return $this->error('该身份证号已添加');
-            
+            if (!empty($group_user_data)) return $this->error('该身份证号已添加');
+
             $where_item_mobile = [];
-            $where_item_mobile[]=['pid', '=',$this->userinfo['id']];
-            $where_item_mobile[]=['mobile', '=',$param['mobile']];
+            $where_item_mobile[] = ['pid', '=', $this->userinfo['id']];
+            $where_item_mobile[] = ['mobile', '=', $param['mobile']];
             // $where_item_mobile[]=['createtime', '>=',$todayTime];
 
             $group_user_data = $groupUserModel->where($where_item_mobile)->find();
-            if(!empty($group_user_data)) return $this->error('该手机号已添加');
+            if (!empty($group_user_data)) return $this->error('该手机号已添加');
 
             $user = $userModel->find($this->userinfo['id']);
-            
-            $pid=$user['id'];
-            $time=time();
-            $add_data=[
-                'pid'=>$pid,
-                'nickname'=>$param['nickname'],
-                'id_card'=>$param['id_card'],
-                'avatar'=>'',
-                'mobile'=>$param['mobile'],
-                'sex'=>$param['sex'],
-                'role'=>'1',
-                'status'=>'normal',
-                'joinip'=>request()->ip(),
-                'jointime'=>$time
+
+            $pid = $user['id'];
+            $time = time();
+            $add_data = [
+                'pid' => $pid,
+                'nickname' => $param['nickname'],
+                'id_card' => $param['id_card'],
+                'avatar' => '',
+                'mobile' => $param['mobile'],
+                'sex' => $param['sex'],
+                'role' => '1',
+                'status' => 'normal',
+                'joinip' => request()->ip(),
+                'jointime' => $time
             ];
             if (!empty($file)) {
                 // 文件夹
@@ -150,17 +151,17 @@ class GroupUser extends Base
                 $fileName = time() . '_' . mt_rand(1000, 9999) . '.png';
 
                 $avatar = $file->move('uploads/avatar/' . $folder, $fileName);
-                
+
                 //检查目标文件是否存在
                 if (!empty($avatar)) {
                     //有图片上传,进行添加用户
-                    $add_data['avatar']=$avatar;
-                    $res=$groupUserModel->save($add_data);
-                    if($res) return $this->success('添加成功');
-                }else{
+                    $add_data['avatar'] = $avatar;
+                    $res = $groupUserModel->save($add_data);
+                    if ($res) return $this->success('添加成功');
+                } else {
                     return $this->error('头像上传失败');
                 }
-            }else{
+            } else {
                 return $this->error('请上传头像');
             }
         } catch (ValidateException $e) {
@@ -169,51 +170,51 @@ class GroupUser extends Base
         return $this->error('添加失败');
     }
     //修改组员
-    public function edit_group_user(GroupUserModel $groupUserModel,UserModel $userModel)
+    public function edit_group_user(GroupUserModel $groupUserModel, UserModel $userModel)
     {
         $file = request()->file('avatar');
         $param = $this->request->post();
         try {
             validate(UserValidate::class)->scene('edit_group_user')->check($param);
             $user = $userModel->find($this->userinfo['id']);
-            $edit_data=$groupUserModel->find($param['id']);
-            if($edit_data['pid']!=$this->userinfo['id']) return $this->error('无该用户');
-            
+            $edit_data = $groupUserModel->find($param['id']);
+            if ($edit_data['pid'] != $this->userinfo['id']) return $this->error('无该用户');
+
             // $todayTime = strtotime('today');
 
             //判断手机号和身份证号是否注册今天是否添加到该团队
             $where_item_id_card = [];
-            $where_item_id_card[]=['id', '!=',$edit_data['id']];
-            $where_item_id_card[]=['pid', '=',$this->userinfo['id']];
-            $where_item_id_card[]=['id_card', '=',$param['id_card']];
+            $where_item_id_card[] = ['id', '!=', $edit_data['id']];
+            $where_item_id_card[] = ['pid', '=', $this->userinfo['id']];
+            $where_item_id_card[] = ['id_card', '=', $param['id_card']];
             // $where_item_id_card[]=['createtime', '>=',$todayTime];
-            
+
             $group_user_data = $groupUserModel->where($where_item_id_card)->find();
-            if(!empty($group_user_data)) return $this->error('该身份证号已添加');
-            
+            if (!empty($group_user_data)) return $this->error('该身份证号已添加');
+
             $where_item_mobile = [];
-            $where_item_mobile[]=['id', '!=',$edit_data['id']];
-            $where_item_mobile[]=['pid', '=',$this->userinfo['id']];
-            $where_item_mobile[]=['mobile', '=',$param['mobile']];
+            $where_item_mobile[] = ['id', '!=', $edit_data['id']];
+            $where_item_mobile[] = ['pid', '=', $this->userinfo['id']];
+            $where_item_mobile[] = ['mobile', '=', $param['mobile']];
             // $where_item_mobile[]=['createtime', '>=',$todayTime];
 
             $group_user_data = $groupUserModel->where($where_item_mobile)->find();
-            if(!empty($group_user_data)) return $this->error('该手机号已添加');
+            if (!empty($group_user_data)) return $this->error('该手机号已添加');
 
-            
-            
-            $pid=$user['id'];
-            $time=time();
-            $add_data=[
-                'pid'=>$pid,
-                'nickname'=>$param['nickname'],
-                'id_card'=>$param['id_card'],
-                'mobile'=>$param['mobile'],
-                'sex'=>$param['sex'],
-                'role'=>'1',
-                'status'=>'normal',
-                'joinip'=>request()->ip(),
-                'updatetime'=>$time
+
+
+            $pid = $user['id'];
+            $time = time();
+            $add_data = [
+                'pid' => $pid,
+                'nickname' => $param['nickname'],
+                'id_card' => $param['id_card'],
+                'mobile' => $param['mobile'],
+                'sex' => $param['sex'],
+                'role' => '1',
+                'status' => 'normal',
+                'joinip' => request()->ip(),
+                'updatetime' => $time
             ];
             if (!empty($file)) {
                 // 文件夹
@@ -221,24 +222,24 @@ class GroupUser extends Base
                 $fileName = time() . '_' . mt_rand(1000, 9999) . '.png';
 
                 $avatar = $file->move('uploads/avatar/' . $folder, $fileName);
-                
-                
+
+
                 //检查目标文件是否存在
                 if (!empty($avatar)) {
-                    if(!empty($edit_data['avatar'])){
-                        $avatar_file=root_path() . 'public' . DS . $edit_data['avatar'];
+                    if (!empty($edit_data['avatar'])) {
+                        $avatar_file = root_path() . 'public' . DS . $edit_data['avatar'];
                         if (file_exists($avatar_file)) {
                             unlink($avatar_file);
                         }
                     }
                     //有图片上传,进行添加用户
-                    $add_data['avatar']=$avatar;
-                    $res=$edit_data->save($add_data);
-                    if($res) return $this->success('修改成功');
+                    $add_data['avatar'] = $avatar;
+                    $res = $edit_data->save($add_data);
+                    if ($res) return $this->success('修改成功');
                 }
-            }else{
-                $res=$edit_data->save($add_data);
-                if($res) return $this->success('修改成功');
+            } else {
+                $res = $edit_data->save($add_data);
+                if ($res) return $this->success('修改成功');
             }
         } catch (ValidateException $e) {
             return $this->error($e->getError());
@@ -246,6 +247,142 @@ class GroupUser extends Base
         return $this->error('修改失败');
     }
 
+    //获取今日出工人员列表
+    public function get_worker_out_list(GroupUserModel $groupUserModel, UserModel $userModel, WorkerOutModel $workerOutModel)
+    {
+        try {
+            $workerOutModel=new WorkerOutModel();
+            $todayTime = strtotime('today');
+            $pid=$this->userinfo['id'];
+            $where=[];
+            $where[] = ['pid', '=',$pid];
+            $list = $groupUserModel->where($where)
+            ->select()->each(function ($item, $key) {
+                $state=$this->get_worker_out_state($item['id'],$this->userinfo['id']);
+                $state=$state==0?false:true;
+                $item['selected']=$state;
+                $item['avatar']= $this->startsWithHttp($item['avatar'])?$item['avatar']:request()->domain().'/' . $item['avatar'];
+                return $item;
+            });
+            return $this->success('出工人员列表',$list);
+            
+        } catch (ValidateException $e) {
+            return $this->error($e->getError());
+        }
+    }
+    //选择今日出工人员
+    public function set_worker_out(GroupUserModel $groupUserModel, UserModel $userModel, WorkerOutModel $workerOutModel)
+    {
+        $param = $this->request->post();
+        try {
+            validate(UserValidate::class)->scene('set_worker_out')->check($param);
+            $list = $this->comma_str_array($param['list']);
+            if(empty($list)) return $this->error('请添加出工人员');;
+            $add_worker=[];
+            $pid=$this->userinfo['id'];
+            $time=time();
+            foreach ($list as $key => $value) {
+                $state=$this->get_worker_out_state($value,$pid);
+                if($state>0) continue;
+                $item=[
+                    'user_id'=>(int)$value,
+                    'pid'=>$pid,
+                    'createtime'=>$time
+                ];
+                $add_worker[]=$item;
+            }
+            $res=$workerOutModel->saveAll($add_worker);
+            if($res) return $this->success('添加出工人员成功');
+            
+        } catch (ValidateException $e) {
+            return $this->error($e->getError());
+        }
+        return $this->error('添加出工人员失败');
+    }
+
+    //清除今日出工人员
+    public function clear_worker_out(GroupUserModel $groupUserModel, UserModel $userModel, WorkerOutModel $workerOutModel)
+    {
+        $param = $this->request->post();
+        try {
+            validate(UserValidate::class)->scene('set_worker_out')->check($param);
+            $list = $this->comma_str_array($param['list']);
+            if(empty($list)) return $this->error('请添加取消人员');
+            $add_worker=[];
+            $pid=$this->userinfo['id'];
+            $time=time();
+            
+            foreach ($list as $key => $value) {
+                $id=$this->get_worker_out_id((int)$value,$pid);
+                if(empty($id)) continue;
+                $item=[
+                    'id'=>$id,
+                    'state'=>0,
+                    'updatetime'=>$time
+                ];
+                $add_worker[]=$item;
+            }
+            $res=$workerOutModel->saveAll($add_worker);
+            if($res) return $this->success('取消成功');
+            
+        } catch (ValidateException $e) {
+            return $this->error($e->getError());
+        }
+         return $this->error('取消失败');
+    }
+
+    //获取今天出工人员状态,0=未出个,1=出工
+    public function get_worker_out_state($id,$pid)
+    {
+        $workerOutModel=new WorkerOutModel();
+        $todayTime = strtotime('today');
+        $where=[];
+        $where[] = ['user_id', '=',$id];
+        $where[] = ['pid', '=',$pid];
+        $where[] = ['state', '=',1];
+        $where[]=['createtime', '>=',$todayTime];
+        return $workerOutModel->where($where)->count();
+    }
+
+    //获取今天出工人员id
+    public function get_worker_out_id($id,$pid)
+    {
+        $workerOutModel=new WorkerOutModel();
+        $todayTime = strtotime('today');
+        $where=[];
+        $where[] = ['user_id', '=',$id];
+        $where[] = ['pid', '=',$pid];
+        $where[] = ['state', '=',1];
+        $where[]=['createtime', '>=',$todayTime];
+        $count=$workerOutModel->where($where)->count();
+        if($count==0) return null;
+        $id=$workerOutModel->where($where)->value('id');
+        return $id;
+    }
     
-    
+    //逗号分隔转数组
+    public function comma_str_array($arr_string)
+    {
+        // 1. 清除所有空格(含全角)
+        $array = str_replace([' ', ' '], '', $arr_string);
+
+        // 2. 清除开头/结尾的逗号(关键改进)
+        $array = trim($array, ',');
+        $array=explode(',', $array);
+        if(empty($array)) return null;
+        $arr=[];
+        foreach ($array as &$item) {
+            if(empty($item)){
+                continue;
+            }
+            $arr[]=$item;
+        }
+        return $arr;
+    }
+    // 方法1.1:使用strpos()精准匹配
+    public function startsWithHttp($url)
+    {
+        return strpos($url, 'https://') === 0
+            || strpos($url, 'http://') === 0;
+    }
 }

+ 6 - 0
app/api/route/route.php

@@ -71,6 +71,12 @@ Route::group('user', function () {
     Route::rule('add_group_user','GroupUser/add_group_user','POST');
     //修改组员
     Route::rule('edit_group_user','GroupUser/edit_group_user','POST');
+    //出工人员列表
+    Route::rule('get_worker_out_list','GroupUser/get_worker_out_list','POST');
+    //出工人员设置
+    Route::rule('set_worker_out','GroupUser/set_worker_out','POST');
+    //清除今日出工人员
+    Route::rule('clear_worker_out','GroupUser/clear_worker_out','POST');
     
     
   })->middleware(AllowCrossDomain::class);

+ 4 - 1
app/api/validate/User.php

@@ -15,7 +15,8 @@ class User extends Validate
         'repassword' => 'require|length:6,32|confirm:password',
         'oldpassword' => 'require|length:6,32',
         'id_card'  => 'require|idCard',
-        'sex'  => 'require|in:1,2'
+        'sex'  => 'require|in:1,2',
+        'list'  => 'require'
 
         
         
@@ -30,6 +31,7 @@ class User extends Validate
         'oldpassword' => '旧密码错误',
         'repassword' => '两次密码不一致',
         'id_card' => '身份证格式错误',
+        'list' => '请选择出工人员'
     ];
 
 
@@ -40,6 +42,7 @@ class User extends Validate
         'password' => ['password','oldpassword', 'repassword'],
         'add_group_user'   =>  ['nickname','id_card','mobile','sex'],
         'edit_group_user'   =>  ['id','nickname','id_card','mobile','sex'],
+        'set_worker_out'   =>  ['list']
         
     ]; 
 }

+ 18 - 0
app/common/model/WorkerOut.php

@@ -0,0 +1,18 @@
+<?php
+declare(strict_types=1);
+
+namespace app\common\model;
+
+use think\Model;
+
+class WorkerOut Extends Model
+{
+    // 自动写入时间戳字段
+    protected $autoWriteTimestamp = true;
+    protected $createTime = 'createtime';
+
+    protected $type = [
+        'createtime'     =>  'timestamp:Y-m-d H:i',
+    ];
+
+}