Files
2026-10-28 17:40:27 +07:00

266 lines
14 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<title>{{.metaTitle}}</title>
{{template "seoCommon" .}}
{{/* 夸克 / QQ(X5):页内播放适配。不要写 x5-fullscreen,否则 QQ 会接管成系统播放器 */}}
<meta name="renderer" content="webkit">
<meta name="force-rendering" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="x5-orientation" content="portrait">
<meta name="x5-page-mode" content="app">
<meta name="browsermode" content="application">
<meta name="imagemode" content="force">
<meta name="apple-mobile-web-app-capable" content="yes">
<script src="/static/js/common/compat.js?v=4"></script>
<link rel="stylesheet" href="/static/css/base.css?v=2">
<link rel="stylesheet" href="/static/common/DPlayer.min.css">
<link rel="stylesheet" href="/static/css/play.css?v=27">
<script defer src="/static/common/hls.min.js"></script>
<script defer src="/static/common/DPlayer.min.js?v=2"></script>
</head>
<body class="page-play page-series-play">
{{template "header" .}}
<header class="page-subheader only-h5" aria-label="播放页顶栏">
<a class="page-subheader__btn" href="javascript:history.back()" aria-label="返回">
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-left.svg" alt="返回">
</a>
<div class="page-subheader__title">{{if .video.Title}}{{.video.Title}}{{else}}视频播放{{end}}</div>
<button class="page-subheader__btn" type="button" aria-label="分享" data-share-page>
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/share.svg" alt="分享">
</button>
</header>
<div class="page play-page">
<main class="main play-main">
<nav class="breadcrumb play-breadcrumb only-pc" aria-label="面包屑">
<a class="breadcrumb__item" href="/">首页</a>
<img decoding="async" loading="lazy" class="breadcrumb__sep" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-right.svg" alt="前往下一项">
<a class="breadcrumb__item" href="/series">视频</a>
<img decoding="async" loading="lazy" class="breadcrumb__sep" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-right.svg" alt="前往下一项">
<span class="breadcrumb__item is-current">{{if .video.Title}}{{.video.Title}}{{else}}播放{{end}}</span>
</nav>
<section class="play-stage" aria-label="播放器">
<div
class="play-player{{if not .canWatch}} play-player--locked{{end}}"
data-play-player
data-video-id="{{.videoID}}"
data-can-watch="{{if .canWatch}}1{{else}}0{{end}}"
>
{{if and .canWatch .videoURL}}
<div class="dplayer-video" data-url="{{.videoURL}}"></div>
{{end}}
<img decoding="async" loading="lazy"
class="play-player__cover lazy"
src="/static/images/placeholder.png?v=2"
data-src="{{if .cover}}{{.cover}}{{else}}{{.video.Video.Cover}}{{end}}"
data-play-poster
alt="{{if .video.Title}}{{.video.Title}}{{else}}视频{{end}}"
>
<div class="play-player__scrim" aria-hidden="true"></div>
<div class="play-player__dim" aria-hidden="true"></div>
<button
class="play-player__center"
type="button"
aria-label="播放"
{{if .canWatch}}data-play-poster-play{{end}}
>
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/play.svg" alt="播放">
</button>
{{if not .canWatch}}
<div class="play-player__unlock">
<div class="play-player__unlock-icon" aria-hidden="true">
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/lock.svg" alt="解锁">
</div>
<p class="play-player__unlock-ep">{{if .video.Title}}{{.video.Title}}{{else}}视频{{end}}</p>
<p class="play-player__unlock-title">暂无法播放</p>
<p class="play-player__unlock-desc">当前视频地址不可用,请稍后再试。</p>
<div class="play-player__unlock-actions">
{{$appAddr := .appConfig.AppAddr}}
<a class="play-player__unlock-app" href="{{if $appAddr}}{{$appAddr}}{{else}}/download-app{{end}}"{{if $appAddr}} target="_blank" rel="sponsored nofollow noopener"{{end}}>
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/download.svg" alt="下载">
下载 App 免费看
</a>
</div>
</div>
{{end}}
<div class="play-player__badge">
<span class="only-pc">正片{{if .video.Video.VideoTime}} {{formatMediaTime .video.Video.VideoTime}}{{end}}</span>
<span class="only-h5">{{if .video.Video.VideoTime}}{{formatMediaTime .video.Video.VideoTime}}{{else}}正片{{end}}</span>
</div>
{{if not .canWatch}}
<div class="play-player__bar">
<div class="play-player__progress" aria-hidden="true">
<span class="play-player__progress-fill" style="width:0%"></span>
<span class="play-player__progress-thumb" style="left:0%"></span>
</div>
<div class="play-player__controls">
<div class="play-player__left">
<button class="play-player__icon" type="button" aria-label="播放" disabled>
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/play.svg" alt="播放">
</button>
<span class="play-player__time">00:00{{if .video.Video.VideoTime}} / {{formatMediaTime .video.Video.VideoTime}}{{end}}</span>
</div>
</div>
</div>
{{end}}
</div>
<div class="play-tabs" aria-label="内容类型">
<a class="play-tabs__item is-active" href="#">正片</a>
<!-- <p class="play-tabs__hint only-pc">有播放地址时可直接观看</p> -->
</div>
</section>
<section class="play-info" aria-label="剧集信息">
<div class="play-meta">
<div class="play-meta__title-row">
<h1 class="play-meta__title">{{if .video.Title}}{{.video.Title}}{{else}}视频{{end}}</h1>
<span class="badge badge--hot">影集</span>
</div>
<div class="play-meta__chips">
{{if .video.Video.VideoTime}}<span class="play-chip">{{.video.Video.VideoTime}} 分钟</span>{{end}}
{{if and .video.Video.Width .video.Video.Height}}<span class="play-chip">{{.video.Video.Width}}×{{.video.Video.Height}}</span>{{end}}
<span class="play-chip">18+</span>
</div>
<p class="play-meta__stats only-pc">
{{if .video.TagsName}}标签 {{range $i, $t := .video.TagsName}}{{if $i}} {{end}}{{$t}}{{end}} {{end}}
{{if .video.WatchTimes}}热度 {{formatLikeCount .video.WatchTimes}}{{end}}
</p>
<p class="play-meta__stats only-h5">
{{range $i, $t := .video.TagsName}}{{if $i}} {{end}}{{$t}}{{end}}
{{if .video.WatchTimes}} 热度 {{formatLikeCount .video.WatchTimes}}{{end}}
</p>
</div>
<div class="play-actions">
<button
class="btn btn--primary play-actions__btn play-actions__btn--play"
type="button"
{{if .canWatch}}data-play-poster-play{{end}}
{{if not .canWatch}}disabled{{end}}
>
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/play_hollow.svg" alt="播放">
<span>立即播放</span>
</button>
<button class="btn btn--ghost play-actions__btn play-actions__btn--icon" type="button" aria-label="分享" data-share-page>
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/share.svg" alt="分享">
<span class="only-pc" data-share-page-label>分享</span>
</button>
<button class="btn btn--ghost play-actions__btn play-actions__btn--icon" type="button" aria-label="反馈">
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/message-circle.svg" alt="评论">
<span class="only-pc">反馈</span>
</button>
</div>
<div class="play-synopsis">
<div class="play-synopsis__head">
<h2 class="play-synopsis__title">简介</h2>
<button class="play-synopsis__more" type="button">
展开
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-right.svg" alt="前往下一项">
</button>
</div>
<p class="play-synopsis__text">{{if .seoInfo.Description}}{{.seoInfo.Description}}{{else if .video.Title}}{{.video.Title}}{{else}}暂无简介{{end}}</p>
</div>
</section>
{{template "playLinks" .}}
{{template "appIcons" dict "Items" .appConfig.AList "Label" "播放页小图标"}}
<div class="play-promo">
{{template "ads" (adSlice .appConfig.DetailBannerList 0 2)}}
</div>
<section class="play-dual" aria-label="推荐与热榜">
{{if .guessLike}}
<section class="play-like" aria-label="猜你喜欢">
<div class="play-like__head">
<div class="play-like__titles">
<h2 class="play-like__title">猜你喜欢</h2>
<span class="play-like__desc only-pc">根据本剧题材推荐</span>
</div>
<button
type="button"
class="play-like__refresh"
data-guess-refresh
data-playlet-id="{{.guessPlayletID}}"
data-page="{{.guessPage}}"
data-page-size="{{if .guessPageSize}}{{.guessPageSize}}{{else}}6{{end}}"
data-total="{{.guessTotal}}"
>
换一批
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-right.svg" alt="前往下一项">
</button>
</div>
<div class="play-like__grid" id="play-like" data-guess-grid>
{{range .guessLike}}
<article class="card card--play">
<a class="card__cover lazy" href="{{playURL .Slug .ID}}" style="{{cssCoverPlaceholder}}" data-src="{{.Cover}}">
{{if .TotalEpisode}}<span class="card__ep">全 {{.TotalEpisode}} 集</span>{{else}}<span class="card__ep">{{updateStatusText .UpdateStatus}}</span>{{end}}
</a>
<h3 class="card__title"><a href="{{playURL .Slug .ID}}">{{playletDisplayName .PlayName .Title}}</a></h3>
<p class="card__meta">{{range $ti, $tag := cardTags .}}{{if $ti}} {{end}}{{if $tag.URL}}<a href="{{$tag.URL}}" {{externalLinkAttrs $tag.URL}}>{{$tag.Name}}</a>{{else}}{{$tag.Name}}{{end}}{{end}}</p>
</article>
{{end}}
</div>
</section>
{{end}}
<aside class="play-hot" aria-label="热门短剧">
<div class="play-hot__head">
<h2 class="play-hot__title">热门短剧</h2>
<a class="play-hot__more" href="{{if .hotMoreURL}}{{.hotMoreURL}}{{else}}/list/all/0/2{{end}}" {{externalLinkAttrs .hotMoreURL}}>
完整榜单
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-right.svg" alt="前往下一项">
</a>
</div>
<ol class="play-hot__list">
{{range $i, $item := .hotList}}
<li{{if ge $i 5}} class="only-pc"{{end}}>
<div class="play-hot__item">
<a class="play-hot__no{{if lt $i 3}} is-top{{end}}" href="{{playURL $item.Slug $item.ID}}">{{rankNo (add $i 1)}}</a>
<a class="play-hot__cover-link" href="{{playURL $item.Slug $item.ID}}">
<img decoding="async" loading="lazy" class="play-hot__cover lazy" src="/static/images/placeholder.png?v=2" data-src="{{$item.Cover}}" alt="{{playletDisplayName $item.PlayName $item.Title}}封面">
</a>
<span class="play-hot__info">
<a class="play-hot__name" href="{{playURL $item.Slug $item.ID}}">{{playletDisplayName $item.PlayName $item.Title}}</a>
<span class="play-hot__meta">
{{$tags := cardTags $item}}
{{range $ti, $tag := $tags}}{{if $ti}} {{end}}{{if $tag.URL}}<a href="{{$tag.URL}}" {{externalLinkAttrs $tag.URL}}>{{$tag.Name}}</a>{{else}}{{$tag.Name}}{{end}}{{end}}
{{if and $tags $item.TotalEpisode}} {{end}}{{if $item.TotalEpisode}}全 {{$item.TotalEpisode}} 集{{end}}
</span>
</span>
<a class="play-hot__heat" href="{{playURL $item.Slug $item.ID}}">{{formatLikeCount $item.HeatValue}}</a>
</div>
</li>
{{else}}
<li><p class="play-hot__empty" style="margin:0;padding:12px 0;color:var(--text-dim)">暂无热榜数据</p></li>
{{end}}
</ol>
</aside>
</section>
<div class="play-promo play-promo--bottom">
{{template "ads" (adSlice .appConfig.DetailBannerList 2 2)}}
</div>
</main>
</div>
{{template "footer" .}}
<script defer src="/static/js/pages/play.js?v=42"></script>
</body>
</html>