地图与正文同宽 / 详情页封面改列表行样式 / 封面拖拽上传(批 21)
① 带地图的页面(首页旅行地图、详情页行程地图)原本铺满整个视口 (批 18 的负 margin 出血),用户反馈「上面正文固定宽、下面地图铺满屏」 看着奇怪 → 改回与正文版心同宽,bleed() 已删、CSS 去边框覆盖已删。 ② 活动详情页顶部整幅 16:9 大封面太大 → 改用活动列表同款「封面行」 (.act-row-static:小封面 + 参与人 + 统计),数据复用 collectStats 同一聚合口径;.activity-cover 样式删除。 ③ 创建/编辑活动封面支持直接把图片拖进上传区:drop→DataTransfer 塞给 原有 file input 并触发 change,类型/大小校验与裁剪流程原样复用; 拖入悬停给高亮反馈。 验证:本地全链(含 _map12/_map16 同宽与封面行断言、5 档视口)全绿; 部署哨兵同步改向(批 17/18 锚定旧实现的断言全部反向或改口径)。
This commit is contained in:
@@ -16,9 +16,58 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($activity['cover_image'])): ?>
|
||||
<div class="activity-cover">
|
||||
<img src="<?= e(media_cover((int)$activity['id'])) ?>" alt="">
|
||||
<?php
|
||||
/* 批 21:顶部不再放整幅 16:9 大封面(太大),改用活动列表同款的「封面行」——
|
||||
左边小封面、右边参与人与统计(去了几个地方 / 几天 / 几个节点)。
|
||||
数据与列表同一口径(ActivityController::collectStats);没传 stats 时只渲染封面。 */
|
||||
$actSt = $actStats[(int)$activity['id']] ?? null;
|
||||
$placeCount = (int)($actSt['place_count'] ?? 0);
|
||||
$placeMain = (string)($actSt['place_main'] ?? '');
|
||||
$days = (int)($actSt['days'] ?? 0);
|
||||
$spanText = (string)($actSt['span_text'] ?? '');
|
||||
$nodeCount = (int)($actSt['node_count'] ?? 0);
|
||||
$membersTop = array_slice($actSt['members'] ?? [], 0, 5);
|
||||
$memberCount = (int)($actSt['member_count'] ?? 0);
|
||||
?>
|
||||
<?php if (!empty($activity['cover_image']) || $actSt): ?>
|
||||
<div class="act-row act-row-static">
|
||||
<div class="act-row-cover">
|
||||
<?php if (!empty($activity['cover_image'])): ?>
|
||||
<img src="<?= e(media_cover((int)$activity['id'])) ?>" alt="">
|
||||
<?php else: ?>
|
||||
<div class="act-row-cover-ph">📸</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php if ($actSt): ?>
|
||||
<div class="act-row-body">
|
||||
<?php if ($membersTop): ?>
|
||||
<div class="act-row-members">
|
||||
<?php foreach ($membersTop as $m): ?>
|
||||
<span class="act-member">
|
||||
<?php if (!empty($m['avatar'])): ?>
|
||||
<img src="<?= e($m['avatar']) ?>" alt="">
|
||||
<?php else: ?>
|
||||
<span class="act-member-initial"><?= e(mb_substr((string)$m['name'], 0, 1)) ?></span>
|
||||
<?php endif; ?>
|
||||
<span class="act-member-name"><?= e($m['name']) ?></span>
|
||||
</span>
|
||||
<?php endforeach; ?>
|
||||
<?php if ($memberCount > count($membersTop)): ?>
|
||||
<span class="act-member-more">等 <?= $memberCount ?> 人</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div class="meta act-row-meta">
|
||||
<?php if ($placeCount > 0): ?>
|
||||
<span>📍 <?= $placeCount ?> 个地方<?= $placeMain !== '' ? '(' . e($placeMain) . ')' : '' ?></span>
|
||||
<?php endif; ?>
|
||||
<?php if ($days > 0): ?>
|
||||
<span>🕒 <?= $days ?> 天<?= $spanText !== '' ? '(' . e($spanText) . ')' : '' ?></span>
|
||||
<?php endif; ?>
|
||||
<span>🧳 <?= $nodeCount ?> 个节点</span>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
@@ -174,19 +223,8 @@ require dirname(__DIR__) . '/comments/_block.php';
|
||||
}
|
||||
if (!route.length) return;
|
||||
|
||||
/* 地图铺满整个视口宽度:把正文版心的左右留白用负 margin 还回去。
|
||||
⚠️ 不能写 CSS `calc(-1 * var(--shell-pad))`:自定义属性里的 `100%` 在使用它的
|
||||
元素上解析,地图在版心内部(宽 1080),算出来只有 -gutter,铺不满。
|
||||
这里读 container 实际渲染出的 padding 反推;也不用 100vw(含滚动条会溢出)。 */
|
||||
function bleed() {
|
||||
var host = el.closest('.container');
|
||||
if (!host) return;
|
||||
var pad = parseFloat(window.getComputedStyle(host).paddingLeft) || 0;
|
||||
if (pad <= 0) return;
|
||||
el.style.marginLeft = (-pad) + 'px';
|
||||
el.style.marginRight = (-pad) + 'px';
|
||||
}
|
||||
bleed();
|
||||
/* 批 21:地图不再铺满整个视口 —— 用户反馈「上面正文固定宽、下面地图铺满屏」
|
||||
看着奇怪,改回与正文版心同宽(批 18 的负 margin 出血逻辑 bleed() 已删)。 */
|
||||
|
||||
map = new AMap.Map(el, { viewMode: '2D', zoom: 5 });
|
||||
/* 挂到 window 供自动化测试(真浏览器量标记位置)与线上排查用;页面卸载即释放 */
|
||||
@@ -386,14 +424,13 @@ require dirname(__DIR__) . '/comments/_block.php';
|
||||
所以缩放结束后按新的像素位置重排一次(不重新适配视野)。 */
|
||||
map.on('zoomend', function () { drawRoute(true); });
|
||||
|
||||
/* 改窗口大小 / 旋转屏幕 / 换分辨率:地图宽度是铺满视口的,容器一变
|
||||
/* 改窗口大小 / 旋转屏幕 / 换分辨率:地图容器跟着版心变,容器一变
|
||||
就要按新尺寸重新适配视野并重排标记。防抖 200ms。 */
|
||||
var resizeTimer = null;
|
||||
window.addEventListener('resize', function () {
|
||||
clearTimeout(resizeTimer);
|
||||
resizeTimer = setTimeout(function () {
|
||||
if (!map) return;
|
||||
bleed(); // 版心留白变了,出血量跟着变
|
||||
map.resize();
|
||||
drawRoute(); // 重新适配视野 + 按新像素重排标记
|
||||
}, 200);
|
||||
|
||||
Reference in New Issue
Block a user