Compare commits

..

850 Commits

Author SHA1 Message Date
奔跑的面条
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
奔跑的面条
ad60b7b44c perf: 优化滤镜模糊问题,默认不开启 2022-09-19 17:32:19 +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
秋名山路霸
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
c9d61128bf fix: 修复 ecStat.transform 编译错误 2022-09-16 12:52:44 +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
320 changed files with 35835 additions and 9789 deletions

View File

@@ -20,11 +20,6 @@ module.exports = {
extends: ['plugin:vue/vue3-essential', 'eslint:recommended'],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-unused-vars': 'off',
'vue/no-unused-vars': 'off',
'vue/multi-word-component-names': 'off',
'vue/valid-template-root': 'off',
'vue/no-mutating-props': 'off'
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
}
}

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

@@ -82,4 +82,25 @@
to {
opacity: 1;
}
}
/* 小屏处理 0~1000*/
.mobile-terminal {
display: none;
}
@media (max-width: 1000px) {
#app {
display: none;
}
.mobile-terminal {
display: flex;
align-items: center;
justify-content: center;
width: 100vw;
height: 100vh;
text-align: center;
font-size: 24px;
font-weight: 200;
background-image: linear-gradient(to top, #fff1eb 0%, #ace0f9 100%);
}
}

View File

@@ -24,6 +24,9 @@
</div>
</div>
</div>
<div class="mobile-terminal">
<p>请使用 Web 端进行查看</p>
</div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

View File

@@ -1,14 +1,12 @@
{
"name": "go-view",
"version": "2.1.0",
"version": "2.0.7",
"scripts": {
"dev": "vite --host",
"build": "vue-tsc --noEmit && vite build",
"preview": "vite preview",
"new": "plop --plopfile ./plop/plopfile.js",
"postinstall": "husky install",
"lint": "eslint --ext .js,.jsx,.ts,.tsx,.vue src",
"lint:fix": "eslint --ext .js,.jsx,.ts,.tsx,.vue src --fix"
"postinstall": "husky install"
},
"dependencies": {
"@types/color": "^3.0.3",
@@ -21,16 +19,13 @@
"crypto-js": "^4.1.1",
"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",
"monaco-editor": "^0.33.0",
"naive-ui": "2.33.4",
"naive-ui": "2.30.3",
"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 +38,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",

680
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

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 { ResultEnum, RequestHttpHeaderEnum } 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.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]]: userInfo[SystemStoreUserInfoEnum.USER_TOKEN] || ''
}
return config
},
(error: AxiosRequestConfig) => {
Promise.reject(error)
(err: AxiosRequestConfig) => {
Promise.reject(err)
}
)
@@ -21,12 +40,31 @@ 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) => {
httpErrorHandle()
Promise.reject(err)
}
)

View File

@@ -13,7 +13,7 @@ export const get = (url: string, params?: object) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.GET,
params: params
params: params,
})
}
@@ -80,32 +80,6 @@ export const http = (type?: RequestHttpEnum) => {
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
}
/**
* * 自定义请求
@@ -113,7 +87,7 @@ export const translateStr = (target: string | object) => {
* @param globalParams 全局参数
*/
export const customizeHttp = (targetParams: RequestConfigType, globalParams: RequestGlobalConfigType) => {
if (!targetParams || !globalParams) {
if(!targetParams || !globalParams) {
return
}
@@ -151,17 +125,15 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req
}
// 处理头部
let headers: RequestParamsObjType = {
const headers: RequestParamsObjType = {
...globalRequestParams.Header,
...targetRequestParams.Header
...targetRequestParams.Header,
}
headers = translateStr(headers)
// data 参数
let data: RequestParamsObjType | FormData | string = {}
// params 参数
let params: RequestParamsObjType = { ...targetRequestParams.Params }
params = translateStr(params)
let params: RequestParamsObjType = targetRequestParams.Params
// form 类型处理
let formData: FormData = new FormData()
formData.set('default', 'defaultData')
@@ -173,35 +145,33 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req
case RequestBodyEnum.JSON:
headers['Content-Type'] = ContentTypeEnum.JSON
data = translateStr(JSON.parse(targetRequestParams.Body['json']))
data = JSON.parse(targetRequestParams.Body['json'])
// json 赋值给 data
break
case RequestBodyEnum.XML:
headers['Content-Type'] = ContentTypeEnum.XML
// xml 字符串赋值给 data
data = translateStr(targetRequestParams.Body['xml'])
data = targetRequestParams.Body['xml']
break
case RequestBodyEnum.X_WWW_FORM_URLENCODED: {
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]))
for (const i in bodyFormData) formData.set(i, bodyFormData[i])
// FormData 赋值给 data
data = formData
break
}
case RequestBodyEnum.FORM_DATA: {
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.set(i, bodyFormUrlencoded[i])
}
// FormData 赋值给 data
data = formData
break
}
}
// sql 处理
@@ -210,17 +180,11 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req
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地址格式有误')
}
return axiosInstance({
url: `${requestOriginUrl}${requestUrl}`,
method: requestHttpType,
data,
params,
headers
})
}

View File

@@ -14,10 +14,6 @@ export const scrollBoardUrl = '/mock/scrollBoard'
export const radarUrl = '/mock/radarData'
export const heatMapUrl = '/mock/heatMapData'
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[] = [
{
@@ -77,26 +73,6 @@ const mockObject: MockMethod[] = [
method: RequestHttpEnum.GET,
response: () => test.fetchScatterBasic
},
{
url: mapUrl,
method: RequestHttpEnum.GET,
response: () => test.fetchMap
},
{
url: wordCloudUrl,
method: RequestHttpEnum.GET,
response: () => test.fetchWordCloud
},
{
url: treemapUrl,
method: RequestHttpEnum.GET,
response: () => test.fetchTreemap
},
{
url: threeEarth01Url,
method: RequestHttpEnum.GET,
response: () => test.threeEarth01Data
},
]
export default mockObject

View File

@@ -1,79 +0,0 @@
{
"point": [
{
"name": "北京",
"value": [116.405285, 39.904989, 200]
},
{
"name": "郑州",
"value": [113.665412, 34.757975, 888]
},
{
"name": "青海",
"value": [101.778916, 36.623178, 666]
},
{
"name": "宁夏回族自治区",
"value": [106.278179, 38.46637, 66]
},
{
"name": "哈尔滨市",
"value": [126.642464, 45.756967, 101]
}
],
"map": [
{
"name": "北京市",
"value": "@integer(0, 1000)"
},
{
"name": "河北省",
"value": "@integer(0, 1000)"
},
{
"name": "江苏省",
"value": "@integer(0, 1000)"
},
{
"name": "福建省",
"value": "@integer(0, 1000)"
},
{
"name": "山东省",
"value": "@integer(0, 1000)"
},
{
"name": "河南省",
"value": "@integer(0, 1000)"
},
{
"name": "湖北省",
"value": "@integer(0, 1000)"
},
{
"name": "广西壮族自治区",
"value": "@integer(0, 1000)"
},
{
"name": "海南省",
"value": "@integer(0, 1000)"
},
{
"name": "青海省",
"value": "@integer(0, 1000)"
},
{
"name": "新疆维吾尔自治区",
"value": "@integer(0, 1000)"
}
],
"pieces": [
{ "gte": 1000, "label": ">1000" },
{ "gte": 600, "lte": 999, "label": "600-999" },
{ "gte": 200, "lte": 599, "label": "200-599" },
{ "gte": 50, "lte": 199, "label": "49-199" },
{ "gte": 10, "lte": 49, "label": "10-49" },
{ "lte": 9, "label": "<9" }
]
}

View File

@@ -1,7 +1,5 @@
import heatmapJson from './heatMapData.json'
import scatterJson from './scatter.json'
import mapJson from './map.json'
import tTreemapJson from './treemap.json'
export default {
// 单图表
@@ -200,75 +198,5 @@ export default {
status: 200,
msg: '请求成功',
data: scatterJson
},
// 中国地图
fetchMap: {
code: 0,
status: 200,
msg: '请求成功',
data: mapJson
},
// 词云
fetchWordCloud: {
code: 0,
status: 200,
msg: '请求成功',
data: [
{
name: '@name',
value: 8000,
textStyle: {
color: '#78fbb2'
},
emphasis: {
textStyle: {
color: 'red'
}
}
},
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' },
{ name: '@name', value: '@integer(10, 8000)' }
]
},
// 树图
fetchTreemap: {
code: 0,
status: 200,
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)' }
]
}
]
}
}

View File

@@ -1,50 +0,0 @@
[
{
"name": "@name",
"value": "@integer(0, 1000)",
"children": [
{
"name": "@name",
"value": "@integer(0, 500)"
},
{
"name": "@name",
"value": "@integer(0, 500)"
}
]
},
{
"name": "@name",
"value": "@integer(0, 1000)",
"children": [
{
"name": "@name",
"value": "@integer(0, 00)"
},
{
"name": "@name",
"value": "@integer(0, 500)"
}
]
},
{
"name": "@name",
"value": "@integer(0, 1000)",
"children": [
{
"name": "@name",
"value": "@integer(0, 1000)"
}
]
},
{
"name": "@name",
"value": "@integer(0, 1000)",
"children": [
{
"name": "@name",
"value": "@integer(0, 1000)"
}
]
}
]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 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

@@ -1,4 +0,0 @@
import Flipper from './index.vue'
type FlipType = 'up' | 'down'
export { Flipper, FlipType }

View File

@@ -1,224 +0,0 @@
<template>
<div class="M-Flipper" :class="[flipType, { go: isFlipping }]">
<div class="digital front" :data-front="frontTextFromData"></div>
<div class="digital back" :data-back="backTextFromData"></div>
</div>
</template>
<script lang="ts">
export default {
name: 'Flipper'
}
</script>
<script lang="ts" setup>
import { ref, PropType, watch } from 'vue'
import { FlipType } from '.'
const props = defineProps({
flipType: {
type: String as PropType<FlipType>,
default: () => {
return 'down'
}
},
count: {
type: [Number, String],
default: 0
},
duration: {
type: Number,
default: 600
},
width: {
type: Number,
default: 60
},
height: {
type: Number,
default: 100
},
radius: {
type: Number,
default: 10
},
frontColor: {
type: String,
default: '#ffffff'
},
backColor: {
type: String,
default: '#000000'
}
})
const isFlipping = ref(false)
const frontTextFromData = ref(props.count || 0)
const backTextFromData = ref(props.count || 0)
// 翻牌
const flip = (front: string | number, back: string | number) => {
// 如果处于翻转中,则不执行
if (isFlipping.value) return
// 设置翻盘前后数据
backTextFromData.value = back
frontTextFromData.value = front
// 设置翻转状态为true
isFlipping.value = true
// 翻牌结束的行为
setTimeout(() => {
isFlipping.value = false // 设置翻转状态为false
frontTextFromData.value = back
}, props.duration)
}
watch(
() => props.count,
(newVal, oldVal) => {
flip(oldVal as string | number, newVal as string | number)
},
{
immediate: true
}
)
</script>
<style lang="scss" scoped>
$frontColor: v-bind('props.frontColor');
$backColor: v-bind('props.backColor');
$radius: v-bind('`${props.radius}px`');
$width: v-bind('`${props.width}px`');
$height: v-bind('`${props.height}px`');
$perspective: v-bind('`${props.height * 2}px`');
$speed: v-bind('`${props.duration / 1000}s`');
$shadowColor: #000000;
$lineColor: #4a9ef8;
// #region 动画效果
@keyframes frontFlipDown {
0% {
transform: perspective($perspective) rotateX(0deg);
}
100% {
transform: perspective($perspective) rotateX(-180deg);
}
}
@keyframes backFlipDown {
0% {
transform: perspective($perspective) rotateX(180deg);
}
100% {
transform: perspective($perspective) rotateX(0deg);
}
}
@keyframes frontFlipUp {
0% {
transform: perspective($perspective) rotateX(0deg);
}
100% {
transform: perspective($perspective) rotateX(180deg);
}
}
@keyframes backFlipUp {
0% {
transform: perspective($perspective) rotateX(-180deg);
}
100% {
transform: perspective($perspective) rotateX(0deg);
}
}
// #endregion
.M-Flipper {
display: inline-block;
position: relative;
width: $width;
height: $height;
line-height: $height;
border: solid 1px $backColor;
border-radius: $radius;
background: $frontColor;
font-size: $width;
color: $frontColor;
box-shadow: 0 0 6px rgba($color: $shadowColor, $alpha: 0.5); // 阴影部分
text-align: center;
// font-family: 'Helvetica Neue';
.digital:before,
.digital:after {
content: '';
position: absolute;
left: 0;
right: 0;
background: $backColor;
overflow: hidden;
box-sizing: border-box;
}
.digital.front:before,
.digital.front:after {
content: attr(data-front) !important;
}
.digital.back:before,
.digital.back:after {
content: attr(data-back) !important;
}
.digital:before {
top: 0;
bottom: 50%;
border-radius: $radius $radius 0 0;
border-bottom: solid 1px rgba($color: $lineColor, $alpha: 0.3); // 中间线颜色
}
.digital:after {
top: 50%;
bottom: 0;
border-radius: 0 0 $radius $radius;
line-height: 0;
}
/*向下翻*/
&.down .front:before {
z-index: 3;
}
&.down .back:after {
z-index: 2;
transform-origin: 50% 0%;
transform: perspective($perspective) rotateX(180deg);
}
&.down .front:after,
&.down .back:before {
z-index: 1;
}
&.down.go .front:before {
transform-origin: 50% 100%;
animation: frontFlipDown $speed ease-in-out both;
box-shadow: 0 -2px 6px rgba($color: $lineColor, $alpha: 0.3);
backface-visibility: hidden;
}
&.down.go .back:after {
animation: backFlipDown $speed ease-in-out both;
}
/*向上翻*/
&.up .front:after {
z-index: 3;
}
&.up .back:before {
z-index: 2;
transform-origin: 50% 100%;
transform: perspective($perspective) rotateX(-180deg);
}
&.up .front:before,
&.up .back:after {
z-index: 1;
}
&.up.go .front:after {
transform-origin: 50% 0;
animation: frontFlipUp $speed ease-in-out both;
box-shadow: 0 2px 6px rgba($color: $lineColor, $alpha: 0.3);
backface-visibility: hidden;
}
&.up.go .back:before {
animation: backFlipUp $speed ease-in-out both;
}
}
</style>

View File

@@ -190,14 +190,11 @@ const handleChange = (e: MouseEvent, item: ListType) => {
width: 100px;
}
.select-min-width {
width: 115px;
width: 110px;
}
@include deep() {
.n-list-item {
border-bottom: 0!important;
}
.n-list-item__divider {
display: none!important;
.n-list-item:not(:last-child) {
border-bottom: 0;
}
}
}

View File

@@ -1,4 +1,3 @@
<!-- eslint-disable vue/valid-template-root -->
<template></template>
<script lang="ts" setup>

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="展示">
@@ -253,15 +230,15 @@
</setting-item>
</setting-item-box>
<setting-item-box name="控制块">
<setting-item-box name="视觉映射">
<setting-item name="放置方向">
<n-select v-model:value="visualMap.orient" size="small" :options="axisConfig.visualMap.orient"></n-select>
</setting-item>
<setting-item name="宽度">
<n-input-number v-model:value="visualMap.itemWidth" :min="5" size="small"></n-input-number>
<n-input-number v-model:value="visualMap.temWidth" size="small"></n-input-number>
</setting-item>
<setting-item name="高度">
<n-input-number v-model:value="visualMap.itemHeight" :min="5" size="small"></n-input-number>
<n-input-number v-model:value="visualMap.itemHeight" size="small"></n-input-number>
</setting-item>
<setting-item name="反转">
<n-space>
@@ -275,6 +252,14 @@
</setting-item>
</setting-item-box>
<global-setting-position :targetData="visualMap"></global-setting-position>
<!-- <setting-item-box name="位置">
<setting-item name="距离底部">
<n-input-number v-model:value="visualMap.bottom" size="small"></n-input-number>
</setting-item>
<setting-item name="距离左侧">
<n-input-number v-model:value="visualMap.left" size="small"></n-input-number>
</setting-item>
</setting-item-box> -->
</collapse-item>
</template>
@@ -312,10 +297,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,12 +1,12 @@
<template>
<div v-show="isGroup">
<n-divider n-divider style="margin: 10px 0"></n-divider>
<n-tag type="warning"> 解散分组 {{ isCanvas ? '滤镜' : '滤镜 / 变换' }} 也将消失!</n-tag>
<n-tag type="warning"> 解散分组 {{ isCanvas ? '滤镜' : '滤镜 / 变换' }} 也将消失!</n-tag>
</div>
<collapse-item :name="isCanvas ? '滤镜' : '滤镜 / 变换'">
<template #header>
<n-switch v-model:value="chartStyles.filterShow" size="small"></n-switch>
<n-switch v-if="isCanvas" v-model:value="chartStyles.filterShow" size="small"></n-switch>
</template>
<setting-item-box name="色相" :alone="true">
<setting-item :name="`值:${chartStyles.hueRotate}deg`">
@@ -69,24 +69,6 @@
</setting-item>
</setting-item-box>
<!-- 混合模式 -->
<setting-item-box v-if="!isCanvas" :alone="true">
<template #name>
<n-text>混合</n-text>
<n-tooltip trigger="hover">
<template #trigger>
<n-icon size="21" :depth="3">
<help-outline-icon></help-outline-icon>
</n-icon>
</template>
<n-text>视频组件需要底色透明一般选中滤色</n-text>
</n-tooltip>
</template>
<setting-item>
<n-select v-model:value="chartStyles.blendMode" size="small" filterable :options="BlendModeEnumList"></n-select>
</setting-item>
</setting-item-box>
<!-- 变换 -->
<setting-item-box v-if="!isCanvas" name="旋转°">
<setting-item name="Z轴(平面) - 旋转">
@@ -144,15 +126,14 @@
</setting-item-box>
<!-- 提示 -->
<n-tag type="warning"> 若预览时大屏模糊可以尝试关闭滤镜进行修复 </n-tag>
<n-tag v-show="isCanvas" type="warning"> 若预览时大屏模糊可以尝试关闭滤镜进行修复 </n-tag>
</collapse-item>
</template>
<script setup lang="ts">
import { PropType } from 'vue'
import { PickCreateComponentType, BlendModeEnumList } from '@/packages/index.d'
import { PickCreateComponentType } from '@/packages/index.d'
import { SettingItemBox, SettingItem, CollapseItem } from '@/components/Pages/ChartItemSetting'
import { icon } from '@/plugins'
const props = defineProps({
isGroup: {
@@ -169,14 +150,14 @@ const props = defineProps({
}
})
const { HelpOutlineIcon } = icon.ionicons5
// 百分比格式化 person
// 百分比格式化persen
const sliderFormatTooltip = (v: string) => {
// @ts-ignore
return `${(parseFloat(v) * 100).toFixed(0)}%`
}
// 角度格式化
const degFormatTooltip = (v: string) => {
// @ts-ignore
return `${v}deg`
}
</script>

View File

@@ -1,7 +1,6 @@
<!-- eslint-disable vue/valid-template-root -->
<template></template>
<script lang="ts" setup>
import { useDialog } from 'naive-ui'
import { useDialog } from 'naive-ui';
//挂载在 window 方便与在js中使用
window['$dialog'] = useDialog()
window['$dialog'] = useDialog();
</script>

View File

@@ -1,4 +1,3 @@
<!-- eslint-disable vue/valid-template-root -->
<template></template>
<script lang="ts" setup>

View File

@@ -1,8 +1,7 @@
<!-- eslint-disable vue/valid-template-root -->
<template></template>
<script lang="ts" setup>
import { useMessage } from 'naive-ui'
import { useMessage } from 'naive-ui';
//挂载在 window 方便与在js中使用
window['$message'] = useMessage()
window['$message'] = useMessage();
</script>

View File

@@ -1,7 +1,7 @@
// 鼠标点击左右键
export enum MouseEventButton {
LEFT = 1,
RIGHT = 2
RIGHT = 2,
}
// 页面拖拽键名
@@ -41,16 +41,7 @@ export enum MenuEnum {
// 后退
BACK = 'back',
FORWORD = 'forward',
// 保存
SAVE = 'save',
// 锁定
LOCK = 'lock',
// 解除锁定
UNLOCK = 'unLock',
// 隐藏
HIDE = 'hide',
// 显示
SHOW = 'show'
SAVE = 'save'
}
// Win 键盘枚举
@@ -58,9 +49,9 @@ export enum WinKeyboard {
CTRL = 'ctrl',
SHIFT = 'shift',
ALT = ' alt',
CTRL_SOURCE_KEY = 'control',
SHIFT_SOURCE_KEY = 'shift',
ALT_SOURCE_KEY = 'alt'
CTRL_SOURCE_KEY = "control",
SHIFT_SOURCE_KEY = "shift",
ALT_SOURCE_KEY = "alt"
}
// Mac 键盘枚举
@@ -69,9 +60,9 @@ export enum MacKeyboard {
CTRL = '⌘',
SHIFT = '⇧',
ALT = '⌥',
CTRL_SOURCE_KEY = '⌘',
SHIFT_SOURCE_KEY = '⇧',
ALT_SOURCE_KEY = '⌥'
CTRL_SOURCE_KEY = "⌘",
SHIFT_SOURCE_KEY = "⇧",
ALT_SOURCE_KEY = "⌥"
}
// 同步状态枚举

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 = 10042,
}
// 数据相关
@@ -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

@@ -25,7 +25,7 @@ export const useChartDataFetch = (
const requestIntervalFn = () => {
const chartEditStore = useChartEditStore()
// 全局数据
const {
requestOriginUrl,
@@ -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)
@@ -88,10 +88,7 @@ export const useChartDataFetch = (
// 开启轮询
if (time) fetchInterval = setInterval(fetchFn, intervalUnitHandle(time, unit))
}
// eslint-disable-next-line no-empty
} catch (error) {
console.log(error)
}
} catch (error) {}
}
isPreview() && requestIntervalFn()

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

@@ -24,7 +24,6 @@ import { CreateComponentType } from '@/packages/index.d'
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
import { isPreview } from '@/utils'
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
import isObject from 'lodash/isObject'
const props = defineProps({
themeSetting: {
@@ -52,22 +51,17 @@ const option = computed(() => {
// dataset 无法变更条数的补丁
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 = []
})
(newData, oldData) => {
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

@@ -23,7 +23,6 @@ import { useChartDataFetch } from '@/hooks'
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
import { isPreview } from '@/utils'
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
import isObject from 'lodash/isObject'
const props = defineProps({
themeSetting: {
@@ -51,22 +50,17 @@ const option = computed(() => {
// dataset 无法变更条数的补丁
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 = []
})
(newData, oldData) => {
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

@@ -24,7 +24,6 @@ import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore
import { useChartDataFetch } from '@/hooks'
import { isPreview } from '@/utils'
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
import isObject from 'lodash/isObject'
const props = defineProps({
themeSetting: {
@@ -52,22 +51,17 @@ const option = computed(() => {
// dataset 无法变更条数的补丁
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 = []
})
(newData, oldData) => {
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

@@ -1,156 +0,0 @@
import { echartOptionProfixHandle, PublicConfigClass } from '@/packages/public'
import { MapBaseConfig } from './index'
import { chartInitConfig } from '@/settings/designSetting'
import { CreateComponentType } from '@/packages/index.d'
import dataJson from './data.json'
export const includes = []
export const option = {
dataset: dataJson,
mapRegion: {
adcode: 'china',
showHainanIsLands: true
},
tooltip: {
show: true,
trigger: 'item'
},
visualMap: {
show: true,
orient: 'vertical',
pieces: [
{ gte: 1000, label: '>1000' }, // 不指定 max表示 max 为无限大Infinity
{ gte: 600, lte: 999, label: '600-999' },
{ gte: 200, lte: 599, label: '200-599' },
{ gte: 50, lte: 199, label: '49-199' },
{ gte: 10, lte: 49, label: '10-49' },
{ lte: 9, label: '<9' } // 不指定 min表示 min 为无限大(-Infinity
],
inRange: {
// 渐变颜色,从小到大
color: ['#c3d7df', '#5cb3cc', '#8abcd1', '#66a9c9', '#2f90b9', '#1781b5']
},
textStyle: {
color: '#fff'
}
},
geo: {
show: false,
type: 'map',
roam: false,
map: 'china',
selectedMode: false, //是否允许选中多个区域
zoom: 1
},
series: [
{
name: '',
type: 'effectScatter',
coordinateSystem: 'geo',
symbolSize: 4,
legendHoverLink: true,
showEffectOn: 'render',
rippleEffect: {
scale: 6,
color: '#FFFFFF',
brushType: 'fill'
},
tooltip: {
show: true,
backgroundColor: 'rgba(0,0,0,.6)',
borderColor: 'rgba(147, 235, 248, .8)',
textStyle: {
color: '#FFF'
}
},
label: {
formatter: '{b}',
fontSize: 11,
offset: [0, 2],
position: 'bottom',
textBorderColor: '#fff',
textShadowColor: '#000',
textShadowBlur: 10,
textBorderWidth: 0,
color: '#FFFFFF',
show: true
},
itemStyle: {
color: '#FFFFFF',
borderColor: 'rgba(225,255,255,2)',
borderWidth: 4,
shadowColor: '#E1FFFF',
shadowBlur: 10
},
data: []
},
{
name: '区域',
type: 'map',
map: 'china',
data: [],
selectedMode: false,
zoom: 1,
geoIndex: 1,
tooltip: {
show: true,
backgroundColor: '#00000060',
borderColor: 'rgba(147, 235, 248, 0.8)',
textStyle: {
color: '#FFFFFF',
fontSize: 12,
}
},
label: {
show: false,
color: '#FFFFFF',
fontSize: 12,
},
emphasis: {
disabled: false,
label: {
color: '#FFFFFF',
fontSize: 12,
},
itemStyle: {
areaColor: '#389BB7',
shadowColor: '#389BB7',
borderWidth: 1
}
},
itemStyle: {
borderColor: '#93EBF8',
borderWidth: 1,
areaColor: {
type: 'radial',
x: 0.5,
y: 0.5,
r: 0.8,
colorStops: [
{
offset: 0,
color: '#93ebf800' // 0% 处的颜色
},
{
offset: 1,
color: '#93ebf820' // 100% 处的颜色
}
],
globalCoord: false
},
shadowColor: '#80D9F842',
shadowOffsetX: -2,
shadowOffsetY: 2,
shadowBlur: 10
}
}
]
}
export const MapDefaultConfig = { ...option }
export default class Config extends PublicConfigClass implements CreateComponentType {
public key: string = MapBaseConfig.key
public attr = { ...chartInitConfig, w: 750, h: 800, zIndex: -1 }
public chartConfig = MapBaseConfig
public option = echartOptionProfixHandle(option, includes)
}

View File

@@ -1,277 +0,0 @@
<template>
<!-- Echarts 全局设置 -->
<global-setting :optionData="optionData"></global-setting>
<CollapseItem name="地图" :expanded="true">
<SettingItemBox name="地图区域">
<SettingItem name="默认中国">
<n-select
size="small"
v-model:value="mapRegion.adcode"
:options="mapRegionOptions"
value-field="adcode"
label-field="name"
/>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="区域颜色">
<SettingItem name="0%处颜色">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="seriesList[1].itemStyle.areaColor.colorStops[0].color"
></n-color-picker>
</SettingItem>
<SettingItem name="100%处颜色">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="seriesList[1].itemStyle.areaColor.colorStops[1].color"
></n-color-picker>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="阴影">
<SettingItem name="颜色">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="seriesList[1].itemStyle.shadowColor"
></n-color-picker>
</SettingItem>
<SettingItem name="模糊程度">
<n-input-number
v-model:value="seriesList[1].itemStyle.shadowBlur"
:min="0"
size="small"
placeholder="请输入模糊程度"
></n-input-number>
</SettingItem>
<SettingItem name="水平偏移">
<n-input-number
v-model:value="seriesList[1].itemStyle.shadowOffsetX"
size="small"
placeholder="请输入水平偏移大小"
></n-input-number>
</SettingItem>
<SettingItem name="垂直偏移">
<n-input-number
v-model:value="seriesList[1].itemStyle.shadowOffsetY"
size="small"
placeholder="请输入垂直偏移大小"
></n-input-number>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="地理信息名称">
<SettingItem name="显示">
<n-space>
<n-switch v-model:value="seriesList[1].label.show" size="small"></n-switch>
</n-space>
</SettingItem>
<SettingItem name="字体颜色">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="seriesList[1].label.color"
></n-color-picker>
</SettingItem>
<SettingItem name="字体大小">
<n-input-number
v-model:value="seriesList[1].label.fontSize"
:min="1"
size="small"
placeholder="请输入字体大小"
></n-input-number>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="悬浮 (预览可见)">
<SettingItem name="禁用">
<n-space>
<n-switch v-model:value="seriesList[1].emphasis.disabled" size="small"></n-switch>
</n-space>
</SettingItem>
<SettingItem name="颜色">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="seriesList[1].emphasis.itemStyle.areaColor"
></n-color-picker>
</SettingItem>
<SettingItem name="字体大小">
<n-input-number
v-model:value="seriesList[1].emphasis.label.fontSize"
:min="1"
size="small"
placeholder="请输入字体大小"
></n-input-number>
</SettingItem>
<SettingItem name="阴影">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="seriesList[1].emphasis.itemStyle.shadowColor"
></n-color-picker>
</SettingItem>
<SettingItem name="边框大小">
<n-input-number
v-model:value="seriesList[1].emphasis.itemStyle.borderWidth"
:min="1"
size="small"
placeholder="请输入边框大小"
></n-input-number>
</SettingItem>
<SettingItem name="文字颜色">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="seriesList[1].emphasis.label.color"
></n-color-picker>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="悬浮弹窗">
<SettingItem name="显示">
<n-space>
<n-switch v-model:value="seriesList[1].tooltip.show" size="small"></n-switch>
</n-space>
</SettingItem>
<SettingItem name="字体大小">
<n-input-number
v-model:value="seriesList[1].tooltip.textStyle.fontSize"
:min="1"
size="small"
placeholder="请输入字体大小"
></n-input-number>
</SettingItem>
<SettingItem name="字体颜色">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="seriesList[1].tooltip.textStyle.color"
></n-color-picker>
</SettingItem>
<SettingItem name="背景颜色">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="seriesList[1].tooltip.backgroundColor"
></n-color-picker>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="区域边框">
<SettingItem name="颜色">
<n-color-picker
size="small"
:modes="['hex']"
v-model:value="seriesList[1].itemStyle.borderColor"
></n-color-picker>
</SettingItem>
<SettingItem name="宽度大小">
<n-input-number
v-model:value="seriesList[1].itemStyle.borderWidth"
:min="1"
size="small"
placeholder="请输入边框大小"
></n-input-number>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="其他" v-if="mapRegion.adcode === 'china'">
<SettingItem>
<n-checkbox v-model:checked="mapRegion.showHainanIsLands" size="small">显示南海群岛</n-checkbox>
</SettingItem>
</SettingItemBox>
</CollapseItem>
<CollapseItem name="标记" :expanded="true">
<SettingItemBox name="样式">
<SettingItem name="大小">
<n-input-number v-model:value="seriesList[0].symbolSize" size="small" :min="0"></n-input-number>
</SettingItem>
<SettingItem name="颜色">
<n-color-picker size="small" :modes="['hex']" v-model:value="seriesList[0].itemStyle.color"></n-color-picker>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="文本">
<SettingItem name="显示">
<n-space>
<n-switch v-model:value="seriesList[0].label.show" size="small"></n-switch>
</n-space>
</SettingItem>
<SettingItem name="字体大小">
<n-input-number v-model:value="seriesList[0].label.fontSize" size="small" :min="0"></n-input-number>
</SettingItem>
<SettingItem name="字体颜色">
<n-color-picker size="small" :modes="['hex']" v-model:value="seriesList[0].label.color"></n-color-picker>
</SettingItem>
</SettingItemBox>
<SettingItemBox name="涟漪">
<SettingItem name="涟漪大小">
<n-input-number
v-model:value="seriesList[0].rippleEffect.scale"
:min="1"
size="small"
placeholder="请输入涟漪大小"
></n-input-number>
</SettingItem>
<SettingItem name="涟漪颜色">
<n-color-picker size="small" :modes="['hex']" v-model:value="seriesList[0].rippleEffect.color"></n-color-picker>
</SettingItem>
<SettingItem name="涟漪的绘制方式">
<n-select size="small" v-model:value="seriesList[0].rippleEffect.brushType" :options="rippleEffectOptions" />
</SettingItem>
</SettingItemBox>
</CollapseItem>
</template>
<script setup lang="ts">
import { PropType, computed } from 'vue'
import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
import { GlobalSetting } from '@/components/Pages/ChartItemSetting'
import { ref } from 'vue'
import mapChinaJson from './mapGeojson/china.json'
const mapRegionOptions = ref([
{
adcode: 'china',
name: '中国'
}
])
const rippleEffectOptions = ref([
{
value: 'fill',
label: '实心'
},
{
value: 'stroke',
label: '空心'
}
])
const props = defineProps({
optionData: {
type: Object as PropType<GlobalThemeJsonType>,
required: true
}
})
const initMapRegionOptions = () => {
mapChinaJson.features.forEach((element: any) => {
if (element.properties.name) {
mapRegionOptions.value.push({ ...element.properties })
}
})
}
initMapRegionOptions()
const seriesList = computed(() => {
return props.optionData.series
})
const mapRegion = computed(() => {
return props.optionData.mapRegion
})
</script>

View File

@@ -1,79 +0,0 @@
{
"point": [
{
"name": "北京",
"value": [116.405285, 39.904989, 200]
},
{
"name": "郑州",
"value": [113.665412, 34.757975, 888]
},
{
"name": "青海",
"value": [101.778916, 36.623178, 666]
},
{
"name": "宁夏回族自治区",
"value": [106.278179, 38.46637, 66]
},
{
"name": "哈尔滨市",
"value": [126.642464, 45.756967, 101]
}
],
"map": [
{
"name": "北京市",
"value": 666
},
{
"name": "河北省",
"value": 98
},
{
"name": "江苏省",
"value": 300
},
{
"name": "福建省",
"value": 1199
},
{
"name": "山东省",
"value": 86
},
{
"name": "河南省",
"value": 850
},
{
"name": "湖北省",
"value": 84
},
{
"name": "广西壮族自治区",
"value": 81
},
{
"name": "海南省",
"value": 900
},
{
"name": "青海省",
"value": 800
},
{
"name": "新疆维吾尔自治区",
"value": 7
}
],
"pieces": [
{ "gte": 1000, "label": ">1000" },
{ "gte": 600, "lte": 999, "label": "600-999" },
{ "gte": 200, "lte": 599, "label": "200-599" },
{ "gte": 50, "lte": 199, "label": "49-199" },
{ "gte": 10, "lte": 49, "label": "10-49" },
{ "lte": 9, "label": "<9" }
]
}

View File

@@ -1,15 +0,0 @@
import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
import image from '@/assets/images/chart/charts/map.png'
import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
export const MapBaseConfig: ConfigType = {
key: 'MapBase',
chartKey: 'VMapBase',
conKey: 'VCMapBase',
title: '地图(可选省份)',
category: ChatCategoryEnum.MAP,
categoryName: ChatCategoryEnumName.MAP,
package: PackagesCategoryEnum.CHARTS,
chartFrame: ChartFrameEnum.COMMON,
image
}

View File

@@ -1,152 +0,0 @@
<template>
<v-chart ref="vChartRef" :theme="themeColor" :option="option.value" :manual-update="isPreview()" autoresize>
</v-chart>
</template>
<script setup lang="ts">
import { PropType, reactive, watch, ref, nextTick } from 'vue'
import config, { includes } from './config'
import VChart from 'vue-echarts'
import { use, registerMap } from 'echarts/core'
import { EffectScatterChart, MapChart } from 'echarts/charts'
import { CanvasRenderer } from 'echarts/renderers'
import { useChartDataFetch } from '@/hooks'
import { mergeTheme } from '@/packages/public/chart'
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
import { isPreview } from '@/utils'
import mapJsonWithoutHainanIsLands from './mapWithoutHainanIsLands.json'
import { DatasetComponent, GridComponent, TooltipComponent, GeoComponent, VisualMapComponent } from 'echarts/components'
const props = defineProps({
themeSetting: {
type: Object,
required: true
},
themeColor: {
type: Object,
required: true
},
chartConfig: {
type: Object as PropType<config>,
required: true
}
})
use([
MapChart,
DatasetComponent,
CanvasRenderer,
GridComponent,
TooltipComponent,
GeoComponent,
EffectScatterChart,
VisualMapComponent
])
const option = reactive({
value: mergeTheme(props.chartConfig.option, props.themeSetting, includes)
})
const vChartRef = ref<typeof VChart>()
//动态获取json注册地图
const getGeojson = (regionId: string) => {
return new Promise<boolean>(resolve => {
import(`./mapGeojson/${regionId}.json`).then(data => {
registerMap(regionId, { geoJSON: data.default as any, specialAreas: {} })
resolve(true)
})
})
}
//异步时先注册空的 保证初始化不报错
registerMap(props.chartConfig.option.mapRegion.adcode, { geoJSON: {} as any, specialAreas: {} })
// 进行更换初始化地图 如果为china 单独处理
const registerMapInitAsync = async () => {
await nextTick()
if (props.chartConfig.option.mapRegion.adcode != 'china') {
await getGeojson(props.chartConfig.option.mapRegion.adcode)
} else {
await hainanLandsHandle(props.chartConfig.option.mapRegion.showHainanIsLands)
}
vEchartsSetOption()
}
registerMapInitAsync()
// 手动触发渲染
const vEchartsSetOption = () => {
option.value = props.chartConfig.option
vChartRef.value?.setOption(props.chartConfig.option)
}
// 更新数据处理
const dataSetHandle = async (dataset: any) => {
props.chartConfig.option.series.forEach((item: any) => {
if (item.type === 'effectScatter' && dataset.point) item.data = dataset.point
else if (item.type === 'map' && dataset.map) item.data = dataset.map
})
if (dataset.pieces) props.chartConfig.option.visualMap.pieces = dataset.pieces
isPreview() && vEchartsSetOption()
}
// 处理海南群岛
const hainanLandsHandle = async (newData: boolean) => {
if (newData) {
await getGeojson('china')
} else {
registerMap('china', { geoJSON: mapJsonWithoutHainanIsLands as any, specialAreas: {} })
}
}
//监听 dataset 数据发生变化
watch(
() => props.chartConfig.option.dataset,
newData => {
dataSetHandle(newData)
},
{
immediate: true,
deep: false
}
)
//监听是否显示南海群岛
watch(
() => props.chartConfig.option.mapRegion.showHainanIsLands,
async newData => {
try {
await hainanLandsHandle(newData)
vEchartsSetOption()
} catch (error) {
console.log(error)
}
},
{
deep: false
}
)
//监听地图展示区域发生变化
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)
}
},
{
deep: false
}
)
// 预览
useChartDataFetch(props.chartConfig, useChartEditStore, (newData: any) => {
dataSetHandle(newData)
})
</script>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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