Pārlūkot izejas kodu

用户组和数据共享

wufeng 2 gadi atpakaļ
vecāks
revīzija
7071149bad

+ 266 - 0
app/admin/controller/DataGroup.php

@@ -0,0 +1,266 @@
+<?php
+
+namespace app\admin\controller;
+
+//用户组
+use think\Exception;
+use think\facade\Db;
+use think\facade\Validate;
+use app\admin\model\DataGroup as DataGroupModel;
+
+class DataGroup extends Base
+{
+
+    //用户组列表
+    public function getDataGroupList()
+    {
+        $param = $this->request->filter('trim')->only(['page' => 1, 'size' => 10, 'status' => '', 'title' => '', 'nickname' => '', 'type' => '']);
+
+        $db = new DataGroupModel();
+
+        $rs = $db
+            ->alias('a')
+            ->leftJoin('data_group_userid b', 'b.data_group_id=a.id AND b.is_del=' . DataGroupModel::$delete_正常)
+            ->leftJoin('depart_user u', 'u.uid=b.uid AND u.is_del=0')
+            ->group('a.id')
+            ->where('a.is_del', DataGroupModel::$delete_正常);
+
+        $val = Validate::rule([
+            'page|页码' => 'require|number|gt:0',
+            'size|每页数量' => 'require|number|gt:0|elt:100',
+            'status|状态' => 'number|in:' . DataGroupModel::$status_启用 . ',' . DataGroupModel::$status_禁用,
+            'title|用户组名称' => 'max:100',
+            'nickname|成员名称' => 'max:100',
+            'type|共享类型' => 'number|in:' . DataGroupModel::$type_可编辑 . ',' . DataGroupModel::$type_只读 . ',' . DataGroupModel::$type_不共享,
+        ]);
+
+        if (!$val->check($param)) return error_show(1005, $val->getError());
+
+        if ($param['status'] != '') $rs->where('a.status', $param['status']);
+        if ($param['title'] != '') $rs->whereLike('a.title', '%' . $param['title'] . '%');
+        if ($param['nickname'] != '') $rs->whereLike('u.nickname', '%' . $param['nickname'] . '%');
+        if ($param['type'] != '') $rs->where('a.type', $param['type']);
+
+        $count = $rs->count('a.id');
+
+        $list = $rs
+            ->field('a.*,GROUP_CONCAT(u.nickname) nickname')
+            ->page($param['page'], $param['size'])
+            ->order('a.id', 'desc')
+            ->select()
+            ->toArray();
+
+        return app_show(0, '请求成功', ['count' => $count, 'list' => $list]);
+
+    }
+
+    //添加
+    public function addDataGroup()
+    {
+
+        $param = $this->request->filter('trim')->only(['title', 'uids', 'type', 'remark' => '']);
+
+        $val = Validate::rule([
+            'title|用户组名称' => 'require|max:100',
+            'uids|组成员' => 'require|array|max:100',
+            'type|共享类型' => 'require|number|in:' . DataGroupModel::$type_可编辑 . ',' . DataGroupModel::$type_只读 . ',' . DataGroupModel::$type_不共享,
+            'remark|备注' => 'max:100',
+        ]);
+
+        if (!$val->check($param)) return error_show(1005, $val->getError());
+
+        Db::startTrans();
+        try {
+
+            //添加用户组
+            $group_id = Db::name('data_group')->insertGetId([
+                'title' => $param['title'],
+                'type' => $param['type'],
+                'remark' => $param['remark'],
+                'is_del' => DataGroupModel::$delete_正常,
+                'status' => DataGroupModel::$status_启用,
+                'createrid' => $this->uid,
+                'creater' => $this->uname,
+            ]);
+
+            //用户组-用户集合
+            $insert_data = [];
+            foreach ($param['uids'] as $uids) {
+                $insert_data[] = [
+                    'data_group_id' => $group_id,
+                    'uid' => $uids['uid'],
+                    'is_del' => DataGroupModel::$delete_正常,
+                    'status' => DataGroupModel::$status_启用,
+                ];
+            }
+            if ($insert_data) Db::name('data_group_userid')->insertAll($insert_data);
+
+            Db::commit();
+            return app_show(0, '添加用户组成功');
+        } catch (Exception $exception) {
+            Db::rollback();
+            return error_show(1005, '添加用户组失败');
+        }
+
+    }
+
+    //获取详情
+    public function getDataGroupDetail()
+    {
+        $id = $this->request->filter('trim')->post('id/d', 0);
+
+        $info = DataGroupModel::field(true)
+            ->where(['id' => $id, 'is_del' => DataGroupModel::$delete_正常])
+            ->append(['user_list'])
+            ->withAttr('user_list', function ($val, $data) {
+                return Db::name('data_group_userid')
+                    ->alias('a')
+                    ->field('a.id,a.uid,u.nickname,a.is_del')
+                    ->leftJoin('depart_user u', 'u.uid=a.uid AND u.is_del=0')
+                    ->where([
+                        'a.is_del' => DataGroupModel::$delete_正常,
+                        'a.status' => DataGroupModel::$status_启用,
+                        'a.data_group_id' => $data['id']
+                    ])
+                    ->select()
+                    ->toArray();
+            })
+            ->findOrEmpty()
+            ->toArray();
+
+        return app_show(0, '获取详情成功', $info);
+
+    }
+
+    //修改
+    public function editDataGroup()
+    {
+
+        $param = $this->request->filter('trim')->only(['id', 'title', 'uids', 'type', 'remark']);
+
+        $val = Validate::rule([
+            'id' => 'require|number|gt:0',
+            'title|用户组名称' => 'require|max:100',
+            'uids|组成员' => 'require|array|max:100',
+            'type|共享类型' => 'require|number|in:' . DataGroupModel::$type_可编辑 . ',' . DataGroupModel::$type_只读 . ',' . DataGroupModel::$type_不共享,
+            'remark|备注' => 'max:100',
+        ]);
+
+        if (!$val->check($param)) return error_show(1005, $val->getError());
+
+        Db::startTrans();
+        try {
+
+            $res = DataGroupModel::field('id')
+                ->where(['id' => $param['id'], 'is_del' => DataGroupModel::$delete_正常])
+                ->findOrEmpty()
+                ->isEmpty();
+
+            if ($res) throw new Exception('该记录不存在');
+
+            DataGroupModel::where(['id' => $param['id'], 'is_del' => DataGroupModel::$delete_正常])->strict(false)->save($param);
+
+            //用户组-用户集合
+            $insert_data = $delete_data = [];
+            foreach ($param['uids'] as $uid) {
+
+                if (isset($uid['id']) && ((int)$uid['id']) != 0) {
+                    if ($uid['is_del'] == DataGroupModel::$delete_删除) $delete_data[] = $uid['id'];
+                } else $insert_data[] = [
+                    'data_group_id' => $param['id'],
+                    'uid' => $uid['uid'],
+                    'is_del' => DataGroupModel::$delete_正常,
+                    'status' => DataGroupModel::$status_启用,
+                ];
+
+            }
+            if ($delete_data) Db::name('data_group_userid')
+                ->whereIn('id', $delete_data)
+                ->where(['is_del' => DataGroupModel::$delete_正常, 'data_group_id' => $delete_data])->update(['is_del' => DataGroupModel::$delete_删除]);
+
+            if ($insert_data) Db::name('data_group_userid')->insertAll($insert_data);
+
+            Db::commit();
+            return app_show(0, '修改用户组成功');
+        } catch (Exception $exception) {
+            Db::rollback();
+            return error_show(1005, '修改用户组失败');
+        }
+
+    }
+
+    //删除
+    public function deleteDataGroup()
+    {
+
+        $param = $this->request->filter('trim')->only(['id']);
+
+        $val = Validate::rule(['id' => 'require|array|max:100']);
+
+        if (!$val->check($param)) return error_show(1005, $val->getError());
+
+        Db::startTrans();
+        try {
+
+            Db::name('data_group')
+                ->whereIn('id', $param['id'])
+                ->where(['is_del' => DataGroupModel::$delete_正常])
+                ->update(['is_del' => DataGroupModel::$delete_删除]);
+
+            Db::name('data_group_userid')
+                ->whereIn('data_group_id', $param['id'])
+                ->where('is_del', DataGroupModel::$delete_正常)
+                ->update(['is_del' => DataGroupModel::$delete_删除]);
+
+            Db::commit();
+            return app_show(0, '删除用户组成功');
+        } catch (Exception $exception) {
+            Db::rollback();
+            return error_show(1005, '删除用户组失败');
+        }
+
+    }
+
+    //启/禁用用户组
+    public function statusDataGroup()
+    {
+
+        $param = $this->request->filter('trim')->only(['id', 'status']);
+
+        $val = Validate::rule([
+            'id' => 'require|array|max:100',
+            'status|状态' => 'require|number|in:' . DataGroupModel::$status_启用 . ',' . DataGroupModel::$status_禁用,
+        ]);
+
+        if (!$val->check($param)) return error_show(1005, $val->getError());
+
+        $status = [0 => '禁用', 1 => '启用'];
+
+        Db::startTrans();
+        try {
+
+            Db::name('data_group')
+                ->where([
+                    ['id', 'in', $param['id']],
+                    ['is_del', '=', DataGroupModel::$delete_正常],
+                    ['status', '<>', $param['status']],
+                ])->update(['status' => $param['status']]);
+
+            Db::name('data_group_userid')
+                ->where([
+                    ['data_group_id', 'in', $param['id']],
+                    ['is_del', '=', DataGroupModel::$delete_正常],
+                    ['status', '<>', $param['status']],
+                ])->update(['status' => $param['status']]);
+
+            Db::commit();
+            return app_show(0, $status[$param['status']] . '用户组成功');
+        } catch (Exception $exception) {
+            Db::rollback();
+            return error_show(1005, $status[$param['status']] . '用户组成功');
+        }
+
+    }
+
+
+}

+ 244 - 0
app/admin/controller/DataShare.php

@@ -0,0 +1,244 @@
+<?php
+
+namespace app\admin\controller;
+
+use think\facade\Db;
+use think\facade\Validate;
+use app\admin\model\DataShare as DataShareModel;
+use app\admin\model\DataGroup as DataGroupModel;
+
+//数据共享规则
+class DataShare extends Base
+{
+
+    //列表
+    public function getDataShareList()
+    {
+        $param = $this->request->filter('trim')->only(['page' => 1, 'size' => 10, 'source_nickname' => '', 'source_group_title' => '', 'nickname' => '', 'group_title' => '', 'type' => '']);
+
+        $db = new DataShareModel();
+
+        $rs = $db
+            ->alias('a')
+            ->leftJoin('depart_user b', 'b.uid=a.source_uid AND b.is_del=0')
+            ->leftJoin('data_group c', 'c.id=a.source_data_group_id AND c.is_del=' . DataGroupModel::$delete_正常)
+            ->leftJoin('depart_user d', 'd.uid=a.uid AND d.is_del=0')
+            ->leftJoin('data_group e', 'e.id=a.data_group_id AND e.is_del=' . DataGroupModel::$delete_正常)
+            ->where('a.is_del', $db::$delete_正常);
+
+        $val = Validate::rule([
+            'page|页码' => 'require|number|gt:0',
+            'size|每页数量' => 'require|number|gt:0|elt:100',
+            'status|状态' => 'number|in:' . $db::$status_启用 . ',' . $db::$status_禁用,
+            'source_nickname|数据源用户' => 'max:100',
+            'source_group_title|数据源用户组' => 'max:100',
+            'nickname|共享用户' => 'max:100',
+            'type|共享权限' => 'number|in:' . $db::$type_只读 . ',' . $db::$type_读写,
+        ]);
+
+        if (!$val->check($param)) return error_show(1005, $val->getError());
+
+        if ($param['source_nickname'] != '') $rs->whereLike('b.nickname', '%' . $param['source_nickname'] . '%');
+        if ($param['source_group_title'] != '') $rs->whereLike('c.title', '%' . $param['source_group_title'] . '%');
+        if ($param['nickname'] != '') $rs->whereLike('d.nickname', '%' . $param['nickname'] . '%');
+        if ($param['group_title'] != '') $rs->whereLike('e.title', '%' . $param['group_title'] . '%');
+        if ($param['type'] != '') $rs->whereLike('a.type', $param['type']);
+
+        $count = $rs->count('a.id');
+
+        $list = $rs
+            ->field('a.*,b.nickname source_nickname,c.title source_group_title,d.nickname,e.title group_title')
+            ->append(['menu_list'])
+            ->withAttr('menu_list', function ($val, $data) {
+                return Db::name('admin_menu')
+                    ->field('id,menu_name')
+                    ->whereIn('id', $data['menu_ids'])
+                    ->where('is_del', 0)
+                    ->select()
+                    ->toArray();
+            })
+            ->page($param['page'], $param['size'])
+            ->order('a.id', 'desc')
+            ->select()
+            ->toArray();
+
+        return app_show(0, '请求成功', ['count' => $count, 'list' => $list]);
+
+    }
+
+    //新建
+    public function addDataShare()
+    {
+
+        $param = $this->request->filter('trim')->only(['title' => '', 'menu_ids', 'source_uid', 'source_data_group_id', 'uid', 'data_group_id', 'type', 'remark' => '']);
+
+        $val = Validate::rule([
+            'title|共享规则名称' => 'max:100',
+            'menu_ids|菜单数据' => 'require|array|max:100',
+            'source_uid|数据源用户' => 'requireWithout:source_data_group_id|number|gt:0',
+            'source_data_group_id|数据源用户组' => 'requireWithout:source_uid|number|gt:0',
+            'uid|数据共享用户' => 'requireWithout:data_group_id|number|gt:0',
+            'data_group_id|数据共享用户组' => 'requireWithout:uid|number|gt:0',
+            'type|数据权限' => 'require|number|in:' . DataShareModel::$type_只读 . ',' . DataShareModel::$type_读写,
+            'remark|备注' => 'max:100',
+        ]);
+
+        if (!$val->check($param)) return error_show(1005, $val->getError());
+
+        $rs = DataShareModel::create([
+            'title' => $param['title'],
+            'menu_ids' => implode(',', $param['menu_ids']),
+            'source_uid' => $param['source_uid'],
+            'source_data_group_id' => $param['source_data_group_id'],
+            'uid' => $param['uid'],
+            'data_group_id' => $param['data_group_id'],
+            'type' => $param['type'],
+            'remark' => $param['remark'],
+            'is_del' => DataShareModel::$delete_正常,
+            'status' => DataShareModel::$status_启用,
+            'createrid' => $this->uid,
+            'creater' => $this->uname,
+        ])->save();
+
+        return $rs ? app_show(0, '新建共享规则成功') : error_show(1004, '新建共享规则失败');
+
+    }
+
+    //获取详情
+    public function getDataShareDetail()
+    {
+        $id = $this->request->filter('trim')->post('id/d', 0);
+
+        $info = DataShareModel::field('a.*,b.nickname source_nickname,c.title source_group_title,d.nickname,e.title group_title')
+            ->alias('a')
+            ->leftJoin('depart_user b', 'b.uid=a.source_uid AND b.is_del=0')
+            ->leftJoin('data_group c', 'c.id=a.source_data_group_id AND c.is_del=' . DataGroupModel::$delete_正常)
+            ->leftJoin('depart_user d', 'd.uid=a.uid AND d.is_del=0')
+            ->leftJoin('data_group e', 'e.id=a.data_group_id AND e.is_del=' . DataGroupModel::$delete_正常)
+            ->where(['a.id' => $id, 'a.is_del' => DataShareModel::$delete_正常])
+            ->append(['menu_list'])
+            ->withAttr('menu_list', function ($val, $data) {
+                return Db::name('admin_menu')
+                    ->field('id,menu_name')
+                    ->whereIn('id', $data['menu_ids'])
+                    ->where('is_del', 0)
+                    ->select()
+                    ->toArray();
+            })
+            ->findOrEmpty()
+            ->toArray();
+
+        return app_show(0, '获取详情成功', $info);
+
+    }
+
+    //修改
+    public function editDataShare()
+    {
+
+        $param = $this->request->filter('trim')->only(['id', 'menu_ids', 'source_uid', 'source_data_group_id', 'uid', 'data_group_id', 'type', 'remark']);
+
+        $val = Validate::rule([
+            'id' => 'require|number|gt:0',
+            'title|共享规则名称' => 'max:100',
+            'menu_ids|菜单数据' => 'require|array|max:100',
+            'source_uid|数据源用户' => 'requireWithout:source_data_group_id|number|gt:0',
+            'source_data_group_id|数据源用户组' => 'requireWithout:source_uid|number|gt:0',
+            'uid|数据共享用户' => 'requireWithout:data_group_id|number|gt:0',
+            'data_group_id|数据共享用户组' => 'requireWithout:uid|number|gt:0',
+            'type|数据权限' => 'require|number|in:' . DataShareModel::$type_只读 . ',' . DataShareModel::$type_读写,
+            'remark|备注' => 'max:100',
+        ]);
+
+        if (!$val->check($param)) return error_show(1005, $val->getError());
+
+        $res = DataShareModel::field('id')
+            ->where(['id' => $param['id'], 'is_del' => DataShareModel::$delete_正常])
+            ->findOrEmpty()
+            ->isEmpty();
+
+        if ($res) return error_show(1005, '该记录不存在');
+
+        if (isset($param['menu_ids']) && is_array($param['menu_ids'])) $param['menu_ids'] = implode(',', $param['menu_ids']);
+
+        $rs = DataShareModel::where(['id' => $param['id'], 'is_del' => DataShareModel::$delete_正常])->strict(false)->save($param);
+
+        return $rs ? app_show(0, '修改共享规则成功') : error_show(1005, '修改共享规则失败');
+
+    }
+
+    //删除
+    public function deleteDataShare()
+    {
+
+        $param = $this->request->filter('trim')->only(['id']);
+
+        $val = Validate::rule(['id' => 'require|array|max:100']);
+
+        if (!$val->check($param)) return error_show(1005, $val->getError());
+
+        $rs = DataShareModel::whereIn('id', $param['id'])
+            ->where(['is_del' => DataShareModel::$delete_正常])
+            ->update(['is_del' => DataShareModel::$delete_删除]);
+
+        return $rs ? app_show(0, '删除共享规则成功') : error_show(1005, '删除共享规则失败');
+
+    }
+
+    //启/禁用
+    public function statusDataShare()
+    {
+
+        $param = $this->request->filter('trim')->only(['id', 'status']);
+
+        $val = Validate::rule([
+            'id' => 'require|array|max:100',
+            'status|状态' => 'require|number|in:' . DataShareModel::$status_启用 . ',' . DataShareModel::$status_禁用,
+        ]);
+
+        if (!$val->check($param)) return error_show(1005, $val->getError());
+
+        $status = [0 => '禁用', 1 => '启用'];
+
+        $rs = DataShareModel::where([
+            ['id', 'in', $param['id']],
+            ['is_del', '=', DataShareModel::$delete_正常],
+            ['status', '<>', $param['status']],
+        ])->update(['status' => $param['status']]);
+
+        return $rs ? app_show(0, $status[$param['status']] . '共享规则成功') : error_show(1005, $status[$param['status']] . '共享规则失败');
+
+    }
+
+    //获取被共享的菜单列表
+    public function getDataShareMenuList()
+    {
+
+        $group = Db::name('data_group_userid')
+            ->field('data_group_id')
+            ->where([
+                'is_del' => DataGroupModel::$delete_正常,
+                'status' => DataGroupModel::$status_启用,
+                'uid' => $this->uid,
+            ])->buildSql();
+
+        $menu_ids = Db::name('data_share')
+            ->field('menu_ids')
+            ->where([
+                'is_del' => DataShareModel::$delete_正常,
+                'status' => DataShareModel::$status_启用,
+            ])->where(function ($query) use ($group) {
+                return $query->where('uid', $this->uid)->whereOr('data_group_id in ' . $group);
+            })->buildSql();
+
+        $list = Db::name('admin_menu')
+            ->field('id,menu_name')
+            ->where('id IN ' . $menu_ids)
+            ->where('is_del', 0)
+            ->select()
+            ->toArray();
+
+        return app_show(0, '获取菜单成功', $list);
+    }
+
+}

+ 6 - 6
app/admin/controller/Good.php

@@ -420,12 +420,12 @@ class Good extends Base
         }else{
             return error_show(1004,"参数wsm_code 不能为空");
         }
-        $type_code = isset($this->post['type_code']) &&$this->post['type_code'] !=="" ? trim($this->post['type_code']):"";
-        if($type_code!=""){
-            $condition["good_type_code"] = $type_code;
-        }else{
-            return error_show(1004,"参数type_code 不能为空");
-        }
+//        $type_code = isset($this->post['type_code']) &&$this->post['type_code'] !=="" ? trim($this->post['type_code']):"";
+//        if($type_code!=""){
+//            $condition["good_type_code"] = $type_code;
+//        }else{
+//            return error_show(1004,"参数type_code 不能为空");
+//        }
         $good= Db::name("good_stock")->where($condition)->find();
         if(empty($good)){
             return error_show(1005,"未找到数据");

+ 25 - 0
app/admin/model/DataGroup.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace app\admin\model;
+
+use think\Model;
+
+//用户组
+class DataGroup extends Model
+{
+    protected $table = 'wsm_data_group';
+    protected $pk = 'id';
+    protected $autoWriteTimestamp = false;
+
+    public static $status_启用 = 1;//状态:1启用
+    public static $status_禁用 = 0;//状态:0禁用
+
+    public static $delete_正常 = 0;//0未删除
+    public static $delete_删除 = 1;//1删除
+
+    public static $type_可编辑 = 1;//1可编辑
+    public static $type_只读 = 2;//2只读
+    public static $type_不共享 = 3;//3不共享
+
+
+}

+ 24 - 0
app/admin/model/DataShare.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace app\admin\model;
+
+use think\Model;
+
+//数据共享规则
+class DataShare extends Model
+{
+    protected $table = 'wsm_data_share';
+    protected $pk = 'id';
+    protected $autoWriteTimestamp = false;
+
+    public static $status_启用 = 1;//状态:1启用
+    public static $status_禁用 = 0;//状态:0禁用
+
+    public static $delete_正常 = 0;//0未删除
+    public static $delete_删除 = 1;//1删除
+
+    public static $type_只读 = 2;//2只读
+    public static $type_读写 = 1;//1读写
+
+
+}