Files
MBTI_wang/miniprogram/utils/discInsights.js

70 lines
2.8 KiB
JavaScript
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.

/**
* DISC 深度洞察:主类型 → 心智模式 / 决策倾向 / 能量来源 / 压力反应
* 支持单字母主类型D/I/S/C与组合如 "S+I"),取首字母作为主导。
*/
// 8 维:心智 / 决策 / 能量 / 压力 / 沟通 / 领导 / 恋爱 / 团队角色
const DISC_INSIGHTS = {
D: { mind: '力量型 · 动能主导', decision: '目标·速决', energy: '挑战·掌控', stress: '压迫他人', comm: '直接', lead: '铁腕推进', love: '保护欲强', team: '业务开拓' },
I: { mind: '活跃型 · 影响主导', decision: '氛围·直觉', energy: '社交·舞台', stress: '注意力分散', comm: '热情表达', lead: '激励型', love: '浪漫热烈', team: '气氛担当' },
S: { mind: '和平型 · 稳定主导', decision: '共识·耐心', energy: '关系·节奏', stress: '回避冲突', comm: '温和倾听', lead: '稳定协调', love: '默默陪伴', team: '人和支持' },
C: { mind: '完美型 · 分析主导', decision: '规则·数据', energy: '独立·细节', stress: '过度自省', comm: '精准严谨', lead: '标准驱动', love: '精选长期', team: '质量把关' }
}
const DISC_TAGS = {
D: ['高执行', '目标感', '控制'],
I: ['影响力', '乐观', '高社交'],
S: ['可靠', '稳定', '协作'],
C: ['严谨', '分析', '系统']
}
const DISC_END_LABELS = {
D: { label: '力量 D', emoji: '🔥', color: '#ef4444', desc: '主导型:行动、速度、结果' },
I: { label: '活跃 I', emoji: '🎉', color: '#f59e0b', desc: '影响型:表达、社交、氛围' },
S: { label: '和平 S', emoji: '🌿', color: '#10b981', desc: '稳定型:耐心、协作、节奏' },
C: { label: '完美 C', emoji: '🎯', color: '#3b82f6', desc: '严谨型:分析、规则、数据' }
}
function toFirstLetter(code) {
if (!code) return ''
return String(code).trim().toUpperCase().charAt(0)
}
function getDiscInsight(code) {
const k = toFirstLetter(code)
return DISC_INSIGHTS[k] || null
}
function getDiscTags(code) {
const k = toFirstLetter(code)
return DISC_TAGS[k] || []
}
function getDiscEndMeta(letter) {
return DISC_END_LABELS[letter] || null
}
function buildDiscDimensions(result) {
const p = (result && result.percentages) || {}
const pi = (result && result.percentagesInt) || {}
return ['D', 'I', 'S', 'C'].map((k) => {
const meta = DISC_END_LABELS[k]
return {
key: k,
label: meta.label,
emoji: meta.emoji,
desc: meta.desc,
dashClass: 'dash-fill--disc-' + k.toLowerCase(),
percentage: pi[k] != null ? pi[k] : (p[k] != null ? Math.round(Number(p[k]) || 0) : 0),
raw: p[k] != null ? Number(p[k]) || 0 : (pi[k] != null ? pi[k] : 0)
}
})
}
module.exports = {
getDiscInsight,
getDiscTags,
getDiscEndMeta,
buildDiscDimensions
}