This commit is contained in:
2026-08-03 16:29:01 +08:00
parent 1cda06573e
commit 318ed4028e
4 changed files with 27 additions and 1254 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -159,7 +159,10 @@
<!-- 商品推荐 -->
<diy-goods-recommend :value="item"></diy-goods-recommend>
</template>
<template v-if="item.componentName == 'DiyRecommendCode'">
<!-- 自定义推荐码组件 -->
<diy-recommend-code :value="item"></diy-recommend-code>
</template>
<template v-if="item.componentName == 'GoodsBrand'">
<!-- 商品品牌 -->
<diy-goods-brand :value="item"></diy-goods-brand>
@@ -261,22 +264,6 @@
<diy-channel-list :value="item"></diy-channel-list>
</template>
<!-- ✅ 我的邀请码 / 推荐码(商家 DIY 自由放置:
1) 严格匹配:后端注册的 5 个常见名字
2) 宽松匹配:componentName 包含 Recommend / Invite 关键字(不区分大小写)—— 解决后端注册名和前端数组不一致导致的"加了组件但页面不显示"问题
后端只要把组件注册成任意含 Recommend 或 Invite 关键字的名字就能渲染出来,避免前端硬编码数组漏匹配 -->
<template v-if="(function(cn){
if (!cn) return false;
var s = String(cn).toLowerCase();
// 严格匹配
if (['MyInviteCode','RecommendCode','Recommend','InviteCode','RecommendCodeDiy'].indexOf(cn) !== -1) return true;
// 宽松匹配:含 recommend / invite 关键字
if (s.indexOf('recommend') !== -1 || s.indexOf('invite') !== -1) return true;
return false;
})(item.componentName)">
<components-recommend-diy :value="item"></components-recommend-diy>
</template>
<!-- 自定义扩展组件 -->
<diy-comp-extend :value="item"></diy-comp-extend>
</view>
@@ -286,15 +273,9 @@
<script>
// 组件组展示
import DiyMinx from './minx.js'
// ✅ 显式 import 我的邀请码 DIY 组件(同级文件,相对路径引入,不依赖 @ 别名)
import ComponentsRecommendDiy from './components-recommend-diy.vue'
export default {
name: 'diy-group',
components: {
// ✅ 显式注册:避免 easycom 没配置此目录时导致 "Unknown custom element"
ComponentsRecommendDiy
},
props: {
diyData: {
type: Object
@@ -358,21 +339,6 @@ export default {
? JSON.parse(this.$store.state.diyGroupShowModule)
: null;
// ✅ 调试日志:showModuleData 白名单如果存在,会严格过滤,推荐码组件没加进白名单就会被过滤掉 → 控制台能直接看到
try {
if (showModuleData && showModuleData.length) {
console.log('[DIY-GROUP][diyDataArray] showModuleData 白名单 = ', JSON.stringify(showModuleData));
var hasRecommendInWhite = false;
showModuleData.forEach(function(n){
var s = String(n || '').toLowerCase();
if (s.indexOf('recommend') !== -1 || s.indexOf('invite') !== -1) hasRecommendInWhite = true;
});
if (!hasRecommendInWhite) {
console.warn('[DIY-GROUP][diyDataArray] ⚠️ 白名单 showModuleData 里没有推荐码/邀请码组件名,组件会被过滤掉不显示!请在后台 DIY 编辑器里的"显示模块"中勾选上该组件');
}
}
} catch (e) {}
if (!showModuleData || !showModuleData.length) {
return this.processedData || [];
}
@@ -381,25 +347,9 @@ export default {
return [];
}
// ✅ 关键修复:白名单过滤时,对推荐码组件也做宽松匹配(白名单里是 RecommendCode 但后端是 Recommend 也能过)
// 之前严格 includes(item.componentName) 会漏掉大小写/命名不一致的情况
var recKeys = ['myinvitecode','recommendcode','recommend','invitecode','recommendcodediy'];
return (this.processedData || []).filter(item => {
// 1) 严格命中白名单
if (showModuleData.includes(item.componentName)) return true;
// 2) 推荐码组件宽松命中:item 是推荐码类型 && 白名单里有任意推荐码关键字
var itemName = String(item.componentName || '').toLowerCase();
var isRecommendItem = (recKeys.indexOf(itemName) !== -1) || itemName.indexOf('recommend') !== -1 || itemName.indexOf('invite') !== -1;
if (isRecommendItem) {
var whiteHasRecommend = false;
showModuleData.forEach(function(n){
var s = String(n || '').toLowerCase();
if (recKeys.indexOf(s) !== -1 || s.indexOf('recommend') !== -1 || s.indexOf('invite') !== -1) whiteHasRecommend = true;
});
if (whiteHasRecommend) return true;
}
return false;
});
return (this.processedData || []).filter(item =>
showModuleData.includes(item.componentName)
);
}
},
methods: {
@@ -416,25 +366,7 @@ export default {
this.processedData = [];
return;
}
// ✅ 调试日志:后台保存组件后,用户在控制台能看到 ALL componentName 列表
// 方便定位:"后端加了组件但前端不显示" → 要么 componentName 没匹配,要么 showModuleData 过滤掉了
try {
const names = this.diyGlobalData.value.map(function(it){ return it && it.componentName ? it.componentName : '(no name)'; });
console.log('[DIY-GROUP][processData] 所有DIY组件名列表 = ', JSON.stringify(names));
// 进一步打印哪些是推荐码相关的
var matched = [];
var recommendKeys = ['myinvitecode','recommendcode','recommend','invitecode','recommendcodediy','recommend','invite'];
this.diyGlobalData.value.forEach(function(it, idx){
if (!it || !it.componentName) return;
var s = String(it.componentName).toLowerCase();
if (recommendKeys.indexOf(s) !== -1 || s.indexOf('recommend') !== -1 || s.indexOf('invite') !== -1) {
matched.push('idx=' + idx + ', name=' + it.componentName);
}
});
if (matched.length) console.log('[DIY-GROUP][processData] 命中推荐码/邀请码组件 = ', matched.join('; '));
} catch (e) {}
this.processedData = this.diyGlobalData.value.map((item, index) => {
const newItem = this.$util.deepClone(item);

View File

@@ -0,0 +1,17 @@
<template>
<view data-component-name="diy-recommend-code">
23q43214321432143243324
</view>
</template>
<script>
// 图标展示
import DiyMinx from './minx.js'
export default {
name: 'diy-recommend-code',
mixins: [DiyMinx],
computed: {
}
}
</script>

View File

@@ -51,6 +51,7 @@
"diy-pintuan": "view",
"diy-presale": "view",
"diy-quick-nav": "view",
"diy-recommend-code": "view",
"diy-rich-text": "view",
"diy-rubik-cube": "view",
"diy-search": "view",
@@ -1294,6 +1295,7 @@
"diy-pintuan": "view",
"diy-presale": "view",
"diy-quick-nav": "view",
"diy-recommend-code": "view",
"diy-rich-text": "view",
"diy-rubik-cube": "view",
"diy-search": "view",