feat(card): 增加名片区块配置项,支持逐向内边距和独立成块样式

This commit is contained in:
2026-10-28 17:53:42 +08:00
parent d789dd7142
commit 1f642585d1
3 changed files with 129 additions and 1 deletions

View File

@@ -282,7 +282,17 @@ const DEFAULT_BLOCK_ORDER = 'bio,acts,rows,social,qr,meta';
*/
function blockCustomSpacing(c, prefix) {
if (!flagOn(c[prefix + 'SpacingCustom'], false)) return '';
const side = (k) => px2rpx(num(c[prefix + k], 0));
// 2.24 直配兜底: 逐向开关已开, 但四向值全为 0 且未被商家手动改过(touched=0)
// → 说明是「后端直写配置」而非编辑器接管(编辑器开逐向时会先把统一内边距铺进四向)
// → 此时逐向内边距回落统一内边距, 避免内边距被压成 0(独立成块看着「没内边距」)
const SIDES = ['Top', 'Right', 'Bottom', 'Left'];
const touched = num(c[prefix + 'SpacingTouched'], 0) === 1;
let padBase = 0;
if (!touched) {
const anySide = SIDES.some(s => num(c[prefix + 'Padding' + s], 0) !== 0 || num(c[prefix + 'Margin' + s], 0) !== 0);
if (!anySide) padBase = num(c[prefix + 'BlockPad'], 0);
}
const side = (k) => px2rpx(num(c[prefix + k], 0)) + (k.indexOf('Padding') === 0 ? px2rpx(padBase) : 0);
const m = [side('MarginTop'), side('MarginRight'), side('MarginBottom'), side('MarginLeft')];
const p = [side('PaddingTop'), side('PaddingRight'), side('PaddingBottom'), side('PaddingLeft')];
return 'margin: ' + m.join('rpx ') + 'rpx; padding: ' + p.join('rpx ') + 'rpx;';

View File

@@ -195,6 +195,65 @@ export default {
qrPaddingRight: v.qrPaddingRight,
qrPaddingBottom: v.qrPaddingBottom,
qrPaddingLeft: v.qrPaddingLeft,
// 2.20.4 逐向「已被手动改过」标记(C 端只透传, 渲染不消费; 保持与 config 同源)
rowsSpacingTouched: v.rowsSpacingTouched,
actsSpacingTouched: v.actsSpacingTouched,
qrSpacingTouched: v.qrSpacingTouched,
// 2.22 简介区块(开关/标题/行数/独立块/逐向)
showBio: v.showBio,
bioTitleShow: v.bioTitleShow,
bioTitle: v.bioTitle,
bioMaxLines: v.bioMaxLines,
bioSize: v.bioSize,
bioColor: v.bioColor,
bioLineHeight: v.bioLineHeight,
bioBlockBg: v.bioBlockBg,
bioBlockRadius: v.bioBlockRadius,
bioBlockPad: v.bioBlockPad,
bioSpacingCustom: v.bioSpacingCustom,
bioMarginTop: v.bioMarginTop,
bioMarginRight: v.bioMarginRight,
bioMarginBottom: v.bioMarginBottom,
bioMarginLeft: v.bioMarginLeft,
bioPaddingTop: v.bioPaddingTop,
bioPaddingRight: v.bioPaddingRight,
bioPaddingBottom: v.bioPaddingBottom,
bioPaddingLeft: v.bioPaddingLeft,
bioSpacingTouched: v.bioSpacingTouched,
// 2.22 社交媒体区块(开关/独立块/逐向)
showSocial: v.showSocial,
socialBlockBg: v.socialBlockBg,
socialBlockRadius: v.socialBlockRadius,
socialBlockPad: v.socialBlockPad,
socialSpacingCustom: v.socialSpacingCustom,
socialMarginTop: v.socialMarginTop,
socialMarginRight: v.socialMarginRight,
socialMarginBottom: v.socialMarginBottom,
socialMarginLeft: v.socialMarginLeft,
socialPaddingTop: v.socialPaddingTop,
socialPaddingRight: v.socialPaddingRight,
socialPaddingBottom: v.socialPaddingBottom,
socialPaddingLeft: v.socialPaddingLeft,
socialSpacingTouched: v.socialSpacingTouched,
// 2.22 名片标签 / 来源标注
showTags: v.showTags,
showSource: v.showSource,
// 2.23 区块顺序(六个可独立成块模块任意排序)
blockOrder: v.blockOrder,
// 2.24 标签与来源(meta)区块独立成块 + 逐向
metaBlockBg: v.metaBlockBg,
metaBlockRadius: v.metaBlockRadius,
metaBlockPad: v.metaBlockPad,
metaSpacingCustom: v.metaSpacingCustom,
metaMarginTop: v.metaMarginTop,
metaMarginRight: v.metaMarginRight,
metaMarginBottom: v.metaMarginBottom,
metaMarginLeft: v.metaMarginLeft,
metaPaddingTop: v.metaPaddingTop,
metaPaddingRight: v.metaPaddingRight,
metaPaddingBottom: v.metaPaddingBottom,
metaPaddingLeft: v.metaPaddingLeft,
metaSpacingTouched: v.metaSpacingTouched,
};
},
boxStyle() {

View File

@@ -157,6 +157,65 @@ export default {
qrPaddingRight: v.qrPaddingRight,
qrPaddingBottom: v.qrPaddingBottom,
qrPaddingLeft: v.qrPaddingLeft,
// 2.20.4 逐向「已被手动改过」标记(C 端只透传, 渲染不消费; 保持与 config 同源)
rowsSpacingTouched: v.rowsSpacingTouched,
actsSpacingTouched: v.actsSpacingTouched,
qrSpacingTouched: v.qrSpacingTouched,
// 2.22 简介区块(开关/标题/行数/独立块/逐向)
showBio: v.showBio,
bioTitleShow: v.bioTitleShow,
bioTitle: v.bioTitle,
bioMaxLines: v.bioMaxLines,
bioSize: v.bioSize,
bioColor: v.bioColor,
bioLineHeight: v.bioLineHeight,
bioBlockBg: v.bioBlockBg,
bioBlockRadius: v.bioBlockRadius,
bioBlockPad: v.bioBlockPad,
bioSpacingCustom: v.bioSpacingCustom,
bioMarginTop: v.bioMarginTop,
bioMarginRight: v.bioMarginRight,
bioMarginBottom: v.bioMarginBottom,
bioMarginLeft: v.bioMarginLeft,
bioPaddingTop: v.bioPaddingTop,
bioPaddingRight: v.bioPaddingRight,
bioPaddingBottom: v.bioPaddingBottom,
bioPaddingLeft: v.bioPaddingLeft,
bioSpacingTouched: v.bioSpacingTouched,
// 2.22 社交媒体区块(开关/独立块/逐向)
showSocial: v.showSocial,
socialBlockBg: v.socialBlockBg,
socialBlockRadius: v.socialBlockRadius,
socialBlockPad: v.socialBlockPad,
socialSpacingCustom: v.socialSpacingCustom,
socialMarginTop: v.socialMarginTop,
socialMarginRight: v.socialMarginRight,
socialMarginBottom: v.socialMarginBottom,
socialMarginLeft: v.socialMarginLeft,
socialPaddingTop: v.socialPaddingTop,
socialPaddingRight: v.socialPaddingRight,
socialPaddingBottom: v.socialPaddingBottom,
socialPaddingLeft: v.socialPaddingLeft,
socialSpacingTouched: v.socialSpacingTouched,
// 2.22 名片标签 / 来源标注
showTags: v.showTags,
showSource: v.showSource,
// 2.23 区块顺序(六个可独立成块模块任意排序)
blockOrder: v.blockOrder,
// 2.24 标签与来源(meta)区块独立成块 + 逐向
metaBlockBg: v.metaBlockBg,
metaBlockRadius: v.metaBlockRadius,
metaBlockPad: v.metaBlockPad,
metaSpacingCustom: v.metaSpacingCustom,
metaMarginTop: v.metaMarginTop,
metaMarginRight: v.metaMarginRight,
metaMarginBottom: v.metaMarginBottom,
metaMarginLeft: v.metaMarginLeft,
metaPaddingTop: v.metaPaddingTop,
metaPaddingRight: v.metaPaddingRight,
metaPaddingBottom: v.metaPaddingBottom,
metaPaddingLeft: v.metaPaddingLeft,
metaSpacingTouched: v.metaSpacingTouched,
};
},
},