feat: 实现大六壬排盘功能

- 新增后端DaLiuRenController控制器
- 实现大六壬排盘API接口
- 新增前端大六壬输入页面(daliuren.vue)
- 新增前端大六壬结果展示页面(result.vue)
- 更新API接口支持大六壬模块
- 更新pages.json配置

大六壬功能包括:
- 天地盘计算
- 四课推演
- 三传取法
- 十二天将排列
- 月将加时计算
- 五行旺衰分析
- 空亡信息展示
This commit is contained in:
H1d3rOne committed 2026-03-06 04:27:58 +08:00
1 parent 25ce9c22e1
commit bba9ad46de
5 files changed
+1197 -25

No files matched your search

@@ -0,0 +1,177 @@
package xuan.controller;
import org.springframework.web.bind.annotation.*;
import xuan.core.daliuren.DaLiuRen;
import xuan.core.daliuren.settings.DaLiuRenJiChuSetting;
import xuan.core.daliuren.settings.DaLiuRenShenShaSetting;
import java.util.*;
@RestController
@RequestMapping("/api/daliuren")
public class DaLiuRenController {
@PostMapping("/paipan")
public Map<String, Object> paiPan(@RequestBody DaLiuRenRequest request) {
Map<String, Object> result = new HashMap<>();
try {
DaLiuRenJiChuSetting setting = new DaLiuRenJiChuSetting();
setting.setName(request.getName() != null ? request.getName() : "某人");
setting.setOccupy(request.getOccupy() != null ? request.getOccupy() : "某事");
setting.setSex(request.getSex() != null ? request.getSex() : 1);
setting.setDate(request.getDate() != null ? request.getDate() : "2024-01-01 00:00:00");
setting.setDateType(request.getDateType() != null ? request.getDateType() : 0);
setting.setLeapMonthType(request.getLeapMonthType() != null ? request.getLeapMonthType() : 0);
setting.setXuShiSuiType(request.getXuShiSuiType() != null ? request.getXuShiSuiType() : 0);
setting.setJieQiType(request.getJieQiType() != null ? request.getJieQiType() : 1);
setting.setGuiRenType(request.getGuiRenType() != null ? request.getGuiRenType() : 0);
setting.setYearGanZhiType(request.getYearGanZhiType() != null ? request.getYearGanZhiType() : 2);
setting.setMonthGanZhiType(request.getMonthGanZhiType() != null ? request.getMonthGanZhiType() : 1);
setting.setDayGanZhiType(request.getDayGanZhiType() != null ? request.getDayGanZhiType() : 0);
DaLiuRen daLiuRen = new DaLiuRen(setting);
daLiuRen.daLiuRenShenShaSetting(new DaLiuRenShenShaSetting());
result.put("success", true);
result.put("data", buildDaLiuRenData(daLiuRen));
} catch (Exception e) {
result.put("success", false);
result.put("error", e.getMessage());
e.printStackTrace();
}
return result;
}
private Map<String, Object> buildDaLiuRenData(DaLiuRen daLiuRen) {
Map<String, Object> data = new HashMap<>();
data.put("name", daLiuRen.getName());
data.put("sex", daLiuRen.getSex());
data.put("age", daLiuRen.getAge());
data.put("occupy", daLiuRen.getOccupy());
data.put("solar", daLiuRen.getSolarStr2());
data.put("lunar", daLiuRen.getLunarStr2());
data.put("xingQi", daLiuRen.getXingQi());
data.put("jiJie", daLiuRen.getJiJie());
data.put("shengXiao", daLiuRen.getShengXiao());
data.put("xingZuo", daLiuRen.getXingZuo());
data.put("yearGanZhi", daLiuRen.getYearGanZhi());
data.put("monthGanZhi", daLiuRen.getMonthGanZhi());
data.put("dayGanZhi", daLiuRen.getDayGanZhi());
data.put("hourGanZhi", daLiuRen.getHourGanZhi());
data.put("yearGan", daLiuRen.getYearGan());
data.put("monthGan", daLiuRen.getMonthGan());
data.put("dayGan", daLiuRen.getDayGan());
data.put("hourGan", daLiuRen.getHourGan());
data.put("yearZhi", daLiuRen.getYearZhi());
data.put("monthZhi", daLiuRen.getMonthZhi());
data.put("dayZhi", daLiuRen.getDayZhi());
data.put("hourZhi", daLiuRen.getHourZhi());
data.put("yearGanWuXing", daLiuRen.getYearGanWuXing());
data.put("monthGanWuXing", daLiuRen.getMonthGanWuXing());
data.put("dayGanWuXing", daLiuRen.getDayGanWuXing());
data.put("hourGanWuXing", daLiuRen.getHourGanWuXing());
data.put("yearZhiWuXing", daLiuRen.getYearZhiWuXing());
data.put("monthZhiWuXing", daLiuRen.getMonthZhiWuXing());
data.put("dayZhiWuXing", daLiuRen.getDayZhiWuXing());
data.put("hourZhiWuXing", daLiuRen.getHourZhiWuXing());
data.put("yearGanZhiNaYin", daLiuRen.getYearGanZhiNaYin());
data.put("monthGanZhiNaYin", daLiuRen.getMonthGanZhiNaYin());
data.put("dayGanZhiNaYin", daLiuRen.getDayGanZhiNaYin());
data.put("hourGanZhiNaYin", daLiuRen.getHourGanZhiNaYin());
data.put("yearGanZhiKongWang", daLiuRen.getYearGanZhiKongWang());
data.put("monthGanZhiKongWang", daLiuRen.getMonthGanZhiKongWang());
data.put("dayGanZhiKongWang", daLiuRen.getDayGanZhiKongWang());
data.put("hourGanZhiKongWang", daLiuRen.getHourGanZhiKongWang());
data.put("wuXingWangShuai", daLiuRen.getWuXingWangShuai());
data.put("prevJie", daLiuRen.getPrevJie());
data.put("nextJie", daLiuRen.getNextJie());
data.put("prevJieDateStr", daLiuRen.getPrevJieDateStr());
data.put("nextJieDateStr", daLiuRen.getNextJieDateStr());
data.put("prevJieDay", daLiuRen.getPrevJieDay());
data.put("nextJieDay", daLiuRen.getNextJieDay());
data.put("chuShengJie", daLiuRen.getChuShengJie());
data.put("prevQi", daLiuRen.getPrevQi());
data.put("nextQi", daLiuRen.getNextQi());
data.put("prevQiDateStr", daLiuRen.getPrevQiDateStr());
data.put("nextQiDateStr", daLiuRen.getNextQiDateStr());
data.put("prevQiDay", daLiuRen.getPrevQiDay());
data.put("nextQiDay", daLiuRen.getNextQiDay());
data.put("chuShengQi", daLiuRen.getChuShengQi());
data.put("yueXiang", daLiuRen.getYueXiang());
data.put("yueJiang", daLiuRen.getYueJiang());
data.put("yueJiangShen", daLiuRen.getYueJiangShen());
data.put("wuBuYuShi", daLiuRen.getWuBuYuShi());
data.put("tianDiPanType", daLiuRen.getTianDiPanType());
data.put("tianGan", daLiuRen.getTianGan());
data.put("diPan", daLiuRen.getDiPan());
data.put("tianPan", daLiuRen.getTianPan());
data.put("shenPan", daLiuRen.getShenPan());
data.put("siKe", daLiuRen.getSiKe());
data.put("siKeDunGan", daLiuRen.getSiKeDunGan());
data.put("siKeShenJiang", daLiuRen.getSiKeShenJiang());
data.put("sanChuan", daLiuRen.getSanChuan());
data.put("sanChuanDunGan", daLiuRen.getSanChuanDunGan());
data.put("sanChuanShenJiang", daLiuRen.getSanChuanShenJiang());
data.put("sanChuanLiuQin", daLiuRen.getSanChuanLiuQin());
data.put("sanChuanQuFa", daLiuRen.getSanChuanQuFa());
return data;
}
public static class DaLiuRenRequest {
private String name;
private String occupy;
private Integer sex;
private String date;
private Integer dateType;
private Integer leapMonthType;
private Integer xuShiSuiType;
private Integer jieQiType;
private Integer guiRenType;
private Integer yearGanZhiType;
private Integer monthGanZhiType;
private Integer dayGanZhiType;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getOccupy() { return occupy; }
public void setOccupy(String occupy) { this.occupy = occupy; }
public Integer getSex() { return sex; }
public void setSex(Integer sex) { this.sex = sex; }
public String getDate() { return date; }
public void setDate(String date) { this.date = date; }
public Integer getDateType() { return dateType; }
public void setDateType(Integer dateType) { this.dateType = dateType; }
public Integer getLeapMonthType() { return leapMonthType; }
public void setLeapMonthType(Integer leapMonthType) { this.leapMonthType = leapMonthType; }
public Integer getXuShiSuiType() { return xuShiSuiType; }
public void setXuShiSuiType(Integer xuShiSuiType) { this.xuShiSuiType = xuShiSuiType; }
public Integer getJieQiType() { return jieQiType; }
public void setJieQiType(Integer jieQiType) { this.jieQiType = jieQiType; }
public Integer getGuiRenType() { return guiRenType; }
public void setGuiRenType(Integer guiRenType) { this.guiRenType = guiRenType; }
public Integer getYearGanZhiType() { return yearGanZhiType; }
public void setYearGanZhiType(Integer yearGanZhiType) { this.yearGanZhiType = yearGanZhiType; }
public Integer getMonthGanZhiType() { return monthGanZhiType; }
public void setMonthGanZhiType(Integer monthGanZhiType) { this.monthGanZhiType = monthGanZhiType; }
public Integer getDayGanZhiType() { return dayGanZhiType; }
public void setDayGanZhiType(Integer dayGanZhiType) { this.dayGanZhiType = dayGanZhiType; }
}
}
+26 -2
View File
@@ -33,11 +33,27 @@
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/liuyao/result",
"style": {
"navigationBarTitleText": "六爻卦象",
"navigationBarBackgroundColor": "#2563EB",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/daliuren/daliuren",
"style": {
"navigationBarTitleText": "大六壬排盘",
"navigationBarBackgroundColor": "#7C3AED",
"navigationBarBackgroundColor": "#059669",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/daliuren/result",
"style": {
"navigationBarTitleText": "大六壬命盘",
"navigationBarBackgroundColor": "#059669",
"navigationBarTextStyle": "white"
}
},
@@ -53,7 +69,15 @@
"path": "pages/meihua/meihua",
"style": {
"navigationBarTitleText": "梅花易数排盘",
"navigationBarBackgroundColor": "#059669",
"navigationBarBackgroundColor": "#DB2777",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/meihua/result",
"style": {
"navigationBarTitleText": "梅花易数卦象",
"navigationBarBackgroundColor": "#DB2777",
"navigationBarTextStyle": "white"
}
},
@@ -1,52 +1,397 @@
<template>
<view class="container">
<view class="developing">
<text class="developing-icon">🎯</text>
<text class="developing-title">大六壬排盘</text>
<text class="developing-desc">功能开发中,敬请期待...</text>
<view class="header-card">
<view class="header-icon">
<text class="icon-text">壬</text>
</view>
<text class="header-title">大六壬排盘</text>
<text class="header-subtitle">三式之首 · 推演天机</text>
</view>
<view class="form-card">
<view class="form-section">
<view class="section-header">
<view class="section-dot"></view>
<text class="section-title">占卜信息</text>
</view>
<view class="form-item">
<view class="form-label-wrapper">
<text class="form-label">姓名</text>
</view>
<input class="form-input" v-model="name" placeholder="请输入姓名" />
</view>
<view class="form-item">
<view class="form-label-wrapper">
<text class="form-label">占事</text>
</view>
<input class="form-input" v-model="occupy" placeholder="请输入占卜事项" />
</view>
<view class="form-item">
<view class="form-label-wrapper">
<text class="form-label">公历日期</text>
</view>
<picker mode="date" :value="solarDate" @change="onDateChange" class="form-picker">
<view class="picker-content">
<text class="picker-value">{{ solarDate }}</text>
<text class="picker-arrow">›</text>
</view>
</picker>
</view>
<view class="form-item">
<view class="form-label-wrapper">
<text class="form-label">占卜时间</text>
</view>
<picker mode="time" :value="birthTime" @change="onTimeChange" class="form-picker">
<view class="picker-content">
<text class="picker-value">{{ birthTime }}</text>
<text class="picker-arrow">›</text>
</view>
</picker>
</view>
<view class="form-item">
<view class="form-label-wrapper">
<text class="form-label">性别</text>
</view>
<view class="gender-group">
<view class="gender-item" :class="{ active: gender === '男' }" @click="gender = '男'">
<text class="gender-text">男</text>
</view>
<view class="gender-item" :class="{ active: gender === '女' }" @click="gender = '女'">
<text class="gender-text">女</text>
</view>
</view>
</view>
<view class="form-item">
<view class="form-label-wrapper">
<text class="form-label">日期类型</text>
</view>
<view class="gender-group">
<view class="gender-item" :class="{ active: dateType === 0 }" @click="dateType = 0">
<text class="gender-text">公历</text>
</view>
<view class="gender-item" :class="{ active: dateType === 1 }" @click="dateType = 1">
<text class="gender-text">农历</text>
</view>
</view>
</view>
<view class="form-item">
<view class="form-label-wrapper">
<text class="form-label">贵人类型</text>
</view>
<view class="gender-group">
<view class="gender-item" :class="{ active: guiRenType === 0 }" @click="guiRenType = 0">
<text class="gender-text">自动</text>
</view>
<view class="gender-item" :class="{ active: guiRenType === 1 }" @click="guiRenType = 1">
<text class="gender-text">昼贵</text>
</view>
<view class="gender-item" :class="{ active: guiRenType === 2 }" @click="guiRenType = 2">
<text class="gender-text">夜贵</text>
</view>
</view>
</view>
</view>
</view>
<view class="tips-card">
<text class="tips-title">大六壬简介</text>
<text class="tips-content">大六壬是中国古代三式之首,以月将加时、天地盘、四课三传为核心,推演事物发展变化。通过十二天将、神煞等要素进行综合判断。</text>
</view>
<view class="btn-wrapper">
<button class="submit-btn" @click="calculate" :disabled="loading">
<text class="btn-text">{{ loading ? '排盘中...' : '开始排盘' }}</text>
</button>
</view>
</view>
</template>
<script>
import api from '@/utils/api.js'
export default {
data() {
return {}
return {
name: '',
occupy: '',
solarDate: '2024-01-01',
birthTime: '12:00',
gender: '男',
dateType: 0,
guiRenType: 0,
loading: false
}
},
methods: {
onDateChange(e) {
this.solarDate = e.detail.value
},
onTimeChange(e) {
this.birthTime = e.detail.value
},
async calculate() {
if (this.loading) return
this.loading = true
uni.showLoading({
title: '排盘中...',
mask: true
})
try {
const dateStr = this.solarDate + ' ' + this.birthTime + ':00'
const result = await api.daliurenApi.paiPan({
name: this.name || '某人',
occupy: this.occupy || '某事',
sex: this.gender === '男' ? 1 : 0,
date: dateStr,
dateType: this.dateType,
guiRenType: this.guiRenType
})
getApp().globalData.daliurenResult = result
uni.hideLoading()
uni.navigateTo({
url: '/pages/daliuren/result'
})
} catch (e) {
uni.hideLoading()
console.error('排盘错误:', e)
uni.showToast({
title: '排盘失败:' + (e.message || '未知错误'),
icon: 'none',
duration: 3000
})
} finally {
this.loading = false
}
}
}
}
</script>
<style scoped>
.container {
padding: 20rpx;
background-color: #f5f5f5;
<style>
page {
background: linear-gradient(180deg, #F0FDF4 0%, #DCFCE7 50%, #BBF7D0 100%);
min-height: 100vh;
}
.container {
min-height: 100vh;
padding: 32rpx;
}
.header-card {
background: linear-gradient(135deg, #059669 0%, #047857 100%);
border-radius: 32rpx;
padding: 48rpx 32rpx;
text-align: center;
margin-bottom: 32rpx;
box-shadow: 0 16rpx 48rpx rgba(5, 150, 105, 0.25);
}
.header-icon {
width: 96rpx;
height: 96rpx;
background: rgba(255, 255, 255, 0.2);
border-radius: 24rpx;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 24rpx;
}
.developing {
text-align: center;
padding: 60rpx;
.icon-text {
font-size: 48rpx;
color: #ffffff;
font-weight: 700;
}
.developing-icon {
font-size: 120rpx;
.header-title {
font-size: 44rpx;
font-weight: 700;
color: #ffffff;
display: block;
margin-bottom: 40rpx;
margin-bottom: 12rpx;
}
.developing-title {
font-size: 40rpx;
font-weight: bold;
color: #333;
display: block;
margin-bottom: 20rpx;
.header-subtitle {
font-size: 26rpx;
color: rgba(255, 255, 255, 0.8);
}
.developing-desc {
.form-card {
background: rgba(255, 255, 255, 0.9);
border-radius: 32rpx;
padding: 32rpx;
margin-bottom: 24rpx;
box-shadow: 0 8rpx 32rpx rgba(5, 150, 105, 0.08);
backdrop-filter: blur(20rpx);
}
.form-section {
display: flex;
flex-direction: column;
}
.section-header {
display: flex;
align-items: center;
margin-bottom: 24rpx;
}
.section-dot {
width: 8rpx;
height: 8rpx;
background: #059669;
border-radius: 50%;
margin-right: 12rpx;
}
.section-title {
font-size: 30rpx;
font-weight: 600;
color: #1F2937;
}
.form-item {
display: flex;
align-items: center;
padding: 24rpx 0;
border-bottom: 2rpx solid #F3F4F6;
}
.form-item:last-child {
border-bottom: none;
}
.form-label-wrapper {
width: 160rpx;
}
.form-label {
font-size: 28rpx;
color: #999;
color: #374151;
font-weight: 500;
}
.form-input {
flex: 1;
font-size: 28rpx;
color: #1F2937;
text-align: right;
}
.form-picker {
flex: 1;
}
.picker-content {
display: flex;
align-items: center;
justify-content: flex-end;
}
.picker-value {
font-size: 28rpx;
color: #1F2937;
font-weight: 500;
}
.picker-arrow {
font-size: 32rpx;
color: #9CA3AF;
margin-left: 8rpx;
}
.gender-group {
display: flex;
flex: 1;
justify-content: flex-end;
gap: 16rpx;
}
.gender-item {
padding: 16rpx 40rpx;
border-radius: 16rpx;
background: #F3F4F6;
border: 2rpx solid transparent;
}
.gender-item.active {
background: #D1FAE5;
border-color: #059669;
}
.gender-text {
font-size: 28rpx;
color: #6B7280;
font-weight: 500;
}
.gender-item.active .gender-text {
color: #059669;
}
.tips-card {
background: rgba(255, 255, 255, 0.6);
border-radius: 24rpx;
padding: 24rpx;
margin-bottom: 32rpx;
border-left: 6rpx solid #059669;
}
.tips-title {
font-size: 26rpx;
font-weight: 600;
color: #065F46;
display: block;
margin-bottom: 8rpx;
}
.tips-content {
font-size: 24rpx;
color: #6B7280;
line-height: 1.6;
}
.btn-wrapper {
padding: 16rpx 0;
}
.submit-btn {
background: linear-gradient(135deg, #059669 0%, #047857 100%);
border-radius: 24rpx;
padding: 32rpx;
text-align: center;
box-shadow: 0 12rpx 32rpx rgba(5, 150, 105, 0.3);
border: none;
}
.submit-btn:active {
transform: scale(0.98);
box-shadow: 0 8rpx 24rpx rgba(5, 150, 105, 0.4);
}
.submit-btn[disabled] {
opacity: 0.6;
}
.btn-text {
font-size: 32rpx;
color: #ffffff;
font-weight: 600;
letter-spacing: 4rpx;
}
</style>
@@ -0,0 +1,576 @@
<template>
<view class="container">
<view class="header-card">
<view class="header-row">
<text class="name">{{ result.name }}</text>
<text class="sex">{{ result.sex }}</text>
</view>
<view class="date-row">
<text class="date-text">{{ result.solar }}</text>
</view>
<view class="date-row">
<text class="date-text">{{ result.lunar }}</text>
</view>
<view class="info-row">
<text class="info-item">{{ result.xingQi }}</text>
<text class="info-item">{{ result.jiJie }}</text>
<text class="info-item">{{ result.shengXiao }}</text>
<text class="info-item">{{ result.xingZuo }}</text>
</view>
</view>
<view class="section-card">
<view class="section-title">四柱干支</view>
<view class="bazhi-grid">
<view class="bazhi-item">
<text class="bazhi-label">年柱</text>
<text class="bazhi-value">{{ result.yearGanZhi }}</text>
<text class="bazhi-nayin">{{ result.yearGanZhiNaYin }}</text>
</view>
<view class="bazhi-item">
<text class="bazhi-label">月柱</text>
<text class="bazhi-value">{{ result.monthGanZhi }}</text>
<text class="bazhi-nayin">{{ result.monthGanZhiNaYin }}</text>
</view>
<view class="bazhi-item">
<text class="bazhi-label">日柱</text>
<text class="bazhi-value">{{ result.dayGanZhi }}</text>
<text class="bazhi-nayin">{{ result.dayGanZhiNaYin }}</text>
</view>
<view class="bazhi-item">
<text class="bazhi-label">时柱</text>
<text class="bazhi-value">{{ result.hourGanZhi }}</text>
<text class="bazhi-nayin">{{ result.hourGanZhiNaYin }}</text>
</view>
</view>
</view>
<view class="section-card">
<view class="section-title">月将信息</view>
<view class="info-grid">
<view class="info-row-item">
<text class="info-label">月将</text>
<text class="info-value">{{ result.yueJiang }}</text>
</view>
<view class="info-row-item">
<text class="info-label">月将神</text>
<text class="info-value">{{ result.yueJiangShen }}</text>
</view>
<view class="info-row-item">
<text class="info-label">月相</text>
<text class="info-value">{{ result.yueXiang }}</text>
</view>
<view class="info-row-item">
<text class="info-label">天地盘</text>
<text class="info-value">{{ result.tianDiPanType }}</text>
</view>
</view>
</view>
<view class="section-card">
<view class="section-title">天地盘</view>
<view class="pan-grid">
<view class="pan-row">
<text class="pan-label">天盘</text>
<view class="pan-values">
<text class="pan-value" v-for="(item, index) in result.tianPan" :key="'tian'+index">{{ item }}</text>
</view>
</view>
<view class="pan-row">
<text class="pan-label">地盘</text>
<view class="pan-values">
<text class="pan-value" v-for="(item, index) in result.diPan" :key="'di'+index">{{ item }}</text>
</view>
</view>
<view class="pan-row">
<text class="pan-label">神盘</text>
<view class="pan-values">
<text class="pan-value shen" v-for="(item, index) in result.shenPan" :key="'shen'+index">{{ item }}</text>
</view>
</view>
<view class="pan-row">
<text class="pan-label">天干</text>
<view class="pan-values">
<text class="pan-value" v-for="(item, index) in result.tianGan" :key="'gan'+index">{{ item }}</text>
</view>
</view>
</view>
</view>
<view class="section-card">
<view class="section-title">四课</view>
<view class="sike-grid">
<view class="sike-item" v-for="(ke, index) in result.siKe" :key="index">
<view class="sike-header">
<text class="sike-label">第{{ index + 1 }}课</text>
</view>
<view class="sike-content">
<text class="sike-gan">{{ ke[0] || '-' }}</text>
<text class="sike-zhi">{{ ke[1] || '-' }}</text>
</view>
<view class="sike-extra" v-if="result.siKeDunGan && result.siKeDunGan[index]">
<text class="sike-dungan">遁干: {{ result.siKeDunGan[index][0] || '-' }} {{ result.siKeDunGan[index][1] || '-' }}</text>
</view>
<view class="sike-extra" v-if="result.siKeShenJiang && result.siKeShenJiang[index]">
<text class="sike-shen">神将: {{ result.siKeShenJiang[index][0] || '-' }} {{ result.siKeShenJiang[index][1] || '-' }}</text>
</view>
</view>
</view>
</view>
<view class="section-card">
<view class="section-title">三传</view>
<view class="sanchuan-grid">
<view class="sanchuan-item">
<text class="sanchuan-label">初传</text>
<text class="sanchuan-value">{{ result.sanChuan[0] }}</text>
<text class="sanchuan-dungan" v-if="result.sanChuanDunGan">遁干: {{ result.sanChuanDunGan[0] }}</text>
<text class="sanchuan-shen" v-if="result.sanChuanShenJiang">{{ result.sanChuanShenJiang[0] }}</text>
<text class="sanchuan-liuqin" v-if="result.sanChuanLiuQin">{{ result.sanChuanLiuQin[0] }}</text>
</view>
<view class="sanchuan-item">
<text class="sanchuan-label">中传</text>
<text class="sanchuan-value">{{ result.sanChuan[1] }}</text>
<text class="sanchuan-dungan" v-if="result.sanChuanDunGan">遁干: {{ result.sanChuanDunGan[1] }}</text>
<text class="sanchuan-shen" v-if="result.sanChuanShenJiang">{{ result.sanChuanShenJiang[1] }}</text>
<text class="sanchuan-liuqin" v-if="result.sanChuanLiuQin">{{ result.sanChuanLiuQin[1] }}</text>
</view>
<view class="sanchuan-item">
<text class="sanchuan-label">末传</text>
<text class="sanchuan-value">{{ result.sanChuan[2] }}</text>
<text class="sanchuan-dungan" v-if="result.sanChuanDunGan">遁干: {{ result.sanChuanDunGan[2] }}</text>
<text class="sanchuan-shen" v-if="result.sanChuanShenJiang">{{ result.sanChuanShenJiang[2] }}</text>
<text class="sanchuan-liuqin" v-if="result.sanChuanLiuQin">{{ result.sanChuanLiuQin[2] }}</text>
</view>
</view>
<view class="sanchuan-qufa" v-if="result.sanChuanQuFa">
<text class="qufa-label">取法:</text>
<text class="qufa-value">{{ result.sanChuanQuFa }}</text>
</view>
</view>
<view class="section-card">
<view class="section-title">节气信息</view>
<view class="jieqi-info">
<view class="jieqi-row">
<text class="jieqi-label">上一节:</text>
<text class="jieqi-value">{{ result.prevJie }}</text>
<text class="jieqi-date">{{ result.prevJieDateStr }}</text>
</view>
<view class="jieqi-row">
<text class="jieqi-label">下一节:</text>
<text class="jieqi-value">{{ result.nextJie }}</text>
<text class="jieqi-date">{{ result.nextJieDateStr }}</text>
</view>
<view class="jieqi-row">
<text class="jieqi-label">上一气:</text>
<text class="jieqi-value">{{ result.prevQi }}</text>
<text class="jieqi-date">{{ result.prevQiDateStr }}</text>
</view>
<view class="jieqi-row">
<text class="jieqi-label">下一气:</text>
<text class="jieqi-value">{{ result.nextQi }}</text>
<text class="jieqi-date">{{ result.nextQiDateStr }}</text>
</view>
</view>
</view>
<view class="section-card" v-if="result.wuXingWangShuai">
<view class="section-title">五行旺衰</view>
<view class="wuxing-grid">
<text class="wuxing-item" v-for="(item, index) in result.wuXingWangShuai" :key="index">{{ item }}</text>
</view>
</view>
<view class="section-card">
<view class="section-title">空亡信息</view>
<view class="kongwang-grid">
<view class="kongwang-item">
<text class="kongwang-label">年柱空亡</text>
<text class="kongwang-value">{{ result.yearGanZhiKongWang }}</text>
</view>
<view class="kongwang-item">
<text class="kongwang-label">月柱空亡</text>
<text class="kongwang-value">{{ result.monthGanZhiKongWang }}</text>
</view>
<view class="kongwang-item">
<text class="kongwang-label">日柱空亡</text>
<text class="kongwang-value">{{ result.dayGanZhiKongWang }}</text>
</view>
<view class="kongwang-item">
<text class="kongwang-label">时柱空亡</text>
<text class="kongwang-value">{{ result.hourGanZhiKongWang }}</text>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
result: {}
}
},
onLoad() {
this.result = getApp().globalData.daliurenResult || {}
console.log('大六壬结果:', this.result)
}
}
</script>
<style>
page {
background: linear-gradient(180deg, #F0FDF4 0%, #DCFCE7 50%, #BBF7D0 100%);
min-height: 100vh;
}
.container {
min-height: 100vh;
padding: 24rpx;
}
.header-card {
background: linear-gradient(135deg, #059669 0%, #047857 100%);
border-radius: 24rpx;
padding: 32rpx;
margin-bottom: 24rpx;
box-shadow: 0 8rpx 24rpx rgba(5, 150, 105, 0.2);
}
.header-row {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16rpx;
}
.name {
font-size: 36rpx;
font-weight: 700;
color: #ffffff;
}
.sex {
font-size: 28rpx;
color: rgba(255, 255, 255, 0.9);
padding: 8rpx 24rpx;
background: rgba(255, 255, 255, 0.2);
border-radius: 20rpx;
}
.date-row {
margin-bottom: 8rpx;
}
.date-text {
font-size: 26rpx;
color: rgba(255, 255, 255, 0.9);
}
.info-row {
display: flex;
flex-wrap: wrap;
gap: 16rpx;
margin-top: 16rpx;
}
.info-item {
font-size: 24rpx;
color: rgba(255, 255, 255, 0.8);
padding: 6rpx 16rpx;
background: rgba(255, 255, 255, 0.15);
border-radius: 12rpx;
}
.section-card {
background: rgba(255, 255, 255, 0.95);
border-radius: 20rpx;
padding: 24rpx;
margin-bottom: 20rpx;
box-shadow: 0 4rpx 16rpx rgba(5, 150, 105, 0.08);
}
.section-title {
font-size: 30rpx;
font-weight: 600;
color: #065F46;
margin-bottom: 20rpx;
padding-bottom: 12rpx;
border-bottom: 2rpx solid #D1FAE5;
}
.bazhi-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16rpx;
}
.bazhi-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 20rpx 12rpx;
background: linear-gradient(135deg, #D1FAE5 0%, #A7F3D0 100%);
border-radius: 16rpx;
}
.bazhi-label {
font-size: 24rpx;
color: #065F46;
margin-bottom: 8rpx;
}
.bazhi-value {
font-size: 36rpx;
font-weight: 700;
color: #059669;
margin-bottom: 8rpx;
}
.bazhi-nayin {
font-size: 20rpx;
color: #047857;
}
.info-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16rpx;
}
.info-row-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16rpx;
background: #F0FDF4;
border-radius: 12rpx;
}
.info-label {
font-size: 26rpx;
color: #6B7280;
}
.info-value {
font-size: 28rpx;
font-weight: 600;
color: #059669;
}
.pan-grid {
display: flex;
flex-direction: column;
gap: 12rpx;
}
.pan-row {
display: flex;
align-items: center;
padding: 12rpx;
background: #F0FDF4;
border-radius: 12rpx;
}
.pan-label {
width: 80rpx;
font-size: 24rpx;
color: #065F46;
font-weight: 600;
}
.pan-values {
flex: 1;
display: flex;
flex-wrap: wrap;
gap: 8rpx;
}
.pan-value {
font-size: 24rpx;
color: #059669;
padding: 4rpx 12rpx;
background: #D1FAE5;
border-radius: 8rpx;
}
.pan-value.shen {
background: #FEF3C7;
color: #D97706;
}
.sike-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 12rpx;
}
.sike-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 16rpx 8rpx;
background: #F0FDF4;
border-radius: 12rpx;
}
.sike-header {
margin-bottom: 8rpx;
}
.sike-label {
font-size: 22rpx;
color: #065F46;
}
.sike-content {
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 8rpx;
}
.sike-gan, .sike-zhi {
font-size: 32rpx;
font-weight: 700;
color: #059669;
}
.sike-extra {
margin-top: 4rpx;
}
.sike-dungan, .sike-shen {
font-size: 20rpx;
color: #6B7280;
}
.sanchuan-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16rpx;
margin-bottom: 16rpx;
}
.sanchuan-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 24rpx 16rpx;
background: linear-gradient(135deg, #D1FAE5 0%, #A7F3D0 100%);
border-radius: 16rpx;
}
.sanchuan-label {
font-size: 24rpx;
color: #065F46;
margin-bottom: 8rpx;
}
.sanchuan-value {
font-size: 40rpx;
font-weight: 700;
color: #059669;
margin-bottom: 8rpx;
}
.sanchuan-dungan, .sanchuan-shen, .sanchuan-liuqin {
font-size: 22rpx;
color: #047857;
margin-top: 4rpx;
}
.sanchuan-qufa {
display: flex;
align-items: center;
padding: 16rpx;
background: #FEF3C7;
border-radius: 12rpx;
}
.qufa-label {
font-size: 26rpx;
color: #92400E;
margin-right: 8rpx;
}
.qufa-value {
font-size: 28rpx;
font-weight: 600;
color: #D97706;
}
.jieqi-info {
display: flex;
flex-direction: column;
gap: 12rpx;
}
.jieqi-row {
display: flex;
align-items: center;
padding: 12rpx;
background: #F0FDF4;
border-radius: 12rpx;
}
.jieqi-label {
width: 120rpx;
font-size: 24rpx;
color: #6B7280;
}
.jieqi-value {
font-size: 26rpx;
font-weight: 600;
color: #059669;
margin-right: 16rpx;
}
.jieqi-date {
font-size: 22rpx;
color: #6B7280;
}
.wuxing-grid {
display: flex;
flex-wrap: wrap;
gap: 12rpx;
}
.wuxing-item {
font-size: 24rpx;
color: #059669;
padding: 8rpx 16rpx;
background: #D1FAE5;
border-radius: 12rpx;
}
.kongwang-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12rpx;
}
.kongwang-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16rpx;
background: #F0FDF4;
border-radius: 12rpx;
}
.kongwang-label {
font-size: 24rpx;
color: #6B7280;
}
.kongwang-value {
font-size: 28rpx;
font-weight: 600;
color: #DC2626;
}
</style>
+50
View File
@@ -77,8 +77,58 @@ const liuyaoApi = {
}
}
const daliurenApi = {
paiPan: (data) => {
return request({
url: '/daliuren/paipan',
method: 'POST',
data: {
name: data.name || '某人',
occupy: data.occupy || '某事',
sex: data.sex || 1,
date: data.date,
dateType: data.dateType || 0,
leapMonthType: data.leapMonthType || 0,
xuShiSuiType: data.xuShiSuiType || 0,
jieQiType: data.jieQiType || 1,
guiRenType: data.guiRenType || 0,
yearGanZhiType: data.yearGanZhiType || 2,
monthGanZhiType: data.monthGanZhiType || 1,
dayGanZhiType: data.dayGanZhiType || 0
}
})
}
}
const qimenApi = {
paiPan: (data) => {
return request({
url: '/qimen/paipan',
method: 'POST',
data: {
name: data.name || '某人',
occupy: data.occupy || '某事',
sex: data.sex || 1,
date: data.date,
dateType: data.dateType || 0,
leapMonthType: data.leapMonthType || 0,
xuShiSuiType: data.xuShiSuiType || 0,
jieQiType: data.jieQiType || 1,
paiPanType: data.paiPanType || 3,
zhiShiType: data.zhiShiType || 0,
yueJiaQiJuType: data.yueJiaQiJuType || 1,
yearGanZhiType: data.yearGanZhiType || 2,
monthGanZhiType: data.monthGanZhiType || 1,
dayGanZhiType: data.dayGanZhiType || 0
}
})
}
}
export default {
baziApi,
liuyaoApi,
daliurenApi,
qimenApi,
request
}