硕顺crm后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

358 lines
11 KiB

<?php
namespace addons\qingdong\model;
use addons\qingdong\library\StaffAuth;
use app\admin\controller\qingdong\Base;
use app\admin\library\Auth;
use app\admin\model\AuthGroup;
use app\admin\model\AuthGroupAccess;
use app\admin\model\MemberGroup;
use app\admin\model\MemberGroupAccess;
use think\Db;
use think\Model;
use traits\model\SoftDelete;
use app\admin\model\Admin;
/**
*员工表
*/
class Staff Extends Model {
use SoftDelete;
// 表名,不含前缀
protected $name = 'qingdong_staff';
// 开启自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
protected $deleteTime = 'deletetime';
// 追加属性
protected $append = [
'group_text',
];
protected static function init()
{
self::beforeInsert(function ($row) {
$changed = $row->getChangedData();
$admin = [
'username' => $changed['mobile'],
'mobile' => $changed['mobile'],
'nickname' => $changed['name'],
'password' => $changed['password']??'',
'salt' => $changed['salt']??'',
'avatar' => $changed['img'],
'email' => $changed['email'],
'cid' => isset($changed['cid']) ? $changed['cid'] : 0,
];
if(isset($changed['admin_id']) && $changed['admin_id']){
return true;
}
$adminModel = new Admin();
//按手机号查询是否已存在手机号 存在 就不改了
if( $adminModel->where("username",'=',$changed['mobile'])->count() >0 ){
return true;
}
$result=$adminModel->validate('Admin.add')->save($admin);
if($result == false){
exception($adminModel->getError());
}
//用用户权限 不用管理员权限表了
// $row->admin_id = $adminModel->getLastInsID();
//
// $group = explode(',', $changed['group_ids']);
// foreach ($group as $value) {
// $dataset[] = ['uid' => $row->admin_id, 'group_id' => $value];
// }
// model('AuthGroupAccess')->saveAll($dataset);
return $row;
});
self::beforeUpdate(function ($row) {
$changed = $row->getChangedData();
if(!isset($row->id)){
return true;
}
$staff = self::get($row->id);
if (empty($staff->admin_id)) {
return $row;
}
//admin用户不更新
if($staff->admin_id == 1){
return true;
}
if(isset($changed['deletetime']) && $changed['deletetime']){
Admin::where(['id' => $staff->admin_id])->delete();
return true;
}
if(isset($changed['mobile']) || isset($changed['name'])
|| isset($changed['email']) || isset($changed['img']) ){
$params = [];
if(isset($changed['mobile'])){
$params['username']=$changed['mobile'];
}
if(isset($changed['name'])){
$params['nickname']=$changed['name'];
}
if(isset($changed['img'])){
$params['avatar']=$changed['img'];
}
if(isset($changed['email'])){
$params['email']=$changed['email'];
}
//如果有修改密码
if (isset($changed['password'])) {
if ($changed['password']) {
$params['password'] = $changed['password'];
$params['salt'] = $changed['salt'];
}
}
$adminModel = new Admin();
$result = $adminModel->save($params, ['id' => $staff->admin_id]);
if ($result === false) {
exception($row->getError());
}
}
if(isset($changed['group_ids'])){
// 先移除所有权限
model('AuthGroupAccess')->where('uid', $staff->admin_id)->delete();
$group = explode(',', $changed['group_ids']);
foreach ($group as $value) {
$dataset[] = ['uid' => $staff->admin_id, 'group_id' => $value];
}
model('AuthGroupAccess')->saveAll($dataset);
}
return $row;
});
}
// 图片
public function getGroupTextAttr($value, $data)
{
if(!isset($data['group_ids'])){
return '';
}
$names=AuthGroup::where(['id'=>['in',$data['group_ids']]])->column('name');
return implode(',',$names);
}
public static function info()
{
if (StaffAuth::instance()->id) {
return StaffAuth::instance();
}
$auth = new Auth();
if ($auth->isLogin() || $auth->isMemberLogin()) {
$base = new Base();
return $base->getStaff();
}
return null;
}
public function getImgAttr($value) {
if ($value) {
return cdnurl($value, true);
} else {
return $value;
}
}
public function getCreatetimeAttr($value){
return date('Y-m-d H:i:s',$value);
}
//员工业绩
public function achievement() {
return $this->belongsTo(Achievement::class, 'id', 'obj_id')->where(['type' => 3,'cid'=>CID]);
}
//团队业绩
public function teamAchievement() {
$condition['type'] = ['in',[2,4]];
$condition['cid'] = CID;
return $this->belongsTo(Achievement::class, 'id', 'obj_id')->where($condition);
}
public function department() {
return $this->belongsTo(StaffDepartment::class, 'department_id', 'id')->field('id,name as department_name')->bind('department_name')->where(['cid'=>CID]);
}
//绑定admin账号
public function admin() {
return $this->belongsTo(Admin::class, 'admin_id', 'id')->field('id,username')->where(['cid'=>CID]);
}
//角色
public function staffrole() {
return $this->hasOne(StaffRole::class, 'id', 'role')->field('id,name');
}
//上级
public function parent() {
return $this->belongsTo(Staff::class, 'parent_id', 'id')->field('id,name as parent_name')->bind('parent_name')->where(['cid'=>CID]);
}
//获取员工
public static function getList($notInIds=[]) {
$where=['status'=>1,'cid'=>CID];
if($notInIds){
$where['id']=['not in',$notInIds];
}
return self::where($where)->field('id,name')->select();
}
//包含当前角色
public static function getLowerId($l_ids,$top=true){
if(!is_array($l_ids)){
$l_ids=explode(',',$l_ids);
}
$ids=MemberGroup::where(['pid' =>['in',$l_ids]])->column('id');
if ($ids) {
$w_ids = self::getLowerId($ids,false);
$ids = array_merge($ids, $w_ids);
}else{
$ids=[];
}
if($top){
$ids=array_merge($ids,$l_ids);
}
return array_unique($ids);
}
//获取下属员工IDs
public static function getLowerStaffId()
{
$staff = self::info();
$groupIds = MemberGroupAccess::where(['uid' => $staff->id,'cid'=>CID])->column('group_id');
$role_type = StaffRole::where(['id' => $staff->role,'cid'=>CID])->value('role_type');
switch ($role_type) {
case 1://本人
$l_ids = [];
break;
case 2://本人及下属
$l_ids = self::where([
'parent_id' => $staff->id,
])->column('id');
break;
case 3://本部门
$uids = MemberGroupAccess::where(['group_id' => ['in', $groupIds]])->column('uid');
$l_ids = self::where([
'id' => ['admin_id', $uids],
'status' => 1,
// 'id' => ['neq', $staff->id]
])->column('id');
break;
case 4://仅下属部门
$groupIds = self::getLowerId($groupIds, false);
$uids = MemberGroupAccess::where(['group_id' => ['in', $groupIds]])->column('uid');
$l_ids = self::where([
'admin_id' => ['in', $uids],
'status' => 1,
// 'id' => ['neq', $staff->id]
])->column('id');
break;
case 5://本部门及下属部门
$groupIds = self::getLowerId($groupIds, true);
$uids = MemberGroupAccess::where(['group_id' => ['in', $groupIds]])->column('uid');
$l_ids = self::where([
'admin_id' => ['in', $uids],
'status' => 1,
// 'id' => ['neq', $staff->id]
])->column('id');
break;
case 6://全部
$uids = Db::where("member_company")->where("cid",CID)->where( 'uid','neq',$staff->id)->column("uid");
$l_ids = self::where([
'admin_id' => ['in', $uids],
'status' => 1,
// 'id' => ['neq', $staff->id]
])->column('id');
// $l_ids = self::where([
// 'cid'=>CID,
// 'status' => 1,
// 'id' => ['neq', $staff->id]
// ])->column('id');
break;
}
if (empty($l_ids)) {//返回空 下属查询 会查询全部
return ['-1'];
}
return $l_ids;
}
//获取全部ID
public static function getMyStaffIds() {
$staff = self::info();
$ids = [$staff->id];
$l_ids = self::getLowerStaffId();
$ids = array_merge($ids, $l_ids);
return $ids;
}
public static function getKeyList() {
$staffs=self::where([])->field('id,name,img,group_ids')->select();
$data=[];
foreach ($staffs as $v){
$data[$v['id']]=$v;
}
return $data;
}
public static function getGroupStaffIds($group_id)
{
return self::where('', 'exp', Db::raw('FIND_IN_SET(' . intval($group_id) . ',group_ids)'))->column('id');
}
public static function getStaff(){
return self::where(['cid'=>CID])->column('name', 'id');
}
//获取自己及下属员工
public static function allList($notInIds=[]) {
$where['id']=['in',self::getMyStaffIds()];
$where['status']=1;
return self::where($where)->field('id,name')->select();
}
/**
* 获取权限列表
*/
public static function getStaffRule($type)
{
$row = StaffRule::where(['name' => $type])->find();
if (!$row) {
return [];
}
$rules = StaffRule::where(['pid' => $row->id])->column('name', 'id');
$staff = self::info();
$staffRules = StaffRole::where(['id' => $staff->role])->value('rules');
$staffRules = explode(',', $staffRules) ?? [];
$value = [];
foreach ($staffRules as $r) {
if (isset($rules[$r])) {
$value[] = $rules[$r];
}
}
return $value;
}
}