|
|
@@ -47,6 +47,32 @@
|
|
|
</view>
|
|
|
<text class="explain-text">{{ actionScore >= 80 ? '家庭关系和谐,家人沟通顺畅。' : actionScore >= 60 ? '家庭关系一般,建议多花时间陪伴家人。' : '家庭关系需要改善,建议进行家庭沟通活动。' }}</text>
|
|
|
</view>
|
|
|
+ <!-- 行维度画像 - 总体说明 -->
|
|
|
+ <view class="dimension-portrait-section" v-if="isLoggedIn && actionPortrait">
|
|
|
+ <view class="section-header">
|
|
|
+ <text class="section-title">🧭 行维度画像</text>
|
|
|
+ <text class="portrait-tier">{{ actionPortrait.tierLabel }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="portrait-summary">
|
|
|
+ <text class="portrait-desc">{{ actionPortrait.summary }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="portrait-dimensions">
|
|
|
+ <view class="portrait-dim-item" v-for="dim in actionPortrait.dims" :key="dim.code">
|
|
|
+ <view class="portrait-dim-header">
|
|
|
+ <view class="portrait-dim-icon" :style="{ background: dim.color }">{{ dim.icon }}</view>
|
|
|
+ <text class="portrait-dim-name">{{ dim.name }}</text>
|
|
|
+ <text class="portrait-dim-score">{{ dim.score }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="portrait-dim-bar-track">
|
|
|
+ <view class="portrait-dim-bar-fill" :style="{ width: dim.score + '%', background: dim.color }"></view>
|
|
|
+ </view>
|
|
|
+ <text class="portrait-dim-desc">{{ dim.desc }}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="portrait-tip" v-if="actionPortrait.tip">
|
|
|
+ <text class="portrait-tip-text">💡 {{ actionPortrait.tip }}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
<!-- 关系六维 -->
|
|
|
<dimension-sub-dims
|
|
|
v-if="isLoggedIn && actionSubDims.length > 0"
|
|
|
@@ -396,6 +422,7 @@ export default {
|
|
|
}
|
|
|
return scores
|
|
|
},
|
|
|
+<<<<<<< Updated upstream
|
|
|
|
|
|
/** 关系解读状态:good(≥80) | warn(≥60) | bad(<60) */
|
|
|
scoreExplainLevel: function() {
|
|
|
@@ -408,6 +435,73 @@ export default {
|
|
|
/** 关系解读卡片状态类(用于 :class 绑定) */
|
|
|
scoreExplainClass: function() {
|
|
|
return 'score-explain-' + this.scoreExplainLevel
|
|
|
+=======
|
|
|
+ actionPortrait: function() {
|
|
|
+ var self = this
|
|
|
+ if (!this.isLoggedIn) return null
|
|
|
+ var member = this.currentMemberEnergies
|
|
|
+ if (!member) return null
|
|
|
+ var role = this.role || uni.getStorageSync('currentRole') || ''
|
|
|
+ var isParent = (role === 'parent')
|
|
|
+ var parentDims = [
|
|
|
+ { key: 'actionParentChild', label: '亲子关系', color: '#10B981', desc: '与子女的沟通与陪伴质量' },
|
|
|
+ { key: 'actionMarital', label: '夫妻关系', color: '#FF6B9D', desc: '夫妻间的理解与支持' },
|
|
|
+ { key: 'actionParental', label: '父母关系', color: '#F59E0B', desc: '与长辈的相处模式' },
|
|
|
+ { key: 'actionLeadership', label: '领导关系', color: '#6366F1', desc: '职场上下级沟通能力' },
|
|
|
+ { key: 'actionSociality', label: '社会性', color: '#FF8C42', desc: '社会交往与参与度' },
|
|
|
+ { key: 'actionInterpersonal', label: '人际韧性', color: '#06B6D4', desc: '应对人际关系挫折的能力' }
|
|
|
+ ]
|
|
|
+ var childDims = [
|
|
|
+ { key: 'actionChildParentChild', label: '亲子关系', color: '#10B981', desc: '与父母的互动质量' },
|
|
|
+ { key: 'actionSibling', label: '同胞关系', color: '#FF6B9D', desc: '兄弟姐妹间的关系' },
|
|
|
+ { key: 'actionRelative', label: '亲属关系', color: '#F59E0B', desc: '与亲戚的交往频率' },
|
|
|
+ { key: 'actionTeacherStudent', label: '师生关系', color: '#6366F1', desc: '与老师的沟通情况' },
|
|
|
+ { key: 'actionChildSociality', label: '社会性', color: '#FF8C42', desc: '学校与社会参与度' },
|
|
|
+ { key: 'actionChildInterpersonal', label: '人际韧性', color: '#06B6D4', desc: '应对社交困难的能力' }
|
|
|
+ ]
|
|
|
+ var dims = isParent ? parentDims : childDims
|
|
|
+ var result = { overall: 0, tierLabel: '', summary: '', dims: [], tip: '' }
|
|
|
+ var total = 0
|
|
|
+ var count = 0
|
|
|
+ var dimList = []
|
|
|
+ for (var i = 0; i < dims.length; i++) {
|
|
|
+ var key = dims[i].key
|
|
|
+ var score = member[key] || 0
|
|
|
+ if (isNaN(score)) score = 0
|
|
|
+ score = Math.max(0, Math.min(100, Number(score)))
|
|
|
+ total += score
|
|
|
+ count++
|
|
|
+ dimList.push({
|
|
|
+ code: key,
|
|
|
+ name: dims[i].label,
|
|
|
+ score: Math.round(score),
|
|
|
+ color: dims[i].color,
|
|
|
+ desc: dims[i].desc
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (count === 0) return null
|
|
|
+ result.overall = Math.round(total / count)
|
|
|
+ result.dims = dimList
|
|
|
+ var o = result.overall
|
|
|
+ if (o >= 80) {
|
|
|
+ result.tierLabel = '关系大师'
|
|
|
+ result.summary = '您的家庭关系和谐稳定,与家人建立了深厚的信任纽带。'
|
|
|
+ result.tip = '继续保持沟通习惯,也可分享经验帮助其他家庭'
|
|
|
+ } else if (o >= 60) {
|
|
|
+ result.tierLabel = '关系进取者'
|
|
|
+ result.summary = '您的家庭关系处于良好水平,具备基本的沟通能力。'
|
|
|
+ result.tip = '多倾听家人心声,主动表达关爱,持续提升关系质量'
|
|
|
+ } else if (o >= 40) {
|
|
|
+ result.tierLabel = '关系探索者'
|
|
|
+ result.summary = '您的家庭关系正在建立基础,需要更多沟通与理解。'
|
|
|
+ result.tip = '建议定期进行家庭活动,增进彼此了解与信任'
|
|
|
+ } else {
|
|
|
+ result.tierLabel = '关系关怀者'
|
|
|
+ result.summary = '您可能面临家庭关系挑战,需要更多关注与努力。'
|
|
|
+ result.tip = '建议寻求专业家庭辅导,或从简单的家庭对话开始改善'
|
|
|
+ }
|
|
|
+ return result
|
|
|
+>>>>>>> Stashed changes
|
|
|
}
|
|
|
},
|
|
|
onShow() {
|
|
|
@@ -1073,4 +1167,92 @@ export default {
|
|
|
.bottom-spacer {
|
|
|
height: 40rpx;
|
|
|
}
|
|
|
+
|
|
|
+/* 维度画像样式 */
|
|
|
+.dimension-portrait-section {
|
|
|
+ margin: 24rpx 30rpx;
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 24rpx;
|
|
|
+ padding: 32rpx 24rpx;
|
|
|
+ box-shadow: 0 4rpx 20rpx rgba(16, 185, 129, 0.12);
|
|
|
+ border: 2rpx solid rgba(16, 185, 129, 0.1);
|
|
|
+}
|
|
|
+.portrait-tier {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #10B981;
|
|
|
+ font-weight: bold;
|
|
|
+ margin-left: 16rpx;
|
|
|
+}
|
|
|
+.portrait-summary {
|
|
|
+ margin-bottom: 24rpx;
|
|
|
+}
|
|
|
+.portrait-desc {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #666;
|
|
|
+ line-height: 1.6;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+.portrait-dimensions {
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+}
|
|
|
+.portrait-dim-item {
|
|
|
+ margin-bottom: 18rpx;
|
|
|
+}
|
|
|
+.portrait-dim-header {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 6rpx;
|
|
|
+}
|
|
|
+.portrait-dim-icon {
|
|
|
+ width: 36rpx;
|
|
|
+ height: 36rpx;
|
|
|
+ border-radius: 18rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ margin-right: 10rpx;
|
|
|
+ font-size: 20rpx;
|
|
|
+ background: linear-gradient(135deg, #D1FAE5, #A7F3D0);
|
|
|
+}
|
|
|
+.portrait-dim-name {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #333;
|
|
|
+ flex: 1;
|
|
|
+}
|
|
|
+.portrait-dim-score {
|
|
|
+ font-size: 26rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #10B981;
|
|
|
+ margin-right: 12rpx;
|
|
|
+}
|
|
|
+.portrait-dim-bar-track {
|
|
|
+ height: 10rpx;
|
|
|
+ background: #D1FAE5;
|
|
|
+ border-radius: 5rpx;
|
|
|
+ overflow: hidden;
|
|
|
+ margin-bottom: 4rpx;
|
|
|
+ flex: 1;
|
|
|
+}
|
|
|
+.portrait-dim-bar-fill {
|
|
|
+ height: 100%;
|
|
|
+ border-radius: 5rpx;
|
|
|
+ transition: width 0.3s ease;
|
|
|
+}
|
|
|
+.portrait-dim-desc {
|
|
|
+ font-size: 20rpx;
|
|
|
+ color: #666;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+.portrait-tip {
|
|
|
+ padding: 16rpx 20rpx;
|
|
|
+ background: linear-gradient(135deg, #F0FFF4, #E6FFF2);
|
|
|
+ border-radius: 12rpx;
|
|
|
+ border-left: 4rpx solid #10B981;
|
|
|
+ margin-top: 16rpx;
|
|
|
+}
|
|
|
+.portrait-tip-text {
|
|
|
+ font-size: 22rpx;
|
|
|
+ color: #065F46;
|
|
|
+ line-height: 1.5;
|
|
|
+}
|
|
|
</style>
|