magicblack пре 2 месеци
родитељ
комит
2b05559f0f

+ 1563 - 275
application/admin/common/auth.php

@@ -1,276 +1,1564 @@
 <?php
-return array(
-
-    '1' => array('name' => lang('menu/index'), 'icon' => 'xe625', 'sub' => array(
-        '11' => array("show"=>1,"name" =>lang('menu/welcome'), 'controller' => 'index', 'action' => 'welcome'),
-        '12' => array("show"=>1,"name" =>lang('menu/quickmenu'), 'controller' => 'index', 'action' => 'quickmenu'),
-
-        '1001' => array("show"=>0,"name" => '--切换布局', 'controller' => 'index', 'action' => 'iframe'),
-        '1002' => array("show"=>0,"name" => '--清理缓存', 'controller' => 'index', 'action' => 'clear'),
-        '1003' => array("show"=>0,"name" => '--锁屏解锁', 'controller' => 'index', 'action' => 'unlocked'),
-        '1004' => array("show"=>0,"name" => '--公共下拉选择框', 'controller' => 'index', 'action' => 'select'),
-        '1005' => array("show"=>0,"name" => '--文件上传', 'controller' => 'upload', 'action' => 'upload'),
-
-    )),
-
-    '2' => array('name' => lang('menu/system'), 'icon' => 'xe62e', 'sub' => array(
-        '21' => array("show"=>1,'name' => lang('menu/config'), 'controller' => 'system',				'action' => 'config'),
-        '210' => array("show"=>1,"name" => lang('menu/configseo'), 'controller' => 'system',			'action' => 'configseo'),
-        '211' => array("show"=>1,"name" => lang('menu/configuser'), 'controller' => 'system',			'action' => 'configuser'),
-        '212' => array("show"=>1,"name" => lang('menu/configcomment'), 'controller' => 'system',			'action' => 'configcomment'),
-        '213' => array("show"=>1,"name" => lang('menu/configupload'), 'controller' => 'system',			'action' => 'configupload'),
-        '22' => array("show"=>1,"name" => lang('menu/configurl'), 'controller' => 'system',				'action' => 'configurl'),
-        '23' => array("show"=>1,"name" => lang('menu/configplay'), 'controller' => 'system',			'action' => 'configplay'),
-        '24' => array("show"=>1,"name" => lang('menu/configcollect'), 'controller' => 'system',			'action' => 'configcollect'),
-        '25' => array("show"=>1,"name" => lang('menu/configinterface'), 'controller' => 'system',			'action' => 'configinterface'),
-        '26' => array("show"=>1,"name" => lang('menu/configapi'), 'controller' => 'system',			'action' => 'configapi'),
-        '27' => array("show"=>1,"name" => lang('menu/configconnect'), 'controller' => 'system',			'action' => 'configconnect'),
-        '28' => array("show"=>1,"name" => lang('menu/configpay'), 'controller' => 'system',			'action' => 'configpay'),
-        '29' => array("show"=>1,"name" => lang('menu/configweixin'), 'controller' => 'system',			'action' => 'configweixin'),
-        '291' => array("show"=>1,"name" => lang('menu/configemail'), 'controller' => 'system',			'action' => 'configemail'),
-        '292' => array("show"=>1,"name" => lang('menu/configsms'), 'controller' => 'system',			'action' => 'configsms'),
-
-        '2910' => array("show"=>1,"name" => lang('menu/timming'), 'controller' => 'timming',	'action' => 'index'),
-        '2911' => array("show"=>0,'name' => '--定时任务信息维护', 'controller' => 'timming',		'action' => 'info'),
-        '2912' => array("show"=>0,'name' => '--定时任务删除', 'controller' => 'timming',		'action' => 'del'),
-        '2913' => array("show"=>0,'name' => '--定时任务状态', 'controller' => 'timming',		'action' => 'field'),
-        '2920' => array("show"=>1,"name" => lang('menu/domain'), 'controller' => 'domain',	'action' => 'index'),
-        '2922' => array("show"=>0,'name' => '--站群删除', 'controller' => 'domain',		'action' => 'del'),
-        '2923' => array("show"=>0,'name' => '--站群导出', 'controller' => 'domain',		'action' => 'export'),
-        '2924' => array("show"=>0,'name' => '--站群导入', 'controller' => 'domain',		'action' => 'import'),
-    )),
-
-    '3' => array('name' => lang('menu/base'), 'icon' => 'xe64b', 'sub' => array(
-        '31' => array("show"=>1,'name' => lang('menu/type'), 'controller' => 'type',		'action' => 'index'),
-
-        '3101' => array("show"=>0,'name' => '--分类信息维护', 'controller' => 'type',		'action' => 'info'),
-        '3102' => array("show"=>0,'name' => '--分类批量修改', 'controller' => 'type',		'action' => 'batch'),
-        '3103' => array("show"=>0,'name' => '--分类删除', 'controller' => 'type',		'action' => 'del'),
-        '3104' => array("show"=>0,'name' => '--分类状态', 'controller' => 'type',		'action' => 'field'),
-        '3105' => array("show"=>0,'name' => '--分类扩展配置信息', 'controller' => 'type',		'action' => 'extend'),
-
-
-        '32' => array("show"=>1,'name' => lang('menu/topic'), 'controller' => 'topic',		'action' => 'data'),
-        '3201' => array("show"=>0,'name' => '--专题信息维护', 'controller' => 'topic',		'action' => 'info'),
-        '3202' => array("show"=>0,'name' => '--专题批量修改', 'controller' => 'topic',		'action' => 'batch'),
-        '3203' => array("show"=>0,'name' => '--专题删除', 'controller' => 'topic',		'action' => 'del'),
-        '3204' => array("show"=>0,'name' => '--专题状态', 'controller' => 'topic',		'action' => 'field'),
-
-        '33' => array("show"=>1,'name' => lang('menu/link'), 'controller' => 'link',		'action' => 'index'),
-        '3301' => array("show"=>0,'name' => '--友链信息维护', 'controller' => 'link',		'action' => 'info'),
-        '3302' => array("show"=>0,'name' => '--友链批量修改', 'controller' => 'link',		'action' => 'batch'),
-        '3303' => array("show"=>0,'name' => '--友链删除', 'controller' => 'link',		'action' => 'del'),
-        '3304' => array("show"=>0,'name' => '--友链状态', 'controller' => 'link',		'action' => 'field'),
-
-
-        '34' => array("show"=>1,'name' => lang('menu/gbook'), 'controller' => 'gbook',		'action' => 'data'),
-        '3401' => array("show"=>0,'name' => '--留言信息维护', 'controller' => 'gbook',		'action' => 'info'),
-        '3402' => array("show"=>0,'name' => '--留言删除', 'controller' => 'gbook',		'action' => 'del'),
-        '3404' => array("show"=>0,'name' => '--留言状态', 'controller' => 'gbook',		'action' => 'field'),
-
-        '35' => array("show"=>1,'name' => lang('menu/comment'), 'controller' => 'comment',		'action' => 'data'),
-        '3501' => array("show"=>0,'name' => '--评论信息维护', 'controller' => 'comment',		'action' => 'info'),
-        '3502' => array("show"=>0,'name' => '--评论删除', 'controller' => 'comment',		'action' => 'del'),
-        '3504' => array("show"=>0,'name' => '--评论状态', 'controller' => 'comment',		'action' => 'field'),
-
-        '36' => array("show"=>1,'name' => lang('menu/images'), 'controller' => 'annex',		'action' => 'data'),
-        '3604' => array("show"=>0,'name' => '--附件文件夹', 'controller' => 'annex',		'action' => 'file'),
-        '3605' => array("show"=>0,'name' => '--附件检测', 'controller' => 'annex',		'action' => 'check'),
-        '3606' => array("show"=>0,'name' => '--附件数据初始化', 'controller' => 'annex',		'action' => 'init'),
-        '3601' => array("show"=>0,'name' => '--附件删除', 'controller' => 'annex',		'action' => 'del'),
-        '3602' => array("show"=>0,'name' => '--同步图片选项', 'controller' => 'images',		'action' => 'opt'),
-        '3603' => array("show"=>0,'name' => '--同步图片方法', 'controller' => 'images',		'action' => 'sync'),
-    )),
-
-    '5' => array('name' => lang('menu/art'), 'icon' => 'xe616', 'sub' => array(
-
-        '51' => array("show"=>1,'name' => lang('menu/art_data'), 'controller' => 'art',		'action' => 'data'),
-        '5101' => array("show"=>0,'name' => '--文章信息维护', 'controller' => 'art',		'action' => 'info'),
-        '5102' => array("show"=>0,'name' => '--文章删除', 'controller' => 'art',		'action' => 'del'),
-        '5103' => array("show"=>0,'name' => '--文章状态', 'controller' => 'art',		'action' => 'field'),
-
-        '52' => array("show"=>1,'name' => lang('menu/art_add'), 'controller' => 'art',		'action' => 'info'),
-        '53' => array("show"=>1,'name' => lang('menu/art_data_lock'), 'controller' => 'art',		'action' => 'data','param'=>'lock=1'),
-        '54' => array("show"=>1,'name' => lang('menu/art_data_audit'), 'controller' => 'art',		'action' => 'data','param'=>'status=0'),
-        '59' => array("show"=>1,'name' => lang('menu/art_batch'), 'controller' => 'art',		'action' => 'batch'),
-        '591' => array("show"=>1,'name' => lang('menu/art_repeat'), 'controller' => 'art',		'action' => 'data', 'param'=>'repeat=1'),
-    )),
-
-
-    '4' => array('name' => lang('menu/vod'), 'icon' => 'xe639', 'sub' => array(
-        '41' => array("show"=>1,'name' => lang('menu/server'), 'controller' => 'vodserver',		'action' => 'index'),
-        '4101' => array("show"=>0,'name' => '--服务器组信息维护', 'controller' => 'vodserver',		'action' => 'info'),
-        '4102' => array("show"=>0,'name' => '--服务器组删除', 'controller' => 'vodserver',		'action' => 'del'),
-        '4103' => array("show"=>0,'name' => '--服务器组状态', 'controller' => 'vodserver',		'action' => 'field'),
-
-        '42' => array("show"=>1,'name' => lang('menu/player'), 'controller' => 'vodplayer',		'action' => 'index'),
-        '4201' => array("show"=>0,'name' => '--播放器信息维护', 'controller' => 'vodplayer',		'action' => 'info'),
-        '4202' => array("show"=>0,'name' => '--播放器删除', 'controller' => 'vodplayer',		'action' => 'del'),
-        '4203' => array("show"=>0,'name' => '--播放器组状态', 'controller' => 'vodplayer',		'action' => 'field'),
-
-        '43' => array("show"=>1,'name' => lang('menu/downer'), 'controller' => 'voddowner',		'action' => 'index'),
-        '4301' => array("show"=>0,'name' => '--下载器信息维护', 'controller' => 'voddowner',		'action' => 'info'),
-        '4302' => array("show"=>0,'name' => '--下载器删除', 'controller' => 'voddowner',		'action' => 'del'),
-        '4303' => array("show"=>0,'name' => '--下载器组状态', 'controller' => 'voddowner',		'action' => 'field'),
-
-        '44' => array("show"=>1,'name' => lang('menu/vod_data'), 'controller' => 'vod',		'action' => 'data'),
-        '4401' => array("show"=>0,'name' => '--视频信息维护', 'controller' => 'vod',		'action' => 'info'),
-        '4402' => array("show"=>0,'name' => '--视频删除', 'controller' => 'vod',		'action' => 'del'),
-        '4403' => array("show"=>0,'name' => '--视频状态', 'controller' => 'vod',		'action' => 'field'),
-
-        '45' => array("show"=>1,'name' => lang('menu/vod_add'), 'controller' => 'vod',		'action' => 'info'),
-        '46' => array("show"=>1,'name' => lang('menu/vod_data_url_empty'), 'controller' => 'vod',		'action' => 'data' , 'param'=>'url=1'),
-        '47' => array("show"=>1,'name' => lang('menu/vod_data_lock'), 'controller' => 'vod',		'action' => 'data', 'param'=>'lock=1'),
-        '48' => array("show"=>1,'name' => lang('menu/vod_data_audit'), 'controller' => 'vod',		'action' => 'data', 'param'=>'status=0'),
-        '481' => array("show"=>1,'name' => lang('menu/vod_data_points'), 'controller' => 'vod',		'action' => 'data', 'param'=>'points=1'),
-        '482' => array("show"=>1,'name' => lang('menu/vod_data_plot'), 'controller' => 'vod',		'action' => 'data', 'param'=>'plot=1'),
-        '49' => array("show"=>1,'name' => lang('menu/vod_batch'), 'controller' => 'vod',		'action' => 'batch'),
-        '491' => array("show"=>1,'name' => lang('menu/vod_repeat'), 'controller' => 'vod',		'action' => 'data', 'param'=>'repeat=1'),
-
-        '495' => array("show"=>1,'name' => lang('menu/actor'), 'controller' => 'actor',		'action' => 'data', 'param'=>''),
-        '4951' => array("show"=>0,'name' => '--演员信息维护', 'controller' => 'actor',		'action' => 'info'),
-        '4952' => array("show"=>0,'name' => '--演员删除', 'controller' => 'actor',		'action' => 'del'),
-        '4953' => array("show"=>0,'name' => '--演员状态', 'controller' => 'actor',		'action' => 'field'),
-        '4954' => array("show"=>0,'name' => '--添加演员', 'controller' => 'actor',		'action' => 'info'),
-
-        '496' => array("show"=>1,'name' => lang('menu/role'), 'controller' => 'role',		'action' => 'data', 'param'=>''),
-        '4961' => array("show"=>0,'name' => '--角色信息维护', 'controller' => 'role',		'action' => 'info'),
-        '4962' => array("show"=>0,'name' => '--角色删除', 'controller' => 'role',		'action' => 'del'),
-        '4963' => array("show"=>0,'name' => '--角色状态', 'controller' => 'role',		'action' => 'field'),
-        '4964' => array("show"=>0,'name' => '--添加角色', 'controller' => 'role',		'action' => 'info'),
-    )),
-
-
-    '12' => array('name' => lang('menu/website'), 'icon' => 'xe616', 'sub' => array(
-
-        '121' => array("show"=>1,'name' => lang('menu/website_data'), 'controller' => 'website',		'action' => 'data'),
-        '12101' => array("show"=>0,'name' => '--网址信息维护', 'controller' => 'website',		'action' => 'info'),
-        '12102' => array("show"=>0,'name' => '--网址删除', 'controller' => 'website',		'action' => 'del'),
-        '12103' => array("show"=>0,'name' => '--网址状态', 'controller' => 'website',		'action' => 'field'),
-
-        '122' => array("show"=>1,'name' => lang('menu/website_add'), 'controller' => 'website',		'action' => 'info'),
-        '123' => array("show"=>1,'name' => lang('menu/website_data_lock'), 'controller' => 'website',		'action' => 'data','param'=>'lock=1'),
-        '124' => array("show"=>1,'name' => lang('menu/website_data_audit'), 'controller' => 'website',		'action' => 'data','param'=>'status=0'),
-        '129' => array("show"=>1,'name' => lang('menu/website_batch'), 'controller' => 'website',		'action' => 'batch'),
-        '1291' => array("show"=>1,'name' => lang('menu/website_repeat'), 'controller' => 'website',		'action' => 'data', 'param'=>'repeat=1'),
-    )),
-
-    '6' => array('name' => lang('menu/users'), 'icon' => 'xe62c', 'sub' => array(
-        '61' => array("show"=>1,'name' => lang('menu/admin'), 'controller' => 'admin',		'action' => 'index'),
-        '6101' => array("show"=>0,'name' => '--管理员信息维护', 'controller' => 'admin',		'action' => 'info'),
-        '6102' => array("show"=>0,'name' => '--管理员删除', 'controller' => 'admin',		'action' => 'del'),
-        '6103' => array("show"=>0,'name' => '--管理员状态', 'controller' => 'admin',		'action' => 'field'),
-
-        '62' => array("show"=>1,'name' => lang('menu/group'), 'controller' => 'group',		'action' => 'index'),
-        '6201' => array("show"=>0,'name' => '--会员组信息维护', 'controller' => 'group',		'action' => 'info'),
-        '6202' => array("show"=>0,'name' => '--会员组删除', 'controller' => 'group',		'action' => 'del'),
-        '6203' => array("show"=>0,'name' => '--会员组状态', 'controller' => 'group',		'action' => 'field'),
-
-        '63' => array("show"=>1,'name' => lang('menu/user'), 'controller' => 'user',		'action' => 'data'),
-        '6301' => array("show"=>0,'name' => '--会员信息维护', 'controller' => 'user',		'action' => 'info'),
-        '6302' => array("show"=>0,'name' => '--会员删除', 'controller' => 'user',		'action' => 'del'),
-        '6303' => array("show"=>0,'name' => '--会员状态', 'controller' => 'user',		'action' => 'field'),
-
-        '64' => array("show"=>1,'name' => lang('menu/card'), 'controller' => 'card',		'action' => 'index'),
-        '6401' => array("show"=>0,'name' => '--充值卡信息维护', 'controller' => 'card',		'action' => 'info'),
-        '6402' => array("show"=>0,'name' => '--充值卡删除', 'controller' => 'card',		'action' => 'del'),
-
-        '65' => array("show"=>1,'name' => lang('menu/order'), 'controller' => 'order',		'action' => 'index'),
-        '6501' => array("show"=>0,'name' => '--订单删除', 'controller' => 'order',		'action' => 'del'),
-
-        '66' => array("show"=>1,'name' => lang('menu/ulog'), 'controller' => 'ulog',		'action' => 'index'),
-        '6601' => array("show"=>0,'name' => '--访问日志删除', 'controller' => 'ulog',		'action' => 'del'),
-
-        '67' => array("show"=>1,'name' => lang('menu/plog'), 'controller' => 'plog',		'action' => 'index'),
-        '6701' => array("show"=>0,'name' => '--积分日志删除', 'controller' => 'plog',		'action' => 'del'),
-
-        '68' => array("show"=>1,'name' => lang('menu/cash'), 'controller' => 'cash',		'action' => 'index'),
-        '6801' => array("show"=>0,'name' => '--提现删除', 'controller' => 'cash',		'action' => 'del'),
-        '6802' => array("show"=>0,'name' => '--提现审核', 'controller' => 'cash',		'action' => 'audit'),
-
-    )),
-
-    '7' => array('name' => lang('menu/templates'), 'icon' => 'xe72d', 'sub' => array(
-        '71' => array("show"=>1,'name' => lang('menu/template'), 'controller' => 'template',		'action' => 'index'),
-        '7101' => array("show"=>0,'name' => '--模板信息维护', 'controller' => 'template',		'action' => 'info'),
-        '7102' => array("show"=>0,'name' => '--模板删除', 'controller' => 'template',		'action' => 'del'),
-
-        '72' => array("show"=>1,'name' => lang('menu/ads'), 'controller' => 'template',		'action' => 'ads',  'param'=>''),
-        '73' => array("show"=>1,'name' => lang('menu/wizard'), 'controller' => 'template',		'action' => 'wizard'),
-    )),
-
-    '8' => array('name' => lang('menu/make'), 'icon' => 'xe63e', 'sub' => array(
-        '81' => array("show"=>1,'name' => lang('menu/make_opt'), 'controller' => 'make',		'action' => 'opt'),
-        '82' => array("show"=>1,'name' => lang('menu/make_index'), 'controller' => 'make',		'action' => 'index'),
-        '821' => array("show"=>1,'name' => lang('menu/make_index_wap'), 'controller' => 'make',		'action' => 'index?ac2=wap'),
-        '83' => array("show"=>1,'name' => lang('menu/make_map'), 'controller' => 'make',		'action' => 'map'),
-
-
-        '8101' => array("show"=>0,'name' => '--生成入口', 'controller' => 'make',		'action' => 'make'),
-        '8102' => array("show"=>0,'name' => '--生成RSS', 'controller' => 'make',		'action' => 'rss'),
-        '8103' => array("show"=>0,'name' => '--生成分类', 'controller' => 'make',		'action' => 'type'),
-        '8104' => array("show"=>0,'name' => '--生成专题首页', 'controller' => 'make',		'action' => 'topic_index'),
-        '8105' => array("show"=>0,'name' => '--生成专题内容', 'controller' => 'make',		'action' => 'topic_info'),
-        '8106' => array("show"=>0,'name' => '--生成内容页', 'controller' => 'make',		'action' => 'info'),
-        '8107' => array("show"=>0,'name' => '--生成自定义页', 'controller' => 'make',		'action' => 'label'),
-
-
-    )),
-
-    '9' => array('name' => lang('menu/cjs'), 'icon' => 'xe727', 'sub' => array(
-        '91' => array("show"=>0,'name' => lang('menu/union'), 'controller' => 'collect',		'action' => 'union'),
-        '9101' => array("show"=>0,'name' => '--采集入口', 'controller' => 'collect',		'action' => 'api'),
-        '9102' => array("show"=>0,'name' => '--断点采集', 'controller' => 'collect',		'action' => 'load'),
-        '9103' => array("show"=>0,'name' => '--绑定分类', 'controller' => 'collect',		'action' => 'bind'),
-        '9104' => array("show"=>0,'name' => '--采集视频', 'controller' => 'collect',		'action' => 'vod'),
-        '9105' => array("show"=>0,'name' => '--采集文章', 'controller' => 'collect',		'action' => 'art'),
-        '92' => array("show"=>0,'name' => lang('menu/collect_timming'), 'controller' => 'collect',		'action' => 'timing'),
-
-        '93' => array("show"=>1,'name' => lang('menu/collect'), 'controller' => 'collect',		'action' => 'index'),
-        '9301' => array("show"=>0,'name' => '--自定义资源信息维护', 'controller' => 'collect',		'action' => 'info'),
-        '9302' => array("show"=>0,'name' => '--自定义资源删除', 'controller' => 'collect',		'action' => 'del'),
-
-        '94' => array("show"=>1,'name' => lang('menu/cj'), 'controller' => 'cj',		'action' => 'index'),
-        '9401' => array("show"=>0,'name' => '--自定义规则信息维护', 'controller' => 'cj',		'action' => 'info'),
-        '9402' => array("show"=>0,'name' => '--自定义规则删除', 'controller' => 'cj',		'action' => 'del'),
-        '9403' => array("show"=>0,'name' => '--自定义规则发布方案', 'controller' => 'cj',		'action' => 'program'),
-        '9404' => array("show"=>0,'name' => '--自定义规则采集网址', 'controller' => 'cj',		'action' => 'col_url'),
-        '9405' => array("show"=>0,'name' => '--自定义规则采集内容', 'controller' => 'cj',		'action' => 'col_content'),
-        '9406' => array("show"=>0,'name' => '--自定义规则发布内容', 'controller' => 'cj',		'action' => 'publish'),
-        '9407' => array("show"=>0,'name' => '--自定义规则导出', 'controller' => 'cj',		'action' => 'export'),
-        '9408' => array("show"=>0,'name' => '--自定义规则导入', 'controller' => 'cj',		'action' => 'import'),
-
-    )),
-
-    '10' => array('name' => lang('menu/db'), 'icon' => 'xe621', 'sub' => array(
-        '101' => array("show"=>1,'name' => lang('menu/database'), 'controller' => 'database',		'action' => 'index'),
-        '10001' => array("show"=>0,'name' => '--数据库备份', 'controller' => 'database',		'action' => 'export'),
-        '10002' => array("show"=>0,'name' => '--数据库还原', 'controller' => 'database',		'action' => 'import'),
-        '10003' => array("show"=>0,'name' => '--数据库优化', 'controller' => 'database',		'action' => 'optimize'),
-        '10004' => array("show"=>0,'name' => '--数据库修复', 'controller' => 'database',		'action' => 'repair'),
-        '10005' => array("show"=>0,'name' => '--数据库删除备份', 'controller' => 'database',		'action' => 'del'),
-        '10006' => array("show"=>0,'name' => '--数据库表信息', 'controller' => 'database',		'action' => 'columns'),
-
-        '102' => array("show"=>1,'name' => lang('menu/database_sql'), 'controller' => 'database',		'action' => 'sql'),
-        '103' => array("show"=>1,'name' => lang('menu/database_rep'), 'controller' => 'database',		'action' => 'rep'),
-    )),
-    '11' => array('name' => lang('menu/apps'), 'icon' => 'xe621', 'sub' => array(
-        '111' => array("show"=>1,'name' => lang('menu/addon'), 'controller' => 'addon',		'action' => 'index', 'param'=>''),
-        '112' => array("show"=>1,'name' => lang('menu/urlsend'), 'controller' => 'urlsend',		'action' => 'index', 'param'=>''),
-        '113' => array("show"=>1,'name' => lang('menu/safety_file'), 'controller' => 'safety',		'action' => 'file', 'param'=>''),
-        '114' => array("show"=>1,'name' => lang('menu/safety_data'), 'controller' => 'safety',		'action' => 'data', 'param'=>''),
-        '11200' => array("show"=>0,'name' => '--推送入口', 'controller' => 'urlsend',		'action' => 'push'),
-        '11201' => array("show"=>0,'name' => '--百度主动推送', 'controller' => 'urlsend',		'action' => 'baidu_push'),
-        '11202' => array("show"=>0,'name' => '--百度熊掌推送', 'controller' => 'urlsend',		'action' => 'baidu_bear'),
-
-        '11100' => array("show"=>0,'name' => '--应用插件列表', 'controller' => 'addon',		'action' => 'downloaded'),
-        '11101' => array("show"=>0,'name' => '--应用插件安装', 'controller' => 'addon',		'action' => 'install'),
-        '11102' => array("show"=>0,'name' => '--应用插件卸载', 'controller' => 'addon',		'action' => 'uninstall'),
-        '11103' => array("show"=>0,'name' => '--应用插件配置', 'controller' => 'addon',		'action' => 'config'),
-        '11104' => array("show"=>0,'name' => '--应用插件状态', 'controller' => 'addon',		'action' => 'state'),
-        '11105' => array("show"=>0,'name' => '--应用插件上传', 'controller' => 'addon',		'action' => 'local'),
-        '11106' => array("show"=>0,'name' => '--应用插件升级', 'controller' => 'addon',		'action' => 'upgrade'),
-        '11107' => array("show"=>0,'name' => '--应用插件添加', 'controller' => 'addon',		'action' => 'add'),
-    )),
-
-);
+return array (
+  1 => 
+  array (
+    'name' => '首页',
+    'icon' => 'xe625',
+    'sub' => 
+    array (
+      11 => 
+      array (
+        'show' => 1,
+        'name' => '欢迎页面',
+        'controller' => 'index',
+        'action' => 'welcome',
+      ),
+      12 => 
+      array (
+        'show' => 1,
+        'name' => '自定义菜单配置',
+        'controller' => 'index',
+        'action' => 'quickmenu',
+      ),
+      1001 => 
+      array (
+        'show' => 0,
+        'name' => '--切换布局',
+        'controller' => 'index',
+        'action' => 'iframe',
+      ),
+      1002 => 
+      array (
+        'show' => 0,
+        'name' => '--清理缓存',
+        'controller' => 'index',
+        'action' => 'clear',
+      ),
+      1003 => 
+      array (
+        'show' => 0,
+        'name' => '--锁屏解锁',
+        'controller' => 'index',
+        'action' => 'unlocked',
+      ),
+      1004 => 
+      array (
+        'show' => 0,
+        'name' => '--公共下拉选择框',
+        'controller' => 'index',
+        'action' => 'select',
+      ),
+      1005 => 
+      array (
+        'show' => 0,
+        'name' => '--文件上传',
+        'controller' => 'upload',
+        'action' => 'upload',
+      ),
+    ),
+  ),
+  2 => 
+  array (
+    'name' => '系统',
+    'icon' => 'xe62e',
+    'sub' => 
+    array (
+      21 => 
+      array (
+        'show' => 1,
+        'name' => '网站参数配置',
+        'controller' => 'system',
+        'action' => 'config',
+      ),
+      210 => 
+      array (
+        'show' => 1,
+        'name' => 'SEO参数配置',
+        'controller' => 'system',
+        'action' => 'configseo',
+      ),
+      211 => 
+      array (
+        'show' => 1,
+        'name' => '会员参数配置',
+        'controller' => 'system',
+        'action' => 'configuser',
+      ),
+      212 => 
+      array (
+        'show' => 1,
+        'name' => '评论留言配置',
+        'controller' => 'system',
+        'action' => 'configcomment',
+      ),
+      213 => 
+      array (
+        'show' => 1,
+        'name' => '附件参数配置',
+        'controller' => 'system',
+        'action' => 'configupload',
+      ),
+      22 => 
+      array (
+        'show' => 1,
+        'name' => 'URL地址配置',
+        'controller' => 'system',
+        'action' => 'configurl',
+      ),
+      23 => 
+      array (
+        'show' => 1,
+        'name' => '播放器参数配置',
+        'controller' => 'system',
+        'action' => 'configplay',
+      ),
+      24 => 
+      array (
+        'show' => 1,
+        'name' => '采集参数配置',
+        'controller' => 'system',
+        'action' => 'configcollect',
+      ),
+      25 => 
+      array (
+        'show' => 1,
+        'name' => '站外入库配置',
+        'controller' => 'system',
+        'action' => 'configinterface',
+      ),
+      26 => 
+      array (
+        'show' => 1,
+        'name' => '开放API配置',
+        'controller' => 'system',
+        'action' => 'configapi',
+      ),
+      27 => 
+      array (
+        'show' => 1,
+        'name' => '整合登录配置',
+        'controller' => 'system',
+        'action' => 'configconnect',
+      ),
+      28 => 
+      array (
+        'show' => 1,
+        'name' => '在线支付配置',
+        'controller' => 'system',
+        'action' => 'configpay',
+      ),
+      29 => 
+      array (
+        'show' => 1,
+        'name' => '微信对接配置',
+        'controller' => 'system',
+        'action' => 'configweixin',
+      ),
+      291 => 
+      array (
+        'show' => 1,
+        'name' => '邮件发送配置',
+        'controller' => 'system',
+        'action' => 'configemail',
+      ),
+      292 => 
+      array (
+        'show' => 1,
+        'name' => '短信发送配置',
+        'controller' => 'system',
+        'action' => 'configsms',
+      ),
+      2910 => 
+      array (
+        'show' => 1,
+        'name' => '定时任务配置',
+        'controller' => 'timming',
+        'action' => 'index',
+      ),
+      2911 => 
+      array (
+        'show' => 0,
+        'name' => '--定时任务信息维护',
+        'controller' => 'timming',
+        'action' => 'info',
+      ),
+      2912 => 
+      array (
+        'show' => 0,
+        'name' => '--定时任务删除',
+        'controller' => 'timming',
+        'action' => 'del',
+      ),
+      2913 => 
+      array (
+        'show' => 0,
+        'name' => '--定时任务状态',
+        'controller' => 'timming',
+        'action' => 'field',
+      ),
+      2920 => 
+      array (
+        'show' => 1,
+        'name' => '站群管理配置',
+        'controller' => 'domain',
+        'action' => 'index',
+      ),
+      2922 => 
+      array (
+        'show' => 0,
+        'name' => '--站群删除',
+        'controller' => 'domain',
+        'action' => 'del',
+      ),
+      2923 => 
+      array (
+        'show' => 0,
+        'name' => '--站群导出',
+        'controller' => 'domain',
+        'action' => 'export',
+      ),
+      2924 => 
+      array (
+        'show' => 0,
+        'name' => '--站群导入',
+        'controller' => 'domain',
+        'action' => 'import',
+      ),
+    ),
+  ),
+  3 => 
+  array (
+    'name' => '基础',
+    'icon' => 'xe64b',
+    'sub' => 
+    array (
+      31 => 
+      array (
+        'show' => 1,
+        'name' => '分类管理',
+        'controller' => 'type',
+        'action' => 'index',
+      ),
+      3101 => 
+      array (
+        'show' => 0,
+        'name' => '--分类信息维护',
+        'controller' => 'type',
+        'action' => 'info',
+      ),
+      3102 => 
+      array (
+        'show' => 0,
+        'name' => '--分类批量修改',
+        'controller' => 'type',
+        'action' => 'batch',
+      ),
+      3103 => 
+      array (
+        'show' => 0,
+        'name' => '--分类删除',
+        'controller' => 'type',
+        'action' => 'del',
+      ),
+      3104 => 
+      array (
+        'show' => 0,
+        'name' => '--分类状态',
+        'controller' => 'type',
+        'action' => 'field',
+      ),
+      3105 => 
+      array (
+        'show' => 0,
+        'name' => '--分类扩展配置信息',
+        'controller' => 'type',
+        'action' => 'extend',
+      ),
+      32 => 
+      array (
+        'show' => 1,
+        'name' => '专题管理',
+        'controller' => 'topic',
+        'action' => 'data',
+      ),
+      3201 => 
+      array (
+        'show' => 0,
+        'name' => '--专题信息维护',
+        'controller' => 'topic',
+        'action' => 'info',
+      ),
+      3202 => 
+      array (
+        'show' => 0,
+        'name' => '--专题批量修改',
+        'controller' => 'topic',
+        'action' => 'batch',
+      ),
+      3203 => 
+      array (
+        'show' => 0,
+        'name' => '--专题删除',
+        'controller' => 'topic',
+        'action' => 'del',
+      ),
+      3204 => 
+      array (
+        'show' => 0,
+        'name' => '--专题状态',
+        'controller' => 'topic',
+        'action' => 'field',
+      ),
+      33 => 
+      array (
+        'show' => 1,
+        'name' => '友链管理',
+        'controller' => 'link',
+        'action' => 'index',
+      ),
+      3301 => 
+      array (
+        'show' => 0,
+        'name' => '--友链信息维护',
+        'controller' => 'link',
+        'action' => 'info',
+      ),
+      3302 => 
+      array (
+        'show' => 0,
+        'name' => '--友链批量修改',
+        'controller' => 'link',
+        'action' => 'batch',
+      ),
+      3303 => 
+      array (
+        'show' => 0,
+        'name' => '--友链删除',
+        'controller' => 'link',
+        'action' => 'del',
+      ),
+      3304 => 
+      array (
+        'show' => 0,
+        'name' => '--友链状态',
+        'controller' => 'link',
+        'action' => 'field',
+      ),
+      34 => 
+      array (
+        'show' => 1,
+        'name' => '留言管理',
+        'controller' => 'gbook',
+        'action' => 'data',
+      ),
+      3401 => 
+      array (
+        'show' => 0,
+        'name' => '--留言信息维护',
+        'controller' => 'gbook',
+        'action' => 'info',
+      ),
+      3402 => 
+      array (
+        'show' => 0,
+        'name' => '--留言删除',
+        'controller' => 'gbook',
+        'action' => 'del',
+      ),
+      3404 => 
+      array (
+        'show' => 0,
+        'name' => '--留言状态',
+        'controller' => 'gbook',
+        'action' => 'field',
+      ),
+      35 => 
+      array (
+        'show' => 1,
+        'name' => '评论管理',
+        'controller' => 'comment',
+        'action' => 'data',
+      ),
+      3501 => 
+      array (
+        'show' => 0,
+        'name' => '--评论信息维护',
+        'controller' => 'comment',
+        'action' => 'info',
+      ),
+      3502 => 
+      array (
+        'show' => 0,
+        'name' => '--评论删除',
+        'controller' => 'comment',
+        'action' => 'del',
+      ),
+      3504 => 
+      array (
+        'show' => 0,
+        'name' => '--评论状态',
+        'controller' => 'comment',
+        'action' => 'field',
+      ),
+      36 => 
+      array (
+        'show' => 1,
+        'name' => '附件管理',
+        'controller' => 'annex',
+        'action' => 'data',
+      ),
+      3604 => 
+      array (
+        'show' => 0,
+        'name' => '--附件文件夹',
+        'controller' => 'annex',
+        'action' => 'file',
+      ),
+      3605 => 
+      array (
+        'show' => 0,
+        'name' => '--附件检测',
+        'controller' => 'annex',
+        'action' => 'check',
+      ),
+      3606 => 
+      array (
+        'show' => 0,
+        'name' => '--附件数据初始化',
+        'controller' => 'annex',
+        'action' => 'init',
+      ),
+      3601 => 
+      array (
+        'show' => 0,
+        'name' => '--附件删除',
+        'controller' => 'annex',
+        'action' => 'del',
+      ),
+      3602 => 
+      array (
+        'show' => 0,
+        'name' => '--同步图片选项',
+        'controller' => 'images',
+        'action' => 'opt',
+      ),
+      3603 => 
+      array (
+        'show' => 0,
+        'name' => '--同步图片方法',
+        'controller' => 'images',
+        'action' => 'sync',
+      ),
+    ),
+  ),
+  5 => 
+  array (
+    'name' => '文章',
+    'icon' => 'xe616',
+    'sub' => 
+    array (
+      51 => 
+      array (
+        'show' => 1,
+        'name' => '文章数据',
+        'controller' => 'art',
+        'action' => 'data',
+      ),
+      5101 => 
+      array (
+        'show' => 0,
+        'name' => '--文章信息维护',
+        'controller' => 'art',
+        'action' => 'info',
+      ),
+      5102 => 
+      array (
+        'show' => 0,
+        'name' => '--文章删除',
+        'controller' => 'art',
+        'action' => 'del',
+      ),
+      5103 => 
+      array (
+        'show' => 0,
+        'name' => '--文章状态',
+        'controller' => 'art',
+        'action' => 'field',
+      ),
+      52 => 
+      array (
+        'show' => 1,
+        'name' => '添加文章',
+        'controller' => 'art',
+        'action' => 'info',
+      ),
+      53 => 
+      array (
+        'show' => 1,
+        'name' => '已锁定文章',
+        'controller' => 'art',
+        'action' => 'data',
+        'param' => 'lock=1',
+      ),
+      54 => 
+      array (
+        'show' => 1,
+        'name' => '未审核文章',
+        'controller' => 'art',
+        'action' => 'data',
+        'param' => 'status=0',
+      ),
+      59 => 
+      array (
+        'show' => 1,
+        'name' => '批量操作文章',
+        'controller' => 'art',
+        'action' => 'batch',
+      ),
+      591 => 
+      array (
+        'show' => 1,
+        'name' => '重名文章数据',
+        'controller' => 'art',
+        'action' => 'data',
+        'param' => 'repeat=1',
+      ),
+    ),
+  ),
+  13 => 
+  array (
+    'name' => '漫画',
+    'icon' => 'xe616',
+    'sub' => 
+    array (
+      131 => 
+      array (
+        'show' => 1,
+        'name' => '漫画数据',
+        'controller' => 'manga',
+        'action' => 'data',
+      ),
+      13101 => 
+      array (
+        'show' => 0,
+        'name' => '--漫画信息维护',
+        'controller' => 'manga',
+        'action' => 'info',
+      ),
+      13102 => 
+      array (
+        'show' => 0,
+        'name' => '--漫画删除',
+        'controller' => 'manga',
+        'action' => 'del',
+      ),
+      13103 => 
+      array (
+        'show' => 0,
+        'name' => '--漫画状态',
+        'controller' => 'manga',
+        'action' => 'field',
+      ),
+      132 => 
+      array (
+        'show' => 1,
+        'name' => '添加漫画',
+        'controller' => 'manga',
+        'action' => 'info',
+      ),
+      133 => 
+      array (
+        'show' => 1,
+        'name' => '已锁定漫画',
+        'controller' => 'manga',
+        'action' => 'data',
+        'param' => 'lock=1',
+      ),
+      134 => 
+      array (
+        'show' => 1,
+        'name' => '未审核漫画',
+        'controller' => 'manga',
+        'action' => 'data',
+        'param' => 'status=0',
+      ),
+      139 => 
+      array (
+        'show' => 1,
+        'name' => '批量操作漫画',
+        'controller' => 'manga',
+        'action' => 'batch',
+      ),
+      1391 => 
+      array (
+        'show' => 1,
+        'name' => '重名漫画数据',
+        'controller' => 'manga',
+        'action' => 'data',
+        'param' => 'repeat=1',
+      ),
+    ),
+  ),
+  4 => 
+  array (
+    'name' => '视频',
+    'icon' => 'xe639',
+    'sub' => 
+    array (
+      41 => 
+      array (
+        'show' => 1,
+        'name' => '服务器组',
+        'controller' => 'vodserver',
+        'action' => 'index',
+      ),
+      4101 => 
+      array (
+        'show' => 0,
+        'name' => '--服务器组信息维护',
+        'controller' => 'vodserver',
+        'action' => 'info',
+      ),
+      4102 => 
+      array (
+        'show' => 0,
+        'name' => '--服务器组删除',
+        'controller' => 'vodserver',
+        'action' => 'del',
+      ),
+      4103 => 
+      array (
+        'show' => 0,
+        'name' => '--服务器组状态',
+        'controller' => 'vodserver',
+        'action' => 'field',
+      ),
+      42 => 
+      array (
+        'show' => 1,
+        'name' => '播放器',
+        'controller' => 'vodplayer',
+        'action' => 'index',
+      ),
+      4201 => 
+      array (
+        'show' => 0,
+        'name' => '--播放器信息维护',
+        'controller' => 'vodplayer',
+        'action' => 'info',
+      ),
+      4202 => 
+      array (
+        'show' => 0,
+        'name' => '--播放器删除',
+        'controller' => 'vodplayer',
+        'action' => 'del',
+      ),
+      4203 => 
+      array (
+        'show' => 0,
+        'name' => '--播放器组状态',
+        'controller' => 'vodplayer',
+        'action' => 'field',
+      ),
+      43 => 
+      array (
+        'show' => 1,
+        'name' => '下载器',
+        'controller' => 'voddowner',
+        'action' => 'index',
+      ),
+      4301 => 
+      array (
+        'show' => 0,
+        'name' => '--下载器信息维护',
+        'controller' => 'voddowner',
+        'action' => 'info',
+      ),
+      4302 => 
+      array (
+        'show' => 0,
+        'name' => '--下载器删除',
+        'controller' => 'voddowner',
+        'action' => 'del',
+      ),
+      4303 => 
+      array (
+        'show' => 0,
+        'name' => '--下载器组状态',
+        'controller' => 'voddowner',
+        'action' => 'field',
+      ),
+      44 => 
+      array (
+        'show' => 1,
+        'name' => '视频数据',
+        'controller' => 'vod',
+        'action' => 'data',
+      ),
+      4401 => 
+      array (
+        'show' => 0,
+        'name' => '--视频信息维护',
+        'controller' => 'vod',
+        'action' => 'info',
+      ),
+      4402 => 
+      array (
+        'show' => 0,
+        'name' => '--视频删除',
+        'controller' => 'vod',
+        'action' => 'del',
+      ),
+      4403 => 
+      array (
+        'show' => 0,
+        'name' => '--视频状态',
+        'controller' => 'vod',
+        'action' => 'field',
+      ),
+      45 => 
+      array (
+        'show' => 1,
+        'name' => '添加视频',
+        'controller' => 'vod',
+        'action' => 'info',
+      ),
+      46 => 
+      array (
+        'show' => 1,
+        'name' => '无地址视频',
+        'controller' => 'vod',
+        'action' => 'data',
+        'param' => 'url=1',
+      ),
+      47 => 
+      array (
+        'show' => 1,
+        'name' => '已锁定视频',
+        'controller' => 'vod',
+        'action' => 'data',
+        'param' => 'lock=1',
+      ),
+      48 => 
+      array (
+        'show' => 1,
+        'name' => '未审核视频',
+        'controller' => 'vod',
+        'action' => 'data',
+        'param' => 'status=0',
+      ),
+      481 => 
+      array (
+        'show' => 1,
+        'name' => '需积分视频',
+        'controller' => 'vod',
+        'action' => 'data',
+        'param' => 'points=1',
+      ),
+      482 => 
+      array (
+        'show' => 1,
+        'name' => '有分集剧情',
+        'controller' => 'vod',
+        'action' => 'data',
+        'param' => 'plot=1',
+      ),
+      49 => 
+      array (
+        'show' => 1,
+        'name' => '批量操作视频',
+        'controller' => 'vod',
+        'action' => 'batch',
+      ),
+      491 => 
+      array (
+        'show' => 1,
+        'name' => '重名视频数据',
+        'controller' => 'vod',
+        'action' => 'data',
+        'param' => 'repeat=1',
+      ),
+      495 => 
+      array (
+        'show' => 1,
+        'name' => '演员库',
+        'controller' => 'actor',
+        'action' => 'data',
+        'param' => '',
+      ),
+      4951 => 
+      array (
+        'show' => 0,
+        'name' => '--演员信息维护',
+        'controller' => 'actor',
+        'action' => 'info',
+      ),
+      4952 => 
+      array (
+        'show' => 0,
+        'name' => '--演员删除',
+        'controller' => 'actor',
+        'action' => 'del',
+      ),
+      4953 => 
+      array (
+        'show' => 0,
+        'name' => '--演员状态',
+        'controller' => 'actor',
+        'action' => 'field',
+      ),
+      4954 => 
+      array (
+        'show' => 0,
+        'name' => '--添加演员',
+        'controller' => 'actor',
+        'action' => 'info',
+      ),
+      496 => 
+      array (
+        'show' => 1,
+        'name' => '角色库',
+        'controller' => 'role',
+        'action' => 'data',
+        'param' => '',
+      ),
+      4961 => 
+      array (
+        'show' => 0,
+        'name' => '--角色信息维护',
+        'controller' => 'role',
+        'action' => 'info',
+      ),
+      4962 => 
+      array (
+        'show' => 0,
+        'name' => '--角色删除',
+        'controller' => 'role',
+        'action' => 'del',
+      ),
+      4963 => 
+      array (
+        'show' => 0,
+        'name' => '--角色状态',
+        'controller' => 'role',
+        'action' => 'field',
+      ),
+      4964 => 
+      array (
+        'show' => 0,
+        'name' => '--添加角色',
+        'controller' => 'role',
+        'action' => 'info',
+      ),
+    ),
+  ),
+  12 => 
+  array (
+    'name' => '网址',
+    'icon' => 'xe616',
+    'sub' => 
+    array (
+      121 => 
+      array (
+        'show' => 1,
+        'name' => '网址数据',
+        'controller' => 'website',
+        'action' => 'data',
+      ),
+      12101 => 
+      array (
+        'show' => 0,
+        'name' => '--网址信息维护',
+        'controller' => 'website',
+        'action' => 'info',
+      ),
+      12102 => 
+      array (
+        'show' => 0,
+        'name' => '--网址删除',
+        'controller' => 'website',
+        'action' => 'del',
+      ),
+      12103 => 
+      array (
+        'show' => 0,
+        'name' => '--网址状态',
+        'controller' => 'website',
+        'action' => 'field',
+      ),
+      122 => 
+      array (
+        'show' => 1,
+        'name' => '添加网址',
+        'controller' => 'website',
+        'action' => 'info',
+      ),
+      123 => 
+      array (
+        'show' => 1,
+        'name' => '已锁定网址',
+        'controller' => 'website',
+        'action' => 'data',
+        'param' => 'lock=1',
+      ),
+      124 => 
+      array (
+        'show' => 1,
+        'name' => '未审核网址',
+        'controller' => 'website',
+        'action' => 'data',
+        'param' => 'status=0',
+      ),
+      129 => 
+      array (
+        'show' => 1,
+        'name' => '批量操作网址',
+        'controller' => 'website',
+        'action' => 'batch',
+      ),
+      1291 => 
+      array (
+        'show' => 1,
+        'name' => '重名网址数据',
+        'controller' => 'website',
+        'action' => 'data',
+        'param' => 'repeat=1',
+      ),
+    ),
+  ),
+  6 => 
+  array (
+    'name' => '用户',
+    'icon' => 'xe62c',
+    'sub' => 
+    array (
+      61 => 
+      array (
+        'show' => 1,
+        'name' => '管理员',
+        'controller' => 'admin',
+        'action' => 'index',
+      ),
+      6101 => 
+      array (
+        'show' => 0,
+        'name' => '--管理员信息维护',
+        'controller' => 'admin',
+        'action' => 'info',
+      ),
+      6102 => 
+      array (
+        'show' => 0,
+        'name' => '--管理员删除',
+        'controller' => 'admin',
+        'action' => 'del',
+      ),
+      6103 => 
+      array (
+        'show' => 0,
+        'name' => '--管理员状态',
+        'controller' => 'admin',
+        'action' => 'field',
+      ),
+      62 => 
+      array (
+        'show' => 1,
+        'name' => '会员组',
+        'controller' => 'group',
+        'action' => 'index',
+      ),
+      6201 => 
+      array (
+        'show' => 0,
+        'name' => '--会员组信息维护',
+        'controller' => 'group',
+        'action' => 'info',
+      ),
+      6202 => 
+      array (
+        'show' => 0,
+        'name' => '--会员组删除',
+        'controller' => 'group',
+        'action' => 'del',
+      ),
+      6203 => 
+      array (
+        'show' => 0,
+        'name' => '--会员组状态',
+        'controller' => 'group',
+        'action' => 'field',
+      ),
+      63 => 
+      array (
+        'show' => 1,
+        'name' => '会员',
+        'controller' => 'user',
+        'action' => 'data',
+      ),
+      6301 => 
+      array (
+        'show' => 0,
+        'name' => '--会员信息维护',
+        'controller' => 'user',
+        'action' => 'info',
+      ),
+      6302 => 
+      array (
+        'show' => 0,
+        'name' => '--会员删除',
+        'controller' => 'user',
+        'action' => 'del',
+      ),
+      6303 => 
+      array (
+        'show' => 0,
+        'name' => '--会员状态',
+        'controller' => 'user',
+        'action' => 'field',
+      ),
+      64 => 
+      array (
+        'show' => 1,
+        'name' => '充值卡',
+        'controller' => 'card',
+        'action' => 'index',
+      ),
+      6401 => 
+      array (
+        'show' => 0,
+        'name' => '--充值卡信息维护',
+        'controller' => 'card',
+        'action' => 'info',
+      ),
+      6402 => 
+      array (
+        'show' => 0,
+        'name' => '--充值卡删除',
+        'controller' => 'card',
+        'action' => 'del',
+      ),
+      65 => 
+      array (
+        'show' => 1,
+        'name' => '会员订单',
+        'controller' => 'order',
+        'action' => 'index',
+      ),
+      6501 => 
+      array (
+        'show' => 0,
+        'name' => '--订单删除',
+        'controller' => 'order',
+        'action' => 'del',
+      ),
+      66 => 
+      array (
+        'show' => 1,
+        'name' => '访问日志',
+        'controller' => 'ulog',
+        'action' => 'index',
+      ),
+      6601 => 
+      array (
+        'show' => 0,
+        'name' => '--访问日志删除',
+        'controller' => 'ulog',
+        'action' => 'del',
+      ),
+      67 => 
+      array (
+        'show' => 1,
+        'name' => '积分日志',
+        'controller' => 'plog',
+        'action' => 'index',
+      ),
+      6701 => 
+      array (
+        'show' => 0,
+        'name' => '--积分日志删除',
+        'controller' => 'plog',
+        'action' => 'del',
+      ),
+      68 => 
+      array (
+        'show' => 1,
+        'name' => '提现记录',
+        'controller' => 'cash',
+        'action' => 'index',
+      ),
+      6801 => 
+      array (
+        'show' => 0,
+        'name' => '--提现删除',
+        'controller' => 'cash',
+        'action' => 'del',
+      ),
+      6802 => 
+      array (
+        'show' => 0,
+        'name' => '--提现审核',
+        'controller' => 'cash',
+        'action' => 'audit',
+      ),
+    ),
+  ),
+  7 => 
+  array (
+    'name' => '模版',
+    'icon' => 'xe72d',
+    'sub' => 
+    array (
+      71 => 
+      array (
+        'show' => 1,
+        'name' => '模板管理',
+        'controller' => 'template',
+        'action' => 'index',
+      ),
+      7101 => 
+      array (
+        'show' => 0,
+        'name' => '--模板信息维护',
+        'controller' => 'template',
+        'action' => 'info',
+      ),
+      7102 => 
+      array (
+        'show' => 0,
+        'name' => '--模板删除',
+        'controller' => 'template',
+        'action' => 'del',
+      ),
+      72 => 
+      array (
+        'show' => 1,
+        'name' => '广告位管理',
+        'controller' => 'template',
+        'action' => 'ads',
+        'param' => '',
+      ),
+      73 => 
+      array (
+        'show' => 1,
+        'name' => '标签向导',
+        'controller' => 'template',
+        'action' => 'wizard',
+      ),
+    ),
+  ),
+  8 => 
+  array (
+    'name' => '生成',
+    'icon' => 'xe63e',
+    'sub' => 
+    array (
+      81 => 
+      array (
+        'show' => 1,
+        'name' => '生成选项',
+        'controller' => 'make',
+        'action' => 'opt',
+      ),
+      82 => 
+      array (
+        'show' => 1,
+        'name' => '生成首页',
+        'controller' => 'make',
+        'action' => 'index',
+      ),
+      821 => 
+      array (
+        'show' => 1,
+        'name' => '生成WAP首页',
+        'controller' => 'make',
+        'action' => 'index?ac2=wap',
+      ),
+      83 => 
+      array (
+        'show' => 1,
+        'name' => '生成地图',
+        'controller' => 'make',
+        'action' => 'map',
+      ),
+      8101 => 
+      array (
+        'show' => 0,
+        'name' => '--生成入口',
+        'controller' => 'make',
+        'action' => 'make',
+      ),
+      8102 => 
+      array (
+        'show' => 0,
+        'name' => '--生成RSS',
+        'controller' => 'make',
+        'action' => 'rss',
+      ),
+      8103 => 
+      array (
+        'show' => 0,
+        'name' => '--生成分类',
+        'controller' => 'make',
+        'action' => 'type',
+      ),
+      8104 => 
+      array (
+        'show' => 0,
+        'name' => '--生成专题首页',
+        'controller' => 'make',
+        'action' => 'topic_index',
+      ),
+      8105 => 
+      array (
+        'show' => 0,
+        'name' => '--生成专题内容',
+        'controller' => 'make',
+        'action' => 'topic_info',
+      ),
+      8106 => 
+      array (
+        'show' => 0,
+        'name' => '--生成内容页',
+        'controller' => 'make',
+        'action' => 'info',
+      ),
+      8107 => 
+      array (
+        'show' => 0,
+        'name' => '--生成自定义页',
+        'controller' => 'make',
+        'action' => 'label',
+      ),
+    ),
+  ),
+  9 => 
+  array (
+    'name' => '采集',
+    'icon' => 'xe727',
+    'sub' => 
+    array (
+      91 => 
+      array (
+        'show' => 0,
+        'name' => '推荐资源',
+        'controller' => 'collect',
+        'action' => 'union',
+      ),
+      9101 => 
+      array (
+        'show' => 0,
+        'name' => '--采集入口',
+        'controller' => 'collect',
+        'action' => 'api',
+      ),
+      9102 => 
+      array (
+        'show' => 0,
+        'name' => '--断点采集',
+        'controller' => 'collect',
+        'action' => 'load',
+      ),
+      9103 => 
+      array (
+        'show' => 0,
+        'name' => '--绑定分类',
+        'controller' => 'collect',
+        'action' => 'bind',
+      ),
+      9104 => 
+      array (
+        'show' => 0,
+        'name' => '--采集视频',
+        'controller' => 'collect',
+        'action' => 'vod',
+      ),
+      9105 => 
+      array (
+        'show' => 0,
+        'name' => '--采集文章',
+        'controller' => 'collect',
+        'action' => 'art',
+      ),
+      92 => 
+      array (
+        'show' => 0,
+        'name' => '定时挂机',
+        'controller' => 'collect',
+        'action' => 'timing',
+      ),
+      93 => 
+      array (
+        'show' => 1,
+        'name' => '自定义接口',
+        'controller' => 'collect',
+        'action' => 'index',
+      ),
+      9301 => 
+      array (
+        'show' => 0,
+        'name' => '--自定义资源信息维护',
+        'controller' => 'collect',
+        'action' => 'info',
+      ),
+      9302 => 
+      array (
+        'show' => 0,
+        'name' => '--自定义资源删除',
+        'controller' => 'collect',
+        'action' => 'del',
+      ),
+      94 => 
+      array (
+        'show' => 1,
+        'name' => '自定义规则',
+        'controller' => 'cj',
+        'action' => 'index',
+      ),
+      9401 => 
+      array (
+        'show' => 0,
+        'name' => '--自定义规则信息维护',
+        'controller' => 'cj',
+        'action' => 'info',
+      ),
+      9402 => 
+      array (
+        'show' => 0,
+        'name' => '--自定义规则删除',
+        'controller' => 'cj',
+        'action' => 'del',
+      ),
+      9403 => 
+      array (
+        'show' => 0,
+        'name' => '--自定义规则发布方案',
+        'controller' => 'cj',
+        'action' => 'program',
+      ),
+      9404 => 
+      array (
+        'show' => 0,
+        'name' => '--自定义规则采集网址',
+        'controller' => 'cj',
+        'action' => 'col_url',
+      ),
+      9405 => 
+      array (
+        'show' => 0,
+        'name' => '--自定义规则采集内容',
+        'controller' => 'cj',
+        'action' => 'col_content',
+      ),
+      9406 => 
+      array (
+        'show' => 0,
+        'name' => '--自定义规则发布内容',
+        'controller' => 'cj',
+        'action' => 'publish',
+      ),
+      9407 => 
+      array (
+        'show' => 0,
+        'name' => '--自定义规则导出',
+        'controller' => 'cj',
+        'action' => 'export',
+      ),
+      9408 => 
+      array (
+        'show' => 0,
+        'name' => '--自定义规则导入',
+        'controller' => 'cj',
+        'action' => 'import',
+      ),
+    ),
+  ),
+  10 => 
+  array (
+    'name' => '数据库',
+    'icon' => 'xe621',
+    'sub' => 
+    array (
+      101 => 
+      array (
+        'show' => 1,
+        'name' => '数据库管理',
+        'controller' => 'database',
+        'action' => 'index',
+      ),
+      10001 => 
+      array (
+        'show' => 0,
+        'name' => '--数据库备份',
+        'controller' => 'database',
+        'action' => 'export',
+      ),
+      10002 => 
+      array (
+        'show' => 0,
+        'name' => '--数据库还原',
+        'controller' => 'database',
+        'action' => 'import',
+      ),
+      10003 => 
+      array (
+        'show' => 0,
+        'name' => '--数据库优化',
+        'controller' => 'database',
+        'action' => 'optimize',
+      ),
+      10004 => 
+      array (
+        'show' => 0,
+        'name' => '--数据库修复',
+        'controller' => 'database',
+        'action' => 'repair',
+      ),
+      10005 => 
+      array (
+        'show' => 0,
+        'name' => '--数据库删除备份',
+        'controller' => 'database',
+        'action' => 'del',
+      ),
+      10006 => 
+      array (
+        'show' => 0,
+        'name' => '--数据库表信息',
+        'controller' => 'database',
+        'action' => 'columns',
+      ),
+      102 => 
+      array (
+        'show' => 1,
+        'name' => '执行SQL语句',
+        'controller' => 'database',
+        'action' => 'sql',
+      ),
+      103 => 
+      array (
+        'show' => 1,
+        'name' => '数据批量替换',
+        'controller' => 'database',
+        'action' => 'rep',
+      ),
+    ),
+  ),
+  11 => 
+  array (
+    'name' => '应用',
+    'icon' => 'xe621',
+    'sub' => 
+    array (
+      111 => 
+      array (
+        'show' => 1,
+        'name' => '应用市场',
+        'controller' => 'addon',
+        'action' => 'index',
+        'param' => '',
+      ),
+      112 => 
+      array (
+        'show' => 1,
+        'name' => 'URL推送',
+        'controller' => 'urlsend',
+        'action' => 'index',
+        'param' => '',
+      ),
+      113 => 
+      array (
+        'show' => 1,
+        'name' => '文件安全检测',
+        'controller' => 'safety',
+        'action' => 'file',
+        'param' => '',
+      ),
+      114 => 
+      array (
+        'show' => 1,
+        'name' => '数据挂马检测',
+        'controller' => 'safety',
+        'action' => 'data',
+        'param' => '',
+      ),
+      11200 => 
+      array (
+        'show' => 0,
+        'name' => '--推送入口',
+        'controller' => 'urlsend',
+        'action' => 'push',
+      ),
+      11201 => 
+      array (
+        'show' => 0,
+        'name' => '--百度主动推送',
+        'controller' => 'urlsend',
+        'action' => 'baidu_push',
+      ),
+      11202 => 
+      array (
+        'show' => 0,
+        'name' => '--百度熊掌推送',
+        'controller' => 'urlsend',
+        'action' => 'baidu_bear',
+      ),
+      11100 => 
+      array (
+        'show' => 0,
+        'name' => '--应用插件列表',
+        'controller' => 'addon',
+        'action' => 'downloaded',
+      ),
+      11101 => 
+      array (
+        'show' => 0,
+        'name' => '--应用插件安装',
+        'controller' => 'addon',
+        'action' => 'install',
+      ),
+      11102 => 
+      array (
+        'show' => 0,
+        'name' => '--应用插件卸载',
+        'controller' => 'addon',
+        'action' => 'uninstall',
+      ),
+      11103 => 
+      array (
+        'show' => 0,
+        'name' => '--应用插件配置',
+        'controller' => 'addon',
+        'action' => 'config',
+      ),
+      11104 => 
+      array (
+        'show' => 0,
+        'name' => '--应用插件状态',
+        'controller' => 'addon',
+        'action' => 'state',
+      ),
+      11105 => 
+      array (
+        'show' => 0,
+        'name' => '--应用插件上传',
+        'controller' => 'addon',
+        'action' => 'local',
+      ),
+      11106 => 
+      array (
+        'show' => 0,
+        'name' => '--应用插件升级',
+        'controller' => 'addon',
+        'action' => 'upgrade',
+      ),
+      11107 => 
+      array (
+        'show' => 0,
+        'name' => '--应用插件添加',
+        'controller' => 'addon',
+        'action' => 'add',
+      ),
+    ),
+  ),
+);

+ 68 - 0
application/admin/controller/Collect.php

@@ -40,6 +40,8 @@ class Collect extends Base
         $collect_break_role = Cache::get($key);
         $key = $GLOBALS['config']['app']['cache_flag']. '_'. 'collect_break_website';
         $collect_break_website = Cache::get($key);
+        $key = $GLOBALS['config']['app']['cache_flag']. '_'. 'collect_break_manga';
+        $collect_break_manga = Cache::get($key);
 
 
         $this->assign('collect_break_vod', $collect_break_vod);
@@ -47,6 +49,7 @@ class Collect extends Base
         $this->assign('collect_break_actor', $collect_break_actor);
         $this->assign('collect_break_role', $collect_break_role);
         $this->assign('collect_break_website', $collect_break_website);
+        $this->assign('collect_break_manga', $collect_break_manga);
 
         $this->assign('title',lang('admin/collect/title'));
         return $this->fetch('admin@collect/index');
@@ -113,12 +116,15 @@ class Collect extends Base
         $collect_break_role = Cache::get($key);
         $key = $GLOBALS['config']['app']['cache_flag']. '_'. 'collect_break_website';
         $collect_break_website = Cache::get($key);
+        $key = $GLOBALS['config']['app']['cache_flag']. '_'. 'collect_break_manga';
+        $collect_break_manga = Cache::get($key);
 
         $this->assign('collect_break_vod', $collect_break_vod);
         $this->assign('collect_break_art', $collect_break_art);
         $this->assign('collect_break_actor', $collect_break_actor);
         $this->assign('collect_break_role', $collect_break_role);
         $this->assign('collect_break_website', $collect_break_website);
+        $this->assign('collect_break_manga', $collect_break_manga);
 
         $this->assign('title', lang('admin/collect/title'));
         return $this->fetch('admin@collect/union');
@@ -167,6 +173,9 @@ class Collect extends Base
         elseif ($param['mid'] == '11') {
             return $this->website($param);
         }
+        elseif ($param['mid'] == '12') {
+            return $this->manga($param);
+        }
     }
 
     public function timing()
@@ -489,4 +498,63 @@ class Collect extends Base
         mac_echo('<style type="text/css">body{font-size:12px;color: #333333;line-height:21px;}span{font-weight:bold;color:#FF0000}</style>');
         model('Collect')->website_data($param,$res );
     }
+
+    public function manga($param)
+    {
+        if($param['ac'] != 'list'){
+            $key = $GLOBALS['config']['app']['cache_flag']. '_'.'collect_break_manga';
+            Cache::set($key, url('collect/api').'?'. http_build_query($param) );
+        }
+        $res = model('Collect')->manga($param);
+        if($res['code']>1){
+            return $this->error($res['msg']);
+        }
+
+        if($param['ac'] == 'list'){
+
+            $bind_list = config('bind');
+            $type_list = model('Type')->getCache('type_list');
+            $manga_type_list = [];
+            foreach($type_list as $k=>$v){
+                if($v['type_mid'] == 12){
+                    $manga_type_list[$k] = $v;
+                }
+            }
+            $this->assign('type_list', $manga_type_list);
+
+            foreach($res['type'] as $k=>$v){
+                $key = $param['cjflag'] . '_' . $v['type_id'];
+                $res['type'][$k]['isbind'] = 0;
+                $local_id = intval($bind_list[$key]);
+                if( $local_id>0 ){
+                    $res['type'][$k]['isbind'] = 1;
+                    $res['type'][$k]['local_type_id'] = $local_id;
+                    $type_name = $manga_type_list[$local_id]['type_name'];
+                    if(empty($type_name)){
+                        $type_name = lang('unknown_type');
+                    }
+                    $res['type'][$k]['local_type_name'] = $type_name;
+                }
+            }
+
+            $this->assign('page',$res['page']);
+            $this->assign('type',$res['type']);
+            $this->assign('list',$res['data']);
+
+            $this->assign('total',$res['page']['recordcount']);
+            $this->assign('page',$res['page']['page']);
+            $this->assign('limit',$res['page']['pagesize']);
+
+            $param['page'] = '{page}';
+            $param['limit'] = '{limit}';
+            $this->assign('param',$param);
+
+            $this->assign('param_str',http_build_query($param)) ;
+
+            return $this->fetch('admin@collect/manga');
+        }
+
+        mac_echo('<style type="text/css">body{font-size:12px;color: #333333;line-height:21px;}span{font-weight:bold;color:#FF0000}</style>');
+        model('Collect')->manga_data($param,$res );
+    }
 }

+ 10 - 8
application/admin/controller/Index.php

@@ -233,14 +233,16 @@ class Index extends Base
         }
 
         $url = url($url);
-        $mid = 1;
-        if ($tab == 'art') {
-            $mid = 2;
-        } elseif ($tab == 'actor') {
-            $mid = 8;
-        } elseif ($tab == 'website') {
-            $mid = 11;
-        }
+    $mid = 1;
+    if ($tab == 'art') {
+        $mid = 2;
+    } elseif ($tab == 'actor') {
+        $mid = 8;
+    } elseif ($tab == 'website') {
+        $mid = 11;
+    } elseif ($tab == 'manga') {
+        $mid = 12;
+    }
         $this->assign('mid', $mid);
 
         if ($tpl == 'select_type') {

+ 334 - 0
application/admin/controller/Manga.php

@@ -0,0 +1,334 @@
+<?php
+namespace app\admin\controller;
+use think\Db;
+use app\common\util\Pinyin;
+
+class Manga extends Base
+{
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    public function data()
+    {
+        $param = input();
+        $param['page'] = intval($param['page']) < 1 ? 1 : $param['page'];
+        $param['limit'] = intval($param['limit']) < 1 ? $this->_pagesize : $param['limit'];
+
+        $where = [];
+        if (!empty($param['type'])) {
+            $where['type_id|type_id_1'] = ['eq', $param['type']];
+        }
+        if (!empty($param['level'])) {
+            $where['manga_level'] = ['eq', $param['level']];
+        }
+        if (in_array($param['status'], ['0', '1'])) {
+            $where['manga_status'] = ['eq', $param['status']];
+        }
+        if (!empty($param['lock'])) {
+            $where['manga_lock'] = ['eq', $param['lock']];
+        }
+        if(!empty($param['pic'])){
+            if($param['pic'] == '1'){
+                $where['manga_pic'] = ['eq',''];
+            }
+            elseif($param['pic'] == '2'){
+                $where['manga_pic'] = ['like','http%'];
+            }
+            elseif($param['pic'] == '3'){
+                $where['manga_pic'] = ['like','%#err%'];
+            }
+        }
+        if(!empty($param['wd'])){
+            $param['wd'] = urldecode($param['wd']);
+            $param['wd'] = mac_filter_xss($param['wd']);
+            $where['manga_name'] = ['like','%'.$param['wd'].'%'];
+        }
+
+        if(!empty($param['repeat'])){
+            if($param['page'] ==1){
+                Db::execute('DROP TABLE IF EXISTS '.config('database.prefix').'tmpmanga');
+                Db::execute('CREATE TABLE `'.config('database.prefix').'tmpmanga` (`id1` int unsigned DEFAULT NULL, `name1` varchar(1024) NOT NULL DEFAULT \'\') ENGINE=MyISAM');
+                Db::execute('INSERT INTO `'.config('database.prefix').'tmpmanga` (SELECT min(manga_id)as id1,manga_name as name1 FROM '.config('database.prefix').'manga GROUP BY name1 HAVING COUNT(name1)>1)');
+            }
+            $order='manga_name asc';
+            $res = model('Manga')->listRepeatData($where,$order,$param['page'],$param['limit']);
+        }
+        else{
+            $order='manga_time desc';
+            $res = model('Manga')->listData($where,$order,$param['page'],$param['limit']);
+        }
+
+        foreach($res['list'] as $k=>&$v){
+            $v['ismake'] = 1;
+            if($GLOBALS['config']['view']['manga_detail'] >0 && $v['manga_time_make'] < $v['manga_time']){
+                $v['ismake'] = 0;
+            }
+        }
+
+        $this->assign('list', $res['list']);
+        $this->assign('total', $res['total']);
+        $this->assign('page', $res['page']);
+        $this->assign('limit', $res['limit']);
+
+        $param['page'] = '{page}';
+        $param['limit'] = '{limit}';
+        $this->assign('param', $param);
+
+        $type_tree = model('Type')->getCache('type_tree');
+        $this->assign('type_tree', $type_tree);
+
+        $this->assign('title', lang('admin/manga/title'));
+        return $this->fetch('admin@manga/index');
+    }
+
+    public function batch()
+    {
+        $param = input();
+        if (!empty($param)) {
+
+            mac_echo('<style type="text/css">body{font-size:12px;color: #333333;line-height:21px;}span{font-weight:bold;color:#FF0000}</style>');
+
+            if(empty($param['ck_del']) && empty($param['ck_level']) && empty($param['ck_status']) && empty($param['ck_lock']) && empty($param['ck_hits']) ){
+                return $this->error(lang('param_err'));
+            }
+            $where = [];
+            if(!empty($param['type'])){
+                $where['type_id'] = ['eq',$param['type']];
+            }
+            if(!empty($param['level'])){
+                $where['manga_level'] = ['eq',$param['level']];
+            }
+            if(in_array($param['status'],['0','1'])){
+                $where['manga_status'] = ['eq',$param['status']];
+            }
+            if(!empty($param['lock'])){
+                $where['manga_lock'] = ['eq',$param['lock']];
+            }
+            if(!empty($param['pic'])){
+                if($param['pic'] == '1'){
+                    $where['manga_pic'] = ['eq',''];
+                }
+                elseif($param['pic'] == '2'){
+                    $where['manga_pic'] = ['like','http%'];
+                }
+                elseif($param['pic'] == '3'){
+                    $where['manga_pic'] = ['like','%#err%'];
+                }
+            }
+            if(!empty($param['wd'])){
+                $param['wd'] = htmlspecialchars(urldecode($param['wd']));
+                $where['manga_name'] = ['like','%'.$param['wd'].'%'];
+            }
+
+
+            if($param['ck_del'] == 1){
+                $res = model('Manga')->delData($where);
+                mac_echo(lang('multi_del_ok'));
+                mac_jump( url('manga/batch') ,3);
+                exit;
+            }
+
+            if(empty($param['page'])){
+                $param['page'] = 1;
+            }
+            if(empty($param['limit'])){
+                $param['limit'] = 100;
+            }
+            if(empty($param['total'])) {
+                $param['total'] = model('Manga')->countData($where);
+                $param['page_count'] = ceil($param['total'] / $param['limit']);
+            }
+
+            if($param['page'] > $param['page_count']) {
+                mac_echo(lang('multi_set_ok'));
+                mac_jump( url('manga/batch') ,3);
+                exit;
+            }
+            mac_echo( "<font color=red>".lang('admin/batch_tip',[$param['total'],$param['limit'],$param['page_count'],$param['page']])."</font>");
+
+            $page = $param['page_count'] - $param['page'] + 1;
+            $order='manga_id desc';
+            $res = model('Manga')->listData($where,$order,$page,$param['limit']);
+
+            foreach($res['list'] as  $k=>$v){
+                $where2 = [];
+                $where2['manga_id'] = $v['manga_id'];
+
+                $update = [];
+                $des = $v['manga_id'].','.$v['manga_name'];
+
+                if(!empty($param['ck_level']) && !empty($param['val_level'])){
+                    $update['manga_level'] = $param['val_level'];
+                    $des .= '&nbsp;'.lang('level').':'.$param['val_level'].';';
+                }
+                if(!empty($param['ck_status']) && isset($param['val_status'])){
+                    $update['manga_status'] = $param['val_status'];
+                    $des .= '&nbsp;'.lang('status').':'.($param['val_status'] ==1 ? '['.lang('reviewed').']':'['.lang('reviewed_not').']') .';';
+                }
+                if(!empty($param['ck_lock']) && isset($param['val_lock'])){
+                    $update['manga_lock'] = $param['val_lock'];
+                    $des .= '&nbsp;'.lang('lock').':'.($param['val_lock']==1 ? '['.lang('lock').']':'['.lang('unlock').']').';';
+                }
+                if(!empty($param['ck_hits']) && !empty($param['val_hits_min']) && !empty($param['val_hits_max']) ){
+                    $update['manga_hits'] = rand($param['val_hits_min'],$param['val_hits_max']);
+                    $des .= '&nbsp;'.lang('hits').':'.$update['manga_hits'].';';
+                }
+                mac_echo($des);
+                $res2 = model('Manga')->where($where2)->update($update);
+
+            }
+            $param['page']++;
+            $url = url('manga/batch') .'?'. http_build_query($param);
+            mac_jump( $url ,3);
+            exit;
+        }
+
+        $type_tree = model('Type')->getCache('type_tree');
+        $this->assign('type_tree',$type_tree);
+
+        $this->assign('title',lang('admin/manga/title'));
+        return $this->fetch('admin@manga/batch');
+    }
+
+    public function info()
+    {
+        if (Request()->isPost()) {
+            $param = input('post.');
+            $res = model('Manga')->saveData($param);
+            if($res['code']>1){
+                return $this->error($res['msg']);
+            }
+            return $this->success($res['msg']);
+        }
+
+        $id = input('id');
+        $where=[];
+        $where['manga_id'] = ['eq',$id];
+        $res = model('Manga')->infoData($where);
+
+        $info = $res['info'];
+        if (empty($info)) {
+            $info = [];
+        }
+        $this->assign('info',$info);
+        $this->assign('manga_page_list', !empty($info['manga_page_list']) ? (array)$info['manga_page_list'] : []);
+
+        $type_tree = model('Type')->getCache('type_tree');
+        $this->assign('type_tree',$type_tree);
+
+        $this->assign('title',lang('admin/manga/title'));
+        return $this->fetch('admin@manga/info');
+    }
+
+    public function del()
+    {
+        $param = input();
+        $ids = $param['ids'];
+
+        if(!empty($ids)){
+            $where=[];
+            $where['manga_id'] = ['in',$ids];
+            $res = model('Manga')->delData($where);
+            if($res['code']>1){
+                return $this->error($res['msg']);
+            }
+            return $this->success($res['msg']);
+        }
+        elseif(!empty($param['repeat'])){
+            $st = ' not in ';
+            if($param['retain']=='max'){
+                $st=' in ';
+            }
+            $sql = 'delete from '.config('database.prefix').'manga where manga_name in(select name1 from '.config('database.prefix').'tmpmanga) and manga_id '.$st.'(select id1 from '.config('database.prefix').'tmpmanga)';
+            $res = model('Manga')->execute($sql);
+            if($res===false){
+                return $this->success(lang('del_err'));
+            }
+            return $this->success(lang('del_ok'));
+        }
+        return $this->error(lang('param_err'));
+    }
+
+    public function field()
+    {
+        $param = input();
+        $ids = $param['ids'];
+        $col = $param['col'];
+        $val = $param['val'];
+        $start = $param['start'];
+        $end = $param['end'];
+        if ($col == 'type_id' && $val==''){
+            return $this->error("请选择分类提交");
+        }
+
+        if(!empty($ids) && in_array($col,['manga_status','manga_lock','manga_level','manga_hits','type_id'])){
+            $where=[];
+            $where['manga_id'] = ['in',$ids];
+            $update = [];
+            if(empty($start)) {
+                $update[$col] = $val;
+                if($col == 'type_id'){
+                    $type_list = model('Type')->getCache();
+                    $id1 = intval($type_list[$val]['type_pid']);
+                    $update['type_id_1'] = $id1;
+                }
+                $res = model('Manga')->fieldData($where, $update);
+            }
+            else{
+                if(empty($end)){$end = 9999;}
+                $ids = explode(',',$ids);
+                foreach($ids as $k=>$v){
+                    $val = rand($start,$end);
+                    $where['manga_id'] = ['eq',$v];
+                    $update[$col] = $val;
+                    $res = model('Manga')->fieldData($where, $update);
+                }
+            }
+            if($res['code']>1){
+                return $this->error($res['msg']);
+            }
+            return $this->success($res['msg']);
+        }
+        return $this->error(lang('param_err'));
+    }
+
+    public function updateToday()
+    {
+        $param = input();
+        $flag = $param['flag'];
+        $res = model('Manga')->updateToday($flag);
+        return json($res);
+    }
+
+    public function batchGenerateTag()
+    {
+        $ids = input('post.ids/a');
+        if(empty($ids)){
+            return json(['code'=>0,'msg'=>lang('admin/tag/select_manga_tag')]);
+        }
+        
+        $success = 0;
+        $fail = 0;
+        foreach($ids as $id){
+            $info = model('Manga')->where('manga_id',$id)->find();
+            if($info){
+                $tag = mac_get_tag($info['manga_name'], $info['manga_content']);
+                if($tag !== false){
+                    $res = model('Manga')->where('manga_id',$id)->update(['manga_tag'=>$tag]);
+                    if($res){
+                        $success++;
+                    }else{
+                        $fail++;
+                    }
+                }else{
+                    $fail++;
+                }
+            }
+        }
+        
+        return json(['code'=>1,'msg'=>sprintf(lang('admin/tag/generate_tag_result'), $success, $fail)]);
+    }
+
+}

+ 7 - 0
application/admin/controller/Type.php

@@ -43,6 +43,13 @@ class Type extends Base
             $list_count[$v['type_id']] = $v['cc'];
         }
 
+        //漫画数量
+        $tmp = model('Manga')->field('type_id_1,type_id,count(manga_id) as cc')->where($where)->group('type_id_1,type_id')->select();
+        foreach($tmp as $k=>$v){
+            $list_count[$v['type_id_1']] += $v['cc'];
+            $list_count[$v['type_id']] = $v['cc'];
+        }
+
         //重新整合
         foreach($res['list'] as $k=>$v){
             $res['list'][$k]['cc'] = intval($list_count[$v['type_id']]);

+ 1 - 0
application/admin/view_new/collect/info.html

@@ -38,6 +38,7 @@
                 <input name="collect_mid" lay-filter="collect_mid" type="radio" value="8" title="{:lang('actor')}" {if condition="$info['collect_mid'] eq 8"}checked {/if}>
                 <input name="collect_mid" lay-filter="collect_mid" type="radio" value="9" title="{:lang('role')}" {if condition="$info['collect_mid'] eq 9"}checked {/if}>
                 <input name="collect_mid" lay-filter="collect_mid" type="radio" value="11" title="{:lang('website')}" {if condition="$info['collect_mid'] eq 11"}checked {/if}>
+                <input name="collect_mid" lay-filter="collect_mid" type="radio" value="12" title="{:lang('manga')}" {if condition="$info['collect_mid'] eq 12"}checked {/if}>
             </div>
         </div>
 

+ 126 - 0
application/admin/view_new/collect/manga.html

@@ -0,0 +1,126 @@
+{include file="../../../application/admin/view/public/head" /}
+<div class="page-container p10">
+
+    <div class="my-toolbar-box">
+
+        <div class="mb10">
+            <div class="layui-input-inline w150 m5"><a href="javascript:;" data-id="" class="select_type red">{:lang('admin/collect/view_all_resource')}</a></div>
+            {volist name="type" id="vo"}
+            <div class="layui-input-inline w150 m5">
+                <a href="javascript:;" data-id="{$vo.type_id}" class="select_type">{$vo.type_name|htmlspecialchars}</a>
+                <a id="{$param['cjflag']|mac_filter_xss}_{$vo.type_id}" data-href="{:url('index/select')}?tab=manga&col={$param['cjflag']|mac_filter_xss}_{$vo.type_id}&ids=1&tpl=select_type&refresh=no&url=collect/bind" data-width="270" data-height="100" class="j-select" >
+                    {if condition="$vo.isbind eq 1"}
+                    <span class="red">[{$vo.local_type_name}]</span>
+                    {else}
+                    [{:lang('bind')}]
+                    {/if}
+                </a>
+            </div>
+            {/volist}
+
+        </div>
+
+        <div class="center mb10">
+            <form class="layui-form " method="">
+                <div class="layui-input-inline">
+                    <input type="text" autocomplete="off" placeholder="{:lang('wd')}" class="layui-input" id="wd" name="wd" value="{$param['wd']|mac_filter_xss}">
+                </div>
+                <button type="button" class="layui-btn mgl-20 j-btn" >{:lang('btn_search')}</button>
+            </form>
+        </div>
+
+    </div>
+
+
+    <form class="layui-form " method="post" id="pageListForm">
+        <table class="layui-table" lay-size="sm">
+            <thead>
+            <tr>
+                <th width="25"><input type="checkbox" lay-skin="primary" lay-filter="allChoose"></th>
+                <th >{:lang('name')}</th>
+                <th width="60">{:lang('type')}</th>
+                <th width="140">{:lang('time')}</th>
+            </tr>
+            </thead>
+
+            {volist name="list" id="vo"}
+            <tr>
+                <td><input type="checkbox" name="ids[]" value="{$vo.manga_id}" class="layui-checkbox checkbox-ids" lay-skin="primary"></td>
+                <td>{$vo.manga_name|htmlspecialchars}</td>
+                <td>{$vo.type_name|htmlspecialchars}</td>
+                <td>{$vo.manga_time|mac_day='color'}</td>
+            </tr>
+            {/volist}
+            </tbody>
+        </table>
+        <div class="layui-btn-group">
+            {php}
+                $p1 = $param;
+                unset($p1['ac']);
+                $p1_str = http_build_query($p1);
+            {/php}
+            <a data-href="{:url('api')}?{$p1_str}&ac=cjsel" data-ajax="no" class="layui-btn layui-btn-primary j-page-btns"><i class="layui-icon">&#xe654;</i>{:lang('admin/collect/cj_select')}</a>
+            <a data-href="{:url('api')}?{$p1_str}&h=24&ac=cjday" data-checkbox="no" data-ajax="no" class="layui-btn layui-btn-primary j-page-btns"><i class="layui-icon">&#xe654;</i>{:lang('admin/collect/cj_today')}</a>
+            <a data-href="{:url('api')}?{$p1_str}&ac=cjall" data-checkbox="no" data-ajax="no" class="layui-btn layui-btn-primary j-page-btns"><i class="layui-icon">&#xe654;</i>{:lang('admin/collect/cj_all')}</a>
+        </div>
+
+        <div id="pages" class="center"></div>
+    </form>
+
+</div>
+
+
+{include file="../../../application/admin/view/public/foot" /}
+
+<script type="text/javascript">
+    var curUrl="{:url('api')}?{$param_str}";
+    layui.use(['laypage', 'layer','form'], function() {
+        var laypage = layui.laypage
+                , layer = layui.layer,
+                form = layui.form;
+
+        laypage.render({
+            elem: 'pages'
+            ,count: {$total}
+            ,limit: {$limit}
+            ,curr: {$page}
+            ,layout: ['count', 'prev', 'page', 'next', 'limit', 'skip']
+            ,jump: function(obj,first){
+                if(!first){
+                    location.href = curUrl.replace('%7Bpage%7D',obj.curr).replace('%7Blimit%7D',obj.limit);
+                }
+            }
+        });
+
+        $('#wd').on('keydown', function (event) {
+            if (event.keyCode == 13) {
+                $('.j-btn').click();
+                return false;
+            }
+        });
+
+        $('.j-btn').click(function(){
+           var wd = $('input[name="wd"]').val();
+            var url = changeParam(curUrl,'wd',wd);
+            location.href = url.replace('%7Bpage%7D',1).replace('%7Blimit%7D','');
+        });
+
+        $('.select_type').click(function(){
+            var t = $(this).attr('data-id');
+            var url = changeParam(curUrl,'t',t);
+            location.href = url.replace('%7Bpage%7D',1).replace('%7Blimit%7D','');
+        });
+
+    });
+    function onSubmitResult(res)
+    {
+        if(res.data.st==1){
+            $('#'+res.data.id).html('<span class="red">['+ res.data.local_type_name +']</span>');
+        }
+        else{
+            $('#'+res.data.id).html("[{:lang('bind')}]");
+        }
+    }
+</script>
+</body>
+</html>

+ 217 - 0
application/admin/view_new/manga/batch.html

@@ -0,0 +1,217 @@
+{include file="../../../application/admin/view_new/public/head" /}
+<style>
+    .layui-form-label {
+        width: fit-content;
+    }
+
+    .layui-form-item .layui-form-checkbox[lay-skin=primary] {
+        margin-top: 0;
+    }
+</style>
+<div class="page-container p10">
+
+    <form class="layui-form" method="post" action="">
+
+        <div class="my-toolbar-box">
+
+            <div class="space-y-2">
+
+                <div class="layui-input-inline w150">
+                    <select name="type">
+                        <option value="">{:lang('select_type')}</option>
+                        {volist name="type_tree" id="vo"}
+                        {if condition="$vo.type_mid eq 3"}
+                        <option value="{$vo.type_id}" {if condition="$param['type'] eq $vo.type_id" }selected {/if}>
+                            {$vo.type_name}</option>
+                        {volist name="vo.child" id="ch"}
+                        <option value="{$ch.type_id}" {if condition="$param['type'] eq $ch.type_id" }selected {/if}>
+                            &nbsp;&nbsp;&nbsp;&nbsp;├&nbsp;{$ch.type_name}</option>
+                        {/volist}
+                        {/if}
+                        {/volist}
+                    </select>
+                </div>
+                <div class="layui-input-inline w150">
+                    <select name="status">
+                        <option value="">{:lang('select_status')}</option>
+                        <option value="0" {if condition="$param['status'] eq '0'" }selected {/if}>
+                            {:lang('reviewed_not')}</option>
+                        <option value="1" {if condition="$param['status'] eq '1'" }selected {/if}>{:lang('reviewed')}
+                        </option>
+                    </select>
+                </div>
+                <div class="layui-input-inline w150">
+                    <select name="level">
+                        <option value="">{:lang('select_level')}</option>
+                        <option value="9" {if condition="$param['level'] eq '9'" }selected {/if}>
+                            {:lang('level')}9-{:lang('slide')}</option>
+                        <option value="1" {if condition="$param['level'] eq '1'" }selected {/if}>{:lang('level')}1
+                        </option>
+                        <option value="2" {if condition="$param['level'] eq '2'" }selected {/if}>{:lang('level')}2
+                        </option>
+                        <option value="3" {if condition="$param['level'] eq '3'" }selected {/if}>{:lang('level')}3
+                        </option>
+                        <option value="4" {if condition="$param['level'] eq '4'" }selected {/if}>{:lang('level')}4
+                        </option>
+                        <option value="5" {if condition="$param['level'] eq '5'" }selected {/if}>{:lang('level')}5
+                        </option>
+                        <option value="6" {if condition="$param['level'] eq '6'" }selected {/if}>{:lang('level')}6
+                        </option>
+                        <option value="7" {if condition="$param['level'] eq '7'" }selected {/if}>{:lang('level')}7
+                        </option>
+                        <option value="8" {if condition="$param['level'] eq '8'" }selected {/if}>{:lang('level')}8
+                        </option>
+                    </select>
+                </div>
+                <div class="layui-input-inline w150">
+                    <select name="lock">
+                        <option value="">{:lang('select_lock')}</option>
+                        <option value="0" {if condition="$param['lock'] eq '0'" }selected {/if}>{:lang('unlock')}
+                        </option>
+                        <option value="1" {if condition="$param['lock'] eq '1'" }selected {/if}>{:lang('lock')}</option>
+                    </select>
+                </div>
+                <div class="layui-input-inline w150">
+                    <select name="pic">
+                        <option value="">{:lang('select_pic')}</option>
+                        <option value="1" {if condition="$param['pic'] eq '1'" }selected{/if}>{:lang('pic_empty')}
+                        </option>
+                        <option value="2" {if condition="$param['pic'] eq '2'" }selected{/if}>{:lang('pic_remote')}
+                        </option>
+                        <option value="3" {if condition="$param['pic'] eq '3'" }selected{/if}>{:lang('pic_sync_err')}
+                        </option>
+                    </select>
+                </div>
+
+                <div class="layui-input-inline">
+                    <input type="text" autocomplete="off" placeholder="{:lang('wd')}" class="layui-input" name="wd"
+                        value="{$param['wd']|mac_filter_xss}">
+                </div>
+
+            </div>
+
+        </div>
+
+        <fieldset class="layui-elem-field">
+            <legend>{:lang('del_multi')}</legend>
+            <div class="layui-field-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-form-label">
+                            <input type="checkbox" lay-skin="primary" value="1" name="ck_del"
+                                title="{:lang('del_data')}" />
+                        </di>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <button type="button" class="layui-btn btn_submit">{:lang('del_multi')}</button>
+                </div>
+            </div>
+        </fieldset>
+
+        <fieldset class="layui-elem-field">
+            <legend>{:lang('multi_set')}</legend>
+            <div class="layui-field-box">
+
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-form-label">
+                            <input lay-skin="primary" type="checkbox" value="1" name="ck_level"
+                                title="{:lang('level')}" />
+                        </div>
+                        <div class="layui-input-inline" style="width: 100px;">
+                            <select name="val_level">
+                                <option value="">{:lang('select_level')}</option>
+                                <option value="9">{:lang('level')}9-{:lang('slide')}</option>
+                                <option value="1">{:lang('level')}1</option>
+                                <option value="2">{:lang('level')}2</option>
+                                <option value="3">{:lang('level')}3</option>
+                                <option value="4">{:lang('level')}4</option>
+                                <option value="5">{:lang('level')}5</option>
+                                <option value="6">{:lang('level')}6</option>
+                                <option value="7">{:lang('level')}7</option>
+                                <option value="8">{:lang('level')}8</option>
+                            </select>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-form-label">
+                            <input type="checkbox" lay-skin="primary" value="1" name="ck_lock"
+                                title="{:lang('lock')}" />
+                        </div>
+                        <div class="layui-input-inline" style="width: 100px;">
+                            <select name="val_lock">
+                                <option value="">{:lang('select_opt')}</option>
+                                <option value="0">{:lang('unlock')}</option>
+                                <option value="1">{:lang('lock')}</option>
+                            </select>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-form-label">
+                            <input type="checkbox" lay-skin="primary" value="1" name="ck_status"
+                                title="{:lang('status')}" />
+                        </div>
+                        <div class="layui-input-inline" style="width: 100px;">
+                            <select name="val_status">
+                                <option value="">{:lang('select_status')}</option>
+                                <option value="0">{:lang('reviewed')}</option>
+                                <option value="1">{:lang('reviewed')}</option>
+                            </select>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-form-label">
+                            <input type="checkbox" lay-skin="primary" value="1" name="ck_hits"
+                                title="{:lang('hits')}" />
+                        </div>
+                        <div class="layui-input-inline" style="width: 100px;">
+                            <input type="text" name="val_hits_min" required placeholder="{:lang('min_val')}"
+                                autocomplete="off" class="layui-input">
+                        </div>
+                        <div class="layui-input-inline" style="width: 100px;">
+                            <input type="text" name="val_hits_max" required placeholder="{:lang('max_val')}"
+                                autocomplete="off" class="layui-input">
+                        </div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label">{:lang('page_limit')}</label>
+                        <div class="layui-input-inline" style="width: 100px;">
+                            <input type="text" name="limit" required placeholder="" autocomplete="off" value="100"
+                                class="layui-input">
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <button type="submit" class="layui-btn btn_submit">{:lang('start_exec')}</button>
+                </div>
+
+            </div>
+        </fieldset>
+    </form>
+</div>
+
+<script type="text/javascript">
+    layui.use(['form'], function () {
+
+    });
+
+    $('.btn_submit').click(function () {
+        $('form').submit();
+    })
+</script>
+</body>
+
+</html>

+ 194 - 0
application/admin/view_new/manga/index.html

@@ -0,0 +1,194 @@
+{include file="../../../application/admin/view_new/public/head" /}
+<div class="page-container p10">
+
+    <div class="my-toolbar-box">
+
+        <div class=" mb10">
+            <form class="layui-form " method="post" action="{:url('data')}">
+                <input type="hidden" value="{$param.select|mac_filter_xss}" name="select">
+                <input type="hidden" value="{$param.input|mac_filter_xss}" name="input">
+                <div class="layui-input-inline w150">
+                    <select name="type">
+                        <option value="">{:lang('select_type')}</option>
+                        {volist name="type_tree" id="vo"}
+                        {if condition="$vo.type_mid eq 3"}
+                        <option value="{$vo.type_id}" {if condition="$param['type'] eq $vo.type_id"}selected {/if}>{$vo.type_name}</option>
+                        {volist name="vo.child" id="ch"}
+                        <option value="{$ch.type_id}" {if condition="$param['type'] eq $ch.type_id"}selected {/if}>&nbsp;&nbsp;&nbsp;&nbsp;├&nbsp;{$ch.type_name}</option>
+                        {/volist}
+                        {/if}
+                        {/volist}
+                    </select>
+                </div>
+                <div class="layui-input-inline w150">
+                    <select name="status">
+                        <option value="">{:lang('select_status')}</option>
+                        <option value="0" {if condition="$param['status'] eq '0'"}selected {/if}>{:lang('reviewed_not')}</option>
+                        <option value="1" {if condition="$param['status'] eq '1'"}selected {/if}>{:lang('reviewed')}</option>
+                    </select>
+                </div>
+                <div class="layui-input-inline w150">
+                    <select name="level">
+                        <option value="">{:lang('select_level')}</option>
+                        <option value="9" {if condition="$param['level'] eq '9'"}selected {/if}>{:lang('level')}9-{:lang('slide')}</option>
+                        <option value="1" {if condition="$param['level'] eq '1'"}selected {/if}>{:lang('level')}1</option>
+                        <option value="2" {if condition="$param['level'] eq '2'"}selected {/if}>{:lang('level')}2</option>
+                        <option value="3" {if condition="$param['level'] eq '3'"}selected {/if}>{:lang('level')}3</option>
+                        <option value="4" {if condition="$param['level'] eq '4'"}selected {/if}>{:lang('level')}4</option>
+                        <option value="5" {if condition="$param['level'] eq '5'"}selected {/if}>{:lang('level')}5</option>
+                        <option value="6" {if condition="$param['level'] eq '6'"}selected {/if}>{:lang('level')}6</option>
+                        <option value="7" {if condition="$param['level'] eq '7'"}selected {/if}>{:lang('level')}7</option>
+                        <option value="8" {if condition="$param['level'] eq '8'"}selected {/if}>{:lang('level')}8</option>
+                    </select>
+                </div>
+                <div class="layui-input-inline w150">
+                    <select name="lock">
+                        <option value="">{:lang('select_lock')}</option>
+                        <option value="0" {if condition="$param['lock'] eq '0'"}selected {/if}>{:lang('unlock')}</option>
+                        <option value="1" {if condition="$param['lock'] eq '1'"}selected {/if}>{:lang('lock')}</option>
+                    </select>
+                </div>
+                <div class="layui-input-inline w150">
+                    <select name="pic">
+                        <option value="">{:lang('select_pic')}</option>
+                        <option value="1" {if condition="$param['pic'] eq '1'"}selected{/if}>{:lang('pic_empty')}</option>
+                        <option value="2" {if condition="$param['pic'] eq '2'"}selected{/if}>{:lang('pic_remote')}</option>
+                        <option value="3" {if condition="$param['pic'] eq '3'"}selected{/if}>{:lang('pic_sync_err')}</option>
+                    </select>
+                </div>
+                <div class="layui-input-inline w150">
+                    <select name="order">
+                        <option value="">{:lang('select_sort')}</option>
+                        <option value="manga_time" {if condition="$param['order'] eq 'manga_time'"}selected{/if}>{:lang('update_time')}</option>
+                        <option value="manga_id" {if condition="$param['order'] eq 'manga_id'"}selected{/if}>{:lang('id')}</option>
+                        <option value="manga_hits" {if condition="$param['order'] eq 'manga_hits'"}selected{/if}>{:lang('hits')}</option>
+                        <option value="manga_hits_month" {if condition="$param['order'] eq 'manga_hits_month'"}selected{/if}>{:lang('hits_month')}</option>
+                        <option value="manga_hits_week" {if condition="$param['order'] eq 'manga_hits_week'"}selected{/if}>{:lang('hits_week')}</option>
+                        <option value="manga_hits_day" {if condition="$param['order'] eq 'manga_hits_day'"}selected{/if}>{:lang('hits_day')}</option>
+                    </select>
+                </div>
+
+                <div class="layui-input-inline">
+                    <input type="text" autocomplete="off" placeholder="{:lang('wd')}" class="layui-input" name="wd" value="{$param['wd']|mac_restore_htmlfilter}">
+                </div>
+                <button class="layui-btn mgl-20 j-search" >{:lang('btn_search')}</button>
+            </form>
+        </div>
+
+        <div class="flex gap-5 overflow-x-auto overflow-y-hidden">
+            <a data-href="{:url('info')}" data-full="1" class="layui-btn layui-btn-primary j-iframe"><i class="layui-icon">&#xe654;</i>{:lang('add')}</a>
+            <a data-href="{:url('del')}" class="layui-btn layui-btn-primary j-page-btns confirm"><i class="layui-icon">&#xe640;</i>{:lang('del')}</a>
+            <a data-href="{:url('index/select')}?tab=manga&col=type_id&tpl=select_type&url=manga/field" data-width="270" data-height="100" data-checkbox="1" class="layui-btn layui-btn-primary j-select"><i class="layui-icon">&#xe620;</i>{:lang('type')}</a>
+            <a data-href="{:url('index/select')}?tab=manga&col=manga_level&tpl=select_level&url=manga/field" data-width="270" data-height="100" data-checkbox="1" class="layui-btn layui-btn-primary j-select"><i class="layui-icon">&#xe620;</i>{:lang('level')}</a>
+            <a data-href="{:url('index/select')}?tab=manga&col=manga_hits&tpl=select_hits&url=manga/field" data-width="470" data-height="100" data-checkbox="1" class="layui-btn layui-btn-primary j-select"><i class="layui-icon">&#xe620;</i>{:lang('hits')}</a>
+            <a data-href="{:url('index/select')}?tab=manga&col=manga_status&tpl=select_status&url=manga/field" data-width="470" data-height="100" data-checkbox="1" class="layui-btn layui-btn-primary j-select"><i class="layui-icon">&#xe620;</i>{:lang('status')}</a>
+            <a data-href="{:url('index/select')}?tab=manga&col=manga_lock&tpl=select_lock&url=manga/field" data-width="470" data-height="100" data-checkbox="1" class="layui-btn layui-btn-primary j-select"><i class="layui-icon">&#xe620;</i>{:lang('lock')}</a>
+            <a class="layui-btn layui-btn-primary j-iframe" data-href="{:url('images/opt?tab=manga')}" href="javascript:;" title="{:lang('pic_sync')}"><i class="layui-icon">&#xe620;</i>{:lang('pic_sync')}</a>
+            <a class="layui-btn layui-btn-primary j-iframe" data-checkbox="true" data-href="{:url('make/make?ac=info&tab=manga')}" href="javascript:;" title="{:lang('make_page')}"><i class="layui-icon">&#xe620;</i>{:lang('make_page')}</a>
+            {if condition="$param.select eq 1"}
+            <a data-href="" onclick="parent.onSelectResult('{$param.input|mac_filter_xss}', $('.checkbox-ids:checked'))" class="layui-btn layui-btn-normal">{:lang('select_return')}</a>
+            {/if}
+            {if condition="$param['repeat'] neq ''"}
+            <a data-href="{:url('del')}?repeat=1&retain=min" data-checkbox="no" class="layui-btn layui-btn-primary j-page-btns confirm"><i class="layui-icon">&#xe640;</i>{:lang('del_auto_keep_min')}</a>
+            <a data-href="{:url('del')}?repeat=1&retain=max" data-checkbox="no" class="layui-btn layui-btn-primary j-page-btns confirm"><i class="layui-icon">&#xe640;</i>{:lang('del_auto_keep_max')}</a>
+            {/if}
+        </div>
+
+    </div>
+
+
+    <form class="layui-form " method="post" id="pageListForm">
+        <table class="layui-table" lay-size="sm">
+            <thead>
+            <tr>
+                <th width="25"><input type="checkbox" lay-skin="primary" lay-filter="allChoose"></th>
+                <th width="60">{:lang('id')}</th>
+                <th >{:lang('name')}</th>
+                <th width="50">{:lang('hits')}</th>
+                <th width="60">{:lang('score')}</th>
+                <th width="50">{:lang('level')}</th>
+                <th width="50">{:lang('browse')}</th>
+                <th width="80">{:lang('author')}</th>
+                <th width="100">{:lang('update_time')}</th>
+                <th width="140">{:lang('opt')}</th>
+            </tr>
+            </thead>
+
+            {volist name="list" id="vo"}
+            <tr>
+                <td><input type="checkbox" name="ids[]" value="{$vo.manga_id}" class="layui-checkbox checkbox-ids" lay-skin="primary"></td>
+                <td>{$vo.manga_id}</td>
+                <td>[{$vo.type.type_name|mac_filter_xss|mac_restore_htmlfilter}] <a target="_blank" class="layui-badge-rim " href="#">{$vo.manga_name|mac_filter_xss|mac_restore_htmlfilter}</a> {if condition="$vo.manga_status eq 0"} <span class="layui-badge">{:lang('reviewed_not')}</span>{/if} {if condition="$vo.manga_lock eq 1"} <span class="layui-badge">{:lang('lock')}</span>{/if}</td>
+                <td>{$vo.manga_hits}</td>
+                <td>{$vo.manga_score}</td>
+                <td><a data-href="{:url('index/select')}?tab=manga&col=manga_level&tpl=select_level&url=manga/field&ids={$vo.manga_id}" data-width="270" data-height="100" class=" j-select"><span class="layui-badge layui-bg-orange">{$vo.manga_level}</span></a></td>
+                <td>{if condition="$vo.ismake eq 1"}<a target="_blank" class="layui-badge layui-bg-green " href="#">Y</a>{else/}<a class="layui-badge" href="{:url('make/make?ac=info&tab=manga')}?ids={$vo.manga_id}&ref=1">N</a>{/if}</td>
+                <td>{$vo.manga_author|htmlspecialchars}</td>
+                <td>{$vo.manga_time|mac_day='color'}</td>
+                <td>
+                    <a class="layui-badge-rim j-iframe" data-full="1" data-href="{:url('info?id='.$vo['manga_id'])}" href="javascript:;" title="{:lang('edit')}">{:lang('edit')}</a>
+                    <a class="layui-badge-rim j-tr-del" data-href="{:url('del?ids='.$vo['manga_id'])}" href="javascript:;" title="{:lang('del')}">{:lang('del')}</a>
+                </td>
+            </tr>
+            {/volist}
+            </tbody>
+        </table>
+        <div id="pages" class="center"></div>
+    </form>
+</div>
+
+{include file="../../../application/admin/view_new/public/foot" /}
+
+<script type="text/javascript">
+    var curUrl="{:url('manga/data',$param)}";
+    layui.use(['laypage', 'layer','form', 'table'], function() {
+        var laypage = layui.laypage, layer = layui.layer, form = layui.form, table = layui.table;
+
+        laypage.render({
+            elem: 'pages'
+            ,count: {$total}
+            ,limit: {$limit}
+            ,curr: {$page}
+            ,layout: ['count', 'prev', 'page', 'next', 'limit', 'skip']
+            ,jump: function(obj,first){
+                if(!first){
+                    location.href = curUrl.replace('%7Bpage%7D',obj.curr).replace('%7Blimit%7D',obj.limit);
+                }
+            }
+        });
+
+        table.on('toolbar(manga)', function(obj){
+            var checkStatus = table.checkStatus(obj.config.id);
+            switch(obj.event){
+                case 'batchGenerateTag':
+                    var data = checkStatus.data;
+                    if(data.length === 0){
+                        layer.msg('请选择要生成TAG的漫画');
+                        return;
+                    }
+                    var ids = [];
+                    for(var i in data){
+                        ids.push(data[i].manga_id);
+                    }
+                    layer.confirm('确定要为选中的漫画生成TAG吗?', function(index){
+                        $.ajax({
+                            url: '{:url("manga/batchGenerateTag")}',
+                            type: 'post',
+                            data: {ids: ids},
+                            success: function(res){
+                                if(res.code == 1){
+                                    layer.msg(res.msg, {icon: 1});
+                                    table.reload('manga');
+                                }else{
+                                    layer.msg(res.msg, {icon: 2});
+                                }
+                            }
+                        });
+                    });
+                    break;
+            }
+        });
+    });
+</script>
+</body>
+</html>

+ 410 - 0
application/admin/view_new/manga/info.html

@@ -0,0 +1,410 @@
+{include file="../../../application/admin/view_new/public/head" /}
+<script type="text/javascript" src="__STATIC__/js/jquery.jscolor.js"></script>
+{include file="../../../application/admin/view_new/public/editor" flag="manga_editor"/}
+
+<div class="page-container p10">
+    <div class="showpic" style="display:none;"><img class="showpic_img" width="120" height="160" referrerPolicy="no-referrer"></div>
+
+    <form class="layui-form layui-form-pane" method="post" action="">
+        <input type="hidden" name="manga_id" value="{$info.manga_id}">
+
+        <div class="layui-tab">
+            <ul class="layui-tab-title ">
+                <li class="layui-this">{:lang('base_info')}</a></li>
+                <li>漫画数据</a></li>
+                <li>{:lang('other_info')}</li>
+            </ul>
+            <div class="layui-tab-content">
+
+                <div class="layui-tab-item layui-show">
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('param')}:</label>
+                        <div class="layui-input-inline w150">
+                            <select name="type_id" lay-filter="type_id">
+                                <option value="">{:lang('select_type')}</option>
+                                {volist name="type_tree" id="vo"}
+                                {if condition="$vo.type_mid eq 12"}
+                                <option value="{$vo.type_id}" {if condition="$info.type_id eq $vo.type_id"}selected{/if}>{$vo.type_name}</option>
+                                {volist name="$vo.child" id="ch"}
+                                <option value="{$ch.type_id}" {if condition="$info.type_id eq $ch.type_id"}selected{/if}>&nbsp;|&nbsp;&nbsp;&nbsp;|—{$ch.type_name}</option>
+                                {/volist}
+                                {/if}
+                                {/volist}
+                            </select>
+                        </div>
+                        <div class="layui-input-inline w150">
+                            <select name="manga_level">
+                                <option value="0">{:lang('select_level')}</option>
+                                <option value="9" {if condition="$info.manga_level eq 9"}selected{/if}>{:lang('level')}9-{:lang('slide')}</option>
+                                <option value="1" {if condition="$info.manga_level eq 1"}selected{/if}>{:lang('level')}1</option>
+                                <option value="2" {if condition="$info.manga_level eq 2"}selected{/if}>{:lang('level')}2</option>
+                                <option value="3" {if condition="$info.manga_level eq 3"}selected{/if}>{:lang('level')}3</option>
+                                <option value="4" {if condition="$info.manga_level eq 4"}selected{/if}>{:lang('level')}4</option>
+                                <option value="5" {if condition="$info.manga_level eq 5"}selected{/if}>{:lang('level')}5</option>
+                                <option value="6" {if condition="$info.manga_level eq 6"}selected{/if}>{:lang('level')}6</option>
+                                <option value="7" {if condition="$info.manga_level eq 7"}selected{/if}>{:lang('level')}7</option>
+                                <option value="8" {if condition="$info.manga_level eq 8"}selected{/if}>{:lang('level')}8</option>
+                            </select>
+                        </div>
+                        <div class="layui-input-inline w150">
+                            <select name="manga_status">
+                                <option value="1" {if condition="$info.manga_status eq 1"}selected{/if}>{:lang('reviewed')}</option>
+                                <option value="0" {if condition="$info.manga_status eq '0'"}selected{/if}>{:lang('reviewed_not')}</option>
+                            </select>
+                        </div>
+                        <div class="layui-input-inline w150">
+                            <select name="manga_lock">
+                                <option value="0">{:lang('unlock')}</option>
+                                <option value="1" {if condition="$info.manga_lock eq 1"}selected{/if}>{:lang('lock')}</option>
+                            </select>
+                        </div>
+                        <div class="layui-input-inline">
+                            <input type="checkbox" name="uptime" title="{:lang('update_time')}" value="1" checked class="layui-checkbox checkbox-ids" lay-skin="primary">
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('name')}:</label>
+                        <div class="layui-input-inline w500">
+                            <input type="text" class="layui-input" value="{$info.manga_name}" placeholder="" name="manga_name">
+                        </div>
+                        <label class="layui-form-label">{:lang('sub')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_sub}" placeholder="" name="manga_sub">
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('en')}:</label>
+                        <div class="layui-input-inline w500">
+                            <input type="text" class="layui-input" value="{$info.manga_en}" placeholder="" name="manga_en">
+                        </div>
+                        <label class="layui-form-label">{:lang('letter')}:</label>
+                        <div class="layui-input-inline w70">
+                            <input type="text" class="layui-input" value="{$info.manga_letter}" placeholder="" name="manga_letter">
+                        </div>
+                        <label class="layui-form-label">{:lang('color')}:</label>
+                        <div class="layui-input-inline w70">
+                            <input type="text" class="layui-input color" value="{$info.manga_color}" placeholder="" name="manga_color">
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">TAG:</label>
+                        <div class="layui-input-inline w500">
+                            <input type="text" class="layui-input" value="{$info.manga_tag}" placeholder="" name="manga_tag">
+                        </div>
+                        <div class="layui-input-inline w120">
+                            <input type="checkbox" name="uptag" title="{:lang('auto_make')}" value="1" class="layui-checkbox checkbox-ids" lay-skin="primary">
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('remarks')}:</label>
+                        <div class="layui-input-inline w500">
+                            <input type="text" class="layui-input" value="{$info.manga_remarks}" placeholder="例如:更新至20话" name="manga_remarks">
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('rel_vod')}:</label>
+                        <div class="layui-input-inline w500">
+                            <input type="text" class="layui-input" value="{$info.manga_rel_vod}" placeholder="{:lang('admin/vod/rel_vod_tip')}" name="manga_rel_vod">
+                        </div>
+                        <div class="layui-input-inline ">
+                            <a class="layui-btn j-iframe" data-href="{:url('vod/data')}?select=1&input=manga_rel_vod" href="javascript:;" title="{:lang('search_data')}">{:lang('search_data')}</a>
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">关联漫画:</label>
+                        <div class="layui-input-inline w500">
+                            <input type="text" class="layui-input" value="{$info.manga_rel_manga}" placeholder="请填写关联漫画ID,多个用,号连接" name="manga_rel_manga">
+                        </div>
+                        <div class="layui-input-inline ">
+                            <a class="layui-btn j-iframe" data-href="{:url('manga/data')}?select=1&input=manga_rel_manga" href="javascript:;" title="{:lang('search_data')}">{:lang('search_data')}</a>
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('class')}:</label>
+                        <div class="layui-input-inline w500">
+                            <input type="text" class="layui-input" value="{$info.manga_class}" placeholder="" id="manga_class" name="manga_class">
+                        </div>
+                        <div class="layui-input-inline w500 manga_class_label">
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('pic')}:</label>
+                        <div class="layui-input-inline w500 upload">
+                            <input type="text" class="layui-input upload-input" style="max-width:100%;" value="{$info.manga_pic}" placeholder="" id="manga_pic" name="manga_pic">
+                        </div>
+                        <div class="layui-input-inline ">
+                            <button type="button" class="layui-btn layui-upload" lay-data="{data:{thumb:1,thumb_class:'upload-thumb'}}" id="upload1">{:lang('upload_pic')}</button>
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('pic_thumb')}:</label>
+                        <div class="layui-input-inline w500 upload">
+                            <input type="text" class="layui-input upload-input" style="max-width:100%;" value="{$info.manga_pic_thumb}" placeholder="" id="manga_pic_thumb" name="manga_pic_thumb">
+                        </div>
+                        <div class="layui-input-inline ">
+                            <button type="button" class="layui-btn layui-upload" lay-data="{data:{thumb:0,thumb_class:'upload-thumb'}}" id="upload2">{:lang('upload_pic')}</button>
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('pic_slide')}:</label>
+                        <div class="layui-input-inline w500 upload">
+                            <input type="text" class="layui-input upload-input" style="max-width:100%;" value="{$info.manga_pic_slide}" placeholder="" id="manga_pic_slide" name="manga_pic_slide">
+                        </div>
+                        <div class="layui-input-inline ">
+                            <button type="button" class="layui-btn layui-upload" lay-data="{data:{thumb:0,thumb_class:'upload-thumb'}}" id="upload3">{:lang('upload_pic')}</button>
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('blurb')}:</label>
+                        <div class="layui-input-block">
+                            <textarea name="manga_blurb" cols="" rows="3" class="layui-textarea"  placeholder="{:lang('blurb_auto_tip')}" style="height:40px;">{$info.manga_blurb}</textarea>
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">漫画简介:</label>
+                        <div class="layui-input-block">
+                            <textarea id="manga_content" name="manga_content" type="text/plain" style="width:99%;height:250px">{$info.manga_content|mac_url_content_img}</textarea>
+                        </div>
+                    </div>
+
+                </div>
+
+                <div class="layui-tab-item">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">章节来源:</label>
+                        <div class="layui-input-block">
+                            <input type="text" class="layui-input" value="{$info.manga_chapter_from}" placeholder="例如:tkmh$$$manhuagui" name="manga_chapter_from">
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">章节列表:</label>
+                        <div class="layui-input-block">
+                            <textarea name="manga_chapter_url" class="layui-textarea" placeholder="格式:第1话$https://img.xxx.com/1.jpg,https://img.xxx.com/2.jpg#第2话$https://img.xxx.com/3.jpg" style="height:300px;">{$info.manga_chapter_url}</textarea>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="layui-tab-item">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('up')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_up}" placeholder="" id="manga_up" name="manga_up">
+                        </div>
+                        <label class="layui-form-label">{:lang('hate')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_down}" placeholder="" id="manga_down" name="manga_down">
+                        </div>
+                        <button class="layui-btn" type="button" id="btn_rnd">{:lang('rnd_make')}</button>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('hits')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_hits}" placeholder="" id="manga_hits" name="manga_hits">
+                        </div>
+                        <label class="layui-form-label">{:lang('hits_month')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_hits_month}" placeholder="" id="manga_hits_month" name="manga_hits_month" >
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('hits_week')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_hits_week}" placeholder="" id="manga_hits_week" name="manga_hits_week">
+                        </div>
+                        <label class="layui-form-label">{:lang('hits_day')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input " value="{$info.manga_hits_day}" placeholder="" id="manga_hits_day" name="manga_hits_day">
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('score')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_score}" placeholder="" id="manga_score" name="manga_score">
+                        </div>
+                        <label class="layui-form-label">{:lang('score_all')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_score_all}" placeholder="" id="manga_score_all" name="manga_score_all">
+                        </div>
+                        <label class="layui-form-label">{:lang('score_num')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_score_num}" placeholder="" id="manga_score_num" name="manga_score_num">
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('points_all')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_points}" placeholder="" name="manga_points">
+                        </div>
+                        <label class="layui-form-label">{:lang('points_detail')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_points_detail}" placeholder="" name="manga_points_detail">
+                        </div>
+                        <label class="layui-form-label">{:lang('tpl')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_tpl}" placeholder="" name="manga_tpl">
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('author')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_author}" placeholder="" name="manga_author">
+                        </div>
+                        <label class="layui-form-label">{:lang('from')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_from}" placeholder="" name="manga_from">
+                        </div>
+                        <label class="layui-form-label">{:lang('jumpurl')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_jumpurl}" placeholder="" name="manga_jumpurl">
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">{:lang('access_pwd')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_pwd}" placeholder="{:lang('not_static_is_ok')}" name="manga_pwd">
+                        </div>
+                        <label class="layui-form-label">{:lang('pwd_url')}:</label>
+                        <div class="layui-input-inline ">
+                            <input type="text" class="layui-input" value="{$info.manga_pwd_url}" placeholder="" name="manga_pwd_url">
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <div class="layui-form-item center">
+            <div class="layui-input-block">
+                <button type="submit" class="layui-btn" lay-submit="" lay-filter="formSubmit" data-child="">{:lang('btn_save')}</button>
+                <button class="layui-btn layui-btn-primary" type="reset">{:lang('btn_reset')}</button>
+            </div>
+        </div>
+    </form>
+</div>
+{include file="../../../application/admin/view_new/public/foot" /}
+
+<script type="text/javascript">
+        <script type="text/javascript">
+{literal}
+    var UPLOAD_IMG_KEY="{$GLOBALS['config']['upload']['img_key']}";
+    var UPLOAD_IMG_API="{$GLOBALS['config']['upload']['img_api']}";
+    var editor = editor_getEditor('manga_content');
+
+    layui.use(['form','upload', 'layer'], function () {
+        // 操作对象
+        var form = layui.form, layer = layui.layer, $ = layui.jquery, upload = layui.upload;
+
+        // 验证
+        form.verify({
+            manga_name: function (value) {
+                if (value == "") {
+                    return "{:lang('name_empty')}";
+                }
+            }
+        });
+
+        $(document).on("click", ".extend", function(){
+            $id = $(this).attr('data-id');
+            if($id == 'manga_class'||$id == 'manga_keywords'){
+                $val = $("input[id='"+$id+"']").val();
+                if($val!=''){$val = $val+',';}
+                if($val && $val.indexOf($(this).text())>-1){return;}
+                $("input[id='"+$id+"']").val($val+$(this).text());
+            }else{
+                $("input[id='"+$id+"']").val($(this).text());
+            }
+        });
+
+        form.on('select(type_id)', function(data){
+            getExtend(data.value);
+        });
+
+        upload.render({
+            elem: '.layui-upload'
+            ,url: "{:url('upload/upload')}?flag=manga"
+            ,method: 'post'
+            ,before: function(input) {
+                layer.msg("{:lang('upload_ing')}", {time:3000000});
+            },done: function(res, index, upload) {
+                var obj = this.item;
+                if (res.code == 0) {
+                    layer.msg(res.msg);
+                    return false;
+                }
+                layer.closeAll();
+                var input = $(obj).parent().parent().find('.upload-input');
+                if ($(obj).attr('lay-type') == 'image') {
+                    input.siblings('img').attr('src', res.data.file).show();
+                }
+                input.val(res.data.file);
+
+                if(res.data.thumb_class !=''){
+                    $('.'+ res.data.thumb_class).val(res.data.thumb[0].file);
+                }
+            }
+        });
+
+        $('.upload-input').hover(function (e){
+            var e = window.event || e;
+            var imgsrc = $(this).val();
+            if(imgsrc.trim()==""){ return; }
+            var left = e.clientX+document.body.scrollLeft+20;
+            var top = e.clientY+document.body.scrollTop+20;
+            $(".showpic").css({left:left,top:top,display:""});
+            if(imgsrc.indexOf('://')<0){ imgsrc = ROOT_PATH + '/' + imgsrc;	} else{ imgsrc = imgsrc.replace('mac:','http:'); }
+            $(".showpic_img").attr("src", imgsrc);
+        },function (e){
+            $(".showpic").css("display","none");
+        });
+
+        $("#btn_rnd").click(function(){
+            $("#manga_hits").val( rndNum(5000,9999) );
+            $("#manga_hits_month").val( rndNum(1000,4999) );
+            $("#manga_hits_week").val( rndNum(300,999) );
+            $("#manga_hits_day").val( rndNum(1,299) );
+            $("#manga_up").val( rndNum(1,999) );
+            $("#manga_down").val( rndNum(1,999) );
+            $("#manga_score").val( rndNum(10) );
+            $("#manga_score_all").val( rndNum(1000) );
+            $("#manga_score_num").val( rndNum(100) );
+        });
+    });
+
+    function getExtend(id){
+        $.post("{:url('type/extend')}", {id:id}, function(res) {
+            if (res.code == 1) {
+                $.each(res.data, function(key, value){
+                    $('.manga_'+key+"_label").html('');
+                    if(value != ''){
+                        $.each(value, function(key2, value2){
+                            $(".manga_"+key+"_label").append('<a class="layui-btn layui-btn-xs extend" href="javascript:;" data-id="manga_'+key+'">'+value2+'</a>');
+                        });
+                    }
+                });
+            }
+        });
+    }
+
+    {if condition="$info.manga_id gt 0"}
+    setTimeout(function () {
+        getExtend('{$info.type_id}')
+    },1000);
+    {/if}
+{/literal}
+</script>
+
+</body>
+</html>

+ 1 - 0
application/admin/view_new/type/info.html

@@ -18,6 +18,7 @@
                         <option value="2" {if condition="$info['type_mid'] == '2' || ($info.type_id eq 0 && $infop['type_mid'] == '2')"}selected {/if}>{:lang('art')}</option>
                         <option value="8" {if condition="$info['type_mid'] == '8' || ($info.type_id eq 0 && $infop['type_mid'] == '8')"}selected {/if}>{:lang('actor')}</option>
                         <option value="11" {if condition="$info['type_mid'] == '11' || ($info.type_id eq 0 && $infop['type_mid'] == '11')"}selected {/if}>{:lang('website')}</option>
+                        <option value="12" {if condition="$info['type_mid'] == '12' || ($info.type_id eq 0 && $infop['type_mid'] == '12')"}selected {/if}>{:lang('manga')}</option>
                     </select>
             </div>
         </div>

+ 54 - 0
application/api/controller/Manga.php

@@ -0,0 +1,54 @@
+<?php
+namespace app\api\controller;
+
+class Manga extends Base
+{
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    public function index()
+    {
+        $param = input();
+        $param['page'] = intval($param['page']) <1 ? 1 : intval($param['page']);
+        $param['limit'] = intval($param['limit']) <1 ? 20 : intval($param['limit']);
+
+        $where = [];
+        $where['manga_status'] = ['eq',1];
+
+        if(!empty($param['t'])){
+            $where['type_id'] = ['eq',$param['t']];
+        }
+        if(!empty($param['ids'])){
+            $where['manga_id'] = ['in',$param['ids']];
+        }
+        if(!empty($param['wd'])){
+            $param['wd'] = trim($param['wd']);
+            $where['manga_name'] = ['like','%'.$param['wd'].'%'];
+        }
+
+        $order='manga_time desc';
+        if(!empty($param['order'])){
+            $order = $param['order'];
+        }
+
+        $data = model('Manga')->listData($where,$order,$param['page'],$param['limit']);
+        return json($data);
+    }
+
+    public function detail()
+    {
+        $param = input();
+        $where = [];
+        $where['manga_status'] = ['eq',1];
+
+        if(!empty($param['id'])){
+            $where['manga_id'] = ['eq',$param['id']];
+        }
+
+        $data = model('Manga')->infoData($where);
+        return json($data);
+    }
+
+}

+ 46 - 0
application/common.php

@@ -1080,6 +1080,7 @@ function mac_get_mid_code($data)
         9  => 'role',
         10 => 'plot',
         11 => 'website',
+        12 => 'manga',
     ];
     return $arr[$data];
 }
@@ -1097,6 +1098,7 @@ function mac_get_mid_text($data)
         9  => lang('role'),
         10 => lang('plot'),
         11 => lang('website'),
+        12 => lang('manga'),
     ];
     return $arr[$data];
 }
@@ -1115,6 +1117,7 @@ function mac_get_mid($controller)
         'role'    => 9,
         'plot'    => 10,
         'website' => 11,
+        'manga'   => 12,
     ];
     return $arr[$controller];
 }
@@ -1131,6 +1134,7 @@ function mac_get_aid($controller,$action='')
     $arr=[
         'vod/type'=>11,'vod/show'=>12,'vod/search'=>13,'vod/detail'=>14,'vod/play'=>15,'vod/down'=>16,'vod/role'=>17,'vod/plot'=>18,
         'art/type'=>21,'art/show'=>22,'art/search'=>23,'art/detail'=>24,
+        'manga/type'=>121,'manga/show'=>122,'manga/search'=>123,'manga/detail'=>124,
         'topic/search'=>33,'topic/detail'=>34,
         'actor/type'=>81,'actor/show'=>82,'actor/search'=>83,'actor/detail'=>84,
         'role/show'=>92,'role/search'=>93,'role/detail'=>94,
@@ -1468,6 +1472,44 @@ function mac_play_list_one($url_one, $from_one, $server_one=''){
     return $url_list;
 }
 
+function mac_manga_list($manga_play_from,$manga_play_url,$manga_play_server,$manga_play_note)
+{
+    $manga_play_from_list = [];
+    $manga_play_url_list = [];
+    $manga_play_server_list = [];
+    $manga_play_note_list = [];
+
+    if(!empty($manga_play_from)) {
+        $manga_play_from_list = explode('$$$', $manga_play_from);
+    }
+    if(!empty($manga_play_url)) {
+        $manga_play_url_list = explode('$$$', $manga_play_url);
+    }
+    if(!empty($manga_play_server)) {
+        $manga_play_server_list = explode('$$$', $manga_play_server);
+    }
+    if(!empty($manga_play_note)) {
+        $manga_play_note_list = explode('$$$', $manga_play_note);
+    }
+
+    $res_list = [];
+    foreach($manga_play_from_list as $k=>$v){
+        $server = (string)$manga_play_server_list[$k];
+        $urls = mac_play_list_one($manga_play_url_list[$k],$v);
+
+        $res_list[$k + 1] = [
+            'sid' => $k + 1,
+            'from' => $v,
+            'url' => $manga_play_url_list[$k],
+            'server' => $server,
+            'note' => $manga_play_note_list[$k],
+            'url_count' => count($urls),
+            'urls' => $urls,
+        ];
+    }
+    return $res_list;
+}
+
 function mac_filter_words($p)
 {
     $config = config('maccms.app');
@@ -2597,6 +2639,10 @@ function mac_url_vod_detail($info)
 {
     return mac_url('vod/detail',[],$info);
 }
+function mac_url_manga_detail($info)
+{
+    return mac_url('manga/detail',[],$info);
+}
 function mac_url_vod_search($param)
 {
     return mac_url('vod/search',$param);

+ 361 - 1
application/common/model/Collect.php

@@ -125,6 +125,26 @@ class Collect extends Base {
         return $this->website_json($param);
     }
 
+    public function manga($param)
+    {
+        if($param['type'] == '1'){
+            return $this->manga_xml($param);
+        }
+        elseif($param['type'] == '2'){
+            return $this->manga_json($param);
+        }
+        else{
+            $data = $this->manga_json($param);
+
+            if($data['code'] == 1){
+                return $data;
+            }
+            else{
+                return $this->manga_xml($param);
+            }
+        }
+    }
+
     public function vod_xml_replace($url)
     {
         $array_url = array();
@@ -253,7 +273,6 @@ class Collect extends Base {
                     $array_url[$i] = implode('#', $sorted_urls);
                     $array_server[$i] = 'no';
                     $array_note[$i] = '';
-
                 }
             }else{
                 $array_from[]=(string)$video->dt;
@@ -1150,6 +1169,81 @@ class Collect extends Base {
         return $res;
     }
 
+    public function manga_json($param)
+    {
+        $url_param = [];
+        $url_param['ac'] = $param['ac'];
+        $url_param['t'] = $param['t'];
+        $url_param['pg'] = is_numeric($param['page']) ? $param['page'] : '';
+        $url_param['h'] = $param['h'];
+        $url_param['ids'] = $param['ids'];
+        $url_param['wd'] = $param['wd'];
+
+        if($param['ac']!='list'){
+            $url_param['ac'] = 'detail';
+        }
+
+        $url = $param['cjurl'];
+        if(strpos($url,'?')===false){
+            $url .='?';
+        }
+        else{
+            $url .='&';
+        }
+
+        $url .= http_build_query($url_param). base64_decode($param['param']);
+        $result = $this->checkCjUrl($url);
+        if ($result['code'] > 1) {
+            return $result;
+        }
+        $html = mac_curl_get($url);
+        if(empty($html)){
+            return ['code'=>1001, 'msg'=>lang('model/collect/get_html_err') . ', url: ' . $url];
+        }
+        $html = mac_filter_tags($html);
+        $json = json_decode($html,true);
+        if(!$json){
+            return ['code'=>1002, 'msg'=>lang('model/collect/json_err') . ': ' . mb_substr($html, 0, 15)];
+        }
+
+        $array_page = [];
+        $array_page['page'] = $json['page'];
+        $array_page['pagecount'] = $json['pagecount'];
+        $array_page['pagesize'] = $json['limit'];
+        $array_page['recordcount'] = $json['total'];
+        $array_page['url'] = $url;
+
+        $type_list = model('Type')->getCache('type_list');
+        $bind_list = config('bind');
+
+        $key = 0;
+        $array_data = [];
+        foreach($json['list'] as $key=>$v){
+            $array_data[$key] = $v;
+            $bind_key = $param['cjflag'] .'_'.$v['type_id'];
+            if($bind_list[$bind_key] >0){
+                $array_data[$key]['type_id'] = $bind_list[$bind_key];
+            }
+            else{
+                $array_data[$key]['type_id'] = 0;
+            }
+        }
+
+        $array_type = [];
+        $key=0;
+        //分类列表
+        if($param['ac'] == 'list'){
+            foreach($json['class'] as $k=>$v){
+                $array_type[$key]['type_id'] = $v['type_id'];
+                $array_type[$key]['type_name'] = $v['type_name'];
+                $key++;
+            }
+        }
+
+        $res = ['code'=>1, 'msg'=>'ok', 'page'=>$array_page, 'type'=>$array_type, 'data'=>$array_data ];
+        return $res;
+    }
+
     public function art_data($param,$data,$show=1)
     {
         if($show==1) {
@@ -2570,4 +2664,270 @@ class Collect extends Base {
         }
         return ['code' => 1];
     }
+
+    public function manga_xml($param,$html='')
+    {
+        $url_param = [];
+        $url_param['ac'] = $param['ac'];
+        $url_param['t'] = $param['t'];
+        $url_param['pg'] = is_numeric($param['page']) ? $param['page'] : '';
+        $url_param['h'] = $param['h'];
+        $url_param['ids'] = $param['ids'];
+        $url_param['wd'] = $param['wd'];
+        if(empty($param['h']) && !empty($param['rday'])){
+            $url_param['h'] = $param['rday'];
+        }
+
+        if($param['ac']!='list'){
+            $url_param['ac'] = 'mangalist';
+        }
+
+        $url = $param['cjurl'];
+        if(strpos($url,'?')===false){
+            $url .='?';
+        }
+        else{
+            $url .='&';
+        }
+        $url .= http_build_query($url_param). base64_decode($param['param']);
+        $result = $this->checkCjUrl($url);
+        if ($result['code'] > 1) {
+            return $result;
+        }
+        $html = mac_curl_get($url);
+        if(empty($html)){
+            return ['code'=>1001, 'msg'=>lang('model/collect/get_html_err') . ', url: ' . $url];
+        }
+        $html = mac_filter_tags($html);
+        $xml = @simplexml_load_string($html);
+        if(empty($xml)){
+            $labelRule = '<pic>'."(.*?)".'</pic>';
+            $labelRule = mac_buildregx($labelRule,"is");
+            preg_match_all($labelRule,$html,$tmparr);
+            $ec=false;
+            foreach($tmparr[1] as $tt){
+                if(strpos($tt,'[CDATA')===false){
+                    $ec=true;
+                    $ne = '<pic>'.'<![CDATA['.$tt .']]>'.'</pic>';
+                    $html = str_replace('<pic>'.$tt.'</pic>',$ne,$html);
+                }
+            }
+            if($ec) {
+                $xml = @simplexml_load_string($html);
+            }
+            if(empty($xml)) {
+                return ['code' => 1002, 'msg'=>lang('model/collect/xml_err')];
+            }
+        }
+
+        $array_page = [];
+        $array_page['page'] = (string)$xml->list->attributes()->page;
+        $array_page['pagecount'] = (string)$xml->list->attributes()->pagecount;
+        $array_page['pagesize'] = (string)$xml->list->attributes()->pagesize;
+        $array_page['recordcount'] = (string)$xml->list->attributes()->recordcount;
+        $array_page['url'] = $url;
+
+        $type_list = model('Type')->getCache('type_list');
+        $bind_list = config('bind');
+
+        $key = 0;
+        $array_data = [];
+        foreach($xml->list->manga as $manga){
+            $bind_key = $param['cjflag'] .'_'.(string)$manga->tid;
+            if($bind_list[$bind_key] >0){
+                $array_data[$key]['type_id'] = $bind_list[$bind_key];
+            }
+            else{
+                $array_data[$key]['type_id'] = 0;
+            }
+            $array_data[$key]['manga_id'] = (string)$manga->id;
+            $array_data[$key]['manga_name'] = (string)$manga->name;
+            $array_data[$key]['manga_sub'] = (string)$manga->sub;
+            $array_data[$key]['manga_remarks'] = (string)$manga->remarks;
+            $array_data[$key]['type_name'] = (string)$manga->type;
+            $array_data[$key]['manga_pic'] = (string)$manga->pic;
+            $array_data[$key]['manga_lang'] = (string)$manga->lang;
+            $array_data[$key]['manga_area'] = (string)$manga->area;
+            $array_data[$key]['manga_year'] = (string)$manga->year;
+            $array_data[$key]['manga_serial'] = (string)$manga->serial;
+            $array_data[$key]['manga_author'] = (string)$manga->author;
+            $array_data[$key]['manga_artist'] = (string)$manga->artist;
+            $array_data[$key]['manga_content'] = (string)$manga->content;
+
+            $array_data[$key]['manga_status'] = 1;
+            $array_data[$key]['manga_time'] = (string)$manga->last;
+            $array_data[$key]['manga_total'] = 0;
+            $array_data[$key]['manga_isend'] = 1;
+            if($array_data[$key]['manga_serial']){
+                $array_data[$key]['manga_isend'] = 0;
+            }
+            
+            // 格式化章節
+            $array_from = [];
+            $array_url = [];
+            $array_server=[];
+            $array_note=[];
+
+            if(isset($manga->dl->dd) && count($manga->dl->dd)){
+                for($i=0; $i<count($manga->dl->dd); $i++){
+                    $array_from[$i] = (string)$manga->dl->dd[$i]['flag'];
+                    $urls = explode('#', $this->vod_xml_replace((string)$manga->dl->dd[$i]));
+                    $sorted_urls = $this->sortPlayUrls($urls);
+                    $array_url[$i] = implode('#', $sorted_urls);
+                    $array_server[$i] = 'no';
+                    $array_note[$i] = '';
+                }
+            }else{
+                $array_from[]=(string)$manga->dt;
+                $array_url[] ='';
+                $array_server[]='';
+                $array_note[]='';
+            }
+
+            $array_data[$key]['manga_play_from'] = implode('$$$', $array_from);
+            $array_data[$key]['manga_play_url'] = implode('$$$', $array_url);
+            $array_data[$key]['manga_play_server'] = implode('$$$', $array_server);
+            $array_data[$key]['manga_play_note'] = implode('$$$', $array_note);
+
+            $key++;
+        }
+
+        $array_type = [];
+        $key=0;
+        //分类列表
+        if($param['ac'] == 'list'){
+            foreach($xml->class->ty as $ty){
+                $array_type[$key]['type_id'] = (string)$ty->attributes()->id;
+                $array_type[$key]['type_name'] = (string)$ty;
+                $key++;
+            }
+        }
+
+        $res = ['code'=>1, 'msg'=>'xml', 'page'=>$array_page, 'type'=>$array_type, 'data'=>$array_data ];
+        return $res;
+    }
+
+    public function manga_data($param,$data,$show=1)
+    {
+        if($show==1) {
+            mac_echo('[' . __FUNCTION__ . '] ' . lang('model/collect/data_tip1', [$data['page']['page'],$data['page']['pagecount'],$data['page']['url']]));
+        }
+
+        $config = config('maccms.collect');
+        $config = $config['manga'];
+        $config_sync_pic = $param['sync_pic_opt'] > 0 ? $param['sync_pic_opt'] : $config['pic'];
+
+        $type_list = model('Type')->getCache('type_list');
+        $filter_arr = explode(',',$config['filter']);
+        $filter_arr = array_filter($filter_arr);
+        
+        foreach($data['data'] as $k=>$v){
+            $color='red';
+            $des='';
+            $msg='';
+            $tmp='';
+
+            if ($v['type_id'] ==0) {
+                $des = lang('model/collect/type_err');
+            } elseif (empty($v['manga_name'])) {
+                $des = lang('model/collect/name_err');
+            } elseif (mac_array_filter($filter_arr,$v['manga_name']) !==false) {
+                $des = lang('model/collect/name_in_filter_err');
+            } else {
+                unset($v['manga_id']);
+
+                foreach($v as $k2=>$v2){
+                    if(strpos($k2,'_content')===false) {
+                        $v[$k2] = strip_tags($v2);
+                    }
+                }
+
+                $v['type_id_1'] = intval($type_list[$v['type_id']]['type_pid']);
+                $v['manga_en'] = Pinyin::get($v['manga_name']);
+                $v['manga_letter'] = strtoupper(substr($v['manga_en'],0,1));
+                $v['manga_time_add'] = time();
+                $v['manga_time'] = time();
+                $v['manga_status'] = intval($config['status']);
+                
+                $where = [];
+                $where['manga_name'] = $v['manga_name'];
+                if (strpos($config['inrule'], 'b')!==false) {
+                    $where['type_id'] = $v['type_id'];
+                }
+
+                $info = model('Manga')->where($where)->find();
+                if (!$info) {
+                    $tmp = $this->syncImages($config_sync_pic, $v['manga_pic'],'manga');
+                    $v['manga_pic'] = (string)$tmp['pic'];
+                    $msg = $tmp['msg'];
+                    
+                    $v['manga_chapter_from'] = $v['manga_play_from'];
+                    $v['manga_chapter_url'] = $v['manga_play_url'];
+                    
+                    $res = model('Manga')->insert($v);
+                    if($res===false){
+
+                    }
+                    $color ='green';
+                    $des= lang('model/collect/add_ok');
+                }
+                else{
+                    $des = lang('model/collect/not_need_update');
+                }
+            }
+            if($show==1) {
+                mac_echo( ($k + 1) .'、'. $v['manga_name'] . " <font color='{$color}'>" .$des .'</font>'. $msg.'' );
+            }
+            else{
+                return ['code'=>($color=='red' ? 1001 : 1),'msg'=>$des ];
+            }
+        }
+
+        $key = $GLOBALS['config']['app']['cache_flag']. '_'.'collect_break_manga';
+        if(ENTRANCE=='api'){
+            Cache::rm($key);
+            if ($data['page']['page'] < $data['page']['pagecount']) {
+                $param['page'] = intval($data['page']['page']) + 1;
+                $res = $this->manga($param);
+                if($res['code']>1){
+                    return $this->error($res['msg']);
+                }
+                $this->manga_data($param,$res );
+            }
+            mac_echo(lang('model/collect/is_over'));
+            die;
+        }
+
+        if(empty($GLOBALS['config']['app']['collect_timespan'])){
+            $GLOBALS['config']['app']['collect_timespan'] = 3;
+        }
+        if($show==1) {
+            if ($param['ac'] == 'cjsel') {
+                Cache::rm($key);
+                mac_echo(lang('model/collect/is_over'));
+                unset($param['ids']);
+                $param['ac'] = 'list';
+                $url = url('api') . '?' . http_build_query($param);
+                $ref = $_SERVER["HTTP_REFERER"];
+                if(!empty($ref)){
+                   $url = $ref;
+                }
+
+                mac_jump($url, $GLOBALS['config']['app']['collect_timespan']);
+            } else {
+                if ($data['page']['page'] >= $data['page']['pagecount']) {
+                    Cache::rm($key);
+                    mac_echo(lang('model/collect/is_over'));
+                    unset($param['page'],$param['ids']);
+                    $param['ac'] = 'list';
+                    $url = url('api') . '?' . http_build_query($param);
+                    mac_jump($url, $GLOBALS['config']['app']['collect_timespan']);
+                } else {
+                    $param['page'] = intval($data['page']['page']) + 1;
+                    $url = url('api') . '?' . http_build_query($param);
+                    mac_jump($url, $GLOBALS['config']['app']['collect_timespan'] );
+                }
+            }
+        }
+    }
 }

+ 637 - 0
application/common/model/Manga.php

@@ -0,0 +1,637 @@
+<?php
+namespace app\common\model;
+use think\Db;
+use think\Cache;
+use app\common\util\Pinyin;
+
+class Manga extends Base {
+    // 设置数据表(不含前缀)
+    protected $name = 'manga';
+
+    // 定义时间戳字段名
+    protected $createTime = '';
+    protected $updateTime = '';
+
+    // 自动完成
+    protected $auto       = [];
+    protected $insert     = [];
+    protected $update     = [];
+
+    public function getMangaStatusTextAttr($val,$data)
+    {
+        $arr = [0=>lang('disable'),1=>lang('enable')];
+        return $arr[$data['manga_status']];
+    }
+
+    public function getMangaContentTextAttr($val,$data)
+    {
+        $arr = explode('$$$',$data['manga_content']);
+        return $arr;
+    }
+
+    public function countData($where)
+    {
+        $total = $this->where($where)->count();
+        return $total;
+    }
+
+    public function listData($where,$order,$page=1,$limit=20,$start=0,$field='*',$addition=1,$totalshow=1)
+    {
+        $page = $page > 0 ? (int)$page : 1;
+        $limit = $limit ? (int)$limit : 20;
+        $start = $start ? (int)$start : 0;
+        if(!is_array($where)){
+            $where = json_decode($where,true);
+        }
+        $where2='';
+        if(!empty($where['_string'])){
+            $where2 = $where['_string'];
+            unset($where['_string']);
+        }
+
+        $limit_str = ($limit * ($page-1) + $start) .",". $limit;
+        if($totalshow==1) {
+            $total = $this->where($where)->count();
+        }
+        $list = Db::name('Manga')->field($field)->where($where)->where($where2)->order($order)->limit($limit_str)->select();
+        //dump($where);die;
+        //echo $this->getLastSql();die;
+        //分类
+        $type_list = model('Type')->getCache('type_list');
+        //用户组
+        $group_list = model('Group')->getCache('group_list');
+
+        foreach($list as $k=>$v){
+            if($addition==1){
+	            if(!empty($v['type_id'])) {
+	                $list[$k]['type'] = $type_list[$v['type_id']];
+                    $list[$k]['type_1'] = $type_list[$list[$k]['type']['type_pid']];
+	            }
+	            if(!empty($v['group_id'])) {
+	                $list[$k]['group'] = $group_list[$v['group_id']];
+	            }
+            }
+        }
+        return ['code'=>1,'msg'=>lang('data_list'),'page'=>$page,'pagecount'=>ceil($total/$limit),'limit'=>$limit,'total'=>$total,'list'=>$list];
+    }
+
+    public function listRepeatData($where,$order,$page=1,$limit=20,$start=0,$field='*',$addition=1)
+    {
+        $page = $page > 0 ? (int)$page : 1;
+        $limit = $limit ? (int)$limit : 20;
+        $start = $start ? (int)$start : 0;
+        if(!is_array($where)){
+            $where = json_decode($where,true);
+        }
+        $limit_str = ($limit * ($page-1) + $start) .",". $limit;
+
+        $total = $this
+            ->join('tmpmanga t','t.name1 = manga_name')
+            ->where($where)
+            ->count();
+
+        $list = Db::name('Manga')
+            ->join('tmpmanga t','t.name1 = manga_name')
+            ->field($field)
+            ->where($where)
+            ->order($order)
+            ->limit($limit_str)
+            ->select();
+
+        //dump($where);die;
+        //echo $this->getLastSql();die;
+        //分类
+        $type_list = model('Type')->getCache('type_list');
+        //用户组
+        $group_list = model('Group')->getCache('group_list');
+
+        foreach($list as $k=>$v){
+            if($addition==1){
+                if(!empty($v['type_id'])) {
+                    $list[$k]['type'] = $type_list[$v['type_id']];
+                    $list[$k]['type_1'] = $type_list[$list[$k]['type']['type_pid']];
+                }
+                if(!empty($v['group_id'])) {
+                    $list[$k]['group'] = $group_list[$v['group_id']];
+                }
+            }
+        }
+
+
+        return ['code'=>1,'msg'=>lang('data_list'),'page'=>$page,'pagecount'=>ceil($total/$limit),'limit'=>$limit,'total'=>$total,'list'=>$list];
+    }
+
+    public function listCacheData($lp)
+    {
+        if (!is_array($lp)) {
+            $lp = json_decode($lp, true);
+        }
+
+        $order = $lp['order'];
+        $by = $lp['by'];
+        $type = $lp['type'];
+        $ids = $lp['ids'];
+        $rel = $lp['rel'];
+        $paging = $lp['paging'];
+        $pageurl = $lp['pageurl'];
+        $level = $lp['level'];
+        $wd = $lp['wd'];
+        $tag = $lp['tag'];
+        $class = $lp['class'];
+        $letter = $lp['letter'];
+        $start = intval(abs($lp['start']));
+        $num = intval(abs($lp['num']));
+        $half = intval(abs($lp['half']));
+        $timeadd = $lp['timeadd'];
+        $timehits = $lp['timehits'];
+        $time = $lp['time'];
+        $hitsmonth = $lp['hitsmonth'];
+        $hitsweek = $lp['hitsweek'];
+        $hitsday = $lp['hitsday'];
+        $hits = $lp['hits'];
+        $not = $lp['not'];
+        $cachetime = $lp['cachetime'];
+        $typenot = $lp['typenot'];
+        $name = $lp['name'];
+        $page = 1;
+        $where = [];
+        $totalshow=0;
+
+        if(empty($num)){
+            $num = 20;
+        }
+        if($start>1){
+            $start--;
+        }
+        if(!in_array($paging, ['yes', 'no'])) {
+            $paging = 'no';
+        }
+        $param = mac_param_url();
+        if($paging=='yes') {
+            $param = mac_search_len_check($param);
+            $totalshow = 1;
+            if(!empty($param['id'])) {
+                //$type = intval($param['id']);
+            }
+            if(!empty($param['ids'])){
+                $ids = $param['ids'];
+            }
+            if(!empty($param['tid'])) {
+                $tid = intval($param['tid']);
+            }
+            if(!empty($param['level'])) {
+                $level = $param['level'];
+            }
+            if(!empty($param['letter'])) {
+                $letter = $param['letter'];
+            }
+            if(!empty($param['wd'])) {
+                $wd = $param['wd'];
+            }
+            if(!empty($param['name'])) {
+                $name = $param['name'];
+            }
+            if(!empty($param['tag'])) {
+                $tag = $param['tag'];
+            }
+            if(!empty($param['class'])) {
+                $class = $param['class'];
+            }
+            if(!empty($param['by'])){
+                $by = $param['by'];
+            }
+            if(!empty($param['order'])){
+                $order = $param['order'];
+            }
+            if(!empty($param['page'])){
+                $page = intval($param['page']);
+            }
+            foreach($param as $k=>$v){
+                if(empty($v)){
+                    unset($param[$k]);
+                }
+            }
+            if(empty($pageurl)){
+                $pageurl = 'manga/type';
+            }
+            $param['page'] = 'PAGELINK';
+
+            if($pageurl=='manga/type' || $pageurl=='manga/show'){
+                $type = intval( $GLOBALS['type_id'] );
+                $type_list = model('Type')->getCache('type_list');
+                $type_info = $type_list[$type];
+                $flag='type';
+                if($pageurl == 'manga/show'){
+                    $flag='show';
+                }
+                $pageurl = mac_url_type($type_info,$param,$flag);
+            }
+            else{
+                $pageurl = mac_url($pageurl,$param);
+            }
+
+        }
+
+        $where['manga_status'] = ['eq',1];
+        if(!empty($level)) {
+            if($level=='all'){
+                $level = '1,2,3,4,5,6,7,8,9';
+            }
+            $where['manga_level'] = ['in',explode(',',$level)];
+        }
+        if(!empty($ids)) {
+            if($ids!='all'){
+                $where['manga_id'] = ['in',explode(',',$ids)];
+            }
+        }
+        if(!empty($not)){
+            $where['manga_id'] = ['not in',explode(',',$not)];
+        }
+        if(!empty($rel)){
+            $tmp = explode(',',$rel);
+            if(is_numeric($rel) || mac_array_check_num($tmp)==true ){
+                $where['manga_id'] = ['in',$tmp];
+            }
+            else{
+                $where['manga_rel_manga'] = ['like', mac_like_arr($rel),'OR'];
+            }
+        }
+        if(!empty($letter)){
+            if(substr($letter,0,1)=='0' && substr($letter,2,1)=='9'){
+                $letter='0,1,2,3,4,5,6,7,8,9';
+            }
+            $where['manga_letter'] = ['in',explode(',',$letter)];
+        }
+        if(!empty($timeadd)){
+            $s = intval(strtotime($timeadd));
+            $where['manga_time_add'] =['gt',$s];
+        }
+        if(!empty($timehits)){
+            $s = intval(strtotime($timehits));
+            $where['manga_time_hits'] =['gt',$s];
+        }
+        if(!empty($time)){
+            $s = intval(strtotime($time));
+            $where['manga_time'] =['gt',$s];
+        }
+        if(!empty($type)) {
+            if($type=='current'){
+                $type = intval( $GLOBALS['type_id'] );
+            }
+            if($type!='all') {
+                $tmp_arr = explode(',', $type);
+                $type_list = model('Type')->getCache('type_list');
+                $type = [];
+                foreach ($type_list as $k2 => $v2) {
+                    if (in_array($v2['type_id'] . '', $tmp_arr) || in_array($v2['type_pid'] . '', $tmp_arr)) {
+                        $type[] = $v2['type_id'];
+                    }
+                }
+                $type = array_unique($type);
+                $where['type_id'] = ['in', implode(',', $type)];
+            }
+        }
+        if(!empty($typenot)){
+            $where['type_id'] = ['not in',$typenot];
+        }
+        if(!empty($tid)) {
+            $where['type_id|type_id_1'] = ['eq',$tid];
+        }
+        if(!empty($hitsmonth)){
+            $tmp = explode(' ',$hitsmonth);
+            if(count($tmp)==1){
+                $where['manga_hits_month'] = ['gt', $tmp];
+            }
+            else{
+                $where['manga_hits_month'] = [$tmp[0],$tmp[1]];
+            }
+        }
+        if(!empty($hitsweek)){
+            $tmp = explode(' ',$hitsweek);
+            if(count($tmp)==1){
+                $where['manga_hits_week'] = ['gt', $tmp];
+            }
+            else{
+                $where['manga_hits_week'] = [$tmp[0],$tmp[1]];
+            }
+        }
+        if(!empty($hitsday)){
+            $tmp = explode(' ',$hitsday);
+            if(count($tmp)==1){
+                $where['manga_hits_day'] = ['gt', $tmp];
+            }
+            else{
+                $where['manga_hits_day'] = [$tmp[0],$tmp[1]];
+            }
+        }
+        if(!empty($hits)){
+            $tmp = explode(' ',$hits);
+            if(count($tmp)==1){
+                $where['manga_hits'] = ['gt', $tmp];
+            }
+            else{
+                $where['manga_hits'] = [$tmp[0],$tmp[1]];
+            }
+        }
+
+        if(!empty($wd)) {
+            $role = 'manga_name';
+            if(!empty($GLOBALS['config']['app']['search_manga_rule'])){
+                $role .= '|'.$GLOBALS['config']['app']['search_manga_rule'];
+            }
+            $where[$role] = ['like', '%' . $wd . '%'];
+        }
+        if(!empty($name)) {
+            $where['manga_name'] = ['like', mac_like_arr($name),'OR'];
+        }
+        if(!empty($tag)) {
+            $where['manga_tag'] = ['like', mac_like_arr($tag),'OR'];
+        }
+        if(!empty($class)) {
+            $where['manga_class'] = ['like',mac_like_arr($class),'OR'];
+        }
+        if(defined('ENTRANCE') && ENTRANCE == 'index' && $GLOBALS['config']['app']['popedom_filter'] ==1){
+            $type_ids = mac_get_popedom_filter($GLOBALS['user']['group']['group_type']);
+            if(!empty($type_ids)){
+                if(!empty($where['type_id'])){
+                    $where['type_id'] = [ $where['type_id'],['not in', explode(',',$type_ids)] ];
+                }
+                else{
+                    $where['type_id'] = ['not in', explode(',',$type_ids)];
+                }
+            }
+        }
+        if($by=='rnd'){
+            $data_count = $this->countData($where);
+            $page_total = floor($data_count / $lp['num']) + 1;
+            if($data_count < $lp['num']){
+                $lp['num'] = $data_count;
+            }
+            $randi = @mt_rand(1, $page_total);
+            $page = $randi;
+            $by = 'hits_week';
+            $order = 'desc';
+        }
+
+        if(!in_array($by, ['id', 'time','time_add','score','hits','hits_day','hits_week','hits_month','up','down','level','rnd'])) {
+            $by = 'time';
+        }
+        if(!in_array($order, ['asc', 'desc'])) {
+            $order = 'desc';
+        }
+        $order= 'manga_'.$by .' ' . $order;
+        $where_cache = $where;
+        if(!empty($randi)){
+            unset($where_cache['manga_id']);
+            $where_cache['order'] = 'rnd';
+        }
+        $cach_name = $GLOBALS['config']['app']['cache_flag']. '_' .md5('manga_listcache_'.http_build_query($where_cache).'_'.$order.'_'.$page.'_'.$num.'_'.$start.'_'.$pageurl);
+        $res = Cache::get($cach_name);
+        if(empty($cachetime)){
+            $cachetime = $GLOBALS['config']['app']['cache_time'];
+        }
+        if($GLOBALS['config']['app']['cache_core']==0 || empty($res)) {
+            $res = $this->listData($where,$order,$page,$num,$start,'*',1,$totalshow);
+            if($GLOBALS['config']['app']['cache_core']==1) {
+                Cache::set($cach_name, $res, $cachetime);
+            }
+        }
+        $res['pageurl'] = $pageurl;
+        $res['half'] = $half;
+        return $res;
+    }
+
+    public function infoData($where,$field='*',$cache=0)
+    {
+        if(empty($where) || !is_array($where)){
+            return ['code'=>1001,'msg'=>lang('param_err')];
+        }
+        $data_cache = false;
+        $key = $GLOBALS['config']['app']['cache_flag']. '_'.'manga_detail_'.$where['manga_id'][1].'_'.$where['manga_en'][1];
+        if($where['manga_id'][0]=='eq' || $where['manga_en'][0]=='eq'){
+            $data_cache = true;
+        }
+        if($GLOBALS['config']['app']['cache_core']==1 && $data_cache) {
+            $info = Cache::get($key);
+        }
+        if($GLOBALS['config']['app']['cache_core']==0 || $cache==0 || empty($info['manga_id'])) {
+            $info = $this->field($field)->where($where)->find();
+            if (empty($info)) {
+                return ['code' => 1002, 'msg' => lang('obtain_err')];
+            }
+            $info = $info->toArray();
+            //内容
+            if (!empty($info['manga_chapter_url'])) {
+                $info['manga_page_list'] = mac_manga_list($info['manga_chapter_from'], $info['manga_chapter_url'], $info['manga_play_server'], $info['manga_play_note']);
+                $info['manga_page_total'] = count($info['manga_page_list']);
+            }
+            if(!empty($info['manga_pic_screenshot'])){
+                $info['manga_pic_screenshot_list'] = mac_screenshot_list($info['manga_pic_screenshot']);
+            }
+            //分类
+            if (!empty($info['type_id'])) {
+                $type_list = model('Type')->getCache('type_list');
+                $info['type'] = $type_list[$info['type_id']];
+                $info['type_1'] = $type_list[$info['type']['type_pid']];
+            }
+
+            //用户组
+            if (!empty($info['group_id'])) {
+                $group_list = model('Group')->getCache('group_list');
+                $info['group'] = $group_list[$info['group_id']];
+            }
+            if($GLOBALS['config']['app']['cache_core']==1 && $data_cache && $cache==1) {
+                Cache::set($key, $info);
+            }
+        }
+        return ['code'=>1,'msg'=>lang('obtain_ok'),'info'=>$info];
+    }
+
+    public function saveData($data)
+    {
+        $validate = \think\Loader::validate('Manga');
+        if(!$validate->check($data)){
+            return ['code'=>1001,'msg'=>lang('param_err').':'.$validate->getError() ];
+        }
+
+        $key = 'manga_detail_'.$data['manga_id'];
+        Cache::rm($key);
+        $key = 'manga_detail_'.$data['manga_en'];
+        Cache::rm($key);
+        $key = 'manga_detail_'.$data['manga_id'].'_'.$data['manga_en'];
+        Cache::rm($key);
+
+
+        $type_list = model('Type')->getCache('type_list');
+        $type_info = $type_list[$data['type_id']];
+        $data['type_id_1'] = $type_info['type_pid'];
+
+        if(empty($data['manga_en'])){
+            $data['manga_en'] = Pinyin::get($data['manga_name']);
+        }
+        if(empty($data['manga_letter'])){
+            $data['manga_letter'] = strtoupper(substr($data['manga_en'],0,1));
+        }
+        if(!empty($data['manga_pic_screenshot'])){
+            $data['manga_pic_screenshot'] = str_replace( array(chr(10),chr(13)), array('','#'),$data['manga_pic_screenshot']);
+        }
+        if(!empty($data['manga_content'])) {
+            if(is_array($data['manga_content'])){
+                $data['manga_content'] = join('$$$', $data['manga_content']);
+            }
+            if(is_array($data['manga_title'])){
+                $data['manga_title'] = join('$$$', $data['manga_title']);
+            }
+            if(is_array($data['manga_note'])){
+                $data['manga_note'] = join('$$$', $data['manga_note']);
+            }
+
+            $pattern_src = '/<img[\s\S]*?src\s*=\s*[\"|\"](.*?)[\"|\"][\s\S]*?>/';
+            @preg_match_all($pattern_src, $data['manga_content'], $match_src1);
+            if (!empty($match_src1)) {
+                foreach ($match_src1[1] as $v1) {
+                    $v2 = str_replace($GLOBALS['config']['upload']['protocol'] . ':', 'mac:', $v1);
+                    $data['manga_content'] = str_replace($v1, $v2, $data['manga_content']);
+                }
+                if (empty($data['manga_pic'])) {
+                    $data['manga_pic'] = (string)$match_src1[1][0];
+                }
+            }
+            unset($match_src1);
+        }
+
+        if(empty($data['manga_blurb'])){
+            $data['manga_blurb'] = mac_substring( str_replace('$$$','', strip_tags($data['manga_content'])),100);
+        }
+
+        if($data['uptime']==1){
+            $data['manga_time'] = time();
+        }
+        if($data['uptag']==1){
+            $data['manga_tag'] = mac_get_tag($data['manga_name'], $data['manga_content']);
+        }
+        unset($data['uptime']);
+        unset($data['uptag']);
+
+        // xss过滤
+        $filter_fields = [
+            'manga_name',
+            'manga_sub',
+            'manga_en',
+            'manga_color',
+            'manga_from',
+            'manga_author',
+            'manga_tag',
+            'manga_class',
+            'manga_pic',
+            'manga_pic_thumb',
+            'manga_pic_slide',
+            'manga_blurb',
+            'manga_remarks',
+            'manga_jumpurl',
+            'manga_tpl',
+            'manga_rel_manga',
+            'manga_rel_vod',
+            'manga_pwd',
+            'manga_pwd_url',
+        ];
+        foreach ($filter_fields as $filter_field) {
+            if (!isset($data[$filter_field])) {
+                continue;
+            }
+            $data[$filter_field] = mac_filter_xss($data[$filter_field]);
+        }
+
+        if(!empty($data['manga_id'])){
+            $where=[];
+            $where['manga_id'] = ['eq',$data['manga_id']];
+            $res = $this->allowField(true)->where($where)->update($data);
+        }
+        else{
+            $data['manga_time_add'] = time();
+            $data['manga_time'] = time();
+            $res = $this->allowField(true)->insert($data);
+        }
+        if(false === $res){
+            return ['code'=>1002,'msg'=>lang('save_err').':'.$this->getError() ];
+        }
+        return ['code'=>1,'msg'=>lang('save_ok')];
+    }
+
+    public function delData($where)
+    {
+        $list = $this->listData($where,'',1,9999);
+        if($list['code'] !==1){
+            return ['code'=>1001,'msg'=>lang('del_err').':'.$this->getError() ];
+        }
+        $path = './';
+        foreach($list['list'] as $k=>$v){
+            $pic = $path.$v['manga_pic'];
+            if(file_exists($pic) && (substr($pic,0,8) == "./upload") || count( explode("./",$pic) ) ==1){
+                unlink($pic);
+            }
+            $pic = $path.$v['manga_pic_thumb'];
+            if(file_exists($pic) && (substr($pic,0,8) == "./upload") || count( explode("./",$pic) ) ==1){
+                unlink($pic);
+            }
+            $pic = $path.$v['manga_pic_slide'];
+            if(file_exists($pic) && (substr($pic,0,8) == "./upload") || count( explode("./",$pic) ) ==1){
+                unlink($pic);
+            }
+            if($GLOBALS['config']['view']['manga_detail'] ==2 ){
+                $lnk = mac_url_manga_detail($v);
+                $lnk = reset_html_filename($lnk);
+                if(file_exists($lnk)){
+                    unlink($lnk);
+                }
+            }
+        }
+        $res = $this->where($where)->delete();
+        if($res===false){
+            return ['code'=>1001,'msg'=>lang('del_err').':'.$this->getError() ];
+        }
+
+        return ['code'=>1,'msg'=>lang('del_ok')];
+    }
+
+    public function fieldData($where,$update)
+    {
+        if(!is_array($update)){
+            return ['code'=>1001,'msg'=>lang('param_err')];
+        }
+        $res = $this->allowField(true)->where($where)->update($update);
+        if($res===false){
+            return ['code'=>1001,'msg'=>lang('set_err').':'.$this->getError() ];
+        }
+
+        $list = $this->field('manga_id,manga_name,manga_en')->where($where)->select();
+        foreach($list as $k=>$v){
+            $key = 'manga_detail_'.$v['manga_id'];
+            Cache::rm($key);
+            $key = 'manga_detail_'.$v['manga_en'];
+            Cache::rm($key);
+        }
+
+        return ['code'=>1,'msg'=>lang('set_ok')];
+    }
+
+    public function updateToday($flag='manga')
+    {
+        $today = strtotime(date('Y-m-d'));
+        $where = [];
+        $where['manga_time'] = ['gt',$today];
+        if($flag=='type'){
+            $ids = $this->where($where)->column('type_id');
+        }
+        else{
+            $ids = $this->where($where)->column('manga_id');
+        }
+        if(empty($ids)){
+            $ids = [];
+        }else{
+            $ids = array_unique($ids);
+        }
+        return ['code'=>1,'msg'=>lang('obtain_ok'),'data'=> join(',',$ids) ];
+    }
+
+}

+ 22 - 0
application/common/validate/Manga.php

@@ -0,0 +1,22 @@
+<?php
+namespace app\common\validate;
+use think\Validate;
+
+class Manga extends Validate
+{
+    protected $rule =   [
+        'manga_name'  => 'require',
+        'type_id'  => 'require',
+    ];
+
+    protected $message  =   [
+        'manga_name.require' => 'validate/require_name',
+        'type_id.require' => 'validate/require_type',
+    ];
+
+    protected $scene = [
+        'add'  =>  ['manga_name','type_id'],
+        'edit'  =>  ['manga_name','type_id'],
+    ];
+
+}

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
application/data/update/database.php


+ 81 - 0
application/install/sql/install.sql

@@ -175,6 +175,87 @@ CREATE TABLE `mac_art` (
   KEY `art_score_num` (`art_score_num`)
 ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ;
 
+-- ----------------------------
+-- Table structure for mac_manga
+-- ----------------------------
+DROP TABLE IF EXISTS `mac_manga`;
+CREATE TABLE `mac_manga` (
+  `manga_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '漫画ID',
+  `type_id` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '主分类ID',
+  `type_id_1` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '副分类ID',
+  `group_id` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '会员组ID',
+  `manga_name` varchar(255) NOT NULL DEFAULT '' COMMENT '漫画名称',
+  `manga_sub` varchar(255) NOT NULL DEFAULT '' COMMENT '副标题',
+  `manga_en` varchar(255) NOT NULL DEFAULT '' COMMENT '英文名',
+  `manga_status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态(0=锁定,1=正常)',
+  `manga_letter` char(1) NOT NULL DEFAULT '' COMMENT '首字母',
+  `manga_color` varchar(6) NOT NULL DEFAULT '' COMMENT '标题颜色',
+  `manga_from` varchar(30) NOT NULL DEFAULT '' COMMENT '来源',
+  `manga_author` varchar(255) NOT NULL DEFAULT '' COMMENT '作者',
+  `manga_tag` varchar(100) NOT NULL DEFAULT '' COMMENT '标签',
+  `manga_class` varchar(255) NOT NULL DEFAULT '' COMMENT '扩展分类',
+  `manga_pic` varchar(1024) NOT NULL DEFAULT '' COMMENT '封面图',
+  `manga_pic_thumb` varchar(1024) NOT NULL DEFAULT '' COMMENT '封面缩略图',
+  `manga_pic_slide` varchar(1024) NOT NULL DEFAULT '' COMMENT '封面幻灯图',
+  `manga_pic_screenshot` text DEFAULT NULL COMMENT '内容截图',
+  `manga_blurb` varchar(255) NOT NULL DEFAULT '' COMMENT '简介',
+  `manga_remarks` varchar(100) NOT NULL DEFAULT '' COMMENT '备注(例如:更新至xx话)',
+  `manga_jumpurl` varchar(150) NOT NULL DEFAULT '' COMMENT '跳转URL',
+  `manga_tpl` varchar(30) NOT NULL DEFAULT '' COMMENT '独立模板',
+  `manga_level` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '推荐级别',
+  `manga_lock` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '锁定状态(0=未锁,1=已锁)',
+  `manga_points` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '点播所需积分',
+  `manga_points_detail` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '每章所需积分',
+  `manga_up` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '顶数',
+  `manga_down` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '踩数',
+  `manga_hits` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '总点击数',
+  `manga_hits_day` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '日点击数',
+  `manga_hits_week` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '周点击数',
+  `manga_hits_month` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '月点击数',
+  `manga_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
+  `manga_time_add` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '添加时间',
+  `manga_time_hits` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '点击时间',
+  `manga_time_make` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '生成时间',
+  `manga_score` decimal(3,1) unsigned NOT NULL DEFAULT '0.0' COMMENT '平均评分',
+  `manga_score_all` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '总评分',
+  `manga_score_num` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '评分次数',
+  `manga_rel_manga` varchar(255) NOT NULL DEFAULT '' COMMENT '关联漫画',
+  `manga_rel_vod` varchar(255) NOT NULL DEFAULT '' COMMENT '关联视频',
+  `manga_pwd` varchar(10) NOT NULL DEFAULT '' COMMENT '访问密码',
+  `manga_pwd_url` varchar(255) NOT NULL DEFAULT '' COMMENT '密码跳转URL',
+  `manga_content` mediumtext DEFAULT NULL COMMENT '详细介绍',
+  `manga_serial` varchar(20) NOT NULL DEFAULT '0' COMMENT '连载状态(文字)',
+  `manga_total` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '总章节数',
+  `manga_chapter_from` varchar(255) NOT NULL DEFAULT '' COMMENT '章节来源',
+  `manga_chapter_url` mediumtext DEFAULT NULL COMMENT '章节URL列表',
+  `manga_last_update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后更新时间戳',
+  `manga_age_rating` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '年龄分级(0=全年龄,1=12+,2=18+)',
+  `manga_orientation` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '阅读方向(1=左到右,2=右到左,3=垂直)',
+  `manga_is_vip` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否VIP(0=否,1=是)',
+  `manga_copyright_info` varchar(255) NOT NULL DEFAULT '' COMMENT '版权信息',
+  PRIMARY KEY (`manga_id`),
+  KEY `type_id` (`type_id`) USING BTREE,
+  KEY `type_id_1` (`type_id_1`) USING BTREE,
+  KEY `manga_level` (`manga_level`) USING BTREE,
+  KEY `manga_hits` (`manga_hits`) USING BTREE,
+  KEY `manga_time` (`manga_time`) USING BTREE,
+  KEY `manga_letter` (`manga_letter`) USING BTREE,
+  KEY `manga_down` (`manga_down`) USING BTREE,
+  KEY `manga_up` (`manga_up`) USING BTREE,
+  KEY `manga_tag` (`manga_tag`) USING BTREE,
+  KEY `manga_name` (`manga_name`) USING BTREE,
+  KEY `manga_en` (`manga_en`) USING BTREE,
+  KEY `manga_hits_day` (`manga_hits_day`) USING BTREE,
+  KEY `manga_hits_week` (`manga_hits_week`) USING BTREE,
+  KEY `manga_hits_month` (`manga_hits_month`) USING BTREE,
+  KEY `manga_time_add` (`manga_time_add`) USING BTREE,
+  KEY `manga_time_make` (`manga_time_make`) USING BTREE,
+  KEY `manga_lock` (`manga_lock`),
+  KEY `manga_score` (`manga_score`),
+  KEY `manga_score_all` (`manga_score_all`),
+  KEY `manga_score_num` (`manga_score_num`)
+) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='漫画表';
+
 -- ----------------------------
 -- Table structure for mac_card
 -- ----------------------------

+ 1 - 0
application/lang/de-de.php

@@ -1909,4 +1909,5 @@ Nota: Se tanto a lista negra quanto a lista branca forem preenchidas, a polític
   'validate/require_tpl' => 'Modelo é obrigatório',
   'validate/require_ip' => 'IP é obrigatório',
   'validate/require_time' => 'Tempo é obrigatório',
+  'manga' => 'Comics',
 );

+ 1 - 0
application/lang/en-us.php

@@ -1917,4 +1917,5 @@ Note: If both black and white lists are filled, both policies will take effect.'
   'validate/require_tpl' => 'Template is required',
   'validate/require_ip' => 'IP address is required',
   'validate/require_time' => 'Time is required',
+  'manga' => 'Manga',
 );

+ 1 - 0
application/lang/es-es.php

@@ -1917,4 +1917,5 @@ Nota: Si se especifican listas negras y blancas, ambas se aplicarán simultánea
   'validate/require_tpl' => 'Se requiere la plantilla',
   'validate/require_ip' => 'Se requiere la dirección IP',
   'validate/require_time' => 'Se requiere la hora',
+  'manga' => 'historietas',
 );

+ 1 - 0
application/lang/fr-fr.php

@@ -1917,4 +1917,5 @@ Note: Si les listes noires et blanches sont remplies, les stratégies s\'appliqu
   'validate/require_tpl' => 'Modèle requis',
   'validate/require_ip' => 'Adresse IP requise',
   'validate/require_time' => 'Temps requis',
+  'manga' => 'bandes dessinées',
 );

+ 1 - 0
application/lang/ja-jp.php

@@ -1921,4 +1921,5 @@ https://www.baidu.com/123.jpg
   'validate/require_tpl' => 'テンプレートは必須',
   'validate/require_ip' => 'ipは必須',
   'validate/require_time' => '時間は必須',
+  'manga' => '漫画',
 );

+ 1 - 0
application/lang/ko-kr.php

@@ -1920,4 +1920,5 @@ https://www.baidu.com/123.jpg
   'validate/require_tpl' => '템플릿은 필수입니다.',
   'validate/require_ip' => 'IP는 필수입니다.',
   'validate/require_time' => '시간은 필수입니다.',
+  'manga' => '만화',
 );

+ 1 - 0
application/lang/pt-pt.php

@@ -1921,4 +1921,5 @@ https://www.baidu.com/123.jpg
   'validate/require_tpl' => 'O modelo é obrigatório',
   'validate/require_ip' => 'O IP é obrigatório',
   'validate/require_time' => 'O tempo é obrigatório',
+  'manga' => 'quadrinhos',
 );

+ 1 - 0
application/lang/zh-cn.php

@@ -2111,4 +2111,5 @@ https://www.baidu.com/123.jpg
     'validate/require_tpl'=>'模板必须',
     'validate/require_ip'=>'ip必须',
     'validate/require_time'=>'时间必须',
+    'manga' => '漫画',
 ];

+ 1 - 0
application/lang/zh-tw.php

@@ -1922,4 +1922,5 @@ https://www.baidu.com/123.jpg
   'validate/require_tpl' => '模板必須',
   'validate/require_ip' => 'ip必須',
   'validate/require_time' => '時間必須',
+  'manga' => '漫畫',
 );

+ 77 - 7
application/route.php

@@ -378,9 +378,59 @@ return array (
     array (
     ),
   ),
-  'label-<file>' => 
+    'manga-<page?>' =>
+    array (
+        0 => 'manga/index',
+        1 =>
+            array (
+            ),
+        2 =>
+            array (
+            ),
+    ),
+    'manga$' =>
+        array (
+            0 => 'manga/index',
+            1 =>
+                array (
+                ),
+            2 =>
+                array (
+                ),
+        ),
+  'mangatype/<id>-<page?>' => 
   array (
-    0 => 'label/index',
+    0 => 'manga/type',
+    1 => 
+    array (
+    ),
+    2 => 
+    array (
+    ),
+  ),
+  'mangatype/<id>' => 
+  array (
+    0 => 'manga/type',
+    1 => 
+    array (
+    ),
+    2 => 
+    array (
+    ),
+  ),
+  'mangadetail-<id>' => 
+  array (
+    0 => 'manga/detail',
+    1 => 
+    array (
+    ),
+    2 => 
+    array (
+    ),
+  ),
+  'mangaplay/<id>-<sid>-<nid>' => 
+  array (
+    0 => 'manga/play',
     1 => 
     array (
     ),
@@ -388,9 +438,9 @@ return array (
     array (
     ),
   ),
-  'plotdetail/<id>-<page?>' => 
+  'mangadown/<id>-<sid>-<nid>' => 
   array (
-    0 => 'plot/plot',
+    0 => 'manga/down',
     1 => 
     array (
     ),
@@ -398,9 +448,29 @@ return array (
     array (
     ),
   ),
-  'plotdetail/<id>' => 
+  'mangashow/<id>-<area?>-<by?>-<class?>-<lang?>-<letter?>-<level?>-<order?>-<page?>-<state?>-<tag?>-<year?>' => 
   array (
-    0 => 'plot/detail',
+    0 => 'manga/show',
+    1 => 
+    array (
+    ),
+    2 => 
+    array (
+    ),
+  ),
+  'mangasearch/<wd?>-<actor?>-<area?>-<by?>-<class?>-<director?>-<lang?>-<letter?>-<level?>-<order?>-<page?>-<state?>-<tag?>-<year?>' => 
+  array (
+    0 => 'manga/search',
+    1 => 
+    array (
+    ),
+    2 => 
+    array (
+    ),
+  ),
+  'label-<file>' => 
+  array (
+    0 => 'label/index',
     1 => 
     array (
     ),
@@ -408,4 +478,4 @@ return array (
     array (
     ),
   ),
-);
+);

Неке датотеке нису приказане због велике количине промена