ThinkPHP框架权限管理----权限分配的js实现

前台输出用,供参考。
数据表数据:

CREATE TABLE `sh_node` (
  `id` int(10) NOT NULL auto_increment COMMENT '节点id',
  `name` char(30) NOT NULL COMMENT '节点名称',
  `title` char(30) NOT NULL COMMENT '节点标题',
  `status` tinyint(1) NOT NULL default '1' COMMENT '节点状态',
  `remark` char(20) default NULL COMMENT '节点注释',
  `sort` char(20) NOT NULL COMMENT '排序',
  `pid` int(11) NOT NULL default '1' COMMENT '父id',
  `level` int(11) NOT NULL COMMENT '等级',
  `type` int(11) default '0',
  `group_id` int(11) default '0',
  `open_style` enum('','navTab','dialog') default NULL,
  `rel_name` char(30) default NULL,
  `is_nav` tinyint(1) NOT NULL default '1' COMMENT '是否显示',
  `path` varchar(32) default NULL COMMENT '无限分类用路径',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;

/*Data for the table `sh_node` */

insert  into `sh_node`(`id`,`name`,`title`,`status`,
`remark`,`sort`,`pid`,`level`,`type`,`group_id`,
`open_style`,`rel_name`,`is_nav`,`path`) values 
(97,'模块1','模块1',1,NULL,'1',1,2,0,0,NULL,NULL,1,'0-1'),
(98,'方法1','方法1',1,NULL,'1',97,3,0,0,NULL,NULL,1,'0-1-97'),
(1,'Admin','后台管理',1,NULL,'0',0,1,0,0,NULL,NULL,1,'0'),
(99,'模块2','模块2',1,NULL,'2',1,2,0,0,NULL,NULL,1,'0-1'),
(100,'方法2','方法2',1,NULL,'1',99,3,0,0,NULL,NULL,1,'0-1-99');

这里写图片描述


<!--展示节点表的所有数据-->
            <volist name="accessdata" id="vo">
                <!--level =1 的数据-->
                <if condition="$vo.level eq '1'">
                    <div style="display:block;clear:both;width:100%;"><label style="width:160px;">
                        <input type="checkbox" id="{$vo.id}" name="access[]" value="{$vo.id}" pid="{$vo.pid}" level="{$vo.level}" <if condition="in_array($vo['id'],$nodelist)">checked</if> />
                        <b>【应用】</b>{$vo.title}</label></div>
                    <elseif condition="$vo.level eq '2'" />
                        <div style="display:block;clear:both;margin-left:40px;width:100%;"><label style="width:190px;">
                            <input type="checkbox" id="{$vo.id}" name="access[]" value="{$vo.id}"pid="{$vo.pid}" level="{$vo.level}" <if condition="in_array($vo['id'],$nodelist)">checked</if> />
                            <b>【模块】</b>{$vo.title}</label></div>
                        <volist name="vo['node']" id="svo">
                            <div style="display:block;float:left;margin-left:60px;"><label style="width:160px;">
                                <input type="checkbox" id="{$svo.id}" name="access[]" pid="{$svo.pid}" value="{$svo.id}" level="{$svo.level}" <if condition="in_array($svo['id'],$nodelist)">checked</if> />
                                <b>【操作】</b>{$svo.title}</label></div>
                        </volist>
                    </if>
                </if>
            </volist>

js部分–全选和连带选

<script>
    //点击选中用js
    $(function(){
        //创建input点击事件
        $("input").click(function(){
            //获得点击对象的level数值
            var level=$(this).attr("level");
            //如果level为1
            if(level==1){
                //选中pageFormContent类中所有的input,也就是整个页面的input
                var inputs=$('.pageFormContent input');
                //如果当前的对象是选中,那么就把整个页面的input全部选中,如果不是选中,那么就把整个页面的input全不选中
                $(this).attr('checked') ? inputs.attr('checked',true) : inputs.removeAttr('checked');
                //如果level为2
            }else if(level==2){
                //获取选中对象id的值
                var id=$(this).attr('id');
                // 获取input按钮中pid的值id的对象,就是父亲选上了,然后要把所有的子类也选上
                var  inputs = $('input[pid='+id+']');
                //如果当前的对象是选中,那么就把id=pid的对象的input全部选中,如果不是选中,那么就把id=pid的对象的input全不选中
                $(this).attr('checked') ? inputs.attr('checked',true) : inputs.removeAttr('checked');
                // 勾选应用
                //var pid = $(this).attr('pid');
                //var inputs = $('input[id='+pid+']').attr('checked',true);
            //如果当前对象的level为3或者4
            }else  if(level==3 || level==4){
                //如果值为checked
                if($(this).attr('checked')){
                    //获取当前对象的pid
                    var pid = $(this).attr('pid');
                    //获取父亲的属性,把父亲也选上
                    var inputs = $('input[id='+pid+']').attr('checked',true);
                    //获取父亲的pid,也就是爷爷的id
                    var ppid = $('input[id='+pid+']').attr('pid');
                    //给爷爷也勾选上
                    $('input[id='+ppid+']').attr('checked',true);
                }
            }
        });
    });
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
thinkphp Access-Control-Allow-Origin 报错是由于跨域访问时没有正确设置 Access-Control-Allow-Origin 头部字段引起的。在给定的 PHP 代码中,Access-Control-Allow-Origin 被设置为绑定 `$origin_arr` 数组内的域名。 根据给定的代码片段,Access-Control-Allow-Origin 的值是根据请求中的 Origin 头部字段判断的。如果 Origin 头部字段的值在 `$origin_arr` 数组中,则允许跨域访问并将 Access-Control-Allow-Origin 设置为该值。 然而,需要注意的是,在引用中提到的 Access-Control-Allow-Origin 一般情况下只能绑定一个值。但是,根据给定的代码,通过在 `$origin_arr` 数组中添加多个域名,可以实现绑定多个值的效果。这是因为在代码中使用了 in_array() 函数来检查是否存在匹配的域名。 因此,如果 thinkphp Access-Control-Allow-Origin 报错,可能有以下几个原因导致: 1. `$origin_arr` 数组中的域名没有匹配到请求中的 Origin 头部字段的值。 2. `$origin_arr` 数组中的域名格式不正确,或者存在拼写错误。 3. 请求中没有包含 Origin 头部字段。 为了解决这个问题,你可以按照以下步骤进行排查和修复: 1. 确保 `$origin_arr` 数组中包含与请求中的 Origin 头部字段值匹配的域名,且格式正确。 2. 检查请求中是否包含 Origin 头部字段,并确保该头部字段的值与预期的域名匹配。 3. 如果你使用的是 thinkphp 框架,可以在应用的配置文件中设置 Access-Control-Allow-Origin 头部字段的值。例如,可以在 config.php 文件中添加以下代码: ```php 'header' => [ 'Access-Control-Allow-Origin' => implode(',', self::$origin_arr), 'Access-Control-Allow-Methods' => 'POST, GET', 'Access-Control-Allow-Credentials' => true, 'Access-Control-Allow-Headers' => 'token, Content-Type, Authorization, Accept, Range, Origin, Token, language', ], ``` 这样可以确保在每个请求中都正确设置了相应的头部字段。 综上所述,如果 thinkphp Access-Control-Allow-Origin 报错,你可以检查以上提到的原因并进行相应的修复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值