├── .github └── workflows │ └── main.yml ├── .gitignore ├── .vscode └── extensions.json ├── README.md ├── index.html ├── package.json ├── pnpm-lock.yaml ├── public └── favicon.ico ├── src ├── App.vue ├── assets │ └── logo.png ├── components │ └── Birthday.vue ├── main.js ├── router │ └── index.js ├── useVant.js ├── utils │ ├── date-transform.js │ └── index.js └── views │ ├── Home.vue │ └── natal-chart │ ├── CenterCell.vue │ ├── PalaceCell.vue │ ├── index.vue │ └── utils │ ├── Palace.js │ ├── Person.js │ ├── map.js │ └── rules.js └── vite.config.js /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Build and Deploy 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - name: Checkout 🛎️ 13 | uses: actions/checkout@v3 14 | 15 | - name: install node 16 | uses: actions/setup-node@v3 17 | with: 18 | node-version: '14' 19 | 20 | - name: use pnpm 21 | uses: pnpm/action-setup@v2.0.1 22 | with: 23 | version: 7 24 | run_install: false 25 | 26 | - name: Install and Build 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built. 27 | run: | 28 | pnpm install 29 | npm run build 30 | 31 | - name: deploy 🚀 32 | uses: JamesIves/github-pages-deploy-action@v4.3.0 33 | with: 34 | token: ${{ secrets.ACCESS_TOKEN_OF_NATAL_CHART }} 35 | branch: gh-pages 36 | folder: dist 37 | clean: true 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["johnsoncodehk.volar"] 3 | } 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 紫薇斗数命盘生成 2 | 3 | 1. 建立表格 4 | 5 | 2. 子 -- 亥 (地支) 6 | 7 | 3. 根据阴历年份数字计算寅宫 -》① -》十天干排进 12 宫,放到地支前面 8 | 9 | 4. 根据寅宫确定命宫和身宫 10 | * 命宫:寅宫顺时针到生月,然后逆时针到生的时辰 11 | * 身宫:寅宫顺时针到生月,然后顺时针到生的时辰 12 | 13 | 5. 确定十二宫 -》 命宫顺时针依次:父母宫 -》福德-》田宅-》官禄 -》 朋友宫 -》 迁移 -》 疾厄 -》 财帛 -》 子女 -》 夫妻 -》兄弟 14 | 15 | 5. 计算哪个局:例如金四局,根据命宫的天干地支计算 16 | * 天干:五个 17 | * 地支:三个(从确定的天干开始接下来的三个开始循环) 18 | 19 | 6. 确定紫薇位置:日 / 几局 (整除) -> 从寅宫开始 20 | * 借偶数 -》 除出来的数 加上 借的数 21 | * 借奇数数 -》 除出来的数 减去 借的数 22 | 23 | 8. 排星 -》 确定紫薇 ,逆时针依次,天机 -》空格 -》太阳 -》武曲 -》天同 -》 空两格 -》 廉贞 24 | 25 | 9. 天府星 :紫薇斜对角(右上到左下)顺时针: 天府星 -》太阴 -》 贪狼 -》 巨门 -》天相 -》 天梁 -》 七杀 -》 空三格 -》 破军 26 | 27 | 10. 填次星 28 | 29 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "natal-chart", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "vite --host", 7 | "build": "vite build --base=/natal-chart/", 8 | "preview": "vite preview" 9 | }, 10 | "dependencies": { 11 | "vant": "^3.4.8", 12 | "vue": "^3.2.25", 13 | "vue-router": "4" 14 | }, 15 | "devDependencies": { 16 | "@vitejs/plugin-vue": "^2.3.1", 17 | "unplugin-vue-components": "^0.21.1", 18 | "vite": "^2.9.5", 19 | "vite-plugin-style-import": "1.4.1" 20 | } 21 | } -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@vitejs/plugin-vue': ^2.3.1 5 | unplugin-vue-components: ^0.21.1 6 | vant: ^3.4.8 7 | vite: ^2.9.5 8 | vite-plugin-style-import: 1.4.1 9 | vue: ^3.2.25 10 | vue-router: '4' 11 | 12 | dependencies: 13 | vant: registry.npmmirror.com/vant/3.4.8_vue@3.2.33 14 | vue: registry.npmmirror.com/vue/3.2.33 15 | vue-router: registry.npmmirror.com/vue-router/4.0.14_vue@3.2.33 16 | 17 | devDependencies: 18 | '@vitejs/plugin-vue': registry.npmmirror.com/@vitejs/plugin-vue/2.3.1_vite@2.9.6+vue@3.2.33 19 | unplugin-vue-components: registry.npmmirror.com/unplugin-vue-components/0.21.1_vite@2.9.6+vue@3.2.33 20 | vite: registry.npmmirror.com/vite/2.9.6 21 | vite-plugin-style-import: registry.npmmirror.com/vite-plugin-style-import/1.4.1_vite@2.9.6 22 | 23 | packages: 24 | 25 | registry.npmmirror.com/@antfu/utils/0.5.2: 26 | resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@antfu/utils/-/utils-0.5.2.tgz} 27 | name: '@antfu/utils' 28 | version: 0.5.2 29 | dev: true 30 | 31 | registry.npmmirror.com/@babel/parser/7.17.9: 32 | resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.17.9.tgz} 33 | name: '@babel/parser' 34 | version: 7.17.9 35 | engines: {node: '>=6.0.0'} 36 | hasBin: true 37 | dev: false 38 | 39 | registry.npmmirror.com/@nodelib/fs.scandir/2.1.5: 40 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz} 41 | name: '@nodelib/fs.scandir' 42 | version: 2.1.5 43 | engines: {node: '>= 8'} 44 | dependencies: 45 | '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5 46 | run-parallel: registry.npmmirror.com/run-parallel/1.2.0 47 | dev: true 48 | 49 | registry.npmmirror.com/@nodelib/fs.stat/2.0.5: 50 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz} 51 | name: '@nodelib/fs.stat' 52 | version: 2.0.5 53 | engines: {node: '>= 8'} 54 | dev: true 55 | 56 | registry.npmmirror.com/@nodelib/fs.walk/1.2.8: 57 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz} 58 | name: '@nodelib/fs.walk' 59 | version: 1.2.8 60 | engines: {node: '>= 8'} 61 | dependencies: 62 | '@nodelib/fs.scandir': registry.npmmirror.com/@nodelib/fs.scandir/2.1.5 63 | fastq: registry.npmmirror.com/fastq/1.13.0 64 | dev: true 65 | 66 | registry.npmmirror.com/@popperjs/core/2.11.5: 67 | resolution: {integrity: sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@popperjs/core/-/core-2.11.5.tgz} 68 | name: '@popperjs/core' 69 | version: 2.11.5 70 | dev: false 71 | 72 | registry.npmmirror.com/@rollup/pluginutils/4.2.1: 73 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz} 74 | name: '@rollup/pluginutils' 75 | version: 4.2.1 76 | engines: {node: '>= 8.0.0'} 77 | dependencies: 78 | estree-walker: registry.npmmirror.com/estree-walker/2.0.2 79 | picomatch: registry.npmmirror.com/picomatch/2.3.1 80 | dev: true 81 | 82 | registry.npmmirror.com/@vant/icons/1.8.0: 83 | resolution: {integrity: sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vant/icons/-/icons-1.8.0.tgz} 84 | name: '@vant/icons' 85 | version: 1.8.0 86 | dev: false 87 | 88 | registry.npmmirror.com/@vant/popperjs/1.1.0: 89 | resolution: {integrity: sha512-8MD1gz146awV/uPxYjz4pet22f7a9YVKqk7T+gFkWFwT9mEcrIUEg/xPrdOnWKLP9puXyYtm7oVfSDSefZ/p/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vant/popperjs/-/popperjs-1.1.0.tgz} 90 | name: '@vant/popperjs' 91 | version: 1.1.0 92 | dependencies: 93 | '@popperjs/core': registry.npmmirror.com/@popperjs/core/2.11.5 94 | dev: false 95 | 96 | registry.npmmirror.com/@vant/use/1.3.6: 97 | resolution: {integrity: sha512-3z+nywPaV2F5BdJO7RQxWlgfzJeEOmViD2yHMb7Tg+R4NR/7iQskqW8v2Cnv9FWSJgTOSHlcr7UzeLpiTAP4HA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vant/use/-/use-1.3.6.tgz} 98 | name: '@vant/use' 99 | version: 1.3.6 100 | dev: false 101 | 102 | registry.npmmirror.com/@vitejs/plugin-vue/2.3.1_vite@2.9.6+vue@3.2.33: 103 | resolution: {integrity: sha512-YNzBt8+jt6bSwpt7LP890U1UcTOIZZxfpE5WOJ638PNxSEKOqAi0+FSKS0nVeukfdZ0Ai/H7AFd6k3hayfGZqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.3.1.tgz} 104 | id: registry.npmmirror.com/@vitejs/plugin-vue/2.3.1 105 | name: '@vitejs/plugin-vue' 106 | version: 2.3.1 107 | engines: {node: '>=12.0.0'} 108 | peerDependencies: 109 | vite: ^2.5.10 110 | vue: ^3.2.25 111 | dependencies: 112 | vite: registry.npmmirror.com/vite/2.9.6 113 | vue: registry.npmmirror.com/vue/3.2.33 114 | dev: true 115 | 116 | registry.npmmirror.com/@vue/compiler-core/3.2.33: 117 | resolution: {integrity: sha512-AAmr52ji3Zhk7IKIuigX2osWWsb2nQE5xsdFYjdnmtQ4gymmqXbjLvkSE174+fF3A3kstYrTgGkqgOEbsdLDpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.33.tgz} 118 | name: '@vue/compiler-core' 119 | version: 3.2.33 120 | dependencies: 121 | '@babel/parser': registry.npmmirror.com/@babel/parser/7.17.9 122 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.33 123 | estree-walker: registry.npmmirror.com/estree-walker/2.0.2 124 | source-map: registry.npmmirror.com/source-map/0.6.1 125 | dev: false 126 | 127 | registry.npmmirror.com/@vue/compiler-dom/3.2.33: 128 | resolution: {integrity: sha512-GhiG1C8X98Xz9QUX/RlA6/kgPBWJkjq0Rq6//5XTAGSYrTMBgcLpP9+CnlUg1TFxnnCVughAG+KZl28XJqw8uQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.33.tgz} 129 | name: '@vue/compiler-dom' 130 | version: 3.2.33 131 | dependencies: 132 | '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.33 133 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.33 134 | dev: false 135 | 136 | registry.npmmirror.com/@vue/compiler-sfc/3.2.33: 137 | resolution: {integrity: sha512-H8D0WqagCr295pQjUYyO8P3IejM3vEzeCO1apzByAEaAR/WimhMYczHfZVvlCE/9yBaEu/eu9RdiWr0kF8b71Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.33.tgz} 138 | name: '@vue/compiler-sfc' 139 | version: 3.2.33 140 | dependencies: 141 | '@babel/parser': registry.npmmirror.com/@babel/parser/7.17.9 142 | '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.33 143 | '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.33 144 | '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.2.33 145 | '@vue/reactivity-transform': registry.npmmirror.com/@vue/reactivity-transform/3.2.33 146 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.33 147 | estree-walker: registry.npmmirror.com/estree-walker/2.0.2 148 | magic-string: registry.npmmirror.com/magic-string/0.25.9 149 | postcss: registry.npmmirror.com/postcss/8.4.12 150 | source-map: registry.npmmirror.com/source-map/0.6.1 151 | dev: false 152 | 153 | registry.npmmirror.com/@vue/compiler-ssr/3.2.33: 154 | resolution: {integrity: sha512-XQh1Xdk3VquDpXsnoCd7JnMoWec9CfAzQDQsaMcSU79OrrO2PNR0ErlIjm/mGq3GmBfkQjzZACV+7GhfRB8xMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.33.tgz} 155 | name: '@vue/compiler-ssr' 156 | version: 3.2.33 157 | dependencies: 158 | '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.33 159 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.33 160 | dev: false 161 | 162 | registry.npmmirror.com/@vue/devtools-api/6.1.4: 163 | resolution: {integrity: sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz} 164 | name: '@vue/devtools-api' 165 | version: 6.1.4 166 | dev: false 167 | 168 | registry.npmmirror.com/@vue/reactivity-transform/3.2.33: 169 | resolution: {integrity: sha512-4UL5KOIvSQb254aqenW4q34qMXbfZcmEsV/yVidLUgvwYQQ/D21bGX3DlgPUGI3c4C+iOnNmDCkIxkILoX/Pyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.33.tgz} 170 | name: '@vue/reactivity-transform' 171 | version: 3.2.33 172 | dependencies: 173 | '@babel/parser': registry.npmmirror.com/@babel/parser/7.17.9 174 | '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.33 175 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.33 176 | estree-walker: registry.npmmirror.com/estree-walker/2.0.2 177 | magic-string: registry.npmmirror.com/magic-string/0.25.9 178 | dev: false 179 | 180 | registry.npmmirror.com/@vue/reactivity/3.2.33: 181 | resolution: {integrity: sha512-62Sq0mp9/0bLmDuxuLD5CIaMG2susFAGARLuZ/5jkU1FCf9EDbwUuF+BO8Ub3Rbodx0ziIecM/NsmyjardBxfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.33.tgz} 182 | name: '@vue/reactivity' 183 | version: 3.2.33 184 | dependencies: 185 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.33 186 | dev: false 187 | 188 | registry.npmmirror.com/@vue/runtime-core/3.2.33: 189 | resolution: {integrity: sha512-N2D2vfaXsBPhzCV3JsXQa2NECjxP3eXgZlFqKh4tgakp3iX6LCGv76DLlc+IfFZq+TW10Y8QUfeihXOupJ1dGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.33.tgz} 190 | name: '@vue/runtime-core' 191 | version: 3.2.33 192 | dependencies: 193 | '@vue/reactivity': registry.npmmirror.com/@vue/reactivity/3.2.33 194 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.33 195 | dev: false 196 | 197 | registry.npmmirror.com/@vue/runtime-dom/3.2.33: 198 | resolution: {integrity: sha512-LSrJ6W7CZTSUygX5s8aFkraDWlO6K4geOwA3quFF2O+hC3QuAMZt/0Xb7JKE3C4JD4pFwCSO7oCrZmZ0BIJUnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.33.tgz} 199 | name: '@vue/runtime-dom' 200 | version: 3.2.33 201 | dependencies: 202 | '@vue/runtime-core': registry.npmmirror.com/@vue/runtime-core/3.2.33 203 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.33 204 | csstype: registry.npmmirror.com/csstype/2.6.20 205 | dev: false 206 | 207 | registry.npmmirror.com/@vue/server-renderer/3.2.33_vue@3.2.33: 208 | resolution: {integrity: sha512-4jpJHRD4ORv8PlbYi+/MfP8ec1okz6rybe36MdpkDrGIdEItHEUyaHSKvz+ptNEyQpALmmVfRteHkU9F8vxOew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.33.tgz} 209 | id: registry.npmmirror.com/@vue/server-renderer/3.2.33 210 | name: '@vue/server-renderer' 211 | version: 3.2.33 212 | peerDependencies: 213 | vue: 3.2.33 214 | dependencies: 215 | '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.2.33 216 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.33 217 | vue: registry.npmmirror.com/vue/3.2.33 218 | dev: false 219 | 220 | registry.npmmirror.com/@vue/shared/3.2.33: 221 | resolution: {integrity: sha512-UBc1Pg1T3yZ97vsA2ueER0F6GbJebLHYlEi4ou1H5YL4KWvMOOWwpYo9/QpWq93wxKG6Wo13IY74Hcn/f7c7Bg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.2.33.tgz} 222 | name: '@vue/shared' 223 | version: 3.2.33 224 | dev: false 225 | 226 | registry.npmmirror.com/acorn/8.7.1: 227 | resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-8.7.1.tgz} 228 | name: acorn 229 | version: 8.7.1 230 | engines: {node: '>=0.4.0'} 231 | hasBin: true 232 | dev: true 233 | 234 | registry.npmmirror.com/anymatch/3.1.2: 235 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz} 236 | name: anymatch 237 | version: 3.1.2 238 | engines: {node: '>= 8'} 239 | dependencies: 240 | normalize-path: registry.npmmirror.com/normalize-path/3.0.0 241 | picomatch: registry.npmmirror.com/picomatch/2.3.1 242 | dev: true 243 | 244 | registry.npmmirror.com/balanced-match/1.0.2: 245 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz} 246 | name: balanced-match 247 | version: 1.0.2 248 | dev: true 249 | 250 | registry.npmmirror.com/binary-extensions/2.2.0: 251 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz} 252 | name: binary-extensions 253 | version: 2.2.0 254 | engines: {node: '>=8'} 255 | dev: true 256 | 257 | registry.npmmirror.com/brace-expansion/2.0.1: 258 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz} 259 | name: brace-expansion 260 | version: 2.0.1 261 | dependencies: 262 | balanced-match: registry.npmmirror.com/balanced-match/1.0.2 263 | dev: true 264 | 265 | registry.npmmirror.com/braces/3.0.2: 266 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz} 267 | name: braces 268 | version: 3.0.2 269 | engines: {node: '>=8'} 270 | dependencies: 271 | fill-range: registry.npmmirror.com/fill-range/7.0.1 272 | dev: true 273 | 274 | registry.npmmirror.com/camel-case/4.1.2: 275 | resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz} 276 | name: camel-case 277 | version: 4.1.2 278 | dependencies: 279 | pascal-case: registry.npmmirror.com/pascal-case/3.1.2 280 | tslib: registry.npmmirror.com/tslib/2.4.0 281 | dev: true 282 | 283 | registry.npmmirror.com/capital-case/1.0.4: 284 | resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/capital-case/-/capital-case-1.0.4.tgz} 285 | name: capital-case 286 | version: 1.0.4 287 | dependencies: 288 | no-case: registry.npmmirror.com/no-case/3.0.4 289 | tslib: registry.npmmirror.com/tslib/2.4.0 290 | upper-case-first: registry.npmmirror.com/upper-case-first/2.0.2 291 | dev: true 292 | 293 | registry.npmmirror.com/change-case/4.1.2: 294 | resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/change-case/-/change-case-4.1.2.tgz} 295 | name: change-case 296 | version: 4.1.2 297 | dependencies: 298 | camel-case: registry.npmmirror.com/camel-case/4.1.2 299 | capital-case: registry.npmmirror.com/capital-case/1.0.4 300 | constant-case: registry.npmmirror.com/constant-case/3.0.4 301 | dot-case: registry.npmmirror.com/dot-case/3.0.4 302 | header-case: registry.npmmirror.com/header-case/2.0.4 303 | no-case: registry.npmmirror.com/no-case/3.0.4 304 | param-case: registry.npmmirror.com/param-case/3.0.4 305 | pascal-case: registry.npmmirror.com/pascal-case/3.1.2 306 | path-case: registry.npmmirror.com/path-case/3.0.4 307 | sentence-case: registry.npmmirror.com/sentence-case/3.0.4 308 | snake-case: registry.npmmirror.com/snake-case/3.0.4 309 | tslib: registry.npmmirror.com/tslib/2.4.0 310 | dev: true 311 | 312 | registry.npmmirror.com/chokidar/3.5.3: 313 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz} 314 | name: chokidar 315 | version: 3.5.3 316 | engines: {node: '>= 8.10.0'} 317 | dependencies: 318 | anymatch: registry.npmmirror.com/anymatch/3.1.2 319 | braces: registry.npmmirror.com/braces/3.0.2 320 | glob-parent: registry.npmmirror.com/glob-parent/5.1.2 321 | is-binary-path: registry.npmmirror.com/is-binary-path/2.1.0 322 | is-glob: registry.npmmirror.com/is-glob/4.0.3 323 | normalize-path: registry.npmmirror.com/normalize-path/3.0.0 324 | readdirp: registry.npmmirror.com/readdirp/3.6.0 325 | optionalDependencies: 326 | fsevents: registry.npmmirror.com/fsevents/2.3.2 327 | dev: true 328 | 329 | registry.npmmirror.com/constant-case/3.0.4: 330 | resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/constant-case/-/constant-case-3.0.4.tgz} 331 | name: constant-case 332 | version: 3.0.4 333 | dependencies: 334 | no-case: registry.npmmirror.com/no-case/3.0.4 335 | tslib: registry.npmmirror.com/tslib/2.4.0 336 | upper-case: registry.npmmirror.com/upper-case/2.0.2 337 | dev: true 338 | 339 | registry.npmmirror.com/csstype/2.6.20: 340 | resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz} 341 | name: csstype 342 | version: 2.6.20 343 | dev: false 344 | 345 | registry.npmmirror.com/debug/4.3.4: 346 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz} 347 | name: debug 348 | version: 4.3.4 349 | engines: {node: '>=6.0'} 350 | peerDependencies: 351 | supports-color: '*' 352 | peerDependenciesMeta: 353 | supports-color: 354 | optional: true 355 | dependencies: 356 | ms: registry.npmmirror.com/ms/2.1.2 357 | dev: true 358 | 359 | registry.npmmirror.com/dot-case/3.0.4: 360 | resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz} 361 | name: dot-case 362 | version: 3.0.4 363 | dependencies: 364 | no-case: registry.npmmirror.com/no-case/3.0.4 365 | tslib: registry.npmmirror.com/tslib/2.4.0 366 | dev: true 367 | 368 | registry.npmmirror.com/es-module-lexer/0.9.3: 369 | resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz} 370 | name: es-module-lexer 371 | version: 0.9.3 372 | dev: true 373 | 374 | registry.npmmirror.com/esbuild-android-64/0.14.38: 375 | resolution: {integrity: sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz} 376 | name: esbuild-android-64 377 | version: 0.14.38 378 | engines: {node: '>=12'} 379 | cpu: [x64] 380 | os: [android] 381 | requiresBuild: true 382 | dev: true 383 | optional: true 384 | 385 | registry.npmmirror.com/esbuild-android-arm64/0.14.38: 386 | resolution: {integrity: sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz} 387 | name: esbuild-android-arm64 388 | version: 0.14.38 389 | engines: {node: '>=12'} 390 | cpu: [arm64] 391 | os: [android] 392 | requiresBuild: true 393 | dev: true 394 | optional: true 395 | 396 | registry.npmmirror.com/esbuild-darwin-64/0.14.38: 397 | resolution: {integrity: sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz} 398 | name: esbuild-darwin-64 399 | version: 0.14.38 400 | engines: {node: '>=12'} 401 | cpu: [x64] 402 | os: [darwin] 403 | requiresBuild: true 404 | dev: true 405 | optional: true 406 | 407 | registry.npmmirror.com/esbuild-darwin-arm64/0.14.38: 408 | resolution: {integrity: sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz} 409 | name: esbuild-darwin-arm64 410 | version: 0.14.38 411 | engines: {node: '>=12'} 412 | cpu: [arm64] 413 | os: [darwin] 414 | requiresBuild: true 415 | dev: true 416 | optional: true 417 | 418 | registry.npmmirror.com/esbuild-freebsd-64/0.14.38: 419 | resolution: {integrity: sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz} 420 | name: esbuild-freebsd-64 421 | version: 0.14.38 422 | engines: {node: '>=12'} 423 | cpu: [x64] 424 | os: [freebsd] 425 | requiresBuild: true 426 | dev: true 427 | optional: true 428 | 429 | registry.npmmirror.com/esbuild-freebsd-arm64/0.14.38: 430 | resolution: {integrity: sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz} 431 | name: esbuild-freebsd-arm64 432 | version: 0.14.38 433 | engines: {node: '>=12'} 434 | cpu: [arm64] 435 | os: [freebsd] 436 | requiresBuild: true 437 | dev: true 438 | optional: true 439 | 440 | registry.npmmirror.com/esbuild-linux-32/0.14.38: 441 | resolution: {integrity: sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz} 442 | name: esbuild-linux-32 443 | version: 0.14.38 444 | engines: {node: '>=12'} 445 | cpu: [ia32] 446 | os: [linux] 447 | requiresBuild: true 448 | dev: true 449 | optional: true 450 | 451 | registry.npmmirror.com/esbuild-linux-64/0.14.38: 452 | resolution: {integrity: sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz} 453 | name: esbuild-linux-64 454 | version: 0.14.38 455 | engines: {node: '>=12'} 456 | cpu: [x64] 457 | os: [linux] 458 | requiresBuild: true 459 | dev: true 460 | optional: true 461 | 462 | registry.npmmirror.com/esbuild-linux-arm/0.14.38: 463 | resolution: {integrity: sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz} 464 | name: esbuild-linux-arm 465 | version: 0.14.38 466 | engines: {node: '>=12'} 467 | cpu: [arm] 468 | os: [linux] 469 | requiresBuild: true 470 | dev: true 471 | optional: true 472 | 473 | registry.npmmirror.com/esbuild-linux-arm64/0.14.38: 474 | resolution: {integrity: sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz} 475 | name: esbuild-linux-arm64 476 | version: 0.14.38 477 | engines: {node: '>=12'} 478 | cpu: [arm64] 479 | os: [linux] 480 | requiresBuild: true 481 | dev: true 482 | optional: true 483 | 484 | registry.npmmirror.com/esbuild-linux-mips64le/0.14.38: 485 | resolution: {integrity: sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz} 486 | name: esbuild-linux-mips64le 487 | version: 0.14.38 488 | engines: {node: '>=12'} 489 | cpu: [mips64el] 490 | os: [linux] 491 | requiresBuild: true 492 | dev: true 493 | optional: true 494 | 495 | registry.npmmirror.com/esbuild-linux-ppc64le/0.14.38: 496 | resolution: {integrity: sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz} 497 | name: esbuild-linux-ppc64le 498 | version: 0.14.38 499 | engines: {node: '>=12'} 500 | cpu: [ppc64] 501 | os: [linux] 502 | requiresBuild: true 503 | dev: true 504 | optional: true 505 | 506 | registry.npmmirror.com/esbuild-linux-riscv64/0.14.38: 507 | resolution: {integrity: sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz} 508 | name: esbuild-linux-riscv64 509 | version: 0.14.38 510 | engines: {node: '>=12'} 511 | cpu: [riscv64] 512 | os: [linux] 513 | requiresBuild: true 514 | dev: true 515 | optional: true 516 | 517 | registry.npmmirror.com/esbuild-linux-s390x/0.14.38: 518 | resolution: {integrity: sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz} 519 | name: esbuild-linux-s390x 520 | version: 0.14.38 521 | engines: {node: '>=12'} 522 | cpu: [s390x] 523 | os: [linux] 524 | requiresBuild: true 525 | dev: true 526 | optional: true 527 | 528 | registry.npmmirror.com/esbuild-netbsd-64/0.14.38: 529 | resolution: {integrity: sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz} 530 | name: esbuild-netbsd-64 531 | version: 0.14.38 532 | engines: {node: '>=12'} 533 | cpu: [x64] 534 | os: [netbsd] 535 | requiresBuild: true 536 | dev: true 537 | optional: true 538 | 539 | registry.npmmirror.com/esbuild-openbsd-64/0.14.38: 540 | resolution: {integrity: sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz} 541 | name: esbuild-openbsd-64 542 | version: 0.14.38 543 | engines: {node: '>=12'} 544 | cpu: [x64] 545 | os: [openbsd] 546 | requiresBuild: true 547 | dev: true 548 | optional: true 549 | 550 | registry.npmmirror.com/esbuild-sunos-64/0.14.38: 551 | resolution: {integrity: sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz} 552 | name: esbuild-sunos-64 553 | version: 0.14.38 554 | engines: {node: '>=12'} 555 | cpu: [x64] 556 | os: [sunos] 557 | requiresBuild: true 558 | dev: true 559 | optional: true 560 | 561 | registry.npmmirror.com/esbuild-windows-32/0.14.38: 562 | resolution: {integrity: sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz} 563 | name: esbuild-windows-32 564 | version: 0.14.38 565 | engines: {node: '>=12'} 566 | cpu: [ia32] 567 | os: [win32] 568 | requiresBuild: true 569 | dev: true 570 | optional: true 571 | 572 | registry.npmmirror.com/esbuild-windows-64/0.14.38: 573 | resolution: {integrity: sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz} 574 | name: esbuild-windows-64 575 | version: 0.14.38 576 | engines: {node: '>=12'} 577 | cpu: [x64] 578 | os: [win32] 579 | requiresBuild: true 580 | dev: true 581 | optional: true 582 | 583 | registry.npmmirror.com/esbuild-windows-arm64/0.14.38: 584 | resolution: {integrity: sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz} 585 | name: esbuild-windows-arm64 586 | version: 0.14.38 587 | engines: {node: '>=12'} 588 | cpu: [arm64] 589 | os: [win32] 590 | requiresBuild: true 591 | dev: true 592 | optional: true 593 | 594 | registry.npmmirror.com/esbuild/0.14.38: 595 | resolution: {integrity: sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.14.38.tgz} 596 | name: esbuild 597 | version: 0.14.38 598 | engines: {node: '>=12'} 599 | hasBin: true 600 | requiresBuild: true 601 | optionalDependencies: 602 | esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.14.38 603 | esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.14.38 604 | esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.14.38 605 | esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.14.38 606 | esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.14.38 607 | esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.14.38 608 | esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.14.38 609 | esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.14.38 610 | esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.14.38 611 | esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.14.38 612 | esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.14.38 613 | esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.14.38 614 | esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.14.38 615 | esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.14.38 616 | esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.14.38 617 | esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.14.38 618 | esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.14.38 619 | esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.14.38 620 | esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.14.38 621 | esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.14.38 622 | dev: true 623 | 624 | registry.npmmirror.com/estree-walker/2.0.2: 625 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz} 626 | name: estree-walker 627 | version: 2.0.2 628 | 629 | registry.npmmirror.com/fast-glob/3.2.11: 630 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz} 631 | name: fast-glob 632 | version: 3.2.11 633 | engines: {node: '>=8.6.0'} 634 | dependencies: 635 | '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5 636 | '@nodelib/fs.walk': registry.npmmirror.com/@nodelib/fs.walk/1.2.8 637 | glob-parent: registry.npmmirror.com/glob-parent/5.1.2 638 | merge2: registry.npmmirror.com/merge2/1.4.1 639 | micromatch: registry.npmmirror.com/micromatch/4.0.5 640 | dev: true 641 | 642 | registry.npmmirror.com/fastq/1.13.0: 643 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz} 644 | name: fastq 645 | version: 1.13.0 646 | dependencies: 647 | reusify: registry.npmmirror.com/reusify/1.0.4 648 | dev: true 649 | 650 | registry.npmmirror.com/fill-range/7.0.1: 651 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz} 652 | name: fill-range 653 | version: 7.0.1 654 | engines: {node: '>=8'} 655 | dependencies: 656 | to-regex-range: registry.npmmirror.com/to-regex-range/5.0.1 657 | dev: true 658 | 659 | registry.npmmirror.com/fs-extra/10.1.0: 660 | resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz} 661 | name: fs-extra 662 | version: 10.1.0 663 | engines: {node: '>=12'} 664 | dependencies: 665 | graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 666 | jsonfile: registry.npmmirror.com/jsonfile/6.1.0 667 | universalify: registry.npmmirror.com/universalify/2.0.0 668 | dev: true 669 | 670 | registry.npmmirror.com/fsevents/2.3.2: 671 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz} 672 | name: fsevents 673 | version: 2.3.2 674 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 675 | os: [darwin] 676 | requiresBuild: true 677 | dev: true 678 | optional: true 679 | 680 | registry.npmmirror.com/function-bind/1.1.1: 681 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz} 682 | name: function-bind 683 | version: 1.1.1 684 | dev: true 685 | 686 | registry.npmmirror.com/glob-parent/5.1.2: 687 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz} 688 | name: glob-parent 689 | version: 5.1.2 690 | engines: {node: '>= 6'} 691 | dependencies: 692 | is-glob: registry.npmmirror.com/is-glob/4.0.3 693 | dev: true 694 | 695 | registry.npmmirror.com/graceful-fs/4.2.10: 696 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} 697 | name: graceful-fs 698 | version: 4.2.10 699 | dev: true 700 | 701 | registry.npmmirror.com/has/1.0.3: 702 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz} 703 | name: has 704 | version: 1.0.3 705 | engines: {node: '>= 0.4.0'} 706 | dependencies: 707 | function-bind: registry.npmmirror.com/function-bind/1.1.1 708 | dev: true 709 | 710 | registry.npmmirror.com/header-case/2.0.4: 711 | resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/header-case/-/header-case-2.0.4.tgz} 712 | name: header-case 713 | version: 2.0.4 714 | dependencies: 715 | capital-case: registry.npmmirror.com/capital-case/1.0.4 716 | tslib: registry.npmmirror.com/tslib/2.4.0 717 | dev: true 718 | 719 | registry.npmmirror.com/is-binary-path/2.1.0: 720 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz} 721 | name: is-binary-path 722 | version: 2.1.0 723 | engines: {node: '>=8'} 724 | dependencies: 725 | binary-extensions: registry.npmmirror.com/binary-extensions/2.2.0 726 | dev: true 727 | 728 | registry.npmmirror.com/is-core-module/2.9.0: 729 | resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz} 730 | name: is-core-module 731 | version: 2.9.0 732 | dependencies: 733 | has: registry.npmmirror.com/has/1.0.3 734 | dev: true 735 | 736 | registry.npmmirror.com/is-extglob/2.1.1: 737 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz} 738 | name: is-extglob 739 | version: 2.1.1 740 | engines: {node: '>=0.10.0'} 741 | dev: true 742 | 743 | registry.npmmirror.com/is-glob/4.0.3: 744 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz} 745 | name: is-glob 746 | version: 4.0.3 747 | engines: {node: '>=0.10.0'} 748 | dependencies: 749 | is-extglob: registry.npmmirror.com/is-extglob/2.1.1 750 | dev: true 751 | 752 | registry.npmmirror.com/is-number/7.0.0: 753 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz} 754 | name: is-number 755 | version: 7.0.0 756 | engines: {node: '>=0.12.0'} 757 | dev: true 758 | 759 | registry.npmmirror.com/jsonfile/6.1.0: 760 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz} 761 | name: jsonfile 762 | version: 6.1.0 763 | dependencies: 764 | universalify: registry.npmmirror.com/universalify/2.0.0 765 | optionalDependencies: 766 | graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 767 | dev: true 768 | 769 | registry.npmmirror.com/local-pkg/0.4.2: 770 | resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.2.tgz} 771 | name: local-pkg 772 | version: 0.4.2 773 | engines: {node: '>=14'} 774 | dev: true 775 | 776 | registry.npmmirror.com/lower-case/2.0.2: 777 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz} 778 | name: lower-case 779 | version: 2.0.2 780 | dependencies: 781 | tslib: registry.npmmirror.com/tslib/2.4.0 782 | dev: true 783 | 784 | registry.npmmirror.com/magic-string/0.25.9: 785 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz} 786 | name: magic-string 787 | version: 0.25.9 788 | dependencies: 789 | sourcemap-codec: registry.npmmirror.com/sourcemap-codec/1.4.8 790 | 791 | registry.npmmirror.com/magic-string/0.26.2: 792 | resolution: {integrity: sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.26.2.tgz} 793 | name: magic-string 794 | version: 0.26.2 795 | engines: {node: '>=12'} 796 | dependencies: 797 | sourcemap-codec: registry.npmmirror.com/sourcemap-codec/1.4.8 798 | dev: true 799 | 800 | registry.npmmirror.com/merge2/1.4.1: 801 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz} 802 | name: merge2 803 | version: 1.4.1 804 | engines: {node: '>= 8'} 805 | dev: true 806 | 807 | registry.npmmirror.com/micromatch/4.0.5: 808 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz} 809 | name: micromatch 810 | version: 4.0.5 811 | engines: {node: '>=8.6'} 812 | dependencies: 813 | braces: registry.npmmirror.com/braces/3.0.2 814 | picomatch: registry.npmmirror.com/picomatch/2.3.1 815 | dev: true 816 | 817 | registry.npmmirror.com/minimatch/5.1.0: 818 | resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.0.tgz} 819 | name: minimatch 820 | version: 5.1.0 821 | engines: {node: '>=10'} 822 | dependencies: 823 | brace-expansion: registry.npmmirror.com/brace-expansion/2.0.1 824 | dev: true 825 | 826 | registry.npmmirror.com/ms/2.1.2: 827 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz} 828 | name: ms 829 | version: 2.1.2 830 | dev: true 831 | 832 | registry.npmmirror.com/nanoid/3.3.3: 833 | resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.3.tgz} 834 | name: nanoid 835 | version: 3.3.3 836 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 837 | hasBin: true 838 | 839 | registry.npmmirror.com/no-case/3.0.4: 840 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz} 841 | name: no-case 842 | version: 3.0.4 843 | dependencies: 844 | lower-case: registry.npmmirror.com/lower-case/2.0.2 845 | tslib: registry.npmmirror.com/tslib/2.4.0 846 | dev: true 847 | 848 | registry.npmmirror.com/normalize-path/3.0.0: 849 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz} 850 | name: normalize-path 851 | version: 3.0.0 852 | engines: {node: '>=0.10.0'} 853 | dev: true 854 | 855 | registry.npmmirror.com/param-case/3.0.4: 856 | resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz} 857 | name: param-case 858 | version: 3.0.4 859 | dependencies: 860 | dot-case: registry.npmmirror.com/dot-case/3.0.4 861 | tslib: registry.npmmirror.com/tslib/2.4.0 862 | dev: true 863 | 864 | registry.npmmirror.com/pascal-case/3.1.2: 865 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz} 866 | name: pascal-case 867 | version: 3.1.2 868 | dependencies: 869 | no-case: registry.npmmirror.com/no-case/3.0.4 870 | tslib: registry.npmmirror.com/tslib/2.4.0 871 | dev: true 872 | 873 | registry.npmmirror.com/path-case/3.0.4: 874 | resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-case/-/path-case-3.0.4.tgz} 875 | name: path-case 876 | version: 3.0.4 877 | dependencies: 878 | dot-case: registry.npmmirror.com/dot-case/3.0.4 879 | tslib: registry.npmmirror.com/tslib/2.4.0 880 | dev: true 881 | 882 | registry.npmmirror.com/path-parse/1.0.7: 883 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz} 884 | name: path-parse 885 | version: 1.0.7 886 | dev: true 887 | 888 | registry.npmmirror.com/picocolors/1.0.0: 889 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz} 890 | name: picocolors 891 | version: 1.0.0 892 | 893 | registry.npmmirror.com/picomatch/2.3.1: 894 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz} 895 | name: picomatch 896 | version: 2.3.1 897 | engines: {node: '>=8.6'} 898 | dev: true 899 | 900 | registry.npmmirror.com/postcss/8.4.12: 901 | resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.12.tgz} 902 | name: postcss 903 | version: 8.4.12 904 | engines: {node: ^10 || ^12 || >=14} 905 | dependencies: 906 | nanoid: registry.npmmirror.com/nanoid/3.3.3 907 | picocolors: registry.npmmirror.com/picocolors/1.0.0 908 | source-map-js: registry.npmmirror.com/source-map-js/1.0.2 909 | 910 | registry.npmmirror.com/queue-microtask/1.2.3: 911 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz} 912 | name: queue-microtask 913 | version: 1.2.3 914 | dev: true 915 | 916 | registry.npmmirror.com/readdirp/3.6.0: 917 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz} 918 | name: readdirp 919 | version: 3.6.0 920 | engines: {node: '>=8.10.0'} 921 | dependencies: 922 | picomatch: registry.npmmirror.com/picomatch/2.3.1 923 | dev: true 924 | 925 | registry.npmmirror.com/resolve/1.22.0: 926 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.0.tgz} 927 | name: resolve 928 | version: 1.22.0 929 | hasBin: true 930 | dependencies: 931 | is-core-module: registry.npmmirror.com/is-core-module/2.9.0 932 | path-parse: registry.npmmirror.com/path-parse/1.0.7 933 | supports-preserve-symlinks-flag: registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0 934 | dev: true 935 | 936 | registry.npmmirror.com/resolve/1.22.1: 937 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz} 938 | name: resolve 939 | version: 1.22.1 940 | hasBin: true 941 | dependencies: 942 | is-core-module: registry.npmmirror.com/is-core-module/2.9.0 943 | path-parse: registry.npmmirror.com/path-parse/1.0.7 944 | supports-preserve-symlinks-flag: registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0 945 | dev: true 946 | 947 | registry.npmmirror.com/reusify/1.0.4: 948 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz} 949 | name: reusify 950 | version: 1.0.4 951 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 952 | dev: true 953 | 954 | registry.npmmirror.com/rollup/2.70.2: 955 | resolution: {integrity: sha512-EitogNZnfku65I1DD5Mxe8JYRUCy0hkK5X84IlDtUs+O6JRMpRciXTzyCUuX11b5L5pvjH+OmFXiQ3XjabcXgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup/-/rollup-2.70.2.tgz} 956 | name: rollup 957 | version: 2.70.2 958 | engines: {node: '>=10.0.0'} 959 | hasBin: true 960 | optionalDependencies: 961 | fsevents: registry.npmmirror.com/fsevents/2.3.2 962 | dev: true 963 | 964 | registry.npmmirror.com/run-parallel/1.2.0: 965 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz} 966 | name: run-parallel 967 | version: 1.2.0 968 | dependencies: 969 | queue-microtask: registry.npmmirror.com/queue-microtask/1.2.3 970 | dev: true 971 | 972 | registry.npmmirror.com/sentence-case/3.0.4: 973 | resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sentence-case/-/sentence-case-3.0.4.tgz} 974 | name: sentence-case 975 | version: 3.0.4 976 | dependencies: 977 | no-case: registry.npmmirror.com/no-case/3.0.4 978 | tslib: registry.npmmirror.com/tslib/2.4.0 979 | upper-case-first: registry.npmmirror.com/upper-case-first/2.0.2 980 | dev: true 981 | 982 | registry.npmmirror.com/snake-case/3.0.4: 983 | resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snake-case/-/snake-case-3.0.4.tgz} 984 | name: snake-case 985 | version: 3.0.4 986 | dependencies: 987 | dot-case: registry.npmmirror.com/dot-case/3.0.4 988 | tslib: registry.npmmirror.com/tslib/2.4.0 989 | dev: true 990 | 991 | registry.npmmirror.com/source-map-js/1.0.2: 992 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz} 993 | name: source-map-js 994 | version: 1.0.2 995 | engines: {node: '>=0.10.0'} 996 | 997 | registry.npmmirror.com/source-map/0.6.1: 998 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz} 999 | name: source-map 1000 | version: 0.6.1 1001 | engines: {node: '>=0.10.0'} 1002 | dev: false 1003 | 1004 | registry.npmmirror.com/sourcemap-codec/1.4.8: 1005 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz} 1006 | name: sourcemap-codec 1007 | version: 1.4.8 1008 | 1009 | registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0: 1010 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz} 1011 | name: supports-preserve-symlinks-flag 1012 | version: 1.0.0 1013 | engines: {node: '>= 0.4'} 1014 | dev: true 1015 | 1016 | registry.npmmirror.com/to-regex-range/5.0.1: 1017 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz} 1018 | name: to-regex-range 1019 | version: 5.0.1 1020 | engines: {node: '>=8.0'} 1021 | dependencies: 1022 | is-number: registry.npmmirror.com/is-number/7.0.0 1023 | dev: true 1024 | 1025 | registry.npmmirror.com/tslib/2.4.0: 1026 | resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz} 1027 | name: tslib 1028 | version: 2.4.0 1029 | dev: true 1030 | 1031 | registry.npmmirror.com/universalify/2.0.0: 1032 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz} 1033 | name: universalify 1034 | version: 2.0.0 1035 | engines: {node: '>= 10.0.0'} 1036 | dev: true 1037 | 1038 | registry.npmmirror.com/unplugin-vue-components/0.21.1_vite@2.9.6+vue@3.2.33: 1039 | resolution: {integrity: sha512-8MhIT323q1EUu7rz6NfQeiHqDrZKtygy6s9jzcQAuuZUM2T38SHlPT5YJjBOZmM0Bau6YuNTKfBBX4iHzeusaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.21.1.tgz} 1040 | id: registry.npmmirror.com/unplugin-vue-components/0.21.1 1041 | name: unplugin-vue-components 1042 | version: 0.21.1 1043 | engines: {node: '>=14'} 1044 | peerDependencies: 1045 | '@babel/parser': ^7.15.8 1046 | vue: 2 || 3 1047 | peerDependenciesMeta: 1048 | '@babel/parser': 1049 | optional: true 1050 | dependencies: 1051 | '@antfu/utils': registry.npmmirror.com/@antfu/utils/0.5.2 1052 | '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/4.2.1 1053 | chokidar: registry.npmmirror.com/chokidar/3.5.3 1054 | debug: registry.npmmirror.com/debug/4.3.4 1055 | fast-glob: registry.npmmirror.com/fast-glob/3.2.11 1056 | local-pkg: registry.npmmirror.com/local-pkg/0.4.2 1057 | magic-string: registry.npmmirror.com/magic-string/0.26.2 1058 | minimatch: registry.npmmirror.com/minimatch/5.1.0 1059 | resolve: registry.npmmirror.com/resolve/1.22.1 1060 | unplugin: registry.npmmirror.com/unplugin/0.7.2_vite@2.9.6 1061 | vue: registry.npmmirror.com/vue/3.2.33 1062 | transitivePeerDependencies: 1063 | - esbuild 1064 | - rollup 1065 | - supports-color 1066 | - vite 1067 | - webpack 1068 | dev: true 1069 | 1070 | registry.npmmirror.com/unplugin/0.7.2_vite@2.9.6: 1071 | resolution: {integrity: sha512-m7thX4jP8l5sETpLdUASoDOGOcHaOVtgNyrYlToyQUvILUtEzEnngRBrHnAX3IKqooJVmXpoa/CwQ/QqzvGaHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unplugin/-/unplugin-0.7.2.tgz} 1072 | id: registry.npmmirror.com/unplugin/0.7.2 1073 | name: unplugin 1074 | version: 0.7.2 1075 | peerDependencies: 1076 | esbuild: '>=0.13' 1077 | rollup: ^2.50.0 1078 | vite: ^2.3.0 || ^3.0.0-0 1079 | webpack: 4 || 5 1080 | peerDependenciesMeta: 1081 | esbuild: 1082 | optional: true 1083 | rollup: 1084 | optional: true 1085 | vite: 1086 | optional: true 1087 | webpack: 1088 | optional: true 1089 | dependencies: 1090 | acorn: registry.npmmirror.com/acorn/8.7.1 1091 | chokidar: registry.npmmirror.com/chokidar/3.5.3 1092 | vite: registry.npmmirror.com/vite/2.9.6 1093 | webpack-sources: registry.npmmirror.com/webpack-sources/3.2.3 1094 | webpack-virtual-modules: registry.npmmirror.com/webpack-virtual-modules/0.4.4 1095 | dev: true 1096 | 1097 | registry.npmmirror.com/upper-case-first/2.0.2: 1098 | resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upper-case-first/-/upper-case-first-2.0.2.tgz} 1099 | name: upper-case-first 1100 | version: 2.0.2 1101 | dependencies: 1102 | tslib: registry.npmmirror.com/tslib/2.4.0 1103 | dev: true 1104 | 1105 | registry.npmmirror.com/upper-case/2.0.2: 1106 | resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upper-case/-/upper-case-2.0.2.tgz} 1107 | name: upper-case 1108 | version: 2.0.2 1109 | dependencies: 1110 | tslib: registry.npmmirror.com/tslib/2.4.0 1111 | dev: true 1112 | 1113 | registry.npmmirror.com/vant/3.4.8_vue@3.2.33: 1114 | resolution: {integrity: sha512-xPAiPdCiaZbcdbVplVh4N2lmYzDAr2UdadkUHoa9uwfHS9/dab4f8TigfCFzlfAEk53U1J6w+6qZ+whtt4T3hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vant/-/vant-3.4.8.tgz} 1115 | id: registry.npmmirror.com/vant/3.4.8 1116 | name: vant 1117 | version: 3.4.8 1118 | peerDependencies: 1119 | vue: ^3.0.0 1120 | dependencies: 1121 | '@vant/icons': registry.npmmirror.com/@vant/icons/1.8.0 1122 | '@vant/popperjs': registry.npmmirror.com/@vant/popperjs/1.1.0 1123 | '@vant/use': registry.npmmirror.com/@vant/use/1.3.6 1124 | vue: registry.npmmirror.com/vue/3.2.33 1125 | dev: false 1126 | 1127 | registry.npmmirror.com/vite-plugin-style-import/1.4.1_vite@2.9.6: 1128 | resolution: {integrity: sha512-lJCRvm7+So0hHdnSJiJPg9gD5mxtL6YY0jmhEph+k7ArpsyvqOh6han2kG5htbWWDZxHkUN9d1BuTFL//yCLLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-style-import/-/vite-plugin-style-import-1.4.1.tgz} 1129 | id: registry.npmmirror.com/vite-plugin-style-import/1.4.1 1130 | name: vite-plugin-style-import 1131 | version: 1.4.1 1132 | peerDependencies: 1133 | vite: '>=2.0.0' 1134 | dependencies: 1135 | '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/4.2.1 1136 | change-case: registry.npmmirror.com/change-case/4.1.2 1137 | debug: registry.npmmirror.com/debug/4.3.4 1138 | es-module-lexer: registry.npmmirror.com/es-module-lexer/0.9.3 1139 | fs-extra: registry.npmmirror.com/fs-extra/10.1.0 1140 | magic-string: registry.npmmirror.com/magic-string/0.25.9 1141 | vite: registry.npmmirror.com/vite/2.9.6 1142 | transitivePeerDependencies: 1143 | - supports-color 1144 | dev: true 1145 | 1146 | registry.npmmirror.com/vite/2.9.6: 1147 | resolution: {integrity: sha512-3IffdrByHW95Yjv0a13TQOQfJs7L5dVlSPuTt432XLbRMriWbThqJN2k/IS6kXn5WY4xBLhK9XoaWay1B8VzUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/-/vite-2.9.6.tgz} 1148 | name: vite 1149 | version: 2.9.6 1150 | engines: {node: '>=12.2.0'} 1151 | hasBin: true 1152 | peerDependencies: 1153 | less: '*' 1154 | sass: '*' 1155 | stylus: '*' 1156 | peerDependenciesMeta: 1157 | less: 1158 | optional: true 1159 | sass: 1160 | optional: true 1161 | stylus: 1162 | optional: true 1163 | dependencies: 1164 | esbuild: registry.npmmirror.com/esbuild/0.14.38 1165 | postcss: registry.npmmirror.com/postcss/8.4.12 1166 | resolve: registry.npmmirror.com/resolve/1.22.0 1167 | rollup: registry.npmmirror.com/rollup/2.70.2 1168 | optionalDependencies: 1169 | fsevents: registry.npmmirror.com/fsevents/2.3.2 1170 | dev: true 1171 | 1172 | registry.npmmirror.com/vue-router/4.0.14_vue@3.2.33: 1173 | resolution: {integrity: sha512-wAO6zF9zxA3u+7AkMPqw9LjoUCjSxfFvINQj3E/DceTt6uEz1XZLraDhdg2EYmvVwTBSGlLYsUw8bDmx0754Mw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-router/-/vue-router-4.0.14.tgz} 1174 | id: registry.npmmirror.com/vue-router/4.0.14 1175 | name: vue-router 1176 | version: 4.0.14 1177 | peerDependencies: 1178 | vue: ^3.2.0 1179 | dependencies: 1180 | '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.1.4 1181 | vue: registry.npmmirror.com/vue/3.2.33 1182 | dev: false 1183 | 1184 | registry.npmmirror.com/vue/3.2.33: 1185 | resolution: {integrity: sha512-si1ExAlDUrLSIg/V7D/GgA4twJwfsfgG+t9w10z38HhL/HA07132pUQ2KuwAo8qbCyMJ9e6OqrmWrOCr+jW7ZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue/-/vue-3.2.33.tgz} 1186 | name: vue 1187 | version: 3.2.33 1188 | dependencies: 1189 | '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.33 1190 | '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.33 1191 | '@vue/runtime-dom': registry.npmmirror.com/@vue/runtime-dom/3.2.33 1192 | '@vue/server-renderer': registry.npmmirror.com/@vue/server-renderer/3.2.33_vue@3.2.33 1193 | '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.33 1194 | dev: false 1195 | 1196 | registry.npmmirror.com/webpack-sources/3.2.3: 1197 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz} 1198 | name: webpack-sources 1199 | version: 3.2.3 1200 | engines: {node: '>=10.13.0'} 1201 | dev: true 1202 | 1203 | registry.npmmirror.com/webpack-virtual-modules/0.4.4: 1204 | resolution: {integrity: sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.4.tgz} 1205 | name: webpack-virtual-modules 1206 | version: 0.4.4 1207 | dev: true 1208 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haibolian/natal-chart/6a2c6babef7c72be3c41f3a8a37460a09d09bfe3/public/favicon.ico -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 11 | 12 | 13 | 22 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haibolian/natal-chart/6a2c6babef7c72be3c41f3a8a37460a09d09bfe3/src/assets/logo.png -------------------------------------------------------------------------------- /src/components/Birthday.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 87 | 88 | 100 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | 4 | import router from './router/index' 5 | 6 | import install from './useVant' 7 | 8 | 9 | const app = createApp(App) 10 | 11 | app.use(router) 12 | 13 | app.mount('#app') 14 | 15 | install.call(app) 16 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHashHistory } from 'vue-router' 2 | 3 | import Home from "@/views/Home.vue"; 4 | import NatalChart from '@/views/natal-chart/index.vue'; 5 | 6 | const routes = [ 7 | { 8 | path: '/', 9 | component: Home 10 | }, 11 | { 12 | path: '/home', 13 | component: Home 14 | }, 15 | { 16 | path: '/natal-chart', 17 | component: NatalChart, 18 | } 19 | ] 20 | 21 | const router = createRouter({ 22 | history: createWebHashHistory(), 23 | routes 24 | }) 25 | 26 | export default router -------------------------------------------------------------------------------- /src/useVant.js: -------------------------------------------------------------------------------- 1 | import { 2 | Button, 3 | Field, 4 | Cell, 5 | CellGroup, 6 | DatetimePicker, 7 | Popup, 8 | Dialog, 9 | Toast, 10 | Grid, 11 | GridItem, 12 | Row, 13 | Col 14 | } from "vant" 15 | 16 | function install(){ 17 | this.use(Button) 18 | this.use(Field) 19 | this.use(CellGroup) 20 | this.use(DatetimePicker) 21 | this.use(Popup) 22 | this.use(Cell) 23 | this.use(Dialog) 24 | this.use(Toast) 25 | this.use(Grid) 26 | this.use(GridItem) 27 | this.use(Row) 28 | this.use(Col) 29 | 30 | } 31 | 32 | export default install 33 | -------------------------------------------------------------------------------- /src/utils/date-transform.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @1900-2100区间内的公历、农历互转 3 | * @charset UTF-8 4 | * @Author jiangjiazhi 5 | * @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] 6 | * @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] 7 | */ 8 | 9 | 10 | 11 | /** 12 | * 农历1900-2100的润大小信息表 13 | * @Array Of Property 14 | * @return Hex 15 | */ 16 | 17 | var lunarInfo = [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 18 | 19 | 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 20 | 21 | 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 22 | 23 | 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 24 | 25 | 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 26 | 27 | 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 28 | 29 | 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 30 | 31 | 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 32 | 33 | 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 34 | 35 | 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 36 | 37 | 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 38 | 39 | 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 40 | 41 | 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 42 | 43 | 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 44 | 45 | 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 46 | 47 | 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 48 | 49 | 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 50 | 51 | 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 52 | 53 | 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 54 | 55 | 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 56 | 57 | 0x0d520] // 2100 58 | 59 | 60 | 61 | var solarMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 62 | 63 | 64 | 65 | /** 66 | * 天干地支之天干速查表 67 | * @Array Of Property trans['甲','乙','丙','丁','戊','己','庚','辛','壬','癸'] 68 | * @return Cn string 69 | */ 70 | 71 | var Gan = ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'] 72 | 73 | 74 | 75 | /** 76 | * 天干地支之地支速查表 77 | * @Array Of Property 78 | * @trans['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥'] 79 | * @return Cn string 80 | */ 81 | 82 | var Zhi = ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'] 83 | 84 | 85 | 86 | /** 87 | * 天干地支之地支速查表<=>生肖 88 | * @Array Of Property 89 | * @trans['鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗','猪'] 90 | * @return Cn string 91 | */ 92 | 93 | var Animals = ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'] 94 | 95 | 96 | 97 | /** 98 | * 24节气速查表 99 | * @Array Of Property 100 | * @trans['小寒','大寒','立春','雨水','惊蛰','春分','清明','谷雨','立夏','小满','芒种','夏至','小暑','大暑','立秋','处暑','白露','秋分','寒露','霜降','立冬','小雪','大雪','冬至'] 101 | * @return Cn string 102 | */ 103 | 104 | var solarTerm = ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'] 105 | 106 | 107 | 108 | /** 109 | * 1900-2100各年的24节气日期速查表 110 | * @Array Of Property 111 | * @return 0x string For splice 112 | */ 113 | 114 | var sTermInfo = ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', 115 | 116 | '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', 117 | 118 | '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', 119 | 120 | '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 121 | 122 | 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', 123 | 124 | '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', 125 | 126 | '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', 127 | 128 | '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', 129 | 130 | '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', 131 | 132 | '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', 133 | 134 | '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', 135 | 136 | '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', 137 | 138 | '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', 139 | 140 | '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', 141 | 142 | '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', 143 | 144 | '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', 145 | 146 | '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', 147 | 148 | '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', 149 | 150 | '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', 151 | 152 | '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', 153 | 154 | '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', 155 | 156 | '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', 157 | 158 | '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', 159 | 160 | '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', 161 | 162 | '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', 163 | 164 | '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', 165 | 166 | '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', 167 | 168 | '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', 169 | 170 | '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', 171 | 172 | '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', 173 | 174 | '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', 175 | 176 | '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', 177 | 178 | '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', 179 | 180 | '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', 181 | 182 | '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', 183 | 184 | '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', 185 | 186 | '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', 187 | 188 | '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', 189 | 190 | '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', 191 | 192 | '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', 193 | 194 | '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', 195 | 196 | '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', 197 | 198 | '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', 199 | 200 | '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', 201 | 202 | '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', 203 | 204 | '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', 205 | 206 | '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', 207 | 208 | '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', 209 | 210 | '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', 211 | 212 | '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', 213 | 214 | '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', 215 | 216 | '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', 217 | 218 | '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', 219 | 220 | '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', 221 | 222 | '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', 223 | 224 | '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', 225 | 226 | '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', 227 | 228 | '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', 229 | 230 | '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', 231 | 232 | '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', 233 | 234 | '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', 235 | 236 | '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', 237 | 238 | '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', 239 | 240 | '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', 241 | 242 | '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', 243 | 244 | '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', 245 | 246 | '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'] 247 | 248 | 249 | 250 | /** 251 | * 数字转中文速查表 252 | * @Array Of Property 253 | * @trans ['日','一','二','三','四','五','六','七','八','九','十'] 254 | * @return Cn string 255 | */ 256 | 257 | var nStr1 = ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'] 258 | 259 | 260 | 261 | /** 262 | * 日期转农历称呼速查表 263 | * @Array Of Property 264 | * @trans ['初','十','廿','卅'] 265 | * @return Cn string 266 | */ 267 | 268 | var nStr2 = ['\u521d', '\u5341', '\u5eff', '\u5345'] 269 | 270 | 271 | 272 | /** 273 | * 月份转农历称呼速查表 274 | * @Array Of Property 275 | * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] 276 | * @return Cn string 277 | */ 278 | 279 | var nStr3 = ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'] 280 | 281 | 282 | 283 | /** 284 | * 返回农历y年一整年的总天数 285 | * @param lunar Year 286 | * @return Number 287 | * @eg:var count = calendar.lYearDays(1987) ;//count=387 288 | */ 289 | 290 | function lYearDays (y) { 291 | var i 292 | 293 | var sum = 348 294 | 295 | for (i = 0x8000; i > 0x8; i >>= 1) { sum += (lunarInfo[y - 1900] & i) ? 1 : 0 } 296 | 297 | return (sum + leapDays(y)) 298 | 299 | } 300 | 301 | 302 | 303 | /** 304 | * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 305 | * @param lunar Year 306 | * @return Number (0-12) 307 | * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 308 | */ 309 | 310 | function leapMonth (y) { // 闰字编码 \u95f0 311 | 312 | return (lunarInfo[y - 1900] & 0xf) 313 | 314 | } 315 | 316 | 317 | 318 | /** 319 | * 返回农历y年闰月的天数 若该年没有闰月则返回0 320 | * @param lunar Year 321 | * @return Number (0、29、30) 322 | * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 323 | */ 324 | 325 | function leapDays (y) { 326 | if (leapMonth(y)) { 327 | return ((lunarInfo[y - 1900] & 0x10000) ? 30 : 29) 328 | 329 | } 330 | 331 | return (0) 332 | 333 | } 334 | 335 | 336 | 337 | /** 338 | * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 339 | * @param lunar Year 340 | * @return Number (-1、29、30) 341 | * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 342 | */ 343 | 344 | function monthDays (y, m) { 345 | if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 346 | 347 | return ((lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) 348 | 349 | } 350 | 351 | 352 | 353 | /** 354 | * 返回公历(!)y年m月的天数 355 | * @param solar Year 356 | * @return Number (-1、28、29、30、31) 357 | * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 358 | */ 359 | 360 | function solarDays (y, m) { 361 | if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 362 | 363 | var ms = m - 1 364 | 365 | if (ms === 1) { // 2月份的闰平规律测算后确认返回28或29 366 | 367 | return (((y % 4 === 0) && (y % 100 !== 0) || (y % 400 === 0)) ? 29 : 28) 368 | 369 | } else { 370 | return (solarMonth[ms]) 371 | 372 | } 373 | 374 | } 375 | 376 | 377 | 378 | /** 379 | * 农历年份转换为干支纪年 380 | * @param lYear 农历年的年份数 381 | * @return Cn string 382 | */ 383 | 384 | function toGanZhiYear (lYear) { 385 | var ganKey = (lYear - 3) % 10 386 | 387 | var zhiKey = (lYear - 3) % 12 388 | 389 | if (ganKey === 0) ganKey = 10 // 如果余数为0则为最后一个天干 390 | 391 | if (zhiKey === 0) zhiKey = 12 // 如果余数为0则为最后一个地支 392 | 393 | return Gan[ganKey - 1] + Zhi[zhiKey - 1] 394 | 395 | } 396 | 397 | 398 | 399 | /** 400 | * 公历月、日判断所属星座 401 | * @param cMonth [description] 402 | * @param cDay [description] 403 | * @return Cn string 404 | */ 405 | 406 | function toAstro (cMonth, cDay) { 407 | var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' 408 | 409 | var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] 410 | 411 | return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7' // 座 412 | 413 | } 414 | 415 | 416 | 417 | /** 418 | * 传入offset偏移量返回干支 419 | * @param offset 相对甲子的偏移量 420 | * @return Cn string 421 | */ 422 | 423 | function toGanZhi (offset) { 424 | return Gan[offset % 10] + Zhi[offset % 12] 425 | 426 | } 427 | 428 | 429 | 430 | /** 431 | * 传入公历(!)y年获得该年第n个节气的公历日期 432 | * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 433 | * @return day Number 434 | * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 435 | */ 436 | 437 | function getTerm (y, n) { 438 | if (y < 1900 || y > 2100) { return -1 } 439 | 440 | if (n < 1 || n > 24) { return -1 } 441 | 442 | var _table = sTermInfo[y - 1900] 443 | 444 | var _info = [ 445 | 446 | parseInt('0x' + _table.substr(0, 5)).toString(), 447 | 448 | parseInt('0x' + _table.substr(5, 5)).toString(), 449 | 450 | parseInt('0x' + _table.substr(10, 5)).toString(), 451 | 452 | parseInt('0x' + _table.substr(15, 5)).toString(), 453 | 454 | parseInt('0x' + _table.substr(20, 5)).toString(), 455 | 456 | parseInt('0x' + _table.substr(25, 5)).toString() 457 | 458 | ] 459 | 460 | var _calday = [ 461 | 462 | _info[0].substr(0, 1), 463 | 464 | _info[0].substr(1, 2), 465 | 466 | _info[0].substr(3, 1), 467 | 468 | _info[0].substr(4, 2), 469 | 470 | 471 | 472 | _info[1].substr(0, 1), 473 | 474 | _info[1].substr(1, 2), 475 | 476 | _info[1].substr(3, 1), 477 | 478 | _info[1].substr(4, 2), 479 | 480 | 481 | 482 | _info[2].substr(0, 1), 483 | 484 | _info[2].substr(1, 2), 485 | 486 | _info[2].substr(3, 1), 487 | 488 | _info[2].substr(4, 2), 489 | 490 | 491 | 492 | _info[3].substr(0, 1), 493 | 494 | _info[3].substr(1, 2), 495 | 496 | _info[3].substr(3, 1), 497 | 498 | _info[3].substr(4, 2), 499 | 500 | 501 | 502 | _info[4].substr(0, 1), 503 | 504 | _info[4].substr(1, 2), 505 | 506 | _info[4].substr(3, 1), 507 | 508 | _info[4].substr(4, 2), 509 | 510 | 511 | 512 | _info[5].substr(0, 1), 513 | 514 | _info[5].substr(1, 2), 515 | 516 | _info[5].substr(3, 1), 517 | 518 | _info[5].substr(4, 2) 519 | 520 | ] 521 | 522 | return parseInt(_calday[n - 1]) 523 | 524 | } 525 | 526 | 527 | 528 | /** 529 | * 传入农历数字月份返回汉语通俗表示法 530 | * @param lunar month 531 | * @return Cn string 532 | * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' 533 | */ 534 | 535 | function toChinaMonth (m) { // 月 => \u6708 536 | 537 | if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 538 | 539 | var s = nStr3[m - 1] 540 | 541 | s += '\u6708' // 加上月字 542 | 543 | return s 544 | 545 | } 546 | 547 | 548 | 549 | /** 550 | * 传入农历日期数字返回汉字表示法 551 | * @param lunar day 552 | * @return Cn string 553 | * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' 554 | */ 555 | 556 | function toChinaDay (d) { // 日 => \u65e5 557 | 558 | var s 559 | 560 | switch (d) { 561 | case 10: 562 | 563 | s = '\u521d\u5341' 564 | 565 | break 566 | 567 | case 20: 568 | 569 | s = '\u4e8c\u5341' 570 | 571 | break 572 | 573 | case 30: 574 | 575 | s = '\u4e09\u5341' 576 | 577 | break 578 | 579 | default : 580 | 581 | s = nStr2[Math.floor(d / 10)] 582 | 583 | s += nStr1[d % 10] 584 | 585 | } 586 | 587 | return (s) 588 | 589 | } 590 | 591 | 592 | 593 | /** 594 | * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” 595 | * @param y year 596 | * @return Cn string 597 | * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' 598 | */ 599 | 600 | function getAnimal (y) { 601 | return Animals[(y - 4) % 12] 602 | 603 | } 604 | 605 | 606 | 607 | /** 608 | * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON 609 | * @param y solar year 610 | * @param m solar month 611 | * @param d solar day 612 | * @return JSON object 613 | * @eg:console.log(calendar.solar2lunar(1987,11,01)); 614 | */ 615 | 616 | function solar2lunar (y, m, d) { // 参数区间1900.1.31~2100.12.31 617 | 618 | // 年份限定、上限 619 | 620 | if (y < 1900 || y > 2100) { 621 | return -1 // undefined转换为数字变为NaN 622 | 623 | } 624 | 625 | // 公历传参最下限 626 | 627 | if (y === 1900 && m === 1 && d < 31) { 628 | return -1 629 | 630 | } 631 | 632 | // 未传参 获得当天 633 | 634 | var objDate = null 635 | 636 | if (!y) { 637 | objDate = new Date() 638 | 639 | } else { 640 | objDate = new Date(y, parseInt(m) - 1, d) 641 | 642 | } 643 | 644 | var i 645 | 646 | var leap = 0 647 | 648 | var temp = 0 649 | 650 | // 修正ymd参数 651 | 652 | y = objDate.getFullYear() 653 | 654 | m = objDate.getMonth() + 1 655 | 656 | d = objDate.getDate() 657 | 658 | var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 659 | 660 | for (i = 1900; i < 2101 && offset > 0; i++) { 661 | temp = lYearDays(i) 662 | 663 | offset -= temp 664 | 665 | } 666 | 667 | if (offset < 0) { 668 | offset += temp; i-- 669 | 670 | } 671 | 672 | 673 | 674 | // 是否今天 675 | 676 | var isTodayObj = new Date() 677 | 678 | var isToday = false 679 | 680 | if (isTodayObj.getFullYear() === y && isTodayObj.getMonth() + 1 === m && isTodayObj.getDate() === d) { 681 | isToday = true 682 | 683 | } 684 | 685 | // 星期几 686 | 687 | var nWeek = objDate.getDay() 688 | 689 | var cWeek = nStr1[nWeek] 690 | 691 | // 数字表示周几顺应天朝周一开始的惯例 692 | 693 | if (nWeek === 0) { 694 | nWeek = 7 695 | 696 | } 697 | 698 | // 农历年 699 | 700 | var year = i 701 | 702 | leap = leapMonth(i) // 闰哪个月 703 | 704 | var isLeap = false 705 | 706 | 707 | 708 | // 效验闰月 709 | 710 | for (i = 1; i < 13 && offset > 0; i++) { 711 | // 闰月 712 | 713 | if (leap > 0 && i === (leap + 1) && isLeap === false) { 714 | --i 715 | 716 | isLeap = true; temp = leapDays(year) // 计算农历闰月天数 717 | 718 | } else { 719 | temp = monthDays(year, i)// 计算农历普通月天数 720 | 721 | } 722 | 723 | // 解除闰月 724 | 725 | if (isLeap === true && i === (leap + 1)) { isLeap = false } 726 | 727 | offset -= temp 728 | 729 | } 730 | 731 | // 闰月导致数组下标重叠取反 732 | 733 | if (offset === 0 && leap > 0 && i === leap + 1) { 734 | if (isLeap) { 735 | isLeap = false 736 | 737 | } else { 738 | isLeap = true; --i 739 | 740 | } 741 | 742 | } 743 | 744 | if (offset < 0) { 745 | offset += temp; --i 746 | 747 | } 748 | 749 | // 农历月 750 | 751 | var month = i 752 | 753 | // 农历日 754 | 755 | var day = offset + 1 756 | 757 | // 天干地支处理 758 | 759 | var sm = m - 1 760 | 761 | var gzY = toGanZhiYear(year) 762 | 763 | 764 | 765 | // 当月的两个节气 766 | 767 | // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` 768 | 769 | var firstNode = getTerm(y, (m * 2 - 1)) // 返回当月「节」为几日开始 770 | 771 | var secondNode = getTerm(y, (m * 2)) // 返回当月「节」为几日开始 772 | 773 | 774 | 775 | // 依据12节气修正干支月 776 | 777 | var gzM = toGanZhi((y - 1900) * 12 + m + 11) 778 | 779 | if (d >= firstNode) { 780 | gzM = toGanZhi((y - 1900) * 12 + m + 12) 781 | 782 | } 783 | 784 | // 传入的日期的节气与否 785 | 786 | var isTerm = false 787 | 788 | var Term = null 789 | 790 | if (firstNode === d) { 791 | isTerm = true 792 | 793 | Term = solarTerm[m * 2 - 2] 794 | 795 | } 796 | 797 | if (secondNode === d) { 798 | isTerm = true 799 | 800 | Term = solarTerm[m * 2 - 1] 801 | 802 | } 803 | 804 | // 日柱 当月一日与 1900/1/1 相差天数 805 | 806 | var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 807 | 808 | var gzD = toGanZhi(dayCyclical + d - 1) 809 | 810 | // 该日期所属的星座 811 | 812 | var astro = toAstro(m, d) 813 | 814 | return {'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + toChinaMonth(month), 'IDayCn': toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro} 815 | 816 | } 817 | 818 | 819 | 820 | 821 | var calendarFormatter = { 822 | // 传入阳历年月日获得详细的公历、农历object信息 <=>JSON 823 | 824 | solar2lunar:function(y, m, d){ // 参数区间1900.1.31~2100.12.31 825 | 826 | return solar2lunar(y, m, d) 827 | 828 | }, 829 | 830 | /** 831 | * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON 832 | * @param y lunar year 833 | * @param m lunar month 834 | * @param d lunar day 835 | * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] 836 | * @return JSON object 837 | * @eg:console.log(calendar.lunar2solar(1987,9,10)); 838 | */ 839 | 840 | lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 841 | y = Number(y) 842 | m = Number(m) 843 | d = Number(d) 844 | isLeapMonth = !!isLeapMonth 845 | 846 | if (isLeapMonth && (leapMonth !== m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 847 | 848 | if (y === 2100 && m === 12 && d > 1 || y === 1900 && m === 1 && d < 31) { return -1 } // 超出了最大极限值 849 | 850 | var day = monthDays(y, m) 851 | 852 | var _day = day 853 | 854 | // bugFix 2016-9-25 855 | 856 | // if month is leap, _day use leapDays method 857 | 858 | if (isLeapMonth) { 859 | _day = leapDays(y, m) 860 | 861 | } 862 | 863 | if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 864 | 865 | 866 | 867 | // 计算农历的时间差 868 | 869 | var offset = 0 870 | 871 | for (var i = 1900; i < y; i++) { 872 | offset += lYearDays(i) 873 | 874 | } 875 | 876 | var leap = 0 877 | 878 | var isAdd = false 879 | 880 | for (i = 1; i < m; i++) { 881 | leap = leapMonth(y) 882 | 883 | if (!isAdd) { // 处理闰月 884 | 885 | if (leap <= i && leap > 0) { 886 | offset += leapDays(y); isAdd = true 887 | 888 | } 889 | 890 | } 891 | 892 | offset += monthDays(y, i) 893 | 894 | } 895 | 896 | // 转换闰月农历 需补充该年闰月的前一个月的时差 897 | 898 | if (isLeapMonth) { offset += day } 899 | 900 | // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) 901 | 902 | var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) 903 | 904 | var calObj = new Date((offset + d - 31) * 86400000 + stmap) 905 | 906 | var cY = calObj.getUTCFullYear() 907 | 908 | var cM = calObj.getUTCMonth() + 1 909 | 910 | var cD = calObj.getUTCDate() 911 | 912 | return solar2lunar(cY, cM, cD) 913 | 914 | } 915 | 916 | } 917 | 918 | export default calendarFormatter 919 | 920 | const lunar2solar = calendarFormatter.lunar2solar 921 | export { lunar2solar, solar2lunar } -------------------------------------------------------------------------------- /src/utils/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @formatDate 3 | */ 4 | export function formatDate(date = new Date(), dateSeparator = '-', timeSeparator = ':'){ 5 | const y = date.getFullYear() 6 | const m = date.getMonth() + 1 7 | const d = date.getDate() 8 | 9 | const h = date.getHours() 10 | const mn = date.getMinutes() 11 | const s = date.getSeconds() 12 | 13 | const _date = [y, m, d].join(dateSeparator) 14 | const _time = [h, mn, s].join(timeSeparator) 15 | 16 | return { 17 | allDate: `${_date} ${_time}`, 18 | date: _date, 19 | time: _time 20 | } 21 | } 22 | 23 | // export function -------------------------------------------------------------------------------- /src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 15 | 20 | -------------------------------------------------------------------------------- /src/views/natal-chart/CenterCell.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 31 | 53 | 54 | -------------------------------------------------------------------------------- /src/views/natal-chart/PalaceCell.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 42 | 67 | 68 | 128 | -------------------------------------------------------------------------------- /src/views/natal-chart/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 140 | 141 | 169 | 170 | -------------------------------------------------------------------------------- /src/views/natal-chart/utils/Palace.js: -------------------------------------------------------------------------------- 1 | class Palace { 2 | constructor(ops){ 3 | this.code = undefined 4 | this.index = undefined 5 | this.dizhi = ops.dizhi 6 | this.dizhiCode = ops.code 7 | this.isFate = false 8 | this.isBody = false 9 | this.mainStars = [] 10 | this.subStars = [] 11 | this.smallStars = [] 12 | } 13 | setTiangan({ name, code }){ 14 | this.tiangan = name 15 | this.tianganCode = code 16 | } 17 | setFatePalace(index){ 18 | this.isFate = true 19 | this.index = index 20 | this.name = '命宫' 21 | this.code = 'ming' 22 | } 23 | setBodyPalace(index){ 24 | this.isBody = true 25 | this.index = index 26 | } 27 | setPalaceName({ name, code }, index){ 28 | this.name = name 29 | this.code = code 30 | this.index = index 31 | } 32 | addMainStar(star){ 33 | this.mainStars.unshift(star) 34 | } 35 | addSubStar(star){ 36 | this.subStars.unshift(star) 37 | } 38 | addSmallStar(star){ 39 | this.smallStars.unshift(star) 40 | } 41 | } 42 | 43 | export default Palace -------------------------------------------------------------------------------- /src/views/natal-chart/utils/Person.js: -------------------------------------------------------------------------------- 1 | import { reactive } from 'vue'; 2 | import { lunar2solar } from '@/utils/date-transform'; 3 | import { 4 | tiangan, 5 | dizhi, 6 | dizhiChart, 7 | getShichen, 8 | palaceNames, 9 | wuxingGame, 10 | getMainStarsWithZiwei, 11 | getMainStarsWithTianfu, 12 | getTianganCode, 13 | getDizhiCode 14 | } from '../utils/map'; 15 | import { 16 | getSmallStarsConfig 17 | } from './rules'; 18 | import { getYingongStartTiangan } from '../utils/map'; 19 | import Palace from './Palace'; 20 | class Person { 21 | #fillOrder = ['yin', 'mao', 'chen', 'si', 'wu', 'wei', 'shen', 'you', 'xu', 'hai', 'zi', 'chou'] 22 | constructor(ops){ 23 | this.name = ops.name 24 | this.lunarDate = ops.d 25 | this.numTime = ops.t 26 | this.stars2Palace = {} 27 | this.palaces = {} 28 | this.init() 29 | } 30 | getPalace(index){ 31 | if(index < 0) { 32 | return this.natalChart[index + 12] 33 | }else if(index < 12) { 34 | return this.natalChart[index] 35 | }else{ 36 | return this.natalChart[index - 12] 37 | } 38 | } 39 | init(){ 40 | this.generateLunarInfo() 41 | this.setShichen() 42 | this.initPalaces() 43 | this.fillTiangan() 44 | this.setFatePalace() 45 | this.setBodyPalace() 46 | this.setOtherPalace() 47 | this.setWuxingGame() 48 | const zIndex = this.setZiweiStars() 49 | this.setTianfuStars(zIndex) 50 | // 小星 51 | this.setOtherRegularSmallStars() 52 | } 53 | // 生成农历信息 54 | generateLunarInfo(){ 55 | const date = this.lunarDate.split('-')?.map(n => Number(n)) 56 | this.lunarInfo = lunar2solar(...date) 57 | this.lMonth = this.lunarInfo.lMonth 58 | this.lDay = this.lunarInfo.lDay 59 | const [t, d] = this.lunarInfo.gzYear.split('') 60 | this.tYear = getTianganCode(t) 61 | this.dYear = getDizhiCode(d) 62 | } 63 | // 设置时辰 64 | setShichen(){ 65 | const { shichen, index } = getShichen(this.numTime) 66 | this.shichen = shichen 67 | this.shichenIndex = index 68 | } 69 | // 生成十二宫 70 | initPalaces(){ 71 | this.natalChart = reactive([]) 72 | dizhiChart.forEach(item => { 73 | this.natalChart.push( new Palace(item) ) 74 | }) 75 | this.natalChartMap = reactive({}) 76 | this.natalChart.forEach( (item, index) => { 77 | this.natalChartMap[item.dizhiCode] = item 78 | item.next = this.natalChart[index + 1 > 11 ? 0 : index + 1] 79 | item.prev = this.natalChart[index - 1 < 0 ? 11 : index - 1] 80 | }) 81 | } 82 | // 填充天干, next, prev 83 | fillTiangan(){ 84 | const { name, index } = getYingongStartTiangan(this.lunarInfo.lYear) 85 | const orderedTiangan = [ ...tiangan.slice(index), ...tiangan.slice(0, index + 2)]; 86 | this.#fillOrder.forEach((dizhi, idx) => { 87 | const palace = this.natalChartMap[dizhi] 88 | palace.setTiangan(orderedTiangan[idx]) 89 | }) 90 | } 91 | // 设置命宫 92 | setFatePalace() { 93 | // 寅开始,顺时针从 1 开始到生月,然后逆时针从 1 开始到时辰 94 | let index = this.lMonth - 1 - this.shichenIndex 95 | if(index < 0) index = index + 12 96 | const fate = this.#fillOrder[index] 97 | this.natalChartMap[fate].setFatePalace(index) 98 | this.palaces['ming'] = this.natalChartMap[fate] 99 | this.fatePalaceIndex = index 100 | } 101 | // 设置身宫 102 | setBodyPalace() { 103 | let index = this.lMonth - 1 + this.shichenIndex 104 | if(index > 12) index = index - 12 105 | const body = this.#fillOrder[index] 106 | this.natalChartMap[body].setBodyPalace(index) 107 | this.palaces['shen'] = this.natalChartMap[body] 108 | this.bodyPalaceIndex = index 109 | } 110 | // 设置其他宫位 111 | setOtherPalace() { 112 | const fatePalaceIndex = this.fatePalaceIndex 113 | const otherPalace = [...this.#fillOrder.slice(fatePalaceIndex + 1), ...this.#fillOrder.slice(0, fatePalaceIndex)] 114 | otherPalace.forEach((dizhi, index) => { 115 | const palace = palaceNames[index] 116 | const palaceIndex = fatePalaceIndex + index + 1 117 | this.natalChartMap[dizhi]?.setPalaceName(palace, palaceIndex > 11 ? palaceIndex - 12 : palaceIndex) 118 | this.palaces[palace.code] = this.natalChartMap[dizhi] 119 | 120 | }) 121 | } 122 | // 设置五行局 123 | setWuxingGame() { 124 | const fatePalaceName = this.#fillOrder[this.fatePalaceIndex] 125 | const { tiangan: t, dizhi: d } = this.natalChartMap[fatePalaceName] 126 | const tIndex = tiangan.findIndex(tg => t === tg.name) 127 | const dIndex = dizhi.findIndex( dz => d === dz ) 128 | // 根据天干计算到某一个五行局 129 | const t2Index = parseInt(tIndex / 2) 130 | // 找出地支所需的剩下的连续三个五行局 131 | let dCalcDep = wuxingGame.slice(t2Index, t2Index + 3) 132 | const dif = 3 - dCalcDep.length 133 | if(dif > 0) dCalcDep = dCalcDep.concat(wuxingGame.slice(0, dif)) 134 | let d2Index = parseInt(dIndex / 2) 135 | 136 | this.wuxingGame = dCalcDep[d2Index > 2 ? d2Index - 3 : d2Index] 137 | } 138 | 139 | setStars2Palace(name, palace){ 140 | this.stars2Palace[name] = palace 141 | } 142 | 143 | getZiweiIndex(){ 144 | const { lDay, wuxingGame:{ num } } = this 145 | let jumpNum = lDay / num 146 | const isInt = num => Number.isInteger(num) 147 | const isEvenNum = num => num % 2 === 0 148 | if(!isInt(jumpNum)){ 149 | let r = 1 150 | let s = jumpNum 151 | while (!isInt(s)) { 152 | r * num < lDay ? r++ : s = r * num 153 | } 154 | const lend = s - lDay 155 | jumpNum = isEvenNum(lend) ? r + lend : r - lend 156 | } 157 | const index = jumpNum - 1 158 | const dizhi = this.#fillOrder[index < 0 ? index + 12 : index] 159 | return { index, dizhi } 160 | } 161 | 162 | setZiweiStars(){ 163 | const { index: zIndex } = this.getZiweiIndex() 164 | const stars = getMainStarsWithZiwei(this) 165 | // 逆着排 166 | stars?.forEach((star, index) => { 167 | if(!star) return 168 | const palace = this.getPalace( zIndex - index ) 169 | palace.addMainStar(star) 170 | this.setStars2Palace(star.code, palace) 171 | }) 172 | return zIndex 173 | } 174 | 175 | setTianfuStars(zIndex){ 176 | const tIndex = 12 - zIndex 177 | const stars = getMainStarsWithTianfu(this) 178 | stars?.forEach((star, index) => { 179 | if(!star) return 180 | const palace = this.getPalace(tIndex + index) 181 | palace?.addMainStar(star) 182 | this.setStars2Palace(star.code, palace) 183 | }) 184 | } 185 | /** 186 | * 187 | * @param { String } startPalaceCode 哪个地支开始 (汉字拼音) 188 | * @param { String } shichen 从什么开始 (汉字) 189 | * @param { Boolean } direction 顺 / 逆 时针。 true: 顺, false:逆 190 | * @param { String } targetShichen 到什么 (汉字) 191 | * @returns { Palace } 返回目标宫位 192 | * @example 亥起子时,逆时针到生时 193 | */ 194 | getMovePalace(startPalaceCode, startDizhi, direction, endDizhi){ 195 | // 获取起始宫 196 | const startPalace = this.natalChartMap[startPalaceCode] 197 | // 获取从那个地支开始的数组 198 | const shichenIndex = dizhi.findIndex(dz => dz === startDizhi) 199 | const newArr = [ ...dizhi.slice(shichenIndex), ...dizhi.slice(0, shichenIndex) ] 200 | // 到达目标地支的索引 201 | const scIndex = newArr.findIndex(dz => dz === endDizhi) 202 | // 根据起始宫的位置顺逆到达目标宫 203 | const endPalace = this.getPalace(direction ? startPalace.index + scIndex : startPalace.index - scIndex) 204 | return endPalace 205 | } 206 | setOtherRegularSmallStars(){ 207 | const smallStarsConfig = getSmallStarsConfig(this) 208 | smallStarsConfig.forEach(config => { 209 | if(!config) return 210 | const palace = 211 | typeof config.rule === 'string' 212 | ? this.natalChartMap[config.rule] 213 | : this.getMovePalace(...config.rule); 214 | 215 | config.isSub 216 | ? palace.addSubStar(config.star) 217 | : palace.addSmallStar(config.star); 218 | 219 | config.cb && config.cb(palace) 220 | }) 221 | } 222 | } 223 | 224 | export default Person 225 | -------------------------------------------------------------------------------- /src/views/natal-chart/utils/map.js: -------------------------------------------------------------------------------- 1 | export const tiangan = [ 2 | { name: '甲', code: 'jia' }, 3 | { name: '乙', code: 'yi' }, 4 | { name: '丙', code: 'bing' }, 5 | { name: '丁', code: 'ding' }, 6 | { name: '戊', code: 'wu' }, 7 | { name: '己', code: 'ji' }, 8 | { name: '庚', code: 'geng' }, 9 | { name: '辛', code: 'xin' }, 10 | { name: '壬', code: 'ren' }, 11 | { name: '癸', code: 'gui' } 12 | ] 13 | 14 | export const getTianganCode = name => tiangan.find(tg => tg.name === name)?.code 15 | 16 | export const dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'] 17 | 18 | export const dizhiChart = [ 19 | { dizhi: '寅', code: 'yin' }, 20 | { dizhi: '卯', code: 'mao' }, 21 | { dizhi: '辰', code: 'chen' }, 22 | { dizhi: '巳', code: 'si' }, 23 | { dizhi: '午', code: 'wu' }, 24 | { dizhi: '未', code: 'wei' }, 25 | { dizhi: '申', code: 'shen' }, 26 | { dizhi: '酉', code: 'you' }, 27 | { dizhi: '戌', code: 'xu' }, 28 | { dizhi: '亥', code: 'hai' }, 29 | { dizhi: '子', code: 'zi' }, 30 | { dizhi: '丑', code: 'chou' }, 31 | ] 32 | 33 | export const getDizhiCode = name => dizhiChart.find(dz => dz.dizhi === name)?.code 34 | 35 | 36 | 37 | export const palaceNames = [ 38 | { name: '父母', code: 'fumu' }, 39 | { name: '福德', code: 'fude' }, 40 | { name: '田宅', code: 'tianzhai' }, 41 | { name: '官禄', code: 'guanlu' }, 42 | { name: '朋友', code: 'pengyou' }, 43 | { name: '迁移', code: 'qianyi' }, 44 | { name: '疾厄', code: 'jie' }, 45 | { name: '财帛', code: 'caibo' }, 46 | { name: '子女', code: 'zinv' }, 47 | { name: '夫妻', code: 'fuqi' }, 48 | { name: '兄弟', code: 'xiongdi' } 49 | ] 50 | 51 | export const wuxingGame = [ 52 | { name: '金四局', num: 4 }, 53 | { name: '水二局', num: 2 }, 54 | { name: '火六局', num: 6 }, 55 | { name: '土五局', num: 5 }, 56 | { name: '木三局', num: 3 } 57 | ] 58 | 59 | 60 | export const sihuaMap = { 61 | jia: { 62 | lianzhen: '禄', 63 | pojun: '权', 64 | wuqu: '科', 65 | taiyang: '忌' 66 | }, 67 | yi: { 68 | tianji: '禄', 69 | tianliang: '权', 70 | ziwei: '科', 71 | taiyin: '忌' 72 | }, 73 | bing: { 74 | tiantong: '禄', 75 | tianji: '权', 76 | wenchang: '科', 77 | lianzhen: '忌' 78 | }, 79 | ding: { 80 | taiyin: '禄', 81 | tiantong: '权', 82 | tianji: '科', 83 | jumen: '忌' 84 | }, 85 | wu: { 86 | tanlang: '禄', 87 | taiyin: '权', 88 | youbi: '科', 89 | tianji: '忌' 90 | }, 91 | ji: { 92 | wuqu: '禄', 93 | tanlang: '权', 94 | tianliang: '科', 95 | wenqu: '忌', 96 | }, 97 | geng: { 98 | taiyang: '禄', 99 | wuqu: '权', 100 | taiyin: '科', 101 | tiantong: '忌' 102 | }, 103 | xin: { 104 | jumen: '禄', 105 | taiyang: '权', 106 | wenqu: '科', 107 | wenchang: '忌', 108 | }, 109 | ren: { 110 | tianliang: '禄', 111 | ziwei: '权', 112 | zuofu: '科', 113 | wuqu: '忌' 114 | }, 115 | gui: { 116 | pojun: '禄', 117 | jumen: '权', 118 | taiyin: '科', 119 | tanlang: '忌' 120 | } 121 | 122 | 123 | } 124 | 125 | export function getMainStarsWithZiwei(person){ 126 | const t = person.tYear 127 | return [ 128 | { name: '紫薇', code: 'ziwei', sihua: sihuaMap[t]['ziwei'] }, 129 | { name: '天机', code: 'tianji', sihua: sihuaMap[t]['tianji'] }, 130 | null, 131 | { name: '太阳', code: 'taiyang', sihua: sihuaMap[t]['taiyang'] }, 132 | { name: '武曲', code: 'wuqu', sihua: sihuaMap[t]['wuqu'] }, 133 | { name: '天同', code: 'tiantong', sihua: sihuaMap[t]['tiantong'] }, 134 | null, 135 | null, 136 | { name: '廉贞', code: 'lianzhen', sihua: sihuaMap[t]['lianzhen'] } 137 | ] 138 | } 139 | export function getMainStarsWithTianfu(person){ 140 | const t = person.tYear 141 | return [ 142 | { name: '天府', code: 'tianfu', sihua: sihuaMap[t]['tianfu'] }, 143 | { name: '太阴', code: 'taiyin', sihua: sihuaMap[t]['taiyin'] }, 144 | { name: '贪狼', code: 'tanlang', sihua: sihuaMap[t]['tanlang'] }, 145 | { name: '巨门', code: 'jumen', sihua: sihuaMap[t]['jumen'] }, 146 | { name: '天相', code: 'tianxaing', sihua: sihuaMap[t]['tianxaing'] }, 147 | { name: '天梁', code: 'tianliang', sihua: sihuaMap[t]['tianliang'] }, 148 | { name: '七杀', code: 'qisha', sihua: sihuaMap[t]['qisha'] }, 149 | null, null, null, 150 | { name: '破军', code: 'pojun', sihua: sihuaMap[t]['pojun'] }, 151 | ] 152 | } 153 | 154 | export function getYingongStartTiangan(year) { 155 | const endNum = year.toString().charAt(3) 156 | let name = null 157 | let index = null 158 | if( endNum == '4' || endNum == '9' ) index = tiangan.findIndex(i => i.name === '丙') 159 | if( endNum == '0' || endNum == '5' ) index = tiangan.findIndex(i => i.name === '戊') 160 | if( endNum == '6' || endNum == '1' ) index = tiangan.findIndex(i => i.name === '庚') 161 | if( endNum == '7' || endNum == '2' ) index = tiangan.findIndex(i => i.name === '壬') 162 | if( endNum == '8' || endNum == '3' ) index = tiangan.findIndex(i => i.name === '甲') 163 | name = tiangan[index].name 164 | return { 165 | name, 166 | index 167 | } 168 | } 169 | 170 | export function getShichen(time) { 171 | const hour = Number(time.split(':')[0]) 172 | let index = Math.round(hour / 2) 173 | if(index > 11) index = 0 174 | 175 | return { 176 | shichen: dizhi[index], 177 | index 178 | } 179 | } 180 | 181 | 182 | 183 | -------------------------------------------------------------------------------- /src/views/natal-chart/utils/rules.js: -------------------------------------------------------------------------------- 1 | import { dizhi, sihuaMap } from './map'; 2 | 3 | export const lucunRule = { 4 | jia: 'yin', 5 | yi: 'mao', 6 | bing: 'si', 7 | wu: 'si', 8 | ding: 'wu', 9 | ji: 'wu', 10 | geng: 'shen', 11 | xin: 'you', 12 | ren: 'hai', 13 | gui: 'zi' 14 | } 15 | 16 | export const tianma = { 17 | shen: 'yin', 18 | zi: 'yin', 19 | chen: 'yin', 20 | yin: 'shen', 21 | wu: 'shen', 22 | xu: 'shen', 23 | hai: 'si', 24 | mao: 'si', 25 | wei: 'si', 26 | si: 'hai', 27 | you: 'hai', 28 | chou: 'hai' 29 | } 30 | 31 | export const huoxing = { 32 | yin: 'chou', 33 | wu: 'chou', 34 | xu: 'chou', 35 | shen: 'yin', 36 | zi: 'yin', 37 | chen: 'yin', 38 | si: 'mao', 39 | you: 'mao', 40 | chou: 'mao', 41 | hai: 'you', 42 | mao: 'you', 43 | wei: 'you' 44 | } 45 | 46 | export const lingxing = { 47 | yin: 'mao', 48 | wu: 'mao', 49 | xu: 'mao', 50 | shen: 'xu', 51 | zi: 'xu', 52 | chen: 'xu', 53 | si: 'xu', 54 | you: 'xu', 55 | chou: 'xu', 56 | hai: 'xu', 57 | mao: 'xu', 58 | wei: 'xu' 59 | } 60 | export const xianchi = { 61 | yin: 'mao', 62 | wu: 'mao', 63 | xu: 'mao', 64 | shen: 'you', 65 | zi: 'you', 66 | chen: 'you', 67 | si: 'wu', 68 | you: 'wu', 69 | chou: 'wu', 70 | hai: 'zi', 71 | mao: 'zi', 72 | wei: 'zi' 73 | } 74 | 75 | // t == true ? 天魁 : 天钺 76 | export function getTiankuiTianyue(t) { 77 | const r1 = t ? 'chou' : 'wei' 78 | const r2 = t ? 'zi' : 'shen' 79 | const r3 = t ? 'hai' : 'you' 80 | const r4 = t ? 'yin' : 'wu' 81 | const r5 = t ? 'mao' : 'si' 82 | return { 83 | jia: r1, wu: r1, geng: r1, 84 | yi: r2, ji: r2, 85 | bing: r3, ding: r3, 86 | xin: r4, 87 | ren: r5, gui: r5 88 | } 89 | } 90 | 91 | export function getSmallStarsConfig(person){ 92 | return [ 93 | { 94 | isSub: 1, 95 | rule: lucunRule[person.tYear], 96 | star: { name: '禄存', code: 'lucun' }, 97 | cb(palace){ 98 | palace.next.addSmallStar({ name: '擎羊', code: 'qingyang' }) 99 | palace.prev.addSmallStar({ name: '陀罗', code: 'tuoluo' }) 100 | } 101 | }, 102 | { 103 | rule: tianma[person.dYear], 104 | star: { name: '天马', code: 'tianma' }, 105 | }, 106 | { 107 | rule: [huoxing[person.dYear], '子', true, person.shichen], 108 | star: { name: '火星', code: 'huoxing' }, 109 | }, 110 | { 111 | rule: ['hai', '子', false, person.shichen], 112 | star: { name: '地空', code: 'dikong' } 113 | }, 114 | { 115 | rule: ['hai', '子', true, person.shichen], 116 | star: { name: '地劫', code: 'dijie' } 117 | }, 118 | { 119 | rule: [lingxing[person.dYear], '子', true, person.shichen], 120 | star: { name: '铃星', code: 'lingxing' } 121 | }, 122 | { 123 | rule: ['mao', '子', false, person.dYear], 124 | star: { name: '红鸾', code: 'hongluan' } 125 | }, 126 | { 127 | rule: ['you', '子', false, person.dYear], 128 | star: { name: '天喜', code: 'tianxi' } 129 | }, 130 | { 131 | rule: ['chou', '子', true, dizhi[person.lMonth - 1]], 132 | star: { name: '天姚', code: 'tianyao' } 133 | }, 134 | { 135 | rule: xianchi[person.dYear], 136 | star: { name: '咸池', code: 'xianchi' } 137 | }, 138 | { 139 | rule: ['you', '子', true, dizhi[person.lMonth - 1]], 140 | star: { name: '天刑', code: 'tianxing' } 141 | }, 142 | { 143 | isSub: 1, 144 | rule: ['chen', '子', true, dizhi[person.lMonth - 1]], 145 | star: { name: '左辅', code: 'zuofu', sihua: sihuaMap[person.tYear]['zuofu'] } 146 | }, 147 | { 148 | isSub: 1, 149 | rule: ['xu', '子', false, dizhi[person.lMonth - 1]], 150 | star: { name: '右弼', code: 'youbi', sihua: sihuaMap[person.tYear]['youbi'] } 151 | }, 152 | { 153 | isSub: 1, 154 | rule: ['chen', '子', true, person.shichen], 155 | star: { name: '文曲', code: 'wenqu', sihua: sihuaMap[person.tYear]['wenqu'] } 156 | }, 157 | { 158 | isSub: 1, 159 | rule: ['xu', '子', false, person.shichen], 160 | star: { name: '文昌', code: 'wenchang', sihua: sihuaMap[person.tYear]['wenchang'] } 161 | }, 162 | { 163 | isSub: 1, 164 | rule: getTiankuiTianyue(true)[person.tYear], 165 | star: { name: '天魁', code: 'tiankui' } 166 | }, 167 | { 168 | isSub: 1, 169 | rule: getTiankuiTianyue()[person.tYear], 170 | star: { name: '天钺', code: 'tianyue' } 171 | } 172 | ] 173 | } 174 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import { resolve } from 'path' 3 | import vue from '@vitejs/plugin-vue' 4 | import Components from 'unplugin-vue-components/vite'; 5 | import { VantResolver } from 'unplugin-vue-components/resolvers'; 6 | 7 | export default defineConfig({ 8 | resolve: { 9 | alias: { 10 | "@": resolve(__dirname, 'src') 11 | }, 12 | }, 13 | plugins: [ 14 | vue(), 15 | Components({ 16 | resolvers: [VantResolver()], 17 | }), 18 | ] 19 | }) 20 | --------------------------------------------------------------------------------