app::get('desktop')->_('操作员管理'), 'actions' => array( array( 'label' => app::get('desktop')->_('添加管理员'), 'href' => 'index.php?ctl=users&act=addnew', 'target' => 'dialog::{width:750,height:600,title:\'' . app::get('desktop')->_('添加管理员') . '\'}', ), array( 'label' => '导出模板', 'href' => $this->url.'&act=exportTemplate', 'target' => '_blank', ), ), 'use_buildin_export' => true, 'use_buildin_import' => true, 'use_import_template' => true, ); $is_operator_add = kernel::single('desktop_user')->has_permission('operator_add'); if(!$is_operator_add){ unset($params['actions']); } $this->finder('desktop_mdl_users',$params); } /** * 添加new * @return mixed 返回值 */ public function addnew() { $roles = $this->app->model('roles'); $users = $this->app->model('users'); $operationOrgObj = app::get('ome')->model('operation_organization'); $orgs = $operationOrgObj->getList('*', array(), 0, -1); $this->pagedata['orgs'] = $orgs; // 门店组织权限数据初始化 $storeOrgList = ['orgCollectName'=>'', 'orgIds'=>'']; $this->pagedata['store_org'] = $storeOrgList; if ($_POST) { $_POST['super'] = 0; $this->begin('index.php?app=desktop&ctl=users&act=index'); $_POST['pam_account']['login_name'] = trim($_POST['pam_account']['login_name']); $_POST['op_no'] = strtoupper(trim($_POST['op_no'])); $msg=''; if ($users->validate($_POST, $msg)) { if ($_POST['super'] == 0 && (!$_POST['role'])) { $this->end(false, app::get('desktop')->_('请至少选择一个工作组')); } elseif ($_POST['super'] == 0 && ($_POST['role'])) { foreach ($_POST['role'] as $roles) { $_POST['roles'][] = array('role_id' => $roles); } } $pwd = $_POST['pam_account']['login_password']; // 新添加的用户使用 MD5+SHA256 加密方式(is_hash256=1) $_POST['pam_account']['login_password'] = pam_encrypt::get_encrypted_password($_POST['pam_account']['login_password'], pam_account::get_account_type($this->app->app_id), 1); $_POST['pam_account']['account_type'] = pam_account::get_account_type($this->app->app_id); // 设置 is_hash256 字段为 1(新加密方式) $_POST['pam_account']['is_hash256'] = '1'; $_POST['create_time'] = $_POST['last_modify'] = time(); if ($users->save($_POST)) { foreach (kernel::servicelist('desktop_useradd') as $key => $service) { if ($service instanceof desktop_interface_useradd) { $service->useradd($_POST); } } // 门店组织权限处理 - 双重保存策略 if (isset($_POST['store_org_conf']['orgIds'][0]) && !empty($_POST['store_org_conf']['orgIds'][0])) { $orgIds = explode(',', $_POST['store_org_conf']['orgIds'][0]); // 1. 保存原始组织权限到 organization_ops(新增) $this->saveOrganizationPermission($_POST['user_id'], $orgIds); // 2. 展开并保存具体门店到 branch_ops(向下兼容) $_POST['store_id'] = $this->expandOrgIdsToStoreIds($orgIds); } if ($_POST['super'] == 0) { //是超管就不保存 $this->save_ground($_POST); } //数据权限 if ($_POST['org_id']) { $users->save_operation_permission($_POST); } // 一件代发yjdf经销组织权限 if ($_POST['dealer_shop_conf']) { kernel::single('organization_cos')->save_operation_permission($_POST); } if($_POST['email']) { $receiveMail = trim($_POST['email']) . '#' . $_POST['name']; $subject = "账号开通"; $body = " 您的账号是 " . $_POST['pam_account']['login_name'] ."\n密码是 ". $pwd ."\n请尽快登录,并修改密码"; kernel::single('console_email')->send($receiveMail,$subject,$body); } //这里新增插入日志 $this->app->model('user_logs')->addUser($_POST); // IDAAS list($rs,$msg) = kernel::single('desktop_user_auth')->sync_account(array( 'account_id' => $_POST['pam_account']['account_id'], 'login_name' => $_POST['pam_account']['login_name'], 'login_password' => $_POST['pam_account']['login_password'], ),'add'); if ($rs === false) { $this->end(false,$msg); } $this->end(true, app::get('desktop')->_('保存成功')); } else { $this->end(false, app::get('desktop')->_('保存失败')); } } else { $this->end(false, '操作失败:'.$msg); } } else { $workgroups = $roles->getList('*'); $workgroup_dealer = []; foreach ($workgroups as $workgroup) { if ($this->get_show_branch($workgroup['role_id'])) { $workgroup_branch[] = $workgroup; } elseif ($this->get_o2o_branch($workgroup['role_id'])) { $workgroup_o2o_branch[] = $workgroup; } else { $workgroup_order[] = $workgroup; } // 一件代发,独立出来,只要有符合的都展示 if ($this->get_dealer_workgroup($workgroup['role_id'])){ $workgroup_dealer[] = $workgroup; } } #线下门店权限组 $this->pagedata['workgroup_o2o_branch'] = $workgroup_o2o_branch; $this->pagedata['workgroup_branch'] = $workgroup_branch; $this->pagedata['workgroup_order'] = $workgroup_order; $this->pagedata['workgroup_dealer'] = $workgroup_dealer; $this->pagedata['workgroup'] = $workgroups; $this->display('users/users_add.html'); } } ####修改密码 /** * chkpassword * @return mixed 返回值 */ public function chkpassword() { $this->begin('index.php?app=desktop&ctl=users&act=index'); $users = $this->app->model('users'); if ($_POST) { $userLib = kernel::single('desktop_user'); $sdf = $users->dump($_POST['user_id'], '*', array(':account@pam' => array('*'), 'roles' => array('*'))); $old_password = $sdf['account']['login_password']; $super_row = $users->getList('user_id', array('super' => '1')); // 查询超级管理员的 is_hash256 值,用于验证旧密码 $superAccount = app::get('pam')->model('account')->dump(array( 'account_id' => $super_row[0]['user_id'], 'account_type' => pam_account::get_account_type($this->app->app_id) ), 'is_hash256'); $superIsHash256 = isset($superAccount['is_hash256']) ? intval($superAccount['is_hash256']) : 1; $filter['account_id'] = $super_row[0]['user_id']; $filter['account_type'] = pam_account::get_account_type($this->app->app_id); // 根据超级管理员的 is_hash256 值选择加密方式验证旧密码 $filter['login_password'] = pam_encrypt::get_encrypted_password(trim($_POST['old_login_password']), pam_account::get_account_type($this->app->app_id), $superIsHash256); $pass_row = app::get('pam')->model('account')->getList('account_id', $filter); // 修改密码时,使用新加密方式(is_hash256=1) $loginPassword = pam_encrypt::get_encrypted_password(trim($_POST['new_login_password']), pam_account::get_account_type($this->app->app_id), 1); if (!$pass_row) { $this->end(false, app::get('desktop')->_('超级管理员密码不正确')); } elseif ($_POST['new_login_password'] != $_POST['pam_account']['login_password']) { $this->end(false, app::get('desktop')->_('两次密码不一致')); } elseif (!$userLib->checkRepeatPassWord($_POST['user_id'], $loginPassword, $error_msg)) { $this->end(false, app::get('desktop')->_($error_msg)); } elseif (!$userLib->checkUserPassWordLength($_POST['user_id'], $_POST['new_login_password'], $error_msg)) { $this->end(false, app::get('desktop')->_($error_msg)); } elseif (!$userLib->validPassWord($_POST['new_login_password'], $error_msg,$sdf['name'])) { $this->end(false, app::get('desktop')->_($error_msg)); } else { $_POST['pam_account']['account_id'] = $_POST['user_id']; $_POST['pam_account']['login_password'] = $loginPassword; // 修改密码时,将 is_hash256 设置为 1(新加密方式) $_POST['pam_account']['is_hash256'] = '1'; $users->save($_POST); $userLib->checkUpdatePwd($_POST['pam_account']['account_id'], true); //新增插入日志 $this->app->model('user_logs')->changePwd($_POST['user_id']); list($rs,$msg) = kernel::single('desktop_user_auth')->sync_account(array( 'account_id' => $_POST['pam_account']['account_id'], 'login_name' => $sdf['account']['login_name'], 'login_password' => $_POST['pam_account']['login_password'], ),'password'); if ($rs === false) { $this->end(false,$msg); } $this->end(true, app::get('desktop')->_('密码修改成功')); } } $this->pagedata['user_id'] = $_GET['id']; $this->page('users/chkpass.html'); } /** * This is method saveUser * 添加编辑 * @return mixed This is the return value description * */ public function saveUser() { $this->begin(); $users = $this->app->model('users'); $roles = $this->app->model('roles'); $workgroup = $roles->getList('*'); $param_id = $_POST['account_id']; if (!$param_id) { $this->end(false, app::get('desktop')->_('编辑失败,参数丢失!')); } $sdf_users = $users->dump($param_id); if (!$sdf_users) { $this->end(false, app::get('desktop')->_('编辑失败,参数错误!')); } if(!kernel::single('desktop_user')->has_permission('users')) { $this->end(false, app::get('desktop')->_('您没有权限进行此操作!')); } //if($sdf_users['super']==1) $this->end(false, app::get('desktop')->_('不能编辑超级管理员!')); if ($_POST['mobile'] && (strlen($_POST['mobile']) != '11' || !is_numeric($_POST['mobile']))) { $this->end(false, app::get('desktop')->_('手机号码格式不正确!')); } if ($_POST) { //新增插入日志 $this->app->model('user_logs')->userEdit($_POST); $_POST['name'] = trim($_POST['name']); $_POST['pam_account']['account_id'] = $param_id; $_POST['op_no'] = strtoupper(trim($_POST['op_no'])); // 编辑用户时,将 is_hash256 设置为 1(新加密方式) $_POST['pam_account']['is_hash256'] = '1'; if ($sdf_users['super'] == 1) { $users->editUser($_POST); //保存成功后加判断是否启用状态有变更 $user_data = $users->dump($sdf_users['user_id'], '*', array(':account@pam' => array('*'))); if ($sdf_users && ($sdf_users['status'] != $_POST['status'])) { $_inner_key = sprintf("account_user_%s", $sdf_users['user_id']); cachecore::store($_inner_key, $user_data, 60 * 15); } // IDAAS同步账号 list($rs,$msg) = kernel::single('desktop_user_auth')->sync_account(array( 'account_id' => $_POST['pam_account']['account_id'], 'login_name' => $user_data['account']['login_name'], 'login_password' => $user_data['account']['login_password'], ),'update'); if ($rs === false) { $this->end(false,$msg); } $this->end(true, app::get('desktop')->_('编辑成功!')); } elseif ($_POST['super'] == 0 && $_POST['role']) { foreach ($_POST['role'] as $roles) { $_POST['roles'][] = array('role_id' => $roles); } // 编辑用户时,将 is_hash256 设置为 1(新加密方式) $_POST['pam_account']['is_hash256'] = '1'; $users->editUser($_POST); // 门店组织权限处理 - 双重保存策略 if (isset($_POST['store_org_conf']['orgIds'][0]) && !empty($_POST['store_org_conf']['orgIds'][0])) { $orgIds = explode(',', $_POST['store_org_conf']['orgIds'][0]); // 1. 保存原始组织权限到 organization_ops(新增) $this->saveOrganizationPermission($_POST['user_id'], $orgIds); // 2. 展开并保存具体门店到 branch_ops(向下兼容) $_POST['store_id'] = $this->expandOrgIdsToStoreIds($orgIds); } else { // 如果没有组织权限,清空原有的组织权限 $this->saveOrganizationPermission($_POST['user_id'], []); } $users->save_per($_POST); //数据权限 if ($_POST['org_id']) { $users->save_operation_permission($_POST); } // 一件代发yjdf经销组织权限 if ($_POST['dealer_shop_conf']) { kernel::single('organization_cos')->save_operation_permission($_POST); } //保存成功后加判断是否启用状态有变更 $user_data = $users->dump($sdf_users['user_id'], '*', array(':account@pam' => array('*'))); if ($sdf_users && ($sdf_users['status'] != $_POST['status'])) { $_inner_key = sprintf("account_user_%s", $sdf_users['user_id']); cachecore::store($_inner_key, $user_data, 60 * 15); } // IDAAS同步账号 list($rs,$msg) = kernel::single('desktop_user_auth')->sync_account(array( 'account_id' => $_POST['pam_account']['account_id'], 'login_name' => $user_data['account']['login_name'], 'login_password' => $user_data['account']['login_password'], ),'update'); if ($rs === false) { $this->end(false,$msg); } $this->end(true, app::get('desktop')->_('编辑成功!')); } else { $this->end(false, app::get('desktop')->_('请至少选择一个工作组!')); } } } /** * This is method edit * 添加编辑 * @return mixed This is the return value description * */ public function edit($param_id) { $users = $this->app->model('users'); $roles = $this->app->model('roles'); $workgroup = $roles->getList('*'); $user = kernel::single('desktop_user'); $sdf_users = $users->dump($param_id); if (empty($sdf_users)) { echo app::get('desktop')->_('无内容');exit(); } $hasrole = $this->app->model('hasrole'); foreach ($workgroup as $key => $group) { $rolesData = $hasrole->getList('*', array('user_id' => $param_id, 'role_id' => $group['role_id'])); if ($rolesData) { $check_id[] = $group['role_id']; $workgroup[$key]['checked'] = "true"; } else { $workgroup[$key]['checked'] = "false"; } } $workgroups = $workgroup; $workgroup_dealer = []; foreach ($workgroups as $workgroup) { if ($this->get_show_branch($workgroup['role_id'])) { $workgroup_branch[] = $workgroup; } elseif ($this->get_o2o_branch($workgroup['role_id'])) { $workgroup_o2o_branch[] = $workgroup; } else { $workgroup_order[] = $workgroup; } // 一件代发,独立出来,只要有符合的都展示 if ($this->get_dealer_workgroup($workgroup['role_id'])){ $workgroup_dealer[] = $workgroup; } } $operationOrgObj = app::get('ome')->model('operation_organization'); $orgs = $operationOrgObj->getList('*', array(), 0, -1); $operationOpsObj = app::get('ome')->model('operation_ops'); $oper_per = $operationOpsObj->getList('org_id', array('op_id' => $param_id), 0, -1); //$this->pagedata['org_id'] = $oper_per[0]['org_id']; $org_ids = array_column($oper_per, 'org_id'); array_walk($orgs, function (&$item, $k, $org_ids) { $item['checked'] = in_array($item['org_id'], $org_ids); }, $org_ids); $this->pagedata['orgs'] = $orgs; #线下门店权限组 $this->pagedata['workgroup_o2o_branch'] = $workgroup_o2o_branch; #echo('
');print_r($workgroup_branch);exit;
        $this->pagedata['workgroup_branch'] = $workgroup_branch;
        $this->pagedata['workgroup_order']  = $workgroup_order;
        $this->pagedata['workgroup_dealer'] = $workgroup_dealer;
        #$this->pagedata['workgroup']        = $workgroups;
        $this->pagedata['account_id'] = $param_id;
        $this->pagedata['op_no']      = $sdf_users['op_no'];
        $this->pagedata['name']       = $sdf_users['name'];
        $this->pagedata['super']      = $sdf_users['super'];
        $this->pagedata['status']     = $sdf_users['status'];
        $this->pagedata['email']     = $sdf_users['email'];
        $this->pagedata['ismyself']   = $user->user_id === $param_id ? 'true' : 'false';

        if (!$sdf_users['super']) {
            $this->pagedata['per'] = $users->detail_per_group($check_id, $param_id);
        }

        //云生意或套件
        if (app::get('bizsuite')->is_actived()) {
            $bind = app::get('bizsuite')->model('relation')->getList('shop_id', array('node_type' => 'bizsuite', 'status' => 'bind'));
        }

        if ((app::get('suitclient')->is_installed() && app::get('suitclient')->getConf('client_id')) || $bind) {
            $this->pagedata['ban_edit'] = true;
        } else {
            $this->pagedata['ban_edit'] = false;
        }
        #登陆人员不是超级管理员,不能修改超级管理员密码
        if (($user->user_id != 1) && ($param_id == 1)) {
            $this->pagedata['ban_edit'] = true;
        }
        $this->pagedata['mobile']    = $sdf_users['mobile'];
        $this->pagedata['now_super'] = $user->is_super();
        if ($sdf_users['mobile']) {
            $this->pagedata['hidemobile'] = substr_replace($sdf_users['mobile'], "****", 3, 4);
        }

        // 一件代发yjdf 获取 经销组织权限
        $cosMdl     = app::get('organization')->model('cos');
        $cosOpsMdl  = app::get('organization')->model('cos_ops');
        $cosOpsInfo = $cosOpsMdl->db_dump(['op_id' => $param_id]);
        $cosList    = $cosMdl->getList('*', ['cos_id|in'=>explode(',', $cosOpsInfo['cos_ids'])]);
        $cosOpsList = ['cosCollectName'=>[], 'cosIds'=>[]];
        foreach ($cosList as $k => $v) {
            $cosOpsList['cosCollectName'][] = $v['cos_name'];
            $cosOpsList['cosIds'][]         = $v['cos_id'];
        }
        $cosOpsList['cosCollectName'] = implode(',', $cosOpsList['cosCollectName']);
        $cosOpsList['cosIds']         = implode(',', $cosOpsList['cosIds']);
        $this->pagedata['area']       = $cosOpsList;

        // 门店组织权限 - 从新的organization_ops表直接获取
        $storeOrgList = ['orgCollectName'=>[], 'orgIds'=>[]];
        
        // 直接从organization_ops表获取完整的组织权限
        if (app::get('organization')->is_installed()) {
            $orgOpsModel = app::get('organization')->model('organization_ops');
            $userOrgs = $orgOpsModel->getUserOrganizations($param_id);
            
            if (!empty($userOrgs)) {
                $organizationModel = app::get('organization')->model('organization');
                
                foreach ($userOrgs as $orgId) {
                    if (empty($orgId)) continue;
                    
                    // 直接获取组织信息
                    $orgInfo = $organizationModel->dump(['org_id' => $orgId], 'org_id,org_name,org_type');
                    if ($orgInfo) {
                        $storeOrgList['orgCollectName'][] = $orgInfo['org_name'];
                        $storeOrgList['orgIds'][] = $orgInfo['org_id'];
                    }
                }
                
                if (!empty($storeOrgList['orgCollectName'])) {
                    $storeOrgList['orgCollectName'] = implode(',', $storeOrgList['orgCollectName']);
                    $storeOrgList['orgIds'] = implode(',', $storeOrgList['orgIds']);
                } else {
                    $storeOrgList['orgCollectName'] = '';
                    $storeOrgList['orgIds'] = '';
                }
            } else {
                $storeOrgList['orgCollectName'] = '';
                $storeOrgList['orgIds'] = '';
            }
        }
        
        $this->pagedata['store_org'] = $storeOrgList;

        if($_GET['clone']) {
            $this->display('users/users_add.html');
        } else {
            $this->page('users/users_detail.html');
        }

    }

    //获取工作组细分
    /**
     * detail_ground
     * @return mixed 返回值
     */
    public function detail_ground()
    {
        // //获取订单角色中的选中项
        // $check_group_id = json_decode($_POST['checkedName_group']);
        // //获取仓库角色中的选择项
        // $check_brach_id = json_decode($_POST['checkedName_branch']);
        // //获取仓库或订单角色类型
        // if (isset($_POST['role'])) {
        //     $role = $_POST['role'];
        // }
        // $role_id  = $_POST['name'];
        // $check_id = json_decode($_POST['checkedName']);
        // $branches = $_POST['branch'];

        $user_id = $_GET['user_id'];
        $role    = $_GET['role'];
        $check_id = explode(',', $_POST['checkedName']);

        echo kernel::single('desktop_user_access')->role($role, $check_id, $user_id, $_POST);exit;
    }

    protected function getBackInfo($role = null, $check_id)
    {

        $roles = $this->app->model('roles');
        $menus = $this->app->model('menus');
        if ($role == self::__BRANCH_ROLE) {
            //仓库角色,没有任何选中项
            if (empty($check_id)) {
                return array('group_info' => '', 'branch_info' => '');
                exit;
            }
        } elseif ($role == self::__STORE_ROLE) {
            //仓库角色,没有任何选中项
            if (empty($check_id)) {
                return array('o2o_branch_info' => '');
                exit;
            }
        } else {
            //非仓库角色
            if (!$check_id) {
                echo '';exit;
            }
        }
        $aPermission = array();
        /* if(!$check_id) {
        echo '';exit;
        } */
        foreach ($check_id as $val) {
            $result = $roles->dump($val);
            $data   = unserialize($result['workground']);
            foreach ((array) $data as $row) {
                $aPermission[] = $row;
            }
        }
        $aPermission = array_unique($aPermission);
        if (!$aPermission) {
            echo '';exit;
        }
        $addonmethod = array();
        $group_info = '';
        $branch_info = '';
        $o2o_branch_info = '';
        $html = '';
        foreach ((array) $aPermission as $val) {
            $sdf   = $menus->dump(array('menu_type' => 'permission', 'permission' => $val));
            $addon = unserialize($sdf['addon']);
            if ($addon['show'] && $addon['save']) {
                //如果存在控制
                if (!in_array($addon['show'], $addonmethod)) {
                    $access    = explode(':', $addon['show']);
                    $classname = $access[0];
                    $method    = $access[1];
                    $obj       = kernel::single($classname);
                    //仓库角色
                    if ($role == self::__BRANCH_ROLE) {
                        //检测是否包含订单确认
                        if ('show_group' == $method) {
                            $group_info .= $obj->$method() . "
"; } //检测是否包含仓库选择 if ('show_branch' == $method) { $branch_info .= $obj->$method() . "
"; } } elseif ($role == self::__STORE_ROLE) { //检测是否包含o2o门店仓库选择 $o2o_branch_info .= $obj->$method() . "
"; } else { //订单角色(包含其他角色) $html .= $obj->$method() . "
"; } } $addonmethod[] = $addon['show']; } else { echo ''; } } //仓库角色的返回数据 if ($role == self::__BRANCH_ROLE) { return $backDate = array('group_info' => $group_info, 'branch_info' => $branch_info); } elseif ($role == self::__STORE_ROLE) { return $backDate = array('group_info' => $group_info, 'o2o_branch_info' => $o2o_branch_info); } else { //订单角色(包含其他角色)的返回数据 return $backDate = $html; } } //保存工作组细分 /** * 保存_ground * @param mixed $aData 数据 * @return mixed 返回操作结果 */ public function save_ground($aData) { $workgrounds = $aData['role']; $menus = $this->app->model('menus'); $roles = $this->app->model('roles'); foreach ($workgrounds as $val) { $result = $roles->dump($val); $data = unserialize($result['workground']); foreach ((array) $data as $row) { $aPermission[] = $row; } } $aPermission = array_unique($aPermission); if ($aPermission) { $addonmethod = array(); foreach ((array) $aPermission as $key => $val) { $sdf = $menus->dump(array('menu_type' => 'permission', 'permission' => $val)); $addon = unserialize($sdf['addon']); if ($addon['show'] && $addon['save']) { //如果存在控制 if (!in_array($addon['save'], $addonmethod)) { $access = explode(':', $addon['save']); $classname = $access[0]; $method = $access[1]; $obj = kernel::single($classname); $obj->$method($aData['user_id'], $aData); } $addonmethod[] = $addon['save']; } } } } /** * 获取仓库权限分组 * * @param void * @return void * @author * */ public function get_show_branch($role_id) { $roles = $this->app->model('roles'); $menus = $this->app->model('menus'); $result = $roles->dump($role_id); $data = unserialize($result['workground']); foreach ((array) $data as $row) { $aPermission[] = $row; } $aPermission = array_unique($aPermission); if (!$aPermission) { return false; } $addonmethod = array(); foreach ((array) $aPermission as $val) { #过滤线下门店权限分组 if ($val == 'o2o_store_self' || $val == 'o2o_center') { return false; } $sdf = $menus->dump(array('menu_type' => 'permission', 'permission' => $val)); $addon = unserialize($sdf['addon']); if ($addon['show'] == 'ome_roles:show_branch') { return true; } } return false; } /** * 获取线下门店权限分组 * * @param void * @return void * @author * */ public function get_o2o_branch($role_id) { $roles = $this->app->model('roles'); $menus = $this->app->model('menus'); $result = $roles->dump($role_id); $data = unserialize($result['workground']); foreach ((array) $data as $row) { $aPermission[] = $row; } $aPermission = array_unique($aPermission); if (!$aPermission) { return false; } $addonmethod = array(); foreach ((array) $aPermission as $val) { #Wap手机端门店权限分组 if (strpos($val, 'wap_') === false) { continue; } $sdf = $menus->dump(array('menu_type' => 'permission', 'permission' => $val)); $addon = unserialize($sdf['addon']); if ($addon['show'] == 'ome_roles:show_o2o_branch') { return true; } } return false; } /** * 获取一件代发的分销权限分组 * * @param void * @return void * @author * */ public function get_dealer_workgroup($role_id) { $roles = $this->app->model('roles'); $menus = $this->app->model('menus'); $result = $roles->dump($role_id); $data = unserialize($result['workground']); foreach ((array) $data as $row) { $aPermission[] = $row; } $aPermission = array_unique($aPermission); if (!$aPermission) { return false; } $addonmethod = array(); foreach ((array) $aPermission as $val) { #Wap手机端门店权限分组 if (strpos($val, 'dealer_') === false) { continue; } $sdf = $menus->dump(array('menu_type' => 'permission', 'permission' => $val)); $addon = unserialize($sdf['addon']); if ($addon['show'] == 'ome_roles:show_dealer') { return true; } } return false; } /** * showCosTreeList * @param mixed $serid ID * @param mixed $multi multi * @return mixed 返回值 */ public function showCosTreeList($serid,$multi=false) { if ($serid) { $this->pagedata['sid'] = $serid; } else { $this->pagedata['sid'] = substr(time(),6,4); } $this->pagedata['multi'] = $multi; $this->pagedata['remoteURL'] = 'index.php?app=desktop&ctl=users&act=getCosById&{param}={value}'; $this->pagedata['checkboxName'] = 'region'; $this->pagedata['closeText'] = '全团队'; $this->pagedata['dataMap'] = array( 'PID' => 'parent_id', 'NID' => 'cos_id', 'CNAME' => 'cos_name', 'HASC' => 'child_count' ); $this->singlepage('common/treeSelect.html'); } /** * showStoreOrgTreeList * @param mixed $serid ID * @param mixed $multi multi * @return mixed 返回值 */ public function showStoreOrgTreeList($serid,$multi=false) { if ($serid) { $this->pagedata['sid'] = $serid; } else { $this->pagedata['sid'] = substr(time(),6,4); } $this->pagedata['multi'] = $multi; $this->pagedata['remoteURL'] = 'index.php?app=desktop&ctl=users&act=getOrgById&{param}={value}'; $this->pagedata['checkboxName'] = 'organization'; $this->pagedata['closeText'] = '全组织'; $this->pagedata['dataMap'] = array( 'PID' => 'parent_id', 'NID' => 'org_id', 'CNAME' => 'org_name', 'HASC' => 'child_count' ); $this->singlepage('common/treeSelect.html'); } /** * 获取CosById * @param mixed $pregionid ID * @return mixed 返回结果 */ public function getCosById($pregionid = 1) { !$pregionid && $pregionid = 1; $list = kernel::single('organization_cos')->getChildCosById($pregionid); if ($list[0] && $list[1]) { echo json_encode($list[1]); } else { echo json_encode([]); } } /** * 获取OrgById * @param mixed $porgid ID * @return mixed 返回结果 */ public function getOrgById($porgid = 0) { !$porgid && $porgid = 0; $organizationObj = kernel::single('organization_operation'); $result = $organizationObj->getOrgForTreeSelect($porgid); echo json_encode($result); } /** * exportTemplate * @return mixed 返回值 */ public function exportTemplate() { header("Content-Type: text/csv"); header("Content-Disposition: attachment; filename=操作员导入模板" . date('Ymd') . ".csv"); header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); header('Expires:0'); header('Pragma:public'); $title = $this->app->model('users')->getTemplateColumn(); echo '"' . implode('","', $title) . '"'; } /** * unLock * @param mixed $userId ID * @return mixed 返回值 */ public function unLock($userId) { app::get('desktop')->model('users')->update(['is_lock'=>'0','lock_reason'=>''],['user_id'=>$userId]); $this->splash('success','index.php?app=desktop&ctl=users&act=index','操作成功'); } /** * showSensitiveData * @param mixed $id ID * @return mixed 返回值 */ public function showSensitiveData($id) { $data = app::get('desktop')->model('users')->db_dump(['user_id'=>$id]); $row = app::get('pam')->model('account')->db_dump(['account_id'=>$id], 'login_name'); $data['login_name'] = $row['login_name']; $this->splash('success',null,null,'redirect',$data); } /** * 将门店组织ID转换为store_id数组 * @param array $orgIds 组织ID数组 * @return array store_id数组 */ private function convertOrgIdsToStoreIds($orgIds) { if (!app::get('o2o')->is_installed() || empty($orgIds)) { return []; } $organizationMdl = app::get('organization')->model('organization'); $storeMdl = app::get('o2o')->model('store'); $storeIds = []; foreach ($orgIds as $orgId) { if (empty($orgId)) continue; // 根据org_id获取组织信息 $orgInfo = $organizationMdl->dump(['org_id' => $orgId], 'org_no,org_type'); if ($orgInfo && $orgInfo['org_type'] == 2) { // org_type=2表示门店 // 根据org_no获取门店信息 $storeInfo = $storeMdl->dump(['store_bn' => $orgInfo['org_no']], 'store_id'); if ($storeInfo) { $storeIds[] = $storeInfo['store_id']; } } } return $storeIds; } /** * 保存用户的组织权限到 organization_ops 表 * @param int $user_id 用户ID * @param array $orgIds 组织ID数组 * @return bool 操作结果 */ private function saveOrganizationPermission($user_id, $orgIds) { if (empty($user_id)) { return false; } if (!app::get('organization')->is_installed()) { return true; } try { $orgOpsMdl = app::get('organization')->model('organization_ops'); return $orgOpsMdl->saveUserOrganizations($user_id, $orgIds); } catch (Exception $e) { return false; } } /** * 展开组织权限为具体的store_id数组(支持经销商继承) * @param array $orgIds 组织ID数组 * @return array store_id数组 */ private function expandOrgIdsToStoreIds($orgIds) { if (!app::get('o2o')->is_installed() || empty($orgIds)) { return []; } try { // 使用权限继承服务类来展开组织权限 $permissionService = kernel::single('organization_organization_permission'); // 模拟用户ID来获取展开的branch_id(这里用于store权限转换) $organizationMdl = app::get('organization')->model('organization'); $storeMdl = app::get('o2o')->model('store'); $storeIds = []; foreach ($orgIds as $orgId) { if (empty($orgId)) continue; // 获取组织信息 $orgInfo = $organizationMdl->dump(['org_id' => $orgId], 'org_no,org_type'); if (!$orgInfo) continue; if ($orgInfo['org_type'] == 3) { // 经销商 // 获取经销商下的所有门店 $dealerStores = $this->getStoresByDealerOrgId($orgId); $storeIds = array_merge($storeIds, $dealerStores); } elseif ($orgInfo['org_type'] == 2) { // 门店 // 直接获取门店信息 $storeInfo = $storeMdl->dump(['store_bn' => $orgInfo['org_no']], 'store_id'); if ($storeInfo) { $storeIds[] = $storeInfo['store_id']; } } } return array_unique($storeIds); } catch (Exception $e) { // 降级到原有逻辑 return $this->convertOrgIdsToStoreIds($orgIds); } } /** * 获取经销商下的所有门店store_id * @param int $dealerOrgId 经销商组织ID * @return array store_id数组 */ private function getStoresByDealerOrgId($dealerOrgId) { $organizationMdl = app::get('organization')->model('organization'); $storeMdl = app::get('o2o')->model('store'); $storeIds = []; // 查找经销商下的所有门店组织 (parent_id = dealerOrgId, org_type = 2) $storeOrgs = $organizationMdl->getList('org_id,org_no', [ 'parent_id' => $dealerOrgId, 'org_type' => 2 ], 0, -1); if (!$storeOrgs) { return []; } foreach ($storeOrgs as $storeOrg) { $storeInfo = $storeMdl->dump(['store_bn' => $storeOrg['org_no']], 'store_id'); if ($storeInfo) { $storeIds[] = $storeInfo['store_id']; } } return $storeIds; } }