feat: 增加豆包请求接口

This commit is contained in:
kenny
2025-10-13 17:54:02 +08:00
parent 0b96a81021
commit 0c5a32ae3e
7 changed files with 532 additions and 397 deletions
+13 -2
View File
@@ -1,8 +1,19 @@
import { request } from "../../http/index.js";
let baseUrl = "https://llshop.zglvling.com/soapi/";
// let baseUrl = "https://test.zglvling.com/soapi/";
const praiseTextApi = (params) =>
request.post(baseUrl + "ai/praiseTexttwo", params);
// const praiseTextApi = (params) =>
// request.post(baseUrl + "ai/praiseTexttwo", params);
const praiseTextApi = (params) => {
console.log('params: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', params);
return request.post('https://ark.cn-beijing.volces.com/api/v3/chat/completions', params);
}
const userFaceInoApi = (params) =>
request.post(baseUrl + "userinfo/get_user_face_info", params);
const hairstyleListApi = (params) =>
@@ -8,6 +8,7 @@ const props = defineProps({
default: '黄一白',
},
});
const json = ref( [
{
type: '0',
@@ -34,25 +35,25 @@ const json = ref( [
value: '黄黑皮'
},
])
watch(
() => props.skinColor,
(newVal) => {
// console.log(json.value.find(item => item.value === newVal), '22');
if(!json.value.find(item => item.value === newVal)) {
// alert(`当前接口返回肤色与UI不一致${newVal}`)
}
json.value = json.value.map(item => ({...item, checked: item.value === newVal}));
// console.log('json.value: ', json.value);
},
{deep: true, immediate: true}
);
</script>
<template>
<view class="container">
肤色
<template v-for="item of json">
<CheckBox :checked="item.checked">{{ item.value }}</CheckBox>
</template>
<CheckBox :checked="item.checked" :key="index" v-for="(item, index) in json">{{ item.value }}</CheckBox>
</view>
</template>
@@ -18,6 +18,8 @@ const props = defineProps({
},
});
console.log('geneticStyle -------------------------------------', props.gender)
const styleTypeDesc = ref("");
const styleTypeJson = ref();
const showPreview = ref(false);
@@ -63,21 +65,21 @@ const closePreview = (e) => {
</view>
</view>
<view class="pic-container">
<image
v-for="(pic, index) in picList"
:key="index"
:src="pic"
<image
v-for="(pic, index) in picList"
:key="index"
:src="pic"
class="pic"
mode="aspectFill"
@click="previewImage(pic)"
></image>
</view>
<!-- 图片预览遮罩层 -->
<view v-if="showPreview" class="preview-mask" @click="closePreview">
<view class="preview-container" @click.stop>
<image
:src="currentPreviewImage"
<image
:src="currentPreviewImage"
class="preview-image"
mode="widthFix"
@click="closePreview"
+2 -7
View File
@@ -20,7 +20,7 @@
<view class="info-main">
<view class="info-basic">
<text class="gender">{{ userFaceInfo.sex }}</text>
<text class="birthday">| {{ userFaceInfo.createTime }}</text>
<text class="birthday">| {{ userFaceInfo.birthday }}</text>
</view>
<view class="info-desc">
{{ userFaceInfo.feature }}
@@ -63,17 +63,12 @@ const props = defineProps({
},
});
// console.log('9999999999999999999999999', props.userFaceInfo)
const userFaceInfo = ref({});
watch(
() => props.userFaceInfo,
(newVal) => {
console.log('newVal: xxxxxxxx', newVal);
// console.log('newVal: xxxxxxxx', newVal);
userFaceInfo.value = newVal;
},
{ deep: true, immediate: true }
+150 -374
View File
@@ -23,32 +23,49 @@
paddingTop: (classFixed === '' ? 0 : 60) + 'px',
overflowY: 'hidden',
}"
v-if="collect"
>
<view v-if="activeTab === 0">
<view class="style-type">
<!-- 基因风格-->
<!--
基因风格
warning:
1三个图片还未给
2type字段还未给
-->
<genetic-style
:gender="styleType.gender"
:gender="collect.gender"
:pic-list="[
styleType.eye_img_url ?? '',
styleType.triangular_area_img_url ?? '',
styleType.full_face_img_url ?? '',
collect.eye_img_url ?? '',
collect.triangular_area_img_url ?? '',
collect.full_face_img_url ?? '',
]"
:styleType="styleType.type"
:styleType="collect.type"
/>
<!-- 肤色-->
<SkinColor :skinColor="styleType?.complexion" />
<!-- <SkinColor :skinColor="styleType?.complexion" /> -->
<SkinColor :skinColor="collect?.complexion" />
<FacialColorLatitude
:hue="styleType?.hue ?? 0"
:chroma="styleType?.chroma ?? 0"
:luminance="styleType?.luminance ?? 0"
:hue="collect?.hue ?? 0"
:chroma="collect?.chroma ?? 0"
:luminance="collect?.luminance ?? 0"
/>
<BodyType
:body-type="collect?.somatotype"
:gender="collect?.gender"
/>
<!-- 轮廓类型-->
<template v-if="customFigure">
<SensoryTypes
:type="styleType.straight_total_score_t"
:aiDesc="customFigure?.sensory?.desc"
:ai-desc="customFigure?.sensory?.desc"
/>
<!-- 量感类型-->
<TypeOfMass
@@ -61,23 +78,28 @@
:ai-desc="customFigure?.movement?.desc"
/>
<!-- 体型-->
<BodyType
<!-- <BodyType
:body-type="styleType?.somatotype_t"
:gender="styleType?.gender"
/> -->
</template>
<template v-if="false">
<!-- 搭配趋势 -->
<CustomSwiper :items="items" />
<!-- 个人分格描述报告-->
<StyleDiagnosticReport :html="customerStyle" />
<BottomPic
:style-type="styleType?.type"
:psychological-style="styleType?.psychological_style"
:gender="styleType.gender"
/>
</template>
<!-- 搭配趋势 -->
<CustomSwiper :items="items" />
<!-- 个人分格描述报告-->
<StyleDiagnosticReport :html="customerStyle" />
<BottomPic
:style-type="styleType?.type"
:psychological-style="styleType?.psychological_style"
:gender="styleType.gender"
/>
</view>
</view>
<view v-else-if="activeTab === 1">
@@ -392,7 +414,7 @@
</template>
<script setup>
import { ref, onMounted, onUnmounted } from "vue";
import { ref, onMounted, onUnmounted, watchEffect } from "vue";
import Header from "./component/Header/index.vue";
import Tabs from "./component/Tabs/index.vue";
import {
@@ -420,9 +442,12 @@ import TypeOfMass from "./component/FirstStyleType/TypeOfMass.vue";
import Movementtype from "./component/FirstStyleType/Movementtype.vue";
import ReportApi from "../../sheep/api/report";
import { onLoad } from '@dcloudio/uni-app';
import { onLoad } from '@dcloudio/uni-app';
import {hairText, shengxiaoText, shengxiaoSystem_prompt, statureText} from '@/constant/aiText'
import { praiseTextApi } from '@/sheep/api/doubao'
const {
praiseTextApi,
// praiseTextApi,
getStyleApi,
exchangeHairHistoryByTaskId,
wardrobeListApi,
@@ -446,7 +471,10 @@ onLoad((options) => {
const {data} = JSON.parse(res2.result[0].thridResp)
collect.value = Object.assign({}, JSON.parse(res1.data.dataJson), data.face_figure)
const target = Object.assign({}, JSON.parse(res1.data.dataJson), data.face_figure)
target.gender = target.sex
collect.value = target
console.log('collect.value: ', collect.value);
})
@@ -486,6 +514,8 @@ const enterType = routes.get("enterType"); // 1: 个人诊断报告 2: 发型试
let scrollHeight = ref(0);
const activeTab = ref(0);
const tabsList = ref([
{ name: "风格类型", icon: "icon-style" },
{ name: "色彩类型", icon: "icon-color" },
@@ -505,8 +535,12 @@ const chageSwiper = (e) => {
current.value = e.detail.current;
colorTypeInfo.value = newColorTypeList.value[current.value];
};
const clothesList = ref([]);
const styleType = ref({});
const chageSwiperBtn = (x) => {
if (x === -1 && current.value !== 0) {
current.value--;
@@ -598,186 +632,72 @@ const getPraiseText = (callWord, type) => {
}
let customKey = `客户特征:
性别:${styleType?.value?.gender}
出生年月日:${styleType?.value?.checkTime}
年龄:${styleType?.value?.age}
身高:${styleType?.value?.stature}
体重:${styleType?.value?.bodyWeight}
量感类型:${styleType?.value?.total_sense_of_quantity_t}
轮廓类型:${styleType?.value?.straight_total_score_t}
动静类型:${styleType?.value?.dynamic_static_t}
基因风格类型:${styleType?.value?.type}
心理风格${styleType?.value?.psychological_style}
喜欢配色:${styleType?.value?.color}
心理量感类型${styleType?.value?.ling_of_quantity}
心理曲直类型${styleType?.value?.right_and_wrong}
心理动静类型:${styleType?.value?.dynamic_and_static}
体型分类${styleType?.value?.somatotype}
存在的问题${styleType?.value?.question}
修饰部位${styleType?.value?.purpose}
场合需求${styleType?.value?.occasion_dressing}
三庭五眼特征${styleType?.value?.three_courts_five_eyes}
亮度${styleType?.value?.luminance}
嘴型${styleType?.value?.mouth_shape}
对比度:${styleType?.value?.contrast}
法令纹${styleType?.value?.nasolabial_folds}
直曲总分${styleType?.value?.straight_total_score}
眉形${styleType?.value?.camber}
眼型:${styleType?.value?.ocular_form}
瞳色${styleType?.value?.eye_color}
瞳距${styleType?.value?.interpupillary_distance}
肤色${styleType?.value?.complexion}
脖长${styleType?.value?.neck_length}
脸型${styleType?.value?.feature}
${styleType?.value?.chroma}
色相${styleType?.value?.hue}
量感总分${styleType?.value?.total_sense_of_quantity}
面部年龄${styleType?.value?.facial_age}
面部立体度${styleType?.value?.Facial_three_dimensionality}
面部颜色对比度${styleType?.value?.face_color_contrast}
鼻型${styleType?.value?.nose_type}
鼻子立体度:${styleType?.value?.nose_stereo_degree}
肤色${styleType?.value?.complexion}
亮度${styleType?.value?.luminance}
四季色彩季型${styleType?.value?.sj_color_type}
职业: ${styleType?.value?.work}
最在意谁的意见${styleType?.value?.attention}
性别:${collect?.value?.gender}
出生年月日:${collect?.value?.birthday}
年龄:${collect?.value?.age}
身高:${collect?.value?.height}
体重:${collect?.value?.weight}
量感类型:${collect?.value?.total_sense_of_quantity_t}
轮廓类型:${collect?.value?.straight_total_score_t}
动静类型:${collect?.value?.dynamic_static_t}
基因风格类型${collect?.value?.type}
心理风格${collect?.value?.psychological_style}
喜欢配色${collect?.value?.color}
心理量感类型:${collect?.value?.ling_of_quantity}
心理曲直类型${collect?.value?.right_and_wrong}
心理动静类型${collect?.value?.dynamic_and_static}
体型分类${collect?.value?.somatotype}
存在的问题${collect?.value?.question}
修饰部位${collect?.value?.purpose}
场合需求${collect?.value?.occasion_dressing}
三庭五眼特征${collect?.value?.three_courts_five_eyes}
度:${collect?.value?.luminance}
嘴型${collect?.value?.mouth_shape}
对比度${collect?.value?.contrast}
法令纹${collect?.value?.nasolabial_folds}
直曲总分${collect?.value?.straight_total_score}
眉形${collect?.value?.camber}
眼型${collect?.value?.ocular_form}
瞳色${collect?.value?.eye_color}
瞳距${collect?.value?.interpupillary_distance}
色:${collect?.value?.complexion}
脖长${collect?.value?.neck_length}
脸型${collect?.value?.feature}
色度${collect?.value?.chroma}
色相${collect?.value?.hue}
量感总分${collect?.value?.total_sense_of_quantity}
面部年龄${collect?.value?.facial_age}
面部立体度:${collect?.value?.Facial_three_dimensionality}
面部颜色对比度${collect?.value?.face_color_contrast}
鼻型${collect?.value?.nose_type}
鼻子立体度${collect?.value?.nose_stereo_degree}
肤色:${collect?.value?.complexion}
亮度${collect?.value?.luminance}
四季色彩季型:${collect?.value?.sj_color_type}
职业: ${collect?.value?.work}
最在意谁的意见:${collect?.value?.attention}
强调:
1、客户的性别是${styleType?.value?.gender},千万要以${styleType?.value?.gender}性的角度去产出数据,切记,这点十分重要
1、客户的性别是${collect?.value?.gender},千万要以${collect?.value?.gender}性的角度去产出数据,切记,这点十分重要
2、客户为男性的时候,严禁出现裙装穿搭建议
`;
// if (
// openId === "oZRaI4ojHLTcwuQ6yix3QV5sSe0c" ||
// openId === "oZRaI4tfDP-HgQmyjN7GOqyv4gB0"
// ) {
// customKey += `职业: ${styleType?.value?.work}, 最在意谁的意见:${styleType?.value?.attention},`;
// }
// customKey += `强调:
// 1、客户的性别是${styleType?.value?.gender},千万要以${styleType?.value?.gender}性的角度去产出数据,切记,这点十分重要
// 2、客户为男性的时候,严禁出现裙装穿搭建议`;
if (callWord === "one") {
params.tabType = "hair";
params.text = `你是个人形象美学顾问,请输出详细的发型风格诊断报告 。
${customKey}
特别注意: 1:你要根据客户特征给出详细的风格诊断报告 2:以v-html格式输出,只能以div、p、ul、li、ol、span等标签、 3:你要返回给我的结果只能是字符串格式,不能是其它格式 4:除了我要求的格式内容外,不要有额外多余的任何不相干的文字
风格诊断报告格式如下:
一、核心风格定位总览
二、核心风格基因解析
三、脸型与头型适配优化
四、发型长度与轮廓推荐
五、关键细节设计:刘海与发色
六、发型与整体造型适配建议
七、避雷指南:需避免的发型雷区
八、护理与造型小贴士
九、总结:核心发型逻辑与风格统一
正确格式案例如下:
{
<div>
<div>一、核心风格定位总览<p>结合您的面部特征(直线型为主,3:2 直曲比)、中大量感(4:3 大量感得分)、方形脸 + 中高立体度五官,以及 25-35
岁的成熟活力需求,核心发型风格为「直线型力量感为主,融合结构化层次设计」,关键词:大气、利落、现代感、沉稳干练。发型需突出面部立体优势,强化纵向线条延伸感,通过轮廓设计平衡整体比例,同时利用顶部蓬松度与垂坠感提升视觉高度,适配冷冬型配色偏好。
</p>
<div>二、核心风格基因解析<div>1. 直曲属性(3:2 直>曲)<ul>
<li>适配线条:优先直线条剪裁(直发、几何层次短发、低弧度波浪),避免小卷、羊毛卷等强曲线元素,防止与方形脸、单眼皮的直线型特征冲突。</li>
<li>细节处理:发尾做锐利直角或轻微外翘(直线型小弧度)增强力量感;长卷发控制直径≥5cm 大波浪,卷度集中发中下部,避免头皮膨胀感。</li>
</ul>
<div>2. 量感属性(中大量感,总分 1<ul>
<li>重量分布:整体「上厚下薄」,顶部增加 2-3cm 蓬松度(纵向拉高),发尾轻薄处理(减轻视觉重量),平衡中大量感大气特质,避免过轻(超短发)或过重(厚重齐刘海)。</li>
<li>长度建议:中长发(肩下 15-20cm)或中短发(肩以上 5-10cm)最优,过短显头重脚轻,过长(腰际以下)压身高比例。</li>
</ul>
<div>3. 面部立体度(6 分,中高立体度)<ul>
<li>轮廓设计:避免贴头皮「扁平感」,保留头顶至耳上 2-3cm 蓬松度,通过层次剪裁拉长脸型,弱化方形下颌;中高鼻梁优势用侧分刘海、露额发型强化。</li>
</ul>
<div>三、脸型与头型适配优化<div>1. 方形脸(硬朗轮廓,需柔化处理)<ul>
<li>避坑点:避免一刀切齐发尾(强化方形轮廓)、超短发(突出下颌角)、厚重齐刘海(缩短脸型显头大)。</li>
<li>加分项:侧分(4:6 分缝)、高层次剪裁(减轻面部宽度)、柔和发尾(外翘 / 内扣),柔化方下颌,配合适中脖长拉长脸型比例。</li>
</ul>
<div>2. 身材协调(显高需求适配)<ul>
<li>纵向线条强化:顶部蓬松度 2-3cm 打造「高颅顶」,纵向延伸视觉比例,适配 180cm 身高;避免贴头皮或扁平顶部设计。</li>
<li>视觉重心转移:扎发时(高马尾 / 丸子头),发顶蓬松度与头顶高度对齐,强化「上提」效果,转移小腿注意力。</li>
</ul>
<div>四、发型长度与轮廓推荐<div>1. 首选:中长发(肩下 15-20cm,结构化层次)<ul>
<li>核心设计:<ul>
<li>层次:顶部至耳上 2-3cm 高层次(增加蓬松),中部至发尾 1-2cm 低层次(保持垂坠),避免贴脸;</li>
<li>发尾:轻微外翘 / 不规则剪裁(打破硬朗感),拒绝死板齐尾;</li>
<li>轮廓:「倒三角」型(顶蓬尾收),纵向延伸比例。</li>
</ul>
</li>
<li>适配场景:通勤(低马尾 + 发尾外翘)、休闲(直发披散 + 侧分)、正式(中高盘发 + 顶部蓬松)。</li>
</ul>
<div>2. 次选:中短发(肩以上 5-10cm,几何剪裁)<ul>
<li>核心设计:<ul>
<li>长度:齐肩 / 肩以上 5-10cm,露颈部线条显高;</li>
<li>层次:两侧剪至下颌线以下(遮盖方下颌),「A」型轮廓修饰面部宽度;</li>
<li>扎发变体:半扎高马尾(顶蓬尾散),强化纵向线条转移注意力。</li>
</ul>
</li>
</ul>
<div>3. 慎选:超短发(下巴以上)/ 长直发(腰际以下)<ul>
<li>超短发暴露颈部,与中大量感不匹配显头重;长直发无层次显拖沓,增加下半身视觉重量,与显高需求冲突。</li>
</ul>
<div>五、关键细节设计:刘海与发色<div>1. 刘海:拒绝厚重,突出纵向线条<ul>
<li>推荐刘海:<ul>
<li>侧分长刘海(4:6 分缝):长度至颧骨下方,直线剪裁露额头 2/3,拉长脸型,适配单眼皮显利落;</li>
<li>法式刘海:窄宽度(眼尾内侧起),轻薄修饰发际线,不遮眉眼,符合冷冬清爽感。</li>
</ul>
</li>
<li>避雷刘海:齐刘海(缩短脸型显方)、眉上短刘海(与方脸冲突显突兀)。</li>
</ul>
<div>2. 发色:冷冬型 + 黄二白适配,高对比显白<ul>
<li>主色调推荐:<ul>
<li>冷调深色系:雾感黑茶色、冷棕黑、蓝黑色(显白提气色,与深瞳对比适中,符合冷冬配色);</li>
<li>挑染点缀:发尾 1-2 缕冷灰色 / 雾蓝色(≤10% 面积),增加层次提升现代感。</li>
</ul>
</li>
<li>避雷发色:暖调浅色系(金棕 / 橙红显黄)、全头漂浅(奶奶灰 / 银白伤发质,与中大量感气质不符显轻浮)。</li>
</ul>
<div>六、发型与整体造型适配建议<div>1. 穿搭风格呼应<ul>
<li>通勤风(衬衫 / 西装):高马尾(顶蓬尾齐,高度与眉峰平)或侧分直发,露耳后线条与利落穿搭统一;</li>
<li>休闲风(T 恤 / 牛仔裤):半扎高马尾 + 碎发(发尾外翘)或鲨鱼夹高盘发(留龙须发),增加随性;</li>
<li>正式风(西装 / 礼服):中高盘发(顶蓬固定)或低马尾(尾端层次),简约大气。</li>
</ul>
<div>2. 显高优化技巧<ul>
<li>顶部蓬松度≥2cm,纵向延伸视觉高度;扎发马尾高度不低于耳垂;</li>
<li>搭配及膝 / 过膝下装,配合纵向发型线条,整体拉长比例转移小腿注意力。</li>
</ul>
<div>七、避雷指南:需避免的发型雷区<ul>
<li>贴头皮发型:顶蓬<2cm 显脸大头扁,与 180cm 身高比例失衡;</li>
<li>厚重齐发尾:强化方形下颌线条,显脸宽;</li>
<li>小卷 / 羊毛卷:强曲线与直线型面部冲突,增加横向宽度显头大;</li>
<li>过短刘海:眉上短刘海与单眼皮、方脸风格冲突,显突兀。</li>
</ul>
<div>八、护理与造型小贴士<ul>
<li>日常护理:黄二白肤色易显发质枯黄,每周 1 次深层护发(发膜 + 热毛巾敷 5 分钟);吹发用圆梳向内扣发尾,维持直线轮廓;</li>
<li>快速造型:直板夹 160℃夹直刘海 / 发尾(3 分钟搞定),顶蓬用蓬松喷雾(距发根 10cm 喷洒);</li>
<li>季节适配:冬季用滋润洗发水 + 护发精油防干燥,夏季选控油洗发水避免塌软。</li>
</ul>
<div>九、总结:核心发型逻辑与风格统一<p>核心逻辑:以直线条力量感为基底,通过「顶部蓬松 + 结构化层次 +
纵向延伸」三大设计点,平衡方形脸硬朗感与中大量感气质,同步实现显高需求。关键细节(侧分长刘海、冷调深色系)强化冷冬型风格统一,整体造型需保持「利落轮廓
+ 适度蓬松 + 垂坠质感」,与穿搭、场景协同最大化个人魅力。</p>
</div>
}
`;
params.text = hairText(customKey)
}
if (callWord === "three") {
params.tabType = "shengxiao";
// if (
// openId === "oZRaI4ojHLTcwuQ6yix3QV5sSe0c" ||
// openId === "oZRaI4tfDP-HgQmyjN7GOqyv4gB0"
// ) {
params.text = `用户生日是阳历${userFaceInfo?.value?.checkTime},性别:${userFaceInfo?.value?.gender},职业: ${styleType?.value?.work}, 最在意谁的意见:${styleType?.value?.attention},计算这个生日对应的年柱、月柱、日柱的五行属性个数,不计算时柱,不计算藏干。以v-html格式生成,只能以div、p、ul、li、ol、span标签,输出适合颜色报告,需要提到五行的个数。 报告结构严格按照以下内容:一.五行主属性分析(需要提到五行的个数) 二、五行命理与易学幸运色推导 三、场景化搭配建议 四、动态调整建议",最后以字符串格式返回。返回一个名称为arr的数组,第一个参数“属相”,用用户年龄推算,参数有鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪),第2到第6个数为用“年柱”, “月柱”,“日柱”,“年柱属性”, “月柱属性”,“日柱属性”,等属性推算出的五行个数,最后以数组的形式返回[“属相”, ”金属性个数“,木属性个数“,”水属性个数”,“火属性个数”,”土属性个数“]的形式返回
特别注意:
生成一个如下结构的对象
content:{
text: 颜色报告内容,
arr: 属相数组,以["属相",金的个数, 木的个数, 水的个数, 火的个数, 土的个数]的格式返回
}
`;
// } else {
// params.text = `用户生日是阳历${userFaceInfo?.value?.checkTime},性别:${userFaceInfo?.value?.gender},计算这个生日对应的年柱、月柱、日柱的五行属性个数,不计算时柱,不计算藏干。以v-html格式生成,只能以div、p、ul、li、ol、span标签,输出适合颜色报告,需要提到五行的个数。 报告结构严格按照以下内容:一.五行主属性分析(需要提到五行的个数) 二、五行命理与易学幸运色推导 三、场景化搭配建议 四、动态调整建议",最后以字符串格式返回。返回一个名称为arr的数组,第一个参数“属相”,用用户年龄推算,参数有鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪),第2到第6个数为用“年柱”, “月柱”,“日柱”,“年柱属性”, “月柱属性”,“日柱属性”,等属性推算出的五行个数,最后以数组的形式返回[“属相”, ”金属性个数“,木属性个数“,”水属性个数”,“火属性个数”,”土属性个数“]的形式返回
// params.text = `用户生日是阳历${userFaceInfo?.value?.checkTime},性别:${userFaceInfo?.value?.gender},职业: ${styleType?.value?.work}, 最在意谁的意见:${styleType?.value?.attention},计算这个生日对应的年柱、月柱、日柱的五行属性个数,不计算时柱,不计算藏干。以v-html格式生成,只能以div、p、ul、li、ol、span标签,输出适合颜色报告,需要提到五行的个数。 报告结构严格按照以下内容:一.五行主属性分析(需要提到五行的个数) 二、五行命理与易学幸运色推导 三、场景化搭配建议 四、动态调整建议",最后以字符串格式返回。返回一个名称为arr的数组,第一个参数“属相”,用用户年龄推算,参数有鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪),第2到第6个数为用“年柱”, “月柱”,“日柱”,“年柱属性”, “月柱属性”,“日柱属性”,等属性推算出的五行个数,最后以数组的形式返回[“属相”, ”金属性个数“,木属性个数“,”水属性个数”,“火属性个数”,”土属性个数“]的形式返回
// 特别注意:
// 生成一个如下结构的对象
// content:{
@@ -785,192 +705,27 @@ const getPraiseText = (callWord, type) => {
// arr: 属相数组,以["属相",金的个数, 木的个数, 水的个数, 火的个数, 土的个数]的格式返回
// }
// `;
// }
params.system_prompt = `五行八卦中年柱、月柱、日柱的计算规则详解
// params.text = shengxiaoText(userFaceInfo?.value?.checkTime, userFaceInfo?.value?.gender, styleType?.value?.work, styleType?.value?.attention)
params.text = shengxiaoText(collect?.value?.birthday, collect?.value?.gender, collect?.value?.work)
在五行八卦的命理学体系中,年柱、月柱、日柱与每个人息息相关,它们共同构成了八字,被认为能够揭示一个人的命运轨迹和性格特点。下面,让我们一起来深入了解它们的计算规则。
一、年柱的计算规则
年柱代表出生年份的天干地支组合,它是八字的第一柱,确定了一个人出生年份的基本信息,在命理学中被视为根基,对人生运势有着深远影响。
• 天干的确定:
◦ 尾数对应法:最为简便的方法是根据公历年的尾数来确定。具体对应关系如下:尾数为4,对应天干甲;尾数为5,对应天干乙;尾数为6,对应天干丙;尾数为7,对应天干丁;尾数为8,对应天干戊;尾数为9,对应天干己;尾数为0,对应天干庚;尾数为1,对应天干辛;尾数为2,对应天干壬;尾数为3,对应天干癸 。例如,2025年,尾数是5,所以年干为乙。
◦ 公式计算法:公式为(公历年数 - 3)÷10的余数(整除时按余数为0计),对应天干顺序。如2025年,(2025 - 3)÷10 = 202余2,对应天干乙。
• 地支的确定:
◦ 生肖对应法:可依据生肖来确定地支。生肖与地支的对应关系为:子鼠、丑牛、寅虎、卯兔、辰龙、巳蛇、午马、未羊、申猴、酉鸡、戌狗、亥猪。比如,2025年是蛇年,对应的地支就是巳。
◦ 公式计算法:公式为(公历年数 - 3)÷12的余数(整除时按余数为0计),对应地支顺序。对于2025年,(2025 - 3)÷12 = 168余6,对应地支巳。
需要特别注意的是,年柱的分界是以每年的立春为界线,立春前出生的人,年柱按上一年计算;立春后出生的人,年柱按下一年计算 。
二、月柱的计算规则
月柱由月干和月支组成,代表出生月份的天干地支组合,它反映了一个人在成长过程中的阶段性运势和内在特质,在命理学中被视为成长和发展的重要标志。
• 月支的确定:月支是固定不变的,以二十四节气为划分依据。从立春开始,正月为寅月(立春当天到惊蛰前一天);二月为卯月(惊蛰当天到清明前一天);三月为辰月(清明当天到立夏前一天);四月为巳月(立夏当天到芒种前一天);五月为午月(芒种当天到小暑前一天);六月为未月(小暑当天到立秋前一天);七月为申月(立秋当天到白露前一天);八月为酉月(白露当天到寒露前一天);九月为戌月(寒露当天到立冬前一天);十月为亥月(立冬当天到大雪前一天);十一月为子月(大雪当天到小寒前一天);十二月为丑月(小寒当天到立春前一天)。
• 月干的确定:需要根据年干来推算,可借助口诀“甲己之年丙作首,乙庚之年戊为头,丙辛之岁寻庚上,丁壬壬寅顺水流,若问戊癸何处起,甲寅之上好追求” 。意思是,当年干为甲或己时,正月月干为丙;年干为乙或庚时,正月月干为戊;年干为丙或辛时,正月月干为庚;年干为丁或壬时,正月月干为壬;年干为戊或癸时,正月月干为甲。其余月份天干依次顺推。例如,2025年是乙巳年,年干为乙,根据口诀“乙庚之年戊为头”,正月月干为戊,月支为寅,所以2025年正月月柱为戊寅,二月为己卯,三月为庚辰,依此类推。
三、日柱的计算规则
日柱代表出生日的天干地支组合,是八字的核心部分,被认为能体现一个人的核心性格和命运的关键走向,在命理学中占据着举足轻重的地位。日柱的计算方法较为复杂,以下介绍一种常用的公历计算法:
• 计算步骤:
◦ 先计算(公历年数 - 1)×5 + (公历年数 - 1)÷4 + 当年日期在当年的天数序号,得到一个总和(这里的除法只取商数,余数忽略不计)。其中,当年日期在当年的天数序号,即从1月1日到出生日期的天数,例如,3月15日出生,当年是平年,1月31天,2月28天,3月15天,天数序号就是31 + 28 + 15 = 74 。
◦ 将总和除以60,得到一个余数。
◦ 这个余数就是出生日期的天干地支序数。其中,余数除以10的余数为天干序数(整除时按余数为0计,对应天干癸),余数除以12的余数为地支序数(整除时按余数为0计,对应地支亥)。
• 举例说明:以2025年5月20日为例,计算过程如下:
2025 - 1)×5 + 2025 - 1)÷4 + 31 + 28 + 31 + 30 + 20
= 2024×5 + 2024÷4 + 140
= 10120 + 506 + 140
= 10766
◦ 10766÷60 = 179余26
◦ 26÷10 = 2余6,对应天干己;26÷12 = 2余2,对应地支丑 。所以2025年5月20日的日柱为己丑。
• 注意闰年:需要注意的是,如果出生年份是闰年,2月有29天,在计算天数序号时要相应调整。闰年的判断方法是:能被4整除但不能被100整除的年份为闰年,此外能被400整除的年份也是闰年 。例如,2024年是闰年,计算当年天数序号时,2月按29天计算。
年柱、月柱和日柱的计算规则虽然复杂,但它们蕴含着古人对时间和命运的深刻理解,是五行八卦命理学的重要基础 。`;
params.system_prompt = shengxiaoSystem_prompt
}
// console.log('tttttttttttttttttttttttttttttt', callWord)
if (callWord === "four") {
params.tabType = "stature";
params.text = `你是个人形象美学顾问,你擅长通过客户身材特征分析出用户的身材类型
具体的包裹:轮廓类型、量感类型、动静类型、体型类型
${customKey}
要求:
1:你只能分析出的轮廓类型只能是:${styleType.value.straight_total_score_t},别的类型一概不允许
2:你只能分析出的量感类型只能是:${styleType.value.total_sense_of_quantity_t},别的类型一概不允许
3:你只能分析出的动静类型只能是:${styleType.value.dynamic_static_t},别的类型一概不允许
特别注意:
你要根据客户特征给出详细的分析结果和分析结果详情,每一中类型的分析结果详情要在200字以内
你要返回给我的结果只能是json格式,不能是其它格式
除了我要求的格式内容外,不要有额外多余的任何不相干的文字
正确格式案例如下:
{
sensory:{
value: '曲线型',
desc: '面部五官线条(眉眼、嘴唇等)没有特别强烈的曲线感或直线硬朗感,面部轮廓、发型线条以及穿着的服装(V 领、简洁款式 )也呈现出既非极端曲线柔和,也非极端直线利落的状态,是较为平衡的直曲适中风格 。'
},
mass: {
value: '中量感',
desc: '从面部看,五官分布、大小以及整体比例较为均衡,没有特别小巧精致(小量感)或夸张大气(大量感)的特征,身材穿着也呈现出适中的视觉分量,所以是中量感'
},
movement: {
value: '静态型',
desc: '面部神态平和,发型简洁规整,服装款式简约、颜色沉稳,整体传递出安静、内敛的气质,没有明显的活泼、动感元素,因此判定为静态型 。'
}
}
`;
params.text = statureText(customKey, styleType.value.straight_total_score_t, styleType.value.total_sense_of_quantity_t, styleType.value.dynamic_static_t)
}
if (callWord === "five") {
params.tabType = "style";
params.text = `你是个人形象美学顾问,你擅长通过客户身材特征分析出用户的风格诊断报告。
${customKey}
特别注意:
1:你要根据客户特征给出详细的风格诊断报告
2:以v-html格式输出,只能以div、p、ul、li、ol、span、
3:你要返回给我的结果只能是json格式,不能是其它格式
4:除了我要求的格式内容外,不要有额外多余的任何不相干的文字
风格诊断报告格式如下:
一:个人风格合心诊断
1:个人风格密码解析
2:主导心理风格和基因风格关系
二、 身材分析与穿搭指南
三、 配饰规划
四、 总结与建议
1:最重要的强化优势
2:规避要点
正确格式案例如下:
{
html: '<div><p><span style="font-weight:bold">一、 个人风格核心诊断</span></p>
<p><span style="font-weight:bold">1. 个人风格密码解析</span></p>
<p>基于您的面部特征与量感直曲分析,个人风格密码为「中大量感+偏直风格+适中对比度」:</p>
<ul>
<li><span style="font-weight:bold">量感维度</span>:大量感得分6、小量感得分4,量感总分2,属于中大量感,面部立体度7(高立体度)、直鼻高立体度,整体呈现舒展大气的视觉张力,避免过度小巧精致的服饰元素
</li>
<li><span style="font-weight:bold">直曲维度</span>:直得分7、曲得分3,直曲总分4,偏直风格显著,平直眉、细长单眼皮、直鼻等线条利落,适合简约、几何、结构化的服饰剪裁,减少柔媚蕾丝、荷叶边等过度曲线元素
</li>
<li><span style="font-weight:bold">对比度</span>:适中对比度,黄一白肤色搭配深瞳色,色彩搭配可兼顾清爽和谐与适度层次,避免高饱和撞色或过于寡淡的同色系
</li>
</ul>
<p><span style="font-weight:bold">2. 主导心理风格和基因风格关系</span></p>
<p>
您的基因风格(外在特征决定)为「利落直感型」,心理风格(偏好夏季季型配色)偏向「清新活力型」,二者可形成「清爽利落」的融合风格——以夏季季型的柔和色调(浅蓝、薄荷绿、粉紫、奶白等)为基础,结合偏直的简约剪裁,既符合基因风格的线条需求,又满足心理偏好的清爽氛围。</p>
<p><span style="font-weight:bold">二、 身材分析与穿搭指南</span></p>
<p><span style="font-weight:bold">身材特征</span>A型身材(上窄下宽),身高160cm、体重53kg,腰部粗、腿粗,核心需求为「勾勒腰线+修饰下半身」
</p>
<p><span style="font-weight:bold">1. 上衣选择</span></p>
<ul>
<li><span style="font-weight:bold">版型</span>:选「上宽下收」设计,如微泡泡袖、荷叶边袖口(增加上半身量感平衡下半身),腰部做收腰剪裁(如系带、褶皱收腰),直接勾勒腰线
</li>
<li><span style="font-weight:bold">领型</span>:V领、方领、一字领,拉长颈部线条同时转移视觉焦点至锁骨/面部,分散腰部注意力
</li>
<li><span style="font-weight:bold">图案/色彩</span>:夏季季型配色优先,上半身可尝试小碎花、条纹等图案(增加上半身丰富度),色彩选浅蓝、粉紫等亮色(提亮上身,平衡下半身重量感)
</li>
</ul>
<p><span style="font-weight:bold">2. 下装选择</span></p>
<ul>
<li><span style="font-weight:bold">裤装</span>:高腰阔腿裤(垂感面料,长度及脚踝)、直筒裤(避免紧身牛仔裤),裤型从腰部向下自然散开,修饰腿粗,腰部搭配细腰带强调腰线
</li>
<li><span style="font-weight:bold">裙装</span>:高腰A字裙(长度过膝5-10cm)、伞裙,裙摆自然展开遮挡臀部及大腿赘肉,腰部做掐褶或同色系腰带收腰
</li>
<li><span style="font-weight:bold">色彩</span>:选夏季季型中的低饱和深色(如灰蓝、豆沙紫)或同色系顺色(上下装同色调不同明度),视觉收缩下半身
</li>
</ul>
<p><span style="font-weight:bold">3. 连衣裙推荐</span></p>
<ul>
<li>
首选「收腰A字连衣裙」,腰部收紧+裙摆散开,直接解决腰线与腿粗问题,领口选V领/方领,面料选轻薄雪纺、棉麻(符合夏季清爽感)
</li>
<li>避免:紧身包臀裙、无腰线直筒裙(暴露腰部赘肉,显下半身臃肿)</li>
</ul>
<p><span style="font-weight:bold">三、 配饰规划</span></p>
<p><span style="font-weight:bold">1. 腰带</span>:核心配饰!选细款金属腰带(银色/金色,呼应夏季清爽)或同色系皮质腰带,系于高腰位置(肚脐上2cm),明确分割腰线,材质避免过宽过厚(否则显腰粗)
</p>
<p><span style="font-weight:bold">2. 耳饰</span>:瓜子脸+细长单眼皮,适合「几何短款耳坠」(如方形、水滴形,长度3-5cm)或简约耳钉,修饰脸型同时不抢面部焦点;避免夸张大耳环(增加下半身视觉重量)
</p>
<p><span style="font-weight:bold">3. 项链</span>:人中偏短+薄唇,选「Y型项链」或「锁骨链」(长度40-45cm,吊坠小巧精致),延长面部纵向线条,避免短款choker(靠近唇部显局促)
</p>
<p><span style="font-weight:bold">4. 手链/手表</span>:简约细链条手链或方形表盘手表(金属表带),呼应偏直风格,数量控制1-2件,避免繁复堆砌
</p>
<p><span style="font-weight:bold">五、 总结与建议</span></p>
<p><span style="font-weight:bold">1. 最重要的强化优势和规避</span></p>
<ul>
<li><span style="font-weight:bold">强化优势</span>:① 利用夏季季型配色(浅蓝、薄荷绿等)提亮黄一白肤色,凸显清爽气质;②
突出高立体度面部(直鼻、瓜子脸),通过V领/方领服饰+简约耳饰转移视觉焦点;③ 用细腰带强制勾勒腰线,强化身材比例
</li>
<li><span style="font-weight:bold">规避要点</span>:① 避免下半身紧身/膨胀设计(如紧身裤、蓬蓬裙),选A字/阔腿版型修饰腿粗;②
腰部避免无剪裁、松紧带设计,用收腰剪裁+腰带遮挡赘肉;③ 配饰忌过多过杂,保持「少而精」,符合偏直风格的利落感
</li>
</ul>
</div>'
}
`;
params.text = styleText(customKey);
}
console.log('调用一把yyyyyyyyyyyyyy', callWord)
praiseTextApi(params).then((res) => {
// tabType
if (callWord === "one") {
@@ -1007,6 +762,8 @@ const getPraiseText = (callWord, type) => {
// console.log("obj: ", obj);
const content = obj.choices[0].message.content;
customFigure.value = JSON.parse(content);
console.log('customFigure.value: mmmmmmmmmmmmmmmmm', customFigure.value);
} else if (callWord === "five") {
const obj = JSON.parse(res.data);
const content = obj.choices[0].message.content;
@@ -1104,6 +861,7 @@ const getHair = async (data) => {
});
return res.data;
};
const getUserFaceInfo = async () => {
getStyleApi({ openId: openId }).then(async (res) => {
newColorTypeList.value = reorderByValue(
@@ -1133,10 +891,18 @@ const getUserFaceInfo = async () => {
}
}
}
getPraiseText("one");
getPraiseText("three", 1);
getPraiseText("four");
getPraiseText("five");
// getPraiseText("one");
// getPraiseText("three", 1);
try {
getPraiseText("four");
} catch (error) {
console.error('error: ', error);
}
// getPraiseText("five");
getColorTypeText(res?.detail?.sj_color_type || "");
let blob = await downloadFile(userFaceInfo?.value?.avatar_img_url);
let formData = new FormData();
@@ -1204,9 +970,16 @@ getStyleApi({ openId })
.then((res) => {
styleType.value = res.data;
})
.then(() => {
getUserFaceInfo();
});
// .then(() => {
// getUserFaceInfo();
// });
watchEffect(() => {
if(collect.value) {
getUserFaceInfo()
}
})
function onTabChange(tabIndex) {
// H5端滚动到id=tabs的位置
@@ -1518,6 +1291,9 @@ function onTabChange(tabIndex) {
font-size: 14px;
font-style: normal;
font-weight: 400;
/* height: 900px;
background-color: red; */
}
.trends-title {
font-family: "PingFang SC", "Microsoft YaHei", "Arial", sans-serif !important;