Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[已解决] 【求助】更换模板后无法打开站点,提示QQ互联相关文件出错

[复制链接]
阆中浩子 发表于 2012-1-9 21:55:30 | 显示全部楼层 |阅读模式
出错域名:http://www.tyxzlm.org/
提示信息:
Fatal error: Call to undefined function connect_check_token_js() in E:\wwwroot\lpxlp\wwwroot\source\plugin\qqconnect\connect.class.php on line 129


otherbank 发表于 2012-1-10 09:33:53 | 显示全部楼层
跟换模版没关系,你的问题打一下1221的补丁就能解决
回复

使用道具 举报

 楼主| 阆中浩子 发表于 2012-1-9 21:56:23 | 显示全部楼层

该文件我未修改过,源码如下:

  1. <?php

  2. if(!defined('IN_DISCUZ')) {
  3. exit('Access Denied');
  4. }

  5. class plugin_qqconnect_base {

  6. function init() {
  7. global $_G;
  8. include_once template('qqconnect:module');
  9. if(!$_G['setting']['connect']['allow'] || $_G['setting']['bbclosed']) {
  10. return;
  11. }
  12. $this->allow = true;
  13. }

  14. function common_base() {
  15. global $_G;

  16. if(!isset($_G['connect'])) {
  17. $_G['connect']['url'] = 'http://connect.discuz.qq.com';
  18. $_G['connect']['api_url'] = 'http://api.discuz.qq.com';
  19. $_G['connect']['avatar_url'] = 'http://avatar.connect.discuz.qq.com';

  20. $_G['connect']['qzone_public_share_url'] = 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey';
  21. $_G['connect']['referer'] = !$_G['inajax'] && CURSCRIPT != 'member' ? $_G['basefilename'].($_SERVER['QUERY_STRING'] ? '?'.$_SERVER['QUERY_STRING'] : '') : dreferer();
  22. $_G['connect']['weibo_public_appkey'] = 'ce7fb946290e4109bdc9175108b6db3a';

  23. $_G['connect']['login_url'] = $_G['siteurl'].'connect.php?mod=login&op=init&referer='.urlencode($_G['connect']['referer'] ? $_G['connect']['referer'] : 'index.php');
  24. $_G['connect']['callback_url'] = $_G['siteurl'].'connect.php?mod=login&op=callback';
  25. $_G['connect']['discuz_new_feed_url'] = $_G['siteurl'].'connect.php?mod=feed&op=new';
  26. $_G['connect']['discuz_remove_feed_url'] = $_G['siteurl'].'connect.php?mod=feed&op=remove';
  27. $_G['connect']['discuz_new_share_url'] = $_G['siteurl'].'connect.php?mod=share&op=new';
  28. $_G['connect']['discuz_new_share_url'] = $_G['siteurl'].'home.php?mod=spacecp&ac=plugin&id=qqconnect:spacecp&pluginop=new';
  29. $_G['connect']['discuz_change_qq_url'] = $_G['siteurl'].'connect.php?mod=login&op=change';
  30. $_G['connect']['auth_fields'] = array(
  31. 'is_user_info' => 1,
  32. 'is_feed' => 2,
  33. );

  34. if($_G['uid']) {
  35. dsetcookie('connect_is_bind', $_G['member']['conisbind'], 31536000);
  36. if(!$_G['member']['conisbind'] && $_G['cookie']['connect_login']) {
  37. $_G['cookie']['connect_login'] = 0;
  38. dsetcookie('connect_login');
  39. }
  40. }

  41. if(!$_G['uid'] && !defined('IN_MOBILE')) {
  42. $_G['setting']['pluginhooks']['global_login_text'] = tpl_login_bar();
  43. }
  44. }
  45. }

  46. }

  47. class plugin_qqconnect extends plugin_qqconnect_base {

  48. var $allow = false;

  49. function plugin_qqconnect() {
  50. $this->init();
  51. }

  52. function common() {
  53. $this->common_base();
  54. }

  55. function discuzcode($param) {
  56. global $_G;
  57. if($param['caller'] == 'discuzcode') {
  58. $_G['discuzcodemessage'] = preg_replace('/\[wb=(.+?)\](.+?)\[\/wb\]/', '<a href="http://t.qq.com/\\1" target="_blank"><img src="\\2" /></a>', $_G['discuzcodemessage']);
  59. }
  60. }

  61. function global_login_extra() {
  62. if(!$this->allow) {
  63. return;
  64. }
  65. return tpl_global_login_extra();
  66. }

  67. function global_usernav_extra1() {
  68. global $_G;
  69. if(!$this->allow || !$_G['uid']) {
  70. return;
  71. }
  72. if(!$_G['member']['conisbind']) {
  73. return tpl_global_usernav_extra1();
  74. }
  75. return;
  76. }

  77. function global_footer() {
  78. global $_G;

  79. if(!$this->allow || !empty($_G['inshowmessage'])) {
  80. return;
  81. }

  82. $footerjs = '';

  83. require_once libfile('function/connect');

  84. if(defined('CURSCRIPT') && CURSCRIPT == 'forum' && defined('CURMODULE') && CURMODULE == 'viewthread'
  85. && $_G['setting']['connect']['allow'] && $_G['setting']['connect']['qshare_allow']) {

  86. $appkey = $_G['setting']['connect']['qshare_appkey'] ? $_G['setting']['connect']['qshare_appkey'] : '';
  87. $footerjs .= connect_load_qshare_js($appkey);
  88. }

  89. if(!empty($_G['cookie']['connect_js_name']) && $_G['cookie']['connect_js_name'] == 'user_bind') {
  90. $params = array('openid' => $_G['cookie']['connect_uin']);
  91. $footerjs .= connect_user_bind_js($params);
  92. }elseif($_G['cookie']['connect_js_name'] == 'feed_resend') {
  93. $footerjs .= connect_feed_resend_js();
  94. }

  95. connect_merge_member();
  96. if(!$_G['cookie']['connect_check_token'] && $_G['member']['conuinsecret']) {
  97. $footerjs .= connect_check_token_js();
  98. }

  99. if($_G['member']['conuinsecret'] && ($_G['cookie']['connect_last_report_time'] != date('Y-m-d') || $_G['cookie']['connect_report_times'] <= 4)) {
  100. $footerjs .= connect_cookie_login_js();
  101. }

  102. return $footerjs;
  103. }

  104. function _allowconnectfeed() {
  105. if(!$this->allow) {
  106. return;
  107. }
  108. global $_G;
  109. return $_G['uid'] && $_G['setting']['connect']['allow'] && $_G['setting']['connect']['feed']['allow'] && ($_G['forum']['status'] == 3 && $_G['setting']['connect']['feed']['group'] || $_G['forum']['status'] != 3 && (!$_G['setting']['connect']['feed']['fids'] || in_array($_G['fid'], $_G['setting']['connect']['feed']['fids'])));
  110. }

  111. function _allowconnectt() {
  112. if(!$this->allow) {
  113. return;
  114. }
  115. global $_G;
  116. return $_G['uid'] && $_G['setting']['connect']['allow'] && $_G['setting']['connect']['t']['allow'] && ($_G['forum']['status'] == 3 && $_G['setting']['connect']['t']['group'] || $_G['forum']['status'] != 3 && (!$_G['setting']['connect']['t']['fids'] || in_array($_G['fid'], $_G['setting']['connect']['t']['fids'])));
  117. }

  118. function _forumdisplay_fastpost_sync_method_output() {
  119. if(!$this->allow) {
  120. return;
  121. }
  122. global $_G;
  123. $allowconnectfeed = $this->_allowconnectfeed();
  124. $allowconnectt = $this->_allowconnectt();
  125. if($GLOBALS['fastpost'] && ($allowconnectfeed || $allowconnectt)) {
  126. require_once libfile('function/connect');
  127. connect_merge_member();
  128. if ($_G['member']['is_feed']) {
  129. return tpl_sync_method($allowconnectfeed, $allowconnectt);
  130. }
  131. }
  132. }

  133. function _post_sync_method_output() {
  134. if(!$this->allow) {
  135. return;
  136. }
  137. global $_G;
  138. $allowconnectfeed = $this->_allowconnectfeed();
  139. $allowconnectt = $this->_allowconnectt();
  140. if(!$_G['inajax'] && ($allowconnectfeed || $allowconnectt) && ($_G['gp_action'] == 'newthread' || $_G['gp_action'] == 'edit' && $GLOBALS['isfirstpost'] && $GLOBALS['thread']['displayorder'] == -4)) {
  141. require_once libfile('function/connect');
  142. connect_merge_member();
  143. if ($_G['member']['is_feed']) {
  144. return tpl_sync_method($allowconnectfeed, $allowconnectt);
  145. }
  146. }
  147. }

  148. function _post_infloat_btn_extra_output() {
  149. if(!$this->allow) {
  150. return;
  151. }
  152. global $_G;
  153. $allowconnectfeed = $this->_allowconnectfeed();
  154. $allowconnectt = $this->_allowconnectt();
  155. if(($allowconnectfeed || $allowconnectt) && $_G['gp_action'] == 'newthread') {
  156. require_once libfile('function/connect');
  157. connect_merge_member();
  158. if ($_G['member']['is_feed']) {
  159. return tpl_infloat_sync_method($allowconnectfeed, $allowconnectt);
  160. }
  161. }
  162. }

  163. function _post_feedlog_message($param) {
  164. if(!$this->allow) {
  165. return;
  166. }
  167. global $_G;
  168. if(empty($_G['gp_connect_publish_feed']) || $_G['gp_action'] == 'reply' || substr($param['param'][0], -8) != '_succeed' || $_G['gp_action'] == 'edit' && !$GLOBALS['isfirstpost'] || !$this->_allowconnectfeed()) {
  169. return;
  170. }

  171. $tid = $param['param'][2]['tid'];
  172. DB::query("REPLACE INTO ".DB::table('connect_feedlog')." (tid, uid, lastpublished, dateline, status) VALUES ('$tid', '$_G[uid]', '0', '$_G[timestamp]', '1')");
  173. }

  174. function _post_tlog_message($param) {
  175. if(!$this->allow) {
  176. return;
  177. }
  178. global $_G;
  179. if(empty($_G['gp_connect_publish_t']) || $_G['gp_action'] == 'reply' || substr($param['param'][0], -8) != '_succeed' || $_G['gp_action'] == 'edit' && !$GLOBALS['isfirstpost'] || !$this->_allowconnectt()) {
  180. return;
  181. }

  182. $tid = $param['param'][2]['tid'];
  183. DB::query("REPLACE INTO ".DB::table('connect_tlog')." (tid, uid, lastpublished, dateline, status) VALUES ('$tid', '$_G[uid]', '0', '$_G[timestamp]', '1')");
  184. }

  185. function _viewthread_share_method_output() {
  186. global $_G;

  187. require_once libfile('function/connect');

  188. if($GLOBALS['page'] == 1 && $_G['forum_firstpid'] && $GLOBALS['postlist'][$_G['forum_firstpid']]['invisible'] == 0) {
  189. $_G['connect']['feed_js'] = $_G['connect']['t_js'] = false;
  190. if(!getstatus($_G['forum_thread']['status'], 7) && $_G['forum_thread']['displayorder'] >= 0) {
  191. $feedlogstatus = false;
  192. $_G['connect']['feed_log'] = DB::fetch_first("SELECT * FROM ".DB::table('connect_feedlog')." WHERE tid='$_G[tid]'");
  193. if($_G['connect']['feed_log']) {
  194. $_G['connect']['feed_interval'] = 300;
  195. $_G['connect']['feed_publish_max'] = 1000;
  196. if($_G['connect']['feed_log'] && $_G['member']['conisbind'] && $_G['uid'] == $_G['forum_thread']['authorid']) {
  197. if($_G['connect']['feed_log']['status'] == 1 || ($_G['connect']['feed_log']['status'] == 2
  198. && TIMESTAMP - $_G['connect']['feed_log']['lastpublished'] > $_G['connect']['feed_interval']
  199. && $_G['connect']['feed_log']['publishtimes'] < $_G['connect']['feed_publish_max'])) {
  200. DB::query("UPDATE ".DB::table('connect_feedlog')." SET status='2', lastpublished='$_G[timestamp]', publishtimes=publishtimes+1 WHERE tid='$_G[tid]' AND status!=4");
  201. $_G['connect']['feed_js'] = $feedlogstatus = true;
  202. }
  203. }
  204. } else {
  205. $feedlogstatus = false;
  206. }
  207. }

  208. if(!getstatus($_G['forum_thread']['status'], 8) && $_G['forum_thread']['displayorder'] >= 0) {
  209. $_G['connect']['t_log'] = DB::fetch_first("SELECT * FROM ".DB::table('connect_tlog')." WHERE tid='$_G[tid]'");
  210. if($_G['connect']['t_log']) {
  211. $_G['connect']['t_interval'] = 300;
  212. $_G['connect']['t_publish_max'] = 1000;
  213. if($_G['connect']['t_log'] && $_G['member']['conisbind'] && $_G['uid'] == $_G['forum_thread']['authorid']) {
  214. if($_G['connect']['t_log']['status'] == 1 || ($_G['connect']['t_log']['status'] == 2
  215. && TIMESTAMP - $_G['connect']['t_log']['lastpublished'] > $_G['connect']['t_interval']
  216. && $_G['connect']['t_log']['publishtimes'] < $_G['connect']['t_publish_max'])) {
  217. DB::query("UPDATE ".DB::table('connect_tlog')." SET status='2', lastpublished='$_G[timestamp]', publishtimes=publishtimes+1 WHERE tid='$_G[tid]' AND status!=4");
  218. $_G['connect']['t_js'] = $tlogstatus = true;
  219. }
  220. }
  221. } else {
  222. $tlogstatus = false;
  223. }
  224. }

  225. if($feedlogstatus || $tlogstatus){
  226. $newstatus = $_G['forum_thread']['status'];
  227. $newstatus = $feedlogstatus ? setstatus(7, 1, $newstatus) : $newstatus;
  228. $newstatus = $tlogstatus ? setstatus(8, 1, $newstatus) : $newstatus;
  229. DB::query("UPDATE ".DB::table('forum_thread')." SET status='$newstatus' WHERE tid='$_G[tid]'");
  230. }

  231. $_G['connect']['thread_url'] = $_G['siteurl'].$GLOBALS['canonical'];

  232. $_G['connect']['qzone_share_url'] = $_G['siteurl'] . 'home.php?mod=spacecp&ac=plugin&id=qqconnect:spacecp&pluginop=share&sh_type=1&thread_id=' . $_G['tid'];
  233. $_G['connect']['weibo_share_url'] = $_G['siteurl'] . 'home.php?mod=spacecp&ac=plugin&id=qqconnect:spacecp&pluginop=share&sh_type=2&thread_id=' . $_G['tid'];
  234. $_G['connect']['pengyou_share_url'] = $_G['siteurl'] . 'home.php?mod=spacecp&ac=plugin&id=qqconnect:spacecp&pluginop=share&sh_type=3&thread_id=' . $_G['tid'];

  235. $_G['connect']['qzone_share_api'] = $_G['connect']['qzone_public_share_url'].'?url='.urlencode($_G['connect']['thread_url']);
  236. $_G['connect']['pengyou_share_api'] = $_G['connect']['qzone_public_share_url'].'?to=pengyou&url='.urlencode($_G['connect']['thread_url']);
  237. $params = array('oauth_consumer_key' => $_G['setting']['connectappid'], 'title' => $GLOBALS['postlist'][$_G['forum_firstpid']]['subject'], 'url' => $_G['connect']['thread_url']);
  238. $params['sig'] = connect_get_sig($params, connect_get_sig_key());
  239. $_G['connect']['t_share_api'] = $_G['connect']['url'].'/mblog/redirect?'.cloud_http_build_query($params, '', '&');

  240. $_G['connect']['first_post'] = daddslashes($GLOBALS['postlist'][$_G['forum_firstpid']]);
  241. $_G['gp_connect_autoshare'] = !empty($_G['gp_connect_autoshare']) ? 1 : 0;

  242. $_G['connect']['weibo_appkey'] = $_G['connect']['weibo_public_appkey'];
  243. if($this->allow && $_G['setting']['connect']['mblog_app_key']) {
  244. $_G['connect']['weibo_appkey'] = $_G['setting']['connect']['mblog_app_key'];
  245. }

  246. $extrajs = '';
  247. if($_G['connect']['feed_js'] || $_G['connect']['t_js']) {
  248. $params = array();
  249. $params['thread_id'] = $_G['tid'];
  250. $params['ts'] = TIMESTAMP;
  251. $params['type'] = bindec(($_G['connect']['t_js'] ? '1' : '0').($_G['connect']['feed_js'] ? '1' : '0'));
  252. $params['sig'] = connect_get_sig($params, connect_get_sig_key());

  253. $jsurl = $_G['connect']['discuz_new_feed_url'].'&'.cloud_http_build_query($params, '', '&');
  254. $extrajs = connect_output_javascript($jsurl);
  255. }

  256. if (!$_G['member']['conisbind'] && $_G['group']['allowgetimage'] && $_G['thread']['price'] == 0) {
  257. if ($_G['connect']['first_post']['message']) {
  258. require_once libfile('function/connect');
  259. $post['html_content'] = connect_parse_bbcode($_G['connect']['first_post']['message'], $_G['connect']['first_post']['fid'], $_G['connect']['first_post']['pid'], $_G['connect']['first_post']['htmlon'], $attach_images);
  260. if($attach_images && is_array($attach_images)) {
  261. $attach_images = array_slice($attach_images, 0, 3);
  262. $share_images = array();
  263. foreach ($attach_images as $attach_image) {
  264. $share_images[] = urlencode($attach_image['big']);
  265. }
  266. $_G['connect']['share_images'] = implode('|', $share_images);
  267. unset($share_images);
  268. }
  269. }
  270. }
  271. connect_merge_member();
  272. return tpl_viewthread_share_method().$extrajs;
  273. }
  274. }

  275. function _viewthread_bottom_output() {
  276. if(!$this->allow) {
  277. return;
  278. }
  279. global $_G;
  280. if($GLOBALS['page'] == 1 && $GLOBALS['postlist'][$_G['forum_firstpid']]['invisible'] == 0) {
  281. return tpl_viewthread_bottom();
  282. }
  283. }

  284. function _viewthread_nonexistence_message($param) {
  285. if(!$this->allow) {
  286. return;
  287. }
  288. global $_G;
  289. if($param['param'][0] == 'thread_nonexistence') {
  290. require_once libfile('function/connect');
  291. $extrajs = '';
  292. if($jsurl = connect_feed_remove($_G['gp_tid'])) {
  293. $extrajs = connect_output_javascript($jsurl);
  294. }
  295. showmessage('thread_nonexistence', '', array(), array('extrajs' => $extrajs));
  296. }
  297. }

  298. }

  299. class plugin_qqconnect_member extends plugin_qqconnect {

  300. function logging_method() {
  301. if(!$this->allow) {
  302. return;
  303. }
  304. return tpl_login_bar();
  305. }

  306. function register_logging_method() {
  307. if(!$this->allow) {
  308. return;
  309. }
  310. return tpl_login_bar();
  311. }

  312. function connect_input_output() {
  313. if(!$this->allow) {
  314. return;
  315. }
  316. global $_G;
  317. $_G['setting']['pluginhooks']['register_input'] = tpl_register_input();
  318. }

  319. function connect_bottom_output() {
  320. if(!$this->allow) {
  321. return;
  322. }
  323. global $_G;
  324. $_G['setting']['pluginhooks']['register_bottom'] = tpl_register_bottom();
  325. }

  326. }

  327. class plugin_qqconnect_forum extends plugin_qqconnect {

  328. function index_status_extra() {
  329. global $_G;
  330. if(!$this->allow) {
  331. return;
  332. }
  333. if($_G['setting']['connect']['like_allow'] && $_G['setting']['connect']['like_url'] || $_G['setting']['connect']['turl_allow'] && $_G['setting']['connect']['turl_code']) {
  334. return tpl_index_status_extra();
  335. }
  336. }

  337. function forumdisplay_fastpost_sync_method_output() {
  338. return $this->_forumdisplay_fastpost_sync_method_output();
  339. }

  340. function post_sync_method_output() {
  341. return $this->_post_sync_method_output();
  342. }

  343. function post_infloat_btn_extra_output() {
  344. return $this->_post_infloat_btn_extra_output();
  345. }

  346. function post_feedlog_message($param) {
  347. return $this->_post_feedlog_message($param);
  348. }

  349. function post_tlog_message($param) {
  350. return $this->_post_tlog_message($param);
  351. }

  352. function viewthread_share_method_output() {
  353. return $this->_viewthread_share_method_output();
  354. }

  355. function viewthread_bottom_output() {
  356. return $this->_viewthread_bottom_output();
  357. }

  358. function viewthread_nonexistence_message($param) {
  359. return $this->_viewthread_nonexistence_message($param);
  360. }

  361. }

  362. class plugin_qqconnect_group extends plugin_qqconnect {

  363. function forumdisplay_fastpost_sync_method_output() {
  364. return $this->_forumdisplay_fastpost_sync_method_output();
  365. }

  366. function post_sync_method_output() {
  367. return $this->_post_sync_method_output();
  368. }

  369. function post_infloat_btn_extra_output() {
  370. return $this->_post_infloat_btn_extra_output();
  371. }

  372. function post_feedlog_message($param) {
  373. return $this->_post_feedlog_message($param);
  374. }

  375. function post_tlog_message($param) {
  376. return $this->_post_tlog_message($param);
  377. }

  378. function viewthread_share_method_output() {
  379. return $this->_viewthread_share_method_output();
  380. }

  381. function viewthread_bottom_output() {
  382. return $this->_viewthread_bottom_output();
  383. }

  384. function viewthread_nonexistence_message($param) {
  385. return $this->_viewthread_nonexistence_message($param);
  386. }

  387. }

  388. class plugin_qqconnect_home extends plugin_qqconnect {

  389. function spacecp_profile_bottom() {
  390. global $_G;

  391. if(submitcheck('profilesubmit')) {
  392. $_G['group']['maxsigsize'] = $_G['group']['maxsigsize'] < 200 ? 200 : $_G['group']['maxsigsize'];
  393. return;
  394. }
  395. if($_G['uid'] && $_G['setting']['connect']['allow']) {

  396. require_once libfile('function/connect');
  397. connect_merge_member();

  398. if($_G['member']['conuin'] && $_G['member']['conuinsecret']) {

  399. $arr = array();
  400. $arr['oauth_consumer_key'] = $_G['setting']['connectappid'];
  401. $arr['oauth_nonce'] = mt_rand();
  402. $arr['oauth_timestamp'] = TIMESTAMP;
  403. $arr['oauth_signature_method'] = 'HMAC_SHA1';
  404. $arr['oauth_token'] = $_G['member']['conuin'];
  405. ksort($arr);
  406. $arr['oauth_signature'] = connect_get_oauth_signature('http://cp.discuz.qq.com/connect/getSignature', $arr, 'GET', $_G['member']['conuinsecret']);
  407. $result = connect_output_php('http://cp.discuz.qq.com/connect/getSignature?' . http_build_query($arr, '', '&'));
  408. if($result['status'] == 0) {
  409. $js = 'a.onclick = function () { seditor_insertunit(\'sightml\', \'[wb='.$result['result']['username'].']'.$result['result']['signature_url'].'[/wb]\'); };';
  410. } else {
  411. $js = 'a.onclick = function () { showDialog(\''.lang('plugin/qqconnect', 'connect_wbsign_no_account').'\'); };';
  412. }
  413. } else {
  414. $js = 'a.onclick = function () { showDialog(\''.lang('plugin/qqconnect', 'connect_wbsign_no_bind').'\'); };';
  415. }
  416. return '<script type="text/javascript">if($(\'sightmlsml\')) {'.
  417. 'var a = document.createElement(\'a\');a.href = \'javascript:;\';a.style.background = \'url(\' + STATICURL + \'image/common/weibo.png) no-repeat 0 2px\';'.
  418. 'a.onmouseover = function () { showTip(this); };a.setAttribute(\'tip\', \''.lang('plugin/qqconnect', 'connect_wbsign_tip').'\');'.
  419. $js.
  420. '$(\'sightmlsml\').parentNode.appendChild(a);'.
  421. '}</script>';

  422. }

  423. }
  424. }

  425. ?>
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-25 15:38 , Processed in 0.028294 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表