Browse Source

Merge branch 'dev_process_action_wf' of wugg/phpstock into version1.5

wugg 2 years ago
parent
commit
7881b5356c

+ 4 - 1
app/abutment/controller/Good.php

@@ -566,6 +566,8 @@ class Good extends HomeBaseController
         if ($is_down != false) {
             return json_show(1004, "存在未下线商品数据");
         }
+        if ($data['status'] != 1) return json_show(1005, '该状态下不允许修改基础信息');
+
         $good_name = isset($this->post['good_name']) && $this->post['good_name'] != "" ? trim($this->post['good_name']) : "";
         if ($good_name == "") {
             return json_show(1004, "商品名称不能为空");
@@ -820,7 +822,6 @@ class Good extends HomeBaseController
     //修改商品价格信息
     public function updateGoodPriceInfo()
     {
-
         $this->post = $this->request->filter('trim')->post();
 
         $supcode = isset($this->post['spuCode']) && $this->post['spuCode'] != "" ? trim($this->post['spuCode']) : "";
@@ -831,6 +832,8 @@ class Good extends HomeBaseController
         if ($datas == false) {
             return json_show(1004, "未找到商品数据");
         }
+        if ($datas['status'] != 1) return json_show(1005, '该状态下不允许修改价格信息');
+
         $is_down = Db::name("good_platform")
             ->where(["spuCode" => $supcode, "is_del" => 0])
             ->where("exam_status", "<>", 8)

+ 14 - 11
app/admin/controller/Activity.php

@@ -4,6 +4,7 @@ namespace app\admin\controller;
 
 use app\admin\common\Ocr;
 use app\admin\model\ActionLog;
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\ProcessOrder;
 use app\BaseController;
 use think\App;
@@ -49,20 +50,21 @@ class Activity extends Base
         if($company_id!==""){
             $where[]=['ga.company_id',"=",$company_id];
         }
-        $creater = isset($this->post['creater']) && $this->post['creater'] !=="" ? trim($this->post['creater'])
-            :"";
+        $creater = isset($this->post['creater']) && $this->post['creater'] !=="" ? trim($this->post['creater']) :"";
         if($creater!=""){
             $where[]=['ga.creater',"like","%$creater%"];
         }
-        $createrid = isset($this->post['createrid']) && $this->post['createrid'] !=="" ? trim($this->post['createrid'])
-            :"";
+        $createrid = isset($this->post['createrid']) && $this->post['createrid'] !=="" ? trim($this->post['createrid']) :"";
         if($createrid!==""){
             $where[]=['ga.createrid',"=",$createrid];
         }
-        $role=$this->checkRole();
-        if(!empty($role['write'])){
-            $where[]=["ga.createrid","in",$role['write']];
-        }
+//        $role=$this->checkRole();
+//        if(!empty($role['write'])){
+//            $where[]=["ga.createrid","in",$role['write']];
+//        }
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ['ga.createrid', 'in', $role[DataGroupModel::$type_全部]];
+
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["ga.createrid", 'in', get_company_item_user_by_name($company_name)];
 
@@ -77,11 +79,12 @@ class Activity extends Base
             ->field('ga.*,p.platform_name,u.itemid')
             ->leftJoin("depart_user u", "u.uid=ga.createrid AND u.is_del=0")
             ->leftJoin("platform p", "p.id=ga.platform_code")
-            ->append(['company_name'])
+            ->append(['company_name','is_allow_update'])
             ->withAttr('company_name',function($val,$data){
                 return implode('/', array_column(GetPart($data['itemid']), 'name'));
-            })
-            ->where($where)
+            })->withAttr('is_allow_update',function($val,$data)use($role){
+                return (in_array($this->roleid, [1, 33]) || in_array($data['createrid'], $role[DataGroupModel::$type_可编辑])) ? 1 : 0;//是否具有编辑权限
+            })->where($where)
             ->page($page,$size)
             ->order("ga.addtime desc")
             ->select()

+ 24 - 16
app/admin/controller/After.php

@@ -3,6 +3,7 @@
 
 namespace app\admin\controller;
 use app\admin\model\ActionLog;
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\GoodLog;
 use app\admin\model\GoodStockInfo;
 use app\admin\model\ProcessOrder;
@@ -202,18 +203,15 @@ class After extends Base
         if($orderCode!=""){
             $where[]=['a.orderCode',"like", "%{$orderCode}%"];
         }
-        $good_code = isset($this->post['good_code']) && $this->post['good_code']!="" ? trim($this->post['good_code'])
-            :"";
+        $good_code = isset($this->post['good_code']) && $this->post['good_code']!="" ? trim($this->post['good_code']) :"";
         if($good_code!=""){
             $where[]=['a.good_code',"like", "%{$good_code}%"];
         }
-        $good_name = isset($this->post['good_name']) && $this->post['good_name']!="" ? trim($this->post['good_name'])
-            :"";
+        $good_name = isset($this->post['good_name']) && $this->post['good_name']!="" ? trim($this->post['good_name']) :"";
         if($good_name!=""){
             $where[]=['a.good_name',"like", "%{$good_name}%"];
         }
-        $customer_code = isset($this->post['customer_code']) && $this->post['customer_code']!="" ? trim($this->post['customer_code'])
-            :"";
+        $customer_code = isset($this->post['customer_code']) && $this->post['customer_code']!="" ? trim($this->post['customer_code']) :"";
         if($customer_code!=""){
             $where[]=['a.customer_code',"like", "%{$customer_code}%"];
         }
@@ -221,8 +219,7 @@ class After extends Base
         if($except_code!=""){
             $where[]=['a.except_code',"=", $except_code];
         }
-        $apply_name = isset($this->post['apply_name']) && $this->post['apply_name']!="" ? trim($this->post['apply_name'])
-            :"";
+        $apply_name = isset($this->post['apply_name']) && $this->post['apply_name']!="" ? trim($this->post['apply_name']) :"";
         if($apply_name!=""){
             $where[]=['a.apply_name',"like", "%{$apply_name}%"];
         }
@@ -234,18 +231,24 @@ class After extends Base
         if($end!==""){
             $where[]=['a.addtime',"<=", $end];
         }
-        $role=$this->checkRole();
         $condition='';
-        if(!empty($role['write']) && $this->uid!=""){
-        	$cgdArr =\think\facade\Config::get("app");
-        	$cgdids =implode(",",$cgdArr['wsm_cgder_role']);
-            $condition .="a.cgderid = {$this->uid} or a.apply_id in (".implode(',',$role['write']).") or a.person_id={$this->uid} or (order_type=1 and {$this->roleid} in ($cgdids))";
-        }
+//        $role=$this->checkRole();
+//        if(!empty($role['write']) && $this->uid!=""){
+//            // $where[]=["a.apply_id","in",$role['write']];
+//            $condition .="a.cgderid = {$this->uid} or a.apply_id in (".implode(',',$role['write']).")";
+//        }
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $condition .="a.cgderid = {$this->uid} or a.apply_id in (".implode(',',$role[DataGroupModel::$type_全部]).")";
+
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["a.apply_id", 'in', get_company_item_user_by_name($company_name)];
 
-        $count=Db::name("order_return")->alias("a")->leftJoin("order_returninfo b","a.returnCode=b.returnCode")->where
-        ($where)->where($condition)->count();
+        $count=Db::name("order_return")
+            ->alias("a")
+            ->leftJoin("order_returninfo b","a.returnCode=b.returnCode")
+            ->where($where)
+            ->where($condition)
+            ->count();
         $total = ceil($count/$size);
         $page = $total>=$page ? $page :$total;
         $list =Db::name("order_return")
@@ -263,6 +266,11 @@ class After extends Base
             $customer = Db::name("customer_info")->where(["companyNo"=>$value['customer_code']])->find();
             $value['customer_name'] = isset($customer['companyName']) ?trim($customer['companyName']):'';
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[]=$value;
         }
         return app_show(0,"获取成功",['list'=>$data,"count"=>$count]);

+ 9 - 1
app/admin/controller/Allot.php

@@ -3,6 +3,7 @@
 namespace app\admin\controller;
 
 use app\admin\model\ActionLog;
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\GoodLog;
 use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use app\admin\model\ProcessWait;
@@ -65,7 +66,6 @@ class Allot extends Base
         }
         $in_companyNo = isset($this->post['in_companyNo']) && $this->post['in_companyNo'] !== "" ? trim($this->post['in_companyNo']) : "";
         if ($in_companyNo !== "") {
-
             $where[]=["a.in_companyNo","=",$in_companyNo];
         }
 
@@ -86,9 +86,12 @@ class Allot extends Base
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["a.apply_id", 'in', get_company_item_user_by_name($company_name)];
 
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ['a.apply_id', 'in', $role[DataGroupModel::$type_全部]];
 
         $count = Db::name('allot_stock')
             ->alias('a')
+            ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0")
             ->where($where)
             ->count();
         $total = ceil($count/$size);
@@ -129,6 +132,11 @@ class Allot extends Base
             $value['rcode'] =isset($dc['code']) ? $dc['code']:"";
             $value['in_company_name'] =isset($dc['company']) ? $dc['company']:"";
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data []=$value;
         }
         return app_show(0,"获取成功",['count'=>$count,'list'=>$data]);

+ 25 - 6
app/admin/controller/Base.php

@@ -8,6 +8,7 @@ use app\admin\model\ActionLog;
 use app\admin\model\ProcessOrder;
 use think\App;
 use think\facade\Db;
+use app\admin\model\DataGroup as DataGroupModel;
 
 class Base extends \app\BaseController
 {
@@ -15,6 +16,7 @@ class Base extends \app\BaseController
     public  $uid='';
     public  $uname='';
     public  $roleid='';
+
     public function __construct(App $app)
     {
         parent::__construct($app);
@@ -39,9 +41,12 @@ class Base extends \app\BaseController
         if($uid==false || $uid['status']==0){
             return error_show(102,'账户已禁用');
         }
+        $this->roleid = $uid['roleid'];//权限id
     }
 
+
     public function  checkRole(){
+
         $uid = Db::name("user_role")->where(['uid'=>$this->uid,"is_del"=>0,"status"=>1])->find();
         if($uid==false){
             return [];
@@ -95,24 +100,37 @@ class Base extends \app\BaseController
                 }
             }
         }
-        /**
-         * 离职交接权限
-         */
+        //离职交接权限
         $resgin= Db::name("resign_info")->where([["hand_uid","=",$this->uid],["is_del","=",0],['status',"=",4]])
             ->column(['resign_uid']);
         if(!empty($resgin)){
             $action['write']= array_unique(array_merge($action['write'],$resgin));
         }
 
-        /**
-         * 超级管理员看到所有人的数据
-         */
+        // 超级管理员看到所有人的数据
         if($uid['roleid']==1 || $uid['roleid']==33){
             $action['write']=[];
         }
         $action['roleid']=$uid['roleid'];
         $action['action_conllect']=implode(",",array_unique(explode(",",$action['action_conllect'])));
         return $action;
+
+    }
+
+
+    //用户数据权限检查
+    protected function checkDataShare(){
+
+        if($this->roleid==1 || $this->roleid==33) return [];// 超级管理员(roleid==1)和最高领导(roleid==33)能看到所有人的数据
+
+        $data = get_group_share_uid($this->uid);
+        /**
+         * data[DataGroupModel::$type_全部] 0全部
+         * data[DataGroupModel::$type_可编辑] 1可编辑
+         * data[DataGroupModel::$type_只读] 2只读
+         */
+
+        return $data;
     }
 
     /**
@@ -238,4 +256,5 @@ class Base extends \app\BaseController
   	    return $spuCode;
 
     }
+
 }

+ 87 - 69
app/admin/controller/Check.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller;
 
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\ProcessOrder;
 use app\admin\model\ProcessWait;
 use app\BaseController;
@@ -160,75 +161,92 @@ public function __construct(App $app)
 
         return app_show(0, "获取成功", ["list" => $data, "count" => $count]);
     }
-	public function list()
-	{
-	    $page = isset($this->post['page']) && $this->post['page'] !== "" ? intval($this->post['page']) : "1";
-	    $size = isset($this->post['size']) && $this->post['size'] !== "" ? intval($this->post['size']) : "10";
-	    $where = [['a.is_del',"=",0],['b.is_del',"=",0]];
-	    $start= isset($this->post['start']) && $this->post['start'] !== "" ? $this->post['start']:"";
-	    if ($start !="") {
-	      //  $where["a.addtime"]=Db::raw(">= '{$start}'");
-	        $where[]=['a.addtime',">=",$start];
-	    }
-	    $end = isset($this->post['end']) && $this->post['end'] !== "" ? $this->post['end'] :"";
-	    if($end !=""){
-	      //  $where["a.addtime"] = Db::raw("<= '{$end}'");
-	        $where[]=['a.addtime',"<=",$end];
-	    }
-	    $check_code = isset($this->post['check_code']) && $this->post['check_code'] !== "" ? trim($this->post['check_code']) : "";
-	    if ($check_code !== "") {
-	       // $where['a.check_code'] = Db::raw("like '%$check_code%'");
-	        $where[]=['a.check_code',"like","%$check_code%"];
-	    }
-	    $wsm_code = isset($this->post['wsm_code']) && $this->post['wsm_code'] !== "" ? trim($this->post['wsm_code']) : "";
-	    if ($wsm_code  !== "") {
-	      //  $where['a.wsm_code'] =  Db::raw("like '%$wsm_code%'");
-	        $where[]=['a.wsm_code',"like","%$wsm_code%"];
-	    }
-	    $apply_name = isset($this->post['apply_name']) && $this->post['apply_name'] !== "" ? trim($this->post['apply_name']) : "";
-	    if ($apply_name !== "") {
-	     //   $where['a.apply_name'] = $apply_name;
-	        $where[]=['a.apply_name',"like","%$apply_name%"];
-	    }
-	    $type = isset($this->post['type']) && $this->post['type'] !== "" ? trim($this->post['type']) : "";
-	    if ($type !== "") {
-	       // $where['a.type'] = $type;
-	        $where[]=['a.type',"=",$type];
-	    }
-	    $apply_id = isset($this->post['apply_id']) && $this->post['apply_id'] !== "" ? intval($this->post['apply_id']) : "";
-	    if ($apply_id!== "") {
-	       // $where['a.apply_id'] = $apply_id;
-	        $where[]=['a.apply_id',"=",$apply_id];
-	    }
-	    $status= isset($this->post['status']) && $this->post['status'] !== "" ? intval($this->post['status']) : "";
-	    if ($status !== "") {
-	       // $where['a.status '] = $status;
-	        $where[]=['a.status',"=",$status];
-	    }
-	    $companyNo = isset($this->post['companyNo']) && $this->post['companyNo'] !== "" ? trim($this->post['companyNo']) : "";
-	    if ($companyNo !== "") {
-	        $condition[]=["a.companyNo ","=",$companyNo ];
-	    }
-	    $count = Db::name('good_check')->alias('a')->join("warehouse_info b","a.wsm_code = b.wsm_code","left")
-	        ->join("supplier v","v.code=b.supplierNo","left")
-	        ->where($where)->count();
-	    $total = ceil($count / $size);
-	    $page = $page <= $total ? $page : $total;
-	    $list = Db::name('good_check')->alias('a')->join("warehouse_info b","a.wsm_code = b.wsm_code","left")
-	        ->join("supplier v","v.code=b.supplierNo","left")
-	        ->field("a.status,a.apply_id,a.apply_name,a.type,a.addtime,a.wsm_code,a.check_code,b.name,a.id,v.name as 'caname',v.code")->where($where)->page($page,$size)->order("a.id desc")->select();
-	    $data=[];
-	    foreach ($list as $key=>$value){
-	        $value['rename'] ='';
-	        if($value['apply_id']!=0){
-	            $depart = Db::name("depart_user")->alias("a")->leftJoin("company_item b","a.itemid = b.id")->where(['a.uid'=>$value['apply_id'],'a.is_del'=>0])
-	                ->column('b.name');
-	           // var_dump(Db::name("depart_user")->getLastSql());
-	            $value['rename'] =implode(",",$depart);
-	        }
-	        $data[] = $value;
-	    }
-	    return app_show(0,"获取成功",['count'=>$count,'list'=>$data]);
+public function list()
+{
+    $page = isset($this->post['page']) && $this->post['page'] !== "" ? intval($this->post['page']) : "1";
+    $size = isset($this->post['size']) && $this->post['size'] !== "" ? intval($this->post['size']) : "10";
+    $where = [['a.is_del',"=",0],['b.is_del',"=",0]];
+    $start= isset($this->post['start']) && $this->post['start'] !== "" ? $this->post['start']:"";
+    if ($start !="") {
+      //  $where["a.addtime"]=Db::raw(">= '{$start}'");
+        $where[]=['a.addtime',">=",$start];
+    }
+    $end = isset($this->post['end']) && $this->post['end'] !== "" ? $this->post['end'] :"";
+    if($end !=""){
+      //  $where["a.addtime"] = Db::raw("<= '{$end}'");
+        $where[]=['a.addtime',"<=",$end];
+    }
+    $check_code = isset($this->post['check_code']) && $this->post['check_code'] !== "" ? trim($this->post['check_code']) : "";
+    if ($check_code !== "") {
+       // $where['a.check_code'] = Db::raw("like '%$check_code%'");
+        $where[]=['a.check_code',"like","%$check_code%"];
+    }
+    $wsm_code = isset($this->post['wsm_code']) && $this->post['wsm_code'] !== "" ? trim($this->post['wsm_code']) : "";
+    if ($wsm_code  !== "") {
+      //  $where['a.wsm_code'] =  Db::raw("like '%$wsm_code%'");
+        $where[]=['a.wsm_code',"like","%$wsm_code%"];
+    }
+    $apply_name = isset($this->post['apply_name']) && $this->post['apply_name'] !== "" ? trim($this->post['apply_name']) : "";
+    if ($apply_name !== "") {
+     //   $where['a.apply_name'] = $apply_name;
+        $where[]=['a.apply_name',"like","%$apply_name%"];
+    }
+    $type = isset($this->post['type']) && $this->post['type'] !== "" ? trim($this->post['type']) : "";
+    if ($type !== "") {
+       // $where['a.type'] = $type;
+        $where[]=['a.type',"=",$type];
+    }
+    $apply_id = isset($this->post['apply_id']) && $this->post['apply_id'] !== "" ? intval($this->post['apply_id']) : "";
+    if ($apply_id!== "") {
+       // $where['a.apply_id'] = $apply_id;
+        $where[]=['a.apply_id',"=",$apply_id];
+    }
+    $status= isset($this->post['status']) && $this->post['status'] !== "" ? intval($this->post['status']) : "";
+    if ($status !== "") {
+       // $where['a.status '] = $status;
+        $where[]=['a.status',"=",$status];
+    }
+    $companyNo = isset($this->post['companyNo']) && $this->post['companyNo'] !== "" ? trim($this->post['companyNo']) : "";
+    if ($companyNo !== "") {
+        $condition[]=["a.companyNo ","=",$companyNo ];
+    }
+
+    $role = $this->checkDataShare();
+    if (!empty($role[DataGroupModel::$type_全部])) $where[] = ['a.apply_id', 'in', $role[DataGroupModel::$type_全部]];
+
+    $count = Db::name('good_check')
+        ->alias('a')
+        ->join("warehouse_info b","a.wsm_code = b.wsm_code","left")
+        ->join("supplier v","v.code=b.supplierNo","left")
+        ->where($where)
+        ->count();
+    $total = ceil($count / $size);
+    $page = $page <= $total ? $page : $total;
+    $list = Db::name('good_check')
+        ->alias('a')
+        ->join("warehouse_info b","a.wsm_code = b.wsm_code","left")
+        ->join("supplier v","v.code=b.supplierNo","left")
+        ->field("a.status,a.apply_id,a.apply_name,a.type,a.addtime,a.wsm_code,a.check_code,b.name,a.id,v.name as 'caname',v.code")
+        ->where($where)
+        ->page($page,$size)
+        ->order("a.id desc")
+        ->select()
+        ->toArray();
+    $data=[];
+    foreach ($list as $key=>$value){
+        $value['rename'] ='';
+        if($value['apply_id']!=0){
+            $depart = Db::name("depart_user")->alias("a")->leftJoin("company_item b","a.itemid = b.id")->where(['a.uid'=>$value['apply_id'],'a.is_del'=>0])
+                ->column('b.name');
+           // var_dump(Db::name("depart_user")->getLastSql());
+            $value['rename'] =implode(",",$depart);
+        }
+        //是否具有编辑权限
+        $value['is_allow_update'] = 0;
+        if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+        $data[] = $value;
+    }
+    return app_show(0,"获取成功",['count'=>$count,'list'=>$data]);
 
 	    }
 	public function goodlist(){

+ 29 - 11
app/admin/controller/Consult.php

@@ -3,6 +3,7 @@
 namespace app\admin\controller;
 
 use app\admin\model\ActionLog;
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\ProcessOrder;
 use think\App;
 use think\facade\Db;
@@ -63,10 +64,13 @@ class Consult extends Base
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["b.createrid", 'in', get_company_item_user_by_name($company_name)];
 
-        $role=$this->checkRole();
-        if(!empty($role['write'])){
-            $where[]=["b.createrid","in",$role['write']];
-        }
+//        $role=$this->checkRole();
+//        if(!empty($role['write'])){
+//            $where[]=["b.createrid","in",$role['write']];
+//        }
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ["b.createrid", "in", $role[DataGroupModel::$type_全部]];
+
 //        if(!empty($role['platform']) ){
 //            $where[]=["b.platform_code","in",$role['platform']];
 //        }
@@ -98,6 +102,9 @@ class Consult extends Base
             }
             $value['metal_name']=isset($value['metal_id'])&& $value['metal_id']!=0?$this->noble[$value['metal_id']]:"";
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['createrid'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
             $data[]=$value;
         }
         return app_show(0,"获取成功",['count'=>$count,'list'=>$data]);
@@ -2063,8 +2070,7 @@ class Consult extends Base
 
         $projectNo = isset($this->post['projectNo']) && $this->post['projectNo'] !== "" ? trim($this->post['projectNo']) : "";
         if ($projectNo !== "") {
-            $zxlist = Db::name("consult_order")->where(["projectNo"=>$projectNo,"is_del"=>0,"is_project"=>1])->column
-            ("zxNo");
+            $zxlist = Db::name("consult_order")->where(["projectNo"=>$projectNo,"is_del"=>0,"is_project"=>1])->column("zxNo");
             $where[] = ['bo.zxNo','in',$zxlist];
         }
         $pgNo = isset($this->post['pgNo']) && $this->post['pgNo'] !== "" ? trim($this->post['pgNo']) : "";
@@ -2083,12 +2089,19 @@ class Consult extends Base
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["bo.createrid", 'in', get_company_item_user_by_name($company_name)];
 
-        $role=$this->checkRole();
-        if(!empty($role['write'])){
-            $where[]=["bo.createrid","in",$role['write']];
-        }
+//        $role=$this->checkRole();
+//        if(!empty($role['write'])){
+//            $where[]=["bo.createrid","in",$role['write']];
+//        }
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ['bo.createrid', 'in', $role[DataGroupModel::$type_全部]];
+
+        $count=Db::name("bargain_order")
+            ->alias('bo')
+            ->leftJoin("depart_user u", "u.uid=bo.createrid AND u.is_del=0")
+            ->where($where)
+            ->count();
 
-        $count=Db::name("bargain_order")->alias('bo')->leftJoin("depart_user u", "u.uid=bo.createrid AND u.is_del=0")->where($where)->count();
         $total = ceil($count / $size);
         $page = $page >= $total ? $total : $page;
         $list = Db::name('bargain_order')
@@ -2145,6 +2158,11 @@ class Consult extends Base
 
             $value['specinfo'] = isset($bidinfos['specinfo'])&&$bidinfos['specinfo']!=""?json_decode($bidinfos['specinfo'],true):[];
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['createrid'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[]=$value;
         }
 

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

@@ -0,0 +1,267 @@
+<?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' => $param['id']])
+                ->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']] . '用户组成功');
+        }
+
+    }
+
+
+}

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

@@ -0,0 +1,214 @@
+<?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']] . '共享规则失败');
+
+    }
+
+
+}

+ 38 - 29
app/admin/controller/Good.php

@@ -3,6 +3,7 @@
 
 namespace app\admin\controller;
 
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\GoodLog;
 use think\App;
 use think\db\Raw;
@@ -51,18 +52,15 @@ class Good extends Base
         if($end!==""){
             $where[]=['b.addtime',"<",date('Y-m-d H:i:s',strtotime($end)+24*3600)];
         }
-        $is_stock = isset($this->post['is_stock']) && $this->post['is_stock'] !=="" ? intval($this->post['is_stock'])
-            :"";
+        $is_stock = isset($this->post['is_stock']) && $this->post['is_stock'] !=="" ? intval($this->post['is_stock']) :"";
         if($is_stock!==""){
             $where[]=['a.is_stock',"=",$is_stock];
         }
-        $good_type = isset($this->post['good_type']) && $this->post['good_type'] !=="" ? intval($this->post['good_type'])
-            :"";
+        $good_type = isset($this->post['good_type']) && $this->post['good_type'] !=="" ? intval($this->post['good_type']) :"";
         if($good_type!==""){
             $where[]=['a.good_type',"=",$good_type];
         }
-        $supplierNo = isset($this->post['supplierNo']) && $this->post['supplierNo'] !=="" ? trim($this->post['supplierNo'])
-            :"";
+        $supplierNo = isset($this->post['supplierNo']) && $this->post['supplierNo'] !=="" ? trim($this->post['supplierNo']) :"";
         if($supplierNo!==""){
             $where[]=['a.supplierNo',"like","%$supplierNo%"];
         }
@@ -82,39 +80,37 @@ class Good extends Base
         if($createrid!==""){
             $where[]=['a.createrid',"=",$createrid];
         }
-        $status = isset($this->post['status']) && $this->post['status'] !=="" ? intval($this->post['status'])
-            :"";
+        $status = isset($this->post['status']) && $this->post['status'] !=="" ? intval($this->post['status']) :"";
         if($status!==""){
             $where[]=['a.status',"=",$status];
         }
-        $platform_code = isset($this->post['platform_code']) && $this->post['platform_code'] !=="" ? trim($this->post['platform_code'])
-            :"";
+        $platform_code = isset($this->post['platform_code']) && $this->post['platform_code'] !=="" ? trim($this->post['platform_code']) :"";
         if($platform_code!==""){
             //$platform = Db::name("good_platform")->where(["platform_code"=>$platform_code,"is_del"=>0])->column
             //("spuCode");
             $where[]=["b.platform_code","=",$platform_code];
         }
-        $plat_code = isset($this->post['plat_code']) && $this->post['plat_code'] !=="" ? trim($this->post['plat_code'])
-            :"";
+        $plat_code = isset($this->post['plat_code']) && $this->post['plat_code'] !=="" ? trim($this->post['plat_code']) :"";
         if($plat_code!==""){
             $where[]=["b.plat_code","like","%$plat_code%"];
         }
-        $exam_status = isset($this->post['exam_status']) && $this->post['exam_status'] !=="" ? intval($this->post['exam_status'])
-            :"";
+        $exam_status = isset($this->post['exam_status']) && $this->post['exam_status'] !=="" ? intval($this->post['exam_status']) :"";
         if($exam_status!==""){
             $where[]=['b.exam_status',"=",$exam_status];
         }
-        $brand_id = isset($this->post['brand_id']) && $this->post['brand_id'] !=="" ? intval($this->post['brand_id'])
-            :"";
+        $brand_id = isset($this->post['brand_id']) && $this->post['brand_id'] !=="" ? intval($this->post['brand_id']) :"";
         if($brand_id!==""){
             $where[]=['a.brand_id',"=",$brand_id];
         }
-        $role=$this->checkRole();
-        if(!empty($role['write']) ){
-            $where[]=["b.createrid","in",$role['write']];
-        }
+//        $role=$this->checkRole();
+//        if(!empty($role['write']) ){
+//            $where[]=["a.createrid","in",$role['write']];
+//        }
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ['a.createrid', 'in', $role[DataGroupModel::$type_全部]];
+
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
-        if ($company_name !== "") $where[] = ["a.createrid", 'in', get_company_item_user_by_name($company_name)];
+        if ($company_name !== "") $where[] = ["b.createrid", 'in', get_company_item_user_by_name($company_name)];
 
 //        if(!empty($role['platform']) ){
 //            $where[]=["b.platform_code","in",$role['platform']];
@@ -182,6 +178,11 @@ class Good extends Base
             $value['specinfo']=$speclist;
             $value['noble_name']=isset($value['noble_metal'])&&$value['noble_metal']!=0?$this->noble[$value['noble_metal']] :"";
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['createrid'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[]=$value;
         }
         return app_show(0,"获取成功",['list'=>$data,'count'=>$count]);
@@ -230,8 +231,11 @@ class Good extends Base
         if ($param['plat_code'] !== '') $where[] = ["b.plat_code", "like", '%' . $param['plat_code'] . '%'];
         if ($param['exam_status'] !== '') $where[] = ['b.exam_status', "=", $param['exam_status']];
         if ($param['brand_id'] !== "") $where[] = ['a.brand_id', "=", $param['brand_id']];
-        $role = $this->checkRole();
-        if (!empty($role['write'])) $where[] = ["b.createrid", "in", $role['write']];
+//        $role = $this->checkRole();
+//        if (!empty($role['write'])) $where[] = ["a.createrid", "in", $role['write']];
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ['a.createrid', 'in', $role[DataGroupModel::$type_全部]];
+
         if ($param['company_name'] !== '') $where[] = ["a.createrid", 'in', get_company_item_user_by_name($param['company_name'])];
 
         $count = Db::name('platform_youzan')
@@ -288,6 +292,11 @@ class Good extends Base
             $value['specinfo'] = $speclist;
             $value['noble_name'] = isset($value['noble_metal']) && $value['noble_metal'] != 0 ? $this->noble[$value['noble_metal']] : "";
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['createrid'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[] = $value;
         }
         return app_show(0, "获取成功", ['list' => $data, 'count' => $count]);
@@ -426,12 +435,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,"未找到数据");

+ 12 - 2
app/admin/controller/GoodOfflineLog.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller;
 
+use app\admin\model\DataGroup as DataGroupModel;
 use think\facade\Db;
 use think\facade\Validate;
 
@@ -18,14 +19,23 @@ class GoodOfflineLog extends Base
         $where = [];
         if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['addtime', 'between', [$param['start_date'], $param['end_date']]];
         if ($param['creater'] != '') $where[] = ['creater', 'like', '%' . $param['creater'] . '%'];
-        if ($param['spuCode'] != '') $where[] = ['spuCode', 'like', '%' . $param['spuCode'] . '%'];
+		if ($param['spuCode'] != '') $where[] = ['spuCode', 'like', '%' . $param['spuCode'] . '%'];
         if ($param['good_name'] != '') $where[] = ['good_name', 'like', '%' . $param['good_name'] . '%'];
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ["createrid", "in", $role[DataGroupModel::$type_全部]];
+
+
+
         $count = Db::name('good_offline_log')->where($where)->count('id');
         $list = Db::name('good_offline_log')
-            ->field('id,spuCode,good_name,creater,addtime')
+            ->field('id,spuCode,good_name,creater,addtime,createrid')
             ->where($where)
             ->order('addtime', 'desc')
             ->page($param['page'], $param['size'])
+            ->append(['is_allow_update'])
+            ->withAttr('is_allow_update', function ($val, $data) use ($role) {
+                return (in_array($this->roleid, [1, 33]) || in_array($data['createrid'], $role[DataGroupModel::$type_可编辑])) ? 1 : 0; //是否具有编辑权限
+            })
             ->select()
             ->toArray();
 

+ 10 - 8
app/admin/controller/Goodup.php

@@ -4,6 +4,7 @@ namespace app\admin\controller;
 
 use app\admin\model\ActionLog;
 use app\admin\model\ChangeLog;
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\ProcessOrder;
 use app\youzan\model\PlatformYouzan;
 use think\App;
@@ -122,7 +123,7 @@ class Goodup extends Base
 //        if(empty($apply_id)||$apply_id['code']!=0){
 //            return error_show(102,"申请人数据不存在");
 //        }
-    //    $rm= isset($apply_id["data"]['id']) ?  $apply_id["data"]['id'] : "";
+//        $rm= isset($apply_id["data"]['id']) ?  $apply_id["data"]['id'] : "";
 //        if($rm!=''){
 //            $useinfo = Db::name("user_role")->where(['uid'=>$rm,"status"=>1,"is_del"=>0])->find();
 //            if($useinfo==false){
@@ -133,16 +134,13 @@ class Goodup extends Base
 //                $where[]=['gb.createrid', "=" ,$rm];
 //            }
 //        }
-        $role=$this->checkRole();
-        $wheror=[];
-        if(!empty($role['write'])){
-            $wheror[]=["gb.chargerid","in",$role['write']];
-            $wheror[]=["gb.createrid","=",$this->uid];
-        }
+//        $role=$this->checkRole();
+        $role = $this->checkDataShare();//取负责人字段
+        if(!empty($role[DataGroupModel::$type_全部]))  $where[]=["gb.chargerid","in",$role[DataGroupModel::$type_全部]];
+
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["gb.createrid", 'in', get_company_item_user_by_name($company_name)];
 
-
         $count = Db::name('good_basic')->alias('gb')->where($where)->where(function ($Query)use($wheror){
 			return $Query->whereOr($wheror);
         })->count();
@@ -193,6 +191,10 @@ class Goodup extends Base
 
             $value['has_account'] = (int)isset($account[$value['supplierNo']]);
 
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['chargerid'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[] = $value;
         }
         return app_show(0,"获取成功",['list'=>$data,'count'=>$count]);

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

@@ -4,6 +4,7 @@
 namespace app\admin\controller;
 
 use app\admin\model\ActionLog;
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\GoodLog;
 use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use think\App;
@@ -64,12 +65,14 @@ class Orderback extends Base
         if($end!==""){
             $where[]=['addtime',"<=", $end];
         }
-        $role=$this->checkRole();
         $condition='';
-        if(!empty($role['write']) && $this->uid!=""){
-            // $where[]=["a.apply_id","in",$role['write']];
-            $condition .="cgderid = {$this->uid} or apply_id in (".implode(',',$role['write']).") or person_id={$this->uid}";
-        }
+//        $role=$this->checkRole();
+//        if(!empty($role['write']) && $this->uid!=""){
+//            // $where[]=["a.apply_id","in",$role['write']];
+//            $condition .="cgderid = {$this->uid} or apply_id in (".implode(',',$role['write']).")";
+//        }
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $condition .= "cgderid = {$this->uid} or apply_id in (" . implode(',', $role[DataGroupModel::$type_全部]) . ")";
 //        if(!empty($role['platform']) ){
 //            $where[]=["platform_id","in",$role['platform']];
 //        }
@@ -96,6 +99,11 @@ class Orderback extends Base
             }
             $inorder= Db::name("order_backinfo")->where(['thNo'=>$value['thNo'],"is_del"=>0])->select();
             $value['child']=empty($inorder)? [] : $inorder;
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[]=$value;
         }
         return app_show(0,"获取成功",["list"=>$data ,"count"=>$count]);

+ 13 - 4
app/admin/controller/Project.php

@@ -3,6 +3,7 @@
 
 namespace app\admin\controller;
 use app\admin\model\ActionLog;
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\ProcessOrder;
 use think\App;
 use think\facade\Db;
@@ -361,10 +362,13 @@ class Project extends Base
         $company_name = isset($this->post['company_name'])&&$this->post['company_name']!=="" ? trim($this->post['company_name']):"";
         if($company_name!=='') $where[] = ["p.createrid", 'in', get_company_item_user_by_name($company_name)];
 
-        $role=$this->checkRole();
-        if(!empty($role['write'])){
-            $where[]=["p.createrid","in",$role['write']];
-        }
+//        $role=$this->checkRole();
+//        if(!empty($role['write'])){
+//            $where[]=["p.createrid","in",$role['write']];
+//        }
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ['p.createrid', 'in', $role[DataGroupModel::$type_全部]];
+
 //        if(!empty($role['platform'])){
 //            $where[]=["p.platform_id","in",$role['platform']];
 //        }
@@ -389,6 +393,11 @@ class Project extends Base
             $company = Db::name("business")->where(["companyNo"=>$value['companyNo']])->find();
             $value['company'] = isset($company['company'])?$company['company']:"";
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['createrid'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[]=$value;
         }
         return app_show(0,"获取成功",['list'=>$data,'count'=>$count]);

+ 27 - 6
app/admin/controller/Purch.php

@@ -5,6 +5,7 @@ namespace app\admin\controller;
 
 
 use app\admin\model\ActionLog;
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\ProcessOrder;
 use think\App;
 use think\Exception;
@@ -25,7 +26,7 @@ class Purch extends Base
     public function  list(){
         $page = isset($this->post['page']) && $this->post['page'] !=="" ? intval($this->post['page']):"1";
         $size = isset($this->post['size']) && $this->post['size'] !=="" ? intval($this->post['size']):"10";
-        $where = [['po.is_del', "=", 0]];//不显示类型为5即订单导入生成的采购单
+        $where = [['po.is_del', "=", 0]];
         $bkcode = isset($this->post['bk_code']) && $this->post['bk_code']!="" ? trim($this->post['bk_code']):"";
         if($bkcode!=""){
             $where[]=['po.bkcode',"like", "%{$bkcode}%"];
@@ -108,20 +109,24 @@ class Purch extends Base
             //$where['lasttime'] = Db::raw(" <= '{$last_end}'");
             $where[]=['on.orderCode',"like", '%'.$orderCode.'%'];
         }
-        $role=$this->checkRole();
-        $whereor=[];
+		$whereor=[];
         if(!empty($role['write'])){
 //            $whereor[]=["po.cgder_id","in",$role['write']];
 //            $whereor[]=["sip.personid","=",$this->uid];
-            $whereor[]=["sip.personid","in",$role['write']];
+            $whereor[]=["sip.personid","in",$role['write']];//最后的筛选条件
 //            $whereor[]=["po.cgder_id","=",$this->uid];
         }
+		$role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ["sip.personid", "in", $role[DataGroupModel::$type_全部]];
+
+
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["po.cgder_id", 'in', get_company_item_user_by_name($company_name)];
 
 //        if(!empty($role['platform']) ){
 //            $where[]=["po.platform_id","in",$role['platform']];
 //        }
+
         $count = Db::name("purchease_order")
             ->alias('po')
             ->leftJoin('order_num on', 'on.cgdNo=po.cgdNo')
@@ -201,6 +206,11 @@ class Purch extends Base
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
 
             $value['has_account'] = (int)isset($account[$value['supplierNo']]);
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['cgder_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[]=$value;
         }
         return app_show(0,"获取成功",["list"=>$data ,"count"=>$count]);
@@ -895,8 +905,14 @@ class Purch extends Base
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["a.apply_id", 'in', get_company_item_user_by_name($company_name)];
 
-        $count = Db::name('purchease_diff')->alias('a')->join("good b","b.spuCode=a.good_code","left")
-            ->where($where)->count();
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ['a.apply_id', 'in', $role[DataGroupModel::$type_全部]];
+
+        $count = Db::name('purchease_diff')
+            ->alias('a')
+            ->join("good b","b.spuCode=a.good_code","left")
+            ->where($where)
+            ->count();
         $total = ceil($count/$size);
         $page = $page >= $total ? $total : $page;
         $list = Db::name('purchease_diff')
@@ -912,6 +928,11 @@ class Purch extends Base
         foreach ($list as $value){
             $value['can']= isset($value['cat_id']) && $value['cat_id'] !=0 ? made($value['cat_id']):[];
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[]=$value;
         }
         return app_show(0,"获取成功",['list'=>$data,'count'=>$count]);

+ 43 - 14
app/admin/controller/Purchin.php

@@ -4,6 +4,7 @@ namespace app\admin\controller;
 use app\abutment\model\SupplierRelationUser as SupplierRelationUserModel;
 use app\abutment\model\SupplierUser as SupplierUserModel;
 use app\admin\model\ActionLog;
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\GoodLog;
 use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use app\BaseController;
@@ -83,20 +84,27 @@ class Purchin extends Base
                 "is_del"=>0,"supplierNo"=>$supplierNo])->column("wsm_code");
             $where[]=['a.wsm_code',"in",$wsmcode];
         }
-        $role=$this->checkRole();
+//        $role=$this->checkRole();
         $condition="";
-        if(!empty($role['write'])&& $this->uid!=''){
-            $condition.="a.apply_id ={$this->uid} or c.contactor = {$this->uid} or sip.personid in (".implode(",",$role ['write']).")";
-        }
+//        if(!empty($role['write'])&& $this->uid!=''){
+////            $condition.=["apply_id","in",$role['write']];
+//            $condition.="a.apply_id in (".implode(",",$role['write']).") or c.contactor = {$this->uid}";
+//        }
+
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $condition.="a.apply_id in (".implode(",",$role[DataGroupModel::$type_全部]).") or c.contactor = {$this->uid}";
+
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["a.apply_id", 'in', get_company_item_user_by_name($company_name)];
 
-
-        $count = Db::name('purchease_in')->alias('a')
+        //$count = Db::name('purchease_in')->alias('a')->join("purchease_order b","b.cgdNo=a.cgdNo","left")
+        $count = Db::name('purchease_in')
+            ->alias('a')
             ->join("purchease_order b","b.cgdNo=a.cgdNo","left")
-            ->leftJoin('supplier sip', 'sip.code=b.supplierNo')
             ->leftJoin("warehouse_info c","a.wsm_code=c.wsm_code")
-            ->where($where)->where($condition)->count();
+            ->where($where)
+            ->where($condition)
+            ->count();
         $total = ceil($count/$size);
         $page = $page >= $total ? $total : $page;
         $list = Db::name('purchease_in')
@@ -161,6 +169,11 @@ class Purchin extends Base
             $value['wsm_supplierNo'] = $wsmcode['code'];
 
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[]=$value;
         }
         return app_show(0,"获取成功",['list'=>$data,'count'=>$count]);
@@ -1309,14 +1322,25 @@ class Purchin extends Base
         if($status!=""){
             $where[]= ["a.status",'=',$status];
         }
-        $count = Db::name('purchease_return')->alias('a')->join("purchease_order b","b.cgdNo=a.cgdNo","left")
-            ->where($where)->count();
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ["a.apply_id", "in", $role[DataGroupModel::$type_全部]];
+
+        $count = Db::name('purchease_return')
+            ->alias('a')
+            ->join("purchease_order b","b.cgdNo=a.cgdNo","left")
+            ->where($where)
+            ->count();
         $total = ceil($count / $size);
         $page = $page >= $total ? $total : $page;
-        $list = Db::name('purchease_return')->alias('a')->join("purchease_order b","b.cgdNo=a.cgdNo","left")
-            ->where($where)->page($page,$size)
-            ->field("a.*,b.spuCode,b.good_price,b.order_type,b.good_price,b.total_fee,b.good_name")->order("a.addtime desc")
-            ->select();
+        $list = Db::name('purchease_return')
+            ->alias('a')
+            ->join("purchease_order b","b.cgdNo=a.cgdNo","left")
+            ->where($where)
+            ->page($page,$size)
+            ->field("a.*,b.spuCode,b.good_price,b.order_type,b.good_price,b.total_fee,b.good_name")
+            ->order("a.addtime desc")
+            ->select()
+            ->toArray();
         $data=[];
         foreach ($list as $value){
             if($value['order_type']==3){
@@ -1326,6 +1350,11 @@ class Purchin extends Base
             }
             $value['can']= isset($goon['cat_id']) && $goon['cat_id'] !=0 ? made($goon['cat_id']):[];
             $value['return_fee']= round($value['good_price']*$value['return_num'],2);
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[]=$value;
         }
         return app_show(0,"获取成功",['list'=>$data,'count'=>$count]);

+ 16 - 9
app/admin/controller/Reorder.php

@@ -3,6 +3,7 @@
 
 namespace app\admin\controller;
 
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\GoodLog;
 use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use think\Exception;
@@ -409,13 +410,11 @@ class Reorder extends Base
         if($status!==""){
             $where[]=['sr.status',"=", $status];
         }
-        $orderCode = isset($this->post['orderCode']) && $this->post['orderCode']!="" ? trim($this->post['orderCode'])
-            :"";
+        $orderCode = isset($this->post['orderCode']) && $this->post['orderCode']!="" ? trim($this->post['orderCode']) :"";
         if($orderCode!=""){
             $where[]=['sr.orderCode',"like", "%{$orderCode}%"];
         }
-        $apply_name = isset($this->post['apply_name']) && $this->post['apply_name']!="" ? trim($this->post['apply_name'])
-            :"";
+        $apply_name = isset($this->post['apply_name']) && $this->post['apply_name']!="" ? trim($this->post['apply_name']) :"";
         if($apply_name!=""){
             $where[]=['sr.apply_name',"like", "%{$apply_name}%"];
         }
@@ -427,12 +426,15 @@ class Reorder extends Base
         if($end!==""){
             $where[]=['sr.addtime',"<=", $end.' 23:59:59'];
         }
-        $role=$this->checkRole();
         $condition='';
-        if(!empty($role['write']) && $this->uid!=""){
-            // $where[]=["sr.apply_id","in",$role['write']];
-            $condition .="sr.cgderid = {$this->uid} or sr.apply_id in (".implode(',',$role['write']).") or sr.person_id={$this->uid}";
-        }
+//        $role=$this->checkRole();
+//        if(!empty($role['write']) && $this->uid!=""){
+//            // $where[]=["sr.apply_id","in",$role['write']];
+//            $condition .="sr.cgderid = {$this->uid} or sr.apply_id in (".implode(',',$role['write']).")";
+//        }
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $condition .= "sr.cgderid = {$this->uid} or sr.apply_id in (" . implode(',', $role[DataGroupModel::$type_全部]) . ")";
+
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["sr.apply_id", 'in', get_company_item_user_by_name($company_name)];
 
@@ -461,6 +463,11 @@ class Reorder extends Base
             $value['return_total'] =$value['sale_price']*$value['num'] ;
             $value['total_num'] =$order['good_num'] ;
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[]=$value ;
         }
         return app_show(0,"获取成功",['list'=>$data,"count"=>$count]);

+ 19 - 6
app/admin/controller/Resign.php

@@ -6,6 +6,7 @@
 namespace app\admin\controller;
 
 use app\admin\model\ActionLog;
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\GoodLog;
 use app\admin\model\ProcessOrder;
 use think\facade\Cache;
@@ -72,12 +73,14 @@ class Resign extends Base
            // $where['p.addtime'] = Db::Raw("<= '{$end}'");
             $where[]=['p.addtime',"<=",$end];
         }
-        $role=$this->checkRole();
+//        $role=$this->checkRole();
         $condition='';
-        if(!empty($role['write']) && $this->uid!=""){
-            // $where[]=["a.apply_id","in",$role['write']];
-            $condition .="p.cgderid = {$this->uid} or p.apply_id in (".implode(',',$role['write']).")";
-        }
+//        if(!empty($role['write']) && $this->uid!=""){
+//            // $where[]=["a.apply_id","in",$role['write']];
+//            $condition .="p.cgderid = {$this->uid} or p.apply_id in (".implode(',',$role['write']).")";
+//        }
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $condition .="p.cgderid = {$this->uid} or p.apply_id in (".implode(',',$role[DataGroupModel::$type_全部]).")";
 
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["p.apply_id", 'in', get_company_item_user_by_name($company_name)];
@@ -85,7 +88,12 @@ class Resign extends Base
 //        if(!empty($role['platform']) ){
 //            $where[]=["p.platform_id","in",$role['platform']];
 //        }
-        $count=Db::name("purchease")->alias('p')->leftJoin("depart_user u", "u.uid=p.apply_id AND u.is_del=0")->where($where)->where($condition)->count();
+        $count=Db::name("purchease")
+            ->alias('p')
+            ->leftJoin("depart_user u", "u.uid=p.apply_id AND u.is_del=0")
+            ->where($where)
+            ->where($condition)
+            ->count();
         $total = ceil($count/$size);
         $page = $page >= $total ? $total : $page;
         $list = Db::name("purchease")
@@ -115,6 +123,11 @@ class Resign extends Base
                 $value['file_name'] =substr($file,0,strripos($file,"_"));
             }
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[]=$value;
         }
         return app_show(0,"获取成功",["list"=>$data,"count"=>$count]);

+ 15 - 1
app/admin/controller/Resigninfo.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller;
 
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\ProcessOrder;
 use app\admin\model\ProcessWait;
 use app\BaseController;
@@ -54,10 +55,23 @@ class Resigninfo extends Base
            // $where = ["addtime"=>Db::raw("<= '{$end}'")];
             $where[]= ["addtime",'<=',$end];
         }
+
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ["hand_uid", "in", $role[DataGroupModel::$type_全部]];
+
         $count = Db::name('resign_info')->where($where)->count();
         $total = ceil($count/$size);
         $page = $page >= $total ? $total : $page;
-        $list = Db::name('resign_info')->where($where)->order("addtime desc")->page($page,$size)->select();
+        $list = Db::name('resign_info')
+            ->where($where)
+            ->order("addtime desc")
+            ->page($page,$size)
+            ->append(['is_allow_update'])
+            ->withAttr('is_allow_update', function ($val, $data) use ($role) {
+                return (in_array($this->roleid, [1, 33]) || in_array($data['hand_uid'], $role[DataGroupModel::$type_可编辑])) ? 1 : 0; //是否具有编辑权限
+            })
+            ->select()
+            ->toArray();
         return app_show(0,"获取成功",['list'=>$list,'count'=>$count]);
     }
     public function create(){

+ 1 - 1
app/admin/controller/Role.php

@@ -457,7 +457,7 @@ class Role extends BaseController
 
         $action_data = Db::name("role_process")
             ->where('role_id', $roleid)
-            ->value('action_data');
+            ->value('action_data', []);
 
         $data = PModel::where(['is_del' => PModel::$is_del_normal, 'status' => PModel::$status_normal])
             ->append(['child'])

+ 52 - 16
app/admin/controller/Sale.php

@@ -4,6 +4,7 @@ namespace app\admin\controller;
 
 use app\abutment\model\SupplierRelationUser;
 use app\abutment\model\SupplierUser;
+use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\GoodLog;
 use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use app\admin\model\SaleInfo;use Exception;
@@ -2130,16 +2131,24 @@ class Sale extends Base
             $end .= " 23:59:59";
             $where[] = ["s.addtime", '<=', $end];
         }
-        $role = $this->checkRole();
-        if (!empty($role['write'])) {
-            $where[] = ["s.apply_id", "in", $role['write']];
-        }
+//        $role = $this->checkRole();
+//        if (!empty($role['write'])) {
+//            $where[] = ["s.apply_id", "in", $role['write']];
+//        }
+
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ['s.apply_id', 'in', $role[DataGroupModel::$type_全部]];
+
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["s.apply_id", 'in', get_company_item_user_by_name($company_name)];
 //        if(!empty($role['platform']) ){
 //            $where[]=["s.platform_id","in",$role['platform']];
 //        }
-        $count = Db::name('sale')->alias('s')->where($where)->count();
+        $count = Db::name('sale')
+            ->alias('s')
+            ->leftJoin("depart_user u", "u.uid=s.apply_id AND u.is_del=0")->where($where)
+            ->where($where)
+            ->count();
         $total = ceil($count / $size);
         $page = $page >= $total ? $total : $page;
         $list = Db::name('sale')
@@ -2198,6 +2207,11 @@ class Sale extends Base
             $value['send_num'] -= $value['th_num'];
             $value['total_price'] = round($value['total_price'] - $value['th_fee'], 2);
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[] = $value;
         }
         return app_show(0, "获取成功", ['list' => $data, 'count' => $count]);
@@ -3131,20 +3145,29 @@ class Sale extends Base
 //        if(!empty($role['write'])){
 //            $where[]=["apply_id","in",$role['write']];
 //        }
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $where[] = ['c.apply_id', 'in', $role[DataGroupModel::$type_全部]];
+
 //        if(!empty($role['platform']) ){
 //            $where[]=["c.platform_id","in",$role['platform']];
 //        }
-        $count = Db::name('sale_diff')->alias('a')
+        $count = Db::name('sale_diff')
+            ->alias('a')
             ->join("sale c", "c.orderCode=a.orderCode", "left")
             ->join("customer_info v", "v.companyNo=c.customer_code", "left")
             ->where($where)->count();
         $total = ceil($count / $size);
         $page = $page >= $total ? intval($total) : $page;
-        $list = Db::name('sale_diff')->alias('a')
+        $list = Db::name('sale_diff')
+            ->alias('a')
+            ->field("a.*,c.customer_code,v.companyName,c.skuCode,c.order_type,c.supplierNo,c.apply_id")
             ->join("sale c", "c.orderCode=a.orderCode", "left")
             ->join("customer_info v", "v.companyNo=c.customer_code", "left")
-            ->where($where)->page($page, $size)->field("a.*,c.customer_code,v.companyName,c.skuCode,c.order_type,c.supplierNo")
-            ->order("a.addtime desc")->select();
+            ->where($where)
+            ->page($page, $size)
+            ->order("a.addtime desc")
+            ->select()
+            ->toArray();
 
         $data = [];
         foreach ($list as $value) {
@@ -3158,6 +3181,11 @@ class Sale extends Base
             $wsm = Db::name("business")->where(['companyNo' => $value['supplierNo']])->find();
             $value['supplierNo'] = isset($wsm['companyNo']) ? $wsm['companyNo'] : "";
             $value['supplierName'] = isset($wsm['company']) ? $wsm['company'] : "";
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[] = $value;
         }
         return app_show(0, "获取成功", ['list' => $data, 'count' => $count]);
@@ -3419,14 +3447,17 @@ class Sale extends Base
         if ($cgdNo != "") {
             $where[] = ["os.cgdNo", 'like', '%' . $cgdNo . '%'];
         }
-        $role = $this->checkRole();
+//        $role = $this->checkRole();
         $condition = '';
-        if (!empty($role['write']) && $this->uid != "") {
-            // $where[]=["a.apply_id","in",$role['write']];
-            $cgdArr =\think\facade\Config::get("app");
-        	$cgdids =implode(",",$cgdArr['wsm_cgder_role']);
-            $condition .= " (b.is_stock=1 and {$this->roleid} in ($cgdids)) or (b.is_stock=0 and wpo.cgder_id = {$this->uid}) or a.apply_id in (" . implode(',', $role['write']) . ")";
-        }
+//        if (!empty($role['write']) && $this->uid != "") {
+//            // $where[]=["a.apply_id","in",$role['write']];
+//            $condition .= " (b.is_stock=1 and n.contactor = {$this->uid}) or (b.is_stock=0 and wpo.cgder_id = {$this->uid}) or a.apply_id in (" . implode(',',
+//                    $role['write']) . ")";
+//        }
+
+        $role = $this->checkDataShare();
+        if (!empty($role[DataGroupModel::$type_全部])) $condition .= " (b.is_stock=1 and n.contactor = {$this->uid}) or (b.is_stock=0 and wpo.cgder_id = {$this->uid}) or a.apply_id in (" . implode(',', $role[DataGroupModel::$type_全部]) . ")";
+
 //        if(!empty($role['platform']) ){
 //            $where[]=["b.platform_id","in",$role['platform']];
 //        }
@@ -3505,6 +3536,11 @@ class Sale extends Base
             $value['can'] = isset($goon['cat_id']) && $goon['cat_id'] != 0 ? made($goon['cat_id']) : [];
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
             $value['sendtime'] = $value['status'] < 2 ? '' : $value['sendtime'];
+
+            //是否具有编辑权限
+            $value['is_allow_update'] = 0;
+            if (in_array($this->roleid, [1, 33]) || in_array($value['apply_id'], $role[DataGroupModel::$type_可编辑])) $value['is_allow_update'] = 1;
+
             $data[] = $value;
         }
         return app_show(0, "获取成功", ['list' => $data, 'count' => $count]);

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

@@ -0,0 +1,27 @@
+<?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_全部 = 0;//全部(这个值不在数据表里体现,只在业务逻辑处理中作为配置项)
+
+    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读写
+
+
+}

+ 17 - 2
app/admin/route/app.php

@@ -383,7 +383,7 @@ Route::rule('goodupeditladder','admin/Goodup/editladder');
 Route::rule('goodexam','admin/Goodup/exam');
 Route::rule('goodinfo','admin/Good/info');//商品详情
 Route::rule('againonline','admin/Goodup/againOnline');
-Route::rule('goodupcopy','admin/Goodup/copy');
+Route::rule('goodupcopy','admin/Goodup/copy');//复制商品成本
 Route::rule('goodupedit','admin/Goodup/edit');
 Route::rule('goodupprice','admin/Goodup/checkPrice');
 Route::rule('goodupreject','admin/Goodup/rejectGoodToAgainExamine');
@@ -616,4 +616,19 @@ route::rule('readAccount', 'admin/Account/readAccount');//获取供应商账号
 route::rule('addAccount', 'admin/Account/addAccount');//添加供应商账号
 route::rule('editAccount', 'admin/Account/editAccount');//修改供应商账号
 route::rule('statusAccount', 'admin/Account/statusAccount');//修改供应商账号状态
-route::rule('deleteAccount', 'admin/Account/deleteAccount');//删除供应商账号
+route::rule('deleteAccount', 'admin/Account/deleteAccount');//删除供应商账号
+
+//用户组和数据共享
+route::rule('getDataGroupList', 'admin/DataGroup/getDataGroupList');//获取用户组列表
+route::rule('addDataGroup', 'admin/DataGroup/addDataGroup');//添加用户组
+route::rule('getDataGroupDetail', 'admin/DataGroup/getDataGroupDetail');//获取用户组详情
+route::rule('editDataGroup', 'admin/DataGroup/editDataGroup');//编辑用户组详情
+route::rule('deleteDataGroup', 'admin/DataGroup/deleteDataGroup');//删除用户组
+route::rule('statusDataGroup', 'admin/DataGroup/statusDataGroup');//启/禁用用户组
+
+route::rule('getDataShareList', 'admin/DataShare/getDataShareList');//获取共享规则列表
+route::rule('addDataShare', 'admin/DataShare/addDataShare');//新建共享规则
+route::rule('getDataShareDetail', 'admin/DataShare/getDataShareDetail');//获取共享规则详情
+route::rule('editDataShare', 'admin/DataShare/editDataShare');//修改共享规则
+route::rule('deleteDataShare', 'admin/DataShare/deleteDataShare');//删除共享规则
+route::rule('statusDataShare', 'admin/DataShare/statusDataShare');//启/禁用共享规则

+ 89 - 0
app/common.php

@@ -5,6 +5,8 @@ use think\facade\Config;
 use think\facade\Db;
 use think\facade\Filesystem;
 use think\helper\Str;
+use app\admin\model\DataGroup as DataGroupModel;
+use app\admin\model\DataShare as DataShareModel;
 
 // 应用公共文件
 function app_show($code=0,$message="",$data=[]){
@@ -1217,6 +1219,92 @@ if (!function_exists('checkHasAccountBySupplierNos')) {
 }
 
 
+
+//获取当前用户可查看的其他用户id
+if (!function_exists('get_group_share_uid')) {
+    function get_group_share_uid(int $uid = 0)
+    {
+        //原始数据
+        $data = [DataGroupModel::$type_可编辑 => [$uid], DataGroupModel::$type_只读 => [$uid], DataGroupModel::$type_不共享 => []];
+
+        //用户组
+        $group = Db::name('data_group_userid')
+            ->alias('a')
+            ->leftJoin('data_group b', 'b.id=a.data_group_id')
+            ->where([
+                'a.is_del' => DataGroupModel::$delete_正常,
+                'a.status' => DataGroupModel::$status_启用,
+                'a.uid' => $uid,
+                'b.is_del' => DataGroupModel::$delete_正常,
+                'b.status' => DataGroupModel::$status_启用,
+            ])->order('a.data_group_id')
+            ->column('b.type', 'a.data_group_id');
+
+        $group_user = Db::name('data_group_userid')
+            ->where([
+                'is_del' => DataGroupModel::$delete_正常,
+                'status' => DataGroupModel::$status_启用,
+            ])->whereIn('data_group_id', array_keys($group))
+            ->field('id,data_group_id,uid')
+            ->order('uid')
+            ->cursor();
+
+        foreach ($group_user as $g_u) {
+            $data[$group[$g_u['data_group_id']]][] = $g_u['uid'];
+        }
+
+        //当前请求的接口地址
+        $api = app('http')->getName() . '/' . request()->pathinfo();
+
+        $menu_id = Db::name('admin_menu')
+            ->where(['is_del' => 0, 'menu_api' => $api])
+            ->value('id', 0);
+        if ($menu_id) {
+            //共享规则
+            $share = Db::name('data_share')
+                ->field('id,type,source_uid,source_data_group_id')
+                ->where([
+                    'is_del' => DataShareModel::$delete_正常,
+                    'status' => DataShareModel::$status_启用,
+                ])
+                ->whereFindInSet('menu_ids', $menu_id)
+                ->where(function ($query) use ($uid, $group) {
+                    return $query->where('uid', $uid)->whereOr('data_group_id', 'in', array_keys($group));
+                })
+                ->cursor();
+
+            foreach ($share as $s) {
+                $source_group_uid = Db::name('data_group_userid')
+                    ->where([
+                        'is_del' => DataGroupModel::$delete_正常,
+                        'status' => DataGroupModel::$status_启用,
+                        'data_group_id' => $s['source_data_group_id'],
+                    ])->order('uid')->column('uid');
+
+                //$s['source_uid'] ? [$s['source_uid']] : []  排除默认值0
+                $data[$s['type']] = array_merge($data[$s['type']], $s['source_uid'] ? [$s['source_uid']] : [], $source_group_uid);
+            }
+        }
+
+        //离职交接权限
+//        $resign_uid = Db::name("resign_info")
+//            ->where([["hand_uid", "=", $uid], ["is_del", "=", 0], ['status', "=", 4]])
+//            ->order('resign_uid')
+//            ->column('resign_uid');
+
+//        if (!empty($resign_uid)) $data[DataGroupModel::$type_可编辑] = array_merge($data[DataGroupModel::$type_可编辑], $resign_uid);
+
+        unset($data[DataGroupModel::$type_不共享]);
+
+        $data[DataGroupModel::$type_全部] = array_merge($data[DataGroupModel::$type_可编辑], $data[DataGroupModel::$type_只读]);
+
+        sort($data[DataGroupModel::$type_全部]);
+        $data[DataGroupModel::$type_全部] = array_unique($data[DataGroupModel::$type_全部]);
+
+        return $data;
+    }
+}
+
 //获取当前操作人(待办列表)
 if (!function_exists('get_handle_user_list')) {
     //$action_process_id 节点id
@@ -1295,5 +1383,6 @@ if (!function_exists('getUserIdsByShare')) {
         }
 
         return $tmp;
+
     }
 }

+ 23 - 1
app/youzan/controller/Index.php

@@ -122,7 +122,7 @@ class Index extends Base
     public function getYzOrderList()
     {
 
-        $param = $this->request->filter('trim')->only(['tid' => '','oid' => '', 'plat_code' => '', 'orderCode' => '', 'skuCode' => '', 'platform_name' => '', 'status' => '', 'addtime_start' => '', 'addtime_end' => '', 'page' => 1, 'size' => 15], 'post');
+        $param = $this->request->filter('trim')->only(['tid' => '', 'oid' => '', 'plat_code' => '', 'orderCode' => '', 'skuCode' => '', 'platform_name' => '', 'status' => '', 'addtime_start' => '', 'addtime_end' => '', 'page' => 1, 'size' => 15], 'post');
         return Order::getYzOrderList($param);
 
     }
@@ -226,7 +226,29 @@ class Index extends Base
 
     }
 
+    //订单删除
+    public function orderDelete()
+    {
+        $param = $this->request->filter('trim')->only(['id', 'token']);
+
+        $val = Validate::rule(['id|ID' => 'require|number|gt:0', 'token' => 'require']);
+
+        if ($val->check($param)) {
+
+            $user = GetUserInfo($param['token']);
+
+            $param['uid'] = isset($user['data']['id']) ? $user['data']['id'] : 0;
+
+            $param['uname'] = isset($user['data']['nickname']) ? $user['data']['nickname'] : 0;
 
+            $res = curl_request(config('app.yz_domain') . 'api/yz_order_delete', $param);
+
+            $res = json_decode($res, true);
 
+            return app_show($res['code'], $res['message']);
+
+        } else return error_show(1005, $val->getError());
+
+    }
 
 }

+ 1 - 1
app/youzan/route/app.php

@@ -20,6 +20,6 @@ route::rule('yz_order_detail', 'youzan/Index/orderDetail');//有赞订单详情
 route::rule('yz_close_order_list', 'youzan/Index/closeOrderList');//有赞订单取消记录
 route::rule('yz_get_change_address_list', 'youzan/Index/changeAddressList');//收货地址修改记录
 route::rule('yz_order_retry', 'youzan/Index/orderRetry');//订单转单失败时,重试
-
+route::rule('yz_order_delete', 'youzan/Index/orderDelete');//有赞订单删除
 route::rule('good_off_line', 'youzan/Other/goodOffLineByYouzan');//商品下架(有赞平台操作)
 route::rule('good_delete_by_yz', 'youzan/Other/goodDeleteByYouzan');//商品删除(有赞平台操作)