'导航菜单',
     *     'parent' => 'admin/Nav/index',
     *     'display'=> false,
     *     'hasView'=> true,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '导航菜单',
     *     'param'  => ''
     * )
     */
    public function index()
    {
        $intNavId     = $this->request->param("nav_id", 0, 'intval');
        $navMenuModel = new NavMenuModel();
        if (empty($intNavId)) {
            $this->error("请指定导航!");
        }
        $objResult = $navMenuModel->where("nav_id", $intNavId)->order(["list_order" => "ASC"])->select();
        $arrResult = $objResult ? $objResult->toArray() : [];
        $tree       = new Tree();
        $tree->icon = ['   │ ', '   ├─ ', '   └─ '];
        $tree->nbsp = '   ';
        $array = [];
        foreach ($arrResult as $r) {
            $r['str_manage'] = ' $r['id'], "nav_id" => $r['nav_id']]) . '">添加子菜单
             $r['id'], "parent_id" => $r['parent_id'], "nav_id" => $r['nav_id']]) . '">编辑 
             $r['id'], 'nav_id' => $r['nav_id']]) . '">删除 ';
            $r['status']     = $r['status'] ? "显示" : "隐藏";
            $array[]         = $r;
        }
        $tree->init($array);
        $str = "
             | 
            \$id | 
            \$spacer\$name | 
            \$status | 
            \$str_manage | 
        
";
        $categories = $tree->getTree(0, $str);
        $this->assign("categories", $categories);
        $this->assign('nav_id', $intNavId);
        return $this->fetch();
    }
    /**
     * 添加导航菜单
     * @adminMenu(
     *     'name'   => '添加导航菜单',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'order'  => 10000,
     *     'hasView'=> true,
     *     'icon'   => '',
     *     'remark' => '添加导航菜单',
     *     'param'  => ''
     * )
     */
    public function add()
    {
        $navMenuModel = new NavMenuModel();
        $intNavId     = $this->request->param("nav_id", 0, 'intval');
        $intParentId  = $this->request->param("parent_id", 0, 'intval');
        $objResult    = $navMenuModel->where("nav_id", $intNavId)->order(["list_order" => "ASC"])->select();
        $arrResult    = $objResult ? $objResult->toArray() : [];
        $tree       = new Tree();
        $tree->icon = [' │ ', ' ├─ ', ' └─ '];
        $tree->nbsp = ' ';
        $array      = [];
        foreach ($arrResult as $r) {
            $r['str_manage'] = ' $r['id']]) . '">添加子菜单 |  $r['id']]) . '">编辑 |  $r['id']]) . '">删除 ';
            $r['status']     = $r['status'] ? "显示" : "隐藏";
            $r['selected']   = $r['id'] == $intParentId ? "selected" : "";
            $array[]         = $r;
        }
        $tree->init($array);
        $str      = "";
        $navTrees = $tree->getTree(0, $str);
        $this->assign("nav_trees", $navTrees);
        $navs = $navMenuModel->selectNavs();
        $this->assign('navs', $navs);
        $this->assign("nav_id", $intNavId);
        return $this->fetch();
    }
    /**
     * 添加导航菜单提交保存
     * @adminMenu(
     *     'name'   => '添加导航菜单提交保存',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '添加导航菜单提交保存',
     *     'param'  => ''
     * )
     */
    public function addPost()
    {
        $navMenuModel = new NavMenuModel();
        $arrData      = $this->request->post();
        if (isset($arrData['external_href'])) {
            $arrData['href'] = htmlspecialchars_decode($arrData['external_href']);
        } else {
            $arrData['href'] = htmlspecialchars_decode($arrData['href']);
            $arrData['href'] = base64_decode($arrData['href']);
        }
        $navMenuModel->allowField(true)->isUpdate(false)->save($arrData);
        $this->success(lang("EDIT_SUCCESS"), url("NavMenu/index", ['nav_id' => $arrData['nav_id']]));
    }
    /**
     * 编辑导航菜单
     * @adminMenu(
     *     'name'   => '编辑导航菜单',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> true,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '编辑导航菜单',
     *     'param'  => ''
     * )
     */
    public function edit()
    {
        $navMenuModel = new NavMenuModel();
        $intNavId     = $this->request->param("nav_id", 0, 'intval');
        $intId        = $this->request->param("id", 0, 'intval');
        $intParentId  = $this->request->param("parent_id", 0, 'intval');
        $objResult    = $navMenuModel
            ->where("nav_id", $intNavId)
            ->where("id", "neq", $intId)
            ->order(["list_order" => "ASC"])
            ->select();
        $arrResult    = $objResult ? $objResult->toArray() : [];
        $tree       = new Tree();
        $tree->icon = [' │ ', ' ├─ ', ' └─ '];
        $tree->nbsp = '       ';
        $array      = [];
        foreach ($arrResult as $r) {
            $r['str_manage'] = ' $r['id'], "nav_id" => $intNavId]) . '">添加子菜单 |  $r['id'], "nav_id" => $intNavId]) . '">编辑 |  $r['id'], "nav_id" => $intNavId]) . '">删除 ';
            $r['status']     = $r['status'] ? "显示" : "隐藏";
            $r['selected']   = $r['id'] == $intParentId ? "selected" : "";
            $array[]         = $r;
        }
        $tree->init($array);
        $str       = "";
        $nav_trees = $tree->getTree(0, $str);
        $this->assign("nav_trees", $nav_trees);
        $objNav = $navMenuModel->where("id", $intId)->find();
        $arrNav = $objNav ? $objNav->toArray() : [];
        $arrNav['href_old'] = $arrNav['href'];
        if (strpos($arrNav['href'], "{") === 0 || $arrNav['href'] == 'home') {
            $arrNav['href'] = base64_encode($arrNav['href']);
        }
        $this->assign($arrNav);
        $navs = $navMenuModel->selectNavs();
        $this->assign('navs', $navs);
        $this->assign("nav_id", $intNavId);
        $this->assign("parent_id", $intParentId);
        return $this->fetch();
    }
    /**
     * 编辑导航菜单提交保存
     * @adminMenu(
     *     'name'   => '编辑导航菜单提交保存',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '编辑导航菜单提交保存',
     *     'param'  => ''
     * )
     */
    public function editPost()
    {
        $navMenuModel = new NavMenuModel();
        $intId        = $this->request->param('id', 0, 'intval');
        $arrData      = $this->request->post();
        if (isset($arrData['external_href'])) {
            $arrData['href'] = htmlspecialchars_decode($arrData['external_href']);
        } else {
            $arrData['href'] = htmlspecialchars_decode($arrData['href']);
            $arrData['href'] = base64_decode($arrData['href']);
        }
        $navMenuModel->update($arrData, ["id" => $intId], true);
        $this->success(lang("EDIT_SUCCESS"), url("NavMenu/index", ['nav_id' => $arrData['nav_id']]));
    }
    /**
     * 删除导航菜单
     * @adminMenu(
     *     'name'   => '删除导航菜单',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '删除导航菜单',
     *     'param'  => ''
     * )
     */
    public function delete()
    {
        $navMenuModel = new NavMenuModel();
        $intId    = $this->request->param("id", 0, "intval");
        $intNavId = $this->request->param("nav_id", 0, "intval");
        if (empty($intId)) {
            $this->error(lang("NO_ID"));
        }
        $count = $navMenuModel->where("parent_id", $intId)->count();
        if ($count > 0) {
            $this->error("该菜单下还有子菜单,无法删除!");
        }
        $navMenuModel->where("id", $intId)->delete();
        $this->success(lang("DELETE_SUCCESS"), url("NavMenu/index", ['nav_id' => $intNavId]));
    }
    /**
     * 导航菜单排序
     * @adminMenu(
     *     'name'   => '导航菜单排序',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '导航菜单排序',
     *     'param'  => ''
     * )
     */
    public function listOrder()
    {
        $navMenuModel = new NavMenuModel();
        $status       = parent::listOrders($navMenuModel);
        if ($status) {
            $this->success("排序更新成功!");
        } else {
            $this->error("排序更新失败!");
        }
    }
}