70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace app\admin\model;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use fast\Tree;
							 | 
						||
| 
								 | 
							
								use think\Model;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class UserRule extends Model
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // 表名
							 | 
						||
| 
								 | 
							
								    protected $name = 'user_rule';
							 | 
						||
| 
								 | 
							
								    // 自动写入时间戳字段
							 | 
						||
| 
								 | 
							
								    protected $autoWriteTimestamp = 'int';
							 | 
						||
| 
								 | 
							
								    // 定义时间戳字段名
							 | 
						||
| 
								 | 
							
								    protected $createTime = 'createtime';
							 | 
						||
| 
								 | 
							
								    protected $updateTime = 'updatetime';
							 | 
						||
| 
								 | 
							
								    // 追加属性
							 | 
						||
| 
								 | 
							
								    protected $append = [
							 | 
						||
| 
								 | 
							
								        'status_text'
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    protected static function init()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        self::afterInsert(function ($row) {
							 | 
						||
| 
								 | 
							
								            if (!$row['weigh']) {
							 | 
						||
| 
								 | 
							
								                $pk = $row->getPk();
							 | 
						||
| 
								 | 
							
								                $row->getQuery()->where($pk, $row[$pk])->update(['weigh' => $row[$pk]]);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function getTitleAttr($value, $data)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return __($value);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function getStatusList()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function getStatusTextAttr($value, $data)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $value = $value ? $value : $data['status'];
							 | 
						||
| 
								 | 
							
								        $list = $this->getStatusList();
							 | 
						||
| 
								 | 
							
								        return $list[$value] ?? '';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public static function getTreeList($selected = [])
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $ruleList = collection(self::where('status', 'normal')->order('weigh desc,id desc')->select())->toArray();
							 | 
						||
| 
								 | 
							
								        $nodeList = [];
							 | 
						||
| 
								 | 
							
								        Tree::instance()->init($ruleList);
							 | 
						||
| 
								 | 
							
								        $ruleList = Tree::instance()->getTreeList(Tree::instance()->getTreeArray(0), 'name');
							 | 
						||
| 
								 | 
							
								        $hasChildrens = [];
							 | 
						||
| 
								 | 
							
								        foreach ($ruleList as $k => $v)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            if ($v['haschild'])
							 | 
						||
| 
								 | 
							
								                $hasChildrens[] = $v['id'];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        foreach ($ruleList as $k => $v) {
							 | 
						||
| 
								 | 
							
								            $state = array('selected' => in_array($v['id'], $selected) && !in_array($v['id'], $hasChildrens));
							 | 
						||
| 
								 | 
							
								            $nodeList[] = array('id' => $v['id'], 'parent' => $v['pid'] ? $v['pid'] : '#', 'text' => __($v['title']), 'type' => 'menu', 'state' => $state);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return $nodeList;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |