22285461@qq.com 3 月之前
父節點
當前提交
a2885b60de
共有 67 個文件被更改,包括 14500 次插入15 次删除
  1. 4 0
      dist/assets/index-3BUoRi-i.js
  2. 0 4
      dist/assets/index-DfclnlrV.js
  3. 0 0
      dist/assets/index-FrvreMPU.css
  4. 0 0
      dist/assets/index-TJPQTzOJ.css
  5. 2 2
      dist/index.html
  6. 46 0
      package-lock.json
  7. 2 0
      package.json
  8. 369 0
      src/DataCenter.ts
  9. 7 0
      src/LocalModels.ts
  10. 3244 0
      src/NongLiData.ts
  11. 89 0
      src/Tools.ts
  12. 7 0
      src/components/ApplyUserInfo.vue
  13. 150 0
      src/components/customer/BaZiInfo.vue
  14. 356 0
      src/components/customer/BaseInfo.vue
  15. 89 0
      src/components/customer/Controller.vue
  16. 72 0
      src/components/customer/DaYun.vue
  17. 307 0
      src/components/customer/GeJuInfo.vue
  18. 64 0
      src/components/customer/Login.vue
  19. 154 0
      src/components/customer/PowerInfo.vue
  20. 383 0
      src/components/customer/QuShi.vue
  21. 322 0
      src/components/customer/RiYunShi.vue
  22. 178 0
      src/components/customer/User.vue
  23. 82 0
      src/components/customer/ZhenDuan.vue
  24. 123 0
      src/components/customer/base_info/Area.vue
  25. 139 0
      src/components/customer/base_info/NongLi.vue
  26. 120 0
      src/components/customer/base_info/SiZhuSelector.vue
  27. 125 0
      src/components/customer/base_info/XinLi.vue
  28. 70 0
      src/components/customer/da_yun/DaYunList.vue
  29. 153 0
      src/components/customer/da_yun/DiZhi_CangGan.vue
  30. 398 0
      src/components/customer/da_yun/DiZhi_GaoNeng.vue
  31. 88 0
      src/components/customer/da_yun/LiuNianList.vue
  32. 211 0
      src/components/customer/da_yun/LiuRiList.vue
  33. 66 0
      src/components/customer/da_yun/LiuYueList.vue
  34. 106 0
      src/components/customer/da_yun/Shen_Sha.vue
  35. 127 0
      src/components/customer/da_yun/SiZhu_DiZhi.vue
  36. 121 0
      src/components/customer/da_yun/SiZhu_TianGan.vue
  37. 310 0
      src/components/customer/da_yun/TianGan_GaoNeng.vue
  38. 188 0
      src/components/customer/ge_ju/DiZhi_GaoNeng_GeJu.vue
  39. 77 0
      src/components/customer/ge_ju/DiZhi_List.vue
  40. 189 0
      src/components/customer/ge_ju/DiZhi_ShiShen_Scores.vue
  41. 109 0
      src/components/customer/ge_ju/Score_Shower.vue
  42. 186 0
      src/components/customer/ge_ju/TianGan_GaoNeng_GeJu.vue
  43. 59 0
      src/components/customer/ge_ju/TianGan_List.vue
  44. 187 0
      src/components/customer/ge_ju/TianGan_ShiShen_Scores.vue
  45. 188 0
      src/components/customer/ge_ju/WuXing_Powers.vue
  46. 36 0
      src/components/customer/ge_ju/Xiong_Ji_Tip.vue
  47. 80 0
      src/components/customer/zhen_duan/DaYunZhenDuan.vue
  48. 104 0
      src/components/customer/zhen_duan/GaoNengZhenDuan.vue
  49. 83 0
      src/components/customer/zhen_duan/GeJuZhenDuan.vue
  50. 81 0
      src/components/customer/zhen_duan/JianKangZhenDuan.vue
  51. 81 0
      src/components/customer/zhen_duan/MenHuZhenDuan.vue
  52. 81 0
      src/components/customer/zhen_duan/QingGanZhenDuan.vue
  53. 81 0
      src/components/customer/zhen_duan/ShenShaZhenDuan.vue
  54. 81 0
      src/components/customer/zhen_duan/ShiShenZhenDuan.vue
  55. 84 0
      src/components/customer/zhen_duan/WuXingZhenDuan.vue
  56. 80 0
      src/components/customer/zhen_duan/YinYuanZhenDuan.vue
  57. 81 0
      src/components/customer/zhen_duan/ZuoZhiZhenDuan.vue
  58. 336 0
      src/customer/APICenter.ts
  59. 2326 0
      src/customer/Configs.ts
  60. 95 0
      src/customer/DecoratorController.ts
  61. 186 0
      src/customer/QuShiLogic.ts
  62. 179 0
      src/customer/RiYunShiLogic.ts
  63. 1104 0
      src/customer/SupportModels.ts
  64. 17 0
      src/main.ts
  65. 18 8
      src/router.ts
  66. 16 0
      src/theme.css
  67. 3 1
      tsconfig.json

文件差異過大導致無法顯示
+ 4 - 0
dist/assets/index-3BUoRi-i.js


文件差異過大導致無法顯示
+ 0 - 4
dist/assets/index-DfclnlrV.js


文件差異過大導致無法顯示
+ 0 - 0
dist/assets/index-FrvreMPU.css


文件差異過大導致無法顯示
+ 0 - 0
dist/assets/index-TJPQTzOJ.css


+ 2 - 2
dist/index.html

@@ -5,8 +5,8 @@
     <link rel="icon" type="image/svg+xml" href="/vite.svg"/>
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
     <title>桢禧文化</title>
-  <script type="module" crossorigin src="/assets/index-DfclnlrV.js"></script>
-  <link rel="stylesheet" crossorigin href="/assets/index-FrvreMPU.css">
+  <script type="module" crossorigin src="/assets/index-3BUoRi-i.js"></script>
+  <link rel="stylesheet" crossorigin href="/assets/index-TJPQTzOJ.css">
 </head>
 <body>
 <div id="app"></div>

+ 46 - 0
package-lock.json

@@ -8,7 +8,9 @@
       "name": "yixue_gzh_web",
       "version": "0.0.0",
       "dependencies": {
+        "echarts": "^5.5.1",
         "element-plus": "^2.7.5",
+        "universal-cookie": "^7.2.0",
         "vue": "^3.4.21",
         "vue-router": "^4.3.3"
       },
@@ -655,6 +657,11 @@
         "win32"
       ]
     },
+    "node_modules/@types/cookie": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmmirror.com/@types/cookie/-/cookie-0.6.0.tgz",
+      "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
+    },
     "node_modules/@types/estree": {
       "version": "1.0.5",
       "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz",
@@ -949,6 +956,14 @@
       "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==",
       "dev": true
     },
+    "node_modules/cookie": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.6.0.tgz",
+      "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/csstype": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
@@ -965,6 +980,15 @@
       "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
       "dev": true
     },
+    "node_modules/echarts": {
+      "version": "5.5.1",
+      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.1.tgz",
+      "integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
+      "dependencies": {
+        "tslib": "2.3.0",
+        "zrender": "5.6.0"
+      }
+    },
     "node_modules/element-plus": {
       "version": "2.7.5",
       "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.7.5.tgz",
@@ -1241,6 +1265,11 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/tslib": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+    },
     "node_modules/typescript": {
       "version": "5.4.5",
       "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.4.5.tgz",
@@ -1254,6 +1283,15 @@
         "node": ">=14.17"
       }
     },
+    "node_modules/universal-cookie": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/universal-cookie/-/universal-cookie-7.2.0.tgz",
+      "integrity": "sha512-PvcyflJAYACJKr28HABxkGemML5vafHmiL4ICe3e+BEKXRMt0GaFLZhAwgv637kFFnnfiSJ8e6jknrKkMrU+PQ==",
+      "dependencies": {
+        "@types/cookie": "^0.6.0",
+        "cookie": "^0.6.0"
+      }
+    },
     "node_modules/vite": {
       "version": "5.3.1",
       "resolved": "https://registry.npmmirror.com/vite/-/vite-5.3.1.tgz",
@@ -1375,6 +1413,14 @@
       "peerDependencies": {
         "typescript": "*"
       }
+    },
+    "node_modules/zrender": {
+      "version": "5.6.0",
+      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
+      "integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
+      "dependencies": {
+        "tslib": "2.3.0"
+      }
     }
   }
 }

+ 2 - 0
package.json

@@ -9,7 +9,9 @@
     "preview": "vite preview"
   },
   "dependencies": {
+    "echarts": "^5.5.1",
     "element-plus": "^2.7.5",
+    "universal-cookie": "^7.2.0",
     "vue": "^3.4.21",
     "vue-router": "^4.3.3"
   },

+ 369 - 0
src/DataCenter.ts

@@ -1,4 +1,19 @@
 import {LocalModels} from "./LocalModels.ts";
+import {Configs} from "./customer/Configs.ts";
+import {
+    BaZi,
+    DaYunItem,
+    GaoNeng,
+    LiuNian,
+    LiuRi,
+    LiuYue,
+    QuShiInfo,
+    SiZhu,
+    UserInfo
+} from "./customer/SupportModels.ts";
+import {ref} from "vue";
+import {QuShiLogic} from "./customer/QuShiLogic.ts";
+import {RiYunShiLogic} from "./customer/RiYunShiLogic.ts";
 
 export namespace DataCenter {
 
@@ -10,6 +25,50 @@ export namespace DataCenter {
 
     export let quData: Map<string, LocalModels.Area> = new Map()
 
+    export let nongliMonths: Map<number, string[]> = new Map() //指定年有哪些农历月
+
+    export let nongliDays: Map<string, string> = new Map() //指定年月最大的农历日是什么
+
+    export let bazi = ref<BaZi>()
+
+    export let powerMode = ref(1)
+
+    export let dayunIndex = ref()
+
+    export let curDaYun = ref<DaYunItem>()
+
+    export let liunianIndex = ref()
+
+    export let curLiuNianList = ref([])
+
+    export let curLiuNian = ref<LiuNian>()
+
+    export let liuyueIndex = ref()
+
+    export let curLiuYue = ref<LiuYue>()
+
+    export let liuriIndex = ref()
+
+    export let curLiuRi = ref<LiuRi>()
+
+    export let includeDaYunInGeJu = ref(false)
+
+    export let includeLiuNianInGeJu = ref(false)
+
+    export let selectedDaYunInGeJu = ref()
+
+    export let selectedLiuNianInGeJu = ref()
+
+    export let lastKeyInGeJu = ref(null)
+
+    export let owernId = 99
+
+    export let ownerUsers = ref<UserInfo[]>([])
+
+    export let historyUser = ref<UserInfo[]>([])
+
+    export let historyBaZi = ref<BaZi[]>([])
+
     export function addAreaData(data: LocalModels.Area) {
         let key1 = data.sheng
         if (!shengShi.has(key1)) {
@@ -32,4 +91,314 @@ export namespace DataCenter {
         let key3 = data.sheng + data.shi + data.qu
         quData.set(key3, data)
     }
+
+    export function addNongLi(data: LocalModels.NongLi) {
+        let months = nongliMonths.get(data.year)
+        if (months == null) {
+            months = []
+            nongliMonths.set(data.year, months)
+        }
+        if (months.indexOf(data.month) == -1) {
+            months.push(data.month)
+        }
+        let dayKey = data.year.toString() + data.month
+        nongliDays.set(dayKey, data.day)
+    }
+
+    export function getNontLiMonths(year: number) {
+        return nongliMonths.get(year)
+    }
+
+    export function getNongLiDays(year: number, month: string) {
+        let result = []
+        let key = year.toString() + month
+        let maxDay = nongliDays.get(key)
+        for (let i = 0; i < Configs.nongliAry.length; i++) {
+            let nl = Configs.nongliAry[i]
+            result.push(nl)
+            if (nl == maxDay) {
+                break
+            }
+        }
+        return result
+    }
+
+    export function fixPinYin(key: string) {
+        let result = []
+        if (key.length > 0) {
+            quData.forEach(function (value) {
+                let allKey = value.shiPinYin + value.quPinYin
+                if (allKey.indexOf(key) != -1) {
+                    result.push(value)
+                }
+                let allName = value.sheng + value.shi + value.qu
+                if (allName.indexOf(key) != -1) {
+                    result.push(value)
+                }
+            })
+        }
+
+        return result
+    }
+
+    function calcFangXiang(gn: GaoNeng, zhu: SiZhu) {
+        if (["合", "暗合", "半合"].indexOf(gn.guanxi) != -1) {
+            if (zhu.text == gn.fangxiang) {
+                gn.sign = ""
+            } else {
+                if (gn.wei_zhi3 == null) {
+                    if (zhu.wei_zhi < gn.wei_zhi2) {
+                        gn.sign = "→"
+                    } else {
+                        gn.sign = "←"
+                    }
+                } else {
+                    let wz = gn.wei_zhi2
+                    if (gn.fangxiang == gn.arg3) {
+                        wz = gn.wei_zhi3
+                    }
+                    if (zhu.wei_zhi < wz) {
+                        gn.sign = "→"
+                    } else {
+                        gn.sign = "←"
+                    }
+                }
+            }
+        }
+    }
+
+    function buildGaoNeng(riyuan: string, data: object, zhu1: SiZhu, zhu2: SiZhu, zhu3: SiZhu, trigger: string = null) {
+        let gn = new GaoNeng()
+        gn.arg1 = zhu1.text
+        gn.arg2 = zhu2.text
+        gn.wei_zhi1 = zhu1.wei_zhi
+        gn.wei_zhi2 = zhu2.wei_zhi
+        gn.wu_xing1 = zhu1.wu_xing
+        gn.wu_xing2 = zhu2.wu_xing
+        gn.shi_shen1 = zhu1.shi_shen
+        gn.shi_shen2 = zhu2.shi_shen
+        if (zhu3 != null) {
+            gn.arg3 = zhu3.text
+            gn.wei_zhi3 = zhu3.wei_zhi
+            gn.wu_xing3 = zhu3.wu_xing
+            gn.shi_shen3 = zhu3.shi_shen
+        }
+        gn.text = data["name"]
+        gn.guanxi = data["guanxi"]
+        gn.leibie = data["leibie"]
+        gn.hehua = data["hehua"]
+        gn.fangxiang = data["fangxiang"]
+        if (["半合", "拱合", "三会"].indexOf(gn.guanxi) != -1) {
+            gn.zengqiang_shishen = Configs.config_shishen[riyuan][gn.fangxiang]
+        }
+
+        if (gn.guanxi == "刑") {
+            let xing = Configs.config_gaoneng_xing[gn.text]
+            if (xing != null) {
+                let chus = xing["刑出"]
+                let chongs = xing["刑冲"]
+                gn.xing_chu = ""
+                gn.xing_chong = ""
+                chus.forEach(function (chu) {
+                    let xing_shi_shen = Configs.config_shishen[riyuan][chu]
+                    gn.xing_chu += xing_shi_shen
+                })
+                chongs.forEach(function (chong) {
+                    let chong_shi_shen1 = Configs.config_shishen[riyuan][chong[0]]
+                    let chong_shi_shen2 = Configs.config_shishen[riyuan][chong[1]]
+                    gn.xing_chong += chong_shi_shen1 + chong_shi_shen2 + "冲"
+                })
+            }
+        }
+
+        gn.tip = data["tip"]
+        calcFangXiang(gn, zhu1)
+        if (trigger == null) {
+            zhu1.gaonengs.push(gn)
+        } else {
+            if (!zhu1.trigger_gaonengs.has(trigger)) {
+                zhu1.trigger_gaonengs.set(trigger, [])
+            }
+            let lst = zhu1.trigger_gaonengs.get(trigger)
+            lst.push(gn)
+            //console.log(trigger, zhu1.trigger_gaonengs, gn.text, zhu1.wei_zhi, zhu1.arg1)
+        }
+    }
+
+    export function fixGaoNengByZhu(riyuan: string, zhu1: SiZhu, zhu2: SiZhu, trigger: string) {
+        if (zhu1 == zhu2) {
+            return
+        }
+        let key = zhu1.text + zhu2.text
+        let query = Configs.config_gaoneng_query[key]
+        if (query != null) {
+            query.forEach(function (gaonengData) {
+                buildGaoNeng(riyuan, gaonengData, zhu1, zhu2, null, trigger)
+                buildGaoNeng(riyuan, gaonengData, zhu2, zhu1, null, trigger)
+            })
+        }
+    }
+
+    export function fixGaoNeng(riyuan: string, zhu: SiZhu, targets: SiZhu[], trigger: string) {
+        targets.forEach(function (sz) {
+            if (zhu != sz) {
+                let zhu1 = zhu
+                let zhu2 = sz
+                let key = zhu1.text + zhu2.text
+                let query = Configs.config_gaoneng_query[key]
+                if (query != null) {
+                    query.forEach(function (gaonengData) {
+                        buildGaoNeng(riyuan, gaonengData, zhu1, zhu2, null, null)
+                        buildGaoNeng(riyuan, gaonengData, zhu2, zhu1, null, trigger)
+                    })
+                }
+            }
+            //Configs.config_gaoneng_query.__contains__(key):
+        })
+    }
+
+    export function calcLiuYueGaoNeng(liuyue: LiuYue, dayun: DaYunItem, liunian: LiuNian) {
+        if (DataCenter.bazi.value == null) {
+            return
+        }
+        if (!liuyue.is_gaoneng_calced) {
+            let riyuan = DataCenter.bazi.value.ri_gan.text
+            let trigger = liuyue.trigger
+            let tgs = [
+                DataCenter.bazi.value.nian_gan,
+                DataCenter.bazi.value.yue_gan,
+                DataCenter.bazi.value.ri_gan,
+                DataCenter.bazi.value.shi_gan,
+                dayun.gan_zhu,
+                liunian.gan_zhu,
+            ]
+            let dzs = [
+                DataCenter.bazi.value.nian_zhi,
+                DataCenter.bazi.value.yue_zhi,
+                DataCenter.bazi.value.ri_zhi,
+                DataCenter.bazi.value.shi_zhi,
+                dayun.zhi_zhu,
+                liunian.zhi_zhu,
+            ]
+            DataCenter.fixGaoNeng(riyuan, liuyue.gan_zhu, tgs, trigger)
+            DataCenter.fixGaoNeng(riyuan, liuyue.zhi_zhu, dzs, trigger)
+            liuyue.is_gaoneng_calced = true
+        }
+    }
+
+    export function calcLiuRiGaoNeng(liuri: LiuRi, liuyue: LiuYue, dayun: DaYunItem, liunian: LiuNian) {
+        if (DataCenter.bazi.value == null) {
+            return
+        }
+        if (!liuri.is_gaoneng_calced) {
+            let riyuan = DataCenter.bazi.value.ri_gan.text
+            let trigger = liuri.trigger
+            let tgs = [
+                DataCenter.bazi.value.nian_gan,
+                DataCenter.bazi.value.yue_gan,
+                DataCenter.bazi.value.ri_gan,
+                DataCenter.bazi.value.shi_gan,
+                dayun.gan_zhu,
+                liunian.gan_zhu,
+                liuyue.gan_zhu,
+            ]
+            let dzs = [
+                DataCenter.bazi.value.nian_zhi,
+                DataCenter.bazi.value.yue_zhi,
+                DataCenter.bazi.value.ri_zhi,
+                DataCenter.bazi.value.shi_zhi,
+                dayun.zhi_zhu,
+                liunian.zhi_zhu,
+                liuyue.zhi_zhu,
+            ]
+            DataCenter.fixGaoNeng(riyuan, liuri.gan_zhu, tgs, trigger)
+            DataCenter.fixGaoNeng(riyuan, liuri.zhi_zhu, dzs, trigger)
+            liuri.is_gaoneng_calced = true
+        }
+    }
+
+    export function calcQuShi() {
+        if (DataCenter.bazi.value == null) {
+            return
+        }
+        DataCenter.bazi.value.qushiInfo = []
+        //只计算未来三年的趋势,可以看到月份数据
+        //大运、年、月趋势都只算自身的,年趋势数据不再需要月数据累加
+        let len = 3
+        let year = new Date().getFullYear()
+        let data = QuShiLogic.findDaYunLiuNian(year, DataCenter.bazi.value)
+        let dy = data[0]
+        let ln = data[1]
+
+        if (dy != null && ln != null) {
+            let lushen = DataCenter.bazi.value.shishen_guanxi.get("禄神")[0]
+            let banlu = DataCenter.bazi.value.shishen_guanxi.get("半禄")
+            let dayunList: DaYunItem[] = [dy]
+            let liunianList: LiuNian[] = [ln]
+            while (liunianList.length < len) {
+                let dt = QuShiLogic.getNext(DataCenter.bazi.value, dy, ln)
+                if (dt == null) {
+                    break
+                } else {
+                    dy = dt[0]
+                    ln = dt[1]
+                    dayunList.push(dy)
+                    liunianList.push(ln)
+                }
+            }
+
+            for (let i = 0; i < liunianList.length; i++) {
+                let dayun = dayunList[i]
+                let liunian = liunianList[i]
+                let yunKey = dayun.gan_text + dayun.zhi_text + "运"
+                let nianKey = liunian.year.toString() + "年"
+
+                let info = new QuShiInfo()
+                info.year = liunian.year
+
+                QuShiLogic.calcQuShiScore(dayun.gan_zhu, info, lushen, banlu, yunKey, 0)
+                QuShiLogic.calcQuShiScore(dayun.zhi_zhu, info, lushen, banlu, yunKey, 0)
+                QuShiLogic.calcQuShiScore(liunian.gan_zhu, info, lushen, banlu, nianKey, 1)
+                QuShiLogic.calcQuShiScore(liunian.zhi_zhu, info, lushen, banlu, nianKey, 1)
+
+                for (let j = 0; j < liunian.liuyue.length; j++) {
+                    let liuyue = liunian.liuyue[j]
+                    let yueKey = nianKey + liuyue.month.toString() + "月"
+                    if (!liuyue.is_gaoneng_calced) {
+                        calcLiuYueGaoNeng(liuyue, dayun, liunian)
+                    }
+                    QuShiLogic.calcQuShiScore(liuyue.gan_zhu, info, lushen, banlu, yueKey, 2, liuyue.month)
+                    QuShiLogic.calcQuShiScore(liuyue.zhi_zhu, info, lushen, banlu, yueKey, 2, liuyue.month)
+                }
+
+                info.calcTotal()
+                DataCenter.bazi.value.qushiInfo.push(info)
+            }
+        }
+
+    }
+
+    export function calcRiYunShi() {
+        if (DataCenter.bazi.value != null) {
+            DataCenter.bazi.value.dailyQuShi = []
+            DataCenter.bazi.value.dailyQuShiDate = []
+            for (let i = 0; i <= 1; i++) {
+                let date = new Date()
+                //date.setDate(31)
+                date.setDate(date.getDate() + i)
+                let year = date.getFullYear()
+                let month = date.getMonth() + 1
+                let day = date.getDate()
+                let data = RiYunShiLogic.findNianYueRi(year, month, day, DataCenter.bazi.value)
+                let ln = data[0]
+                let ly = data[1]
+                let lr = data[2]
+                if (ln != null && ly != null && lr != null) {
+                    let map = RiYunShiLogic.calc(ln, ly, lr)
+                    DataCenter.bazi.value.dailyQuShi.push(map)
+                    DataCenter.bazi.value.dailyQuShiDate.push(date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " + lr.gan_text + lr.zhi_text + "日")
+                }
+            }
+        }
+    }
 }

+ 7 - 0
src/LocalModels.ts

@@ -20,6 +20,13 @@ export namespace LocalModels {
         quPinYin: string
     }
 
+    export class NongLi {
+        date: string
+        month: string
+        day: string
+        year: number
+    }
+
     export class BaseResponse {
         code: number
         msg: string

+ 3244 - 0
src/NongLiData.ts

@@ -0,0 +1,3244 @@
+export namespace NongLiData {
+    export const nongli = "1900/1/1,腊月,初一,1900\n" +
+        "1900/1/30,腊月,三十,1900\n" +
+        "1900/1/31,正月,初一,1900\n" +
+        "1900/2/28,正月,廿九,1900\n" +
+        "1900/3/1,二月,初一,1900\n" +
+        "1900/3/30,二月,三十,1900\n" +
+        "1900/3/31,三月,初一,1900\n" +
+        "1900/4/28,三月,廿九,1900\n" +
+        "1900/4/29,四月,初一,1900\n" +
+        "1900/5/27,四月,廿九,1900\n" +
+        "1900/5/28,五月,初一,1900\n" +
+        "1900/6/26,五月,三十,1900\n" +
+        "1900/6/27,六月,初一,1900\n" +
+        "1900/7/25,六月,廿九,1900\n" +
+        "1900/7/26,七月,初一,1900\n" +
+        "1900/8/24,七月,三十,1900\n" +
+        "1900/8/25,八月,初一,1900\n" +
+        "1900/9/23,八月,三十,1900\n" +
+        "1900/9/24,闰八月,初一,1900\n" +
+        "1900/10/22,闰八月,廿九,1900\n" +
+        "1900/10/23,九月,初一,1900\n" +
+        "1900/11/21,九月,三十,1900\n" +
+        "1900/11/22,十月,初一,1900\n" +
+        "1900/12/21,十月,三十,1900\n" +
+        "1900/12/22,冬月,初一,1900\n" +
+        "1901/1/19,冬月,廿九,1900\n" +
+        "1901/1/20,腊月,初一,1901\n" +
+        "1901/2/18,腊月,三十,1901\n" +
+        "1901/2/19,正月,初一,1901\n" +
+        "1901/3/19,正月,廿九,1901\n" +
+        "1901/3/20,二月,初一,1901\n" +
+        "1901/4/18,二月,三十,1901\n" +
+        "1901/4/19,三月,初一,1901\n" +
+        "1901/5/17,三月,廿九,1901\n" +
+        "1901/5/18,四月,初一,1901\n" +
+        "1901/6/15,四月,廿九,1901\n" +
+        "1901/6/16,五月,初一,1901\n" +
+        "1901/7/15,五月,三十,1901\n" +
+        "1901/7/16,六月,初一,1901\n" +
+        "1901/8/13,六月,廿九,1901\n" +
+        "1901/8/14,七月,初一,1901\n" +
+        "1901/9/12,七月,三十,1901\n" +
+        "1901/9/13,八月,初一,1901\n" +
+        "1901/10/11,八月,廿九,1901\n" +
+        "1901/10/12,九月,初一,1901\n" +
+        "1901/11/10,九月,三十,1901\n" +
+        "1901/11/11,十月,初一,1901\n" +
+        "1901/12/10,十月,三十,1901\n" +
+        "1901/12/11,冬月,初一,1901\n" +
+        "1902/1/9,冬月,三十,1901\n" +
+        "1902/1/10,腊月,初一,1902\n" +
+        "1902/2/7,腊月,廿九,1902\n" +
+        "1902/2/8,正月,初一,1902\n" +
+        "1902/3/9,正月,三十,1902\n" +
+        "1902/3/10,二月,初一,1902\n" +
+        "1902/4/7,二月,廿九,1902\n" +
+        "1902/4/8,三月,初一,1902\n" +
+        "1902/5/7,三月,三十,1902\n" +
+        "1902/5/8,四月,初一,1902\n" +
+        "1902/6/5,四月,廿九,1902\n" +
+        "1902/6/6,五月,初一,1902\n" +
+        "1902/7/4,五月,廿九,1902\n" +
+        "1902/7/5,六月,初一,1902\n" +
+        "1902/8/3,六月,三十,1902\n" +
+        "1902/8/4,七月,初一,1902\n" +
+        "1902/9/1,七月,廿九,1902\n" +
+        "1902/9/2,八月,初一,1902\n" +
+        "1902/10/1,八月,三十,1902\n" +
+        "1902/10/2,九月,初一,1902\n" +
+        "1902/10/30,九月,廿九,1902\n" +
+        "1902/10/31,十月,初一,1902\n" +
+        "1902/11/29,十月,三十,1902\n" +
+        "1902/11/30,冬月,初一,1902\n" +
+        "1902/12/29,冬月,三十,1902\n" +
+        "1902/12/30,腊月,初一,1903\n" +
+        "1903/1/28,腊月,三十,1903\n" +
+        "1903/1/29,正月,初一,1903\n" +
+        "1903/2/26,正月,廿九,1903\n" +
+        "1903/2/27,二月,初一,1903\n" +
+        "1903/3/28,二月,三十,1903\n" +
+        "1903/3/29,三月,初一,1903\n" +
+        "1903/4/26,三月,廿九,1903\n" +
+        "1903/4/27,四月,初一,1903\n" +
+        "1903/5/26,四月,三十,1903\n" +
+        "1903/5/27,五月,初一,1903\n" +
+        "1903/6/24,五月,廿九,1903\n" +
+        "1903/6/25,闰五月,初一,1903\n" +
+        "1903/7/23,闰五月,廿九,1903\n" +
+        "1903/7/24,六月,初一,1903\n" +
+        "1903/8/22,六月,三十,1903\n" +
+        "1903/8/23,七月,初一,1903\n" +
+        "1903/9/20,七月,廿九,1903\n" +
+        "1903/9/21,八月,初一,1903\n" +
+        "1903/10/19,八月,廿九,1903\n" +
+        "1903/10/20,九月,初一,1903\n" +
+        "1903/11/18,九月,三十,1903\n" +
+        "1903/11/19,十月,初一,1903\n" +
+        "1903/12/18,十月,三十,1903\n" +
+        "1903/12/19,冬月,初一,1903\n" +
+        "1904/1/16,冬月,廿九,1903\n" +
+        "1904/1/17,腊月,初一,1904\n" +
+        "1904/2/15,腊月,三十,1904\n" +
+        "1904/2/16,正月,初一,1904\n" +
+        "1904/3/16,正月,三十,1904\n" +
+        "1904/3/17,二月,初一,1904\n" +
+        "1904/4/15,二月,三十,1904\n" +
+        "1904/4/16,三月,初一,1904\n" +
+        "1904/5/14,三月,廿九,1904\n" +
+        "1904/5/15,四月,初一,1904\n" +
+        "1904/6/13,四月,三十,1904\n" +
+        "1904/6/14,五月,初一,1904\n" +
+        "1904/7/12,五月,廿九,1904\n" +
+        "1904/7/13,六月,初一,1904\n" +
+        "1904/8/10,六月,廿九,1904\n" +
+        "1904/8/11,七月,初一,1904\n" +
+        "1904/9/9,七月,三十,1904\n" +
+        "1904/9/10,八月,初一,1904\n" +
+        "1904/10/8,八月,廿九,1904\n" +
+        "1904/10/9,九月,初一,1904\n" +
+        "1904/11/6,九月,廿九,1904\n" +
+        "1904/11/7,十月,初一,1904\n" +
+        "1904/12/6,十月,三十,1904\n" +
+        "1904/12/7,冬月,初一,1904\n" +
+        "1905/1/5,冬月,三十,1904\n" +
+        "1905/1/6,腊月,初一,1905\n" +
+        "1905/2/3,腊月,廿九,1905\n" +
+        "1905/2/4,正月,初一,1905\n" +
+        "1905/3/5,正月,三十,1905\n" +
+        "1905/3/6,二月,初一,1905\n" +
+        "1905/4/4,二月,三十,1905\n" +
+        "1905/4/5,三月,初一,1905\n" +
+        "1905/5/3,三月,廿九,1905\n" +
+        "1905/5/4,四月,初一,1905\n" +
+        "1905/6/2,四月,三十,1905\n" +
+        "1905/6/3,五月,初一,1905\n" +
+        "1905/7/2,五月,三十,1905\n" +
+        "1905/7/3,六月,初一,1905\n" +
+        "1905/7/31,六月,廿九,1905\n" +
+        "1905/8/1,七月,初一,1905\n" +
+        "1905/8/29,七月,廿九,1905\n" +
+        "1905/8/30,八月,初一,1905\n" +
+        "1905/9/28,八月,三十,1905\n" +
+        "1905/9/29,九月,初一,1905\n" +
+        "1905/10/27,九月,廿九,1905\n" +
+        "1905/10/28,十月,初一,1905\n" +
+        "1905/11/26,十月,三十,1905\n" +
+        "1905/11/27,冬月,初一,1905\n" +
+        "1905/12/25,冬月,廿九,1905\n" +
+        "1905/12/26,腊月,初一,1906\n" +
+        "1906/1/24,腊月,三十,1906\n" +
+        "1906/1/25,正月,初一,1906\n" +
+        "1906/2/22,正月,廿九,1906\n" +
+        "1906/2/23,二月,初一,1906\n" +
+        "1906/3/24,二月,三十,1906\n" +
+        "1906/3/25,三月,初一,1906\n" +
+        "1906/4/23,三月,三十,1906\n" +
+        "1906/4/24,四月,初一,1906\n" +
+        "1906/5/22,四月,廿九,1906\n" +
+        "1906/5/23,闰四月,初一,1906\n" +
+        "1906/6/21,闰四月,三十,1906\n" +
+        "1906/6/22,五月,初一,1906\n" +
+        "1906/7/20,五月,廿九,1906\n" +
+        "1906/7/21,六月,初一,1906\n" +
+        "1906/8/19,六月,三十,1906\n" +
+        "1906/8/20,七月,初一,1906\n" +
+        "1906/9/17,七月,廿九,1906\n" +
+        "1906/9/18,八月,初一,1906\n" +
+        "1906/10/17,八月,三十,1906\n" +
+        "1906/10/18,九月,初一,1906\n" +
+        "1906/11/15,九月,廿九,1906\n" +
+        "1906/11/16,十月,初一,1906\n" +
+        "1906/12/15,十月,三十,1906\n" +
+        "1906/12/16,冬月,初一,1906\n" +
+        "1907/1/13,冬月,廿九,1906\n" +
+        "1907/1/14,腊月,初一,1907\n" +
+        "1907/2/12,腊月,三十,1907\n" +
+        "1907/2/13,正月,初一,1907\n" +
+        "1907/3/13,正月,廿九,1907\n" +
+        "1907/3/14,二月,初一,1907\n" +
+        "1907/4/12,二月,三十,1907\n" +
+        "1907/4/13,三月,初一,1907\n" +
+        "1907/5/11,三月,廿九,1907\n" +
+        "1907/5/12,四月,初一,1907\n" +
+        "1907/6/10,四月,三十,1907\n" +
+        "1907/6/11,五月,初一,1907\n" +
+        "1907/7/9,五月,廿九,1907\n" +
+        "1907/7/10,六月,初一,1907\n" +
+        "1907/8/8,六月,三十,1907\n" +
+        "1907/8/9,七月,初一,1907\n" +
+        "1907/9/7,七月,三十,1907\n" +
+        "1907/9/8,八月,初一,1907\n" +
+        "1907/10/6,八月,廿九,1907\n" +
+        "1907/10/7,九月,初一,1907\n" +
+        "1907/11/5,九月,三十,1907\n" +
+        "1907/11/6,十月,初一,1907\n" +
+        "1907/12/4,十月,廿九,1907\n" +
+        "1907/12/5,冬月,初一,1907\n" +
+        "1908/1/3,冬月,三十,1907\n" +
+        "1908/1/4,腊月,初一,1908\n" +
+        "1908/2/1,腊月,廿九,1908\n" +
+        "1908/2/2,正月,初一,1908\n" +
+        "1908/3/2,正月,三十,1908\n" +
+        "1908/3/3,二月,初一,1908\n" +
+        "1908/3/31,二月,廿九,1908\n" +
+        "1908/4/1,三月,初一,1908\n" +
+        "1908/4/29,三月,廿九,1908\n" +
+        "1908/4/30,四月,初一,1908\n" +
+        "1908/5/29,四月,三十,1908\n" +
+        "1908/5/30,五月,初一,1908\n" +
+        "1908/6/28,五月,三十,1908\n" +
+        "1908/6/29,六月,初一,1908\n" +
+        "1908/7/27,六月,廿九,1908\n" +
+        "1908/7/28,七月,初一,1908\n" +
+        "1908/8/26,七月,三十,1908\n" +
+        "1908/8/27,八月,初一,1908\n" +
+        "1908/9/24,八月,廿九,1908\n" +
+        "1908/9/25,九月,初一,1908\n" +
+        "1908/10/24,九月,三十,1908\n" +
+        "1908/10/25,十月,初一,1908\n" +
+        "1908/11/23,十月,三十,1908\n" +
+        "1908/11/24,冬月,初一,1908\n" +
+        "1908/12/22,冬月,廿九,1908\n" +
+        "1908/12/23,腊月,初一,1909\n" +
+        "1909/1/21,腊月,三十,1909\n" +
+        "1909/1/22,正月,初一,1909\n" +
+        "1909/2/19,正月,廿九,1909\n" +
+        "1909/2/20,二月,初一,1909\n" +
+        "1909/3/21,二月,三十,1909\n" +
+        "1909/3/22,闰二月,初一,1909\n" +
+        "1909/4/19,闰二月,廿九,1909\n" +
+        "1909/4/20,三月,初一,1909\n" +
+        "1909/5/18,三月,廿九,1909\n" +
+        "1909/5/19,四月,初一,1909\n" +
+        "1909/6/17,四月,三十,1909\n" +
+        "1909/6/18,五月,初一,1909\n" +
+        "1909/7/16,五月,廿九,1909\n" +
+        "1909/7/17,六月,初一,1909\n" +
+        "1909/8/15,六月,三十,1909\n" +
+        "1909/8/16,七月,初一,1909\n" +
+        "1909/9/13,七月,廿九,1909\n" +
+        "1909/9/14,八月,初一,1909\n" +
+        "1909/10/13,八月,三十,1909\n" +
+        "1909/10/14,九月,初一,1909\n" +
+        "1909/11/12,九月,三十,1909\n" +
+        "1909/11/13,十月,初一,1909\n" +
+        "1909/12/12,十月,三十,1909\n" +
+        "1909/12/13,冬月,初一,1909\n" +
+        "1910/1/10,冬月,廿九,1909\n" +
+        "1910/1/11,腊月,初一,1910\n" +
+        "1910/2/9,腊月,三十,1910\n" +
+        "1910/2/10,正月,初一,1910\n" +
+        "1910/3/10,正月,廿九,1910\n" +
+        "1910/3/11,二月,初一,1910\n" +
+        "1910/4/9,二月,三十,1910\n" +
+        "1910/4/10,三月,初一,1910\n" +
+        "1910/5/8,三月,廿九,1910\n" +
+        "1910/5/9,四月,初一,1910\n" +
+        "1910/6/6,四月,廿九,1910\n" +
+        "1910/6/7,五月,初一,1910\n" +
+        "1910/7/6,五月,三十,1910\n" +
+        "1910/7/7,六月,初一,1910\n" +
+        "1910/8/4,六月,廿九,1910\n" +
+        "1910/8/5,七月,初一,1910\n" +
+        "1910/9/3,七月,三十,1910\n" +
+        "1910/9/4,八月,初一,1910\n" +
+        "1910/10/2,八月,廿九,1910\n" +
+        "1910/10/3,九月,初一,1910\n" +
+        "1910/11/1,九月,三十,1910\n" +
+        "1910/11/2,十月,初一,1910\n" +
+        "1910/12/1,十月,三十,1910\n" +
+        "1910/12/2,冬月,初一,1910\n" +
+        "1910/12/31,冬月,三十,1910\n" +
+        "1911/1/1,腊月,初一,1911\n" +
+        "1911/1/29,腊月,廿九,1911\n" +
+        "1911/1/30,正月,初一,1911\n" +
+        "1911/2/28,正月,三十,1911\n" +
+        "1911/3/1,二月,初一,1911\n" +
+        "1911/3/29,二月,廿九,1911\n" +
+        "1911/3/30,三月,初一,1911\n" +
+        "1911/4/28,三月,三十,1911\n" +
+        "1911/4/29,四月,初一,1911\n" +
+        "1911/5/27,四月,廿九,1911\n" +
+        "1911/5/28,五月,初一,1911\n" +
+        "1911/6/25,五月,廿九,1911\n" +
+        "1911/6/26,六月,初一,1911\n" +
+        "1911/7/25,六月,三十,1911\n" +
+        "1911/7/26,闰六月,初一,1911\n" +
+        "1911/8/23,闰六月,廿九,1911\n" +
+        "1911/8/24,七月,初一,1911\n" +
+        "1911/9/21,七月,廿九,1911\n" +
+        "1911/9/22,八月,初一,1911\n" +
+        "1911/10/21,八月,三十,1911\n" +
+        "1911/10/22,九月,初一,1911\n" +
+        "1911/11/20,九月,三十,1911\n" +
+        "1911/11/21,十月,初一,1911\n" +
+        "1911/12/19,十月,廿九,1911\n" +
+        "1911/12/20,冬月,初一,1911\n" +
+        "1912/1/18,冬月,三十,1911\n" +
+        "1912/1/19,腊月,初一,1912\n" +
+        "1912/2/17,腊月,三十,1912\n" +
+        "1912/2/18,正月,初一,1912\n" +
+        "1912/3/18,正月,三十,1912\n" +
+        "1912/3/19,二月,初一,1912\n" +
+        "1912/4/16,二月,廿九,1912\n" +
+        "1912/4/17,三月,初一,1912\n" +
+        "1912/5/16,三月,三十,1912\n" +
+        "1912/5/17,四月,初一,1912\n" +
+        "1912/6/14,四月,廿九,1912\n" +
+        "1912/6/15,五月,初一,1912\n" +
+        "1912/7/13,五月,廿九,1912\n" +
+        "1912/7/14,六月,初一,1912\n" +
+        "1912/8/12,六月,三十,1912\n" +
+        "1912/8/13,七月,初一,1912\n" +
+        "1912/9/10,七月,廿九,1912\n" +
+        "1912/9/11,八月,初一,1912\n" +
+        "1912/10/9,八月,廿九,1912\n" +
+        "1912/10/10,九月,初一,1912\n" +
+        "1912/11/8,九月,三十,1912\n" +
+        "1912/11/9,十月,初一,1912\n" +
+        "1912/12/8,十月,三十,1912\n" +
+        "1912/12/9,冬月,初一,1912\n" +
+        "1913/1/6,冬月,廿九,1912\n" +
+        "1913/1/7,腊月,初一,1913\n" +
+        "1913/2/5,腊月,三十,1913\n" +
+        "1913/2/6,正月,初一,1913\n" +
+        "1913/3/7,正月,三十,1913\n" +
+        "1913/3/8,二月,初一,1913\n" +
+        "1913/4/6,二月,三十,1913\n" +
+        "1913/4/7,三月,初一,1913\n" +
+        "1913/5/5,三月,廿九,1913\n" +
+        "1913/5/6,四月,初一,1913\n" +
+        "1913/6/4,四月,三十,1913\n" +
+        "1913/6/5,五月,初一,1913\n" +
+        "1913/7/3,五月,廿九,1913\n" +
+        "1913/7/4,六月,初一,1913\n" +
+        "1913/8/1,六月,廿九,1913\n" +
+        "1913/8/2,七月,初一,1913\n" +
+        "1913/8/31,七月,三十,1913\n" +
+        "1913/9/1,八月,初一,1913\n" +
+        "1913/9/29,八月,廿九,1913\n" +
+        "1913/9/30,九月,初一,1913\n" +
+        "1913/10/28,九月,廿九,1913\n" +
+        "1913/10/29,十月,初一,1913\n" +
+        "1913/11/27,十月,三十,1913\n" +
+        "1913/11/28,冬月,初一,1913\n" +
+        "1913/12/26,冬月,廿九,1913\n" +
+        "1913/12/27,腊月,初一,1914\n" +
+        "1914/1/25,腊月,三十,1914\n" +
+        "1914/1/26,正月,初一,1914\n" +
+        "1914/2/24,正月,三十,1914\n" +
+        "1914/2/25,二月,初一,1914\n" +
+        "1914/3/26,二月,三十,1914\n" +
+        "1914/3/27,三月,初一,1914\n" +
+        "1914/4/24,三月,廿九,1914\n" +
+        "1914/4/25,四月,初一,1914\n" +
+        "1914/5/24,四月,三十,1914\n" +
+        "1914/5/25,五月,初一,1914\n" +
+        "1914/6/22,五月,廿九,1914\n" +
+        "1914/6/23,闰五月,初一,1914\n" +
+        "1914/7/22,闰五月,三十,1914\n" +
+        "1914/7/23,六月,初一,1914\n" +
+        "1914/8/20,六月,廿九,1914\n" +
+        "1914/8/21,七月,初一,1914\n" +
+        "1914/9/19,七月,三十,1914\n" +
+        "1914/9/20,八月,初一,1914\n" +
+        "1914/10/18,八月,廿九,1914\n" +
+        "1914/10/19,九月,初一,1914\n" +
+        "1914/11/16,九月,廿九,1914\n" +
+        "1914/11/17,十月,初一,1914\n" +
+        "1914/12/16,十月,三十,1914\n" +
+        "1914/12/17,冬月,初一,1914\n" +
+        "1915/1/14,冬月,廿九,1914\n" +
+        "1915/1/15,腊月,初一,1915\n" +
+        "1915/2/13,腊月,三十,1915\n" +
+        "1915/2/14,正月,初一,1915\n" +
+        "1915/3/15,正月,三十,1915\n" +
+        "1915/3/16,二月,初一,1915\n" +
+        "1915/4/13,二月,廿九,1915\n" +
+        "1915/4/14,三月,初一,1915\n" +
+        "1915/5/13,三月,三十,1915\n" +
+        "1915/5/14,四月,初一,1915\n" +
+        "1915/6/12,四月,三十,1915\n" +
+        "1915/6/13,五月,初一,1915\n" +
+        "1915/7/11,五月,廿九,1915\n" +
+        "1915/7/12,六月,初一,1915\n" +
+        "1915/8/10,六月,三十,1915\n" +
+        "1915/8/11,七月,初一,1915\n" +
+        "1915/9/8,七月,廿九,1915\n" +
+        "1915/9/9,八月,初一,1915\n" +
+        "1915/10/8,八月,三十,1915\n" +
+        "1915/10/9,九月,初一,1915\n" +
+        "1915/11/6,九月,廿九,1915\n" +
+        "1915/11/7,十月,初一,1915\n" +
+        "1915/12/6,十月,三十,1915\n" +
+        "1915/12/7,冬月,初一,1915\n" +
+        "1916/1/4,冬月,廿九,1915\n" +
+        "1916/1/5,腊月,初一,1916\n" +
+        "1916/2/2,腊月,廿九,1916\n" +
+        "1916/2/3,正月,初一,1916\n" +
+        "1916/3/3,正月,三十,1916\n" +
+        "1916/3/4,二月,初一,1916\n" +
+        "1916/4/2,二月,三十,1916\n" +
+        "1916/4/3,三月,初一,1916\n" +
+        "1916/5/1,三月,廿九,1916\n" +
+        "1916/5/2,四月,初一,1916\n" +
+        "1916/5/31,四月,三十,1916\n" +
+        "1916/6/1,五月,初一,1916\n" +
+        "1916/6/29,五月,廿九,1916\n" +
+        "1916/6/30,六月,初一,1916\n" +
+        "1916/7/29,六月,三十,1916\n" +
+        "1916/7/30,七月,初一,1916\n" +
+        "1916/8/28,七月,三十,1916\n" +
+        "1916/8/29,八月,初一,1916\n" +
+        "1916/9/26,八月,廿九,1916\n" +
+        "1916/9/27,九月,初一,1916\n" +
+        "1916/10/26,九月,三十,1916\n" +
+        "1916/10/27,十月,初一,1916\n" +
+        "1916/11/24,十月,廿九,1916\n" +
+        "1916/11/25,冬月,初一,1916\n" +
+        "1916/12/24,冬月,三十,1916\n" +
+        "1916/12/25,腊月,初一,1917\n" +
+        "1917/1/22,腊月,廿九,1917\n" +
+        "1917/1/23,正月,初一,1917\n" +
+        "1917/2/21,正月,三十,1917\n" +
+        "1917/2/22,二月,初一,1917\n" +
+        "1917/3/22,二月,廿九,1917\n" +
+        "1917/3/23,闰二月,初一,1917\n" +
+        "1917/4/20,闰二月,廿九,1917\n" +
+        "1917/4/21,三月,初一,1917\n" +
+        "1917/5/20,三月,三十,1917\n" +
+        "1917/5/21,四月,初一,1917\n" +
+        "1917/6/18,四月,廿九,1917\n" +
+        "1917/6/19,五月,初一,1917\n" +
+        "1917/7/18,五月,三十,1917\n" +
+        "1917/7/19,六月,初一,1917\n" +
+        "1917/8/17,六月,三十,1917\n" +
+        "1917/8/18,七月,初一,1917\n" +
+        "1917/9/15,七月,廿九,1917\n" +
+        "1917/9/16,八月,初一,1917\n" +
+        "1917/10/15,八月,三十,1917\n" +
+        "1917/10/16,九月,初一,1917\n" +
+        "1917/11/14,九月,三十,1917\n" +
+        "1917/11/15,十月,初一,1917\n" +
+        "1917/12/13,十月,廿九,1917\n" +
+        "1917/12/14,冬月,初一,1917\n" +
+        "1918/1/12,冬月,三十,1917\n" +
+        "1918/1/13,腊月,初一,1917\n" +
+        "1918/2/10,腊月,廿九,1917\n" +
+        "1918/2/11,正月,初一,1918\n" +
+        "1918/3/12,正月,三十,1918\n" +
+        "1918/3/13,二月,初一,1918\n" +
+        "1918/4/10,二月,廿九,1918\n" +
+        "1918/4/11,三月,初一,1918\n" +
+        "1918/5/9,三月,廿九,1918\n" +
+        "1918/5/10,四月,初一,1918\n" +
+        "1918/6/8,四月,三十,1918\n" +
+        "1918/6/9,五月,初一,1918\n" +
+        "1918/7/7,五月,廿九,1918\n" +
+        "1918/7/8,六月,初一,1918\n" +
+        "1918/8/6,六月,三十,1918\n" +
+        "1918/8/7,七月,初一,1918\n" +
+        "1918/9/4,七月,廿九,1918\n" +
+        "1918/9/5,八月,初一,1918\n" +
+        "1918/10/4,八月,三十,1918\n" +
+        "1918/10/5,九月,初一,1918\n" +
+        "1918/11/3,九月,三十,1918\n" +
+        "1918/11/4,十月,初一,1918\n" +
+        "1918/12/2,十月,廿九,1918\n" +
+        "1918/12/3,冬月,初一,1918\n" +
+        "1919/1/1,冬月,三十,1918\n" +
+        "1919/1/2,腊月,初一,1918\n" +
+        "1919/1/31,腊月,三十,1918\n" +
+        "1919/2/1,正月,初一,1919\n" +
+        "1919/3/1,正月,廿九,1919\n" +
+        "1919/3/2,二月,初一,1919\n" +
+        "1919/3/31,二月,三十,1919\n" +
+        "1919/4/1,三月,初一,1919\n" +
+        "1919/4/29,三月,廿九,1919\n" +
+        "1919/4/30,四月,初一,1919\n" +
+        "1919/5/28,四月,廿九,1919\n" +
+        "1919/5/29,五月,初一,1919\n" +
+        "1919/6/27,五月,三十,1919\n" +
+        "1919/6/28,六月,初一,1919\n" +
+        "1919/7/26,六月,廿九,1919\n" +
+        "1919/7/27,七月,初一,1919\n" +
+        "1919/8/24,七月,廿九,1919\n" +
+        "1919/8/25,闰七月,初一,1919\n" +
+        "1919/9/23,闰七月,三十,1919\n" +
+        "1919/9/24,八月,初一,1919\n" +
+        "1919/10/23,八月,三十,1919\n" +
+        "1919/10/24,九月,初一,1919\n" +
+        "1919/11/21,九月,廿九,1919\n" +
+        "1919/11/22,十月,初一,1919\n" +
+        "1919/12/21,十月,三十,1919\n" +
+        "1919/12/22,冬月,初一,1919\n" +
+        "1920/1/20,冬月,三十,1919\n" +
+        "1920/1/21,腊月,初一,1919\n" +
+        "1920/2/19,腊月,三十,1919\n" +
+        "1920/2/20,正月,初一,1920\n" +
+        "1920/3/19,正月,廿九,1920\n" +
+        "1920/3/20,二月,初一,1920\n" +
+        "1920/4/18,二月,三十,1920\n" +
+        "1920/4/19,三月,初一,1920\n" +
+        "1920/5/17,三月,廿九,1920\n" +
+        "1920/5/18,四月,初一,1920\n" +
+        "1920/6/15,四月,廿九,1920\n" +
+        "1920/6/16,五月,初一,1920\n" +
+        "1920/7/15,五月,三十,1920\n" +
+        "1920/7/16,六月,初一,1920\n" +
+        "1920/8/13,六月,廿九,1920\n" +
+        "1920/8/14,七月,初一,1920\n" +
+        "1920/9/11,七月,廿九,1920\n" +
+        "1920/9/12,八月,初一,1920\n" +
+        "1920/10/11,八月,三十,1920\n" +
+        "1920/10/12,九月,初一,1920\n" +
+        "1920/11/9,九月,廿九,1920\n" +
+        "1920/11/10,十月,初一,1920\n" +
+        "1920/12/9,十月,三十,1920\n" +
+        "1920/12/10,冬月,初一,1920\n" +
+        "1921/1/8,冬月,三十,1920\n" +
+        "1921/1/9,腊月,初一,1920\n" +
+        "1921/2/7,腊月,三十,1920\n" +
+        "1921/2/8,正月,初一,1921\n" +
+        "1921/3/9,正月,三十,1921\n" +
+        "1921/3/10,二月,初一,1921\n" +
+        "1921/4/7,二月,廿九,1921\n" +
+        "1921/4/8,三月,初一,1921\n" +
+        "1921/5/7,三月,三十,1921\n" +
+        "1921/5/8,四月,初一,1921\n" +
+        "1921/6/5,四月,廿九,1921\n" +
+        "1921/6/6,五月,初一,1921\n" +
+        "1921/7/4,五月,廿九,1921\n" +
+        "1921/7/5,六月,初一,1921\n" +
+        "1921/8/3,六月,三十,1921\n" +
+        "1921/8/4,七月,初一,1921\n" +
+        "1921/9/1,七月,廿九,1921\n" +
+        "1921/9/2,八月,初一,1921\n" +
+        "1921/9/30,八月,廿九,1921\n" +
+        "1921/10/1,九月,初一,1921\n" +
+        "1921/10/30,九月,三十,1921\n" +
+        "1921/10/31,十月,初一,1921\n" +
+        "1921/11/28,十月,廿九,1921\n" +
+        "1921/11/29,冬月,初一,1921\n" +
+        "1921/12/28,冬月,三十,1921\n" +
+        "1921/12/29,腊月,初一,1921\n" +
+        "1922/1/27,腊月,三十,1921\n" +
+        "1922/1/28,正月,初一,1922\n" +
+        "1922/2/26,正月,三十,1922\n" +
+        "1922/2/27,二月,初一,1922\n" +
+        "1922/3/27,二月,廿九,1922\n" +
+        "1922/3/28,三月,初一,1922\n" +
+        "1922/4/26,三月,三十,1922\n" +
+        "1922/4/27,四月,初一,1922\n" +
+        "1922/5/26,四月,三十,1922\n" +
+        "1922/5/27,五月,初一,1922\n" +
+        "1922/6/24,五月,廿九,1922\n" +
+        "1922/6/25,闰五月,初一,1922\n" +
+        "1922/7/23,闰五月,廿九,1922\n" +
+        "1922/7/24,六月,初一,1922\n" +
+        "1922/8/22,六月,三十,1922\n" +
+        "1922/8/23,七月,初一,1922\n" +
+        "1922/9/20,七月,廿九,1922\n" +
+        "1922/9/21,八月,初一,1922\n" +
+        "1922/10/19,八月,廿九,1922\n" +
+        "1922/10/20,九月,初一,1922\n" +
+        "1922/11/18,九月,三十,1922\n" +
+        "1922/11/19,十月,初一,1922\n" +
+        "1922/12/17,十月,廿九,1922\n" +
+        "1922/12/18,冬月,初一,1922\n" +
+        "1923/1/16,冬月,三十,1922\n" +
+        "1923/1/17,腊月,初一,1922\n" +
+        "1923/2/15,腊月,三十,1922\n" +
+        "1923/2/16,正月,初一,1923\n" +
+        "1923/3/16,正月,廿九,1923\n" +
+        "1923/3/17,二月,初一,1923\n" +
+        "1923/4/15,二月,三十,1923\n" +
+        "1923/4/16,三月,初一,1923\n" +
+        "1923/5/15,三月,三十,1923\n" +
+        "1923/5/16,四月,初一,1923\n" +
+        "1923/6/13,四月,廿九,1923\n" +
+        "1923/6/14,五月,初一,1923\n" +
+        "1923/7/13,五月,三十,1923\n" +
+        "1923/7/14,六月,初一,1923\n" +
+        "1923/8/11,六月,廿九,1923\n" +
+        "1923/8/12,七月,初一,1923\n" +
+        "1923/9/10,七月,三十,1923\n" +
+        "1923/9/11,八月,初一,1923\n" +
+        "1923/10/9,八月,廿九,1923\n" +
+        "1923/10/10,九月,初一,1923\n" +
+        "1923/11/7,九月,廿九,1923\n" +
+        "1923/11/8,十月,初一,1923\n" +
+        "1923/12/7,十月,三十,1923\n" +
+        "1923/12/8,冬月,初一,1923\n" +
+        "1924/1/5,冬月,廿九,1923\n" +
+        "1924/1/6,腊月,初一,1923\n" +
+        "1924/2/4,腊月,三十,1923\n" +
+        "1924/2/5,正月,初一,1924\n" +
+        "1924/3/4,正月,廿九,1924\n" +
+        "1924/3/5,二月,初一,1924\n" +
+        "1924/4/3,二月,三十,1924\n" +
+        "1924/4/4,三月,初一,1924\n" +
+        "1924/5/3,三月,三十,1924\n" +
+        "1924/5/4,四月,初一,1924\n" +
+        "1924/6/1,四月,廿九,1924\n" +
+        "1924/6/2,五月,初一,1924\n" +
+        "1924/7/1,五月,三十,1924\n" +
+        "1924/7/2,六月,初一,1924\n" +
+        "1924/7/31,六月,三十,1924\n" +
+        "1924/8/1,七月,初一,1924\n" +
+        "1924/8/29,七月,廿九,1924\n" +
+        "1924/8/30,八月,初一,1924\n" +
+        "1924/9/28,八月,三十,1924\n" +
+        "1924/9/29,九月,初一,1924\n" +
+        "1924/10/27,九月,廿九,1924\n" +
+        "1924/10/28,十月,初一,1924\n" +
+        "1924/11/26,十月,三十,1924\n" +
+        "1924/11/27,冬月,初一,1924\n" +
+        "1924/12/25,冬月,廿九,1924\n" +
+        "1924/12/26,腊月,初一,1924\n" +
+        "1925/1/23,腊月,廿九,1924\n" +
+        "1925/1/24,正月,初一,1925\n" +
+        "1925/2/22,正月,三十,1925\n" +
+        "1925/2/23,二月,初一,1925\n" +
+        "1925/3/23,二月,廿九,1925\n" +
+        "1925/3/24,三月,初一,1925\n" +
+        "1925/4/22,三月,三十,1925\n" +
+        "1925/4/23,四月,初一,1925\n" +
+        "1925/5/21,四月,廿九,1925\n" +
+        "1925/5/22,闰四月,初一,1925\n" +
+        "1925/6/20,闰四月,三十,1925\n" +
+        "1925/6/21,五月,初一,1925\n" +
+        "1925/7/20,五月,三十,1925\n" +
+        "1925/7/21,六月,初一,1925\n" +
+        "1925/8/18,六月,廿九,1925\n" +
+        "1925/8/19,七月,初一,1925\n" +
+        "1925/9/17,七月,三十,1925\n" +
+        "1925/9/18,八月,初一,1925\n" +
+        "1925/10/17,八月,三十,1925\n" +
+        "1925/10/18,九月,初一,1925\n" +
+        "1925/11/15,九月,廿九,1925\n" +
+        "1925/11/16,十月,初一,1925\n" +
+        "1925/12/15,十月,三十,1925\n" +
+        "1925/12/16,冬月,初一,1925\n" +
+        "1926/1/13,冬月,廿九,1925\n" +
+        "1926/1/14,腊月,初一,1925\n" +
+        "1926/2/12,腊月,三十,1925\n" +
+        "1926/2/13,正月,初一,1926\n" +
+        "1926/3/13,正月,廿九,1926\n" +
+        "1926/3/14,二月,初一,1926\n" +
+        "1926/4/11,二月,廿九,1926\n" +
+        "1926/4/12,三月,初一,1926\n" +
+        "1926/5/11,三月,三十,1926\n" +
+        "1926/5/12,四月,初一,1926\n" +
+        "1926/6/9,四月,廿九,1926\n" +
+        "1926/6/10,五月,初一,1926\n" +
+        "1926/7/9,五月,三十,1926\n" +
+        "1926/7/10,六月,初一,1926\n" +
+        "1926/8/7,六月,廿九,1926\n" +
+        "1926/8/8,七月,初一,1926\n" +
+        "1926/9/6,七月,三十,1926\n" +
+        "1926/9/7,八月,初一,1926\n" +
+        "1926/10/6,八月,三十,1926\n" +
+        "1926/10/7,九月,初一,1926\n" +
+        "1926/11/4,九月,廿九,1926\n" +
+        "1926/11/5,十月,初一,1926\n" +
+        "1926/12/4,十月,三十,1926\n" +
+        "1926/12/5,冬月,初一,1926\n" +
+        "1927/1/3,冬月,三十,1926\n" +
+        "1927/1/4,腊月,初一,1926\n" +
+        "1927/2/1,腊月,廿九,1926\n" +
+        "1927/2/2,正月,初一,1927\n" +
+        "1927/3/3,正月,三十,1927\n" +
+        "1927/3/4,二月,初一,1927\n" +
+        "1927/4/1,二月,廿九,1927\n" +
+        "1927/4/2,三月,初一,1927\n" +
+        "1927/4/30,三月,廿九,1927\n" +
+        "1927/5/1,四月,初一,1927\n" +
+        "1927/5/30,四月,三十,1927\n" +
+        "1927/5/31,五月,初一,1927\n" +
+        "1927/6/28,五月,廿九,1927\n" +
+        "1927/6/29,六月,初一,1927\n" +
+        "1927/7/28,六月,三十,1927\n" +
+        "1927/7/29,七月,初一,1927\n" +
+        "1927/8/26,七月,廿九,1927\n" +
+        "1927/8/27,八月,初一,1927\n" +
+        "1927/9/25,八月,三十,1927\n" +
+        "1927/9/26,九月,初一,1927\n" +
+        "1927/10/24,九月,廿九,1927\n" +
+        "1927/10/25,十月,初一,1927\n" +
+        "1927/11/23,十月,三十,1927\n" +
+        "1927/11/24,冬月,初一,1927\n" +
+        "1927/12/23,冬月,三十,1927\n" +
+        "1927/12/24,腊月,初一,1927\n" +
+        "1928/1/22,腊月,三十,1927\n" +
+        "1928/1/23,正月,初一,1928\n" +
+        "1928/2/20,正月,廿九,1928\n" +
+        "1928/2/21,二月,初一,1928\n" +
+        "1928/3/21,二月,三十,1928\n" +
+        "1928/3/22,闰二月,初一,1928\n" +
+        "1928/4/19,闰二月,廿九,1928\n" +
+        "1928/4/20,三月,初一,1928\n" +
+        "1928/5/18,三月,廿九,1928\n" +
+        "1928/5/19,四月,初一,1928\n" +
+        "1928/6/17,四月,三十,1928\n" +
+        "1928/6/18,五月,初一,1928\n" +
+        "1928/7/16,五月,廿九,1928\n" +
+        "1928/7/17,六月,初一,1928\n" +
+        "1928/8/14,六月,廿九,1928\n" +
+        "1928/8/15,七月,初一,1928\n" +
+        "1928/9/13,七月,三十,1928\n" +
+        "1928/9/14,八月,初一,1928\n" +
+        "1928/10/12,八月,廿九,1928\n" +
+        "1928/10/13,九月,初一,1928\n" +
+        "1928/11/11,九月,三十,1928\n" +
+        "1928/11/12,十月,初一,1928\n" +
+        "1928/12/11,十月,三十,1928\n" +
+        "1928/12/12,冬月,初一,1928\n" +
+        "1929/1/10,冬月,三十,1928\n" +
+        "1929/1/11,腊月,初一,1928\n" +
+        "1929/2/9,腊月,三十,1928\n" +
+        "1929/2/10,正月,初一,1929\n" +
+        "1929/3/10,正月,廿九,1929\n" +
+        "1929/3/11,二月,初一,1929\n" +
+        "1929/4/9,二月,三十,1929\n" +
+        "1929/4/10,三月,初一,1929\n" +
+        "1929/5/8,三月,廿九,1929\n" +
+        "1929/5/9,四月,初一,1929\n" +
+        "1929/6/6,四月,廿九,1929\n" +
+        "1929/6/7,五月,初一,1929\n" +
+        "1929/7/6,五月,三十,1929\n" +
+        "1929/7/7,六月,初一,1929\n" +
+        "1929/8/4,六月,廿九,1929\n" +
+        "1929/8/5,七月,初一,1929\n" +
+        "1929/9/2,七月,廿九,1929\n" +
+        "1929/9/3,八月,初一,1929\n" +
+        "1929/10/2,八月,三十,1929\n" +
+        "1929/10/3,九月,初一,1929\n" +
+        "1929/10/31,九月,廿九,1929\n" +
+        "1929/11/1,十月,初一,1929\n" +
+        "1929/11/30,十月,三十,1929\n" +
+        "1929/12/1,冬月,初一,1929\n" +
+        "1929/12/30,冬月,三十,1929\n" +
+        "1929/12/31,腊月,初一,1929\n" +
+        "1930/1/29,腊月,三十,1929\n" +
+        "1930/1/30,正月,初一,1930\n" +
+        "1930/2/27,正月,廿九,1930\n" +
+        "1930/2/28,二月,初一,1930\n" +
+        "1930/3/29,二月,三十,1930\n" +
+        "1930/3/30,三月,初一,1930\n" +
+        "1930/4/28,三月,三十,1930\n" +
+        "1930/4/29,四月,初一,1930\n" +
+        "1930/5/27,四月,廿九,1930\n" +
+        "1930/5/28,五月,初一,1930\n" +
+        "1930/6/25,五月,廿九,1930\n" +
+        "1930/6/26,六月,初一,1930\n" +
+        "1930/7/25,六月,三十,1930\n" +
+        "1930/7/26,闰六月,初一,1930\n" +
+        "1930/8/23,闰六月,廿九,1930\n" +
+        "1930/8/24,七月,初一,1930\n" +
+        "1930/9/21,七月,廿九,1930\n" +
+        "1930/9/22,八月,初一,1930\n" +
+        "1930/10/21,八月,三十,1930\n" +
+        "1930/10/22,九月,初一,1930\n" +
+        "1930/11/19,九月,廿九,1930\n" +
+        "1930/11/20,十月,初一,1930\n" +
+        "1930/12/19,十月,三十,1930\n" +
+        "1930/12/20,冬月,初一,1930\n" +
+        "1931/1/18,冬月,三十,1930\n" +
+        "1931/1/19,腊月,初一,1930\n" +
+        "1931/2/16,腊月,廿九,1930\n" +
+        "1931/2/17,正月,初一,1931\n" +
+        "1931/3/18,正月,三十,1931\n" +
+        "1931/3/19,二月,初一,1931\n" +
+        "1931/4/17,二月,三十,1931\n" +
+        "1931/4/18,三月,初一,1931\n" +
+        "1931/5/16,三月,廿九,1931\n" +
+        "1931/5/17,四月,初一,1931\n" +
+        "1931/6/15,四月,三十,1931\n" +
+        "1931/6/16,五月,初一,1931\n" +
+        "1931/7/14,五月,廿九,1931\n" +
+        "1931/7/15,六月,初一,1931\n" +
+        "1931/8/13,六月,三十,1931\n" +
+        "1931/8/14,七月,初一,1931\n" +
+        "1931/9/11,七月,廿九,1931\n" +
+        "1931/9/12,八月,初一,1931\n" +
+        "1931/10/10,八月,廿九,1931\n" +
+        "1931/10/11,九月,初一,1931\n" +
+        "1931/11/9,九月,三十,1931\n" +
+        "1931/11/10,十月,初一,1931\n" +
+        "1931/12/8,十月,廿九,1931\n" +
+        "1931/12/9,冬月,初一,1931\n" +
+        "1932/1/7,冬月,三十,1931\n" +
+        "1932/1/8,腊月,初一,1931\n" +
+        "1932/2/5,腊月,廿九,1931\n" +
+        "1932/2/6,正月,初一,1932\n" +
+        "1932/3/6,正月,三十,1932\n" +
+        "1932/3/7,二月,初一,1932\n" +
+        "1932/4/5,二月,三十,1932\n" +
+        "1932/4/6,三月,初一,1932\n" +
+        "1932/5/5,三月,三十,1932\n" +
+        "1932/5/6,四月,初一,1932\n" +
+        "1932/6/3,四月,廿九,1932\n" +
+        "1932/6/4,五月,初一,1932\n" +
+        "1932/7/3,五月,三十,1932\n" +
+        "1932/7/4,六月,初一,1932\n" +
+        "1932/8/1,六月,廿九,1932\n" +
+        "1932/8/2,七月,初一,1932\n" +
+        "1932/8/31,七月,三十,1932\n" +
+        "1932/9/1,八月,初一,1932\n" +
+        "1932/9/29,八月,廿九,1932\n" +
+        "1932/9/30,九月,初一,1932\n" +
+        "1932/10/28,九月,廿九,1932\n" +
+        "1932/10/29,十月,初一,1932\n" +
+        "1932/11/27,十月,三十,1932\n" +
+        "1932/11/28,冬月,初一,1932\n" +
+        "1932/12/26,冬月,廿九,1932\n" +
+        "1932/12/27,腊月,初一,1932\n" +
+        "1933/1/25,腊月,三十,1932\n" +
+        "1933/1/26,正月,初一,1933\n" +
+        "1933/2/23,正月,廿九,1933\n" +
+        "1933/2/24,二月,初一,1933\n" +
+        "1933/3/25,二月,三十,1933\n" +
+        "1933/3/26,三月,初一,1933\n" +
+        "1933/4/24,三月,三十,1933\n" +
+        "1933/4/25,四月,初一,1933\n" +
+        "1933/5/23,四月,廿九,1933\n" +
+        "1933/5/24,五月,初一,1933\n" +
+        "1933/6/22,五月,三十,1933\n" +
+        "1933/6/23,闰五月,初一,1933\n" +
+        "1933/7/22,闰五月,三十,1933\n" +
+        "1933/7/23,六月,初一,1933\n" +
+        "1933/8/20,六月,廿九,1933\n" +
+        "1933/8/21,七月,初一,1933\n" +
+        "1933/9/19,七月,三十,1933\n" +
+        "1933/9/20,八月,初一,1933\n" +
+        "1933/10/18,八月,廿九,1933\n" +
+        "1933/10/19,九月,初一,1933\n" +
+        "1933/11/17,九月,三十,1933\n" +
+        "1933/11/18,十月,初一,1933\n" +
+        "1933/12/16,十月,廿九,1933\n" +
+        "1933/12/17,冬月,初一,1933\n" +
+        "1934/1/14,冬月,廿九,1933\n" +
+        "1934/1/15,腊月,初一,1933\n" +
+        "1934/2/13,腊月,三十,1933\n" +
+        "1934/2/14,正月,初一,1934\n" +
+        "1934/3/14,正月,廿九,1934\n" +
+        "1934/3/15,二月,初一,1934\n" +
+        "1934/4/13,二月,三十,1934\n" +
+        "1934/4/14,三月,初一,1934\n" +
+        "1934/5/12,三月,廿九,1934\n" +
+        "1934/5/13,四月,初一,1934\n" +
+        "1934/6/11,四月,三十,1934\n" +
+        "1934/6/12,五月,初一,1934\n" +
+        "1934/7/11,五月,三十,1934\n" +
+        "1934/7/12,六月,初一,1934\n" +
+        "1934/8/9,六月,廿九,1934\n" +
+        "1934/8/10,七月,初一,1934\n" +
+        "1934/9/8,七月,三十,1934\n" +
+        "1934/9/9,八月,初一,1934\n" +
+        "1934/10/7,八月,廿九,1934\n" +
+        "1934/10/8,九月,初一,1934\n" +
+        "1934/11/6,九月,三十,1934\n" +
+        "1934/11/7,十月,初一,1934\n" +
+        "1934/12/6,十月,三十,1934\n" +
+        "1934/12/7,冬月,初一,1934\n" +
+        "1935/1/4,冬月,廿九,1934\n" +
+        "1935/1/5,腊月,初一,1934\n" +
+        "1935/2/3,腊月,三十,1934\n" +
+        "1935/2/4,正月,初一,1935\n" +
+        "1935/3/4,正月,廿九,1935\n" +
+        "1935/3/5,二月,初一,1935\n" +
+        "1935/4/2,二月,廿九,1935\n" +
+        "1935/4/3,三月,初一,1935\n" +
+        "1935/5/2,三月,三十,1935\n" +
+        "1935/5/3,四月,初一,1935\n" +
+        "1935/5/31,四月,廿九,1935\n" +
+        "1935/6/1,五月,初一,1935\n" +
+        "1935/6/30,五月,三十,1935\n" +
+        "1935/7/1,六月,初一,1935\n" +
+        "1935/7/29,六月,廿九,1935\n" +
+        "1935/7/30,七月,初一,1935\n" +
+        "1935/8/28,七月,三十,1935\n" +
+        "1935/8/29,八月,初一,1935\n" +
+        "1935/9/27,八月,三十,1935\n" +
+        "1935/9/28,九月,初一,1935\n" +
+        "1935/10/26,九月,廿九,1935\n" +
+        "1935/10/27,十月,初一,1935\n" +
+        "1935/11/25,十月,三十,1935\n" +
+        "1935/11/26,冬月,初一,1935\n" +
+        "1935/12/25,冬月,三十,1935\n" +
+        "1935/12/26,腊月,初一,1935\n" +
+        "1936/1/23,腊月,廿九,1935\n" +
+        "1936/1/24,正月,初一,1936\n" +
+        "1936/2/22,正月,三十,1936\n" +
+        "1936/2/23,二月,初一,1936\n" +
+        "1936/3/22,二月,廿九,1936\n" +
+        "1936/3/23,三月,初一,1936\n" +
+        "1936/4/20,三月,廿九,1936\n" +
+        "1936/4/21,闰三月,初一,1936\n" +
+        "1936/5/20,闰三月,三十,1936\n" +
+        "1936/5/21,四月,初一,1936\n" +
+        "1936/6/18,四月,廿九,1936\n" +
+        "1936/6/19,五月,初一,1936\n" +
+        "1936/7/17,五月,廿九,1936\n" +
+        "1936/7/18,六月,初一,1936\n" +
+        "1936/8/16,六月,三十,1936\n" +
+        "1936/8/17,七月,初一,1936\n" +
+        "1936/9/15,七月,三十,1936\n" +
+        "1936/9/16,八月,初一,1936\n" +
+        "1936/10/14,八月,廿九,1936\n" +
+        "1936/10/15,九月,初一,1936\n" +
+        "1936/11/13,九月,三十,1936\n" +
+        "1936/11/14,十月,初一,1936\n" +
+        "1936/12/13,十月,三十,1936\n" +
+        "1936/12/14,冬月,初一,1936\n" +
+        "1937/1/12,冬月,三十,1936\n" +
+        "1937/1/13,腊月,初一,1936\n" +
+        "1937/2/10,腊月,廿九,1936\n" +
+        "1937/2/11,正月,初一,1937\n" +
+        "1937/3/12,正月,三十,1937\n" +
+        "1937/3/13,二月,初一,1937\n" +
+        "1937/4/10,二月,廿九,1937\n" +
+        "1937/4/11,三月,初一,1937\n" +
+        "1937/5/9,三月,廿九,1937\n" +
+        "1937/5/10,四月,初一,1937\n" +
+        "1937/6/8,四月,三十,1937\n" +
+        "1937/6/9,五月,初一,1937\n" +
+        "1937/7/7,五月,廿九,1937\n" +
+        "1937/7/8,六月,初一,1937\n" +
+        "1937/8/5,六月,廿九,1937\n" +
+        "1937/8/6,七月,初一,1937\n" +
+        "1937/9/4,七月,三十,1937\n" +
+        "1937/9/5,八月,初一,1937\n" +
+        "1937/10/3,八月,廿九,1937\n" +
+        "1937/10/4,九月,初一,1937\n" +
+        "1937/11/2,九月,三十,1937\n" +
+        "1937/11/3,十月,初一,1937\n" +
+        "1937/12/2,十月,三十,1937\n" +
+        "1937/12/3,冬月,初一,1937\n" +
+        "1938/1/1,冬月,三十,1937\n" +
+        "1938/1/2,腊月,初一,1937\n" +
+        "1938/1/30,腊月,廿九,1937\n" +
+        "1938/1/31,正月,初一,1938\n" +
+        "1938/3/1,正月,三十,1938\n" +
+        "1938/3/2,二月,初一,1938\n" +
+        "1938/3/31,二月,三十,1938\n" +
+        "1938/4/1,三月,初一,1938\n" +
+        "1938/4/29,三月,廿九,1938\n" +
+        "1938/4/30,四月,初一,1938\n" +
+        "1938/5/28,四月,廿九,1938\n" +
+        "1938/5/29,五月,初一,1938\n" +
+        "1938/6/27,五月,三十,1938\n" +
+        "1938/6/28,六月,初一,1938\n" +
+        "1938/7/26,六月,廿九,1938\n" +
+        "1938/7/27,七月,初一,1938\n" +
+        "1938/8/24,七月,廿九,1938\n" +
+        "1938/8/25,闰七月,初一,1938\n" +
+        "1938/9/23,闰七月,三十,1938\n" +
+        "1938/9/24,八月,初一,1938\n" +
+        "1938/10/22,八月,廿九,1938\n" +
+        "1938/10/23,九月,初一,1938\n" +
+        "1938/11/21,九月,三十,1938\n" +
+        "1938/11/22,十月,初一,1938\n" +
+        "1938/12/21,十月,三十,1938\n" +
+        "1938/12/22,冬月,初一,1938\n" +
+        "1939/1/19,冬月,廿九,1938\n" +
+        "1939/1/20,腊月,初一,1938\n" +
+        "1939/2/18,腊月,三十,1938\n" +
+        "1939/2/19,正月,初一,1939\n" +
+        "1939/3/20,正月,三十,1939\n" +
+        "1939/3/21,二月,初一,1939\n" +
+        "1939/4/19,二月,三十,1939\n" +
+        "1939/4/20,三月,初一,1939\n" +
+        "1939/5/18,三月,廿九,1939\n" +
+        "1939/5/19,四月,初一,1939\n" +
+        "1939/6/16,四月,廿九,1939\n" +
+        "1939/6/17,五月,初一,1939\n" +
+        "1939/7/16,五月,三十,1939\n" +
+        "1939/7/17,六月,初一,1939\n" +
+        "1939/8/14,六月,廿九,1939\n" +
+        "1939/8/15,七月,初一,1939\n" +
+        "1939/9/12,七月,廿九,1939\n" +
+        "1939/9/13,八月,初一,1939\n" +
+        "1939/10/12,八月,三十,1939\n" +
+        "1939/10/13,九月,初一,1939\n" +
+        "1939/11/10,九月,廿九,1939\n" +
+        "1939/11/11,十月,初一,1939\n" +
+        "1939/12/10,十月,三十,1939\n" +
+        "1939/12/11,冬月,初一,1939\n" +
+        "1940/1/8,冬月,廿九,1939\n" +
+        "1940/1/9,腊月,初一,1939\n" +
+        "1940/2/7,腊月,三十,1939\n" +
+        "1940/2/8,正月,初一,1940\n" +
+        "1940/3/8,正月,三十,1940\n" +
+        "1940/3/9,二月,初一,1940\n" +
+        "1940/4/7,二月,三十,1940\n" +
+        "1940/4/8,三月,初一,1940\n" +
+        "1940/5/6,三月,廿九,1940\n" +
+        "1940/5/7,四月,初一,1940\n" +
+        "1940/6/5,四月,三十,1940\n" +
+        "1940/6/6,五月,初一,1940\n" +
+        "1940/7/4,五月,廿九,1940\n" +
+        "1940/7/5,六月,初一,1940\n" +
+        "1940/8/3,六月,三十,1940\n" +
+        "1940/8/4,七月,初一,1940\n" +
+        "1940/9/1,七月,廿九,1940\n" +
+        "1940/9/2,八月,初一,1940\n" +
+        "1940/9/30,八月,廿九,1940\n" +
+        "1940/10/1,九月,初一,1940\n" +
+        "1940/10/30,九月,三十,1940\n" +
+        "1940/10/31,十月,初一,1940\n" +
+        "1940/11/28,十月,廿九,1940\n" +
+        "1940/11/29,冬月,初一,1940\n" +
+        "1940/12/28,冬月,三十,1940\n" +
+        "1940/12/29,腊月,初一,1940\n" +
+        "1941/1/26,腊月,廿九,1940\n" +
+        "1941/1/27,正月,初一,1941\n" +
+        "1941/2/25,正月,三十,1941\n" +
+        "1941/2/26,二月,初一,1941\n" +
+        "1941/3/27,二月,三十,1941\n" +
+        "1941/3/28,三月,初一,1941\n" +
+        "1941/4/25,三月,廿九,1941\n" +
+        "1941/4/26,四月,初一,1941\n" +
+        "1941/5/25,四月,三十,1941\n" +
+        "1941/5/26,五月,初一,1941\n" +
+        "1941/6/24,五月,三十,1941\n" +
+        "1941/6/25,六月,初一,1941\n" +
+        "1941/7/23,六月,廿九,1941\n" +
+        "1941/7/24,闰六月,初一,1941\n" +
+        "1941/8/22,闰六月,三十,1941\n" +
+        "1941/8/23,七月,初一,1941\n" +
+        "1941/9/20,七月,廿九,1941\n" +
+        "1941/9/21,八月,初一,1941\n" +
+        "1941/10/19,八月,廿九,1941\n" +
+        "1941/10/20,九月,初一,1941\n" +
+        "1941/11/18,九月,三十,1941\n" +
+        "1941/11/19,十月,初一,1941\n" +
+        "1941/12/17,十月,廿九,1941\n" +
+        "1941/12/18,冬月,初一,1941\n" +
+        "1942/1/16,冬月,三十,1941\n" +
+        "1942/1/17,腊月,初一,1941\n" +
+        "1942/2/14,腊月,廿九,1941\n" +
+        "1942/2/15,正月,初一,1942\n" +
+        "1942/3/16,正月,三十,1942\n" +
+        "1942/3/17,二月,初一,1942\n" +
+        "1942/4/14,二月,廿九,1942\n" +
+        "1942/4/15,三月,初一,1942\n" +
+        "1942/5/14,三月,三十,1942\n" +
+        "1942/5/15,四月,初一,1942\n" +
+        "1942/6/13,四月,三十,1942\n" +
+        "1942/6/14,五月,初一,1942\n" +
+        "1942/7/12,五月,廿九,1942\n" +
+        "1942/7/13,六月,初一,1942\n" +
+        "1942/8/11,六月,三十,1942\n" +
+        "1942/8/12,七月,初一,1942\n" +
+        "1942/9/9,七月,廿九,1942\n" +
+        "1942/9/10,八月,初一,1942\n" +
+        "1942/10/9,八月,三十,1942\n" +
+        "1942/10/10,九月,初一,1942\n" +
+        "1942/11/7,九月,廿九,1942\n" +
+        "1942/11/8,十月,初一,1942\n" +
+        "1942/12/7,十月,三十,1942\n" +
+        "1942/12/8,冬月,初一,1942\n" +
+        "1943/1/5,冬月,廿九,1942\n" +
+        "1943/1/6,腊月,初一,1942\n" +
+        "1943/2/4,腊月,三十,1942\n" +
+        "1943/2/5,正月,初一,1943\n" +
+        "1943/3/5,正月,廿九,1943\n" +
+        "1943/3/6,二月,初一,1943\n" +
+        "1943/4/4,二月,三十,1943\n" +
+        "1943/4/5,三月,初一,1943\n" +
+        "1943/5/3,三月,廿九,1943\n" +
+        "1943/5/4,四月,初一,1943\n" +
+        "1943/6/2,四月,三十,1943\n" +
+        "1943/6/3,五月,初一,1943\n" +
+        "1943/7/1,五月,廿九,1943\n" +
+        "1943/7/2,六月,初一,1943\n" +
+        "1943/7/31,六月,三十,1943\n" +
+        "1943/8/1,七月,初一,1943\n" +
+        "1943/8/30,七月,三十,1943\n" +
+        "1943/8/31,八月,初一,1943\n" +
+        "1943/9/28,八月,廿九,1943\n" +
+        "1943/9/29,九月,初一,1943\n" +
+        "1943/10/28,九月,三十,1943\n" +
+        "1943/10/29,十月,初一,1943\n" +
+        "1943/11/26,十月,廿九,1943\n" +
+        "1943/11/27,冬月,初一,1943\n" +
+        "1943/12/26,冬月,三十,1943\n" +
+        "1943/12/27,腊月,初一,1943\n" +
+        "1944/1/24,腊月,廿九,1943\n" +
+        "1944/1/25,正月,初一,1944\n" +
+        "1944/2/23,正月,三十,1944\n" +
+        "1944/2/24,二月,初一,1944\n" +
+        "1944/3/23,二月,廿九,1944\n" +
+        "1944/3/24,三月,初一,1944\n" +
+        "1944/4/22,三月,三十,1944\n" +
+        "1944/4/23,四月,初一,1944\n" +
+        "1944/5/21,四月,廿九,1944\n" +
+        "1944/5/22,闰四月,初一,1944\n" +
+        "1944/6/20,闰四月,三十,1944\n" +
+        "1944/6/21,五月,初一,1944\n" +
+        "1944/7/19,五月,廿九,1944\n" +
+        "1944/7/20,六月,初一,1944\n" +
+        "1944/8/18,六月,三十,1944\n" +
+        "1944/8/19,七月,初一,1944\n" +
+        "1944/9/16,七月,廿九,1944\n" +
+        "1944/9/17,八月,初一,1944\n" +
+        "1944/10/16,八月,三十,1944\n" +
+        "1944/10/17,九月,初一,1944\n" +
+        "1944/11/15,九月,三十,1944\n" +
+        "1944/11/16,十月,初一,1944\n" +
+        "1944/12/14,十月,廿九,1944\n" +
+        "1944/12/15,冬月,初一,1944\n" +
+        "1945/1/13,冬月,三十,1944\n" +
+        "1945/1/14,腊月,初一,1944\n" +
+        "1945/2/12,腊月,三十,1944\n" +
+        "1945/2/13,正月,初一,1945\n" +
+        "1945/3/13,正月,廿九,1945\n" +
+        "1945/3/14,二月,初一,1945\n" +
+        "1945/4/11,二月,廿九,1945\n" +
+        "1945/4/12,三月,初一,1945\n" +
+        "1945/5/11,三月,三十,1945\n" +
+        "1945/5/12,四月,初一,1945\n" +
+        "1945/6/9,四月,廿九,1945\n" +
+        "1945/6/10,五月,初一,1945\n" +
+        "1945/7/8,五月,廿九,1945\n" +
+        "1945/7/9,六月,初一,1945\n" +
+        "1945/8/7,六月,三十,1945\n" +
+        "1945/8/8,七月,初一,1945\n" +
+        "1945/9/5,七月,廿九,1945\n" +
+        "1945/9/6,八月,初一,1945\n" +
+        "1945/10/5,八月,三十,1945\n" +
+        "1945/10/6,九月,初一,1945\n" +
+        "1945/11/4,九月,三十,1945\n" +
+        "1945/11/5,十月,初一,1945\n" +
+        "1945/12/4,十月,三十,1945\n" +
+        "1945/12/5,冬月,初一,1945\n" +
+        "1946/1/2,冬月,廿九,1945\n" +
+        "1946/1/3,腊月,初一,1945\n" +
+        "1946/2/1,腊月,三十,1945\n" +
+        "1946/2/2,正月,初一,1946\n" +
+        "1946/3/3,正月,三十,1946\n" +
+        "1946/3/4,二月,初一,1946\n" +
+        "1946/4/1,二月,廿九,1946\n" +
+        "1946/4/2,三月,初一,1946\n" +
+        "1946/4/30,三月,廿九,1946\n" +
+        "1946/5/1,四月,初一,1946\n" +
+        "1946/5/30,四月,三十,1946\n" +
+        "1946/5/31,五月,初一,1946\n" +
+        "1946/6/28,五月,廿九,1946\n" +
+        "1946/6/29,六月,初一,1946\n" +
+        "1946/7/27,六月,廿九,1946\n" +
+        "1946/7/28,七月,初一,1946\n" +
+        "1946/8/26,七月,三十,1946\n" +
+        "1946/8/27,八月,初一,1946\n" +
+        "1946/9/24,八月,廿九,1946\n" +
+        "1946/9/25,九月,初一,1946\n" +
+        "1946/10/24,九月,三十,1946\n" +
+        "1946/10/25,十月,初一,1946\n" +
+        "1946/11/23,十月,三十,1946\n" +
+        "1946/11/24,冬月,初一,1946\n" +
+        "1946/12/22,冬月,廿九,1946\n" +
+        "1946/12/23,腊月,初一,1946\n" +
+        "1947/1/21,腊月,三十,1946\n" +
+        "1947/1/22,正月,初一,1947\n" +
+        "1947/2/20,正月,三十,1947\n" +
+        "1947/2/21,二月,初一,1947\n" +
+        "1947/3/22,二月,三十,1947\n" +
+        "1947/3/23,闰二月,初一,1947\n" +
+        "1947/4/20,闰二月,廿九,1947\n" +
+        "1947/4/21,三月,初一,1947\n" +
+        "1947/5/19,三月,廿九,1947\n" +
+        "1947/5/20,四月,初一,1947\n" +
+        "1947/6/18,四月,三十,1947\n" +
+        "1947/6/19,五月,初一,1947\n" +
+        "1947/7/17,五月,廿九,1947\n" +
+        "1947/7/18,六月,初一,1947\n" +
+        "1947/8/15,六月,廿九,1947\n" +
+        "1947/8/16,七月,初一,1947\n" +
+        "1947/9/14,七月,三十,1947\n" +
+        "1947/9/15,八月,初一,1947\n" +
+        "1947/10/13,八月,廿九,1947\n" +
+        "1947/10/14,九月,初一,1947\n" +
+        "1947/11/12,九月,三十,1947\n" +
+        "1947/11/13,十月,初一,1947\n" +
+        "1947/12/11,十月,廿九,1947\n" +
+        "1947/12/12,冬月,初一,1947\n" +
+        "1948/1/10,冬月,三十,1947\n" +
+        "1948/1/11,腊月,初一,1947\n" +
+        "1948/2/9,腊月,三十,1947\n" +
+        "1948/2/10,正月,初一,1948\n" +
+        "1948/3/10,正月,三十,1948\n" +
+        "1948/3/11,二月,初一,1948\n" +
+        "1948/4/8,二月,廿九,1948\n" +
+        "1948/4/9,三月,初一,1948\n" +
+        "1948/5/8,三月,三十,1948\n" +
+        "1948/5/9,四月,初一,1948\n" +
+        "1948/6/6,四月,廿九,1948\n" +
+        "1948/6/7,五月,初一,1948\n" +
+        "1948/7/6,五月,三十,1948\n" +
+        "1948/7/7,六月,初一,1948\n" +
+        "1948/8/4,六月,廿九,1948\n" +
+        "1948/8/5,七月,初一,1948\n" +
+        "1948/9/2,七月,廿九,1948\n" +
+        "1948/9/3,八月,初一,1948\n" +
+        "1948/10/2,八月,三十,1948\n" +
+        "1948/10/3,九月,初一,1948\n" +
+        "1948/10/31,九月,廿九,1948\n" +
+        "1948/11/1,十月,初一,1948\n" +
+        "1948/11/30,十月,三十,1948\n" +
+        "1948/12/1,冬月,初一,1948\n" +
+        "1948/12/29,冬月,廿九,1948\n" +
+        "1948/12/30,腊月,初一,1948\n" +
+        "1949/1/28,腊月,三十,1948\n" +
+        "1949/1/29,正月,初一,1949\n" +
+        "1949/2/27,正月,三十,1949\n" +
+        "1949/2/28,二月,初一,1949\n" +
+        "1949/3/28,二月,廿九,1949\n" +
+        "1949/3/29,三月,初一,1949\n" +
+        "1949/4/27,三月,三十,1949\n" +
+        "1949/4/28,四月,初一,1949\n" +
+        "1949/5/27,四月,三十,1949\n" +
+        "1949/5/28,五月,初一,1949\n" +
+        "1949/6/25,五月,廿九,1949\n" +
+        "1949/6/26,六月,初一,1949\n" +
+        "1949/7/25,六月,三十,1949\n" +
+        "1949/7/26,七月,初一,1949\n" +
+        "1949/8/23,七月,廿九,1949\n" +
+        "1949/8/24,闰七月,初一,1949\n" +
+        "1949/9/21,闰七月,廿九,1949\n" +
+        "1949/9/22,八月,初一,1949\n" +
+        "1949/10/21,八月,三十,1949\n" +
+        "1949/10/22,九月,初一,1949\n" +
+        "1949/11/19,九月,廿九,1949\n" +
+        "1949/11/20,十月,初一,1949\n" +
+        "1949/12/19,十月,三十,1949\n" +
+        "1949/12/20,冬月,初一,1949\n" +
+        "1950/1/17,冬月,廿九,1949\n" +
+        "1950/1/18,腊月,初一,1949\n" +
+        "1950/2/16,腊月,三十,1949\n" +
+        "1950/2/17,正月,初一,1950\n" +
+        "1950/3/17,正月,廿九,1950\n" +
+        "1950/3/18,二月,初一,1950\n" +
+        "1950/4/16,二月,三十,1950\n" +
+        "1950/4/17,三月,初一,1950\n" +
+        "1950/5/16,三月,三十,1950\n" +
+        "1950/5/17,四月,初一,1950\n" +
+        "1950/6/14,四月,廿九,1950\n" +
+        "1950/6/15,五月,初一,1950\n" +
+        "1950/7/14,五月,三十,1950\n" +
+        "1950/7/15,六月,初一,1950\n" +
+        "1950/8/13,六月,三十,1950\n" +
+        "1950/8/14,七月,初一,1950\n" +
+        "1950/9/11,七月,廿九,1950\n" +
+        "1950/9/12,八月,初一,1950\n" +
+        "1950/10/10,八月,廿九,1950\n" +
+        "1950/10/11,九月,初一,1950\n" +
+        "1950/11/9,九月,三十,1950\n" +
+        "1950/11/10,十月,初一,1950\n" +
+        "1950/12/8,十月,廿九,1950\n" +
+        "1950/12/9,冬月,初一,1950\n" +
+        "1951/1/7,冬月,三十,1950\n" +
+        "1951/1/8,腊月,初一,1950\n" +
+        "1951/2/5,腊月,廿九,1950\n" +
+        "1951/2/6,正月,初一,1951\n" +
+        "1951/3/7,正月,三十,1951\n" +
+        "1951/3/8,二月,初一,1951\n" +
+        "1951/4/5,二月,廿九,1951\n" +
+        "1951/4/6,三月,初一,1951\n" +
+        "1951/5/5,三月,三十,1951\n" +
+        "1951/5/6,四月,初一,1951\n" +
+        "1951/6/4,四月,三十,1951\n" +
+        "1951/6/5,五月,初一,1951\n" +
+        "1951/7/3,五月,廿九,1951\n" +
+        "1951/7/4,六月,初一,1951\n" +
+        "1951/8/2,六月,三十,1951\n" +
+        "1951/8/3,七月,初一,1951\n" +
+        "1951/8/31,七月,廿九,1951\n" +
+        "1951/9/1,八月,初一,1951\n" +
+        "1951/9/30,八月,三十,1951\n" +
+        "1951/10/1,九月,初一,1951\n" +
+        "1951/10/29,九月,廿九,1951\n" +
+        "1951/10/30,十月,初一,1951\n" +
+        "1951/11/28,十月,三十,1951\n" +
+        "1951/11/29,冬月,初一,1951\n" +
+        "1951/12/27,冬月,廿九,1951\n" +
+        "1951/12/28,腊月,初一,1951\n" +
+        "1952/1/26,腊月,三十,1951\n" +
+        "1952/1/27,正月,初一,1952\n" +
+        "1952/2/24,正月,廿九,1952\n" +
+        "1952/2/25,二月,初一,1952\n" +
+        "1952/3/25,二月,三十,1952\n" +
+        "1952/3/26,三月,初一,1952\n" +
+        "1952/4/23,三月,廿九,1952\n" +
+        "1952/4/24,四月,初一,1952\n" +
+        "1952/5/23,四月,三十,1952\n" +
+        "1952/5/24,五月,初一,1952\n" +
+        "1952/6/21,五月,廿九,1952\n" +
+        "1952/6/22,闰五月,初一,1952\n" +
+        "1952/7/21,闰五月,三十,1952\n" +
+        "1952/7/22,六月,初一,1952\n" +
+        "1952/8/19,六月,廿九,1952\n" +
+        "1952/8/20,七月,初一,1952\n" +
+        "1952/9/18,七月,三十,1952\n" +
+        "1952/9/19,八月,初一,1952\n" +
+        "1952/10/18,八月,三十,1952\n" +
+        "1952/10/19,九月,初一,1952\n" +
+        "1952/11/16,九月,廿九,1952\n" +
+        "1952/11/17,十月,初一,1952\n" +
+        "1952/12/16,十月,三十,1952\n" +
+        "1952/12/17,冬月,初一,1952\n" +
+        "1953/1/14,冬月,廿九,1952\n" +
+        "1953/1/15,腊月,初一,1952\n" +
+        "1953/2/13,腊月,三十,1952\n" +
+        "1953/2/14,正月,初一,1953\n" +
+        "1953/3/14,正月,廿九,1953\n" +
+        "1953/3/15,二月,初一,1953\n" +
+        "1953/4/13,二月,三十,1953\n" +
+        "1953/4/14,三月,初一,1953\n" +
+        "1953/5/12,三月,廿九,1953\n" +
+        "1953/5/13,四月,初一,1953\n" +
+        "1953/6/10,四月,廿九,1953\n" +
+        "1953/6/11,五月,初一,1953\n" +
+        "1953/7/10,五月,三十,1953\n" +
+        "1953/7/11,六月,初一,1953\n" +
+        "1953/8/9,六月,三十,1953\n" +
+        "1953/8/10,七月,初一,1953\n" +
+        "1953/9/7,七月,廿九,1953\n" +
+        "1953/9/8,八月,初一,1953\n" +
+        "1953/10/7,八月,三十,1953\n" +
+        "1953/10/8,九月,初一,1953\n" +
+        "1953/11/6,九月,三十,1953\n" +
+        "1953/11/7,十月,初一,1953\n" +
+        "1953/12/5,十月,廿九,1953\n" +
+        "1953/12/6,冬月,初一,1953\n" +
+        "1954/1/4,冬月,三十,1953\n" +
+        "1954/1/5,腊月,初一,1953\n" +
+        "1954/2/2,腊月,廿九,1953\n" +
+        "1954/2/3,正月,初一,1954\n" +
+        "1954/3/4,正月,三十,1954\n" +
+        "1954/3/5,二月,初一,1954\n" +
+        "1954/4/2,二月,廿九,1954\n" +
+        "1954/4/3,三月,初一,1954\n" +
+        "1954/5/2,三月,三十,1954\n" +
+        "1954/5/3,四月,初一,1954\n" +
+        "1954/5/31,四月,廿九,1954\n" +
+        "1954/6/1,五月,初一,1954\n" +
+        "1954/6/29,五月,廿九,1954\n" +
+        "1954/6/30,六月,初一,1954\n" +
+        "1954/7/29,六月,三十,1954\n" +
+        "1954/7/30,七月,初一,1954\n" +
+        "1954/8/27,七月,廿九,1954\n" +
+        "1954/8/28,八月,初一,1954\n" +
+        "1954/9/26,八月,三十,1954\n" +
+        "1954/9/27,九月,初一,1954\n" +
+        "1954/10/26,九月,三十,1954\n" +
+        "1954/10/27,十月,初一,1954\n" +
+        "1954/11/24,十月,廿九,1954\n" +
+        "1954/11/25,冬月,初一,1954\n" +
+        "1954/12/24,冬月,三十,1954\n" +
+        "1954/12/25,腊月,初一,1954\n" +
+        "1955/1/23,腊月,三十,1954\n" +
+        "1955/1/24,正月,初一,1955\n" +
+        "1955/2/21,正月,廿九,1955\n" +
+        "1955/2/22,二月,初一,1955\n" +
+        "1955/3/23,二月,三十,1955\n" +
+        "1955/3/24,三月,初一,1955\n" +
+        "1955/4/21,三月,廿九,1955\n" +
+        "1955/4/22,闰三月,初一,1955\n" +
+        "1955/5/21,闰三月,三十,1955\n" +
+        "1955/5/22,四月,初一,1955\n" +
+        "1955/6/19,四月,廿九,1955\n" +
+        "1955/6/20,五月,初一,1955\n" +
+        "1955/7/18,五月,廿九,1955\n" +
+        "1955/7/19,六月,初一,1955\n" +
+        "1955/8/17,六月,三十,1955\n" +
+        "1955/8/18,七月,初一,1955\n" +
+        "1955/9/15,七月,廿九,1955\n" +
+        "1955/9/16,八月,初一,1955\n" +
+        "1955/10/15,八月,三十,1955\n" +
+        "1955/10/16,九月,初一,1955\n" +
+        "1955/11/13,九月,廿九,1955\n" +
+        "1955/11/14,十月,初一,1955\n" +
+        "1955/12/13,十月,三十,1955\n" +
+        "1955/12/14,冬月,初一,1955\n" +
+        "1956/1/12,冬月,三十,1955\n" +
+        "1956/1/13,腊月,初一,1955\n" +
+        "1956/2/11,腊月,三十,1955\n" +
+        "1956/2/12,正月,初一,1956\n" +
+        "1956/3/11,正月,廿九,1956\n" +
+        "1956/3/12,二月,初一,1956\n" +
+        "1956/4/10,二月,三十,1956\n" +
+        "1956/4/11,三月,初一,1956\n" +
+        "1956/5/9,三月,廿九,1956\n" +
+        "1956/5/10,四月,初一,1956\n" +
+        "1956/6/8,四月,三十,1956\n" +
+        "1956/6/9,五月,初一,1956\n" +
+        "1956/7/7,五月,廿九,1956\n" +
+        "1956/7/8,六月,初一,1956\n" +
+        "1956/8/5,六月,廿九,1956\n" +
+        "1956/8/6,七月,初一,1956\n" +
+        "1956/9/4,七月,三十,1956\n" +
+        "1956/9/5,八月,初一,1956\n" +
+        "1956/10/3,八月,廿九,1956\n" +
+        "1956/10/4,九月,初一,1956\n" +
+        "1956/11/2,九月,三十,1956\n" +
+        "1956/11/3,十月,初一,1956\n" +
+        "1956/12/1,十月,廿九,1956\n" +
+        "1956/12/2,冬月,初一,1956\n" +
+        "1956/12/31,冬月,三十,1956\n" +
+        "1957/1/1,腊月,初一,1956\n" +
+        "1957/1/30,腊月,三十,1956\n" +
+        "1957/1/31,正月,初一,1957\n" +
+        "1957/3/1,正月,三十,1957\n" +
+        "1957/3/2,二月,初一,1957\n" +
+        "1957/3/30,二月,廿九,1957\n" +
+        "1957/3/31,三月,初一,1957\n" +
+        "1957/4/29,三月,三十,1957\n" +
+        "1957/4/30,四月,初一,1957\n" +
+        "1957/5/28,四月,廿九,1957\n" +
+        "1957/5/29,五月,初一,1957\n" +
+        "1957/6/27,五月,三十,1957\n" +
+        "1957/6/28,六月,初一,1957\n" +
+        "1957/7/26,六月,廿九,1957\n" +
+        "1957/7/27,七月,初一,1957\n" +
+        "1957/8/24,七月,廿九,1957\n" +
+        "1957/8/25,八月,初一,1957\n" +
+        "1957/9/23,八月,三十,1957\n" +
+        "1957/9/24,闰八月,初一,1957\n" +
+        "1957/10/22,闰八月,廿九,1957\n" +
+        "1957/10/23,九月,初一,1957\n" +
+        "1957/11/21,九月,三十,1957\n" +
+        "1957/11/22,十月,初一,1957\n" +
+        "1957/12/20,十月,廿九,1957\n" +
+        "1957/12/21,冬月,初一,1957\n" +
+        "1958/1/19,冬月,三十,1957\n" +
+        "1958/1/20,腊月,初一,1957\n" +
+        "1958/2/17,腊月,廿九,1957\n" +
+        "1958/2/18,正月,初一,1958\n" +
+        "1958/3/19,正月,三十,1958\n" +
+        "1958/3/20,二月,初一,1958\n" +
+        "1958/4/18,二月,三十,1958\n" +
+        "1958/4/19,三月,初一,1958\n" +
+        "1958/5/18,三月,三十,1958\n" +
+        "1958/5/19,四月,初一,1958\n" +
+        "1958/6/16,四月,廿九,1958\n" +
+        "1958/6/17,五月,初一,1958\n" +
+        "1958/7/16,五月,三十,1958\n" +
+        "1958/7/17,六月,初一,1958\n" +
+        "1958/8/14,六月,廿九,1958\n" +
+        "1958/8/15,七月,初一,1958\n" +
+        "1958/9/12,七月,廿九,1958\n" +
+        "1958/9/13,八月,初一,1958\n" +
+        "1958/10/12,八月,三十,1958\n" +
+        "1958/10/13,九月,初一,1958\n" +
+        "1958/11/10,九月,廿九,1958\n" +
+        "1958/11/11,十月,初一,1958\n" +
+        "1958/12/10,十月,三十,1958\n" +
+        "1958/12/11,冬月,初一,1958\n" +
+        "1959/1/8,冬月,廿九,1958\n" +
+        "1959/1/9,腊月,初一,1958\n" +
+        "1959/2/7,腊月,三十,1958\n" +
+        "1959/2/8,正月,初一,1959\n" +
+        "1959/3/8,正月,廿九,1959\n" +
+        "1959/3/9,二月,初一,1959\n" +
+        "1959/4/7,二月,三十,1959\n" +
+        "1959/4/8,三月,初一,1959\n" +
+        "1959/5/7,三月,三十,1959\n" +
+        "1959/5/8,四月,初一,1959\n" +
+        "1959/6/5,四月,廿九,1959\n" +
+        "1959/6/6,五月,初一,1959\n" +
+        "1959/7/5,五月,三十,1959\n" +
+        "1959/7/6,六月,初一,1959\n" +
+        "1959/8/3,六月,廿九,1959\n" +
+        "1959/8/4,七月,初一,1959\n" +
+        "1959/9/2,七月,三十,1959\n" +
+        "1959/9/3,八月,初一,1959\n" +
+        "1959/10/1,八月,廿九,1959\n" +
+        "1959/10/2,九月,初一,1959\n" +
+        "1959/10/31,九月,三十,1959\n" +
+        "1959/11/1,十月,初一,1959\n" +
+        "1959/11/29,十月,廿九,1959\n" +
+        "1959/11/30,冬月,初一,1959\n" +
+        "1959/12/29,冬月,三十,1959\n" +
+        "1959/12/30,腊月,初一,1959\n" +
+        "1960/1/27,腊月,廿九,1959\n" +
+        "1960/1/28,正月,初一,1960\n" +
+        "1960/2/26,正月,三十,1960\n" +
+        "1960/2/27,二月,初一,1960\n" +
+        "1960/3/26,二月,廿九,1960\n" +
+        "1960/3/27,三月,初一,1960\n" +
+        "1960/4/25,三月,三十,1960\n" +
+        "1960/4/26,四月,初一,1960\n" +
+        "1960/5/24,四月,廿九,1960\n" +
+        "1960/5/25,五月,初一,1960\n" +
+        "1960/6/23,五月,三十,1960\n" +
+        "1960/6/24,六月,初一,1960\n" +
+        "1960/7/23,六月,三十,1960\n" +
+        "1960/7/24,闰六月,初一,1960\n" +
+        "1960/8/21,闰六月,廿九,1960\n" +
+        "1960/8/22,七月,初一,1960\n" +
+        "1960/9/20,七月,三十,1960\n" +
+        "1960/9/21,八月,初一,1960\n" +
+        "1960/10/19,八月,廿九,1960\n" +
+        "1960/10/20,九月,初一,1960\n" +
+        "1960/11/18,九月,三十,1960\n" +
+        "1960/11/19,十月,初一,1960\n" +
+        "1960/12/17,十月,廿九,1960\n" +
+        "1960/12/18,冬月,初一,1960\n" +
+        "1961/1/16,冬月,三十,1960\n" +
+        "1961/1/17,腊月,初一,1960\n" +
+        "1961/2/14,腊月,廿九,1960\n" +
+        "1961/2/15,正月,初一,1961\n" +
+        "1961/3/16,正月,三十,1961\n" +
+        "1961/3/17,二月,初一,1961\n" +
+        "1961/4/14,二月,廿九,1961\n" +
+        "1961/4/15,三月,初一,1961\n" +
+        "1961/5/14,三月,三十,1961\n" +
+        "1961/5/15,四月,初一,1961\n" +
+        "1961/6/12,四月,廿九,1961\n" +
+        "1961/6/13,五月,初一,1961\n" +
+        "1961/7/12,五月,三十,1961\n" +
+        "1961/7/13,六月,初一,1961\n" +
+        "1961/8/10,六月,廿九,1961\n" +
+        "1961/8/11,七月,初一,1961\n" +
+        "1961/9/9,七月,三十,1961\n" +
+        "1961/9/10,八月,初一,1961\n" +
+        "1961/10/9,八月,三十,1961\n" +
+        "1961/10/10,九月,初一,1961\n" +
+        "1961/11/7,九月,廿九,1961\n" +
+        "1961/11/8,十月,初一,1961\n" +
+        "1961/12/7,十月,三十,1961\n" +
+        "1961/12/8,冬月,初一,1961\n" +
+        "1962/1/5,冬月,廿九,1961\n" +
+        "1962/1/6,腊月,初一,1961\n" +
+        "1962/2/4,腊月,三十,1961\n" +
+        "1962/2/5,正月,初一,1961\n" +
+        "1962/3/5,正月,廿九,1962\n" +
+        "1962/3/6,二月,初一,1962\n" +
+        "1962/4/4,二月,三十,1962\n" +
+        "1962/4/5,三月,初一,1962\n" +
+        "1962/5/3,三月,廿九,1962\n" +
+        "1962/5/4,四月,初一,1962\n" +
+        "1962/6/1,四月,廿九,1962\n" +
+        "1962/6/2,五月,初一,1962\n" +
+        "1962/7/1,五月,三十,1962\n" +
+        "1962/7/2,六月,初一,1962\n" +
+        "1962/7/30,六月,廿九,1962\n" +
+        "1962/7/31,七月,初一,1962\n" +
+        "1962/8/29,七月,三十,1962\n" +
+        "1962/8/30,八月,初一,1962\n" +
+        "1962/9/28,八月,三十,1962\n" +
+        "1962/9/29,九月,初一,1962\n" +
+        "1962/10/27,九月,廿九,1962\n" +
+        "1962/10/28,十月,初一,1962\n" +
+        "1962/11/26,十月,三十,1962\n" +
+        "1962/11/27,冬月,初一,1962\n" +
+        "1962/12/26,冬月,三十,1962\n" +
+        "1962/12/27,腊月,初一,1962\n" +
+        "1963/1/24,腊月,廿九,1962\n" +
+        "1963/1/25,正月,初一,1963\n" +
+        "1963/2/23,正月,三十,1963\n" +
+        "1963/2/24,二月,初一,1963\n" +
+        "1963/3/24,二月,廿九,1963\n" +
+        "1963/3/25,三月,初一,1963\n" +
+        "1963/4/23,三月,三十,1963\n" +
+        "1963/4/24,四月,初一,1963\n" +
+        "1963/5/22,四月,廿九,1963\n" +
+        "1963/5/23,闰四月,初一,1963\n" +
+        "1963/6/20,闰四月,廿九,1963\n" +
+        "1963/6/21,五月,初一,1963\n" +
+        "1963/7/20,五月,三十,1963\n" +
+        "1963/7/21,六月,初一,1963\n" +
+        "1963/8/18,六月,廿九,1963\n" +
+        "1963/8/19,七月,初一,1963\n" +
+        "1963/9/17,七月,三十,1963\n" +
+        "1963/9/18,八月,初一,1963\n" +
+        "1963/10/16,八月,廿九,1963\n" +
+        "1963/10/17,九月,初一,1963\n" +
+        "1963/11/15,九月,三十,1963\n" +
+        "1963/11/16,十月,初一,1963\n" +
+        "1963/12/15,十月,三十,1963\n" +
+        "1963/12/16,冬月,初一,1963\n" +
+        "1964/1/14,冬月,三十,1963\n" +
+        "1964/1/15,腊月,初一,1963\n" +
+        "1964/2/12,腊月,廿九,1963\n" +
+        "1964/2/13,正月,初一,1964\n" +
+        "1964/3/13,正月,三十,1964\n" +
+        "1964/3/14,二月,初一,1964\n" +
+        "1964/4/11,二月,廿九,1964\n" +
+        "1964/4/12,三月,初一,1964\n" +
+        "1964/5/11,三月,三十,1964\n" +
+        "1964/5/12,四月,初一,1964\n" +
+        "1964/6/9,四月,廿九,1964\n" +
+        "1964/6/10,五月,初一,1964\n" +
+        "1964/7/8,五月,廿九,1964\n" +
+        "1964/7/9,六月,初一,1964\n" +
+        "1964/8/7,六月,三十,1964\n" +
+        "1964/8/8,七月,初一,1964\n" +
+        "1964/9/5,七月,廿九,1964\n" +
+        "1964/9/6,八月,初一,1964\n" +
+        "1964/10/5,八月,三十,1964\n" +
+        "1964/10/6,九月,初一,1964\n" +
+        "1964/11/3,九月,廿九,1964\n" +
+        "1964/11/4,十月,初一,1964\n" +
+        "1964/12/3,十月,三十,1964\n" +
+        "1964/12/4,冬月,初一,1964\n" +
+        "1965/1/2,冬月,三十,1964\n" +
+        "1965/1/3,腊月,初一,1964\n" +
+        "1965/2/1,腊月,三十,1964\n" +
+        "1965/2/2,正月,初一,1965\n" +
+        "1965/3/2,正月,廿九,1965\n" +
+        "1965/3/3,二月,初一,1965\n" +
+        "1965/4/1,二月,三十,1965\n" +
+        "1965/4/2,三月,初一,1965\n" +
+        "1965/4/30,三月,廿九,1965\n" +
+        "1965/5/1,四月,初一,1965\n" +
+        "1965/5/30,四月,三十,1965\n" +
+        "1965/5/31,五月,初一,1965\n" +
+        "1965/6/28,五月,廿九,1965\n" +
+        "1965/6/29,六月,初一,1965\n" +
+        "1965/7/27,六月,廿九,1965\n" +
+        "1965/7/28,七月,初一,1965\n" +
+        "1965/8/26,七月,三十,1965\n" +
+        "1965/8/27,八月,初一,1965\n" +
+        "1965/9/24,八月,廿九,1965\n" +
+        "1965/9/25,九月,初一,1965\n" +
+        "1965/10/23,九月,廿九,1965\n" +
+        "1965/10/24,十月,初一,1965\n" +
+        "1965/11/22,十月,三十,1965\n" +
+        "1965/11/23,冬月,初一,1965\n" +
+        "1965/12/22,冬月,三十,1965\n" +
+        "1965/12/23,腊月,初一,1965\n" +
+        "1966/1/20,腊月,廿九,1965\n" +
+        "1966/1/21,正月,初一,1966\n" +
+        "1966/2/19,正月,三十,1966\n" +
+        "1966/2/20,二月,初一,1966\n" +
+        "1966/3/21,二月,三十,1966\n" +
+        "1966/3/22,三月,初一,1966\n" +
+        "1966/4/20,三月,三十,1966\n" +
+        "1966/4/21,闰三月,初一,1966\n" +
+        "1966/5/19,闰三月,廿九,1966\n" +
+        "1966/5/20,四月,初一,1966\n" +
+        "1966/6/18,四月,三十,1966\n" +
+        "1966/6/19,五月,初一,1966\n" +
+        "1966/7/17,五月,廿九,1966\n" +
+        "1966/7/18,六月,初一,1966\n" +
+        "1966/8/15,六月,廿九,1966\n" +
+        "1966/8/16,七月,初一,1966\n" +
+        "1966/9/14,七月,三十,1966\n" +
+        "1966/9/15,八月,初一,1966\n" +
+        "1966/10/13,八月,廿九,1966\n" +
+        "1966/10/14,九月,初一,1966\n" +
+        "1966/11/11,九月,廿九,1966\n" +
+        "1966/11/12,十月,初一,1966\n" +
+        "1966/12/11,十月,三十,1966\n" +
+        "1966/12/12,冬月,初一,1966\n" +
+        "1967/1/10,冬月,三十,1966\n" +
+        "1967/1/11,腊月,初一,1966\n" +
+        "1967/2/8,腊月,廿九,1966\n" +
+        "1967/2/9,正月,初一,1967\n" +
+        "1967/3/10,正月,三十,1967\n" +
+        "1967/3/11,二月,初一,1967\n" +
+        "1967/4/9,二月,三十,1967\n" +
+        "1967/4/10,三月,初一,1967\n" +
+        "1967/5/8,三月,廿九,1967\n" +
+        "1967/5/9,四月,初一,1967\n" +
+        "1967/6/7,四月,三十,1967\n" +
+        "1967/6/8,五月,初一,1967\n" +
+        "1967/7/7,五月,三十,1967\n" +
+        "1967/7/8,六月,初一,1967\n" +
+        "1967/8/5,六月,廿九,1967\n" +
+        "1967/8/6,七月,初一,1967\n" +
+        "1967/9/3,七月,廿九,1967\n" +
+        "1967/9/4,八月,初一,1967\n" +
+        "1967/10/3,八月,三十,1967\n" +
+        "1967/10/4,九月,初一,1967\n" +
+        "1967/11/1,九月,廿九,1967\n" +
+        "1967/11/2,十月,初一,1967\n" +
+        "1967/12/1,十月,三十,1967\n" +
+        "1967/12/2,冬月,初一,1967\n" +
+        "1967/12/30,冬月,廿九,1967\n" +
+        "1967/12/31,腊月,初一,1967\n" +
+        "1968/1/29,腊月,三十,1967\n" +
+        "1968/1/30,正月,初一,1968\n" +
+        "1968/2/27,正月,廿九,1968\n" +
+        "1968/2/28,二月,初一,1968\n" +
+        "1968/3/28,二月,三十,1968\n" +
+        "1968/3/29,三月,初一,1968\n" +
+        "1968/4/26,三月,廿九,1968\n" +
+        "1968/4/27,四月,初一,1968\n" +
+        "1968/5/26,四月,三十,1968\n" +
+        "1968/5/27,五月,初一,1968\n" +
+        "1968/6/25,五月,三十,1968\n" +
+        "1968/6/26,六月,初一,1968\n" +
+        "1968/7/24,六月,廿九,1968\n" +
+        "1968/7/25,七月,初一,1968\n" +
+        "1968/8/23,七月,三十,1968\n" +
+        "1968/8/24,闰七月,初一,1968\n" +
+        "1968/9/21,闰七月,廿九,1968\n" +
+        "1968/9/22,八月,初一,1968\n" +
+        "1968/10/21,八月,三十,1968\n" +
+        "1968/10/22,九月,初一,1968\n" +
+        "1968/11/19,九月,廿九,1968\n" +
+        "1968/11/20,十月,初一,1968\n" +
+        "1968/12/19,十月,三十,1968\n" +
+        "1968/12/20,冬月,初一,1968\n" +
+        "1969/1/17,冬月,廿九,1968\n" +
+        "1969/1/18,腊月,初一,1968\n" +
+        "1969/2/16,腊月,三十,1968\n" +
+        "1969/2/17,正月,初一,1969\n" +
+        "1969/3/17,正月,廿九,1969\n" +
+        "1969/3/18,二月,初一,1969\n" +
+        "1969/4/16,二月,三十,1969\n" +
+        "1969/4/17,三月,初一,1969\n" +
+        "1969/5/15,三月,廿九,1969\n" +
+        "1969/5/16,四月,初一,1969\n" +
+        "1969/6/14,四月,三十,1969\n" +
+        "1969/6/15,五月,初一,1969\n" +
+        "1969/7/13,五月,廿九,1969\n" +
+        "1969/7/14,六月,初一,1969\n" +
+        "1969/8/12,六月,三十,1969\n" +
+        "1969/8/13,七月,初一,1969\n" +
+        "1969/9/11,七月,三十,1969\n" +
+        "1969/9/12,八月,初一,1969\n" +
+        "1969/10/10,八月,廿九,1969\n" +
+        "1969/10/11,九月,初一,1969\n" +
+        "1969/11/9,九月,三十,1969\n" +
+        "1969/11/10,十月,初一,1969\n" +
+        "1969/12/8,十月,廿九,1969\n" +
+        "1969/12/9,冬月,初一,1969\n" +
+        "1970/1/7,冬月,三十,1969\n" +
+        "1970/1/8,腊月,初一,1969\n" +
+        "1970/2/5,腊月,廿九,1969\n" +
+        "1970/2/6,正月,初一,1970\n" +
+        "1970/3/7,正月,三十,1970\n" +
+        "1970/3/8,二月,初一,1970\n" +
+        "1970/4/5,二月,廿九,1970\n" +
+        "1970/4/6,三月,初一,1970\n" +
+        "1970/5/4,三月,廿九,1970\n" +
+        "1970/5/5,四月,初一,1970\n" +
+        "1970/6/3,四月,三十,1970\n" +
+        "1970/6/4,五月,初一,1970\n" +
+        "1970/7/2,五月,廿九,1970\n" +
+        "1970/7/3,六月,初一,1970\n" +
+        "1970/8/1,六月,三十,1970\n" +
+        "1970/8/2,七月,初一,1970\n" +
+        "1970/8/31,七月,三十,1970\n" +
+        "1970/9/1,八月,初一,1970\n" +
+        "1970/9/29,八月,廿九,1970\n" +
+        "1970/9/30,九月,初一,1970\n" +
+        "1970/10/29,九月,三十,1970\n" +
+        "1970/10/30,十月,初一,1970\n" +
+        "1970/11/28,十月,三十,1970\n" +
+        "1970/11/29,冬月,初一,1970\n" +
+        "1970/12/27,冬月,廿九,1970\n" +
+        "1970/12/28,腊月,初一,1970\n" +
+        "1971/1/26,腊月,三十,1970\n" +
+        "1971/1/27,正月,初一,1971\n" +
+        "1971/2/24,正月,廿九,1971\n" +
+        "1971/2/25,二月,初一,1971\n" +
+        "1971/3/26,二月,三十,1971\n" +
+        "1971/3/27,三月,初一,1971\n" +
+        "1971/4/24,三月,廿九,1971\n" +
+        "1971/4/25,四月,初一,1971\n" +
+        "1971/5/23,四月,廿九,1971\n" +
+        "1971/5/24,五月,初一,1971\n" +
+        "1971/6/22,五月,三十,1971\n" +
+        "1971/6/23,闰五月,初一,1971\n" +
+        "1971/7/21,闰五月,廿九,1971\n" +
+        "1971/7/22,六月,初一,1971\n" +
+        "1971/8/20,六月,三十,1971\n" +
+        "1971/8/21,七月,初一,1971\n" +
+        "1971/9/18,七月,廿九,1971\n" +
+        "1971/9/19,八月,初一,1971\n" +
+        "1971/10/18,八月,三十,1971\n" +
+        "1971/10/19,九月,初一,1971\n" +
+        "1971/11/17,九月,三十,1971\n" +
+        "1971/11/18,十月,初一,1971\n" +
+        "1971/12/17,十月,三十,1971\n" +
+        "1971/12/18,冬月,初一,1971\n" +
+        "1972/1/15,冬月,廿九,1971\n" +
+        "1972/1/16,腊月,初一,1971\n" +
+        "1972/2/14,腊月,三十,1971\n" +
+        "1972/2/15,正月,初一,1972\n" +
+        "1972/3/14,正月,廿九,1972\n" +
+        "1972/3/15,二月,初一,1972\n" +
+        "1972/4/13,二月,三十,1972\n" +
+        "1972/4/14,三月,初一,1972\n" +
+        "1972/5/12,三月,廿九,1972\n" +
+        "1972/5/13,四月,初一,1972\n" +
+        "1972/6/10,四月,廿九,1972\n" +
+        "1972/6/11,五月,初一,1972\n" +
+        "1972/7/10,五月,三十,1972\n" +
+        "1972/7/11,六月,初一,1972\n" +
+        "1972/8/8,六月,廿九,1972\n" +
+        "1972/8/9,七月,初一,1972\n" +
+        "1972/9/7,七月,三十,1972\n" +
+        "1972/9/8,八月,初一,1972\n" +
+        "1972/10/6,八月,廿九,1972\n" +
+        "1972/10/7,九月,初一,1972\n" +
+        "1972/11/5,九月,三十,1972\n" +
+        "1972/11/6,十月,初一,1972\n" +
+        "1972/12/5,十月,三十,1972\n" +
+        "1972/12/6,冬月,初一,1972\n" +
+        "1973/1/3,冬月,廿九,1972\n" +
+        "1973/1/4,腊月,初一,1972\n" +
+        "1973/2/2,腊月,三十,1972\n" +
+        "1973/2/3,正月,初一,1973\n" +
+        "1973/3/4,正月,三十,1973\n" +
+        "1973/3/5,二月,初一,1973\n" +
+        "1973/4/2,二月,廿九,1973\n" +
+        "1973/4/3,三月,初一,1973\n" +
+        "1973/5/2,三月,三十,1973\n" +
+        "1973/5/3,四月,初一,1973\n" +
+        "1973/5/31,四月,廿九,1973\n" +
+        "1973/6/1,五月,初一,1973\n" +
+        "1973/6/29,五月,廿九,1973\n" +
+        "1973/6/30,六月,初一,1973\n" +
+        "1973/7/29,六月,三十,1973\n" +
+        "1973/7/30,七月,初一,1973\n" +
+        "1973/8/27,七月,廿九,1973\n" +
+        "1973/8/28,八月,初一,1973\n" +
+        "1973/9/25,八月,廿九,1973\n" +
+        "1973/9/26,九月,初一,1973\n" +
+        "1973/10/25,九月,三十,1973\n" +
+        "1973/10/26,十月,初一,1973\n" +
+        "1973/11/24,十月,三十,1973\n" +
+        "1973/11/25,冬月,初一,1973\n" +
+        "1973/12/23,冬月,廿九,1973\n" +
+        "1973/12/24,腊月,初一,1973\n" +
+        "1974/1/22,腊月,三十,1973\n" +
+        "1974/1/23,正月,初一,1974\n" +
+        "1974/2/21,正月,三十,1974\n" +
+        "1974/2/22,二月,初一,1974\n" +
+        "1974/3/23,二月,三十,1974\n" +
+        "1974/3/24,三月,初一,1974\n" +
+        "1974/4/21,三月,廿九,1974\n" +
+        "1974/4/22,四月,初一,1974\n" +
+        "1974/5/21,四月,三十,1974\n" +
+        "1974/5/22,闰四月,初一,1974\n" +
+        "1974/6/19,闰四月,廿九,1974\n" +
+        "1974/6/20,五月,初一,1974\n" +
+        "1974/7/18,五月,廿九,1974\n" +
+        "1974/7/19,六月,初一,1974\n" +
+        "1974/8/17,六月,三十,1974\n" +
+        "1974/8/18,七月,初一,1974\n" +
+        "1974/9/15,七月,廿九,1974\n" +
+        "1974/9/16,八月,初一,1974\n" +
+        "1974/10/14,八月,廿九,1974\n" +
+        "1974/10/15,九月,初一,1974\n" +
+        "1974/11/13,九月,三十,1974\n" +
+        "1974/11/14,十月,初一,1974\n" +
+        "1974/12/13,十月,三十,1974\n" +
+        "1974/12/14,冬月,初一,1974\n" +
+        "1975/1/11,冬月,廿九,1974\n" +
+        "1975/1/12,腊月,初一,1974\n" +
+        "1975/2/10,腊月,三十,1974\n" +
+        "1975/2/11,正月,初一,1975\n" +
+        "1975/3/12,正月,三十,1975\n" +
+        "1975/3/13,二月,初一,1975\n" +
+        "1975/4/11,二月,三十,1975\n" +
+        "1975/4/12,三月,初一,1975\n" +
+        "1975/5/10,三月,廿九,1975\n" +
+        "1975/5/11,四月,初一,1975\n" +
+        "1975/6/9,四月,三十,1975\n" +
+        "1975/6/10,五月,初一,1975\n" +
+        "1975/7/8,五月,廿九,1975\n" +
+        "1975/7/9,六月,初一,1975\n" +
+        "1975/8/6,六月,廿九,1975\n" +
+        "1975/8/7,七月,初一,1975\n" +
+        "1975/9/5,七月,三十,1975\n" +
+        "1975/9/6,八月,初一,1975\n" +
+        "1975/10/4,八月,廿九,1975\n" +
+        "1975/10/5,九月,初一,1975\n" +
+        "1975/11/2,九月,廿九,1975\n" +
+        "1975/11/3,十月,初一,1975\n" +
+        "1975/12/2,十月,三十,1975\n" +
+        "1975/12/3,冬月,初一,1975\n" +
+        "1975/12/31,冬月,廿九,1975\n" +
+        "1976/1/1,腊月,初一,1975\n" +
+        "1976/1/30,腊月,三十,1975\n" +
+        "1976/1/31,正月,初一,1976\n" +
+        "1976/2/29,正月,三十,1976\n" +
+        "1976/3/1,二月,初一,1976\n" +
+        "1976/3/30,二月,三十,1976\n" +
+        "1976/3/31,三月,初一,1976\n" +
+        "1976/4/28,三月,廿九,1976\n" +
+        "1976/4/29,四月,初一,1976\n" +
+        "1976/5/28,四月,三十,1976\n" +
+        "1976/5/29,五月,初一,1976\n" +
+        "1976/6/26,五月,廿九,1976\n" +
+        "1976/6/27,六月,初一,1976\n" +
+        "1976/7/26,六月,三十,1976\n" +
+        "1976/7/27,七月,初一,1976\n" +
+        "1976/8/24,七月,廿九,1976\n" +
+        "1976/8/25,八月,初一,1976\n" +
+        "1976/9/23,八月,三十,1976\n" +
+        "1976/9/24,闰八月,初一,1976\n" +
+        "1976/10/22,闰八月,廿九,1976\n" +
+        "1976/10/23,九月,初一,1976\n" +
+        "1976/11/20,九月,廿九,1976\n" +
+        "1976/11/21,十月,初一,1976\n" +
+        "1976/12/20,十月,三十,1976\n" +
+        "1976/12/21,冬月,初一,1976\n" +
+        "1977/1/18,冬月,廿九,1976\n" +
+        "1977/1/19,腊月,初一,1976\n" +
+        "1977/2/17,腊月,三十,1976\n" +
+        "1977/2/18,正月,初一,1977\n" +
+        "1977/3/19,正月,三十,1977\n" +
+        "1977/3/20,二月,初一,1977\n" +
+        "1977/4/17,二月,廿九,1977\n" +
+        "1977/4/18,三月,初一,1977\n" +
+        "1977/5/17,三月,三十,1977\n" +
+        "1977/5/18,四月,初一,1977\n" +
+        "1977/6/16,四月,三十,1977\n" +
+        "1977/6/17,五月,初一,1977\n" +
+        "1977/7/15,五月,廿九,1977\n" +
+        "1977/7/16,六月,初一,1977\n" +
+        "1977/8/14,六月,三十,1977\n" +
+        "1977/8/15,七月,初一,1977\n" +
+        "1977/9/12,七月,廿九,1977\n" +
+        "1977/9/13,八月,初一,1977\n" +
+        "1977/10/12,八月,三十,1977\n" +
+        "1977/10/13,九月,初一,1977\n" +
+        "1977/11/10,九月,廿九,1977\n" +
+        "1977/11/11,十月,初一,1977\n" +
+        "1977/12/10,十月,三十,1977\n" +
+        "1977/12/11,冬月,初一,1977\n" +
+        "1978/1/8,冬月,廿九,1977\n" +
+        "1978/1/9,腊月,初一,1977\n" +
+        "1978/2/6,腊月,廿九,1977\n" +
+        "1978/2/7,正月,初一,1978\n" +
+        "1978/3/8,正月,三十,1978\n" +
+        "1978/3/9,二月,初一,1978\n" +
+        "1978/4/6,二月,廿九,1978\n" +
+        "1978/4/7,三月,初一,1978\n" +
+        "1978/5/6,三月,三十,1978\n" +
+        "1978/5/7,四月,初一,1978\n" +
+        "1978/6/5,四月,三十,1978\n" +
+        "1978/6/6,五月,初一,1978\n" +
+        "1978/7/4,五月,廿九,1978\n" +
+        "1978/7/5,六月,初一,1978\n" +
+        "1978/8/3,六月,三十,1978\n" +
+        "1978/8/4,七月,初一,1978\n" +
+        "1978/9/2,七月,三十,1978\n" +
+        "1978/9/3,八月,初一,1978\n" +
+        "1978/10/1,八月,廿九,1978\n" +
+        "1978/10/2,九月,初一,1978\n" +
+        "1978/10/31,九月,三十,1978\n" +
+        "1978/11/1,十月,初一,1978\n" +
+        "1978/11/29,十月,廿九,1978\n" +
+        "1978/11/30,冬月,初一,1978\n" +
+        "1978/12/29,冬月,三十,1978\n" +
+        "1978/12/30,腊月,初一,1978\n" +
+        "1979/1/27,腊月,廿九,1978\n" +
+        "1979/1/28,正月,初一,1979\n" +
+        "1979/2/26,正月,三十,1979\n" +
+        "1979/2/27,二月,初一,1979\n" +
+        "1979/3/27,二月,廿九,1979\n" +
+        "1979/3/28,三月,初一,1979\n" +
+        "1979/4/25,三月,廿九,1979\n" +
+        "1979/4/26,四月,初一,1979\n" +
+        "1979/5/25,四月,三十,1979\n" +
+        "1979/5/26,五月,初一,1979\n" +
+        "1979/6/23,五月,廿九,1979\n" +
+        "1979/6/24,六月,初一,1979\n" +
+        "1979/7/23,六月,三十,1979\n" +
+        "1979/7/24,闰六月,初一,1979\n" +
+        "1979/8/22,闰六月,三十,1979\n" +
+        "1979/8/23,七月,初一,1979\n" +
+        "1979/9/20,七月,廿九,1979\n" +
+        "1979/9/21,八月,初一,1979\n" +
+        "1979/10/20,八月,三十,1979\n" +
+        "1979/10/21,九月,初一,1979\n" +
+        "1979/11/19,九月,三十,1979\n" +
+        "1979/11/20,十月,初一,1979\n" +
+        "1979/12/18,十月,廿九,1979\n" +
+        "1979/12/19,冬月,初一,1979\n" +
+        "1980/1/17,冬月,三十,1979\n" +
+        "1980/1/18,腊月,初一,1979\n" +
+        "1980/2/15,腊月,廿九,1979\n" +
+        "1980/2/16,正月,初一,1980\n" +
+        "1980/3/16,正月,三十,1980\n" +
+        "1980/3/17,二月,初一,1980\n" +
+        "1980/4/14,二月,廿九,1980\n" +
+        "1980/4/15,三月,初一,1980\n" +
+        "1980/5/13,三月,廿九,1980\n" +
+        "1980/5/14,四月,初一,1980\n" +
+        "1980/6/12,四月,三十,1980\n" +
+        "1980/6/13,五月,初一,1980\n" +
+        "1980/7/11,五月,廿九,1980\n" +
+        "1980/7/12,六月,初一,1980\n" +
+        "1980/8/10,六月,三十,1980\n" +
+        "1980/8/11,七月,初一,1980\n" +
+        "1980/9/8,七月,廿九,1980\n" +
+        "1980/9/9,八月,初一,1980\n" +
+        "1980/10/8,八月,三十,1980\n" +
+        "1980/10/9,九月,初一,1980\n" +
+        "1980/11/7,九月,三十,1980\n" +
+        "1980/11/8,十月,初一,1980\n" +
+        "1980/12/6,十月,廿九,1980\n" +
+        "1980/12/7,冬月,初一,1980\n" +
+        "1981/1/5,冬月,三十,1980\n" +
+        "1981/1/6,腊月,初一,1980\n" +
+        "1981/2/4,腊月,三十,1980\n" +
+        "1981/2/5,正月,初一,1981\n" +
+        "1981/3/5,正月,廿九,1981\n" +
+        "1981/3/6,二月,初一,1981\n" +
+        "1981/4/4,二月,三十,1981\n" +
+        "1981/4/5,三月,初一,1981\n" +
+        "1981/5/3,三月,廿九,1981\n" +
+        "1981/5/4,四月,初一,1981\n" +
+        "1981/6/1,四月,廿九,1981\n" +
+        "1981/6/2,五月,初一,1981\n" +
+        "1981/7/1,五月,三十,1981\n" +
+        "1981/7/2,六月,初一,1981\n" +
+        "1981/7/30,六月,廿九,1981\n" +
+        "1981/7/31,七月,初一,1981\n" +
+        "1981/8/28,七月,廿九,1981\n" +
+        "1981/8/29,八月,初一,1981\n" +
+        "1981/9/27,八月,三十,1981\n" +
+        "1981/9/28,九月,初一,1981\n" +
+        "1981/10/27,九月,三十,1981\n" +
+        "1981/10/28,十月,初一,1981\n" +
+        "1981/11/25,十月,廿九,1981\n" +
+        "1981/11/26,冬月,初一,1981\n" +
+        "1981/12/25,冬月,三十,1981\n" +
+        "1981/12/26,腊月,初一,1981\n" +
+        "1982/1/24,腊月,三十,1981\n" +
+        "1982/1/25,正月,初一,1982\n" +
+        "1982/2/23,正月,三十,1982\n" +
+        "1982/2/24,二月,初一,1982\n" +
+        "1982/3/24,二月,廿九,1982\n" +
+        "1982/3/25,三月,初一,1982\n" +
+        "1982/4/23,三月,三十,1982\n" +
+        "1982/4/24,四月,初一,1982\n" +
+        "1982/5/22,四月,廿九,1982\n" +
+        "1982/5/23,闰四月,初一,1982\n" +
+        "1982/6/20,闰四月,廿九,1982\n" +
+        "1982/6/21,五月,初一,1982\n" +
+        "1982/7/20,五月,三十,1982\n" +
+        "1982/7/21,六月,初一,1982\n" +
+        "1982/8/18,六月,廿九,1982\n" +
+        "1982/8/19,七月,初一,1982\n" +
+        "1982/9/16,七月,廿九,1982\n" +
+        "1982/9/17,八月,初一,1982\n" +
+        "1982/10/16,八月,三十,1982\n" +
+        "1982/10/17,九月,初一,1982\n" +
+        "1982/11/14,九月,廿九,1982\n" +
+        "1982/11/15,十月,初一,1982\n" +
+        "1982/12/14,十月,三十,1982\n" +
+        "1982/12/15,冬月,初一,1982\n" +
+        "1983/1/13,冬月,三十,1982\n" +
+        "1983/1/14,腊月,初一,1982\n" +
+        "1983/2/12,腊月,三十,1982\n" +
+        "1983/2/13,正月,初一,1983\n" +
+        "1983/3/14,正月,三十,1983\n" +
+        "1983/3/15,二月,初一,1983\n" +
+        "1983/4/12,二月,廿九,1983\n" +
+        "1983/4/13,三月,初一,1983\n" +
+        "1983/5/12,三月,三十,1983\n" +
+        "1983/5/13,四月,初一,1983\n" +
+        "1983/6/10,四月,廿九,1983\n" +
+        "1983/6/11,五月,初一,1983\n" +
+        "1983/7/9,五月,廿九,1983\n" +
+        "1983/7/10,六月,初一,1983\n" +
+        "1983/8/8,六月,三十,1983\n" +
+        "1983/8/9,七月,初一,1983\n" +
+        "1983/9/6,七月,廿九,1983\n" +
+        "1983/9/7,八月,初一,1983\n" +
+        "1983/10/5,八月,廿九,1983\n" +
+        "1983/10/6,九月,初一,1983\n" +
+        "1983/11/4,九月,三十,1983\n" +
+        "1983/11/5,十月,初一,1983\n" +
+        "1983/12/3,十月,廿九,1983\n" +
+        "1983/12/4,冬月,初一,1983\n" +
+        "1984/1/2,冬月,三十,1983\n" +
+        "1984/1/3,腊月,初一,1983\n" +
+        "1984/2/1,腊月,三十,1983\n" +
+        "1984/2/2,正月,初一,1984\n" +
+        "1984/3/2,正月,三十,1984\n" +
+        "1984/3/3,二月,初一,1984\n" +
+        "1984/3/31,二月,廿九,1984\n" +
+        "1984/4/1,三月,初一,1984\n" +
+        "1984/4/30,三月,三十,1984\n" +
+        "1984/5/1,四月,初一,1984\n" +
+        "1984/5/30,四月,三十,1984\n" +
+        "1984/5/31,五月,初一,1984\n" +
+        "1984/6/28,五月,廿九,1984\n" +
+        "1984/6/29,六月,初一,1984\n" +
+        "1984/7/27,六月,廿九,1984\n" +
+        "1984/7/28,七月,初一,1984\n" +
+        "1984/8/26,七月,三十,1984\n" +
+        "1984/8/27,八月,初一,1984\n" +
+        "1984/9/24,八月,廿九,1984\n" +
+        "1984/9/25,九月,初一,1984\n" +
+        "1984/10/23,九月,廿九,1984\n" +
+        "1984/10/24,十月,初一,1984\n" +
+        "1984/11/22,十月,三十,1984\n" +
+        "1984/11/23,闰十月,初一,1984\n" +
+        "1984/12/21,闰十月,廿九,1984\n" +
+        "1984/12/22,冬月,初一,1984\n" +
+        "1985/1/20,冬月,三十,1984\n" +
+        "1985/1/21,腊月,初一,1984\n" +
+        "1985/2/19,腊月,三十,1984\n" +
+        "1985/2/20,正月,初一,1985\n" +
+        "1985/3/20,正月,廿九,1985\n" +
+        "1985/3/21,二月,初一,1985\n" +
+        "1985/4/19,二月,三十,1985\n" +
+        "1985/4/20,三月,初一,1985\n" +
+        "1985/5/19,三月,三十,1985\n" +
+        "1985/5/20,四月,初一,1985\n" +
+        "1985/6/17,四月,廿九,1985\n" +
+        "1985/6/18,五月,初一,1985\n" +
+        "1985/7/17,五月,三十,1985\n" +
+        "1985/7/18,六月,初一,1985\n" +
+        "1985/8/15,六月,廿九,1985\n" +
+        "1985/8/16,七月,初一,1985\n" +
+        "1985/9/14,七月,三十,1985\n" +
+        "1985/9/15,八月,初一,1985\n" +
+        "1985/10/13,八月,廿九,1985\n" +
+        "1985/10/14,九月,初一,1985\n" +
+        "1985/11/11,九月,廿九,1985\n" +
+        "1985/11/12,十月,初一,1985\n" +
+        "1985/12/11,十月,三十,1985\n" +
+        "1985/12/12,冬月,初一,1985\n" +
+        "1986/1/9,冬月,廿九,1985\n" +
+        "1986/1/10,腊月,初一,1985\n" +
+        "1986/2/8,腊月,三十,1985\n" +
+        "1986/2/9,正月,初一,1986\n" +
+        "1986/3/9,正月,廿九,1986\n" +
+        "1986/3/10,二月,初一,1986\n" +
+        "1986/4/8,二月,三十,1986\n" +
+        "1986/4/9,三月,初一,1986\n" +
+        "1986/5/8,三月,三十,1986\n" +
+        "1986/5/9,四月,初一,1986\n" +
+        "1986/6/6,四月,廿九,1986\n" +
+        "1986/6/7,五月,初一,1986\n" +
+        "1986/7/6,五月,三十,1986\n" +
+        "1986/7/7,六月,初一,1986\n" +
+        "1986/8/5,六月,三十,1986\n" +
+        "1986/8/6,七月,初一,1986\n" +
+        "1986/9/3,七月,廿九,1986\n" +
+        "1986/9/4,八月,初一,1986\n" +
+        "1986/10/3,八月,三十,1986\n" +
+        "1986/10/4,九月,初一,1986\n" +
+        "1986/11/1,九月,廿九,1986\n" +
+        "1986/11/2,十月,初一,1986\n" +
+        "1986/12/1,十月,三十,1986\n" +
+        "1986/12/2,冬月,初一,1986\n" +
+        "1986/12/30,冬月,廿九,1986\n" +
+        "1986/12/31,腊月,初一,1986\n" +
+        "1987/1/28,腊月,廿九,1986\n" +
+        "1987/1/29,正月,初一,1987\n" +
+        "1987/2/27,正月,三十,1987\n" +
+        "1987/2/28,二月,初一,1987\n" +
+        "1987/3/28,二月,廿九,1987\n" +
+        "1987/3/29,三月,初一,1987\n" +
+        "1987/4/27,三月,三十,1987\n" +
+        "1987/4/28,四月,初一,1987\n" +
+        "1987/5/26,四月,廿九,1987\n" +
+        "1987/5/27,五月,初一,1987\n" +
+        "1987/6/25,五月,三十,1987\n" +
+        "1987/6/26,六月,初一,1987\n" +
+        "1987/7/25,六月,三十,1987\n" +
+        "1987/7/26,闰六月,初一,1987\n" +
+        "1987/8/23,闰六月,廿九,1987\n" +
+        "1987/8/24,七月,初一,1987\n" +
+        "1987/9/22,七月,三十,1987\n" +
+        "1987/9/23,八月,初一,1987\n" +
+        "1987/10/22,八月,三十,1987\n" +
+        "1987/10/23,九月,初一,1987\n" +
+        "1987/11/20,九月,廿九,1987\n" +
+        "1987/11/21,十月,初一,1987\n" +
+        "1987/12/20,十月,三十,1987\n" +
+        "1987/12/21,冬月,初一,1987\n" +
+        "1988/1/18,冬月,廿九,1987\n" +
+        "1988/1/19,腊月,初一,1987\n" +
+        "1988/2/16,腊月,廿九,1987\n" +
+        "1988/2/17,正月,初一,1988\n" +
+        "1988/3/17,正月,三十,1988\n" +
+        "1988/3/18,二月,初一,1988\n" +
+        "1988/4/15,二月,廿九,1988\n" +
+        "1988/4/16,三月,初一,1988\n" +
+        "1988/5/15,三月,三十,1988\n" +
+        "1988/5/16,四月,初一,1988\n" +
+        "1988/6/13,四月,廿九,1988\n" +
+        "1988/6/14,五月,初一,1988\n" +
+        "1988/7/13,五月,三十,1988\n" +
+        "1988/7/14,六月,初一,1988\n" +
+        "1988/8/11,六月,廿九,1988\n" +
+        "1988/8/12,七月,初一,1988\n" +
+        "1988/9/10,七月,三十,1988\n" +
+        "1988/9/11,八月,初一,1988\n" +
+        "1988/10/10,八月,三十,1988\n" +
+        "1988/10/11,九月,初一,1988\n" +
+        "1988/11/8,九月,廿九,1988\n" +
+        "1988/11/9,十月,初一,1988\n" +
+        "1988/12/8,十月,三十,1988\n" +
+        "1988/12/9,冬月,初一,1988\n" +
+        "1989/1/7,冬月,三十,1988\n" +
+        "1989/1/8,腊月,初一,1988\n" +
+        "1989/2/5,腊月,廿九,1988\n" +
+        "1989/2/6,正月,初一,1989\n" +
+        "1989/3/7,正月,三十,1989\n" +
+        "1989/3/8,二月,初一,1989\n" +
+        "1989/4/5,二月,廿九,1989\n" +
+        "1989/4/6,三月,初一,1989\n" +
+        "1989/5/4,三月,廿九,1989\n" +
+        "1989/5/5,四月,初一,1989\n" +
+        "1989/6/3,四月,三十,1989\n" +
+        "1989/6/4,五月,初一,1989\n" +
+        "1989/7/2,五月,廿九,1989\n" +
+        "1989/7/3,六月,初一,1989\n" +
+        "1989/8/1,六月,三十,1989\n" +
+        "1989/8/2,七月,初一,1989\n" +
+        "1989/8/30,七月,廿九,1989\n" +
+        "1989/8/31,八月,初一,1989\n" +
+        "1989/9/29,八月,三十,1989\n" +
+        "1989/9/30,九月,初一,1989\n" +
+        "1989/10/28,九月,廿九,1989\n" +
+        "1989/10/29,十月,初一,1989\n" +
+        "1989/11/27,十月,三十,1989\n" +
+        "1989/11/28,冬月,初一,1989\n" +
+        "1989/12/27,冬月,三十,1989\n" +
+        "1989/12/28,腊月,初一,1989\n" +
+        "1990/1/26,腊月,三十,1989\n" +
+        "1990/1/27,正月,初一,1990\n" +
+        "1990/2/24,正月,廿九,1990\n" +
+        "1990/2/25,二月,初一,1990\n" +
+        "1990/3/26,二月,三十,1990\n" +
+        "1990/3/27,三月,初一,1990\n" +
+        "1990/4/24,三月,廿九,1990\n" +
+        "1990/4/25,四月,初一,1990\n" +
+        "1990/5/23,四月,廿九,1990\n" +
+        "1990/5/24,五月,初一,1990\n" +
+        "1990/6/22,五月,三十,1990\n" +
+        "1990/6/23,闰五月,初一,1990\n" +
+        "1990/7/21,闰五月,廿九,1990\n" +
+        "1990/7/22,六月,初一,1990\n" +
+        "1990/8/19,六月,廿九,1990\n" +
+        "1990/8/20,七月,初一,1990\n" +
+        "1990/9/18,七月,三十,1990\n" +
+        "1990/9/19,八月,初一,1990\n" +
+        "1990/10/17,八月,廿九,1990\n" +
+        "1990/10/18,九月,初一,1990\n" +
+        "1990/11/16,九月,三十,1990\n" +
+        "1990/11/17,十月,初一,1990\n" +
+        "1990/12/16,十月,三十,1990\n" +
+        "1990/12/17,冬月,初一,1990\n" +
+        "1991/1/15,冬月,三十,1990\n" +
+        "1991/1/16,腊月,初一,1990\n" +
+        "1991/2/14,腊月,三十,1990\n" +
+        "1991/2/15,正月,初一,1991\n" +
+        "1991/3/15,正月,廿九,1991\n" +
+        "1991/3/16,二月,初一,1991\n" +
+        "1991/4/14,二月,三十,1991\n" +
+        "1991/4/15,三月,初一,1991\n" +
+        "1991/5/13,三月,廿九,1991\n" +
+        "1991/5/14,四月,初一,1991\n" +
+        "1991/6/11,四月,廿九,1991\n" +
+        "1991/6/12,五月,初一,1991\n" +
+        "1991/7/11,五月,三十,1991\n" +
+        "1991/7/12,六月,初一,1991\n" +
+        "1991/8/9,六月,廿九,1991\n" +
+        "1991/8/10,七月,初一,1991\n" +
+        "1991/9/7,七月,廿九,1991\n" +
+        "1991/9/8,八月,初一,1991\n" +
+        "1991/10/7,八月,三十,1991\n" +
+        "1991/10/8,九月,初一,1991\n" +
+        "1991/11/5,九月,廿九,1991\n" +
+        "1991/11/6,十月,初一,1991\n" +
+        "1991/12/5,十月,三十,1991\n" +
+        "1991/12/6,冬月,初一,1991\n" +
+        "1992/1/4,冬月,三十,1991\n" +
+        "1992/1/5,腊月,初一,1991\n" +
+        "1992/2/3,腊月,三十,1991\n" +
+        "1992/2/4,正月,初一,1992\n" +
+        "1992/3/3,正月,廿九,1992\n" +
+        "1992/3/4,二月,初一,1992\n" +
+        "1992/4/2,二月,三十,1992\n" +
+        "1992/4/3,三月,初一,1992\n" +
+        "1992/5/2,三月,三十,1992\n" +
+        "1992/5/3,四月,初一,1992\n" +
+        "1992/5/31,四月,廿九,1992\n" +
+        "1992/6/1,五月,初一,1992\n" +
+        "1992/6/29,五月,廿九,1992\n" +
+        "1992/6/30,六月,初一,1992\n" +
+        "1992/7/29,六月,三十,1992\n" +
+        "1992/7/30,七月,初一,1992\n" +
+        "1992/8/27,七月,廿九,1992\n" +
+        "1992/8/28,八月,初一,1992\n" +
+        "1992/9/25,八月,廿九,1992\n" +
+        "1992/9/26,九月,初一,1992\n" +
+        "1992/10/25,九月,三十,1992\n" +
+        "1992/10/26,十月,初一,1992\n" +
+        "1992/11/23,十月,廿九,1992\n" +
+        "1992/11/24,冬月,初一,1992\n" +
+        "1992/12/23,冬月,三十,1992\n" +
+        "1992/12/24,腊月,初一,1992\n" +
+        "1993/1/22,腊月,三十,1992\n" +
+        "1993/1/23,正月,初一,1993\n" +
+        "1993/2/20,正月,廿九,1993\n" +
+        "1993/2/21,二月,初一,1993\n" +
+        "1993/3/22,二月,三十,1993\n" +
+        "1993/3/23,三月,初一,1993\n" +
+        "1993/4/21,三月,三十,1993\n" +
+        "1993/4/22,闰三月,初一,1993\n" +
+        "1993/5/20,闰三月,廿九,1993\n" +
+        "1993/5/21,四月,初一,1993\n" +
+        "1993/6/19,四月,三十,1993\n" +
+        "1993/6/20,五月,初一,1993\n" +
+        "1993/7/18,五月,廿九,1993\n" +
+        "1993/7/19,六月,初一,1993\n" +
+        "1993/8/17,六月,三十,1993\n" +
+        "1993/8/18,七月,初一,1993\n" +
+        "1993/9/15,七月,廿九,1993\n" +
+        "1993/9/16,八月,初一,1993\n" +
+        "1993/10/14,八月,廿九,1993\n" +
+        "1993/10/15,九月,初一,1993\n" +
+        "1993/11/13,九月,三十,1993\n" +
+        "1993/11/14,十月,初一,1993\n" +
+        "1993/12/12,十月,廿九,1993\n" +
+        "1993/12/13,冬月,初一,1993\n" +
+        "1994/1/11,冬月,三十,1993\n" +
+        "1994/1/12,腊月,初一,1993\n" +
+        "1994/2/9,腊月,廿九,1993\n" +
+        "1994/2/10,正月,初一,1994\n" +
+        "1994/3/11,正月,三十,1994\n" +
+        "1994/3/12,二月,初一,1994\n" +
+        "1994/4/10,二月,三十,1994\n" +
+        "1994/4/11,三月,初一,1994\n" +
+        "1994/5/10,三月,三十,1994\n" +
+        "1994/5/11,四月,初一,1994\n" +
+        "1994/6/8,四月,廿九,1994\n" +
+        "1994/6/9,五月,初一,1994\n" +
+        "1994/7/8,五月,三十,1994\n" +
+        "1994/7/9,六月,初一,1994\n" +
+        "1994/8/6,六月,廿九,1994\n" +
+        "1994/8/7,七月,初一,1994\n" +
+        "1994/9/5,七月,三十,1994\n" +
+        "1994/9/6,八月,初一,1994\n" +
+        "1994/10/4,八月,廿九,1994\n" +
+        "1994/10/5,九月,初一,1994\n" +
+        "1994/11/2,九月,廿九,1994\n" +
+        "1994/11/3,十月,初一,1994\n" +
+        "1994/12/2,十月,三十,1994\n" +
+        "1994/12/3,冬月,初一,1994\n" +
+        "1994/12/31,冬月,廿九,1994\n" +
+        "1995/1/1,腊月,初一,1994\n" +
+        "1995/1/30,腊月,三十,1994\n" +
+        "1995/1/31,正月,初一,1995\n" +
+        "1995/2/28,正月,廿九,1995\n" +
+        "1995/3/1,二月,初一,1995\n" +
+        "1995/3/30,二月,三十,1995\n" +
+        "1995/3/31,三月,初一,1995\n" +
+        "1995/4/29,三月,三十,1995\n" +
+        "1995/4/30,四月,初一,1995\n" +
+        "1995/5/28,四月,廿九,1995\n" +
+        "1995/5/29,五月,初一,1995\n" +
+        "1995/6/27,五月,三十,1995\n" +
+        "1995/6/28,六月,初一,1995\n" +
+        "1995/7/26,六月,廿九,1995\n" +
+        "1995/7/27,七月,初一,1995\n" +
+        "1995/8/25,七月,三十,1995\n" +
+        "1995/8/26,八月,初一,1995\n" +
+        "1995/9/24,八月,三十,1995\n" +
+        "1995/9/25,闰八月,初一,1995\n" +
+        "1995/10/23,闰八月,廿九,1995\n" +
+        "1995/10/24,九月,初一,1995\n" +
+        "1995/11/21,九月,廿九,1995\n" +
+        "1995/11/22,十月,初一,1995\n" +
+        "1995/12/21,十月,三十,1995\n" +
+        "1995/12/22,冬月,初一,1995\n" +
+        "1996/1/19,冬月,廿九,1995\n" +
+        "1996/1/20,腊月,初一,1995\n" +
+        "1996/2/18,腊月,三十,1995\n" +
+        "1996/2/19,正月,初一,1996\n" +
+        "1996/3/18,正月,廿九,1996\n" +
+        "1996/3/19,二月,初一,1996\n" +
+        "1996/4/17,二月,三十,1996\n" +
+        "1996/4/18,三月,初一,1996\n" +
+        "1996/5/16,三月,廿九,1996\n" +
+        "1996/5/17,四月,初一,1996\n" +
+        "1996/6/15,四月,三十,1996\n" +
+        "1996/6/16,五月,初一,1996\n" +
+        "1996/7/15,五月,三十,1996\n" +
+        "1996/7/16,六月,初一,1996\n" +
+        "1996/8/13,六月,廿九,1996\n" +
+        "1996/8/14,七月,初一,1996\n" +
+        "1996/9/12,七月,三十,1996\n" +
+        "1996/9/13,八月,初一,1996\n" +
+        "1996/10/11,八月,廿九,1996\n" +
+        "1996/10/12,九月,初一,1996\n" +
+        "1996/11/10,九月,三十,1996\n" +
+        "1996/11/11,十月,初一,1996\n" +
+        "1996/12/10,十月,三十,1996\n" +
+        "1996/12/11,冬月,初一,1996\n" +
+        "1997/1/8,冬月,廿九,1996\n" +
+        "1997/1/9,腊月,初一,1996\n" +
+        "1997/2/6,腊月,廿九,1996\n" +
+        "1997/2/7,正月,初一,1997\n" +
+        "1997/3/8,正月,三十,1997\n" +
+        "1997/3/9,二月,初一,1997\n" +
+        "1997/4/6,二月,廿九,1997\n" +
+        "1997/4/7,三月,初一,1997\n" +
+        "1997/5/6,三月,三十,1997\n" +
+        "1997/5/7,四月,初一,1997\n" +
+        "1997/6/4,四月,廿九,1997\n" +
+        "1997/6/5,五月,初一,1997\n" +
+        "1997/7/4,五月,三十,1997\n" +
+        "1997/7/5,六月,初一,1997\n" +
+        "1997/8/2,六月,廿九,1997\n" +
+        "1997/8/3,七月,初一,1997\n" +
+        "1997/9/1,七月,三十,1997\n" +
+        "1997/9/2,八月,初一,1997\n" +
+        "1997/10/1,八月,三十,1997\n" +
+        "1997/10/2,九月,初一,1997\n" +
+        "1997/10/30,九月,廿九,1997\n" +
+        "1997/10/31,十月,初一,1997\n" +
+        "1997/11/29,十月,三十,1997\n" +
+        "1997/11/30,冬月,初一,1997\n" +
+        "1997/12/29,冬月,三十,1997\n" +
+        "1997/12/30,腊月,初一,1997\n" +
+        "1998/1/27,腊月,廿九,1997\n" +
+        "1998/1/28,正月,初一,1998\n" +
+        "1998/2/26,正月,三十,1998\n" +
+        "1998/2/27,二月,初一,1998\n" +
+        "1998/3/27,二月,廿九,1998\n" +
+        "1998/3/28,三月,初一,1998\n" +
+        "1998/4/25,三月,廿九,1998\n" +
+        "1998/4/26,四月,初一,1998\n" +
+        "1998/5/25,四月,三十,1998\n" +
+        "1998/5/26,五月,初一,1998\n" +
+        "1998/6/23,五月,廿九,1998\n" +
+        "1998/6/24,闰五月,初一,1998\n" +
+        "1998/7/22,闰五月,廿九,1998\n" +
+        "1998/7/23,六月,初一,1998\n" +
+        "1998/8/21,六月,三十,1998\n" +
+        "1998/8/22,七月,初一,1998\n" +
+        "1998/9/20,七月,三十,1998\n" +
+        "1998/9/21,八月,初一,1998\n" +
+        "1998/10/19,八月,廿九,1998\n" +
+        "1998/10/20,九月,初一,1998\n" +
+        "1998/11/18,九月,三十,1998\n" +
+        "1998/11/19,十月,初一,1998\n" +
+        "1998/12/18,十月,三十,1998\n" +
+        "1998/12/19,冬月,初一,1998\n" +
+        "1999/1/16,冬月,廿九,1998\n" +
+        "1999/1/17,腊月,初一,1998\n" +
+        "1999/2/15,腊月,三十,1998\n" +
+        "1999/2/16,正月,初一,1999\n" +
+        "1999/3/17,正月,三十,1999\n" +
+        "1999/3/18,二月,初一,1999\n" +
+        "1999/4/15,二月,廿九,1999\n" +
+        "1999/4/16,三月,初一,1999\n" +
+        "1999/5/14,三月,廿九,1999\n" +
+        "1999/5/15,四月,初一,1999\n" +
+        "1999/6/13,四月,三十,1999\n" +
+        "1999/6/14,五月,初一,1999\n" +
+        "1999/7/12,五月,廿九,1999\n" +
+        "1999/7/13,六月,初一,1999\n" +
+        "1999/8/10,六月,廿九,1999\n" +
+        "1999/8/11,七月,初一,1999\n" +
+        "1999/9/9,七月,三十,1999\n" +
+        "1999/9/10,八月,初一,1999\n" +
+        "1999/10/8,八月,廿九,1999\n" +
+        "1999/10/9,九月,初一,1999\n" +
+        "1999/11/7,九月,三十,1999\n" +
+        "1999/11/8,十月,初一,1999\n" +
+        "1999/12/7,十月,三十,1999\n" +
+        "1999/12/8,冬月,初一,1999\n" +
+        "2000/1/6,冬月,三十,1999\n" +
+        "2000/1/7,腊月,初一,1999\n" +
+        "2000/2/4,腊月,廿九,1999\n" +
+        "2000/2/5,正月,初一,2000\n" +
+        "2000/3/5,正月,三十,2000\n" +
+        "2000/3/6,二月,初一,2000\n" +
+        "2000/4/4,二月,三十,2000\n" +
+        "2000/4/5,三月,初一,2000\n" +
+        "2000/5/3,三月,廿九,2000\n" +
+        "2000/5/4,四月,初一,2000\n" +
+        "2000/6/1,四月,廿九,2000\n" +
+        "2000/6/2,五月,初一,2000\n" +
+        "2000/7/1,五月,三十,2000\n" +
+        "2000/7/2,六月,初一,2000\n" +
+        "2000/7/30,六月,廿九,2000\n" +
+        "2000/7/31,七月,初一,2000\n" +
+        "2000/8/28,七月,廿九,2000\n" +
+        "2000/8/29,八月,初一,2000\n" +
+        "2000/9/27,八月,三十,2000\n" +
+        "2000/9/28,九月,初一,2000\n" +
+        "2000/10/26,九月,廿九,2000\n" +
+        "2000/10/27,十月,初一,2000\n" +
+        "2000/11/25,十月,三十,2000\n" +
+        "2000/11/26,冬月,初一,2000\n" +
+        "2000/12/25,冬月,三十,2000\n" +
+        "2000/12/26,腊月,初一,2000\n" +
+        "2001/1/23,腊月,廿九,2000\n" +
+        "2001/1/24,正月,初一,2001\n" +
+        "2001/2/22,正月,三十,2001\n" +
+        "2001/2/23,二月,初一,2001\n" +
+        "2001/3/24,二月,三十,2001\n" +
+        "2001/3/25,三月,初一,2001\n" +
+        "2001/4/22,三月,廿九,2001\n" +
+        "2001/4/23,四月,初一,2001\n" +
+        "2001/5/22,四月,三十,2001\n" +
+        "2001/5/23,闰四月,初一,2001\n" +
+        "2001/6/20,闰四月,廿九,2001\n" +
+        "2001/6/21,五月,初一,2001\n" +
+        "2001/7/20,五月,三十,2001\n" +
+        "2001/7/21,六月,初一,2001\n" +
+        "2001/8/18,六月,廿九,2001\n" +
+        "2001/8/19,七月,初一,2001\n" +
+        "2001/9/16,七月,廿九,2001\n" +
+        "2001/9/17,八月,初一,2001\n" +
+        "2001/10/16,八月,三十,2001\n" +
+        "2001/10/17,九月,初一,2001\n" +
+        "2001/11/14,九月,廿九,2001\n" +
+        "2001/11/15,十月,初一,2001\n" +
+        "2001/12/14,十月,三十,2001\n" +
+        "2001/12/15,冬月,初一,2001\n" +
+        "2002/1/12,冬月,廿九,2001\n" +
+        "2002/1/13,腊月,初一,2001\n" +
+        "2002/2/11,腊月,三十,2001\n" +
+        "2002/2/12,正月,初一,2002\n" +
+        "2002/3/13,正月,三十,2002\n" +
+        "2002/3/14,二月,初一,2002\n" +
+        "2002/4/12,二月,三十,2002\n" +
+        "2002/4/13,三月,初一,2002\n" +
+        "2002/5/11,三月,廿九,2002\n" +
+        "2002/5/12,四月,初一,2002\n" +
+        "2002/6/10,四月,三十,2002\n" +
+        "2002/6/11,五月,初一,2002\n" +
+        "2002/7/9,五月,廿九,2002\n" +
+        "2002/7/10,六月,初一,2002\n" +
+        "2002/8/8,六月,三十,2002\n" +
+        "2002/8/9,七月,初一,2002\n" +
+        "2002/9/6,七月,廿九,2002\n" +
+        "2002/9/7,八月,初一,2002\n" +
+        "2002/10/5,八月,廿九,2002\n" +
+        "2002/10/6,九月,初一,2002\n" +
+        "2002/11/4,九月,三十,2002\n" +
+        "2002/11/5,十月,初一,2002\n" +
+        "2002/12/3,十月,廿九,2002\n" +
+        "2002/12/4,冬月,初一,2002\n" +
+        "2003/1/2,冬月,三十,2002\n" +
+        "2003/1/3,腊月,初一,2002\n" +
+        "2003/1/31,腊月,廿九,2002\n" +
+        "2003/2/1,正月,初一,2003\n" +
+        "2003/3/2,正月,三十,2003\n" +
+        "2003/3/3,二月,初一,2003\n" +
+        "2003/4/1,二月,三十,2003\n" +
+        "2003/4/2,三月,初一,2003\n" +
+        "2003/4/30,三月,廿九,2003\n" +
+        "2003/5/1,四月,初一,2003\n" +
+        "2003/5/30,四月,三十,2003\n" +
+        "2003/5/31,五月,初一,2003\n" +
+        "2003/6/29,五月,三十,2003\n" +
+        "2003/6/30,六月,初一,2003\n" +
+        "2003/7/28,六月,廿九,2003\n" +
+        "2003/7/29,七月,初一,2003\n" +
+        "2003/8/27,七月,三十,2003\n" +
+        "2003/8/28,八月,初一,2003\n" +
+        "2003/9/25,八月,廿九,2003\n" +
+        "2003/9/26,九月,初一,2003\n" +
+        "2003/10/24,九月,廿九,2003\n" +
+        "2003/10/25,十月,初一,2003\n" +
+        "2003/11/23,十月,三十,2003\n" +
+        "2003/11/24,冬月,初一,2003\n" +
+        "2003/12/22,冬月,廿九,2003\n" +
+        "2003/12/23,腊月,初一,2003\n" +
+        "2004/1/21,腊月,三十,2003\n" +
+        "2004/1/22,正月,初一,2004\n" +
+        "2004/2/19,正月,廿九,2004\n" +
+        "2004/2/20,二月,初一,2004\n" +
+        "2004/3/20,二月,三十,2004\n" +
+        "2004/3/21,闰二月,初一,2004\n" +
+        "2004/4/18,闰二月,廿九,2004\n" +
+        "2004/4/19,三月,初一,2004\n" +
+        "2004/5/18,三月,三十,2004\n" +
+        "2004/5/19,四月,初一,2004\n" +
+        "2004/6/17,四月,三十,2004\n" +
+        "2004/6/18,五月,初一,2004\n" +
+        "2004/7/16,五月,廿九,2004\n" +
+        "2004/7/17,六月,初一,2004\n" +
+        "2004/8/15,六月,三十,2004\n" +
+        "2004/8/16,七月,初一,2004\n" +
+        "2004/9/13,七月,廿九,2004\n" +
+        "2004/9/14,八月,初一,2004\n" +
+        "2004/10/13,八月,三十,2004\n" +
+        "2004/10/14,九月,初一,2004\n" +
+        "2004/11/11,九月,廿九,2004\n" +
+        "2004/11/12,十月,初一,2004\n" +
+        "2004/12/11,十月,三十,2004\n" +
+        "2004/12/12,冬月,初一,2004\n" +
+        "2005/1/9,冬月,廿九,2004\n" +
+        "2005/1/10,腊月,初一,2004\n" +
+        "2005/2/8,腊月,三十,2004\n" +
+        "2005/2/9,正月,初一,2005\n" +
+        "2005/3/9,正月,廿九,2005\n" +
+        "2005/3/10,二月,初一,2005\n" +
+        "2005/4/8,二月,三十,2005\n" +
+        "2005/4/9,三月,初一,2005\n" +
+        "2005/5/7,三月,廿九,2005\n" +
+        "2005/5/8,四月,初一,2005\n" +
+        "2005/6/6,四月,三十,2005\n" +
+        "2005/6/7,五月,初一,2005\n" +
+        "2005/7/5,五月,廿九,2005\n" +
+        "2005/7/6,六月,初一,2005\n" +
+        "2005/8/4,六月,三十,2005\n" +
+        "2005/8/5,七月,初一,2005\n" +
+        "2005/9/3,七月,三十,2005\n" +
+        "2005/9/4,八月,初一,2005\n" +
+        "2005/10/2,八月,廿九,2005\n" +
+        "2005/10/3,九月,初一,2005\n" +
+        "2005/11/1,九月,三十,2005\n" +
+        "2005/11/2,十月,初一,2005\n" +
+        "2005/11/30,十月,廿九,2005\n" +
+        "2005/12/1,冬月,初一,2005\n" +
+        "2005/12/30,冬月,三十,2005\n" +
+        "2005/12/31,腊月,初一,2005\n" +
+        "2006/1/28,腊月,廿九,2005\n" +
+        "2006/1/29,正月,初一,2006\n" +
+        "2006/2/27,正月,三十,2006\n" +
+        "2006/2/28,二月,初一,2006\n" +
+        "2006/3/28,二月,廿九,2006\n" +
+        "2006/3/29,三月,初一,2006\n" +
+        "2006/4/27,三月,三十,2006\n" +
+        "2006/4/28,四月,初一,2006\n" +
+        "2006/5/26,四月,廿九,2006\n" +
+        "2006/5/27,五月,初一,2006\n" +
+        "2006/6/25,五月,三十,2006\n" +
+        "2006/6/26,六月,初一,2006\n" +
+        "2006/7/24,六月,廿九,2006\n" +
+        "2006/7/25,七月,初一,2006\n" +
+        "2006/8/23,七月,三十,2006\n" +
+        "2006/8/24,闰七月,初一,2006\n" +
+        "2006/9/21,闰七月,廿九,2006\n" +
+        "2006/9/22,八月,初一,2006\n" +
+        "2006/10/21,八月,三十,2006\n" +
+        "2006/10/22,九月,初一,2006\n" +
+        "2006/11/20,九月,三十,2006\n" +
+        "2006/11/21,十月,初一,2006\n" +
+        "2006/12/19,十月,廿九,2006\n" +
+        "2006/12/20,冬月,初一,2006\n" +
+        "2007/1/18,冬月,三十,2006\n" +
+        "2007/1/19,腊月,初一,2006\n" +
+        "2007/2/17,腊月,三十,2006\n" +
+        "2007/2/18,正月,初一,2007\n" +
+        "2007/3/18,正月,廿九,2007\n" +
+        "2007/3/19,二月,初一,2007\n" +
+        "2007/4/16,二月,廿九,2007\n" +
+        "2007/4/17,三月,初一,2007\n" +
+        "2007/5/16,三月,三十,2007\n" +
+        "2007/5/17,四月,初一,2007\n" +
+        "2007/6/14,四月,廿九,2007\n" +
+        "2007/6/15,五月,初一,2007\n" +
+        "2007/7/13,五月,廿九,2007\n" +
+        "2007/7/14,六月,初一,2007\n" +
+        "2007/8/12,六月,三十,2007\n" +
+        "2007/8/13,七月,初一,2007\n" +
+        "2007/9/10,七月,廿九,2007\n" +
+        "2007/9/11,八月,初一,2007\n" +
+        "2007/10/10,八月,三十,2007\n" +
+        "2007/10/11,九月,初一,2007\n" +
+        "2007/11/9,九月,三十,2007\n" +
+        "2007/11/10,十月,初一,2007\n" +
+        "2007/12/9,十月,三十,2007\n" +
+        "2007/12/10,冬月,初一,2007\n" +
+        "2008/1/7,冬月,廿九,2007\n" +
+        "2008/1/8,腊月,初一,2007\n" +
+        "2008/2/6,腊月,三十,2007\n" +
+        "2008/2/7,正月,初一,2008\n" +
+        "2008/3/7,正月,三十,2008\n" +
+        "2008/3/8,二月,初一,2008\n" +
+        "2008/4/5,二月,廿九,2008\n" +
+        "2008/4/6,三月,初一,2008\n" +
+        "2008/5/4,三月,廿九,2008\n" +
+        "2008/5/5,四月,初一,2008\n" +
+        "2008/6/3,四月,三十,2008\n" +
+        "2008/6/4,五月,初一,2008\n" +
+        "2008/7/2,五月,廿九,2008\n" +
+        "2008/7/3,六月,初一,2008\n" +
+        "2008/7/31,六月,廿九,2008\n" +
+        "2008/8/1,七月,初一,2008\n" +
+        "2008/8/30,七月,三十,2008\n" +
+        "2008/8/31,八月,初一,2008\n" +
+        "2008/9/28,八月,廿九,2008\n" +
+        "2008/9/29,九月,初一,2008\n" +
+        "2008/10/28,九月,三十,2008\n" +
+        "2008/10/29,十月,初一,2008\n" +
+        "2008/11/27,十月,三十,2008\n" +
+        "2008/11/28,冬月,初一,2008\n" +
+        "2008/12/26,冬月,廿九,2008\n" +
+        "2008/12/27,腊月,初一,2008\n" +
+        "2009/1/25,腊月,三十,2008\n" +
+        "2009/1/26,正月,初一,2009\n" +
+        "2009/2/24,正月,三十,2009\n" +
+        "2009/2/25,二月,初一,2009\n" +
+        "2009/3/26,二月,三十,2009\n" +
+        "2009/3/27,三月,初一,2009\n" +
+        "2009/4/24,三月,廿九,2009\n" +
+        "2009/4/25,四月,初一,2009\n" +
+        "2009/5/23,四月,廿九,2009\n" +
+        "2009/5/24,五月,初一,2009\n" +
+        "2009/6/22,五月,三十,2009\n" +
+        "2009/6/23,闰五月,初一,2009\n" +
+        "2009/7/21,闰五月,廿九,2009\n" +
+        "2009/7/22,六月,初一,2009\n" +
+        "2009/8/19,六月,廿九,2009\n" +
+        "2009/8/20,七月,初一,2009\n" +
+        "2009/9/18,七月,三十,2009\n" +
+        "2009/9/19,八月,初一,2009\n" +
+        "2009/10/17,八月,廿九,2009\n" +
+        "2009/10/18,九月,初一,2009\n" +
+        "2009/11/16,九月,三十,2009\n" +
+        "2009/11/17,十月,初一,2009\n" +
+        "2009/12/15,十月,廿九,2009\n" +
+        "2009/12/16,冬月,初一,2009\n" +
+        "2010/1/14,冬月,三十,2009\n" +
+        "2010/1/15,腊月,初一,2009\n" +
+        "2010/2/13,腊月,三十,2009\n" +
+        "2010/2/14,正月,初一,2010\n" +
+        "2010/3/15,正月,三十,2010\n" +
+        "2010/3/16,二月,初一,2010\n" +
+        "2010/4/13,二月,廿九,2010\n" +
+        "2010/4/14,三月,初一,2010\n" +
+        "2010/5/13,三月,三十,2010\n" +
+        "2010/5/14,四月,初一,2010\n" +
+        "2010/6/11,四月,廿九,2010\n" +
+        "2010/6/12,五月,初一,2010\n" +
+        "2010/7/11,五月,三十,2010\n" +
+        "2010/7/12,六月,初一,2010\n" +
+        "2010/8/9,六月,廿九,2010\n" +
+        "2010/8/10,七月,初一,2010\n" +
+        "2010/9/7,七月,廿九,2010\n" +
+        "2010/9/8,八月,初一,2010\n" +
+        "2010/10/7,八月,三十,2010\n" +
+        "2010/10/8,九月,初一,2010\n" +
+        "2010/11/5,九月,廿九,2010\n" +
+        "2010/11/6,十月,初一,2010\n" +
+        "2010/12/5,十月,三十,2010\n" +
+        "2010/12/6,冬月,初一,2010\n" +
+        "2011/1/3,冬月,廿九,2010\n" +
+        "2011/1/4,腊月,初一,2010\n" +
+        "2011/2/2,腊月,三十,2010\n" +
+        "2011/2/3,正月,初一,2011\n" +
+        "2011/3/4,正月,三十,2011\n" +
+        "2011/3/5,二月,初一,2011\n" +
+        "2011/4/2,二月,廿九,2011\n" +
+        "2011/4/3,三月,初一,2011\n" +
+        "2011/5/2,三月,三十,2011\n" +
+        "2011/5/3,四月,初一,2011\n" +
+        "2011/6/1,四月,三十,2011\n" +
+        "2011/6/2,五月,初一,2011\n" +
+        "2011/6/30,五月,廿九,2011\n" +
+        "2011/7/1,六月,初一,2011\n" +
+        "2011/7/30,六月,三十,2011\n" +
+        "2011/7/31,七月,初一,2011\n" +
+        "2011/8/28,七月,廿九,2011\n" +
+        "2011/8/29,八月,初一,2011\n" +
+        "2011/9/26,八月,廿九,2011\n" +
+        "2011/9/27,九月,初一,2011\n" +
+        "2011/10/26,九月,三十,2011\n" +
+        "2011/10/27,十月,初一,2011\n" +
+        "2011/11/24,十月,廿九,2011\n" +
+        "2011/11/25,冬月,初一,2011\n" +
+        "2011/12/24,冬月,三十,2011\n" +
+        "2011/12/25,腊月,初一,2011\n" +
+        "2012/1/22,腊月,廿九,2011\n" +
+        "2012/1/23,正月,初一,2012\n" +
+        "2012/2/21,正月,三十,2012\n" +
+        "2012/2/22,二月,初一,2012\n" +
+        "2012/3/21,二月,廿九,2012\n" +
+        "2012/3/22,三月,初一,2012\n" +
+        "2012/4/20,三月,三十,2012\n" +
+        "2012/4/21,四月,初一,2012\n" +
+        "2012/5/20,四月,三十,2012\n" +
+        "2012/5/21,闰四月,初一,2012\n" +
+        "2012/6/18,闰四月,廿九,2012\n" +
+        "2012/6/19,五月,初一,2012\n" +
+        "2012/7/18,五月,三十,2012\n" +
+        "2012/7/19,六月,初一,2012\n" +
+        "2012/8/16,六月,廿九,2012\n" +
+        "2012/8/17,七月,初一,2012\n" +
+        "2012/9/15,七月,三十,2012\n" +
+        "2012/9/16,八月,初一,2012\n" +
+        "2012/10/14,八月,廿九,2012\n" +
+        "2012/10/15,九月,初一,2012\n" +
+        "2012/11/13,九月,三十,2012\n" +
+        "2012/11/14,十月,初一,2012\n" +
+        "2012/12/12,十月,廿九,2012\n" +
+        "2012/12/13,冬月,初一,2012\n" +
+        "2013/1/11,冬月,三十,2012\n" +
+        "2013/1/12,腊月,初一,2012\n" +
+        "2013/2/9,腊月,廿九,2012\n" +
+        "2013/2/10,正月,初一,2013\n" +
+        "2013/3/11,正月,三十,2013\n" +
+        "2013/3/12,二月,初一,2013\n" +
+        "2013/4/9,二月,廿九,2013\n" +
+        "2013/4/10,三月,初一,2013\n" +
+        "2013/5/9,三月,三十,2013\n" +
+        "2013/5/10,四月,初一,2013\n" +
+        "2013/6/7,四月,廿九,2013\n" +
+        "2013/6/8,五月,初一,2013\n" +
+        "2013/7/7,五月,三十,2013\n" +
+        "2013/7/8,六月,初一,2013\n" +
+        "2013/8/6,六月,三十,2013\n" +
+        "2013/8/7,七月,初一,2013\n" +
+        "2013/9/4,七月,廿九,2013\n" +
+        "2013/9/5,八月,初一,2013\n" +
+        "2013/10/4,八月,三十,2013\n" +
+        "2013/10/5,九月,初一,2013\n" +
+        "2013/11/2,九月,廿九,2013\n" +
+        "2013/11/3,十月,初一,2013\n" +
+        "2013/12/2,十月,三十,2013\n" +
+        "2013/12/3,冬月,初一,2013\n" +
+        "2013/12/31,冬月,廿九,2013\n" +
+        "2014/1/1,腊月,初一,2013\n" +
+        "2014/1/30,腊月,三十,2013\n" +
+        "2014/1/31,正月,初一,2014\n" +
+        "2014/2/28,正月,廿九,2014\n" +
+        "2014/3/1,二月,初一,2014\n" +
+        "2014/3/30,二月,三十,2014\n" +
+        "2014/3/31,三月,初一,2014\n" +
+        "2014/4/28,三月,廿九,2014\n" +
+        "2014/4/29,四月,初一,2014\n" +
+        "2014/5/28,四月,三十,2014\n" +
+        "2014/5/29,五月,初一,2014\n" +
+        "2014/6/26,五月,廿九,2014\n" +
+        "2014/6/27,六月,初一,2014\n" +
+        "2014/7/26,六月,三十,2014\n" +
+        "2014/7/27,七月,初一,2014\n" +
+        "2014/8/24,七月,廿九,2014\n" +
+        "2014/8/25,八月,初一,2014\n" +
+        "2014/9/23,八月,三十,2014\n" +
+        "2014/9/24,九月,初一,2014\n" +
+        "2014/10/23,九月,三十,2014\n" +
+        "2014/10/24,闰九月,初一,2014\n" +
+        "2014/11/21,闰九月,廿九,2014\n" +
+        "2014/11/22,十月,初一,2014\n" +
+        "2014/12/21,十月,三十,2014\n" +
+        "2014/12/22,冬月,初一,2014\n" +
+        "2015/1/19,冬月,廿九,2014\n" +
+        "2015/1/20,腊月,初一,2014\n" +
+        "2015/2/18,腊月,三十,2014\n" +
+        "2015/2/19,正月,初一,2015\n" +
+        "2015/3/19,正月,廿九,2015\n" +
+        "2015/3/20,二月,初一,2015\n" +
+        "2015/4/18,二月,三十,2015\n" +
+        "2015/4/19,三月,初一,2015\n" +
+        "2015/5/17,三月,廿九,2015\n" +
+        "2015/5/18,四月,初一,2015\n" +
+        "2015/6/15,四月,廿九,2015\n" +
+        "2015/6/16,五月,初一,2015\n" +
+        "2015/7/15,五月,三十,2015\n" +
+        "2015/7/16,六月,初一,2015\n" +
+        "2015/8/13,六月,廿九,2015\n" +
+        "2015/8/14,七月,初一,2015\n" +
+        "2015/9/12,七月,三十,2015\n" +
+        "2015/9/13,八月,初一,2015\n" +
+        "2015/10/12,八月,三十,2015\n" +
+        "2015/10/13,九月,初一,2015\n" +
+        "2015/11/11,九月,三十,2015\n" +
+        "2015/11/12,十月,初一,2015\n" +
+        "2015/12/10,十月,廿九,2015\n" +
+        "2015/12/11,冬月,初一,2015\n" +
+        "2016/1/9,冬月,三十,2015\n" +
+        "2016/1/10,腊月,初一,2015\n" +
+        "2016/2/7,腊月,廿九,2015\n" +
+        "2016/2/8,正月,初一,2016\n" +
+        "2016/3/8,正月,三十,2016\n" +
+        "2016/3/9,二月,初一,2016\n" +
+        "2016/4/6,二月,廿九,2016\n" +
+        "2016/4/7,三月,初一,2016\n" +
+        "2016/5/6,三月,三十,2016\n" +
+        "2016/5/7,四月,初一,2016\n" +
+        "2016/6/4,四月,廿九,2016\n" +
+        "2016/6/5,五月,初一,2016\n" +
+        "2016/7/3,五月,廿九,2016\n" +
+        "2016/7/4,六月,初一,2016\n" +
+        "2016/8/2,六月,三十,2016\n" +
+        "2016/8/3,七月,初一,2016\n" +
+        "2016/8/31,七月,廿九,2016\n" +
+        "2016/9/1,八月,初一,2016\n" +
+        "2016/9/30,八月,三十,2016\n" +
+        "2016/10/1,九月,初一,2016\n" +
+        "2016/10/30,九月,三十,2016\n" +
+        "2016/10/31,十月,初一,2016\n" +
+        "2016/11/28,十月,廿九,2016\n" +
+        "2016/11/29,冬月,初一,2016\n" +
+        "2016/12/28,冬月,三十,2016\n" +
+        "2016/12/29,腊月,初一,2016\n" +
+        "2017/1/27,腊月,三十,2016\n" +
+        "2017/1/28,正月,初一,2017\n" +
+        "2017/2/25,正月,廿九,2017\n" +
+        "2017/2/26,二月,初一,2017\n" +
+        "2017/3/27,二月,三十,2017\n" +
+        "2017/3/28,三月,初一,2017\n" +
+        "2017/4/25,三月,廿九,2017\n" +
+        "2017/4/26,四月,初一,2017\n" +
+        "2017/5/25,四月,三十,2017\n" +
+        "2017/5/26,五月,初一,2017\n" +
+        "2017/6/23,五月,廿九,2017\n" +
+        "2017/6/24,六月,初一,2017\n" +
+        "2017/7/22,六月,廿九,2017\n" +
+        "2017/7/23,闰六月,初一,2017\n" +
+        "2017/8/21,闰六月,三十,2017\n" +
+        "2017/8/22,七月,初一,2017\n" +
+        "2017/9/19,七月,廿九,2017\n" +
+        "2017/9/20,八月,初一,2017\n" +
+        "2017/10/19,八月,三十,2017\n" +
+        "2017/10/20,九月,初一,2017\n" +
+        "2017/11/17,九月,廿九,2017\n" +
+        "2017/11/18,十月,初一,2017\n" +
+        "2017/12/17,十月,三十,2017\n" +
+        "2017/12/18,冬月,初一,2017\n" +
+        "2018/1/16,冬月,三十,2017\n" +
+        "2018/1/17,腊月,初一,2017\n" +
+        "2018/2/15,腊月,三十,2017\n" +
+        "2018/2/16,正月,初一,2018\n" +
+        "2018/3/16,正月,廿九,2018\n" +
+        "2018/3/17,二月,初一,2018\n" +
+        "2018/4/15,二月,三十,2018\n" +
+        "2018/4/16,三月,初一,2018\n" +
+        "2018/5/14,三月,廿九,2018\n" +
+        "2018/5/15,四月,初一,2018\n" +
+        "2018/6/13,四月,三十,2018\n" +
+        "2018/6/14,五月,初一,2018\n" +
+        "2018/7/12,五月,廿九,2018\n" +
+        "2018/7/13,六月,初一,2018\n" +
+        "2018/8/10,六月,廿九,2018\n" +
+        "2018/8/11,七月,初一,2018\n" +
+        "2018/9/9,七月,三十,2018\n" +
+        "2018/9/10,八月,初一,2018\n" +
+        "2018/10/8,八月,廿九,2018\n" +
+        "2018/10/9,九月,初一,2018\n" +
+        "2018/11/7,九月,三十,2018\n" +
+        "2018/11/8,十月,初一,2018\n" +
+        "2018/12/6,十月,廿九,2018\n" +
+        "2018/12/7,冬月,初一,2018\n" +
+        "2019/1/5,冬月,三十,2018\n" +
+        "2019/1/6,腊月,初一,2018\n" +
+        "2019/2/4,腊月,三十,2018\n" +
+        "2019/2/5,正月,初一,2019\n" +
+        "2019/3/6,正月,三十,2019\n" +
+        "2019/3/7,二月,初一,2019\n" +
+        "2019/4/4,二月,廿九,2019\n" +
+        "2019/4/5,三月,初一,2019\n" +
+        "2019/5/4,三月,三十,2019\n" +
+        "2019/5/5,四月,初一,2019\n" +
+        "2019/6/2,四月,廿九,2019\n" +
+        "2019/6/3,五月,初一,2019\n" +
+        "2019/7/2,五月,三十,2019\n" +
+        "2019/7/3,六月,初一,2019\n" +
+        "2019/7/31,六月,廿九,2019\n" +
+        "2019/8/1,七月,初一,2019\n" +
+        "2019/8/29,七月,廿九,2019\n" +
+        "2019/8/30,八月,初一,2019\n" +
+        "2019/9/28,八月,三十,2019\n" +
+        "2019/9/29,九月,初一,2019\n" +
+        "2019/10/27,九月,廿九,2019\n" +
+        "2019/10/28,十月,初一,2019\n" +
+        "2019/11/25,十月,廿九,2019\n" +
+        "2019/11/26,冬月,初一,2019\n" +
+        "2019/12/25,冬月,三十,2019\n" +
+        "2019/12/26,腊月,初一,2019\n" +
+        "2020/1/24,腊月,三十,2019\n" +
+        "2020/1/25,正月,初一,2020\n" +
+        "2020/2/22,正月,廿九,2020\n" +
+        "2020/2/23,二月,初一,2020\n" +
+        "2020/3/23,二月,三十,2020\n" +
+        "2020/3/24,三月,初一,2020\n" +
+        "2020/4/22,三月,三十,2020\n" +
+        "2020/4/23,四月,初一,2020\n" +
+        "2020/5/22,四月,三十,2020\n" +
+        "2020/5/23,闰四月,初一,2020\n" +
+        "2020/6/20,闰四月,廿九,2020\n" +
+        "2020/6/21,五月,初一,2020\n" +
+        "2020/7/20,五月,三十,2020\n" +
+        "2020/7/21,六月,初一,2020\n" +
+        "2020/8/18,六月,廿九,2020\n" +
+        "2020/8/19,七月,初一,2020\n" +
+        "2020/9/16,七月,廿九,2020\n" +
+        "2020/9/17,八月,初一,2020\n" +
+        "2020/10/16,八月,三十,2020\n" +
+        "2020/10/17,九月,初一,2020\n" +
+        "2020/11/14,九月,廿九,2020\n" +
+        "2020/11/15,十月,初一,2020\n" +
+        "2020/12/14,十月,三十,2020\n" +
+        "2020/12/15,冬月,初一,2020\n" +
+        "2021/1/12,冬月,廿九,2020\n" +
+        "2021/1/13,腊月,初一,2020\n" +
+        "2021/2/11,腊月,三十,2020\n" +
+        "2021/2/12,正月,初一,2021\n" +
+        "2021/3/12,正月,廿九,2021\n" +
+        "2021/3/13,二月,初一,2021\n" +
+        "2021/4/11,二月,三十,2021\n" +
+        "2021/4/12,三月,初一,2021\n" +
+        "2021/5/11,三月,三十,2021\n" +
+        "2021/5/12,四月,初一,2021\n" +
+        "2021/6/9,四月,廿九,2021\n" +
+        "2021/6/10,五月,初一,2021\n" +
+        "2021/7/9,五月,三十,2021\n" +
+        "2021/7/10,六月,初一,2021\n" +
+        "2021/8/7,六月,廿九,2021\n" +
+        "2021/8/8,七月,初一,2021\n" +
+        "2021/9/6,七月,三十,2021\n" +
+        "2021/9/7,八月,初一,2021\n" +
+        "2021/10/5,八月,廿九,2021\n" +
+        "2021/10/6,九月,初一,2021\n" +
+        "2021/11/4,九月,三十,2021\n" +
+        "2021/11/5,十月,初一,2021\n" +
+        "2021/12/3,十月,廿九,2021\n" +
+        "2021/12/4,冬月,初一,2021\n" +
+        "2022/1/2,冬月,三十,2021\n" +
+        "2022/1/3,腊月,初一,2021\n" +
+        "2022/1/31,腊月,廿九,2021\n" +
+        "2022/2/1,正月,初一,2022\n" +
+        "2022/3/2,正月,三十,2022\n" +
+        "2022/3/3,二月,初一,2022\n" +
+        "2022/3/31,二月,廿九,2022\n" +
+        "2022/4/1,三月,初一,2022\n" +
+        "2022/4/30,三月,三十,2022\n" +
+        "2022/5/1,四月,初一,2022\n" +
+        "2022/5/29,四月,廿九,2022\n" +
+        "2022/5/30,五月,初一,2022\n" +
+        "2022/6/28,五月,三十,2022\n" +
+        "2022/6/29,六月,初一,2022\n" +
+        "2022/7/28,六月,三十,2022\n" +
+        "2022/7/29,七月,初一,2022\n" +
+        "2022/8/26,七月,廿九,2022\n" +
+        "2022/8/27,八月,初一,2022\n" +
+        "2022/9/25,八月,三十,2022\n" +
+        "2022/9/26,九月,初一,2022\n" +
+        "2022/10/24,九月,廿九,2022\n" +
+        "2022/10/25,十月,初一,2022\n" +
+        "2022/11/23,十月,三十,2022\n" +
+        "2022/11/24,冬月,初一,2022\n" +
+        "2022/12/22,冬月,廿九,2022\n" +
+        "2022/12/23,腊月,初一,2022\n" +
+        "2023/1/21,腊月,三十,2022\n" +
+        "2023/1/22,正月,初一,2023\n" +
+        "2023/2/19,正月,廿九,2023\n" +
+        "2023/2/20,二月,初一,2023\n" +
+        "2023/3/21,二月,三十,2023\n" +
+        "2023/3/22,闰二月,初一,2023\n" +
+        "2023/4/19,闰二月,廿九,2023\n" +
+        "2023/4/20,三月,初一,2023\n" +
+        "2023/5/18,三月,廿九,2023\n" +
+        "2023/5/19,四月,初一,2023\n" +
+        "2023/6/17,四月,三十,2023\n" +
+        "2023/6/18,五月,初一,2023\n" +
+        "2023/7/17,五月,三十,2023\n" +
+        "2023/7/18,六月,初一,2023\n" +
+        "2023/8/15,六月,廿九,2023\n" +
+        "2023/8/16,七月,初一,2023\n" +
+        "2023/9/14,七月,三十,2023\n" +
+        "2023/9/15,八月,初一,2023\n" +
+        "2023/10/14,八月,三十,2023\n" +
+        "2023/10/15,九月,初一,2023\n" +
+        "2023/11/12,九月,廿九,2023\n" +
+        "2023/11/13,十月,初一,2023\n" +
+        "2023/12/12,十月,三十,2023\n" +
+        "2023/12/13,冬月,初一,2023\n" +
+        "2024/1/10,冬月,廿九,2023\n" +
+        "2024/1/11,腊月,初一,2023\n" +
+        "2024/2/9,腊月,三十,2023\n" +
+        "2024/2/10,正月,初一,2024\n" +
+        "2024/3/9,正月,廿九,2024\n" +
+        "2024/3/10,二月,初一,2024\n" +
+        "2024/4/8,二月,三十,2024\n" +
+        "2024/4/9,三月,初一,2024\n" +
+        "2024/5/7,三月,廿九,2024\n" +
+        "2024/5/8,四月,初一,2024\n" +
+        "2024/6/5,四月,廿九,2024\n" +
+        "2024/6/6,五月,初一,2024\n" +
+        "2024/7/5,五月,三十,2024\n" +
+        "2024/7/6,六月,初一,2024\n" +
+        "2024/8/3,六月,廿九,2024\n" +
+        "2024/8/4,七月,初一,2024\n" +
+        "2024/9/2,七月,三十,2024\n" +
+        "2024/9/3,八月,初一,2024\n" +
+        "2024/10/2,八月,三十,2024\n" +
+        "2024/10/3,九月,初一,2024\n" +
+        "2024/10/31,九月,廿九,2024\n" +
+        "2024/11/1,十月,初一,2024\n" +
+        "2024/11/30,十月,三十,2024\n" +
+        "2024/12/1,冬月,初一,2024\n" +
+        "2024/12/30,冬月,三十,2024\n" +
+        "2024/12/31,腊月,初一,2024\n" +
+        "2025/1/28,腊月,廿九,2024\n" +
+        "2025/1/29,正月,初一,2025\n" +
+        "2025/2/27,正月,三十,2025\n" +
+        "2025/2/28,二月,初一,2025\n" +
+        "2025/3/28,二月,廿九,2025\n" +
+        "2025/3/29,三月,初一,2025\n" +
+        "2025/4/27,三月,三十,2025\n" +
+        "2025/4/28,四月,初一,2025\n" +
+        "2025/5/26,四月,廿九,2025\n" +
+        "2025/5/27,五月,初一,2025\n" +
+        "2025/6/24,五月,廿九,2025\n" +
+        "2025/6/25,六月,初一,2025\n" +
+        "2025/7/24,六月,三十,2025\n" +
+        "2025/7/25,闰六月,初一,2025\n" +
+        "2025/8/22,闰六月,廿九,2025\n" +
+        "2025/8/23,七月,初一,2025\n" +
+        "2025/9/21,七月,三十,2025\n" +
+        "2025/9/22,八月,初一,2025\n" +
+        "2025/10/20,八月,廿九,2025\n" +
+        "2025/10/21,九月,初一,2025\n" +
+        "2025/11/19,九月,三十,2025\n" +
+        "2025/11/20,十月,初一,2025\n" +
+        "2025/12/19,十月,三十,2025\n" +
+        "2025/12/20,冬月,初一,2025\n" +
+        "2026/1/18,冬月,三十,2025\n" +
+        "2026/1/19,腊月,初一,2025\n" +
+        "2026/2/16,腊月,廿九,2025\n" +
+        "2026/2/17,正月,初一,2026\n" +
+        "2026/3/18,正月,三十,2026\n" +
+        "2026/3/19,二月,初一,2026\n" +
+        "2026/4/16,二月,廿九,2026\n" +
+        "2026/4/17,三月,初一,2026\n" +
+        "2026/5/16,三月,三十,2026\n" +
+        "2026/5/17,四月,初一,2026\n" +
+        "2026/6/14,四月,廿九,2026\n" +
+        "2026/6/15,五月,初一,2026\n" +
+        "2026/7/13,五月,廿九,2026\n" +
+        "2026/7/14,六月,初一,2026\n" +
+        "2026/8/12,六月,三十,2026\n" +
+        "2026/8/13,七月,初一,2026\n" +
+        "2026/9/10,七月,廿九,2026\n" +
+        "2026/9/11,八月,初一,2026\n" +
+        "2026/10/9,八月,廿九,2026\n" +
+        "2026/10/10,九月,初一,2026\n" +
+        "2026/11/8,九月,三十,2026\n" +
+        "2026/11/9,十月,初一,2026\n" +
+        "2026/12/8,十月,三十,2026\n" +
+        "2026/12/9,冬月,初一,2026\n" +
+        "2027/1/7,冬月,三十,2026\n" +
+        "2027/1/8,腊月,初一,2026\n" +
+        "2027/2/5,腊月,廿九,2026\n" +
+        "2027/2/6,正月,初一,2027\n" +
+        "2027/3/7,正月,三十,2027\n" +
+        "2027/3/8,二月,初一,2027\n" +
+        "2027/4/6,二月,三十,2027\n" +
+        "2027/4/7,三月,初一,2027\n" +
+        "2027/5/5,三月,廿九,2027\n" +
+        "2027/5/6,四月,初一,2027\n" +
+        "2027/6/4,四月,三十,2027\n" +
+        "2027/6/5,五月,初一,2027\n" +
+        "2027/7/3,五月,廿九,2027\n" +
+        "2027/7/4,六月,初一,2027\n" +
+        "2027/8/1,六月,廿九,2027\n" +
+        "2027/8/2,七月,初一,2027\n" +
+        "2027/8/31,七月,三十,2027\n" +
+        "2027/9/1,八月,初一,2027\n" +
+        "2027/9/29,八月,廿九,2027\n" +
+        "2027/9/30,九月,初一,2027\n" +
+        "2027/10/28,九月,廿九,2027\n" +
+        "2027/10/29,十月,初一,2027\n" +
+        "2027/11/27,十月,三十,2027\n" +
+        "2027/11/28,冬月,初一,2027\n" +
+        "2027/12/27,冬月,三十,2027\n" +
+        "2027/12/28,腊月,初一,2027\n" +
+        "2028/1/25,腊月,廿九,2027\n" +
+        "2028/1/26,正月,初一,2028\n" +
+        "2028/2/24,正月,三十,2028\n" +
+        "2028/2/25,二月,初一,2028\n" +
+        "2028/3/25,二月,三十,2028\n" +
+        "2028/3/26,三月,初一,2028\n" +
+        "2028/4/24,三月,三十,2028\n" +
+        "2028/4/25,四月,初一,2028\n" +
+        "2028/5/23,四月,廿九,2028\n" +
+        "2028/5/24,五月,初一,2028\n" +
+        "2028/6/22,五月,三十,2028\n" +
+        "2028/6/23,闰五月,初一,2028\n" +
+        "2028/7/21,闰五月,廿九,2028\n" +
+        "2028/7/22,六月,初一,2028\n" +
+        "2028/8/19,六月,廿九,2028\n" +
+        "2028/8/20,七月,初一,2028\n" +
+        "2028/9/18,七月,三十,2028\n" +
+        "2028/9/19,八月,初一,2028\n" +
+        "2028/10/17,八月,廿九,2028\n" +
+        "2028/10/18,九月,初一,2028\n" +
+        "2028/11/15,九月,廿九,2028\n" +
+        "2028/11/16,十月,初一,2028\n" +
+        "2028/12/15,十月,三十,2028\n" +
+        "2028/12/16,冬月,初一,2028\n" +
+        "2029/1/14,冬月,三十,2028\n" +
+        "2029/1/15,腊月,初一,2028\n" +
+        "2029/2/12,腊月,廿九,2028\n" +
+        "2029/2/13,正月,初一,2029\n" +
+        "2029/3/14,正月,三十,2029\n" +
+        "2029/3/15,二月,初一,2029\n" +
+        "2029/4/13,二月,三十,2029\n" +
+        "2029/4/14,三月,初一,2029\n" +
+        "2029/5/12,三月,廿九,2029\n" +
+        "2029/5/13,四月,初一,2029\n" +
+        "2029/6/11,四月,三十,2029\n" +
+        "2029/6/12,五月,初一,2029\n" +
+        "2029/7/10,五月,廿九,2029\n" +
+        "2029/7/11,六月,初一,2029\n" +
+        "2029/8/9,六月,三十,2029\n" +
+        "2029/8/10,七月,初一,2029\n" +
+        "2029/9/7,七月,廿九,2029\n" +
+        "2029/9/8,八月,初一,2029\n" +
+        "2029/10/7,八月,三十,2029\n" +
+        "2029/10/8,九月,初一,2029\n" +
+        "2029/11/5,九月,廿九,2029\n" +
+        "2029/11/6,十月,初一,2029\n" +
+        "2029/12/4,十月,廿九,2029\n" +
+        "2029/12/5,冬月,初一,2029\n" +
+        "2030/1/3,冬月,三十,2029\n" +
+        "2030/1/4,腊月,初一,2029\n" +
+        "2030/2/2,腊月,三十,2029\n" +
+        "2030/2/3,正月,初一,2030\n" +
+        "2030/3/3,正月,廿九,2030\n" +
+        "2030/3/4,二月,初一,2030\n" +
+        "2030/4/2,二月,三十,2030\n" +
+        "2030/4/3,三月,初一,2030\n" +
+        "2030/5/1,三月,廿九,2030\n" +
+        "2030/5/2,四月,初一,2030\n" +
+        "2030/5/31,四月,三十,2030\n" +
+        "2030/6/1,五月,初一,2030\n" +
+        "2030/6/30,五月,三十,2030\n" +
+        "2030/7/1,六月,初一,2030\n" +
+        "2030/7/29,六月,廿九,2030\n" +
+        "2030/7/30,七月,初一,2030\n" +
+        "2030/8/28,七月,三十,2030\n" +
+        "2030/8/29,八月,初一,2030\n" +
+        "2030/9/26,八月,廿九,2030\n" +
+        "2030/9/27,九月,初一,2030\n" +
+        "2030/10/26,九月,三十,2030\n" +
+        "2030/10/27,十月,初一,2030\n" +
+        "2030/11/24,十月,廿九,2030\n" +
+        "2030/11/25,冬月,初一,2030\n" +
+        "2030/12/24,冬月,三十,2030\n" +
+        "2030/12/25,腊月,初一,2030\n" +
+        "2031/1/22,腊月,廿九,2030"
+}

+ 89 - 0
src/Tools.ts

@@ -1,5 +1,6 @@
 import {ElMessage} from "element-plus";
 import {h} from "vue";
+import Cookies from "universal-cookie";
 
 export namespace Tools {
     export function showMessage(msg: string) {
@@ -9,4 +10,92 @@ export namespace Tools {
             ]),
         })
     }
+
+    export function getTextTypeOfWuXing(wuxing: string) {
+        let type = "info"
+        if (wuxing == "木") {
+            type = "success"
+        } else if (wuxing == "火") {
+            type = "danger"
+        } else if (wuxing == "土") {
+            type = "info"
+        } else if (wuxing == "金") {
+            type = "warning"
+        } else if (wuxing == "水") {
+            type = "primary"
+        }
+        return type
+    }
+
+    export function getPowerState(power: number) {
+        let result = "?"
+        switch (power) {
+            case 100:
+                result = "旺"
+                break
+            case 80:
+                result = "相"
+                break
+            case 60:
+                result = "休"
+                break
+            case 40:
+                result = "囚"
+                break
+            case 20:
+                result = "死"
+                break
+        }
+        return result
+    }
+
+    export function getColorByWuXing(wuxing: string) {
+        let type = "#909399"
+        if (wuxing == "木") {
+            type = "#67C23A"
+        } else if (wuxing == "火") {
+            type = "#F56C6C"
+        } else if (wuxing == "土") {
+            type = "#909399"
+        } else if (wuxing == "金") {
+            type = "#E6A23C"
+        } else if (wuxing == "水") {
+            type = "#409EFF"
+        }
+        return type
+    }
+
+    export function getColorByGaoNeng(guanxi: string) {
+
+        let type = "info"
+        if (guanxi == "合") {
+            type = "success"
+        } else if (guanxi == "穿") {
+            type = "danger"
+        } else if (["刑", "冲", "破"].indexOf(guanxi) != -1) {
+            type = "warning"
+        } else if (["半合", "拱合"].indexOf(guanxi) != -1) {
+            type = "primary"
+        }
+        return type
+    }
+
+    export function delay(func: () => void, time: number) {
+        setTimeout(func, time)
+    }
+
+    export function setCookie(key: string, value: any, overtime: number = 1000 * 60 * 60 * 24 * 7) {
+        let ck = new Cookies()
+        ck.set(key, value, {path: "/", expires: new Date(Date.now() + overtime)})
+    }
+
+    export function getCookie(key: string) {
+        let ck = new Cookies()
+        return ck.get(key)
+    }
+
+    export function removeCookie(key: string) {
+        let ck = new Cookies()
+        ck.remove(key, {path: "/"})
+    }
 }

+ 7 - 0
src/components/ApplyUserInfo.vue

@@ -49,6 +49,10 @@ function onShengFenSelected(value: string) {
   diquOptions.value = []
   if (DataCenter.shengShi.has(value)) {
     chengshiOptions.value = DataCenter.shengShi.get(value)
+    if (chengshiOptions.value.length > 0) {
+      chengshi.value = chengshiOptions.value[0]
+      onChengShiSelected(chengshi.value)
+    }
   }
 }
 
@@ -58,6 +62,9 @@ function onChengShiSelected(value: string) {
   let key = shengfen.value + value
   if (DataCenter.shiQu.has(key)) {
     diquOptions.value = DataCenter.shiQu.get(key)
+    if (diquOptions.value.length > 0) {
+      diqu.value = diquOptions.value[0]
+    }
   }
 }
 

+ 150 - 0
src/components/customer/BaZiInfo.vue

@@ -0,0 +1,150 @@
+<script setup lang="ts">
+
+import {DataCenter} from "../../DataCenter.ts";
+import {computed, ref} from "vue";
+import {Tools} from "../../Tools.ts";
+
+
+let titles = ref(["年柱", "月柱", "日柱", "时柱"])
+let tiangans = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result.push(DataCenter.bazi.value.nian_gan)
+    result.push(DataCenter.bazi.value.yue_gan)
+    result.push(DataCenter.bazi.value.ri_gan)
+    result.push(DataCenter.bazi.value.shi_gan)
+  }
+  return result
+})
+
+let dizhis = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result.push(DataCenter.bazi.value.nian_zhi)
+    result.push(DataCenter.bazi.value.yue_zhi)
+    result.push(DataCenter.bazi.value.ri_zhi)
+    result.push(DataCenter.bazi.value.shi_zhi)
+  }
+  return result
+})
+
+
+function isShowZengQiang(guanxi: string) {
+  return ["半合", "拱合", "三会"].indexOf(guanxi) != -1
+}
+
+function getPower(shishen: string) {
+  let result = 0
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.powerDetail.getPower(shishen)
+  }
+  return result
+}
+
+
+</script>
+
+<template>
+  <el-card>
+    <div class="grid-container">
+      <el-text v-for="title in titles">{{ title }}</el-text>
+    </div>
+    <!--天干-->
+    <div class="grid-container">
+      <el-text v-for="sz in tiangans" :type="Tools.getTextTypeOfWuXing(sz.wu_xing)" style="font-size: 20px" size="large"
+               tag="b">{{
+          sz.text
+        }}
+        <el-text>{{ sz.shi_shen }}</el-text>
+        <br>
+        <el-text tag="ins" size="small">{{ getPower(sz.shi_shen).toFixed(0) }}</el-text>
+      </el-text>
+    </div>
+    <!--天干高能-->
+    <div class="grid-container" style="margin-top: -20px">
+      <el-space v-for="sz in tiangans" direction="vertical">
+        <el-text v-for="gn in sz.gaonengs" :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          {{ gn.text }}{{ gn.sign }}
+          <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+              gn.fangxiang
+            }}({{ gn.zengqiang_shishen }})
+          </el-text>
+        </el-text>
+        <el-text v-if="sz.gaonengs.length==0">&nbsp;</el-text>
+      </el-space>
+    </div>
+    <!--地支-->
+    <div class="grid-container">
+      <el-text v-for="sz in dizhis" :type="Tools.getTextTypeOfWuXing(sz.wu_xing)" style="font-size: 20px" size="large"
+               tag="b">{{
+          sz.text
+        }}
+        <el-text>{{ sz.shi_shen }}
+          <el-text size="small" v-if="sz.is_muku ">{{ sz.is_muku_open ? '(开)' : '(闭)' }}</el-text>
+        </el-text>
+        <br>
+        <el-text tag="ins" size="small">{{ getPower(sz.shi_shen).toFixed(0) }}</el-text>
+      </el-text>
+    </div>
+    <!--地支藏干-->
+    <div class="grid-container" style="margin-top: -20px">
+      <el-space v-for="sz in dizhis" direction="vertical">
+        <el-text v-if="sz.cang_gan1!=null" :type="Tools.getTextTypeOfWuXing(sz.gan1_wu_xing)">{{
+            sz.cang_gan1
+          }}({{ sz.gan1_shi_shen }})
+        </el-text>
+        <el-text v-if="sz.cang_gan2!=null" :type="Tools.getTextTypeOfWuXing(sz.gan2_wu_xing)">{{
+            sz.cang_gan2
+          }}({{ sz.gan2_shi_shen }})
+        </el-text>
+        <el-text v-if="sz.cang_gan3!=null" :type="Tools.getTextTypeOfWuXing(sz.gan3_wu_xing)">{{
+            sz.cang_gan3
+          }}({{ sz.gan3_shi_shen }})
+        </el-text>
+        <el-text v-if="sz.cang_gan1==null">&nbsp;</el-text>
+      </el-space>
+    </div>
+    <!--地支高能-->
+    <div class="grid-container" style="margin-top: -10px">
+      <el-space v-for="sz in dizhis" direction="vertical">
+        <el-text v-for="gn in sz.gaonengs" :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          {{ gn.text }}{{ gn.sign }}
+          <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+              gn.fangxiang
+            }}({{ gn.zengqiang_shishen }})
+          </el-text>
+        </el-text>
+        <el-text v-if="sz.gaonengs.length==0">&nbsp;</el-text>
+      </el-space>
+    </div>
+    <!--神煞-->
+    <div class="grid-container" style="margin-top: -10px">
+      <el-space v-for="sz in dizhis" direction="vertical">
+        <el-text v-for="shensha in sz.shenshas">
+          {{ shensha }}
+        </el-text>
+        <el-text v-if="sz.shenshas.length==0">&nbsp;</el-text>
+      </el-space>
+    </div>
+    <!--长生-->
+    <!--    <el-divider></el-divider>-->
+    <!--    <el-row style="margin-top: 10px">-->
+    <!--      <el-col v-for="sz in dizhis" :span="3">-->
+    <!--        <el-space direction="vertical">-->
+    <!--          <el-text>自坐 : {{ sz.zhang_sheng_zhu }}</el-text>-->
+    <!--          <el-text>日元 : {{ sz.zhang_sheng_ri }}</el-text>-->
+    <!--        </el-space>-->
+    <!--      </el-col>-->
+    <!--    </el-row>-->
+  </el-card>
+</template>
+
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-columns: repeat(4, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  padding: 10px; /* 容器内边距 */
+}
+</style>

+ 356 - 0
src/components/customer/BaseInfo.vue

@@ -0,0 +1,356 @@
+<script setup lang="ts">
+import {ref} from "vue";
+import XinLi from "./base_info/XinLi.vue";
+import Area from "./base_info/Area.vue";
+import SiZhuSelector from "./base_info/SiZhuSelector.vue";
+import NongLi from "./base_info/NongLi.vue";
+import {Tools} from "../../Tools.ts";
+import {AreaResult, NongliResult, SiZhuCheckResult, UserInfo, XinLiResult} from "../../customer/SupportModels.ts";
+import {APICenter} from "../../customer/APICenter.ts";
+import {DataCenter} from "../../DataCenter.ts";
+import router from "../../router.ts";
+
+
+let dateMode = ref(0)
+let xinliCompt = ref()
+let areaCompt = ref()
+let sizhuCompt = ref()
+let nongliCompt = ref()
+let isMan = ref(true)
+let userName = ref("测试用户")
+let isEditMode = ref(false)
+let state = ref("info")
+let useRawPower = ref(true)
+let useGaoNengPower = ref(true)
+let useZiHePower = ref(false)
+let useMuKuPower = ref(false)
+let checker = ref<SiZhuCheckResult>()
+let extraInfo = ref("")
+let isGettingData = ref(false)
+let lastUser = ref()
+
+defineExpose({
+  setUserData(info: UserInfo) {
+    setComptUserData(info)
+  },
+})
+
+function setComptUserData(info: UserInfo) {
+  state.value = "info"
+  userName.value = info.name
+  extraInfo.value = info.extra
+  isMan.value = info.isMan
+  dateMode.value = info.dateMode
+  Tools.delay(function () {
+    if (info.dateMode == 0) {
+      xinliCompt.value.setData(info)
+      areaCompt.value.setData(info)
+    } else if (info.dateMode == 1) {
+      nongliCompt.value.setData(info)
+      areaCompt.value.setData(info)
+    } else if (info.dateMode == 2) {
+      sizhuCompt.value.setData(info)
+    }
+  }, 300)
+}
+
+function onGetData() {
+  if (userName.value.length == 0) {
+    Tools.showMessage("用户名不能为空")
+    return
+  }
+  useRawPower.value = true
+  useGaoNengPower.value = false
+  useMuKuPower.value = false
+  useZiHePower.value = false
+  if (dateMode.value == 0) {
+    let xinliResult: XinLiResult = xinliCompt.value.getData()
+    let areaResult: AreaResult = areaCompt.value.getData()
+    isGettingData.value = true
+    state.value = ""
+    APICenter.requestByXinLi(userName.value.trim(), isMan.value, xinliResult, areaResult, function (code: number) {
+
+      if (code > 0) {
+        isGettingData.value = false
+        saveHistory()
+      } else if (code == -200) {
+        loginOut()
+        Tools.showMessage("账号在别处登录,请登出后重试")
+      }
+    })
+
+  } else if (dateMode.value == 1) {
+    let nongliResult: NongliResult = nongliCompt.value.getData()
+    let areaResult: AreaResult = areaCompt.value.getData()
+    isGettingData.value = true
+    state.value = ""
+    APICenter.requestByNongLi(userName.value.trim(), isMan.value, nongliResult, areaResult, function (code: number) {
+      if (code > 0) {
+        isGettingData.value = false
+        saveHistory()
+      } else if (code == -200) {
+        loginOut()
+        Tools.showMessage("账号在别处登录,请登出后重试")
+      }
+    })
+
+  } else if (dateMode.value == 2) {
+    let sizhuResult = sizhuCompt.value.getData()
+    isGettingData.value = true
+    APICenter.requestBySiZhu(userName.value.trim(), isMan.value, sizhuResult, function (ck, code: number) {
+      if (ck == null) {
+        state.value = ""
+        saveHistory()
+      }
+      if (code == -200) {
+        loginOut()
+        Tools.showMessage("账号在别处登录,请登出后重试")
+        return
+      }
+      checker.value = ck
+      isGettingData.value = false
+
+    })
+  }
+
+}
+
+function saveHistory() {
+  let len = 5
+  let info = createUserInfo()
+  if (DataCenter.historyUser.value != null) {
+    if (DataCenter.historyUser.value.length >= len) {
+      DataCenter.historyUser.value.splice(len - 1, 1)
+      DataCenter.historyBaZi.value.splice(len - 1, 1)
+    }
+    DataCenter.historyUser.value.unshift(info)
+    DataCenter.historyBaZi.value.unshift(DataCenter.bazi.value)
+  }
+
+}
+
+function onChangeUserName() {
+  if (!isEditMode.value) {
+    isEditMode.value = true
+  } else {
+    if (userName.value.trim().length > 0) {
+      isEditMode.value = false
+    }
+  }
+}
+
+function changePowerMode() {
+  let value = 1
+  let gnValue = useGaoNengPower.value == true ? 2 : 0
+  let mkValue = useMuKuPower.value == true ? 4 : 0
+  let zhValue = useZiHePower.value == true ? 8 : 0
+  DataCenter.powerMode.value = value + gnValue + mkValue + zhValue
+}
+
+function getSiZhuError() {
+  let result = ""
+  if (checker.value != null && checker.value.error) {
+    if (checker.value.adv_nian.length > 0) {
+      result = "年支有误,请使用:"
+      result += checker.value.adv_nian
+    } else if (checker.value.adv_yue.length > 0) {
+      result = "月支有误,请使用:"
+      result += checker.value.adv_yue
+    } else if (checker.value.adv_ri.length > 0) {
+      result = "日支有误,请使用:"
+      result += checker.value.adv_ri
+    } else if (checker.value.adv_shi.length > 0) {
+      result = "时支有误,请使用:"
+      result += checker.value.adv_shi
+    }
+  }
+  return result
+}
+
+function saveUser() {
+  if (DataCenter.bazi.value == null) {
+    Tools.showMessage("请先获取用户信息后再保存!")
+    return
+  }
+
+  let info = createUserInfo()
+  APICenter.saveUser(info, function () {
+    Tools.showMessage("用户信息已保存")
+  })
+}
+
+function createUserInfo() {
+  let info = new UserInfo()
+  info.name = userName.value.trim()
+  info.dateMode = dateMode.value
+  info.extra = extraInfo.value.trim()
+  info.owner_id = DataCenter.owernId
+  info.fillData(DataCenter.bazi.value)
+  return info
+}
+
+function getUserInfoString(user: UserInfo) {
+  let result = user.name + "  " + user.extra + "  " + (user.isMan ? '男' : '女') + " "
+
+  if (user.dateMode == 0) {
+    result += user.year.toString() + "-" + user.month.toString() + "-" + user.day.toString() + " "
+    if (user.hourMode == 0) {
+      result += user.hour.toString() + ":" + user.minute.toString() + " "
+    }
+  } else if (user.dateMode == 1) {
+    result += user.nongli_year.toString() + " " + user.nongli_month + " " + user.nongli_day + " "
+  }
+  if (user.areaMode == 0) {
+    result += user.sheng + "-" + user.shi + "-" + user.qu + " "
+  }
+  // result += user.rsp_nian_gan + user.rsp_nian_zhi + "  "
+  // result += user.rsp_yue_gan + user.rsp_yue_zhi + "  "
+  // result += user.rsp_ri_gan + user.rsp_ri_zhi + "  "
+  // result += user.rsp_shi_gan + user.rsp_shi_zhi + "  "
+  return result
+}
+
+function onSelectLastUser() {
+  if (DataCenter.historyUser.value != null) {
+    try {
+      let user = DataCenter.historyUser.value[lastUser.value]
+      setComptUserData(user)
+      //@ts-ignore
+      DataCenter.bazi.value = DataCenter.historyBaZi.value[lastUser.value]
+    } catch (e) {
+      console.error(e)
+    }
+  }
+}
+
+function loginOut() {
+  Tools.removeCookie("yx_uname")
+  Tools.removeCookie("yx_token")
+  router.push({name: "login"})
+}
+</script>
+
+<template>
+  <el-card>
+    <div align="left" style="margin-bottom: 15px; position: relative">
+      <el-text tag="b" size="large">当前用户:{{ Tools.getCookie("yx_uname") }}</el-text>
+      <el-button @click="loginOut()" style="right: 0; position: absolute">登出</el-button>
+    </div>
+    <el-collapse v-model="state">
+      <div align="left" style="padding: 10px;">
+        <el-space>
+          <el-switch
+              v-model="isMan"
+              :disabled="isGettingData"
+              inline-prompt
+              style="--el-switch-off-color: #ff4949;"
+              active-text="乾"
+              inactive-text="坤"
+              size="large"
+          />
+          &nbsp;
+          <el-text tag="b" size="large" v-if="!isEditMode">{{ userName }} &nbsp; {{ extraInfo }} &nbsp;</el-text>
+          <el-input :disabled="isGettingData" placeholder="请输入用户名" v-model="userName"
+                    v-if="isEditMode"></el-input>
+          <el-input :disabled="isGettingData" placeholder="备注信息" v-model="extraInfo"
+                    v-if="isEditMode"></el-input>
+          <el-button :type="!isEditMode?null:'success'" :disabled="isGettingData" @click="onChangeUserName">{{
+              !isEditMode ? '编辑' : '确定'
+            }}
+          </el-button>
+          &nbsp;
+          <el-text tag="b">太阳时:{{ DataCenter.bazi.value?.tai_yang_shi }}</el-text>
+        </el-space>
+      </div>
+      <el-collapse-item name="info">
+        <template #title>
+          <el-text v-if="state.length==0" type="primary">点击展开更多信息</el-text>
+        </template>
+        <div align="left">
+          <el-radio-group v-model="dateMode">
+            <el-radio :value="0">新历(阳历)</el-radio>
+            <el-radio :value="1">农历(阳历)</el-radio>
+            <el-radio :value="2">四柱</el-radio>
+          </el-radio-group>
+        </div>
+        <br>
+        <div align="left" v-if="dateMode==0">
+          <XinLi ref="xinliCompt"></XinLi>
+        </div>
+        <div align="left" v-if="dateMode==1">
+          <NongLi ref="nongliCompt"></NongLi>
+        </div>
+        <div align="left" v-if="dateMode==2">
+          <SiZhuSelector ref="sizhuCompt"></SiZhuSelector>
+          <div style="margin-top: 10px">
+            <el-text type="danger">{{ getSiZhuError() }}</el-text>
+          </div>
+        </div>
+
+        <br>
+        <Area ref="areaCompt" v-if="dateMode!=2"></Area>
+      </el-collapse-item>
+    </el-collapse>
+    <template #footer>
+      <div align="left">
+        <el-space style="width: 100%; position: relative">
+          <el-button :disabled="isGettingData" type="primary" @click="onGetData">获取信息</el-button>
+          <el-popconfirm v-if="DataCenter.bazi.value!=null" title="确认保存吗?" confirm-button-text="是"
+                         cancel-button-text="否" @confirm="saveUser()">
+            <template #reference>
+              <el-button :disabled="isGettingData" type="success">保存用户</el-button>
+            </template>
+          </el-popconfirm>
+          &nbsp;
+          <el-text>力量计算:</el-text>
+          <el-checkbox v-model="useRawPower" disabled>原局</el-checkbox>
+          <el-checkbox v-model="useGaoNengPower" @change="changePowerMode">高能</el-checkbox>
+          <!--          <el-checkbox v-model="useZiHePower" @change="changePowerMode">自合</el-checkbox>-->
+          <el-checkbox v-model="useMuKuPower" @change="changePowerMode">墓库</el-checkbox>
+          <el-space style="position: absolute; top: -10px; right:0px;" direction="vertical">
+            <el-space>
+              <el-text>{{ DataCenter.bazi.value?.nian_gan.text }}</el-text>
+              <el-text>{{ DataCenter.bazi.value?.yue_gan.text }}</el-text>
+              <el-text>{{ DataCenter.bazi.value?.ri_gan.text }}</el-text>
+              <el-text>{{ DataCenter.bazi.value?.shi_gan.text }}</el-text>
+            </el-space>
+            <el-space>
+              <el-text>{{ DataCenter.bazi.value?.nian_zhi.text }}</el-text>
+              <el-text>{{ DataCenter.bazi.value?.yue_zhi.text }}</el-text>
+              <el-text>{{ DataCenter.bazi.value?.ri_zhi.text }}</el-text>
+              <el-text>{{ DataCenter.bazi.value?.shi_zhi.text }}</el-text>
+            </el-space>
+          </el-space>
+        </el-space>
+      </div>
+      <el-divider></el-divider>
+      <el-row style="width: 100%;" align="middle">
+        <el-col :span="4">
+          <el-text>最近操作的用户:</el-text>
+        </el-col>
+        <el-col :span="17">
+          <el-select @change="onSelectLastUser()" v-model="lastUser">
+            <el-option v-for="(item,index) in DataCenter.historyUser.value" :value="index"
+                       :label="getUserInfoString(item)">
+            </el-option>
+          </el-select>
+        </el-col>
+        <el-col :span="3">
+          <el-button @click="DataCenter.historyUser.value=[]; lastUser=null">清空</el-button>
+        </el-col>
+
+
+      </el-row>
+    </template>
+  </el-card>
+</template>
+
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-columns: repeat(4, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  padding: 10px; /* 容器内边距 */
+}
+</style>

+ 89 - 0
src/components/customer/Controller.vue

@@ -0,0 +1,89 @@
+<script setup lang="ts">
+
+import BaseInfo from "./BaseInfo.vue";
+import BaZiInfo from "./BaZiInfo.vue";
+import PowerInfo from "./PowerInfo.vue";
+import {ref} from "vue";
+import GeJuInfo from "./GeJuInfo.vue";
+import DaYun from "./DaYun.vue";
+import ZhenDuan from "./ZhenDuan.vue";
+import User from "./User.vue";
+import {UserInfo} from "../../customer/SupportModels.ts";
+import QuShi from "./QuShi.vue";
+import RiYunShi from "./RiYunShi.vue";
+
+//发布
+//培训
+
+//每日运势的自动解读
+
+//每月运势
+
+//十神趋势 - 多人(合婚)
+
+//2030之后的数据录入
+
+
+// 诊断 - 补什么
+
+//不同相的解法,尤其是流日上的
+
+//超过2098年的数据无法生成,会导致流年下没有对应的流月数据
+
+//所有未知时辰的bug集中处理掉
+
+//---- 后面再考虑的功能
+//六合存在的情况下,半合不生效,要去掉这部分能量增持
+//半合加旺的部分不会受伤
+//三会被破局产生的影响
+//格局 - 流月
+//大运 - 流时
+//神煞 effect
+//力量计算的细节
+//墓库状态
+//高能 tip
+//AI 词条编辑
+//神煞 - 空亡 + 情感桃花空亡
+let tabValue = ref("sizhu")
+let baseInfoCompt = ref()
+
+function readUser(info: UserInfo) {
+  baseInfoCompt.value.setUserData(info)
+}
+</script>
+
+<template>
+  <BaseInfo style="width: 750px" ref="baseInfoCompt"></BaseInfo>
+  <el-tabs style="width: 760px; margin-top: 10px" v-model="tabValue" type="card">
+    <el-tab-pane label="四柱" name="sizhu">
+      <BaZiInfo style="width: 750px;"></BaZiInfo>
+    </el-tab-pane>
+    <el-tab-pane label="五行" name="wuxing">
+      <PowerInfo style="width: 750px;"></PowerInfo>
+    </el-tab-pane>
+    <el-tab-pane label="格局" name="geju">
+      <GeJuInfo style="width: 750px;"></GeJuInfo>
+    </el-tab-pane>
+    <el-tab-pane label="大运" name="dayun">
+      <DaYun style="width: 750px;"></DaYun>
+    </el-tab-pane>
+    <el-tab-pane label="诊断" name="zhenduan">
+      <ZhenDuan></ZhenDuan>
+    </el-tab-pane>
+    <el-tab-pane label="趋势" name="qushi">
+      <QuShi></QuShi>
+    </el-tab-pane>
+    <el-tab-pane label="日运势" name="riyunshi">
+      <RiYunShi></RiYunShi>
+    </el-tab-pane>
+    <el-tab-pane label="用户" name="user">
+      <User :on-read-user="readUser"></User>
+    </el-tab-pane>
+  </el-tabs>
+
+
+</template>
+
+<style scoped>
+
+</style>

+ 72 - 0
src/components/customer/DaYun.vue

@@ -0,0 +1,72 @@
+<script setup lang="ts">
+
+import {ref} from "vue";
+import DaYunList from "./da_yun/DaYunList.vue";
+import LiuNianList from "./da_yun/LiuNianList.vue";
+import SiZhu_TianGan from "./da_yun/SiZhu_TianGan.vue";
+import TianGan_GaoNeng from "./da_yun/TianGan_GaoNeng.vue";
+import SiZhu_DiZhi from "./da_yun/SiZhu_DiZhi.vue";
+import DiZhi_CangGan from "./da_yun/DiZhi_CangGan.vue";
+import DiZhi_GaoNeng from "./da_yun/DiZhi_GaoNeng.vue";
+import Shen_Sha from "./da_yun/Shen_Sha.vue";
+import LiuYueList from "./da_yun/LiuYueList.vue";
+import LiuRiList from "./da_yun/LiuRiList.vue";
+
+let titles = ref(["年柱", "月柱", "日柱", "时柱", "大运", "流年", "流月", "流日", "流时"])
+
+</script>
+
+<template>
+  <el-card>
+    <template #header>
+      <div align="right">
+        <el-text size="large" style="color: hotpink">
+          ♥︎
+          <el-text>姻缘
+            <el-text size="small">(鼠标悬停 ♥︎ 上可以查看详情)</el-text>
+          </el-text>
+        </el-text>
+      </div>
+    </template>
+    <DaYunList></DaYunList>
+    <el-divider></el-divider>
+    <LiuNianList></LiuNianList>
+    <el-divider></el-divider>
+    <LiuYueList></LiuYueList>
+    <el-divider></el-divider>
+    <LiuRiList></LiuRiList>
+    <el-divider></el-divider>
+    <div class="grid-container">
+      <el-text v-for="title in titles">{{ title }}</el-text>
+    </div>
+    <div class="grid-container">
+      <SiZhu_TianGan></SiZhu_TianGan>
+    </div>
+    <div class="grid-container" style="margin-top: -20px">
+      <TianGan_GaoNeng></TianGan_GaoNeng>
+    </div>
+    <div class="grid-container" style="margin-top: -10px">
+      <SiZhu_DiZhi></SiZhu_DiZhi>
+    </div>
+    <div class="grid-container" style="margin-top: -20px">
+      <DiZhi_CangGan></DiZhi_CangGan>
+    </div>
+    <div class="grid-container" style="margin-top: -20px">
+      <DiZhi_GaoNeng></DiZhi_GaoNeng>
+    </div>
+    <div class="grid-container" style="margin-top: -20px">
+      <Shen_Sha></Shen_Sha>
+    </div>
+  </el-card>
+</template>
+
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-columns: repeat(9, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  //row-gap: 50px;
+  padding: 10px; /* 容器内边距 */
+}
+</style>

+ 307 - 0
src/components/customer/GeJuInfo.vue

@@ -0,0 +1,307 @@
+<script setup lang="ts">
+
+import {DataCenter} from "../../DataCenter.ts";
+import {computed, ref} from "vue";
+import Xiong_Ji_Tip from "./ge_ju/Xiong_Ji_Tip.vue";
+import WuXing_Powers from "./ge_ju/WuXing_Powers.vue";
+import Score_Shower from "./ge_ju/Score_Shower.vue";
+import TianGan_List from "./ge_ju/TianGan_List.vue";
+import TianGan_GaoNeng_GeJu from "./ge_ju/TianGan_GaoNeng_GeJu.vue";
+import TianGan_ShiShen_Scores from "./ge_ju/TianGan_ShiShen_Scores.vue";
+import DiZhi_List from "./ge_ju/DiZhi_List.vue";
+import DiZhi_GaoNeng_GeJu from "./ge_ju/DiZhi_GaoNeng_GeJu.vue";
+import DiZhi_ShiShen_Scores from "./ge_ju/DiZhi_ShiShen_Scores.vue";
+import {DaYunItem} from "../../customer/SupportModels.ts";
+
+let shishenTexts = ["官", "杀", "财", "才", "印", "枭", "食", "伤", "比", "劫"]
+let wuxingTexts = ["木", "火", "土", "金", "水"]
+
+let shishenSelected = ref("")
+let wuxingSelected = ref("")
+
+function range(min: number, max: number) {
+  let result = []
+  for (let i = min; i <= max; i++) {
+    result.push(i)
+  }
+  return result
+}
+
+function changeSelected(fromShiShen: boolean) {
+  if (fromShiShen) {
+    DataCenter.lastKeyInGeJu.value = shishenSelected.value
+    wuxingSelected.value = ""
+  } else {
+    DataCenter.lastKeyInGeJu.value = wuxingSelected.value
+    shishenSelected.value = ""
+  }
+}
+
+let getDaYuns = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.dayun.forEach(function (item) {
+      if (item.is_dayun) {
+        result.push(item.gan_text + item.zhi_text)
+      }
+    })
+  }
+  return result
+})
+
+let getLiuNians = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    for (let i = 0; i < DataCenter.bazi.value.dayun.length; i++) {
+      let dayun = DataCenter.bazi.value.dayun[i]
+      let key = dayun.gan_text + dayun.zhi_text + "运"
+      if (key == DataCenter.selectedDaYunInGeJu.value?.toString()) {
+        dayun.liunian.forEach(function (liunian) {
+          result.push(liunian.year)
+        })
+        break
+      }
+    }
+  }
+  return result
+})
+
+function onChangeDaYun() {
+  DataCenter.selectedLiuNianInGeJu.value = ""
+}
+
+function findDaYun(key: string) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    let dayunItems = DataCenter.bazi.value.dayun
+    for (let i = 0; i < dayunItems.length; i++) {
+      let item = dayunItems[i]
+      if (!item.is_dayun) {
+        continue
+      }
+      if (item.trigger == key) {
+        result = item
+        break
+      }
+    }
+  }
+  return result
+}
+
+function findLiuNian(dayun: DaYunItem, year: number) {
+  let result = null
+  if (dayun != null) {
+    for (let i = 0; i < dayun.liunian.length; i++) {
+      let ln = dayun.liunian[i]
+      if (ln.year == year) {
+        result = ln
+        break
+      }
+    }
+  }
+  return result
+}
+
+function onChangeLiuNian() {
+  if (DataCenter.bazi.value != null) {
+    let dayunKey = DataCenter.selectedDaYunInGeJu.value.toString().replace("运", "")
+    let dayun = findDaYun(dayunKey)
+    let liunian = findLiuNian(dayun, DataCenter.selectedLiuNianInGeJu.value)
+    if (liunian != null) {
+
+    }
+  }
+}
+
+function chooseCurrentYear() {
+  if (DataCenter.bazi.value == null) {
+    return
+  }
+  DataCenter.includeDaYunInGeJu.value = true
+  DataCenter.includeLiuNianInGeJu.value = true
+  let cur = new Date()
+  let year = cur.getFullYear()
+  for (let i = 0; i < DataCenter.bazi.value.dayun.length; i++) {
+    let dayun = DataCenter.bazi.value.dayun[i]
+    if (dayun.start_year <= year && year <= dayun.end_year) {
+      DataCenter.selectedDaYunInGeJu.value = dayun.gan_text + dayun.zhi_text + "运"
+      setTimeout(function () {
+        DataCenter.selectedLiuNianInGeJu.value = year.toString()
+      }, 100)
+      break
+    }
+  }
+}
+
+function getWuXing(key: string) {
+  if (["甲", "乙", "寅", "卯"].indexOf(key) != -1) {
+    return "木"
+  }
+  if (["丙", "丁", "午", "巳"].indexOf(key) != -1) {
+    return "火"
+  }
+  if (["戊", "己", "辰", "戌", "丑", "未"].indexOf(key) != -1) {
+    return "土"
+  }
+  if (["庚", "辛", "申", "酉"].indexOf(key) != -1) {
+    return "金"
+  }
+  if (["壬", "癸", "子", "亥"].indexOf(key) != -1) {
+    return "水"
+  }
+  return ""
+}
+
+function getWuXingByShiShen() {
+  let result = null
+  if (DataCenter.bazi.value != null && DataCenter.lastKeyInGeJu.value != null) {
+    let info = DataCenter.bazi.value.shishen_guanxi.get(DataCenter.lastKeyInGeJu.value)
+    result = getWuXing(info[0])
+  }
+  return result
+}
+
+function getShiShenByWuXing() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.lastKeyInGeJu.value != null) {
+    result = DataCenter.bazi.value.shishen_guanxi.get(DataCenter.lastKeyInGeJu.value)
+  }
+  return result
+}
+
+</script>
+
+<template>
+  <el-card>
+    <template #header>
+      <!--五行十神力量-->
+      <WuXing_Powers></WuXing_Powers>
+      <!--选择器-->
+      <el-row style="margin-top: -15px">
+        <el-col :span="16">
+          <el-radio-group v-model="shishenSelected">
+            <el-radio-button @change="changeSelected(true)" v-for="ss in shishenTexts" :value="ss">{{
+                ss
+              }}
+            </el-radio-button>
+          </el-radio-group>
+        </el-col>
+        <el-col :span="8">
+          <el-radio-group v-model="wuxingSelected">
+            <el-radio-button @change="changeSelected(false)" v-for="wx in wuxingTexts" :value="wx">{{
+                wx
+              }}
+            </el-radio-button>
+          </el-radio-group>
+        </el-col>
+      </el-row>
+      <!--分数显示-->
+      <Score_Shower></Score_Shower>
+      <!--指示器-->
+      <el-row style="margin-top: -25px">
+        <el-col :span="16">
+          <div class="grid-container-10">
+            <el-text type="danger" tag="b" v-for="i in range(0,9)">&nbsp;{{
+                (getShiShenByWuXing().indexOf(shishenTexts[i]) != -1) ? '↑' : ''
+              }}
+            </el-text>
+          </div>
+        </el-col>
+        <el-col :span="8">
+          <div class="grid-container-5">
+            <el-text type="danger" tag="b" v-for="i in range(0,4)">&nbsp;{{
+                (getWuXingByShiShen() == wuxingTexts[i]) ? '↑' : ''
+              }}
+            </el-text>
+          </div>
+        </el-col>
+      </el-row>
+      <!--凶吉相-->
+      <el-row>
+        <el-col :span="18">
+          <Xiong_Ji_Tip></Xiong_Ji_Tip>
+        </el-col>
+        <el-col :span="6" align="right">
+          <el-space direction="vertical" fill>
+            <el-checkbox v-model="DataCenter.includeDaYunInGeJu.value">受大运影响</el-checkbox>
+            <el-select v-if="DataCenter.includeDaYunInGeJu.value" v-model="DataCenter.selectedDaYunInGeJu.value"
+                       @change="onChangeDaYun">
+              <el-option v-for="dayun in getDaYuns" :value="dayun+'运'">{{ dayun }}运</el-option>
+            </el-select>
+            <el-checkbox v-model="DataCenter.includeLiuNianInGeJu.value" v-if="DataCenter.includeDaYunInGeJu.value">
+              受流年影响
+            </el-checkbox>
+            <el-select v-if="DataCenter.includeLiuNianInGeJu.value && DataCenter.includeDaYunInGeJu.value"
+                       v-model="DataCenter.selectedLiuNianInGeJu.value" @change="onChangeLiuNian">
+              <el-option v-for="liunian in getLiuNians" :value="liunian">{{ liunian }}</el-option>
+            </el-select>
+            <el-button type="primary" @click="chooseCurrentYear()">今年</el-button>
+          </el-space>
+        </el-col>
+      </el-row>
+      <el-space align="left" style="width:100%;margin-top: 10px" direction="vertical" fill :size="0">
+        <el-text type="primary">
+          注意:十神、五行的选择是用来看八字原局对不同干支的适配性的,可以用来看五行、十神的适用性。
+          <el-text type="danger">(比如:当前五行、十神喜忌)</el-text>
+        </el-text>
+        <el-text type="primary">而格局是用来看受日元影响的高能关系对应的十神解读,而八字原局无关,仅和日元有关。
+          <el-text type="danger">(比如:八字天然容易伤官冲官,这个跟原局中是否有官、伤无关,只是说碰到了就会触发)</el-text>
+        </el-text>
+      </el-space>
+    </template>
+    <div style="position: absolute; right: 30px" align="right">
+      <el-space direction="vertical" :size="0">
+        <el-text type="primary" tag="ins">原局拥有</el-text>
+        <el-text type="info" tag="ins">藏干拥有</el-text>
+        <el-text type="info" tag="ins">+ 初始力量</el-text>
+      </el-space>
+    </div>
+    <div class="grid-container">
+      <el-text>&nbsp;</el-text>
+      <TianGan_List></TianGan_List>
+    </div>
+    <!--天干关系-->
+    <div class="grid-container">
+      <el-text>&nbsp;</el-text>
+      <TianGan_GaoNeng_GeJu></TianGan_GaoNeng_GeJu>
+    </div>
+    <TianGan_ShiShen_Scores></TianGan_ShiShen_Scores>
+    <el-divider></el-divider>
+    <div class="grid-container">
+      <el-text>&nbsp;</el-text>
+      <DiZhi_List></DiZhi_List>
+    </div>
+    <div class="grid-container">
+      <el-text>&nbsp;</el-text>
+      <DiZhi_GaoNeng_GeJu></DiZhi_GaoNeng_GeJu>
+    </div>
+    <DiZhi_ShiShen_Scores></DiZhi_ShiShen_Scores>
+  </el-card>
+</template>
+
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-columns: repeat(13, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  padding: 10px; /* 容器内边距 */
+}
+
+.grid-container-10 {
+  display: grid;
+  grid-template-columns: repeat(10, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  padding: 10px; /* 容器内边距 */
+}
+
+.grid-container-5 {
+  display: grid;
+  grid-template-columns: repeat(5, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  padding: 10px; /* 容器内边距 */
+
+}
+</style>

+ 64 - 0
src/components/customer/Login.vue

@@ -0,0 +1,64 @@
+<script setup lang="ts">
+
+import {ref} from "vue";
+import {APICenter} from "../../customer/APICenter.ts";
+import router from "../../router.ts";
+
+let userAccount = ref("")
+let userPassword = ref("")
+let errorMsg = ref("")
+
+function login() {
+  let act = userAccount.value.trim()
+  let psd = userPassword.value.trim()
+  if (act.length == 0 || psd.length == 0) {
+    return
+  }
+
+  APICenter.login(act, psd, function (result) {
+    if (result == null) {
+      errorMsg.value = "登录失败"
+    } else {
+      if (result.code == -1) {
+        errorMsg.value = "登录失败"
+      } else if (result.code == -100) {
+        errorMsg.value = "更换了设备登录,请联系管理员或换回之前的设备登录。"
+      } else {
+        errorMsg.value = ""
+        router.push({name: "controller"})
+      }
+    }
+  })
+}
+</script>
+
+<template>
+  <el-card style="width: 750px; height: 400px">
+    <template #header>
+      <h3>易 观 v2.0
+      </h3>
+    </template>
+    <div style="width: 100%;" align="middle">
+      <div style="width: 50%;">
+        <el-input v-model="userAccount" placeholder="用户名" clearable></el-input>
+      </div>
+      <div style="width: 50%; margin-top: 10px">
+        <el-input @keydown.enter="login" v-model="userPassword" type="password" placeholder="密码" clearable></el-input>
+      </div>
+      <div style="width: 50%; margin-top: 20px" align="left">
+        <el-button style="width: 100%;" @click="login" type="primary">登录</el-button>
+      </div>
+      <div style="width: 50%; margin-top: 10px" align="left">
+        <el-text tag="b" type="success" v-if="APICenter.debugMode">测试模式</el-text>
+      </div>
+      <div style="width: 50%; margin-top: 10px" align="left">
+        <el-text tag="b" type="danger">{{ errorMsg }}</el-text>
+      </div>
+    </div>
+
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 154 - 0
src/components/customer/PowerInfo.vue

@@ -0,0 +1,154 @@
+<script setup lang="ts">
+
+import {computed} from "vue";
+import {DataCenter} from "../../DataCenter.ts";
+import {Tools} from "../../Tools.ts";
+
+let wangshuaiStates = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    let psMap = DataCenter.bazi.value.power_steps
+    let wx = ["木", "火", "土", "金", "水"]
+    psMap.forEach(function (value, key) {
+      if (wx.indexOf(key) != -1) {
+        let state = Tools.getPowerState(value)
+        result.push(key + state)
+      }
+    })
+  }
+  return result
+})
+
+let wuxingAry = ["木", "火", "土", "金", "水"]
+
+function getPower(key: string) {
+  let result = 0
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.powerDetail.getPower(key)
+  }
+  return result.toFixed(0)
+}
+
+function getWuXingPowerPercentage(wx: string) {
+  let result = 0
+  if (DataCenter.bazi.value != null) {
+    let detail = DataCenter.bazi.value.powerDetail
+    result = Math.round((detail.getPower(wx) * 100 / detail.getWuXingTotal()))
+  }
+  return result
+}
+
+function getShiShenPowerPercentage(ss: string) {
+  let result = 0
+  if (DataCenter.bazi.value != null) {
+    let detail = DataCenter.bazi.value.powerDetail
+    result = Math.round((detail.getPower(ss) * 100 / detail.getShiShenTotal()))
+  }
+  return result
+}
+
+function getShiShenListByWuXing(wuxing: string) {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.shishen_guanxi.get(wuxing)
+  }
+  return result
+}
+
+function isZuoZhi(shishen: string) {
+  let result = false
+  if (DataCenter.bazi.value != null) {
+    if (DataCenter.bazi.value.ri_zhi.shi_shen == shishen) {
+      result = true
+    }
+  }
+  return result
+}
+
+function getTongYiDang(getTongDang: boolean) {
+  let result = 0
+  if (DataCenter.bazi.value != null) {
+    if (getTongDang) {
+      result = DataCenter.bazi.value.tong_dang
+    } else {
+      result = DataCenter.bazi.value.yi_dang
+    }
+    return Math.round(result * 100 / (DataCenter.bazi.value.tong_dang + DataCenter.bazi.value.yi_dang))
+  } else {
+    return 0
+  }
+}
+
+</script>
+
+<template>
+  <el-card>
+
+    <template #header>
+      <el-row align="middle" style="margin-top: 10px">
+        <el-col :span="3">
+          <el-text>同党:</el-text>
+        </el-col>
+        <el-col :span="21" align="left">
+          <el-progress :percentage="getTongYiDang(true)"></el-progress>
+        </el-col>
+      </el-row>
+      <el-row align="middle" style="margin-top: 10px">
+        <el-col :span="3">
+          <el-text>异党:</el-text>
+        </el-col>
+        <el-col :span="21" align="left">
+          <el-progress color="#67C23A" :percentage="getTongYiDang(false)"></el-progress>
+        </el-col>
+      </el-row>
+    </template>
+    <div class="grid-container-5">
+      <el-text size="large" v-for="state in wangshuaiStates">
+        {{ state }}
+      </el-text>
+    </div>
+    <el-row v-for="wx in wuxingAry" style="margin-top: 20px">
+      <el-col :span="3">
+        <el-text tag="b" size="large" :type="Tools.getTextTypeOfWuXing(wx)">
+          {{ wx }}
+        </el-text>
+      </el-col>
+      <el-col :span="20">
+        <el-progress :percentage="getWuXingPowerPercentage(wx)"
+                     :color="Tools.getColorByWuXing(wx)">
+          {{ getPower(wx) }} ({{
+            getWuXingPowerPercentage(wx)
+          }}%)
+        </el-progress>
+      </el-col>
+      <el-row v-for="ss in getShiShenListByWuXing(wx)" style="margin-top: 5px">
+        <el-col :span="2"></el-col>
+        <el-col :span="3">
+          <el-text>{{ ss }}
+            <el-text v-if="isZuoZhi(ss)">(坐)</el-text>
+          </el-text>
+        </el-col>
+        <el-col :span="18">
+          <el-progress :color="Tools.getColorByWuXing(wx)"
+                       :percentage="getShiShenPowerPercentage(ss)">{{
+              getPower(ss)
+            }}
+            ({{
+              getShiShenPowerPercentage(ss)
+            }}%)
+          </el-progress>
+        </el-col>
+      </el-row>
+    </el-row>
+  </el-card>
+</template>
+
+<style scoped>
+.grid-container-5 {
+  display: grid;
+  grid-template-columns: repeat(5, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  padding: 10px; /* 容器内边距 */
+}
+</style>

+ 383 - 0
src/components/customer/QuShi.vue

@@ -0,0 +1,383 @@
+<script setup lang="ts">
+
+import {onUnmounted, ref} from "vue";
+import * as echarts from 'echarts'
+import {DataCenter} from "../../DataCenter.ts";
+import {Tools} from "../../Tools.ts";
+import {BaZi, QuShiInfo, UserInfo} from "../../customer/SupportModels.ts";
+
+let chartCompt = ref<HTMLDivElement | null>(null)
+
+let shishen_list = ["官", "杀", "财", "才", "印", "枭", "食", "伤", "比", "劫"]
+let colors = ["#8b8d47", "#458860",
+  "#ee9512", "#9a4e9f",
+  "#e35215", "#9098b4",
+  "#e705c9", "#4155da",
+  "#18b7e1", "#ef0341"]
+let xLength = ref(0)
+let ssCheckBoxes = ref(["官", "杀"])
+let selYear = ref()
+let chart = null
+let selMonth = ref("")
+let extraPeoples = ref([])
+const maxExtraPeople = 1
+
+function getXData() {
+  let result = []
+  for (let i = 1; i <= 12; i++) {
+    result.push(i.toString() + "月")
+  }
+  xLength.value = result.length
+  return result
+}
+
+function buildYData(info: QuShiInfo, lineType: string, result: any[]) {
+  for (let i = 0; i < shishen_list.length; i++) {
+    let ss = shishen_list[i]
+    if (ssCheckBoxes.value.indexOf(ss) == -1) {
+      continue
+    }
+    let scores = []
+    let obj = {
+      name: ss,
+      type: 'line', //bar
+      data: scores,
+      itemStyle: {
+        color: colors[i]
+      },
+      lineStyle: {
+        type: lineType // 设置虚线 dashed
+      }
+    }
+    for (let j = 1; j <= 12; j++) {
+      let key = ss + "_" + j.toString()
+      scores.push(info.total.get(key))
+    }
+    //@ts-ignore
+    result.push(obj)
+  }
+}
+
+function getYData() {
+  let result: any[] = []
+
+  if (DataCenter.bazi.value != null && DataCenter.bazi.value.qushiInfo.length > 0) {
+    let info: QuShiInfo = DataCenter.bazi.value.qushiInfo[selYear.value]
+    buildYData(info, "solid", result)
+
+    if (extraPeoples.value.length > 0) {
+      for (let i = 0; i < extraPeoples.value.length; i++) {
+        let index = extraPeoples.value[i]
+        //@ts-ignore
+        let extraBaZi: BaZi = DataCenter.historyBaZi.value[index]
+        let extraInfo = extraBaZi?.qushiInfo[selYear.value]
+        buildYData(extraInfo, "dashed", result)
+      }
+    }
+  }
+  return result
+}
+
+function getOption() {
+  let obj: echarts.EChartsOption = {
+    title: {
+      //text: 'ECharts 入门示例'
+    },
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: "shadow"
+      },
+      formatter: (params: any) => {
+        let result = '';
+        //result += `${params[0].marker} ${params[0].seriesName} : ${params[0].value} <br/>`;
+        for (let i = 0; i < params.length; i += 1) {
+          let v = params[i].value.toString()
+          result += params[i].marker + params[i].seriesName + " : " + v + "<br>";
+        }
+        result = "<div align='left'>" + result + "</div>"
+        return result;
+      }
+    },
+    xAxis: {
+      type: 'category',
+      data: getXData()
+    },
+    yAxis: {
+      type: 'value'
+    },
+    series: getYData()
+  }
+  return obj
+}
+
+function loadChart() {
+  if (DataCenter.bazi.value == null) {
+    return
+  }
+
+  if (ssCheckBoxes.value.length == 0) {
+    Tools.showMessage("请至少勾选一组数据")
+    return
+  }
+
+  if (selYear.value == null) {
+    selYear.value = 0
+  }
+
+  if (chart == null) {
+    chart = echarts.init(chartCompt.value);
+    chart.getZr().on('click', (event: any) => {
+      const pointInPixel = [event.offsetX, event.offsetY];
+      if (chart.containPixel('grid', pointInPixel)) {
+        const xIndex = chart.convertFromPixel({seriesIndex: 0}, [event.offsetX, event.offsetY])[0];
+        try {
+          let sel = chart.getOption().xAxis[0].data[xIndex]
+          selMonth.value = sel
+        } catch (e) {
+          console.error(e)
+        }
+        // const xAxisValue = chart.getOption().xAxis.data[xIndex];
+        // console.log('你点击了X轴上的某一列:', xAxisValue);
+        // alert(`你点击了X轴上的 ${xAxisValue}`);
+      }
+    });
+  }
+
+  let opt = getOption()
+  chart.clear()
+  chart.setOption(opt)
+  selMonth.value = ""
+}
+
+onUnmounted(function () {
+  if (chart != null) {
+    chart.dispose()
+  }
+})
+
+function onSelectYear() {
+  loadChart()
+}
+
+function getYunDetails() {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    let info: QuShiInfo = DataCenter.bazi.value.qushiInfo[selYear.value]
+    for (let i = 0; i < shishen_list.length; i++) {
+      let ss = shishen_list[i]
+      if (ssCheckBoxes.value.indexOf(ss) == -1) {
+        continue
+      }
+      let yuns = info.detailsYun.get(ss)
+      if (yuns != null) {
+        yuns.forEach(function (s) {
+          result.push(ss + " : " + s)
+        })
+      }
+    }
+  }
+
+  return result
+}
+
+function getNianDetails() {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    let info: QuShiInfo = DataCenter.bazi.value.qushiInfo[selYear.value]
+    for (let i = 0; i < shishen_list.length; i++) {
+      let ss = shishen_list[i]
+      if (ssCheckBoxes.value.indexOf(ss) == -1) {
+        continue
+      }
+
+      let nians = info.detailsNian.get(ss)
+      if (nians != null) {
+        nians.forEach(function (s) {
+          result.push(ss + " : " + s)
+        })
+      }
+    }
+  }
+
+  return result
+}
+
+function getYueDetails() {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    let month = parseInt(selMonth.value.toString().replace("月", ""))
+    let info: QuShiInfo = DataCenter.bazi.value.qushiInfo[selYear.value]
+    for (let i = 0; i < shishen_list.length; i++) {
+      let ss = shishen_list[i]
+      if (ssCheckBoxes.value.indexOf(ss) == -1) {
+        continue
+      }
+      let yues = info.detailsYue.get(ss + "_" + month.toString())
+      if (yues != null) {
+        yues.forEach(function (s) {
+          result.push(ss + " : " + s)
+        })
+      }
+    }
+  }
+
+  return result
+}
+
+function autoChoose(mode: number) {
+  if (mode == 1) { //事业
+    ssCheckBoxes.value = ["财", "才", "印"]
+  } else if (mode == 2) { //健康
+    ssCheckBoxes.value = ["杀", "伤", "食"]
+  } else if (mode == 4) { //是非
+    ssCheckBoxes.value = ["官", "伤"]
+  } else if (mode == 3) { //探索
+    ssCheckBoxes.value = ["枭", "食"]
+  } else if (mode == 5) { //人脉
+    ssCheckBoxes.value = ["劫", "杀"]
+  } else if (mode == 6) { //学习
+    ssCheckBoxes.value = ["食", "印", "比"]
+  } else if (mode == 7) { //财富
+    ssCheckBoxes.value = ["财", "才", "劫"]
+  } else if (mode == 8) { //地位
+    ssCheckBoxes.value = ["官", "杀", "比"]
+  } else if (mode == 0) { //全选
+    ssCheckBoxes.value = ["官", "杀", "财", "才", "印", "枭", "食", "伤", "比", "劫"]
+  } else if (mode == 9) { //家庭
+    if (DataCenter.bazi.value?.is_man) {
+      ssCheckBoxes.value = ["财", "比", "食"]
+    } else {
+      ssCheckBoxes.value = ["官", "比", "食"]
+    }
+
+  }
+  loadChart()
+}
+
+function getColor(key: string) {
+  let index = shishen_list.indexOf(key)
+  return {
+    "color": colors[index]
+  }
+}
+
+function getUserInfoString(info: UserInfo) {
+  let result = ""
+  result = info.name + " " + (info.isMan ? '男' : '女') + " " + info.year?.toString()
+  return result
+}
+
+function onSelectUser() {
+  if (extraPeoples.value.length > maxExtraPeople) {
+    extraPeoples.value.splice(0, 1)
+  }
+}
+
+</script>
+
+<template>
+  <el-card>
+    <template #header>
+      <div align="left">
+        <el-checkbox-group v-model="ssCheckBoxes">
+          <el-checkbox-button :value="ss" v-for="ss in shishen_list">{{ ss }}
+          </el-checkbox-button>
+          <el-button style="margin-left: 20px" @click="loadChart()">重绘趋势图</el-button>
+        </el-checkbox-group>
+      </div>
+      <div align="left" style="margin-top: 20px">
+        <el-button-group>
+          <el-button @click="autoChoose(0)">全选</el-button>
+          <el-button @click="autoChoose(1)">事业</el-button>
+          <el-button @click="autoChoose(7)">财富</el-button>
+          <el-button @click="autoChoose(8)">地位</el-button>
+          <el-button @click="autoChoose(9)">家庭</el-button>
+          <el-button @click="autoChoose(2)">健康</el-button>
+          <el-button @click="autoChoose(5)">人脉</el-button>
+          <el-button @click="autoChoose(4)">是非</el-button>
+          <el-button @click="autoChoose(6)">学习</el-button>
+          <el-button @click="autoChoose(3)">探索</el-button>
+        </el-button-group>
+      </div>
+    </template>
+    <el-row style="margin-top: 10px" align="middle">
+      <el-col :span="8" align="left">
+        <el-radio-group v-model="selYear">
+          <el-radio-button @change="onSelectYear"
+                           v-for="(info,index) in DataCenter.bazi.value?.qushiInfo" :value="index"
+                           :label="info.year"></el-radio-button>
+        </el-radio-group>
+      </el-col>
+      <el-col :span="12" align="left">
+        <el-select @change="onSelectUser" v-model="extraPeoples" multiple clearable>
+          <el-option v-for="(info,index) in DataCenter.historyUser.value" :value="index"
+                     :label="getUserInfoString(info)">
+            {{ getUserInfoString(info) }}
+          </el-option>
+        </el-select>
+      </el-col>
+
+
+    </el-row>
+    <div style="position: relative; ">
+      <div style="position: absolute; right: 0px; top:0px; margin-top: -50px;">
+        <el-space direction="vertical" :size="0">
+          <el-text v-if="ssCheckBoxes.indexOf('官')!=-1" :style="getColor('官')">◼︎◼︎◼︎
+            <el-text>正官</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('杀')!=-1" :style="getColor('杀')">◼︎◼︎◼︎
+            <el-text>七杀</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('财')!=-1" :style="getColor('财')">◼︎◼︎◼︎
+            <el-text>正财</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('才')!=-1" :style="getColor('才')">◼︎◼︎◼︎
+            <el-text>偏财</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('印')!=-1" :style="getColor('印')">◼︎◼︎◼︎
+            <el-text>正印</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('枭')!=-1" :style="getColor('枭')">◼︎◼︎◼︎
+            <el-text>偏印</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('食')!=-1" :style="getColor('食')">◼︎◼︎◼︎
+            <el-text>食神</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('伤')!=-1" :style="getColor('伤')">◼︎◼︎◼︎
+            <el-text>伤官</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('比')!=-1" :style="getColor('比')">◼︎◼︎◼︎
+            <el-text>比肩</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('劫')!=-1" :style="getColor('劫')">◼︎◼︎◼︎
+            <el-text>劫财</el-text>
+          </el-text>
+        </el-space>
+      </div>
+    </div>
+    <el-scrollbar style="width: 100%;">
+      <div ref="chartCompt" style="width:100%; height: 400px;"></div>
+    </el-scrollbar>
+    <el-row style="width: 100%" v-if="selMonth.length>0">
+      <el-col :span="4">
+        <el-text>{{ selMonth }} :</el-text>
+      </el-col>
+      <el-col :span="20" align="left">
+        <el-space style="width: 100%" direction="vertical" fill :size="0">
+          <el-text v-for="msg in getYunDetails()">{{ msg }}</el-text>
+        </el-space>
+        <el-space style="width: 100%; margin-top: 10px" direction="vertical" fill :size="0">
+          <el-text v-for="msg in getNianDetails()">{{ msg }}</el-text>
+        </el-space>
+        <el-space style="width: 100%;margin-top: 10px" direction="vertical" fill :size="0">
+          <el-text v-for="msg in getYueDetails()">{{ msg }}</el-text>
+        </el-space>
+      </el-col>
+    </el-row>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 322 - 0
src/components/customer/RiYunShi.vue

@@ -0,0 +1,322 @@
+<script setup lang="ts">
+import {onUnmounted, ref} from "vue";
+import * as echarts from 'echarts'
+import {DataCenter} from "../../DataCenter.ts";
+import {DailyQuShi} from "../../customer/SupportModels.ts";
+import {Tools} from "../../Tools.ts";
+import {Configs} from "../../customer/Configs.ts";
+
+let chartCompt = ref<HTMLDivElement | null>(null)
+let shishen_list = ["官", "杀", "财", "才", "印", "枭", "食", "伤", "比", "劫"]
+let colors = ["#8b8d47", "#458860",
+  "#ee9512", "#9a4e9f",
+  "#e35215", "#9098b4",
+  "#e705c9", "#4155da",
+  "#18b7e1", "#ef0341"]
+let xLength = ref(0)
+let ssCheckBoxes = ref(["官", "杀"])
+let chart = null
+let selRiYuan = ref("甲")
+let selHour = ref("")
+let selTitle = ref("")
+let dayMode = ref(0)
+
+function getXData() {
+  let result = []
+  for (let i = 9; i <= 21; i += 2) {
+    result.push(i.toString() + "点")
+  }
+  xLength.value = result.length
+  return result
+}
+
+function getYData() {
+  let result = []
+
+  if (DataCenter.bazi.value != null && DataCenter.bazi.value.dailyQuShi.length > 0) {
+    let info: DailyQuShi = DataCenter.bazi.value.dailyQuShi[dayMode.value].get(selRiYuan.value)
+    for (let i = 0; i < shishen_list.length; i++) {
+      let ss = shishen_list[i]
+      if (ssCheckBoxes.value.indexOf(ss) == -1) {
+        continue
+      }
+      let scores = []
+      let obj = {
+        name: ss,
+        type: 'line', //bar
+        data: scores,
+        itemStyle: {
+          color: colors[i]
+        },
+        lineStyle: {
+          type: 'solid' // 设置虚线 dashed
+        }
+      }
+      for (let j = 9; j <= 21; j += 2) {
+        let key = ss + "_" + j.toString()
+        scores.push(info.total.get(key))
+      }
+      result.push(obj)
+    }
+  }
+  return result
+}
+
+function getOption() {
+  let obj: echarts.EChartsOption = {
+    title: {
+      text: selTitle.value
+    },
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: "shadow"
+      },
+      formatter: (params: any) => {
+        let result = '';
+        //result += `${params[0].marker} ${params[0].seriesName} : ${params[0].value} <br/>`;
+        for (let i = 0; i < params.length; i += 1) {
+          let v = params[i].value.toString()
+          result += params[i].marker + params[i].seriesName + " : " + v + "<br>";
+        }
+        result = "<div align='left'>" + result + "</div>"
+        return result;
+      }
+    },
+    xAxis: {
+      type: 'category',
+      data: getXData()
+    },
+    yAxis: {
+      type: 'value'
+    },
+    series: getYData()
+  }
+  return obj
+}
+
+function loadChart() {
+  if (DataCenter.bazi.value == null) {
+    return
+  }
+
+  if (ssCheckBoxes.value.length == 0) {
+    Tools.showMessage("请至少勾选一组数据")
+    return
+  }
+
+  if (selRiYuan.value == null) {
+    selRiYuan.value = "甲"
+  }
+
+  if (chart == null) {
+    chart = echarts.init(chartCompt.value);
+    chart.getZr().on('click', (event: any) => {
+      const pointInPixel = [event.offsetX, event.offsetY];
+      if (chart.containPixel('grid', pointInPixel)) {
+        const xIndex = chart.convertFromPixel({seriesIndex: 0}, [event.offsetX, event.offsetY])[0];
+        try {
+          let sel = chart.getOption().xAxis[0].data[xIndex]
+          selHour.value = sel
+        } catch (e) {
+          console.error(e)
+        }
+        // const xAxisValue = chart.getOption().xAxis.data[xIndex];
+        // console.log('你点击了X轴上的某一列:', xAxisValue);
+        // alert(`你点击了X轴上的 ${xAxisValue}`);
+      }
+    });
+  }
+
+  let opt = getOption()
+  chart.clear()
+  chart.setOption(opt)
+  selHour.value = ""
+}
+
+onUnmounted(function () {
+  if (chart != null) {
+    chart.dispose()
+  }
+})
+
+function onSelectRiYuan() {
+  loadChart()
+}
+
+function getRiDetails() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.bazi.value.dailyQuShi.length > 0) {
+    let info: DailyQuShi = DataCenter.bazi.value.dailyQuShi[dayMode.value].get(selRiYuan.value)
+    for (let i = 0; i < shishen_list.length; i++) {
+      let ss = shishen_list[i]
+      if (ssCheckBoxes.value.indexOf(ss) == -1) {
+        continue
+      }
+      let details = info.detailsRi.get(ss)
+      if (details != null) {
+        details.forEach(function (s) {
+          result.push(ss + " : " + s)
+        })
+      }
+    }
+  }
+
+  return result
+}
+
+function getShiDetails() {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    let hour = parseInt(selHour.value.toString().replace("点", ""))
+    let info: DailyQuShi = DataCenter.bazi.value.dailyQuShi[dayMode.value].get(selRiYuan.value)
+    for (let i = 0; i < shishen_list.length; i++) {
+      let ss = shishen_list[i]
+      if (ssCheckBoxes.value.indexOf(ss) == -1) {
+        continue
+      }
+      let details = info.detailsShi.get(ss + "_" + hour.toString())
+      if (details != null) {
+        details.forEach(function (s) {
+          result.push(ss + " : " + s)
+        })
+      }
+    }
+  }
+
+  return result
+}
+
+function autoChoose(mode: number) {
+  if (mode == 5) { //事情多不多
+    ssCheckBoxes.value = ["杀", "伤", "劫"]
+    selTitle.value = "事务繁重程度"
+  } else if (mode == 6) { //是否稳定
+    ssCheckBoxes.value = ["财", "才", "比"]
+    selTitle.value = "突发情况"
+  } else if (mode == 7) { //有没有助力
+    ssCheckBoxes.value = ["印", "枭", "比", "劫", "官"]
+    selTitle.value = "助力来源"
+  } else if (mode == 8) {//自己能不能接得住
+    ssCheckBoxes.value = ["食", "伤", "杀"]
+    selTitle.value = "自身承接能力"
+  } else if (mode == 9) { //人际关系冲突
+    ssCheckBoxes.value = ["官", "伤", "劫"]
+    selTitle.value = "人际关系冲突"
+  } else if (mode == 10) { //社交活动
+    ssCheckBoxes.value = ["食", "伤", "劫"]
+    selTitle.value = "社交及人脉"
+  }
+  loadChart()
+}
+
+function getColor(key: string) {
+  let index = shishen_list.indexOf(key)
+  return {
+    "color": colors[index]
+  }
+}
+
+function getDateInfo() {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value?.dailyQuShiDate[dayMode.value]
+  }
+  return result
+}
+
+</script>
+
+<template>
+  <el-card>
+    <template #header>
+      <div align="left">
+        <el-checkbox-group v-model="ssCheckBoxes">
+          <el-checkbox-button :value="ss" v-for="ss in shishen_list">{{ ss }}
+          </el-checkbox-button>
+          <el-button style="margin-left: 20px" @click="loadChart()">重绘趋势图</el-button>
+        </el-checkbox-group>
+      </div>
+      <div align="left" style="margin-top: 20px">
+        <el-button-group>
+          <el-button @click="autoChoose(5)">事务</el-button>
+          <el-button @click="autoChoose(6)">波动</el-button>
+          <el-button @click="autoChoose(7)">助力</el-button>
+          <el-button @click="autoChoose(8)">承接</el-button>
+          <el-button @click="autoChoose(9)">冲突</el-button>
+          <el-button @click="autoChoose(10)">社交</el-button>
+        </el-button-group>
+      </div>
+    </template>
+    <div style="margin-top: 10px" align="left">
+      <el-row align="middle">
+        <el-radio-group v-model="dayMode">
+          <el-radio-button @change="onSelectRiYuan" :value="0">今</el-radio-button>
+          <el-radio-button @change="onSelectRiYuan" :value="1">明</el-radio-button>
+        </el-radio-group>
+        <el-text style="margin-left: 20px">{{ getDateInfo() }}</el-text>
+      </el-row>
+      <el-radio-group v-model="selRiYuan" style="margin-top: 20px">
+        <el-radio-button @change="onSelectRiYuan"
+                         v-for="tg in Configs.tianganAry" :value="tg"
+                         :label="tg"></el-radio-button>
+      </el-radio-group>
+    </div>
+    <div style="position: relative; ">
+      <div style="position: absolute; right: 0px; top:0px; margin-top: -50px;">
+        <el-space direction="vertical" :size="0">
+          <el-text v-if="ssCheckBoxes.indexOf('官')!=-1" :style="getColor('官')">◼︎◼︎◼︎
+            <el-text>正官</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('杀')!=-1" :style="getColor('杀')">◼︎◼︎◼︎
+            <el-text>七杀</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('财')!=-1" :style="getColor('财')">◼︎◼︎◼︎
+            <el-text>正财</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('才')!=-1" :style="getColor('才')">◼︎◼︎◼︎
+            <el-text>偏财</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('印')!=-1" :style="getColor('印')">◼︎◼︎◼︎
+            <el-text>正印</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('枭')!=-1" :style="getColor('枭')">◼︎◼︎◼︎
+            <el-text>偏印</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('食')!=-1" :style="getColor('食')">◼︎◼︎◼︎
+            <el-text>食神</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('伤')!=-1" :style="getColor('伤')">◼︎◼︎◼︎
+            <el-text>伤官</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('比')!=-1" :style="getColor('比')">◼︎◼︎◼︎
+            <el-text>比肩</el-text>
+          </el-text>
+          <el-text v-if="ssCheckBoxes.indexOf('劫')!=-1" :style="getColor('劫')">◼︎◼︎◼︎
+            <el-text>劫财</el-text>
+          </el-text>
+        </el-space>
+      </div>
+    </div>
+    <el-scrollbar style="width: 100%; margin-top: 20px">
+      <div ref="chartCompt" style="width:100%; height: 400px;"></div>
+    </el-scrollbar>
+    <el-row style="width: 100%" v-if="selHour.length>0">
+      <el-col :span="4">
+        <el-text>{{ selHour }} :</el-text>
+      </el-col>
+      <el-col :span="20" align="left">
+        <el-space style="width: 100%" direction="vertical" fill :size="0">
+          <el-text v-for="msg in getRiDetails()">{{ msg }}</el-text>
+        </el-space>
+        <el-space style="width: 100%; margin-top: 10px" direction="vertical" fill :size="0">
+          <el-text v-for="msg in getShiDetails()">{{ msg }}</el-text>
+        </el-space>
+      </el-col>
+    </el-row>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 178 - 0
src/components/customer/User.vue

@@ -0,0 +1,178 @@
+<script setup lang="ts">
+
+import {APICenter} from "../../customer/APICenter.ts";
+import {ref} from "vue";
+import {DataCenter} from "../../DataCenter.ts";
+import {UserInfo} from "../../customer/SupportModels.ts";
+
+let props = defineProps({
+  onReadUser: Function,
+})
+
+let filterKey = ref("")
+let isGettingUser = ref(false)
+
+function loadUsers() {
+  isGettingUser.value = true
+  APICenter.loadUsers(function () {
+    isGettingUser.value = false
+  })
+}
+
+function getUsers() {
+  let result = []
+  if (DataCenter.ownerUsers.value != null) {
+    let key = filterKey.value.trim()
+    DataCenter.ownerUsers.value.forEach(function (data) {
+      if (key.length == 0) {
+        result.push(data)
+      } else {
+        let dataKey = data.getKey()
+        if (dataKey.indexOf(key) != -1) {
+          result.push(data)
+        }
+      }
+    })
+  }
+  return result
+}
+
+function deleteUser(id: number) {
+  APICenter.deleteUser(id)
+}
+
+function readUser(info: UserInfo) {
+  if (props?.onReadUser != null) {
+    props?.onReadUser(info)
+  }
+}
+
+</script>
+
+<template>
+  <el-card>
+    <template #header>
+      <el-space style="width: 100%">
+        <el-button :disabled="isGettingUser" type="primary" @click="loadUsers()">载入信息</el-button>
+        <el-input v-model="filterKey" placeholder="输入任意关键字筛选" clearable></el-input>
+      </el-space>
+    </template>
+    <el-scrollbar :max-height="600">
+      <el-row style="width: 100%;">
+        <el-col :span="1">
+          <el-text tag="b">ID</el-text>
+        </el-col>
+        <el-col :span="3">
+          <el-text tag="b">姓名</el-text>
+        </el-col>
+        <el-col :span="2">
+          <el-text tag="b">性别</el-text>
+        </el-col>
+        <el-col :span="6">
+          <el-text tag="b">出生信息</el-text>
+        </el-col>
+        <el-col :span="1">
+          <el-text tag="b">年</el-text>
+        </el-col>
+        <el-col :span="1">
+          <el-text tag="b">月</el-text>
+        </el-col>
+        <el-col :span="1">
+          <el-text tag="b">日</el-text>
+        </el-col>
+        <el-col :span="1">
+          <el-text tag="b">时</el-text>
+        </el-col>
+        <el-col :span="8">
+          <el-text tag="b">备注</el-text>
+        </el-col>
+      </el-row>
+      <el-divider></el-divider>
+      <div v-for="item in getUsers()">
+        <el-row style="width: 100%">
+          <el-col :span="1">
+            <el-text>{{ item.id }}</el-text>
+          </el-col>
+          <el-col :span="3">
+            <el-text>{{ item.name }}</el-text>
+          </el-col>
+          <el-col :span="2">
+            <el-text>{{ item.isMan ? '男' : '女' }}</el-text>
+          </el-col>
+          <el-col :span="6">
+            <el-space v-if="item.dateMode==0">
+              <el-text>{{ item.year }}-{{ item.month }}-{{ item.day }}</el-text>
+              <el-text v-if="item.hourMode==0">{{ item.hour }} : {{ item.minute }}</el-text>
+            </el-space>
+            <el-space v-if="item.dateMode==1">
+              <el-text>{{ item.nongli_year }}年 {{ item.nongli_month }} {{ item.nongli_day }}</el-text>
+              <el-text v-if="item.hourMode==0">{{ item.hour }} : {{ item.minute }}</el-text>
+            </el-space>
+            <el-space v-if="item.dateMode==2">
+              <el-text>{{ item.req_nian_gan }}{{ item.req_nian_zhi }}
+              </el-text>
+              <el-text>{{ item.req_yue_gan }}{{ item.req_yue_zhi }}
+              </el-text>
+              <el-text>{{ item.req_ri_gan }}{{ item.req_ri_zhi }}
+              </el-text>
+              <el-text>{{
+                  item.req_shi_gan == null ? '无' : item.req_shi_gan
+                }}{{ item.req_shi_zhi == null ? '无' : item.req_shi_zhi }}
+              </el-text>
+            </el-space>
+          </el-col>
+          <el-col :span="1">
+            <el-space direction="vertical" :size="0">
+              <el-text>{{ item.rsp_nian_gan }}</el-text>
+              <el-text>{{ item.rsp_nian_zhi }}</el-text>
+            </el-space>
+          </el-col>
+          <el-col :span="1">
+            <el-space direction="vertical" :size="0">
+              <el-text>{{ item.rsp_yue_gan }}</el-text>
+              <el-text>{{ item.rsp_yue_zhi }}</el-text>
+            </el-space>
+          </el-col>
+          <el-col :span="1">
+            <el-space direction="vertical" :size="0">
+              <el-text>{{ item.rsp_ri_gan }}</el-text>
+              <el-text>{{ item.rsp_ri_zhi }}</el-text>
+            </el-space>
+          </el-col>
+          <el-col :span="1">
+            <el-space direction="vertical" :size="0">
+              <el-text>{{ item.rsp_shi_gan }}</el-text>
+              <el-text>{{ item.rsp_shi_zhi }}</el-text>
+            </el-space>
+          </el-col>
+          <el-col :span="8">
+            <el-text>{{ item.extra }}</el-text>
+          </el-col>
+        </el-row>
+        <el-space style="width: 100%">
+          <el-button @click="readUser(item)">载入</el-button>
+          <el-popconfirm title="确认删除吗?" confirm-button-text="是" cancel-button-text="否"
+                         @confirm="deleteUser(item.id)">
+            <template #reference>
+              <el-button type="danger">删除</el-button>
+            </template>
+          </el-popconfirm>
+        </el-space>
+        <el-divider></el-divider>
+      </div>
+
+
+    </el-scrollbar>
+  </el-card>
+</template>
+
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-columns: repeat(9, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  //row-gap: 50px;
+  padding: 10px; /* 容器内边距 */
+}
+</style>

+ 82 - 0
src/components/customer/ZhenDuan.vue

@@ -0,0 +1,82 @@
+<script setup lang="ts">
+
+import WuXingZhenDuan from "./zhen_duan/WuXingZhenDuan.vue";
+import {ref} from "vue";
+import ShiShenZhenDuan from "./zhen_duan/ShiShenZhenDuan.vue";
+import {DataCenter} from "../../DataCenter.ts";
+import ZuoZhiZhenDuan from "./zhen_duan/ZuoZhiZhenDuan.vue";
+import MenHuZhenDuan from "./zhen_duan/MenHuZhenDuan.vue";
+import ShenShaZhenDuan from "./zhen_duan/ShenShaZhenDuan.vue";
+import GeJuZhenDuan from "./zhen_duan/GeJuZhenDuan.vue";
+import GaoNengZhenDuan from "./zhen_duan/GaoNengZhenDuan.vue";
+import JianKangZhenDuan from "./zhen_duan/JianKangZhenDuan.vue";
+import QingGanZhenDuan from "./zhen_duan/QingGanZhenDuan.vue";
+import DaYunZhenDuan from "./zhen_duan/DaYunZhenDuan.vue";
+import YinYuanZhenDuan from "./zhen_duan/YinYuanZhenDuan.vue";
+
+let collapseValue = ref("wuxing")
+let content = ref()
+let includeQingGan = ref(false)
+let includeDaYun = ref(false)
+let includeYinYuan = ref(false)
+
+function createZhenDuan() {
+  let s = ""
+  if (DataCenter.bazi.value != null) {
+    s = DataCenter.bazi.value.zhenduan.getContent(includeQingGan.value, includeDaYun.value, includeYinYuan.value)
+  }
+  content.value = s
+}
+</script>
+
+<template>
+  <el-card>
+    <template #header>
+      <el-input v-model="content" type="textarea" :autosize="{minRows: 1, maxRows: 15}"></el-input>
+      <el-row style="width: 100%;margin-top: 10px" align="middle">
+        <el-col :span="4" align="left">
+          <el-space>
+            <el-button type="primary" @click="createZhenDuan">生成诊断</el-button>
+          </el-space>
+        </el-col>
+        <el-col :span="20" align="left">
+          <el-checkbox v-model="includeQingGan">包括情感</el-checkbox>
+          <el-checkbox v-model="includeDaYun">包括大运</el-checkbox>
+          <el-checkbox v-model="includeYinYuan">包括姻缘</el-checkbox>
+        </el-col>
+      </el-row>
+    </template>
+    <el-row align="middle">
+      <el-col :span="24" align="right">
+        <el-radio-group v-model="collapseValue">
+          <el-radio-button value="wuxing">五行</el-radio-button>
+          <el-radio-button value="shishen">十神</el-radio-button>
+          <el-radio-button value="zuozhi">坐支</el-radio-button>
+          <el-radio-button value="menhu">门户</el-radio-button>
+          <el-radio-button value="shensha">神煞</el-radio-button>
+          <el-radio-button value="geju">格局</el-radio-button>
+          <el-radio-button value="gaoneng">高能</el-radio-button>
+          <el-radio-button value="jiankang">健康</el-radio-button>
+          <el-radio-button value="qinggan">情感</el-radio-button>
+          <el-radio-button value="dayun">大运</el-radio-button>
+          <el-radio-button value="yinyuan">姻缘</el-radio-button>
+        </el-radio-group>
+      </el-col>
+    </el-row>
+    <WuXingZhenDuan v-if="collapseValue=='wuxing'" style="margin-top: 10px"></WuXingZhenDuan>
+    <ShiShenZhenDuan v-if="collapseValue=='shishen'" style="margin-top: 10px"></ShiShenZhenDuan>
+    <ZuoZhiZhenDuan v-if="collapseValue=='zuozhi'" style="margin-top: 10px"></ZuoZhiZhenDuan>
+    <MenHuZhenDuan v-if="collapseValue=='menhu'" style="margin-top: 10px"></MenHuZhenDuan>
+    <ShenShaZhenDuan v-if="collapseValue=='shensha'" style="margin-top: 10px"></ShenShaZhenDuan>
+    <GeJuZhenDuan v-if="collapseValue=='geju'" style="margin-top: 10px"></GeJuZhenDuan>
+    <GaoNengZhenDuan v-if="collapseValue=='gaoneng'" style="margin-top: 10px"></GaoNengZhenDuan>
+    <JianKangZhenDuan v-if="collapseValue=='jiankang'" style="margin-top: 10px"></JianKangZhenDuan>
+    <QingGanZhenDuan v-if="collapseValue=='qinggan'" style="margin-top: 10px"></QingGanZhenDuan>
+    <DaYunZhenDuan v-if="collapseValue=='dayun'" style="margin-top: 10px"></DaYunZhenDuan>
+    <YinYuanZhenDuan v-if="collapseValue=='yinyuan'" style="margin-top: 10px"></YinYuanZhenDuan>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 123 - 0
src/components/customer/base_info/Area.vue

@@ -0,0 +1,123 @@
+<script setup lang="ts">
+import {computed, ref} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+import {AreaResult, UserInfo} from "../../../customer/SupportModels.ts";
+
+defineExpose({
+  getData: function () {
+    let dt = new AreaResult()
+    dt.mode = areaMode.value
+    dt.sheng = selSheng.value
+    dt.shi = selShi.value
+    dt.qu = selQu.value
+    return dt
+  },
+  setData: function (info: UserInfo) {
+    areaMode.value = info.areaMode
+    selSheng.value = info.sheng
+    selShi.value = info.shi
+    selQu.value = info.qu
+  },
+})
+
+let areaMode = ref(0)
+let selSheng = ref("北京")
+let selShi = ref("-")
+let selQu = ref("-")
+let shiOptions = ref([])
+let quOptions = ref([])
+let searchText = ref("")
+let searchResults = ref([])
+
+let getShengFens = computed(function () {
+  return Array.from(DataCenter.shengShi.keys())
+})
+
+function onShengFenSelected(value: string) {
+  selShi.value = "-"
+  selQu.value = "-"
+  shiOptions.value = []
+  quOptions.value = []
+  if (DataCenter.shengShi.has(value)) {
+    shiOptions.value = DataCenter.shengShi.get(value)
+    if (shiOptions.value.length > 0) {
+      selShi.value = shiOptions.value[0]
+      onChengShiSelected(selShi.value)
+    }
+  }
+}
+
+function onChengShiSelected(value: string) {
+  selQu.value = "-"
+  quOptions.value = []
+  let key = selSheng.value + value
+  if (DataCenter.shiQu.has(key)) {
+    quOptions.value = DataCenter.shiQu.get(key)
+    if (quOptions.value.length > 0) {
+      selQu.value = quOptions.value[0]
+    }
+  }
+}
+
+function onSearchArea() {
+  let key = searchText.value.trim()
+  if (key.length > 0) {
+    let data = DataCenter.fixPinYin(key)
+    searchResults.value = []
+    data.forEach(function (dt) {
+      searchResults.value.push(dt.sheng + "    " + dt.shi + "    " + dt.qu)
+    })
+  } else {
+    searchResults.value = []
+  }
+}
+
+function onItemClick(item: string) {
+  let info = item.split("    ")
+  if (info.length == 3) {
+    selSheng.value = info[0]
+    selShi.value = info[1]
+    selQu.value = info[2]
+    searchText.value = ""
+    searchResults.value = []
+  }
+}
+</script>
+
+<template>
+  <div align="left">
+    <el-radio-group v-model="areaMode">
+      <el-radio :value="0">知道地点</el-radio>
+      <el-radio :value="1">不知地点</el-radio>
+    </el-radio-group>
+  </div>
+  <div align="left" v-if="areaMode==0">
+    <el-space style="margin-top: 10px">
+      <el-select v-model="selSheng" @change="onShengFenSelected" style="width: 100px" filterable default-first-option>
+        <el-option v-for="sheng in getShengFens" :value="sheng" :label="sheng">
+          {{ sheng }}
+        </el-option>
+      </el-select>
+      <el-select v-model="selShi" @change="onChengShiSelected" style="width: 100px" filterable default-first-option>
+        <el-option v-for="shi in shiOptions" :value="shi" :label="shi">
+          {{ shi }}
+        </el-option>
+      </el-select>
+      <el-select v-model="selQu" style="width: 100px" filterable default-first-option>
+        <el-option v-for="qu in quOptions" :value="qu" :label="qu">
+          {{ qu }}
+        </el-option>
+      </el-select>
+      <el-input placeholder="输入拼音首字母或名称查询" @input="onSearchArea" style="width: 200px" v-model="searchText"
+                clearable></el-input>
+    </el-space>
+    <br>
+    <el-scrollbar max-height="400px">
+      <p v-for="item in searchResults" @click="onItemClick(item)">{{ item }}</p>
+    </el-scrollbar>
+  </div>
+</template>
+
+<style scoped>
+
+</style>

+ 139 - 0
src/components/customer/base_info/NongLi.vue

@@ -0,0 +1,139 @@
+<script setup lang="ts">
+
+import {onMounted, ref} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+import {Configs} from "../../../customer/Configs.ts";
+import {NongliResult, UserInfo} from "../../../customer/SupportModels.ts";
+import {Tools} from "../../../Tools.ts";
+
+defineExpose({
+  getData: function () {
+    let dt = new NongliResult()
+    dt.year = selYear.value
+    dt.month = selMonth.value
+    dt.day = selDay.value
+    dt.hourMode = hourMode.value
+    if (dt.hourMode == 1) {
+      dt.hour = getHourMinuteByDiZhi(selDiZhiHour.value)
+      dt.minute = 0
+    } else if (dt.hourMode == 2) {
+      dt.hour = null
+      dt.minute = null
+    } else {
+      dt.hour = selHour.value
+      dt.minute = selMinute.value
+    }
+    return dt
+  },
+  setData(user: UserInfo) {
+    selYear.value = user.nongli_year
+    Tools.delay(function () {
+      selMonth.value = user.nongli_month
+      Tools.delay(function () {
+        selDay.value = user.nongli_day
+        hourMode.value = user.hourMode
+        if (user.hourMode == 1) {
+          hourMode.value = 0
+        }
+        selHour.value = user.hour
+        selMinute.value = user.minute
+      }, 100)
+    }, 100)
+  },
+})
+
+let selYear = ref(2000)
+let selMonth = ref("正月")
+let selDay = ref("初一")
+let monthOpts = ref([])
+let dayOpts = ref([])
+let hourMode = ref(0)
+let selHour = ref(0)
+let selMinute = ref(0)
+let selDiZhiHour = ref(0)
+
+function range(min: number, max: number) {
+  let result = []
+  for (let i = min; i <= max; i++) {
+    result.push(i)
+  }
+  return result
+}
+
+function getHourMinuteByDiZhi(dizhiIndex: number) {
+  let result = null
+  if (dizhiIndex != -1) {
+    if (dizhiIndex == 0) {
+      result = 23
+    } else {
+      result = dizhiIndex * 2 - 1
+    }
+  }
+  return result
+}
+
+function onYearChanged() {
+  monthOpts.value = DataCenter.getNontLiMonths(selYear.value)
+  selMonth.value = "正月"
+  onMonthChanged()
+}
+
+function onMonthChanged() {
+  dayOpts.value = DataCenter.getNongLiDays(selYear.value, selMonth.value)
+  selDay.value = "初一"
+}
+
+onMounted(function () {
+  monthOpts.value = DataCenter.getNontLiMonths(selYear.value)
+  dayOpts.value = DataCenter.getNongLiDays(selYear.value, selMonth.value)
+})
+
+</script>
+
+<template>
+  <el-space>
+    <el-select v-model="selYear" style="width: 100px" @change="onYearChanged" filterable default-first-option>
+      <el-option v-for="year in range(1900,2030)" :value="year" :label="year+'年'">
+        {{ year }}年
+      </el-option>
+    </el-select>
+    <el-select v-model="selMonth" style="width: 100px" @change="onMonthChanged" filterable default-first-option>
+      <el-option v-for="month in monthOpts" :value="month" :label="month">
+        {{ month }}
+      </el-option>
+    </el-select>
+    <el-select v-model="selDay" style="width: 100px" filterable default-first-option>
+      <el-option v-for="day in dayOpts" :value="day" :label="day">
+        {{ day }}
+      </el-option>
+    </el-select>
+  </el-space>
+  <div align="left" style="margin-top: 10px">
+    <el-radio-group v-model="hourMode">
+      <el-radio :value="0">知道时辰</el-radio>
+      <el-radio :value="1">地支时辰</el-radio>
+      <el-radio :value="2">不知时辰</el-radio>
+    </el-radio-group>
+  </div>
+  <el-space v-if="hourMode == 0" style="margin-top: 10px">
+    <el-select v-model="selHour" style="width: 100px" filterable default-first-option>
+      <el-option v-for="hour in range(0,23)" :value="hour" :label="hour+'时'">
+        {{ hour }}时
+      </el-option>
+    </el-select>
+    <el-select v-model="selMinute" style="width: 100px" filterable default-first-option>
+      <el-option v-for="minute in range(0,59)" :value="minute" :label="minute+'分'">
+        {{ minute }}分
+      </el-option>
+    </el-select>
+  </el-space>
+  <div align="left" v-if="hourMode==1" style="margin-top: 10px">
+    <el-radio-group v-model="selDiZhiHour">
+      <el-radio-button v-for="(txt,index) in Configs.dizhiAry" :value="index">{{ txt }}</el-radio-button>
+    </el-radio-group>
+  </div>
+</template>
+
+<style scoped>
+
+</style>

+ 120 - 0
src/components/customer/base_info/SiZhuSelector.vue

@@ -0,0 +1,120 @@
+<script setup lang="ts">
+
+import {Configs} from "../../../customer/Configs.ts";
+import {ref} from "vue";
+import {SiZhuResult, UserInfo} from "../../../customer/SupportModels.ts";
+
+defineExpose({
+  getData: function () {
+    let dt = new SiZhuResult()
+    dt.hourMode = hourMode.value
+    dt.niangan = niangan.value
+    dt.nianzhi = nianzhi.value
+    dt.yuegan = yuegan.value
+    dt.yuezhi = yuezhi.value
+    dt.rigan = rigan.value
+    dt.rizhi = rizhi.value
+    dt.ignoreError = ignoreError.value
+    if (dt.hourMode == 0) {
+      dt.shigan = shigan.value
+      dt.shizhi = shizhi.value
+    } else {
+      dt.shigan = null
+      dt.shizhi = null
+    }
+    return dt
+  },
+  setData: function (user: UserInfo) {
+    niangan.value = user.req_nian_gan
+    nianzhi.value = user.req_nian_zhi
+    yuegan.value = user.req_yue_gan
+    yuezhi.value = user.req_yue_zhi
+    rigan.value = user.req_ri_gan
+    rizhi.value = user.req_ri_zhi
+    shigan.value = user.req_shi_gan
+    shizhi.value = user.req_shi_zhi
+    hourMode.value = 0
+    if (user.rsp_shi_gan == "无") {
+      hourMode.value = 1
+    }
+  },
+})
+
+let niangan = ref("甲")
+let nianzhi = ref("子")
+let yuegan = ref("甲")
+let yuezhi = ref("子")
+let rigan = ref("甲")
+let rizhi = ref("子")
+let shigan = ref("甲")
+let shizhi = ref("子")
+let hourMode = ref(0)
+let ignoreError = ref(false)
+</script>
+
+<template>
+  <el-space style="width: 100%">
+    <el-text>年干:</el-text>
+    <el-radio-group v-model="niangan">
+      <el-radio-button v-for="ng in Configs.tianganAry" :value="ng" :label="ng"></el-radio-button>
+    </el-radio-group>
+  </el-space>
+  <el-space style="width: 100%; margin-top: 10px">
+    <el-text>年支:</el-text>
+    <el-radio-group v-model="nianzhi">
+      <el-radio-button v-for="nz in Configs.dizhiAry" :value="nz" :label="nz"></el-radio-button>
+    </el-radio-group>
+  </el-space>
+
+  <el-space style="width: 100%; margin-top: 20px">
+    <el-text>月干:</el-text>
+    <el-radio-group v-model="yuegan">
+      <el-radio-button v-for="yg in Configs.tianganAry" :value="yg" :label="yg"></el-radio-button>
+    </el-radio-group>
+  </el-space>
+  <el-space style="width: 100%; margin-top: 10px">
+    <el-text>月支:</el-text>
+    <el-radio-group v-model="yuezhi">
+      <el-radio-button v-for="yz in Configs.dizhiAry" :value="yz" :label="yz"></el-radio-button>
+    </el-radio-group>
+  </el-space>
+
+  <el-space style="width: 100%; margin-top: 20px">
+    <el-text>日干:</el-text>
+    <el-radio-group v-model="rigan">
+      <el-radio-button v-for="rg in Configs.tianganAry" :value="rg" :label="rg"></el-radio-button>
+    </el-radio-group>
+  </el-space>
+  <el-space style="width: 100%; margin-top: 10px">
+    <el-text>日支:</el-text>
+    <el-radio-group v-model="rizhi">
+      <el-radio-button v-for="rz in Configs.dizhiAry" :value="rz" :label="rz"></el-radio-button>
+    </el-radio-group>
+  </el-space>
+
+  <el-radio-group style="margin-top: 10px" v-model="hourMode">
+    <el-radio :value="0">时辰已知</el-radio>
+    <el-radio :value="1">时辰未知</el-radio>
+  </el-radio-group>
+
+  <el-space style="width: 100%; margin-top: 20px" v-if="hourMode==0">
+    <el-text>时干:</el-text>
+    <el-radio-group v-model="shigan">
+      <el-radio-button v-for="sg in Configs.tianganAry" :value="sg" :label="sg"></el-radio-button>
+    </el-radio-group>
+  </el-space>
+
+  <el-space style="width: 100%; margin-top: 10px" v-if="hourMode==0">
+    <el-text>时支:</el-text>
+    <el-radio-group v-model="shizhi">
+      <el-radio-button v-for="sz in Configs.dizhiAry" :value="sz" :label="sz"></el-radio-button>
+    </el-radio-group>
+  </el-space>
+  <el-checkbox v-if="false" v-model="ignoreError" style="margin-top: 10px">忽略四柱错误
+    <el-text type="info">当四柱信息在实际日期中无法匹配时继续测算八字</el-text>
+  </el-checkbox>
+</template>
+
+<style scoped>
+
+</style>

+ 125 - 0
src/components/customer/base_info/XinLi.vue

@@ -0,0 +1,125 @@
+<script setup lang="ts">
+
+import {ref} from "vue";
+import {Configs} from "../../../customer/Configs.ts";
+import {UserInfo, XinLiResult} from "../../../customer/SupportModels.ts";
+
+
+defineExpose({
+  getData: function () {
+    let dt = new XinLiResult()
+    dt.year = selYear.value
+    dt.month = selMonth.value
+    dt.day = selDay.value
+    dt.hourMode = hourMode.value
+    if (dt.hourMode == 1) {
+      dt.hour = getHourMinuteByDiZhi(selDiZhiHour.value)
+      dt.minute = 0
+    } else if (dt.hourMode == 2) {
+      dt.hour = null
+      dt.minute = null
+    } else {
+      dt.hour = selHour.value
+      dt.minute = selMinute.value
+    }
+    return dt
+  },
+  setData(info: UserInfo) {
+    selYear.value = info.year
+    selMonth.value = parseInt(info.month)
+    selDay.value = parseInt(info.day)
+    hourMode.value = info.hourMode
+    if (info.hourMode == 1) {
+      hourMode.value = 0
+    }
+    selHour.value = info.hour
+    selMinute.value = info.minute
+  }
+})
+
+let selYear = ref(2000)
+let selMonth = ref(1)
+let selDay = ref(1)
+let maxDay = ref(31)
+let hourMode = ref(0)
+let selHour = ref(0)
+let selMinute = ref(0)
+let selDiZhiHour = ref(0)
+
+function range(min: number, max: number) {
+  let result = []
+  for (let i = min; i <= max; i++) {
+    result.push(i)
+  }
+  return result
+}
+
+function onYearMonthChanged() {
+  let dt = new Date()
+  dt.setFullYear(selYear.value, selMonth.value, 0)
+  maxDay.value = dt.getDate()
+}
+
+function getHourMinuteByDiZhi(dizhiIndex: number) {
+  let result = null
+  if (dizhiIndex != -1) {
+    if (dizhiIndex == 0) {
+      result = 23
+    } else {
+      result = dizhiIndex * 2 - 1
+    }
+  }
+  return result
+}
+
+</script>
+
+<template>
+  <el-space>
+    <el-select v-model="selYear" style="width: 100px" @change="onYearMonthChanged" filterable default-first-option>
+      <el-option v-for="year in range(1900,2030)" :value="year" :label="year+'年'">
+        {{ year }}年
+      </el-option>
+    </el-select>
+    <el-select v-model="selMonth" style="width: 100px" @change="onYearMonthChanged"
+               filterable default-first-option>
+      <el-option v-for="month in range(1,12)" :value="month" :label="month+'月'">
+        {{ month }}月
+      </el-option>
+    </el-select>
+    <el-select v-model="selDay" style="width: 100px"
+               filterable default-first-option>
+      <el-option v-for="day in range(1,maxDay)" :value="day" :label="day+'日'">
+        {{ day }}日
+      </el-option>
+    </el-select>
+  </el-space>
+  <div align="left" style="margin-top: 10px">
+    <el-radio-group v-model="hourMode">
+      <el-radio :value="0">知道时辰</el-radio>
+      <el-radio :value="1">地支时辰</el-radio>
+      <el-radio :value="2">不知时辰</el-radio>
+    </el-radio-group>
+  </div>
+  <el-space v-if="hourMode == 0" style="margin-top: 10px">
+    <el-select v-model="selHour" style="width: 100px" filterable default-first-option>
+      <el-option v-for="hour in range(0,23)" :value="hour" :label="hour+'时'">
+        {{ hour }}时
+      </el-option>
+    </el-select>
+    <el-select v-model="selMinute" style="width: 100px" filterable default-first-option>
+      <el-option v-for="minute in range(0,59)" :value="minute" :label="minute+'分'">
+        {{ minute }}分
+      </el-option>
+    </el-select>
+  </el-space>
+  <div align="left" v-if="hourMode==1" style="margin-top: 10px">
+    <el-radio-group v-model="selDiZhiHour">
+      <el-radio-button v-for="(txt,index) in Configs.dizhiAry" :value="index">{{ txt }}</el-radio-button>
+    </el-radio-group>
+  </div>
+</template>
+
+<style scoped>
+
+</style>

+ 70 - 0
src/components/customer/da_yun/DaYunList.vue

@@ -0,0 +1,70 @@
+<script setup lang="ts">
+
+import {DataCenter} from "../../../DataCenter.ts";
+
+function range(min: number, max: number) {
+  let result = []
+  for (let i = min; i <= max; i++) {
+    result.push(i)
+  }
+  return result
+}
+
+function getDaYuns(index: number) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.bazi.value.dayun.length > 0) {
+    try {
+      result.push(DataCenter.bazi.value.dayun[index])
+    } catch (e) {
+      console.error(e)
+    }
+  }
+  return result
+}
+
+function onSelectDaYun(index: number) {
+  let dayuns = getDaYuns(index)
+  if (dayuns.length > 0) {
+    DataCenter.curDaYun.value = dayuns[0]
+    DataCenter.curLiuNianList.value = []
+    DataCenter.curLiuNianList.value = DataCenter.curDaYun.value.liunian
+    DataCenter.liunianIndex.value = null
+    DataCenter.curLiuNian.value = null
+    DataCenter.liuyueIndex.value = null
+    DataCenter.curLiuYue.value = null
+    DataCenter.liuriIndex.value = null
+    DataCenter.curLiuRi.value = null
+  }
+}
+
+
+</script>
+
+<template>
+  <!--大运-->
+  <div style="width: 100%;" v-if="DataCenter.bazi.value!=null">
+    <el-segmented v-if="DataCenter.bazi.value?.dayun.length>0" @change="onSelectDaYun" block
+                  v-model="DataCenter.dayunIndex.value" :options="range(0,10)">
+      <template #default={item}>
+        <el-space v-for="dayun in getDaYuns(item)" direction="vertical" :size="10"
+                  style="padding-top: 5px; padding-bottom: 5px">
+          <el-text>{{ dayun.start_year }}
+          </el-text>
+          <el-text size="small">{{ dayun.start_age }}岁</el-text>
+
+          <el-text>{{ dayun.gan_text }}
+            <el-text tag="b" size="small">{{ dayun.gan_zhu.shi_shen }}</el-text>
+          </el-text>
+
+          <el-text>{{ dayun.zhi_text }}
+            <el-text tag="b" size="small">{{ dayun.zhi_zhu.shi_shen }}</el-text>
+          </el-text>
+        </el-space>
+      </template>
+    </el-segmented>
+  </div>
+</template>
+
+<style scoped>
+
+</style>

+ 153 - 0
src/components/customer/da_yun/DiZhi_CangGan.vue

@@ -0,0 +1,153 @@
+<script setup lang="ts">
+
+import {Tools} from "../../../Tools.ts";
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let dizhis = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result.push(DataCenter.bazi.value.nian_zhi)
+    result.push(DataCenter.bazi.value.yue_zhi)
+    result.push(DataCenter.bazi.value.ri_zhi)
+    result.push(DataCenter.bazi.value.shi_zhi)
+  }
+  return result
+})
+
+function getSelectedDaYuns() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null) {
+    result.push(DataCenter.curDaYun.value)
+  }
+  return result
+}
+
+function getSelectedLiuNians() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuNian.value != null) {
+    result.push(DataCenter.curLiuNian.value)
+  }
+  return result
+}
+
+function getSelectedLiuYues() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuYue.value != null) {
+    result.push(DataCenter.curLiuYue.value)
+  }
+  return result
+}
+
+function getSelectedLiuRis() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuRi.value != null) {
+    result.push(DataCenter.curLiuRi.value)
+  }
+  return result
+}
+
+</script>
+
+<template>
+  <!--四柱地支藏干-->
+  <el-space v-for="sz in dizhis" direction="vertical">
+    <el-text v-if="sz.cang_gan1!=null" :type="Tools.getTextTypeOfWuXing(sz.gan1_wu_xing)">{{
+        sz.cang_gan1
+      }}({{ sz.gan1_shi_shen }})
+    </el-text>
+    <el-text v-if="sz.cang_gan2!=null" :type="Tools.getTextTypeOfWuXing(sz.gan2_wu_xing)">{{
+        sz.cang_gan2
+      }}({{ sz.gan2_shi_shen }})
+    </el-text>
+    <el-text v-if="sz.cang_gan3!=null" :type="Tools.getTextTypeOfWuXing(sz.gan3_wu_xing)">{{
+        sz.cang_gan3
+      }}({{ sz.gan3_shi_shen }})
+    </el-text>
+    <el-text v-if="sz.cang_gan1==null">&nbsp;</el-text>
+  </el-space>
+
+  <!--大运地支藏干-->
+  <el-space v-for="dy in getSelectedDaYuns()" direction="vertical">
+    <el-text v-if="dy.zhi_zhu.cang_gan1!=null"
+             :type="Tools.getTextTypeOfWuXing(dy.zhi_zhu.gan1_wu_xing)">{{
+        dy.zhi_zhu.cang_gan1
+      }}({{ dy.zhi_zhu.gan1_shi_shen }})
+    </el-text>
+    <el-text v-if="dy.zhi_zhu.cang_gan2!=null"
+             :type="Tools.getTextTypeOfWuXing(dy.zhi_zhu.gan2_wu_xing)">{{
+        dy.zhi_zhu.cang_gan2
+      }}({{ dy.zhi_zhu.gan2_shi_shen }})
+    </el-text>
+    <el-text v-if="dy.zhi_zhu.cang_gan3!=null"
+             :type="Tools.getTextTypeOfWuXing(dy.zhi_zhu.gan3_wu_xing)">{{
+        dy.zhi_zhu.cang_gan3
+      }}({{ dy.zhi_zhu.gan3_shi_shen }})
+    </el-text>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--流年地支藏干-->
+  <el-space v-for="ln in getSelectedLiuNians()" direction="vertical">
+    <el-text v-if="ln.zhi_zhu.cang_gan1!=null"
+             :type="Tools.getTextTypeOfWuXing(ln.zhi_zhu.gan1_wu_xing)">{{
+        ln.zhi_zhu.cang_gan1
+      }}({{ ln.zhi_zhu.gan1_shi_shen }})
+    </el-text>
+    <el-text v-if="ln.zhi_zhu.cang_gan2!=null"
+             :type="Tools.getTextTypeOfWuXing(ln.zhi_zhu.gan2_wu_xing)">{{
+        ln.zhi_zhu.cang_gan2
+      }}({{ ln.zhi_zhu.gan2_shi_shen }})
+    </el-text>
+    <el-text v-if="ln.zhi_zhu.cang_gan3!=null"
+             :type="Tools.getTextTypeOfWuXing(ln.zhi_zhu.gan3_wu_xing)">{{
+        ln.zhi_zhu.cang_gan3
+      }}({{ ln.zhi_zhu.gan3_shi_shen }})
+    </el-text>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--流月地支藏干-->
+  <el-space v-for="ly in getSelectedLiuYues()" direction="vertical">
+    <el-text v-if="ly.zhi_zhu.cang_gan1!=null"
+             :type="Tools.getTextTypeOfWuXing(ly.zhi_zhu.gan1_wu_xing)">{{
+        ly.zhi_zhu.cang_gan1
+      }}({{ ly.zhi_zhu.gan1_shi_shen }})
+    </el-text>
+    <el-text v-if="ly.zhi_zhu.cang_gan2!=null"
+             :type="Tools.getTextTypeOfWuXing(ly.zhi_zhu.gan2_wu_xing)">{{
+        ly.zhi_zhu.cang_gan2
+      }}({{ ly.zhi_zhu.gan2_shi_shen }})
+    </el-text>
+    <el-text v-if="ly.zhi_zhu.cang_gan3!=null"
+             :type="Tools.getTextTypeOfWuXing(ly.zhi_zhu.gan3_wu_xing)">{{
+        ly.zhi_zhu.cang_gan3
+      }}({{ ly.zhi_zhu.gan3_shi_shen }})
+    </el-text>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--流日地支藏干-->
+  <el-space v-for="lr in getSelectedLiuRis()" direction="vertical">
+    <el-text v-if="lr.zhi_zhu.cang_gan1!=null"
+             :type="Tools.getTextTypeOfWuXing(lr.zhi_zhu.gan1_wu_xing)">{{
+        lr.zhi_zhu.cang_gan1
+      }}({{ lr.zhi_zhu.gan1_shi_shen }})
+    </el-text>
+    <el-text v-if="lr.zhi_zhu.cang_gan2!=null"
+             :type="Tools.getTextTypeOfWuXing(lr.zhi_zhu.gan2_wu_xing)">{{
+        lr.zhi_zhu.cang_gan2
+      }}({{ lr.zhi_zhu.gan2_shi_shen }})
+    </el-text>
+    <el-text v-if="lr.zhi_zhu.cang_gan3!=null"
+             :type="Tools.getTextTypeOfWuXing(lr.zhi_zhu.gan3_wu_xing)">{{
+        lr.zhi_zhu.cang_gan3
+      }}({{ lr.zhi_zhu.gan3_shi_shen }})
+    </el-text>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+</template>
+
+<style scoped>
+
+</style>

+ 398 - 0
src/components/customer/da_yun/DiZhi_GaoNeng.vue

@@ -0,0 +1,398 @@
+<script setup lang="ts">
+
+import {Tools} from "../../../Tools.ts";
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+import {SiZhu} from "../../../customer/SupportModels.ts";
+
+let dizhis = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result.push(DataCenter.bazi.value.nian_zhi)
+    result.push(DataCenter.bazi.value.yue_zhi)
+    result.push(DataCenter.bazi.value.ri_zhi)
+    result.push(DataCenter.bazi.value.shi_zhi)
+  }
+  return result
+})
+
+function getDaYunTriggerGaoNengs(zhu: SiZhu) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null) {
+    let trigger = DataCenter.curDaYun.value.trigger
+    result = zhu.trigger_gaonengs.get(trigger)
+    if (result == null) {
+      result = []
+    }
+  }
+  return result
+}
+
+function getLiuNianTriggerGaoNengs(zhu: SiZhu) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null && DataCenter.curLiuNian.value != null) {
+    let trigger = DataCenter.curLiuNian.value.trigger
+    result = zhu.trigger_gaonengs.get(trigger)
+    if (result == null) {
+      result = []
+    }
+  }
+  return result
+}
+
+function getLiuYueTriggerGaoNengs(zhu: SiZhu) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null
+      && DataCenter.curLiuNian.value != null && DataCenter.curLiuYue.value != null) {
+    let trigger = DataCenter.curLiuYue.value.trigger
+    result = zhu.trigger_gaonengs.get(trigger)
+    if (result == null) {
+      result = []
+    }
+  }
+  return result
+}
+
+function getLiuRiTriggerGaoNengs(zhu: SiZhu) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null &&
+      DataCenter.curLiuNian.value != null && DataCenter.curLiuYue.value != null && DataCenter.curLiuRi.value != null) {
+    let trigger = DataCenter.curLiuRi.value.trigger
+    result = zhu.trigger_gaonengs.get(trigger)
+    if (result == null) {
+      result = []
+    }
+  }
+  return result
+}
+
+function isShowZengQiang(guanxi: string) {
+  return ["半合", "拱合", "三会"].indexOf(guanxi) != -1
+}
+
+function getSelectedDaYuns() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null) {
+    result.push(DataCenter.curDaYun.value)
+  }
+  return result
+}
+
+function getSelectedLiuNians() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuNian.value != null) {
+    result.push(DataCenter.curLiuNian.value)
+  }
+  return result
+}
+
+function getSelectedLiuYues() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuYue.value != null) {
+    result.push(DataCenter.curLiuYue.value)
+  }
+  return result
+}
+
+function getSelectedLiuRis() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuRi.value != null) {
+    result.push(DataCenter.curLiuRi.value)
+  }
+  return result
+}
+
+</script>
+
+<template>
+  <!--四柱地支高能 -->
+  <el-space v-for="sz in dizhis" direction="vertical" :size="0">
+    <!--四柱原局地支高能 -->
+    <div v-for="gn in sz.gaonengs">
+      <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+      </el-text>
+    </div>
+    <!--四柱上由大运引发的地支高能-->
+    <div v-for="gn in getDaYunTriggerGaoNengs(sz)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(运)</el-text>
+      </el-text>
+    </div>
+    <!--四柱上由流年引发的地支高能-->
+    <div v-for="gn in getLiuNianTriggerGaoNengs(sz)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(年)</el-text>
+      </el-text>
+    </div>
+    <!--四柱上由流月引发的地支高能-->
+    <div v-for="gn in getLiuYueTriggerGaoNengs(sz)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(月)</el-text>
+      </el-text>
+    </div>
+    <!--四柱上由流日引发的地支高能-->
+    <div v-for="gn in getLiuRiTriggerGaoNengs(sz)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(日)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--大运地支高能-->
+  <el-space v-for="dy in getSelectedDaYuns()" direction="vertical" :size="0">
+    <div v-for="gn in dy.zhi_zhu.gaonengs">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(运){{ gn.src }}</el-text>
+      </el-text>
+    </div>
+    <!--大运上由流年引发的地支高能-->
+    <div v-for="gn in getLiuNianTriggerGaoNengs(dy.zhi_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(年)</el-text>
+      </el-text>
+    </div>
+    <!--大运上由流月引发的地支高能-->
+    <div v-for="gn in getLiuYueTriggerGaoNengs(dy.zhi_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(月)</el-text>
+      </el-text>
+    </div>
+    <!--大运上由流日引发的地支高能-->
+    <div v-for="gn in getLiuRiTriggerGaoNengs(dy.zhi_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(日)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--流年地支高能-->
+  <el-space v-for="ln in getSelectedLiuNians()" direction="vertical" :size="0">
+    <div v-for="gn in ln.zhi_zhu.gaonengs">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(年)</el-text>
+      </el-text>
+    </div>
+    <!--流年上由流月引发的地支高能-->
+    <div v-for="gn in getLiuYueTriggerGaoNengs(ln.zhi_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(月)</el-text>
+      </el-text>
+    </div>
+    <!--流年上由流日引发的地支高能-->
+    <div v-for="gn in getLiuRiTriggerGaoNengs(ln.zhi_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(日)</el-text>
+      </el-text>
+    </div>
+  </el-space>
+
+  <!--流月地支高能-->
+  <el-space v-for="ly in getSelectedLiuYues()" direction="vertical" :size="0">
+    <div v-for="gn in ly.zhi_zhu.gaonengs">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(月)</el-text>
+      </el-text>
+    </div>
+    <!--流月上由流日引发的地支高能-->
+    <div v-for="gn in getLiuRiTriggerGaoNengs(ly.zhi_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(日)</el-text>
+      </el-text>
+    </div>
+  </el-space>
+
+  <!--流日地支高能-->
+  <el-space v-for="lr in getSelectedLiuRis()" direction="vertical" :size="0">
+    <div v-for="gn in lr.zhi_zhu.gaonengs">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text tag="ins" size="small" v-if="gn.guanxi == '刑' && gn.xing_chu!=null"
+                 :type="Tools.getColorByGaoNeng(gn.guanxi)">
+          <br>(刑{{
+            gn.xing_chu
+          }})
+        </el-text>
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(日)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+</template>
+
+<style scoped>
+
+</style>

+ 88 - 0
src/components/customer/da_yun/LiuNianList.vue

@@ -0,0 +1,88 @@
+<script setup lang="ts">
+
+import {DataCenter} from "../../../DataCenter.ts";
+
+function range(min: number, max: number) {
+  let result = []
+  for (let i = min; i <= max; i++) {
+    result.push(i)
+  }
+  return result
+}
+
+function onSelectLiuNian(index: number) {
+  DataCenter.curLiuNian.value = DataCenter.curLiuNianList.value[index]
+  DataCenter.liuyueIndex.value = null
+  DataCenter.curLiuYue.value = null
+  DataCenter.liuriIndex.value = null
+  DataCenter.curLiuRi.value = null
+}
+
+function getLiuNians(index: number) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null) {
+    result.push(DataCenter.curLiuNianList.value[index])
+  }
+  return result
+}
+
+function getWidth() {
+  let result = {
+    "width": "100%",
+  }
+  if (DataCenter.bazi.value != null && DataCenter.curLiuNianList.value != null) {
+    let len = DataCenter.curLiuNianList.value.length * 10
+    result = {
+      "width": len.toString() + "%"
+    }
+  }
+  return result
+}
+</script>
+
+<template>
+  <div :style="getWidth()" v-if="DataCenter.curDaYun.value!=null">
+    <el-segmented @change="onSelectLiuNian" block v-model="DataCenter.liunianIndex.value"
+                  :options="range(0,DataCenter?.curLiuNianList.value?.length-1)">
+      <template #default={item}>
+        <el-space v-for="ln in getLiuNians(item)" direction="vertical" :size="10"
+                  style="padding-top: 5px; padding-bottom: 5px">
+          <el-text>{{ ln.year }}
+          </el-text>
+          <el-text size="small">{{ ln.age }}岁
+          </el-text>
+          <el-text>{{ ln.gan_text }}
+            <el-text size="small" tag="b">{{ ln.gan_zhu.shi_shen }}
+            </el-text>
+          </el-text>
+          <el-text>{{ ln.zhi_text }}
+            <el-text size="small" tag="b">{{ ln.zhi_zhu.shi_shen }}
+            </el-text>
+          </el-text>
+          <div>
+            <el-tooltip v-if="ln.yinyuan_level>0" :content="ln.yinyuan_tip" :show-after="500">
+              <el-text style="color: hotpink">
+                ♥︎ {{ ln.yinyuan_level }}
+              </el-text>
+            </el-tooltip>
+            <el-text style="color: transparent" v-if="ln.yinyuan_level==0">
+              ♥︎
+            </el-text>
+
+          </div>
+        </el-space>
+      </template>
+    </el-segmented>
+  </div>
+</template>
+
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-columns: repeat(5, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 0px; /* 网格间隙 */
+  //row-gap: 50px;
+  padding: 0px; /* 容器内边距 */
+}
+</style>

+ 211 - 0
src/components/customer/da_yun/LiuRiList.vue

@@ -0,0 +1,211 @@
+<script setup lang="ts">
+import {DataCenter} from "../../../DataCenter.ts";
+import {ref} from "vue";
+import {LiuNian, LiuRi, LiuYue} from "../../../customer/SupportModels.ts";
+
+
+let bar = ref()
+let sliderValue = ref()
+
+function range(min: number, max: number) {
+  let result = []
+  for (let i = min; i <= max; i++) {
+    result.push(i)
+  }
+  return result
+}
+
+function onSelectLiuRi(index: number) {
+  DataCenter.curLiuRi.value = DataCenter.curLiuYue.value.liuri[index]
+  let liuri = DataCenter.curLiuRi.value
+  DataCenter.calcLiuRiGaoNeng(liuri, DataCenter.curLiuYue.value, DataCenter.curDaYun.value, DataCenter.curLiuNian.value)
+}
+
+function onSliderChange(v) {
+  bar.value!.setScrollLeft(v)
+}
+
+function getLiuRis(index: number) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuYue.value != null) {
+    let liuri = DataCenter.curLiuYue.value.liuri[index]
+    result.push(liuri)
+
+  }
+  return result
+}
+
+function getXingQi(key: string | number) {
+  let index = parseInt(key.toString())
+  let xq = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
+  return xq[index]
+}
+
+function findDaYun(year: number) {
+  let index = -1
+  let target = null
+  for (let i = 0; i < DataCenter.bazi.value?.dayun.length; i++) {
+    let dayun = DataCenter.bazi.value.dayun[i]
+    if (dayun.start_year <= year && year <= dayun.end_year) {
+      index = i
+      target = dayun
+      break
+    }
+  }
+  if (index != -1) {
+    return [index, target]
+  } else {
+    return null
+  }
+}
+
+function findLiuNian(year: number, src: LiuNian[]) {
+  let index = -1
+  let target = null
+  for (let i = 0; i < src.length; i++) {
+    let item = src[i]
+    if (item.year == year) {
+      index = i
+      target = item
+      break
+    }
+  }
+  if (index != -1) {
+    return [index, target]
+  } else {
+    return null
+  }
+}
+
+function findLiuYue(month: number, src: LiuYue[]) {
+  let index = -1
+  let target = null
+  for (let i = 0; i < src.length; i++) {
+    let item = src[i]
+    if (item.month == month) {
+      index = i
+      target = item
+      break
+    }
+  }
+  if (index != -1) {
+    return [index, target]
+  } else {
+    return null
+  }
+}
+
+function findLiuRi(day: number, src: LiuRi[]) {
+  let index = -1
+  let target = null
+  for (let i = 0; i < src.length; i++) {
+    let item = src[i]
+    if (item.day == day) {
+      index = i
+      target = item
+      break
+    }
+  }
+  if (index != -1) {
+    return [index, target]
+  } else {
+    return null
+  }
+}
+
+function gotoToday() {
+  if (DataCenter.bazi.value == null) {
+    return
+  }
+  let cur = new Date()
+  let year = cur.getFullYear()
+  let month = cur.getMonth() + 1
+  let day = cur.getDate()
+  let fdy = findDaYun(year)
+  if (fdy == null) {
+    return
+  } else {
+    setTimeout(function () {
+      DataCenter.dayunIndex.value = fdy[0]
+      DataCenter.curDaYun.value = fdy[1]
+      DataCenter.curLiuNianList.value = fdy[1].liunian
+      let fln = findLiuNian(year, fdy[1].liunian)
+      if (fln != null) {
+        setTimeout(function () {
+          DataCenter.liunianIndex.value = fln[0]
+          DataCenter.curLiuNian.value = fln[1]
+          let fly = findLiuYue(month, fln[1].liuyue)
+          if (fly != null) {
+            setTimeout(function () {
+              DataCenter.liuyueIndex.value = fly[0]
+              DataCenter.curLiuYue.value = fly[1]
+              let flr = findLiuRi(day, fly[1].liuri)
+              if (flr != null) {
+                setTimeout(function () {
+                  DataCenter.liuriIndex.value = flr[0]
+                  DataCenter.curLiuRi.value = flr[1]
+                  setTimeout(function () {
+                    let sv = 0
+                    if (day <= 10) {
+                      sv = 0
+                    } else if (day <= 22) {
+                      sv = 600
+                    } else {
+                      sv = 1200
+                    }
+                    bar.value!.setScrollLeft(sv)
+                    sliderValue.value = sv
+                  }, 100)
+                }, 100)
+              }
+            }, 100)
+          }
+        }, 100)
+      }
+    }, 100)
+  }
+}
+</script>
+
+<template>
+  <el-scrollbar ref="bar" style="padding-bottom: 20px">
+    <div style="width: 1800px">
+      <el-segmented v-if="DataCenter.bazi.value!=null && DataCenter.curLiuYue.value!=null" @change="onSelectLiuRi" block
+                    v-model="DataCenter.liuriIndex.value"
+                    :options="range(0,DataCenter.curLiuYue.value.liuri.length-1)">
+        <template #default={item}>
+          <el-space v-for="lr in getLiuRis(item)" direction="vertical" :size="10"
+                    style="padding-top: 5px; padding-bottom: 5px">
+            <el-text size="small">{{ lr.day }}日
+            </el-text>
+            <!--            <el-text size="small">{{ lr.nongli }}-->
+            <!--            </el-text>-->
+            <el-text size="small">{{ getXingQi(lr.xing_qi) }}</el-text>
+            <el-text>{{ lr.gan_text }}
+              <el-text size="small" tag="b">{{ lr.gan_zhu.shi_shen }}
+              </el-text>
+            </el-text>
+            <el-text>{{ lr.zhi_text }}
+              <el-text size="small" tag="b">{{ lr.zhi_zhu.shi_shen }}
+              </el-text>
+            </el-text>
+          </el-space>
+        </template>
+      </el-segmented>
+    </div>
+  </el-scrollbar>
+  <el-row v-if="DataCenter.bazi.value!=null">
+    <el-col :span="20">
+      <el-slider :show-tooltip="false" v-model="sliderValue" :min="0" :max="1200"
+                 @input="onSliderChange"></el-slider>
+    </el-col>
+    <el-col :span="4">
+      <el-button type="primary" @click="gotoToday()">今天</el-button>
+    </el-col>
+  </el-row>
+
+</template>
+
+<style scoped>
+
+</style>

+ 66 - 0
src/components/customer/da_yun/LiuYueList.vue

@@ -0,0 +1,66 @@
+<script setup lang="ts">
+
+import {DataCenter} from "../../../DataCenter.ts";
+
+function range(min: number, max: number) {
+  let result = []
+  for (let i = min; i <= max; i++) {
+    result.push(i)
+  }
+  return result
+}
+
+function getLiuYues(index: number) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuNian.value != null) {
+    result.push(DataCenter.curLiuNian.value.liuyue[index])
+  }
+  return result
+}
+
+function onSelectLiuYue(index: number) {
+  DataCenter.curLiuYue.value = DataCenter.curLiuNian.value.liuyue[index]
+  let liuyue = DataCenter.curLiuYue.value
+  DataCenter.calcLiuYueGaoNeng(liuyue, DataCenter.curDaYun.value, DataCenter.curLiuNian.value)
+  DataCenter.liuriIndex.value = null
+  DataCenter.curLiuRi.value = null
+}
+</script>
+
+<template>
+  <div style="width: 100%">
+    <el-segmented v-if="DataCenter.bazi.value!=null && DataCenter.curLiuNian.value!=null" @change="onSelectLiuYue" block
+                  v-model="DataCenter.liuyueIndex.value"
+                  :options="range(0,11)">
+      <template #default={item}>
+        <el-space v-for="ly in getLiuYues(item)" direction="vertical" :size="10"
+                  style="padding-top: 5px; padding-bottom: 5px">
+          <el-text size="small">{{ ly?.jie_qi }}
+          </el-text>
+          <el-text size="small">{{ ly?.jie_qi_date }}
+          </el-text>
+          <el-text>{{ ly?.gan_text }}
+            <el-text size="small" tag="b">{{ ly?.gan_zhu.shi_shen }}
+            </el-text>
+          </el-text>
+          <el-text>{{ ly?.zhi_text }}
+            <el-text size="small" tag="b">{{ ly?.zhi_zhu.shi_shen }}
+            </el-text>
+          </el-text>
+          <el-tooltip v-if="ly?.yinyuan_level>0" :content="ly?.yinyuan_tip" :show-after="500">
+            <el-text style="color: hotpink">
+              ♥︎
+            </el-text>
+          </el-tooltip>
+          <el-text style="color: transparent" v-if="ly?.yinyuan_level==0">
+            ♥︎
+          </el-text>
+        </el-space>
+      </template>
+    </el-segmented>
+  </div>
+</template>
+
+<style scoped>
+
+</style>

+ 106 - 0
src/components/customer/da_yun/Shen_Sha.vue

@@ -0,0 +1,106 @@
+<script setup lang="ts">
+
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let dizhis = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result.push(DataCenter.bazi.value.nian_zhi)
+    result.push(DataCenter.bazi.value.yue_zhi)
+    result.push(DataCenter.bazi.value.ri_zhi)
+    result.push(DataCenter.bazi.value.shi_zhi)
+  }
+  return result
+})
+
+function getDaYunShenShas() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null) {
+    result = DataCenter.curDaYun.value.zhi_zhu.shenshas
+  }
+  return result
+}
+
+function getLiuNianShenShas() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null && DataCenter.curLiuNian.value != null) {
+    result = DataCenter.curLiuNian.value.zhi_zhu.shenshas
+  }
+  return result
+}
+
+function getLiuYueShenShas() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuYue.value != null) {
+    result = DataCenter.curLiuYue.value.zhi_zhu.shenshas
+  }
+  return result
+}
+
+function getLiuRiShenShas() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuRi.value != null) {
+    result = DataCenter.curLiuRi.value.zhi_zhu.shenshas
+  }
+  return result
+}
+</script>
+
+<template>
+  <!--四柱神煞-->
+  <el-space v-for="sz in dizhis" direction="vertical" :size="0">
+    <el-text v-for="shensha in sz.shenshas">
+      {{ shensha }}
+    </el-text>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--大运神煞-->
+  <el-space direction="vertical" :size="0">
+    <div v-for="shensha in getDaYunShenShas()">
+      <el-text>
+        {{ shensha }}
+        <el-text size="small">(运)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--流年神煞-->
+  <el-space direction="vertical" :size="0">
+    <div v-for="shensha in getLiuNianShenShas()">
+      <el-text>
+        {{ shensha }}
+        <el-text size="small">(年)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--流月神煞-->
+  <el-space direction="vertical" :size="0">
+    <div v-for="shensha in getLiuYueShenShas()">
+      <el-text>
+        {{ shensha }}
+        <el-text size="small">(月)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--流日神煞-->
+  <el-space direction="vertical" :size="0">
+    <div v-for="shensha in getLiuRiShenShas()">
+      <el-text>
+        {{ shensha }}
+        <el-text size="small">(日)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+</template>
+
+<style scoped>
+
+</style>

+ 127 - 0
src/components/customer/da_yun/SiZhu_DiZhi.vue

@@ -0,0 +1,127 @@
+<script setup lang="ts">
+
+import {Tools} from "../../../Tools.ts";
+import {DataCenter} from "../../../DataCenter.ts";
+import {computed} from "vue";
+
+let dizhis = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result.push(DataCenter.bazi.value.nian_zhi)
+    result.push(DataCenter.bazi.value.yue_zhi)
+    result.push(DataCenter.bazi.value.ri_zhi)
+    result.push(DataCenter.bazi.value.shi_zhi)
+  }
+  return result
+})
+
+function getPower(shishen: string) {
+  let result = ""
+  let value = 0
+  if (DataCenter.bazi.value != null) {
+    result = "+"
+    value = DataCenter.bazi.value.powerDetail.getPower(shishen)
+    if (value == 0) {
+      value = DataCenter.bazi.value.power_steps.get(shishen)
+      if (value == null) {
+        value = 0
+      }
+    }
+    return result + value.toFixed(0)
+  }
+  return result
+}
+
+function getSelectedDaYuns() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null) {
+    result.push(DataCenter.curDaYun.value)
+  }
+  return result
+}
+
+function getSelectedLiuNians() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuNian.value != null) {
+    result.push(DataCenter.curLiuNian.value)
+  }
+  return result
+}
+
+function getSelectedLiuYues() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuYue.value != null) {
+    result.push(DataCenter.curLiuYue.value)
+  }
+  return result
+}
+
+function getSelectedLiuRis() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuRi.value != null) {
+    result.push(DataCenter.curLiuRi.value)
+  }
+  return result
+}
+
+</script>
+
+<template>
+  <!--四柱地支-->
+  <el-text v-for="sz in dizhis" :type="Tools.getTextTypeOfWuXing(sz.wu_xing)" style="font-size: 20px" size="large"
+           tag="b">{{
+      sz.text
+    }}
+    <el-text>{{ sz.shi_shen }}
+    </el-text>
+    <br>
+    <el-text tag="ins" size="small">{{ getPower(sz.shi_shen) }}</el-text>
+  </el-text>
+
+  <!--大运地支-->
+  <el-text v-for="dy in getSelectedDaYuns()" :type="Tools.getTextTypeOfWuXing(dy.zhi_zhu.wu_xing)"
+           style="font-size: 20px"
+           size="large"
+           tag="b">{{ dy.zhi_text }}
+    <el-text>{{ dy.zhi_zhu.shi_shen }}
+    </el-text>
+    <br>
+    <el-text tag="ins" size="small">{{ getPower(dy.zhi_zhu.shi_shen) }}</el-text>
+  </el-text>
+
+
+  <!--流年地支-->
+  <el-text v-for="ln in getSelectedLiuNians()" :type="Tools.getTextTypeOfWuXing(ln.zhi_zhu.wu_xing)"
+           style="font-size: 20px"
+           size="large"
+           tag="b">{{ ln.zhi_text }}
+    <el-text>{{ ln.zhi_zhu.shi_shen }}</el-text>
+    <br>
+    <el-text tag="ins" size="small">{{ getPower(ln.zhi_zhu.shi_shen) }}</el-text>
+  </el-text>
+
+  <!--流月地支-->
+  <el-text v-for="ly in getSelectedLiuYues()" :type="Tools.getTextTypeOfWuXing(ly.zhi_zhu.wu_xing)"
+           style="font-size: 20px"
+           size="large"
+           tag="b">{{ ly.zhi_text }}
+    <el-text>{{ ly.zhi_zhu.shi_shen }}</el-text>
+    <br>
+    <el-text tag="ins" size="small">{{ getPower(ly.zhi_zhu.shi_shen) }}</el-text>
+  </el-text>
+
+  <!--流日地支-->
+  <el-text v-for="lr in getSelectedLiuRis()" :type="Tools.getTextTypeOfWuXing(lr.zhi_zhu.wu_xing)"
+           style="font-size: 20px"
+           size="large"
+           tag="b">{{ lr.zhi_text }}
+    <el-text>{{ lr.zhi_zhu.shi_shen }}</el-text>
+    <br>
+    <el-text tag="ins" size="small">{{ getPower(lr.zhi_zhu.shi_shen) }}</el-text>
+  </el-text>
+
+</template>
+
+<style scoped>
+
+</style>

+ 121 - 0
src/components/customer/da_yun/SiZhu_TianGan.vue

@@ -0,0 +1,121 @@
+<script setup lang="ts">
+
+import {Tools} from "../../../Tools.ts";
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let tiangans = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result.push(DataCenter.bazi.value.nian_gan)
+    result.push(DataCenter.bazi.value.yue_gan)
+    result.push(DataCenter.bazi.value.ri_gan)
+    result.push(DataCenter.bazi.value.shi_gan)
+  }
+  return result
+})
+
+function getPower(shishen: string) {
+  let result = ""
+  let value = 0
+  if (DataCenter.bazi.value != null) {
+    result = "+"
+    value = DataCenter.bazi.value.powerDetail.getPower(shishen)
+    if (value == 0) {
+      value = DataCenter.bazi.value.power_steps.get(shishen)
+      if (value == null) {
+        value = 0
+      }
+    }
+    return result + value.toFixed(0)
+  }
+  return result
+}
+
+function getSelectedDaYuns() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null) {
+    result.push(DataCenter.curDaYun.value)
+  }
+  return result
+}
+
+function getSelectedLiuNians() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuNian.value != null) {
+    result.push(DataCenter.curLiuNian.value)
+  }
+  return result
+}
+
+function getSelectedLiuYues() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuYue.value != null) {
+    result.push(DataCenter.curLiuYue.value)
+  }
+  return result
+}
+
+function getSelectedLiuRis() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuRi.value != null) {
+    result.push(DataCenter.curLiuRi.value)
+  }
+  return result
+}
+</script>
+
+<template>
+  <!--原局天干-->
+  <el-text v-for="sz in tiangans" :type="Tools.getTextTypeOfWuXing(sz.wu_xing)" style="font-size: 20px" size="large"
+           tag="b">{{
+      sz.text
+    }}
+    <el-text>{{ sz.shi_shen }}</el-text>
+    <br>
+    <el-text tag="ins" size="small">{{ getPower(sz.shi_shen) }}</el-text>
+  </el-text>
+  <!--大运天干-->
+  <el-text v-for="dy in getSelectedDaYuns()" :type="Tools.getTextTypeOfWuXing(dy.gan_zhu.wu_xing)"
+           style="font-size: 20px"
+           size="large"
+           tag="b">{{ dy.gan_text }}
+    <el-text>{{ dy.gan_zhu.shi_shen }}</el-text>
+    <br>
+    <el-text tag="ins" size="small">{{ getPower(dy.gan_zhu.shi_shen) }}</el-text>
+  </el-text>
+
+  <!--流年天干-->
+  <el-text v-for="ln in getSelectedLiuNians()" :type="Tools.getTextTypeOfWuXing(ln.gan_zhu.wu_xing)"
+           style="font-size: 20px"
+           size="large"
+           tag="b">{{ ln.gan_text }}
+    <el-text>{{ ln.gan_zhu.shi_shen }}</el-text>
+    <br>
+    <el-text tag="ins" size="small">{{ getPower(ln.gan_zhu.shi_shen) }}</el-text>
+  </el-text>
+
+  <!--流月天干-->
+  <el-text v-for="ly in getSelectedLiuYues()" :type="Tools.getTextTypeOfWuXing(ly.gan_zhu.wu_xing)"
+           style="font-size: 20px"
+           size="large"
+           tag="b">{{ ly.gan_text }}
+    <el-text>{{ ly.gan_zhu.shi_shen }}</el-text>
+    <br>
+    <el-text tag="ins" size="small">{{ getPower(ly.gan_zhu.shi_shen) }}</el-text>
+  </el-text>
+
+  <!--流日天干-->
+  <el-text v-for="lr in getSelectedLiuRis()" :type="Tools.getTextTypeOfWuXing(lr.gan_zhu.wu_xing)"
+           style="font-size: 20px"
+           size="large"
+           tag="b">{{ lr.gan_text }}
+    <el-text>{{ lr.gan_zhu.shi_shen }}</el-text>
+    <br>
+    <el-text tag="ins" size="small">{{ getPower(lr.gan_zhu.shi_shen) }}</el-text>
+  </el-text>
+</template>
+
+<style scoped>
+
+</style>

+ 310 - 0
src/components/customer/da_yun/TianGan_GaoNeng.vue

@@ -0,0 +1,310 @@
+<script setup lang="ts">
+
+import {Tools} from "../../../Tools.ts";
+import {SiZhu} from "../../../customer/SupportModels.ts";
+import {DataCenter} from "../../../DataCenter.ts";
+import {computed} from "vue";
+
+let tiangans = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result.push(DataCenter.bazi.value.nian_gan)
+    result.push(DataCenter.bazi.value.yue_gan)
+    result.push(DataCenter.bazi.value.ri_gan)
+    result.push(DataCenter.bazi.value.shi_gan)
+  }
+  return result
+})
+
+function isShowZengQiang(guanxi: string) {
+  return ["半合", "拱合", "三会"].indexOf(guanxi) != -1
+}
+
+function getSelectedDaYuns() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null) {
+    result.push(DataCenter.curDaYun.value)
+  }
+  return result
+}
+
+function getDaYunTriggerGaoNengs(zhu: SiZhu) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null) {
+    let trigger = DataCenter.curDaYun.value.trigger
+    result = zhu.trigger_gaonengs.get(trigger)
+    if (result == null) {
+      result = []
+    }
+  }
+  return result
+}
+
+function getLiuNianTriggerGaoNengs(zhu: SiZhu) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null && DataCenter.curLiuNian.value != null) {
+    let trigger = DataCenter.curLiuNian.value.trigger
+    result = zhu.trigger_gaonengs.get(trigger)
+    if (result == null) {
+      result = []
+    }
+  }
+  return result
+}
+
+function getLiuYueTriggerGaoNengs(zhu: SiZhu) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null &&
+      DataCenter.curLiuNian.value != null && DataCenter.curLiuYue.value != null) {
+    let trigger = DataCenter.curLiuYue.value.trigger
+    result = zhu.trigger_gaonengs.get(trigger)
+    if (result == null) {
+      result = []
+    }
+  }
+  return result
+}
+
+function getLiuRiTriggerGaoNengs(zhu: SiZhu) {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curDaYun.value != null &&
+      DataCenter.curLiuNian.value != null && DataCenter.curLiuYue.value != null && DataCenter.curLiuRi.value != null) {
+    let trigger = DataCenter.curLiuRi.value.trigger
+    result = zhu.trigger_gaonengs.get(trigger)
+    if (result == null) {
+      result = []
+    }
+  }
+  return result
+}
+
+
+function getSelectedLiuNians() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuNian.value != null) {
+    result.push(DataCenter.curLiuNian.value)
+  }
+  return result
+}
+
+function getSelectedLiuYues() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuYue.value != null) {
+    result.push(DataCenter.curLiuYue.value)
+  }
+  return result
+}
+
+function getSelectedLiuRis() {
+  let result = []
+  if (DataCenter.bazi.value != null && DataCenter.curLiuRi.value != null) {
+    result.push(DataCenter.curLiuRi.value)
+  }
+  return result
+}
+
+</script>
+
+<template>
+  <!--原局天干高能-->
+  <el-space v-for="sz in tiangans" direction="vertical" :size="0">
+    <!--四柱原局天干高能-->
+    <div v-for="gn in sz.gaonengs">
+      <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+      </el-text>
+    </div>
+    <!--四柱上由大运引发的天干高能-->
+    <div v-for="gn in getDaYunTriggerGaoNengs(sz)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(运)</el-text>
+      </el-text>
+    </div>
+    <!--四柱上由流年引发的天干高能-->
+    <div v-for="gn in getLiuNianTriggerGaoNengs(sz)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(年)</el-text>
+      </el-text>
+    </div>
+    <!--四柱上由流月引发的天干高能-->
+    <div v-for="gn in getLiuYueTriggerGaoNengs(sz)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(月)</el-text>
+      </el-text>
+    </div>
+    <!--四柱上由流日引发的天干高能-->
+    <div v-for="gn in getLiuRiTriggerGaoNengs(sz)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(日)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+  <!--大运天干高能-->
+  <el-space v-for="dy in getSelectedDaYuns()" direction="vertical" :size="0">
+    <div v-for="gn in dy.gan_zhu.gaonengs">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(运)</el-text>
+      </el-text>
+    </div>
+    <!--大运上由流年引发的天干高能-->
+    <div v-for="gn in getLiuNianTriggerGaoNengs(dy.gan_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(年)</el-text>
+      </el-text>
+    </div>
+    <!--大运上由流月引发的天干高能-->
+    <div v-for="gn in getLiuYueTriggerGaoNengs(dy.gan_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(月)</el-text>
+      </el-text>
+    </div>
+    <!--大运上由流日引发的天干高能-->
+    <div v-for="gn in getLiuRiTriggerGaoNengs(dy.gan_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(日)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--流年天干高能-->
+  <el-space v-for="ln in getSelectedLiuNians()" direction="vertical" :size="0">
+    <div v-for="gn in ln.gan_zhu.gaonengs">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(年)</el-text>
+      </el-text>
+    </div>
+    <!--流年上由流月引发的天干高能-->
+    <div v-for="gn in getLiuYueTriggerGaoNengs(ln.gan_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(月)</el-text>
+      </el-text>
+    </div>
+    <!--流年上由流日引发的天干高能-->
+    <div v-for="gn in getLiuRiTriggerGaoNengs(ln.gan_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(日)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--流月天干高能-->
+  <el-space v-for="ly in getSelectedLiuYues()" direction="vertical" :size="0">
+    <div v-for="gn in ly.gan_zhu.gaonengs">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(月)</el-text>
+      </el-text>
+    </div>
+    <!--流月上由流日引发的天干高能-->
+    <div v-for="gn in getLiuRiTriggerGaoNengs(ly.gan_zhu)">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(日)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+
+  <!--流日天干高能-->
+  <el-space v-for="lr in getSelectedLiuRis()" direction="vertical" :size="0">
+    <div v-for="gn in lr.gan_zhu.gaonengs">
+      <el-text
+          :type="Tools.getColorByGaoNeng(gn.guanxi)">
+        {{ gn.text }}{{ gn.sign }}
+        <el-text :type="Tools.getColorByGaoNeng(gn.guanxi)" size="small" v-if="isShowZengQiang(gn.guanxi)">{{
+            gn.fangxiang
+          }}({{ gn.zengqiang_shishen }})
+        </el-text>
+        <el-text size="small">(日)</el-text>
+      </el-text>
+    </div>
+    <el-text>&nbsp;</el-text>
+  </el-space>
+</template>
+
+<style scoped>
+
+</style>

+ 188 - 0
src/components/customer/ge_ju/DiZhi_GaoNeng_GeJu.vue

@@ -0,0 +1,188 @@
+<script setup lang="ts">
+import {DataCenter} from "../../../DataCenter.ts";
+import {DaYunItem} from "../../../customer/SupportModels.ts";
+
+let dizhiTexts = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
+
+function isSelected(key: string) {
+  let shishen = getShiShen(key)
+  let wuxing = getWuXing(key)
+  if (shishen == DataCenter.lastKeyInGeJu.value || wuxing == DataCenter.lastKeyInGeJu.value) {
+    return {
+      "background-color": "#ff0000A0",
+    }
+  } else {
+    return {
+      "background-color": "transparent",
+    }
+  }
+}
+
+function getShiShen(key: string) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.shishen_guanxi.get(key)
+  }
+  return result
+}
+
+function getWuXing(key: string) {
+  if (["甲", "乙", "寅", "卯"].indexOf(key) != -1) {
+    return "木"
+  }
+  if (["丙", "丁", "午", "巳"].indexOf(key) != -1) {
+    return "火"
+  }
+  if (["戊", "己", "辰", "戌", "丑", "未"].indexOf(key) != -1) {
+    return "土"
+  }
+  if (["庚", "辛", "申", "酉"].indexOf(key) != -1) {
+    return "金"
+  }
+  if (["壬", "癸", "子", "亥"].indexOf(key) != -1) {
+    return "水"
+  }
+  return ""
+}
+
+function getGeJu(key: string, isTianGan: boolean) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    if (isTianGan) {
+      result = DataCenter.bazi.value.tiangan_geju.get(key)
+    } else {
+      result = DataCenter.bazi.value.dizhi_geju.get(key)
+    }
+  }
+  return result
+}
+
+function getDaYunGeJu(key: string, isTianGan: boolean) {
+  let result = []
+  if (DataCenter.includeDaYunInGeJu.value == true) {
+    let dayunKey = null
+    let trigger = DataCenter.selectedDaYunInGeJu.value
+    if (trigger != null) {
+      dayunKey = trigger.toString().replace("运", "")
+    }
+
+    if (dayunKey != null) {
+      if (isTianGan) {
+        result = DataCenter.bazi.value.dayun_tiangan_geju.get(key).filter(dayunKey)
+      } else {
+        result = DataCenter.bazi.value.dayun_dizhi_geju.get(key).filter(dayunKey)
+      }
+    }
+  }
+  return result
+}
+
+function findDaYun(key: string) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    let dayunItems = DataCenter.bazi.value.dayun
+    for (let i = 0; i < dayunItems.length; i++) {
+      let item = dayunItems[i]
+      if (!item.is_dayun) {
+        continue
+      }
+      if (item.trigger == key) {
+        result = item
+        break
+      }
+    }
+  }
+  return result
+}
+
+function findLiuNian(dayun: DaYunItem, year: number) {
+  let result = null
+  if (dayun != null) {
+    for (let i = 0; i < dayun.liunian.length; i++) {
+      let ln = dayun.liunian[i]
+      if (ln.year == year) {
+        result = ln
+        break
+      }
+    }
+  }
+  return result
+}
+
+function getLiuNianGeJu(key: string, isTianGan: boolean) {
+  let result = []
+  if (DataCenter.includeDaYunInGeJu.value == true && DataCenter.includeLiuNianInGeJu.value == true) {
+    let dayunKey = null
+    let trigger = DataCenter.selectedDaYunInGeJu.value
+    if (trigger != null) {
+      dayunKey = trigger.toString().replace("运", "")
+    }
+
+    if (dayunKey != null) {
+      let year = 0
+      if (DataCenter.selectedLiuNianInGeJu.value != null) {
+        year = parseInt(DataCenter.selectedLiuNianInGeJu.value.toString())
+      }
+      let dayun = findDaYun(dayunKey)
+      let liunian = findLiuNian(dayun, year)
+
+      if (liunian != null) {
+        if (isTianGan) {
+          result = DataCenter.bazi.value.liunian_tiangan_geju.get(key).filter(liunian.trigger)
+        } else {
+          result = DataCenter.bazi.value.liunian_dizhi_geju.get(key).filter(liunian.trigger)
+        }
+      }
+    }
+  }
+  return result
+}
+</script>
+
+<template>
+  <div v-for="dz in dizhiTexts">
+    <!--原局地支关系-->
+    <div>
+      <el-space direction="vertical" :style="isSelected(dz)">
+        <el-tooltip :show-after="500" v-for="item in getGeJu(dz,false)?.items"
+                    :content="item.arg1+item.arg2+item.guanxi+'('+item.getTotal()+')'"
+                    placement="top">
+          <el-text>{{ item?.guanxi }}{{ item?.shishen2 }}</el-text>
+        </el-tooltip>
+      </el-space>
+      <el-text :style="isSelected(dz)" v-if="getGeJu(dz,false)?.items.length==0">&nbsp;</el-text>
+    </div>
+    <!--大运地支关系-->
+    <div>
+      <el-space direction="vertical" :style="isSelected(dz)">
+        <el-tooltip :show-after="500" v-for="item in getDaYunGeJu(dz,false)"
+                    :content="item.arg1+item.arg2+item.guanxi+'('+item.getTotal()+')'"
+                    placement="top">
+          <el-text>{{ item?.guanxi }}{{ item?.shishen2 }}
+            <el-text size="small">(运)</el-text>
+          </el-text>
+        </el-tooltip>
+      </el-space>
+      <el-text :style="isSelected(dz)" v-if="getDaYunGeJu(dz,false)?.length==0">&nbsp;</el-text>
+    </div>
+
+    <!--流年地支关系-->
+    <div>
+      <el-space direction="vertical" :style="isSelected(dz)">
+        <el-tooltip :show-after="500" v-for="item in getLiuNianGeJu(dz,false)"
+                    :content="item.arg1+item.arg2+item.guanxi+'('+item.getTotal()+')'"
+                    placement="top">
+          <el-text>{{ item?.guanxi }}{{ item?.shishen2 }}
+            <el-text size="small">(年)</el-text>
+          </el-text>
+        </el-tooltip>
+      </el-space>
+      <el-text :style="isSelected(dz)" v-if="getLiuNianGeJu(dz,false)?.length==0">&nbsp;</el-text>
+    </div>
+
+  </div>
+</template>
+
+<style scoped>
+
+</style>

+ 77 - 0
src/components/customer/ge_ju/DiZhi_List.vue

@@ -0,0 +1,77 @@
+<script setup lang="ts">
+import {DataCenter} from "../../../DataCenter.ts";
+
+let dizhiTexts = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
+
+function isLuShen(key: string) {
+  let result = ""
+  if (DataCenter.bazi.value != null) {
+    if (DataCenter.bazi.value.shishen_guanxi.get("禄神")[0] == key) {
+      result = "禄"
+    } else {
+      let banLu = DataCenter.bazi.value.shishen_guanxi.get("半禄")
+      if (banLu.indexOf(key) != -1) {
+        return "半"
+      }
+    }
+  }
+  return result
+}
+
+function getShiShen(key: string) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.shishen_guanxi.get(key)
+  }
+  return result
+}
+
+function hasInRaw(key: string) {
+  let result = false
+  if (DataCenter.bazi.value != null) {
+    let lst = DataCenter.bazi.value.allSiZhu()
+    for (let i = 0; i < lst.length; i++) {
+      if (lst[i].text == key) {
+        result = true
+        break
+      }
+    }
+  }
+  return result
+}
+
+function getPower(key: string) {
+  let result = ""
+  let value = 0
+  if (DataCenter.bazi.value != null) {
+    let ss = getShiShen(key)
+    result = "+"
+    value = DataCenter.bazi.value.powerDetail.getPower(ss)
+    if (value == 0) {
+      value = DataCenter.bazi.value.power_steps.get(ss)
+      if (value == null) {
+        value = 0
+      }
+    }
+    return result + value.toFixed(0)
+  }
+  return result
+}
+
+</script>
+
+<template>
+  <div v-for="dz in dizhiTexts">
+    <el-badge :value="isLuShen(dz)" :offset="[0,-5]">
+      <el-text tag="b" size="large">{{ dz }}
+        <el-text size="small">{{ getShiShen(dz) }}</el-text>
+      </el-text>
+    </el-badge>
+    <br>
+    <el-text tag="ins" :type="hasInRaw(dz)?'primary':'info'">{{ getPower(dz) }}</el-text>
+  </div>
+</template>
+
+<style scoped>
+
+</style>

+ 189 - 0
src/components/customer/ge_ju/DiZhi_ShiShen_Scores.vue

@@ -0,0 +1,189 @@
+<script setup lang="ts">
+import {DataCenter} from "../../../DataCenter.ts";
+import {DaYunItem, GeJuScore, SiZhuGeJu} from "../../../customer/SupportModels.ts";
+
+let titles = ["官杀", "财星", "印绶", "食伤", "比劫"]
+let dizhiTexts = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
+
+function getGeJu(key: string, isTianGan: boolean) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    if (isTianGan) {
+      result = DataCenter.bazi.value.tiangan_geju.get(key)
+    } else {
+      result = DataCenter.bazi.value.dizhi_geju.get(key)
+    }
+  }
+  return result
+}
+
+function getDaYunGeJu(key: string, isTianGan: boolean) {
+  let result = []
+  if (DataCenter.includeDaYunInGeJu.value == true) {
+    let dayunKey = null
+    let trigger = DataCenter.selectedDaYunInGeJu.value
+    if (trigger != null) {
+      dayunKey = trigger.toString().replace("运", "")
+    }
+
+    if (dayunKey != null) {
+      if (isTianGan) {
+        result = DataCenter.bazi.value.dayun_tiangan_geju.get(key).filter(dayunKey)
+      } else {
+        result = DataCenter.bazi.value.dayun_dizhi_geju.get(key).filter(dayunKey)
+      }
+    }
+  }
+  return result
+}
+
+function findDaYun(key: string) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    let dayunItems = DataCenter.bazi.value.dayun
+    for (let i = 0; i < dayunItems.length; i++) {
+      let item = dayunItems[i]
+      if (!item.is_dayun) {
+        continue
+      }
+      if (item.trigger == key) {
+        result = item
+        break
+      }
+    }
+  }
+  return result
+}
+
+function findLiuNian(dayun: DaYunItem, year: number) {
+  let result = null
+  if (dayun != null) {
+    for (let i = 0; i < dayun.liunian.length; i++) {
+      let ln = dayun.liunian[i]
+      if (ln.year == year) {
+        result = ln
+        break
+      }
+    }
+  }
+  return result
+}
+
+function getLiuNianGeJu(key: string, isTianGan: boolean) {
+  let result = []
+  if (DataCenter.includeDaYunInGeJu.value == true && DataCenter.includeLiuNianInGeJu.value == true) {
+    let dayunKey = null
+    let trigger = DataCenter.selectedDaYunInGeJu.value
+    if (trigger != null) {
+      dayunKey = trigger.toString().replace("运", "")
+    }
+
+    if (dayunKey != null) {
+      let year = 0
+      if (DataCenter.selectedLiuNianInGeJu.value != null) {
+        year = parseInt(DataCenter.selectedLiuNianInGeJu.value.toString())
+      }
+      let dayun = findDaYun(dayunKey)
+      let liunian = findLiuNian(dayun, year)
+
+      if (liunian != null) {
+        if (isTianGan) {
+          result = DataCenter.bazi.value.liunian_tiangan_geju.get(key).filter(liunian.trigger)
+        } else {
+          result = DataCenter.bazi.value.liunian_dizhi_geju.get(key).filter(liunian.trigger)
+        }
+      }
+    }
+  }
+  return result
+}
+
+function getScore(key: string, isTianGan: boolean, title: string) {
+  let result = new GeJuScore()
+  let raw: SiZhuGeJu = getGeJu(key, isTianGan)
+  if (raw != null) {
+    result.guan_sha += raw.guan_sha
+    result.cai_xing += raw.cai_xing
+    result.yin_shou += raw.yin_shou
+    result.shi_shang += raw.shi_shang
+    result.bi_jie += raw.bi_jie
+    result.total += raw.total
+  }
+  if (DataCenter.includeDaYunInGeJu.value == true) {
+    let items = getDaYunGeJu(key, isTianGan)
+    items.forEach(function (item) {
+      result.guan_sha += item.guan_sha
+      result.cai_xing += item.cai_xing
+      result.yin_shou += item.yin_shou
+      result.shi_shang += item.shi_shang
+      result.bi_jie += item.bi_jie
+      result.total += item.getTotal()
+    })
+  }
+
+  if (DataCenter.includeLiuNianInGeJu.value == true) {
+    let items = getLiuNianGeJu(key, isTianGan)
+    items.forEach(function (item) {
+      result.guan_sha += item.guan_sha
+      result.cai_xing += item.cai_xing
+      result.yin_shou += item.yin_shou
+      result.shi_shang += item.shi_shang
+      result.bi_jie += item.bi_jie
+      result.total += item.getTotal()
+    })
+  }
+
+  let value = 0
+  switch (title) {
+    case "官杀":
+      value = result?.guan_sha
+      break
+    case "财星":
+      value = result?.cai_xing
+      break
+    case "印绶":
+      value = result?.yin_shou
+      break
+    case "食伤":
+      value = result?.shi_shang
+      break
+    case "比劫":
+      value = result?.bi_jie
+      break
+    case "合计":
+      value = result?.total
+      break
+  }
+  return value
+}
+
+
+</script>
+
+<template>
+  <div v-for="title in titles">
+    <div class="grid-container" style="margin-top: -20px">
+      <el-text>{{ title }}</el-text>
+      <div v-for="dz in dizhiTexts">
+        <el-text>{{ getScore(dz, false, title) }}</el-text>
+      </div>
+    </div>
+  </div>
+  <div class="grid-container" style="margin-top: -20px">
+    <el-text tag="b" type="danger">合计</el-text>
+    <div v-for="dz in dizhiTexts">
+      <el-text tag="b" type="danger">{{ getScore(dz, false, "合计") }}</el-text>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-columns: repeat(13, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  //row-gap: 50px;
+  padding: 10px; /* 容器内边距 */
+}
+</style>

+ 109 - 0
src/components/customer/ge_ju/Score_Shower.vue

@@ -0,0 +1,109 @@
+<script setup lang="ts">
+import {DataCenter} from "../../../DataCenter.ts";
+import {DaYunItem} from "../../../customer/SupportModels.ts";
+
+let shishenTexts = ["官", "杀", "财", "才", "印", "枭", "食", "伤", "比", "劫"]
+let wuxingTexts = ["木", "火", "土", "金", "水"]
+
+function findDaYun(key: string) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    let dayunItems = DataCenter.bazi.value.dayun
+    for (let i = 0; i < dayunItems.length; i++) {
+      let item = dayunItems[i]
+      if (!item.is_dayun) {
+        continue
+      }
+      if (item.trigger == key) {
+        result = item
+        break
+      }
+    }
+  }
+  return result
+}
+
+function findLiuNian(dayun: DaYunItem, year: number) {
+  let result = null
+  if (dayun != null) {
+    for (let i = 0; i < dayun.liunian.length; i++) {
+      let ln = dayun.liunian[i]
+      if (ln.year == year) {
+        result = ln
+        break
+      }
+    }
+  }
+  return result
+}
+
+function getAvgScore(key: string) {
+  let result = 0
+  let dayunScore = 0
+  let liuNianScore = 0
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.geju_score.get(key)
+    if (DataCenter.includeDaYunInGeJu.value == true && DataCenter.selectedDaYunInGeJu.value != null) {
+      let trigger = DataCenter.selectedDaYunInGeJu.value.toString().replace("运", "")
+      try {
+        dayunScore = DataCenter.bazi.value.dayun_geju_score.get(trigger)?.get(key)
+      } catch (e) {
+        dayunScore = 0
+      }
+
+
+      if (DataCenter.includeLiuNianInGeJu.value == true && DataCenter.selectedLiuNianInGeJu.value != null) {
+        let year = parseInt(DataCenter.selectedLiuNianInGeJu.value.toString())
+        let dayunBean = findDaYun(trigger)
+        let liunianBean = findLiuNian(dayunBean, year)
+        if (liunianBean != null) {
+          try {
+            liuNianScore = DataCenter.bazi.value.liunian_geju_score.get(liunianBean.trigger)?.get(key)
+          } catch (e) {
+            liuNianScore = 0
+          }
+        }
+      }
+    }
+
+  }
+  //console.log(key, result, dayunScore)
+  return (result + dayunScore + liuNianScore).toFixed(1)
+}
+</script>
+
+<template>
+  <el-row>
+    <el-col :span="16">
+      <div class="grid-container-10">
+        <el-text tag="ins" size="small" v-for="ss in shishenTexts">{{ getAvgScore(ss) }}</el-text>
+      </div>
+    </el-col>
+    <el-col :span="8">
+      <div class="grid-container-5">
+        <el-text tag="ins" size="small" v-for="wx in wuxingTexts">{{ getAvgScore(wx) }}</el-text>
+      </div>
+    </el-col>
+  </el-row>
+</template>
+
+<style scoped>
+.grid-container-10 {
+  display: grid;
+  grid-template-columns: repeat(10, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  //row-gap: 50px;
+  padding: 10px; /* 容器内边距 */
+}
+
+.grid-container-5 {
+  display: grid;
+  grid-template-columns: repeat(5, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  //row-gap: 50px;
+  padding: 10px; /* 容器内边距 */
+
+}
+</style>

+ 186 - 0
src/components/customer/ge_ju/TianGan_GaoNeng_GeJu.vue

@@ -0,0 +1,186 @@
+<script setup lang="ts">
+import {DataCenter} from "../../../DataCenter.ts";
+import {DaYunItem} from "../../../customer/SupportModels.ts";
+
+let tianganTexts = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
+
+function getShiShen(key: string) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.shishen_guanxi.get(key)
+  }
+  return result
+}
+
+function getWuXing(key: string) {
+  if (["甲", "乙", "寅", "卯"].indexOf(key) != -1) {
+    return "木"
+  }
+  if (["丙", "丁", "午", "巳"].indexOf(key) != -1) {
+    return "火"
+  }
+  if (["戊", "己", "辰", "戌", "丑", "未"].indexOf(key) != -1) {
+    return "土"
+  }
+  if (["庚", "辛", "申", "酉"].indexOf(key) != -1) {
+    return "金"
+  }
+  if (["壬", "癸", "子", "亥"].indexOf(key) != -1) {
+    return "水"
+  }
+  return ""
+}
+
+function getGeJu(key: string, isTianGan: boolean) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    if (isTianGan) {
+      result = DataCenter.bazi.value.tiangan_geju.get(key)
+    } else {
+      result = DataCenter.bazi.value.dizhi_geju.get(key)
+    }
+  }
+  return result
+}
+
+function isSelected(key: string) {
+  let shishen = getShiShen(key)
+  let wuxing = getWuXing(key)
+  if (shishen == DataCenter.lastKeyInGeJu.value || wuxing == DataCenter.lastKeyInGeJu.value) {
+    return {
+      "background-color": "#ff0000A0",
+    }
+  } else {
+    return {
+      "background-color": "transparent",
+    }
+  }
+}
+
+function getDaYunGeJu(key: string, isTianGan: boolean) {
+  let result = []
+  if (DataCenter.includeDaYunInGeJu.value == true) {
+    let dayunKey = null
+    let trigger = DataCenter.selectedDaYunInGeJu.value
+    if (trigger != null) {
+      dayunKey = trigger.toString().replace("运", "")
+    }
+
+    if (dayunKey != null) {
+      if (isTianGan) {
+        result = DataCenter.bazi.value.dayun_tiangan_geju.get(key).filter(dayunKey)
+      } else {
+        result = DataCenter.bazi.value.dayun_dizhi_geju.get(key).filter(dayunKey)
+      }
+    }
+  }
+  return result
+}
+
+function findDaYun(key: string) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    let dayunItems = DataCenter.bazi.value.dayun
+    for (let i = 0; i < dayunItems.length; i++) {
+      let item = dayunItems[i]
+      if (!item.is_dayun) {
+        continue
+      }
+      if (item.trigger == key) {
+        result = item
+        break
+      }
+    }
+  }
+  return result
+}
+
+function findLiuNian(dayun: DaYunItem, year: number) {
+  let result = null
+  if (dayun != null) {
+    for (let i = 0; i < dayun.liunian.length; i++) {
+      let ln = dayun.liunian[i]
+      if (ln.year == year) {
+        result = ln
+        break
+      }
+    }
+  }
+  return result
+}
+
+function getLiuNianGeJu(key: string, isTianGan: boolean) {
+  let result = []
+  if (DataCenter.includeDaYunInGeJu.value == true && DataCenter.includeLiuNianInGeJu.value == true) {
+    let dayunKey = null
+    let trigger = DataCenter.selectedDaYunInGeJu.value
+    if (trigger != null) {
+      dayunKey = trigger.toString().replace("运", "")
+    }
+
+    if (dayunKey != null) {
+      let year = 0
+      if (DataCenter.selectedLiuNianInGeJu.value != null) {
+        year = parseInt(DataCenter.selectedLiuNianInGeJu.value.toString())
+      }
+      let dayun = findDaYun(dayunKey)
+      let liunian = findLiuNian(dayun, year)
+
+      if (liunian != null) {
+        if (isTianGan) {
+          result = DataCenter.bazi.value.liunian_tiangan_geju.get(key).filter(liunian.trigger)
+        } else {
+          result = DataCenter.bazi.value.liunian_dizhi_geju.get(key).filter(liunian.trigger)
+        }
+      }
+    }
+  }
+  return result
+}
+</script>
+
+<template>
+  <div v-for="tg in tianganTexts">
+    <!--原局天干关系-->
+    <div>
+      <el-space direction="vertical" :style="isSelected(tg)">
+        <el-tooltip :show-after="500" v-for="item in getGeJu(tg,true)?.items"
+                    :content="item.arg1+item.arg2+item.guanxi+'('+item.getTotal()+')'"
+                    placement="top">
+          <el-text>{{ item?.guanxi }}{{ item?.shishen2 }}</el-text>
+        </el-tooltip>
+      </el-space>
+      <el-text :style="isSelected(tg)" v-if="getGeJu(tg,true)?.items.length==0">&nbsp;</el-text>
+    </div>
+    <!--大运天干关系-->
+    <div>
+      <el-space direction="vertical" :style="isSelected(tg)">
+        <el-tooltip :show-after="500" v-for="item in getDaYunGeJu(tg,true)"
+                    :content="item.arg1+item.arg2+item.guanxi+'('+item.getTotal()+')'"
+                    placement="top">
+          <el-text>{{ item?.guanxi }}{{ item?.shishen2 }}
+            <el-text size="small">(运)</el-text>
+          </el-text>
+        </el-tooltip>
+      </el-space>
+      <el-text :style="isSelected(tg)" v-if="getDaYunGeJu(tg,true)?.length==0">&nbsp;</el-text>
+    </div>
+    <!--流年天干关系-->
+    <div>
+      <el-space direction="vertical" :style="isSelected(tg)">
+        <el-tooltip :show-after="500" v-for="item in getLiuNianGeJu(tg,true)"
+                    :content="item.arg1+item.arg2+item.guanxi+'('+item.getTotal()+')'"
+                    placement="top">
+          <el-text>{{ item?.guanxi }}{{ item?.shishen2 }}
+            <el-text size="small">(年)</el-text>
+          </el-text>
+        </el-tooltip>
+      </el-space>
+      <el-text :style="isSelected(tg)" v-if="getLiuNianGeJu(tg,true)?.length==0">&nbsp;</el-text>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+
+</style>

+ 59 - 0
src/components/customer/ge_ju/TianGan_List.vue

@@ -0,0 +1,59 @@
+<script setup lang="ts">
+import {DataCenter} from "../../../DataCenter.ts";
+
+let tianganTexts = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
+
+function getShiShen(key: string) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.shishen_guanxi.get(key)
+  }
+  return result
+}
+
+function getPower(key: string) {
+  let result = ""
+  let value = 0
+  if (DataCenter.bazi.value != null) {
+    let ss = getShiShen(key)
+    result = "+"
+    value = DataCenter.bazi.value.powerDetail.getPower(ss)
+    if (value == 0) {
+      value = DataCenter.bazi.value.power_steps.get(ss)
+      if (value == null) {
+        value = 0
+      }
+    }
+    return result + value.toFixed(0)
+  }
+  return result
+}
+
+function hasInRaw(key: string) {
+  let result = false
+  if (DataCenter.bazi.value != null) {
+    let lst = DataCenter.bazi.value.allSiZhu()
+    for (let i = 0; i < lst.length; i++) {
+      if (lst[i].text == key) {
+        result = true
+        break
+      }
+    }
+  }
+  return result
+}
+</script>
+
+<template>
+  <div v-for="tg in tianganTexts">
+    <el-text tag="b" size="large">{{ tg }}
+      <el-text size="small">{{ getShiShen(tg) }}</el-text>
+    </el-text>
+    <br>
+    <el-text tag="ins" :type="hasInRaw(tg)?'primary':'info'">{{ getPower(tg) }}</el-text>
+  </div>
+</template>
+
+<style scoped>
+
+</style>

+ 187 - 0
src/components/customer/ge_ju/TianGan_ShiShen_Scores.vue

@@ -0,0 +1,187 @@
+<script setup lang="ts">
+import {DaYunItem, GeJuScore, SiZhuGeJu} from "../../../customer/SupportModels.ts";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let titles = ["官杀", "财星", "印绶", "食伤", "比劫"]
+let tianganTexts = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
+
+function getGeJu(key: string, isTianGan: boolean) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    if (isTianGan) {
+      result = DataCenter.bazi.value.tiangan_geju.get(key)
+    } else {
+      result = DataCenter.bazi.value.dizhi_geju.get(key)
+    }
+  }
+  return result
+}
+
+function getDaYunGeJu(key: string, isTianGan: boolean) {
+  let result = []
+  if (DataCenter.includeDaYunInGeJu.value == true) {
+    let dayunKey = null
+    let trigger = DataCenter.selectedDaYunInGeJu.value
+    if (trigger != null) {
+      dayunKey = trigger.toString().replace("运", "")
+    }
+
+    if (dayunKey != null) {
+      if (isTianGan) {
+        result = DataCenter.bazi.value.dayun_tiangan_geju.get(key).filter(dayunKey)
+      } else {
+        result = DataCenter.bazi.value.dayun_dizhi_geju.get(key).filter(dayunKey)
+      }
+    }
+  }
+  return result
+}
+
+function findDaYun(key: string) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    let dayunItems = DataCenter.bazi.value.dayun
+    for (let i = 0; i < dayunItems.length; i++) {
+      let item = dayunItems[i]
+      if (!item.is_dayun) {
+        continue
+      }
+      if (item.trigger == key) {
+        result = item
+        break
+      }
+    }
+  }
+  return result
+}
+
+function findLiuNian(dayun: DaYunItem, year: number) {
+  let result = null
+  if (dayun != null) {
+    for (let i = 0; i < dayun.liunian.length; i++) {
+      let ln = dayun.liunian[i]
+      if (ln.year == year) {
+        result = ln
+        break
+      }
+    }
+  }
+  return result
+}
+
+function getLiuNianGeJu(key: string, isTianGan: boolean) {
+  let result = []
+  if (DataCenter.includeDaYunInGeJu.value == true && DataCenter.includeLiuNianInGeJu.value == true) {
+    let dayunKey = null
+    let trigger = DataCenter.selectedDaYunInGeJu.value
+    if (trigger != null) {
+      dayunKey = trigger.toString().replace("运", "")
+    }
+
+    if (dayunKey != null) {
+      let year = 0
+      if (DataCenter.selectedLiuNianInGeJu.value != null) {
+        year = parseInt(DataCenter.selectedLiuNianInGeJu.value.toString())
+      }
+      let dayun = findDaYun(dayunKey)
+      let liunian = findLiuNian(dayun, year)
+
+      if (liunian != null) {
+        if (isTianGan) {
+          result = DataCenter.bazi.value.liunian_tiangan_geju.get(key).filter(liunian.trigger)
+        } else {
+          result = DataCenter.bazi.value.liunian_dizhi_geju.get(key).filter(liunian.trigger)
+        }
+      }
+    }
+  }
+  return result
+}
+
+function getScore(key: string, isTianGan: boolean, title: string) {
+  let result = new GeJuScore()
+  let raw: SiZhuGeJu = getGeJu(key, isTianGan)
+  if (raw != null) {
+    result.guan_sha += raw.guan_sha
+    result.cai_xing += raw.cai_xing
+    result.yin_shou += raw.yin_shou
+    result.shi_shang += raw.shi_shang
+    result.bi_jie += raw.bi_jie
+    result.total += raw.total
+  }
+  if (DataCenter.includeDaYunInGeJu.value == true) {
+    let items = getDaYunGeJu(key, isTianGan)
+    items.forEach(function (item) {
+      result.guan_sha += item.guan_sha
+      result.cai_xing += item.cai_xing
+      result.yin_shou += item.yin_shou
+      result.shi_shang += item.shi_shang
+      result.bi_jie += item.bi_jie
+      result.total += item.getTotal()
+    })
+  }
+
+  if (DataCenter.includeLiuNianInGeJu.value == true) {
+    let items = getLiuNianGeJu(key, isTianGan)
+    items.forEach(function (item) {
+      result.guan_sha += item.guan_sha
+      result.cai_xing += item.cai_xing
+      result.yin_shou += item.yin_shou
+      result.shi_shang += item.shi_shang
+      result.bi_jie += item.bi_jie
+      result.total += item.getTotal()
+    })
+  }
+
+  let value = 0
+  switch (title) {
+    case "官杀":
+      value = result?.guan_sha
+      break
+    case "财星":
+      value = result?.cai_xing
+      break
+    case "印绶":
+      value = result?.yin_shou
+      break
+    case "食伤":
+      value = result?.shi_shang
+      break
+    case "比劫":
+      value = result?.bi_jie
+      break
+    case "合计":
+      value = result?.total
+      break
+  }
+  return value
+}
+</script>
+
+<template>
+  <div v-for="title in titles">
+    <div class="grid-container" style="margin-top: -20px">
+      <el-text>{{ title }}</el-text>
+      <div v-for="tg in tianganTexts">
+        <el-text>{{ getScore(tg, true, title) }}</el-text>
+      </div>
+    </div>
+  </div>
+  <div class="grid-container" style="margin-top: -20px">
+    <el-text tag="b" type="danger">合计</el-text>
+    <div v-for="tg in tianganTexts">
+      <el-text tag="b" type="danger">{{ getScore(tg, true, "合计") }}</el-text>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-columns: repeat(13, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  //row-gap: 50px;
+  padding: 10px; /* 容器内边距 */
+}
+</style>

+ 188 - 0
src/components/customer/ge_ju/WuXing_Powers.vue

@@ -0,0 +1,188 @@
+<script setup lang="ts">
+import {DataCenter} from "../../../DataCenter.ts";
+import {Configs} from "../../../customer/Configs.ts";
+import {DaYunItem} from "../../../customer/SupportModels.ts";
+
+let shishenTexts = ["官", "杀", "财", "才", "印", "枭", "食", "伤", "比", "劫"]
+let wuxingTexts = ["木", "火", "土", "金", "水"]
+
+function getPowerStep(key: string, byWuXing: boolean) {
+  let result = 0
+  if (DataCenter.bazi.value != null) {
+    if (byWuXing) {
+      let wx = Configs.config_wuxing[key]
+      result = DataCenter.bazi.value.power_steps.get(wx)
+    } else {
+      let ss = Configs.config_shishen[DataCenter.bazi.value.ri_gan.text][key]
+      result = DataCenter.bazi.value.power_steps.get(ss)
+    }
+  }
+  return result
+}
+
+function findDaYun(key: string) {
+  let result = null
+  if (DataCenter.bazi.value != null) {
+    let dayunItems = DataCenter.bazi.value.dayun
+    for (let i = 0; i < dayunItems.length; i++) {
+      let item = dayunItems[i]
+      if (!item.is_dayun) {
+        continue
+      }
+      if (item.trigger == key) {
+        result = item
+        break
+      }
+    }
+  }
+  return result
+}
+
+function findLiuNian(dayun: DaYunItem, year: number) {
+  let result = null
+  if (dayun != null) {
+    for (let i = 0; i < dayun.liunian.length; i++) {
+      let ln = dayun.liunian[i]
+      if (ln.year == year) {
+        result = ln
+        break
+      }
+    }
+  }
+  return result
+}
+
+function getWuXingPowerPercentage(wx: string, mode: number) {
+  let result = 0
+  if (DataCenter.bazi.value != null) {
+    let detail = DataCenter.bazi.value.powerDetail
+    let extraPower = 0
+    let extraTotal = 0
+    let extraPower2 = 0
+    let extraTotal2 = 0
+
+    if (DataCenter.includeDaYunInGeJu.value == true && DataCenter.selectedDaYunInGeJu.value != null) {
+      let trigger = DataCenter.selectedDaYunInGeJu.value.toString().replace("运", "")
+      let wx1 = Configs.config_wuxing[trigger[0]]
+      let wx2 = Configs.config_wuxing[trigger[1]]
+      let power1 = getPowerStep(trigger[0], true)
+      let power2 = getPowerStep(trigger[1], true)
+      extraTotal = power1 + power2
+      if (wx == wx1) {
+        extraPower = power1
+      } else if (wx == wx2) {
+        extraPower = power2
+      }
+
+      if (DataCenter.includeLiuNianInGeJu.value == true && DataCenter.selectedLiuNianInGeJu.value != null) {
+        let year = parseInt(DataCenter.selectedLiuNianInGeJu.value.toString())
+        let dayun = findDaYun(trigger)
+        let liunian = findLiuNian(dayun, year)
+        if (liunian != null) {
+          let wx3 = Configs.config_wuxing[liunian.gan_text]
+          let wx4 = Configs.config_wuxing[liunian.zhi_text]
+          let power3 = getPowerStep(liunian.gan_text, true)
+          let power4 = getPowerStep(liunian.zhi_text, true)
+          extraTotal2 = power3 + power4
+          if (wx == wx3) {
+            extraPower2 = power3
+          } else if (wx == wx4) {
+            extraPower2 = power4
+          }
+        }
+      }
+    }
+
+
+    let wxPower = detail.getPower(wx, mode) + extraPower + extraPower2
+    let totalPower = detail.getWuXingTotal(mode) + extraTotal + extraTotal2
+    result = Math.round((wxPower * 100 / totalPower))
+  }
+  return result
+}
+
+function getShiShenPowerPercentage(ss: string, mode: number) {
+  let result = 0
+  if (DataCenter.bazi.value != null) {
+    let detail = DataCenter.bazi.value.powerDetail
+    let extraPower = 0
+    let extraTotal = 0
+    let extraPower2 = 0
+    let extraTotal2 = 0
+
+    if (DataCenter.includeDaYunInGeJu.value == true && DataCenter.selectedDaYunInGeJu.value != null) {
+      let trigger = DataCenter.selectedDaYunInGeJu.value.toString().replace("运", "")
+      let riyuan = DataCenter.bazi.value.ri_gan.text
+      let ss1 = Configs.config_shishen[riyuan][trigger[0]]
+      let ss2 = Configs.config_wuxing[riyuan][trigger[1]]
+      let power1 = getPowerStep(trigger[0], false)
+      let power2 = getPowerStep(trigger[1], false)
+      extraTotal = power1 + power2
+      if (ss == ss1) {
+        extraPower = power1
+      } else if (ss == ss2) {
+        extraPower = power2
+      }
+
+      if (DataCenter.includeLiuNianInGeJu.value == true && DataCenter.selectedLiuNianInGeJu.value != null) {
+        let year = parseInt(DataCenter.selectedLiuNianInGeJu.value.toString())
+        let dayun = findDaYun(trigger)
+        let liunian = findLiuNian(dayun, year)
+        if (liunian != null) {
+          let ss3 = Configs.config_shishen[riyuan][liunian.gan_text]
+          let ss4 = Configs.config_shishen[riyuan][liunian.zhi_text]
+          let power3 = getPowerStep(liunian.gan_text, false)
+          let power4 = getPowerStep(liunian.zhi_text, false)
+          extraTotal2 = power3 + power4
+          if (ss == ss3) {
+            extraPower2 = power3
+          } else if (ss == ss4) {
+            extraPower2 = power4
+          }
+        }
+      }
+    }
+    let ssPower = detail.getPower(ss, mode) + extraPower + extraPower2
+    let ssTotal = detail.getShiShenTotal(mode) + extraTotal + extraTotal2
+    result = Math.round((ssPower * 100 / ssTotal))
+  }
+  return result
+}
+
+</script>
+
+<template>
+  <el-row>
+    <el-col :span="16">
+      <div class="grid-container-10">
+        <el-text size="small" v-for="ss in shishenTexts">{{ getShiShenPowerPercentage(ss, 1) }}%</el-text>
+      </div>
+    </el-col>
+    <el-col :span="8">
+      <div class="grid-container-5">
+        <el-text size="small" v-for="wx in wuxingTexts">{{ getWuXingPowerPercentage(wx, 1) }}%</el-text>
+      </div>
+    </el-col>
+  </el-row>
+</template>
+
+<style scoped>
+.grid-container-10 {
+  display: grid;
+  grid-template-columns: repeat(10, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  //row-gap: 50px;
+  padding: 10px; /* 容器内边距 */
+}
+
+.grid-container-5 {
+  display: grid;
+  grid-template-columns: repeat(5, 1fr); /* 三列,每列大小相同 */
+  grid-template-rows: auto auto; /* 两行,行高自动 */
+  gap: 10px; /* 网格间隙 */
+  //row-gap: 50px;
+  padding: 10px; /* 容器内边距 */
+
+}
+</style>

+ 36 - 0
src/components/customer/ge_ju/Xiong_Ji_Tip.vue

@@ -0,0 +1,36 @@
+<script setup lang="ts">
+import {DataCenter} from "../../../DataCenter.ts";
+
+let shishenTexts = ["官", "杀", "财", "才", "印", "枭", "食", "伤", "比", "劫"]
+
+function getXiongJi(key: string) {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.geju_xiongji.get(key)
+  }
+  return result
+}
+</script>
+
+<template>
+  <div v-for="ss in shishenTexts">
+    <el-row v-if="getXiongJi(ss).length>0">
+      <el-col :span="2">
+        <el-text tag="b">{{ ss }}</el-text>
+      </el-col>
+      <el-col :span="22" align="left">
+        <el-space size="large">
+          <div v-for="xj in getXiongJi(ss)">
+            <el-tooltip :content="xj.tip" :show-after="500">
+              <el-text>{{ xj.name }}</el-text>
+            </el-tooltip>
+          </div>
+        </el-space>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<style scoped>
+
+</style>

+ 80 - 0
src/components/customer/zhen_duan/DaYunZhenDuan.vue

@@ -0,0 +1,80 @@
+<script setup lang="ts">
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let getDaYunJianYi = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.dayun.jianyi
+  }
+  return result
+})
+
+let getDaYunCanKao = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.dayun.cankao
+  }
+  return result
+})
+
+function chooseAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.dayun.cankao.forEach(function (item) {
+      item.selected = true
+    })
+    DataCenter.bazi.value.zhenduan.dayun.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function chooseDefault() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.dayun.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.dayun.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function cancelAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.dayun.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.dayun.jianyi.forEach(function (item) {
+      item.selected = false
+    })
+  }
+}
+</script>
+
+<template>
+  <el-card>
+    <el-scrollbar height="400" noresize>
+      <div align="left">
+        <el-checkbox style="width: 100%" v-model="jianyi.selected" v-for="jianyi in getDaYunJianYi">{{
+            jianyi.content
+          }}
+        </el-checkbox>
+        <el-checkbox style="width: 100%" v-model="cankao.selected" v-for="cankao in getDaYunCanKao">{{
+            cankao.content
+          }}
+          <el-text type="danger">{{ cankao.tip }}</el-text>
+        </el-checkbox>
+      </div>
+    </el-scrollbar>
+    <el-space style="margin-top: 20px;">
+      <el-button type="primary" @click="chooseAll">全部选择</el-button>
+      <el-button type="primary" @click="chooseDefault">默认选择</el-button>
+      <el-button type="danger" @click="cancelAll">全部取消</el-button>
+    </el-space>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 104 - 0
src/components/customer/zhen_duan/GaoNengZhenDuan.vue

@@ -0,0 +1,104 @@
+<script setup lang="ts">
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let getGaoNengTexts = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    let ks = DataCenter.bazi.value.zhenduan.gaoneng.keys()
+    let key = null
+    while ((key = ks.next()) != null) {
+      result.push(key)
+    }
+  }
+  return result
+})
+
+function getGaoNengJianYi(key: string) {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.gaoneng.get(key).jianyi
+  }
+  return result
+}
+
+function getGaoNengCanKao(key: string) {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.gaoneng.get(key).cankao
+  }
+  return result
+}
+
+
+function chooseAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.gaoneng.forEach(function (value) {
+      value.jianyi.forEach(function (item) {
+        item.selected = true
+      })
+      value.cankao.forEach(function (item) {
+        item.selected = true
+      })
+    })
+  }
+}
+
+function chooseDefault() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.gaoneng.forEach(function (value) {
+      value.jianyi.forEach(function (item) {
+        item.selected = true
+      })
+      value.cankao.forEach(function (item) {
+        item.selected = false
+      })
+    })
+  }
+}
+
+function cancelAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.gaoneng.forEach(function (value) {
+      value.jianyi.forEach(function (item) {
+        item.selected = false
+      })
+      value.cankao.forEach(function (item) {
+        item.selected = false
+      })
+    })
+  }
+}
+</script>
+
+<template>
+  <el-card>
+    <el-scrollbar height="400" noresize>
+      <div align="left" v-for="text in getGaoNengTexts">
+        <el-text>{{ text }}</el-text>
+        <el-checkbox style="width: 100%;"
+                     v-model="jianyi.selected"
+                     v-for="jianyi in getGaoNengJianYi(text)">
+          {{
+            jianyi.content
+          }}
+        </el-checkbox>
+
+        <el-checkbox style="width: 100%" v-model="cankao.selected" v-for="cankao in getGaoNengCanKao(text)">{{
+            cankao.content
+          }}
+          <el-text type="danger">{{ cankao.tip }}</el-text>
+        </el-checkbox>
+      </div>
+    </el-scrollbar>
+    <el-space style="margin-top: 20px;">
+      <el-button type="primary" @click="chooseAll">全部选择</el-button>
+      <el-button type="primary" @click="chooseDefault">默认选择</el-button>
+      <el-button type="danger" @click="cancelAll">全部取消</el-button>
+    </el-space>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 83 - 0
src/components/customer/zhen_duan/GeJuZhenDuan.vue

@@ -0,0 +1,83 @@
+<script setup lang="ts">
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let getGeJuJianYi = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.geju.jianyi
+  }
+  return result
+})
+
+let getGeJuCanKao = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.geju.cankao
+  }
+  return result
+})
+
+function chooseAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.geju.cankao.forEach(function (item) {
+      item.selected = true
+    })
+    DataCenter.bazi.value.zhenduan.geju.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function chooseDefault() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.geju.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.geju.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function cancelAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.geju.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.geju.jianyi.forEach(function (item) {
+      item.selected = false
+    })
+  }
+}
+</script>
+
+<template>
+  <el-card>
+    <el-scrollbar height="400" noresize>
+      <div align="left">
+        <el-text type="danger">注意:格局指的不是马上会体现出来的特性,而是随着大运流年的流转触发。
+        </el-text>
+        <el-checkbox style="width: 100%" v-model="jianyi.selected" v-for="jianyi in getGeJuJianYi">{{
+            jianyi.content
+          }}
+        </el-checkbox>
+
+        <el-checkbox style="width: 100%" v-model="cankao.selected" v-for="cankao in getGeJuCanKao">{{
+            cankao.content
+          }}
+          <el-text type="danger">{{ cankao.tip }}</el-text>
+        </el-checkbox>
+      </div>
+    </el-scrollbar>
+    <el-space style="margin-top: 20px;">
+      <el-button type="primary" @click="chooseAll">全部选择</el-button>
+      <el-button type="primary" @click="chooseDefault">默认选择</el-button>
+      <el-button type="danger" @click="cancelAll">全部取消</el-button>
+    </el-space>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 81 - 0
src/components/customer/zhen_duan/JianKangZhenDuan.vue

@@ -0,0 +1,81 @@
+<script setup lang="ts">
+
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let getJianKangJianYi = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.jiankang.jianyi
+  }
+  return result
+})
+
+let getJianKangCanKao = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.jiankang.cankao
+  }
+  return result
+})
+
+function chooseAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.jiankang.cankao.forEach(function (item) {
+      item.selected = true
+    })
+    DataCenter.bazi.value.zhenduan.jiankang.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function chooseDefault() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.jiankang.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.jiankang.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function cancelAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.jiankang.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.jiankang.jianyi.forEach(function (item) {
+      item.selected = false
+    })
+  }
+}
+</script>
+
+<template>
+  <el-card>
+    <el-scrollbar height="400" noresize>
+      <div align="left">
+        <el-checkbox style="width: 100%" v-model="jianyi.selected" v-for="jianyi in getJianKangJianYi">{{
+            jianyi.content
+          }}
+        </el-checkbox>
+        <el-checkbox style="width: 100%" v-model="cankao.selected" v-for="cankao in getJianKangCanKao">{{
+            cankao.content
+          }}
+          <el-text type="danger">{{ cankao.tip }}</el-text>
+        </el-checkbox>
+      </div>
+    </el-scrollbar>
+    <el-space style="margin-top: 20px;">
+      <el-button type="primary" @click="chooseAll">全部选择</el-button>
+      <el-button type="primary" @click="chooseDefault">默认选择</el-button>
+      <el-button type="danger" @click="cancelAll">全部取消</el-button>
+    </el-space>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 81 - 0
src/components/customer/zhen_duan/MenHuZhenDuan.vue

@@ -0,0 +1,81 @@
+<script setup lang="ts">
+
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let getMenHuJianYi = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.menhu.jianyi
+  }
+  return result
+})
+
+let getMenHuCanKao = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.menhu.cankao
+  }
+  return result
+})
+
+function chooseAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.menhu.cankao.forEach(function (item) {
+      item.selected = true
+    })
+    DataCenter.bazi.value.zhenduan.menhu.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function chooseDefault() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.menhu.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.menhu.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function cancelAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.menhu.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.menhu.jianyi.forEach(function (item) {
+      item.selected = false
+    })
+  }
+}
+</script>
+
+<template>
+  <el-card>
+    <el-scrollbar height="400" noresize>
+      <div align="left">
+        <el-checkbox style="width: 100%" v-model="jianyi.selected" v-for="jianyi in getMenHuJianYi">{{
+            jianyi.content
+          }}
+        </el-checkbox>
+        <el-checkbox style="width: 100%" v-model="cankao.selected" v-for="cankao in getMenHuCanKao">{{
+            cankao.content
+          }}
+          <el-text type="danger">{{ cankao.tip }}</el-text>
+        </el-checkbox>
+      </div>
+    </el-scrollbar>
+    <el-space style="margin-top: 20px;">
+      <el-button type="primary" @click="chooseAll">全部选择</el-button>
+      <el-button type="primary" @click="chooseDefault">默认选择</el-button>
+      <el-button type="danger" @click="cancelAll">全部取消</el-button>
+    </el-space>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 81 - 0
src/components/customer/zhen_duan/QingGanZhenDuan.vue

@@ -0,0 +1,81 @@
+<script setup lang="ts">
+
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let getQingGanJianYi = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.qinggan.jianyi
+  }
+  return result
+})
+
+let getQingGanCanKao = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.qinggan.cankao
+  }
+  return result
+})
+
+function chooseAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.qinggan.cankao.forEach(function (item) {
+      item.selected = true
+    })
+    DataCenter.bazi.value.zhenduan.qinggan.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function chooseDefault() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.qinggan.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.qinggan.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function cancelAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.qinggan.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.qinggan.jianyi.forEach(function (item) {
+      item.selected = false
+    })
+  }
+}
+</script>
+
+<template>
+  <el-card>
+    <el-scrollbar height="400" noresize>
+      <div align="left">
+        <el-checkbox style="width: 100%" v-model="jianyi.selected" v-for="jianyi in getQingGanJianYi">{{
+            jianyi.content
+          }}
+        </el-checkbox>
+        <el-checkbox style="width: 100%" v-model="cankao.selected" v-for="cankao in getQingGanCanKao">{{
+            cankao.content
+          }}
+          <el-text type="danger">{{ cankao.tip }}</el-text>
+        </el-checkbox>
+      </div>
+    </el-scrollbar>
+    <el-space style="margin-top: 20px;">
+      <el-button type="primary" @click="chooseAll">全部选择</el-button>
+      <el-button type="primary" @click="chooseDefault">默认选择</el-button>
+      <el-button type="danger" @click="cancelAll">全部取消</el-button>
+    </el-space>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 81 - 0
src/components/customer/zhen_duan/ShenShaZhenDuan.vue

@@ -0,0 +1,81 @@
+<script setup lang="ts">
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let getShenShaJianYi = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.shensha.jianyi
+  }
+  return result
+})
+
+let getShenShaCanKao = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.shensha.cankao
+  }
+  return result
+})
+
+function chooseAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.shensha.cankao.forEach(function (item) {
+      item.selected = true
+    })
+    DataCenter.bazi.value.zhenduan.shensha.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function chooseDefault() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.shensha.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.shensha.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function cancelAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.shensha.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.shensha.jianyi.forEach(function (item) {
+      item.selected = false
+    })
+  }
+}
+</script>
+
+<template>
+  <el-card>
+    <el-scrollbar height="400" noresize>
+      <div align="left">
+        <el-checkbox style="width: 100%" v-model="jianyi.selected" v-for="jianyi in getShenShaJianYi">{{
+            jianyi.content
+          }}
+        </el-checkbox>
+
+        <el-checkbox style="width: 100%" v-model="cankao.selected" v-for="cankao in getShenShaCanKao">{{
+            cankao.content
+          }}
+          <el-text type="danger">{{ cankao.tip }}</el-text>
+        </el-checkbox>
+      </div>
+    </el-scrollbar>
+    <el-space style="margin-top: 20px;">
+      <el-button type="primary" @click="chooseAll">全部选择</el-button>
+      <el-button type="primary" @click="chooseDefault">默认选择</el-button>
+      <el-button type="danger" @click="cancelAll">全部取消</el-button>
+    </el-space>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 81 - 0
src/components/customer/zhen_duan/ShiShenZhenDuan.vue

@@ -0,0 +1,81 @@
+<script setup lang="ts">
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let getShiShenJianYi = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.shishen.jianyi
+  }
+  return result
+})
+
+let getShiShenCanKao = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.shishen.cankao
+  }
+  return result
+})
+
+function chooseAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.shishen.cankao.forEach(function (item) {
+      item.selected = true
+    })
+    DataCenter.bazi.value.zhenduan.shishen.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function chooseDefault() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.shishen.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.shishen.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function cancelAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.shishen.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.shishen.jianyi.forEach(function (item) {
+      item.selected = false
+    })
+  }
+}
+</script>
+
+<template>
+  <el-card>
+    <el-scrollbar height="400" noresize>
+      <div align="left">
+        <el-checkbox style="width: 100%" v-model="jianyi.selected" v-for="jianyi in getShiShenJianYi">{{
+            jianyi.content
+          }}
+        </el-checkbox>
+
+        <el-checkbox style="width: 100%" v-model="cankao.selected" v-for="cankao in getShiShenCanKao">{{
+            cankao.content
+          }}
+          <el-text type="danger">{{ cankao.tip }}</el-text>
+        </el-checkbox>
+      </div>
+    </el-scrollbar>
+    <el-space style="margin-top: 20px;">
+      <el-button type="primary" @click="chooseAll">全部选择</el-button>
+      <el-button type="primary" @click="chooseDefault">默认选择</el-button>
+      <el-button type="danger" @click="cancelAll">全部取消</el-button>
+    </el-space>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 84 - 0
src/components/customer/zhen_duan/WuXingZhenDuan.vue

@@ -0,0 +1,84 @@
+<script setup lang="ts">
+
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let getWuXingJianYi = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.wuxing.jianyi
+  }
+  return result
+})
+
+let getWuXingCanKao = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.wuxing.cankao
+  }
+  return result
+})
+
+function chooseAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.wuxing.cankao.forEach(function (item) {
+      item.selected = true
+    })
+    DataCenter.bazi.value.zhenduan.wuxing.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function chooseDefault() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.wuxing.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.wuxing.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function cancelAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.wuxing.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.wuxing.jianyi.forEach(function (item) {
+      item.selected = false
+    })
+  }
+}
+
+</script>
+
+<template>
+  <el-card>
+    <el-scrollbar height="400" noresize>
+      <div align="left">
+        <el-checkbox style="width: 100%" v-model="jianyi.selected" v-for="jianyi in getWuXingJianYi">{{
+            jianyi.content
+          }}
+        </el-checkbox>
+
+        <el-checkbox style="width: 100%" v-model="cankao.selected" v-for="cankao in getWuXingCanKao">{{
+            cankao.content
+          }}
+          <el-text type="danger">{{ cankao.tip }}</el-text>
+        </el-checkbox>
+      </div>
+    </el-scrollbar>
+    <el-space style="margin-top: 20px;">
+      <el-button type="primary" @click="chooseAll">全部选择</el-button>
+      <el-button type="primary" @click="chooseDefault">默认选择</el-button>
+      <el-button type="danger" @click="cancelAll">全部取消</el-button>
+    </el-space>
+  </el-card>
+
+</template>
+
+<style scoped>
+
+</style>

+ 80 - 0
src/components/customer/zhen_duan/YinYuanZhenDuan.vue

@@ -0,0 +1,80 @@
+<script setup lang="ts">
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let getYinYuanJianYi = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.yinyuan.jianyi
+  }
+  return result
+})
+
+let getYinYuanCanKao = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.yinyuan.cankao
+  }
+  return result
+})
+
+function chooseAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.yinyuan.cankao.forEach(function (item) {
+      item.selected = true
+    })
+    DataCenter.bazi.value.zhenduan.yinyuan.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function chooseDefault() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.yinyuan.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.yinyuan.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function cancelAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.yinyuan.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.yinyuan.jianyi.forEach(function (item) {
+      item.selected = false
+    })
+  }
+}
+</script>
+
+<template>
+  <el-card>
+    <el-scrollbar height="400" noresize>
+      <div align="left">
+        <el-checkbox style="width: 100%" v-model="jianyi.selected" v-for="jianyi in getYinYuanJianYi">{{
+            jianyi.content
+          }}
+        </el-checkbox>
+        <el-checkbox style="width: 100%" v-model="cankao.selected" v-for="cankao in getYinYuanCanKao">{{
+            cankao.content
+          }}
+          <el-text type="danger">{{ cankao.tip }}</el-text>
+        </el-checkbox>
+      </div>
+    </el-scrollbar>
+    <el-space style="margin-top: 20px;">
+      <el-button type="primary" @click="chooseAll">全部选择</el-button>
+      <el-button type="primary" @click="chooseDefault">默认选择</el-button>
+      <el-button type="danger" @click="cancelAll">全部取消</el-button>
+    </el-space>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 81 - 0
src/components/customer/zhen_duan/ZuoZhiZhenDuan.vue

@@ -0,0 +1,81 @@
+<script setup lang="ts">
+import {computed} from "vue";
+import {DataCenter} from "../../../DataCenter.ts";
+
+let getZuoZhiJianYi = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.zuozhi.jianyi
+  }
+  return result
+})
+
+let getZuoZhiCanKao = computed(function () {
+  let result = []
+  if (DataCenter.bazi.value != null) {
+    result = DataCenter.bazi.value.zhenduan.zuozhi.cankao
+  }
+  return result
+})
+
+function chooseAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.zuozhi.cankao.forEach(function (item) {
+      item.selected = true
+    })
+    DataCenter.bazi.value.zhenduan.zuozhi.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function chooseDefault() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.zuozhi.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.zuozhi.jianyi.forEach(function (item) {
+      item.selected = true
+    })
+  }
+}
+
+function cancelAll() {
+  if (DataCenter.bazi.value != null) {
+    DataCenter.bazi.value.zhenduan.zuozhi.cankao.forEach(function (item) {
+      item.selected = false
+    })
+    DataCenter.bazi.value.zhenduan.zuozhi.jianyi.forEach(function (item) {
+      item.selected = false
+    })
+  }
+}
+</script>
+
+<template>
+  <el-card>
+    <el-scrollbar height="400" noresize>
+      <div align="left">
+        <el-checkbox style="width: 100%" v-model="jianyi.selected" v-for="jianyi in getZuoZhiJianYi">{{
+            jianyi.content
+          }}
+        </el-checkbox>
+
+        <el-checkbox style="width: 100%" v-model="cankao.selected" v-for="cankao in getZuoZhiCanKao">{{
+            cankao.content
+          }}
+          <el-text type="danger">{{ cankao.tip }}</el-text>
+        </el-checkbox>
+      </div>
+    </el-scrollbar>
+    <el-space style="margin-top: 20px;">
+      <el-button type="primary" @click="chooseAll">全部选择</el-button>
+      <el-button type="primary" @click="chooseDefault">默认选择</el-button>
+      <el-button type="danger" @click="cancelAll">全部取消</el-button>
+    </el-space>
+  </el-card>
+</template>
+
+<style scoped>
+
+</style>

+ 336 - 0
src/customer/APICenter.ts

@@ -0,0 +1,336 @@
+import {
+    AreaResult,
+    BaZi,
+    DeleteUserRequest,
+    LoadUserRequest,
+    LoginRequest,
+    LoginResult,
+    NongLiRequest,
+    NongliResult,
+    SiZhuCheckResult,
+    SiZhuRequest,
+    SiZhuResult,
+    UserInfo,
+    XinLiRequest,
+    XinLiResult
+} from "./SupportModels.ts";
+import {Tools} from "../Tools.ts";
+import {DataCenter} from "../DataCenter.ts";
+
+export namespace APICenter {
+
+
+    let sendingTime: Map<string, number> = new Map()
+
+    export let debugMode = true
+
+    function getDeviceFingerprint() {
+        var fingerprint = {
+            userAgent: navigator.userAgent,
+            screenResolution: [screen.width, screen.height],
+            colorDepth: screen.colorDepth,
+            timezoneOffset: new Date().getTimezoneOffset(),
+            language: navigator.language,
+            //plugins: Array.from(navigator.plugins).map(plugin => plugin.name),
+            //canvasFingerprint: getCanvasFingerprint()
+        };
+        return fingerprint;
+    }
+
+    export function login(account: string, password: string, cb: (result: LoginResult) => void) {
+        let request = new LoginRequest()
+        request.account = account
+        request.password = password
+        let finger = getDeviceFingerprint()
+        request.userAgent = finger.userAgent.toString()
+        request.screenResolution = finger.screenResolution.toString()
+        request.colorDepth = finger.colorDepth.toString()
+        request.timezoneOffset = finger.timezoneOffset.toString()
+        request.language = finger.language.toString()
+
+        post(getServerUrl() + "login", beanToObject(request), function (response: string) {
+            try {
+                let result = LoginResult.build(response)
+                if (result.code > 0) {
+                    Tools.setCookie("yx_uname", result.name)
+                    Tools.setCookie("yx_token", result.token)
+                    Tools.setCookie("yx_uid", result.uid)
+                } else {
+                    Tools.removeCookie("yx_uname")
+                    Tools.removeCookie("yx_token")
+                    Tools.removeCookie("yx_uid")
+                }
+                cb && cb(result)
+            } catch (e) {
+                console.error(e)
+                cb && cb(null)
+            }
+        })
+    }
+
+    export function requestByXinLi(name: string, isMan: boolean, xinliResult: XinLiResult, areaResult: AreaResult, cb: (code: number) => void) {
+        let token = Tools.getCookie("yx_token")
+        if (token == null) {
+            Tools.showMessage("用户信息有误,请重新登录后重试")
+            return
+        }
+        let request = new XinLiRequest()
+        request.token = token
+        request.uid = Tools.getCookie("yx_uid")
+        request.name = name
+        request.isMan = isMan
+
+        request.year = xinliResult.year
+        request.month = xinliResult.month
+        request.day = xinliResult.day
+        request.hourMode = xinliResult.hourMode
+        request.hour = xinliResult.hour
+        request.minute = xinliResult.minute
+
+        request.areaMode = areaResult.mode
+        request.sheng = areaResult.sheng
+        request.shi = areaResult.shi
+        request.qu = areaResult.qu
+
+        post(getServerUrl() + "getSiZhu", beanToObject(request), function (response: string) {
+            try {
+                let code = resolveResponse(response)
+                cb && cb(code)
+            } catch (e) {
+                console.error(e)
+                cb && cb(-200)
+            }
+        })
+    }
+
+    export function requestByNongLi(name: string, isMan: boolean, nongliResult: NongliResult, areaResult: AreaResult, cb: (code: number) => void) {
+        let token = Tools.getCookie("yx_token")
+        if (token == null) {
+            Tools.showMessage("用户信息有误,请重新登录后重试")
+            return
+        }
+
+        let request = new NongLiRequest()
+        request.uid = Tools.getCookie("yx_uid")
+        request.token = token
+        request.name = name
+        request.isMan = isMan
+
+        request.year = nongliResult.year
+        request.month = nongliResult.month
+        request.day = nongliResult.day
+        request.hourMode = nongliResult.hourMode
+        request.hour = nongliResult.hour
+        request.minute = nongliResult.minute
+
+        request.areaMode = areaResult.mode
+        request.sheng = areaResult.sheng
+        request.shi = areaResult.shi
+        request.qu = areaResult.qu
+
+        post(getServerUrl() + "getSiZhuByNongLi", beanToObject(request), function (response: string) {
+            try {
+                let code = resolveResponse(response)
+                cb && cb(code)
+            } catch (e) {
+                console.error(e)
+                cb && cb(-200)
+            }
+        })
+    }
+
+    export function requestBySiZhu(name: string, isMan: boolean, sizhuResult: SiZhuResult, cb: (checker: SiZhuCheckResult, code: number) => void) {
+        let token = Tools.getCookie("yx_token")
+        if (token == null) {
+            Tools.showMessage("用户信息有误,请重新登录后重试")
+            return
+        }
+
+        let request = new SiZhuRequest()
+        request.uid = Tools.getCookie("yx_uid")
+        request.token = token
+        request.name = name
+        request.isMan = isMan
+        request.niangan = sizhuResult.niangan
+        request.nianzhi = sizhuResult.nianzhi
+        request.yuegan = sizhuResult.yuegan
+        request.yuezhi = sizhuResult.yuezhi
+        request.rigan = sizhuResult.rigan
+        request.rizhi = sizhuResult.rizhi
+        request.shigan = sizhuResult.shigan
+        request.shizhi = sizhuResult.shizhi
+        request.hourMode = sizhuResult.hourMode
+        request.ignoreError = sizhuResult.ignoreError
+
+        post(getServerUrl() + "getSiZhuByTexts", beanToObject(request), function (response: string) {
+            try {
+                let obj = JSON.parse(response)
+                if (obj["code"] < 0) {
+                    let checker = SiZhuCheckResult.build(obj["data"])
+                    cb && cb(checker, obj["code"])
+                } else {
+                    let code = resolveResponse(response)
+                    cb && cb(null, code)
+                }
+            } catch (e) {
+                console.error(e)
+                cb && cb(null, -200)
+            }
+        })
+    }
+
+    export function saveUser(request: UserInfo, cb: () => void) {
+        post(getServerUrl() + "saveUser", beanToObject(request), function (response: string) {
+            try {
+                let obj = JSON.parse(response)
+                let ary = obj["data"]
+                let temp = []
+                ary.forEach(function (data) {
+                    let info = new UserInfo()
+                    fillDataFromObject(info, data)
+                    temp.push(info)
+                })
+                DataCenter.ownerUsers.value = temp
+                console.log("共获得", DataCenter.ownerUsers.value.length, "条数据")
+                cb && cb()
+            } catch (e) {
+                console.error(e)
+                cb && cb()
+            }
+        })
+    }
+
+    export function loadUsers(cb: () => void) {
+        let request = new LoadUserRequest()
+        request.owner_id = DataCenter.owernId
+        post(getServerUrl() + "loadUser", beanToObject(request), function (response: string) {
+            try {
+                let obj = JSON.parse(response)
+                let ary = obj["data"]
+                let temp = []
+                ary.forEach(function (data) {
+                    let info = new UserInfo()
+                    fillDataFromObject(info, data)
+                    temp.push(info)
+                })
+                DataCenter.ownerUsers.value = temp
+                console.log("共获得", DataCenter.ownerUsers.value.length, "条数据")
+            } catch (e) {
+                console.error(e)
+            }
+            cb && cb()
+        })
+    }
+
+    export function deleteUser(id: number) {
+        let request = new DeleteUserRequest()
+        request.owner_id = DataCenter.owernId
+        request.user_id = id
+        post(getServerUrl() + "deleteUser", beanToObject(request), function (response: string) {
+            try {
+                let obj = JSON.parse(response)
+                let ary = obj["data"]
+                let temp = []
+                ary.forEach(function (data) {
+                    let info = new UserInfo()
+                    fillDataFromObject(info, data)
+                    temp.push(info)
+                })
+                DataCenter.ownerUsers.value = temp
+                console.log("共获得", DataCenter.ownerUsers.value.length, "条数据")
+            } catch (e) {
+                console.error(e)
+            }
+        })
+    }
+
+    function fillDataFromObject(bean: any, obj: object) {
+        Object.keys(obj).forEach(function (key) {
+            bean[key] = obj[key]
+        })
+    }
+
+    function resolveResponse(response: string) {
+        let obj = JSON.parse(response)
+        console.log("raw:", obj)
+        if (obj["code"] == -100) {
+            Tools.showMessage("token有误,请登出后重试")
+            return -100
+        }
+        if (obj["code"] == -200) {
+            return -200
+        }
+        let bazi = BaZi.build(obj["data"])
+        DataCenter.bazi.value = bazi
+        DataCenter.powerMode.value = 1
+        DataCenter.dayunIndex.value = null
+        DataCenter.curDaYun.value = null
+        DataCenter.curLiuNianList.value = []
+        DataCenter.liunianIndex.value = null
+        DataCenter.curLiuNian.value = null
+        DataCenter.liuyueIndex.value = null
+        DataCenter.curLiuYue.value = null
+        DataCenter.liuriIndex.value = null
+        DataCenter.curLiuRi.value = null
+        DataCenter.includeDaYunInGeJu.value = false
+        DataCenter.includeLiuNianInGeJu.value = false
+        DataCenter.selectedDaYunInGeJu.value = null
+        DataCenter.selectedLiuNianInGeJu.value = null
+        DataCenter.calcQuShi()
+        DataCenter.calcRiYunShi()
+        return 200
+    }
+
+    function getServerUrl() {
+        if (!debugMode) {
+            return "https://yixuefrp.cxhy.cn/wx/"
+        } else {
+            return "http://127.0.0.1:13008/wx/"
+        }
+    }
+
+    export function beanToObject(bean: object) {
+        let result = {}
+        Object.keys(bean).forEach(function (key) {
+            result[key] = bean[key]
+        })
+        return result
+    }
+
+    function post(url: string, data: object, cb: (response: string) => void) {
+        let tm = Date.now()
+        let allow: boolean = false
+        if (!sendingTime.has(url)) {
+            sendingTime.set(url, tm)
+            allow = true
+        } else {
+            let last = sendingTime.get(url)
+
+            if (tm - last > 1000) {
+                sendingTime.set(url, tm)
+                allow = true
+            }
+        }
+        if (!allow) {
+            cb && cb(null)
+            Tools.showMessage("操作太快了,请慢一点")
+            return
+        }
+
+        let requst = new XMLHttpRequest()
+        requst.open("POST", url, true)
+        requst.setRequestHeader('Content-Type', 'application/json');
+        //requst.setRequestHeader('Access-Control-Allow-Origin', '*');
+        let dt = JSON.stringify(data)
+        requst.onreadystatechange = function () {
+            if (requst.readyState == XMLHttpRequest.DONE) {
+                if (requst.status == 200) {
+                    cb && cb(requst.responseText)
+                } else {
+                    console.error(requst.statusText)
+                }
+            }
+        }
+        requst.send(dt)
+    }
+}

+ 2326 - 0
src/customer/Configs.ts

@@ -0,0 +1,2326 @@
+export namespace Configs {
+
+    export const weizhi_nian_gan = 1
+    export const weizhi_yue_gan = 2
+    export const weizhi_ri_gan = 3
+    export const weizhi_shi_gan = 4
+    export const weizhi_nian_zhi = 5
+    export const weizhi_yue_zhi = 6
+    export const weizhi_ri_zhi = 7
+    export const weizhi_shi_zhi = 8
+    export const weizhi_dayun_gan = 11
+    export const weizhi_dayun_zhi = 12
+    export const weizhi_liunian_gan = 13
+    export const weizhi_liunian_zhi = 14
+    export const weizhi_liuyue_gan = 15
+    export const weizhi_liuyue_zhi = 16
+    export const weizhi_liuri_gan = 17
+    export const weizhi_liuri_zhi = 18
+    export const weizhi_liushi_gan = 19
+    export const weizhi_liushi_zhi = 20
+    export const weizhi_zengbu1_gan = 21
+    export const weizhi_zengbu1_zhi = 22
+
+    export let nameOfZhu = {
+        1: "年干",
+        2: "月干",
+        3: "日干",
+        4: "时干",
+        5: "年支",
+        6: "月支",
+        7: "日支",
+        8: "时支",
+        11: "大运干",
+        12: "大运支",
+        13: "流年干",
+        14: "流年支",
+        15: "流月干",
+        16: "流月支",
+        17: "流日干",
+        18: "流日支",
+        19: "流时干",
+        20: "流时支",
+    }
+    export const tianganAry = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
+    export const dizhiAry = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
+
+    export const nongliAry = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十",
+        "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "廿十",
+        "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十"]
+
+    export let config_wuxing = {
+        "甲": "木",
+        "乙": "木",
+        "丙": "火",
+        "丁": "火",
+        "戊": "土",
+        "己": "土",
+        "庚": "金",
+        "辛": "金",
+        "壬": "水",
+        "癸": "水",
+        "子": "水",
+        "丑": "土",
+        "寅": "木",
+        "卯": "木",
+        "辰": "土",
+        "巳": "火",
+        "午": "火",
+        "未": "土",
+        "申": "金",
+        "酉": "金",
+        "戌": "土",
+        "亥": "水",
+    }
+
+
+    export let config_gaoneng = {
+        "甲己合": {
+            "name": "甲己合",
+            "guanxi": "合",
+            "father": null,
+            "leibie": "天干合",
+            "hehua": "土",
+            "tip": null,
+            "fangxiang": "己",
+        },
+        "乙庚合": {
+            "name": "乙庚合",
+            "guanxi": "合",
+            "father": null,
+            "leibie": "天干合",
+            "hehua": "金",
+            "tip": null,
+            "fangxiang": "庚",
+        },
+        "丙辛合": {
+            "name": "丙辛合",
+            "guanxi": "合",
+            "father": null,
+            "leibie": "天干合",
+            "hehua": "水",
+            "tip": null,
+            "fangxiang": "辛",
+        },
+        "丁壬合": {
+            "name": "丁壬合",
+            "guanxi": "合",
+            "father": null,
+            "leibie": "天干合",
+            "hehua": "木",
+            "tip": null,
+            "fangxiang": "壬",
+        },
+        "戊癸合": {
+            "name": "戊癸合",
+            "guanxi": "合",
+            "father": null,
+            "leibie": "天干合",
+            "hehua": "火",
+            "tip": null,
+            "fangxiang": "戊",
+        },
+        "甲庚冲": {
+            "name": "甲庚冲",
+            "guanxi": "冲",
+            "father": null,
+            "leibie": "天干冲",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "乙辛冲": {
+            "name": "乙辛冲",
+            "guanxi": "冲",
+            "father": null,
+            "leibie": "天干冲",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "丙壬冲": {
+            "name": "丙壬冲",
+            "guanxi": "冲",
+            "father": null,
+            "leibie": "天干冲",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "丁癸冲": {
+            "name": "丁癸冲",
+            "guanxi": "冲",
+            "father": null,
+            "leibie": "天干冲",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "子丑合": {
+            "name": "子丑合",
+            "guanxi": "合",
+            "father": null,
+            "leibie": "地支合",
+            "hehua": "土",
+            "tip": null,
+            "fangxiang": "丑",
+        },
+        "寅亥合": {
+            "name": "寅亥合",
+            "guanxi": "合",
+            "father": null,
+            "leibie": "地支合",
+            "hehua": "木",
+            "tip": null,
+            "fangxiang": "寅",
+        },
+        "卯戌合": {
+            "name": "卯戌合",
+            "guanxi": "合",
+            "father": null,
+            "leibie": "地支合",
+            "hehua": "火",
+            "tip": null,
+            "fangxiang": "戌",
+        },
+        "酉辰合": {
+            "name": "酉辰合",
+            "guanxi": "合",
+            "father": null,
+            "leibie": "地支合",
+            "hehua": "金",
+            "tip": null,
+            "fangxiang": "酉",
+        },
+        "巳申合": {
+            "name": "巳申合",
+            "guanxi": "合",
+            "father": null,
+            "leibie": "地支合",
+            "hehua": "水",
+            "tip": null,
+            "fangxiang": "申",
+        },
+        "午未合": {
+            "name": "午未合",
+            "guanxi": "合",
+            "father": null,
+            "leibie": "地支合",
+            "hehua": "火",
+            "tip": null,
+            "fangxiang": "午",
+        },
+        "子午冲": {
+            "name": "子午冲",
+            "guanxi": "冲",
+            "father": null,
+            "leibie": "地支冲",
+            "hehua": null,
+            "tip": "表示无妄之灾,特点是突发、迅猛,但是后果不严重,或者当场消停,虚惊一场。对应在健康上,需有人陪伴。",
+            "fangxiang": null,
+        },
+        "巳亥冲": {
+            "name": "巳亥冲",
+            "guanxi": "冲",
+            "father": null,
+            "leibie": "地支冲",
+            "hehua": null,
+            "tip": "水火斗为主,伴随金木斗,影响肝脏、肺部健康,遇见应多去体检身体,确保健康,相对健康影响比较大",
+            "fangxiang": null,
+        },
+        "卯酉冲": {
+            "name": "卯酉冲",
+            "guanxi": "冲",
+            "father": null,
+            "leibie": "地支冲",
+            "hehua": null,
+            "tip": "主血光之灾(比如开刀),影响肝胆、肺部、食道、呼吸道、肠道健康",
+            "fangxiang": null,
+        },
+        "申寅冲": {
+            "name": "申寅冲",
+            "guanxi": "冲",
+            "father": null,
+            "leibie": "地支冲",
+            "hehua": null,
+            "tip": "主内伤,多作用在肾脏、心脑血管,多急症。",
+            "fangxiang": null,
+        },
+        "辰戌冲": {
+            "name": "辰戌冲",
+            "guanxi": "冲",
+            "father": null,
+            "leibie": "地支冲",
+            "hehua": null,
+            "tip": "主开库,开库后引发乙辛冲、丁癸冲",
+            "fangxiang": null,
+        },
+        "丑未冲": {
+            "name": "丑未冲",
+            "guanxi": "冲",
+            "father": null,
+            "leibie": "地支冲",
+            "hehua": null,
+            "tip": "主开库,开库后引发乙辛冲、丁癸冲",
+            "fangxiang": null,
+        },
+        "寅丑暗合": {
+            "name": "寅丑暗合",
+            "guanxi": "暗合",
+            "father": null,
+            "leibie": "地支暗合",
+            "hehua": "土",
+            "tip": null,
+            "fangxiang": "丑",
+        },
+        "午亥暗合": {
+            "name": "午亥暗合",
+            "guanxi": "暗合",
+            "father": null,
+            "leibie": "地支暗合",
+            "hehua": "木",
+            "tip": null,
+            "fangxiang": "亥",
+        },
+        "申卯暗合": {
+            "name": "申卯暗合",
+            "guanxi": "暗合",
+            "father": null,
+            "leibie": "地支暗合",
+            "hehua": "金",
+            "tip": null,
+            "fangxiang": "申",
+        },
+        "子辰半合": {
+            "name": "子辰半合",
+            "guanxi": "半合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "水",
+            "tip": null,
+            "fangxiang": "子",
+        },
+        "申子半合": {
+            "name": "申子半合",
+            "guanxi": "半合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "水",
+            "tip": null,
+            "fangxiang": "子",
+        },
+        "亥卯半合": {
+            "name": "亥卯半合",
+            "guanxi": "半合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "木",
+            "tip": null,
+            "fangxiang": "卯",
+        },
+        "卯未半合": {
+            "name": "卯未半合",
+            "guanxi": "半合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "木",
+            "tip": null,
+            "fangxiang": "卯",
+        },
+        "寅午半合": {
+            "name": "寅午半合",
+            "guanxi": "半合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "火",
+            "tip": null,
+            "fangxiang": "午",
+        },
+        "午戌半合": {
+            "name": "午戌半合",
+            "guanxi": "半合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "火",
+            "tip": null,
+            "fangxiang": "午",
+        },
+        "巳酉半合": {
+            "name": "巳酉半合",
+            "guanxi": "半合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "金",
+            "tip": null,
+            "fangxiang": "酉",
+        },
+        "酉丑半合": {
+            "name": "酉丑半合",
+            "guanxi": "半合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "金",
+            "tip": null,
+            "fangxiang": "酉",
+        },
+        "申辰拱合": {
+            "name": "申辰拱合",
+            "guanxi": "拱合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "水",
+            "tip": null,
+            "fangxiang": "子",
+        },
+        "亥未拱合": {
+            "name": "亥未拱合",
+            "guanxi": "拱合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "木",
+            "tip": null,
+            "fangxiang": "卯",
+        },
+        "寅戌拱合": {
+            "name": "寅戌拱合",
+            "guanxi": "拱合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "火",
+            "tip": null,
+            "fangxiang": "午",
+        },
+        "巳丑拱合": {
+            "name": "巳丑拱合",
+            "guanxi": "拱合",
+            "father": null,
+            "leibie": "地支三合",
+            "hehua": "金",
+            "tip": null,
+            "fangxiang": "酉",
+        },
+        "寅卯辰三会": {
+            "name": "寅卯辰三会",
+            "guanxi": "三会",
+            "father": null,
+            "leibie": "地支三会",
+            "hehua": "木",
+            "tip": null,
+            "fangxiang": "卯",
+        },
+        "巳午未三会": {
+            "name": "巳午未三会",
+            "guanxi": "三会",
+            "father": null,
+            "leibie": "地支三会",
+            "hehua": "火",
+            "tip": null,
+            "fangxiang": "午",
+        },
+        "申酉戌三会": {
+            "name": "申酉戌三会",
+            "guanxi": "三会",
+            "father": null,
+            "leibie": "地支三会",
+            "hehua": "金",
+            "tip": null,
+            "fangxiang": "酉",
+        },
+        "亥子丑三会": {
+            "name": "亥子丑三会",
+            "guanxi": "三会",
+            "father": null,
+            "leibie": "地支三会",
+            "hehua": "水",
+            "tip": null,
+            "fangxiang": "子",
+        },
+        "子卯刑": {
+            "name": "子卯刑",
+            "guanxi": "刑",
+            "father": null,
+            "leibie": "地支刑",
+            "hehua": null,
+            "tip": "一方付出,另一方不领情 ",
+            "fangxiang": null,
+        },
+        "寅巳刑": {
+            "name": "寅巳刑",
+            "guanxi": "刑",
+            "father": null,
+            "leibie": "地支刑",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "巳申刑": {
+            "name": "巳申刑",
+            "guanxi": "刑",
+            "father": null,
+            "leibie": "地支刑",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "戌未刑": {
+            "name": "戌未刑",
+            "guanxi": "刑",
+            "father": null,
+            "leibie": "地支刑",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "丑戌刑": {
+            "name": "丑戌刑",
+            "guanxi": "刑",
+            "father": null,
+            "leibie": "地支刑",
+            "hehua": null,
+            "tip": "容易动刀,刑在年柱应期在0-15岁,往后每柱增加15岁应期,循环往复。也可能应在不同柱所代表的六亲身上。",
+            "fangxiang": null,
+        },
+        "辰辰自刑": {
+            "name": "辰辰自刑",
+            "guanxi": "自刑",
+            "father": null,
+            "leibie": "地支自刑",
+            "hehua": null,
+            "tip": "容易庸人自扰,念头不通畅,进入哲学思维模式",
+            "fangxiang": null,
+        },
+        "午午自刑": {
+            "name": "午午自刑",
+            "guanxi": "自刑",
+            "father": null,
+            "leibie": "地支自刑",
+            "hehua": null,
+            "tip": "容易口舌是非、空想,产生自我心理幻觉,无中生有又以此与人争执,或者喜欢没完没了的抱怨吐槽",
+            "fangxiang": null,
+        },
+        "酉酉自刑": {
+            "name": "酉酉自刑",
+            "guanxi": "自刑",
+            "father": null,
+            "leibie": "地支自刑",
+            "hehua": null,
+            "tip": "容易神神叨叨,为金钱烦恼,喜欢抬扛",
+            "fangxiang": null,
+        },
+        "亥亥自刑": {
+            "name": "亥亥自刑",
+            "guanxi": "自刑",
+            "father": null,
+            "leibie": "地支自刑",
+            "hehua": null,
+            "tip": "容易顾虑太多,选择困难",
+            "fangxiang": null,
+        },
+        "卯午破": {
+            "name": "卯午破",
+            "guanxi": "破",
+            "father": null,
+            "leibie": "地支破",
+            "hehua": null,
+            "tip": "才多识广,读书破万卷(有家学渊源才行);也指婚姻、感情破裂",
+            "fangxiang": null,
+        },
+        "午酉破": {
+            "name": "午酉破",
+            "guanxi": "破",
+            "father": null,
+            "leibie": "地支破",
+            "hehua": null,
+            "tip": "离婚、也指炒股、贷款、金融上的投资不利,也表示抵押、车祸",
+            "fangxiang": null,
+        },
+        "子酉破": {
+            "name": "子酉破",
+            "guanxi": "破",
+            "father": null,
+            "leibie": "地支破",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "巳申破": {
+            "name": "巳申破",
+            "guanxi": "破",
+            "father": null,
+            "leibie": "地支破",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "丑辰破": {
+            "name": "丑辰破",
+            "guanxi": "破",
+            "father": null,
+            "leibie": "地支破",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "寅亥破": {
+            "name": "寅亥破",
+            "guanxi": "破",
+            "father": null,
+            "leibie": "地支破",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "戌未破": {
+            "name": "戌未破",
+            "guanxi": "破",
+            "father": null,
+            "leibie": "地支破",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "子未穿": {
+            "name": "子未穿",
+            "guanxi": "穿",
+            "father": null,
+            "leibie": "地支穿",
+            "hehua": null,
+            "tip": "不计代价的除掉对方",
+            "fangxiang": null,
+        },
+        "卯辰穿": {
+            "name": "卯辰穿",
+            "guanxi": "穿",
+            "father": null,
+            "leibie": "地支穿",
+            "hehua": null,
+            "tip": "凶险度很高的穿,慢性伤害,渗透后伤害",
+            "fangxiang": null,
+        },
+        "酉戌穿": {
+            "name": "酉戌穿",
+            "guanxi": "穿",
+            "father": null,
+            "leibie": "地支穿",
+            "hehua": null,
+            "tip": "凶险度很高的穿,突发伤害,同归于尽的决绝,也指舆情、爆炸性新闻。穿配偶宫一旦领证就容易互相伤害,直到老死不相往来",
+            "fangxiang": null,
+        },
+        "午丑穿": {
+            "name": "午丑穿",
+            "guanxi": "穿",
+            "father": null,
+            "leibie": "地支穿",
+            "hehua": null,
+            "tip": null,
+            "fangxiang": null,
+        },
+        "寅巳穿": {
+            "name": "寅巳穿",
+            "guanxi": "穿",
+            "father": null,
+            "leibie": "地支穿",
+            "hehua": null,
+            "tip": "容易以卵击石,以小搏大",
+            "fangxiang": null,
+        },
+        "申亥穿": {
+            "name": "申亥穿",
+            "guanxi": "穿",
+            "father": null,
+            "leibie": "地支穿",
+            "hehua": null,
+            "tip": "穿肠毒药,容易影响肠胃健康、出现肾病、宫寒、性病等",
+            "fangxiang": null,
+        },
+    }
+
+    export let config_gaoneng_query = {
+        "甲己": [config_gaoneng["甲己合"]],
+        "己甲": [config_gaoneng["甲己合"]],
+        "乙庚": [config_gaoneng["乙庚合"]],
+        "庚乙": [config_gaoneng["乙庚合"]],
+        "丙辛": [config_gaoneng["丙辛合"]],
+        "辛丙": [config_gaoneng["丙辛合"]],
+        "丁壬": [config_gaoneng["丁壬合"]],
+        "壬丁": [config_gaoneng["丁壬合"]],
+        "戊癸": [config_gaoneng["戊癸合"]],
+        "癸戊": [config_gaoneng["戊癸合"]],
+
+        "甲庚": [config_gaoneng["甲庚冲"]],
+        "庚甲": [config_gaoneng["甲庚冲"]],
+        "乙辛": [config_gaoneng["乙辛冲"]],
+        "辛乙": [config_gaoneng["乙辛冲"]],
+        "丙壬": [config_gaoneng["丙壬冲"]],
+        "壬丙": [config_gaoneng["丙壬冲"]],
+        "丁癸": [config_gaoneng["丁癸冲"]],
+        "癸丁": [config_gaoneng["丁癸冲"]],
+
+        "子丑": [config_gaoneng["子丑合"]],
+        "丑子": [config_gaoneng["子丑合"]],
+        "寅亥": [config_gaoneng["寅亥合"], config_gaoneng["寅亥破"]],
+        "亥寅": [config_gaoneng["寅亥合"], config_gaoneng["寅亥破"]],
+        "卯戌": [config_gaoneng["卯戌合"]],
+        "戌卯": [config_gaoneng["卯戌合"]],
+        "酉辰": [config_gaoneng["酉辰合"]],
+        "辰酉": [config_gaoneng["酉辰合"]],
+        "巳申": [config_gaoneng["巳申合"], config_gaoneng["巳申刑"], config_gaoneng["巳申破"]],
+        "申巳": [config_gaoneng["巳申合"], config_gaoneng["巳申刑"], config_gaoneng["巳申破"]],
+        "午未": [config_gaoneng["午未合"]],
+        "未午": [config_gaoneng["午未合"]],
+
+        "子午": [config_gaoneng["子午冲"]],
+        "午子": [config_gaoneng["子午冲"]],
+        "巳亥": [config_gaoneng["巳亥冲"]],
+        "亥巳": [config_gaoneng["巳亥冲"]],
+        "卯酉": [config_gaoneng["卯酉冲"]],
+        "酉卯": [config_gaoneng["卯酉冲"]],
+        "申寅": [config_gaoneng["申寅冲"]],
+        "寅申": [config_gaoneng["申寅冲"]],
+        "辰戌": [config_gaoneng["辰戌冲"]],
+        "戌辰": [config_gaoneng["辰戌冲"]],
+        "丑未": [config_gaoneng["丑未冲"]],
+        "未丑": [config_gaoneng["丑未冲"]],
+
+        "寅丑": [config_gaoneng["寅丑暗合"]],
+        "丑寅": [config_gaoneng["寅丑暗合"]],
+        "午亥": [config_gaoneng["午亥暗合"]],
+        "亥午": [config_gaoneng["午亥暗合"]],
+        "申卯": [config_gaoneng["申卯暗合"]],
+        "卯申": [config_gaoneng["申卯暗合"]],
+
+        "子辰": [config_gaoneng["子辰半合"]],
+        "辰子": [config_gaoneng["子辰半合"]],
+        "申子": [config_gaoneng["申子半合"]],
+        "子申": [config_gaoneng["申子半合"]],
+        "亥卯": [config_gaoneng["亥卯半合"]],
+        "卯亥": [config_gaoneng["亥卯半合"]],
+        "卯未": [config_gaoneng["卯未半合"]],
+        "未卯": [config_gaoneng["卯未半合"]],
+        "寅午": [config_gaoneng["寅午半合"]],
+        "午寅": [config_gaoneng["寅午半合"]],
+        "午戌": [config_gaoneng["午戌半合"]],
+        "戌午": [config_gaoneng["午戌半合"]],
+        "巳酉": [config_gaoneng["巳酉半合"]],
+        "酉巳": [config_gaoneng["巳酉半合"]],
+        "酉丑": [config_gaoneng["酉丑半合"]],
+        "丑酉": [config_gaoneng["酉丑半合"]],
+
+        "申辰": [config_gaoneng["申辰拱合"]],
+        "辰申": [config_gaoneng["申辰拱合"]],
+        "亥未": [config_gaoneng["亥未拱合"]],
+        "未亥": [config_gaoneng["亥未拱合"]],
+        "寅戌": [config_gaoneng["寅戌拱合"]],
+        "戌寅": [config_gaoneng["寅戌拱合"]],
+        "巳丑": [config_gaoneng["巳丑拱合"]],
+        "丑巳": [config_gaoneng["巳丑拱合"]],
+
+        "寅卯辰": [config_gaoneng["寅卯辰三会"]],
+        "寅辰卯": [config_gaoneng["寅卯辰三会"]],
+        "卯寅辰": [config_gaoneng["寅卯辰三会"]],
+        "卯辰寅": [config_gaoneng["寅卯辰三会"]],
+        "辰寅卯": [config_gaoneng["寅卯辰三会"]],
+        "辰卯寅": [config_gaoneng["寅卯辰三会"]],
+        "巳午未": [config_gaoneng["巳午未三会"]],
+        "巳未午": [config_gaoneng["巳午未三会"]],
+        "午巳未": [config_gaoneng["巳午未三会"]],
+        "午未巳": [config_gaoneng["巳午未三会"]],
+        "未巳午": [config_gaoneng["巳午未三会"]],
+        "未午巳": [config_gaoneng["巳午未三会"]],
+        "申酉戌": [config_gaoneng["申酉戌三会"]],
+        "申戌酉": [config_gaoneng["申酉戌三会"]],
+        "酉申戌": [config_gaoneng["申酉戌三会"]],
+        "酉戌申": [config_gaoneng["申酉戌三会"]],
+        "戌申酉": [config_gaoneng["申酉戌三会"]],
+        "戌酉申": [config_gaoneng["申酉戌三会"]],
+        "亥子丑": [config_gaoneng["亥子丑三会"]],
+        "亥丑子": [config_gaoneng["亥子丑三会"]],
+        "子亥丑": [config_gaoneng["亥子丑三会"]],
+        "子丑亥": [config_gaoneng["亥子丑三会"]],
+        "丑亥子": [config_gaoneng["亥子丑三会"]],
+        "丑子亥": [config_gaoneng["亥子丑三会"]],
+
+        "子卯": [config_gaoneng["子卯刑"]],
+        "卯子": [config_gaoneng["子卯刑"]],
+        "寅巳": [config_gaoneng["寅巳刑"], config_gaoneng["寅巳穿"]],
+        "巳寅": [config_gaoneng["寅巳刑"], config_gaoneng["寅巳穿"]],
+        "戌未": [config_gaoneng["戌未刑"], config_gaoneng["戌未破"]],
+        "未戌": [config_gaoneng["戌未刑"], config_gaoneng["戌未破"]],
+        "丑戌": [config_gaoneng["丑戌刑"]],
+        "戌丑": [config_gaoneng["丑戌刑"]],
+
+        "辰辰": [config_gaoneng["辰辰自刑"]],
+        "午午": [config_gaoneng["午午自刑"]],
+        "酉酉": [config_gaoneng["酉酉自刑"]],
+        "亥亥": [config_gaoneng["亥亥自刑"]],
+
+        "卯午": [config_gaoneng["卯午破"]],
+        "午卯": [config_gaoneng["卯午破"]],
+        "午酉": [config_gaoneng["午酉破"]],
+        "酉午": [config_gaoneng["午酉破"]],
+        "子酉": [config_gaoneng["子酉破"]],
+        "酉子": [config_gaoneng["子酉破"]],
+        "丑辰": [config_gaoneng["丑辰破"]],
+        "辰丑": [config_gaoneng["丑辰破"]],
+
+        "子未": [config_gaoneng["子未穿"]],
+        "未子": [config_gaoneng["子未穿"]],
+        "卯辰": [config_gaoneng["卯辰穿"]],
+        "辰卯": [config_gaoneng["卯辰穿"]],
+        "酉戌": [config_gaoneng["酉戌穿"]],
+        "戌酉": [config_gaoneng["酉戌穿"]],
+        "午丑": [config_gaoneng["午丑穿"]],
+        "丑午": [config_gaoneng["午丑穿"]],
+        "申亥": [config_gaoneng["申亥穿"]],
+        "亥申": [config_gaoneng["申亥穿"]],
+    }
+
+    export let config_shishen = {
+        "甲": {
+            "甲": "比",
+            "乙": "劫",
+            "丙": "食",
+            "丁": "伤",
+            "戊": "才",
+            "己": "财",
+            "庚": "杀",
+            "辛": "官",
+            "壬": "枭",
+            "癸": "印",
+            "子": "印",
+            "丑": "财",
+            "寅": "比",
+            "卯": "劫",
+            "辰": "才",
+            "巳": "食",
+            "午": "伤",
+            "未": "财",
+            "申": "杀",
+            "酉": "官",
+            "戌": "才",
+            "亥": "枭",
+        },
+        "乙": {
+            "甲": "劫",
+            "乙": "比",
+            "丙": "伤",
+            "丁": "食",
+            "戊": "财",
+            "己": "才",
+            "庚": "官",
+            "辛": "杀",
+            "壬": "印",
+            "癸": "枭",
+            "子": "枭",
+            "丑": "才",
+            "寅": "劫",
+            "卯": "比",
+            "辰": "财",
+            "巳": "伤",
+            "午": "食",
+            "未": "才",
+            "申": "官",
+            "酉": "杀",
+            "戌": "财",
+            "亥": "印",
+        },
+        "丙": {
+            "甲": "枭",
+            "乙": "印",
+            "丙": "比",
+            "丁": "劫",
+            "戊": "食",
+            "己": "伤",
+            "庚": "才",
+            "辛": "财",
+            "壬": "杀",
+            "癸": "官",
+            "子": "官",
+            "丑": "伤",
+            "寅": "枭",
+            "卯": "印",
+            "辰": "食",
+            "巳": "比",
+            "午": "劫",
+            "未": "伤",
+            "申": "才",
+            "酉": "财",
+            "戌": "食",
+            "亥": "杀",
+        },
+        "丁": {
+            "甲": "印",
+            "乙": "枭",
+            "丙": "劫",
+            "丁": "比",
+            "戊": "伤",
+            "己": "食",
+            "庚": "财",
+            "辛": "才",
+            "壬": "官",
+            "癸": "杀",
+            "子": "杀",
+            "丑": "食",
+            "寅": "印",
+            "卯": "枭",
+            "辰": "伤",
+            "巳": "劫",
+            "午": "比",
+            "未": "食",
+            "申": "财",
+            "酉": "才",
+            "戌": "伤",
+            "亥": "官",
+        },
+        "戊": {
+            "甲": "杀",
+            "乙": "官",
+            "丙": "枭",
+            "丁": "印",
+            "戊": "比",
+            "己": "劫",
+            "庚": "食",
+            "辛": "伤",
+            "壬": "才",
+            "癸": "财",
+            "子": "财",
+            "丑": "劫",
+            "寅": "杀",
+            "卯": "官",
+            "辰": "比",
+            "巳": "枭",
+            "午": "印",
+            "未": "劫",
+            "申": "食",
+            "酉": "伤",
+            "戌": "比",
+            "亥": "才",
+        },
+        "己": {
+            "甲": "官",
+            "乙": "杀",
+            "丙": "印",
+            "丁": "枭",
+            "戊": "劫",
+            "己": "比",
+            "庚": "伤",
+            "辛": "食",
+            "壬": "财",
+            "癸": "才",
+            "子": "才",
+            "丑": "比",
+            "寅": "官",
+            "卯": "杀",
+            "辰": "劫",
+            "巳": "印",
+            "午": "枭",
+            "未": "比",
+            "申": "伤",
+            "酉": "食",
+            "戌": "劫",
+            "亥": "财",
+        },
+        "庚": {
+            "甲": "才",
+            "乙": "财",
+            "丙": "杀",
+            "丁": "官",
+            "戊": "枭",
+            "己": "印",
+            "庚": "比",
+            "辛": "劫",
+            "壬": "食",
+            "癸": "伤",
+            "子": "伤",
+            "丑": "印",
+            "寅": "才",
+            "卯": "财",
+            "辰": "枭",
+            "巳": "杀",
+            "午": "官",
+            "未": "印",
+            "申": "比",
+            "酉": "劫",
+            "戌": "枭",
+            "亥": "食",
+        },
+        "辛": {
+            "甲": "财",
+            "乙": "才",
+            "丙": "官",
+            "丁": "杀",
+            "戊": "印",
+            "己": "枭",
+            "庚": "劫",
+            "辛": "比",
+            "壬": "伤",
+            "癸": "食",
+            "子": "食",
+            "丑": "枭",
+            "寅": "财",
+            "卯": "才",
+            "辰": "印",
+            "巳": "官",
+            "午": "官",
+            "未": "杀",
+            "申": "劫",
+            "酉": "比",
+            "戌": "印",
+            "亥": "伤",
+        },
+        "壬": {
+            "甲": "食",
+            "乙": "伤",
+            "丙": "才",
+            "丁": "财",
+            "戊": "杀",
+            "己": "官",
+            "庚": "枭",
+            "辛": "印",
+            "壬": "比",
+            "癸": "劫",
+            "子": "劫",
+            "丑": "官",
+            "寅": "食",
+            "卯": "伤",
+            "辰": "杀",
+            "巳": "才",
+            "午": "财",
+            "未": "官",
+            "申": "枭",
+            "酉": "印",
+            "戌": "杀",
+            "亥": "比",
+        },
+        "癸": {
+            "甲": "伤",
+            "乙": "食",
+            "丙": "财",
+            "丁": "才",
+            "戊": "官",
+            "己": "杀",
+            "庚": "印",
+            "辛": "枭",
+            "壬": "劫",
+            "癸": "比",
+            "子": "比",
+            "丑": "杀",
+            "寅": "伤",
+            "卯": "食",
+            "辰": "官",
+            "巳": "财",
+            "午": "才",
+            "未": "杀",
+            "申": "印",
+            "酉": "枭",
+            "戌": "官",
+            "亥": "劫",
+        },
+        "子": {
+            "甲": "伤",
+            "乙": "食",
+            "丙": "财",
+            "丁": "才",
+            "戊": "官",
+            "己": "杀",
+            "庚": "印",
+            "辛": "枭",
+            "壬": "劫",
+            "癸": "比",
+            "子": "比",
+            "丑": "杀",
+            "寅": "伤",
+            "卯": "食",
+            "辰": "官",
+            "巳": "财",
+            "午": "才",
+            "未": "杀",
+            "申": "印",
+            "酉": "枭",
+            "戌": "官",
+            "亥": "劫",
+        },
+        "丑": {
+            "甲": "官",
+            "乙": "杀",
+            "丙": "印",
+            "丁": "枭",
+            "戊": "劫",
+            "己": "比",
+            "庚": "伤",
+            "辛": "食",
+            "壬": "财",
+            "癸": "才",
+            "子": "才",
+            "丑": "比",
+            "寅": "官",
+            "卯": "杀",
+            "辰": "劫",
+            "巳": "印",
+            "午": "枭",
+            "未": "比",
+            "申": "伤",
+            "酉": "食",
+            "戌": "劫",
+            "亥": "财",
+        },
+        "寅": {
+            "甲": "比",
+            "乙": "劫",
+            "丙": "食",
+            "丁": "伤",
+            "戊": "才",
+            "己": "财",
+            "庚": "杀",
+            "辛": "官",
+            "壬": "枭",
+            "癸": "印",
+            "子": "印",
+            "丑": "财",
+            "寅": "比",
+            "卯": "劫",
+            "辰": "才",
+            "巳": "食",
+            "午": "伤",
+            "未": "财",
+            "申": "杀",
+            "酉": "官",
+            "戌": "才",
+            "亥": "枭",
+        },
+        "卯": {
+            "甲": "劫",
+            "乙": "比",
+            "丙": "伤",
+            "丁": "食",
+            "戊": "财",
+            "己": "才",
+            "庚": "官",
+            "辛": "杀",
+            "壬": "印",
+            "癸": "枭",
+            "子": "枭",
+            "丑": "才",
+            "寅": "劫",
+            "卯": "比",
+            "辰": "财",
+            "巳": "伤",
+            "午": "食",
+            "未": "才",
+            "申": "官",
+            "酉": "杀",
+            "戌": "财",
+            "亥": "印",
+        },
+        "辰": {
+            "甲": "杀",
+            "乙": "官",
+            "丙": "枭",
+            "丁": "印",
+            "戊": "比",
+            "己": "劫",
+            "庚": "食",
+            "辛": "伤",
+            "壬": "才",
+            "癸": "财",
+            "子": "财",
+            "丑": "劫",
+            "寅": "杀",
+            "卯": "官",
+            "辰": "比",
+            "巳": "枭",
+            "午": "印",
+            "未": "劫",
+            "申": "食",
+            "酉": "伤",
+            "戌": "比",
+            "亥": "才",
+        },
+        "巳": {
+            "甲": "枭",
+            "乙": "印",
+            "丙": "比",
+            "丁": "劫",
+            "戊": "食",
+            "己": "伤",
+            "庚": "才",
+            "辛": "财",
+            "壬": "杀",
+            "癸": "官",
+            "子": "官",
+            "丑": "伤",
+            "寅": "枭",
+            "卯": "印",
+            "辰": "食",
+            "巳": "比",
+            "午": "劫",
+            "未": "伤",
+            "申": "才",
+            "酉": "财",
+            "戌": "食",
+            "亥": "杀",
+        },
+        "午": {
+            "甲": "印",
+            "乙": "枭",
+            "丙": "劫",
+            "丁": "比",
+            "戊": "伤",
+            "己": "食",
+            "庚": "财",
+            "辛": "才",
+            "壬": "官",
+            "癸": "杀",
+            "子": "杀",
+            "丑": "食",
+            "寅": "印",
+            "卯": "枭",
+            "辰": "伤",
+            "巳": "劫",
+            "午": "比",
+            "未": "食",
+            "申": "财",
+            "酉": "才",
+            "戌": "伤",
+            "亥": "官",
+        },
+        "未": {
+            "甲": "官",
+            "乙": "杀",
+            "丙": "印",
+            "丁": "枭",
+            "戊": "劫",
+            "己": "比",
+            "庚": "伤",
+            "辛": "食",
+            "壬": "财",
+            "癸": "才",
+            "子": "才",
+            "丑": "比",
+            "寅": "官",
+            "卯": "杀",
+            "辰": "劫",
+            "巳": "印",
+            "午": "枭",
+            "未": "比",
+            "申": "伤",
+            "酉": "食",
+            "戌": "劫",
+            "亥": "财",
+        },
+        "申": {
+            "甲": "才",
+            "乙": "财",
+            "丙": "杀",
+            "丁": "官",
+            "戊": "枭",
+            "己": "印",
+            "庚": "比",
+            "辛": "劫",
+            "壬": "食",
+            "癸": "伤",
+            "子": "伤",
+            "丑": "印",
+            "寅": "才",
+            "卯": "财",
+            "辰": "枭",
+            "巳": "杀",
+            "午": "官",
+            "未": "印",
+            "申": "比",
+            "酉": "劫",
+            "戌": "枭",
+            "亥": "食",
+        },
+        "酉": {
+            "甲": "财",
+            "乙": "才",
+            "丙": "官",
+            "丁": "杀",
+            "戊": "印",
+            "己": "枭",
+            "庚": "劫",
+            "辛": "比",
+            "壬": "伤",
+            "癸": "食",
+            "子": "食",
+            "丑": "枭",
+            "寅": "财",
+            "卯": "才",
+            "辰": "印",
+            "巳": "官",
+            "午": "官",
+            "未": "杀",
+            "申": "劫",
+            "酉": "比",
+            "戌": "印",
+            "亥": "伤",
+        },
+        "戌": {
+            "甲": "杀",
+            "乙": "官",
+            "丙": "枭",
+            "丁": "印",
+            "戊": "比",
+            "己": "劫",
+            "庚": "食",
+            "辛": "伤",
+            "壬": "才",
+            "癸": "财",
+            "子": "财",
+            "丑": "劫",
+            "寅": "杀",
+            "卯": "官",
+            "辰": "比",
+            "巳": "枭",
+            "午": "印",
+            "未": "劫",
+            "申": "食",
+            "酉": "伤",
+            "戌": "比",
+            "亥": "才",
+        },
+        "亥": {
+            "甲": "食",
+            "乙": "伤",
+            "丙": "才",
+            "丁": "财",
+            "戊": "杀",
+            "己": "官",
+            "庚": "枭",
+            "辛": "印",
+            "壬": "比",
+            "癸": "劫",
+            "子": "劫",
+            "丑": "官",
+            "寅": "食",
+            "卯": "伤",
+            "辰": "杀",
+            "巳": "才",
+            "午": "财",
+            "未": "官",
+            "申": "枭",
+            "酉": "印",
+            "戌": "杀",
+            "亥": "比",
+        },
+    }
+
+    export let config_gaoneng_xing = {
+        "寅巳刑": {
+            "刑出": ["丙", "戊"],
+            "刑冲": ["甲庚冲"]
+        },
+        "巳申刑": {
+            "刑出": ["庚", "戊"],
+            "刑冲": ["丙壬冲"]
+        },
+        "戌未刑": {
+            "刑出": ["丁"],
+            "刑冲": ["乙辛冲"]
+        },
+        "丑戌刑": {
+            "刑出": ["辛"],
+            "刑冲": ["丁癸冲"]
+        },
+    }
+
+    export let config_gaoneng_score = {
+        "合": {
+            "官": {
+                "官": 2,
+                "杀": 1,
+                "财": 8,
+                "才": 7,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "杀": {
+                "官": 2,
+                "杀": 1,
+                "财": 8,
+                "才": 7,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "财": {
+                "官": 8,
+                "杀": 7,
+                "财": 2,
+                "才": 1,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "才": {
+                "官": 8,
+                "杀": 7,
+                "财": 2,
+                "才": 1,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "印": {
+                "官": 9,
+                "杀": 10,
+                "财": 8,
+                "才": 7,
+                "印": 2,
+                "枭": 1,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "枭": {
+                "官": 9,
+                "杀": 10,
+                "财": 8,
+                "才": 7,
+                "印": 2,
+                "枭": 1,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "食": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 2,
+                "伤": 1,
+                "比": 4,
+                "劫": 3,
+            },
+            "伤": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 2,
+                "伤": 1,
+                "比": 4,
+                "劫": 3,
+            },
+            "比": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 4,
+                "伤": 3,
+                "比": 2,
+                "劫": 1,
+            },
+            "劫": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 4,
+                "伤": 3,
+                "比": 2,
+                "劫": 1,
+            },
+        },
+        "暗合": {
+            "官": {
+                "官": 2,
+                "杀": 1,
+                "财": 8,
+                "才": 7,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "杀": {
+                "官": 2,
+                "杀": 1,
+                "财": 8,
+                "才": 7,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "财": {
+                "官": 8,
+                "杀": 7,
+                "财": 2,
+                "才": 1,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "才": {
+                "官": 8,
+                "杀": 7,
+                "财": 2,
+                "才": 1,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "印": {
+                "官": 9,
+                "杀": 10,
+                "财": 8,
+                "才": 7,
+                "印": 2,
+                "枭": 1,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "枭": {
+                "官": 9,
+                "杀": 10,
+                "财": 8,
+                "才": 7,
+                "印": 2,
+                "枭": 1,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "食": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 2,
+                "伤": 1,
+                "比": 4,
+                "劫": 3,
+            },
+            "伤": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 2,
+                "伤": 1,
+                "比": 4,
+                "劫": 3,
+            },
+            "比": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 4,
+                "伤": 3,
+                "比": 2,
+                "劫": 1,
+            },
+            "劫": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 4,
+                "伤": 3,
+                "比": 2,
+                "劫": 1,
+            },
+        },
+        "半合": {
+            "官": {
+                "官": 2,
+                "杀": 1,
+                "财": 8,
+                "才": 7,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "杀": {
+                "官": 2,
+                "杀": 1,
+                "财": 8,
+                "才": 7,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "财": {
+                "官": 8,
+                "杀": 7,
+                "财": 2,
+                "才": 1,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "才": {
+                "官": 8,
+                "杀": 7,
+                "财": 2,
+                "才": 1,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "印": {
+                "官": 9,
+                "杀": 10,
+                "财": 8,
+                "才": 7,
+                "印": 2,
+                "枭": 1,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "枭": {
+                "官": 9,
+                "杀": 10,
+                "财": 8,
+                "才": 7,
+                "印": 2,
+                "枭": 1,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "食": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 2,
+                "伤": 1,
+                "比": 4,
+                "劫": 3,
+            },
+            "伤": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 2,
+                "伤": 1,
+                "比": 4,
+                "劫": 3,
+            },
+            "比": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 4,
+                "伤": 3,
+                "比": 2,
+                "劫": 1,
+            },
+            "劫": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 4,
+                "伤": 3,
+                "比": 2,
+                "劫": 1,
+            },
+        },
+        "拱合": {
+            "官": {
+                "官": 2,
+                "杀": 1,
+                "财": 8,
+                "才": 7,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "杀": {
+                "官": 2,
+                "杀": 1,
+                "财": 8,
+                "才": 7,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "财": {
+                "官": 8,
+                "杀": 7,
+                "财": 2,
+                "才": 1,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "才": {
+                "官": 8,
+                "杀": 7,
+                "财": 2,
+                "才": 1,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "印": {
+                "官": 9,
+                "杀": 10,
+                "财": 8,
+                "才": 7,
+                "印": 2,
+                "枭": 1,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "枭": {
+                "官": 9,
+                "杀": 10,
+                "财": 8,
+                "才": 7,
+                "印": 2,
+                "枭": 1,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "食": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 2,
+                "伤": 1,
+                "比": 4,
+                "劫": 3,
+            },
+            "伤": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 2,
+                "伤": 1,
+                "比": 4,
+                "劫": 3,
+            },
+            "比": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 4,
+                "伤": 3,
+                "比": 2,
+                "劫": 1,
+            },
+            "劫": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 4,
+                "伤": 3,
+                "比": 2,
+                "劫": 1,
+            },
+        },
+        "冲": {
+            "官": {
+                "官": 2,
+                "杀": 1,
+                "财": 10,
+                "才": 9,
+                "印": 4,
+                "枭": 3,
+                "食": 6,
+                "伤": 5,
+                "比": 8,
+                "劫": 7,
+            },
+            "杀": {
+                "官": 2,
+                "杀": 1,
+                "财": 10,
+                "才": 9,
+                "印": 4,
+                "枭": 3,
+                "食": 6,
+                "伤": 5,
+                "比": 8,
+                "劫": 7,
+            },
+            "财": {
+                "官": 8,
+                "杀": 7,
+                "财": 2,
+                "才": 1,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "才": {
+                "官": 8,
+                "杀": 7,
+                "财": 2,
+                "才": 1,
+                "印": 10,
+                "枭": 9,
+                "食": 6,
+                "伤": 5,
+                "比": 4,
+                "劫": 3,
+            },
+            "印": {
+                "官": 4,
+                "杀": 3,
+                "财": 10,
+                "才": 9,
+                "印": 2,
+                "枭": 1,
+                "食": 8,
+                "伤": 7,
+                "比": 6,
+                "劫": 5,
+            },
+            "枭": {
+                "官": 4,
+                "杀": 3,
+                "财": 10,
+                "才": 9,
+                "印": 2,
+                "枭": 1,
+                "食": 8,
+                "伤": 7,
+                "比": 6,
+                "劫": 5,
+            },
+            "食": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 2,
+                "伤": 1,
+                "比": 4,
+                "劫": 3,
+            },
+            "伤": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 2,
+                "伤": 1,
+                "比": 4,
+                "劫": 3,
+            },
+            "比": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 4,
+                "伤": 3,
+                "比": 2,
+                "劫": 1,
+            },
+            "劫": {
+                "官": 8,
+                "杀": 7,
+                "财": 6,
+                "才": 5,
+                "印": 10,
+                "枭": 9,
+                "食": 4,
+                "伤": 3,
+                "比": 2,
+                "劫": 1,
+            },
+        },
+        "穿": {
+            "官": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "杀": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "财": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "才": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "印": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "枭": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "食": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "伤": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "比": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "劫": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+        },
+        "破": {
+            "官": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "杀": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "财": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "才": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "印": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "枭": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "食": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "伤": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "比": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "劫": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+        },
+        "刑": {
+            "官": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "杀": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "财": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "才": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "印": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "枭": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "食": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "伤": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "比": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+            "劫": {
+                "官": 3,
+                "杀": 4,
+                "财": 5,
+                "才": 6,
+                "印": 1,
+                "枭": 2,
+                "食": 7,
+                "伤": 8,
+                "比": 9,
+                "劫": 10,
+            },
+        },
+    }
+
+    export let config_gaoneng_lushen_score = {
+        "合": 80,
+        "暗合": 70,
+        "冲": 10,
+        "刑": -10,
+        "破": -20,
+        "穿": -30,
+    }
+
+    export let config_gaoneng_guanxi_score = {
+        "合": 50,
+        "暗合": 40,
+        "半合": 0,
+        "拱合": 0,
+        "刑": -30,
+        "冲": -20,
+        "穿": -40,
+        "破": -35,
+    }
+}

+ 95 - 0
src/customer/DecoratorController.ts

@@ -0,0 +1,95 @@
+//tsconfig.json 中,要开启:
+// "experimentalDecorators": true,
+// "emitDecoratorMetadata": true
+
+export namespace DecoratorController {
+
+    let propertyMap: Map<string, any[]> = new Map()
+
+    //基础类型直接设置成@use(MyClass),复合类型设置成(Array,MyClass)或者(Map,MyClass)
+    export function use(cls: any, subCls: any = null, minCls: any = null) {
+        return function (target: Object, propertyKey: string) {
+            //Reflect.defineMetadata(METADATA_KEY, param, target, propertyKey);
+            //console.log(target.constructor.name, propertyKey)
+            let key = target.constructor.name + propertyKey
+            propertyMap.set(key, [cls, subCls, minCls])
+        };
+    }
+
+    function resolveAsMap(data: object, cls: any, cls2: any) {
+        let target = new Map()
+        Object.keys(data).forEach(function (key) {
+            let value = data[key]
+            if (cls == null) {
+                target.set(key, value)
+            } else if (cls == Array) {
+                target.set(key, resolveAsArray(value, cls2))
+            } else {
+                let temp = new cls()
+                resolve(temp, value)
+                target.set(key, temp)
+            }
+        })
+        return target
+    }
+
+    function resolveAsArray(data: object, cls: any) {
+        let target = []
+        if (Array.isArray(data)) {
+            data.forEach(function (value) {
+                if (cls == null) {
+                    target.push(value)
+                } else {
+                    let temp = new cls()
+                    resolve(temp, value)
+                    target.push(temp)
+                }
+
+            })
+        }
+        return target
+    }
+
+    function getMember(ary: any[], index: number) {
+        let result = null
+        if (index < ary.length) {
+            result = ary[index]
+        }
+        return result
+    }
+
+    export function resolve(bean: object, data: object) {
+        let attrNames = Object.getOwnPropertyNames(bean)
+        let clsName = bean.constructor.name
+        Object.keys(data).forEach(function (attr) {
+            let value = data[attr]
+            if (bean instanceof Map) {
+                bean.set(attr, value)
+            } else if (attrNames.indexOf(attr) != -1) {
+                let classes: any[] = propertyMap.get(clsName + attr)
+                if (classes == null) {
+                    //常规字段处理
+                    bean[attr] = value
+                } else {
+                    if (getMember(classes, 0) == Array) {
+                        //数组字段处理
+                        bean[attr] = resolveAsArray(value, getMember(classes, 1))
+                    } else if (getMember(classes, 0) == Map) {
+                        //字典字段处理
+                        bean[attr] = resolveAsMap(value, getMember(classes, 1), getMember(classes, 2))
+                    } else {
+                        //自定义类型处理
+                        let cs = getMember(classes, 0)
+                        if (cs != null) {
+                            let target = new cs()
+                            resolve(target, value)
+                            bean[attr] = target
+                        }
+                    }
+                }
+            } else {
+                console.error(clsName, "中没有字段:", attr)
+            }
+        })
+    }
+}

+ 186 - 0
src/customer/QuShiLogic.ts

@@ -0,0 +1,186 @@
+import {BaZi, DailyQuShi, DaYunItem, GaoNeng, LiuNian, QuShiInfo, SiZhu} from "./SupportModels.ts";
+import {Configs} from "./Configs.ts";
+
+export namespace QuShiLogic {
+    function hasHuaSha(zhu: SiZhu) {
+        let hasHe = false
+        let hasSha = false
+        for (let i = 0; i < zhu.gaonengs.length; i++) {
+            let gn = zhu.gaonengs[i]
+            if (["合", "暗合"].indexOf(gn.guanxi) != -1) {
+                hasHe = true
+            } else if (["冲", "刑", "穿", "破"].indexOf(gn.guanxi) != -1) {
+                hasSha = true
+            }
+        }
+        return hasHe && hasSha
+    }
+
+    function getOrderScore(gn: GaoNeng) {
+        let score = 0
+        if (["自刑", "三会"].indexOf(gn.guanxi) == -1) {
+            score = Configs.config_gaoneng_score[gn.guanxi][gn.shi_shen1][gn.shi_shen2]
+        }
+        return score
+    }
+
+    function getGuanXiScore(gn: GaoNeng) {
+        //默认0分,表示不发生高能关系时,不好也不坏,extra 常规下0,有六合化煞的时候,加分
+        let score = Configs.config_gaoneng_guanxi_score[gn.guanxi]
+        if (score == null) {
+            score = 0
+        }
+        return score
+    }
+
+    function calcTotalScore(orderScore: number, guanxiScore: number, lushen: string, banlu: string[], gn: GaoNeng) {
+        let total = orderScore + guanxiScore
+        let param = 0
+        if (gn.arg1 == lushen || gn.arg2 == lushen) {
+            param = 1
+        } else if (banlu.indexOf(gn.arg1) != -1 || banlu.indexOf(gn.arg2) != -1) {
+            param = 0.5
+        }
+
+        if (param > 0) {
+            let lushenScore = 0
+            if (Configs.config_gaoneng_lushen_score[gn.guanxi] != null) {
+                lushenScore = Configs.config_gaoneng_lushen_score[gn.guanxi]
+                let eft = 1 + lushenScore * param / 100
+                total = Math.round(eft * total)
+            }
+        }
+
+        return total
+    }
+
+    //mode : 0 日 1 时
+    export function calcSiZhuScore(zhu: SiZhu, daily: DailyQuShi, lushen: string, banlu: string[], title: string, mode: number, hour: number, excludesWeiZhi: number[]) {
+        let extra = 0
+        if (hasHuaSha(zhu)) {
+            extra = 30
+        }
+        for (let i = 0; i < zhu.gaonengs.length; i++) {
+            let gn = zhu.gaonengs[i]
+            if (gn.text == "辰戌冲" || gn.text == "丑未冲") {
+                continue
+            }
+
+            if (excludesWeiZhi.indexOf(gn.wei_zhi1) != -1 || excludesWeiZhi.indexOf(gn.wei_zhi2) != -1) {
+                continue
+            }
+
+            //排序分,就是合什么,冲什么的不同分数
+            let orderScore = getOrderScore(gn)
+            let guanxiScore = getGuanXiScore(gn)
+            if (gn.guanxi == "合" || gn.guanxi == "暗合") {
+                guanxiScore += extra
+            }
+            let totalScore = calcTotalScore(orderScore, guanxiScore, lushen, banlu, gn)
+            if (totalScore == 0) {
+                continue
+            }
+
+            let reason = title + " : " + gn.shi_shen1 + gn.guanxi + gn.shi_shen2 + "(" + gn.text + ")" + "(" + Configs.nameOfZhu[gn.wei_zhi1] + "+" + Configs.nameOfZhu[gn.wei_zhi2] + ")" + " => " + totalScore.toString()
+            let mapKey1 = gn.shi_shen1
+            let mapKey2 = gn.shi_shen2
+            if (mode == 1 && hour > 0) {
+                mapKey1 = gn.shi_shen1 + "_" + hour.toString()
+                mapKey2 = gn.shi_shen2 + "_" + hour.toString()
+            }
+
+            let raw1 = daily.getValue(mapKey1, mode)
+            raw1 += totalScore
+            daily.setValue(mapKey1, raw1, mode)
+            daily.addDetail(mapKey1, reason, mode)
+
+            let raw2 = daily.getValue(mapKey2, mode)
+            raw2 += totalScore
+            daily.setValue(mapKey2, raw2, mode)
+            daily.addDetail(mapKey2, reason, mode)
+        }
+    }
+
+    //mode: 0: 大运,1:流年 2:流月
+    export function calcQuShiScore(zhu: SiZhu, info: QuShiInfo, lushen: string, banlu: string[], title: string, mode: number, month: number = 0) {
+        let extra = 0
+        if (hasHuaSha(zhu)) {
+            extra = 30
+        }
+        for (let i = 0; i < zhu.gaonengs.length; i++) {
+            let gn = zhu.gaonengs[i]
+            if (gn.text == "辰戌冲" || gn.text == "丑未冲") {
+                continue
+            }
+            //排序分,就是合什么,冲什么的不同分数
+            let orderScore = getOrderScore(gn)
+            let guanxiScore = getGuanXiScore(gn)
+            if (gn.guanxi == "合" || gn.guanxi == "暗合") {
+                guanxiScore += extra
+            }
+            let totalScore = calcTotalScore(orderScore, guanxiScore, lushen, banlu, gn)
+            let reason = title + " : " + gn.shi_shen1 + gn.guanxi + gn.shi_shen2 + "(" + gn.text + ")" + "(" + Configs.nameOfZhu[gn.wei_zhi1] + "+" + Configs.nameOfZhu[gn.wei_zhi2] + ")" + " => " + totalScore.toString()
+            let mapKey1 = gn.shi_shen1
+            let mapKey2 = gn.shi_shen2
+            if (mode == 2 && month > 0) {
+                mapKey1 = gn.shi_shen1 + "_" + month.toString()
+                mapKey2 = gn.shi_shen2 + "_" + month.toString()
+            }
+
+            let raw1 = info.getValue(mapKey1, mode)
+            raw1 += totalScore
+            info.setValue(mapKey1, raw1, mode)
+            info.addDetail(mapKey1, reason, mode)
+
+            let raw2 = info.getValue(mapKey2, mode)
+            raw2 += totalScore
+            info.setValue(mapKey2, raw2, mode)
+            info.addDetail(mapKey2, reason, mode)
+
+        }
+    }
+
+    export function findDaYunLiuNian(year: number, bazi: BaZi) {
+        let targetDaYun = null
+        let targetLiuNian = null
+        for (let i = 0; i < bazi.dayun.length; i++) {
+            let dy = bazi.dayun[i]
+            for (let j = 0; j < dy.liunian.length; j++) {
+                let ln = dy.liunian[j]
+                if (ln.year == year) {
+                    targetDaYun = dy
+                    targetLiuNian = ln
+                    break
+                }
+            }
+        }
+        return [targetDaYun, targetLiuNian]
+    }
+
+    export function getNext(bazi: BaZi, dayun: DaYunItem, liunian: LiuNian) {
+        let dyIndex = bazi.dayun.indexOf(dayun)
+        let lnIndex = dayun.liunian.indexOf(liunian)
+        let targetDaYun: DaYunItem = null
+        let targetLiuNian: LiuNian = null
+        if (dyIndex != -1 && lnIndex != -1) {
+            lnIndex++
+            if (lnIndex < dayun.liunian.length) {
+                targetDaYun = dayun
+                targetLiuNian = dayun.liunian[lnIndex]
+            } else {
+                dyIndex++
+                if (dyIndex < bazi.dayun.length) {
+                    targetDaYun = bazi.dayun[dyIndex]
+                    targetLiuNian = targetDaYun.liunian[0]
+                }
+            }
+        }
+
+        if (targetDaYun == null || targetLiuNian == null) {
+            return null
+        } else {
+            return [targetDaYun, targetLiuNian]
+        }
+    }
+}
+

+ 179 - 0
src/customer/RiYunShiLogic.ts

@@ -0,0 +1,179 @@
+import {BaZi, DailyQuShi, LiuNian, LiuRi, LiuYue, SiZhu} from "./SupportModels.ts";
+import {Configs} from "./Configs.ts";
+import {DataCenter} from "../DataCenter.ts";
+import {QuShiLogic} from "./QuShiLogic.ts";
+
+export namespace RiYunShiLogic {
+
+
+    let tianganTexts = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
+
+    export function findNianYueRi(year: number, month: number, day: number, bazi: BaZi) {
+        let targetLiuNian = null
+        let targetLiuYue = null
+        let targetRi = null
+        for (let i = 0; i < bazi.dayun.length; i++) {
+            let dy = bazi.dayun[i]
+            let ln: LiuNian = dy.findLiuNian(year)
+            let ly: LiuYue = ln?.findLiuYue(month)
+            let lr: LiuRi = ly?.findLiuRi(day)
+            if (ln != null && ly != null && lr != null) {
+                targetLiuNian = ln
+                targetLiuYue = ly
+                targetRi = lr
+                break
+            }
+        }
+        return [targetLiuNian, targetLiuYue, targetRi]
+    }
+
+    function getTianGanStartHour(riGan: string) {
+        if (riGan == "甲" || riGan == "己") {
+            return "甲"
+        }
+
+        if (riGan == "乙" || riGan == "庚") {
+            return "丙"
+        }
+
+        if (riGan == "丙" || riGan == "辛") {
+            return "戊"
+        }
+
+        if (riGan == "丁" || riGan == "壬") {
+            return "庚"
+        }
+
+        if (riGan == "戊" || riGan == "癸") {
+            return "壬"
+        }
+
+    }
+
+    function getDistanceOfHour(hour: number) {
+        let dist = 0
+        if (hour == 23 || hour == 0) {
+            dist = 0
+        } else if (hour == 1 || hour == 2) {
+            dist = 1
+        } else if (hour == 3 || hour == 4) {
+            dist = 2
+        } else if (hour == 5 || hour == 6) {
+            dist = 3
+        } else if (hour == 7 || hour == 8) {
+            dist = 4
+        } else if (hour == 9 || hour == 10) {
+            dist = 5
+        } else if (hour == 11 || hour == 12) {
+            dist = 6
+        } else if (hour == 13 || hour == 14) {
+            dist = 7
+        } else if (hour == 15 || hour == 16) {
+            dist = 8
+        } else if (hour == 17 || hour == 18) {
+            dist = 9
+        } else if (hour == 19 || hour == 20) {
+            dist = 10
+        } else if (hour == 21 || hour == 22) {
+            dist = 11
+        }
+        return dist
+    }
+
+    function getDiZhiByHour(hour: number) {
+        let dist = getDistanceOfHour(hour)
+        return Configs.dizhiAry[dist]
+    }
+
+    function getNextByDist(ary: string[], item: string, dist: number) {
+        let result = null
+        if (ary.indexOf(item) != -1) {
+            let index = ary.indexOf(item)
+            index += dist
+            let ln = ary.length
+            while (index >= ln) {
+                index -= ln
+            }
+            result = ary[index]
+        }
+        return result
+    }
+
+    function nextTianGan(tiangan: string, dist: number) {
+        return getNextByDist(Configs.tianganAry, tiangan, dist)
+    }
+
+    function fixGaoNengs(riyuan: string, ary1: SiZhu[], ary2: SiZhu[]) {
+        for (let i = 0; i < ary1.length; i++) {
+            DataCenter.fixGaoNengByZhu(riyuan, ary1[i], ary2[i], null)
+        }
+    }
+
+
+    export function calc(liunian: LiuNian, liuyue: LiuYue, liuri: LiuRi) {
+        let lushen = DataCenter.bazi.value.shishen_guanxi.get("禄神")[0]
+        let banlu = DataCenter.bazi.value.shishen_guanxi.get("半禄")
+        let map: Map<string, DailyQuShi> = new Map()
+
+        tianganTexts.forEach(function (tg) {
+            let daily = new DailyQuShi()
+            let main_gan = createZhu(tg, tg, Configs.weizhi_ri_gan)
+            let nian_gan = createZhu(liunian.gan_text, tg, Configs.weizhi_liunian_gan)
+            let nian_zhi = createZhu(liunian.zhi_text, tg, Configs.weizhi_liunian_zhi)
+            let yue_gan = createZhu(liuyue.gan_text, tg, Configs.weizhi_liuyue_gan)
+            let yue_zhi = createZhu(liuyue.zhi_text, tg, Configs.weizhi_liuyue_zhi)
+            let ri_gan = createZhu(liuri.gan_text, tg, Configs.weizhi_liuri_gan)
+            let ri_zhi = createZhu(liuri.zhi_text, tg, Configs.weizhi_liuri_zhi)
+            let hours = [9, 11, 13, 15, 17, 19, 21]
+            let hourTianGanStart = getTianGanStartHour(ri_gan.text)
+            let dayKey = liuyue.month.toString() + "月" + liuri.day.toString() + "日"
+
+            fixGaoNengs(main_gan.text,
+                [ri_gan, ri_gan, ri_gan, yue_gan, yue_gan, nian_gan],
+                [main_gan, nian_gan, yue_gan, main_gan, nian_gan, main_gan])
+
+            fixGaoNengs(main_gan.text,
+                [ri_zhi, ri_zhi, yue_zhi],
+                [nian_zhi, yue_zhi, nian_zhi])
+
+
+            hours.forEach(function (hour) {
+                let hourKey = dayKey + " " + hour.toString() + "点"
+                let dist = getDistanceOfHour(hour)
+                let hourTianGan = nextTianGan(hourTianGanStart, dist)
+                let hourDiZhi = getDiZhiByHour(hour)
+                let shi_gan = createZhu(hourTianGan, tg, Configs.weizhi_liushi_gan)
+                let shi_zhi = createZhu(hourDiZhi, tg, Configs.weizhi_liushi_zhi)
+
+                fixGaoNengs(main_gan.text,
+                    [shi_gan, shi_gan, shi_gan, shi_gan],
+                    [main_gan, nian_gan, yue_gan, ri_gan])
+                fixGaoNengs(main_gan.text,
+                    [shi_zhi, shi_zhi, shi_zhi],
+                    [nian_zhi, yue_zhi, ri_zhi])
+                // console.log(tg, hour)
+                // console.log("    ", main_gan, nian_gan, yue_gan, ri_gan, shi_gan)
+                // console.log("    ", nian_zhi, yue_zhi, ri_zhi, shi_zhi)
+                // console.log()
+
+                QuShiLogic.calcSiZhuScore(shi_gan, daily, lushen, banlu, hourKey, 1, hour, [])
+                QuShiLogic.calcSiZhuScore(shi_zhi, daily, lushen, banlu, hourKey, 1, hour, [])
+            })
+            QuShiLogic.calcSiZhuScore(ri_gan, daily, lushen, banlu, dayKey, 0, 0, [20])
+            QuShiLogic.calcSiZhuScore(ri_zhi, daily, lushen, banlu, dayKey, 0, 0, [20])
+            daily.calcTotal()
+            map.set(tg, daily)
+        })
+        return map
+    }
+
+    function createZhu(text: string, riyuan: string, weizhi: number) {
+        let sz = new SiZhu()
+        sz.text = text
+        sz.wu_xing = Configs.config_wuxing[text]
+        sz.shi_shen = Configs.config_shishen[riyuan][text]
+        sz.wei_zhi = weizhi
+        sz.gaonengs = []
+        return sz
+    }
+}

+ 1104 - 0
src/customer/SupportModels.ts

@@ -0,0 +1,1104 @@
+import {DecoratorController} from "./DecoratorController.ts";
+import {DataCenter} from "../DataCenter.ts";
+import resolve = DecoratorController.resolve;
+import use = DecoratorController.use;
+
+
+export class XinLiResult {
+    year: number
+    month: number
+    day: number
+    hourMode: number
+    hour: number
+    minute: number
+}
+
+export class AreaResult {
+    mode: number
+    sheng: string
+    shi: string
+    qu: string
+}
+
+export class SiZhuResult {
+    niangan: string
+    nianzhi: string
+    yuegan: string
+    yuezhi: string
+    rigan: string
+    rizhi: string
+    shigan: string
+    shizhi: string
+    hourMode: number
+    ignoreError: boolean
+}
+
+export class NongliResult {
+    year: number
+    month: string
+    day: string
+    hourMode: number
+    hour: number
+    minute: number
+}
+
+export class LoginRequest {
+    account: string
+    password: string
+    userAgent: string
+    screenResolution: string
+    colorDepth: string
+    timezoneOffset: string
+    language: string
+}
+
+export class XinLiRequest {
+    token: string
+    uid: number
+    name: string
+    isMan: boolean
+    year: number
+    month: number
+    day: number
+    hourMode: number
+    hour: number
+    minute: number
+    areaMode: number
+    sheng: string
+    shi: string
+    qu: string
+}
+
+export class NongLiRequest {
+    token: string
+    uid: number
+    name: string
+    isMan: boolean
+    year: number
+    month: string
+    day: string
+    hourMode: number
+    hour: number
+    minute: number
+    areaMode: number
+    sheng: string
+    shi: string
+    qu: string
+}
+
+export class SiZhuRequest {
+    token: string
+    uid: number
+    name: string
+    isMan: boolean
+    niangan: string
+    nianzhi: string
+    yuegan: string
+    yuezhi: string
+    rigan: string
+    rizhi: string
+    hourMode: number
+    shigan: string
+    shizhi: string
+    ignoreError: boolean
+}
+
+export class LoadUserRequest {
+    owner_id: number
+}
+
+export class DeleteUserRequest {
+    owner_id: number
+    user_id: number
+}
+
+export class LoginResult {
+    code: number
+    name: string
+    token: string
+    uid: number
+
+    static build(responseText: string) {
+        let result = new LoginResult()
+        try {
+            let obj = JSON.parse(responseText)
+            result.code = obj["code"]
+            let data = obj["data"]
+            result.name = data["name"]
+            result.token = data["token"]
+            result.uid = data["uid"]
+        } catch (e) {
+            result.code = -1
+        }
+        return result
+    }
+}
+
+export class SiZhuCheckResult {
+    error: boolean
+    adv_nian: string[]
+    adv_yue: string[]
+    adv_ri: string[]
+    adv_shi: string[]
+    adv_date: string[]
+
+    static build(data: object) {
+        let result = new SiZhuCheckResult()
+        Object.keys(data).forEach(function (key) {
+            let value = data[key]
+            result[key] = value
+        })
+        return result
+    }
+}
+
+export class UserInfo {
+    id: number
+    name: string
+    isMan: boolean
+    dateMode: number
+    year: number
+    month: string
+    day: string
+    hourMode: number
+    hour: number
+    minute: number
+    areaMode: number
+    sheng: string
+    shi: string
+    qu: string
+    extra: string
+    nongli_year: number
+    nongli_month: string
+    nongli_day: string
+    req_nian_gan: string
+    req_nian_zhi: string
+    req_yue_gan: string
+    req_yue_zhi: string
+    req_ri_gan: string
+    req_ri_zhi: string
+    req_shi_gan: string
+    req_shi_zhi: string
+
+    rsp_nian_gan: string
+    rsp_nian_zhi: string
+    rsp_yue_gan: string
+    rsp_yue_zhi: string
+    rsp_ri_gan: string
+    rsp_ri_zhi: string
+    rsp_shi_gan: string
+    rsp_shi_zhi: string
+    owner_id: number
+
+    getKey() {
+        let key = ""
+        key += this.id.toString()
+        key += this.name
+        key += this.isMan ? '男' : '女'
+        if (this.dateMode == 0) {
+            key += this.year.toString()
+            key += this.month.toString()
+            key += this.day.toString()
+            if (this.hour != null) {
+                key += this.hour.toString()
+            }
+            if (this.minute != null) {
+                key += this.minute.toString()
+            }
+        } else if (this.dateMode == 1) {
+            key += this.nongli_year.toString()
+            key += this.nongli_month
+            key += this.nongli_day
+        } else if (this.dateMode == 2) {
+            key += this.req_nian_gan
+            key += this.req_nian_zhi
+            key += this.req_yue_gan
+            key += this.req_yue_zhi
+            key += this.req_ri_gan
+            key += this.req_ri_zhi
+            if (this.req_shi_gan != null) {
+                key += this.req_shi_gan
+            } else {
+                key += "无"
+            }
+            if (this.req_shi_zhi != null) {
+                key += this.req_shi_zhi
+            } else {
+                key += "无"
+            }
+        }
+        if (this.extra != null) {
+            key += this.extra
+        }
+        return key
+    }
+
+    fillData(bazi: BaZi) {
+        let req = bazi.base_info
+        let info = this
+        info.isMan = bazi.is_man
+        info.rsp_nian_gan = bazi.nian_gan.text
+        info.rsp_nian_zhi = bazi.nian_zhi.text
+        info.rsp_yue_gan = bazi.yue_gan.text
+        info.rsp_yue_zhi = bazi.yue_zhi.text
+        info.rsp_ri_gan = bazi.ri_gan.text
+        info.rsp_ri_zhi = bazi.ri_zhi.text
+        info.rsp_shi_gan = bazi.shi_gan.text
+        info.rsp_shi_zhi = bazi.shi_zhi.text
+        info.year = req.year
+        info.month = req.month?.toString()
+        info.day = req.day?.toString()
+        info.hourMode = req.hour_mode
+        info.hour = req.hour
+        info.minute = req.minute
+        info.areaMode = req.area_mode
+        info.sheng = req.sheng
+        info.shi = req.shi
+        info.qu = req.qu
+        info.nongli_year = req.nongli_year
+        info.nongli_month = req.nongli_month
+        info.nongli_day = req.nongli_day
+        info.req_nian_gan = req.nian_gan
+        info.req_nian_zhi = req.nian_zhi
+        info.req_yue_gan = req.yue_gan
+        info.req_yue_zhi = req.yue_zhi
+        info.req_ri_gan = req.ri_gan
+        info.req_ri_zhi = req.ri_zhi
+        info.req_shi_gan = req.shi_gan
+        info.req_shi_zhi = req.shi_zhi
+    }
+}
+
+
+export class GaoNeng {
+    arg1: string
+    arg2: string
+    arg3: string
+    wei_zhi1: number
+    wei_zhi2: number
+    wei_zhi3: number
+    wu_xing1: string
+    wu_xing2: string
+    wu_xing3: string
+    shi_shen1: string
+    shi_shen2: string
+    shi_shen3: string
+    text: string
+    guanxi: string
+    leibie: string
+    hehua: string
+    fangxiang: string
+    zengqiang_shishen: string
+    tip: string
+    sign: string
+    xing_chu: string
+    xing_chong: string
+}
+
+export class SiZhu {
+    text: string
+    wei_zhi: number
+    wu_xing: string
+    shi_shen: string
+    yin_yang: string
+    cang_gan1: string
+    cang_gan2: string
+    cang_gan3: string
+    gan1_wu_xing: string
+    gan2_wu_xing: string
+    gan3_wu_xing: string
+    gan1_shi_shen: string
+    gan2_shi_shen: string
+    gan3_shi_shen: string
+    zhang_sheng_zhu: string
+    zhang_sheng_ri: string
+    dayun_text: string
+    liunian_text: string
+    liuyue_text: string
+    liuri_text: string
+    @use(Array, GaoNeng)
+    gaonengs: GaoNeng[]
+    is_muku: boolean
+    is_muku_open: boolean
+    @use(Array)
+    shenshas: string[]
+    @use(Map, Array, GaoNeng)
+    trigger_gaonengs: Map<string, GaoNeng[]>
+}
+
+export class PowerCounter {
+    @use(Map)
+    power_raw: Map<string, number>
+    @use(Map)
+    power_muku: Map<string, number>
+    @use(Map)
+    power_gaoneng: Map<string, number>
+    @use(Map)
+    power_zihe: Map<string, number>
+}
+
+
+export class PowerDetail {
+    raw: Map<string, number> = new Map()
+    muku: Map<string, number> = new Map()
+    gaoneng: Map<string, number> = new Map()
+    zihe: Map<string, number> = new Map()
+
+    rawWuXingTotal: number
+    mukuWuXingTotal: number
+    gaonengWuXingTotal: number
+    ziheWuXingTotal: number
+
+    rawShiShenTotal: number
+    mukuShiShenTotal: number
+    gaonengShiShenTotal: number
+    ziheShiShenTotal: number
+
+    powerMap: Map<number, any>
+    wuxingTotals: Map<number, number>
+    shishenTotals: Map<number, number>
+
+    calc(steps: Map<string, number>, counter: PowerCounter) {
+        let wuxingAry = ["木", "火", "土", "金", "水"]
+        let shishenAry = ["官", "杀", "比", "劫", "食", "伤", "财", "才", "印", "枭"]
+        this.rawWuXingTotal = 0
+        this.mukuWuXingTotal = 0
+        this.gaonengWuXingTotal = 0
+        this.ziheWuXingTotal = 0
+
+        this.rawShiShenTotal = 0
+        this.mukuShiShenTotal = 0
+        this.gaonengShiShenTotal = 0
+        this.ziheShiShenTotal = 0
+
+        let self = this
+        wuxingAry.forEach(function (wx) {
+            let step = steps.get(wx)
+            let ctRaw = counter.power_raw.get(wx)
+            let ctGaoNeng = counter.power_gaoneng.get(wx)
+            let ctMuKu = counter.power_muku.get(wx)
+            let ctZiHe = counter.power_zihe.get(wx)
+
+            self.raw.set(wx, step * ctRaw)
+            self.muku.set(wx, step * ctMuKu)
+            self.gaoneng.set(wx, step * ctGaoNeng)
+            self.zihe.set(wx, step * ctZiHe)
+
+            self.rawWuXingTotal += step * ctRaw
+            self.gaonengWuXingTotal += step * ctGaoNeng
+            self.mukuWuXingTotal += step * ctMuKu
+            self.ziheWuXingTotal += step * ctZiHe
+        })
+
+        shishenAry.forEach(function (ss) {
+            let step = steps.get(ss)
+            let ctRaw = counter.power_raw.get(ss)
+            let ctGaoNeng = counter.power_gaoneng.get(ss)
+            let ctMuKu = counter.power_muku.get(ss)
+            let ctZiHe = counter.power_zihe.get(ss)
+
+            self.raw.set(ss, step * ctRaw)
+            self.muku.set(ss, step * ctMuKu)
+            self.gaoneng.set(ss, step * ctGaoNeng)
+            self.zihe.set(ss, step * ctZiHe)
+
+            self.rawShiShenTotal += step * ctRaw
+            self.gaonengShiShenTotal += step * ctGaoNeng
+            self.mukuShiShenTotal += step * ctMuKu
+            self.ziheShiShenTotal += step * ctZiHe
+        })
+
+        this.powerMap = new Map()
+        this.powerMap.set(1, this.raw)
+        this.powerMap.set(2, this.gaoneng)
+        this.powerMap.set(4, this.muku)
+        this.powerMap.set(8, this.zihe)
+
+        this.wuxingTotals = new Map()
+        this.wuxingTotals.set(1, this.rawWuXingTotal)
+        this.wuxingTotals.set(2, this.gaonengWuXingTotal)
+        this.wuxingTotals.set(4, this.mukuWuXingTotal)
+        this.wuxingTotals.set(8, this.ziheWuXingTotal)
+
+        this.shishenTotals = new Map()
+        this.shishenTotals.set(1, this.rawShiShenTotal)
+        this.shishenTotals.set(2, this.gaonengShiShenTotal)
+        this.shishenTotals.set(4, this.mukuShiShenTotal)
+        this.shishenTotals.set(8, this.ziheShiShenTotal)
+    }
+
+    private getValueByIndexs(indexs: number[], src: Map<any, any>, key: any) {
+        let result = 0
+        indexs.forEach(function (i) {
+            let data = src.get(i)
+            if (key != null) {
+                result += data.get(key)
+            } else {
+                result += data
+            }
+        })
+        return result
+    }
+
+    private getIndexs(mode: number) {
+        let indexs = []
+        switch (mode) {
+            case 1:
+                indexs = [1]
+                break
+            case 2:
+                indexs = [2]
+                break
+            case 3:
+                indexs = [1, 2]
+                break
+            case 4:
+                indexs = [4]
+                break
+            case 5:
+                indexs = [1, 4]
+                break
+            case 6:
+                indexs = [2, 4]
+                break
+            case 7:
+                indexs = [1, 2, 4]
+                break
+            case 8:
+                indexs = [8]
+                break
+            case 9:
+                indexs = [1, 8]
+                break
+            case 10:
+                indexs = [2, 8]
+                break
+            case 11:
+                indexs = [1, 2, 8]
+                break
+            case 12:
+                indexs = [4, 8]
+                break
+            case 13:
+                indexs = [1, 4, 8]
+                break
+            case 14:
+                indexs = [2, 4, 8]
+                break
+            case 15:
+                indexs = [1, 2, 4, 8]
+                break
+        }
+        return indexs
+    }
+
+    getPower(key: string, mode: number = DataCenter.powerMode.value) {
+        let value = 0
+        if (key == null) {
+            return value
+        }
+
+        let indexs = this.getIndexs(mode)
+        value = this.getValueByIndexs(indexs, this.powerMap, key)
+        return value
+    }
+
+    getWuXingTotal(mode: number = DataCenter.powerMode.value) {
+        let indexs = this.getIndexs(mode)
+        let value = this.getValueByIndexs(indexs, this.wuxingTotals, null)
+        return value
+    }
+
+    /**
+     * mode:1 => raw, 3=>raw+gaoneng 5=>raw+muku 7=>all
+     * */
+    getShiShenTotal(mode: number = DataCenter.powerMode.value) {
+        let indexs = this.getIndexs(mode)
+        let value = this.getValueByIndexs(indexs, this.shishenTotals, null)
+        return value
+    }
+}
+
+export class GeJuItem {
+    arg1: string
+    arg2: string
+    shishen1: string
+    shishen2: string
+    guanxi: string
+    guan_sha: number
+    cai_xing: number
+    yin_shou: number
+    shi_shang: number
+    bi_jie: number
+    trigger: string
+
+    constructor() {
+        this.guan_sha = 0
+        this.cai_xing = 0
+        this.yin_shou = 0
+        this.shi_shang = 0
+        this.bi_jie = 0
+    }
+
+    getTotal() {
+        return this.guan_sha + this.cai_xing + this.yin_shou + this.shi_shang + this.bi_jie
+    }
+}
+
+export class GeJuScore {
+    guan_sha: number = 0
+    cai_xing: number = 0
+    yin_shou: number = 0
+    shi_shang: number = 0
+    bi_jie: number = 0
+    total: number = 0
+}
+
+export class SiZhuGeJu {
+    yudao: string
+    @use(Array, GeJuItem)
+    items: GeJuItem[]
+    guan_sha: number = 0
+    cai_xing: number = 0
+    yin_shou: number = 0
+    shi_shang: number = 0
+    bi_jie: number = 0
+    total: number = 0
+
+    filter(trigger: string) {
+        let result = []
+        this.items.forEach(function (item) {
+            if (item.trigger == trigger) {
+                result.push(item)
+            }
+        })
+        return result
+    }
+
+    getScores(trigger: string) {
+        let guanSha = 0
+        let caiXing = 0
+        let yinShou = 0
+        let shiShang = 0
+        let biJie = 0
+        let all = 0
+        this.items.forEach(function (item) {
+            if (item.trigger == trigger) {
+                guanSha += item.guan_sha
+                caiXing += item.cai_xing
+                yinShou += item.yin_shou
+                shiShang += item.shi_shang
+                biJie += item.bi_jie
+            }
+        })
+        all = guanSha + caiXing + yinShou + shiShang + biJie
+        return [guanSha, caiXing, yinShou, shiShang, biJie, all]
+
+    }
+}
+
+export class XiongJi {
+    name: string
+    guanxi: string
+    arg1: string
+    arg2: string
+    tip: string
+    found: boolean
+}
+
+export class QuShiItem {
+    score: number
+    reasons: string[]
+
+    constructor() {
+        this.score = 0
+        this.reasons = []
+    }
+}
+
+export class LiuRi {
+    day: number
+    nong_li: string
+    xing_qi: string
+    gan_text: string
+    zhi_text: string
+    @use(SiZhu)
+    gan_zhu: SiZhu
+    @use(SiZhu)
+    zhi_zhu: SiZhu
+    is_gaoneng_calced: boolean = false
+    trigger: string
+}
+
+export class LiuYue {
+    month: number
+    jie_qi: string
+    jie_qi_date: string
+    gan_text: string
+    zhi_text: string
+    @use(SiZhu)
+    gan_zhu: SiZhu
+    @use(SiZhu)
+    zhi_zhu: SiZhu
+    @use(Array, LiuRi)
+    liuri: LiuRi[]
+    trigger: string
+    yinyuan_level: number = 0
+    yinyuan_tip: string
+    is_gaoneng_calced: boolean = false
+    qushiItems: Map<string, QuShiItem> = new Map()
+
+    findLiuRi(day: number) {
+        let result = null
+        for (let i = 0; i < this.liuri.length; i++) {
+            let temp = this.liuri[i]
+            if (temp.day == day) {
+                result = temp
+                break
+            }
+        }
+        return result
+    }
+}
+
+export class LiuNian {
+    year: number
+    gan_text: string
+    zhi_text: string
+    from_dayun: boolean
+    age: number
+    @use(SiZhu)
+    gan_zhu: SiZhu
+    @use(SiZhu)
+    zhi_zhu: SiZhu
+    @use(Array, LiuYue)
+    liuyue: LiuYue[]
+    trigger: string
+    yinyuan_level: number = 0
+    yinyuan_tip: string
+    qushiItems: Map<string, QuShiItem> = new Map()
+
+    findLiuYue(month: number) {
+        let result = null
+        for (let i = 0; i < this.liuyue.length; i++) {
+            let temp = this.liuyue[i]
+            if (temp.month == month) {
+                result = temp
+                break
+            }
+        }
+        return result
+    }
+}
+
+export class DaYunItem {
+    is_dayun: boolean
+    gan_text: string
+    zhi_text: string
+    trigger: string
+    start_age: number
+    end_age: number
+    start_year: number
+    end_year: number
+    @use(SiZhu)
+    gan_zhu: SiZhu
+    @use(SiZhu)
+    zhi_zhu: SiZhu
+    @use(Array, LiuNian)
+    liunian: LiuNian[]
+    qushiItems: Map<string, QuShiItem> = new Map()
+
+    findLiuNian(year: number) {
+        let result = null
+        for (let i = 0; i < this.liunian.length; i++) {
+            let temp = this.liunian[i]
+            if (temp.year == year) {
+                result = temp
+                break
+            }
+        }
+        return result
+    }
+}
+
+export class ZhenDuanItem {
+    content: string
+    order: number
+    selected: boolean
+    defaultSelected: boolean
+    tip: string
+    key: string
+}
+
+export class ZhenDuan {
+    @use(Array, ZhenDuanItem)
+    jianyi: ZhenDuanItem[]
+    @use(Array, ZhenDuanItem)
+    cankao: ZhenDuanItem[]
+
+    getItems() {
+        let lst = []
+        let ary = [this.jianyi, this.cankao]
+        ary.forEach(function (items) {
+            items.forEach(function (item) {
+                lst.push(item)
+            })
+        })
+        return lst
+    }
+}
+
+export class ZhenDuanSet {
+    @use(ZhenDuan)
+    wuxing: ZhenDuan
+    @use(ZhenDuan)
+    shishen: ZhenDuan
+    @use(ZhenDuan)
+    zuozhi: ZhenDuan
+    @use(ZhenDuan)
+    menhu: ZhenDuan
+    @use(ZhenDuan)
+    shensha: ZhenDuan
+    @use(ZhenDuan)
+    geju: ZhenDuan
+    @use(Map, ZhenDuan)
+    gaoneng: Map<string, ZhenDuan>
+    @use(ZhenDuan)
+    jiankang: ZhenDuan
+    @use(ZhenDuan)
+    qinggan: ZhenDuan
+    @use(ZhenDuan)
+    dayun: ZhenDuan
+    @use(ZhenDuan)
+    yinyuan: ZhenDuan
+
+    getZhenDuanContent(target: ZhenDuan) {
+        let s = ""
+        let items = target.getItems()
+        items.forEach(function (item) {
+            if (item.selected) {
+                s += item.content
+            }
+        })
+        return s
+    }
+
+    getContent(includeQingGan: boolean, includeDaYun: boolean, includeYinYuan: boolean) {
+        let self = this
+        let s = ""
+        let sWuXing = this.getZhenDuanContent(this.wuxing)
+        if (sWuXing.length > 0) {
+            s += "五行" + sWuXing + "\n\n"
+        }
+        let sShiShen = this.getZhenDuanContent(this.shishen)
+        if (sShiShen.length > 0) {
+            s += sShiShen + "\n\n"
+        }
+        let sZuoZhi = this.getZhenDuanContent(this.zuozhi)
+        if (sZuoZhi.length > 0) {
+            s += sZuoZhi + "\n\n"
+        }
+        let sMenHu = this.getZhenDuanContent(this.menhu)
+        if (sMenHu.length > 0) {
+            s += sMenHu + "\n\n"
+        }
+        let sShenSha = this.getZhenDuanContent(this.shensha)
+        if (sShenSha.length > 0) {
+            s += "神煞方面" + sShenSha + "\n\n"
+        }
+        let sGeJu = this.getZhenDuanContent(this.geju)
+        if (sGeJu.length > 0) {
+            s += "八字格局" + sGeJu + "\n\n"
+        }
+        let sGaoNeng = ""
+        this.gaoneng.forEach(function (zd) {
+            sGaoNeng += self.getZhenDuanContent(zd)
+        })
+        if (sGaoNeng.length > 0) {
+            s += "八字原局" + sGaoNeng + "\n\n"
+        }
+        let sJianKang = this.getZhenDuanContent(this.jiankang)
+        if (sJianKang.length > 0) {
+            s += "健康方面" + sJianKang + "\n\n"
+        }
+        if (includeQingGan) {
+            let sQingGan = this.getZhenDuanContent(this.qinggan)
+            if (sQingGan.length > 0) {
+                s += "情感方面" + sQingGan + "\n\n"
+            }
+        }
+        if (includeDaYun) {
+            let sDaYun = this.getZhenDuanContent(this.dayun)
+            if (sDaYun.length > 0) {
+                s += sDaYun + "\n\n"
+            }
+        }
+        if (includeYinYuan) {
+            let sYinYuan = this.getZhenDuanContent(this.yinyuan)
+            if (sYinYuan.length > 0) {
+                s += sYinYuan + "\n\n"
+            }
+        }
+
+        return s
+    }
+}
+
+export class BaseInfo {
+    date_mode: number
+    year: number
+    month: number
+    day: number
+    hour_mode: number
+    hour: number
+    minute: number
+    area_mode: number
+    sheng: string
+    shi: string
+    qu: string
+    nongli_year: number
+    nongli_month: string
+    nongli_day: string
+    nian_gan: string
+    nian_zhi: string
+    yue_gan: string
+    yue_zhi: string
+    ri_gan: string
+    ri_zhi: string
+    shi_gan: string
+    shi_zhi: string
+}
+
+
+export class DailyQuShi {
+    ri: Map<string, number> = new Map()
+    shi: Map<string, number> = new Map()
+    total: Map<string, number> = new Map()
+    detailsRi: Map<string, string[]> = new Map()
+    detailsShi: Map<string, string[]> = new Map()
+
+    getValue(key: string, mode: number) {
+        if (mode == 0) {
+            if (this.ri.has(key)) {
+                return this.ri.get(key)
+            } else {
+                this.ri.set(key, 0)
+                return 0
+            }
+        } else if (mode == 1) {
+            if (this.shi.has(key)) {
+                return this.shi.get(key)
+            } else {
+                this.shi.set(key, 0)
+                return 0
+            }
+        }
+    }
+
+    setValue(key: string, value: number, mode: number) {
+        if (mode == 0) {
+            this.ri.set(key, value)
+        } else if (mode == 1) {
+            this.shi.set(key, value)
+        }
+    }
+
+    addDetail(key: string, s: string, mode: number) {
+        let lst = this.detailsRi
+        if (mode == 1) {
+            lst = this.detailsShi
+        }
+        if (!lst.has(key)) {
+            lst.set(key, [])
+        }
+        let temp = lst.get(key)
+        temp.push(s)
+    }
+
+    calcTotal() {
+        let shishen_list = ["官", "杀", "财", "才", "印", "枭", "食", "伤", "比", "劫"]
+        let self = this
+        shishen_list.forEach(function (ss) {
+            let temp = 0
+            if (self.ri.has(ss)) {
+                temp += self.ri.get(ss)
+            }
+            //注意,这里出来的月数值已经是累加过后的,是基于上个月的月数据再累加上去的。
+            for (let i = 9; i <= 21; i += 2) {
+                let key = ss + "_" + i.toString()
+                if (self.shi.has(key)) {
+                    temp += self.shi.get(key)
+                }
+                self.total.set(key, temp)
+            }
+        })
+    }
+}
+
+export class QuShiInfo {
+    year: number
+    yun: Map<string, number> = new Map()
+    nian: Map<string, number> = new Map()
+    yue: Map<string, number> = new Map()
+    total: Map<string, number> = new Map()
+    detailsYun: Map<string, string[]> = new Map()
+    detailsNian: Map<string, string[]> = new Map()
+    detailsYue: Map<string, string[]> = new Map()
+
+    getValue(key: string, mode: number) {
+        if (mode == 0) {
+            if (this.yun.has(key)) {
+                return this.yun.get(key)
+            } else {
+                this.yun.set(key, 0)
+                return 0
+            }
+        } else if (mode == 1) {
+            if (this.nian.has(key)) {
+                return this.nian.get(key)
+            } else {
+                this.nian.set(key, 0)
+                return 0
+            }
+        } else if (mode == 2) {
+            if (this.yue.has(key)) {
+                return this.yue.get(key)
+            } else {
+                this.yue.set(key, 0)
+                return 0
+            }
+        }
+    }
+
+    setValue(key: string, value: number, mode: number) {
+        if (mode == 0) {
+            this.yun.set(key, value)
+        } else if (mode == 1) {
+            this.nian.set(key, value)
+        } else if (mode == 2) {
+            this.yue.set(key, value)
+        }
+    }
+
+    addDetail(key: string, s: string, mode: number) {
+        let lst = this.detailsYun
+        if (mode == 1) {
+            lst = this.detailsNian
+        } else if (mode == 2) {
+            lst = this.detailsYue
+        }
+        if (!lst.has(key)) {
+            lst.set(key, [])
+        }
+        let temp = lst.get(key)
+        temp.push(s)
+    }
+
+    calcTotal() {
+        let shishen_list = ["官", "杀", "财", "才", "印", "枭", "食", "伤", "比", "劫"]
+        let self = this
+        shishen_list.forEach(function (ss) {
+            let temp = 0
+            if (self.yun.has(ss)) {
+                temp += self.yun.get(ss)
+            }
+            if (self.nian.has(ss)) {
+                temp += self.nian.get(ss)
+            }
+            //注意,这里出来的月数值已经是累加过后的,是基于上个月的月数据再累加上去的。
+            for (let i = 1; i <= 12; i++) {
+                let key = ss + "_" + i.toString()
+                if (self.yue.has(key)) {
+                    temp += self.yue.get(key)
+                }
+                self.total.set(key, temp)
+            }
+        })
+    }
+}
+
+export class RiYunShi {
+    liu_nian_gan: SiZhu
+    liu_nian_zhi: SiZhu
+    liu_yue_gan: SiZhu
+    liu_yue_zhi: SiZhu
+    liu_ri_gan: SiZhu
+    liu_ri_zhi: SiZhu
+    ri_gan: SiZhu
+}
+
+export class BaZi {
+    is_man: boolean
+    tai_yang_shi: string
+    @use(SiZhu)
+    nian_gan: SiZhu
+    @use(SiZhu)
+    nian_zhi: SiZhu
+    @use(SiZhu)
+    yue_gan: SiZhu
+    @use(SiZhu)
+    yue_zhi: SiZhu
+    @use(SiZhu)
+    ri_gan: SiZhu
+    @use(SiZhu)
+    ri_zhi: SiZhu
+    @use(SiZhu)
+    shi_gan: SiZhu
+    @use(SiZhu)
+    shi_zhi: SiZhu
+    tong_dang: number
+    yi_dang: number
+    @use(Map)
+    power_steps: Map<string, number>
+    @use(PowerCounter)
+    counter: PowerCounter
+    @use(Map)
+    shishen_guanxi: Map<string, string[]>
+    @use(Map, SiZhuGeJu)
+    tiangan_geju: Map<string, SiZhuGeJu>
+    @use(Map, SiZhuGeJu)
+    dizhi_geju: Map<string, SiZhuGeJu>
+    @use(Map)
+    geju_score: Map<string, number>
+    @use(Map, Array, XiongJi)
+    geju_xiongji: Map<string, XiongJi[]>
+    @use(Array, DaYunItem)
+    dayun: DaYunItem[]
+    @use(Map, SiZhuGeJu)
+    dayun_tiangan_geju: Map<string, SiZhuGeJu>
+    @use(Map, SiZhuGeJu)
+    dayun_dizhi_geju: Map<string, SiZhuGeJu>
+    @use(Map, Map)
+    dayun_geju_score: Map<string, Map<string, number>>
+    @use(Map, SiZhuGeJu)
+    liunian_tiangan_geju: Map<string, SiZhuGeJu>
+    @use(Map, SiZhuGeJu)
+    liunian_dizhi_geju: Map<string, SiZhuGeJu>
+    @use(Map, Map)
+    liunian_geju_score: Map<string, Map<string, number>>
+    @use(ZhenDuanSet)
+    zhenduan: ZhenDuanSet
+    @use(BaseInfo)
+    base_info: BaseInfo
+
+
+    //额外的
+    powerDetail: PowerDetail
+    qushiInfo: QuShiInfo[]
+    dailyQuShi: Map<string, DailyQuShi>[]
+    dailyQuShiDate: string[]
+
+
+    static build(obj: object) {
+        let bazi = new BaZi()
+        resolve(bazi, obj)
+        console.log("bazi:", bazi)
+        bazi.powerDetail = new PowerDetail()
+        bazi.powerDetail.calc(bazi.power_steps, bazi.counter)
+        return bazi
+    }
+
+    allSiZhu() {
+        return [this.nian_gan, this.nian_zhi, this.yue_gan, this.yue_zhi, this.ri_gan, this.ri_zhi, this.shi_gan, this.shi_zhi]
+    }
+}

+ 17 - 0
src/main.ts

@@ -8,6 +8,7 @@ import ElementPlus from 'element-plus'
 import {AreaData} from "./AreaData.ts";
 import {LocalModels} from "./LocalModels.ts";
 import {DataCenter} from "./DataCenter.ts";
+import {NongLiData} from "./NongLiData.ts";
 
 let app = createApp(App)
 app.use(ElementPlus)
@@ -33,3 +34,19 @@ areaInfos.forEach(function (records, index) {
     }
 })
 
+let nongliInfos = NongLiData.nongli.split("\n")
+nongliInfos.forEach(function (records, index: number) {
+    if (index % 2 == 1) {
+        if (records.length > 0) {
+            let items = records.split(",")
+            let dt = new LocalModels.NongLi()
+            dt.date = items[0]
+            dt.month = items[1]
+            dt.day = items[2]
+            dt.year = parseInt(items[3])
+            DataCenter.addNongLi(dt)
+        }
+    }
+
+})
+

+ 18 - 8
src/router.ts

@@ -1,17 +1,27 @@
 import {createRouter, createWebHistory} from "vue-router";
-import ApplyUserInfo from "./components/ApplyUserInfo.vue";
-import Test from "./components/Test.vue";
+import Controller from "./components/customer/Controller.vue";
+import Login from "./components/customer/Login.vue";
 
 const routes = [
+    // {
+    //     path: "/applyUserInfo",
+    //     name: "ApplyUserInfo",
+    //     component: ApplyUserInfo,
+    // },
+    // {
+    //     path: "/test",
+    //     name: "test",
+    //     component: Test,
+    // },
     {
-        path: "/applyUserInfo",
-        name: "ApplyUserInfo",
-        component: ApplyUserInfo,
+        path: "/",
+        name: "login",
+        component: Login,
     },
     {
-        path: "/test",
-        name: "test",
-        component: Test,
+        path: "/home",
+        name: "controller",
+        component: Controller,
     },
 ]
 

+ 16 - 0
src/theme.css

@@ -50,6 +50,7 @@
 
 .el-card {
     --el-fill-color-blank: white;
+    --el-text-color-primary: 262727;
 }
 
 .el-tree {
@@ -101,6 +102,20 @@
         --el-text-color-regular: white;
     }
 
+    .el-progress__text {
+        --el-text-color-regular: white
+    }
+
+    .el-radio-button__inner {
+        --el-button-text-color: white;
+        --el-text-color-regular: white
+    }
+
+    .el-segmented {
+        --el-fill-color-light: #303030;
+        --el-fill-color-dark: #505050
+    }
+
     .el-collapse {
         --el-fill-color-blank: #262727;
     }
@@ -116,6 +131,7 @@
 
     .el-card {
         --el-fill-color-blank: #262727;
+        --el-text-color-primary: white;
     }
 
     .el-tree {

+ 3 - 1
tsconfig.json

@@ -20,7 +20,9 @@
     "strict": false,
     "noUnusedLocals": true,
     "noUnusedParameters": true,
-    "noFallthroughCasesInSwitch": true
+    "noFallthroughCasesInSwitch": true,
+    "experimentalDecorators": true,
+    "emitDecoratorMetadata": true
   },
   "include": [
     "src/**/*.ts",

部分文件因文件數量過多而無法顯示