├── .editorconfig ├── .eslintignore ├── .eslintrc.cjs ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── LICENSE ├── README.md ├── nyc.config.js ├── package.json ├── packages └── core │ ├── echarts-opts │ ├── bar │ │ └── bar.opt.ts │ ├── base │ │ ├── color.opt.ts │ │ ├── x-axis.opt.ts │ │ └── y-axis.opt.ts │ ├── index.ts │ ├── line │ │ └── line.opt.ts │ └── pie │ │ └── pie.opt.ts │ ├── env.d.ts │ ├── index.ts │ ├── package.json │ ├── src │ ├── assets │ │ ├── app.common.less │ │ ├── app.dynamic.less │ │ ├── app.flex.less │ │ └── app.variable.less │ ├── components │ │ ├── card │ │ │ ├── card-title.vue │ │ │ └── card.vue │ │ ├── dance-number │ │ │ ├── dance-number.vue │ │ │ └── dance-number2.vue │ │ ├── echarts │ │ │ └── echart.vue │ │ ├── scale │ │ │ └── index.vue │ │ ├── screen │ │ │ ├── screen-title.vue │ │ │ └── screen.vue │ │ └── swiper │ │ │ └── swiper.vue │ ├── config │ │ └── project.config.ts │ └── utils │ │ ├── common.util.ts │ │ ├── date.util.ts │ │ ├── eventbus.util.ts │ │ ├── storage.util.ts │ │ └── string.util.ts │ └── tsconfig.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── projects └── demo │ ├── .env.development │ ├── .env.production │ ├── .env.simulater │ ├── .env.testing │ ├── .gitignore │ ├── index.html │ ├── package.json │ ├── public │ └── vite.svg │ ├── src │ ├── App.vue │ ├── assets │ │ ├── 330000.geo.json │ │ ├── 330110.geo.json │ │ ├── DS-DIGI-1.ttf │ │ ├── DS-DIGIB-2.ttf │ │ ├── app.variable.less │ │ ├── female.svg │ │ ├── male.svg │ │ └── vue.svg │ ├── components │ │ ├── ArriveNumber.vue │ │ ├── BasicData.vue │ │ ├── CheckNumber.vue │ │ ├── DeparturesNumber.vue │ │ ├── DirectionOfPeople.vue │ │ ├── HotlineTop10.vue │ │ ├── IndexMap.ts │ │ ├── RealtimeTicketCount.vue │ │ └── RealtimeTicketPrice.vue │ ├── config │ │ └── project.config.ts │ ├── main.less │ ├── main.ts │ ├── model │ │ └── model.ts │ ├── pages │ │ └── index.vue │ ├── utils │ │ └── string.util.ts │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true # 根目录的配置文件,编辑器会由当前目录向上查找,如果找到 `roor = true` 的文件,则不再查找 2 | 3 | [*] # 匹配所有的文件 4 | indent_style = space # 空格缩进 5 | indent_size = 4 # 缩进空格为4个 6 | end_of_line = lf # 文件换行符是 linux 的 `\n` 7 | charset = utf-8 # 文件编码是 utf-8 8 | trim_trailing_whitespace = true # 不保留行末的空格 9 | insert_final_newline = true # 文件末尾添加一个空行 10 | curly_bracket_next_line = false # 大括号不另起一行 11 | spaces_around_operators = true # 运算符两遍都有空格 12 | indent_brace_style = 1tbs # 条件语句格式是 1tbs 13 | 14 | [*.{js,vue}] # 对所有的 js, vue 文件生效 15 | quote_type = single # 字符串使用单引号 16 | 17 | [*.{html,less,css,json}] # 对所有 html, less, css, json 文件生效 18 | quote_type = double # 字符串使用双引号 19 | 20 | [package.json] # 对 package.json 生效 21 | indent_size = 2 # 使用2个空格缩进 22 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | browser: true, 5 | node: true, 6 | es2021: true, 7 | }, 8 | parser: "vue-eslint-parser", 9 | extends: [ 10 | "eslint:recommended", 11 | "plugin:vue/vue3-recommended", 12 | "plugin:@typescript-eslint/recommended", 13 | "plugin:prettier/recommended", 14 | // eslint-config-prettier 的缩写 15 | "prettier", 16 | ], 17 | parserOptions: { 18 | ecmaVersion: 12, 19 | parser: "@typescript-eslint/parser", 20 | sourceType: "module", 21 | ecmaFeatures: { 22 | jsx: true, 23 | }, 24 | }, 25 | // eslint-plugin-vue @typescript-eslint/eslint-plugin eslint-plugin-prettier的缩写 26 | plugins: ["vue", "@typescript-eslint", "prettier"], 27 | rules: { 28 | "@typescript-eslint/ban-ts-ignore": "off", 29 | "@typescript-eslint/no-unused-vars": "off", 30 | "@typescript-eslint/explicit-function-return-type": "off", 31 | "@typescript-eslint/no-explicit-any": "off", 32 | "@typescript-eslint/no-var-requires": "off", 33 | "@typescript-eslint/no-empty-function": "off", 34 | "@typescript-eslint/no-use-before-define": "off", 35 | "@typescript-eslint/ban-ts-comment": "off", 36 | "@typescript-eslint/ban-types": "off", 37 | "@typescript-eslint/no-non-null-assertion": "off", 38 | "@typescript-eslint/explicit-module-boundary-types": "off", 39 | "no-var": "error", 40 | "prettier/prettier": [ 41 | "error", 42 | { 43 | printWidth: 120, 44 | }, 45 | ], 46 | // 禁止出现console 47 | // "no-console": "warn", 48 | // 禁用debugger 49 | "no-debugger": "warn", 50 | // 禁止出现重复的 case 标签 51 | "no-duplicate-case": "warn", 52 | // 禁止出现空语句块 53 | "no-empty": "warn", 54 | // 禁止不必要的括号 55 | "no-extra-parens": "off", 56 | // 禁止对 function 声明重新赋值 57 | "no-func-assign": "warn", 58 | // 禁止在 return、throw、continue 和 break 语句之后出现不可达代码 59 | "no-unreachable": "warn", 60 | // 强制所有控制语句使用一致的括号风格 61 | curly: "warn", 62 | // 要求 switch 语句中有 default 分支 63 | "default-case": "warn", 64 | // 强制尽可能地使用点号 65 | "dot-notation": "warn", 66 | // 要求使用 === 和 !== 67 | // eqeqeq: "warn", 68 | // 禁止 if 语句中 return 语句之后有 else 块 69 | "no-else-return": "warn", 70 | // 禁止出现空函数 71 | "no-empty-function": "warn", 72 | // 禁用不必要的嵌套块 73 | "no-lone-blocks": "warn", 74 | // 禁止使用多个空格 75 | "no-multi-spaces": "warn", 76 | // 禁止多次声明同一变量 77 | "no-redeclare": "warn", 78 | // 禁止在 return 语句中使用赋值语句 79 | "no-return-assign": "warn", 80 | // 禁用不必要的 return await 81 | "no-return-await": "warn", 82 | // 禁止自我赋值 83 | "no-self-assign": "warn", 84 | // 禁止自身比较 85 | "no-self-compare": "warn", 86 | // 禁止不必要的 catch 子句 87 | "no-useless-catch": "warn", 88 | // 禁止多余的 return 语句 89 | "no-useless-return": "warn", 90 | // 禁止变量声明与外层作用域的变量同名 91 | "no-shadow": "off", 92 | // 允许delete变量 93 | "no-delete-var": "off", 94 | // 强制数组方括号中使用一致的空格 95 | "array-bracket-spacing": "warn", 96 | // 强制在代码块中使用一致的大括号风格 97 | "brace-style": "warn", 98 | // 强制使用骆驼拼写法命名约定 99 | // camelcase: "warn", 100 | // 强制使用一致的缩进 101 | indent: "off", 102 | // 强制在 JSX 属性中一致地使用双引号或单引号 103 | // 'jsx-quotes': 'warn', 104 | // 强制可嵌套的块的最大深度4 105 | "max-depth": "warn", 106 | // 强制最大行数 300 107 | // "max-lines": ["warn", { "max": 1200 }], 108 | // 强制函数最大代码行数 50 109 | // 'max-lines-per-function': ['warn', { max: 70 }], 110 | // 强制函数块最多允许的的语句数量20 111 | "max-statements": ["warn", 100], 112 | // 强制回调函数最大嵌套深度 113 | "max-nested-callbacks": ["warn", 3], 114 | // 强制函数定义中最多允许的参数数量 115 | "max-params": ["warn", 3], 116 | // 强制每一行中所允许的最大语句数量 117 | "max-statements-per-line": ["warn", { max: 1 }], 118 | // 要求方法链中每个调用都有一个换行符 119 | "newline-per-chained-call": ["warn", { ignoreChainWithDepth: 3 }], 120 | // 禁止 if 作为唯一的语句出现在 else 语句中 121 | "no-lonely-if": "warn", 122 | // 禁止空格和 tab 的混合缩进 123 | "no-mixed-spaces-and-tabs": "warn", 124 | // 禁止出现多行空行 125 | "no-multiple-empty-lines": "warn", 126 | // 禁止出现; 127 | // semi: ["warn", "never"], 128 | // 强制在块之前使用一致的空格 129 | "space-before-blocks": "warn", 130 | // 强制在 function的左括号之前使用一致的空格 131 | // 'space-before-function-paren': ['warn', 'never'], 132 | // 强制在圆括号内使用一致的空格 133 | "space-in-parens": "warn", 134 | // 要求操作符周围有空格 135 | "space-infix-ops": "warn", 136 | // 强制在一元操作符前后使用一致的空格 137 | "space-unary-ops": "warn", 138 | // 强制在注释中 // 或 /* 使用一致的空格 139 | // "spaced-comment": "warn", 140 | // 强制在 switch 的冒号左右有空格 141 | "switch-colon-spacing": "warn", 142 | // 强制箭头函数的箭头前后使用一致的空格 143 | "arrow-spacing": "warn", 144 | "prefer-const": "warn", 145 | "prefer-rest-params": "warn", 146 | "no-useless-escape": "warn", 147 | "no-irregular-whitespace": "warn", 148 | "no-prototype-builtins": "warn", 149 | "no-fallthrough": "warn", 150 | "no-extra-boolean-cast": "warn", 151 | "no-case-declarations": "warn", 152 | "no-async-promise-executor": "warn", 153 | "vue/multi-word-component-names": "off", 154 | }, 155 | globals: { 156 | defineProps: "readonly", 157 | defineEmits: "readonly", 158 | defineExpose: "readonly", 159 | withDefaults: "readonly", 160 | }, 161 | }; 162 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: CI 4 | 5 | # Controls when the workflow will run 6 | on: 7 | push: 8 | branches: [main] 9 | 10 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 11 | jobs: 12 | # This workflow contains a single job called "build" 13 | build-and-deploy: 14 | # The type of runner that the job will run on 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - name: Checkout 19 | uses: actions/checkout@master 20 | 21 | - name: Install and Build 22 | run: | 23 | npm install -g pnpm 24 | pnpm install 25 | pnpm build:demo 26 | 27 | - name: Deploy to GitHub Pages 28 | uses: JamesIves/github-pages-deploy-action@v4.3.3 29 | with: 30 | branch: gh-pages 31 | folder: projects/demo/dist 32 | token: ${{ secrets.ACCESS_TOKEN }} 33 | clean: true 34 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "tabWidth": 4, 4 | "useTabs": false, 5 | "semi": true, 6 | "singleQuote": false, 7 | "bracketSpacing": true, 8 | "bracketSameLine": true, 9 | "endOfLine": "lf" 10 | } 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 ZTStory 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-datav 大屏可视化框架模板 2 | 3 | ## 修改记录 4 | 5 | ### 1、将 vw 方案替换为 scale 方案 6 | 7 | > 经实际运行情况分析,由于部分线下场景的大屏是笔记本或一些台机投屏的,所以分辨率会受到主机屏幕分辨率的影响,导致 vw 在某些情况下字体偏大,从而导致换行甚至影响布局,故综合考虑采用 scale 方案保持页面布局不受影响 8 | 9 | 修改方式如下: 10 | 11 | ```typescript 12 | // vite.config.ts 13 | // 删除 pxtovw_config 相关配置代码 14 | css: { 15 | // postcss: { 16 | // plugins: [pxtovw_config], 17 | // }, 18 | preprocessorOptions: { 19 | less: { 20 | javascriptEnabled: true, 21 | additionalData: `@import "@/assets/app.variable.less";`, 22 | }, 23 | }, 24 | } 25 | 26 | // packages/core/src/utils/string.util.ts 27 | // 不进行 px2vw 的单位转换 28 | function px2vw(px: number, root: number = 1920, fixed = 6) { 29 | // 已替换为 scale 方案,代码保留仅供参考 30 | // const res = (px / root) * 100; 31 | // return `${res.toFixed(fixed)}vw`; 32 | return `${px}px`; 33 | } 34 | 35 | 36 | ``` 37 | 38 | 最后: 39 | 40 | ```vue 41 | // 首页引入 ZtScale 组件即可 42 | 43 | ... 44 | 45 | ``` 46 | 47 | 原文阅读:[https://juejin.cn/post/7153457400974934053/](https://juejin.cn/post/7153457400974934053/) 48 | 49 | ## 起源 50 | 51 | 原本公司项目都是完成一些后台管理的内容还有移动端的内容,最近商务那边对接了两个关于可视化大屏的项目,虽说公司前端在此类项目上面没有什么经验积累,但毕竟没吃过猪肉还是见过猪跑的,在着手开发之前,需要先准备一些解决通用问题的开发框架,方便后续相关大屏项目的快速迭代。 52 | 53 | ## 思考 54 | 55 | > 关于可视化大屏项目的开荒,我总结了以下几个问题 56 | 57 | 1. 可视化图表库应该如何选择? 58 | 2. 大屏开发框架应该如何搭建? 59 | 3. 大屏基础组件应该如何设计与实现? 60 | 4. 大屏渲染内容图表的定位问题及缩放问题如何解决? 61 | 5. 大屏项目开发代码结构该如何组织? 62 | 63 | ## 调研与落地 64 | 65 | #### 1、可视化图标库应该如何选择? 66 | 67 | 鉴于可视化技术已经相对成熟了,市面上的开源可视化图表库也是繁华缭乱的,那我们应该怎么选择呢? 68 | 69 | 关于这个问题,我个人也是查阅了很多资料,看了一些图表库的官方文档及示例,结合一些内容作者的分享成果作以下分析: 70 | 71 | **1)ECharts.js** 72 | 73 | > 官网:https://echarts.apache.org 74 | 75 | ECharts.js 最早是由[百度技术团队](https://echarts.baidu.com)维护的, 76 | 后来移交给了 Apache 开源基金会孵化 77 | 78 | 也是我最终选择的图表库,选择它的原因也是因为文档界面相对友好,支持 `SVG` 、`Canvas` 双擎渲染,图表示例也比较全,而且文档是支持中英文的,使用的人也比较多,所以相关资料也很丰富 79 | 80 | 这里要说一点坑就是,文档、示例虽好,但是很多特殊效果真的需要仔细阅读示例 `demo` 和配置项文档才能了解清楚,因为,`ECharts` 的配置选项实在是太庞大啦,对于第一次接触的我来说,还是有点吃力,不过还好,套路摸清楚之后就可以很快复制 81 | 82 | **2)Chart.js** 83 | 84 | > 英文原版:https://www.chartjs.org 85 | > 86 | > 中文版:https://chartjs.bootcss.com 87 | 88 | 同样作为一款文档支持中英文的图表库,我也是把它纳入了对比范围 89 | 90 | 文档整体结构和界面都是非常友好的,也拥有相当数量的基础内置图表,对于常规开发来说,这个库也是比较不错的选择,`Api` 学习难度低于 `ECharts` 91 | 92 | 但是如果有复杂图表比如仪表盘或者地图相关渲染的时候,这个库就不支持了,不过也不影响这个库的好用,大家可以根据自己的业务需求来选择,混合选择多款图表库也是可行的 93 | 94 | **3) Antv** 95 | 96 | > 官网:https://antv.vision/zh 97 | > 98 | > 国内镜像:https://antv.gitee.io/zh/ 99 | 100 | Antv 是我一开始比较看好的一个可视化图表库,它的产品系列划分很多,根据不同的图表类型也分了很多不同的产品线 101 | 102 | - `G2`(可视化图形)、`G2Plot`(通用图表库) 103 | - `S2`(多维可视分析表格) 104 | - `G6`(关系数据图分析工具) 105 | - `X6`(图编辑引擎) 106 | - `L7`(地理空间数据可视化) 107 | - `F2`(专注移动端的可视化解决方案) 108 | 109 | 文档的质量毕竟大厂的产品,还是非常能打的,目前是免费使用的,但是后期是否会收费就不清楚了,目前看这些项目在 `GitHub` 都是开源的 `MIT`,如果有符合需求的也可以考虑。 110 | 111 | 但是也看到有人说引入后本地可以运行,但是部署在服务器发生了未知 bug,导致图像无法渲染,所以也就没有使用,毕竟没有深入了解过,或许这种问题已经修复了。 112 | 113 | **4) D3.js** 114 | 115 | > 官网:https://d3js.org/ 116 | 117 | 纯英文文档,相信这一条或许会劝退很多人,`GitHub` 有国内开发者翻译的 Api [中文手册](https://github.com/d3/d3/wiki/API--%E4%B8%AD%E6%96%87%E6%89%8B%E5%86%8C),没有内置图表 118 | 119 | 但是其定义的绘图开发框架可以让你用 `Api` 的方式来进行 `SVG` 绘图,这一点比使用原生 `SVG` 要好很多,如果大家有需求要进行自定义绘制的,可以考虑使用 `D3.js`。 120 | 121 | 一句话:很底层,但是足够灵活,可满足绝大部分图表内容的绘制 122 | 123 | #### 2、大屏开发框架应该如何搭建? 124 | 125 | **1)为什么要搭建框架?** 126 | 127 | 如果我们直接上手画图的话,的确很快,每种图标的配置都来一份,每个框框标题都用 Div 一把梭,完全没有心智负担 128 | 129 | 但是来第二套、第三套、第四套图的时候,是不是要吐血了。 130 | 131 | 拷代码再改?如果两期离得近还行,如果放个把月半年再来,是不是忘得差不多了。。 132 | 133 | 如果 UI 视觉稿的风格基本一致的情况下,是不是有一套可视化开发框架会爽很多? 134 | 135 | **2)如何搭建框架呢?** 136 | 137 | 这个问题,没有标准答案,我个人的理解,按需求和设计稿以及你所选择的图表库共同决定的。 138 | 139 | 理论上,好的框架设计应该是支持底层图表库替换而应用层无需修改业务代码的,所以 `Api` 的设计就尤为重要了。 140 | 141 | 那我们理一理,开发一款大屏项目,需要经历那些设计? 142 | 143 | **大屏幕、大标题、每个图表的边框、每个图表的文字说明、绘图引擎、屏幕缩放的时候画面跟着等比缩放**等等 144 | 145 | 那我们就应该考虑对上述问题有一个统一的解决方案,这样后续在进行大屏项目开发时就能够事半功倍了。 146 | 147 | #### 3、大屏基础组件应该如何设计与实现? 148 | 149 | 我对我们现有的可视化大屏项目做了这样几个拆分 150 | 151 | > - Screen - 大屏 152 | > - Screen Title - 大屏标题 153 | > - Card - 数据内容卡片 154 | > - Card Title - 数据卡片标题 155 | > - Swiper - 大屏内容滚动 156 | > - Dance Number - 跳动的数字 157 | > - ECharts - 图表 158 | 159 | 通过这样拆解,将 UI 视觉稿的内容细分为这几大模块并分别管理和实现,虽然不多,但足以应对目前的需求内容了,灵活度也足够,可以随视觉稿调整随时替换。 160 | 161 | 除过 `ECharts` 的部分都非常的简单易懂,做常规 UI 组件分离即可,但是 `ECharts` 组件,到底该怎么设计呢? 162 | 163 | 用过 `ECharts` 的小伙伴肯定知道,每一个图表都需要单独实例化一个对象用来作为图表管理和绘制,而大屏项目往往会有很多个这样的图表,所以用组件的方式来自动生成和管理这样的 `echarts` 对象,我们只需要通过传入 `options` 即可完成图表的绘制。 164 | 165 | 其次,我们还可以通过组件来统一管理当屏幕变化时造成的图表 `resize` 的情况,封装了组件之后,都可以在组件内部进行统一的事件监听 166 | 167 | 乍一看,好像组件内部也没什么东西,事实上,就是这些东西就够了。 168 | 169 | 因为 `ECharts` 的核心内容,还是在于其庞大的 `Options` 对象。 170 | 171 | **如何对 ECharts 的 Options 进行抽象?** 172 | 173 | 常见的图表有**柱状图、折线图、面积图、饼图、环形图** 174 | 175 | 我们要做的就是按**图的类型、坐标轴、颜色**这几个维度来进行考虑 176 | 177 | 我依据设计稿的风格,对 `xAxis、yAxis、color` 这三个较为通用的配置进行了统一管理,设置一套默认的配置,用于支持常规的柱状图及折线图 178 | 179 | 再根据 `Options` 的使用习惯,按照图表基本配置和数据源配置做工厂方法动态生成 180 | 181 | 大概是这个样子: 182 | 183 | ```ts 184 | /** 185 | * 快捷创建柱状图配置,需自行根据需求设置 category 186 | * @param colors 普通颜色或渐变色 187 | * @param categorys 坐标轴的类别数据源 可选 188 | * @param direction 垂直或水平 默认 垂直 189 | * @returns 190 | */ 191 | function createBarOpts(colors: BBColors[], categorys?: string[], direction = BarDirectionEnum.Vertical): any; 192 | 193 | /** 194 | * 快捷创建 BarSeriesItem 对象 195 | * @param values 数据源 可选 196 | * @param direction 垂直或水平 默认 垂直 197 | * @returns 198 | */ 199 | function createBarSeriesItem(values?: any[], direction = BarDirectionEnum.Vertical): any; 200 | ``` 201 | 202 | 同样的,相同的思想我们可以用统一的 `Api` 风格扩展为 `createLineOpts、createLineSeriesItem、createPieOpts、createPieSeriesItem` 等等 203 | 204 | 封装好之后的实际开发场景代码就会变成这样: 205 | 206 | ```ts 207 | const opts = coumputed(() => { 208 | const categorys: string[] = []; 209 | const values: string[] = []; 210 | // 处理接口数据 211 | props.itemList?.forEach((item) => { 212 | categorys.push(item.dateFormat); 213 | values.push(item.count); 214 | }); 215 | // 生成基本 bar 配置 216 | const barOpts = createBarOpts([createGradientColors(["#E6AE28", "#FF8A00"])], categorys); 217 | // 生成基本 barSeriesItem 配置 218 | barOpts.series = [createBarSeriesItem(values)]; 219 | // 双柱状图可以这么写 220 | // barOpts.series = [createBarSeriesItem(values), createBarSeriesItem(values2)]; 221 | 222 | return barOpts; 223 | }); 224 | ``` 225 | 226 | 一下子节省了好多代码有木有,业务上逻辑就会清晰不少,当然,barOpts 实际上也是一个常规的对象,如果有定制的修改配置的情况,也是完全支持够用的 227 | 228 | #### 4. 大屏渲染内容图表的定位问题及缩放问题如何解决? 229 | 230 | 查了很多资料,大致有这么几种解决方案: 231 | 232 | - rem 233 | - vw 234 | - scale 等比缩放 235 | 236 | 相对于 `rem` 方案来说,个人更倾向于 `vw` 方案,毕竟 `rem` 横竖屏切换的时候会有问题(需要监听屏幕变化重新设置 `rootFontSize`),需要刷新过才可以,`vw` 就没有这个担忧。`transform` 的 `scale` 缩放也是很好用的,但是缩放毕竟存在字体可能模糊的情况(某些极端屏幕尺寸下才存在) 237 | 238 | 这里我就简单介绍一下 `vw` 的适配方案: 239 | 240 | **1. 安装 postcss-px-to-viewport 插件** 241 | 242 | ``` 243 | pnpm add postcss-px-to-viewport -D 244 | ``` 245 | 246 | **2. 配置 postcss-px-to-viewport config** 247 | 248 | ```ts 249 | import pxtovw from "postcss-px-to-viewport"; 250 | // postcss-px-to-viewport config 251 | const pxtovw_config = pxtovw({ 252 | unitToConvert: "px", // 要转化的单位 253 | viewportWidth: 1920, // UI设计稿的宽度 254 | unitPrecision: 6, // 转换后的精度,即小数点位数 255 | propList: ["*"], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换 256 | viewportUnit: "vw", // 指定需要转换成的视窗单位,默认vw 257 | fontViewportUnit: "vw", // 指定字体需要转换成的视窗单位,默认vw 258 | selectorBlackList: ["ignore-"], // 指定不转换为视窗单位的类名, 259 | minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换 260 | mediaQuery: false, // 是否在媒体查询的css代码中也进行转换,默认false 261 | replace: true, // 是否转换后直接更换属性值 262 | }); 263 | ``` 264 | 265 | **3. 代码中可以随意使用 px 会自动转换为 vw** 266 | 267 | 但 `vw` 也存在弊端,比如如果有一些样式是通过 ts 设置的,就需要自己实现一个 `px2vw` 的方法进行转化。 268 | 269 | ``` 270 | export function px2vw(px: number, root: number = 1920, fixed = 6) { 271 | const res = (px / root) * 100; 272 | return `${res.toFixed(fixed)}vw`; 273 | } 274 | ``` 275 | 276 | **4、全局监听 window.resize 事件** 277 | 278 | 这里需要注意的时候,建立一个**消息中心**,通过事件发布的方式通知每个图表进行自身的 `resize`,建议 `window.resize` 做 `throttle` 处理,提高性能。 279 | 280 | #### 5. 大屏项目开发代码结构该如何组织? 281 | 282 | 前面框架已经搭建的七七八八了,现在到了最重要的开发环节,那么项目代码如何组织会更加利于后期的阅读和维护呢? 283 | 284 | 这里我谈一下我自己的思考: 285 | 286 | - 希望可以通过代码结构迅速了解到每个图表模块的相对位置 287 | - 快速调整大屏图表布局结构及尺寸 288 | 289 | 由于我们是 `vw` 的响应式设计,所以在进行布局的时候就严格按照设计稿的尺寸进行每个图表块的宽高进行设置。 290 | 291 | 布局策略我用了较为简单的 `Flex` 布局,上面我们也提到了 `Card` 组件,`Card` 组件我设计了宽高属性,这样通过 `Flex + Weight、Height` 的设置就可以很清楚的表达整个大屏子模块的相对位置及尺寸 292 | 293 | 图表的绘制由单独的业务组件进行维护,这样整个 `Index` 文件就只存在 `Card` 布局结果及业务组件,没有其他多余的部分,也方便我们后续的迭代开发。 294 | 295 | ## 总结 296 | 297 | 第一次做可视化大屏项目,中间也是遇到过不少问题,把第一个项目及框架搭建的过程整理记录下来,希望对自己也对能看到这篇文章的小伙伴有一点帮助。 298 | -------------------------------------------------------------------------------- /nyc.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | exclude: ["**/*type.ts", "**/*.coinfig.ts", "**/test/**"], 3 | }; 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-datav", 3 | "version": "1.0.0", 4 | "description": "", 5 | "homepage": "https://ztstory.github.io/vue-datav", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "dev:demo": "pnpm -F demo dev", 9 | "build:demo": "pnpm -F demo build" 10 | }, 11 | "dependencies": { 12 | "axios": "^0.27.2", 13 | "echarts": "^5.3.3", 14 | "vue3-seamless-scroll": "^2.0.1", 15 | "vue": "3.2.37" 16 | }, 17 | "devDependencies": { 18 | "@types/node": "^18.7.18", 19 | "@vitejs/plugin-vue": "3.1.1", 20 | "typescript": "^4.6.4", 21 | "vite": "3.1.1", 22 | "vue-tsc": "^0.40.4", 23 | "less": "^4.1.2", 24 | "postcss": "8.4.13", 25 | "postcss-preset-env": "^7.4.3", 26 | "postcss-px-to-viewport": "^1.1.1", 27 | "vite-plugin-compression": "0.5.1", 28 | "vite-plugin-style-import": "2.0.0", 29 | "unplugin-vue-components": "^0.22.4", 30 | "unplugin-vue-define-options": "^0.10.0" 31 | }, 32 | "keywords": [], 33 | "author": "", 34 | "license": "ISC" 35 | } 36 | -------------------------------------------------------------------------------- /packages/core/echarts-opts/bar/bar.opt.ts: -------------------------------------------------------------------------------- 1 | import { BBColors } from "../base/color.opt"; 2 | import { deepCopy, isArray } from "../../src/utils/common.util"; 3 | export enum BarDirectionEnum { 4 | Horizontal = "Horizontal", 5 | Vertical = "Vertical", 6 | } 7 | 8 | /** 9 | * 快捷创建柱状图配置,需自行根据需求设置 category 10 | * @param colors 普通颜色或渐变色 11 | * @param categorys 坐标轴的类别数据源 可选 12 | * @param direction 垂直或水平 默认 垂直 13 | * @returns 14 | */ 15 | 16 | export function createBarOpts(colors: BBColors[], categorys?: string[], direction = BarDirectionEnum.Vertical): any { 17 | return { 18 | grid: { 19 | top: 30, 20 | bottom: 30, 21 | left: 40 22 | }, 23 | color: initColorOpts(colors, direction), 24 | xAxis: init_xAxis(direction, categorys), 25 | yAxis: init_yAxis(direction, categorys), 26 | }; 27 | } 28 | /** 29 | * 快捷创建 BarSeriesItem 对象 30 | * @param values 数据源 可选 31 | * @param direction 垂直或水平 默认 垂直 32 | * @returns 33 | */ 34 | export function createBarSeriesItem(values?: any[], direction = BarDirectionEnum.Vertical): any { 35 | const seriesItem: any = { 36 | type: "bar", 37 | barWidth: 8, 38 | label: { 39 | show: true, 40 | position: "right", 41 | color: "#75949D", 42 | borderColor: "none", 43 | }, 44 | }; 45 | if (values) seriesItem.data = values; 46 | if (BarDirectionEnum.Vertical == direction) { 47 | seriesItem.label.position = "top"; 48 | seriesItem.showBackground = true; 49 | seriesItem.backgroundStyle = { 50 | color: "#132C38", 51 | }; 52 | return seriesItem; 53 | } 54 | 55 | return seriesItem; 56 | } 57 | 58 | function initColorOpts(colors: BBColors[], direction: BarDirectionEnum) { 59 | if (colors.length && isArray(colors[0])) { 60 | const colorOpts: any = { 61 | x: 0, 62 | y: 0, 63 | x2: 0, 64 | y2: 0, 65 | }; 66 | colorOpts.type = "linear"; 67 | 68 | if (BarDirectionEnum.Vertical == direction) { 69 | colorOpts.y2 = 1; 70 | } else { 71 | colorOpts.x2 = 1; 72 | } 73 | return colors.map((v) => { 74 | colorOpts.colorStops = v; 75 | return deepCopy(colorOpts); 76 | }); 77 | } 78 | 79 | return colors; 80 | } 81 | 82 | function init_xAxis(direction: BarDirectionEnum, categorys?: string[]) { 83 | const xAxisOpts: any = { 84 | axisLine: { 85 | lineStyle: { 86 | color: "#75949D", 87 | }, 88 | }, 89 | }; 90 | 91 | if (BarDirectionEnum.Vertical == direction) { 92 | xAxisOpts.type = "category"; 93 | if (categorys) xAxisOpts.data = categorys; 94 | } else { 95 | xAxisOpts.type = "value"; 96 | xAxisOpts.show = false; 97 | xAxisOpts.axisLine = { 98 | show: false, 99 | }; 100 | xAxisOpts.splitLine = { 101 | show: false, 102 | }; 103 | } 104 | return xAxisOpts; 105 | } 106 | 107 | function init_yAxis(direction: BarDirectionEnum, categorys?: string[]) { 108 | const yAxisOpts: any = { 109 | splitLine: { 110 | show: false, 111 | }, 112 | axisLine: { 113 | show: true, 114 | lineStyle: { 115 | color: "#75949D", 116 | }, 117 | }, 118 | }; 119 | if (BarDirectionEnum.Vertical == direction) { 120 | yAxisOpts.type = "value"; 121 | } else { 122 | yAxisOpts.type = "category"; 123 | if (categorys) yAxisOpts.data = categorys; 124 | yAxisOpts.show = true; 125 | yAxisOpts.axisLine = { 126 | show: false, 127 | lineStyle: { 128 | color: "#fff", 129 | }, 130 | }; 131 | 132 | yAxisOpts.axisLabel = { 133 | fontSize: 13, 134 | margin: 8, 135 | width: 85, 136 | overflow: "truncate", 137 | ellipsis: "...", 138 | }; 139 | 140 | yAxisOpts.axisTick = { 141 | show: false, 142 | }; 143 | } 144 | 145 | return yAxisOpts; 146 | } 147 | 148 | export default createBarOpts([ 149 | [ 150 | { 151 | offset: 0, 152 | color: "#04FEAC", // 0% 处的颜色 153 | }, 154 | { 155 | offset: 1, 156 | color: "#1EE554", // 100% 处的颜色 157 | }, 158 | ], 159 | ]); 160 | -------------------------------------------------------------------------------- /packages/core/echarts-opts/base/color.opt.ts: -------------------------------------------------------------------------------- 1 | import { deepCopy, isArray } from "../../src/utils/common.util"; 2 | import { BarDirectionEnum } from "../bar/bar.opt"; 3 | 4 | export interface BBColorStop { 5 | offset: number; 6 | color: string; 7 | } 8 | export type BBColors = string | BBColorStop[]; 9 | /** 10 | * 均布的渐变色 11 | * @param colors 色值数组 12 | * @returns 13 | */ 14 | export function createGradientColors(colors: string[]): BBColorStop[] { 15 | return colors.map((v, index) => { 16 | return { 17 | offset: 1 * (index / (colors.length - 1)), 18 | color: v, 19 | }; 20 | }); 21 | } 22 | 23 | export function createColorOpts(colors: BBColors[], direction = BarDirectionEnum.Vertical) { 24 | if (colors.length && isArray(colors[0])) { 25 | const colorOpts: any = { 26 | x: 0, 27 | y: 0, 28 | x2: 0, 29 | y2: 0, 30 | }; 31 | colorOpts.type = "linear"; 32 | 33 | if (BarDirectionEnum.Vertical == direction) { 34 | colorOpts.y2 = 1; 35 | } else { 36 | colorOpts.x2 = 1; 37 | } 38 | return colors.map((v) => { 39 | colorOpts.colorStops = v; 40 | return deepCopy(colorOpts); 41 | }); 42 | } 43 | 44 | return colors; 45 | } 46 | -------------------------------------------------------------------------------- /packages/core/echarts-opts/base/x-axis.opt.ts: -------------------------------------------------------------------------------- 1 | import { BarDirectionEnum } from "../bar/bar.opt"; 2 | 3 | 4 | export function createXAxis(direction: BarDirectionEnum, categorys?: string[]) { 5 | const xAxisOpts: any = { 6 | axisLine: { 7 | lineStyle: { 8 | color: "#75949D", 9 | }, 10 | }, 11 | }; 12 | 13 | if (BarDirectionEnum.Vertical == direction) { 14 | xAxisOpts.type = "category"; 15 | if (categorys) xAxisOpts.data = categorys; 16 | } else { 17 | xAxisOpts.type = "value"; 18 | xAxisOpts.show = false; 19 | xAxisOpts.axisLine = { 20 | show: false, 21 | }; 22 | xAxisOpts.splitLine = { 23 | show: false, 24 | }; 25 | } 26 | return xAxisOpts; 27 | } 28 | 29 | -------------------------------------------------------------------------------- /packages/core/echarts-opts/base/y-axis.opt.ts: -------------------------------------------------------------------------------- 1 | import { BarDirectionEnum } from "../bar/bar.opt"; 2 | 3 | export function createYAxis(direction: BarDirectionEnum, categorys?: string[]) { 4 | const yAxisOpts: any = { 5 | splitLine: { 6 | show: false, 7 | }, 8 | axisLine: { 9 | show: true, 10 | lineStyle: { 11 | color: "#75949D", 12 | }, 13 | }, 14 | }; 15 | if (BarDirectionEnum.Vertical == direction) { 16 | yAxisOpts.type = "value"; 17 | } else { 18 | yAxisOpts.type = "category"; 19 | if (categorys) yAxisOpts.data = categorys; 20 | yAxisOpts.show = true; 21 | yAxisOpts.axisLine = { 22 | show: false, 23 | lineStyle: { 24 | color: "#fff", 25 | }, 26 | }; 27 | 28 | yAxisOpts.axisLabel = { 29 | fontSize: 13, 30 | margin: 8, 31 | width: 85, 32 | overflow: "truncate", 33 | ellipsis: "...", 34 | }; 35 | 36 | yAxisOpts.axisTick = { 37 | show: false, 38 | }; 39 | } 40 | 41 | return yAxisOpts; 42 | } 43 | -------------------------------------------------------------------------------- /packages/core/echarts-opts/index.ts: -------------------------------------------------------------------------------- 1 | import { createBarOpts, createBarSeriesItem, BarDirectionEnum } from "./bar/bar.opt"; 2 | import { createGradientColors, BBColors } from "./base/color.opt"; 3 | import { createLineOpts, createLineSeriesItem } from "./line/line.opt"; 4 | import { createPieOpts, createPieSeriesItem } from "./pie/pie.opt"; 5 | 6 | export { 7 | // 渐变色 8 | createGradientColors, 9 | // 柱状图 10 | BarDirectionEnum, 11 | createBarOpts, 12 | createBarSeriesItem, 13 | // 饼图 14 | createPieOpts, 15 | createPieSeriesItem, 16 | // 折线图 17 | createLineOpts, 18 | createLineSeriesItem, 19 | }; 20 | export type { BBColors }; 21 | -------------------------------------------------------------------------------- /packages/core/echarts-opts/line/line.opt.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * { 3 | color: { 4 | type: "linear", 5 | x: 0, 6 | y: 0, 7 | x2: 0, 8 | y2: 1, 9 | colorStops: [ 10 | { 11 | offset: 0, 12 | color: "rgba(255, 162, 0, 1)", // 0% 处的颜色 13 | }, 14 | { 15 | offset: 1, 16 | color: "rgba(255, 162, 0, 0)", // 100% 处的颜色 17 | }, 18 | ], 19 | }, 20 | grid: { 21 | top: 20, 22 | bottom: 20, 23 | left: 30, 24 | right: 0, 25 | }, 26 | xAxis: { 27 | type: "category", 28 | data: categorys, 29 | // boundaryGap: false, 30 | axisLine: { 31 | lineStyle: { 32 | color: "#75949D", 33 | }, 34 | }, 35 | }, 36 | yAxis: { 37 | type: "value", 38 | splitLine: { 39 | show: false, 40 | }, 41 | axisLine: { 42 | show: true, 43 | lineStyle: { 44 | color: "#75949D", 45 | }, 46 | }, 47 | axisLabel: { 48 | show: true, 49 | }, 50 | }, 51 | series: [ 52 | { 53 | data: values, 54 | type: "line", 55 | areaStyle: {}, 56 | smooth: true, 57 | label: { 58 | show: true, 59 | position: "top", 60 | color: "#75949D", 61 | borderColor: "none", 62 | }, 63 | }, 64 | ], 65 | }; 66 | */ 67 | 68 | import { BarDirectionEnum } from "../bar/bar.opt"; 69 | import { BBColors, createColorOpts } from "../base/color.opt"; 70 | import { createXAxis } from "../base/x-axis.opt"; 71 | import { createYAxis } from "../base/y-axis.opt"; 72 | 73 | /** 74 | * 快速创建折线图 75 | * @param colors 颜色 76 | * @param categorys 类别 可选 77 | * @returns 78 | */ 79 | export function createLineOpts(colors: BBColors[], categorys?: string[]): any { 80 | const yAxisOpts = createYAxis(BarDirectionEnum.Vertical, categorys); 81 | yAxisOpts.splitLine = { 82 | show: true, 83 | lineStyle: { 84 | color: "#132C38" 85 | } 86 | }; 87 | 88 | const opts: any = { 89 | grid: { 90 | top: 20, 91 | bottom: 20, 92 | left: 40, 93 | right: 0, 94 | }, 95 | color: createColorOpts(colors), 96 | xAxis: createXAxis(BarDirectionEnum.Vertical, categorys), 97 | yAxis: yAxisOpts, 98 | }; 99 | return opts; 100 | } 101 | /** 102 | * 快速创建折线图 SeriesItem 103 | * @param values 数据源 可选 104 | * @param smooth 是否平滑过度 默认 true 105 | * @param areaStyle 是否开启面积图 默认 不开启 106 | * @returns 107 | */ 108 | export function createLineSeriesItem(values?: any[], smooth = true, areaStyle: undefined | Object = undefined): any { 109 | const lineSeriesItem: any = { 110 | type: "line", 111 | smooth: smooth, 112 | label: { 113 | show: true, 114 | position: "top", 115 | color: "#75949D", 116 | borderColor: "none", 117 | }, 118 | }; 119 | if (values) { 120 | lineSeriesItem.data = values; 121 | } 122 | if (areaStyle) { 123 | lineSeriesItem.areaStyle = areaStyle; 124 | } 125 | return lineSeriesItem; 126 | } 127 | -------------------------------------------------------------------------------- /packages/core/echarts-opts/pie/pie.opt.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 快速创建饼图配置 3 | * @param colors 颜色数组 4 | * @returns 5 | */ 6 | export function createPieOpts(colors: string[]): any { 7 | return { 8 | color: colors, 9 | grid: { top: 0, right: 0, left: 0, bottom: 0 }, 10 | }; 11 | } 12 | /** 13 | * 快速创建饼图 SeriesItem 14 | * @param values 数据源 可选 15 | * @param isRing 是否为环状图 默认为 true 16 | * @returns 17 | */ 18 | export function createPieSeriesItem(values?: any[], isRing = true): any { 19 | const seriesItem: any = { 20 | type: "pie", 21 | label: { 22 | show: false, 23 | }, 24 | labelLine: { 25 | show: false, 26 | }, 27 | }; 28 | if (values) { 29 | seriesItem.data = values; 30 | } 31 | if (isRing) { 32 | seriesItem.radius = ["50%", "70%"]; 33 | } 34 | return seriesItem; 35 | } 36 | -------------------------------------------------------------------------------- /packages/core/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module "*.vue" { 4 | import type { DefineComponent } from "vue"; 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 6 | const component: DefineComponent<{}, {}, any>; 7 | export default component; 8 | } 9 | -------------------------------------------------------------------------------- /packages/core/index.ts: -------------------------------------------------------------------------------- 1 | export { default as DanceNumber1 } from "./src/components/dance-number/dance-number.vue"; 2 | export { default as DanceNumber } from "./src/components/dance-number/dance-number2.vue"; 3 | export { default as ZtEchart } from "./src/components/echarts/echart.vue"; 4 | export { default as Swiper } from "./src/components/swiper/swiper.vue"; 5 | export { default as Card } from "./src/components/card/card.vue"; 6 | export { default as CardTitle } from "./src/components/card/card-title.vue"; 7 | export { default as Screen } from "./src/components/screen/screen.vue"; 8 | export { default as ZtScale } from "./src/components/scale/index.vue"; 9 | -------------------------------------------------------------------------------- /packages/core/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@ztstory/datav-core", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.ts", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "dayjs": "^1.11.5", 14 | "lodash": "^4.17.21" 15 | }, 16 | "devDependencies": { 17 | "@types/lodash": "^4.14.186" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/core/src/assets/app.common.less: -------------------------------------------------------------------------------- 1 | // .colors 2 | .bg_f7 { 3 | background: @bg-gray; 4 | } 5 | .bg_white { 6 | background: @white; 7 | } 8 | 9 | .red { 10 | color: @red; 11 | } 12 | .orange { 13 | color: @orange; 14 | } 15 | .white { 16 | color: @white; 17 | } 18 | .primary { 19 | color: @primary; 20 | } 21 | 22 | .text_1 { 23 | color: @text-1; 24 | } 25 | 26 | .text_2 { 27 | color: @text-2; 28 | } 29 | 30 | .text_3 { 31 | color: @text-3; 32 | } 33 | .text_4 { 34 | color: @text-4; 35 | } 36 | .text_5 { 37 | color: @text-5; 38 | } 39 | .text_6 { 40 | color: @text-6; 41 | } 42 | 43 | .border_box { 44 | box-sizing: border-box; 45 | } 46 | 47 | .font_bold { 48 | font-weight: bold; 49 | } 50 | 51 | .bg_white { 52 | background-color: @white; 53 | } 54 | 55 | // layout 56 | .bb_footer { 57 | padding-bottom: constant(safe-area-inset-bottom); 58 | padding-bottom: env(safe-area-inset-bottom); 59 | position: relative; 60 | } 61 | 62 | .bb_header { 63 | padding-top: constant(safe-area-inset-top); 64 | padding-top: constant(safe-area-inset-top); 65 | position: relative; 66 | } 67 | 68 | .w_100 { 69 | width: 100%; 70 | } 71 | 72 | .h_100 { 73 | height: 100%; 74 | } 75 | // input框特殊通用大小 76 | .w80 { 77 | width: 80px; 78 | } 79 | // input框特殊通用大小 80 | .w100 { 81 | width: 100px; 82 | } 83 | 84 | .over_hidden { 85 | overflow: hidden; 86 | } 87 | .over_y_auto { 88 | overflow-y: auto; 89 | } 90 | .over_x_auto { 91 | overflow-y: auto; 92 | } 93 | .display_none { 94 | display: none; 95 | } 96 | .display_in_block { 97 | display: inline-block; 98 | } 99 | 100 | .border_box { 101 | box-sizing: border-box; 102 | } 103 | 104 | .text_left { 105 | text-align: left; 106 | } 107 | 108 | .text_right { 109 | text-align: right; 110 | } 111 | 112 | .text_center { 113 | text-align: center; 114 | } 115 | 116 | /* 单行... */ 117 | .mutiple_line_1 { 118 | display: -webkit-box; 119 | -webkit-box-orient: vertical; 120 | -webkit-line-clamp: 1; 121 | overflow: hidden; 122 | } 123 | 124 | /* 多行... */ 125 | .mutiple_line_2 { 126 | display: -webkit-box; 127 | -webkit-box-orient: vertical; 128 | -webkit-line-clamp: 2; 129 | text-overflow: ellipsis; 130 | overflow: hidden; 131 | } 132 | 133 | .mutiple_line_3 { 134 | display: -webkit-box; 135 | -webkit-box-orient: vertical; 136 | -webkit-line-clamp: 3; 137 | overflow: hidden; 138 | } 139 | .line_through { 140 | text-decoration: line-through; 141 | } 142 | .line_break { 143 | width: 100%; 144 | height: 1px; 145 | background-color: @line-break; 146 | } 147 | .blue_border { 148 | border: solid @primary; 149 | border-width: 0 2px 2px 0; 150 | } 151 | .pos_r { 152 | position: relative; 153 | } 154 | .pos_a { 155 | position: absolute; 156 | } 157 | .page_content { 158 | background: @bg-gray; 159 | overflow-y: auto; 160 | } 161 | // 适配iOS input disabled 颜色不正确问题 162 | input:disabled, 163 | input[disabled] { 164 | color: @text-1; 165 | -webkit-text-fill-color: @text-1; 166 | opacity: 1; 167 | } 168 | 169 | input:disabled::placeholder, 170 | input[disabled]::placeholder { 171 | color: @text-3; 172 | -webkit-text-fill-color: @text-3; 173 | } 174 | -------------------------------------------------------------------------------- /packages/core/src/assets/app.dynamic.less: -------------------------------------------------------------------------------- 1 | @margins-set: { 2 | mgt: margin-top; 3 | mgb: margin-bottom; 4 | mgl: margin-left; 5 | mgr: margin-right; 6 | mg: margin; 7 | }; 8 | 9 | @paddings-set: { 10 | pdt: padding-top; 11 | pdb: padding-bottom; 12 | pdl: padding-left; 13 | pdr: padding-right; 14 | pd: padding; 15 | }; 16 | 17 | @steps: range(2, 48, 2); 18 | 19 | each(@steps, { 20 | 21 | each(@margins-set, .(@mv, @mk, @mi) { 22 | .@{mk}_@{value} { 23 | @{mv}: (@value * 1px) 24 | } 25 | }) 26 | each(@paddings-set, .(@pv, @pk, @pi) { 27 | .@{pk}_@{value} { 28 | @{pv}: (@value * 1px) 29 | } 30 | }) 31 | }); 32 | // 动态生成12~22单位,步长为1的font-size 33 | each(range(12, 28, 1), { 34 | .fs_@{value} { 35 | font-size: (@value * 1px); 36 | } 37 | }); 38 | -------------------------------------------------------------------------------- /packages/core/src/assets/app.flex.less: -------------------------------------------------------------------------------- 1 | /* flex */ 2 | .flex_column { 3 | display: flex; 4 | flex-direction: column; 5 | } 6 | 7 | .flex_row { 8 | display: flex; 9 | flex-direction: row; 10 | } 11 | 12 | .flex_wrap { 13 | flex-wrap: wrap; 14 | } 15 | 16 | .flex_main_center { 17 | justify-content: center; 18 | } 19 | 20 | .flex_cross_center { 21 | align-items: center; 22 | } 23 | 24 | .flex_row_center { 25 | display: flex; 26 | flex-direction: row; 27 | align-items: center; 28 | } 29 | 30 | .flex_column_center { 31 | display: flex; 32 | flex-direction: column; 33 | align-items: center; 34 | } 35 | 36 | .flex_center { 37 | justify-content: center; 38 | align-items: center; 39 | } 40 | 41 | .flex_between { 42 | justify-content: space-between; 43 | } 44 | 45 | .flex_around { 46 | justify-content: space-around; 47 | } 48 | 49 | .flex_end { 50 | justify-content: flex-end; 51 | } 52 | 53 | .flex_start { 54 | justify-content: flex-start; 55 | } 56 | 57 | .flex_cross_end { 58 | align-self: flex-end; 59 | } 60 | 61 | .flex_1 { 62 | flex: 1; 63 | } 64 | 65 | .flex_none { 66 | flex: none; 67 | } 68 | -------------------------------------------------------------------------------- /packages/core/src/assets/app.variable.less: -------------------------------------------------------------------------------- 1 | @primary-o: #e4ecff; 2 | 3 | @red: #ff4c00; 4 | @red-o: #fff4f4; 5 | 6 | @orange-o: #fff3e4; 7 | 8 | @white: #fff; 9 | @green: #17bb15; 10 | @green-o: #eef7ee; 11 | 12 | @gray: #5c6166; 13 | @gray-o: #e3e3e3; 14 | 15 | @text-3: #8a9199; 16 | @text-4: #4877dd; 17 | @text-5: #17bb15; 18 | @text-6: #333333; 19 | 20 | @bg-gray: #f0f4f7; 21 | @bg-deep-gray: #b8c1cc; 22 | @line-break: #f0f4f7; 23 | 24 | @gradient-primary: linear-gradient(90deg, @primary 0%, @primary 100%); 25 | @gradient-red: linear-gradient(90deg, #ff8400 0%, @red 100%); 26 | @gradient-orange: linear-gradient(90deg, #ffa00a 0%, @orange 100%); 27 | 28 | // 可视化 29 | @primary: #11ebd7; 30 | 31 | @bg: #012746; 32 | @bg-card: #001925; 33 | 34 | @border: #006674; 35 | 36 | @text-1: #d5f8ff; 37 | @text-2: #accee0; 38 | 39 | @orange: #ff7700; 40 | -------------------------------------------------------------------------------- /packages/core/src/components/card/card-title.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 23 | 24 | 43 | -------------------------------------------------------------------------------- /packages/core/src/components/card/card.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 39 | 40 | 88 | -------------------------------------------------------------------------------- /packages/core/src/components/dance-number/dance-number.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 77 | 78 | 85 | -------------------------------------------------------------------------------- /packages/core/src/components/dance-number/dance-number2.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 45 | 46 | 72 | -------------------------------------------------------------------------------- /packages/core/src/components/echarts/echart.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 66 | 67 | 73 | -------------------------------------------------------------------------------- /packages/core/src/components/scale/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 60 | 61 | 73 | -------------------------------------------------------------------------------- /packages/core/src/components/screen/screen-title.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 118 | 119 | 145 | -------------------------------------------------------------------------------- /packages/core/src/components/screen/screen.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 38 | 39 | 51 | -------------------------------------------------------------------------------- /packages/core/src/components/swiper/swiper.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /packages/core/src/config/project.config.ts: -------------------------------------------------------------------------------- 1 | enum ENV_MODE { 2 | DEVELOPE = "DEVELOPE", 3 | TEST = "TEST", 4 | SIMULATER = "SIMULATER", 5 | RELEASE = "RELEASE", 6 | } 7 | interface BBProjectConfig { 8 | projectVer: string; 9 | env: ENV_MODE; 10 | } 11 | 12 | export { ENV_MODE }; 13 | export type { BBProjectConfig }; 14 | -------------------------------------------------------------------------------- /packages/core/src/utils/common.util.ts: -------------------------------------------------------------------------------- 1 | import * as _ from "lodash"; 2 | 3 | declare const VConsole: any; 4 | function supportVConsole() { 5 | const vconsole = document.createElement("script"); 6 | vconsole.src = "https://unpkg.com/vconsole/dist/vconsole.min.js"; 7 | document.body.appendChild(vconsole); 8 | vconsole.onload = () => { 9 | new VConsole(); 10 | console.log("vconsole 初始化成功"); 11 | }; 12 | } 13 | 14 | function isBlank(args: any): boolean { 15 | return _.isEmpty(args); 16 | } 17 | 18 | function isNotBlank(args: any): boolean { 19 | return _.isEmpty(args) === false; 20 | } 21 | 22 | function isArray(args: any): boolean { 23 | return _.isArray(args); 24 | } 25 | 26 | function isString(args: any): boolean { 27 | return _.isString(args); 28 | } 29 | 30 | function isNumber(args: any): boolean { 31 | return _.isNumber(args); 32 | } 33 | 34 | // 数字相加 35 | function numAdd(num1: number, num2: number): number { 36 | return _.add(num1, num2); 37 | } 38 | // 数字相减 39 | function numSub(num1: number, num2: number): number { 40 | return _.subtract(num1, num2); 41 | } 42 | // 数字相乘 43 | function numMul(num1: number, num2: number): number { 44 | return _.multiply(num1, num2); 45 | } 46 | // 数字相除 47 | function numDiv(num1: number, num2: number): number { 48 | return _.divide(num1, num2); 49 | } 50 | // 节流函数 51 | function throttle(fn: (...args: any) => any, delay = 800): (...args: any) => void { 52 | return _.throttle(fn, delay); 53 | } 54 | // 防抖函数 55 | function debounce(fn: (...args: any) => any, delay = 300): (...args: any) => void { 56 | return _.debounce(fn, delay); 57 | } 58 | // 对象深拷贝 59 | function deepCopy(value: any): any { 60 | return _.cloneDeep(value); 61 | } 62 | // 求百分比 63 | function getPercent(number: number, total: number, fixed = 0) { 64 | return total <= 0 ? "0%" : (Math.round((number / total) * 10000) / 100.0).toFixed(fixed) + "%"; 65 | } 66 | 67 | export { 68 | supportVConsole, 69 | isBlank, 70 | isNotBlank, 71 | isArray, 72 | isString, 73 | isNumber, 74 | numAdd, 75 | numSub, 76 | numMul, 77 | numDiv, 78 | throttle, 79 | debounce, 80 | deepCopy, 81 | getPercent, 82 | }; 83 | -------------------------------------------------------------------------------- /packages/core/src/utils/date.util.ts: -------------------------------------------------------------------------------- 1 | import dayjs, { OpUnitType, QUnitType } from "dayjs"; 2 | import "dayjs/locale/zh-cn"; 3 | import customParseFormt from "dayjs/plugin/customParseFormat"; 4 | import isBetween from "dayjs/plugin/isBetween"; 5 | import relativeTime from "dayjs/plugin/relativeTime"; 6 | import weekday from "dayjs/plugin/weekday"; 7 | // 国际化 8 | dayjs.locale("zh-cn"); 9 | 10 | export const DateUtils = { 11 | /** 12 | * 字符串转Date对象 13 | * @param {String} dateStr 14 | * @param {String} format 15 | */ 16 | string2Date(dateStr: string, format = "YYYY-MM-DD HH:mm:ss"): Date { 17 | dayjs.extend(customParseFormt); 18 | return dayjs(dateStr, format).toDate(); 19 | }, 20 | /** 21 | * date对象转字符串 22 | * @param {Date} date 23 | * @param {String} format 其中 format 支持 [自定义信息] + format 方式,[]中的内容不会被格式化 YYYY-MM-DD HH:mm:ss 24 | */ 25 | date2String(date: dayjs.ConfigType, format = "YYYY-MM-DD HH:mm:ss"): string { 26 | return dayjs(date).format(format); 27 | }, 28 | /** 29 | * 字符串日期转格式 30 | * @param dateStr 31 | * @param oldFormat 32 | * @param newFormat 33 | * @returns 34 | */ 35 | string2string(dateStr: string, oldFormat = "YYYY-MM-DD HH:mm:ss", newFormat = "YYYY-MM-DD"): string { 36 | dayjs.extend(customParseFormt); 37 | return dayjs(dateStr, oldFormat).format(newFormat); 38 | }, 39 | offset(date1: dayjs.ConfigType, date2: dayjs.ConfigType, type: QUnitType | OpUnitType = "day"): number { 40 | return dayjs(date1).diff(dayjs(date2), type); 41 | }, 42 | /** 43 | * 时间后移 44 | * @param {Date|String|Number} date 45 | * @param {number} offset 46 | * @param {"day"|"week"|"month"|"year"} type 47 | */ 48 | add(date: dayjs.ConfigType, offset: number, type: dayjs.ManipulateType = "day"): Date { 49 | return dayjs(date).add(offset, type).toDate(); 50 | }, 51 | /** 52 | * 时间前移 53 | * @param {Date|String|Number} date 54 | * @param {number} offset 55 | * @param {"day"|"week"|"month"|"year"} type 56 | */ 57 | subtract(date: dayjs.ConfigType, offset: number, type: dayjs.ManipulateType = "day"): Date { 58 | return dayjs(date).subtract(offset, type).toDate(); 59 | }, 60 | /** 61 | * date1 是否在 date2 之前 62 | * @param {Date|String|Number} date1 63 | * @param {Date|String|Number} date2 64 | * @param {"day"|"week"|"month"|"year"} type 65 | */ 66 | isBefore(date1: dayjs.ConfigType, date2: dayjs.ConfigType, type: dayjs.OpUnitType = "day"): boolean { 67 | return dayjs(date1).isBefore(date2, type); 68 | }, 69 | /** 70 | * date1 是否在 date2 之后 71 | * @param {Date|String|Number} date1 72 | * @param {Date|String|Number} date2 73 | * @param {"day"|"week"|"month"|"year"} type 74 | */ 75 | isAfter(date1: dayjs.ConfigType, date2: dayjs.ConfigType, type: dayjs.OpUnitType = "day"): boolean { 76 | return dayjs(date1).isAfter(date2, type); 77 | }, 78 | /** 79 | * date1 是否在 date2 之间 80 | * @param {Date|String|Number} date 81 | * @param {Array} dateRange 82 | * @param {"day"|"week"|"month"|"year"} type 83 | */ 84 | isBetween( 85 | date: dayjs.ConfigType, 86 | dateRange: Array, 87 | type: dayjs.OpUnitType | null = "day" 88 | ): boolean { 89 | if (dateRange.length != 2) { 90 | return false; 91 | } 92 | dayjs.extend(isBetween); 93 | return dayjs(date).isBetween(dateRange[0], dateRange[1], type); 94 | }, 95 | /** 96 | * 返回现在到当前时间的相对时间 97 | * https://dayjs.gitee.io/docs/zh-CN/display/from-now 98 | * @param {Date|String|Number} date 99 | */ 100 | fromNow(date: dayjs.ConfigType): string { 101 | dayjs.extend(relativeTime); 102 | dayjs().from(dayjs()); 103 | return dayjs(date).fromNow(); 104 | }, 105 | getWeekDay(date: dayjs.ConfigType): string { 106 | dayjs.extend(weekday); 107 | const weekdays = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]; 108 | const offset = this.offset(this.date2String(date, "YYYY-MM-DD"), this.date2String(new Date(), "YYYY-MM-DD")); 109 | if (offset === 0) { 110 | return "今天"; 111 | } else if (offset === 1) { 112 | return "明天"; 113 | } else if (offset === 2) { 114 | return "后天"; 115 | } 116 | return weekdays[dayjs(date).weekday()]; 117 | }, 118 | /** 119 | * 将秒格式化为字符串 120 | * @param second number 121 | * @param {"day"|"hour"|"minute"} type 122 | * @returns 123 | */ 124 | secondFormatString(second: number, type: "day" | "hour" | "minute" = "hour") { 125 | if (!second || second === 0) { 126 | return "0秒"; 127 | } 128 | let dateString = ""; 129 | const d = Math.floor(second / 24 / 60 / 60); 130 | const h = Math.floor((second % (24 * 60 * 60)) / (60 * 60)); 131 | const m = Math.floor((second % (60 * 60)) / 60); 132 | const s = second % 60; 133 | if (d > 0) { 134 | dateString += `${d}天`; 135 | if (type === "day") { 136 | return dateString; 137 | } 138 | } 139 | if (h > 0) { 140 | dateString += `${h}小时`; 141 | if (type === "hour") { 142 | return dateString; 143 | } 144 | } 145 | if (m > 0) { 146 | dateString += `${m}分钟`; 147 | if (type === "minute") { 148 | return dateString; 149 | } 150 | } 151 | if (s > 0) { 152 | dateString += `${s}秒`; 153 | } 154 | 155 | return dateString; 156 | }, 157 | }; 158 | -------------------------------------------------------------------------------- /packages/core/src/utils/eventbus.util.ts: -------------------------------------------------------------------------------- 1 | export const EventBusUtils = { 2 | _map: new Map(), 3 | addObserve(key: string, action: Function) { 4 | let actions = this._map.get(key); 5 | if (actions) { 6 | actions.push(action); 7 | } else { 8 | actions = [action]; 9 | } 10 | this._map.set(key, actions); 11 | }, 12 | removeObserve(key: string) { 13 | if (this._map.has(key)) { 14 | this._map.delete(key); 15 | } 16 | }, 17 | post(key: string, params?: any) { 18 | if (this._map.has(key)) { 19 | let actions = this._map.get(key); 20 | actions?.forEach((action) => { 21 | action(params); 22 | }); 23 | } 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /packages/core/src/utils/storage.util.ts: -------------------------------------------------------------------------------- 1 | type BBStorageResult = string | null; 2 | 3 | abstract class BBStorage { 4 | abstract getItem(key: string): Promise; 5 | abstract setItem(key: string, value: string): Promise; 6 | } 7 | 8 | class BBSessionStorage extends BBStorage { 9 | constructor() { 10 | super(); 11 | } 12 | 13 | getItem(key: string): Promise { 14 | return new Promise((resolve, reject) => { 15 | resolve(sessionStorage.getItem(key)); 16 | }); 17 | } 18 | 19 | setItem(key: string, value: string): Promise { 20 | return new Promise((resolve, reject) => { 21 | sessionStorage.setItem(key, value); 22 | resolve(); 23 | }); 24 | } 25 | } 26 | 27 | class BBLocalStorage extends BBStorage { 28 | constructor() { 29 | super(); 30 | } 31 | 32 | getItem(key: string): Promise { 33 | return new Promise((resolve, reject) => { 34 | resolve(localStorage.getItem(key)); 35 | }); 36 | } 37 | 38 | setItem(key: string, value: string): Promise { 39 | return new Promise((resolve, reject) => { 40 | localStorage.setItem(key, value); 41 | resolve(); 42 | }); 43 | } 44 | } 45 | 46 | export const StorageUtils = { 47 | sessionStorage: new BBSessionStorage(), 48 | localStorage: new BBLocalStorage(), 49 | }; 50 | -------------------------------------------------------------------------------- /packages/core/src/utils/string.util.ts: -------------------------------------------------------------------------------- 1 | const _randomCharStr = "abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQQRSTUVWXYZ1234567890"; 2 | /** 3 | * 生成随机字符串 4 | * @param count 字符串长度 5 | * @returns 6 | */ 7 | export function randomString(count = 8) { 8 | let uuid = ""; 9 | for (let index = 0; index < count; index++) { 10 | const random = Math.random() * _randomCharStr.length; 11 | uuid += _randomCharStr.charAt(Math.floor(random)); 12 | } 13 | return uuid; 14 | } 15 | 16 | export function px2vw(px: number, root: number = 1920, fixed = 6) { 17 | // 已替换为 scale 方案,代码保留仅供参考 18 | // const res = (px / root) * 100; 19 | // return `${res.toFixed(fixed)}vw`; 20 | return `${px}px`; 21 | } 22 | -------------------------------------------------------------------------------- /packages/core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "esModuleInterop": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | importers: 4 | 5 | .: 6 | specifiers: 7 | '@types/node': ^18.7.18 8 | '@vitejs/plugin-vue': 3.1.1 9 | axios: ^0.27.2 10 | echarts: ^5.3.3 11 | less: ^4.1.2 12 | postcss: 8.4.13 13 | postcss-preset-env: ^7.4.3 14 | postcss-px-to-viewport: ^1.1.1 15 | typescript: ^4.6.4 16 | unplugin-vue-components: ^0.22.4 17 | unplugin-vue-define-options: ^0.10.0 18 | vite: 3.1.1 19 | vite-plugin-compression: 0.5.1 20 | vite-plugin-style-import: 2.0.0 21 | vue: ^3.2.37 22 | vue-tsc: ^0.40.4 23 | vue3-seamless-scroll: ^2.0.1 24 | dependencies: 25 | axios: 0.27.2 26 | echarts: 5.3.3 27 | vue: 3.2.39 28 | vue3-seamless-scroll: 2.0.1 29 | devDependencies: 30 | '@types/node': 18.7.23 31 | '@vitejs/plugin-vue': 3.1.1_vite@3.1.1+vue@3.2.39 32 | less: 4.1.3 33 | postcss: 8.4.13 34 | postcss-preset-env: 7.8.2_postcss@8.4.13 35 | postcss-px-to-viewport: 1.1.1 36 | typescript: 4.8.3 37 | unplugin-vue-components: 0.22.7_vue@3.2.39 38 | unplugin-vue-define-options: 0.10.0_vue@3.2.39 39 | vite: 3.1.1_less@4.1.3 40 | vite-plugin-compression: 0.5.1_vite@3.1.1 41 | vite-plugin-style-import: 2.0.0_vite@3.1.1 42 | vue-tsc: 0.40.13_typescript@4.8.3 43 | 44 | packages/core: 45 | specifiers: 46 | '@types/lodash': ^4.14.186 47 | dayjs: ^1.11.5 48 | lodash: ^4.17.21 49 | dependencies: 50 | dayjs: registry.npmmirror.com/dayjs/1.11.5 51 | lodash: registry.npmmirror.com/lodash/4.17.21 52 | devDependencies: 53 | '@types/lodash': registry.npmmirror.com/@types/lodash/4.14.186 54 | 55 | projects/demo: 56 | specifiers: 57 | '@ztstory/datav-core': workspace:^1.0.0 58 | dependencies: 59 | '@ztstory/datav-core': link:../../packages/core 60 | 61 | packages: 62 | 63 | /@antfu/utils/0.5.2: 64 | resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==, registry: https://registry.npm.taobao.org/} 65 | dev: true 66 | 67 | /@babel/helper-string-parser/7.18.10: 68 | resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==, registry: https://registry.npm.taobao.org/} 69 | engines: {node: '>=6.9.0'} 70 | 71 | /@babel/helper-validator-identifier/7.19.1: 72 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, registry: https://registry.npm.taobao.org/} 73 | engines: {node: '>=6.9.0'} 74 | 75 | /@babel/parser/7.19.1: 76 | resolution: {integrity: sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==, registry: https://registry.npm.taobao.org/} 77 | engines: {node: '>=6.0.0'} 78 | hasBin: true 79 | dependencies: 80 | '@babel/types': 7.19.0 81 | 82 | /@babel/types/7.19.0: 83 | resolution: {integrity: sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==, registry: https://registry.npm.taobao.org/} 84 | engines: {node: '>=6.9.0'} 85 | dependencies: 86 | '@babel/helper-string-parser': 7.18.10 87 | '@babel/helper-validator-identifier': 7.19.1 88 | to-fast-properties: 2.0.0 89 | 90 | /@csstools/postcss-cascade-layers/1.1.1_postcss@8.4.13: 91 | resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==, registry: https://registry.npm.taobao.org/} 92 | engines: {node: ^12 || ^14 || >=16} 93 | peerDependencies: 94 | postcss: ^8.2 95 | dependencies: 96 | '@csstools/selector-specificity': 2.0.2_qiplrb533afbljv7sbepwo7yse 97 | postcss: 8.4.13 98 | postcss-selector-parser: 6.0.10 99 | dev: true 100 | 101 | /@csstools/postcss-color-function/1.1.1_postcss@8.4.13: 102 | resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==, registry: https://registry.npm.taobao.org/} 103 | engines: {node: ^12 || ^14 || >=16} 104 | peerDependencies: 105 | postcss: ^8.2 106 | dependencies: 107 | '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.13 108 | postcss: 8.4.13 109 | postcss-value-parser: 4.2.0 110 | dev: true 111 | 112 | /@csstools/postcss-font-format-keywords/1.0.1_postcss@8.4.13: 113 | resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==, registry: https://registry.npm.taobao.org/} 114 | engines: {node: ^12 || ^14 || >=16} 115 | peerDependencies: 116 | postcss: ^8.2 117 | dependencies: 118 | postcss: 8.4.13 119 | postcss-value-parser: 4.2.0 120 | dev: true 121 | 122 | /@csstools/postcss-hwb-function/1.0.2_postcss@8.4.13: 123 | resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==, registry: https://registry.npm.taobao.org/} 124 | engines: {node: ^12 || ^14 || >=16} 125 | peerDependencies: 126 | postcss: ^8.2 127 | dependencies: 128 | postcss: 8.4.13 129 | postcss-value-parser: 4.2.0 130 | dev: true 131 | 132 | /@csstools/postcss-ic-unit/1.0.1_postcss@8.4.13: 133 | resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==, registry: https://registry.npm.taobao.org/} 134 | engines: {node: ^12 || ^14 || >=16} 135 | peerDependencies: 136 | postcss: ^8.2 137 | dependencies: 138 | '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.13 139 | postcss: 8.4.13 140 | postcss-value-parser: 4.2.0 141 | dev: true 142 | 143 | /@csstools/postcss-is-pseudo-class/2.0.7_postcss@8.4.13: 144 | resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==, registry: https://registry.npm.taobao.org/} 145 | engines: {node: ^12 || ^14 || >=16} 146 | peerDependencies: 147 | postcss: ^8.2 148 | dependencies: 149 | '@csstools/selector-specificity': 2.0.2_qiplrb533afbljv7sbepwo7yse 150 | postcss: 8.4.13 151 | postcss-selector-parser: 6.0.10 152 | dev: true 153 | 154 | /@csstools/postcss-nested-calc/1.0.0_postcss@8.4.13: 155 | resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==, registry: https://registry.npm.taobao.org/} 156 | engines: {node: ^12 || ^14 || >=16} 157 | peerDependencies: 158 | postcss: ^8.2 159 | dependencies: 160 | postcss: 8.4.13 161 | postcss-value-parser: 4.2.0 162 | dev: true 163 | 164 | /@csstools/postcss-normalize-display-values/1.0.1_postcss@8.4.13: 165 | resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==, registry: https://registry.npm.taobao.org/} 166 | engines: {node: ^12 || ^14 || >=16} 167 | peerDependencies: 168 | postcss: ^8.2 169 | dependencies: 170 | postcss: 8.4.13 171 | postcss-value-parser: 4.2.0 172 | dev: true 173 | 174 | /@csstools/postcss-oklab-function/1.1.1_postcss@8.4.13: 175 | resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==, registry: https://registry.npm.taobao.org/} 176 | engines: {node: ^12 || ^14 || >=16} 177 | peerDependencies: 178 | postcss: ^8.2 179 | dependencies: 180 | '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.13 181 | postcss: 8.4.13 182 | postcss-value-parser: 4.2.0 183 | dev: true 184 | 185 | /@csstools/postcss-progressive-custom-properties/1.3.0_postcss@8.4.13: 186 | resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==, registry: https://registry.npm.taobao.org/} 187 | engines: {node: ^12 || ^14 || >=16} 188 | peerDependencies: 189 | postcss: ^8.3 190 | dependencies: 191 | postcss: 8.4.13 192 | postcss-value-parser: 4.2.0 193 | dev: true 194 | 195 | /@csstools/postcss-stepped-value-functions/1.0.1_postcss@8.4.13: 196 | resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==, registry: https://registry.npm.taobao.org/} 197 | engines: {node: ^12 || ^14 || >=16} 198 | peerDependencies: 199 | postcss: ^8.2 200 | dependencies: 201 | postcss: 8.4.13 202 | postcss-value-parser: 4.2.0 203 | dev: true 204 | 205 | /@csstools/postcss-text-decoration-shorthand/1.0.0_postcss@8.4.13: 206 | resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==, registry: https://registry.npm.taobao.org/} 207 | engines: {node: ^12 || ^14 || >=16} 208 | peerDependencies: 209 | postcss: ^8.2 210 | dependencies: 211 | postcss: 8.4.13 212 | postcss-value-parser: 4.2.0 213 | dev: true 214 | 215 | /@csstools/postcss-trigonometric-functions/1.0.2_postcss@8.4.13: 216 | resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==, registry: https://registry.npm.taobao.org/} 217 | engines: {node: ^14 || >=16} 218 | peerDependencies: 219 | postcss: ^8.2 220 | dependencies: 221 | postcss: 8.4.13 222 | postcss-value-parser: 4.2.0 223 | dev: true 224 | 225 | /@csstools/postcss-unset-value/1.0.2_postcss@8.4.13: 226 | resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==, registry: https://registry.npm.taobao.org/} 227 | engines: {node: ^12 || ^14 || >=16} 228 | peerDependencies: 229 | postcss: ^8.2 230 | dependencies: 231 | postcss: 8.4.13 232 | dev: true 233 | 234 | /@csstools/selector-specificity/2.0.2_qiplrb533afbljv7sbepwo7yse: 235 | resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==, registry: https://registry.npm.taobao.org/} 236 | engines: {node: ^12 || ^14 || >=16} 237 | peerDependencies: 238 | postcss: ^8.2 239 | postcss-selector-parser: ^6.0.10 240 | dependencies: 241 | postcss: 8.4.13 242 | postcss-selector-parser: 6.0.10 243 | dev: true 244 | 245 | /@esbuild/android-arm/0.15.9: 246 | resolution: {integrity: sha512-VZPy/ETF3fBG5PiinIkA0W/tlsvlEgJccyN2DzWZEl0DlVKRbu91PvY2D6Lxgluj4w9QtYHjOWjAT44C+oQ+EQ==} 247 | engines: {node: '>=12'} 248 | cpu: [arm] 249 | os: [android] 250 | requiresBuild: true 251 | dev: true 252 | optional: true 253 | 254 | /@esbuild/linux-loong64/0.15.9: 255 | resolution: {integrity: sha512-O+NfmkfRrb3uSsTa4jE3WApidSe3N5++fyOVGP1SmMZi4A3BZELkhUUvj5hwmMuNdlpzAZ8iAPz2vmcR7DCFQA==} 256 | engines: {node: '>=12'} 257 | cpu: [loong64] 258 | os: [linux] 259 | requiresBuild: true 260 | dev: true 261 | optional: true 262 | 263 | /@nodelib/fs.scandir/2.1.5: 264 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, registry: https://registry.npm.taobao.org/} 265 | engines: {node: '>= 8'} 266 | dependencies: 267 | '@nodelib/fs.stat': 2.0.5 268 | run-parallel: 1.2.0 269 | dev: true 270 | 271 | /@nodelib/fs.stat/2.0.5: 272 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: https://registry.npm.taobao.org/} 273 | engines: {node: '>= 8'} 274 | dev: true 275 | 276 | /@nodelib/fs.walk/1.2.8: 277 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: https://registry.npm.taobao.org/} 278 | engines: {node: '>= 8'} 279 | dependencies: 280 | '@nodelib/fs.scandir': 2.1.5 281 | fastq: 1.13.0 282 | dev: true 283 | 284 | /@rollup/pluginutils/4.2.1: 285 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 286 | engines: {node: '>= 8.0.0'} 287 | dependencies: 288 | estree-walker: 2.0.2 289 | picomatch: 2.3.1 290 | dev: true 291 | 292 | /@types/node/18.7.23: 293 | resolution: {integrity: sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==, registry: https://registry.npm.taobao.org/} 294 | dev: true 295 | 296 | /@vitejs/plugin-vue/3.1.1_vite@3.1.1+vue@3.2.39: 297 | resolution: {integrity: sha512-fr2F2eRQVVvbnBqzXotQ99y42QUSjAFrSe3Z8T+R8KhWcme+W46eqldZUhT1kafvw7eV/hlwDb1HUvOdprJNxw==} 298 | engines: {node: ^14.18.0 || >=16.0.0} 299 | peerDependencies: 300 | vite: ^3.0.0 301 | vue: ^3.2.25 302 | dependencies: 303 | vite: 3.1.1_less@4.1.3 304 | vue: 3.2.39 305 | dev: true 306 | 307 | /@volar/code-gen/0.40.13: 308 | resolution: {integrity: sha512-4gShBWuMce868OVvgyA1cU5WxHbjfEme18Tw6uVMfweZCF5fB2KECG0iPrA9D54vHk3FeHarODNwgIaaFfUBlA==, registry: https://registry.npm.taobao.org/} 309 | dependencies: 310 | '@volar/source-map': 0.40.13 311 | dev: true 312 | 313 | /@volar/source-map/0.40.13: 314 | resolution: {integrity: sha512-dbdkAB2Nxb0wLjAY5O64o3ywVWlAGONnBIoKAkXSf6qkGZM+nJxcizsoiI66K+RHQG0XqlyvjDizfnTxr+6PWg==, registry: https://registry.npm.taobao.org/} 315 | dependencies: 316 | '@vue/reactivity': 3.2.38 317 | dev: true 318 | 319 | /@volar/typescript-faster/0.40.13: 320 | resolution: {integrity: sha512-uy+TlcFkKoNlKEnxA4x5acxdxLyVDIXGSc8cYDNXpPKjBKXrQaetzCzlO3kVBqu1VLMxKNGJMTKn35mo+ILQmw==, registry: https://registry.npm.taobao.org/} 321 | dependencies: 322 | semver: 7.3.7 323 | dev: true 324 | 325 | /@volar/vue-language-core/0.40.13: 326 | resolution: {integrity: sha512-QkCb8msi2KUitTdM6Y4kAb7/ZlEvuLcbBFOC2PLBlFuoZwyxvSP7c/dBGmKGtJlEvMX0LdCyrg5V2aBYxD38/Q==, registry: https://registry.npm.taobao.org/} 327 | dependencies: 328 | '@volar/code-gen': 0.40.13 329 | '@volar/source-map': 0.40.13 330 | '@vue/compiler-core': 3.2.39 331 | '@vue/compiler-dom': 3.2.39 332 | '@vue/compiler-sfc': 3.2.39 333 | '@vue/reactivity': 3.2.39 334 | '@vue/shared': 3.2.39 335 | dev: true 336 | 337 | /@volar/vue-typescript/0.40.13: 338 | resolution: {integrity: sha512-o7bNztwjs8JmbQjVkrnbZUOfm7q4B8ZYssETISN1tRaBdun6cfNqgpkvDYd+VUBh1O4CdksvN+5BUNnwAz4oCQ==, registry: https://registry.npm.taobao.org/} 339 | dependencies: 340 | '@volar/code-gen': 0.40.13 341 | '@volar/typescript-faster': 0.40.13 342 | '@volar/vue-language-core': 0.40.13 343 | dev: true 344 | 345 | /@vue-macros/common/0.10.0_vue@3.2.39: 346 | resolution: {integrity: sha512-g5sTVG0ltL1f8EjEO8W5EG+jEKjircYprlkr1Qc+pNvqCIRV+OlAi/WHNrMEK6PIwb2t3EWudCFMo5Fq/IMGMw==, registry: https://registry.npm.taobao.org/} 347 | engines: {node: '>=14.19.0'} 348 | peerDependencies: 349 | vue: ^2.7.0 || ^3.2.25 350 | dependencies: 351 | '@babel/types': 7.19.0 352 | '@vue/compiler-sfc': 3.2.39 353 | magic-string: 0.26.4 354 | vue: 3.2.39 355 | dev: true 356 | 357 | /@vue/compiler-core/3.2.39: 358 | resolution: {integrity: sha512-mf/36OWXqWn0wsC40nwRRGheR/qoID+lZXbIuLnr4/AngM0ov8Xvv8GHunC0rKRIkh60bTqydlqTeBo49rlbqw==, registry: https://registry.npm.taobao.org/} 359 | dependencies: 360 | '@babel/parser': 7.19.1 361 | '@vue/shared': 3.2.39 362 | estree-walker: 2.0.2 363 | source-map: 0.6.1 364 | 365 | /@vue/compiler-dom/3.2.39: 366 | resolution: {integrity: sha512-HMFI25Be1C8vLEEv1hgEO1dWwG9QQ8LTTPmCkblVJY/O3OvWx6r1+zsox5mKPMGvqYEZa6l8j+xgOfUspgo7hw==, registry: https://registry.npm.taobao.org/} 367 | dependencies: 368 | '@vue/compiler-core': 3.2.39 369 | '@vue/shared': 3.2.39 370 | 371 | /@vue/compiler-sfc/3.2.39: 372 | resolution: {integrity: sha512-fqAQgFs1/BxTUZkd0Vakn3teKUt//J3c420BgnYgEOoVdTwYpBTSXCMJ88GOBCylmUBbtquGPli9tVs7LzsWIA==, registry: https://registry.npm.taobao.org/} 373 | dependencies: 374 | '@babel/parser': 7.19.1 375 | '@vue/compiler-core': 3.2.39 376 | '@vue/compiler-dom': 3.2.39 377 | '@vue/compiler-ssr': 3.2.39 378 | '@vue/reactivity-transform': 3.2.39 379 | '@vue/shared': 3.2.39 380 | estree-walker: 2.0.2 381 | magic-string: 0.25.9 382 | postcss: 8.4.16 383 | source-map: 0.6.1 384 | 385 | /@vue/compiler-ssr/3.2.39: 386 | resolution: {integrity: sha512-EoGCJ6lincKOZGW+0Ky4WOKsSmqL7hp1ZYgen8M7u/mlvvEQUaO9tKKOy7K43M9U2aA3tPv0TuYYQFrEbK2eFQ==, registry: https://registry.npm.taobao.org/} 387 | dependencies: 388 | '@vue/compiler-dom': 3.2.39 389 | '@vue/shared': 3.2.39 390 | 391 | /@vue/reactivity-transform/3.2.39: 392 | resolution: {integrity: sha512-HGuWu864zStiWs9wBC6JYOP1E00UjMdDWIG5W+FpUx28hV3uz9ODOKVNm/vdOy/Pvzg8+OcANxAVC85WFBbl3A==, registry: https://registry.npm.taobao.org/} 393 | dependencies: 394 | '@babel/parser': 7.19.1 395 | '@vue/compiler-core': 3.2.39 396 | '@vue/shared': 3.2.39 397 | estree-walker: 2.0.2 398 | magic-string: 0.25.9 399 | 400 | /@vue/reactivity/3.2.38: 401 | resolution: {integrity: sha512-6L4myYcH9HG2M25co7/BSo0skKFHpAN8PhkNPM4xRVkyGl1K5M3Jx4rp5bsYhvYze2K4+l+pioN4e6ZwFLUVtw==, registry: https://registry.npm.taobao.org/} 402 | dependencies: 403 | '@vue/shared': 3.2.38 404 | dev: true 405 | 406 | /@vue/reactivity/3.2.39: 407 | resolution: {integrity: sha512-vlaYX2a3qMhIZfrw3Mtfd+BuU+TZmvDrPMa+6lpfzS9k/LnGxkSuf0fhkP0rMGfiOHPtyKoU9OJJJFGm92beVQ==, registry: https://registry.npm.taobao.org/} 408 | dependencies: 409 | '@vue/shared': 3.2.39 410 | 411 | /@vue/runtime-core/3.2.39: 412 | resolution: {integrity: sha512-xKH5XP57JW5JW+8ZG1khBbuLakINTgPuINKL01hStWLTTGFOrM49UfCFXBcFvWmSbci3gmJyLl2EAzCaZWsx8g==, registry: https://registry.npm.taobao.org/} 413 | dependencies: 414 | '@vue/reactivity': 3.2.39 415 | '@vue/shared': 3.2.39 416 | 417 | /@vue/runtime-dom/3.2.39: 418 | resolution: {integrity: sha512-4G9AEJP+sLhsqf5wXcyKVWQKUhI+iWfy0hWQgea+CpaTD7BR0KdQzvoQdZhwCY6B3oleSyNLkLAQwm0ya/wNoA==, registry: https://registry.npm.taobao.org/} 419 | dependencies: 420 | '@vue/runtime-core': 3.2.39 421 | '@vue/shared': 3.2.39 422 | csstype: 2.6.21 423 | 424 | /@vue/server-renderer/3.2.39_vue@3.2.39: 425 | resolution: {integrity: sha512-1yn9u2YBQWIgytFMjz4f/t0j43awKytTGVptfd3FtBk76t1pd8mxbek0G/DrnjJhd2V7mSTb5qgnxMYt8Z5iSQ==, registry: https://registry.npm.taobao.org/} 426 | peerDependencies: 427 | vue: 3.2.39 428 | dependencies: 429 | '@vue/compiler-ssr': 3.2.39 430 | '@vue/shared': 3.2.39 431 | vue: 3.2.39 432 | 433 | /@vue/shared/3.2.38: 434 | resolution: {integrity: sha512-dTyhTIRmGXBjxJE+skC8tTWCGLCVc4wQgRRLt8+O9p5ewBAjoBwtCAkLPrtToSr1xltoe3st21Pv953aOZ7alg==, registry: https://registry.npm.taobao.org/} 435 | dev: true 436 | 437 | /@vue/shared/3.2.39: 438 | resolution: {integrity: sha512-D3dl2ZB9qE6mTuWPk9RlhDeP1dgNRUKC3NJxji74A4yL8M2MwlhLKUC/49WHjrNzSPug58fWx/yFbaTzGAQSBw==, registry: https://registry.npm.taobao.org/} 439 | 440 | /acorn/8.8.0: 441 | resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==, registry: https://registry.npm.taobao.org/} 442 | engines: {node: '>=0.4.0'} 443 | hasBin: true 444 | dev: true 445 | 446 | /ansi-styles/4.3.0: 447 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 448 | engines: {node: '>=8'} 449 | dependencies: 450 | color-convert: 2.0.1 451 | dev: true 452 | 453 | /anymatch/3.1.2: 454 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==, registry: https://registry.npm.taobao.org/} 455 | engines: {node: '>= 8'} 456 | dependencies: 457 | normalize-path: 3.0.0 458 | picomatch: 2.3.1 459 | dev: true 460 | 461 | /ast-walker-scope/0.2.3: 462 | resolution: {integrity: sha512-9reB+iYF6jCCDqKDNNQI8iA2MJcy0jCLvEjfya72F7Zai5i2CB8hk9K/kzkZhagja9othQCFPEvQW11LhPKjmg==, registry: https://registry.npm.taobao.org/} 463 | engines: {node: '>=14.19.0'} 464 | dependencies: 465 | '@babel/parser': 7.19.1 466 | '@babel/types': 7.19.0 467 | dev: true 468 | 469 | /asynckit/0.4.0: 470 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: https://registry.npm.taobao.org/} 471 | dev: false 472 | 473 | /autoprefixer/10.4.12_postcss@8.4.13: 474 | resolution: {integrity: sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==, registry: https://registry.npm.taobao.org/} 475 | engines: {node: ^10 || ^12 || >=14} 476 | hasBin: true 477 | peerDependencies: 478 | postcss: ^8.1.0 479 | dependencies: 480 | browserslist: 4.21.4 481 | caniuse-lite: 1.0.30001412 482 | fraction.js: 4.2.0 483 | normalize-range: 0.1.2 484 | picocolors: 1.0.0 485 | postcss: 8.4.13 486 | postcss-value-parser: 4.2.0 487 | dev: true 488 | 489 | /axios/0.27.2: 490 | resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==, registry: https://registry.npm.taobao.org/} 491 | dependencies: 492 | follow-redirects: 1.15.2 493 | form-data: 4.0.0 494 | transitivePeerDependencies: 495 | - debug 496 | dev: false 497 | 498 | /balanced-match/1.0.2: 499 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npm.taobao.org/} 500 | dev: true 501 | 502 | /binary-extensions/2.2.0: 503 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npm.taobao.org/} 504 | engines: {node: '>=8'} 505 | dev: true 506 | 507 | /brace-expansion/2.0.1: 508 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npm.taobao.org/} 509 | dependencies: 510 | balanced-match: 1.0.2 511 | dev: true 512 | 513 | /braces/3.0.2: 514 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npm.taobao.org/} 515 | engines: {node: '>=8'} 516 | dependencies: 517 | fill-range: 7.0.1 518 | dev: true 519 | 520 | /browserslist/4.21.4: 521 | resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==, registry: https://registry.npm.taobao.org/} 522 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 523 | hasBin: true 524 | dependencies: 525 | caniuse-lite: 1.0.30001412 526 | electron-to-chromium: 1.4.264 527 | node-releases: 2.0.6 528 | update-browserslist-db: 1.0.9_browserslist@4.21.4 529 | dev: true 530 | 531 | /camel-case/4.1.2: 532 | resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} 533 | dependencies: 534 | pascal-case: 3.1.2 535 | tslib: 2.4.0 536 | dev: true 537 | 538 | /caniuse-lite/1.0.30001412: 539 | resolution: {integrity: sha512-+TeEIee1gS5bYOiuf+PS/kp2mrXic37Hl66VY6EAfxasIk5fELTktK2oOezYed12H8w7jt3s512PpulQidPjwA==, registry: https://registry.npm.taobao.org/} 540 | dev: true 541 | 542 | /capital-case/1.0.4: 543 | resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} 544 | dependencies: 545 | no-case: 3.0.4 546 | tslib: 2.4.0 547 | upper-case-first: 2.0.2 548 | dev: true 549 | 550 | /chalk/4.1.2: 551 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 552 | engines: {node: '>=10'} 553 | dependencies: 554 | ansi-styles: 4.3.0 555 | supports-color: 7.2.0 556 | dev: true 557 | 558 | /change-case/4.1.2: 559 | resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} 560 | dependencies: 561 | camel-case: 4.1.2 562 | capital-case: 1.0.4 563 | constant-case: 3.0.4 564 | dot-case: 3.0.4 565 | header-case: 2.0.4 566 | no-case: 3.0.4 567 | param-case: 3.0.4 568 | pascal-case: 3.1.2 569 | path-case: 3.0.4 570 | sentence-case: 3.0.4 571 | snake-case: 3.0.4 572 | tslib: 2.4.0 573 | dev: true 574 | 575 | /chokidar/3.5.3: 576 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npm.taobao.org/} 577 | engines: {node: '>= 8.10.0'} 578 | dependencies: 579 | anymatch: 3.1.2 580 | braces: 3.0.2 581 | glob-parent: 5.1.2 582 | is-binary-path: 2.1.0 583 | is-glob: 4.0.3 584 | normalize-path: 3.0.0 585 | readdirp: 3.6.0 586 | optionalDependencies: 587 | fsevents: 2.3.2 588 | dev: true 589 | 590 | /color-convert/2.0.1: 591 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 592 | engines: {node: '>=7.0.0'} 593 | dependencies: 594 | color-name: 1.1.4 595 | dev: true 596 | 597 | /color-name/1.1.4: 598 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 599 | dev: true 600 | 601 | /combined-stream/1.0.8: 602 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, registry: https://registry.npm.taobao.org/} 603 | engines: {node: '>= 0.8'} 604 | dependencies: 605 | delayed-stream: 1.0.0 606 | dev: false 607 | 608 | /console/0.7.2: 609 | resolution: {integrity: sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==} 610 | dev: true 611 | 612 | /constant-case/3.0.4: 613 | resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} 614 | dependencies: 615 | no-case: 3.0.4 616 | tslib: 2.4.0 617 | upper-case: 2.0.2 618 | dev: true 619 | 620 | /copy-anything/2.0.6: 621 | resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==, registry: https://registry.npm.taobao.org/} 622 | dependencies: 623 | is-what: 3.14.1 624 | dev: true 625 | 626 | /css-blank-pseudo/3.0.3_postcss@8.4.13: 627 | resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==, registry: https://registry.npm.taobao.org/} 628 | engines: {node: ^12 || ^14 || >=16} 629 | hasBin: true 630 | peerDependencies: 631 | postcss: ^8.4 632 | dependencies: 633 | postcss: 8.4.13 634 | postcss-selector-parser: 6.0.10 635 | dev: true 636 | 637 | /css-has-pseudo/3.0.4_postcss@8.4.13: 638 | resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==, registry: https://registry.npm.taobao.org/} 639 | engines: {node: ^12 || ^14 || >=16} 640 | hasBin: true 641 | peerDependencies: 642 | postcss: ^8.4 643 | dependencies: 644 | postcss: 8.4.13 645 | postcss-selector-parser: 6.0.10 646 | dev: true 647 | 648 | /css-prefers-color-scheme/6.0.3_postcss@8.4.13: 649 | resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==, registry: https://registry.npm.taobao.org/} 650 | engines: {node: ^12 || ^14 || >=16} 651 | hasBin: true 652 | peerDependencies: 653 | postcss: ^8.4 654 | dependencies: 655 | postcss: 8.4.13 656 | dev: true 657 | 658 | /cssdb/7.0.1: 659 | resolution: {integrity: sha512-pT3nzyGM78poCKLAEy2zWIVX2hikq6dIrjuZzLV98MumBg+xMTNYfHx7paUlfiRTgg91O/vR889CIf+qiv79Rw==, registry: https://registry.npm.taobao.org/} 660 | dev: true 661 | 662 | /cssesc/3.0.0: 663 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, registry: https://registry.npm.taobao.org/} 664 | engines: {node: '>=4'} 665 | hasBin: true 666 | dev: true 667 | 668 | /csstype/2.6.21: 669 | resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==, registry: https://registry.npm.taobao.org/} 670 | 671 | /debug/3.2.7: 672 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 673 | peerDependencies: 674 | supports-color: '*' 675 | peerDependenciesMeta: 676 | supports-color: 677 | optional: true 678 | dependencies: 679 | ms: 2.1.3 680 | dev: true 681 | optional: true 682 | 683 | /debug/4.3.4: 684 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 685 | engines: {node: '>=6.0'} 686 | peerDependencies: 687 | supports-color: '*' 688 | peerDependenciesMeta: 689 | supports-color: 690 | optional: true 691 | dependencies: 692 | ms: 2.1.2 693 | dev: true 694 | 695 | /delayed-stream/1.0.0: 696 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: https://registry.npm.taobao.org/} 697 | engines: {node: '>=0.4.0'} 698 | dev: false 699 | 700 | /dot-case/3.0.4: 701 | resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} 702 | dependencies: 703 | no-case: 3.0.4 704 | tslib: 2.4.0 705 | dev: true 706 | 707 | /echarts/5.3.3: 708 | resolution: {integrity: sha512-BRw2serInRwO5SIwRviZ6Xgm5Lb7irgz+sLiFMmy/HOaf4SQ+7oYqxKzRHAKp4xHQ05AuHw1xvoQWJjDQq/FGw==, registry: https://registry.npm.taobao.org/} 709 | dependencies: 710 | tslib: 2.3.0 711 | zrender: 5.3.2 712 | dev: false 713 | 714 | /electron-to-chromium/1.4.264: 715 | resolution: {integrity: sha512-AZ6ZRkucHOQT8wke50MktxtmcWZr67kE17X/nAXFf62NIdMdgY6xfsaJD5Szoy84lnkuPWH+4tTNE3s2+bPCiw==, registry: https://registry.npm.taobao.org/} 716 | dev: true 717 | 718 | /errno/0.1.8: 719 | resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} 720 | hasBin: true 721 | requiresBuild: true 722 | dependencies: 723 | prr: 1.0.1 724 | dev: true 725 | optional: true 726 | 727 | /es-module-lexer/0.9.3: 728 | resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} 729 | dev: true 730 | 731 | /esbuild-android-64/0.15.9: 732 | resolution: {integrity: sha512-HQCX7FJn9T4kxZQkhPjNZC7tBWZqJvhlLHPU2SFzrQB/7nDXjmTIFpFTjt7Bd1uFpeXmuwf5h5fZm+x/hLnhbw==} 733 | engines: {node: '>=12'} 734 | cpu: [x64] 735 | os: [android] 736 | requiresBuild: true 737 | dev: true 738 | optional: true 739 | 740 | /esbuild-android-arm64/0.15.9: 741 | resolution: {integrity: sha512-E6zbLfqbFVCNEKircSHnPiSTsm3fCRxeIMPfrkS33tFjIAoXtwegQfVZqMGR0FlsvVxp2NEDOUz+WW48COCjSg==} 742 | engines: {node: '>=12'} 743 | cpu: [arm64] 744 | os: [android] 745 | requiresBuild: true 746 | dev: true 747 | optional: true 748 | 749 | /esbuild-darwin-64/0.15.9: 750 | resolution: {integrity: sha512-gI7dClcDN/HHVacZhTmGjl0/TWZcGuKJ0I7/xDGJwRQQn7aafZGtvagOFNmuOq+OBFPhlPv1T6JElOXb0unkSQ==} 751 | engines: {node: '>=12'} 752 | cpu: [x64] 753 | os: [darwin] 754 | requiresBuild: true 755 | dev: true 756 | optional: true 757 | 758 | /esbuild-darwin-arm64/0.15.9: 759 | resolution: {integrity: sha512-VZIMlcRN29yg/sv7DsDwN+OeufCcoTNaTl3Vnav7dL/nvsApD7uvhVRbgyMzv0zU/PP0xRhhIpTyc7lxEzHGSw==} 760 | engines: {node: '>=12'} 761 | cpu: [arm64] 762 | os: [darwin] 763 | requiresBuild: true 764 | dev: true 765 | optional: true 766 | 767 | /esbuild-freebsd-64/0.15.9: 768 | resolution: {integrity: sha512-uM4z5bTvuAXqPxrI204txhlsPIolQPWRMLenvGuCPZTnnGlCMF2QLs0Plcm26gcskhxewYo9LkkmYSS5Czrb5A==} 769 | engines: {node: '>=12'} 770 | cpu: [x64] 771 | os: [freebsd] 772 | requiresBuild: true 773 | dev: true 774 | optional: true 775 | 776 | /esbuild-freebsd-arm64/0.15.9: 777 | resolution: {integrity: sha512-HHDjT3O5gWzicGdgJ5yokZVN9K9KG05SnERwl9nBYZaCjcCgj/sX8Ps1jvoFSfNCO04JSsHSOWo4qvxFuj8FoA==} 778 | engines: {node: '>=12'} 779 | cpu: [arm64] 780 | os: [freebsd] 781 | requiresBuild: true 782 | dev: true 783 | optional: true 784 | 785 | /esbuild-linux-32/0.15.9: 786 | resolution: {integrity: sha512-AQIdE8FugGt1DkcekKi5ycI46QZpGJ/wqcMr7w6YUmOmp2ohQ8eO4sKUsOxNOvYL7hGEVwkndSyszR6HpVHLFg==} 787 | engines: {node: '>=12'} 788 | cpu: [ia32] 789 | os: [linux] 790 | requiresBuild: true 791 | dev: true 792 | optional: true 793 | 794 | /esbuild-linux-64/0.15.9: 795 | resolution: {integrity: sha512-4RXjae7g6Qs7StZyiYyXTZXBlfODhb1aBVAjd+ANuPmMhWthQilWo7rFHwJwL7DQu1Fjej2sODAVwLbcIVsAYQ==} 796 | engines: {node: '>=12'} 797 | cpu: [x64] 798 | os: [linux] 799 | requiresBuild: true 800 | dev: true 801 | optional: true 802 | 803 | /esbuild-linux-arm/0.15.9: 804 | resolution: {integrity: sha512-3Zf2GVGUOI7XwChH3qrnTOSqfV1V4CAc/7zLVm4lO6JT6wbJrTgEYCCiNSzziSju+J9Jhf9YGWk/26quWPC6yQ==} 805 | engines: {node: '>=12'} 806 | cpu: [arm] 807 | os: [linux] 808 | requiresBuild: true 809 | dev: true 810 | optional: true 811 | 812 | /esbuild-linux-arm64/0.15.9: 813 | resolution: {integrity: sha512-a+bTtxJmYmk9d+s2W4/R1SYKDDAldOKmWjWP0BnrWtDbvUBNOm++du0ysPju4mZVoEFgS1yLNW+VXnG/4FNwdQ==} 814 | engines: {node: '>=12'} 815 | cpu: [arm64] 816 | os: [linux] 817 | requiresBuild: true 818 | dev: true 819 | optional: true 820 | 821 | /esbuild-linux-mips64le/0.15.9: 822 | resolution: {integrity: sha512-Zn9HSylDp89y+TRREMDoGrc3Z4Hs5u56ozZLQCiZAUx2+HdbbXbWdjmw3FdTJ/i7t5Cew6/Q+6kfO3KCcFGlyw==} 823 | engines: {node: '>=12'} 824 | cpu: [mips64el] 825 | os: [linux] 826 | requiresBuild: true 827 | dev: true 828 | optional: true 829 | 830 | /esbuild-linux-ppc64le/0.15.9: 831 | resolution: {integrity: sha512-OEiOxNAMH9ENFYqRsWUj3CWyN3V8P3ZXyfNAtX5rlCEC/ERXrCEFCJji/1F6POzsXAzxvUJrTSTCy7G6BhA6Fw==} 832 | engines: {node: '>=12'} 833 | cpu: [ppc64] 834 | os: [linux] 835 | requiresBuild: true 836 | dev: true 837 | optional: true 838 | 839 | /esbuild-linux-riscv64/0.15.9: 840 | resolution: {integrity: sha512-ukm4KsC3QRausEFjzTsOZ/qqazw0YvJsKmfoZZm9QW27OHjk2XKSQGGvx8gIEswft/Sadp03/VZvAaqv5AIwNA==} 841 | engines: {node: '>=12'} 842 | cpu: [riscv64] 843 | os: [linux] 844 | requiresBuild: true 845 | dev: true 846 | optional: true 847 | 848 | /esbuild-linux-s390x/0.15.9: 849 | resolution: {integrity: sha512-uDOQEH55wQ6ahcIKzQr3VyjGc6Po/xblLGLoUk3fVL1qjlZAibtQr6XRfy5wPJLu/M2o0vQKLq4lyJ2r1tWKcw==} 850 | engines: {node: '>=12'} 851 | cpu: [s390x] 852 | os: [linux] 853 | requiresBuild: true 854 | dev: true 855 | optional: true 856 | 857 | /esbuild-netbsd-64/0.15.9: 858 | resolution: {integrity: sha512-yWgxaYTQz+TqX80wXRq6xAtb7GSBAp6gqLKfOdANg9qEmAI1Bxn04IrQr0Mzm4AhxvGKoHzjHjMgXbCCSSDxcw==} 859 | engines: {node: '>=12'} 860 | cpu: [x64] 861 | os: [netbsd] 862 | requiresBuild: true 863 | dev: true 864 | optional: true 865 | 866 | /esbuild-openbsd-64/0.15.9: 867 | resolution: {integrity: sha512-JmS18acQl4iSAjrEha1MfEmUMN4FcnnrtTaJ7Qg0tDCOcgpPPQRLGsZqhes0vmx8VA6IqRyScqXvaL7+Q0Uf3A==} 868 | engines: {node: '>=12'} 869 | cpu: [x64] 870 | os: [openbsd] 871 | requiresBuild: true 872 | dev: true 873 | optional: true 874 | 875 | /esbuild-sunos-64/0.15.9: 876 | resolution: {integrity: sha512-UKynGSWpzkPmXW3D2UMOD9BZPIuRaSqphxSCwScfEE05Be3KAmvjsBhht1fLzKpiFVJb0BYMd4jEbWMyJ/z1hQ==} 877 | engines: {node: '>=12'} 878 | cpu: [x64] 879 | os: [sunos] 880 | requiresBuild: true 881 | dev: true 882 | optional: true 883 | 884 | /esbuild-windows-32/0.15.9: 885 | resolution: {integrity: sha512-aqXvu4/W9XyTVqO/hw3rNxKE1TcZiEYHPsXM9LwYmKSX9/hjvfIJzXwQBlPcJ/QOxedfoMVH0YnhhQ9Ffb0RGA==} 886 | engines: {node: '>=12'} 887 | cpu: [ia32] 888 | os: [win32] 889 | requiresBuild: true 890 | dev: true 891 | optional: true 892 | 893 | /esbuild-windows-64/0.15.9: 894 | resolution: {integrity: sha512-zm7h91WUmlS4idMtjvCrEeNhlH7+TNOmqw5dJPJZrgFaxoFyqYG6CKDpdFCQXdyKpD5yvzaQBOMVTCBVKGZDEg==} 895 | engines: {node: '>=12'} 896 | cpu: [x64] 897 | os: [win32] 898 | requiresBuild: true 899 | dev: true 900 | optional: true 901 | 902 | /esbuild-windows-arm64/0.15.9: 903 | resolution: {integrity: sha512-yQEVIv27oauAtvtuhJVfSNMztJJX47ismRS6Sv2QMVV9RM+6xjbMWuuwM2nxr5A2/gj/mu2z9YlQxiwoFRCfZA==} 904 | engines: {node: '>=12'} 905 | cpu: [arm64] 906 | os: [win32] 907 | requiresBuild: true 908 | dev: true 909 | optional: true 910 | 911 | /esbuild/0.15.9: 912 | resolution: {integrity: sha512-OnYr1rkMVxtmMHIAKZLMcEUlJmqcbxBz9QoBU8G9v455na0fuzlT/GLu6l+SRghrk0Mm2fSSciMmzV43Q8e0Gg==} 913 | engines: {node: '>=12'} 914 | hasBin: true 915 | requiresBuild: true 916 | optionalDependencies: 917 | '@esbuild/android-arm': 0.15.9 918 | '@esbuild/linux-loong64': 0.15.9 919 | esbuild-android-64: 0.15.9 920 | esbuild-android-arm64: 0.15.9 921 | esbuild-darwin-64: 0.15.9 922 | esbuild-darwin-arm64: 0.15.9 923 | esbuild-freebsd-64: 0.15.9 924 | esbuild-freebsd-arm64: 0.15.9 925 | esbuild-linux-32: 0.15.9 926 | esbuild-linux-64: 0.15.9 927 | esbuild-linux-arm: 0.15.9 928 | esbuild-linux-arm64: 0.15.9 929 | esbuild-linux-mips64le: 0.15.9 930 | esbuild-linux-ppc64le: 0.15.9 931 | esbuild-linux-riscv64: 0.15.9 932 | esbuild-linux-s390x: 0.15.9 933 | esbuild-netbsd-64: 0.15.9 934 | esbuild-openbsd-64: 0.15.9 935 | esbuild-sunos-64: 0.15.9 936 | esbuild-windows-32: 0.15.9 937 | esbuild-windows-64: 0.15.9 938 | esbuild-windows-arm64: 0.15.9 939 | dev: true 940 | 941 | /escalade/3.1.1: 942 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.npm.taobao.org/} 943 | engines: {node: '>=6'} 944 | dev: true 945 | 946 | /estree-walker/2.0.2: 947 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npm.taobao.org/} 948 | 949 | /fast-glob/3.2.12: 950 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, registry: https://registry.npm.taobao.org/} 951 | engines: {node: '>=8.6.0'} 952 | dependencies: 953 | '@nodelib/fs.stat': 2.0.5 954 | '@nodelib/fs.walk': 1.2.8 955 | glob-parent: 5.1.2 956 | merge2: 1.4.1 957 | micromatch: 4.0.5 958 | dev: true 959 | 960 | /fastq/1.13.0: 961 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==, registry: https://registry.npm.taobao.org/} 962 | dependencies: 963 | reusify: 1.0.4 964 | dev: true 965 | 966 | /fill-range/7.0.1: 967 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npm.taobao.org/} 968 | engines: {node: '>=8'} 969 | dependencies: 970 | to-regex-range: 5.0.1 971 | dev: true 972 | 973 | /follow-redirects/1.15.2: 974 | resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, registry: https://registry.npm.taobao.org/} 975 | engines: {node: '>=4.0'} 976 | peerDependencies: 977 | debug: '*' 978 | peerDependenciesMeta: 979 | debug: 980 | optional: true 981 | dev: false 982 | 983 | /form-data/4.0.0: 984 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, registry: https://registry.npm.taobao.org/} 985 | engines: {node: '>= 6'} 986 | dependencies: 987 | asynckit: 0.4.0 988 | combined-stream: 1.0.8 989 | mime-types: 2.1.35 990 | dev: false 991 | 992 | /fraction.js/4.2.0: 993 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==, registry: https://registry.npm.taobao.org/} 994 | dev: true 995 | 996 | /fs-extra/10.1.0: 997 | resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} 998 | engines: {node: '>=12'} 999 | dependencies: 1000 | graceful-fs: 4.2.10 1001 | jsonfile: 6.1.0 1002 | universalify: 2.0.0 1003 | dev: true 1004 | 1005 | /fsevents/2.3.2: 1006 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1007 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1008 | os: [darwin] 1009 | requiresBuild: true 1010 | dev: true 1011 | optional: true 1012 | 1013 | /function-bind/1.1.1: 1014 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1015 | dev: true 1016 | 1017 | /glob-parent/5.1.2: 1018 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: https://registry.npm.taobao.org/} 1019 | engines: {node: '>= 6'} 1020 | dependencies: 1021 | is-glob: 4.0.3 1022 | dev: true 1023 | 1024 | /graceful-fs/4.2.10: 1025 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 1026 | dev: true 1027 | 1028 | /has-flag/4.0.0: 1029 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1030 | engines: {node: '>=8'} 1031 | dev: true 1032 | 1033 | /has/1.0.3: 1034 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1035 | engines: {node: '>= 0.4.0'} 1036 | dependencies: 1037 | function-bind: 1.1.1 1038 | dev: true 1039 | 1040 | /header-case/2.0.4: 1041 | resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} 1042 | dependencies: 1043 | capital-case: 1.0.4 1044 | tslib: 2.4.0 1045 | dev: true 1046 | 1047 | /iconv-lite/0.6.3: 1048 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, registry: https://registry.npm.taobao.org/} 1049 | engines: {node: '>=0.10.0'} 1050 | dependencies: 1051 | safer-buffer: 2.1.2 1052 | dev: true 1053 | optional: true 1054 | 1055 | /image-size/0.5.5: 1056 | resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} 1057 | engines: {node: '>=0.10.0'} 1058 | hasBin: true 1059 | requiresBuild: true 1060 | dev: true 1061 | optional: true 1062 | 1063 | /is-binary-path/2.1.0: 1064 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: https://registry.npm.taobao.org/} 1065 | engines: {node: '>=8'} 1066 | dependencies: 1067 | binary-extensions: 2.2.0 1068 | dev: true 1069 | 1070 | /is-core-module/2.10.0: 1071 | resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} 1072 | dependencies: 1073 | has: 1.0.3 1074 | dev: true 1075 | 1076 | /is-extglob/2.1.1: 1077 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: https://registry.npm.taobao.org/} 1078 | engines: {node: '>=0.10.0'} 1079 | dev: true 1080 | 1081 | /is-glob/4.0.3: 1082 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npm.taobao.org/} 1083 | engines: {node: '>=0.10.0'} 1084 | dependencies: 1085 | is-extglob: 2.1.1 1086 | dev: true 1087 | 1088 | /is-number/7.0.0: 1089 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/} 1090 | engines: {node: '>=0.12.0'} 1091 | dev: true 1092 | 1093 | /is-what/3.14.1: 1094 | resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==, registry: https://registry.npm.taobao.org/} 1095 | dev: true 1096 | 1097 | /jsonfile/6.1.0: 1098 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1099 | dependencies: 1100 | universalify: 2.0.0 1101 | optionalDependencies: 1102 | graceful-fs: 4.2.10 1103 | dev: true 1104 | 1105 | /less/4.1.3: 1106 | resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==, registry: https://registry.npm.taobao.org/} 1107 | engines: {node: '>=6'} 1108 | hasBin: true 1109 | dependencies: 1110 | copy-anything: 2.0.6 1111 | parse-node-version: 1.0.1 1112 | tslib: 2.4.0 1113 | optionalDependencies: 1114 | errno: 0.1.8 1115 | graceful-fs: 4.2.10 1116 | image-size: 0.5.5 1117 | make-dir: 2.1.0 1118 | mime: 1.6.0 1119 | needle: 3.1.0 1120 | source-map: 0.6.1 1121 | transitivePeerDependencies: 1122 | - supports-color 1123 | dev: true 1124 | 1125 | /local-pkg/0.4.2: 1126 | resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==, registry: https://registry.npm.taobao.org/} 1127 | engines: {node: '>=14'} 1128 | dev: true 1129 | 1130 | /lower-case/2.0.2: 1131 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 1132 | dependencies: 1133 | tslib: 2.4.0 1134 | dev: true 1135 | 1136 | /lru-cache/6.0.0: 1137 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.npm.taobao.org/} 1138 | engines: {node: '>=10'} 1139 | dependencies: 1140 | yallist: 4.0.0 1141 | dev: true 1142 | 1143 | /magic-string/0.25.9: 1144 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 1145 | dependencies: 1146 | sourcemap-codec: 1.4.8 1147 | 1148 | /magic-string/0.26.4: 1149 | resolution: {integrity: sha512-e5uXtVJ22aEpK9u1+eQf0fSxHeqwyV19K+uGnlROCxUhzwRip9tBsaMViK/0vC3viyPd5Gtucp3UmEp/Q2cPTQ==, registry: https://registry.npm.taobao.org/} 1150 | engines: {node: '>=12'} 1151 | dependencies: 1152 | sourcemap-codec: 1.4.8 1153 | dev: true 1154 | 1155 | /make-dir/2.1.0: 1156 | resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} 1157 | engines: {node: '>=6'} 1158 | requiresBuild: true 1159 | dependencies: 1160 | pify: 4.0.1 1161 | semver: 5.7.1 1162 | dev: true 1163 | optional: true 1164 | 1165 | /merge2/1.4.1: 1166 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npm.taobao.org/} 1167 | engines: {node: '>= 8'} 1168 | dev: true 1169 | 1170 | /micromatch/4.0.5: 1171 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.npm.taobao.org/} 1172 | engines: {node: '>=8.6'} 1173 | dependencies: 1174 | braces: 3.0.2 1175 | picomatch: 2.3.1 1176 | dev: true 1177 | 1178 | /mime-db/1.52.0: 1179 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: https://registry.npm.taobao.org/} 1180 | engines: {node: '>= 0.6'} 1181 | dev: false 1182 | 1183 | /mime-types/2.1.35: 1184 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: https://registry.npm.taobao.org/} 1185 | engines: {node: '>= 0.6'} 1186 | dependencies: 1187 | mime-db: 1.52.0 1188 | dev: false 1189 | 1190 | /mime/1.6.0: 1191 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 1192 | engines: {node: '>=4'} 1193 | hasBin: true 1194 | requiresBuild: true 1195 | dev: true 1196 | optional: true 1197 | 1198 | /minimatch/5.1.0: 1199 | resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==, registry: https://registry.npm.taobao.org/} 1200 | engines: {node: '>=10'} 1201 | dependencies: 1202 | brace-expansion: 2.0.1 1203 | dev: true 1204 | 1205 | /ms/2.1.2: 1206 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1207 | dev: true 1208 | 1209 | /ms/2.1.3: 1210 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1211 | dev: true 1212 | optional: true 1213 | 1214 | /nanoid/3.3.4: 1215 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, registry: https://registry.npm.taobao.org/} 1216 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1217 | hasBin: true 1218 | 1219 | /needle/3.1.0: 1220 | resolution: {integrity: sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==} 1221 | engines: {node: '>= 4.4.x'} 1222 | hasBin: true 1223 | requiresBuild: true 1224 | dependencies: 1225 | debug: 3.2.7 1226 | iconv-lite: 0.6.3 1227 | sax: 1.2.4 1228 | transitivePeerDependencies: 1229 | - supports-color 1230 | dev: true 1231 | optional: true 1232 | 1233 | /no-case/3.0.4: 1234 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 1235 | dependencies: 1236 | lower-case: 2.0.2 1237 | tslib: 2.4.0 1238 | dev: true 1239 | 1240 | /node-releases/2.0.6: 1241 | resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==, registry: https://registry.npm.taobao.org/} 1242 | dev: true 1243 | 1244 | /normalize-path/3.0.0: 1245 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: https://registry.npm.taobao.org/} 1246 | engines: {node: '>=0.10.0'} 1247 | dev: true 1248 | 1249 | /normalize-range/0.1.2: 1250 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, registry: https://registry.npm.taobao.org/} 1251 | engines: {node: '>=0.10.0'} 1252 | dev: true 1253 | 1254 | /object-assign/4.1.1: 1255 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, registry: https://registry.npm.taobao.org/} 1256 | engines: {node: '>=0.10.0'} 1257 | dev: true 1258 | 1259 | /param-case/3.0.4: 1260 | resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} 1261 | dependencies: 1262 | dot-case: 3.0.4 1263 | tslib: 2.4.0 1264 | dev: true 1265 | 1266 | /parse-node-version/1.0.1: 1267 | resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==, registry: https://registry.npm.taobao.org/} 1268 | engines: {node: '>= 0.10'} 1269 | dev: true 1270 | 1271 | /pascal-case/3.1.2: 1272 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 1273 | dependencies: 1274 | no-case: 3.0.4 1275 | tslib: 2.4.0 1276 | dev: true 1277 | 1278 | /path-case/3.0.4: 1279 | resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} 1280 | dependencies: 1281 | dot-case: 3.0.4 1282 | tslib: 2.4.0 1283 | dev: true 1284 | 1285 | /path-parse/1.0.7: 1286 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1287 | dev: true 1288 | 1289 | /pathe/0.2.0: 1290 | resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} 1291 | dev: true 1292 | 1293 | /picocolors/1.0.0: 1294 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/} 1295 | 1296 | /picomatch/2.3.1: 1297 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npm.taobao.org/} 1298 | engines: {node: '>=8.6'} 1299 | dev: true 1300 | 1301 | /pify/4.0.1: 1302 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, registry: https://registry.npm.taobao.org/} 1303 | engines: {node: '>=6'} 1304 | dev: true 1305 | optional: true 1306 | 1307 | /postcss-attribute-case-insensitive/5.0.2_postcss@8.4.13: 1308 | resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==, registry: https://registry.npm.taobao.org/} 1309 | engines: {node: ^12 || ^14 || >=16} 1310 | peerDependencies: 1311 | postcss: ^8.2 1312 | dependencies: 1313 | postcss: 8.4.13 1314 | postcss-selector-parser: 6.0.10 1315 | dev: true 1316 | 1317 | /postcss-clamp/4.1.0_postcss@8.4.13: 1318 | resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==, registry: https://registry.npm.taobao.org/} 1319 | engines: {node: '>=7.6.0'} 1320 | peerDependencies: 1321 | postcss: ^8.4.6 1322 | dependencies: 1323 | postcss: 8.4.13 1324 | postcss-value-parser: 4.2.0 1325 | dev: true 1326 | 1327 | /postcss-color-functional-notation/4.2.4_postcss@8.4.13: 1328 | resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==, registry: https://registry.npm.taobao.org/} 1329 | engines: {node: ^12 || ^14 || >=16} 1330 | peerDependencies: 1331 | postcss: ^8.2 1332 | dependencies: 1333 | postcss: 8.4.13 1334 | postcss-value-parser: 4.2.0 1335 | dev: true 1336 | 1337 | /postcss-color-hex-alpha/8.0.4_postcss@8.4.13: 1338 | resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==, registry: https://registry.npm.taobao.org/} 1339 | engines: {node: ^12 || ^14 || >=16} 1340 | peerDependencies: 1341 | postcss: ^8.4 1342 | dependencies: 1343 | postcss: 8.4.13 1344 | postcss-value-parser: 4.2.0 1345 | dev: true 1346 | 1347 | /postcss-color-rebeccapurple/7.1.1_postcss@8.4.13: 1348 | resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==, registry: https://registry.npm.taobao.org/} 1349 | engines: {node: ^12 || ^14 || >=16} 1350 | peerDependencies: 1351 | postcss: ^8.2 1352 | dependencies: 1353 | postcss: 8.4.13 1354 | postcss-value-parser: 4.2.0 1355 | dev: true 1356 | 1357 | /postcss-custom-media/8.0.2_postcss@8.4.13: 1358 | resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==, registry: https://registry.npm.taobao.org/} 1359 | engines: {node: ^12 || ^14 || >=16} 1360 | peerDependencies: 1361 | postcss: ^8.3 1362 | dependencies: 1363 | postcss: 8.4.13 1364 | postcss-value-parser: 4.2.0 1365 | dev: true 1366 | 1367 | /postcss-custom-properties/12.1.9_postcss@8.4.13: 1368 | resolution: {integrity: sha512-/E7PRvK8DAVljBbeWrcEQJPG72jaImxF3vvCNFwv9cC8CzigVoNIpeyfnJzphnN3Fd8/auBf5wvkw6W9MfmTyg==, registry: https://registry.npm.taobao.org/} 1369 | engines: {node: ^12 || ^14 || >=16} 1370 | peerDependencies: 1371 | postcss: ^8.2 1372 | dependencies: 1373 | postcss: 8.4.13 1374 | postcss-value-parser: 4.2.0 1375 | dev: true 1376 | 1377 | /postcss-custom-selectors/6.0.3_postcss@8.4.13: 1378 | resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==, registry: https://registry.npm.taobao.org/} 1379 | engines: {node: ^12 || ^14 || >=16} 1380 | peerDependencies: 1381 | postcss: ^8.3 1382 | dependencies: 1383 | postcss: 8.4.13 1384 | postcss-selector-parser: 6.0.10 1385 | dev: true 1386 | 1387 | /postcss-dir-pseudo-class/6.0.5_postcss@8.4.13: 1388 | resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==, registry: https://registry.npm.taobao.org/} 1389 | engines: {node: ^12 || ^14 || >=16} 1390 | peerDependencies: 1391 | postcss: ^8.2 1392 | dependencies: 1393 | postcss: 8.4.13 1394 | postcss-selector-parser: 6.0.10 1395 | dev: true 1396 | 1397 | /postcss-double-position-gradients/3.1.2_postcss@8.4.13: 1398 | resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==, registry: https://registry.npm.taobao.org/} 1399 | engines: {node: ^12 || ^14 || >=16} 1400 | peerDependencies: 1401 | postcss: ^8.2 1402 | dependencies: 1403 | '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.13 1404 | postcss: 8.4.13 1405 | postcss-value-parser: 4.2.0 1406 | dev: true 1407 | 1408 | /postcss-env-function/4.0.6_postcss@8.4.13: 1409 | resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==, registry: https://registry.npm.taobao.org/} 1410 | engines: {node: ^12 || ^14 || >=16} 1411 | peerDependencies: 1412 | postcss: ^8.4 1413 | dependencies: 1414 | postcss: 8.4.13 1415 | postcss-value-parser: 4.2.0 1416 | dev: true 1417 | 1418 | /postcss-focus-visible/6.0.4_postcss@8.4.13: 1419 | resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==, registry: https://registry.npm.taobao.org/} 1420 | engines: {node: ^12 || ^14 || >=16} 1421 | peerDependencies: 1422 | postcss: ^8.4 1423 | dependencies: 1424 | postcss: 8.4.13 1425 | postcss-selector-parser: 6.0.10 1426 | dev: true 1427 | 1428 | /postcss-focus-within/5.0.4_postcss@8.4.13: 1429 | resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==, registry: https://registry.npm.taobao.org/} 1430 | engines: {node: ^12 || ^14 || >=16} 1431 | peerDependencies: 1432 | postcss: ^8.4 1433 | dependencies: 1434 | postcss: 8.4.13 1435 | postcss-selector-parser: 6.0.10 1436 | dev: true 1437 | 1438 | /postcss-font-variant/5.0.0_postcss@8.4.13: 1439 | resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==, registry: https://registry.npm.taobao.org/} 1440 | peerDependencies: 1441 | postcss: ^8.1.0 1442 | dependencies: 1443 | postcss: 8.4.13 1444 | dev: true 1445 | 1446 | /postcss-gap-properties/3.0.5_postcss@8.4.13: 1447 | resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==, registry: https://registry.npm.taobao.org/} 1448 | engines: {node: ^12 || ^14 || >=16} 1449 | peerDependencies: 1450 | postcss: ^8.2 1451 | dependencies: 1452 | postcss: 8.4.13 1453 | dev: true 1454 | 1455 | /postcss-image-set-function/4.0.7_postcss@8.4.13: 1456 | resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==, registry: https://registry.npm.taobao.org/} 1457 | engines: {node: ^12 || ^14 || >=16} 1458 | peerDependencies: 1459 | postcss: ^8.2 1460 | dependencies: 1461 | postcss: 8.4.13 1462 | postcss-value-parser: 4.2.0 1463 | dev: true 1464 | 1465 | /postcss-initial/4.0.1_postcss@8.4.13: 1466 | resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==, registry: https://registry.npm.taobao.org/} 1467 | peerDependencies: 1468 | postcss: ^8.0.0 1469 | dependencies: 1470 | postcss: 8.4.13 1471 | dev: true 1472 | 1473 | /postcss-lab-function/4.2.1_postcss@8.4.13: 1474 | resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==, registry: https://registry.npm.taobao.org/} 1475 | engines: {node: ^12 || ^14 || >=16} 1476 | peerDependencies: 1477 | postcss: ^8.2 1478 | dependencies: 1479 | '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.13 1480 | postcss: 8.4.13 1481 | postcss-value-parser: 4.2.0 1482 | dev: true 1483 | 1484 | /postcss-logical/5.0.4_postcss@8.4.13: 1485 | resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==, registry: https://registry.npm.taobao.org/} 1486 | engines: {node: ^12 || ^14 || >=16} 1487 | peerDependencies: 1488 | postcss: ^8.4 1489 | dependencies: 1490 | postcss: 8.4.13 1491 | dev: true 1492 | 1493 | /postcss-media-minmax/5.0.0_postcss@8.4.13: 1494 | resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==, registry: https://registry.npm.taobao.org/} 1495 | engines: {node: '>=10.0.0'} 1496 | peerDependencies: 1497 | postcss: ^8.1.0 1498 | dependencies: 1499 | postcss: 8.4.13 1500 | dev: true 1501 | 1502 | /postcss-nesting/10.2.0_postcss@8.4.13: 1503 | resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==, registry: https://registry.npm.taobao.org/} 1504 | engines: {node: ^12 || ^14 || >=16} 1505 | peerDependencies: 1506 | postcss: ^8.2 1507 | dependencies: 1508 | '@csstools/selector-specificity': 2.0.2_qiplrb533afbljv7sbepwo7yse 1509 | postcss: 8.4.13 1510 | postcss-selector-parser: 6.0.10 1511 | dev: true 1512 | 1513 | /postcss-opacity-percentage/1.1.2: 1514 | resolution: {integrity: sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==, registry: https://registry.npm.taobao.org/} 1515 | engines: {node: ^12 || ^14 || >=16} 1516 | dev: true 1517 | 1518 | /postcss-overflow-shorthand/3.0.4_postcss@8.4.13: 1519 | resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==, registry: https://registry.npm.taobao.org/} 1520 | engines: {node: ^12 || ^14 || >=16} 1521 | peerDependencies: 1522 | postcss: ^8.2 1523 | dependencies: 1524 | postcss: 8.4.13 1525 | postcss-value-parser: 4.2.0 1526 | dev: true 1527 | 1528 | /postcss-page-break/3.0.4_postcss@8.4.13: 1529 | resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==, registry: https://registry.npm.taobao.org/} 1530 | peerDependencies: 1531 | postcss: ^8 1532 | dependencies: 1533 | postcss: 8.4.13 1534 | dev: true 1535 | 1536 | /postcss-place/7.0.5_postcss@8.4.13: 1537 | resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==, registry: https://registry.npm.taobao.org/} 1538 | engines: {node: ^12 || ^14 || >=16} 1539 | peerDependencies: 1540 | postcss: ^8.2 1541 | dependencies: 1542 | postcss: 8.4.13 1543 | postcss-value-parser: 4.2.0 1544 | dev: true 1545 | 1546 | /postcss-preset-env/7.8.2_postcss@8.4.13: 1547 | resolution: {integrity: sha512-rSMUEaOCnovKnwc5LvBDHUDzpGP+nrUeWZGWt9M72fBvckCi45JmnJigUr4QG4zZeOHmOCNCZnd2LKDvP++ZuQ==, registry: https://registry.npm.taobao.org/} 1548 | engines: {node: ^12 || ^14 || >=16} 1549 | peerDependencies: 1550 | postcss: ^8.2 1551 | dependencies: 1552 | '@csstools/postcss-cascade-layers': 1.1.1_postcss@8.4.13 1553 | '@csstools/postcss-color-function': 1.1.1_postcss@8.4.13 1554 | '@csstools/postcss-font-format-keywords': 1.0.1_postcss@8.4.13 1555 | '@csstools/postcss-hwb-function': 1.0.2_postcss@8.4.13 1556 | '@csstools/postcss-ic-unit': 1.0.1_postcss@8.4.13 1557 | '@csstools/postcss-is-pseudo-class': 2.0.7_postcss@8.4.13 1558 | '@csstools/postcss-nested-calc': 1.0.0_postcss@8.4.13 1559 | '@csstools/postcss-normalize-display-values': 1.0.1_postcss@8.4.13 1560 | '@csstools/postcss-oklab-function': 1.1.1_postcss@8.4.13 1561 | '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.13 1562 | '@csstools/postcss-stepped-value-functions': 1.0.1_postcss@8.4.13 1563 | '@csstools/postcss-text-decoration-shorthand': 1.0.0_postcss@8.4.13 1564 | '@csstools/postcss-trigonometric-functions': 1.0.2_postcss@8.4.13 1565 | '@csstools/postcss-unset-value': 1.0.2_postcss@8.4.13 1566 | autoprefixer: 10.4.12_postcss@8.4.13 1567 | browserslist: 4.21.4 1568 | css-blank-pseudo: 3.0.3_postcss@8.4.13 1569 | css-has-pseudo: 3.0.4_postcss@8.4.13 1570 | css-prefers-color-scheme: 6.0.3_postcss@8.4.13 1571 | cssdb: 7.0.1 1572 | postcss: 8.4.13 1573 | postcss-attribute-case-insensitive: 5.0.2_postcss@8.4.13 1574 | postcss-clamp: 4.1.0_postcss@8.4.13 1575 | postcss-color-functional-notation: 4.2.4_postcss@8.4.13 1576 | postcss-color-hex-alpha: 8.0.4_postcss@8.4.13 1577 | postcss-color-rebeccapurple: 7.1.1_postcss@8.4.13 1578 | postcss-custom-media: 8.0.2_postcss@8.4.13 1579 | postcss-custom-properties: 12.1.9_postcss@8.4.13 1580 | postcss-custom-selectors: 6.0.3_postcss@8.4.13 1581 | postcss-dir-pseudo-class: 6.0.5_postcss@8.4.13 1582 | postcss-double-position-gradients: 3.1.2_postcss@8.4.13 1583 | postcss-env-function: 4.0.6_postcss@8.4.13 1584 | postcss-focus-visible: 6.0.4_postcss@8.4.13 1585 | postcss-focus-within: 5.0.4_postcss@8.4.13 1586 | postcss-font-variant: 5.0.0_postcss@8.4.13 1587 | postcss-gap-properties: 3.0.5_postcss@8.4.13 1588 | postcss-image-set-function: 4.0.7_postcss@8.4.13 1589 | postcss-initial: 4.0.1_postcss@8.4.13 1590 | postcss-lab-function: 4.2.1_postcss@8.4.13 1591 | postcss-logical: 5.0.4_postcss@8.4.13 1592 | postcss-media-minmax: 5.0.0_postcss@8.4.13 1593 | postcss-nesting: 10.2.0_postcss@8.4.13 1594 | postcss-opacity-percentage: 1.1.2 1595 | postcss-overflow-shorthand: 3.0.4_postcss@8.4.13 1596 | postcss-page-break: 3.0.4_postcss@8.4.13 1597 | postcss-place: 7.0.5_postcss@8.4.13 1598 | postcss-pseudo-class-any-link: 7.1.6_postcss@8.4.13 1599 | postcss-replace-overflow-wrap: 4.0.0_postcss@8.4.13 1600 | postcss-selector-not: 6.0.1_postcss@8.4.13 1601 | postcss-value-parser: 4.2.0 1602 | dev: true 1603 | 1604 | /postcss-pseudo-class-any-link/7.1.6_postcss@8.4.13: 1605 | resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==, registry: https://registry.npm.taobao.org/} 1606 | engines: {node: ^12 || ^14 || >=16} 1607 | peerDependencies: 1608 | postcss: ^8.2 1609 | dependencies: 1610 | postcss: 8.4.13 1611 | postcss-selector-parser: 6.0.10 1612 | dev: true 1613 | 1614 | /postcss-px-to-viewport/1.1.1: 1615 | resolution: {integrity: sha512-2x9oGnBms+e0cYtBJOZdlwrFg/mLR4P1g2IFu7jYKvnqnH/HLhoKyareW2Q/x4sg0BgklHlP1qeWo2oCyPm8FQ==, registry: https://registry.npm.taobao.org/} 1616 | dependencies: 1617 | object-assign: 4.1.1 1618 | postcss: 8.4.16 1619 | dev: true 1620 | 1621 | /postcss-replace-overflow-wrap/4.0.0_postcss@8.4.13: 1622 | resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==, registry: https://registry.npm.taobao.org/} 1623 | peerDependencies: 1624 | postcss: ^8.0.3 1625 | dependencies: 1626 | postcss: 8.4.13 1627 | dev: true 1628 | 1629 | /postcss-selector-not/6.0.1_postcss@8.4.13: 1630 | resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==, registry: https://registry.npm.taobao.org/} 1631 | engines: {node: ^12 || ^14 || >=16} 1632 | peerDependencies: 1633 | postcss: ^8.2 1634 | dependencies: 1635 | postcss: 8.4.13 1636 | postcss-selector-parser: 6.0.10 1637 | dev: true 1638 | 1639 | /postcss-selector-parser/6.0.10: 1640 | resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==, registry: https://registry.npm.taobao.org/} 1641 | engines: {node: '>=4'} 1642 | dependencies: 1643 | cssesc: 3.0.0 1644 | util-deprecate: 1.0.2 1645 | dev: true 1646 | 1647 | /postcss-value-parser/4.2.0: 1648 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, registry: https://registry.npm.taobao.org/} 1649 | dev: true 1650 | 1651 | /postcss/8.4.13: 1652 | resolution: {integrity: sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==, registry: https://registry.npm.taobao.org/} 1653 | engines: {node: ^10 || ^12 || >=14} 1654 | dependencies: 1655 | nanoid: 3.3.4 1656 | picocolors: 1.0.0 1657 | source-map-js: 1.0.2 1658 | dev: true 1659 | 1660 | /postcss/8.4.16: 1661 | resolution: {integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==, registry: https://registry.npm.taobao.org/} 1662 | engines: {node: ^10 || ^12 || >=14} 1663 | dependencies: 1664 | nanoid: 3.3.4 1665 | picocolors: 1.0.0 1666 | source-map-js: 1.0.2 1667 | 1668 | /prr/1.0.1: 1669 | resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==, registry: https://registry.npm.taobao.org/} 1670 | dev: true 1671 | optional: true 1672 | 1673 | /queue-microtask/1.2.3: 1674 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npm.taobao.org/} 1675 | dev: true 1676 | 1677 | /readdirp/3.6.0: 1678 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npm.taobao.org/} 1679 | engines: {node: '>=8.10.0'} 1680 | dependencies: 1681 | picomatch: 2.3.1 1682 | dev: true 1683 | 1684 | /resolve/1.22.1: 1685 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 1686 | hasBin: true 1687 | dependencies: 1688 | is-core-module: 2.10.0 1689 | path-parse: 1.0.7 1690 | supports-preserve-symlinks-flag: 1.0.0 1691 | dev: true 1692 | 1693 | /reusify/1.0.4: 1694 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: https://registry.npm.taobao.org/} 1695 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1696 | dev: true 1697 | 1698 | /rollup/2.78.1: 1699 | resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} 1700 | engines: {node: '>=10.0.0'} 1701 | hasBin: true 1702 | optionalDependencies: 1703 | fsevents: 2.3.2 1704 | dev: true 1705 | 1706 | /run-parallel/1.2.0: 1707 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: https://registry.npm.taobao.org/} 1708 | dependencies: 1709 | queue-microtask: 1.2.3 1710 | dev: true 1711 | 1712 | /safer-buffer/2.1.2: 1713 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, registry: https://registry.npm.taobao.org/} 1714 | dev: true 1715 | optional: true 1716 | 1717 | /sax/1.2.4: 1718 | resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==, registry: https://registry.npm.taobao.org/} 1719 | dev: true 1720 | optional: true 1721 | 1722 | /semver/5.7.1: 1723 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, registry: https://registry.npm.taobao.org/} 1724 | hasBin: true 1725 | dev: true 1726 | optional: true 1727 | 1728 | /semver/7.3.7: 1729 | resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==, registry: https://registry.npm.taobao.org/} 1730 | engines: {node: '>=10'} 1731 | hasBin: true 1732 | dependencies: 1733 | lru-cache: 6.0.0 1734 | dev: true 1735 | 1736 | /sentence-case/3.0.4: 1737 | resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} 1738 | dependencies: 1739 | no-case: 3.0.4 1740 | tslib: 2.4.0 1741 | upper-case-first: 2.0.2 1742 | dev: true 1743 | 1744 | /snake-case/3.0.4: 1745 | resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} 1746 | dependencies: 1747 | dot-case: 3.0.4 1748 | tslib: 2.4.0 1749 | dev: true 1750 | 1751 | /source-map-js/1.0.2: 1752 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npm.taobao.org/} 1753 | engines: {node: '>=0.10.0'} 1754 | 1755 | /source-map/0.6.1: 1756 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1757 | engines: {node: '>=0.10.0'} 1758 | 1759 | /sourcemap-codec/1.4.8: 1760 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, registry: https://registry.npm.taobao.org/} 1761 | 1762 | /supports-color/7.2.0: 1763 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1764 | engines: {node: '>=8'} 1765 | dependencies: 1766 | has-flag: 4.0.0 1767 | dev: true 1768 | 1769 | /supports-preserve-symlinks-flag/1.0.0: 1770 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1771 | engines: {node: '>= 0.4'} 1772 | dev: true 1773 | 1774 | /throttle-debounce/5.0.0: 1775 | resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==, registry: https://registry.npm.taobao.org/} 1776 | engines: {node: '>=12.22'} 1777 | dev: false 1778 | 1779 | /to-fast-properties/2.0.0: 1780 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npm.taobao.org/} 1781 | engines: {node: '>=4'} 1782 | 1783 | /to-regex-range/5.0.1: 1784 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npm.taobao.org/} 1785 | engines: {node: '>=8.0'} 1786 | dependencies: 1787 | is-number: 7.0.0 1788 | dev: true 1789 | 1790 | /tslib/2.3.0: 1791 | resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, registry: https://registry.npm.taobao.org/} 1792 | dev: false 1793 | 1794 | /tslib/2.4.0: 1795 | resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==, registry: https://registry.npm.taobao.org/} 1796 | dev: true 1797 | 1798 | /typescript/4.8.3: 1799 | resolution: {integrity: sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==, registry: https://registry.npm.taobao.org/} 1800 | engines: {node: '>=4.2.0'} 1801 | hasBin: true 1802 | dev: true 1803 | 1804 | /universalify/2.0.0: 1805 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} 1806 | engines: {node: '>= 10.0.0'} 1807 | dev: true 1808 | 1809 | /unplugin-vue-components/0.22.7_vue@3.2.39: 1810 | resolution: {integrity: sha512-MJEAKJF9bRykTRvJ4WXF0FNMAyt1PX3iwpu2NN+li35sAKjQv6sC1col5aZDLiwDZDo2AGwxNkzLJFKaun9qHw==, registry: https://registry.npm.taobao.org/} 1811 | engines: {node: '>=14'} 1812 | peerDependencies: 1813 | '@babel/parser': ^7.15.8 1814 | vue: 2 || 3 1815 | peerDependenciesMeta: 1816 | '@babel/parser': 1817 | optional: true 1818 | dependencies: 1819 | '@antfu/utils': 0.5.2 1820 | '@rollup/pluginutils': 4.2.1 1821 | chokidar: 3.5.3 1822 | debug: 4.3.4 1823 | fast-glob: 3.2.12 1824 | local-pkg: 0.4.2 1825 | magic-string: 0.26.4 1826 | minimatch: 5.1.0 1827 | resolve: 1.22.1 1828 | unplugin: 0.9.6 1829 | vue: 3.2.39 1830 | transitivePeerDependencies: 1831 | - supports-color 1832 | dev: true 1833 | 1834 | /unplugin-vue-define-options/0.10.0_vue@3.2.39: 1835 | resolution: {integrity: sha512-YvFdhdakRfrtArtMRCnqiQ74zYP/KicZpAqUYqPhtAL1r6aBxpj+soWBg0k5VxCbmwvjkuEWlYgOgdf6hqOc/A==, registry: https://registry.npm.taobao.org/} 1836 | engines: {node: '>=14.19.0'} 1837 | dependencies: 1838 | '@rollup/pluginutils': 4.2.1 1839 | '@vue-macros/common': 0.10.0_vue@3.2.39 1840 | ast-walker-scope: 0.2.3 1841 | unplugin: 0.9.6 1842 | transitivePeerDependencies: 1843 | - vue 1844 | dev: true 1845 | 1846 | /unplugin/0.9.6: 1847 | resolution: {integrity: sha512-YYLtfoNiie/lxswy1GOsKXgnLJTE27la/PeCGznSItk+8METYZErO+zzV9KQ/hXhPwzIJsfJ4s0m1Rl7ZCWZ4Q==, registry: https://registry.npm.taobao.org/} 1848 | dependencies: 1849 | acorn: 8.8.0 1850 | chokidar: 3.5.3 1851 | webpack-sources: 3.2.3 1852 | webpack-virtual-modules: 0.4.5 1853 | dev: true 1854 | 1855 | /update-browserslist-db/1.0.9_browserslist@4.21.4: 1856 | resolution: {integrity: sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==, registry: https://registry.npm.taobao.org/} 1857 | hasBin: true 1858 | peerDependencies: 1859 | browserslist: '>= 4.21.0' 1860 | dependencies: 1861 | browserslist: 4.21.4 1862 | escalade: 3.1.1 1863 | picocolors: 1.0.0 1864 | dev: true 1865 | 1866 | /upper-case-first/2.0.2: 1867 | resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} 1868 | dependencies: 1869 | tslib: 2.4.0 1870 | dev: true 1871 | 1872 | /upper-case/2.0.2: 1873 | resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} 1874 | dependencies: 1875 | tslib: 2.4.0 1876 | dev: true 1877 | 1878 | /util-deprecate/1.0.2: 1879 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, registry: https://registry.npm.taobao.org/} 1880 | dev: true 1881 | 1882 | /vite-plugin-compression/0.5.1_vite@3.1.1: 1883 | resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} 1884 | peerDependencies: 1885 | vite: '>=2.0.0' 1886 | dependencies: 1887 | chalk: 4.1.2 1888 | debug: 4.3.4 1889 | fs-extra: 10.1.0 1890 | vite: 3.1.1_less@4.1.3 1891 | transitivePeerDependencies: 1892 | - supports-color 1893 | dev: true 1894 | 1895 | /vite-plugin-style-import/2.0.0_vite@3.1.1: 1896 | resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==} 1897 | peerDependencies: 1898 | vite: '>=2.0.0' 1899 | dependencies: 1900 | '@rollup/pluginutils': 4.2.1 1901 | change-case: 4.1.2 1902 | console: 0.7.2 1903 | es-module-lexer: 0.9.3 1904 | fs-extra: 10.1.0 1905 | magic-string: 0.25.9 1906 | pathe: 0.2.0 1907 | vite: 3.1.1_less@4.1.3 1908 | dev: true 1909 | 1910 | /vite/3.1.1_less@4.1.3: 1911 | resolution: {integrity: sha512-hgxQWev/AL7nWYrqByYo8nfcH9n97v6oFsta9+JX8h6cEkni7nHKP2kJleNYV2kcGhE8jsbaY1aStwPZXzPbgA==} 1912 | engines: {node: ^14.18.0 || >=16.0.0} 1913 | hasBin: true 1914 | peerDependencies: 1915 | less: '*' 1916 | sass: '*' 1917 | stylus: '*' 1918 | terser: ^5.4.0 1919 | peerDependenciesMeta: 1920 | less: 1921 | optional: true 1922 | sass: 1923 | optional: true 1924 | stylus: 1925 | optional: true 1926 | terser: 1927 | optional: true 1928 | dependencies: 1929 | esbuild: 0.15.9 1930 | less: 4.1.3 1931 | postcss: 8.4.16 1932 | resolve: 1.22.1 1933 | rollup: 2.78.1 1934 | optionalDependencies: 1935 | fsevents: 2.3.2 1936 | dev: true 1937 | 1938 | /vue-tsc/0.40.13_typescript@4.8.3: 1939 | resolution: {integrity: sha512-xzuN3g5PnKfJcNrLv4+mAjteMd5wLm5fRhW0034OfNJZY4WhB07vhngea/XeGn7wNYt16r7syonzvW/54dcNiA==, registry: https://registry.npm.taobao.org/} 1940 | hasBin: true 1941 | peerDependencies: 1942 | typescript: '*' 1943 | dependencies: 1944 | '@volar/vue-language-core': 0.40.13 1945 | '@volar/vue-typescript': 0.40.13 1946 | typescript: 4.8.3 1947 | dev: true 1948 | 1949 | /vue/3.2.39: 1950 | resolution: {integrity: sha512-tRkguhRTw9NmIPXhzk21YFBqXHT2t+6C6wPOgQ50fcFVWnPdetmRqbmySRHznrYjX2E47u0cGlKGcxKZJ38R/g==, registry: https://registry.npm.taobao.org/} 1951 | dependencies: 1952 | '@vue/compiler-dom': 3.2.39 1953 | '@vue/compiler-sfc': 3.2.39 1954 | '@vue/runtime-dom': 3.2.39 1955 | '@vue/server-renderer': 3.2.39_vue@3.2.39 1956 | '@vue/shared': 3.2.39 1957 | 1958 | /vue3-seamless-scroll/2.0.1: 1959 | resolution: {integrity: sha512-mI3BaDU3pjcPUhVSw3/xNKdfPBDABTi/OdZaZqKysx4cSdNfGRbVvGNDzzptBbJ5S7imv5T55l6x/SqgnxKreg==, registry: https://registry.npm.taobao.org/} 1960 | dependencies: 1961 | throttle-debounce: 5.0.0 1962 | dev: false 1963 | 1964 | /webpack-sources/3.2.3: 1965 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, registry: https://registry.npm.taobao.org/} 1966 | engines: {node: '>=10.13.0'} 1967 | dev: true 1968 | 1969 | /webpack-virtual-modules/0.4.5: 1970 | resolution: {integrity: sha512-8bWq0Iluiv9lVf9YaqWQ9+liNgXSHICm+rg544yRgGYaR8yXZTVBaHZkINZSB2yZSWo4b0F6MIxqJezVfOEAlg==, registry: https://registry.npm.taobao.org/} 1971 | dev: true 1972 | 1973 | /yallist/4.0.0: 1974 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npm.taobao.org/} 1975 | dev: true 1976 | 1977 | /zrender/5.3.2: 1978 | resolution: {integrity: sha512-8IiYdfwHj2rx0UeIGZGGU4WEVSDEdeVCaIg/fomejg1Xu6OifAL1GVzIPHg2D+MyUkbNgPWji90t0a8IDk+39w==, registry: https://registry.npm.taobao.org/} 1979 | dependencies: 1980 | tslib: 2.3.0 1981 | dev: false 1982 | 1983 | registry.npmmirror.com/@types/lodash/4.14.186: 1984 | resolution: {integrity: sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.186.tgz} 1985 | name: '@types/lodash' 1986 | version: 4.14.186 1987 | dev: true 1988 | 1989 | registry.npmmirror.com/dayjs/1.11.5: 1990 | resolution: {integrity: sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz} 1991 | name: dayjs 1992 | version: 1.11.5 1993 | dev: false 1994 | 1995 | registry.npmmirror.com/lodash/4.17.21: 1996 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz} 1997 | name: lodash 1998 | version: 4.17.21 1999 | dev: false 2000 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - "packages/**" 3 | - "projects/**" -------------------------------------------------------------------------------- /projects/demo/.env.development: -------------------------------------------------------------------------------- 1 | VITE_APP_ENV=DEVELOPE 2 | -------------------------------------------------------------------------------- /projects/demo/.env.production: -------------------------------------------------------------------------------- 1 | VITE_APP_ENV=RELEASE -------------------------------------------------------------------------------- /projects/demo/.env.simulater: -------------------------------------------------------------------------------- 1 | VITE_APP_ENV=SIMULATER -------------------------------------------------------------------------------- /projects/demo/.env.testing: -------------------------------------------------------------------------------- 1 | VITE_APP_ENV=TEST -------------------------------------------------------------------------------- /projects/demo/.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 | -------------------------------------------------------------------------------- /projects/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 数据监控平台 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /projects/demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demo", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite --mode development", 8 | "build": "vue-tsc --noEmit && vite build", 9 | "build:test": "vue-tsc --noEmit && vite build --mode testing", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "@ztstory/datav-core": "workspace:^1.0.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /projects/demo/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /projects/demo/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 25 | -------------------------------------------------------------------------------- /projects/demo/src/assets/330110.geo.json: -------------------------------------------------------------------------------- 1 | {"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.34148,30.47146],[120.34064,30.46604],[120.33725,30.46431],[120.33686,30.45812],[120.33787,30.45191],[120.33996,30.44954],[120.34097,30.44161],[120.33943,30.44001],[120.34034,30.43388],[120.33076,30.42727],[120.33268,30.42466],[120.33297,30.41731],[120.32481,30.41198],[120.32152,30.40771],[120.32206,30.40474],[120.31534,30.40065],[120.31011,30.40012],[120.30622,30.39673],[120.30895,30.39328],[120.3157,30.39433],[120.31883,30.3888],[120.31928,30.37933],[120.33942,30.37332],[120.34293,30.37161],[120.34434,30.36809],[120.33599,30.36107],[120.32825,30.35866],[120.32571,30.35338],[120.30724,30.35062],[120.30076,30.34758],[120.30157,30.34393],[120.29663,30.33597],[120.29357,30.325],[120.30012,30.32499],[120.29936,30.31543],[120.29163,30.31533],[120.29196,30.31782],[120.27263,30.32045],[120.28189,30.3285],[120.27932,30.33669],[120.27788,30.33795],[120.26654,30.33133],[120.26806,30.32867],[120.26444,30.32657],[120.25848,30.33435],[120.26087,30.33546],[120.26146,30.33753],[120.25018,30.33749],[120.24435,30.34424],[120.23606,30.33978],[120.23477,30.34069],[120.24225,30.34827],[120.24395,30.35412],[120.24356,30.35819],[120.2471,30.36234],[120.23998,30.37215],[120.23482,30.37668],[120.23791,30.38003],[120.24032,30.38762],[120.23758,30.39006],[120.22858,30.39354],[120.22131,30.38715],[120.21677,30.38789],[120.20991,30.39255],[120.19248,30.39615],[120.18617,30.38802],[120.18633,30.38458],[120.18465,30.38208],[120.17516,30.37211],[120.173,30.37311],[120.17192,30.37599],[120.16745,30.37759],[120.16225,30.37255],[120.16002,30.37257],[120.15761,30.37523],[120.15386,30.37631],[120.15463,30.38014],[120.15365,30.38073],[120.15207,30.3808],[120.14535,30.37601],[120.14074,30.37617],[120.13853,30.37809],[120.13908,30.38032],[120.12981,30.38294],[120.12898,30.3798],[120.1302,30.36275],[120.13696,30.34338],[120.1243,30.33801],[120.11698,30.33804],[120.11357,30.33996],[120.10114,30.343],[120.09907,30.34165],[120.09947,30.33637],[120.09174,30.3334],[120.08995,30.33494],[120.08581,30.33117],[120.08187,30.33563],[120.07975,30.34182],[120.07466,30.34775],[120.06945,30.3507],[120.06733,30.35544],[120.06498,30.35518],[120.06536,30.35281],[120.06379,30.35215],[120.06087,30.35335],[120.06061,30.3515],[120.05469,30.35157],[120.05019,30.34987],[120.04867,30.35353],[120.04661,30.35391],[120.04651,30.35221],[120.0386,30.35095],[120.0328,30.35164],[120.02384,30.34836],[120.02599,30.34522],[120.02666,30.33379],[120.01762,30.33237],[120.01781,30.32973],[120.02135,30.32909],[120.02228,30.32677],[120.02356,30.32674],[120.02424,30.31737],[120.02351,30.31594],[120.02056,30.31568],[120.02179,30.31187],[120.02713,30.31065],[120.02606,30.3061],[120.03081,30.29984],[120.04294,30.30416],[120.04801,30.30319],[120.05433,30.29742],[120.0548,30.29524],[120.05162,30.29055],[120.05227,30.28932],[120.05673,30.2884],[120.05281,30.28289],[120.0497,30.27514],[120.05238,30.27323],[120.05649,30.27337],[120.05852,30.2528],[120.05531,30.25148],[120.05524,30.24539],[120.05268,30.24533],[120.052,30.24334],[120.04617,30.24272],[120.04431,30.24048],[120.04453,30.23805],[120.04117,30.23612],[120.04063,30.23284],[120.03812,30.23289],[120.03214,30.2297],[120.03048,30.23048],[120.01686,30.22483],[120.02027,30.21819],[120.01838,30.21645],[120.01544,30.21807],[120.01352,30.21619],[120.01036,30.22119],[120.0072,30.22101],[120.00999,30.21563],[120.01571,30.21342],[120.01803,30.21431],[120.01799,30.21308],[120.01731,30.21166],[120.00717,30.20875],[120.00626,30.20664],[120.00927,30.2002],[120.00909,30.19562],[120.00345,30.19187],[119.99634,30.18154],[119.99014,30.17642],[119.98414,30.1741],[119.97431,30.17511],[119.96939,30.17427],[119.96467,30.17285],[119.95928,30.168],[119.95116,30.1683],[119.9454,30.16501],[119.942,30.16048],[119.93873,30.1587],[119.93434,30.1602],[119.9331,30.16395],[119.93284,30.16963],[119.93502,30.17899],[119.92974,30.18813],[119.92155,30.19091],[119.91451,30.19183],[119.90915,30.19089],[119.90394,30.18764],[119.89392,30.19322],[119.87165,30.18266],[119.86198,30.18072],[119.85347,30.17493],[119.85016,30.18135],[119.84904,30.18808],[119.84266,30.19112],[119.8361,30.1987],[119.84161,30.20667],[119.84541,30.22189],[119.8518,30.22385],[119.85666,30.22785],[119.86299,30.23785],[119.86752,30.2498],[119.86831,30.25271],[119.86386,30.25681],[119.86083,30.26323],[119.86221,30.26939],[119.86107,30.27159],[119.85368,30.27385],[119.84682,30.27025],[119.84423,30.27219],[119.8298,30.26862],[119.8285,30.26922],[119.82928,30.27855],[119.82747,30.283],[119.83043,30.28633],[119.83697,30.29015],[119.83629,30.29928],[119.83344,30.30713],[119.82631,30.30675],[119.80803,30.29534],[119.7999,30.29749],[119.79907,30.30175],[119.80356,30.31146],[119.80385,30.3161],[119.80227,30.32261],[119.80656,30.32585],[119.80767,30.32899],[119.80465,30.3424],[119.79824,30.34469],[119.79119,30.35766],[119.78034,30.36565],[119.77398,30.36799],[119.77276,30.3739],[119.77112,30.376],[119.75753,30.37856],[119.7499,30.3814],[119.74927,30.38376],[119.75023,30.38529],[119.75544,30.38836],[119.7539,30.39023],[119.74644,30.39344],[119.74233,30.39333],[119.73557,30.39568],[119.72626,30.38962],[119.722,30.38837],[119.70402,30.39969],[119.68109,30.40872],[119.68603,30.41754],[119.69352,30.42449],[119.69641,30.42668],[119.70727,30.43003],[119.70912,30.43327],[119.70294,30.44511],[119.69493,30.45274],[119.69456,30.46391],[119.69936,30.46534],[119.70173,30.468],[119.70257,30.47326],[119.70824,30.48516],[119.70889,30.48796],[119.70471,30.49456],[119.70856,30.49829],[119.70918,30.50883],[119.70488,30.52598],[119.70027,30.53114],[119.69499,30.54234],[119.6924,30.55614],[119.69373,30.55887],[119.70408,30.55912],[119.71173,30.56652],[119.71691,30.5648],[119.72161,30.56094],[119.72905,30.55176],[119.74326,30.55017],[119.76896,30.55136],[119.77084,30.54966],[119.77202,30.54643],[119.7686,30.53726],[119.76771,30.52266],[119.76687,30.52083],[119.76145,30.51799],[119.7664,30.51408],[119.78406,30.51102],[119.79462,30.5047],[119.81588,30.51067],[119.81837,30.51011],[119.82957,30.50296],[119.83246,30.49878],[119.83603,30.49659],[119.84131,30.49638],[119.84604,30.49842],[119.84715,30.50197],[119.85008,30.50292],[119.85412,30.49397],[119.86017,30.48622],[119.86477,30.48253],[119.86712,30.47778],[119.8696,30.47698],[119.87781,30.47793],[119.88081,30.47621],[119.88038,30.47421],[119.87436,30.47117],[119.87282,30.46707],[119.8726,30.46249],[119.87369,30.46092],[119.88442,30.45975],[119.89456,30.45532],[119.90304,30.45941],[119.90932,30.45632],[119.91882,30.4616],[119.92492,30.46219],[119.93141,30.45646],[119.93171,30.44883],[119.93497,30.44678],[119.94418,30.44714],[119.94918,30.44534],[119.95234,30.44186],[119.95274,30.43875],[119.95587,30.43366],[119.95961,30.43234],[119.96928,30.43208],[119.97501,30.43944],[119.98297,30.44528],[119.9871,30.44614],[120.0037,30.44429],[120.01189,30.43602],[120.03111,30.43516],[120.04155,30.43338],[120.04414,30.43196],[120.0461,30.42744],[120.06423,30.42976],[120.06464,30.43142],[120.06202,30.43514],[120.0659,30.43736],[120.06794,30.44114],[120.06832,30.44515],[120.06242,30.45158],[120.05952,30.45778],[120.05948,30.47343],[120.06533,30.48194],[120.06828,30.49661],[120.07608,30.49536],[120.08073,30.49715],[120.09924,30.49579],[120.09982,30.49413],[120.09657,30.48865],[120.09765,30.48452],[120.10733,30.48122],[120.11123,30.47619],[120.11513,30.47587],[120.12262,30.47912],[120.147,30.48236],[120.14781,30.47932],[120.14675,30.47232],[120.15021,30.46745],[120.16036,30.46991],[120.16247,30.47314],[120.17139,30.47426],[120.17506,30.47683],[120.17335,30.48384],[120.17883,30.48138],[120.18054,30.48254],[120.17769,30.48603],[120.17776,30.48861],[120.17373,30.49221],[120.17687,30.49389],[120.17915,30.49194],[120.18591,30.49463],[120.18228,30.49624],[120.18221,30.49963],[120.18509,30.50262],[120.19673,30.50423],[120.19581,30.50946],[120.19658,30.51203],[120.20024,30.51491],[120.20175,30.51443],[120.20331,30.50782],[120.20541,30.50586],[120.21252,30.50978],[120.22072,30.51026],[120.23929,30.50524],[120.25193,30.50654],[120.26124,30.50524],[120.27342,30.50603],[120.27745,30.50484],[120.28213,30.50869],[120.28583,30.5078],[120.28686,30.511],[120.28928,30.51303],[120.29819,30.5156],[120.2999,30.51982],[120.3177,30.5216],[120.31991,30.51849],[120.32266,30.50649],[120.32614,30.50043],[120.3279,30.4842],[120.3258,30.48078],[120.32919,30.46842],[120.33132,30.4684],[120.33506,30.47135],[120.34137,30.47227],[120.34148,30.47146]]]},"properties":{"name":"余杭区","adcode":"330110","telecode":"0571","level":"district","parent":{"name":"杭州市","level":"city","adcode":"330100","center":{"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG:6.3:4326"}},"type":"Point","coordinates":[120.153576,30.287459]}},"center":{"lng":120.301737,"lat":30.421187}}}]} 2 | -------------------------------------------------------------------------------- /projects/demo/src/assets/DS-DIGI-1.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZTStory/vue-datav/48554ce59d0a695e58b9f980b13f7d680f5b91dd/projects/demo/src/assets/DS-DIGI-1.ttf -------------------------------------------------------------------------------- /projects/demo/src/assets/DS-DIGIB-2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZTStory/vue-datav/48554ce59d0a695e58b9f980b13f7d680f5b91dd/projects/demo/src/assets/DS-DIGIB-2.ttf -------------------------------------------------------------------------------- /projects/demo/src/assets/app.variable.less: -------------------------------------------------------------------------------- 1 | @import "@ztstory/datav-core/src/assets/app.variable.less"; 2 | -------------------------------------------------------------------------------- /projects/demo/src/assets/female.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 女性 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /projects/demo/src/assets/male.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 男性 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /projects/demo/src/assets/vue.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /projects/demo/src/components/ArriveNumber.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 101 | 102 | 109 | -------------------------------------------------------------------------------- /projects/demo/src/components/BasicData.vue: -------------------------------------------------------------------------------- 1 | 57 | 58 | 149 | 150 | 173 | -------------------------------------------------------------------------------- /projects/demo/src/components/CheckNumber.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 37 | 38 | 45 | -------------------------------------------------------------------------------- /projects/demo/src/components/DeparturesNumber.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 35 | 36 | 43 | -------------------------------------------------------------------------------- /projects/demo/src/components/DirectionOfPeople.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 56 | 57 | 64 | -------------------------------------------------------------------------------- /projects/demo/src/components/HotlineTop10.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 39 | 40 | 63 | -------------------------------------------------------------------------------- /projects/demo/src/components/IndexMap.ts: -------------------------------------------------------------------------------- 1 | const hangzhouCoord = [120.21, 30.25]; 2 | const zheJiangOtherCoords = [ 3 | { 4 | name: "绍兴", 5 | coords: [120.58, 30.05], 6 | }, 7 | { 8 | name: "宁波", 9 | coords: [121.62, 29.86], 10 | }, 11 | { 12 | name: "湖州", 13 | coords: [120.09, 30.89], 14 | }, 15 | { 16 | name: "金华", 17 | coords: [119.65, 29.08], 18 | }, 19 | { 20 | name: "丽水", 21 | coords: [119.92, 28.47], 22 | }, 23 | { 24 | name: "温州", 25 | coords: [120.7, 27.99], 26 | }, 27 | { 28 | name: "衢州", 29 | coords: [118.86, 28.97], 30 | }, 31 | { 32 | name: "台州", 33 | coords: [121.42, 28.66], 34 | }, 35 | { 36 | name: "嘉兴", 37 | coords: [120.76, 30.75], 38 | }, 39 | { 40 | name: "舟山", 41 | coords: [122.21, 29.99], 42 | }, 43 | ]; 44 | const planePath = 45 | "path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z"; 46 | const linesSeries = zheJiangOtherCoords.map((v, index) => { 47 | return { 48 | type: "lines", 49 | zlevel: index + 101, 50 | effect: { 51 | constantSpeed: 30, 52 | show: true, 53 | color: "#00feff", 54 | symbol: "pin", 55 | symbolSize: 3, 56 | trailLength: 0.3, 57 | }, 58 | symbol: ["circle", "arrow"], 59 | symbolSize: 5, 60 | lineStyle: { 61 | normal: { 62 | color: "rgba(0, 254, 255, 0.3)", 63 | width: 0.5, 64 | curveness: 0.2, 65 | }, 66 | }, 67 | data: [ 68 | { 69 | coords: [hangzhouCoord, v.coords], 70 | }, 71 | ], 72 | }; 73 | }); 74 | 75 | export const mapOpts = { 76 | color: ["#012746"], 77 | selectedModel: false, 78 | geo: { 79 | map: "ZheJiang", 80 | zlevel: 99, 81 | bottom: 60, 82 | left: 60, 83 | right: 60, 84 | top: 60, 85 | show: true, 86 | layoutCenter: ["50%", "50%"], 87 | label: { 88 | show: true, 89 | color: "#fff", 90 | }, 91 | itemStyle: { 92 | areaColor: "transparent", 93 | borderColor: "#2763A4", 94 | borderWidth: 1, 95 | }, 96 | emphasis: { 97 | label: { 98 | color: "#fff", 99 | }, 100 | itemStyle: { 101 | areaColor: "#6AA8EE", 102 | }, 103 | }, 104 | select: { 105 | label: { 106 | color: "#fff", 107 | }, 108 | itemStyle: { 109 | areaColor: "#6AA8ff99", 110 | }, 111 | }, 112 | regions: [ 113 | { 114 | name: "杭州市", 115 | selected: true, 116 | }, 117 | ], 118 | }, 119 | series: [ 120 | { 121 | // effectScatter画散点【起点】 122 | type: "effectScatter", 123 | coordinateSystem: "geo", 124 | zlevel: 100, 125 | symbolSize: 15, 126 | symbol: planePath, 127 | symbolRotate: -90, 128 | rippleEffect: { 129 | period: 3, 130 | brushType: "fill", 131 | scale: 3, 132 | number: 3, 133 | }, 134 | itemStyle: { 135 | color: "#00feff", 136 | opacity: 0.7, 137 | }, 138 | data: [[120.21, 30.25]], 139 | }, 140 | ...linesSeries, 141 | ], 142 | }; 143 | -------------------------------------------------------------------------------- /projects/demo/src/components/RealtimeTicketCount.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 71 | 72 | 80 | -------------------------------------------------------------------------------- /projects/demo/src/components/RealtimeTicketPrice.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 165 | 166 | 198 | -------------------------------------------------------------------------------- /projects/demo/src/config/project.config.ts: -------------------------------------------------------------------------------- 1 | import { ENV_MODE, BBProjectConfig } from "@ztstory/datav-core/src/config/project.config"; 2 | 3 | interface BProjectConfig extends BBProjectConfig { 4 | token: string; 5 | } 6 | 7 | export const ProjectConfig: BProjectConfig = { 8 | env: import.meta.env.VITE_APP_ENV ?? ENV_MODE.RELEASE, 9 | projectVer: "1.0.0", 10 | token: "", 11 | }; 12 | -------------------------------------------------------------------------------- /projects/demo/src/main.less: -------------------------------------------------------------------------------- 1 | @import "@ztstory/datav-core/src/assets/app.variable.less"; 2 | @import "@ztstory/datav-core/src/assets/app.dynamic.less"; 3 | @import "@ztstory/datav-core/src/assets/app.flex.less"; 4 | @import "@ztstory/datav-core/src/assets/app.common.less"; 5 | 6 | @font-face { 7 | font-family: ds-digi; 8 | src: url(./assets/DS-DIGI-1.ttf); 9 | } 10 | 11 | @font-face { 12 | font-family: ds-digi-b; 13 | src: url(./assets/DS-DIGIB-2.ttf); 14 | } 15 | -------------------------------------------------------------------------------- /projects/demo/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | // import "./style.css"; 3 | import App from "./App.vue"; 4 | 5 | const app = createApp(App); 6 | 7 | app.mount("#app"); 8 | -------------------------------------------------------------------------------- /projects/demo/src/model/model.ts: -------------------------------------------------------------------------------- 1 | interface HistoryDatas1 { 2 | hotRouteList: RouteItem[]; 3 | shiftList: CountDateItem[]; 4 | peopleList: CountDateItem[]; 5 | priceList: CountRangeItem[]; 6 | ageList: CountRangeItem[]; 7 | sexList: SexItem[]; 8 | flowDirectionList: FlowDirectionItem[]; 9 | } 10 | 11 | interface RouteItem { 12 | sort: string; 13 | routeName: string; 14 | count: string; 15 | } 16 | 17 | interface CountDateItem { 18 | timestamp: number; 19 | dateFormat: string; 20 | count: string; 21 | } 22 | 23 | interface CountRangeItem { 24 | range: { Minimum: string; Maximum: string }; 25 | rangeFormat: string; 26 | count: string; 27 | } 28 | 29 | interface SexItem { 30 | sex: string; 31 | count: string; 32 | } 33 | 34 | interface RealTimeDatas1 { 35 | accumulateTicketCount: string; 36 | ticketTypeList: TicketTypeItem[]; 37 | ticketPriceList: TicketPriceItem[]; 38 | saleTicketList: CountDateItem[]; 39 | checkTicketList: CountDateItem[]; 40 | flowDirectionList: FlowDirectionItem[]; 41 | } 42 | 43 | interface TicketTypeItem { 44 | type: string; 45 | count: string; 46 | price: string; 47 | } 48 | 49 | interface TicketPriceItem { 50 | type: string; 51 | price: string; 52 | } 53 | 54 | interface FlowDirectionItem { 55 | target: string; 56 | count: string; 57 | } 58 | 59 | export type HistoryDatas = Partial; 60 | export type RealTimeDatas = Partial; 61 | export type { RouteItem, CountDateItem, CountRangeItem, TicketPriceItem, TicketTypeItem, FlowDirectionItem, SexItem }; 62 | -------------------------------------------------------------------------------- /projects/demo/src/pages/index.vue: -------------------------------------------------------------------------------- 1 | 62 | 63 | 222 | 223 | 224 | -------------------------------------------------------------------------------- /projects/demo/src/utils/string.util.ts: -------------------------------------------------------------------------------- 1 | const _randomCharStr = "abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQQRSTUVWXYZ1234567890"; 2 | /** 3 | * 生成随机字符串 4 | * @param count 字符串长度 5 | * @returns 6 | */ 7 | export function randomString(count = 8) { 8 | let uuid = ""; 9 | for (let index = 0; index < count; index++) { 10 | const random = Math.random() * _randomCharStr.length; 11 | uuid += _randomCharStr.charAt(Math.floor(random)); 12 | } 13 | return uuid; 14 | } 15 | -------------------------------------------------------------------------------- /projects/demo/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | import { VNode } from 'vue'; 4 | 5 | declare module '*.vue' { 6 | import type { DefineComponent } from 'vue' 7 | const component: DefineComponent<{}, {}, any> 8 | export default component 9 | } 10 | 11 | 12 | 13 | declare type VueNode = VNode; 14 | declare global { 15 | namespace JSX { 16 | interface IntrinsicElements { 17 | [elem: string]: unknown; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /projects/demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "moduleResolution": "Node", 7 | "strict": true, 8 | "jsx": "preserve", 9 | "jsxFactory": "h", 10 | "sourceMap": true, 11 | "resolveJsonModule": true, 12 | "isolatedModules": true, 13 | "esModuleInterop": true, 14 | "lib": ["ESNext", "DOM"], 15 | "skipLibCheck": true, 16 | "baseUrl": ".", 17 | "paths": { 18 | "@/*": ["src/*"] 19 | } 20 | }, 21 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], 22 | "references": [{ "path": "./tsconfig.node.json" }] 23 | } 24 | -------------------------------------------------------------------------------- /projects/demo/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "allowSyntheticDefaultImports": true 7 | }, 8 | "include": ["vite.config.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /projects/demo/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import vue from "@vitejs/plugin-vue"; 3 | import { resolve } from "path"; 4 | import viteCompression from "vite-plugin-compression"; 5 | import pxtovw from "postcss-px-to-viewport"; 6 | 7 | // postcss-px-to-viewport config 8 | const pxtovw_config = pxtovw({ 9 | unitToConvert: "px", // 要转化的单位 10 | viewportWidth: 1920, // UI设计稿的宽度 11 | unitPrecision: 6, // 转换后的精度,即小数点位数 12 | propList: ["*"], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换 13 | viewportUnit: "vw", // 指定需要转换成的视窗单位,默认vw 14 | fontViewportUnit: "vw", // 指定字体需要转换成的视窗单位,默认vw 15 | selectorBlackList: ["ignore-"], // 指定不转换为视窗单位的类名, 16 | minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换 17 | mediaQuery: false, // 是否在媒体查询的css代码中也进行转换,默认false 18 | replace: true, // 是否转换后直接更换属性值 19 | }); 20 | 21 | // https://vitejs.dev/config/ 22 | export default defineConfig({ 23 | base: process.env.NODE_ENV === "production" ? "/vue-datav/" : "/", 24 | plugins: [ 25 | vue(), 26 | // gzip压缩 27 | viteCompression({ 28 | verbose: true, 29 | disable: false, 30 | threshold: 10240, 31 | algorithm: "gzip", 32 | ext: ".gz", 33 | }), 34 | ], 35 | // 配置别名 36 | resolve: { 37 | alias: { 38 | "@": resolve(__dirname, "src"), 39 | }, 40 | }, 41 | css: { 42 | // 调整为 scale 方案 43 | // postcss: { 44 | // plugins: [pxtovw_config], 45 | // }, 46 | preprocessorOptions: { 47 | less: { 48 | javascriptEnabled: true, 49 | additionalData: `@import "@/assets/app.variable.less";`, 50 | }, 51 | }, 52 | }, 53 | server: { 54 | open: true, 55 | host: true, 56 | https: false, 57 | proxy: { 58 | "/api": { 59 | target: "http://10.26.180.13:8003", 60 | changeOrigin: true, 61 | rewrite: (path) => path.replace(/^\/api/, ""), 62 | }, 63 | }, 64 | }, 65 | build: { 66 | target: "esnext", 67 | }, 68 | }); 69 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "useDefineForClassFields": true, 5 | "module": "umd", 6 | "moduleResolution": "node", 7 | "strict": true, 8 | "jsx": "preserve", 9 | "jsxFactory": "h", 10 | "isolatedModules": false, 11 | "esModuleInterop": true, 12 | "lib": ["esnext", "dom"], 13 | "skipLibCheck": true 14 | } 15 | } 16 | --------------------------------------------------------------------------------