Compare commits

..

984 Commits

Author SHA1 Message Date
奔跑的面条
766a3a8ede fix: 修复导入组件数据会错乱的问题 2022-10-09 16:39:10 +08:00
奔跑的面条
293259a97d !72 在框选结束时,勿操作鼠标往选框内移动,选框不消失
Merge pull request !72 from 关宏荣/dev
2022-10-09 07:33:45 +00:00
奔跑的面条
7584c79519 build: 新增小版本1.1.11 2022-10-09 15:25:40 +08:00
奔跑的面条
d9bb0bf61d build: 修改版本1.1.1 2022-10-09 15:24:34 +08:00
奔跑的面条
cbb401840c fix: 修复导入组件数据会错乱的问题 2022-10-09 15:23:51 +08:00
hguan
f8b8624244 fix: 🐛 修复框选选框不消失问题
鼠标抬起的时候,结束节流函数
2022-10-09 10:34:09 +08:00
奔跑的面条
f3ec85050e Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch-dev 2022-10-09 09:29:40 +08:00
奔跑的面条
785a4d97f7 build: 升级naive-ui到2.33.4 2022-10-09 09:27:51 +08:00
奔跑的面条
ba54d934a2 build: 修改正确版本到 2.0.8 2022-10-08 21:27:21 +08:00
奔跑的面条
d6ecad6467 build: 升级版本到 2.0.9 2022-10-08 21:09:47 +08:00
奔跑的面条
74cab1e9af Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch-dev 2022-10-08 21:06:06 +08:00
奔跑的面条
9da073e838 style: 修改错误注释 2022-10-08 21:05:32 +08:00
奔跑的面条
a823851541 feat: 合并1.1.1 2022-10-08 21:04:41 +08:00
奔跑的面条
1764c0de08 perf: 优化混合提示的展示方式 2022-10-08 20:58:48 +08:00
奔跑的面条
79fd809993 style: 优化代码 2022-10-08 20:49:08 +08:00
奔跑的面条
d3a0d36c92 fix: 解决右键解锁无法使用的问题 2022-10-08 20:48:52 +08:00
奔跑的面条
0841e632c2 perf: 优化首页样式 2022-10-08 20:32:36 +08:00
奔跑的面条
d8f8ef032d !68 feat: 组件公共属性滤镜中增添混合模式设置
Merge pull request !68 from dodu/dev-commet
2022-10-08 11:38:12 +00:00
奔跑的面条
b7f84dbb0d !71 地图南海群岛bug
Merge pull request !71 from daidai/dev
2022-10-08 09:46:13 +00:00
刘嘉威
17f1a7ce9d fix: 解决地图编辑不显示南海群岛 预览时仍显示 2022-10-08 14:52:56 +08:00
tnt group
ca69331286 fix: 修复分组未应用混合模式 2022-10-08 12:56:07 +08:00
tnt group
8258ad21d7 fix: 修复画布不使用旋转属性配置 2022-10-08 11:54:54 +08:00
tnt group
2a129d0ee3 fix: 修复因画布未默认设置背景色或背景图片导致预览时的混合状态未生效问题 2022-10-08 11:44:56 +08:00
tnt group
e391520ce3 fix: 替换 BLEND_MODE 2022-10-08 11:43:38 +08:00
奔跑的面条
3e8329c31f perf: 优化超时时间 2022-10-08 09:17:42 +08:00
奔跑的面条
19d7b1be77 fix: 优化Naive编译之后页面不对的bug 2022-10-07 18:56:31 +08:00
tnt group
ee8a05b6e6 feat: 组件公共属性滤镜中增添混合模式设置 2022-10-05 21:56:43 +08:00
奔跑的面条
111f5bdcfb fix: 修改切换轮播表格配置不会变的问题 2022-10-05 17:08:52 +08:00
奔跑的面条
4c1b955bd5 !67 feat: 新增 数字翻牌 和 倒计时(翻牌效果) 组件
Merge pull request !67 from dodu/dev-countdown
2022-10-03 08:40:10 +00:00
tnt group
ad6614e338 fix: 修复倒计时组件 Extraneous non-props attributes 问题 2022-10-02 23:06:23 +08:00
奔跑的面条
57c730a7eb perf: 修改图层类型图标 2022-10-02 20:28:21 +08:00
tnt group
e1ec5d15ee fix: 移除多余注释 2022-10-01 22:50:17 +08:00
tnt group
4496e17d45 fix: 修复 naive-ui 引用版本造成倒计时异常 2022-10-01 22:49:27 +08:00
奔跑的面条
28668f2acb feat: 新增图层展示类型持久化存储 2022-10-01 21:10:06 +08:00
奔跑的面条
87440362ac perf: 修改颜色默认展示,格式化代码 2022-10-01 20:34:24 +08:00
奔跑的面条
f470817c01 fix: 解决前进撤回中锁定/隐藏无法正常实现的问题 2022-10-01 19:59:57 +08:00
奔跑的面条
4d9330983a style: 去除多余代码 2022-10-01 17:27:06 +08:00
奔跑的面条
edecfc7116 perf: 去除屏幕大小处理 2022-10-01 17:26:52 +08:00
tnt group
d4f3b97b3d style: 调整缩略图和默认颜色配置 2022-10-01 10:27:11 +08:00
tnt group
48d17f9244 style: 调整翻牌默认大小 2022-09-30 22:25:08 +08:00
奔跑的面条
a96fa8f4b7 perf: 无数据时候的禁止下载和导入 2022-09-30 16:21:52 +08:00
奔跑的面条
a81c6e1756 perf: 优化部分组件接口返回错误数据,页面会卡死的问题 2022-09-30 16:03:35 +08:00
奔跑的面条
b3255ab28b fix: 修改饼图环形数值不出现的问题 2022-09-30 15:43:58 +08:00
tnt group
75b5103637 style: 优化调整属性分类 2022-09-30 12:18:46 +08:00
tnt group
ddee71fc0d feat: 加入缩略图,完成倒计时功能 2022-09-30 11:39:41 +08:00
tnt group
18ea1a575c feat: 完成数字翻牌组件 2022-09-30 09:22:56 +08:00
tnt group
3e4cc376f9 chore: 基本完成翻牌器 2022-09-30 01:29:48 +08:00
tnt group
f17c22793b fix: 修复中 2022-09-29 19:25:29 +08:00
tnt group
965f734618 perf: 优化翻牌组件 2022-09-29 19:11:54 +08:00
奔跑的面条
fc1258319e !66 fix: 丰富地图配置
Merge pull request !66 from jiangcheng/dev
2022-09-29 09:19:32 +00:00
蒋承
7d17e2b332 feat: 丰富地图配置 2022-09-29 15:23:32 +08:00
tnt group
5a79fc4f2d chore: 调整倒计时组件 2022-09-29 15:21:22 +08:00
tnt group
db8fd7582b fix: 引入 naiveui NCountdown 组件 2022-09-29 15:21:04 +08:00
tnt group
daa6458a26 fix: 调整翻牌器样式控制 2022-09-29 15:20:23 +08:00
奔跑的面条
b6ac93ae63 !64 fix: 修复隐藏组件预览状态下的异常
Merge pull request !64 from dodu/dev-commet
2022-09-29 06:59:34 +00:00
蒋承
87e7c4bee2 feat: 丰富地图配置 2022-09-29 12:37:19 +08:00
tnt group
4adc46dd79 fix: 调整预览状态下控制状态样式 2022-09-29 11:35:35 +08:00
奔跑的面条
73f6d6a622 feat: 新增锁定/隐藏快捷键处理 2022-09-29 10:47:07 +08:00
tnt group
b98c3166f2 feat: 增加倒计时组件(测试中) 2022-09-29 10:34:29 +08:00
tnt group
b7503a841a feat: 增加通用翻牌器组件 2022-09-29 10:32:17 +08:00
奔跑的面条
0eb3123848 style: 优化代码 2022-09-29 10:10:54 +08:00
奔跑的面条
a637cd783c perf: 优化层级展示, 优化失焦隐藏代码 2022-09-29 09:55:11 +08:00
奔跑的面条
8530e9bc5e perf: 优化层级UI展示 2022-09-29 09:12:05 +08:00
tnt group
f18c05519d fix: 修复隐藏组件预览状态下的异常 2022-09-28 22:16:08 +08:00
奔跑的面条
cbeddb2460 feat: 新增锁定和隐藏失焦 2022-09-28 21:39:31 +08:00
奔跑的面条
be84e64f00 perf: 优化层级的 UI 样式,支持点击图标完成功能 2022-09-28 21:31:41 +08:00
奔跑的面条
34210104d4 !63 feat: 增加图层隐藏锁定功能,图层列表模式控制
Merge pull request !63 from dodu/dev-layers
2022-09-28 13:30:35 +00:00
tnt group
035586c9ef feat: 隐藏锁定操作,支持历史记录回退和前进 2022-09-28 18:43:55 +08:00
tnt group
7f52ef9843 feat: 锁定组件不能选中和拖动 2022-09-28 17:51:59 +08:00
tnt group
ca9b33da88 feat: 锁定和隐藏组件不能被框选 2022-09-28 17:38:15 +08:00
tnt group
c7f64ceb00 feat: 增加 锁定组件 hover 和 select 样式控制 2022-09-28 17:37:09 +08:00
tnt group
11d4f86551 fix: 隐藏后,立即取消选中组件 2022-09-28 17:34:11 +08:00
tnt group
00aaf3427a feat: 增加右键菜单功能及处理逻辑 2022-09-28 16:47:12 +08:00
tnt group
3e72a0e440 chore: 完成锁定及隐藏,列表方式功能占位 2022-09-28 11:21:29 +08:00
奔跑的面条
618d1d77cb feat: 合并1.1.1,升级版本到2.0.8 2022-09-27 20:28:47 +08:00
tnt group
0a1023f795 feat: 添加图层模式控制选项 2022-09-27 20:14:00 +08:00
奔跑的面条
71471bac27 perf: 去除不生效的配置代码 2022-09-27 20:08:43 +08:00
奔跑的面条
972c92519c perf: 优化性能,去除组件中多余注册内容 2022-09-27 20:02:35 +08:00
奔跑的面条
17c48608ec style: 去除无用代码,设置默认值 2022-09-27 19:53:55 +08:00
奔跑的面条
617b940d64 !62 fix: 文本组件新增字体加粗选项
Merge pull request !62 from jiangcheng/dev
2022-09-27 03:32:12 +00:00
蒋承
8d36a857eb feat: 新增文本字体加粗 2022-09-27 10:56:26 +08:00
奔跑的面条
6d5dfbced0 perf: 优化用户体验,完成接口配置后调用保存接口 2022-09-27 10:33:30 +08:00
奔跑的面条
59ff14aec4 perf: 打印错误ri'zrizhi 2022-09-27 10:18:20 +08:00
奔跑的面条
3c39d5db9d Merge branch 'dev' of https://gitee.com/MTrun/go-view into dev 2022-09-27 10:03:32 +08:00
奔跑的面条
3980cc584f fix: 处理文字预览不更新的问题 2022-09-27 10:01:43 +08:00
奔跑的面条
2167525312 !61 fix: 修复文本设置链接时,字体样式丢失问题,并增加水平对齐配置
Merge pull request !61 from dodu/dev-commet
2022-09-27 01:46:33 +00:00
tnt group
e724822198 fix: 修复文本设置链接时,字体样式丢失问题,并增加水平对齐配置 2022-09-27 08:56:49 +08:00
奔跑的面条
0d1abd00a1 feat: 新增基础树图 2022-09-26 21:18:01 +08:00
奔跑的面条
62aec195ea !60 饼图新增类型可修改
Merge pull request !60 from jiangcheng/dev
2022-09-26 12:38:22 +00:00
奔跑的面条
9692945716 perf: 优化 lock 2022-09-26 20:32:27 +08:00
奔跑的面条
b8dab8c87d !59 feat: 新增 标题装饰 和 时钟 组件
Merge pull request !59 from dodu/dev-clock
2022-09-26 12:25:09 +00:00
奔跑的面条
a6646be66b perf: 词云优化 2022-09-26 20:00:39 +08:00
奔跑的面条
8cfb54aab1 !57 feat: 添加词云组件
Merge pull request !57 from dodu/dev-commet
2022-09-26 11:59:53 +00:00
奔跑的面条
960f3aa3cf perf: 去除组件默认滤镜和变换,避免模糊问题 2022-09-26 19:40:46 +08:00
蒋承
43f35de27a feat: 饼图新增类型 2022-09-26 17:34:33 +08:00
tnt group
d39ce294b8 perf: 强化chartConfig类型 2022-09-26 17:12:16 +08:00
tnt group
e7349bfae9 perf: 优化时钟,移除无用元素 2022-09-26 17:07:12 +08:00
tnt group
ad1ff249aa perf: 调整装饰3的默认大小 2022-09-26 16:44:19 +08:00
tnt group
3fed2bb5e0 feat: 新增装饰6组件 2022-09-26 16:44:02 +08:00
tnt group
67995ac461 feat: 新增 clock 小组件 2022-09-26 15:00:47 +08:00
蒋承
39d9aa1896 feat: 饼图类型新增可选 2022-09-26 11:17:00 +08:00
tnt group
895fd25627 perf: 移除文件内eslint注释 2022-09-25 22:18:42 +08:00
tnt group
7582cac69a fix: 修复合并时遗漏的冲突 2022-09-25 22:10:42 +08:00
tnt group
790917eaf2 Merge branch 'dev-wordcloud' into dev-commet 2022-09-25 22:06:29 +08:00
奔跑的面条
18d83f161e !54 fix: 添加lint规则运行脚本,修复lint错误
Merge pull request !54 from dodu/dev-lint-commet
2022-09-25 10:47:34 +00:00
奔跑的面条
42e9e5edce perf: 优化新地图组件 2022-09-25 17:48:51 +08:00
奔跑的面条
31450e0eac !56 新增可选省份地图组件
Merge pull request !56 from daidai/dev
2022-09-25 09:40:37 +00:00
daidai
34d799049d perf: 可选省份地图组件异步加载geojson 2022-09-24 18:54:05 +08:00
奔跑的面条
92bf26ced5 !51 1、接口请求参数js动态获取
Merge pull request !51 from 潘潘/dev
2022-09-22 11:47:00 +00:00
奔跑的面条
6214c17903 perf: 优化视频组件 2022-09-22 19:38:35 +08:00
奔跑的面条
f1e801340f !50 feat: 新增视频组件
Merge pull request !50 from dodu/dev-video
2022-09-22 11:30:40 +00:00
奔跑的面条
4105883ab6 feat: 新增文本跳转功能 2022-09-22 19:17:26 +08:00
奔跑的面条
feb39bde44 !52 文本组件添加链接功能
Merge pull request !52 from 自由/wu
2022-09-22 11:16:25 +00:00
刘嘉威
ae4ae074d8 feat: 增加可选省份地图(异步会有问题) 2022-09-22 17:16:54 +08:00
刘嘉威
2ed1b4bf23 feat: 增加可选省份地图 2022-09-22 17:09:26 +08:00
奔跑的面条
c773bd8010 Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch-dev 2022-09-22 14:15:18 +08:00
奔跑的面条
e4ed2392bb build: 修改依赖 2022-09-22 14:13:14 +08:00
tnt group
ae32b9838b Merge branch 'dev-lint' into dev-lint-commet 2022-09-22 10:08:25 +08:00
tnt group
f126fc3d04 fix: 修复默认值冲突,导致旋转属性不生效的问题 2022-09-22 09:27:06 +08:00
tnt group
3ac03973fb fix: 修复自定义属性异常 2022-09-22 09:20:36 +08:00
tnt group
96384d7b39 fix: 增加 mock api,修复预览模式下动态数据更新问题 2022-09-22 09:01:19 +08:00
tnt group
20f720bf27 feat: 初步添加词云组件 2022-09-22 01:01:54 +08:00
奔跑的面条
5746da73dd Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch-dev 2022-09-21 19:56:56 +08:00
奔跑的面条
642de9a78c perf: 去除多余图片,修改展示图 2022-09-21 19:46:02 +08:00
wuyuting1
b8a1fd904b feat: 文字组件添加链接功能 2022-09-21 17:27:50 +08:00
wuyuting1
31c63130d6 feat: text组件增加点击链接弹框 2022-09-20 17:51:41 +08:00
panjianhua
6a7c2bca9a feat: 请求参数动态配置 2022-09-19 23:26:14 +08:00
奔跑的面条
60bbfd9c92 Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch-dev 2022-09-19 20:46:53 +08:00
奔跑的面条
369a8ade42 fix: 解决组件数据配置会互相影响的问题 2022-09-19 20:46:13 +08:00
奔跑的面条
6e19ed2dce fix: 解决修改完配置会调用两次接口的问题 2022-09-19 20:39:30 +08:00
奔跑的面条
12d92f3aa4 Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch-dev 2022-09-19 20:14:40 +08:00
奔跑的面条
ed5dd5e122 fix: 解决图表组件直接切换,请求配置信息未更新的bug 2022-09-19 19:49:49 +08:00
奔跑的面条
854ff4b888 perf: 优化工具栏样式 2022-09-19 19:34:32 +08:00
奔跑的面条
2edb1caf18 perf: 优化滤镜模糊问题,默认不开启 2022-09-19 17:51:12 +08:00
tnt group
9bdf42a057 fix: 去掉示例资源,默认使用本地资源,增加属性 2022-09-19 17:43:15 +08:00
奔跑的面条
ad60b7b44c perf: 优化滤镜模糊问题,默认不开启 2022-09-19 17:32:19 +08:00
tnt group
58033530c1 fix: 修复使用视频组件时保存画板缩略图的异常 2022-09-19 16:12:35 +08:00
tnt group
fa0c570f90 fix: 修复预览模式下组件的混合模式 2022-09-19 12:33:14 +08:00
tnt group
73bb93f166 fix: 完成视频组件,并支持属性实时控制video状态 2022-09-19 12:32:27 +08:00
奔跑的面条
75067221da fix: 修改请求接口 token 名称 2022-09-18 17:45:59 +08:00
奔跑的面条
3358e164a1 build: 升级版本到2.0.7 2022-09-18 17:23:16 +08:00
奔跑的面条
696a363591 feat: 新增映射组件颜色配置 2022-09-18 16:47:50 +08:00
奔跑的面条
94cde3f517 !47 修复在编辑项目之前加载数据异常,自动保存导致项目数据清空问题。
Merge pull request !47 from 秋名山路霸/master-fetch
2022-09-18 07:53:47 +00:00
奔跑的面条
45737c8f7a !46 fix: 组件ChartsItemBox支持双击添加图表到画布
Merge pull request !46 from dodu/dev-temp
2022-09-18 07:38:28 +00:00
tnt group
25077b91ca feat: 新增视频组件(支持混合模式视频背景透明) 2022-09-18 13:07:44 +08:00
秋名山路霸
a2c8827a35 fix: 修复在编辑项目之前加载数据异常,自动保存导致项目数据清空问题。 2022-09-18 11:56:26 +08:00
奔跑的面条
8487a1b159 perf: 优化工具栏图标展示方式 2022-09-17 22:45:36 +08:00
奔跑的面条
4141d00409 perf: 优化工具栏展示方式 2022-09-17 22:40:24 +08:00
奔跑的面条
924a173d6b fix: 解决配置接口点击确定会立即调用两次接口的bug 2022-09-17 21:54:10 +08:00
奔跑的面条
368ae13db6 perf: 优化散点图,新增数据mock 2022-09-17 21:43:20 +08:00
奔跑的面条
5c5c0b02df perf: 补充列表的分类 2022-09-17 16:11:26 +08:00
奔跑的面条
888ad61cf2 !42 feat: 增加多个散点图,散点图单独作为分类从More提出
Merge pull request !42 from dodu/dev-commet
2022-09-17 08:10:28 +00:00
奔跑的面条
cfa7f59b0b feat: 新增热力图mock,解决热力图无法响应式更新的问题 2022-09-17 12:12:22 +08:00
奔跑的面条
3fc6012145 perf: 优化热力图展示,新增全局映射配置 2022-09-17 11:18:57 +08:00
tnt group
463b14736f Merge branch 'dev-commet' into dev-temp 2022-09-16 12:58:41 +08:00
tnt group
d37034cb52 Merge branch 'dev-commet' into dev-lint 2022-09-16 12:55:07 +08:00
tnt group
c9d61128bf fix: 修复 ecStat.transform 编译错误 2022-09-16 12:52:44 +08:00
tnt group
810f4d8e6d fix: 添加lint规则运行脚本,修复lint错误 2022-09-16 12:26:12 +08:00
tnt group
1bd0f516e2 feat: 组件ChartsItemBox支持双击添加图标 2022-09-16 10:30:53 +08:00
tnt group
336ef369cc chore: 调整属性名称 2022-09-16 09:46:49 +08:00
奔跑的面条
efcb25153e !43 feat: 提交热力图
Merge pull request !43 from Furoe/dev
2022-09-16 01:35:25 +00:00
tnt group
f8aafd0e0b fix: 调整散点图的tooltip配置 2022-09-16 08:41:27 +08:00
yangwq7
fdb19fb310 fix: 修复热力图默认X、Y轴显示问题 2022-09-15 20:25:18 +08:00
yangwq7
d497e17a7d feat: 提交热力图 2022-09-15 20:01:07 +08:00
tnt group
287097ceed Merge branch 'dev-echarts-scatter' into dev-commet 2022-09-15 18:52:17 +08:00
tnt group
789f24d89d feat: 完成散点图的属性及配置优化 2022-09-15 18:41:17 +08:00
tnt group
8c370c550e feat: 添加多种的散点图支持 2022-09-15 12:07:01 +08:00
奔跑的面条
d8fa5784bf fix: 修改非 window 环境打包路径报错的问题 2022-09-15 11:48:39 +08:00
tnt group
1baa18888f fix: 完成基本内容 2022-09-15 01:28:57 +08:00
tnt group
9644b22896 feat: 初步创建散点图 2022-09-14 19:09:59 +08:00
奔跑的面条
5312ba5a45 perf: 修改展示图片 2022-09-14 16:22:13 +08:00
奔跑的面条
545e9f6571 fix: 修改双折线渐变图编辑问题 2022-09-14 15:31:56 +08:00
奔跑的面条
172a3163aa build: 升级依赖,锁定TS 版本 2022-09-12 01:20:27 +08:00
奔跑的面条
42093e2a32 build: 升级依赖,锁定TS版本 2022-09-12 01:14:15 +08:00
奔跑的面条
f7d23ff830 build: 升级版本到 1.0.9 2022-09-12 01:05:19 +08:00
奔跑的面条
4d189e954c feat: 升级版本到 2.0.6 2022-09-12 00:49:22 +08:00
奔跑的面条
8a1f3ac2ef fix: 合并1.0.9 2022-09-12 00:31:52 +08:00
奔跑的面条
049d3fb911 style: 优化类命名,格式化代码结构,优化注释 2022-09-12 00:28:13 +08:00
奔跑的面条
18947db22b perf: 优化图标展示,修复 dataset 的问题(我TM就不该相信这个半成品),优化性能监听 2022-09-11 22:53:00 +08:00
奔跑的面条
dbd49a05bd fix: 解决部分图表改成层级丢失响应式的 bug 2022-09-11 01:26:55 +08:00
奔跑的面条
df07169005 fix: 修复雷达图预览无法更新的问题 2022-09-10 18:50:20 +08:00
奔跑的面条
21fe89adf6 fix: 修改水球图类型 2022-09-08 21:23:23 +08:00
奔跑的面条
49956d32cc perf: 优化页面交互操作 2022-09-08 21:04:13 +08:00
奔跑的面条
b75667d92c fix: 优化漏斗图使用,解决预览数据变更页面的问题 2022-09-08 20:47:34 +08:00
奔跑的面条
c9848e7b01 perf: 新增单数据mock接口,优化漏斗图展示 2022-09-08 20:23:01 +08:00
奔跑的面条
e2cda9140b fix: 处理打包TS报错 2022-09-08 17:33:46 +08:00
奔跑的面条
e091eb7b64 fix: 修复生成组件时 toRef 报错的问题 2022-09-08 17:33:31 +08:00
奔跑的面条
aa3a5fbf84 fix: 修改雷达预览不会更新数据的问题 2022-09-08 17:01:43 +08:00
奔跑的面条
f1ed9c848a feat: 新增雷达mock 2022-09-08 17:01:21 +08:00
奔跑的面条
c2bcc51797 fix: 修改打包TS报错 2022-09-08 16:34:55 +08:00
奔跑的面条
2c7192b40c perf: 优化漏斗代码 2022-09-08 16:31:26 +08:00
奔跑的面条
6b81559d4c !41 feat: 完善漏斗图组件
Merge pull request !41 from dodu/dev-commet
2022-09-08 08:18:40 +00:00
奔跑的面条
15e9a0c0f5 perf: 优化雷达图展示 2022-09-08 16:07:16 +08:00
tnt group
8085640ea6 Merge branch 'dev-echarts-funnel' into dev-commet 2022-09-07 19:27:07 +08:00
tnt group
5eb851fc82 feat: 完善漏斗图组件 2022-09-07 18:31:22 +08:00
奔跑的面条
24ede6ac4f !40 feat: 完善雷达组件
Merge pull request !40 from dodu/dev-commet
2022-09-07 09:54:14 +00:00
tnt group
d39a8c293f Merge branch 'dev-echarts' into dev-commet 2022-09-07 12:31:52 +08:00
奔跑的面条
c44dd111db perf: 优化无数据源数据展示 2022-09-07 11:46:14 +08:00
tnt group
5763ff0d57 fix: 完成数据监控,更新图表 2022-09-07 11:22:13 +08:00
奔跑的面条
76f4a73525 perf: 优化通用时间图案 2022-09-07 11:05:43 +08:00
奔跑的面条
bf45cd607d !39 通用时间控件
Merge pull request !39 from jiangcheng/dev
2022-09-07 03:01:06 +00:00
tnt group
9c0f1f793f fix: 完成属性面板功能 2022-09-07 10:44:01 +08:00
奔跑的面条
674131a0ae !38 fix: 中国地图组件支持配置是否显示海南群岛
Merge pull request !38 from dodu/dev
2022-09-07 01:49:13 +00:00
蒋承
43438594d2 feat: 通用时间控件 2022-09-06 16:19:54 +08:00
蒋承
5af0b60644 Merge branch 'dev' of https://gitee.com/jiang_cheng_1/go-view into dev 2022-09-06 16:12:48 +08:00
tnt group
35313f2ce8 chore: 尝试雷达图组件开发 2022-09-06 15:52:41 +08:00
tnt group
d01b8b2b15 chore: 回复与线上dev文件同步 2022-09-06 15:01:44 +08:00
tnt group
8f061e5c3b fix: 修复不显示南海群岛时的小方块 2022-09-06 12:49:25 +08:00
tnt group
0c596c69cf chore: 回复与线上dev文件同步 2022-09-05 17:54:12 +08:00
tnt group
390eec99a2 fix: 中国地图组件支持配置是否显示海南群岛 2022-09-05 17:44:40 +08:00
tnt group
fe77d88936 Merge branch 'dev' of https://gitee.com/dodu/go-view into dev 2022-09-05 15:15:05 +08:00
奔跑的面条
e4bc388faa !35 修复 computed 定义 isFull 的错误使用
Merge pull request !35 from dodu/dev-back
2022-09-05 01:20:19 +00:00
奔跑的面条
255c47a8e1 perf: 处理地图数据更新 2022-09-03 21:57:26 +08:00
奔跑的面条
03f8dee9d4 feat: 新增无热力图覆盖的中国地图组件 2022-09-03 21:44:21 +08:00
tnt group
2b34a01845 fix: 修复 computed 定义 isFull 的错误使用 2022-09-03 16:45:46 +08:00
tnt group
4e435d4f29 fix: eslint-plugin-vue v8.0+ 模式下统一处理 lint 报 defineProps 未定义问题 2022-09-03 16:44:35 +08:00
奔跑的面条
89a6e5db20 !34 地图控件
Merge pull request !34 from jiangcheng/dev-jc
2022-09-03 06:22:23 +00:00
tnt group
f43f744c3e fix: eslint-plugin-vue v8.0+ 模式下统一处理 lint 报 defineProps 未定义问题 2022-09-01 17:46:46 +08:00
tnt group
7b9ca460a6 chore: 添加 lint/lint:fix 命令 2022-09-01 17:43:20 +08:00
tnt group
1c0a923771 fix: 修复几处 eslint 的报错 2022-09-01 17:41:10 +08:00
蒋承
76112345f2 feat: 打包报错 2022-09-01 17:26:39 +08:00
奔跑的面条
7985db16f1 style: 修改提示 2022-09-01 11:23:33 +08:00
蒋承
bec5868068 Merge remote-tracking branch 'origin/dev-jc' into dev 2022-09-01 11:05:24 +08:00
蒋承
ac8d77a53f feat: 地图控件添加点标记 2022-09-01 10:52:09 +08:00
奔跑的面条
826d294690 perf: 优化出现弹窗后会复制图表的交互 2022-08-31 17:15:33 +08:00
蒋承
23075b7bdd feat: 地图控件 2022-08-31 16:37:00 +08:00
奔跑的面条
096d63cbac !30 编辑项目标题,支持回车
Merge pull request !30 from dodu/dev
2022-08-31 06:53:15 +00:00
tnt group
acc9dc7751 fix: 编辑项目标题,支持回车 2022-08-31 14:27:06 +08:00
奔跑的面条
68dbf3e9ef feat: 新增移动撤回 2022-08-30 19:14:52 +08:00
奔跑的面条
4eca4c607a Merge branch 'dev' of https://gitee.com/MTrun/go-view 2022-08-30 19:14:03 +08:00
奔跑的面条
fe22e1d330 fix: 处理多个组件选中移动无法撤回的 bug 2022-08-30 19:02:25 +08:00
奔跑的面条
085c393767 fix: 处理移动记录的类型错误bug 2022-08-30 18:48:48 +08:00
奔跑的面条
df10ae58f4 style: 格式化代,修改单词错误 2022-08-30 17:28:21 +08:00
奔跑的面条
714dac93bc !29 fix: 解决组件移动未加入历史栈
Merge pull request !29 from Furoe/dev
2022-08-30 07:27:30 +00:00
奔跑的面条
2589cad06e Merge branch 'dev' of https://gitee.com/MTrun/go-view 2022-08-30 15:05:43 +08:00
奔跑的面条
2ae3461a9c build: 升级版本到1.0.8 2022-08-30 15:05:11 +08:00
奔跑的面条
0aece46d91 build: 升级版本到 2.0.5 2022-08-30 15:04:29 +08:00
奔跑的面条
094c7ed392 perf: 完善首页预览功能 2022-08-30 15:03:25 +08:00
Furoe
bb16fa51d0 Merge branch 'dev' of gitee.com:MTrun/go-view into dev
Signed-off-by: Furoe <furo_yang@163.com>
2022-08-30 06:19:04 +00:00
yangwq7
36bfbf900a perf: 解耦移动相关后退、前进逻辑 2022-08-30 14:14:56 +08:00
奔跑的面条
c48517a89b Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch 2022-08-30 12:19:57 +08:00
奔跑的面条
d89b22a8f7 Merge branch 'dev' 2022-08-30 12:18:52 +08:00
奔跑的面条
159a165457 fix: 解决渐变组件预览无法更新的问题 2022-08-30 12:18:15 +08:00
奔跑的面条
199c6abcb1 perf: 优化设置 2022-08-30 12:13:58 +08:00
奔跑的面条
96a41f8ebc build: 升级依赖 vite-2.9.9 2022-08-30 11:27:16 +08:00
奔跑的面条
ac3f5567c5 update README.md.
Signed-off-by: 奔跑的面条 <1262327911@qq.com>
2022-08-30 02:02:34 +00:00
奔跑的面条
9fd85761d7 fix: 尝试处理背景图片无法截图的问题 2022-08-29 21:37:32 +08:00
奔跑的面条
68c68e96b1 fix: 尝试解决背景图片无法截图的问题 2022-08-29 21:35:51 +08:00
奔跑的面条
130e4a3659 update LICENSE.
Signed-off-by: 奔跑的面条 <1262327911@qq.com>
2022-08-29 12:19:15 +00:00
奔跑的面条
36b1f37f3f update LICENSE.
Signed-off-by: 奔跑的面条 <1262327911@qq.com>
2022-08-29 10:13:37 +00:00
奔跑的面条
0107643e7e update LICENSE.
Signed-off-by: 奔跑的面条 <1262327911@qq.com>
2022-08-29 10:09:45 +00:00
yangwq7
9fea20cb79 fix: 解决渐变文本组件修改内容后预览未更新 2022-08-26 09:50:46 +08:00
yangwq7
a1233aa1fe fix: 解决组件移动未加入历史栈 2022-08-25 20:27:57 +08:00
奔跑的面条
51e5c756a7 perf: 优化参考线的展示方式 2022-08-21 14:52:30 +08:00
奔跑的面条
8df951992e Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch 2022-08-21 14:49:32 +08:00
奔跑的面条
558512220e perf: 优化标尺的展示方式 2022-08-21 14:42:31 +08:00
奔跑的面条
1a00993ee8 Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch 2022-08-19 14:46:49 +08:00
奔跑的面条
177fa6bfbe fix: 处理注册之后,位置错误的问题 2022-08-19 14:44:40 +08:00
奔跑的面条
cb7e887c36 fix: 补充代码合并丢失的枚举 2022-08-19 11:43:23 +08:00
奔跑的面条
255b14a597 perf: 优化500错误页重定向 2022-08-19 11:34:38 +08:00
奔跑的面条
3f462c1bee feat: 合并多选功能,解决冲突,升级版本到2.0.4 2022-08-19 10:44:44 +08:00
奔跑的面条
a6d1baec3e fix: 解决动态变更颜色,部分组件不会更新的问题 2022-08-19 10:02:09 +08:00
奔跑的面条
8ddc85738a perf: 优化拖拽的节流大小 2022-08-18 22:45:30 +08:00
奔跑的面条
52c1eabf1e feat: 新增框选功能 2022-08-18 22:41:34 +08:00
奔跑的面条
6cd30283e7 fix: 解决对其线消失的bug 2022-08-18 22:16:23 +08:00
奔跑的面条
2380c6ec60 fix: 修改快捷键说明 2022-08-18 20:40:18 +08:00
奔跑的面条
f02e92a58e feat: 新增页面框选效果 2022-08-18 20:30:02 +08:00
奔跑的面条
a54a007c5a build: 升级版本到1.0.7 2022-08-17 18:02:13 +08:00
奔跑的面条
2ad3677fdc perf: 优化层级中分组的右键功能 2022-08-17 17:56:20 +08:00
奔跑的面条
d09d1b96be style: 修改代码样式 2022-08-17 17:49:04 +08:00
奔跑的面条
e4e1fee8b4 Merge branch 'dev-feat-multi-select' of https://gitee.com/MTrun/go-view into dev 2022-08-17 17:12:38 +08:00
奔跑的面条
e348caaa0c feat: 处理数据导入,ID更新的可控功能 2022-08-17 16:56:58 +08:00
奔跑的面条
1ee76efeb8 fix: 处理分组前进后退的问题 2022-08-17 16:18:00 +08:00
奔跑的面条
716379fc9f fix: 处理无数据删除会报错的bug 2022-08-16 21:06:55 +08:00
奔跑的面条
01c2a20a0f feat: 新增多选的历史记录处理 2022-08-16 20:41:41 +08:00
奔跑的面条
4c353136d5 fix: 处理历史记录无法展示多组件的bug 2022-08-15 20:39:30 +08:00
奔跑的面条
c293c43862 fix: 处理层级右键拖拽的问题 2022-08-15 20:11:04 +08:00
奔跑的面条
45dcd1885d style: 优化枚举代码 2022-08-15 17:37:16 +08:00
奔跑的面条
a4690c21cf feat: 新增多选删除功能 2022-08-15 16:50:52 +08:00
奔跑的面条
0ca908c8d5 feat: 新增多选组件同时移动 2022-08-15 16:19:36 +08:00
奔跑的面条
e40a1f87f9 style: 修改注释写反的问题 2022-08-15 14:42:31 +08:00
奔跑的面条
09ebd67c37 fix: 处理 TS 报错 2022-08-15 11:43:32 +08:00
奔跑的面条
bad7e37f5a fix: 修复右键会出现对其线条的bug 2022-08-14 14:19:21 +08:00
奔跑的面条
99b344bdef feat: 处理层级区域分组右键,多选等 2022-08-14 02:36:48 +08:00
奔跑的面条
3b7f9e5dec fix: 处理右键不统一的问题 2022-08-14 01:04:03 +08:00
奔跑的面条
2928eaa4ae fix: 修改右键类型操作 2022-08-14 00:20:21 +08:00
奔跑的面条
77ef4c05b9 fix: 处理层级右键多选的问题 2022-08-13 18:38:36 +08:00
奔跑的面条
f55a2b94e7 feat: 处理分组与其它单组件/分组之间的成组 2022-08-12 21:41:42 +08:00
奔跑的面条
5fba293245 fix: 处理ts类型错误 2022-08-12 20:46:17 +08:00
奔跑的面条
e380ead651 fix: 处理分组预览和动态引入的问题 2022-08-12 20:39:20 +08:00
奔跑的面条
57798b9000 fix: 处理分组编辑会选择数据上的问题 2022-08-12 17:09:28 +08:00
奔跑的面条
eb774f9d41 docs: 修改 readme 图片展示 2022-08-10 16:05:34 +08:00
奔跑的面条
e2a0478357 fix: 新增分组的动画 2022-08-10 16:01:46 +08:00
奔跑的面条
0bd5587e65 perf: 处理分组属性的展示 2022-08-09 21:08:25 +08:00
奔跑的面条
96d8cb0006 perf: 处理注册时的分组场景 2022-08-09 21:06:09 +08:00
奔跑的面条
b0e4383a43 feat: 新增多选快捷键处理 2022-08-09 20:12:44 +08:00
奔跑的面条
5cadcc8259 feat: 新增多选的右键处理 2022-08-09 19:50:03 +08:00
奔跑的面条
fbc689b235 feat: 新增解除组件还原位置 2022-08-08 00:02:58 +08:00
奔跑的面条
0779aeca6a feat: 新增多选的选中框 2022-08-07 17:24:05 +08:00
奔跑的面条
9aca371e9c perf: 新增异常兜底处理 2022-08-06 18:21:50 +08:00
奔跑的面条
9ea4858770 feat: 处理分组展示,多选右键展示 2022-08-06 18:16:48 +08:00
奔跑的面条
d7b74ed90d feat: 新增成组,解组,图层处理 2022-08-06 17:20:56 +08:00
奔跑的面条
ffb6b2f68c fix: 新增 isGroup 标识 2022-08-06 13:04:25 +08:00
奔跑的面条
4d560ab937 fix: 新增多选的全部列表添加, 结构设计 2022-08-05 21:12:05 +08:00
奔跑的面条
857f811685 fix: 处理右键多选的问题 2022-08-05 10:58:46 +08:00
奔跑的面条
0bce64c867 Merge branch 'dev' into dev-feat-multi-select 2022-08-05 08:42:47 +08:00
奔跑的面条
cacc99683d Merge branch 'dev' into master-fetch 2022-08-05 08:42:22 +08:00
奔跑的面条
0998fc5376 fix: 处理预览背景图展示问题 2022-08-05 08:32:21 +08:00
奔跑的面条
d3a9f7d60f Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch 2022-07-26 16:12:31 +08:00
奔跑的面条
ba52c55158 fix: 修改背景图覆盖不全的问题 2022-07-26 15:35:23 +08:00
奔跑的面条
27d78c6b4d perf: 修改错误单词 2022-07-21 14:38:32 +08:00
奔跑的面条
8d4dd3160d Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch 2022-07-21 11:46:54 +08:00
奔跑的面条
1b68c39d5d fix: 处理打包 ts 类型错误 2022-07-21 11:43:42 +08:00
奔跑的面条
6847f7d966 feat: 合并 1.0.6 版本代码 2022-07-21 11:03:04 +08:00
奔跑的面条
8c01974494 build: 升级版本到 1.0.6 2022-07-21 10:35:16 +08:00
奔跑的面条
c74322e783 fix: 解决编辑器失焦报错的问题 2022-07-21 10:33:41 +08:00
奔跑的面条
b7d8225dbd style: 去除多余icon代码 2022-07-20 21:44:48 +08:00
奔跑的面条
48e9165483 perf: 去除全局设置中的数据配置 2022-07-20 21:44:17 +08:00
奔跑的面条
b37c8114d8 fix: 解决预览请求错误问题 2022-07-20 21:30:32 +08:00
奔跑的面条
997790e653 perf: 修改tag的圆角 2022-07-20 21:10:04 +08:00
奔跑的面条
3b12503e77 fix: 修改数据内容二次过滤的问题 2022-07-20 20:55:45 +08:00
奔跑的面条
f6d605da62 perf: 修改复制提示 2022-07-20 20:42:24 +08:00
奔跑的面条
35fda2b9a9 fix: 解决组件聚焦数据就会报错的问题 2022-07-20 20:34:28 +08:00
奔跑的面条
2d76991d27 perf: 修改输入URL的文案 2022-07-20 20:09:22 +08:00
奔跑的面条
c9b2fc2674 fix: 去除 status校验 2022-07-20 18:36:22 +08:00
奔跑的面条
6c65e419e2 fix: 修复请求间隔问题 2022-07-20 18:14:11 +08:00
奔跑的面条
288bb264e0 perf: 修改编辑文字说明 2022-07-20 12:57:04 +08:00
奔跑的面条
33a741ca0e Merge branch 'dev-feat-request' of https://gitee.com/MTrun/go-view into dev 2022-07-20 12:26:15 +08:00
奔跑的面条
5f80fa8aa4 feat: 完成自定义请求功能 2022-07-20 12:19:24 +08:00
奔跑的面条
506412175e style: 删除多余文件 2022-07-19 19:11:30 +08:00
奔跑的面条
06c3765d9d style: 修改注释 2022-07-19 17:54:43 +08:00
奔跑的面条
66f22551c4 build: 升级axios版本到0.27.2 2022-07-19 17:53:04 +08:00
奔跑的面条
d30f60a972 !26 小组件数字翻牌颜色前缀变量绑定错修复
Merge pull request !26 from daidai/dev
2022-07-17 14:01:16 +00:00
奔跑的面条
bf69ba91d5 style: 新增自定义http函数定义 2022-07-17 21:51:28 +08:00
奔跑的面条
15ff1d2912 perf: 优化请求展示区域 2022-07-16 21:02:32 +08:00
奔跑的面条
740f471ff4 feat: 处理请求展示的位置 2022-07-16 20:57:01 +08:00
奔跑的面条
d1de5f0c4c perf: 全局内容默认不展示 2022-07-16 19:01:53 +08:00
奔跑的面条
f178b0e0ca feat: 新增全局请求数据处理 2022-07-16 19:01:05 +08:00
奔跑的面条
d4bfdd1e91 feat: 新增请求编辑页面 2022-07-15 00:11:42 +08:00
wei
539db3c56b fix: 小组件数字翻牌颜色前缀问题 2022-07-13 15:01:43 +08:00
奔跑的面条
2ac2d79966 !24 docs: update README
Merge pull request !24 from daidai/dev
2022-07-13 06:14:04 +00:00
wei
4db0ba4714 docs: update README 2022-07-13 11:06:42 +08:00
wei
6b0df75357 docs: update README 2022-07-13 11:00:14 +08:00
奔跑的面条
e9c2ca0989 feat: 编写请求配置页 2022-07-11 09:01:19 +08:00
奔跑的面条
35204898fc Merge branch 'dev' into master-fetch 2022-07-08 18:12:33 +08:00
奔跑的面条
bb32edf264 Merge branch 'dev' 2022-07-08 18:11:26 +08:00
奔跑的面条
db00fcf372 Merge branch 'dev' into dev-feat-multi-select 2022-07-08 18:08:58 +08:00
奔跑的面条
801f6e8d18 feat: 新增组件更新单独设置功能 2022-07-08 17:53:52 +08:00
奔跑的面条
88abcf8a4a feat: 新增组件单独请求时间配置 2022-07-08 11:45:39 +08:00
奔跑的面条
410dc4fc58 style: 修改请求键名 data 为 request 2022-07-08 11:43:49 +08:00
奔跑的面条
ddee396cea Merge branch 'dev' into dev-feat-multi-select 2022-07-07 19:56:12 +08:00
奔跑的面条
7fe743d624 fix: 合并编辑功能的修改 2022-07-07 19:54:53 +08:00
奔跑的面条
2cb65c623e Merge branch 'dev' 2022-07-07 19:45:30 +08:00
奔跑的面条
f612b62b0a perf: 优化编辑器内容 2022-07-07 19:42:35 +08:00
奔跑的面条
84fd1b2181 Merge branch 'dev' into dev-feat-multi-select 2022-07-07 13:15:13 +08:00
奔跑的面条
6a285f610c Merge branch 'dev' into master-fetch 2022-07-07 13:14:53 +08:00
奔跑的面条
ce925e0f45 Merge branch 'dev' 2022-07-07 13:14:02 +08:00
奔跑的面条
67da33931a perf: 优化编辑器按钮展示 2022-07-07 13:13:26 +08:00
奔跑的面条
a4c0450f7a fix: 补充合并代码丢失的icon图标 2022-07-06 22:12:24 +08:00
奔跑的面条
a81f016e3f build: 合并dev 1.0.5 版本, 修改fetch分支为2.0.2 2022-07-06 21:58:28 +08:00
奔跑的面条
a58eb4a53c Merge branch 'dev' into dev-feat-multi-select 2022-07-06 21:51:11 +08:00
奔跑的面条
3f3caae4fc Merge branch 'dev' 2022-07-06 21:49:05 +08:00
奔跑的面条
417821b72d style: 还原请求间隔 2022-07-06 21:48:41 +08:00
奔跑的面条
b1ae4c3712 build: 升级版本到1.0.5 2022-07-06 21:42:24 +08:00
奔跑的面条
0705fb8b0f Merge branch 'dev' 2022-07-06 21:41:56 +08:00
奔跑的面条
6a90d1a043 perf: 优化编辑器的页面 2022-07-06 20:48:59 +08:00
奔跑的面条
74e30390cf fix: 解决过滤器的错误处理 2022-07-06 20:14:41 +08:00
奔跑的面条
4ba3d8803a style: 去除环形图多余引入 2022-07-06 17:25:59 +08:00
奔跑的面条
f53f4d57f2 perf: 修改数据展示为动态获取 2022-07-06 17:18:38 +08:00
奔跑的面条
33d78ffcda fix: 解决编辑器不能正常执行worker的问题 2022-07-06 14:40:35 +08:00
奔跑的面条
9e6873e1da fix: 解决编辑器的问题 2022-07-06 14:13:27 +08:00
奔跑的面条
47f6fc87c7 feat: 新增动态接口过滤器功能 2022-07-05 21:44:16 +08:00
奔跑的面条
2ee2783a9c style: 修改单词拼写错误 2022-06-29 09:55:44 +08:00
奔跑的面条
3a066fc9bb feat: 新增组件多选和右键成组按钮 2022-06-28 21:57:29 +08:00
奔跑的面条
ee5fed4cd0 Merge branch 'dev' into master-fetch 2022-06-27 21:42:24 +08:00
奔跑的面条
16b703f317 Merge branch 'dev' 2022-06-27 21:42:06 +08:00
奔跑的面条
3537427846 fix: 修改数字翻牌错误 2022-06-27 21:41:48 +08:00
奔跑的面条
3fb0fe43bb Merge branch 'dev' into master-fetch 2022-06-27 21:38:27 +08:00
奔跑的面条
8693a11a32 Merge branch 'dev' 2022-06-27 21:36:37 +08:00
奔跑的面条
2259545094 feat: 新增 X轴 / Y轴 字体大小、单位编辑 2022-06-27 21:35:27 +08:00
奔跑的面条
f1f5f9cca9 fix: 修改合并冲突错误的代码 2022-06-27 20:42:17 +08:00
奔跑的面条
2ce17c3974 perf: 合并dev分支,解决组件无法更新数据的问题 2022-06-27 20:37:26 +08:00
奔跑的面条
e09d014fa6 Merge branch 'dev' 2022-06-27 20:28:56 +08:00
奔跑的面条
8c74b8e8df fix: 修改NaiveUI环形组件图片 2022-06-27 20:26:54 +08:00
奔跑的面条
c3b6bcec65 fix: 解决组件数据无法更新的问题 2022-06-27 20:26:24 +08:00
奔跑的面条
633bf987ab fix: 修改图片组件不能动态更新的问题 2022-06-26 15:35:40 +08:00
奔跑的面条
bf1b81e554 feat: 新增图片 mock 地址 2022-06-26 15:26:57 +08:00
奔跑的面条
729021f37c docs: update README 2022-06-26 15:11:52 +08:00
奔跑的面条
bde2634ef3 feat: 添加组件的框架属性分类 2022-06-25 20:55:41 +08:00
奔跑的面条
d6da6f759d fix: 解决环形组件不会自动更新的问题 2022-06-25 20:34:50 +08:00
奔跑的面条
32f851e57b perf: 修改请求hook逻辑 2022-06-25 20:29:42 +08:00
奔跑的面条
30e7e7ab7c feat: 添加组件分类标识 2022-06-25 17:44:21 +08:00
奔跑的面条
cfa69baaa3 style: 去除多余代码 2022-06-25 17:30:46 +08:00
奔跑的面条
78626b3c04 perf: 优化获取数据 hooks 函数 2022-06-25 17:03:03 +08:00
奔跑的面条
340492f784 fix: 解决渐变文本不能换行的问题 2022-06-25 15:52:04 +08:00
奔跑的面条
6cecbb6ec2 feat: 新增进度条多个配置项 2022-06-25 15:51:38 +08:00
奔跑的面条
665ebd7b17 feat: 新增mock接口 2022-06-25 15:51:03 +08:00
奔跑的面条
c07d7c7c28 style: 修改错误备注 2022-06-25 11:18:04 +08:00
奔跑的面条
1d7e40950f style: 去除多余代码 2022-06-24 11:44:26 +08:00
奔跑的面条
91bda457e7 docs: 修改文档 2022-06-23 09:53:01 +08:00
奔跑的面条
68aeea70cf feat: 新增保存按钮 2022-06-22 18:50:15 +08:00
奔跑的面条
a0c8bc7fe5 feat: 新增键盘按键记录功能 2022-06-22 14:31:53 +08:00
奔跑的面条
0f73536ce0 feat: 新增多选中的前置处理,选中存储对象修改成数组形式 2022-06-21 17:39:16 +08:00
奔跑的面条
455e387a62 style: 去除多余代码 2022-06-21 11:01:01 +08:00
奔跑的面条
99467f87ff style: 修改错误单词 2022-06-21 10:54:05 +08:00
奔跑的面条
f7d3a0b499 perf: 修改导入合并代码位置,优化结构 2022-06-20 15:35:03 +08:00
奔跑的面条
7a19346700 build: 升级依赖 2022-06-20 15:13:50 +08:00
奔跑的面条
8d2269df78 build: 合并dev分支 2022-06-20 15:11:13 +08:00
奔跑的面条
1c54b81212 perf:优化http请求代码 2022-06-20 14:35:19 +08:00
奔跑的面条
b133cbdfea feat: 新增排名列表字体大小控制功能 2022-06-17 14:13:14 +08:00
奔跑的面条
6d6fa04a4b docs: 更新 READE.ME 图表说明 2022-06-17 14:11:13 +08:00
奔跑的面条
954de6d58b fix: 解决滚动排名列表预览之后数据无法变更的问题 2022-06-17 11:42:57 +08:00
奔跑的面条
a0ecfa7264 feat: 新增滚动排名列表增加设置字体大小配置
Merge pull request !21 from 王志强/master
2022-06-17 01:25:36 +00:00
wangzhiqiang
54f9c065c8 滚动排名列表增加设置字体大小配置 2022-06-16 14:57:34 +08:00
奔跑的面条
f45d4ca5af build: 修改版本到 2.0.1 2022-06-16 10:48:42 +08:00
奔跑的面条
b8705c4f31 build: 修改版本号到1.0.4 2022-06-16 10:47:23 +08:00
奔跑的面条
d96e7f71d7 fix: 解决打包之后无法加载页面的问题 2022-06-15 17:54:49 +08:00
奔跑的面条
24fee76237 feat: 新增 preview 模式,修改打包后路径指向 2022-06-15 17:48:16 +08:00
奔跑的面条
588cc380cd fix: 解决 login 背景打包后消失的问题 2022-06-15 17:36:06 +08:00
奔跑的面条
5eca551271 feat: 新增 preview 模式 2022-06-15 17:30:24 +08:00
奔跑的面条
d59193bc33 feat: 新增commitlint 2022-06-15 17:18:39 +08:00
奔跑的面条
6928a70d9f docs: 更新文档 2022-06-15 17:15:29 +08:00
奔跑的面条
e0796280f5 doc: 文档更新 2022-06-15 17:14:27 +08:00
奔跑的面条
5522837b00 feat: 新增 commitlint,修改部分规则 2022-06-15 17:09:40 +08:00
奔跑的面条
5d803e3fa6 feat: 新增渐变文本组件 2022-06-15 16:20:25 +08:00
奔跑的面条
29fd85254b docs: 修改说明文档 2022-06-15 16:15:49 +08:00
奔跑的面条
749c0a2f39 build:升级依赖 2022-06-15 16:11:58 +08:00
奔跑的面条
737504cef5 fix: 解决npm,yarn 安装依赖报错的问题 2022-06-15 16:08:59 +08:00
奔跑的面条
61af1674b9 fix: 修改npm,yarn打包问题,升级依赖文件 2022-06-15 16:01:31 +08:00
奔跑的面条
d8ccff8de5 fix: 解决 npm ,yarn 安装依赖报错的问题 2022-06-15 15:45:55 +08:00
奔跑的面条
e29c427f8d chore: 优化渐变文本展示图 2022-06-15 09:46:53 +08:00
Ryker
b8d0d1a2ff feat: 新增信息-文字-新增【渐变文字】组件
feat: 新增信息-文字-新增【渐变文字】组件
2022-06-15 01:43:07 +00:00
奔跑的面条
8115950893 fix: 补充丢失的图片 2022-06-14 12:46:07 +08:00
奔跑的面条
f458a21a2f feat:新增数字滚动组件动态获取数据功能 2022-06-14 12:31:46 +08:00
奔跑的面条
13a9675894 feat: 新增表格滚动组件 2022-06-14 12:31:20 +08:00
奔跑的面条
77b5a41af9 fix:解决边框04展示不全的bug 2022-06-14 12:30:29 +08:00
奔跑的面条
ffa127593a fix: 修改滚动表格组件TS报错问题 2022-06-14 12:14:44 +08:00
奔跑的面条
f9c17c732a Merge pull request !19 from 王志强/master 2022-06-14 03:27:49 +00:00
wangzhiqiang
427c5589b2 修改小组件边框-04下边框缺失bug 2022-06-14 11:02:58 +08:00
王志强
b618f9e865 新增滚动列表
新增滚动列表
2022-06-14 02:46:52 +00:00
wangzhiqiang
2182c7d34a Merge branch 'master' of https://gitee.com/assxy/go-view 2022-06-14 09:13:28 +08:00
wangzhiqiang
9482e9aba3 Merge branch 'master' of https://gitee.com/MTrun/go-view
# Conflicts:
#	src/packages/components/Decorates/Mores/Number/index.vue
2022-06-14 09:12:46 +08:00
奔跑的面条
6d5651fd1d !17 fit: 数字翻牌-动态数据
Merge pull request !17 from Ryker/number
2022-06-14 01:02:55 +00:00
13050022537
c195b69003 添加滚动列表 2022-06-13 20:51:15 +08:00
wangzhiqiang
8216cd7604 增加轮播表--未完成 2022-06-13 20:51:12 +08:00
ryker
8d691f2d69 数字翻牌动态数据 2022-06-13 18:04:01 +08:00
奔跑的面条
09d8c58e73 style: 优化水球图代码结构 2022-06-13 17:30:17 +08:00
奔跑的面条
2bf895ad3d feat:新增水球图设置项 2022-06-13 17:29:39 +08:00
Ryker
0823bf1d9c feat:新增水球图的形状、文字大小配置
水球图的形状、文字大小配置
2022-06-13 09:09:28 +00:00
奔跑的面条
6a5abd6762 fix: 修改列表页展示问题 2022-06-13 14:28:58 +08:00
奔跑的面条
5cb458c45b feat: 新增环形图,新增NaiveUI-进度组件 2022-06-13 13:18:30 +08:00
王志强
43e8b9939b feat:小组件-数字翻牌-增加精度参数
小组件-数字翻牌-增加精度参数
2022-06-13 05:12:24 +00:00
奔跑的面条
c792482c60 chore: 优化进度条组件内容 2022-06-13 13:05:41 +08:00
奔跑的面条
e48ca421d8 chore: 优化【饼图-环形】展示图 2022-06-13 12:02:43 +08:00
alex
ac23d4c8dc feat: PieCircle
新增饼图环形
2022-06-13 03:59:29 +00:00
wangzhiqiang
68b49ea710 小组件-数字翻牌-增加精度参数 2022-06-13 11:55:13 +08:00
wangzhiqiang
99287497cc Merge branch 'master' of https://gitee.com/MTrun/go-view 2022-06-13 09:07:13 +08:00
奔跑的面条
f828c48ab6 feat: 新增进度条组件 2022-06-12 18:47:47 +08:00
奔跑的面条
2626bc794f fix: 解决缩放比例展示不全的问题 2022-06-12 18:45:31 +08:00
奔跑的面条
70f9df7650 fix: 解决缩放比例展示不全的问题 2022-06-12 18:44:53 +08:00
奔跑的面条
8b39ec2773 style: 优化进度条组件 2022-06-12 18:25:44 +08:00
奔跑的面条
eafbcb2cde 新增Naive UI 进度条
Merge pull request !11 from alex/chart
2022-06-12 09:39:08 +00:00
alex li
f8f5bc7688 添加naive ui的进度条 2022-06-11 23:53:01 +08:00
wangzhiqiang
0335b379ea Merge branch 'master' of https://gitee.com/MTrun/go-view 2022-06-11 15:54:23 +08:00
奔跑的面条
734dd68607 chore: 优化拖拽锚点 2022-06-11 15:15:38 +08:00
奔跑的面条
3c221345dd chore: 优化拖拽锚点 2022-06-11 15:09:42 +08:00
wangzhiqiang
13bcf3c649 修改gitgnore 2022-06-11 15:05:21 +08:00
奔跑的面条
19f53f705c fix:修改请求地址为null时引起的异常bug 2022-06-11 14:37:22 +08:00
奔跑的面条
58fee4a86f fix:修改请求地址为null时引起的异常bug 2022-06-11 14:36:19 +08:00
奔跑的面条
b93caf1386 chore: 优化发布弹窗 2022-06-11 14:23:16 +08:00
奔跑的面条
aa613e2805 build: 依赖基本升级 2022-06-11 14:15:28 +08:00
奔跑的面条
616584fc19 fix: 修改双折线图X轴无法变更的问题 2022-06-11 14:13:32 +08:00
奔跑的面条
a22e4b814b fix: 修改双折线图X轴无法变化的问题 2022-06-11 14:08:25 +08:00
奔跑的面条
c249c120c1 build: 升级NaiveUI到2.30.3 2022-06-11 14:03:41 +08:00
奔跑的面条
c8d016e1b4 Merge branch 'master' into dev 2022-06-10 16:28:07 +08:00
奔跑的面条
2e6d87ab80 update README.md. 2022-06-10 08:27:34 +00:00
奔跑的面条
5c07885a4e fix: 解决列表页布局问题 2022-06-09 09:07:39 +08:00
奔跑的面条
5f8db36888 fix: 解决列表页布局错误问题 2022-06-09 09:00:39 +08:00
奔跑的面条
ce34a7ed2a fix: 解决导出图片白边的问题 2022-06-09 08:59:36 +08:00
奔跑的面条
a5e83bfe9f fix: 解决项目列表信息栏会换行的问题 2022-06-09 08:49:07 +08:00
奔跑的面条
1252d266dd fix:解决截图有白边的问题 2022-06-09 08:48:28 +08:00
奔跑的面条
3c820d53a6 fix: 修改复制失败的提示类型错误的问题 2022-06-06 10:43:14 +08:00
奔跑的面条
f0525c7522 chore: 新增路由白名单 2022-06-06 10:42:55 +08:00
奔跑的面条
600f1b2dd2 chore:优化搜索结果列表UI 2022-06-05 11:41:57 +08:00
奔跑的面条
b3422eaede chore: 优化搜索结果列表UI 2022-06-05 11:40:32 +08:00
奔跑的面条
757b79514a chore:优化 dialog 的全局封装代码 2022-06-04 16:25:37 +08:00
奔跑的面条
8b57ffa124 chore: 修改发布文案提示,修改 dialog 全局封装 2022-06-04 16:17:11 +08:00
奔跑的面条
cf8121eb00 build:修改 fetch 版本号 2022-06-04 15:44:26 +08:00
奔跑的面条
faf2d44fbb chore: 优化页面 UI 2022-06-03 20:21:35 +08:00
奔跑的面条
dcbaf37a69 Merge branch 'dev' 2022-06-03 20:11:07 +08:00
奔跑的面条
741ba1a039 style: 优化类名,页面UI细节 2022-06-03 20:10:52 +08:00
奔跑的面条
80176e5737 docs: 更新md说明 2022-06-03 19:56:03 +08:00
奔跑的面条
88516d9491 fix: 修改自动复制粘贴的问题 2022-06-03 18:53:37 +08:00
奔跑的面条
88dbbe03ea fix: 新增发布页面处理 2022-06-03 14:48:58 +08:00
奔跑的面条
ae1fd2e7cf chore: 优化了标题展示和大小样式 2022-06-03 11:19:29 +08:00
奔跑的面条
04ed5d354d Merge branch 'dev' 2022-06-01 23:08:54 +08:00
奔跑的面条
fa678e1089 fix: 修改列表页标题过长的展示问题 2022-06-01 23:08:36 +08:00
奔跑的面条
d3931f47bc type: 修改类型错误 2022-06-01 23:00:28 +08:00
奔跑的面条
bf9bd59b63 fix:处理列表页标题过长的展示问题 2022-06-01 22:58:22 +08:00
奔跑的面条
fb0ff50837 type: 定义全局返回值类型 2022-06-01 22:41:11 +08:00
奔跑的面条
93727a0ac7 build: 修改版本号 0.0.9 2022-06-01 22:28:46 +08:00
奔跑的面条
8575d27504 Merge branch 'dev' 2022-06-01 22:28:10 +08:00
奔跑的面条
fa6ef30cd8 build: 修改版本为1.0.3 2022-06-01 22:27:59 +08:00
奔跑的面条
14402e6674 Merge branch 'dev' 2022-06-01 22:27:14 +08:00
奔跑的面条
0915e162fd fix: 解决导入组件后控制组件不会出现的bug 2022-06-01 22:26:52 +08:00
奔跑的面条
2641e70c78 chore:优化了路由写法,修改了错误页面的展示,新增未发布提示页面 2022-06-01 22:20:05 +08:00
奔跑的面条
bc44584698 feat: 新增动态预览功能 2022-06-01 22:19:03 +08:00
奔跑的面条
82394dd7a3 fix: 修改组件注册会报错的问题 2022-06-01 22:14:33 +08:00
奔跑的面条
2e688ad686 build:升级依赖包 2022-06-01 22:13:49 +08:00
奔跑的面条
9b998e0c6d fix: 解决列表图片展示缓存问题 2022-06-01 20:16:38 +08:00
奔跑的面条
1045588301 fix: 解决获取数据,但是配置模块不完整的问题 2022-06-01 19:01:05 +08:00
奔跑的面条
fffe49cd0f update README.md. 2022-05-31 09:01:51 +00:00
奔跑的面条
94fc6138a0 docs: 修改MD说明 2022-05-31 11:40:06 +08:00
奔跑的面条
4f248e57c8 docs: 修改首页说明 2022-05-31 11:36:26 +08:00
奔跑的面条
ba86399fd3 build: 修改请求地址 2022-05-31 11:19:17 +08:00
奔跑的面条
a89164f885 fix: 修改oss接口不会动态更改的问题 2022-05-31 11:18:34 +08:00
奔跑的面条
7f2344c82c chore:修改请求地址 2022-05-29 16:04:07 +08:00
奔跑的面条
e5bf08f709 docs: 更新说明文档 2022-05-29 15:45:45 +08:00
奔跑的面条
3c8e430533 docs: 修改文档说明 2022-05-29 15:23:04 +08:00
奔跑的面条
f7209fba53 feat: 新增背景图文件上传保存 2022-05-29 14:54:35 +08:00
奔跑的面条
9fae683d8b chore: 去除生成预览图时的标尺 2022-05-28 17:58:07 +08:00
奔跑的面条
79a2b98a1a feat: 新增首页预览图展示 2022-05-28 16:39:27 +08:00
奔跑的面条
98b28a631a Merge branch 'dev' into master-fetch 2022-05-28 15:58:06 +08:00
奔跑的面条
d61769f9b8 chore: 修改拖拽锚点样式 2022-05-28 15:57:44 +08:00
奔跑的面条
6fec64f515 fix: 修改自动保存预览图无法存储的问题 2022-05-28 15:46:07 +08:00
奔跑的面条
01d5890b35 branch: 合并锚点样式修改 2022-05-28 12:46:32 +08:00
奔跑的面条
0ec9fd8534 chore:修改拖拽标点样式 2022-05-28 12:43:07 +08:00
奔跑的面条
fea583eb5b feat: 保存预览图 2022-05-28 11:50:17 +08:00
奔跑的面条
fcf8d9d99d chore: 新增put请求类型 2022-05-28 00:40:22 +08:00
奔跑的面条
bfe5039a1c fix: 解决打包后无法发送请求的bug 2022-05-28 00:32:32 +08:00
奔跑的面条
7a57d944c8 feat: 新增上传文件接口 2022-05-27 20:09:48 +08:00
奔跑的面条
ca27e87241 chore: 修改项目信息结构 2022-05-27 11:49:25 +08:00
奔跑的面条
e674a1ece4 feat: 新增项目信息修改功能 2022-05-26 01:01:59 +08:00
奔跑的面条
6c91fca4e7 fix: 修改导入id重复的问题 2022-05-25 23:04:39 +08:00
奔跑的面条
dfb63346d3 fix: 修改导入组件id会重复的问题 2022-05-25 23:00:36 +08:00
奔跑的面条
4d899d48dc feat: 新增快捷键展示 2022-05-24 18:17:41 +08:00
奔跑的面条
fa3a3dfcb0 faet: 新增保存快捷键 2022-05-24 18:16:33 +08:00
奔跑的面条
e36210aa27 feat: 新增自动同步功能 2022-05-24 17:42:49 +08:00
奔跑的面条
20a599594c feat: 新增数据保存接口 2022-05-24 15:05:51 +08:00
奔跑的面条
70f8dbae53 Merge branch 'dev' into master-fetch 2022-05-24 12:28:14 +08:00
奔跑的面条
e01292376f chore: 优化 error 错误页面 2022-05-24 12:27:39 +08:00
奔跑的面条
d8022b2682 feat: 新增获取项目数据功能,新增同步数据功能 2022-05-23 23:50:35 +08:00
奔跑的面条
0d7c5b8ace Merge branch 'dev' into master-fetch 2022-05-23 16:06:13 +08:00
奔跑的面条
1c5c867a19 schore: 修改屏幕过小,会破坏布局的问题 2022-05-23 16:05:41 +08:00
奔跑的面条
88c9850c44 Merge branch 'dev' into master-fetch 2022-05-22 23:27:39 +08:00
奔跑的面条
dde5ae796e style: 去除多余入参代码 2022-05-22 22:43:06 +08:00
奔跑的面条
f1ed62cdca feat: 新增获取项目数据接口 2022-05-22 22:11:56 +08:00
奔跑的面条
bfac86d5dd feat:新增发布和取消发布接口 2022-05-22 16:38:22 +08:00
奔跑的面条
341015c584 style: 调整代码格式,去除多余代码 2022-05-22 15:39:30 +08:00
奔跑的面条
7c5a66978e feat: 新增删除接口 2022-05-22 15:25:07 +08:00
奔跑的面条
b21fc3f5e7 feat: 新增首页列表接口 2022-05-22 15:06:45 +08:00
奔跑的面条
0e52628842 Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch 2022-05-22 14:09:38 +08:00
奔跑的面条
64992c59b7 feat: 新增首页项目列表分页效果 2022-05-22 14:09:20 +08:00
奔跑的面条
c3aae6e5fa fix: 修改vue动画名称错误 2022-05-22 14:06:52 +08:00
奔跑的面条
f7922cafa5 feat: 新增项目列表接口 2022-05-22 14:05:57 +08:00
奔跑的面条
8c5496829e Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch 2022-05-22 13:36:30 +08:00
奔跑的面条
2a44fd3ca4 build: 升级naiveUI到2.29 2022-05-22 13:29:01 +08:00
奔跑的面条
8514f051a7 fix: 修改新建项目id错误问题 2022-05-21 21:04:10 +08:00
奔跑的面条
61feb29fe2 fix: 修改i18n错误提示 2022-05-21 19:46:44 +08:00
奔跑的面条
fa29881f04 chore: 修改提示内容 2022-05-21 18:04:52 +08:00
奔跑的面条
46cb8e7d0b feat: 新增创建接口,修改i8n部分内容 2022-05-21 18:03:15 +08:00
奔跑的面条
b6143bc75e feat: 新增退出登录接口,新增全局接口封装,修改登录接口内容 2022-05-21 17:31:01 +08:00
奔跑的面条
92e1ec05d2 Merge branch 'master' of https://gitee.com/MTrun/go-view into master-fetch 2022-05-21 14:01:53 +08:00
奔跑的面条
68512206f7 fix: 修改 pnpm7.x 版本打包时的类型错误 2022-05-21 14:01:26 +08:00
奔跑的面条
88073e97af Merge branch 'dev' 2022-05-21 13:49:52 +08:00
奔跑的面条
75f23bb1bf Merge branch 'dev' into master-fetch 2022-05-21 13:44:25 +08:00
奔跑的面条
e8642d0301 fix: 修改plop模板的错误 2022-05-21 13:43:31 +08:00
奔跑的面条
5f5731f813 feat: 新增登录接口请求 2022-05-20 16:12:27 +08:00
奔跑的面条
55159be0dc fix: 修改plop的问题 2022-05-20 16:12:09 +08:00
奔跑的面条
0c4e1dc7ae Merge branch 'dev' of https://gitee.com/MTrun/go-view into master-fetch 2022-05-20 10:25:46 +08:00
奔跑的面条
b4abdeb246 update README.md. 2022-05-19 01:56:30 +00:00
奔跑的面条
7e61dda4aa update README.md. 2022-05-16 10:38:39 +00:00
奔跑的面条
283aafb27d update README.md. 2022-05-16 04:23:10 +00:00
奔跑的面条
aafafdd0aa update README.md. 2022-05-16 04:22:49 +00:00
奔跑的面条
198b839dab update README.md. 2022-05-16 04:21:08 +00:00
奔跑的面条
597b8fb5af chore: 修改下载按钮,修改复制文案为克隆 2022-05-16 00:32:10 +08:00
奔跑的面条
a4cb4cb0ad feat: 新增 sass 循环样式类,新增接口下载提示 2022-05-14 22:40:48 +08:00
奔跑的面条
1bc51a51c2 !10 update README.md.
Merge pull request !10 from Mr.cao/N/A
2022-05-12 04:07:03 +00:00
Mr.cao
8857059da8 update README.md. 2022-05-12 04:06:49 +00:00
奔跑的面条
7939d37fa3 !9 update README.md.
Merge pull request !9 from 雪花酥/N/A
2022-05-12 04:06:18 +00:00
雪花酥
df83385cb0 update README.md. 2022-05-12 04:05:56 +00:00
奔跑的面条
5d69fc4b24 !8 update README.md.
Merge pull request !8 from 雪花酥/N/A
2022-05-12 04:05:24 +00:00
雪花酥
4f1b550fa9 update README.md. 2022-05-12 04:05:11 +00:00
奔跑的面条
782c12d91d !7 update README.md.
Merge pull request !7 from 雪花酥/N/A
2022-05-12 04:04:54 +00:00
雪花酥
4b97d98b3a update README.md. 2022-05-12 04:04:31 +00:00
奔跑的面条
8e3e9b5f50 !6 update README.md.
Merge pull request !6 from Wang Kejiang/N/A
2022-05-12 03:45:32 +00:00
Wang Kejiang
ceed66b7ea update README.md. 2022-05-12 03:45:12 +00:00
奔跑的面条
a8399be4a3 !5 合并dev
Merge pull request !5 from 奔跑的面条/dev
2022-05-12 03:22:08 +00:00
奔跑的面条
19f73d7066 !4 update README.md.
Merge pull request !4 from zhanghan966/N/A
2022-05-12 03:21:01 +00:00
zhanghan966
36d46d0a45 update README.md. 2022-05-12 03:20:36 +00:00
奔跑的面条
323e5505f5 !3 合并master
Merge pull request !3 from 奔跑的面条/master
2022-05-12 03:19:21 +00:00
奔跑的面条
12a2ace498 update README.md. 2022-05-11 02:05:03 +00:00
奔跑的面条
c5eefec24d chore: 修改工具条默认状态为侧边 2022-05-10 19:26:08 +08:00
奔跑的面条
c4c4572885 chore: 新增mock数据返回值 2022-05-10 19:17:30 +08:00
奔跑的面条
8fcd2a9141 !2 fix: 解决文件夹名字问题
Merge pull request !2 from 奔跑的面条/master
2022-05-10 10:24:19 +00:00
奔跑的面条
f0fad0dba7 重命名 src/packages/components/Tables/Tables/tableCommon 为 src/packages/components/Tables/Tables/TableCommon 2022-05-10 10:23:24 +00:00
奔跑的面条
71c7116493 fix: 解决文件名称大小写问题 2022-05-10 18:21:50 +08:00
奔跑的面条
e797879e0d Merge branch 'dev' of https://gitee.com/MTrun/go-view 2022-05-10 18:11:24 +08:00
奔跑的面条
2e460ea32a fix: 解决文件夹名称大小写问题 2022-05-10 18:11:12 +08:00
奔跑的面条
ef3b1dce7c style: 去除多余代码 2022-05-10 18:10:54 +08:00
奔跑的面条
22e01a80c1 Merge branch 'dev' of https://gitee.com/MTrun/go-view 2022-05-10 17:57:00 +08:00
奔跑的面条
770373c48c fix: 修改文件名称大小写的问题 2022-05-10 17:56:45 +08:00
奔跑的面条
77ff376e75 Merge branch 'dev' of https://gitee.com/MTrun/go-view 2022-05-10 17:50:57 +08:00
奔跑的面条
d5fb56f571 fix: 解决文件名称大小写的问题 2022-05-10 17:50:43 +08:00
奔跑的面条
b37ba41694 !1 fix: 修改文件夹大写不同步的问题
Merge pull request !1 from 奔跑的面条/dev
2022-05-10 09:38:36 +00:00
奔跑的面条
f7084ba3a3 重命名 src/views/chart/contentHeader 为 src/views/chart/ContentHeader 2022-05-10 09:37:00 +00:00
奔跑的面条
f89a64f10e style: 去除多余代码 2022-05-10 14:41:02 +08:00
奔跑的面条
f6fe7816c9 fix: 解决折线图预览不会展示的问题 2022-05-09 18:05:14 +08:00
奔跑的面条
ca8e08f3db build: 升级 naiveUI 到最新版2.28.2 2022-05-09 17:10:01 +08:00
奔跑的面条
1e188dd26b release:升级版本号到 1.0.1 2022-05-09 17:08:03 +08:00
奔跑的面条
59fb22cd0c perf: 修改工作区域默认配置展示逻辑 2022-05-09 09:58:27 +08:00
奔跑的面条
ede7bcce80 perf: 修改位置区域文案,修改水球图颜色文案 2022-05-09 09:47:54 +08:00
奔跑的面条
07e3f227be chore: 修改命令 2022-05-07 10:58:37 +08:00
奔跑的面条
d0070319a9 fix: 修改标尺和水印定位的问题 2022-05-06 20:29:35 +08:00
奔跑的面条
60ec01eb32 docs: 修改文档路径 2022-05-06 20:23:08 +08:00
奔跑的面条
47e04ba6e3 chore: 去除多余依赖和配置 2022-05-06 20:13:49 +08:00
奔跑的面条
c7a2a01f12 fix: 修改item说明 2022-05-05 11:47:22 +08:00
奔跑的面条
45e5ca0722 fix: 修改名称 2022-05-04 21:00:40 +08:00
奔跑的面条
8ca9a3be05 fix:修改冲突 2022-05-04 20:59:33 +08:00
奔跑的面条
c89b92c2d3 fix: 修改 QQ 群二维码 2022-05-04 20:58:15 +08:00
奔跑的面条
38685e9b49 update README.md. 2022-05-04 12:45:25 +00:00
奔跑的面条
65f0c87149 fix: 去除多余图片 2022-05-04 20:32:22 +08:00
奔跑的面条
71a7247f71 update README.md. 2022-05-04 12:29:15 +00:00
奔跑的面条
27dac34c2b fix: 修改logo图片 2022-05-04 20:21:04 +08:00
奔跑的面条
99fec48458 fix: 修改图标 2022-05-04 20:20:09 +08:00
奔跑的面条
1c093e5243 update README.md. 2022-05-04 06:41:13 +00:00
奔跑的面条
96d1b79cf5 fix:删除多余 doc 文件 2022-05-04 14:38:08 +08:00
奔跑的面条
bd4879e88a update README.md. 2022-05-04 06:35:50 +00:00
奔跑的面条
6a5d746703 fix: 去除错误位置图片 2022-05-04 13:55:24 +08:00
奔跑的面条
b5271b07fa update README.md. 2022-05-04 05:55:06 +00:00
奔跑的面条
e3fa62a3f8 update README.md. 2022-05-04 05:53:23 +00:00
奔跑的面条
b129123fa0 doc: update README 2022-05-04 13:50:40 +08:00
奔跑的面条
e9a1606f00 fix: 解决全局滤镜导致TS打包报错问题,修改壁纸不更随滤镜变换的问题 2022-05-04 13:21:27 +08:00
奔跑的面条
6cc321b997 feat: 新增页面预览方式 2022-05-04 01:46:56 +08:00
奔跑的面条
f668a2b892 feat: 新增滤镜同步变化功能 2022-05-03 16:43:23 +08:00
奔跑的面条
cf50e77daf fix: 提取滤镜,变换,动画方法到全局 2022-05-03 16:29:53 +08:00
奔跑的面条
ef9e4c8ea4 feat:新增旋转功能 2022-05-03 16:24:31 +08:00
奔跑的面条
ab96d0919f fix: 处理渐变图表的配置和水球背景的全局主题跟随 2022-05-03 15:36:35 +08:00
奔跑的面条
dee6aa6754 fix: 修改水球图编辑和颜色跟随变换 2022-05-02 23:33:39 +08:00
奔跑的面条
55f59f9f2d feat: 新增水球图数据变化和样式设置 2022-05-02 23:10:47 +08:00
奔跑的面条
8f5bc134f2 fix:修改图表名称 2022-05-02 19:32:36 +08:00
奔跑的面条
8ca08a5600 fix: 修改全局 dialog 提示 2022-05-02 17:33:51 +08:00
奔跑的面条
621a302451 fix:修改 @mixin 名称 2022-05-02 17:18:18 +08:00
奔跑的面条
bf4254719d fix: 修改组件命名不规范的问题 2022-05-02 16:30:45 +08:00
奔跑的面条
3bcef87d6c feat:新增图片组件,修改文件组件 2022-05-01 17:36:23 +08:00
奔跑的面条
bacdcd1760 fix: 修改备注 2022-04-30 21:20:51 +08:00
奔跑的面条
871b61acf5 fix: 去除多余代码 2022-04-28 15:09:26 +08:00
奔跑的面条
e0b0d5747b feat: 新增图片组件模板 2022-04-27 17:45:40 +08:00
奔跑的面条
b61215d540 fix: 修改历史记录展示顺序,修改滚动条的问题 2022-04-26 18:21:58 +08:00
奔跑的面条
43cc7d8a95 fix: 修改全局样式配置的样式 2022-04-26 11:44:24 +08:00
奔跑的面条
d5656ea07c type:解决类型问题 2022-04-26 11:37:25 +08:00
奔跑的面条
880f9d535c fix: 修改注释 2022-04-25 16:50:20 +08:00
奔跑的面条
30bd83b032 fix: 新增全局滤镜 2022-04-25 16:17:22 +08:00
奔跑的面条
5d73a5fdd3 fix: 修改滤镜名称 2022-04-25 15:13:54 +08:00
奔跑的面条
9f95a4c83e feat: 新增文字侧边Padding控制 2022-04-24 20:02:22 +08:00
奔跑的面条
8c3c483894 fix: 修改打包错误, 回退I18N版本 2022-04-22 16:40:46 +08:00
奔跑的面条
8486e08615 fix: 新增搜索选择 2022-04-22 10:04:55 +08:00
奔跑的面条
798a7eb49a fix: 新增组件搜索功能 2022-04-21 22:35:28 +08:00
奔跑的面条
17f29d3773 fix: 修改滤镜名称 2022-04-20 09:28:14 +08:00
奔跑的面条
43c46c873c feat:新增图表颜色滤镜 2022-04-19 22:07:54 +08:00
奔跑的面条
96581511f8 fix: 去除 axios data的设置 2022-04-18 10:16:56 +08:00
奔跑的面条
be81a8c731 fix: 修改文档英文翻译 2022-04-18 09:32:01 +08:00
奔跑的面条
74338c06f0 feat: 新增赞助链接 2022-04-17 15:16:47 +08:00
奔跑的面条
9fbe2500e0 fix: 修改版本冲突导致报错的问题 2022-04-15 17:48:02 +08:00
奔跑的面条
4f16531016 feat: 新增文档 2022-04-14 21:58:07 +08:00
奔跑的面条
98bebbc796 fix:升级 VITE版本 2022-04-14 15:57:50 +08:00
奔跑的面条
3c85322450 fix: 修改文件建构 2022-04-14 10:05:57 +08:00
奔跑的面条
9e9410533c fix: 修改数据加密解密,新增登录校验,新增底部备案号 2022-04-13 21:31:18 +08:00
奔跑的面条
b5d420c9bf fix: 修改装饰2的bug 2022-04-13 19:48:10 +08:00
奔跑的面条
9c8fab832e feat: 新增快捷键列表关闭功能 2022-04-13 11:41:45 +08:00
奔跑的面条
f304a4f27a fix: 修改 Makefile 文件 2022-04-13 11:18:51 +08:00
奔跑的面条
0b674fb0ae fix: 修改快捷键页面展示 2022-04-13 11:13:37 +08:00
奔跑的面条
9cd18c9086 fix: 修改方向键快捷键 2022-04-13 11:03:30 +08:00
奔跑的面条
98d3962f87 fix:修改快捷键列表间距 2022-04-13 10:48:19 +08:00
奔跑的面条
b4ebf8cde3 fix: 修改快捷键展示弹窗 2022-04-13 10:35:15 +08:00
奔跑的面条
828497bd08 fix: 修改description 2022-04-12 17:33:59 +08:00
奔跑的面条
3d0611cfdf fix: 修改快捷键 2022-04-12 12:01:40 +08:00
奔跑的面条
33b7d990e3 fix: 修改拖拽的问题 2022-04-11 18:17:09 +08:00
奔跑的面条
24dbc21cfc fix: 新增导入数据脏数据的过滤 2022-04-11 17:07:06 +08:00
奔跑的面条
ee9a93b353 fix: 修改历史记录的最大值的设定位置 2022-04-11 17:06:41 +08:00
奔跑的面条
991b134e23 fix: 抽离水印的组件 2022-04-11 17:06:04 +08:00
奔跑的面条
553d9d7519 fix: 去除多余的引入 2022-04-11 12:42:49 +08:00
MTrun
1bcace8d5e fix: 修改aside展示时机 2022-04-10 21:22:28 +08:00
MTrun
8d9f503867 fix: 修改aside展示动画 2022-04-10 21:16:30 +08:00
MTrun
d1f84cded9 fix: 修改任务栏 2022-04-10 20:56:05 +08:00
MTrun
533af6b2f9 fix: 修改header层级 2022-04-10 19:05:14 +08:00
MTrun
10a21c9f6b fix: 修改类型错误 2022-04-10 18:01:19 +08:00
MTrun
16bf72ac24 feat: 新增导入导出功能😍 2022-04-10 17:56:51 +08:00
MTrun
aef57f13f0 fix: 新增dialog的属性控制 2022-04-10 17:40:43 +08:00
MTrun
4b3acfca74 fix:修改名称错误问题 2022-04-10 16:17:00 +08:00
MTrun
33b2f67df8 fix: 修改侧边栏mb的问题 2022-04-10 00:17:33 +08:00
MTrun
4c28df1602 feat: 新增侧边栏 2022-04-09 23:55:09 +08:00
MTrun
9c04f51548 fix: 修改系统设置下拉框的宽度 2022-04-09 16:56:09 +08:00
MTrun
d0752b0b26 fix:修改工具栏不会动态更新的问题 2022-04-09 16:54:01 +08:00
MTrun
77137990a6 feat: 新增工具栏模块, 修改系统设置初始化结构 2022-04-09 16:40:57 +08:00
奔跑的面条
7bb0b1a463 fix: 修改导出名称 2022-04-07 19:54:17 +08:00
奔跑的面条
c8d8698b19 fix: 去除多余测试代码 2022-04-07 19:46:40 +08:00
奔跑的面条
97da2a6ec1 fix: 解决canvas圆角不展示的问题 2022-04-07 19:33:49 +08:00
奔跑的面条
ce42f5c294 fix: 修改editbox的样式问题 2022-04-07 19:33:14 +08:00
奔跑的面条
80f81c1870 fix: 修改图表编辑区域底部展示问题 2022-04-07 15:52:27 +08:00
奔跑的面条
4aff485816 fix: 修改监听的内容设置 2022-04-07 15:28:25 +08:00
奔跑的面条
bb9ea4ca32 fix: 修改类型错误 2022-04-07 14:52:48 +08:00
奔跑的面条
64cad02b62 fix: 降低 vue-i18n 的版本,有问题 2022-04-07 14:41:54 +08:00
奔跑的面条
be0c0566df fix: 修改TS报错问题,抽离水印文案 2022-04-07 14:20:18 +08:00
奔跑的面条
b5ea97e239 feat: 新增导出水印功能 2022-04-07 11:24:40 +08:00
奔跑的面条
9c2f70b68c fix: 修改预览页面位置不对的问题,修改文字配置项的顺序 2022-04-07 09:57:00 +08:00
奔跑的面条
8b7606f893 feat: 新增文字边框 2022-04-06 21:53:00 +08:00
奔跑的面条
c0a654fa63 fix: 修改展示的错误 2022-04-06 19:55:31 +08:00
奔跑的面条
e8ce806082 fix: 修改折线图不展示,不会动态变更的bug 2022-04-06 13:38:19 +08:00
奔跑的面条
cc0ecedd4e fix: 修复option类型错误问题 2022-04-06 10:42:11 +08:00
奔跑的面条
4aa303b51f feat: 修改下载功能 2022-04-05 20:16:59 +08:00
奔跑的面条
496c097e5f feat:新增图片导出功能 2022-04-05 19:01:52 +08:00
奔跑的面条
f95d940ff0 fix: 解决多组数据会同步修改的bug 2022-04-05 16:04:52 +08:00
奔跑的面条
78879c56cc fix: 修复对齐线会一直存在的问题 2022-04-05 15:04:13 +08:00
奔跑的面条
7d2c4e6431 feat:新增拖拽改变层级功能 2022-04-03 15:06:32 +08:00
奔跑的面条
f12d3148aa fix: 修改列表初始化会卡顿的问题 2022-04-02 11:46:50 +08:00
奔跑的面条
6ae0cd55e6 fix: 新增列表数据更新,修改数据更新 hook 函数 2022-04-02 11:34:54 +08:00
奔跑的面条
2c2aaaac67 fix: 新增列表组件 2022-04-01 16:49:17 +08:00
奔跑的面条
97df02c07e feat: 新增轮播图表 2022-04-01 16:36:22 +08:00
奔跑的面条
2b0f8a817c feat:新增数字滚动 2022-04-01 12:52:11 +08:00
奔跑的面条
089bb8945a feat: 新增移动快捷键与全局设置 2022-04-01 10:25:13 +08:00
mtrun
819ad34481 fix:修改装饰5的内容 2022-03-31 18:07:57 +08:00
mtrun
aca79071b9 feat: 新增装饰4 -5 2022-03-31 18:02:45 +08:00
mtrun
a573cd2391 fix:新增边框02,03 2022-03-31 16:40:11 +08:00
mtrun
0d54716e59 fix: 修改装饰组件名称 2022-03-31 10:00:23 +08:00
mtrun
d1ea05c2c0 feat: 新增装饰组件01 2022-03-31 09:59:42 +08:00
MTrun
bb78d89037 feat:新增装饰组件 2022-03-30 08:06:59 +08:00
mtrun
e6ff73c252 fix:修改右键bug 2022-03-28 17:32:49 +08:00
mtrun
f00bd16aaf fix: 修改右键问题 2022-03-28 17:24:56 +08:00
mtrun
7002e64b8f 新增右键自定义列表 2022-03-28 17:19:50 +08:00
mtrun
ab05a6f384 fix:修改右键逻辑 2022-03-28 17:17:44 +08:00
mtrun
d60e6effa1 fix: 新增水球 2022-03-28 15:44:55 +08:00
mtrun
bd430aab32 fix: 修改水波图的图片名字错误问题 2022-03-28 14:39:56 +08:00
mtrun
214995fb23 fix: 修改水波图的名称 2022-03-28 14:36:05 +08:00
mtrun
0b71c43e89 feat: 新增前进后退按钮,修改粘贴的位置问题 2022-03-28 11:38:44 +08:00
MTrun
f29299fde5 feat:新增border13 2022-03-27 01:18:22 +08:00
MTrun
ecaf8e8970 fix: 新增边框12 2022-03-27 01:09:22 +08:00
MTrun
cb5f558c62 feat: 新增边框10 2022-03-27 00:58:00 +08:00
MTrun
7db9bc85f8 feat: 新增边框8 2022-03-27 00:34:30 +08:00
MTrun
91220d31a7 fix: 新增边框4的设置 2022-03-26 23:24:13 +08:00
MTrun
e146018f7d feat: 新增边框7 2022-03-26 23:14:12 +08:00
MTrun
09e402357a feat: 新增边框背景色修改 2022-03-26 22:52:03 +08:00
MTrun
2b2b46a990 fix: 新增边框6 2022-03-26 21:46:41 +08:00
MTrun
7a8a57a078 feat: 新增边框05 2022-03-26 21:22:09 +08:00
MTrun
f3ef1a4022 feat: 新增边框 2022-03-26 20:59:20 +08:00
MTrun
a6c750f877 feat:新增边框13 2022-03-26 16:42:58 +08:00
MTrun
cf92ed55a4 fix:去除border多余class样式 2022-03-26 15:38:52 +08:00
MTrun
caa403a8dc feat: 新增 border 样式修改,修改全部设置引入方式 2022-03-26 15:36:52 +08:00
MTrun
822fbbcd24 fix: 解决多余导出错误 2022-03-26 11:32:58 +08:00
MTrun
71972f0d8c feat: 新增 border 2022-03-26 11:31:14 +08:00
MTrun
9326c9a59c fix: 修改useChartHistoryStoreStore命名错误 2022-03-25 20:00:21 +08:00
MTrun
c46c6d30e7 fix: 修改图表数据接口的hooks 2022-03-25 19:58:39 +08:00
MTrun
a43f0791ea fix:修改格式 2022-03-25 19:43:44 +08:00
MTrun
19ed2fec19 fix: 设置图表只在预览页面进行轮询请求 2022-03-24 16:51:31 +08:00
MTrun
66373a427b feat: 新增预览接口数据动态获取功能 2022-03-24 14:19:07 +08:00
MTrun
0d1c24c536 fix: 修改mock方式 2022-03-24 09:19:14 +08:00
MTrun
a7b2d5a24b feat: 新增编辑阶段 mock 接口轮询请求功能 2022-03-23 20:41:50 +08:00
MTrun
4d55e5a57b fix: 修改data模块的数据调用和全局设定 2022-03-22 15:46:17 +08:00
MTrun
890dd88b5f fix: 抽离update hook 2022-03-22 11:41:43 +08:00
MTrun
2d36600e3b fix: 修改快捷键功能与提示 2022-03-22 10:33:40 +08:00
MTrun
2e038ad7db fix:修改请求的数据格式错误的问题 2022-03-22 09:39:53 +08:00
mtruning
27fcec9846 fix: 新增mock数据请求功能 2022-03-21 23:03:10 +08:00
MTrun
62ed00e31c feat: 新增数据请求接口 2022-03-21 20:56:42 +08:00
mtruning
c937555020 fix: 封装数据处理 2022-03-21 00:57:23 +08:00
mtruning
593a48eea4 fix: 修改线条的 dataset 问题 2022-03-20 18:11:26 +08:00
mtruning
7ea078dbf3 fix: 修改导出的数据项 2022-03-20 16:13:33 +08:00
mtruning
6d4be943d7 fix:新增数据设置小提示 2022-03-19 23:47:24 +08:00
mtruning
8ee18819c5 feat: 新增数据校验,数据导入导出 2022-03-19 23:28:33 +08:00
mtruning
e672b75453 fix: 修改重命名可以无数据的问题 2022-03-19 21:42:07 +08:00
mtruning
c4e3c34842 fix: 分离配置项里的名称部分数据 2022-03-19 21:29:03 +08:00
MTrun
c4ff0d24b7 feat:新增全局接口配置,单个图表映射表,抽离柱状图数据格式, 2022-03-18 20:36:05 +08:00
MTrun
501dfdc223 feat: 新增数据请求配置 2022-03-17 20:18:46 +08:00
MTrun
c399277350 fix: 预览页改成hook写法 2022-03-17 10:53:18 +08:00
MTrun
b101b2b857 fix: 修改rule坐标错误问题,缩放导致长度不足问题 2022-03-16 11:22:22 +08:00
MTrun
7e8d30382f fix: 修改ruler位置,解决缩放问题 2022-03-16 11:03:52 +08:00
MTrun
0fdbeb1e7a feat: 新增类型校验函数 2022-03-15 19:40:55 +08:00
MTrun
9aec36b201 fix: 添加注释 2022-03-15 19:06:19 +08:00
MTrun
0933486e6f fix: 新增标尺 2022-03-15 17:49:02 +08:00
MTrun
33b0c94159 fix: 修改规范性命名问题 2022-03-14 19:56:09 +08:00
MTrun
6c402b3a17 fix: 修改名称规范问题 2022-03-14 19:52:01 +08:00
MTrun
3a9f68384f fix: 修改闭合组件不规范的问题 2022-03-14 16:07:35 +08:00
MTrun
3747771078 fix: 修改 Color TS 类型出错导致无法打包的问题 2022-03-14 11:53:14 +08:00
mtruning
67dc58e08e fix: 优化颜色列表卡顿问题 2022-03-13 13:37:25 +08:00
mtruning
987f4f73a2 feat: 新增推荐色 2022-03-13 00:42:18 +08:00
mtruning
dd0bf5611d fix: 抽离颜色列表组件 2022-03-12 23:51:03 +08:00
MTrun
58d20b7c8d fix: 修复修改颜色不会存储本地的问题 2022-03-12 18:51:38 +08:00
MTrun
a4c14c39b3 feat: 新增主题颜色选择 2022-03-12 18:46:51 +08:00
MTrun
ddc005ec10 fix: 修改全局颜色配置的问题 2022-03-12 15:25:26 +08:00
MTrun
4d54a3029b fix:修改移动端提示文案字体 2022-03-12 11:46:39 +08:00
MTrun
07cb0a7d3a fix: 解决登录页不适配大尺寸的问题 2022-03-12 11:45:19 +08:00
MTrun
0ee76c1579 fix: 解决不能预览渐变色的问题 2022-03-12 11:29:57 +08:00
MTrun
3560effe2c feat: 支持渐变色全局变换 2022-03-11 10:22:54 +08:00
MTrun
0abcbbae53 fix: 去除模态层 2022-03-11 08:45:04 +08:00
MTrun
43844c834e feat: 新增渐变色根据全局变换 2022-03-10 21:35:49 +08:00
MTrun
d15e551743 fix: 解决缩放大于100%的问题 2022-03-10 20:54:02 +08:00
MTrun
d1c0cae68e fix: 去除配置文件里的 node 指向 2022-03-10 20:05:05 +08:00
MTrun
a1a2e260f6 fix: 修改预览的存储方式为 sessionStorage 2022-03-10 18:57:18 +08:00
MTrun
aebed94140 fix: 修改页面 changeSize 逻辑 2022-03-10 17:55:59 +08:00
MTrun
96740a6841 fix: 修改组件名称大写的问题 2022-03-10 14:57:34 +08:00
MTrun
c29ecc8b0b fix: 修改预览页面动态注册方式 2022-03-10 14:34:26 +08:00
MTrun
790cc7b878 fix: 修改引入方式,去除config文件上的node指向 2022-03-10 14:12:26 +08:00
MTrun
b71b7bfd0e fix: 修改动态引入逻辑 2022-03-10 10:14:52 +08:00
MTrun
06b1e40930 feat: 新增折线图颜色控制 2022-03-09 20:27:53 +08:00
MTrun
159ffb4af2 fix: 修改折线图配置 2022-03-09 19:22:58 +08:00
MTrun
e69fd0cdc4 fix: 取消通用样式的默认展示 2022-03-09 18:11:48 +08:00
MTrun
a467283618 feat: 新增定位和style处理 2022-03-09 17:37:32 +08:00
MTrun
a6e5dec2c0 feat: 新增动画功能 2022-03-09 09:21:47 +08:00
MTrun
b96c2f0d3e feat: 新增预览背景图 2022-03-07 15:39:40 +08:00
MTrun
f8785a4505 fix: 修改类型报错 2022-03-07 15:21:45 +08:00
MTrun
5b14e3a70f fix: 解决首页注册组件的bug 2022-03-07 12:51:50 +08:00
MTrun
e6a99302d6 feat: 新增组件预览 2022-03-07 12:33:05 +08:00
mtruning
8aa4490ea9 fix: 接收winopen的返回值 2022-03-07 01:04:29 +08:00
mtruning
a451faad77 fix: 提交动态注册的代码 2022-03-06 21:26:31 +08:00
mtruning
e3816524da fix: 修改预览的问题 2022-03-06 20:31:45 +08:00
mtruning
75232ee902 feat:新增预览页面位置图表位置渲染功能 2022-03-06 16:54:48 +08:00
mtruning
4405ebd30d feat: 新增预览页缩放功能 2022-03-06 15:19:18 +08:00
mtruning
0946d170d7 feat: 新增预览页 2022-03-06 02:08:14 +08:00
mtruning
30361aa7ca fix: 去除多余输出 2022-03-05 22:12:53 +08:00
mtruning
76b22ce05c feat:新增吸附修改的全局设置 2022-03-05 22:11:25 +08:00
MTrun
00f2359b9d feat: 新增对齐线 2022-03-04 20:57:36 +08:00
MTrun
40b8dbc4d5 feat: 新增事件入口 2022-03-03 14:36:58 +08:00
MTrun
1c67e06138 fix: 优化图表列表性能 2022-03-03 11:01:52 +08:00
MTrun
a2e91bac1e feat: 新增尺寸控件 2022-03-03 10:25:50 +08:00
MTrun
19b7429215 feat: 新增组件缩放 2022-03-03 10:19:41 +08:00
MTrun
7412c777ee fix: 修改自适应比例 2022-03-03 09:57:48 +08:00
MTrun
499f36bc62 feat:新增动画配置项目 2022-03-02 17:34:45 +08:00
MTrun
862753d35e fix:修改屏幕适配的代码 2022-03-02 16:18:34 +08:00
MTrun
b691003187 fix: 移动打包配置位置 2022-03-01 16:46:48 +08:00
MTrun
a63efa5d26 feat: 图表组件图片换成懒加载 2022-03-01 16:39:04 +08:00
MTrun
013edc4f11 feat: 新增移动端拦截 2022-03-01 15:58:39 +08:00
MTrun
504b3a762f build: 优化图片大小 2022-03-01 15:43:01 +08:00
MTrun
f26d7e394d fix: 全局设置新增关闭按钮 2022-03-01 15:39:13 +08:00
MTrun
56bf44e4b0 fix: 修改 footer 位置的 doc 链接地址 2022-03-01 14:09:34 +08:00
MTrun
1d6ab1ae5b fix: 修改首页图片和地址指向 2022-02-28 21:15:57 +08:00
MTrun
4e1069ec1d build: 修改打包配置 2022-02-28 20:26:41 +08:00
MTrun
63ed00bd28 fix: 修改图片引入打包报错的问题 2022-02-28 20:26:04 +08:00
MTrun
5675ea0720 feat: 补齐配置文件 2022-02-28 16:08:25 +08:00
MTrun
c29a70f90b type: 修改编译错误的type类型 2022-02-28 11:00:33 +08:00
MTrun
3fe2fbfc08 feat: 加密登录数据,修改折线图表UI 2022-02-28 10:30:51 +08:00
mtruning
8d97bdc976 feat: 新增图表独立配置混合 2022-02-26 17:38:24 +08:00
MTrun
0bf38c032c feat: 动态注册组件,优化首页出现性能 2022-02-25 22:10:18 +08:00
MTrun
4a76e419be fix: 左侧使用异步加载 2022-02-25 21:45:14 +08:00
MTrun
0c2da460a3 feat: 新增图表位置处理 2022-02-25 21:26:56 +08:00
MTrun
d9a3b358e7 fix: 修改类型报错的问题 2022-02-25 15:51:19 +08:00
MTrun
632c09bf01 feat:新增渐变背景色 2022-02-25 11:19:51 +08:00
MTrun
2b0008ffc7 build: 升级依赖 2022-02-25 11:19:37 +08:00
MTrun
c6beee08df feat: 新增折线图,修改legend位置 2022-02-24 21:02:08 +08:00
MTrun
6c2692bb96 fix: 修改组件不会一起变更的问题 2022-02-24 20:19:08 +08:00
MTrun
d690f4277f feat: 新增组件重命名 2022-02-24 20:11:38 +08:00
MTrun
e874ca1e8c fix: 修改 show 开关的问题 2022-02-24 17:55:29 +08:00
MTrun
7918918a69 feat: 修改组件展示,支持单个组件数据编辑 2022-02-24 17:23:20 +08:00
MTrun
a4198bf75a fix: 修改图表类型错误 2022-02-24 10:21:33 +08:00
MTrun
89ac30438a fix: 解决页面销毁Dom没有绑定的内存泄漏 2022-02-23 16:22:18 +08:00
MTrun
d7ebf0e173 fix: 新增主题色配置 2022-02-23 15:49:00 +08:00
MTrun
d1d27a740f feat:新增全局属性配置 2022-02-23 15:23:09 +08:00
MTrun
148297766c fix: 去除不正确图片 2022-02-23 14:44:10 +08:00
MTrun
144980e45d feat: 新增全局测试 2022-02-23 14:11:33 +08:00
MTrun
116de1a70a feat: 新增全局设置通用组件 2022-02-22 15:50:50 +08:00
MTrun
bc8b0a5226 feat: 新增全局样式修改 2022-02-22 15:32:57 +08:00
MTrun
3f828d4208 build: 升级naive包 2022-02-22 10:10:39 +08:00
MTrun
a3b26ff247 feat: 新增样式按需引入 2022-02-21 21:30:35 +08:00
MTrun
f06aafd14e fix: 解决合并会修改原属性的bug 2022-02-21 21:21:52 +08:00
MTrun
8f9e45e660 fix: 修改全局设置不触发的问题 2022-02-21 21:16:44 +08:00
MTrun
8b890fb5e3 feat: 新增全局样式设置 2022-02-21 19:45:11 +08:00
MTrun
133c6bea6b fix:提取AttrType类型 2022-02-16 20:06:51 +08:00
MTrun
c107c8c440 fix: 解决重叠拖拽放置位置错误的bug 2022-02-16 19:18:39 +08:00
MTrun
825d21a3a9 fix: 修改加载样式 2022-02-16 15:54:23 +08:00
MTrun
383d419f84 fix: 修改上传图片不会自动展示的问题 2022-02-15 15:42:59 +08:00
MTrun
b20e842af9 fix: 修改filter透明度 2022-02-14 09:41:44 +08:00
mtruning
d13ba5ff78 fix: 修改类型错误,调整页面细节,新增拖拽上传图片 2022-02-12 12:16:00 +08:00
MTrun
29ce548662 fix: 去除多余属性 2022-02-11 20:42:03 +08:00
MTrun
a3ec971be2 style: 修改名称 2022-02-10 20:01:22 +08:00
MTrun
7747ac07ed perf: 优化大屏的背景渲染方式,提升性能 2022-02-10 16:34:34 +08:00
MTrun
902145df71 fix: 修改注释 2022-02-10 09:26:50 +08:00
MTrun
31194bd4d6 fix: 修改工具类名称 2022-02-09 20:37:00 +08:00
MTrun
9e1a9bf6c3 fix: 新增 const 约束 2022-02-09 20:30:10 +08:00
MTrun
fb136b0918 fix: 修改 TS 问题 2022-02-09 20:12:54 +08:00
MTrun
0cf898bd57 fix:新增dev host 接口 2022-02-09 17:40:23 +08:00
MTrun
60b18a20fa fix: 修改标题 2022-02-09 09:16:34 +08:00
MTrun
62f8e389a8 fix: 修改全局配置展示 2022-02-08 19:39:57 +08:00
MTrun
b258b0f651 fix: 优化历史记录性能 2022-02-08 11:29:33 +08:00
MTrun
1b7bcd3e32 fix: 修改图层顺序 2022-02-07 21:02:49 +08:00
MTrun
88b03a416c fix: 修改右键 2022-02-07 20:55:40 +08:00
MTrun
8fb8b9328d feat: 新增自定义背景图 2022-02-06 21:35:38 +08:00
MTrun
688ce50c58 feat:修改色版展示 2022-02-06 11:21:43 +08:00
MTrun
314daede24 feat: 新增主题色选项 2022-02-06 01:04:05 +08:00
MTrun
7b24b90fbc feat: 新增撤回前进功能 2022-02-04 18:28:02 +08:00
MTrun
7d5985f743 feat: 清空剪贴板 2022-02-04 13:22:00 +08:00
MTrun
5590a3024f fix: 格式 2022-02-04 12:19:02 +08:00
MTrun
71e13c83e6 feat: 新增剪切 2022-02-04 12:17:50 +08:00
MTrun
ad8cc8a003 feat: 新增复制粘贴功能 2022-02-03 22:54:31 +08:00
MTrun
0cda041315 fix: 新增图表类型 2022-02-02 18:17:45 +08:00
MTrun
8ef13b6325 fix: 修改拖拽之后未选中的问题 2022-02-02 14:18:39 +08:00
MTrun
ccf78c6dd2 fix:新增横向柱状图 2022-02-02 00:46:42 +08:00
MTrun
ded1f8ae4b feat:新增层级移动功能 2022-02-01 20:57:54 +08:00
MTrun
917772cce0 feat: 新增置顶和置底功能 2022-02-01 17:12:16 +08:00
MTrun
6f93de7ad4 fix:修改删除的bug 2022-02-01 01:20:00 +08:00
MTrun
25368419a3 fix: 修改右键封装逻辑 2022-02-01 00:31:28 +08:00
MTrun
c0392e7370 feat: 新增图层列表右键菜单 2022-01-31 23:43:45 +08:00
MTrun
31d1983958 fix: 修改右键判定区域,新增历史记录store 2022-01-31 23:37:43 +08:00
MTrun
50e62dbed7 fix: 修改plop模板数据 2022-01-31 23:37:08 +08:00
MTrun
25f5d91e87 fix:修改图表拖拽的位置预留 2022-01-30 22:56:29 +08:00
MTrun
c8d7cca4ed fix: 修改选中效果的动画 2022-01-30 19:38:12 +08:00
MTrun
727a0c8e8e feat: 新增拖拽功能 2022-01-30 14:20:28 +08:00
MTrun
ef40a6347a fix: 修改注释 2022-01-30 00:43:37 +08:00
MTrun
825731edcc fix: 新增选择联动 2022-01-29 23:58:56 +08:00
MTrun
d820cce6d4 featr: 新增图层选中的样式 2022-01-29 21:44:22 +08:00
MTrun
3acf2fe732 fix: 新增图层 2022-01-29 11:44:51 +08:00
MTrun
a2a3a31df5 fix:新增图层处理 2022-01-28 21:17:49 +08:00
MTrun
929bc4da9f fix: 修复滚动条的bug 2022-01-28 21:05:07 +08:00
MTrun
56a36cf306 fix: 约束自动缩放的最大比例 2022-01-28 20:54:13 +08:00
MTrun
dc7db58a8e fix: 新增图表居中拖拽 2022-01-27 23:16:51 +08:00
MTrun
e8999a7fdf fix: 新增右键和删除功能 2022-01-27 22:30:35 +08:00
MTrun
b93509a6bb feat: 新增图表外层 2022-01-27 20:47:22 +08:00
MTrun
a606039976 fix: 去除多余的引入 2022-01-27 19:10:04 +08:00
MTrun
37ee9de02b fix: 位置处理提取 2022-01-26 17:38:16 +08:00
MTrun
2f2a395406 fix: 修改文件结构 2022-01-26 15:46:25 +08:00
mtruning
01e2ba6db9 fix: 处理位置定位的问题 2022-01-25 22:41:12 +08:00
mtruning
62f012f2e9 feat: 新增柱状图图表 2022-01-25 22:29:44 +08:00
MTrun
49fb0e1113 fix: 新增组件拖拽 2022-01-25 18:19:44 +08:00
MTrun
663ef6f2a6 fix: 修改配置项目 2022-01-25 11:09:32 +08:00
MTrun
bb7aa78738 fix: 编写拖拽信息 2022-01-24 21:12:18 +08:00
MTrun
08a24b9e3c fix: 修改命名 2022-01-24 16:25:43 +08:00
MTrun
151ec13904 fix: 修改一点类型错误的问题 2022-01-24 14:28:31 +08:00
mtruning
d7965c5857 fix: 修改类型 2022-01-23 19:22:54 +08:00
mtruning
0033b42008 feat: 新增resize时的边框变色交互 2022-01-23 01:12:49 +08:00
MTrun
f9d533972f fix: 修改缩放的联动 2022-01-21 17:55:35 +08:00
MTrun
c57a4850b6 feat: 新增滚动条控制 2022-01-20 22:13:51 +08:00
MTrun
ceb8cd5158 feat: 新增工作区域内容模块 2022-01-20 21:25:35 +08:00
MTrun
825b3bf2ea fix: 新增 plop 自动化生成工具 2022-01-19 21:29:04 +08:00
MTrun
a7905b6a60 feat: 图表组件注册 2022-01-19 19:59:11 +08:00
MTrun
95f5d725ac 处理开始拖拽时的数据 2022-01-19 09:19:17 +08:00
MTrun
c1bbc83acd fix: 修改左侧图表列表的中文键名问题 2022-01-18 21:41:52 +08:00
mtruning
e1bb655bf1 fix: 修改key 2022-01-16 22:17:34 +08:00
mtruning
c63637360f fix: 修改图标 2022-01-16 15:54:59 +08:00
mtruning
f626d8a157 fix: 修改图标和页面 2022-01-16 15:28:33 +08:00
mtruning
26b698097d feat:新增组件 2022-01-15 22:35:32 +08:00
mtruning
9f2ebba293 feat:新增图表 2022-01-15 21:54:04 +08:00
mtruning
cb7a8298ec feat: 新增左侧图表数据 2022-01-15 21:05:11 +08:00
mtruning
551a1f2d01 fix: 抽离全局设置的位置 2022-01-15 16:07:46 +08:00
mtruning
3758db4cb6 fix: 新增组件 2022-01-15 14:56:48 +08:00
mtruning
f6860c3fa6 fix: 完成左侧列表的其余内容 2022-01-15 12:50:00 +08:00
MTrun
ae71e13c6d feat: 新增种类数量识别 2022-01-14 22:18:47 +08:00
MTrun
2b83ea6452 fix: 处理缺失的类型 2022-01-14 22:10:59 +08:00
MTrun
3e511069b5 fix: 优化组件渲染方式 2022-01-14 22:07:02 +08:00
MTrun
02c3f7478d fix: 修改边距 2022-01-14 16:27:23 +08:00
MTrun
0a75035339 feat: 新增chart组件数据内容 2022-01-14 16:17:14 +08:00
MTrun
75fb327d7e fix: 修改颜色的深浅 2022-01-13 18:01:33 +08:00
MTrun
f243dbdd55 fix: 新增图表列表数据 2022-01-13 16:20:25 +08:00
MTrun
24c649d19f fix: 修改左侧的渲染样式 2022-01-12 10:41:26 +08:00
MTrun
c2369dd733 feat:新增图表组件的切换 2022-01-11 20:56:19 +08:00
MTrun
9577bd9de7 fix: 修改拖拽区域名称 2022-01-11 14:15:14 +08:00
MTrun
6a23fd2d72 fix: 修改icon警告信息 2022-01-10 09:49:08 +08:00
MTrun
2e1c143d9b fix: 修改英语的翻译间隔 2022-01-10 09:03:31 +08:00
mtruning
caadad501f fix: 修改语言获取位置 2022-01-09 21:35:46 +08:00
mtruning
39ab04e051 fix: 修改语言挂载问题 2022-01-09 19:22:55 +08:00
mtruning
7332dd1e98 fix: 修改绘制界面样式,新增返回首页按钮 2022-01-09 17:12:35 +08:00
MTrun
3d8519519b fix: 修改收缩功能 2022-01-08 21:01:52 +08:00
MTrun
58261fd3a3 fix: 设置菜单折叠宽度 2022-01-08 15:00:52 +08:00
MTrun
1298abd9e6 fix: 修改本地存储变量名 2022-01-08 14:27:56 +08:00
MTrun
5b7da15bdd fix: 修改切换语言不会同步的问题 2022-01-08 10:30:45 +08:00
MTrun
1b878b0016 fix: 修改语言切换不会同步的问题 2022-01-08 09:31:14 +08:00
MTrun
05ed82b091 fix: 处理界面展示相关联的问题 2022-01-07 22:02:13 +08:00
MTrun
34722916b0 fix🐛: 解决切换语言不会监听的问题 2022-01-07 12:25:23 +08:00
MTrun
4333b58938 fix: 修改底部颜色 2022-01-06 19:21:48 +08:00
MTrun
97a0a60754 fix: 新增切换按钮 2022-01-06 15:37:44 +08:00
MTrun
df1fccffa7 feat:完整布局封装 2022-01-06 13:45:51 +08:00
MTrun
1afc06b079 fix: 去除 layout 文件夹 2022-01-05 21:12:38 +08:00
MTrun
ef008adf51 fix: 新增 store 控制 2022-01-05 21:05:55 +08:00
MTrun
f00935d795 feat: 新增顶部功能 2022-01-05 20:52:49 +08:00
MTrun
1031d3e248 fix: 新增 chart 顶部按钮 2022-01-05 18:04:41 +08:00
MTrun
cc5d6ae5d7 fix: 修改侧边栏缩小后的宽度 2021-12-23 15:13:05 +08:00
mtruning
60183b6a60 新增modal跳转 2021-12-23 12:17:25 +08:00
MTrun
a02877e38f fix: 修改语言切换 2021-12-22 15:31:20 +08:00
MTrun
5b98d5703f 语言切换 2021-12-22 10:38:57 +08:00
MTrun
4303e79e6f 编辑注释 2021-12-21 15:57:39 +08:00
MTrun
c606102a29 完成编辑和新建的跳转 2021-12-21 15:56:35 +08:00
MTrun
3440da72d6 fix: 新增chart页路由参数 2021-12-21 15:09:39 +08:00
MTrun
f9d0547fc3 feat: 完成新开页的设计 2021-12-21 14:57:31 +08:00
MTrun
35a05c046b fix: 抽离弹出框 hoo,解决bug 2021-12-21 10:06:03 +08:00
MTrun
72c7bb3ecc 新增时间 2021-12-20 19:54:24 +08:00
MTrun
8a57a7f3b9 fix: 修改路由title 2021-12-20 19:26:23 +08:00
MTrun
54dd1a0dbe fix: 修改删除按钮,压缩图片 2021-12-20 18:20:12 +08:00
MTrun
0f71961d0c 处理图片引入 2021-12-20 18:06:08 +08:00
137 changed files with 1061 additions and 4448 deletions

175
README.md
View File

@@ -4,71 +4,124 @@
**`master-fetch` 分支是带有后端接口请求的分支**
**后端项目地址:[https://gitee.com/MTrun/go-view-serve](https://gitee.com/MTrun/go-view-serve)**
### feat-unify-test 分支目标
+ 实现 backend 后端工厂
将后端业务逻辑集中到 backend 了,控制 BackEndFactory 就可以适配不同的后端。
伪代码如下:
export const BackEndFactory = ():IBackend=>{
switch(项目后端配置){
case "无数据库":
return new MockBackend() // 等同: -master ,没有存储
case "indexdb":
return new IndexDbBackend() // 这次开发的,用 indexdb 做测试
case "java":
return new JavaBackend() // 等同: -fetch 没 java 环境,还没做
case "python":
return new PythonBackend() // 自定义开发的后端
。。。 其他 oss 、云平台的后端 。。。
}}
意义:
1 unify 统一 -fetch 和 master 分支,消除分支之间的差异。
2 方便接入不同的自定义后端平台。
3 前端存储功能让测试工作更加方便
**接口说明地址:[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)**
+ 完善事件处理机制
在事件中修改图表配置
在事件中修改图表数据
在事件中调用图表 exposed 函数
数据驱动界面
## 使用
### 试验功能1Backend 后端工厂
+ 对比 -fetch 分支,梳理后端逻辑到 backend 目录的 ibackend 接口
+ 登录 - login
+ 登出 - logout
+ 预览token 注入或单点登陆 - checkToken
+ 显示项目列表和分页 - projectList
+ 保存、发布、修改名称 - updateProject
+ 复制项目 - copyProject
+ 图表内的图片上传 - uploadFile
+ 上传图片显示处理 - getFileUrl
+ IndexDbBackend 用indexdb浏览器数据库实现了 project 相关所有功能。
+ Todo: 统一后端错误处理
+ Todo开发 javabackend适配现有的后端
所有的接口地址位置:`src\api\path\*`
### 试验功能2事件处理机制
+ 实现最常用的互动:找到图表元素、显示或隐藏、修改数据
+ 核心代码useLifeHandler.hook.ts
+ 在事件代码中通过 runtime 实现运行时刻的图表管理,提供基础函数:
+ selectComponents 选择多个图表
+ selectOneComponent 选择一个图表
+ getChartConfig 读取图表
+ setChartConfig 设置图表
+ callExposed 调用图表 exposed 的函数
+ 以下例子可以在点击事件中加入代码并预览,测试效果。
接口地址修改:`.env`
+ 例子1 切换显示名称为 饼图 和 柱状图 的图表:
const range = runtime.fn.selectComponents("饼图 柱状图")
const h = runtime.fn.getChartConfig(range, "hide")
runtime.fn.setChartConfig(range, "hide", !h)
### 🤯 后端项目
+ 例子2 修改一个名称 柱状图001 组件id 2wolqibrx3c000 的图表数据,以下两句等效
runtime.fn.setChartConfig("柱状图001", "dataset", {"dimensions":["product","data1","data2"],"source":[{"product":"Mon","data1":120,"data2":130}]})
runtime.fn.setChartConfig("#2wolqibrx3c000", "dataset", {"dimensions":["product","data1","data2"],"source":[{"product":"Mon","data1":120,"data2":230}]})
后端项目gitee地址[https://gitee.com/MTrun/go-view-serve](https://gitee.com/MTrun/go-view-serve)
+ 例子3 找到一个组并隐藏
const c = runtime.fn.selectOneComponent("分组")
if(c){
console.log(runtime.fn.getChartConfig(c, "isGroup" ))
runtime.fn.setChartConfig(c, "hide", true)
}
接口说明地址:[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)
```shell
# port
VITE_DEV_PORT = '8080'
# development path
VITE_DEV_PATH = 'http://127.0.0.1:8080'
# production path
VITE_PRO_PATH = 'http://127.0.0.1:8080'
```
公共前缀修改:`src\settings\httpSetting.ts`
```shell
// 请求前缀
export const axiosPre = '/api/goview'
```
接口封装:`src\api\http.ts`
```ts
import axiosInstance from './axios'
import { RequestHttpEnum, ContentTypeEnum } from '@/enums/httpEnum'
export const get = (url: string, params?: object) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.GET,
params: params,
})
}
export const post = (url: string, data?: object, headersType?: string) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.POST,
data: data,
headers: {
'Content-Type': headersType || ContentTypeEnum.JSON
}
})
}
export const put = (url: string, data?: object, headersType?: string) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.PUT,
data: data,
headers: {
'Content-Type': headersType || ContentTypeEnum.JSON
}
})
}
export const del = (url: string, params?: object) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.DELETE,
params
})
}
// 获取请求函数默认get
export const http = (type?: RequestHttpEnum) => {
switch (type) {
case RequestHttpEnum.GET:
return get
case RequestHttpEnum.POST:
return post
case RequestHttpEnum.PUT:
return put
case RequestHttpEnum.DELETE:
return del
default:
return get
}
}
```
## 代码提交
* feat: 新功能
* fix: 修复 Bug
* docs: 文档修改
* perf: 性能优化
* revert: 版本回退
* ci: CICD集成相关
* test: 添加测试代码
* refactor: 代码重构
* build: 影响项目构建或依赖修改
* style: 不影响程序逻辑的代码修改
* chore: 不属于以上类型的其他类型(日常事务)
## 交流
QQ 群1030129384
![QQ群](readme/go-view-qq.png)
![渲染海报](readme/logo-poster.png)

View File

@@ -1,6 +1,6 @@
{
"name": "go-view",
"version": "2.1.0",
"version": "2.0.91",
"scripts": {
"dev": "vite --host",
"build": "vue-tsc --noEmit && vite build",
@@ -22,7 +22,6 @@
"echarts-liquidfill": "^3.1.0",
"echarts-stat": "^1.2.0",
"echarts-wordcloud": "^2.0.0",
"gsap": "^3.11.3",
"highlight.js": "^11.5.0",
"html2canvas": "^1.4.1",
"keymaster": "^1.6.2",
@@ -30,7 +29,6 @@
"naive-ui": "2.33.4",
"pinia": "^2.0.13",
"screenfull": "^6.0.1",
"three": "^0.145.0",
"vue": "^3.2.31",
"vue-demi": "^0.13.1",
"vue-i18n": "9.1.10",
@@ -43,7 +41,6 @@
"@commitlint/cli": "^17.0.2",
"@commitlint/config-conventional": "^17.0.2",
"@types/node": "^16.11.26",
"@types/three": "^0.144.0",
"@typescript-eslint/eslint-plugin": "^5.18.0",
"@typescript-eslint/parser": "^5.18.0",
"@vicons/carbon": "^0.12.0",

30
pnpm-lock.yaml generated
View File

@@ -8,7 +8,6 @@ specifiers:
'@types/keymaster': ^1.6.30
'@types/lodash': ^4.14.184
'@types/node': ^16.11.26
'@types/three': ^0.144.0
'@typescript-eslint/eslint-plugin': ^5.18.0
'@typescript-eslint/parser': ^5.18.0
'@vicons/carbon': ^0.12.0
@@ -32,7 +31,6 @@ specifiers:
eslint-plugin-import: ^2.26.0
eslint-plugin-prettier: ^4.0.0
eslint-plugin-vue: ^8.5.0
gsap: ^3.11.3
highlight.js: ^11.5.0
html2canvas: ^1.4.1
husky: ^8.0.1
@@ -47,7 +45,6 @@ specifiers:
sass: ^1.49.11
sass-loader: ^12.6.0
screenfull: ^6.0.1
three: ^0.145.0
typescript: 4.6.3
vite: 2.9.9
vite-plugin-compression: ^0.5.1
@@ -76,7 +73,6 @@ dependencies:
echarts-liquidfill: 3.1.0_echarts@5.3.3
echarts-stat: 1.2.0
echarts-wordcloud: 2.0.0_echarts@5.3.3
gsap: 3.11.3
highlight.js: 11.5.1
html2canvas: 1.4.1
keymaster: 1.6.2
@@ -84,7 +80,6 @@ dependencies:
naive-ui: 2.33.4_vue@3.2.37
pinia: 2.0.14_ub5l46u3nefphax5x2tezui4oq
screenfull: 6.0.1
three: 0.145.0
vue: 3.2.37
vue-demi: 0.13.1_vue@3.2.37
vue-i18n: 9.1.10_vue@3.2.37
@@ -97,7 +92,6 @@ devDependencies:
'@commitlint/cli': 17.0.2
'@commitlint/config-conventional': 17.0.2
'@types/node': 16.11.40
'@types/three': 0.144.0
'@typescript-eslint/eslint-plugin': 5.28.0_evi7yu7wunhzwb24olrfvzynny
'@typescript-eslint/parser': 5.28.0_sfmgizikprcxt7r54j7cnzjamu
'@vicons/carbon': 0.12.0
@@ -911,7 +905,7 @@ packages:
dev: true
/@types/node/17.0.43:
resolution: {integrity: sha512-jnUpgw8fL9kP2iszfIDyBQtw5Mf4/XSqy0Loc1J9pI14ejL83XcCEvSf50Gs/4ET0I9VCCDoOfufQysj0S66xA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@types/node/-/node-17.0.43.tgz}
resolution: {integrity: sha512-jnUpgw8fL9kP2iszfIDyBQtw5Mf4/XSqy0Loc1J9pI14ejL83XcCEvSf50Gs/4ET0I9VCCDoOfufQysj0S66xA==, registry: https://registry.npm.taobao.org/}
/@types/normalize-package-data/2.4.1:
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
@@ -927,22 +921,12 @@ packages:
'@types/node': 17.0.43
dev: true
/@types/three/0.144.0:
resolution: {integrity: sha512-psvEs6q5rLN50jUYZ3D4pZMfxTbdt3A243blt0my7/NcL6chaCZpHe2csbCtx0SOD9fI/XnF3wnVUAYZGqCSYg==}
dependencies:
'@types/webxr': 0.5.0
dev: true
/@types/through/0.0.30:
resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
dependencies:
'@types/node': 17.0.43
dev: true
/@types/webxr/0.5.0:
resolution: {integrity: sha512-IUMDPSXnYIbEO2IereEFcgcqfDREOgmbGqtrMpVPpACTU6pltYLwHgVkrnYv0XhWEcjio9sYEfIEzgn3c7nDqA==}
dev: true
/@typescript-eslint/eslint-plugin/5.28.0_evi7yu7wunhzwb24olrfvzynny:
resolution: {integrity: sha512-DXVU6Cg29H2M6EybqSg2A+x8DgO9TCUBRp4QEXQHJceLS7ogVDP0g3Lkg/SZCqcvkAP/RruuQqK0gdlkgmhSUA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1900,7 +1884,7 @@ packages:
dev: true
/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}
resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==, registry: https://registry.npm.taobao.org/}
dev: false
/csstype/3.0.11:
@@ -2107,7 +2091,7 @@ packages:
dev: false
/echarts-wordcloud/2.0.0_echarts@5.3.3:
resolution: {integrity: sha512-K7l6pTklqdW7ZWzT/1CS0KhBSINr/cd7c5N1fVMzZMwLQHEwT7x+nivK7g5hkVh7WNcAv4Dn6/ZS5zMKRozC1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/echarts-wordcloud/-/echarts-wordcloud-2.0.0.tgz}
resolution: {integrity: sha512-K7l6pTklqdW7ZWzT/1CS0KhBSINr/cd7c5N1fVMzZMwLQHEwT7x+nivK7g5hkVh7WNcAv4Dn6/ZS5zMKRozC1g==, registry: https://registry.npm.taobao.org/}
peerDependencies:
echarts: ^5.0.1
dependencies:
@@ -3048,10 +3032,6 @@ packages:
resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
dev: true
/gsap/3.11.3:
resolution: {integrity: sha512-xc/iIJy+LWiMbRa4IdMtdnnKa/7PXEK6NNzV71gdOYUVeTZN7UWnLU0fB7Hi1iwiz4ZZoYkBZPPYGg+2+zzFHA==}
dev: false
/handlebars/4.7.7:
resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
engines: {node: '>=0.4.7'}
@@ -4845,10 +4825,6 @@ packages:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
dev: true
/three/0.145.0:
resolution: {integrity: sha512-EKoHQEtEJ4CB6b2BGMBgLZrfwLjXcSUfoI/MiIXUuRpeYsfK5aPWbYhdtIVWOH+x6X0TouldHKHBuc/LAiFzAw==}
dev: false
/through/2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
dev: true

View File

@@ -1,7 +1,4 @@
export enum ModuleTypeEnum {
SYSTEM = 'sys',
PROJECT = 'project',
}
import { ModuleTypeEnum } from '@/enums/httpEnum'
// 接口白名单(免登录)
export const fetchAllowList = [

View File

@@ -1,19 +1,38 @@
import axios, { AxiosResponse, AxiosRequestConfig } from 'axios'
import { ResultEnum } from "@/enums/httpEnum"
import { ErrorPageNameMap } from "@/enums/pageEnum"
import { redirectErrorPage } from '@/utils'
import { PageEnum, ErrorPageNameMap } from "@/enums/pageEnum"
import { StorageEnum } from '@/enums/storageEnum'
import { axiosPre } from '@/settings/httpSetting'
import { SystemStoreEnum, SystemStoreUserInfoEnum } from '@/store/modules/systemStore/systemStore.d'
import { redirectErrorPage, getLocalStorage, routerTurnByName, httpErrorHandle } from '@/utils'
import { fetchAllowList } from './axios.config'
import includes from 'lodash/includes'
const axiosInstance = axios.create({
baseURL: import.meta.env.DEV ? import.meta.env.VITE_DEV_PATH : import.meta.env.VITE_PRO_PATH,
baseURL: `${import.meta.env.PROD ? import.meta.env.VITE_PRO_PATH : ''}${axiosPre}`,
timeout: ResultEnum.TIMEOUT,
})
axiosInstance.interceptors.request.use(
(config: AxiosRequestConfig) => {
// 白名单校验
if (includes(fetchAllowList, config.url)) return config
// 获取 token
const info = getLocalStorage(StorageEnum.GO_SYSTEM_STORE)
// 重新登录
if (!info) {
routerTurnByName(PageEnum.BASE_LOGIN_NAME)
return config
}
const userInfo = info[SystemStoreEnum.USER_INFO]
config.headers = {
...config.headers,
[userInfo[SystemStoreUserInfoEnum.TOKEN_NAME] || 'token']: userInfo[SystemStoreUserInfoEnum.USER_TOKEN] || ''
}
return config
},
(error: AxiosRequestConfig) => {
Promise.reject(error)
(err: AxiosRequestConfig) => {
Promise.reject(err)
}
)
@@ -21,9 +40,27 @@ axiosInstance.interceptors.request.use(
axiosInstance.interceptors.response.use(
(res: AxiosResponse) => {
const { code } = res.data as { code: number }
if (code === ResultEnum.SUCCESS) return Promise.resolve(res.data)
// 重定向
if (ErrorPageNameMap.get(code)) redirectErrorPage(code)
// 成功
if (code === ResultEnum.SUCCESS) {
return Promise.resolve(res.data)
}
// 登录过期
if (code === ResultEnum.TOKEN_OVERDUE) {
window['$message'].error(window['$t']('http.token_overdue_message'))
routerTurnByName(PageEnum.BASE_LOGIN_NAME)
return Promise.resolve(res.data)
}
// 固定错误码重定向
if (ErrorPageNameMap.get(code)) {
redirectErrorPage(code)
return Promise.resolve(res.data)
}
// 提示错误
window['$message'].error(window['$t']((res.data as any).msg))
return Promise.resolve(res.data)
},
(err: AxiosResponse) => {

View File

@@ -13,7 +13,7 @@ export const get = (url: string, params?: object) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.GET,
params: params
params: params,
})
}

View File

@@ -17,7 +17,6 @@ export const scatterBasicUrl = '/mock/scatterBasic'
export const mapUrl = '/mock/map'
export const wordCloudUrl = '/mock/wordCloud'
export const treemapUrl = '/mock/treemap'
export const threeEarth01Url = '/mock/threeEarth01Data'
const mockObject: MockMethod[] = [
{
@@ -92,11 +91,6 @@ const mockObject: MockMethod[] = [
method: RequestHttpEnum.GET,
response: () => test.fetchTreemap
},
{
url: threeEarth01Url,
method: RequestHttpEnum.GET,
response: () => test.threeEarth01Data
},
]
export default mockObject

View File

@@ -254,21 +254,4 @@ export default {
msg: '请求成功',
data: tTreemapJson
},
// 三维地球
threeEarth01Data: {
code: 0,
status: 200,
msg: '请求成功',
data: [
{
startArray: { name: '@name', N: '@integer(10, 100)', E: '@integer(10, 100)' },
endArray: [
{ name: '@name', N: '@integer(10, 100)', E: '@integer(10, 100)' },
{ name: '@name', N: '@integer(10, 100)', E: '@integer(10, 100)' },
{ name: '@name', N: '@integer(10, 100)', E: '@integer(10, 100)' },
{ name: '@name', N: '@integer(10, 100)', E: '@integer(10, 100)' }
]
}
]
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

View File

@@ -1,146 +0,0 @@
/**
* 后端接口,相关功能对应表:
* 登录 - login
* 登出 - logout
* 预览token 注入或单点登陆 - checkToken
* 显示项目列表和分页 - projectList
* 保存、发布、修改名称 - updateProject
* 复制项目 - copyProject
* 图表内的图片上传 - uploadFile
* 上传图片显示处理 - getFileUrl
* 所有接口返回格式MyResponseType
*/
import { IndexDbBackend } from "./indexdb/indexdbbackend";
// import { PythonBackend } from "./python/pythonbackend";
export interface MyResponseType {
code: number; // 状态200 表示接口调用成功参考HttpEnum
msg: string; // 提示信息,配合 data 和 code
data: any; // data = null 表示接口结果错误,错误原因放在 msg
}
export class MyResponse implements MyResponseType {
code: number = 200;
msg: string = "";
data: any = {};
}
/**
* 实现 IBackend 后端接口
* 错误处理:
*/
export interface IBackend {
/**
* 初始化后端系统测试后端连接oss地址等
* @param data 可选,备用
*/
init(data:any):any
/**
* 登陆
* @param data {} .username .password
* @return MyResponseType
* .data 须包含:
* token:{tokenValue:"", tokenName:""},
* userinfo:{nickname:"", username: "", id: 用户ID}
* 错误处理:
* 1 接口错误 .code 不为 200 .msg 可选,后端反馈错误信息
* 2 登陆错误 .code=200 .data = null, msg 可选,反馈不能登陆的原因
* 登陆信息.data 记录:
* setLocalStorage(GO_LOGIN_INFO_STORE, res.data)
*/
login(data:any):any
/**
* 通知后端登出
*/
logout():any
/**
* 检查Token是否有效配合预览页面和单点登陆备用
* @param data {tokenValue, tokenName}
* @return 同 login()
*/
checkToken(data:any):any
/**
* 项目列表
* @param data {} .page, .limit
* @return [项目],字段名称需要进行 map
* id: projectId
* title:projectName
* release,
* label:remarks
* image:indexImage 如果需要挂刷新,在这里处理。如果需要拼接 urlgetFileUrl也在这里处理好。
*/
projectList(data:any):any
/**
* 新增项目
* @param data
* .projectName
* @return id 新项目 ID
*/
createProject(data: any):any
/**
* 获取项目
* @param data .projectId
* @return
id:projectId
projectName,
state: release,
remarks,
content
*/
fetchProject(data: any):any
/**
* 修改项目
* @param data
* .projectId 必须
* .projectName 可选
* .release 可选
* .content 可选
* .object File 可选 对象
* .remarks 可选
* @return
*/
updateProject(data: any):any
/**
* 复制项目
* @param data
* .copyId 需要复制的项目ID
* .projectName
* @return id 新项目ID
*/
copyProject(data: any):any
/**
* 删除项目
* @param data
* .projectId
* @return
*/
deleteProject(data: any):any
/**
* 文件上传
* @param file File 图片对象
* @param params 备用 Todo: 上传文件可带上项目ID和其他附加信息以便后端文件管理
* @return .uri 文件对象 uri。建议在图表中保存相对地址通过 getFileUrl 得到完整地址
*/
uploadFile(file: File, params: any):any
/**
* 文件地址转换,处理 uploadFile 的返回地址。如果是绝对地址,可以不处理
* @param uploadUri 上传返回的 uri
* @return 供 image.src 使用的地址信息
*/
getFileUrl(uploadUri:string):string
}
export const BackEndFactory = new IndexDbBackend();
// export const BackEndFactory = new MockBackend();
// export const BackEndFactory = new PythonBackend();

View File

@@ -1,147 +0,0 @@
/**
* IndexDb 帮助类
*/
const win: { [k: string]: any } = window || globalThis;
const indexedDB =
win.indexedDB || win.mozIndexedDB || win.webkitIndexedDB || win.msIndexedDB;
const dbs: { [k: string]: IDBDatabase } = {};
let databaseName: string;
let request: IDBOpenDBRequest;
interface AnyEvent {
[k: string]: any;
}
export interface TableOption {
storeName: string;
option: { [K: string]: any };
index: { [K: string]: any }[];
}
export const createDB = (
name: string,
version?: string,
options?: TableOption[],
) =>
new Promise<IDBDatabase>((resolve, reject) => {
if (!indexedDB) reject('浏览器不支持indexedDB');
databaseName = name;
if (dbs?.[name]) {
resolve(dbs[name]);
return;
}
request = indexedDB.open(name, version);
createTable(options)?.then((db: IDBDatabase) => resolve(db));
request.onsuccess = (event: AnyEvent) => {
// IDBDatabase
const db = event.target.result;
// 缓存起来
dbs[name] = db;
resolve(db);
};
request.onerror = (event: AnyEvent) => reject(event);
});
export const createTable = (options?: TableOption[]) => {
if (!options) return;
return new Promise<IDBDatabase>((resolve) => {
request.onupgradeneeded = (event: AnyEvent) => {
const db = event.target.result;
dbs[databaseName] = db;
for (const i in options) {
// 判断是否存在表
if (!db.objectStoreNames.contains(options[i].storeName)) {
const objectStore = db.createObjectStore(
options[i].storeName,
options[i].option,
);
for (const j of options[i].index) {
objectStore.createIndex(j.name, j.keyPath, {
unique: j.unique,
});
}
}
}
resolve(db);
};
});
};
const getTransaction = async (name: string, version?: string) => {
let db: IDBDatabase;
// 先从缓存获取
if (dbs[databaseName]) {
db = dbs[databaseName];
} else {
db = await createDB(databaseName, version);
}
return db.transaction(name, 'readwrite');
};
const getObjectStore = async (
name: string,
version?: string,
): Promise<IDBObjectStore> => {
const transaction = await getTransaction(name, version);
return transaction.objectStore(name);
};
const getStore = (name: string, type: string, data: any) =>
new Promise<IDBDatabase>((resolve) => {
getObjectStore(name).then((objectStore: IDBObjectStore | any) => {
const request = objectStore[type](data);
request.onsuccess = (event: AnyEvent) =>
resolve(event.target.result);
});
});
const findStore = (
name: string,
start: any,
end: any,
startInclude: any,
endInclude: any,
) =>
new Promise<IDBDatabase>((resolve, reject) => {
getObjectStore(name).then((objectStore: IDBObjectStore) => {
const request = objectStore.openCursor(
IDBKeyRange.bound(start, end, startInclude, endInclude),
);
request.onsuccess = (event: AnyEvent) =>
resolve(event.target.result);
request.onerror = (event: AnyEvent) => reject(event);
});
});
export interface DBSelect {
add: (data: any) => Promise<IDBDatabase>;
get: (data: any) => Promise<IDBDatabase>;
getAll: () => Promise<IDBDatabase>;
del: (data: any) => Promise<IDBDatabase>;
clear: (data: any) => Promise<IDBDatabase>;
put: (data: any) => Promise<IDBDatabase>;
find: (
start: any,
end: any,
startInclude: any,
endInclude: any,
) => Promise<IDBDatabase>;
}
// 获取一个store
export const onDBSelect = async (
name: string,
version: string
): Promise<DBSelect> => {
const add = (data: any) => getStore(name, 'add', data);
const get = (data: any) => getStore(name, 'get', data);
const getAll = () => getStore(name, 'getAll', null);
const del = (data: any) => getStore(name, 'delete', data);
const clear = (data: any) => getStore(name, 'clear', data);
const put = (data: any) => getStore(name, 'put', data);
const find = (start: any, end: any, startInclude: any, endInclude: any) =>
findStore(name, start, end, startInclude, endInclude);
const options: DBSelect = { add, get, getAll, clear, del, put, find };
getObjectStore(name, version);
return options;
};

View File

@@ -1,155 +0,0 @@
import { MyResponse, IBackend } from '../ibackend'
import { createDB, DBSelect, onDBSelect } from '../indexdb/indexdb'
import { fileToUrl, fileToBlob } from "@/utils"
const PROJECT_TABLE = "project"
const IMAGE_TABLE = "image" // 保存图片未实现Todo
const DB_NAME = "goview"
const DB_VER = "1"
export class IndexDbBackend implements IBackend {
public async init(data: any) {
let rtn:MyResponse = new MyResponse;
const db:IDBDatabase = await createDB(DB_NAME, DB_VER, [
{
storeName: PROJECT_TABLE,
option: {
keyPath: "projectId", autoIncrement:true
},
index: [
{name: 'projectId', keyPath: "projectId", unique: true},
{name: 'projectName', keyPath: "projectName", unique: false},
{name: 'release', keyPath: "release", unique: false},
{name: 'remarks', keyPath: "remarks", unique: false},
{name: 'content', keyPath: "content", unique: false},
{name: 'indexImage', keyPath: "indexImage", unique: false}
]
}
])
return rtn;
}
public async login(data:any) {
let rtn:MyResponse = new MyResponse;
if(data.password == "123456" && data.username == "admin"){
rtn.data = {
token:{tokenValue:"mockToken", tokenName:"name"},
userinfo:{nickname:"nickname", username:data.username, id:1}
}
}else{
rtn.data = null
rtn.msg = "admin 和 123456"
}
return rtn;
}
public async logout() {
let rtn:MyResponse = new MyResponse;
return rtn;
}
public async checkToken(data: any) {
let rtn:MyResponse = new MyResponse;
console.log("CheckToken: " + data.token)
rtn.data = {
token:{tokenValue:"mockToken", tokenName:"name"},
userinfo:{nickname:"nickname", username:data.username, id:1}
}
return rtn;
}
public async projectList(data:any){
let rtn:MyResponse = new MyResponse;
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
const r:any = await db.getAll()
rtn.data = []
r.map(function (item: any) {
let url = ""
if(item.indexImage){
const Url = URL || window.URL || window.webkitURL
url = Url.createObjectURL(item.indexImage)
}
rtn.data.push({
id: item.projectId,
title: item.projectName,
release: item.release == 1,
label:item.remarks,
image:url
})
})
return rtn;
}
public async createProject(data: any){
let rtn:MyResponse = new MyResponse;
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
rtn.data.id = await db.add({ projectName:data.projectName })
return rtn;
}
public async fetchProject(data: any){
let rtn:MyResponse = new MyResponse;
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
const r:any = await db.get(parseInt(data.projectId))
rtn.data = {
id:r.projectId,
projectName: r.projectName,
state: r.release,
remarks: r.remarks,
content: r.content
}
return rtn;
}
public async updateProject(data: any){
let rtn:MyResponse = new MyResponse;
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
const row:any = await db.get(parseInt(data.projectId))
if("content" in data) row.content = data.content
if("projectName" in data) row.projectName = data.projectName
if("release" in data) row.release = data.release
if("remarks" in data) row.remarks = data.remarks
if("object" in data) {
row.indexImage = await fileToBlob(data.object)
}
await db.put(row)
return rtn;
}
public async copyProject(data: any){
let rtn:MyResponse = new MyResponse;
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
const row:any = await db.get(parseInt(data.copyId))
rtn.data.id =await db.add({
projectName:data.projectName,
content:row.content,
indexImage:row.indexImage,
remarks:row.remarks
})
return rtn;
}
public async deleteProject(data: any){
let rtn:MyResponse = new MyResponse;
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
await db.del(parseInt(data.projectId))
return rtn;
}
public async changeProjectRelease(data: any){
let rtn:MyResponse = new MyResponse;
return rtn;
}
public async uploadFile(data: File, params:any){
// Todo: 图片可以保存在表中
let rtn:MyResponse = new MyResponse;
rtn.data.uri = fileToUrl(data)
return rtn;
}
public getFileUrl(uploadUri:string){
return uploadUri;
}
}

View File

@@ -1,71 +0,0 @@
import axios, { AxiosResponse, AxiosRequestConfig } from 'axios'
import { ResultEnum } from "@/enums/httpEnum"
import { PageEnum, ErrorPageNameMap } from "@/enums/pageEnum"
import { StorageEnum } from '@/enums/storageEnum'
import { axiosPre } from '@/settings/httpSetting'
import { SystemStoreEnum, SystemStoreUserInfoEnum } from '@/store/modules/systemStore/systemStore.d'
import { redirectErrorPage, getLocalStorage, routerTurnByName, httpErrorHandle } from '@/utils'
import { fetchAllowList } from './axios.config'
import includes from 'lodash/includes'
const axiosInstance = axios.create({
baseURL: `${import.meta.env.PROD ? import.meta.env.VITE_PRO_PATH : ''}${axiosPre}`,
timeout: ResultEnum.TIMEOUT,
})
axiosInstance.interceptors.request.use(
(config: AxiosRequestConfig) => {
// 白名单校验
if (includes(fetchAllowList, config.url)) return config
// 获取 token
const info = getLocalStorage(StorageEnum.GO_SYSTEM_STORE)
// 重新登录
if (!info) {
routerTurnByName(PageEnum.BASE_LOGIN_NAME)
return config
}
const userInfo = info[SystemStoreEnum.USER_INFO]
config.headers = {
...config.headers,
[userInfo[SystemStoreUserInfoEnum.TOKEN_NAME] || 'token']: userInfo[SystemStoreUserInfoEnum.USER_TOKEN] || ''
}
return config
},
(err: AxiosRequestConfig) => {
Promise.reject(err)
}
)
// 响应拦截器
axiosInstance.interceptors.response.use(
(res: AxiosResponse) => {
const { code } = res.data as { code: number }
// 成功
if (code === ResultEnum.SUCCESS) {
return Promise.resolve(res.data)
}
// 登录过期
if (code === ResultEnum.TOKEN_OVERDUE) {
window['$message'].error(window['$t']('http.token_overdue_message'))
routerTurnByName(PageEnum.BASE_LOGIN_NAME)
return Promise.resolve(res.data)
}
// 固定错误码重定向
if (ErrorPageNameMap.get(code)) {
redirectErrorPage(code)
return Promise.resolve(res.data)
}
// 提示错误
window['$message'].error(window['$t']((res.data as any).msg))
return Promise.resolve(res.data)
},
(err: AxiosResponse) => {
Promise.reject(err)
}
)
export default axiosInstance

View File

@@ -1,226 +0,0 @@
import axiosInstance from './axios'
import {
RequestHttpEnum,
ContentTypeEnum,
RequestBodyEnum,
RequestDataTypeEnum,
RequestContentTypeEnum,
RequestParamsObjType
} from '@/enums/httpEnum'
import type { RequestGlobalConfigType, RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d'
export const get = (url: string, params?: object) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.GET,
params: params,
})
}
export const post = (url: string, data?: object, headersType?: string) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.POST,
data: data,
headers: {
'Content-Type': headersType || ContentTypeEnum.JSON
}
})
}
export const patch = (url: string, data?: object, headersType?: string) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.PATCH,
data: data,
headers: {
'Content-Type': headersType || ContentTypeEnum.JSON
}
})
}
export const put = (url: string, data?: object, headersType?: ContentTypeEnum) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.PUT,
data: data,
headers: {
'Content-Type': headersType || ContentTypeEnum.JSON
}
})
}
export const del = (url: string, params?: object) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.DELETE,
params
})
}
// 获取请求函数默认get
export const http = (type?: RequestHttpEnum) => {
switch (type) {
case RequestHttpEnum.GET:
return get
case RequestHttpEnum.POST:
return post
case RequestHttpEnum.PATCH:
return patch
case RequestHttpEnum.PUT:
return put
case RequestHttpEnum.DELETE:
return del
default:
return get
}
}
const prefix = 'javascript:'
// 对输入字符进行转义处理
export const translateStr = (target: string | object) => {
if (typeof target === 'string') {
if (target.startsWith(prefix)) {
const funcStr = target.split(prefix)[1]
let result;
try {
result = new Function(`${funcStr}`)()
} catch (error) {
console.log(error)
window['$message'].error('js内容解析有误')
}
return result
} else {
return target
}
}
for (const key in target) {
if (Object.prototype.hasOwnProperty.call(target, key)) {
const subTarget = (target as any)[key];
(target as any)[key] = translateStr(subTarget)
}
}
return target
}
/**
* * 自定义请求
* @param targetParams 当前组件参数
* @param globalParams 全局参数
*/
export const customizeHttp = (targetParams: RequestConfigType, globalParams: RequestGlobalConfigType) => {
if (!targetParams || !globalParams) {
return
}
// 全局
const {
// 全局请求源地址
requestOriginUrl,
// 全局请求内容
requestParams: globalRequestParams
} = globalParams
// 目标组件(优先级 > 全局组件)
const {
// 请求地址
requestUrl,
// 普通 / sql
requestContentType,
// 获取数据的方式
requestDataType,
// 请求方式 get/post/del/put/patch
requestHttpType,
// 请求体类型 none / form-data / x-www-form-urlencoded / json /xml
requestParamsBodyType,
// SQL 请求对象
requestSQLContent,
// 请求内容 params / cookie / header / body: 同 requestParamsBodyType
requestParams: targetRequestParams
} = targetParams
// 静态排除
if (requestDataType === RequestDataTypeEnum.STATIC) return
if (!requestUrl) {
return
}
// 处理头部
let headers: RequestParamsObjType = {
...globalRequestParams.Header,
...targetRequestParams.Header
}
headers = translateStr(headers)
// data 参数
let data: RequestParamsObjType | FormData | string = {}
// params 参数
let params: RequestParamsObjType = { ...targetRequestParams.Params }
params = translateStr(params)
// form 类型处理
let formData: FormData = new FormData()
formData.set('default', 'defaultData')
// 类型处理
switch (requestParamsBodyType) {
case RequestBodyEnum.NONE:
break
case RequestBodyEnum.JSON:
headers['Content-Type'] = ContentTypeEnum.JSON
data = translateStr(JSON.parse(targetRequestParams.Body['json']))
// json 赋值给 data
break
case RequestBodyEnum.XML:
headers['Content-Type'] = ContentTypeEnum.XML
// xml 字符串赋值给 data
data = translateStr(targetRequestParams.Body['xml'])
break
case RequestBodyEnum.X_WWW_FORM_URLENCODED: {
headers['Content-Type'] = ContentTypeEnum.FORM_URLENCODED
const bodyFormData = targetRequestParams.Body['x-www-form-urlencoded']
for (const i in bodyFormData) formData.set(i, translateStr(bodyFormData[i]))
// FormData 赋值给 data
data = formData
break
}
case RequestBodyEnum.FORM_DATA: {
headers['Content-Type'] = ContentTypeEnum.FORM_DATA
const bodyFormUrlencoded = targetRequestParams.Body['form-data']
for (const i in bodyFormUrlencoded) {
formData.set(i, translateStr(bodyFormUrlencoded[i]))
}
// FormData 赋值给 data
data = formData
break
}
}
// sql 处理
if (requestContentType === RequestContentTypeEnum.SQL) {
headers['Content-Type'] = ContentTypeEnum.JSON
data = requestSQLContent
}
try {
const url = (new Function("return `" + `${requestOriginUrl}${requestUrl}`.trim() + "`"))();
return axiosInstance({
url,
method: requestHttpType,
data,
params,
headers
})
} catch (error) {
console.log(error)
window['$message'].error('URL地址格式有误')
}
}

View File

@@ -1,130 +0,0 @@
import { MyResponse, IBackend } from './ibackend'
import { fileToUrl } from '@/utils'
/**
* MockBackend
* 模拟纯前端,不会保存,也不报错。
*/
export class MockBackend implements IBackend {
public async init(data: any) {
let rtn:MyResponse = new MyResponse;
return rtn;
}
public async login(data:any) {
let rtn:MyResponse = new MyResponse;
if(data.password == "123456" && data.username == "admin"){
rtn.data = {
token:{tokenValue:"mockToken", tokenName:"name"},
userinfo:{nickname:"nickname", username:data.username, id:1}
}
}else{
rtn.data = null
rtn.msg = "用户名或密码错误!"
}
return rtn;
}
public async logout() {
let rtn:MyResponse = new MyResponse;
return rtn;
}
public async checkToken(data:any){
let rtn:MyResponse = new MyResponse;
return rtn;
}
public async projectList(data:any){
let rtn:MyResponse = new MyResponse;
rtn.data =[
{
id: 1,
title: '假数据不可用',
release: true,
label: '官方案例'
},
{
id: 2,
title: '物料2-假数据不可用',
release: false,
label: '官方案例'
},
{
id: 3,
title: '物料3-假数据不可用',
release: false,
label: '官方案例'
},
{
id: 4,
title: '物料4-假数据不可用',
release: false,
label: '官方案例'
},
{
id: 5,
title: '物料5-假数据不可用',
release: false,
label: '官方案例'
}
];
return rtn;
}
public async createProject(data: any){
let rtn:MyResponse = new MyResponse;
rtn.data.id = "newId"
return rtn;
}
public async fetchProject(data: any){
let rtn:MyResponse = new MyResponse;
rtn.data = {
id:data.projectId,
projectName: '假数据不可用',
indexImage:'',
state: 0,
remarks: '官方案例',
content: null
}
return rtn;
}
public async saveProject(data: object){
let rtn:MyResponse = new MyResponse;
return rtn;
}
public async updateProject(data: any){
let rtn:MyResponse = new MyResponse;
return rtn;
}
public async copyProject(data: any){
let rtn:MyResponse = new MyResponse;
return rtn;
}
public async deleteProject(data: any){
let rtn:MyResponse = new MyResponse;
return rtn;
}
public async changeProjectRelease(data: any){
let rtn:MyResponse = new MyResponse;
return rtn;
}
public async uploadFile(data: File, params:any){
let rtn:MyResponse = new MyResponse;
rtn.data.uri = fileToUrl(data)
return rtn;
}
public getFileUrl(uploadUri:string){
return uploadUri;
}
}

View File

@@ -21,23 +21,6 @@
</setting-item-box>
</collapse-item>
<collapse-item v-if="grid" name="容器">
<setting-item-box name="距离">
<setting-item name="左侧距离">
<n-input v-model:value="grid.left" size="small"></n-input>
</setting-item>
<setting-item name="右侧距离">
<n-input v-model:value="grid.right" size="small"></n-input>
</setting-item>
<setting-item name="上侧距离">
<n-input v-model:value="grid.top" size="small"></n-input>
</setting-item>
<setting-item name="下侧距离">
<n-input v-model:value="grid.bottom" size="small"></n-input>
</setting-item>
</setting-item-box>
</collapse-item>
<collapse-item v-if="xAxis" name="X轴">
<template #header>
<n-switch v-model:value="xAxis.show" size="small"></n-switch>
@@ -68,9 +51,6 @@
<setting-item name="大小">
<n-input-number v-model:value="xAxis.axisLabel.fontSize" :min="8" size="small"></n-input-number>
</setting-item>
<setting-item name="偏移量">
<n-input-number v-model:value="xAxis.axisLabel.rotate" :min="-90" :max="90" size="small"></n-input-number>
</setting-item>
</setting-item-box>
<setting-item-box name="轴线">
<setting-item name="展示">
@@ -160,9 +140,6 @@
<setting-item name="大小">
<n-input-number v-model:value="yAxis.axisLabel.fontSize" :min="8" size="small"></n-input-number>
</setting-item>
<setting-item name="偏移量">
<n-input-number v-model:value="yAxis.axisLabel.rotate" :min="-90" :max="90" size="small"></n-input-number>
</setting-item>
</setting-item-box>
<setting-item-box name="轴线">
<setting-item name="展示">
@@ -312,10 +289,6 @@ const legend = computed(() => {
return props.optionData.legend
})
const grid = computed(() => {
return props.optionData.grid
})
const visualMap = computed(() => {
return props.optionData.visualMap
})

View File

@@ -1,5 +1,5 @@
<template>
<setting-item-box v-if="targetData" name="位置">
<setting-item-box name="位置">
<setting-item :name="`偏移 X${targetData.left || 0}px`">
<n-input-number v-model:value="targetData.left" size="small" step="10"></n-input-number>
</setting-item>

View File

@@ -1,6 +1,10 @@
/**
* @description: 请求结果集
*/
// 模块 Path 前缀分类
export enum ModuleTypeEnum {
SYSTEM = 'sys',
PROJECT = 'project',
}
// 请求结果集
export enum ResultEnum {
DATA_SUCCESS = 0,
SUCCESS = 200,
@@ -8,7 +12,7 @@ export enum ResultEnum {
SERVER_FORBIDDEN = 403,
NOT_FOUND = 404,
TOKEN_OVERDUE = 886,
TIMEOUT = 60000
TIMEOUT = 60000,
}
// 数据相关
@@ -33,9 +37,7 @@ export enum RequestHttpHeaderEnum {
COOKIE = 'Cookie'
}
/**
* @description: 请求方法
*/
// 请求方法
export enum RequestHttpEnum {
GET = 'get',
POST = 'post',
@@ -116,9 +118,7 @@ export type RequestParams = {
}
}
/**
* @description: 常用的contentTyp类型
*/
// 常用的contentTyp类型
export enum ContentTypeEnum {
// json
JSON = 'application/json;charset=UTF-8',

View File

@@ -1,10 +1,8 @@
export enum StorageEnum {
// 全局设置
GO_SYSTEM_SETTING_STORE = 'GO_SYSTEM_SETTING',
// token 等信息
GO_ACCESS_TOKEN_STORE = 'GO_ACCESS_TOKEN',
GO_SETTING_STORE = 'GO_SETTING',
// 登录信息
GO_LOGIN_INFO_STORE = 'GO_LOGIN_INFO',
GO_SYSTEM_STORE = 'GO_SYSTEM',
// 语言
GO_LANG_STORE = 'GO_LANG',
// 当前选择的主题

View File

@@ -2,4 +2,4 @@ export * from '@/hooks/useTheme.hook'
export * from '@/hooks/usePreviewScale.hook'
export * from '@/hooks/useCode.hook'
export * from '@/hooks/useChartDataFetch.hook'
export * from '@/hooks/useLifeHandler.hook'
export * from '@/hooks/useSystemInit.hook'

View File

@@ -59,18 +59,18 @@ export const useChartDataFetch = (
const fetchFn = async () => {
const res = await customizeHttp(toRaw(targetComponent.request), toRaw(chartEditStore.requestGlobalConfig))
if (res) {
if (res && res.data) {
try {
const filter = targetComponent.filter
// eCharts 组件配合 vChart 库更新方式
if (chartFrame === ChartFrameEnum.ECHARTS) {
if (vChartRef.value) {
vChartRef.value.setOption({ dataset: newFunctionHandle(res?.data, res, filter) })
vChartRef.value.setOption({ dataset: newFunctionHandle(res.data, filter) })
}
}
// 更新回调函数
if (updateCallback) {
updateCallback(newFunctionHandle(res?.data, res, filter))
updateCallback(newFunctionHandle(res.data, filter))
}
} catch (error) {
console.error(error)
@@ -90,7 +90,7 @@ export const useChartDataFetch = (
}
// eslint-disable-next-line no-empty
} catch (error) {
console.log(error)
console.log(error);
}
}

View File

@@ -1,280 +0,0 @@
import { CreateComponentType, EventLife } from '@/packages/index.d'
import * as echarts from 'echarts'
import { BackEndFactory } from '@/backend/ibackend'
import { reactive, toRef , watch, computed} from 'vue';
/**
* 事件测试:
*
切换显示名称为 饼图 和 柱状图 的图标
const range = runtime.fn.selectComponents("饼图 柱状图")
const h = runtime.fn.getChartConfig(range, "hide")
runtime.fn.setChartConfig(range, "hide", !h)
修改一个名称 柱状图001 组件id 2wolqibrx3c000 的图表数据,以下两句等效
runtime.fn.setChartConfig("柱状图001", "dataset", {"dimensions":["product","data1","data2"],"source":[{"product":"Mon","data1":120,"data2":130}]})
runtime.fn.setChartConfig("#2wolqibrx3c000", "dataset", {"dimensions":["product","data1","data2"],"source":[{"product":"Mon","data1":120,"data2":230}]})
找到一个组并隐藏
const c = runtime.fn.selectOneComponent("分组")
if(c){
console.log(runtime.fn.getChartConfig(c, "isGroup" ))
runtime.fn.setChartConfig(c, "hide", true)
}
调用组件 exposed 函数的例子
组件中增加: defineExpose({ actionTest:actionTest })
以下调用名称为 柱状图 组件的 actionTest
runtime.fn.callExposed("柱状图", "actionTest")
数据驱动界面:
图表A 的 MOUNTED 加入对 status1 的 Watch = "0" 隐藏
watch(()=>runtime.variables.status1, newValue => runtime.fn.setChartConfig(this, "hide", newValue == "0"))
图表B 的 MOUNTED 也加入对 status1 的 Watch = "1" 隐藏
watch(()=>runtime.variables.status1, newValue => runtime.fn.setChartConfig(this, "hide", newValue == "1"))
点击事件代码实现图表A 和 图表B 的切换显示:
if(runtime.variables.status1 == "0"){
runtime.variables.status1 = "1"
} else{
runtime.variables.status1 = "0"
}
图表A 的 MOUNTED 加入对 data1 的 Watch
watch(()=>runtime.datasets.data1,
newValue => runtime.fn.setChartConfig(this, "dataset", newValue))
图表B 的 MOUNTED 加入对 data1 的 Watch
watch(()=>runtime.datasets.data1,
newValue => runtime.fn.setChartConfig(this, "dataset", newValue))
点击事件代码修改datasets.data1同时更新图表A 和 图表B 的数据
runtime.datasets.data1 = {"dimensions":["product","data1","data2"],"source":[{"product":"Mon","data1":120,"data2":230}]}
*
*/
// * 初始化
export const useSystemInit = async () => {
const res = await BackEndFactory.init({}) as any;
}
const getOneChartConfig = (component:any, configName:string, params?:any)=>{
let root = null
if(component.proxy.chartConfig) root = component.proxy.chartConfig
else if (component.proxy.groupData) root = component.proxy.groupData
// if(!root) return null
switch(configName){
case "hide":
return root.status.hide
break;
case "dataset":
return root.option.dataset
break;
case "isGroup":
return root.isGroup
break;
case "key":
return root.key
break;
case "attr":
return root.attr
break;
case "name":
return root.chartConfig.title
}
}
const setOneChartConfig = (component:any, configName:string, newValue:any, params?:any)=>{
let root = null
if(component.proxy.chartConfig) root = component.proxy.chartConfig
else if (component.proxy.groupData) root = component.proxy.groupData
switch(configName){
case "hide":
root.status.hide = newValue
break;
case "dataset":
root.option.dataset = newValue
break;
}
}
/**
* 选择器语法:参考 css selectors
* 名称 组件名称,不能有空格和特殊字符(. # 引号等)
* [name=名称] Todo
* #id 组件编号
* .key 组件类型 Todo
* @param selectors
* @returns []
*/
const getComponentsBySelectors = (selectors:string):any[]=>{
// 返回:数组,可能多个
let rtn:any[] = []
const ar = selectors.split(" ")
for(let a of ar){
rtn = rtn.concat(getComponentsBySelector(a))
}
return rtn
}
const getComponentsBySelector = (selector:string):any[]=>{
// 返回:数组,可能多个
const rtn:any[] = []
if(selector.substring(0,1) == "#")
{
const key = selector.substring(1)
if(key in components){
return [components[key]]
}
return rtn
}
for (let key in components) {
if(getOneChartConfig(components[key], "name") == selector){
rtn.push(components[key])
}
}
return rtn
}
// 所有图表组件集合对象
const components: { [K in string]?: any } = {}
const runtime = {
// 变量,管理各种状态
variables:reactive({}),
// 数据集
datasets:reactive({}),
// 组件列表 {}
components:components,
// 帮助类
fn:{
/**
* 选择一个组件
* @param selectors string 选择器语法 | component | [component]
* @return 第一个符合要求的 component 或 null
*/
selectOneComponent:(selectors:any)=>{
const cList = runtime.fn.selectComponents(selectors)
if(cList.length > 0){
return cList[0]
}
return null
},
/**
* 选择组件
* @param selectors string 选择器语法 | component | [component]
* @return 要求的 [component] 或 []
*/
selectComponents:(selectors:any):any[]=>{
if(!selectors) return []
if(typeof selectors == "string") return getComponentsBySelectors(selectors)
if(Array.isArray(selectors)) return selectors
return [selectors]
},
/**
* 获取组件的值,如果多个,使用第一个
* @param selectors string 选择器语法 | component | [component]
* @param configName 配置名称
* @param params 备用参数,可选
* @returns 配置的值
*/
getChartConfig:(selectors:any, configName:string, params?:any)=>{
const component:any = runtime.fn.selectOneComponent(selectors)
if(!component && !component.proxy) return null
return getOneChartConfig(component, configName, params)
},
/**
* 设置组件的值,支持多个
* @param selectors string 选择器语法 | component | [component]
* @param configName 配置名称
* @param newValue 新值
* @param params 备用参数,可选
* @returns 配置的值
*/
setChartConfig:(selectors:any, configName:string, newValue:any, params?:any)=>{
const cList:any[] = runtime.fn.selectComponents(selectors)
for(let c of cList){
if(!c && !c.proxy) return null
setOneChartConfig(c, configName, newValue, params)
}
},
/**
* 调用组件暴露的函数,组件中使用 defineExpose 进行定义
* @param selectors string 选择器语法 | component | [component]
* @param action 组件中 defineExpose 的函数名
* @param params 调用的参数只支持一个参数或没有参数
* @returns 无
*/
callExposed:(selectors:any, action:string, params?:any)=>{
const cList:any[] = runtime.fn.selectComponents(selectors)
for(let c of cList){
if(!c && !c.exposed) return null
if(typeof c.exposed[action] == "function") c.exposed[action](params)
}
}
}
}
// 项目提供的npm 包变量
export const npmPkgs = { echarts, toRef , watch, computed, runtime }
export const useLifeHandler = (chartConfig: CreateComponentType) => {
const events = chartConfig.events || {}
console.log("chartConfig.events")
console.log(chartConfig.events)
// 生成生命周期事件
let lifeEvents = {
[EventLife.BEFORE_MOUNT](e: any) {
// 存储组件
components[chartConfig.id] = e.component
const fnStr = (events[EventLife.BEFORE_MOUNT] || '').trim()
generateFunc(fnStr, e, e.component)
},
[EventLife.MOUNTED](e: any) {
const fnStr = (events[EventLife.MOUNTED] || '').trim()
generateFunc(fnStr, e, e.component)
}
}
// 遍历,按需侦听
for(let key in EventLife)
{
if(key != "BEFORE_MOUNT" && key != "MOUNTED"){
const k = EventLife[key as keyof typeof EventLife]
const fnStr = (events[<EventLife>k] || '').trim()
if(fnStr){
lifeEvents[k as keyof typeof lifeEvents] = (e:any) => {
const fnStr = (events[<EventLife>k] || '').trim()
generateFunc(fnStr, e, components[chartConfig.id])
}
}
}
}
return lifeEvents
}
/**
*
* @param fnStr 用户方法体代码
* @param e 执行生命周期的动态组件实例
*/
function generateFunc(fnStr: string, e: any, component:any) {
if(fnStr == "") return
try {
// npmPkgs 便于拷贝 echarts 示例时设置option 的formatter等相关内容
Function(`
"use strict";
return (
async function(e, components, node_modules){
const {${Object.keys(npmPkgs).join()}} = node_modules;
${fnStr}
}
)`)().bind(component)(e, components, npmPkgs)
} catch (error) {
console.error(error)
}
}

View File

@@ -0,0 +1,23 @@
import { useSystemStore } from '@/store/modules/systemStore/systemStore'
import { SystemStoreEnum } from '@/store/modules/systemStore/systemStore.d'
import { ResultEnum } from '@/enums/httpEnum'
import { ossUrlApi } from '@/api/path/'
// * 初始化
export const useSystemInit = async () => {
const systemStore = useSystemStore()
// 获取 OSS 信息
const getOssUrl = async () => {
const res = await ossUrlApi({}) as unknown as MyResponseType
if (res.code === ResultEnum.SUCCESS) {
systemStore.setItem(SystemStoreEnum.FETCH_INFO, {
OSSUrl: res.data?.bucketURL
})
}
}
// 执行
getOssUrl()
}

View File

@@ -4,21 +4,17 @@ import { CreateComponentType } from '@/packages/index.d'
import cloneDeep from 'lodash/cloneDeep'
import dataJson from './data.json'
export const includes = ['legend', 'xAxis', 'yAxis', 'grid']
export const includes = ['legend', 'xAxis', 'yAxis']
export const seriesItem = {
type: 'bar',
barWidth: 15,
label: {
show: true,
position: 'top',
color: '#fff',
fontSize: 12
},
barWidth: null,
itemStyle: {
color: null,
borderRadius: 2
borderRadius: 0
}
}
export const option = {
tooltip: {
show: true,
@@ -28,7 +24,10 @@ export const option = {
type: 'shadow'
}
},
xAxis: {
legend: {
show: true
},
xAxis: {
show: true,
type: 'category'
},

View File

@@ -1,13 +1,24 @@
<template>
<!-- Echarts 全局设置 -->
<!-- Echarts 全局设置 -->
<global-setting :optionData="optionData"></global-setting>
<CollapseItem v-for="(item, index) in seriesList" :key="index" :name="`柱状图-${index + 1}`" :expanded="true">
<CollapseItem
v-for="(item, index) in seriesList"
:key="index"
:name="`柱状图-${index + 1}`"
:expanded="true"
>
<SettingItemBox name="图形">
<SettingItem name="颜色">
<n-color-picker size="small" :modes="['hex']" v-model:value="item.itemStyle.color"></n-color-picker>
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="item.itemStyle.color"
></n-color-picker>
</SettingItem>
<SettingItem>
<n-button size="small" @click="item.itemStyle.color = null"> 恢复默认 </n-button>
<n-button size="small" @click="item.itemStyle.color = null">
恢复默认
</n-button>
</SettingItem>
<SettingItem name="宽度">
<n-input-number
@@ -19,40 +30,24 @@
></n-input-number>
</SettingItem>
<SettingItem name="圆角">
<n-input-number v-model:value="item.itemStyle.borderRadius" :min="0" size="small"></n-input-number>
<n-input-number
v-model:value="item.itemStyle.borderRadius"
:min="0"
size="small"
></n-input-number>
</SettingItem>
</SettingItemBox>
<setting-item-box name="标签">
<setting-item>
<n-space>
<n-switch v-model:value="item.label.show" size="small" />
<n-text>展示标签</n-text>
</n-space>
</setting-item>
<setting-item name="大小">
<n-input-number v-model:value="item.label.fontSize" size="small" :min="1"></n-input-number>
</setting-item>
<setting-item name="颜色">
<n-color-picker size="small" :modes="['hex']" v-model:value="item.label.color"></n-color-picker>
</setting-item>
<setting-item name="位置">
<n-select
v-model:value="item.label.position"
:options="[
{ label: 'top', value: 'top' },
{ label: 'left', value: 'left' },
{ label: 'right', value: 'right' },
{ label: 'bottom', value: 'bottom' }
]"
/>
</setting-item>
</setting-item-box>
</CollapseItem>
</template>
<script setup lang="ts">
import { PropType, computed } from 'vue'
import { GlobalSetting, CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
import {
GlobalSetting,
CollapseItem,
SettingItemBox,
SettingItem
} from '@/components/Pages/ChartItemSetting'
import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
const props = defineProps({

View File

@@ -53,21 +53,17 @@ const option = computed(() => {
watch(
() => props.chartConfig.option.dataset,
(newData: { dimensions: any }, oldData) => {
try {
if (!isObject(newData) || !('dimensions' in newData)) return
if (Array.isArray(newData?.dimensions)) {
const seriesArr = []
for (let i = 0; i < newData.dimensions.length - 1; i++) {
seriesArr.push(seriesItem)
}
replaceMergeArr.value = ['series']
props.chartConfig.option.series = seriesArr
nextTick(() => {
replaceMergeArr.value = []
})
if (!isObject(newData) || !('dimensions' in newData)) return
if (newData?.dimensions.length !== oldData?.dimensions.length) {
const seriesArr = []
for (let i = 0; i < newData.dimensions.length - 1; i++) {
seriesArr.push(seriesItem)
}
} catch (error) {
console.log(error)
replaceMergeArr.value = ['series']
props.chartConfig.option.series = seriesArr
nextTick(() => {
replaceMergeArr.value = []
})
}
},
{

View File

@@ -4,21 +4,17 @@ import { CreateComponentType } from '@/packages/index.d'
import cloneDeep from 'lodash/cloneDeep'
import dataJson from './data.json'
export const includes = ['legend', 'xAxis', 'yAxis', 'grid']
export const includes = ['legend', 'xAxis', 'yAxis']
export const seriesItem = {
type: 'bar',
barWidth: null,
label: {
show: true,
position: 'right',
color: '#fff',
fontSize: 12
},
itemStyle: {
color: null,
borderRadius: 0
}
}
export const option = {
tooltip: {
show: true,
@@ -28,9 +24,12 @@ export const option = {
type: 'shadow'
}
},
legend: {
show: true
},
xAxis: {
show: true,
type: 'value'
type: 'value',
},
yAxis: {
show: true,

View File

@@ -26,39 +26,6 @@
></n-input-number>
</SettingItem>
</SettingItemBox>
<setting-item-box name="标签">
<setting-item>
<n-space>
<n-switch v-model:value="item.label.show" size="small" />
<n-text>展示标签</n-text>
</n-space>
</setting-item>
<setting-item name="大小">
<n-input-number
v-model:value="item.label.fontSize"
size="small"
:min="1"
></n-input-number>
</setting-item>
<setting-item name="颜色">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="item.label.color"
></n-color-picker>
</setting-item>
<setting-item name="位置">
<n-select
v-model:value="item.label.position"
:options="[
{ label: 'top', value: 'top' },
{ label: 'left', value: 'left' },
{ label: 'right', value: 'right' },
{ label: 'bottom', value: 'bottom' },
]"
/>
</setting-item>
</setting-item-box>
</CollapseItem>
</template>

View File

@@ -52,21 +52,17 @@ const option = computed(() => {
watch(
() => props.chartConfig.option.dataset,
(newData: { dimensions: any }, oldData) => {
try {
if (!isObject(newData) || !('dimensions' in newData)) return
if (Array.isArray(newData?.dimensions)) {
const seriesArr = []
for (let i = 0; i < newData.dimensions.length - 1; i++) {
seriesArr.push(seriesItem)
}
replaceMergeArr.value = ['series']
props.chartConfig.option.series = seriesArr
nextTick(() => {
replaceMergeArr.value = []
})
if (!isObject(newData) || !('dimensions' in newData)) return
if (newData?.dimensions.length !== oldData?.dimensions.length) {
const seriesArr = []
for (let i = 0; i < newData.dimensions.length - 1; i++) {
seriesArr.push(seriesItem)
}
} catch (error) {
console.log(error)
replaceMergeArr.value = ['series']
props.chartConfig.option.series = seriesArr
nextTick(() => {
replaceMergeArr.value = []
})
}
},
{

View File

@@ -4,24 +4,17 @@ import { CreateComponentType } from '@/packages/index.d'
import { defaultTheme, chartColorsSearch } from '@/settings/chartThemes/index'
import dataJson from './data.json'
export const includes = ['legend', 'xAxis', 'yAxis', 'grid']
export const includes = ['legend', 'xAxis', 'yAxis']
export const seriesItem = {
type: 'line',
label: {
show: true,
position: 'top',
color: '#fff',
fontSize: 12
},
symbolSize: 5, //设定实心点的大小
itemStyle: {
color: null,
borderRadius: 0
},
lineStyle: {
type: 'solid',
width: 3,
color: null
itemStyle: {
color: null,
borderRadius: 0
}
}
}
@@ -33,6 +26,9 @@ export const option = {
type: 'line'
}
},
legend: {
show: true
},
xAxis: {
show: true,
type: 'category'

View File

@@ -1,11 +1,13 @@
<template>
<!-- Echarts 全局设置 -->
<global-setting :optionData="optionData"></global-setting>
<CollapseItem v-for="(item, index) in seriesList" :key="index" :name="`折线图-${index + 1}`" :expanded="true">
<CollapseItem
v-for="(item, index) in seriesList"
:key="index"
:name="`折线图-${index + 1}`"
:expanded="true"
>
<SettingItemBox name="线条">
<setting-item name="颜色">
<n-color-picker size="small" :modes="['hex']" v-model:value="item.lineStyle.color"></n-color-picker>
</setting-item>
<SettingItem name="宽度">
<n-input-number
v-model:value="item.lineStyle.width"
@@ -13,48 +15,16 @@
:max="100"
size="small"
placeholder="自动计算"
></n-input-number>
></n-input-number>
</SettingItem>
<SettingItem name="类型">
<n-select v-model:value="item.lineStyle.type" size="small" :options="lineConf.lineStyle.type"></n-select>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="实心点">
<SettingItem name="大小">
<n-input-number
v-model:value="item.symbolSize"
:min="1"
:max="100"
size="small"
placeholder="自动计算"
></n-input-number>
</SettingItem>
</SettingItemBox>
<setting-item-box name="标签">
<setting-item>
<n-space>
<n-switch v-model:value="item.label.show" size="small" />
<n-text>展示标签</n-text>
</n-space>
</setting-item>
<setting-item name="大小">
<n-input-number v-model:value="item.label.fontSize" size="small" :min="1"></n-input-number>
</setting-item>
<setting-item name="颜色">
<n-color-picker size="small" :modes="['hex']" v-model:value="item.label.color"></n-color-picker>
</setting-item>
<setting-item name="位置">
<n-select
v-model:value="item.label.position"
:options="[
{ label: 'top', value: 'top' },
{ label: 'left', value: 'left' },
{ label: 'right', value: 'right' },
{ label: 'bottom', value: 'bottom' }
]"
/>
</setting-item>
</setting-item-box>
v-model:value="item.lineStyle.type"
size="small"
:options="lineConf.lineStyle.type"
></n-select>
</SettingItem>
</SettingItemBox>
</CollapseItem>
</template>
@@ -62,7 +32,12 @@
import { PropType, computed } from 'vue'
import { lineConf } from '@/packages/chartConfiguration/echarts/index'
import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
import { GlobalSetting, CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
import {
GlobalSetting,
CollapseItem,
SettingItemBox,
SettingItem
} from '@/components/Pages/ChartItemSetting'
const props = defineProps({
optionData: {

View File

@@ -53,21 +53,17 @@ const option = computed(() => {
watch(
() => props.chartConfig.option.dataset,
(newData: { dimensions: any }, oldData) => {
try {
if (!isObject(newData) || !('dimensions' in newData)) return
if (Array.isArray(newData?.dimensions)) {
const seriesArr = []
for (let i = 0; i < newData.dimensions.length - 1; i++) {
seriesArr.push(seriesItem)
}
replaceMergeArr.value = ['series']
props.chartConfig.option.series = seriesArr
nextTick(() => {
replaceMergeArr.value = []
})
if (!isObject(newData) || !('dimensions' in newData)) return
if (newData?.dimensions.length !== oldData?.dimensions.length) {
const seriesArr = []
for (let i = 0; i < newData.dimensions.length - 1; i++) {
seriesArr.push(seriesItem)
}
} catch (error) {
console.log(error)
replaceMergeArr.value = ['series']
props.chartConfig.option.series = seriesArr
nextTick(() => {
replaceMergeArr.value = []
})
}
},
{

View File

@@ -5,7 +5,7 @@ import { graphic } from 'echarts/core'
import { defaultTheme, chartColorsSearch } from '@/settings/chartThemes/index'
import dataJson from './data.json'
export const includes = ['legend', 'xAxis', 'yAxis', 'grid']
export const includes = ['legend', 'xAxis', 'yAxis']
const options = {
tooltip: {
@@ -15,6 +15,9 @@ const options = {
type: 'line'
}
},
legend: {
show: true
},
xAxis: {
show: true,
type: 'category'
@@ -28,13 +31,6 @@ const options = {
{
type: 'line',
smooth: false,
symbolSize: 5, //设定实心点的大小
label: {
show: true,
position: 'top',
color: '#fff',
fontSize: 12
},
lineStyle: {
type: 'solid',
width: 3

View File

@@ -1,7 +1,12 @@
<template>
<!-- Echarts 全局设置 -->
<global-setting :optionData="optionData"></global-setting>
<CollapseItem v-for="(item, index) in seriesList" :key="index" name="单折线面积图" :expanded="true">
<CollapseItem
v-for="(item, index) in seriesList"
:key="index"
name="单折线面积图"
:expanded="true"
>
<SettingItemBox name="线条">
<SettingItem name="宽度">
<n-input-number
@@ -13,45 +18,13 @@
></n-input-number>
</SettingItem>
<SettingItem name="类型">
<n-select v-model:value="item.lineStyle.type" size="small" :options="lineConf.lineStyle.type"></n-select>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="实心点">
<SettingItem name="大小">
<n-input-number
v-model:value="item.symbolSize"
:min="1"
:max="100"
size="small"
placeholder="自动计算"
></n-input-number>
</SettingItem>
</SettingItemBox>
<setting-item-box name="标签">
<setting-item>
<n-space>
<n-switch v-model:value="item.label.show" size="small" />
<n-text>展示标签</n-text>
</n-space>
</setting-item>
<setting-item name="大小">
<n-input-number v-model:value="item.label.fontSize" size="small" :min="1"></n-input-number>
</setting-item>
<setting-item name="颜色">
<n-color-picker size="small" :modes="['hex']" v-model:value="item.label.color"></n-color-picker>
</setting-item>
<setting-item name="位置">
<n-select
v-model:value="item.label.position"
:options="[
{ label: 'top', value: 'top' },
{ label: 'left', value: 'left' },
{ label: 'right', value: 'right' },
{ label: 'bottom', value: 'bottom' }
]"
/>
</setting-item>
</setting-item-box>
v-model:value="item.lineStyle.type"
size="small"
:options="lineConf.lineStyle.type"
></n-select>
</SettingItem>
</SettingItemBox>
</CollapseItem>
</template>
@@ -59,13 +32,18 @@
import { PropType, computed } from 'vue'
import { lineConf } from '@/packages/chartConfiguration/echarts/index'
import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
import { GlobalSetting, CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
import {
GlobalSetting,
CollapseItem,
SettingItemBox,
SettingItem
} from '@/components/Pages/ChartItemSetting'
const props = defineProps({
optionData: {
type: Object as PropType<GlobalThemeJsonType>,
required: true
}
},
})
const seriesList = computed(() => {

View File

@@ -43,27 +43,23 @@ const option = reactive({
watch(
() => chartEditStore.getEditCanvasConfig.chartThemeColor,
(newColor: keyof typeof chartColorsSearch) => {
try {
if (!isPreview()) {
const themeColor = chartColorsSearch[newColor] || chartColorsSearch[defaultTheme]
props.chartConfig.option.series.forEach((value: any, index: number) => {
value.areaStyle.color = new graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: themeColor[3]
},
{
offset: 1,
color: 'rgba(0,0,0, 0)'
}
])
})
}
option.value = mergeTheme(props.chartConfig.option, props.themeSetting, includes)
props.chartConfig.option = option.value
} catch (error) {
console.log(error)
if (!isPreview()) {
const themeColor = chartColorsSearch[newColor] || chartColorsSearch[defaultTheme]
props.chartConfig.option.series.forEach((value: any, index: number) => {
value.areaStyle.color = new graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: themeColor[3]
},
{
offset: 1,
color: 'rgba(0,0,0, 0)'
}
])
})
}
option.value = mergeTheme(props.chartConfig.option, props.themeSetting, includes)
props.chartConfig.option = option.value
},
{
immediate: true
@@ -74,6 +70,9 @@ watch(
() => props.chartConfig.option.dataset,
() => {
option.value = props.chartConfig.option
},
{
deep: false
}
)

View File

@@ -5,9 +5,12 @@ import { graphic } from 'echarts/core'
import { defaultTheme, chartColorsSearch } from '@/settings/chartThemes/index'
import dataJson from './data.json'
export const includes = ['legend', 'xAxis', 'yAxis', 'grid']
export const includes = ['legend', 'xAxis', 'yAxis']
const option = {
legend: {
show: true
},
tooltip: {
show: true,
trigger: 'axis',
@@ -28,13 +31,6 @@ const option = {
{
type: 'line',
smooth: false,
symbolSize: 5, //设定实心点的大小
label: {
show: true,
position: 'top',
color: '#fff',
fontSize: 12
},
lineStyle: {
width: 3,
type: 'solid'
@@ -56,12 +52,6 @@ const option = {
{
type: 'line',
smooth: false,
label: {
show: true,
position: 'top',
color: '#fff',
fontSize: 12
},
lineStyle: {
width: 3,
type: 'solid'

View File

@@ -12,6 +12,7 @@
<n-input-number
v-model:value="item.lineStyle.width"
:min="1"
:max="100"
size="small"
placeholder="自动计算"
></n-input-number>
@@ -24,50 +25,6 @@
></n-select>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="实心点">
<SettingItem name="大小">
<n-input-number
v-model:value="item.symbolSize"
:min="1"
:max="100"
size="small"
placeholder="自动计算"
></n-input-number>
</SettingItem>
</SettingItemBox>
<setting-item-box name="标签">
<setting-item>
<n-space>
<n-switch v-model:value="item.label.show" size="small" />
<n-text>展示标签</n-text>
</n-space>
</setting-item>
<setting-item name="大小">
<n-input-number
v-model:value="item.label.fontSize"
size="small"
:min="1"
></n-input-number>
</setting-item>
<setting-item name="颜色">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="item.label.color"
></n-color-picker>
</setting-item>
<setting-item name="位置">
<n-select
v-model:value="item.label.position"
:options="[
{ label: 'top', value: 'top' },
{ label: 'left', value: 'left' },
{ label: 'right', value: 'right' },
{ label: 'bottom', value: 'bottom' },
]"
/>
</setting-item>
</setting-item-box>
</CollapseItem>
</template>

View File

@@ -42,27 +42,23 @@ const option = reactive({
watch(
() => chartEditStore.getEditCanvasConfig.chartThemeColor,
(newColor: keyof typeof chartColorsSearch) => {
try {
if (!isPreview()) {
const themeColor = chartColorsSearch[newColor] || chartColorsSearch[defaultTheme]
props.chartConfig.option.series.forEach((value: any, index: number) => {
value.areaStyle.color = new graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: themeColor[3 + index]
},
{
offset: 1,
color: 'rgba(0,0,0, 0)'
}
])
})
}
option.value = mergeTheme(props.chartConfig.option, props.themeSetting, includes)
props.chartConfig.option = option.value
} catch (error) {
console.log(error)
if (!isPreview()) {
const themeColor = chartColorsSearch[newColor] || chartColorsSearch[defaultTheme]
props.chartConfig.option.series.forEach((value: any, index: number) => {
value.areaStyle.color = new graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: themeColor[3 + index]
},
{
offset: 1,
color: 'rgba(0,0,0, 0)'
}
])
})
}
option.value = mergeTheme(props.chartConfig.option, props.themeSetting, includes)
props.chartConfig.option = option.value
},
{
immediate: true
@@ -75,5 +71,6 @@ watch(
option.value = props.chartConfig.option
}
)
const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore)
</script>

View File

@@ -4,7 +4,7 @@ import { CreateComponentType } from '@/packages/index.d'
import { defaultTheme, chartColorsSearch } from '@/settings/chartThemes/index'
import dataJson from './data.json'
export const includes = ['legend', 'xAxis', 'yAxis', 'grid']
export const includes = ['legend', 'xAxis', 'yAxis']
export const option = {
tooltip: {
@@ -14,6 +14,9 @@ export const option = {
type: 'line'
}
},
legend: {
show: true
},
xAxis: {
show: true,
type: 'category'
@@ -26,7 +29,6 @@ export const option = {
series: [
{
type: 'line',
symbolSize: 5, //设定实心点的大小
lineStyle: {
type: 'solid',
width: 3,

View File

@@ -39,17 +39,6 @@
></n-select>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="实心点">
<SettingItem name="大小">
<n-input-number
v-model:value="item.symbolSize"
:min="1"
:max="100"
size="small"
placeholder="自动计算"
></n-input-number>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="阴影" :alone="true">
<SettingItem name="颜色">
<n-color-picker

View File

@@ -43,21 +43,17 @@ const option = reactive({
watch(
() => chartEditStore.getEditCanvasConfig.chartThemeColor,
(newColor: keyof typeof chartColorsSearch) => {
try {
if (!isPreview()) {
const themeColor = chartColorsSearch[newColor] || chartColorsSearch[defaultTheme]
props.chartConfig.option.series.forEach((value: any) => {
value.lineStyle.shadowColor = themeColor[2]
value.lineStyle.color.colorStops.forEach((v: { color: string }, i: number) => {
v.color = themeColor[i]
})
if (!isPreview()) {
const themeColor = chartColorsSearch[newColor] || chartColorsSearch[defaultTheme]
props.chartConfig.option.series.forEach((value: any) => {
value.lineStyle.shadowColor = themeColor[2]
value.lineStyle.color.colorStops.forEach((v: { color: string }, i: number) => {
v.color = themeColor[i]
})
}
option.value = mergeTheme(props.chartConfig.option, props.themeSetting, includes)
props.chartConfig.option = option.value
} catch (error) {
console.log(error)
})
}
option.value = mergeTheme(props.chartConfig.option, props.themeSetting, includes)
props.chartConfig.option = option.value
},
{
immediate: true

View File

@@ -64,9 +64,9 @@ registerMap(props.chartConfig.option.mapRegion.adcode, { geoJSON: {} as any, spe
// 进行更换初始化地图 如果为china 单独处理
const registerMapInitAsync = async () => {
await nextTick()
if (props.chartConfig.option.mapRegion.adcode != 'china') {
if (props.chartConfig.option.mapRegion.adcode!="china") {
await getGeojson(props.chartConfig.option.mapRegion.adcode)
} else {
}else{
await hainanLandsHandle(props.chartConfig.option.mapRegion.showHainanIsLands)
}
vEchartsSetOption()
@@ -90,12 +90,12 @@ const dataSetHandle = async (dataset: any) => {
isPreview() && vEchartsSetOption()
}
// 处理海南群岛
const hainanLandsHandle = async (newData: boolean) => {
const hainanLandsHandle=async(newData:boolean)=>{
if (newData) {
await getGeojson('china')
} else {
registerMap('china', { geoJSON: mapJsonWithoutHainanIsLands as any, specialAreas: {} })
}
await getGeojson('china')
} else {
registerMap('china', { geoJSON: mapJsonWithoutHainanIsLands as any, specialAreas: {} })
}
}
//监听 dataset 数据发生变化
watch(
@@ -113,12 +113,8 @@ watch(
watch(
() => props.chartConfig.option.mapRegion.showHainanIsLands,
async newData => {
try {
await hainanLandsHandle(newData)
vEchartsSetOption()
} catch (error) {
console.log(error)
}
await hainanLandsHandle(newData)
vEchartsSetOption()
},
{
deep: false
@@ -129,16 +125,12 @@ watch(
watch(
() => props.chartConfig.option.mapRegion.adcode,
async newData => {
try {
await getGeojson(newData)
props.chartConfig.option.geo.map = newData
props.chartConfig.option.series.forEach((item: any) => {
if (item.type === 'map') item.map = newData
})
vEchartsSetOption()
} catch (error) {
console.log(error)
}
await getGeojson(newData)
props.chartConfig.option.geo.map = newData
props.chartConfig.option.series.forEach((item: any) => {
if (item.type === 'map') item.map = newData
})
vEchartsSetOption()
},
{
deep: false

View File

@@ -4,7 +4,7 @@ import { CreateComponentType } from '@/packages/index.d'
import { cloneDeep } from 'lodash'
import dataJson from './data.json'
export const includes = ['xAxis', 'yAxis', 'grid']
export const includes = ['xAxis', 'yAxis']
export const option = {
dataset: { ...dataJson },

View File

@@ -75,11 +75,7 @@ const dataSetHandle = (dataset: typeof dataJson) => {
watch(
() => props.chartConfig.option.dataset,
newData => {
try {
dataSetHandle(newData)
} catch (error) {
console.log(error)
}
dataSetHandle(newData)
},
{
deep: false

View File

@@ -57,11 +57,7 @@ const option = shallowReactive({
watch(
() => props.chartConfig.option.dataset,
(newData: any) => {
try {
option.dataset = toNumber(newData, 2)
} catch (error) {
console.log(error)
}
option.dataset = toNumber(newData, 2)
},
{
deep: false

View File

@@ -57,11 +57,7 @@ const dataSetHandle = (dataset: typeof dataJson) => {
watch(
() => props.chartConfig.option.dataset,
newData => {
try {
dataSetHandle(newData)
} catch (error) {
console.log(error)
}
dataSetHandle(newData)
},
{
deep: false

View File

@@ -49,12 +49,8 @@ const dataSetHandle = (dataset: typeof dataJson) => {
watch(
() => props.chartConfig.option.dataset,
newData => {
try {
if (!isArray(newData)) return
dataSetHandle(newData)
} catch (error) {
console.log(error)
}
if(!isArray(newData)) return
dataSetHandle(newData)
},
{
deep: false

View File

@@ -42,27 +42,23 @@ const option = reactive({
watch(
() => chartEditStore.getEditCanvasConfig.chartThemeColor,
(newColor: keyof typeof chartColorsSearch) => {
try {
if (!isPreview()) {
const themeColor = chartColorsSearch[newColor] || chartColorsSearch[defaultTheme]
// 背景颜色
props.chartConfig.option.series[0].backgroundStyle.color = themeColor[2]
// 水球颜色
props.chartConfig.option.series[0].color[0].colorStops = [
{
offset: 0,
color: themeColor[0]
},
{
offset: 1,
color: themeColor[1]
}
]
}
option.value = props.chartConfig.option
} catch (error) {
console.log(error)
if (!isPreview()) {
const themeColor = chartColorsSearch[newColor] || chartColorsSearch[defaultTheme]
// 背景颜色
props.chartConfig.option.series[0].backgroundStyle.color = themeColor[2]
// 水球颜色
props.chartConfig.option.series[0].color[0].colorStops = [
{
offset: 0,
color: themeColor[0]
},
{
offset: 1,
color: themeColor[1]
}
]
}
option.value = props.chartConfig.option
},
{
immediate: true
@@ -79,7 +75,7 @@ const dataHandle = (newData: number | string) => {
watch(
() => props.chartConfig.option.dataset,
newData => {
if (!isString(newData) && !isNumber(newData)) return
if(!isString(newData) && !isNumber(newData)) return
props.chartConfig.option.series[0].data = [dataHandle(newData)]
option.value = props.chartConfig.option
},

View File

@@ -48,13 +48,7 @@ const dataHandle = (newData: any) => {
// 配置时
watch(
() => props.chartConfig.option.dataset,
newData => {
try {
dataHandle(newData)
} catch (error) {
console.log(error)
}
},
newData => dataHandle(newData),
{
immediate: true,
deep: false

View File

@@ -39,19 +39,15 @@ const option = computed(() => {
watch(
() => props.chartConfig.option.type,
newData => {
try {
if (newData === 'nomal') {
props.chartConfig.option.series[0].radius = '70%'
props.chartConfig.option.series[0].roseType = false
} else if (newData === 'ring') {
props.chartConfig.option.series[0].radius = ['40%', '65%']
props.chartConfig.option.series[0].roseType = false
} else {
props.chartConfig.option.series[0].radius = '70%'
props.chartConfig.option.series[0].roseType = true
}
} catch (error) {
console.log(error)
if (newData === 'nomal') {
props.chartConfig.option.series[0].radius = '70%'
props.chartConfig.option.series[0].roseType = false
} else if (newData === 'ring') {
props.chartConfig.option.series[0].radius = ['40%', '65%']
props.chartConfig.option.series[0].roseType = false
} else {
props.chartConfig.option.series[0].radius = '70%'
props.chartConfig.option.series[0].roseType = true
}
},
{ deep: false, immediate: true }

View File

@@ -4,7 +4,7 @@ import { CreateComponentType } from '@/packages/index.d'
import cloneDeep from 'lodash/cloneDeep'
import dataJson from './data.json'
export const includes = ['legend', 'xAxis', 'yAxis', 'grid']
export const includes = ['legend', 'xAxis', 'yAxis']
export const seriesItem = {
type: 'scatter',

View File

@@ -69,21 +69,17 @@ const option = computed(() => {
watch(
() => props.chartConfig.option.dataset,
(newData, oldData) => {
try {
if (!isArray(newData)) return
if (Array.isArray(newData)) {
replaceMergeArr.value = ['series']
// eslint-disable-next-line vue/no-mutating-props
props.chartConfig.option.series = newData.map((item: { dimensions: any[] }, index: number) => ({
...seriesItem,
datasetIndex: index
}))
nextTick(() => {
replaceMergeArr.value = []
})
}
} catch (error) {
console.log(error)
if (!isArray(newData)) return
if (newData?.length !== oldData?.length) {
replaceMergeArr.value = ['series']
// eslint-disable-next-line vue/no-mutating-props
props.chartConfig.option.series = newData.map((item: { dimensions: any[] }, index: number) => ({
...seriesItem,
datasetIndex: index
}))
nextTick(() => {
replaceMergeArr.value = []
})
}
},
{

View File

@@ -4,7 +4,7 @@ import { CreateComponentType } from '@/packages/index.d'
import cloneDeep from 'lodash/cloneDeep'
import dataJson from './data.json'
export const includes = ['legend', 'xAxis', 'yAxis', 'grid']
export const includes = ['legend', 'xAxis', 'yAxis']
export const option = {
dataset: dataJson,

View File

@@ -133,14 +133,10 @@ const renderCountdown: CountdownProps['render'] = ({ hours, minutes, seconds })
}
const updateTotalDuration = () => {
try {
countdownActive.value = false
totalDuration.value = useEndDate.value ? endDate.value - new Date().getTime() : dataset.value * 1000
countdownRef.value?.reset && countdownRef.value?.reset()
countdownActive.value = true
} catch (error) {
console.log(error)
}
countdownActive.value = false
totalDuration.value = useEndDate.value ? endDate.value - new Date().getTime() : dataset.value * 1000
countdownRef.value?.reset && countdownRef.value?.reset()
countdownActive.value = true
}
watch(

View File

@@ -60,11 +60,7 @@ const updateDatasetHandler = (newVal: string | number) => {
watch(
() => props.chartConfig.option,
newVal => {
try {
updateDatasetHandler((newVal as OptionType).dataset)
} catch (error) {
console.log(error)
}
updateDatasetHandler((newVal as OptionType).dataset)
},
{
immediate: true,

View File

@@ -11,23 +11,23 @@
</template>
<script setup lang="ts">
import { PropType, toRefs, ref, reactive, watch, onMounted, onUnmounted } from 'vue'
import { CreateComponentType } from '@/packages/index.d'
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
import { useChartDataFetch } from '@/hooks'
import { PropType, toRefs, ref, reactive, watch, onMounted, onUnmounted } from "vue";
import { CreateComponentType } from "@/packages/index.d";
import { useChartEditStore } from "@/store/modules/chartEditStore/chartEditStore";
import { useChartDataFetch } from "@/hooks";
const props = defineProps({
chartConfig: {
type: Object as PropType<CreateComponentType>,
required: true
}
})
let yearMonthDay = ref('2021-2-3')
let nowData = ref('08:00:00')
let newData = ref('2021-2-3 08:00:00')
let boxShadow = ref('none')
required: true,
},
});
let yearMonthDay = ref("2021-2-3");
let nowData = ref("08:00:00");
let newData = ref("2021-2-3 08:00:00");
let boxShadow = ref("none");
const { w, h } = toRefs(props.chartConfig.attr)
const { w, h } = toRefs(props.chartConfig.attr);
let {
timeColor,
@@ -39,55 +39,54 @@ let {
hShadow,
vShadow,
blurShadow,
colorShadow
} = toRefs(props.chartConfig.option)
colorShadow,
} = toRefs(props.chartConfig.option);
watch(
props.chartConfig.option,
() => {
try {
if (props.chartConfig.option.showShadow) {
boxShadow.value = `${props.chartConfig.option.hShadow}px ${props.chartConfig.option.vShadow}px ${props.chartConfig.option.blurShadow}px ${props.chartConfig.option.colorShadow}`
} else {
boxShadow.value = 'none'
}
} catch (error) {
console.log(error)
if (props.chartConfig.option.showShadow) {
boxShadow.value = `${props.chartConfig.option.hShadow}px ${props.chartConfig.option.vShadow}px ${props.chartConfig.option.blurShadow}px ${props.chartConfig.option.colorShadow}`;
} else {
boxShadow.value = "none";
}
},
{
immediate: true
immediate: true,
}
)
);
onMounted(() => {
const timer = setInterval(() => {
var datetime = new Date()
var year = datetime.getFullYear()
var month = datetime.getMonth() + 1 < 10 ? '0' + (datetime.getMonth() + 1) : datetime.getMonth() + 1
var date = datetime.getDate() < 10 ? '0' + datetime.getDate() : datetime.getDate()
var hh = datetime.getHours() // 时
var mm = datetime.getMinutes() // 分
var ss = datetime.getSeconds() // 分
let time = ''
if (hh < 10) time += '0'
time += hh + ':'
if (mm < 10) time += '0'
time += mm + ':'
if (ss < 10) time += '0'
time += ss
yearMonthDay.value = `${year}-${month}-${date}`
nowData.value = time
newData.value = yearMonthDay.value + ' ' + nowData.value
}, 500)
})
var datetime = new Date();
var year = datetime.getFullYear();
var month =
datetime.getMonth() + 1 < 10
? "0" + (datetime.getMonth() + 1)
: datetime.getMonth() + 1;
var date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
var hh = datetime.getHours(); // 时
var mm = datetime.getMinutes(); // 分
var ss = datetime.getSeconds(); // 分
let time = "";
if (hh < 10) time += "0";
time += hh + ":";
if (mm < 10) time += "0";
time += mm + ":";
if (ss < 10) time += "0";
time += ss;
yearMonthDay.value = `${year}-${month}-${date}`;
nowData.value = time;
newData.value = yearMonthDay.value + " " + nowData.value;
}, 500);
});
onUnmounted(() => {
clearInterval()
})
useChartDataFetch(props.chartConfig, useChartEditStore)
clearInterval();
});
useChartDataFetch(props.chartConfig, useChartEditStore);
</script>
<style lang="scss" scoped>
@include go('decorates-number') {
@include go("decorates-number") {
text-align: center;
}
</style>

View File

@@ -1,236 +0,0 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import {
ArcCurve,
BufferAttribute,
BufferGeometry,
Color,
Line,
LineBasicMaterial,
Points,
PointsMaterial,
Quaternion,
Vector3
} from 'three'
import { lon2xyz } from './common'
/*
* 绘制一条圆弧飞线
* 5个参数含义( 飞线圆弧轨迹半径, 开始角度, 结束角度)
*/
function createFlyLine(radius, startAngle, endAngle, color) {
const geometry = new BufferGeometry() //声明一个几何体对象BufferGeometry
// ArcCurve创建圆弧曲线
const arc = new ArcCurve(0, 0, radius, startAngle, endAngle, false)
//getSpacedPoints是基类Curve的方法返回一个vector2对象作为元素组成的数组
const pointsArr = arc.getSpacedPoints(100) //分段数80返回81个顶点
geometry.setFromPoints(pointsArr) // setFromPoints方法从pointsArr中提取数据改变几何体的顶点属性vertices
// 每个顶点对应一个百分比数据attributes.percent 用于控制点的渲染大小
const percentArr = [] //attributes.percent的数据
for (let i = 0; i < pointsArr.length; i++) {
percentArr.push(i / pointsArr.length)
}
const percentAttribue = new BufferAttribute(new Float32Array(percentArr), 1)
// 通过顶点数据percent点模型从大到小变化产生小蝌蚪形状飞线
geometry.attributes.percent = percentAttribue
// 批量计算所有顶点颜色数据
const colorArr = []
for (let i = 0; i < pointsArr.length; i++) {
const color1 = new Color(0xec8f43) //轨迹线颜色 青色
const color2 = new Color(0xf3ae76) //黄色
const color = color1.lerp(color2, i / pointsArr.length)
colorArr.push(color.r, color.g, color.b)
}
// 设置几何体顶点颜色数据
geometry.attributes.color = new BufferAttribute(new Float32Array(colorArr), 3)
const size = 1.3
// 点模型渲染几何体每个顶点
const material = new PointsMaterial({
size, //点大小
// vertexColors: VertexColors, //使用顶点颜色渲染
transparent: true,
depthWrite: false
})
// 修改点材质的着色器源码(注意:不同版本细节可能会稍微会有区别,不过整体思路是一样的)
material.onBeforeCompile = function (shader) {
// 顶点着色器中声明一个attribute变量:百分比
shader.vertexShader = shader.vertexShader.replace(
'void main() {',
[
'attribute float percent;', //顶点大小百分比变量,控制点渲染大小
'void main() {'
].join('\n') // .join()把数组元素合成字符串
)
// 调整点渲染大小计算方式
shader.vertexShader = shader.vertexShader.replace(
'gl_PointSize = size;',
['gl_PointSize = percent * size;'].join('\n') // .join()把数组元素合成字符串
)
}
const FlyLine = new Points(geometry, material)
material.color = new Color(color)
FlyLine.name = '飞行线'
return FlyLine
}
/**输入地球上任意两点的经纬度坐标通过函数flyArc可以绘制一个飞线圆弧轨迹
* lon1,lat1:轨迹线起点经纬度坐标
* lon2,lat2轨迹线结束点经纬度坐标
*/
function flyArc(radius, lon1, lat1, lon2, lat2, options) {
const sphereCoord1 = lon2xyz(radius, lon1, lat1) //经纬度坐标转球面坐标
// startSphereCoord轨迹线起点球面坐标
const startSphereCoord = new Vector3(sphereCoord1.x, sphereCoord1.y, sphereCoord1.z)
const sphereCoord2 = lon2xyz(radius, lon2, lat2)
// startSphereCoord轨迹线结束点球面坐标
const endSphereCoord = new Vector3(sphereCoord2.x, sphereCoord2.y, sphereCoord2.z)
//计算绘制圆弧需要的关于y轴对称的起点、结束点和旋转四元数
const startEndQua = _3Dto2D(startSphereCoord, endSphereCoord)
// 调用arcXOY函数绘制一条圆弧飞线轨迹
const arcline = arcXOY(radius, startEndQua.startPoint, startEndQua.endPoint, options)
arcline.quaternion.multiply(startEndQua.quaternion)
return arcline
}
/*
* 把3D球面上任意的两个飞线起点和结束点绕球心旋转到到XOY平面上
* 同时保持关于y轴对称借助旋转得到的新起点和新结束点绘制
* 一个圆弧,最后把绘制的圆弧反向旋转到原来的起点和结束点即可
*/
function _3Dto2D(startSphere, endSphere) {
/*计算第一次旋转的四元数:表示从一个平面如何旋转到另一个平面*/
const origin = new Vector3(0, 0, 0) //球心坐标
const startDir = startSphere.clone().sub(origin) //飞线起点与球心构成方向向量
const endDir = endSphere.clone().sub(origin) //飞线结束点与球心构成方向向量
// dir1和dir2构成一个三角形.cross()叉乘计算该三角形法线normal
const normal = startDir.clone().cross(endDir).normalize()
const xoyNormal = new Vector3(0, 0, 1) //XOY平面的法线
//.setFromUnitVectors()计算从normal向量旋转达到xoyNormal向量所需要的四元数
// quaternion表示把球面飞线旋转到XOY平面上需要的四元数
const quaternion3D_XOY = new Quaternion().setFromUnitVectors(normal, xoyNormal)
/*第一次旋转飞线起点、结束点从3D空间第一次旋转到XOY平面*/
const startSphereXOY = startSphere.clone().applyQuaternion(quaternion3D_XOY)
const endSphereXOY = endSphere.clone().applyQuaternion(quaternion3D_XOY)
/*计算第二次旋转的四元数*/
// middleV3startSphereXOY和endSphereXOY的中点
const middleV3 = startSphereXOY.clone().add(endSphereXOY).multiplyScalar(0.5)
const midDir = middleV3.clone().sub(origin).normalize() // 旋转前向量midDir中点middleV3和球心构成的方向向量
const yDir = new Vector3(0, 1, 0) // 旋转后向量yDir即y轴
// .setFromUnitVectors()计算从midDir向量旋转达到yDir向量所需要的四元数
// quaternion2表示让第一次旋转到XOY平面的起点和结束点关于y轴对称需要的四元数
const quaternionXOY_Y = new Quaternion().setFromUnitVectors(midDir, yDir)
/*第二次旋转使旋转到XOY平面的点再次旋转实现关于Y轴对称*/
const startSpherXOY_Y = startSphereXOY.clone().applyQuaternion(quaternionXOY_Y)
const endSphereXOY_Y = endSphereXOY.clone().applyQuaternion(quaternionXOY_Y)
/**一个四元数表示一个旋转过程
*.invert()方法表示四元数的逆,简单说就是把旋转过程倒过来
* 两次旋转的四元数执行.invert()求逆,然后执行.multiply()相乘
*新版本.invert()对应旧版本.invert()
*/
const quaternionInverse = quaternion3D_XOY.clone().invert().multiply(quaternionXOY_Y.clone().invert())
return {
// 返回两次旋转四元数的逆四元数
quaternion: quaternionInverse,
// 范围两次旋转后在XOY平面上关于y轴对称的圆弧起点和结束点坐标
startPoint: startSpherXOY_Y,
endPoint: endSphereXOY_Y
}
}
/**通过函数arcXOY()可以在XOY平面上绘制一个关于y轴对称的圆弧曲线
* startPoint, endPoint表示圆弧曲线的起点和结束点坐标值起点和结束点关于y轴对称
* 同时在圆弧轨迹的基础上绘制一段飞线*/
function arcXOY(radius, startPoint, endPoint, options) {
// 计算两点的中点
const middleV3 = new Vector3().addVectors(startPoint, endPoint).multiplyScalar(0.5)
// 弦垂线的方向dir(弦的中点和圆心构成的向量)
const dir = middleV3.clone().normalize()
// 计算球面飞线的起点、结束点和球心构成夹角的弧度值
const earthRadianAngle = radianAOB(startPoint, endPoint, new Vector3(0, 0, 0))
/*设置飞线轨迹圆弧的中间点坐标
弧度值 * radius * 0.2:表示飞线轨迹圆弧顶部距离地球球面的距离
起点、结束点相聚越远,构成的弧线顶部距离球面越高*/
const arcTopCoord = dir.multiplyScalar(radius + earthRadianAngle * radius * 0.2) // 黄色飞行线的高度
//求三个点的外接圆圆心(飞线圆弧轨迹的圆心坐标)
const flyArcCenter = threePointCenter(startPoint, endPoint, arcTopCoord)
// 飞线圆弧轨迹半径flyArcR
const flyArcR = Math.abs(flyArcCenter.y - arcTopCoord.y)
/*坐标原点和飞线起点构成直线和y轴负半轴夹角弧度值
参数分别是飞线圆弧起点、y轴负半轴上一点、飞线圆弧圆心*/
const flyRadianAngle = radianAOB(startPoint, new Vector3(0, -1, 0), flyArcCenter)
const startAngle = -Math.PI / 2 + flyRadianAngle //飞线圆弧开始角度
const endAngle = Math.PI - startAngle //飞线圆弧结束角度
// 调用圆弧线模型的绘制函数
const arcline = circleLine(flyArcCenter.x, flyArcCenter.y, flyArcR, startAngle, endAngle, options.color)
// const arcline = new Group();// 不绘制轨迹线,使用 Group替换circleLine()即可
arcline.center = flyArcCenter //飞线圆弧自定一个属性表示飞线圆弧的圆心
arcline.topCoord = arcTopCoord //飞线圆弧自定一个属性表示飞线圆弧中间也就是顶部坐标
// const flyAngle = Math.PI/ 10; //飞线圆弧固定弧度
const flyAngle = (endAngle - startAngle) / 7 //飞线圆弧的弧度和轨迹线弧度相关
// 绘制一段飞线,圆心做坐标原点
const flyLine = createFlyLine(flyArcR, startAngle, startAngle + flyAngle, options.flyLineColor)
flyLine.position.y = flyArcCenter.y //平移飞线圆弧和飞线轨迹圆弧重合
//飞线段flyLine作为飞线轨迹arcLine子对象继承飞线轨迹平移旋转等变换
arcline.add(flyLine)
//飞线段运动范围startAngle~flyEndAngle
flyLine.flyEndAngle = endAngle - startAngle - flyAngle
flyLine.startAngle = startAngle
// arcline.flyEndAngle飞线段当前角度位置这里设置了一个随机值用于演示
flyLine.AngleZ = arcline.flyEndAngle * Math.random()
// flyLine.rotation.z = arcline.AngleZ;
// arcline.flyLine指向飞线段,便于设置动画是访问飞线段
arcline.userData['flyLine'] = flyLine
return arcline
}
/*计算球面上两点和球心构成夹角的弧度值
参数point1, point2:表示地球球面上两点坐标Vector3
计算A、B两点和顶点O构成的AOB夹角弧度值*/
function radianAOB(A, B, O) {
// dir1、dir2球面上两个点和球心构成的方向向量
const dir1 = A.clone().sub(O).normalize()
const dir2 = B.clone().sub(O).normalize()
//点乘.dot()计算夹角余弦值
const cosAngle = dir1.clone().dot(dir2)
const radianAngle = Math.acos(cosAngle) //余弦值转夹角弧度值,通过余弦值可以计算夹角范围是0~180度
return radianAngle
}
/*绘制一条圆弧曲线模型Line
5个参数含义(圆心横坐标, 圆心纵坐标, 飞线圆弧轨迹半径, 开始角度, 结束角度)*/
function circleLine(x, y, r, startAngle, endAngle, color) {
const geometry = new BufferGeometry() //声明一个几何体对象Geometry
// ArcCurve创建圆弧曲线
const arc = new ArcCurve(x, y, r, startAngle, endAngle, false)
//getSpacedPoints是基类Curve的方法返回一个vector2对象作为元素组成的数组
const points = arc.getSpacedPoints(80) //分段数50返回51个顶点
geometry.setFromPoints(points) // setFromPoints方法从points中提取数据改变几何体的顶点属性vertices
const material = new LineBasicMaterial({
color: color || 0xd18547
}) //线条材质
const line = new Line(geometry, material) //线条模型对象
return line
}
//求三个点的外接圆圆心p1, p2, p3表示三个点的坐标Vector3。
function threePointCenter(p1, p2, p3) {
const L1 = p1.lengthSq() //p1到坐标原点距离的平方
const L2 = p2.lengthSq()
const L3 = p3.lengthSq()
const x1 = p1.x,
y1 = p1.y,
x2 = p2.x,
y2 = p2.y,
x3 = p3.x,
y3 = p3.y
const S = x1 * y2 + x2 * y3 + x3 * y1 - x1 * y3 - x2 * y1 - x3 * y2
const x = (L2 * y3 + L1 * y2 + L3 * y1 - L2 * y1 - L3 * y2 - L1 * y3) / S / 2
const y = (L3 * x2 + L2 * x1 + L1 * x3 - L1 * x2 - L2 * x3 - L3 * x1) / S / 2
// 三点外接圆圆心坐标
const center = new Vector3(x, y, 0)
return center
}
export { arcXOY, flyArc }

View File

@@ -1,137 +0,0 @@
import {
CatmullRomCurve3,
DoubleSide,
Group,
Mesh,
MeshBasicMaterial,
PlaneGeometry,
Texture,
TubeGeometry,
Vector3
} from 'three'
import { punctuation } from '../world/Earth'
/**
* 经纬度坐标转球面坐标
* @param {地球半径} R
* @param {经度(角度值)} longitude
* @param {维度(角度值)} latitude
*/
export const lon2xyz = (R: number, longitude: number, latitude: number): Vector3 => {
let lon = (longitude * Math.PI) / 180 // 转弧度值
const lat = (latitude * Math.PI) / 180 // 转弧度值
lon = -lon // js坐标系z坐标轴对应经度-90度而不是90度
// 经纬度坐标转球面坐标计算公式
const x = R * Math.cos(lat) * Math.cos(lon)
const y = R * Math.sin(lat)
const z = R * Math.cos(lat) * Math.sin(lon)
// 返回球面坐标
return new Vector3(x, y, z)
}
// 创建波动光圈
export const createWaveMesh = (options: { radius: number; lon: number; lat: number; textures: any }) => {
const geometry = new PlaneGeometry(1, 1) //默认在XOY平面上
const texture = options.textures.aperture
const material = new MeshBasicMaterial({
color: 0xe99f68,
map: texture,
transparent: true, //使用背景透明的png贴图注意开启透明计算
opacity: 1.0,
depthWrite: false //禁止写入深度缓冲区数据
})
const mesh = new Mesh(geometry, material)
// 经纬度转球面坐标
const coord = lon2xyz(options.radius * 1.001, options.lon, options.lat)
const size = options.radius * 0.12 //矩形平面Mesh的尺寸
mesh.scale.set(size, size, size) //设置mesh大小
mesh.userData['size'] = size //自顶一个属性表示mesh静态大小
mesh.userData['scale'] = Math.random() * 1.0 //自定义属性._s表示mesh在原始大小基础上放大倍数 光圈在原来mesh.size基础上1~2倍之间变化
mesh.position.set(coord.x, coord.y, coord.z)
const coordVec3 = new Vector3(coord.x, coord.y, coord.z).normalize()
const meshNormal = new Vector3(0, 0, 1)
mesh.quaternion.setFromUnitVectors(meshNormal, coordVec3)
return mesh
}
// 创建柱状
export const createLightPillar = (options: {
radius: number
lon: number
lat: number
index: number
textures: Record<string, Texture>
punctuation: punctuation
}) => {
const height = options.radius * 0.3
const geometry = new PlaneGeometry(options.radius * 0.05, height)
geometry.rotateX(Math.PI / 2)
geometry.translate(0, 0, height / 2)
const material = new MeshBasicMaterial({
map: options.textures.light_column,
color: options.index == 0 ? options.punctuation.lightColumn.startColor : options.punctuation.lightColumn.endColor,
transparent: true,
side: DoubleSide,
depthWrite: false //是否对深度缓冲区有任何的影响
})
const mesh = new Mesh(geometry, material)
const group = new Group()
// 两个光柱交叉叠加
group.add(mesh, mesh.clone().rotateZ(Math.PI / 2)) //几何体绕x轴旋转了所以mesh旋转轴变为z
// 经纬度转球面坐标
const SphereCoord = lon2xyz(options.radius, options.lon, options.lat) //SphereCoord球面坐标
group.position.set(SphereCoord.x, SphereCoord.y, SphereCoord.z) //设置mesh位置
const coordVec3 = new Vector3(SphereCoord.x, SphereCoord.y, SphereCoord.z).normalize()
const meshNormal = new Vector3(0, 0, 1)
group.quaternion.setFromUnitVectors(meshNormal, coordVec3)
return group
}
// 光柱底座矩形平面
export const createPointMesh = (options: { radius: number; lon: number; lat: number; material: MeshBasicMaterial }) => {
const geometry = new PlaneGeometry(1, 1) //默认在XOY平面上
const mesh = new Mesh(geometry, options.material)
// 经纬度转球面坐标
const coord = lon2xyz(options.radius * 1.001, options.lon, options.lat)
const size = options.radius * 0.05 // 矩形平面Mesh的尺寸
mesh.scale.set(size, size, size) // 设置mesh大小
// 设置mesh位置
mesh.position.set(coord.x, coord.y, coord.z)
const coordVec3 = new Vector3(coord.x, coord.y, coord.z).normalize()
const meshNormal = new Vector3(0, 0, 1)
mesh.quaternion.setFromUnitVectors(meshNormal, coordVec3)
return mesh
}
// 获取点
export const getCirclePoints = (option: any) => {
const list = []
for (let j = 0; j < 2 * Math.PI - 0.1; j += (2 * Math.PI) / (option.number || 100)) {
list.push([
parseFloat((Math.cos(j) * (option.radius || 10)).toFixed(2)),
0,
parseFloat((Math.sin(j) * (option.radius || 10)).toFixed(2))
])
}
if (option.closed) list.push(list[0])
return list
}
// 创建线
/**
* 创建动态的线
*/
export const createAnimateLine = (option: any) => {
// 由多个点数组构成的曲线 通常用于道路
const l: Array<any> = []
option.pointList.forEach((e: Array<any>) => l.push(new Vector3(e[0], e[1], e[2])))
const curve = new CatmullRomCurve3(l) // 曲线路径
// 管道体
const tubeGeometry = new TubeGeometry(curve, option.number || 50, option.radius || 1, option.radialSegments)
return new Mesh(tubeGeometry, option.material)
}

View File

@@ -1,4 +0,0 @@
export interface IEvents {
resize: () => void
}

View File

@@ -1,6 +0,0 @@
export interface IWord {
dom: HTMLElement
data: any
width: number
height: number
}

View File

@@ -1,23 +0,0 @@
uniform vec3 glowColor;
uniform float bias;
uniform float power;
uniform float time;
varying vec3 vp;
varying vec3 vNormal;
varying vec3 vPositionNormal;
uniform float scale;
// 获取纹理
uniform sampler2D map;
// 纹理坐标
varying vec2 vUv;
void main(void){
float a = pow( bias + scale * abs(dot(vNormal, vPositionNormal)), power );
if(vp.y > time && vp.y < time + 20.0) {
float t = smoothstep(0.0, 0.8, (1.0 - abs(0.5 - (vp.y - time) / 20.0)) / 3.0 );
gl_FragColor = mix(gl_FragColor, vec4(glowColor, 1.0), t * t );
}
gl_FragColor = mix(gl_FragColor, vec4( glowColor, 1.0 ), a);
float b = 0.8;
gl_FragColor = gl_FragColor + texture2D( map, vUv );
}

View File

@@ -1,12 +0,0 @@
varying vec2 vUv;
varying vec3 vNormal;
varying vec3 vp;
varying vec3 vPositionNormal;
void main(void){
vUv = uv;
vNormal = normalize( normalMatrix * normal ); // 转换到视图空间
vp = position;
vPositionNormal = normalize(( modelViewMatrix * vec4(position, 1.0) ).xyz);
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}

View File

@@ -1,34 +0,0 @@
/**
* 资源文件
* 把模型和图片分开进行加载
*/
interface ITextures {
name: string
url: string
}
export interface IResources {
textures?: ITextures[]
}
const fileSuffix = ['earth', 'gradient', 'redCircle', 'label', 'aperture', 'glow', 'light_column', 'aircraft']
const textures: ITextures[] = []
const modules = import.meta.globEager("../../images/earth/*");
for(let item in modules) {
const n = item.split('/').pop()
if(n) {
textures.push({
name: n.split('.')[0],
url: modules[item].default
})
}
}
const resources: IResources = {
textures
}
export { resources }

View File

@@ -1,62 +0,0 @@
/**
* 创建 threejs 四大天王
* 场景、相机、渲染器、控制器
*/
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
export class Basic {
public scene!: THREE.Scene
public camera!: THREE.PerspectiveCamera
public renderer!: THREE.WebGLRenderer
public controls!: OrbitControls
public dom: HTMLElement
constructor(dom: HTMLElement) {
this.dom = dom
this.initScenes()
this.setControls()
}
/**
* 初始化场景
*/
initScenes() {
this.scene = new THREE.Scene()
this.camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 100000)
this.camera.position.set(0, 30, -250)
this.renderer = new THREE.WebGLRenderer({
// canvas: this.dom,
alpha: true, // 透明
antialias: true // 抗锯齿
})
this.renderer.setPixelRatio(window.devicePixelRatio) // 设置屏幕像素比
this.renderer.setSize(window.innerWidth, window.innerHeight) // 设置渲染器宽高
this.dom.appendChild(this.renderer.domElement) // 添加到dom中
}
/**
* 设置控制器
*/
setControls() {
// 鼠标控制 相机渲染dom
this.controls = new OrbitControls(this.camera, this.renderer.domElement)
this.controls.autoRotateSpeed = 3
// 使动画循环使用时阻尼或自转 意思是否有惯性
this.controls.enableDamping = true
// 动态阻尼系数 就是鼠标拖拽旋转灵敏度
this.controls.dampingFactor = 0.05
// 是否可以缩放
this.controls.enableZoom = true
// 设置相机距离原点的最远距离
this.controls.minDistance = 100
// 设置相机距离原点的最远距离
this.controls.maxDistance = 300
// 是否开启右键拖拽
this.controls.enablePan = false
}
}

View File

@@ -1,496 +0,0 @@
import {
BufferAttribute,
BufferGeometry,
Color,
DoubleSide,
Group,
Material,
Mesh,
MeshBasicMaterial,
NormalBlending,
Object3D,
Points,
PointsMaterial,
ShaderMaterial,
SphereGeometry,
Sprite,
SpriteMaterial,
Texture,
TextureLoader,
Vector3
} from 'three'
import {
createAnimateLine,
createLightPillar,
createPointMesh,
createWaveMesh,
getCirclePoints,
lon2xyz
} from '../Utils/common'
import gsap from 'gsap'
import { flyArc } from '../Utils/arc'
import earthVertex from '../shaders/earth/vertex.vs?raw'
import earthFragment from '../shaders/earth/fragment.fs?raw'
export type punctuation = {
circleColor: number
lightColumn: {
startColor: number // 起点颜色
endColor: number // 终点颜色
}
}
type options = {
data: {
startArray: {
name: string
E: number // 经度
N: number // 维度
}
endArray: {
name: string
E: number // 经度
N: number // 维度
}[]
}[]
dom: HTMLElement
textures: Record<string, Texture> // 贴图
earth: {
radius: number // 地球半径
rotateSpeed: number // 地球旋转速度
isRotation: boolean // 地球组是否自转
}
satellite: {
show: boolean // 是否显示卫星
rotateSpeed: number // 旋转速度
size: number // 卫星大小
number: number // 一个圆环几个球
}
punctuation: punctuation
flyLine: {
color: number // 飞线的颜色
speed: number // 飞机拖尾线速度
flyLineColor: number // 飞行线的颜色
}
}
type uniforms = {
glowColor: { value: Color }
scale: { type: string; value: number }
bias: { type: string; value: number }
power: { type: string; value: number }
time: { type: string; value: any }
isHover: { value: boolean }
map: { value?: Texture }
}
export default class earth {
public group: Group
public earthGroup: Group
public around!: BufferGeometry
public aroundPoints!: Points<BufferGeometry, PointsMaterial>
public options: options
public uniforms: uniforms
public timeValue: number
public earth!: Mesh<SphereGeometry, ShaderMaterial>
public punctuationMaterial!: MeshBasicMaterial
public markupPoint: Group
public waveMeshArr: Object3D[]
public circleLineList: any[]
public circleList: any[]
public x: number
public n: number
public isRotation: boolean
public flyLineArcGroup!: Group
constructor(options: options) {
this.options = options
this.group = new Group()
this.group.name = 'group'
this.group.scale.set(0, 0, 0)
this.earthGroup = new Group()
this.group.add(this.earthGroup)
this.earthGroup.name = 'EarthGroup'
// 标注点效果
this.markupPoint = new Group()
this.markupPoint.name = 'markupPoint'
this.waveMeshArr = []
// 卫星和标签
this.circleLineList = []
this.circleList = []
this.x = 0
this.n = 0
// 地球自转
this.isRotation = this.options.earth.isRotation
// 扫光动画 shader
this.timeValue = 200
this.uniforms = {
glowColor: {
value: new Color(0x0cd1eb)
},
scale: {
type: 'f',
value: -1.0
},
bias: {
type: 'f',
value: 1.0
},
power: {
type: 'f',
value: 3.3
},
time: {
type: 'f',
value: this.timeValue
},
isHover: {
value: false
},
map: {
value: undefined
}
}
}
async init(): Promise<void> {
return new Promise(resolve => {
const init = async () => {
this.createEarth() // 创建地球
this.createEarthGlow() // 创建地球辉光
this.createEarthAperture() // 创建地球的大气层
await this.createMarkupPoint() // 创建柱状点位
this.createAnimateCircle() // 创建环绕卫星
this.createFlyLine() // 创建飞线
this.show()
resolve()
}
init()
})
}
createEarth() {
const earth_geometry = new SphereGeometry(this.options.earth.radius, 50, 50)
const earth_border = new SphereGeometry(this.options.earth.radius + 10, 60, 60)
const pointMaterial = new PointsMaterial({
color: 0x81ffff, //设置颜色,默认 0xFFFFFF
transparent: true,
sizeAttenuation: true,
opacity: 0.1,
vertexColors: false, //定义材料是否使用顶点颜色默认false ---如果该选项设置为true则color属性失效
size: 0.2 //定义粒子的大小。默认为1.0
})
const points = new Points(earth_border, pointMaterial) //将模型添加到场景
this.earthGroup.add(points)
this.uniforms.map.value = this.options.textures.earth
const earth_material = new ShaderMaterial({
// wireframe:true, // 显示模型线条
uniforms: this.uniforms as any,
vertexShader: earthVertex,
fragmentShader: earthFragment
})
earth_material.needsUpdate = true
this.earth = new Mesh(earth_geometry, earth_material)
this.earth.name = 'earth'
this.earthGroup.add(this.earth)
}
createEarthGlow() {
const R = this.options.earth.radius //地球半径
// TextureLoader创建一个纹理加载器对象可以加载图片作为纹理贴图
const texture = this.options.textures.glow // 加载纹理贴图
// 创建精灵材质对象SpriteMaterial
const spriteMaterial = new SpriteMaterial({
map: texture, // 设置精灵纹理贴图
color: 0x4390d1,
transparent: true, //开启透明
opacity: 0.7, // 可以通过透明度整体调节光圈
depthWrite: false //禁止写入深度缓冲区数据
})
// 创建表示地球光圈的精灵模型
const sprite = new Sprite(spriteMaterial)
sprite.scale.set(R * 3.0, R * 3.0, 1) //适当缩放精灵
this.earthGroup.add(sprite)
}
createEarthAperture() {
const vertexShader = [
'varying vec3 vVertexWorldPosition;',
'varying vec3 vVertexNormal;',
'varying vec4 vFragColor;',
'void main(){',
' vVertexNormal = normalize(normalMatrix * normal);', //将法线转换到视图坐标系中
' vVertexWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;', //将顶点转换到世界坐标系中
' // set gl_Position',
' gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);',
'}'
].join('\n')
//大气层效果
const AeroSphere = {
uniforms: {
coeficient: {
type: 'f',
value: 1.0
},
power: {
type: 'f',
value: 3
},
glowColor: {
type: 'c',
value: new Color(0x4390d1)
}
},
vertexShader: vertexShader,
fragmentShader: [
'uniform vec3 glowColor;',
'uniform float coeficient;',
'uniform float power;',
'varying vec3 vVertexNormal;',
'varying vec3 vVertexWorldPosition;',
'varying vec4 vFragColor;',
'void main(){',
' vec3 worldCameraToVertex = vVertexWorldPosition - cameraPosition;', //世界坐标系中从相机位置到顶点位置的距离
' vec3 viewCameraToVertex = (viewMatrix * vec4(worldCameraToVertex, 0.0)).xyz;', //视图坐标系中从相机位置到顶点位置的距离
' viewCameraToVertex= normalize(viewCameraToVertex);', //规一化
' float intensity = pow(coeficient + dot(vVertexNormal, viewCameraToVertex), power);',
' gl_FragColor = vec4(glowColor, intensity);',
'}'
].join('\n')
}
//球体 辉光 大气层
const material1 = new ShaderMaterial({
uniforms: AeroSphere.uniforms,
vertexShader: AeroSphere.vertexShader,
fragmentShader: AeroSphere.fragmentShader,
blending: NormalBlending,
transparent: true,
depthWrite: false
})
const sphere = new SphereGeometry(this.options.earth.radius + 0, 50, 50)
const mesh = new Mesh(sphere, material1)
this.earthGroup.add(mesh)
}
async createMarkupPoint() {
await Promise.all(
this.options.data.map(async item => {
const radius = this.options.earth.radius
const lon = item.startArray.E //经度
const lat = item.startArray.N //纬度
this.punctuationMaterial = new MeshBasicMaterial({
color: this.options.punctuation.circleColor,
map: this.options.textures.label,
transparent: true, //使用背景透明的png贴图注意开启透明计算
depthWrite: false //禁止写入深度缓冲区数据
})
const mesh = createPointMesh({ radius, lon, lat, material: this.punctuationMaterial }) //光柱底座矩形平面
this.markupPoint.add(mesh)
const LightPillar = createLightPillar({
radius: this.options.earth.radius,
lon,
lat,
index: 0,
textures: this.options.textures,
punctuation: this.options.punctuation
}) //光柱
this.markupPoint.add(LightPillar)
const WaveMesh = createWaveMesh({ radius, lon, lat, textures: this.options.textures }) //波动光圈
this.markupPoint.add(WaveMesh)
this.waveMeshArr.push(WaveMesh)
await Promise.all(
item.endArray.map(obj => {
const lon = obj.E //经度
const lat = obj.N //纬度
const mesh = createPointMesh({ radius, lon, lat, material: this.punctuationMaterial }) //光柱底座矩形平面
this.markupPoint.add(mesh)
const LightPillar = createLightPillar({
radius: this.options.earth.radius,
lon,
lat,
index: 1,
textures: this.options.textures,
punctuation: this.options.punctuation
}) //光柱
this.markupPoint.add(LightPillar)
const WaveMesh = createWaveMesh({ radius, lon, lat, textures: this.options.textures }) //波动光圈
this.markupPoint.add(WaveMesh)
this.waveMeshArr.push(WaveMesh)
})
)
this.earthGroup.add(this.markupPoint)
})
)
}
createAnimateCircle() {
// 创建 圆环 点
const list = getCirclePoints({
radius: this.options.earth.radius + 15,
number: 150, //切割数
closed: true // 闭合
})
const mat = new MeshBasicMaterial({
color: '#0c3172',
transparent: true,
opacity: 0.4,
side: DoubleSide
})
const line = createAnimateLine({
pointList: list,
material: mat,
number: 100,
radius: 0.1
})
this.earthGroup.add(line)
// 在clone两条线出来
const l2 = line.clone()
l2.scale.set(1.2, 1.2, 1.2)
l2.rotateZ(Math.PI / 6)
this.earthGroup.add(l2)
const l3 = line.clone()
l3.scale.set(0.8, 0.8, 0.8)
l3.rotateZ(-Math.PI / 6)
this.earthGroup.add(l3)
/**
* 旋转的球
*/
const ball = new Mesh(
new SphereGeometry(this.options.satellite.size, 32, 32),
new MeshBasicMaterial({
color: '#e0b187' // 745F4D
})
)
const ball2 = new Mesh(
new SphereGeometry(this.options.satellite.size, 32, 32),
new MeshBasicMaterial({
color: '#628fbb' // 324A62
})
)
const ball3 = new Mesh(
new SphereGeometry(this.options.satellite.size, 32, 32),
new MeshBasicMaterial({
color: '#806bdf' //6D5AC4
})
)
this.circleLineList.push(line, l2, l3)
ball.name = ball2.name = ball3.name = '卫星'
for (let i = 0; i < this.options.satellite.number; i++) {
const ball01 = ball.clone()
// 一根线上总共有几个球,根据数量平均分布一下
const num = Math.floor(list.length / this.options.satellite.number)
ball01.position.set(list[num * (i + 1)][0] * 1, list[num * (i + 1)][1] * 1, list[num * (i + 1)][2] * 1)
line.add(ball01)
const ball02 = ball2.clone()
const num02 = Math.floor(list.length / this.options.satellite.number)
ball02.position.set(list[num02 * (i + 1)][0] * 1, list[num02 * (i + 1)][1] * 1, list[num02 * (i + 1)][2] * 1)
l2.add(ball02)
const ball03 = ball2.clone()
const num03 = Math.floor(list.length / this.options.satellite.number)
ball03.position.set(list[num03 * (i + 1)][0] * 1, list[num03 * (i + 1)][1] * 1, list[num03 * (i + 1)][2] * 1)
l3.add(ball03)
}
}
createFlyLine() {
this.flyLineArcGroup = new Group()
this.flyLineArcGroup.userData['flyLineArray'] = []
this.earthGroup.add(this.flyLineArcGroup)
this.options.data.forEach(cities => {
cities.endArray.forEach(item => {
// 调用函数flyArc绘制球面上任意两点之间飞线圆弧轨迹
const arcline = flyArc(
this.options.earth.radius,
cities.startArray.E,
cities.startArray.N,
item.E,
item.N,
this.options.flyLine
)
this.flyLineArcGroup.add(arcline) // 飞线插入flyArcGroup中
this.flyLineArcGroup.userData['flyLineArray'].push(arcline.userData['flyLine'])
})
})
}
show() {
gsap.to(this.group.scale, {
x: 1,
y: 1,
z: 1,
duration: 2,
ease: 'Quadratic'
})
}
render() {
this.flyLineArcGroup?.userData['flyLineArray']?.forEach((fly: any) => {
fly.rotation.z += this.options.flyLine.speed // 调节飞线速度
if (fly.rotation.z >= fly.flyEndAngle) fly.rotation.z = 0
})
if (this.isRotation) {
this.earthGroup.rotation.y += this.options.earth.rotateSpeed
}
this.circleLineList.forEach(e => {
e.rotateY(this.options.satellite.rotateSpeed)
})
this.uniforms.time.value =
this.uniforms.time.value < -this.timeValue ? this.timeValue : this.uniforms.time.value - 1
if (this.waveMeshArr.length) {
this.waveMeshArr.forEach((mesh: any) => {
mesh.userData['scale'] += 0.007
mesh.scale.set(
mesh.userData['size'] * mesh.userData['scale'],
mesh.userData['size'] * mesh.userData['scale'],
mesh.userData['size'] * mesh.userData['scale']
)
if (mesh.userData['scale'] <= 1.5) {
(mesh.material as Material).opacity = (mesh.userData['scale'] - 1) * 2 //2等于1/(1.5-1.0)保证透明度在0~1之间变化
} else if (mesh.userData['scale'] > 1.5 && mesh.userData['scale'] <= 2) {
(mesh.material as Material).opacity = 1 - (mesh.userData['scale'] - 1.5) * 2 //2等于1/(2.0-1.5) mesh缩放2倍对应0 缩放1.5被对应1
} else {
mesh.userData['scale'] = 1
}
})
}
}
}

View File

@@ -1,54 +0,0 @@
/**
* 资源管理和加载
*/
import { LoadingManager, Texture, TextureLoader } from 'three'
import { loadingStart, loadingFinish, loadingError } from '@/utils'
import { resources } from './Assets'
export class Resources {
private manager!: LoadingManager
private callback: () => void
private textureLoader!: InstanceType<typeof TextureLoader>
public textures: Record<string, Texture>
constructor(callback: () => void) {
this.callback = callback // 资源加载完成的回调
this.textures = {} // 贴图对象
this.setLoadingManager()
this.loadResources()
}
/**
* 管理加载状态
*/
private setLoadingManager() {
this.manager = new LoadingManager()
// 开始加载
this.manager.onStart = () => {
loadingStart()
}
// 加载完成
this.manager.onLoad = () => {
this.callback()
}
// 正在进行中
this.manager.onProgress = url => {
loadingFinish()
}
this.manager.onError = url => {
loadingError()
window['$message'].error('数据加载失败,请刷新重试!')
}
}
/**
* 加载资源
*/
private loadResources(): void {
this.textureLoader = new TextureLoader(this.manager)
resources.textures?.forEach(item => {
this.textureLoader.load(item.url, t => {
this.textures[item.name] = t
})
})
}
}

View File

@@ -1,112 +0,0 @@
import { MeshBasicMaterial, PerspectiveCamera, Scene, ShaderMaterial, WebGLRenderer } from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
// interfaces
import { IWord } from '../interfaces/IWord'
import { Basic } from './Basic'
import { Resources } from './Resources'
// earth
import Earth from './Earth'
export default class World {
public basic: Basic
public scene: Scene
public camera: PerspectiveCamera
public renderer: WebGLRenderer
public controls: OrbitControls
public material!: ShaderMaterial | MeshBasicMaterial
public resources: Resources
public option: IWord
public earth!: Earth
constructor(option: IWord) {
/**
* 加载资源
*/
this.option = option
this.basic = new Basic(option.dom)
this.scene = this.basic.scene
this.renderer = this.basic.renderer
this.controls = this.basic.controls
this.camera = this.basic.camera
this.updateSize()
this.resources = new Resources(async () => {
await this.createEarth()
// 开始渲染
this.render()
})
}
async createEarth(data?: any) {
// 资源加载完成开始制作地球注释在new Earth()类型里面
this.earth = new Earth({
data: data || this.option.data,
dom: this.option.dom,
textures: this.resources.textures,
earth: {
radius: 50,
rotateSpeed: 0.002,
isRotation: true
},
satellite: {
show: true,
rotateSpeed: -0.01,
size: 1,
number: 2
},
punctuation: {
circleColor: 0x3892ff,
lightColumn: {
startColor: 0xe4007f, // 起点颜色
endColor: 0xffffff // 终点颜色
}
},
flyLine: {
color: 0xf3ae76, // 飞线的颜色
flyLineColor: 0xff7714, // 飞行线的颜色
speed: 0.004 // 拖尾飞线的速度
}
})
this.scene.add(this.earth.group)
await this.earth.init()
}
/**
* 渲染函数
*/
public render() {
requestAnimationFrame(this.render.bind(this))
this.renderer.render(this.scene, this.camera)
this.controls && this.controls.update()
this.earth && this.earth.render()
}
// 更新
public updateSize(width?: number, height?: number) {
let w = width || this.option.width
let h = height || this.option.height
// 取小值
if (w < h) h = w
else w = h
this.renderer.setSize(w, h)
this.camera.aspect = w / h
this.camera.updateProjectionMatrix()
}
// 数据更新重新渲染
public updateData(data?: any) {
if (!this.earth.group) return
// 先删除旧的
this.scene.remove(this.earth.group)
// 递归遍历组对象group释放所有后代网格模型绑定几何体占用内存
this.earth.group.traverse((obj: any) => {
if (obj.type === 'Mesh') {
obj.geometry.dispose()
obj.material.dispose()
}
})
// 重新创建
this.createEarth(data)
}
}

View File

@@ -1,17 +0,0 @@
import { PublicConfigClass } from '@/packages/public'
import { CreateComponentType } from '@/packages/index.d'
import { chartInitConfig } from '@/settings/designSetting'
import { ThreeEarth01Config } from './index'
import dataJson from './data.json'
import cloneDeep from 'lodash/cloneDeep'
export const option = {
dataset: dataJson
}
export default class Config extends PublicConfigClass implements CreateComponentType {
public key = ThreeEarth01Config.key
public attr = { ...chartInitConfig, w: 800, h: 800, zIndex: -1 }
public chartConfig = cloneDeep(ThreeEarth01Config)
public option = cloneDeep(option)
}

View File

@@ -1,14 +0,0 @@
<template></template>
<script setup lang="ts">
import { PropType } from 'vue'
import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
import { option } from './config'
const props = defineProps({
optionData: {
type: Object as PropType<typeof option>,
required: true
}
})
</script>

View File

@@ -1,84 +0,0 @@
[
{
"startArray": {
"name": "杭州",
"N": 30.246026,
"E": 120.210792
},
"endArray": [
{
"name": "曼谷",
"N": 22,
"E": 100.49074172973633
},
{
"name": "澳大利亚",
"N": -23.68477416688374,
"E": 133.857421875
},
{
"name": "新疆维吾尔自治区",
"N": 41.748,
"E": 84.9023
},
{
"name": "德黑兰",
"N": 35,
"E": 51
},
{
"name": "德黑兰",
"N": 35,
"E": 51
},
{
"name": "美国",
"N": 34.125447565116126,
"E": 241.7431640625
},
{
"name": "英国",
"N": 51.508742458803326,
"E": 359.82421875
},
{
"name": "巴西",
"N": -9.96885060854611,
"E": 668.1445312499999
}
]
},
{
"startArray": {
"name": "北京",
"N": 39.89491,
"E": 116.322056
},
"endArray": [
{
"name": "西藏",
"N": 29.660361,
"E": 91.132212
},
{
"name": "广西",
"N": 22.830824,
"E": 108.30616
},
{
"name": "江西",
"N": 28.676493,
"E": 115.892151
},
{
"name": "贵阳",
"N": 26.647661,
"E": 106.630153
}
]
}
]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 566 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 504 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -1,15 +0,0 @@
import image from '@/assets/images/chart/decorates/threeEarth01.png'
import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
export const ThreeEarth01Config: ConfigType = {
key: 'ThreeEarth01',
chartKey: 'VThreeEarth01',
conKey: 'VCThreeEarth01',
title: '三维地球',
category: ChatCategoryEnum.THREE,
categoryName: ChatCategoryEnumName.THREE,
package: PackagesCategoryEnum.DECORATES,
chartFrame: ChartFrameEnum.STATIC,
image
}

View File

@@ -1,81 +0,0 @@
<template>
<div ref="chartRef"></div>
</template>
<script setup lang="ts">
import { onMounted, PropType, ref, toRefs, watch } from 'vue'
import { CreateComponentType } from '@/packages/index.d'
import { useChartDataFetch } from '@/hooks'
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
import { option } from './config'
import World from './code/world/Word'
import throttle from 'lodash/throttle'
const props = defineProps({
chartConfig: {
type: Object as PropType<CreateComponentType & typeof option>,
required: true
}
})
const chartEditStore = useChartEditStore()
const chartRef = ref<HTMLElement>()
const { w, h } = toRefs(props.chartConfig.attr)
let threeClassInstance: World
// 初始化
const init = () => {
const dom: HTMLElement | undefined = chartRef.value
if (dom) {
threeClassInstance = new World({
dom: dom,
data: props.chartConfig.option.dataset,
width: w.value,
height: h.value
})
}
}
const updateData = (data: any) => {
try {
threeClassInstance.updateData(data)
} catch (error) {
console.log(error)
}
}
// 改变大小
watch(
() => [w.value, h.value],
throttle(([newWidth], [newHeight]) => {
threeClassInstance.updateSize(newWidth, newHeight)
}, 100)
)
watch(
() => props.chartConfig.option.dataset,
(newData: any) => {
updateData(newData)
},
{
deep: false
}
)
// DOM 渲染之后进行初始化
onMounted(() => {
try {
if (navigator.userAgent.indexOf('Chrome') < -1 || navigator.userAgent.indexOf('Edg') > -1) {
window['$message'].error('此组件仅在【谷歌】浏览器上能正常展示!')
chartEditStore.removeComponentList(undefined, false)
return
}
init()
} catch (error) {
console.log(error)
}
})
useChartDataFetch(props.chartConfig, useChartEditStore, updateData)
</script>

View File

@@ -1,3 +0,0 @@
import { ThreeEarth01Config } from './ThreeEarth01/index'
export default [ThreeEarth01Config]

View File

@@ -1,13 +1,11 @@
export enum ChatCategoryEnum {
BORDER = 'Borders',
DECORATE = 'Decorates',
THREE = 'Three',
MORE = 'Mores'
}
export enum ChatCategoryEnumName {
BORDER = '边框',
DECORATE = '装饰',
THREE = '三维',
MORE = '更多'
}

View File

@@ -1,6 +1,5 @@
import Borders from './Borders'
import Decorates from './Decorates'
import Three from './Three'
import Mores from './Mores'
export const DecorateList = [...Borders, ...Decorates, ...Three, ...Mores]
export const DecorateList = [...Borders, ...Decorates, ...Mores]

View File

@@ -47,12 +47,9 @@ const option = computed(() => {
})
const dataSetHandle = (dataset: typeof dataJson) => {
try {
dataset && (props.chartConfig.option.series[0].data = dataset)
vChartRef.value && isPreview() && vChartRef.value.setOption(props.chartConfig.option)
} catch (error) {
console.log(error)
}
dataset && (props.chartConfig.option.series[0].data = dataset)
vChartRef.value && isPreview() && vChartRef.value.setOption(props.chartConfig.option)
}
// dataset 无法变更条数的补丁

View File

@@ -10,12 +10,19 @@
<div class="rank" :style="`color: ${color};font-size: ${indexFontSize}px`">No.{{ item.ranking }}</div>
<div class="info-name" :style="`font-size: ${leftFontSize}px`" v-html="item.name" />
<div class="ranking-value" :style="`color: ${textColor};font-size: ${rightFontSize}px`">
{{ status.mergedConfig.valueFormatter ? status.mergedConfig.valueFormatter(item) : item.value }}
{{
status.mergedConfig.valueFormatter
? status.mergedConfig.valueFormatter(item)
: item.value
}}
{{ unit }}
</div>
</div>
<div class="ranking-column" :style="`border-color: ${borderColor}`">
<div class="inside-column" :style="`width: ${item.percent}%;background-color: ${color}`">
<div
class="inside-column"
:style="`width: ${item.percent}%;background-color: ${color}`"
>
<div class="shine" />
</div>
</div>
@@ -32,8 +39,8 @@ import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore
const props = defineProps({
chartConfig: {
type: Object as PropType<CreateComponentType>,
required: true
}
required: true,
},
})
const { w, h } = toRefs(props.chartConfig.attr)
const { rowNum, unit, color, textColor, borderColor, indexFontSize, leftFontSize, rightFontSize } = toRefs(
@@ -43,15 +50,13 @@ const { rowNum, unit, color, textColor, borderColor, indexFontSize, leftFontSize
const status = reactive({
mergedConfig: props.chartConfig.option,
rowsData: [],
rows: [
{
scroll: 0,
ranking: 1,
name: '',
value: '',
percent: 0
}
],
rows: [{
scroll: 0,
ranking: 1,
name: '',
value: '',
percent: 0
}],
heights: [0],
animationIndex: 0,
animationHandler: 0,
@@ -76,16 +81,16 @@ const calcRowsData = () => {
// abs of max
const maxAbs = Math.abs(max)
const total = max + minAbs
dataset = dataset.map((row: any, i: number) => ({
dataset = dataset.map((row: any, i:number) => ({
...row,
ranking: i + 1,
percent: ((row.value + minAbs) / total) * 100
percent: ((row.value + minAbs) / total) * 100,
}))
const rowLength = dataset.length
if (rowLength > rowNum && rowLength < 2 * rowNum) {
dataset = [...dataset, ...dataset]
}
dataset = dataset.map((d: any, i: number) => ({ ...d, scroll: i }))
dataset = dataset.map((d:any, i:number) => ({ ...d, scroll: i }))
status.rowsData = dataset
status.rows = dataset
}
@@ -129,15 +134,11 @@ const stopAnimation = () => {
}
const onRestart = async () => {
try {
if (!status.mergedConfig) return
stopAnimation()
calcRowsData()
calcHeights(true)
animation(true)
} catch (error) {
console.log(error)
}
if (!status.mergedConfig) return
stopAnimation()
calcRowsData()
calcHeights(true)
animation(true)
}
onRestart()

View File

@@ -1,47 +1,24 @@
<template>
<div class="dv-scroll-board">
<div
class="header"
v-if="status.header.length && status.mergedConfig"
:style="`background-color: ${status.mergedConfig.headerBGC};`"
>
<div
class="header-item"
v-for="(headerItem, i) in status.header"
:key="`${headerItem}${i}`"
:style="`
<div class="header" v-if="status.header.length && status.mergedConfig"
:style="`background-color: ${status.mergedConfig.headerBGC};`">
<div class="header-item" v-for="(headerItem, i) in status.header" :key="`${headerItem}${i}`" :style="`
height: ${status.mergedConfig.headerHeight}px;
line-height: ${status.mergedConfig.headerHeight}px;
width: ${status.widths[i]}px;
`"
:align="status.aligns[i]"
v-html="headerItem"
/>
`" :align="status.aligns[i]" v-html="headerItem" />
</div>
<div
v-if="status.mergedConfig"
class="rows"
:style="`height: ${h - (status.header.length ? status.mergedConfig.headerHeight : 0)}px;`"
>
<div
class="row-item"
v-for="(row, ri) in status.rows"
:key="`${row.toString()}${row.scroll}`"
:style="`
<div v-if="status.mergedConfig" class="rows"
:style="`height: ${h - (status.header.length ? status.mergedConfig.headerHeight : 0)}px;`">
<div class="row-item" v-for="(row, ri) in status.rows" :key="`${row.toString()}${row.scroll}`" :style="`
height: ${status.heights[ri]}px;
line-height: ${status.heights[ri]}px;
background-color: ${status.mergedConfig[row.rowIndex % 2 === 0 ? 'evenRowBGC' : 'oddRowBGC']};
`"
>
<div
class="ceil"
v-for="(ceil, ci) in row.ceils"
:key="`${ceil}${ri}${ci}`"
:style="`width: ${status.widths[ci]}px;`"
:align="status.aligns[ci]"
v-html="ceil"
/>
`">
<div class="ceil" v-for="(ceil, ci) in row.ceils" :key="`${ceil}${ri}${ci}`"
:style="`width: ${status.widths[ci]}px;`" :align="status.aligns[ci]" v-html="ceil" />
</div>
</div>
</div>
@@ -58,8 +35,8 @@ import cloneDeep from 'lodash/cloneDeep'
const props = defineProps({
chartConfig: {
type: Object as PropType<CreateComponentType>,
required: true
}
required: true,
},
})
// 这里能拿到图表宽高等
@@ -161,13 +138,11 @@ const status = reactive({
mergedConfig: props.chartConfig.option,
header: [],
rowsData: [],
rows: [
{
ceils: [],
rowIndex: 0,
scroll: 0
}
],
rows: [{
ceils: [],
rowIndex: 0,
scroll: 0
}],
widths: [],
heights: [0],
avgHeight: 0,
@@ -188,7 +163,7 @@ const calcData = () => {
animation(true)
}
onMounted(() => {
onMounted(()=> {
calcData()
})
@@ -210,21 +185,19 @@ const calcHeaderData = () => {
const calcRowsData = () => {
let { dataset, index, headerBGC, rowNum } = status.mergedConfig
if (index) {
dataset = dataset.map((row: any, i: number) => {
dataset = dataset.map((row:any, i:number) => {
row = [...row]
const indexTag = `<span class="index" style="background-color: ${headerBGC};border-radius: 3px;padding: 0px 3px;">${
i + 1
}</span>`
const indexTag = `<span class="index" style="background-color: ${headerBGC};border-radius: 3px;padding: 0px 3px;">${i + 1}</span>`
row.unshift(indexTag)
return row
})
}
dataset = dataset.map((ceils: any, i: number) => ({ ceils, rowIndex: i }))
dataset = dataset.map((ceils:any, i:number) => ({ ceils, rowIndex: i }))
const rowLength = dataset.length
if (rowLength > rowNum && rowLength < 2 * rowNum) {
dataset = [...dataset, ...dataset]
}
dataset = dataset.map((d: any, i: number) => ({ ...d, scroll: i }))
dataset = dataset.map((d:any, i:number) => ({ ...d, scroll: i }))
status.rowsData = dataset
status.rows = dataset
@@ -233,7 +206,7 @@ const calcRowsData = () => {
const calcWidths = () => {
const { mergedConfig, rowsData } = status
const { columnWidth, header } = mergedConfig
const usedWidth = columnWidth.reduce((all: any, ws: number) => all + ws, 0)
const usedWidth = columnWidth.reduce((all:any, ws:number) => all + ws, 0)
let columnNum = 0
if (rowsData[0]) {
columnNum = (rowsData[0] as any).ceils.length
@@ -281,7 +254,7 @@ const animation = async (start = false) => {
const rowLength = rowsData.length
if (rowNum >= rowLength) return
if (start) {
await new Promise(resolve => setTimeout(resolve, waitTime * 1000))
await new Promise(resolve => setTimeout(resolve, waitTime*1000))
if (updater !== status.updater) return
}
const animationNum = carousel === 'single' ? 1 : rowNum
@@ -296,7 +269,7 @@ const animation = async (start = false) => {
const back = animationIndex - rowLength
if (back >= 0) animationIndex = back
status.animationIndex = animationIndex
status.animationHandler = setTimeout(animation, waitTime * 1000 - 300) as any
status.animationHandler = setTimeout(animation, waitTime*1000 - 300) as any
}
const stopAnimation = () => {
@@ -306,13 +279,9 @@ const stopAnimation = () => {
}
const onRestart = async () => {
try {
if (!status.mergedConfig) return
stopAnimation()
calcData()
} catch (error) {
console.log(error)
}
if (!status.mergedConfig) return
stopAnimation()
calcData()
}
watch(
@@ -335,7 +304,7 @@ watch(
() => {
onRestart()
},
{ deep: true }
{deep:true}
)
// 数据更新 (默认更新 dataset若更新之后有其它操作可添加回调函数)
@@ -347,6 +316,7 @@ useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any[]) => {
onUnmounted(() => {
stopAnimation()
})
</script>
<style lang="scss" scoped>

View File

@@ -90,21 +90,6 @@ export const BlendModeEnumList = [
{ label: '亮度', value: 'luminosity' }
]
// vue3 生命周期事件
export enum EventLife {
// 渲染之后
MOUNTED = 'vnodeMounted',
// 渲染之前
BEFORE_MOUNT = 'vnodeBeforeMount',
// 鼠标事件
MOUSE_CLICK = 'click',
MOUSE_OVER = "mouseover",
MOUSE_LEAVE = "mouseleave",
// 图表事件
ECHART_LEGEND_SELECT_CHANGED = "legendselectchanged",
ECHART_HIGH_LIGHT = "highlight"
}
// 组件实例类
export interface PublicConfigType {
id: string
@@ -130,9 +115,7 @@ export interface PublicConfigType {
}
filter?: string
status: StatusType
events?: {
[K in EventLife]?: string
}
setPosition: Function
}
export interface CreateComponentType extends PublicConfigType, requestConfig {

View File

@@ -81,8 +81,12 @@ export class PublicConfigClass implements PublicConfigType {
public request = cloneDeep(requestConfig)
// 数据过滤
public filter = undefined
// 事件
public events = undefined
// 设置坐标
public setPosition(x: number, y: number): void {
this.attr.x = x
this.attr.y = y
}
}
// 多选成组类

View File

@@ -18,13 +18,11 @@ export function createRouterGuards(router: Router) {
const isErrorPage = router.getRoutes().findIndex((item) => item.name === to.name);
if (isErrorPage === -1) {
next({ name: PageEnum.ERROR_PAGE_NAME_404 })
return
}
// @ts-ignore
if (!routerAllowList.includes(to.name) && !loginCheck()) {
next({ name: PageEnum.BASE_LOGIN_NAME })
return
}
next()
})

View File

@@ -22,8 +22,7 @@
"axisLabel": {
"show": true,
"fontSize": 12,
"color": "#B9B8CE",
"rotate": 0
"color": "#B9B8CE"
},
"position": "bottom",
"axisLine": {
@@ -59,8 +58,7 @@
"axisLabel": {
"show": true,
"fontSize": 12,
"color": "#B9B8CE",
"rotate": 0
"color": "#B9B8CE"
},
"position": "left",
"axisLine": {
@@ -90,12 +88,5 @@
"textStyle": {
"color": "#B9B8CE"
}
},
"grid": {
"show": false,
"left": "10%",
"top": "60",
"right": "10%",
"bottom": "60"
}
}

View File

@@ -518,31 +518,34 @@ export const useChartEditStore = defineStore({
}
const parseHandle = (e: CreateComponentType | CreateComponentGroupType) => {
e = cloneDeep(e)
// 生成新 id
e.id = getUUID()
e.attr.x = this.getMousePosition.x + 30
e.attr.y = this.getMousePosition.y + 30
// 外层生成新 id
e.id = getUUID()
// 分组列表生成新 id
if (e.isGroup) {
(e as CreateComponentGroupType).groupList.forEach((item: CreateComponentType) => {
item.id = getUUID()
})
}
return e
}
const isCut = recordCharts.type === HistoryActionTypeEnum.CUT
const targetList = Array.isArray(recordCharts.charts) ? recordCharts.charts : [ recordCharts.charts ]
// 多项
targetList.forEach((e: CreateComponentType | CreateComponentGroupType) => {
this.addComponentList(parseHandle(e), undefined, true)
// 剪切需删除原数据
if (isCut) {
this.setTargetSelectChart(e.id)
this.removeComponentList(undefined, true)
}
})
if (isCut) this.setRecordChart(undefined)
if (Array.isArray(recordCharts.charts)) {
recordCharts.charts.forEach((e: CreateComponentType) => {
this.addComponentList(parseHandle(e), undefined, true)
// 剪切需删除原数据
if (isCut) {
this.setTargetSelectChart(e.id)
this.removeComponentList(undefined, true)
}
})
if (isCut) this.setRecordChart(undefined)
loadingFinish()
return
}
// 单项
this.addComponentList(parseHandle(recordCharts.charts), undefined, true)
if (isCut) {
this.setTargetSelectChart(recordCharts.charts.id)
this.removeComponentList()
this.setRecordChart(undefined)
}
loadingFinish()
} catch (value) {
loadingError()

View File

@@ -4,10 +4,10 @@ import { asideCollapsedWidth } from '@/settings/designSetting'
import { SettingStoreType, ToolsStatusEnum } from './settingStore.d'
import { setLocalStorage, getLocalStorage } from '@/utils'
import { StorageEnum } from '@/enums/storageEnum'
const { GO_SYSTEM_SETTING_STORE } = StorageEnum
const { GO_SETTING_STORE } = StorageEnum
const storageSetting: SettingStoreType = getLocalStorage(
GO_SYSTEM_SETTING_STORE
GO_SETTING_STORE
)
// 全局设置
@@ -48,7 +48,7 @@ export const useSettingStore = defineStore({
this.$patch(state => {
state[key] = value
})
setLocalStorage(GO_SYSTEM_SETTING_STORE, this.$state)
setLocalStorage(GO_SETTING_STORE, this.$state)
}
}
})

View File

@@ -25,23 +25,6 @@ export const base64toFile = (dataurl: string, fileName: string) => {
return ImageUrl
}
/**
* file转 blob
* @param { File } file 文件对象
*/
export const fileToBlob = (file:File) =>{
return new Promise<Blob>(function (resolve, reject) {
let reader = new FileReader()
reader.readAsArrayBuffer(file)
reader.onload = function (e: ProgressEvent<FileReader>) {
if(e.target){
const blob = new Blob([<ArrayBuffer>e.target.result], { type: file.type });
resolve(blob);
}
}
})
}
/**
* * url转file
*/

View File

@@ -1,27 +1,6 @@
/**
* 请求失败统一处理allowRoute 允许跳转。
* @param MyResponse MyResponseType可以为空。
* @return
* * 请求失败统一处理
*/
import { ResultEnum } from "@/enums/httpEnum"
import { PageEnum, ErrorPageNameMap } from "@/enums/pageEnum"
import { redirectErrorPage, routerTurnByName } from '@/utils'
export const httpErrorHandle = (MyResponse?:any, allowRoute:boolean = true) => {
if(MyResponse){
const {code, msg} = MyResponse
if (MyResponse.code === ResultEnum.TOKEN_OVERDUE) {
window['$message'].error(msg || window['$t']('http.token_overdue_message'))
if(allowRoute) routerTurnByName(PageEnum.BASE_LOGIN_NAME)
return
}
if (MyResponse.code != ResultEnum.SUCCESS) {
// 其他错误处理 Todo
if (ErrorPageNameMap.get(code) && allowRoute) {
redirectErrorPage(code)
}
}
}
export const httpErrorHandle = () => {
window['$message'].error(window['$t']('http.error_message'))
}

View File

@@ -4,7 +4,7 @@ export * from '@/utils/router'
export * from '@/utils/storage'
export * from '@/utils/style'
export * from '@/utils/plugin'
export * from '@/utils/components'
export * from '@/utils/componets'
export * from '@/utils/type'
export * from '@/utils/file'
export * from '@/utils/http'

Some files were not shown because too many files have changed in this diff Show More