diff --git a/.workflow/branch-pipeline.yml b/.workflow/branch-pipeline.yml new file mode 100644 index 00000000..1128d8a4 --- /dev/null +++ b/.workflow/branch-pipeline.yml @@ -0,0 +1,51 @@ +version: '1.0' +name: branch-pipeline +displayName: BranchPipeline +stages: + - stage: + name: compile + displayName: 编译 + steps: + - step: build@nodejs + name: build_nodejs + displayName: Nodejs 构建 + # 支持8.16.2、10.17.0、12.16.1、14.16.0、15.12.0五个版本 + nodeVersion: 14.16.0 + # 构建命令:安装依赖 -> 清除上次打包产物残留 -> 执行构建 【请根据项目实际产出进行填写】 + commands: + - npm install && rm -rf ./dist && npm run build + # 非必填字段,开启后表示将构建产物暂存,但不会上传到制品库中,7天后自动清除 + artifacts: + # 构建产物名字,作为产物的唯一标识可向下传递,支持自定义,默认为BUILD_ARTIFACT。在下游可以通过${BUILD_ARTIFACT}方式引用来获取构建物地址 + - name: BUILD_ARTIFACT + # 构建产物获取路径,是指代码编译完毕之后构建物的所在路径 + path: + - ./dist + - step: publish@general_artifacts + name: publish_general_artifacts + displayName: 上传制品 + # 上游构建任务定义的产物名,默认BUILD_ARTIFACT + dependArtifact: BUILD_ARTIFACT + # 上传到制品库时的制品命名,默认output + artifactName: output + dependsOn: build_nodejs + - stage: + name: release + displayName: 发布 + steps: + - step: publish@release_artifacts + name: publish_release_artifacts + displayName: '发布' + # 上游上传制品任务的产出 + dependArtifact: output + # 发布制品版本号 + version: '1.0.0.0' + # 是否开启版本号自增,默认开启 + autoIncrement: true +triggers: + push: + branches: + exclude: + - master + include: + - .* diff --git a/.workflow/master-pipeline.yml b/.workflow/master-pipeline.yml new file mode 100644 index 00000000..8faf2bcc --- /dev/null +++ b/.workflow/master-pipeline.yml @@ -0,0 +1,49 @@ +version: '1.0' +name: master-pipeline +displayName: MasterPipeline +stages: + - stage: + name: compile + displayName: 编译 + steps: + - step: build@nodejs + name: build_nodejs + displayName: Nodejs 构建 + # 支持8.16.2、10.17.0、12.16.1、14.16.0、15.12.0五个版本 + nodeVersion: 14.16.0 + # 构建命令:安装依赖 -> 清除上次打包产物残留 -> 执行构建 【请根据项目实际产出进行填写】 + commands: + - npm install && rm -rf ./dist && npm run build + # 非必填字段,开启后表示将构建产物暂存,但不会上传到制品库中,7天后自动清除 + artifacts: + # 构建产物名字,作为产物的唯一标识可向下传递,支持自定义,默认为BUILD_ARTIFACT。在下游可以通过${BUILD_ARTIFACT}方式引用来获取构建物地址 + - name: BUILD_ARTIFACT + # 构建产物获取路径,是指代码编译完毕之后构建物的所在路径 + path: + - ./dist + - step: publish@general_artifacts + name: publish_general_artifacts + displayName: 上传制品 + # 上游构建任务定义的产物名,默认BUILD_ARTIFACT + dependArtifact: BUILD_ARTIFACT + # 上传到制品库时的制品命名,默认output + artifactName: output + dependsOn: build_nodejs + - stage: + name: release + displayName: 发布 + steps: + - step: publish@release_artifacts + name: publish_release_artifacts + displayName: '发布' + # 上游上传制品任务的产出 + dependArtifact: output + # 发布制品版本号 + version: '1.0.0.0' + # 是否开启版本号自增,默认开启 + autoIncrement: true +triggers: + push: + branches: + include: + - master diff --git a/.workflow/pr-pipeline.yml b/.workflow/pr-pipeline.yml new file mode 100644 index 00000000..1a05dd09 --- /dev/null +++ b/.workflow/pr-pipeline.yml @@ -0,0 +1,36 @@ +version: '1.0' +name: pr-pipeline +displayName: PRPipeline +stages: + - stage: + name: compile + displayName: 编译 + steps: + - step: build@nodejs + name: build_nodejs + displayName: Nodejs 构建 + # 支持8.16.2、10.17.0、12.16.1、14.16.0、15.12.0五个版本 + nodeVersion: 14.16.0 + # 构建命令:安装依赖 -> 清除上次打包产物残留 -> 执行构建 【请根据项目实际产出进行填写】 + commands: + - npm install && rm -rf ./dist && npm run build + # 非必填字段,开启后表示将构建产物暂存,但不会上传到制品库中,7天后自动清除 + artifacts: + # 构建产物名字,作为产物的唯一标识可向下传递,支持自定义,默认为BUILD_ARTIFACT。在下游可以通过${BUILD_ARTIFACT}方式引用来获取构建物地址 + - name: BUILD_ARTIFACT + # 构建产物获取路径,是指代码编译完毕之后构建物的所在路径 + path: + - ./dist + - step: publish@general_artifacts + name: publish_general_artifacts + displayName: 上传制品 + # 上游构建任务定义的产物名,默认BUILD_ARTIFACT + dependArtifact: BUILD_ARTIFACT + # 上传到制品库时的制品命名,默认output + artifactName: output + dependsOn: build_nodejs +triggers: + pr: + branches: + include: + - master diff --git a/README.md b/README.md index 07d8d788..20d664d2 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,35 @@ ## 总览 -![logo](readme/logo-t-y.png) +

+ go-view +

-GoView 是一个高效的拖拽式低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可制作数据大屏,减少心智负担。 +

开源、精美、便捷的「数据可视化」低代码开发平台

-### 😶 纯 **前端** 分支: **`master`** +#### 😶 **纯前端** 分支: **`master`** -### 👻 携带 **后端** 请求分支: **`master-fetch`** +#### 👻 携带 **后端** 请求分支: **`master-fetch`** -### 📚 GoView **文档** 地址:[http://www.mtruning.club:81/](http://www.mtruning.club:81/) +#### 📚 GoView **文档** 地址:[https://www.mtruning.club/](https://www.mtruning.club/) -项目纯前端-Demo 地址:[https://www.mtruning.club](https://www.mtruning.club) +项目纯前端-Demo 地址:[https://vue.mtruning.club/](https://vue.mtruning.club/) -项目带后端-Demo 地址:[后端 Demo 地址](http://1.117.240.165:8080/goview/#/login) - -文档-在线地址:[http://www.mtruning.club:81/](http://www.mtruning.club:81/) +项目带后端-Demo 地址:[https://demo.mtruning.club/](https://demo.mtruning.club/) 文档-源码地址:[https://gitee.com/MTrun/go-view-doc](https://gitee.com/MTrun/go-view-doc) -### 🤯 后端项目 +Cloud IDE 代码在线预览地址:[https://idegitee.com/dromara/go-view](https://idegitee.com/dromara/go-view) +#### 🤯 后端项目看这里! -后端项目gitee地址:[https://gitee.com/MTrun/go-view-serve](https://gitee.com/MTrun/go-view-serve) +后端项目 gitee 地址:[https://gitee.com/MTrun/go-view-serve](https://gitee.com/MTrun/go-view-serve) -接口说明地址:[https://docs.apipost.cn/preview/5aa85d10a59d66ce/ddb813732007ad2b?target_id=84dbc5b0-158f-4bcb-8f74-793ac604ada3#3e053622-1e76-43f9-a039-756aee822dbb](https://docs.apipost.cn/preview/5aa85d10a59d66ce/ddb813732007ad2b?target_id=84dbc5b0-158f-4bcb-8f74-793ac604ada3#3e053622-1e76-43f9-a039-756aee822dbb) +接口说明地址:[https://docs.apipost.cn/...](https://docs.apipost.cn/preview/5aa85d10a59d66ce/ddb813732007ad2b?target_id=84dbc5b0-158f-4bcb-8f74-793ac604ada3#3e053622-1e76-43f9-a039-756aee822dbb) -技术点: +其它后端方案地址: + +- 【.NET】[https://gitee.com/sun_xiang_yu/go-view-dotnet](https://gitee.com/sun_xiang_yu/go-view-dotnet) + +#### 整体介绍 - 框架:基于 `Vue3` 框架编写,使用 `hooks` 写法抽离部分逻辑,使代码结构更加清晰; @@ -36,17 +41,29 @@ GoView 是一个高效的拖拽式低代码数据可视化开发平台,将图 - 封装:项目进行了详细的工具类封装如:路由、存储、加/解密、文件处理、主题、NaiveUI 全局方法、组件等 +说明文档: +![说明文档](readme/go-view-doc.png) + 工作台: -![项目截图](readme/go-view-canvas.png) +![工作台](readme/go-view-canvas.png) 请求配置: -![项目截图](readme/go-view-fetch.png) +![请求配置](readme/go-view-fetch.png) 数据过滤: -![项目截图](readme/go-view-filter.png) +![数据过滤](readme/go-view-filter.png) + +高级事件编辑: +![高级事件编辑](readme/go-view-event.png) + +快捷主页: +![快捷主页](readme/go-view-indexpage.png) 主题色: -![项目截图](readme/go-view-color.png) +![主题色](readme/go-view-color.png) + +亮白主题: +![亮白主题](readme/go-view-theme.png) 主要技术栈为: @@ -66,14 +83,17 @@ GoView 是一个高效的拖拽式低代码数据可视化开发平台,将图 已完成图表: -| 分类 | 名称 | 名称 | 名称 | -| ------ | ---------------- | ---------------- | -------- | -| 图表 | 柱状图 | 横向柱状图 | 折线图 | -| \* | 单/多 折线面积图 | 饼图 | 水球图 | -| \* | 环形图 | NaiveUI 多种进度 | 🤠 | -| 信息 | 文字 | 图片 | 😶 | -| 列表 | 滚动排名列表 | 滚动表格 | 🤓 | -| 小组件 | 边框-01~13 | 装饰-01~05 | 数字翻牌 | +| 分类 | 名称 | 名称 | 名称 | 名称 | +| ------ | ---------------- | ---------- | -------------- | ------------------------ | +| 图表 | 柱状图 | 横向柱状图 | 折线图 | 单/多 折线面积图(渐变色) | +| \* | 饼图 | 环形图 | 水球图 | 雷达图 | +| \* | NaiveUI 多种进度 | 散点图 | 对数回归散点图 | 热力图 | +| \* | 漏斗图 | 中国地图 | 高德地图 | 🦊 | +| 信息 | 文字 | 渐变文字 | 词云 | 嵌套网页 | +| \* | 图片 | 视频 | 😺 | 🐯 | +| 列表 | 滚动排名列表 | 滚动表格 | 🐮 | 🐐 | +| 小组件 | 边框-01~13 | 装饰-01~05 | 数字翻牌 | 通用时间 | +| \* | 数字计数 | 倒计时 | 时钟 | 🦁 | ## 浏览器支持 @@ -91,8 +111,7 @@ pnpm install #yarn yarn install -#npm -npm install +# 千万不要使用 npm 会报错 ``` ## 启动 @@ -101,9 +120,6 @@ npm install #pnpm pnpm dev -# npm -npm run dev - #yarn yarn dev @@ -117,9 +133,6 @@ make dev #pnpm pnpm run build -# npm -npm run build - #yarn yarn run build diff --git a/package.json b/package.json index a08b8897..f8526f32 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "go-view", - "version": "1.1.11", + "version": "1.1.6", "scripts": { "dev": "vite --host", "build": "vue-tsc --noEmit && vite build", @@ -21,6 +21,7 @@ "axios": "^0.27.2", "color": "^4.2.3", "crypto-js": "^4.1.1", + "dom-helpers": "^5.2.1", "echarts-liquidfill": "^3.1.0", "echarts-stat": "^1.2.0", "echarts-wordcloud": "^2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3bf99b84..68df74cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,6 +25,7 @@ specifiers: commitlint: ^17.0.2 crypto-js: ^4.1.1 default-passive-events: ^2.0.0 + dom-helpers: ^5.2.1 echarts: ^5.3.2 echarts-liquidfill: ^3.1.0 echarts-stat: ^1.2.0 @@ -77,6 +78,7 @@ dependencies: axios: 0.27.2 color: 4.2.3 crypto-js: 4.1.1 + dom-helpers: 5.2.1 echarts-liquidfill: 3.1.0_echarts@5.3.3 echarts-stat: 1.2.0 echarts-wordcloud: 2.0.0_echarts@5.3.3 @@ -402,6 +404,13 @@ packages: - supports-color dev: true + /@babel/runtime/7.20.6: + resolution: {integrity: sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: false + /@babel/template/7.16.7: resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} engines: {node: '>=6.9.0'} @@ -1238,7 +1247,6 @@ packages: dependencies: '@vue/reactivity': 3.2.37 '@vue/shared': 3.2.37 - dev: false /@vue/runtime-dom/3.2.37: resolution: {integrity: sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==} @@ -1246,7 +1254,6 @@ packages: '@vue/runtime-core': 3.2.37 '@vue/shared': 3.2.37 csstype: 2.6.20 - dev: false /@vue/server-renderer/3.2.37_vue@3.2.37: resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==} @@ -1256,7 +1263,6 @@ packages: '@vue/compiler-ssr': 3.2.37 '@vue/shared': 3.2.37 vue: 3.2.37 - dev: false /@vue/shared/3.2.37: resolution: {integrity: sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==} @@ -1833,8 +1839,8 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - is-text-path: 1.0.1 JSONStream: 1.3.5 + is-text-path: 1.0.1 lodash: 4.17.21 meow: 8.1.2 split2: 3.2.2 @@ -1913,7 +1919,6 @@ packages: /csstype/2.6.20: resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/csstype/-/csstype-2.6.20.tgz} - dev: false /csstype/3.0.11: resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==} @@ -2065,6 +2070,13 @@ packages: resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} dev: true + /dom-helpers/5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dependencies: + '@babel/runtime': 7.20.6 + csstype: 3.0.11 + dev: false + /dom-serializer/1.4.1: resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} dependencies: @@ -2131,7 +2143,6 @@ packages: dependencies: tslib: 2.3.0 zrender: 5.3.2 - dev: true /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -3812,7 +3823,6 @@ packages: /monaco-editor/0.33.0: resolution: {integrity: sha512-VcRWPSLIUEgQJQIE0pVT8FcGBIgFoxz7jtqctE+IiCxWugD0DwgyQBcZBhdSrdMC84eumoqMZsGl2GTreOzwqw==} - dev: false /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -4462,6 +4472,10 @@ packages: strip-indent: 3.0.0 dev: true + /regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + /regexp.prototype.flags/1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} @@ -4954,7 +4968,6 @@ packages: /tslib/2.3.0: resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} - dev: true /tslib/2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} @@ -5006,7 +5019,6 @@ packages: resolution: {integrity: sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==} engines: {node: '>=4.2.0'} hasBin: true - dev: true /typescript/4.7.3: resolution: {integrity: sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==} @@ -5426,7 +5438,6 @@ packages: '@vue/runtime-dom': 3.2.37 '@vue/server-renderer': 3.2.37_vue@3.2.37 '@vue/shared': 3.2.37 - dev: false /vue3-lazyload/0.2.5-beta_2yymnzrok6eda47acnj2yjm3ae: resolution: {integrity: sha512-GVhJfL9Hcu+AvWsYmUwODivvt+gzpT0ztgAzZaUduoiTaGCv/qzhr0VwAQXfjGF3XFYFyOJsHlAi3/WE0P8XTQ==} @@ -5592,4 +5603,3 @@ packages: resolution: {integrity: sha512-8IiYdfwHj2rx0UeIGZGGU4WEVSDEdeVCaIg/fomejg1Xu6OifAL1GVzIPHg2D+MyUkbNgPWji90t0a8IDk+39w==} dependencies: tslib: 2.3.0 - dev: true diff --git a/preview.yml b/preview.yml new file mode 100644 index 00000000..1a26db2c --- /dev/null +++ b/preview.yml @@ -0,0 +1,10 @@ +# preview.yml +autoOpen: true # 打开工作空间时是否自动开启所有应用的预览 +apps: + - port: 3000 # 应用的端口 + run: npm i --registry=https://registry.npmmirror.com && npm run dev # 应用的启动命令 + command: # 使用此命令启动服务,且不执行run + root: ./ # 应用的启动目录 + name: GoView # 应用名称 + description: 开源、精美、便捷的「数据可视化」低代码开发平台 # 应用描述 + autoOpen: true # 打开工作空间时是否自动开启预览(优先级高于根级 autoOpen) \ No newline at end of file diff --git a/readme/go-view-doc.png b/readme/go-view-doc.png new file mode 100644 index 00000000..0e5187c5 Binary files /dev/null and b/readme/go-view-doc.png differ diff --git a/readme/go-view-event.png b/readme/go-view-event.png new file mode 100644 index 00000000..8752bce3 Binary files /dev/null and b/readme/go-view-event.png differ diff --git a/readme/go-view-indexpage.png b/readme/go-view-indexpage.png new file mode 100644 index 00000000..ba0dc202 Binary files /dev/null and b/readme/go-view-indexpage.png differ diff --git a/readme/go-view-theme.png b/readme/go-view-theme.png new file mode 100644 index 00000000..0f21f1a4 Binary files /dev/null and b/readme/go-view-theme.png differ diff --git a/src/enums/editPageEnum.ts b/src/enums/editPageEnum.ts index bfb51ef0..4820e39b 100644 --- a/src/enums/editPageEnum.ts +++ b/src/enums/editPageEnum.ts @@ -67,7 +67,8 @@ export enum WinKeyboard { ALT = ' alt', CTRL_SOURCE_KEY = 'control', SHIFT_SOURCE_KEY = 'shift', - ALT_SOURCE_KEY = 'alt' + ALT_SOURCE_KEY = 'alt', + SPACE='Space' } // Mac 键盘枚举 diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 6d56e05c..b587d854 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -273,15 +273,21 @@ export const objToCookie = (obj: RequestParamsObjType) => { * @returns */ export const setKeyboardDressShow = (keyCode?: number) => { - const code = new Map([[17, WinKeyboard.CTRL]]) + const code = new Map([ + [17, WinKeyboard.CTRL], + [32, WinKeyboard.SPACE] + ]) const dom = document.getElementById('keyboard-dress-show') if (!dom) return if (!keyCode) { + window.onKeySpacePressHold?.(false) dom.innerText = '' return } if (keyCode && code.has(keyCode)) { + window.onKeySpacePressHold?.(true) dom.innerText = `按下了「${code.get(keyCode)}」键` } } + diff --git a/src/views/chart/ContentBox/index.vue b/src/views/chart/ContentBox/index.vue index 826bbb85..c0d582d5 100644 --- a/src/views/chart/ContentBox/index.vue +++ b/src/views/chart/ContentBox/index.vue @@ -18,14 +18,14 @@ -
-