thinkphp5递归获取Element Ui的Cascader 级联选择器数据

4 篇文章 0 订阅
4 篇文章 0 订阅

第一部分:前端部分

最终效果

数据库数据

Element Ui 的Cascader 级联选择器数据应用:

<el-cascader
      v-model="value"
      :options="dep_jobs"
      :props="{ expandTrigger: 'hover',value:'id',label:'classname' }"
      @change="handleChange">
</el-cascader>

说明:

Cascader默认调用的是 :options绑定的数据源里面的value及label。

这里可以通过props配置绑定的对应键名。我这里value对应数据库中的id,label对应我的classname

第二部分:后端部分

    /**
     * 递归子级
     * @param array $arr
     * @param int $id
     * @return array
     * */
    protected function findChild(&$arr,$id){
        $children=array();
        foreach ($arr as $key => $value) {
            if($value['pid']==$id) $children[]=$value;
        }
        return $children;
    }

    /**
     * 查找当前级别的子级
     * @param array $data
     * @param int $root_id
     * @return array
     * */
    protected function build_tree($data,$root_id){
        $children=$this->findChild($data,$root_id);

        if(empty($children))return null;

        foreach ($children as $key => $value) {
            $resCurTree=$this->build_tree($data,$value['id']);
            if(null != $resCurTree){
                $children[$key]['children']=$resCurTree;
            }
        }
        return $children;
    }

    // 请求的接口
    public function fetchDepAndJob(){

        $data = Db::table('staff_role')->field("*")->select();

        $backArr = $this->build_tree($data,0);

        return self::back_json('200',$backArr);     

    }

请求接口给前端返回的数据格式:

{
	"code": "200",
	"msg": "OK",
	"data": [
		{
			"id": 1,
			"classname": "行政部",
			"orderby": 50,
			"pid": 0
		},
		{
			"id": 2,
			"classname": "财务部",
			"orderby": 50,
			"pid": 0
		},
		{
			"id": 3,
			"classname": "客服部",
			"orderby": 50,
			"pid": 0,
			"children": [
				{
					"id": 12,
					"classname": "前台",
					"orderby": 50,
					"pid": 3
				},
				{
					"id": 13,
					"classname": "会籍",
					"orderby": 50,
					"pid": 3
				},
				{
					"id": 14,
					"classname": "保洁",
					"orderby": 50,
					"pid": 3
				}
			]
		},
		{
			"id": 4,
			"classname": "销售部",
			"orderby": 50,
			"pid": 0
		},
		{
			"id": 5,
			"classname": "市场部",
			"orderby": 50,
			"pid": 0,
			"children": [
				{
					"id": 8,
					"classname": "健身教练",
					"orderby": 50,
					"pid": 5
				},
				{
					"id": 9,
					"classname": "主管",
					"orderby": 50,
					"pid": 5
				}
			]
		},
		{
			"id": 6,
			"classname": "广告部",
			"orderby": 50,
			"pid": 0,
			"children": [
				{
					"id": 10,
					"classname": "审核专员",
					"orderby": 50,
					"pid": 6
				},
				{
					"id": 11,
					"classname": "业务员",
					"orderby": 50,
					"pid": 6
				}
			]
		},
		{
			"id": 7,
			"classname": "其他",
			"orderby": 50,
			"pid": 0
		}
	]
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值