中秋节快乐
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\index;
|
||||
|
||||
use think\App;
|
||||
use EasyWeChat\Factory;
|
||||
use app\model\Conf as ConfModel;
|
||||
use app\model\User as UserModel;
|
||||
|
||||
/**
|
||||
* 控制器基础类
|
||||
*/
|
||||
abstract class QfShop
|
||||
{
|
||||
/**
|
||||
* 应用实例
|
||||
* @var \think\App
|
||||
*/
|
||||
protected $app;
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
* @access public
|
||||
* @param App $app 应用对象
|
||||
*/
|
||||
public function __construct(App $app)
|
||||
{
|
||||
$this->app = $app;
|
||||
$this->request = $this->app->request;
|
||||
// 控制器初始化
|
||||
$this->initialize();
|
||||
}
|
||||
|
||||
// 初始化
|
||||
protected function initialize()
|
||||
{
|
||||
$this->confModel = new ConfModel();
|
||||
|
||||
$configs = $this->confModel->select()->toArray();
|
||||
$c = array_column($configs, 'conf_value', 'conf_key');
|
||||
config($c, 'qfshop');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
// <?php
|
||||
// namespace app\index\controller;
|
||||
|
||||
// use app\index\QfShop;
|
||||
// use think\facade\View;
|
||||
|
||||
// class Error extends QfShop
|
||||
// {
|
||||
// public function __call($method, $args)
|
||||
// {
|
||||
// $error = $this->authorize();
|
||||
// if ($error) {
|
||||
// return $error;
|
||||
// }
|
||||
// View::assign('wechat', $this->wechat);
|
||||
// if (file_exists(app_path() . "/view/" . strtolower($this->request->controller()) . "/" . $method . ".html")) {
|
||||
// if (key_exists('callback', $args)) {
|
||||
// View::assign('callback', $args['callback']);
|
||||
// } else {
|
||||
// View::assign('callback', '/admin');
|
||||
// }
|
||||
// return View::fetch();
|
||||
// } else {
|
||||
// return 404;
|
||||
// }
|
||||
// }
|
||||
// public static function show($msg = null)
|
||||
// {
|
||||
// View::assign('msg', $msg);
|
||||
// return View::fetch("/error");
|
||||
// }
|
||||
// }
|
||||
@@ -0,0 +1,164 @@
|
||||
<?php
|
||||
|
||||
namespace app\index\controller;
|
||||
|
||||
use think\App;
|
||||
use think\facade\View;
|
||||
use think\facade\Request;
|
||||
use think\facade\Cache;
|
||||
use app\index\QfShop;
|
||||
use app\model\Source as SourceModel;
|
||||
use app\model\SourceCategory as SourceCategoryModel;
|
||||
|
||||
|
||||
class Index extends QfShop
|
||||
{
|
||||
|
||||
public function __construct(App $app)
|
||||
{
|
||||
parent::__construct($app);
|
||||
$this->SourceModel = new SourceModel();
|
||||
$this->SourceCategoryModel = new SourceCategoryModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* @description: 首页
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$rankList = $this->SourceCategoryModel->field('name,image')->where([['status','=',0],['is_sys','=',1]])->order('sort desc')->select();
|
||||
$newList = [];
|
||||
|
||||
if(config("qfshop.ranking_type") == 0 && config("qfshop.home_new") == 0){
|
||||
//最新榜
|
||||
$map[] = ['status', '=', 1];
|
||||
$map[] = ['is_time', '=', 0];
|
||||
$map[] = ['is_delete', '=', 0];
|
||||
|
||||
$newList = $this->SourceModel->order(['create_time' => 'desc'])
|
||||
->field('title,create_time as time')
|
||||
->where($map)
|
||||
->limit(Config('qfshop.ranking_num') ?? 1)
|
||||
->select()->each(function($item,$key){
|
||||
$item['times'] = substr($item['time'], 5, 5);
|
||||
unset($item['time']);
|
||||
return $item;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
View::assign('newList', $newList);
|
||||
View::assign('config', config("qfshop"));
|
||||
View::assign('rankList', $rankList);
|
||||
View::assign('fixed', 1);
|
||||
View::assign('category_id', 0);
|
||||
return View::fetch('/news/index');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description: 搜索列表
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
public function list($name,$page=1,$cate='')
|
||||
{
|
||||
$data['page_no'] = $page;
|
||||
$data['page_size'] = 40;
|
||||
$data['title'] = $name;
|
||||
$data['category_id'] = $cate;
|
||||
$list = $this->SourceModel->getList($data);
|
||||
|
||||
|
||||
$rankList = $this->SourceCategoryModel->field('name,image')->where([['status','=',0],['is_sys','=',1]])->order('sort desc')->select();
|
||||
|
||||
$category = $this->SourceCategoryModel->field('name,source_category_id as id')->where([['status','=',0]])->order('sort desc')->select();
|
||||
|
||||
|
||||
View::assign('rankList', $rankList);
|
||||
View::assign('category', $category);
|
||||
View::assign('list', $list);
|
||||
View::assign('config', config("qfshop"));
|
||||
View::assign('keyword', $data['title']);
|
||||
View::assign('page_size', $data['page_size']);
|
||||
View::assign('page_no', $data['page_no']);
|
||||
View::assign('category_id', $data['category_id']);
|
||||
return View::fetch('/news/list');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description: 详情
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
public function detail($id)
|
||||
{
|
||||
if(empty($id)){
|
||||
return redirect('/');
|
||||
}
|
||||
|
||||
|
||||
$data['id'] = $id;
|
||||
$detail = $this->SourceModel->getDetail($data);
|
||||
|
||||
if(empty($detail)){
|
||||
return redirect('/');
|
||||
}
|
||||
|
||||
|
||||
$rankList = $this->SourceCategoryModel->field('name,image')->where([['status','=',0],['is_sys','=',1]])->order('sort desc')->select();
|
||||
|
||||
|
||||
View::assign('rankList', $rankList);
|
||||
View::assign('detail', $detail);
|
||||
View::assign('config', config("qfshop"));
|
||||
View::assign('category_id', 0);
|
||||
return View::fetch('/news/detail');
|
||||
}
|
||||
|
||||
|
||||
public function show()
|
||||
{
|
||||
$data = input('');
|
||||
$this->SourceModel = new SourceModel();
|
||||
|
||||
// 搜索条件
|
||||
$map = [];
|
||||
|
||||
$map[] = ['status', '=', 1];
|
||||
$map[] = ['is_time', '=', 0];
|
||||
|
||||
if(!empty($data['type'])){
|
||||
// 将 $data['type'] 转换为时间戳
|
||||
$dayStart = strtotime($data['type']);
|
||||
$dayEnd = $dayStart + 86400; // 86400 秒 = 24 小时
|
||||
|
||||
// 添加日期范围条件,只统计所选日期的记录
|
||||
$map[] = ['create_time', 'between', [$dayStart, $dayEnd]];
|
||||
View::assign('day', date('n月j日', $dayStart));
|
||||
|
||||
}else{
|
||||
// 获取今天的时间戳范围
|
||||
$todayStart = strtotime(date('Y-m-d'));
|
||||
$todayEnd = $todayStart + 86400; // 86400 秒 = 24 小时
|
||||
|
||||
// 添加日期范围条件,只统计今天的记录
|
||||
$map[] = ['create_time', 'between', [$todayStart, $todayEnd]];
|
||||
View::assign('day',date('n月j日'));
|
||||
}
|
||||
|
||||
|
||||
$result = $this->SourceModel->field('source_id as id,source_category_id,title,url,create_time as time,is_time')->where($map)->select()->each(function($item,$key){
|
||||
$item['times'] = substr($item['time'], 0, 10);
|
||||
unset($item['time']);
|
||||
return $item;
|
||||
})->toArray();
|
||||
|
||||
|
||||
View::assign('list', $result);
|
||||
return View::fetch();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace app\index\controller;
|
||||
|
||||
use think\Response;
|
||||
use think\facade\Request;
|
||||
|
||||
use app\model\Source as SourceModel;
|
||||
|
||||
|
||||
class Sitemap
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
// 检查是否有缓存
|
||||
$sitemap = cache('sitemap');
|
||||
|
||||
if (!$sitemap) {
|
||||
$SourceModel = new SourceModel();
|
||||
|
||||
$map[] = ['status', '=', 1];
|
||||
$map[] = ['is_delete', '=', 0];
|
||||
$map[] = ['is_time', '=', 0];
|
||||
|
||||
$urls = $SourceModel->where($map)->field('source_id, update_time')->order('update_time', 'desc')->limit(10000)->select();
|
||||
|
||||
// 创建 XML 内容
|
||||
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
|
||||
$xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
|
||||
|
||||
$xml .= '<url>';
|
||||
$xml .= '<loc>'.Request::domain().'</loc>'; // 网站 URL
|
||||
$xml .= '<lastmod>'.date('Y-m-d').'</lastmod>'; // 最后修改时间
|
||||
$xml .= '<changefreq>daily</changefreq>'; // 页面更新频率
|
||||
$xml .= '<priority>1.0</priority>'; // 优先级
|
||||
$xml .= '</url>';
|
||||
|
||||
|
||||
foreach ($urls as $url) {
|
||||
$xml .= '<url>';
|
||||
$xml .= '<loc>'.Request::domain().'/d/'.$url['source_id'].'.html</loc>';
|
||||
$xml .= '<lastmod>' . date('Y-m-d', strtotime($url['update_time'])) . '</lastmod>';
|
||||
$xml .= '<priority>0.8</priority>';
|
||||
$xml .= '</url>';
|
||||
}
|
||||
|
||||
$xml .= '</urlset>';
|
||||
|
||||
// 缓存 sitemap 1 小时 3600
|
||||
cache('sitemap', $xml, 86400);
|
||||
|
||||
$sitemap = $xml;
|
||||
}
|
||||
return Response::create($sitemap, 'xml')->header(['Content-Type' => 'application/xml']);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
|
||||
use think\facade\Route;
|
||||
|
||||
|
||||
Route::get('s/<name>-<page?>-<cate?>','index/index/list',[],['name' => '.+', 'id' => '\d+', 'cate' => '\d+']);
|
||||
Route::get('d/:id','index/index/detail');
|
||||
Route::get('sitemap.xml', 'index/sitemap/index');
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<div class="footerBox">
|
||||
<div class="box">
|
||||
<p>{$config.footer_dec|raw}</p>
|
||||
<p>
|
||||
{$config.footer_copyright|raw}
|
||||
<a href="/sitemap.xml" target="_blank">网站地图</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,175 @@
|
||||
<script src="/static/index/js/vue.global.min.js"></script>
|
||||
<script src="/static/index/js/index.full.min.js"></script>
|
||||
<script src="/static/index/js/axios.min.js"></script>
|
||||
<script>
|
||||
const { createApp, ref, onMounted, onUnmounted } = Vue;
|
||||
const { ElButton, ElMessage } = ElementPlus;
|
||||
const app = createApp({
|
||||
setup() {
|
||||
// 定义响应式数据
|
||||
const elementOpacity = ref(0);
|
||||
const scrollThreshold = ref(150); // 动态设置的滚动阈值
|
||||
const keyword = ref('{$keyword??''}');
|
||||
const qcodeVisible = ref(false);
|
||||
const layerVisible = ref(false);
|
||||
const content = ref('');
|
||||
const load = ref(false)
|
||||
const drawer = ref(false)
|
||||
const rankList = ref([]);
|
||||
const rankDj = ref([]);
|
||||
const is_m = ref(0);
|
||||
const newList = ref([]);
|
||||
|
||||
|
||||
// 公共消息方法
|
||||
const showMessage = (message, type = 'info') => {
|
||||
ElMessage({
|
||||
message,
|
||||
type,
|
||||
plain: true,
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// 滚动监听方法
|
||||
const handleScroll = () => {
|
||||
const scrollTop = window.scrollY || document.documentElement.scrollTop;
|
||||
elementOpacity.value = scrollTop >= scrollThreshold.value
|
||||
? Math.min((scrollTop - scrollThreshold.value) / 100, 1)
|
||||
: Math.max(1 - (scrollThreshold.value - scrollTop) / 100, 0);
|
||||
|
||||
const boxElement = document.querySelector('.listBox .screen .fixed .box');
|
||||
if (boxElement.style.display === 'block' && is_m.value) {
|
||||
boxElement.style.display = 'none'; // 隐藏元素
|
||||
}
|
||||
};
|
||||
|
||||
// 搜索按钮点击事件
|
||||
const searchBtn = () => {
|
||||
if (!keyword.value) {
|
||||
return showMessage('请输入你要搜索的内容~', 'error');
|
||||
}
|
||||
const currentUrl = window.location.href;
|
||||
const targetUrl = `/s/${keyword.value}.html`;
|
||||
if (currentUrl.includes('/s/') || currentUrl.includes('/d/')) {
|
||||
window.location.href = targetUrl;
|
||||
} else {
|
||||
window.open(targetUrl, '_blank');
|
||||
}
|
||||
};
|
||||
|
||||
// 保存按钮点击事件
|
||||
const saveBtn = async () => {
|
||||
if (!content.value) {
|
||||
return showMessage('请输入你想看的资源信息~', 'error');
|
||||
}
|
||||
if (load.value) return;
|
||||
|
||||
load.value = true;
|
||||
try {
|
||||
const response = await axios.post('/api/tool/feedback', { content: content.value });
|
||||
showMessage(response.data.message, response.data.code === 200 ? 'success' : 'error');
|
||||
if (response.data.code === 200) {
|
||||
layerVisible.value = false;
|
||||
content.value = '';
|
||||
}
|
||||
} finally {
|
||||
load.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const setnum = (num) => (num / 10000).toFixed(2) + 'W';
|
||||
|
||||
const goLink = (event,id) => {
|
||||
event.preventDefault();
|
||||
window.location.href = `/d/${id}.html`;
|
||||
}
|
||||
|
||||
const changeBtn = (e) => {
|
||||
const category_id = `{$category_id}`;
|
||||
if(category_id){
|
||||
window.location.href = `/s/${keyword.value}-${e}-${category_id}.html`;
|
||||
}else{
|
||||
window.location.href = `/s/${keyword.value}-${e}.html`;
|
||||
}
|
||||
};
|
||||
|
||||
const copyText = async(event,title,url,code) => {
|
||||
event.preventDefault();
|
||||
var text = '标题:'+title+'\n链接:'+url
|
||||
if (code) text += `\n提取码:${code}`;
|
||||
text += `\n由【${'{$config.app_name}'}${window.location.hostname}】供网盘分享链接`;
|
||||
|
||||
|
||||
try {
|
||||
// 优先使用 navigator.clipboard
|
||||
await navigator.clipboard.writeText(text);
|
||||
showMessage('复制成功', 'success');
|
||||
} catch (err) {
|
||||
// 如果 navigator.clipboard 失败,使用 document.execCommand 作为回退
|
||||
const textArea = document.createElement('textarea');
|
||||
textArea.value = text;
|
||||
textArea.style.position = 'fixed'; // 避免滚动
|
||||
textArea.style.opacity = 0;
|
||||
document.body.appendChild(textArea);
|
||||
textArea.focus();
|
||||
textArea.select();
|
||||
|
||||
try {
|
||||
const successful = document.execCommand('copy');
|
||||
if (successful) {
|
||||
showMessage('复制成功', 'success');
|
||||
} else {
|
||||
throw new Error('复制失败');
|
||||
}
|
||||
} catch (err) {
|
||||
showMessage('复制失败,请手动复制', 'error');
|
||||
}
|
||||
|
||||
document.body.removeChild(textArea);
|
||||
}
|
||||
}
|
||||
|
||||
const selectBtn = () => {
|
||||
const boxElement = document.querySelector('.listBox .screen .fixed .box');
|
||||
// 切换 display 属性,显示或隐藏
|
||||
if (boxElement.style.display === 'none' || boxElement.style.display === '') {
|
||||
boxElement.style.display = 'block'; // 显示
|
||||
} else {
|
||||
boxElement.style.display = 'none'; // 隐藏
|
||||
}
|
||||
}
|
||||
|
||||
const handleDeviceType = () => {
|
||||
const isMobile = window.matchMedia('(max-width: 768px)').matches;
|
||||
if (isMobile) {
|
||||
// 手机端的逻辑
|
||||
is_m.value = 1
|
||||
} else {
|
||||
// 电脑端的逻辑
|
||||
is_m.value = 0
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// 组件挂载时添加滚动监听
|
||||
onMounted(() => {
|
||||
handleDeviceType();
|
||||
|
||||
window.addEventListener('scroll', handleScroll);
|
||||
window.addEventListener('resize', handleDeviceType);
|
||||
});
|
||||
|
||||
// 组件卸载时移除滚动监听
|
||||
onUnmounted(() => {
|
||||
window.removeEventListener('scroll', handleScroll);
|
||||
window.removeEventListener('resize', handleDeviceType);
|
||||
});
|
||||
|
||||
// 返回数据和方法
|
||||
return { elementOpacity, scrollThreshold, keyword, searchBtn, rankList,newList, setnum, qcodeVisible, layerVisible, content, saveBtn, rankDj,goLink,changeBtn,copyText,drawer,selectBtn,is_m };
|
||||
}
|
||||
})
|
||||
.use(ElementPlus) // 使用 Element Plus
|
||||
.mount('#app'); // 挂载 Vue 实例
|
||||
</script>
|
||||
@@ -0,0 +1,71 @@
|
||||
<div class="headerBox">
|
||||
<div class="bg" {notempty name="fixed"}:style="{ opacity: elementOpacity }"{/notempty}></div>
|
||||
<div class="box">
|
||||
<a href="/" class="logoBox" {notempty name="fixed"}:style="{ opacity: elementOpacity }"{/notempty}>
|
||||
{notempty name="config.logo"}
|
||||
<img class="logo" src="{$config.logo}"></img>
|
||||
{/notempty}
|
||||
|
||||
{if condition="$config.app_name && $config.app_name_hide!=1"}
|
||||
<div class="title">{$config.app_name}</div>
|
||||
{/if}
|
||||
</a>
|
||||
<div class="search" {notempty name="fixed"}:style="{ opacity: elementOpacity }"{/notempty}>
|
||||
<input type="text" v-model="keyword" placeholder="输入关键字进行搜索" @keyup.enter="searchBtn" confirm-type="search" @confirm="searchBtn">
|
||||
<div class="btn" @click="searchBtn">
|
||||
<i class="iconfont icon-sousuo"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="navs">
|
||||
{notempty name="config.qcode"}
|
||||
<div class="item" @click="qcodeVisible = true">加入群聊</div>
|
||||
{/notempty}
|
||||
{empty name="config.app_demand"}
|
||||
<div class="item" @click="layerVisible = true">提交需求</div>
|
||||
{/empty}
|
||||
<div class="btns" v-html="`{$config.app_links}`"></div>
|
||||
|
||||
<div class="iconfont icon-caidan" @click="drawer = true"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="headerKox"></div>
|
||||
|
||||
|
||||
<el-dialog
|
||||
v-model="qcodeVisible"
|
||||
width="300"
|
||||
>
|
||||
<img src="{$config.qcode}" style="width: 100%" />
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-model="layerVisible"
|
||||
width="300"
|
||||
>
|
||||
<div class="layerBox">
|
||||
<div class="vname">提交需求</div>
|
||||
<el-input
|
||||
v-model="content"
|
||||
placeholder="请输入你想看的资源信息~"
|
||||
type="textarea"
|
||||
resize='none'
|
||||
></el-input>
|
||||
<div class="vbtn" @click="saveBtn">提交</div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
v-model="drawer"
|
||||
width="300"
|
||||
center
|
||||
>
|
||||
<div class="drawer">
|
||||
{notempty name="config.qcode"}
|
||||
<div class="item" @click="qcodeVisible = true">加入群聊</div>
|
||||
{/notempty}
|
||||
{empty name="config.app_demand"}
|
||||
<div class="item" @click="layerVisible = true">提交需求</div>
|
||||
{/empty}
|
||||
<div class="btns" v-html="`{$config.app_links}`"></div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
@@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
{notempty name="config.app_icon"}
|
||||
<link rel="icon" href="{$config.app_icon}" />
|
||||
{/notempty}
|
||||
<meta name="renderer" content="webkit">
|
||||
<meta name="viewport" content="width=device-width,user-scalable=no,maximum-scale=1.0">
|
||||
<title>{if condition="isset($detail) && $detail.title"}{$detail.title} - {$config.app_name}{else /}{$config.app_name}{notempty name="$config.app_title"} - {$config.app_title}{/notempty}{/if}</title>
|
||||
<meta name="keywords" content="{notempty name="detail"}{$detail.title},{/notempty}{$config.app_keywords}" />
|
||||
<meta name="description" content="{notempty name="detail"}{$detail.title} - {/notempty}{$config.app_description}" />
|
||||
<link rel="stylesheet" href="/static/index/css/index.min.css">
|
||||
<link rel="stylesheet" href="/static/index/css/app.css">
|
||||
<link rel="stylesheet" href="/static/index/css/m.css">
|
||||
|
||||
{$config.seo_statistics|raw}
|
||||
|
||||
<style>
|
||||
:root {
|
||||
--theme-color: {$config.home_color|default='#3e3e3e'};
|
||||
--theme-theme: {$config.home_theme|default='#133ab3'};
|
||||
--theme-background: {$config.home_background|default='#fafafa'};
|
||||
--theme-other_background: {$config.other_background|default='#ffffff'};
|
||||
}
|
||||
{$config.home_css}
|
||||
</style>
|
||||
@@ -0,0 +1,310 @@
|
||||
<!DOCTYPE html>
|
||||
<html dir="ltr" lang="zh">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="theme-color" content="#fff">
|
||||
<meta name="viewport" content="initial-scale=1, minimum-scale=1, width=device-width">
|
||||
<title>提示</title>
|
||||
<style>
|
||||
a {
|
||||
color: var(--link-color);
|
||||
}
|
||||
|
||||
body {
|
||||
--background-color: #fff;
|
||||
--error-code-color: var(--google-gray-700);
|
||||
--google-blue-100: rgb(210, 227, 252);
|
||||
--google-blue-300: rgb(138, 180, 248);
|
||||
--google-blue-600: rgb(26, 115, 232);
|
||||
--google-blue-700: rgb(25, 103, 210);
|
||||
--google-gray-100: rgb(241, 243, 244);
|
||||
--google-gray-300: rgb(218, 220, 224);
|
||||
--google-gray-500: rgb(154, 160, 166);
|
||||
--google-gray-50: rgb(248, 249, 250);
|
||||
--google-gray-600: rgb(128, 134, 139);
|
||||
--google-gray-700: rgb(95, 99, 104);
|
||||
--google-gray-800: rgb(60, 64, 67);
|
||||
--google-gray-900: rgb(32, 33, 36);
|
||||
--heading-color: var(--google-gray-900);
|
||||
--primary-button-fill-color-active: var(--google-blue-700);
|
||||
--primary-button-fill-color: var(--google-blue-600);
|
||||
--primary-button-text-color: #fff;
|
||||
--text-color: var(--google-gray-700);
|
||||
background: var(--background-color);
|
||||
color: var(--text-color);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-text-size-adjust: 100%;
|
||||
font-size: 125%;
|
||||
}
|
||||
|
||||
.icon {
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100%;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
|
||||
body.captive-portal,
|
||||
body.dark-mode-available,
|
||||
body.neterror,
|
||||
body.supervised-user-block,
|
||||
.offline body {
|
||||
--background-color: var(--google-gray-900);
|
||||
--error-code-color: var(--google-gray-500);
|
||||
--heading-color: var(--google-gray-500);
|
||||
--link-color: var(--google-blue-300);
|
||||
--primary-button-fill-color-active: rgb(129, 162, 208);
|
||||
--primary-button-fill-color: var(--google-blue-300);
|
||||
--primary-button-text-color: var(--google-gray-900);
|
||||
--text-color: var(--google-gray-500);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
button {
|
||||
border: 0;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
color: var(--primary-button-text-color);
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
font-size: .875em;
|
||||
margin: 0;
|
||||
padding: 8px 16px;
|
||||
transition: box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
[dir='rtl'] button {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.ssl button {
|
||||
background: var(--primary-button-fill-color);
|
||||
}
|
||||
|
||||
button:active {
|
||||
background: var(--primary-button-fill-color-active);
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
|
||||
h1 {
|
||||
color: var(--heading-color);
|
||||
font-size: 1.6em;
|
||||
font-weight: normal;
|
||||
line-height: 1.25em;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.2em;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.icon {
|
||||
height: 72px;
|
||||
margin: 0 0 40px;
|
||||
width: 72px;
|
||||
}
|
||||
|
||||
.interstitial-wrapper {
|
||||
box-sizing: border-box;
|
||||
font-size: 1em;
|
||||
line-height: 1.6em;
|
||||
margin: 14vh auto 0;
|
||||
max-width: 600px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#main-message>p {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.nav-wrapper {
|
||||
margin-top: 51px;
|
||||
}
|
||||
|
||||
.nav-wrapper::after {
|
||||
clear: both;
|
||||
content: '';
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@media (max-width: 700px) {
|
||||
.interstitial-wrapper {
|
||||
padding: 0 10%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 420px) {
|
||||
|
||||
button,
|
||||
[dir='rtl'] button {
|
||||
float: none;
|
||||
font-size: .825em;
|
||||
font-weight: 500;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 16px 24px;
|
||||
}
|
||||
|
||||
.interstitial-wrapper {
|
||||
padding: 0 5%;
|
||||
}
|
||||
|
||||
|
||||
.nav-wrapper {
|
||||
margin-top: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 240px) and (max-width: 420px) and (min-height: 401px),
|
||||
(min-width: 421px) and (min-height: 240px) and (max-height: 560px) {
|
||||
body .nav-wrapper {
|
||||
background: var(--background-color);
|
||||
bottom: 0;
|
||||
box-shadow: 0 -22px 40px var(--background-color);
|
||||
left: 0;
|
||||
margin: 0 auto;
|
||||
max-width: 736px;
|
||||
padding-left: 24px;
|
||||
padding-right: 24px;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.interstitial-wrapper {
|
||||
max-width: 736px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media (max-width: 420px) and (orientation: portrait),
|
||||
(max-height: 560px) {
|
||||
body {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
button,
|
||||
[dir='rtl'] button,
|
||||
button.small-link {
|
||||
font-family: Roboto-Regular, Helvetica;
|
||||
font-size: .933em;
|
||||
margin: 6px 0;
|
||||
transform: translatez(0);
|
||||
}
|
||||
|
||||
.nav-wrapper {
|
||||
box-sizing: border-box;
|
||||
padding-bottom: 8px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
h1 {
|
||||
font-size: 1.5em;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.icon {
|
||||
margin-bottom: 5.69vh;
|
||||
}
|
||||
|
||||
.interstitial-wrapper {
|
||||
box-sizing: border-box;
|
||||
margin: 7vh auto 12px;
|
||||
padding: 0 24px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.interstitial-wrapper p {
|
||||
font-size: .95em;
|
||||
line-height: 1.61em;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media (min-width: 421px) and (min-height: 500px) and (max-height: 560px) {
|
||||
.interstitial-wrapper {
|
||||
margin-top: 10vh;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-height: 400px) and (orientation:portrait) {
|
||||
.interstitial-wrapper {
|
||||
margin-bottom: 145px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-height: 299px) {
|
||||
.nav-wrapper {
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-height: 500px) and (max-height: 650px) and (max-width: 414px) and (orientation: portrait) {
|
||||
.interstitial-wrapper {
|
||||
margin-top: 7vh;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-height: 650px) and (max-width: 414px) and (orientation: portrait) {
|
||||
.interstitial-wrapper {
|
||||
margin-top: 10vh;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.ssl .icon {
|
||||
background-image: -webkit-image-set(url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAABAlBMVEUAAADcRTfcRDfdRET/gIDcRjr/ZmbjVTncRDfcRTfcRDfdRDzgSTncRDjeSDvcRTjbRDfbRDjeRzvcRjfbRjjcRTjcRTjcRTfdRTfcRDjdRTjcRTjbRDjbRTjbRTjbRTfcRjjdRDrcRjfbRTjZQzfcRDjZRDfZRzbWQzXXRDXXQzbXQzbWQjXYSDvWQjbbRDfOQDPSQTTUQjXCPDDNPzPJPjLGPTHVQjXMPzPRQTTWQjXLPzPDPDHYQzbAOzDTQTXHPTLIPjK8Oi++Oy/FPTHEPTHPQDTQQDTUQTXBPDDKPjK/OzC9Oi/////PQDPRQDS3OS66OS7TQTTEPDHXQjbMPjMBhLaWAAAAL3RSTlMA4tgPAhYFCcL98B4x9ie1+s49WICbqXNKZY3pjuqcgVdLZnL2qKg9zmXpjfontV8LANsAAAJrSURBVHhe7ZTnduIwFAY3ARIgBAg9vW1v173ROylby/u/yso2Fx3MNaxs9h/zAHM+Sfa8+M/s2LFjx+3tdjwH+/sHWxHVAerb8KSyANnUFkRXwLiK78llgJHJxRalwSMd11OGOeV4nsM9FO0dxhJdw4LrOJ6jYy46PoohqgEHatE9JViiFNWTPIElTpIRRXcQ4C6aJ3EJAS4TkUQXsMJFFE++CCsU8xFEBSAoiHsaQNIQ7yuQCFe3DiHUhftKIlzdKoRSFe0r8sXDAkSoumkIigYaIOkIfeWi56EESFm8r1w0fFIl4epWgBA9qOMpmirCfeWijtoa9WSx6taAELFBRl/vilS3BJRIbRk9/VFTsLrifUXRuNfXLU0y/7m6p0CKxqN+v6lJU/k3eJxu7Os5LWKDHi1tYstKG1zON1X3DGiRMR80Mx3fdCbc1+bQe3o2SJrYXcV0fFMxL9xXiz0987BBtux65qaCeF8lHCR3FabBTQ3xvk4M1yN5B/Mw2+urew8hTP1BM38Qnu5evK8gMw+7IcfH9E3ZlEBfMSO//Kf35+Cm6ua+rhbSYDeEa9CUyW3qK1HIjj5DBz8dWd0bWCd6Ult/uMPEr+BmbV/JHrVG/a9MsEybV5fsK50R3frmBFXtCtVXmt73H4PhQ4t9k9rkJ55tYXwZrO4rCEUfPHfUEcuaZC/umw97TfaVpslu2tCb2lRWnBlKFtf+huwrjaa6Pxv7RfgW7nubJPtKI/X0puQO4k/Pfe/ovtLY7KbxVwve0/sE3VeaLosIbkEDvt8Hoq/hKGwQYvoq5OMnoq/hLAbgc/FVn33PX7pAfE5QHR6fAAAAAElFTkSuQmCC) 1x,
|
||||
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAADQmBKKAAABTVBMVEUAAADcRDf/ZmbcRjrjVTn/gIDdRETdRDzZQzbXQzXWQzbXQjbWQzXZRDbbRDnWQjXWQzXYSDvbRTjcRTjbRTfcRjfcRTjcRTjdRjncRTfdRTndRTfdRDrbRTjcRDnbRDfbRDjbRjfcRjfbRTjcRTjdRTjbRjjcRTjcRDjcRjncRTncRTndRDnbRTjcRDfZQzbcRTfgSTncRDfcRjjZQzjcRTfVRDbcRDjcRDjWQzXeRzvbRDjXRDXXQzbXQzbbRDfeSDvWQjbVQjXIPjLOQDPXQjbCPDDNPzPUQTXRQTS5OS7QQDTUQjW3OS7SQTTPQDTFPDHJPjK2OC26OS7HPjHOPzPLPjLMPjPRQDTGPDHTQTTEPTHLPzPGPTG7Oi/HPTLKPjLTQTXYQza9Oi/MPzPFPTHDPDHBPDC/OzC+Oy+8Oi/AOzDWQjX////bRDd3undHAAAAQnRSTlMA2AUWCQIPHj39wvbO8DH64ifqqYFmtrVMc1lKS5x0nY6PWKqbjYDpZXWCZ1py8Jv9McJXV+KA9qioPc5l6Y36J7VmcHe8AAAFWUlEQVR4XuzWS4rCQBSG0euz56ISgiaEjHwgGhAhDnRF3/6HDY1Ia5WPjP4a3LOKY28555xzzjnnnHPOuSyzpPR7vb6lZAUrS8hgB7uBpaMEKC0Zhz3A/mCpaPjTWCK23GwtCcMjN8ehpWDN3doS8HPi7vRjejX/1CbX8qA1sdGZB+eRaW14sjGp8YQnk7EpVQQqE7peCFyupjMnYm4yGVGZ7q1EyTZbEEche2uUbLMlL5W6t4Zkm22Ikm02561c89aQbLNTPpgq3hqSbbbmo1r41rhW8NaAaLMzvjITvDUg2WzFlyrBWwOCzc6Jkm12QQcL3Vtlmy3opFC9VbbZJR0tNW+Vbbahs0b41rhc8FbVZqdEyTb724t5/bYNA3G4e+80NYI0gGFkvaR779KKZUWuFKe7nlIsT5X//2M5VMZiZB9DQj74xW8ffrwjP90Mb/07Vf5CbXYJg0BtO4toKS9vhYHGY1vDZg28FQY6tBZls8tYBehwNLTyt1nhrTDQaDQcWAux2SJWAxpOBpWMWSvm4q0w0Gg4nFQqFTd/m72HlYBYQJV+w83bZu9jRaDJYEB4osjJ02aFt8JASUBRq+PlarMrWBGI8lQajVanXA5kopUcvBUEGrCAWhSoXs3PZtewKhA/MMbTbcpEa7l4KwwURZSHANnVnGz2CVYGmg6oZ1u1XGy2hNWBCA8BogE1m7Zl+ShNVMrdW2Wg/v+Amr2eRYCcGLBZU2+FgcSBESDfdZxdwGbNvBUGihKgnk1OjPAEwS5gsybeCgNNdTQLyAtqtRCwWQNvhYH4ndjtNnlAnlet1uIQsFl9b4WBpgNyaUCEJ45DwGa1vRUGanU6nMcmB+ZSnlosES3nvm/tUpGm1tFPd5DDAyKFBJGpzRaxSjW5J0o8/MAQ4ZEyKua/b+0Np175blMERDuaECFBZGqzBaxY9iAjIMbDK01U0OVZxcplE6BIjLzFRixgQDwflCJaXcC+1ToKyOYHFvCOljPiNmvurTBRI+oQoGTk2Z1YQyIeiWhlEftWnx8Yf8RcyiMCEkyhic2u4xOWSw9MBBQENTQFI83a+iL2rdgpJ1rms45mByYzhbDNwt6qTtTlQC7r6FT/CLRQ02ZLWKc8OmK+LzooCykhKpl4q7p+7B/d0SjNggRbqGOzm1gPqL3PX3niZakOQsenf1PDWzWAxr+JBtEDQxnnJTISNmvurfBK75t45bORBNGSobcqb9DqBCjdQOl5E370xthbYaDRiIjRDxKQwJk9a+o2u431gYZERBo/kcBIfvJ/TrSt6K1b+kDUHMkra2V3j5zRlprNbmADILbQ65S/z2ggyY82zL0VXsdQnnLdhSOKQzWbLWADIMpDgOrd3q958QiigrG3wusYzmNbXmY4sh+tangrVJ2Dgy97X9v0CmILzzIHcj3ZPTL+h6DN7mhYR5nxHI4mtKNbLCAmaX9QDDKFO6C36hDttcdJQFGLeTWRIupocGOj62cBb9WqesLTFwfm000MQgqz9lDLW+Hve35HM9Fnqw9HetBkNsF6+Yaet8Jf0+xbka0XbYspSMIg+5D8/8psnqdYv3qso1vsS9Hy6SaGQ6AYHP9ngLdqllVpiIB8RygRQjGEdOsc4K26RGzk6YTxjhbDDdzXcfwC8Fbd8glPnR4Y62gBAM/a1WybfYVNyyUBiZFPXYCAH70GvFW7nFRHH7EgyI8uAd6qXZ7NAqoilG6ZKuBH184D3qpdAQlIWp0p9dE7wFv1q8Y6+njLoPl+9P4C4K0GRKSjgTyywvoAeKtBxVWU6YhorovcvA14q0HtouwU0Fw/+jzN8w/cQ/zg6ug2/QAAAABJRU5ErkJggg==) 2x);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body id="body" class="ssl extended-reporting-has-checkbox">
|
||||
<div class="interstitial-wrapper">
|
||||
<div id="main-content">
|
||||
<div class="icon" id="icon"></div>
|
||||
<div id="main-message">
|
||||
<h1>提示</h1>
|
||||
<p>{$msg}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nav-wrapper">
|
||||
<a href="javascript:history.go(-1);"><button id="primary-button">好的,我知道了</button></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<style>
|
||||
html {
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: system-ui, PingFang SC, STHeiti, sans-serif;
|
||||
font-size: 75%;
|
||||
}
|
||||
|
||||
button {
|
||||
font-family: system-ui, PingFang SC, STHeiti, sans-serif;
|
||||
}
|
||||
</style>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,29 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<link rel="stylesheet" href="/assets/uni.4906e6f8.css">
|
||||
|
||||
<meta charset="UTF-8" />
|
||||
<script>
|
||||
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
|
||||
CSS.supports('top: constant(a)'))
|
||||
document.write(
|
||||
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
|
||||
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
|
||||
</script>
|
||||
<title>心悦搜剧-免费分享百万级网盘资源,致力打造顶尖网盘搜索引擎,让您畅享资源无忧!</title>
|
||||
<meta name="keywords" content="心悦搜剧、短剧搜索、影视资源、在线短剧">
|
||||
<meta name="description" content="免费分享百万级网盘资源,致力打造顶尖网盘搜索引擎,让您畅享资源无忧!">
|
||||
<link rel="icon" href="/assets/logo-DQLPqAxx.png" />
|
||||
<script src="./static/config.js"></script>
|
||||
<!--preload-links-->
|
||||
<!--app-context-->
|
||||
<script type="module" crossorigin src="/assets/index-CICgbd-2.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-BLVVqZ0m.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"><!--app-html--></div>
|
||||
<script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js"></script>
|
||||
<script>LA.init({id:"3HsdT1GaTQzE091Y",ck:"3HsdT1GaTQzE091Y",hashMode:true})</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
<h4>【{$day} | 短剧每日更新】</h4>
|
||||
{volist name="list" id="vo"}
|
||||
{$key+1}、{$vo.title}<br/>
|
||||
{/volist}
|
||||
<br/>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,123 @@
|
||||
{include file="common/header"}
|
||||
</head>
|
||||
<body>
|
||||
<div class="headBg" style="background-image: url({$config.home_bg});"></div>
|
||||
<div id="app" v-cloak>
|
||||
{include file="common/head"}
|
||||
<div class="searchBox searchDetail">
|
||||
<div class="search">
|
||||
<input type="text" v-model="keyword" placeholder="输入关键字进行搜索" @keyup.enter="searchBtn" confirm-type="search" @confirm="searchBtn">
|
||||
<div class="btn" @click="searchBtn">
|
||||
<i class="iconfont icon-sousuo"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="listBox detailBox">
|
||||
<div class="left">
|
||||
<h3>详情</h3>
|
||||
<div class="box details">
|
||||
{notempty name="detail.vod_pic"}
|
||||
<div class="pic">
|
||||
<img src="{$detail.vod_pic}" />
|
||||
</div>
|
||||
{/notempty}
|
||||
<div class="title">{$detail.title}</div>
|
||||
<div class="cat">
|
||||
<div class="l">资源分类</div>
|
||||
<div class="r">
|
||||
{if condition="$detail.category && $detail.category.name"}
|
||||
{$detail.category.name}
|
||||
{else /}
|
||||
其它
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="l">资源描述</div>
|
||||
<div class="r">
|
||||
{if condition="$detail.vod_content"}
|
||||
{$detail.vod_content}
|
||||
{else /}
|
||||
-
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="l">更新时间</div>
|
||||
<div class="r">{$detail.times}</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="l">资源类型</div>
|
||||
<div class="r">
|
||||
<img src="/static/index/images/{$detail.is_type}.png" class="icon" />
|
||||
{if condition="$detail.is_type==1"}
|
||||
<span>阿里云盘</span>
|
||||
{elseif condition="$detail.is_type==2"/}
|
||||
<span>百度网盘</span>
|
||||
{elseif condition="$detail.is_type==3"/}
|
||||
<span>UC网盘</span>
|
||||
{elseif condition="$detail.is_type==4"/}
|
||||
<span>迅雷网盘</span>
|
||||
{else /}
|
||||
<span>夸克网盘</span>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="l">资源地址</div>
|
||||
<div class="r">
|
||||
<a href="{$detail.url}" target="_blank">{$detail.url}</a>
|
||||
</div>
|
||||
</div>
|
||||
{notempty name="detail.code"}
|
||||
<div class="cat">
|
||||
<div class="l">提取码</div>
|
||||
<div class="r" style="color: #FF3F3D;">{$detail.code}</div>
|
||||
</div>
|
||||
{/notempty}
|
||||
<div class="btns">
|
||||
<div class="btn btnCol" @click.stop="copyText($event,'{$detail.title}','{$detail.url}','{$detail.code}')"><i class="iconfont icon-fenxiang1"></i>复制分享</div>
|
||||
<a href="{$detail.url}" target="_blank" class="btn"><i class="iconfont icon-yun_o"></i>立即访问</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<block v-for="(item,index) in rankList" :key="index">
|
||||
<div class="nav">
|
||||
<img :src="item.image" v-if="item.image">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<div class="box" v-if="item.list && item.list.length>0">
|
||||
<div class="list">
|
||||
<a :href="'/s/'+vo.title+'.html'" v-for="(vo,i) in item.list" :key="i" class="item" v-show="i<5">
|
||||
<p>
|
||||
<span>{{i+1}}</span>
|
||||
{{vo.title}}
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</block>
|
||||
</div>
|
||||
</div>
|
||||
{include file="common/foot"}
|
||||
</div>
|
||||
{include file="common/footer"}
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
if(!app.is_m){
|
||||
app.rankList = JSON.parse('<?php echo json_encode($rankList, JSON_UNESCAPED_UNICODE); ?>');
|
||||
for (const item of app.rankList) {
|
||||
axios.get('/api/tool/ranking',{
|
||||
params: {
|
||||
channel: item.name,
|
||||
is_m: app.is_m
|
||||
}
|
||||
})
|
||||
.then(function (res) {
|
||||
item.list = res.data.data
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,113 @@
|
||||
{include file="common/header"}
|
||||
</head>
|
||||
<body>
|
||||
<div class="headBg" style="background-image: url({$config.home_bg});"></div>
|
||||
<div id="app" v-cloak>
|
||||
{include file="common/head"}
|
||||
<div class="homeBox searchBox">
|
||||
<div class="box">
|
||||
<div class="logoBox">
|
||||
{notempty name="config.logo"}
|
||||
<img class="logo" src="{$config.logo}"></img>
|
||||
{/notempty}
|
||||
{if condition="$config.app_name && $config.app_name_hide!=1"}
|
||||
<span class="title">{$config.app_name}</span>
|
||||
{/if}
|
||||
</div>
|
||||
{notempty name="config.app_subname"}
|
||||
<div class="subTitle">{$config.app_subname}</div>
|
||||
{/notempty}
|
||||
<div class="search">
|
||||
<input type="text" v-model="keyword" placeholder="输入关键字进行搜索" @keyup.enter="searchBtn" confirm-type="search" @confirm="searchBtn">
|
||||
<div class="btn" @click="searchBtn">
|
||||
<i class="iconfont icon-sousuo"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="home {if $config.ranking_type != 1}homeNO{/if}">
|
||||
<div class="block" v-if="newList.length>0">
|
||||
<div class="nav">
|
||||
{notempty name="config.home_new_img"}
|
||||
<img src="{$config.home_new_img}"></img>
|
||||
{/notempty}
|
||||
最新更新
|
||||
</div>
|
||||
<div class="content">
|
||||
{if $config.ranking_type == 1 }
|
||||
<div class="list">
|
||||
<a :href="'/s/'+vo.title+'.html'" target="_blank" class="item" v-for="(vo,i) in newList" :key="i">
|
||||
<div class="img">
|
||||
<img :src="vo.src" />
|
||||
<span>Loading...</span>
|
||||
</div>
|
||||
<p>{{vo.title}}</p>
|
||||
</a>
|
||||
</div>
|
||||
{else /}
|
||||
<div class="list">
|
||||
<a :href="'/s/'+vo.title+'.html'" target="_blank" class="item" v-for="(vo,i) in newList" :key="i">
|
||||
<p>
|
||||
<span>{{i+1}}</span>
|
||||
{{vo.title}}
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="block" v-for="(item,index) in rankList" :key="index">
|
||||
<div class="nav">
|
||||
<img :src="item.image" v-if="item.image">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<div class="content">
|
||||
{if $config.ranking_type == 1 }
|
||||
<div class="list">
|
||||
<a :href="'/s/'+vo.title+'.html'" target="_blank" class="item" v-for="(vo,i) in item.list" :key="i">
|
||||
<div class="img">
|
||||
<img :src="vo.src" />
|
||||
<span>Loading...</span>
|
||||
</div>
|
||||
<p>{{vo.title}}</p>
|
||||
</a>
|
||||
</div>
|
||||
{else /}
|
||||
<div class="list">
|
||||
<a :href="'/s/'+vo.title+'.html'" target="_blank" class="item" v-for="(vo,i) in item.list" :key="i">
|
||||
<p>
|
||||
<span>{{i+1}}</span>
|
||||
{{vo.title}}
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{include file="common/foot"}
|
||||
</div>
|
||||
{include file="common/footer"}
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
app.newList = JSON.parse('<?php echo json_encode($newList, JSON_UNESCAPED_UNICODE); ?>');
|
||||
let num = '{$config.ranking_m_num}';
|
||||
if(app.is_m){
|
||||
app.newList = app.newList.slice(0, num);
|
||||
}
|
||||
app.rankList = JSON.parse('<?php echo json_encode($rankList, JSON_UNESCAPED_UNICODE); ?>');
|
||||
for (const item of app.rankList) {
|
||||
axios.get('/api/tool/ranking',{
|
||||
params: {
|
||||
channel: item.name,
|
||||
is_m: app.is_m
|
||||
}
|
||||
})
|
||||
.then(function (res) {
|
||||
item.list = res.data.data
|
||||
})
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,121 @@
|
||||
{include file="common/header"}
|
||||
</head>
|
||||
<body>
|
||||
<div class="headBg" style="background-image: url({$config.home_bg});"></div>
|
||||
<div id="app" v-cloak>
|
||||
{include file="common/head"}
|
||||
<div class="searchBox searchList">
|
||||
<div class="search">
|
||||
<div class="select" @click="selectBtn">
|
||||
{if condition="$category_id == ''"}全部{/if}
|
||||
{foreach $category as $key=>$vo }
|
||||
{if condition='$category_id == $vo.id'}{$vo.name}{/if}
|
||||
{/foreach}
|
||||
<i class="iconfont icon-xiala" style="font-size: 3vw"></i>
|
||||
</div>
|
||||
<input type="text" v-model="keyword" placeholder="输入关键字进行搜索" @keyup.enter="searchBtn" confirm-type="search" @confirm="searchBtn">
|
||||
<div class="btn" @click="searchBtn">
|
||||
<i class="iconfont icon-sousuo"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="listBox">
|
||||
<div class="screen">
|
||||
<div class="fixed">
|
||||
<h3>筛选</h3>
|
||||
<div class="box">
|
||||
<a href="/s/{$keyword}.html" class="{eq name="category_id" value=""}active{/eq}">全部</a>
|
||||
{foreach $category as $key=>$vo }
|
||||
<a href="/s/{$keyword}-1-{$vo.id}.html" class="{if condition='$category_id == $vo.id'}active{/if}">{$vo.name}</a>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="left">
|
||||
<h3>为您找到【<span>{$keyword}</span>】相关资源<span> {$list.total_result} </span>条</h3>
|
||||
<div class="box">
|
||||
{if condition="$list.total_result>0"}
|
||||
<div class="list">
|
||||
{foreach $list.items as $key=>$vo }
|
||||
<a class="item" target="_blank" href="{$vo.url}">
|
||||
<div class="title">
|
||||
{$vo.name|raw}
|
||||
</div>
|
||||
<div class="type time">{$vo.times}</div>
|
||||
<div class="type">
|
||||
{if condition="$vo.is_type==1"}
|
||||
<span>来源:阿里云盘</span>
|
||||
{elseif condition="$vo.is_type==2"/}
|
||||
<span>来源:百度网盘</span>
|
||||
{elseif condition="$vo.is_type==3"/}
|
||||
<span>来源:UC网盘</span>
|
||||
{elseif condition="$vo.is_type==4"/}
|
||||
<span>来源:迅雷网盘</span>
|
||||
{else /}
|
||||
<span>来源:夸克网盘</span>
|
||||
{/if}
|
||||
{notempty name="vo.code"}
|
||||
<span>提取码:<span>{$vo.code}</span></span>
|
||||
{/notempty}
|
||||
</div>
|
||||
<div class="btns">
|
||||
<div class="btn" @click.stop="copyText($event,'{$vo.title}','{$vo.url}','{$vo.code}')"><i class="iconfont icon-fenxiang1"></i>复制分享</div>
|
||||
<div class="btn" @click.stop="goLink($event,'{$vo.id}')"><i class="iconfont icon-fangwen"></i>查看详情</div>
|
||||
<div class="btn">
|
||||
<img src="/static/index/images/{$vo.is_type}.png" class="icon" />
|
||||
立即访问
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
{/foreach}
|
||||
</div>
|
||||
<div class="page">
|
||||
{notempty name="list.total_result"}
|
||||
<el-pagination background layout="prev, pager, next" :pager-count="3" :default-current-page="{$page_no}" :default-page-size="{$page_size}" :total="{$list.total_result}" @change="changeBtn"></el-pagination>
|
||||
{/notempty}
|
||||
</div>
|
||||
{else /}
|
||||
<el-empty style="margin-top: 10%;" :image-size="200" image="{$config.search_bg??''}" description="{$config.search_tips|default='未找到,可换个关键词尝试哦~'}"></el-empty>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<block v-for="(item,index) in rankList" :key="index">
|
||||
<div class="nav">
|
||||
<img :src="item.image" v-if="item.image">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<div class="box" v-if="item.list && item.list.length>0">
|
||||
<div class="list">
|
||||
<a :href="'/s/'+vo.title+'.html'" v-for="(vo,i) in item.list" :key="i" class="item" v-show="i<5">
|
||||
<p>
|
||||
<span>{{i+1}}</span>
|
||||
{{vo.title}}
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</block>
|
||||
</div>
|
||||
</div>
|
||||
{include file="common/foot"}
|
||||
</div>
|
||||
{include file="common/footer"}
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
// if(!app.is_m){
|
||||
app.rankList = JSON.parse('<?php echo json_encode($rankList, JSON_UNESCAPED_UNICODE); ?>');
|
||||
for (const item of app.rankList) {
|
||||
axios.get('/api/tool/ranking',{
|
||||
params: {
|
||||
channel: item.name,
|
||||
is_m: app.is_m
|
||||
}
|
||||
})
|
||||
.then(function (res) {
|
||||
item.list = res.data.data
|
||||
})
|
||||
}
|
||||
// }
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user