351 lines
9.7 KiB
TypeScript
351 lines
9.7 KiB
TypeScript
/*
|
||
* @Author: caoziyuan ziyuan.cao@zhuying.com
|
||
* @Date: 2026-01-14 09:43:15
|
||
* @LastEditors: caoziyuan ziyuan.cao@zhuying.com
|
||
* @LastEditTime: 2026-01-14 11:10:33
|
||
* @FilePath: \uni-app\api\naming.ts
|
||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||
*/
|
||
/**
|
||
* 起名相关 API
|
||
*/
|
||
import { http } from '../utils/request';
|
||
|
||
/**
|
||
* 起名/改名/测名返回的「方案 JSON」建议在根级包含五行生克与属相模块,字段约定见:
|
||
* `utils/backend-wuxing-zodiac-spec.ts`(bazi_name_fit、wuxing_bagua、zodiac_sign)。
|
||
* 生成提示词可用:`buildBackendWuxingZodiacPromptZh()`。
|
||
*/
|
||
export interface PersonalNamingRequest {
|
||
last_name: string;
|
||
gender: string;
|
||
birth_date: string;
|
||
birth_place: string;
|
||
style_label: string;
|
||
father_name?: string;
|
||
father_birth_date?: string;
|
||
mother_name?: string;
|
||
mother_birth_date?: string;
|
||
family_book?: string;
|
||
}
|
||
|
||
export interface PersonalNamingResponse {
|
||
report_id: number;
|
||
status?: number;
|
||
solutions?: Array<{
|
||
id: number;
|
||
name: string;
|
||
pinyin?: string;
|
||
tags?: string[];
|
||
name_meaning?: string;
|
||
poetry_source?: string;
|
||
total_score?: number;
|
||
wuxing?: string;
|
||
zodiac?: string;
|
||
constellation?: string;
|
||
}>;
|
||
[key: string]: any;
|
||
}
|
||
|
||
export interface PersonalRenamingRequest {
|
||
last_name: string;
|
||
gender: string;
|
||
birth_date: string;
|
||
birth_place: string;
|
||
style_label: string;
|
||
father_name?: string;
|
||
father_birth_date?: string;
|
||
mother_name?: string;
|
||
mother_birth_date?: string;
|
||
family_book?: string;
|
||
original_name: string;
|
||
reason: string;
|
||
}
|
||
|
||
/**
|
||
* 个人测名。建议后端同时接收:精确出生时辰、出生地/时区(若有),以便排出八字、喜用与生肖年柱;
|
||
* 详见 `utils/backend-wuxing-zodiac-spec.ts` 中 RECOMMENDED_PERSONAL_REQUEST_FIELDS。
|
||
*/
|
||
export interface PersonalScoringRequest {
|
||
surname: string;
|
||
given_name: string;
|
||
gender: string;
|
||
birthday: string;
|
||
}
|
||
|
||
// 公司起名核心成员
|
||
export interface CompanyCoreMember {
|
||
name: string;
|
||
birthday: string; // 格式: 'YYYY-MM-DD HH:mm:ss'
|
||
}
|
||
|
||
// 公司起名请求参数
|
||
export interface CompanyNamingRequest {
|
||
industry: string; // 行业,如 "科技"
|
||
address: string; // 地址,如 "临沂"
|
||
core_members: CompanyCoreMember[]; // 核心成员列表
|
||
report_id?: number;
|
||
}
|
||
|
||
export interface CompanyRenamingRequest {
|
||
industry: string;
|
||
address: string;
|
||
core_members: CompanyCoreMember[];
|
||
vision: string;
|
||
preference: string;
|
||
original_name: string;
|
||
reason: string;
|
||
}
|
||
|
||
export interface CompanyRenamingResponse {
|
||
report_id: number;
|
||
status?: number;
|
||
solutions?: Array<{
|
||
id: number;
|
||
name: string;
|
||
pinyin?: string;
|
||
tags?: string[];
|
||
name_meaning?: string;
|
||
poetry_source?: string;
|
||
total_score?: number;
|
||
star_rating?: number;
|
||
is_recommended?: number;
|
||
}>;
|
||
[key: string]: any;
|
||
}
|
||
|
||
// 公司起名响应 - request.ts 会解包,实际返回的是 data 部分
|
||
export interface CompanyNamingResponse {
|
||
report_id: number;
|
||
status: number;
|
||
solutions?: Array<{
|
||
id: number;
|
||
name: string;
|
||
pinyin: string;
|
||
wuxing: string;
|
||
tags: string[];
|
||
name_meaning: string;
|
||
poetry_source: string;
|
||
total_score: number;
|
||
star_rating: number;
|
||
is_recommended: number;
|
||
}>;
|
||
}
|
||
|
||
// 方案详情响应 - request.ts 会解包,实际返回的是 data 部分
|
||
export interface SolutionDetailResponse {
|
||
id: number;
|
||
report_id: number;
|
||
name: string;
|
||
pinyin: string;
|
||
total_score: number;
|
||
star_rating: number;
|
||
wuxing: string;
|
||
shuxiang: string | null;
|
||
tags: string[];
|
||
name_meaning: string;
|
||
poetry_source: string;
|
||
is_recommended: number;
|
||
is_favorited: boolean;
|
||
sections: Array<{
|
||
id: number;
|
||
section_type: string;
|
||
title: string;
|
||
summary_data: any;
|
||
sort_order: number;
|
||
details: Array<{
|
||
id: number;
|
||
detail_type: string;
|
||
title: string;
|
||
content: any;
|
||
sort_order: number;
|
||
}>;
|
||
}>;
|
||
[key: string]: any;
|
||
}
|
||
|
||
// 公司测名/企业运程(company_analysis)请求参数
|
||
export interface CompanyAnalysisRequest {
|
||
company_name: string;
|
||
industry: string;
|
||
address: string;
|
||
target_audience: string;
|
||
members: Array<{ name: string; birth_date: string }>; // 格式: 'YYYY-MM-DD HH:mm:ss'
|
||
}
|
||
|
||
export interface CompanyScoringRequest {
|
||
company_name: string;
|
||
industry: string;
|
||
address: string;
|
||
target_audience: string;
|
||
members: Array<{ name: string; birthday: string }>;
|
||
}
|
||
|
||
export type CompanyAnalysisDetailNode =
|
||
| { type: 'text'; text: string }
|
||
| { type: 'list'; items: string[] }
|
||
| { type: 'kv'; items: Array<{ label: string; value: string }> };
|
||
|
||
export interface CompanyAnalysisDetails {
|
||
title: string;
|
||
nodes: CompanyAnalysisDetailNode[];
|
||
}
|
||
|
||
// 公司测名/企业运程(company_analysis)响应 - request.ts 会解包,实际返回的是 data 部分
|
||
export interface CompanyAnalysisResponse {
|
||
header: {
|
||
name: string;
|
||
tagLeft: string;
|
||
tagRight: string;
|
||
score: number;
|
||
quote: string;
|
||
details?: CompanyAnalysisDetails;
|
||
};
|
||
characterAnalysis: {
|
||
characters: Array<{ char: string; stroke: number; element: string; meaning: string }>;
|
||
analysis: string;
|
||
details?: CompanyAnalysisDetails;
|
||
};
|
||
businessPattern: {
|
||
radar: { labels: string[]; values: number[] };
|
||
summary: Array<{ label: string; value: string }>;
|
||
details?: CompanyAnalysisDetails;
|
||
};
|
||
gua: {
|
||
bg: string;
|
||
name: string;
|
||
badge: string;
|
||
desc: string;
|
||
tags: string[];
|
||
insight: string;
|
||
details?: CompanyAnalysisDetails;
|
||
};
|
||
team: {
|
||
members: Array<{ role: string; score: number; desc: string; match: string }>;
|
||
note: string;
|
||
details?: CompanyAnalysisDetails;
|
||
};
|
||
years: {
|
||
items: Array<{ year: string; luck: string; text: string }>;
|
||
details?: CompanyAnalysisDetails;
|
||
};
|
||
wealthTrend: {
|
||
bars: number[];
|
||
note: string;
|
||
details?: CompanyAnalysisDetails;
|
||
};
|
||
direction: {
|
||
note: string;
|
||
goodDot?: { x: number; y: number };
|
||
details?: CompanyAnalysisDetails;
|
||
};
|
||
layout: {
|
||
items: Array<{
|
||
strong: string;
|
||
textBefore: string;
|
||
highlights?: string[];
|
||
textAfter: string;
|
||
}>;
|
||
details?: CompanyAnalysisDetails;
|
||
};
|
||
execution: {
|
||
text: string;
|
||
details?: CompanyAnalysisDetails;
|
||
};
|
||
}
|
||
|
||
export interface NewCompanyRenamingRequest {
|
||
industry: string;
|
||
address: string;
|
||
core_members: CompanyCoreMember[];
|
||
vision: string;
|
||
preference: string;
|
||
original_name: string;
|
||
reason: string;
|
||
additional_info: string;
|
||
}
|
||
|
||
export interface NewCompanyRenamingResponse {
|
||
report_id: number;
|
||
status?: number;
|
||
solutions?: Array<{
|
||
id: number;
|
||
name: string;
|
||
pinyin?: string;
|
||
tags?: string[];
|
||
name_meaning?: string;
|
||
poetry_source?: string;
|
||
total_score?: number;
|
||
star_rating?: number;
|
||
is_recommended?: number;
|
||
}>;
|
||
[key: string]: any;
|
||
}
|
||
|
||
export const namingApi = {
|
||
personalNaming(params: PersonalNamingRequest): Promise<PersonalNamingResponse> {
|
||
return http.post('/yifan_naming_reports/personal-naming', params);
|
||
},
|
||
|
||
personalScoring(params: PersonalScoringRequest): Promise<any> {
|
||
return http.post('/yifan_naming_reports/personal-scoring', params);
|
||
},
|
||
|
||
personalScoringTrial(params: PersonalScoringRequest): Promise<any> {
|
||
return http.post('/yifan_naming_reports/personal-scoring-trial', params);
|
||
},
|
||
|
||
personalRenaming(params: PersonalRenamingRequest): Promise<PersonalNamingResponse> {
|
||
return http.post('/yifan_naming_reports/personal-renaming', params);
|
||
},
|
||
|
||
/**
|
||
* 公司起名
|
||
*/
|
||
companyNaming(params: CompanyNamingRequest): Promise<CompanyNamingResponse> {
|
||
return http.post('/yifan_naming_reports/company-naming', params);
|
||
},
|
||
|
||
companyRenaming(params: CompanyRenamingRequest): Promise<CompanyRenamingResponse> {
|
||
return http.post('/yifan_naming_reports/company-renaming', params);
|
||
},
|
||
|
||
/**
|
||
* 公司测名/企业运程
|
||
*/
|
||
companyAnalysis(params: CompanyAnalysisRequest): Promise<CompanyAnalysisResponse> {
|
||
return http.post('/yifan_naming_reports/company-analysis', params);
|
||
},
|
||
|
||
companyScoring(params: CompanyScoringRequest): Promise<any> {
|
||
return http.post('/yifan_naming_reports/company-scoring', params);
|
||
},
|
||
|
||
companyScoringTrial(params: CompanyScoringRequest): Promise<any> {
|
||
return http.post('/yifan_naming_reports/company-scoring-trial', params);
|
||
},
|
||
|
||
/**
|
||
* 测名试用分享回调 - 好友通过分享链接进入小程序后,为分享者增加免费次数
|
||
*/
|
||
scoringTrialShareCallback(): Promise<any> {
|
||
return http.post('/yifan_naming_reports/scoring-trial-share-callback');
|
||
},
|
||
|
||
/**
|
||
* 根据方案ID获取详情
|
||
* @param solutionId 方案ID
|
||
*/
|
||
getSolutionDetail(solutionId: number | string): Promise<SolutionDetailResponse> {
|
||
return http.get(`/yifan_naming_solutions/full_detail/${solutionId}`);
|
||
},
|
||
|
||
/**
|
||
* 根据报告ID获取方案列表
|
||
* @param reportId 报告ID
|
||
*/
|
||
getSolutionsByReportId(reportId: number | string): Promise<any> {
|
||
return http.get(`/yifan_naming_reports/${reportId}/solutions`);
|
||
},
|
||
};
|