class SysmenusController(Base) :

  menus = {}
  tokenData = {}
  permAll = {}

  # 构造函数
  def __init__(self):
    # 验证
    self.tokenData = AdminToken().verify()

  # 获取[菜单]
  def getMenus(self):
    # 全部菜单
    self.menus = {}
    all = SysMenu().find({'columns':'id,fid,title,url,ico','order':'sort DESC,id'})
    for val in all :
      fid = str(val['fid'])
      if fid in self.menus : self.menus[fid] += [val]
      else : self.menus[fid] = [val]
    # 全部权限
    self.permAll = AdminToken().perm(self.tokenData['uid'])
    # 组合菜单
    return self.getJSON({'code':0,'menus':self._getMenu(0)})
  # 递归菜单
  def _getMenu(self,fid) :
    data = []
    M = self.menus[str(fid)] if str(fid) in self.menus else []
    for val in M :
      if str(val['id']) in self.permAll.keys() :
        val['children'] = self._getMenu(val['id'])
        data += [val]
    return data
class SysmenusController(Base):

    menus = {}
    tokenData = {}
    permAll = {}

    # 列表
    def list(self):
        # 验证
        AdminToken().urlVerify('SysMenus')
        # 搜索
        req = self.request()
        data = Inc.json_decode(req.get('data'))
        fid = data['fid'].strip() if 'fid' in data.keys() else ''
        title = data['title'].strip() if 'title' in data.keys() else ''
        url = data['url'].strip() if 'url' in data.keys() else ''
        where = 'fid LIKE "%:fid:%" AND title LIKE "%:title:%" AND url LIKE "%:url:%"'
        bind = {'fid': fid, 'title': title, 'url': url}
        # 查询
        model = SysMenu()
        model.where(where, bind)
        model.order('sort DESC, fid')
        # 统计
        total = model.count()
        # 分页
        page = req.get('page')
        limit = req.get('limit')
        start = (int(page) - 1) * int(limit)
        model.limit(str(start) + ',' + limit)
        # 数据
        list = model.find()
        # 状态
        for val in list:
            val['ctime'] = str(val['ctime']) if val['ctime'] else ''
            val['utime'] = str(val['utime']) if val['utime'] else ''
        return self.getJSON({
            'code': 0,
            'msg': '成功',
            'list': list,
            'total': total
        })

    # 添加
    def add(self):
        # 验证
        AdminToken().urlVerify('SysMenus')
        # 参数
        req = self.request()
        data = Inc.json_decode(req.get('data'))
        if not data or type(data) != dict:
            return self.getJSON({'code': 4000, 'msg': '参数错误!'})
        # 数据
        model = SysMenu()
        model.fid = data['fid'].strip() if 'fid' in data.keys() else '0'
        model.title = data['title'].strip() if 'title' in data.keys() else ''
        model.url = data['url'].strip() if 'url' in data.keys() else ''
        model.perm = data['perm'].strip() if 'perm' in data.keys() else '0'
        model.ico = data['ico'].strip() if 'ico' in data.keys() else ''
        model.sort = data['sort'].strip() if 'sort' in data.keys() else '0'
        model.remark = data['remark'].strip() if 'remark' in data.keys(
        ) else ''
        # 结果
        if model.create():
            return self.getJSON({'code': 0, 'msg': '成功'})
        else:
            return self.getJSON({'code': 5000, 'msg': '添加失败!'})

    # 编辑
    def edit(self):
        # 验证
        AdminToken().urlVerify('SysMenus')
        # 参数
        req = self.request()
        data = Inc.json_decode(req.get('data'))
        if not data or type(data) != dict:
            return self.getJSON({'code': 4000, 'msg': '参数错误!'})
        id = req.get('id')
        # 数据
        model = SysMenu()
        model.fid = data['fid'] if 'fid' in data.keys() else '0'
        model.title = data['title'].strip() if 'title' in data.keys() else ''
        model.url = data['url'].strip() if 'url' in data.keys() else ''
        model.perm = data['perm'] if 'perm' in data.keys() else '0'
        model.ico = data['ico'].strip() if 'ico' in data.keys() else ''
        model.sort = data['sort'] if 'sort' in data.keys() else '0'
        model.remark = data['remark'].strip() if 'remark' in data.keys(
        ) else ''
        model.where('id=:id:', {'id': id})
        # 结果
        if model.update():
            return self.getJSON({'code': 0, 'msg': '成功'})
        else:
            return self.getJSON({'code': 5000, 'msg': '编辑失败!'})

    # 删除
    def delete(self):
        # 验证
        AdminToken().urlVerify('SysMenus')
        # 参数
        req = self.request()
        data = Inc.json_decode(req.get('data'))
        if not data:
            return self.getJSON({'code': 4000, 'msg': '参数错误!'})
        # ID
        ids = Inc.implode(',', data)
        model = SysMenu()
        model.where('id in(:ids:)', {'ids': ids})
        # 结果
        if model.delete():
            return self.getJSON({'code': 0, 'msg': '成功'})
        else:
            return self.getJSON({'code': 5000, 'msg': '删除失败!'})

    # 获取[菜单]
    def getMenus(self):
        # 验证
        self.tokenData = AdminToken().verify()
        # 全部菜单
        self.menus = {}
        model = SysMenu()
        model.columns('id,fid,title,url,ico')
        model.order('sort DESC,id')
        all = model.find()
        for val in all:
            fid = str(val['fid'])
            if fid in self.menus: self.menus[fid] += [val]
            else: self.menus[fid] = [val]
        # 全部权限
        self.permAll = AdminToken().perm(self.tokenData['uid'])
        # 组合菜单
        return self.getJSON({'code': 0, 'menus': self._getMenu(0)})

    # 递归菜单
    def _getMenu(self, fid):
        data = []
        M = self.menus[str(fid)] if str(fid) in self.menus else []
        for val in M:
            if str(val['id']) in self.permAll.keys():
                val['children'] = self._getMenu(val['id'])
                data += [val]
        return data