Browse Source

Merge pull request 'lucky' (#44) from lucky into develop

Reviewed-on: https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/pulls/44
develop
song 4 years ago
parent
commit
d630de20b6
  1. 218
      CHANGELOG.md
  2. 4
      src/apis/plugin.js
  3. 4
      src/components/Plugin/Plugin.vue
  4. 12
      src/components/Roles/Roles.vue
  5. 97
      src/components/TimeLine/TimeLine.vue
  6. 15
      src/components/TimeLine/component/TimeBox.vue
  7. 38
      src/components/TimeLine/component/TimeStatus.vue
  8. 19
      src/components/Title/Title.vue
  9. 44
      src/mixins/timeline.js
  10. 154
      src/pages/project/project.vue
  11. 50
      src/plugins/p-subproject/p-subproject.vue
  12. 32
      src/plugins/p-subtasks/p-subtasks.vue
  13. 3
      src/plugins/p-wbs-import/p-wbs-import.vue
  14. 5
      src/store/socket/actions.js
  15. 11
      src/store/task/actions.js
  16. 109
      src/store/task/mutations.js
  17. 1
      src/store/task/state.js
  18. 12
      src/utils/time.js

218
CHANGELOG.md

@ -1,53 +1,8 @@
# 0.1.0 (2021-08-13) # 0.1.0 (2021-08-18)
### 🌟 新功能 ### 🌟 新功能
范围|描述|commitId 范围|描述|commitId
--|--|-- --|--|--
calendar, tall.js | 上下滑动切换日历的模式,tall.js中domain根据环境变量切换 | 364e25d
- | db store | 6414c4f
default plugin | 添加默认插件;项目列表;全局项目最大高度设置 | ed1d87b
- | indexedDB | 687394e
pinch | alloy finger实现图片的pinch放大缩小 | de01343
plugin | 插件添加了token及param参数 | aeb0292
- | post 封装 | da52e94
- | tall插件封装 | 1bcb920
task status | 任务状态切换未完 | 7ffd135
- | ws storage | 21b3a06
- | 上传逻辑变化 | 3ff1dc2
- | 任务状态时间显示 | 56f5183
- | 任务进行中状态数字 | 27b7326
- | 全局插件及默认插件位置修改 | 6c80d08
- | 向右箭头图标变化 | 8e9ca55
- | 字体大小更改 | 82cfdd4
- | 存token | b8a178d
- | 定期任务面板骨架屏添加 | b2698c0
富文本插件 | 富文本插件demo测试 | ed3d644
- | 导入wbs | 1224fcb
- | 导入项目,更新项目 | 5e06adf
- | 导入项目后提示并打开项目详情页 | 410f527
- | 引入dayjs | 29b8b93
- | 提交到本地 | 9cbe411
- | 插件参数处理调整 | a3e68d3
- | 插件数据获取 | 5b91bdc
- | 日历定位;合并 | ea3f937
- | 日常任务插件调整 | c1881f9
- | 时间基准线,默认插件 | a33ba1e
- | 时间轴修改状态时提示框增加 | e841392
- | 时间轴界面 | 33927e9
- | 标题栏变化 | 3898cfe
- | 标题栏变化 | c0fcd9d
- | 标题栏角色栏全局任务组件新建 | 0500cb4
- | 模拟接口测试 | 69e7931
- | 添加时间轴上下滚动 | 2b81bbc
- | 点击日历日期查询项目列表 | c458385
- | 角色栏实现 | 94cd671
- | 设置小红点 | 9316bcb
- | 距调整pc端 | 5069aa1
- | 配置默认插件接口 | f0c177d
- | 面变化首页变化 | 5e860f1
- | 项目api url设置 | 6cd5245
- | 项目列表, 项目url | 32e005b
- | 首页项目样式改变 | 8514c85
calendar, tall.js | 上下滑动切换日历的模式,tall.js中domain根据环境变量切换 | [364e25d](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/364e25d) calendar, tall.js | 上下滑动切换日历的模式,tall.js中domain根据环境变量切换 | [364e25d](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/364e25d)
- | db store | [6414c4f](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/6414c4f) - | db store | [6414c4f](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/6414c4f)
default plugin | 添加默认插件;项目列表;全局项目最大高度设置 | [ed1d87b](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/ed1d87b) default plugin | 添加默认插件;项目列表;全局项目最大高度设置 | [ed1d87b](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/ed1d87b)
@ -98,86 +53,54 @@
### 🎨 代码样式 ### 🎨 代码样式
范围|描述|commitId 范围|描述|commitId
--|--|-- --|--|--
- | calendar注释 | a2ec112 - | calendar注释 | [a2ec112](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a2ec112)
- | 代码格式细节调整 | cb2532b - | 代码审查 | [d75134c](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/d75134c)
- | 任务快捷方式图标增加 | 4aba872 - | 代码格式细节调整 | [cb2532b](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/cb2532b)
- | 修改角色样式 | 73e268e - | 任务快捷方式图标增加 | [4aba872](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4aba872)
- | 删除calendar中多余的console | e339eec - | 修改角色样式 | [73e268e](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/73e268e)
- | 删除console.log | 5064a38 - | 删除calendar中多余的console | [e339eec](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e339eec)
- | 删除index中没用的alert代码 | 9c9eec7 - | 删除console.log | [5064a38](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5064a38)
- | 删除mock,console;upload添加loading | 99d42e2 - | 删除index中没用的alert代码 | [9c9eec7](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/9c9eec7)
- | 删除多余字段 | 5ae3973 - | 删除mock,console;upload添加loading | [99d42e2](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/99d42e2)
- | 删除插件携带的多余文件 | 0f392bb - | 删除多余字段 | [5ae3973](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5ae3973)
- | 删除没用代码 | 34b20e1 - | 删除插件携带的多余文件 | [0f392bb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0f392bb)
- | 图标修改 | 54bca09 - | 删除没用代码 | [34b20e1](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/34b20e1)
- | 无基本变化 | 21ac4bb - | 图标修改 | [54bca09](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/54bca09)
- | 日常任务修改 | dfa7ee2 - | 无基本变化 | [21ac4bb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/21ac4bb)
- | 更新代码 | 8c27e68 - | 日常任务修改 | [dfa7ee2](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/dfa7ee2)
- | 更新代码 | 1f40a76 - | 更新代码 | [8c27e68](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/8c27e68)
- | 格式细节调整 | b907a03 - | 更新代码 | [1f40a76](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/1f40a76)
- | 添加插件数据 | 2f11b42 - | 格式细节调整 | [b907a03](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b907a03)
- | 组件新建 | 89c0035 - | 添加插件数据 | [2f11b42](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/2f11b42)
- | 组件新建 | [89c0035](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/89c0035)
- | 细节调整 | [2cfc09a](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/2cfc09a)
### 🐛 Bug 修复 ### 🐛 Bug 修复
范围|描述|commitId 范围|描述|commitId
--|--|-- --|--|--
ID1000343 | 解决向下预加载查询参数时间没+1颗粒度;以及滚动加载颗粒度写死的问题 | 940603a, closes #ID1000343 - | 1.时间轴数据渲染 2.时间基准线 | [d643af2](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/d643af2)
plugin | 插件解析机制完善 | 0f5a27d
project title | 项目标题修改; 切换角色移除script | 5c20017
roles | 修复默认显示不是我的角色的问题 | b69f94f
role | 切换角色的逻辑修正完善 | 4ae534f
task任务逻辑完善 | 减少初始global及regular的不必要请求 | bd4bd38
- | title.vue根据页面栈显示返回按钮;标题文本超出显示... | 0cbacf4
- | 上下滑动加载定期任务 | 4090d89
- | 上下滚动时间轴 | d533a01
- | 下拉加载定期任务传参,时间格式化修改 | 0b95a0e
- | 任务开始时间延迟插件 | 992a313
- | 修改main | 749ae9a
- | 修改小红点传参 | 87b20fd
- | 修改报错 | 531c14d
- | 修改接口路径 | df6acf2
- | 修改角色栏组件 | a54c601
- | 切换到默认项目角色没有激活状态的bug | 438d448
- | 切换日历时查询小红点 | 7091789
- | 定期任务接口 | aa4981c
- | 定期任务插件 | 92b3254
- | 定期任务未加载时,显示空的时间轴并能上下滑动 | ce38093
- | 定期任务骨架屏修改 | 8ff72dd
- | 平车演示临时去掉项目快捷方式的toast提示 | e0b2c23
- | 手动展开日常任务 | 0a4a622
- | 提示信息显示bug及日常任务收缩问题 | f2f06c5
- | 插件bug解决 | 41257eb
- | 收到消息修改任务状态 | c378063
- | 日常任务html数据查验 | 880ce5c
- | 日常任务插件遍历时的key值修改 | cd26285
- | 日常任务插件面板高度修改 | 249f9e4
- | 时间轴上下滑动 | 4d0ae46
- | 时间轴上下滚动数据加载bug修改 | e82ede4
- | 时间轴插件 | 225d3cc
- | 时间轴无任务时时间刻度加载修改 | 4921672
- | 时间轴骨架屏修改 | ca78d02
- | 角色显示状态修改 | 7d3b906
- | 角色栏修改 | 19228d6
- | 解决时间轴报错 | da1eece
- | 骨架屏替换 | e9fdd71
ID1000343 | 解决向下预加载查询参数时间没+1颗粒度;以及滚动加载颗粒度写死的问题 | [940603a](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/940603a), closes [#ID1000343](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/issues/ID1000343) ID1000343 | 解决向下预加载查询参数时间没+1颗粒度;以及滚动加载颗粒度写死的问题 | [940603a](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/940603a), closes [#ID1000343](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/issues/ID1000343)
plugin | 插件解析机制完善 | [0f5a27d](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0f5a27d) plugin | 插件解析机制完善 | [0f5a27d](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0f5a27d)
project title | 项目标题修改; 切换角色移除script | [5c20017](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5c20017) project title | 项目标题修改; 切换角色移除script | [5c20017](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5c20017)
roles | 修复默认显示不是我的角色的问题 | [b69f94f](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b69f94f) roles | 修复默认显示不是我的角色的问题 | [b69f94f](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b69f94f)
role | 切换角色的逻辑修正完善 | [4ae534f](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4ae534f) role | 切换角色的逻辑修正完善 | [4ae534f](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4ae534f)
task任务逻辑完善 | 减少初始global及regular的不必要请求 | [bd4bd38](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/bd4bd38) task任务逻辑完善 | 减少初始global及regular的不必要请求 | [bd4bd38](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/bd4bd38)
- | title.vue根据页面栈显示返回按钮;标题文本超出显示... | [0cbacf4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0cbacf4)
- | 上下滑动加载定期任务 | [4090d89](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4090d89) - | 上下滑动加载定期任务 | [4090d89](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4090d89)
- | 上下滚动时间轴 | [d533a01](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/d533a01) - | 上下滚动时间轴 | [d533a01](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/d533a01)
- | 下拉加载定期任务传参,时间格式化修改 | [0b95a0e](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0b95a0e) - | 下拉加载定期任务传参,时间格式化修改 | [0b95a0e](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0b95a0e)
- | 任务开始时间延迟插件 | [992a313](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/992a313) - | 任务开始时间延迟插件 | [992a313](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/992a313)
- | 修改main | [749ae9a](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/749ae9a) - | 修改main | [749ae9a](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/749ae9a)
- | 修改定期任务状态0和4时不加载圆圈 | [30e352f](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/30e352f)
- | 修改小红点传参 | [87b20fd](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/87b20fd) - | 修改小红点传参 | [87b20fd](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/87b20fd)
- | 修改报错 | [531c14d](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/531c14d) - | 修改报错 | [531c14d](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/531c14d)
- | 修改接口路径 | [df6acf2](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/df6acf2) - | 修改接口路径 | [df6acf2](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/df6acf2)
- | 修改角色栏组件 | [a54c601](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a54c601) - | 修改角色栏组件 | [a54c601](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a54c601)
- | 切换到默认项目角色没有激活状态的bug | [438d448](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/438d448) - | 切换到默认项目角色没有激活状态的bug | [438d448](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/438d448)
- | 切换日历时查询小红点 | [7091789](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/7091789) - | 切换日历时查询小红点 | [7091789](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/7091789)
- | 初始展示角色修改 | [2ac4053](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/2ac4053)
- | 定期任务key值修改 | [c6688db](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c6688db)
- | 定期任务接口 | [aa4981c](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/aa4981c) - | 定期任务接口 | [aa4981c](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/aa4981c)
- | 定期任务插件 | [92b3254](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/92b3254) - | 定期任务插件 | [92b3254](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/92b3254)
- | 定期任务未加载时,显示空的时间轴并能上下滑动 | [ce38093](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/ce38093) - | 定期任务未加载时,显示空的时间轴并能上下滑动 | [ce38093](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/ce38093)
@ -187,6 +110,7 @@
- | 提示信息显示bug及日常任务收缩问题 | [f2f06c5](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/f2f06c5) - | 提示信息显示bug及日常任务收缩问题 | [f2f06c5](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/f2f06c5)
- | 插件bug解决 | [41257eb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/41257eb) - | 插件bug解决 | [41257eb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/41257eb)
- | 收到消息修改任务状态 | [c378063](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c378063) - | 收到消息修改任务状态 | [c378063](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c378063)
- | 日历无任务时添加小绿点,时间轴刻度无任务不显示时分 | [0f90868](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0f90868)
- | 日常任务html数据查验 | [880ce5c](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/880ce5c) - | 日常任务html数据查验 | [880ce5c](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/880ce5c)
- | 日常任务插件遍历时的key值修改 | [cd26285](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/cd26285) - | 日常任务插件遍历时的key值修改 | [cd26285](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/cd26285)
- | 日常任务插件面板高度修改 | [249f9e4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/249f9e4) - | 日常任务插件面板高度修改 | [249f9e4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/249f9e4)
@ -194,25 +118,27 @@
- | 时间轴上下滚动数据加载bug修改 | [e82ede4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e82ede4) - | 时间轴上下滚动数据加载bug修改 | [e82ede4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e82ede4)
- | 时间轴插件 | [225d3cc](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/225d3cc) - | 时间轴插件 | [225d3cc](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/225d3cc)
- | 时间轴无任务时时间刻度加载修改 | [4921672](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4921672) - | 时间轴无任务时时间刻度加载修改 | [4921672](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4921672)
- | 时间轴滚动位置修改 | [551da63](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/551da63)
- | 时间轴骨架屏修改 | [ca78d02](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/ca78d02) - | 时间轴骨架屏修改 | [ca78d02](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/ca78d02)
- | 监听时间基本点 | [033fca0](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/033fca0)
- | 角色显示状态修改 | [7d3b906](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/7d3b906) - | 角色显示状态修改 | [7d3b906](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/7d3b906)
- | 角色栏修改 | [19228d6](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/19228d6) - | 角色栏修改 | [19228d6](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/19228d6)
- | 解决时间轴报错 | [da1eece](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/da1eece) - | 解决时间轴报错 | [da1eece](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/da1eece)
- | 设置时间轴自动滚动到当前位置 | [a3474f8](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a3474f8)
- | 跳转详情页返回路径修改 | [c5e17c0](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c5e17c0)
- | 骨架屏替换 | [e9fdd71](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e9fdd71) - | 骨架屏替换 | [e9fdd71](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e9fdd71)
### 📝 文档 ### 📝 文档
范围|描述|commitId 范围|描述|commitId
--|--|-- --|--|--
- | README.md | ab0eb05 - | README.md | [ab0eb05](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/ab0eb05)
### 🔧 测试 ### 🔧 测试
范围|描述|commitId 范围|描述|commitId
--|--|-- --|--|--
- | 暂时移除了jest浏览器配置 | 5088d01 - | 暂时移除了jest浏览器配置 | [5088d01](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5088d01)
- | 添加测试,测试utils/time.js的computeDurationText | e758010
- | 禁用任务开始操作 | b5425db
- | 添加测试,测试utils/time.js的computeDurationText | [e758010](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e758010) - | 添加测试,测试utils/time.js的computeDurationText | [e758010](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e758010)
- | 禁用任务开始操作 | [b5425db](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b5425db) - | 禁用任务开始操作 | [b5425db](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b5425db)
@ -220,57 +146,59 @@
### 🔨 代码重构 ### 🔨 代码重构
范围|描述|commitId 范围|描述|commitId
--|--|-- --|--|--
calendar | 日历细节调整 | 1a8d6bf calendar | 日历细节调整 | [1a8d6bf](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/1a8d6bf)
- | project 代码健壮性完善 | a3202c5 - | project 代码健壮性完善 | [a3202c5](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a3202c5)
store/home | 删除store/home | db8a3b4 store/home | 删除store/home | [db8a3b4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/db8a3b4)
task beginTime | 格式化任务开始时间 | fbc0301 task beginTime | 格式化任务开始时间 | [fbc0301](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/fbc0301)
template | eslint prettier sass uview tailwindcss | 9c966a1 template | eslint prettier sass uview tailwindcss | [9c966a1](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/9c966a1)
tips | 修改任务状态方法重构 | b57d3ac tips | 修改任务状态方法重构 | [b57d3ac](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b57d3ac)
tip | 任务状态显示及tip组件数据的重构 | 78a5750 tip | 任务状态显示及tip组件数据的重构 | [78a5750](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/78a5750)
- | 下滑时间轴添加备注 | 4fd20e3 title.vue | 移除测试的repeat; 样式细节调整 | [c32d2bd](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c32d2bd)
- | 任务状态重构 | 4693655 - | 下滑时间轴添加备注 | [4fd20e3](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4fd20e3)
- | 删除多余的weekmode store里的东西 | 0841fe0 - | 任务状态重构 | [4693655](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4693655)
- | 删除多余的技术验证界面 | 542ae5b - | 删除多余的weekmode store里的东西 | [0841fe0](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0841fe0)
- | 界面样式调整 | 4367249 - | 删除多余的技术验证界面 | [542ae5b](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/542ae5b)
- | 重构store分层 | 5f6fff8 - | 界面样式调整 | [4367249](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4367249)
- | 重构store分层 | [5f6fff8](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5f6fff8)
### 🚀 性能优化 ### 🚀 性能优化
范围|描述|commitId 范围|描述|commitId
--|--|-- --|--|--
- | 修改定期任务骨架屏高度 | 909a734 - | 1.时间轴筛选相同的时间替换数据 2.整理代码 | [e082ccb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e082ccb)
- | 插件查询及展示 | 4dba770 - | 修改代码格式 | [14123d7](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/14123d7)
- | 日历的更改 | 7353ac8 - | 修改定期任务骨架屏高度 | [909a734](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/909a734)
- | 测试接口 | 215e074 - | 插件查询及展示 | [4dba770](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4dba770)
- | 组件文件夹新建 | 22bfe7b - | 整理代码 | [7a55315](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/7a55315)
- | 组件文件夹新建 | 17bb8c9 - | 日历的更改 | [7353ac8](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/7353ac8)
- | 组件文件夹新建 | 1421504 - | 测试接口 | [215e074](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/215e074)
- | 角色栏文字颜色修改 | 215c6b3 - | 组件文件夹新建 | [22bfe7b](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/22bfe7b)
- | 解决警告 | c932b09 - | 组件文件夹新建 | [17bb8c9](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/17bb8c9)
- | 组件文件夹新建 | [1421504](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/1421504)
- | 角色栏文字颜色修改 | [215c6b3](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/215c6b3)
- | 解决警告 | [c932b09](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c932b09)
### chore ### chore
范围|描述|commitId 范围|描述|commitId
--|--|-- --|--|--
- | api 封装 | 8dcb8a2 - | api 封装 | [8dcb8a2](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/8dcb8a2)
- | env host修改 | a79a4a5 - | env host修改 | [a79a4a5](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a79a4a5)
- | merge globals | b0957cc - | merge globals | [b0957cc](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b0957cc)
- | merge wrr | 5ccc7a5 - | merge wrr | [5ccc7a5](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5ccc7a5)
- | mock | 51c24a5 - | mock | [51c24a5](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/51c24a5)
package manifest | 去掉了摇树 | f7c1dd4 package manifest | 去掉了摇树 | [f7c1dd4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/f7c1dd4)
pwa 小程序 | 移除了pwa,alloyFinger添加平台判断 | 875fab4 pwa 小程序 | 移除了pwa,alloyFinger添加平台判断 | [875fab4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/875fab4)
- | uview-ui | a9ea34b - | uview-ui | [a9ea34b](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a9ea34b)
v3.0.1 | tall api 地址从1.0改成了3.0 | db5afd5 v3.0.1 | tall api 地址从1.0改成了3.0 | [db5afd5](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/db5afd5)
信息配置 | 配置eslint等配置 | 7421443 信息配置 | 配置eslint等配置 | [7421443](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/7421443)
- | 修复不能build的问题 | 0b7b91e - | 修复不能build的问题 | [0b7b91e](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0b7b91e)
- | 删除多余的构建的命令 | 3f4eb2f - | 删除多余的构建的命令 | [3f4eb2f](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/3f4eb2f)
范围|描述|commitId 范围|描述|commitId
--|--|-- --|--|--
- | style:index | 978f272
- | !2 基础模板v1.1.0 | f5e61dd
- | init | c0f1deb
- | style:index | [978f272](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/978f272) - | style:index | [978f272](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/978f272)
- | !2 基础模板v1.1.0 | [f5e61dd](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/f5e61dd) - | !2 基础模板v1.1.0 | [f5e61dd](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/f5e61dd)
- | init | [c0f1deb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c0f1deb) - | init | [c0f1deb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c0f1deb)

4
src/apis/plugin.js

@ -5,6 +5,10 @@ const install = (Vue, vm) => {
vm.$u.api = { ...vm.$u.api } || {}; vm.$u.api = { ...vm.$u.api } || {};
// 获取插件信息 // 获取插件信息
vm.$u.api.getOtherPlugin = param => vm.$u.post(`${url}/pluginshop/plugin/query`, param); vm.$u.api.getOtherPlugin = param => vm.$u.post(`${url}/pluginshop/plugin/query`, param);
// 查询子任务
vm.$u.api.findSonTask = param => vm.$u.post(`${uni.$t.domain}/task/findSonTask`, param);
// 查询子项目
vm.$u.api.findSonProject = param => vm.$u.post(`${uni.$t.domain}/project/findSonProject`, param);
}; };
export default { install }; export default { install };

4
src/components/Plugin/Plugin.vue

@ -27,8 +27,8 @@
<p-task-duration-delay :task="task" v-if="pluginId === '3'" /> <p-task-duration-delay :task="task" v-if="pluginId === '3'" />
<p-task-start-time-delay :task="task" v-if="pluginId === '4'" /> <p-task-start-time-delay :task="task" v-if="pluginId === '4'" />
<!-- <p-deliverable :task="task" v-if="pluginId === '5'" /> --> <!-- <p-deliverable :task="task" v-if="pluginId === '5'" /> -->
<!-- <p-subtasks :task="task" v-if="pluginId === '6'" /> --> <p-subtasks :task="task" v-if="pluginId === '6'" />
<!-- <p-subproject :task="task" v-if="pluginId === '7'" /> --> <p-subproject :task="task" v-if="pluginId === '7'" />
<!-- <p-task-countdown :task="task" v-if="pluginId === '8'" /> --> <!-- <p-task-countdown :task="task" v-if="pluginId === '8'" /> -->
<p-manage-project :task="task" v-if="pluginId === '9'" /> <p-manage-project :task="task" v-if="pluginId === '9'" />
<p-manage-role :task="task" v-if="pluginId === '10'" /> <p-manage-role :task="task" v-if="pluginId === '10'" />

12
src/components/Roles/Roles.vue

@ -56,12 +56,13 @@ export default {
}, },
methods: { methods: {
...mapActions('task', ['handleRegularTask']), ...mapActions('task', ['handleRegularTask', 'getPermanent']),
...mapMutations('role', ['setRoleId']), ...mapMutations('role', ['setRoleId']),
...mapMutations('task', ['setPermanents', 'setDailyTasks', 'clearEndFlag']), ...mapMutations('task', ['setPermanents', 'clearEndFlag']),
// //
setCurrentRole(index) { setCurrentRole(index) {
console.log('index: ', index);
const data = document.getElementsByClassName('tab-children'); const data = document.getElementsByClassName('tab-children');
// tabList // tabList
data.forEach(item => { data.forEach(item => {
@ -91,13 +92,6 @@ export default {
this.setRoleId(id); this.setRoleId(id);
//index //index
this.setCurrentRole(index); this.setCurrentRole(index);
//
this.setPermanents([]);
this.setDailyTasks([]);
//
//
//
this.clearEndFlag();
}); });
} catch (error) { } catch (error) {
console.error('role.vue changeRole error: ', error); console.error('role.vue changeRole error: ', error);

97
src/components/TimeLine/TimeLine.vue

@ -4,9 +4,9 @@
<scroll-view <scroll-view
:lower-threshold="300" :lower-threshold="300"
:scrollTop="top" scroll-y="true"
:scrollY="true"
:upper-threshold="300" :upper-threshold="300"
:scroll-into-view="viewId"
@scroll="scroll" @scroll="scroll"
@scrolltolower="handleScrollBottom" @scrolltolower="handleScrollBottom"
@scrolltoupper="handleScrollTop" @scrolltoupper="handleScrollTop"
@ -23,10 +23,12 @@
// import Barrier from './component/Barrier.vue'; // import Barrier from './component/Barrier.vue';
import { mapState, mapMutations, mapGetters } from 'vuex'; import { mapState, mapMutations, mapGetters } from 'vuex';
import TimeBox from './component/TimeBox.vue'; import TimeBox from './component/TimeBox.vue';
import mixin from '@/mixins/timeline';
export default { export default {
name: 'TimeLine', name: 'TimeLine',
components: { TimeBox }, components: { TimeBox },
mixins: [mixin],
data() { data() {
return { top: 0 }; return { top: 0 };
@ -34,16 +36,12 @@ export default {
computed: { computed: {
...mapState('role', ['visibleRoles']), ...mapState('role', ['visibleRoles']),
...mapState('task', ['scrollTop', 'showTips', 'tasks', 'topEnd', 'bottomEnd']), ...mapState('task', ['scrollTop', 'showTips', 'tasks', 'topEnd', 'bottomEnd', 'showSkeleton', 'timeNode', 'viewId']),
...mapGetters('task', ['timeGranularity']), ...mapGetters('task', ['timeGranularity']),
}, },
mounted() {
this.setDatumPoint();
},
methods: { methods: {
...mapMutations('task', ['setScrollTop', 'setShrink', 'setUpTasks', 'setDownTasks']), ...mapMutations('task', ['setScrollTop', 'setShrink', 'setUpTasks', 'setDownTasks', 'setViewId']),
// //
scroll(e) { scroll(e) {
@ -54,32 +52,12 @@ export default {
// //
async handleScrollTop() { async handleScrollTop() {
if (!this.tasks || !this.tasks.length) return; if (!this.tasks || !this.tasks.length || this.showSkeleton) return;
const startTime = this.tasks[0].planStart - 0; const startTime = this.tasks[0].planStart - 0;
if ((this.tasks[0].plugins && this.tasks[0].plugins.length === 0) || this.topEnd) { if ((this.tasks[0].plugins && this.tasks[0].plugins.length === 0) || this.topEnd) {
// //
console.warn('滚动到顶部没有数据时: '); console.warn('滚动到顶部没有数据时: ');
const addTasks = [ const addTasks = this.setTime(startTime, true);
{
panel: {},
plugins: [],
process: 4,
planStart: this.$t.time.add(startTime, -3, 'day').valueOf(),
},
{
panel: {},
plugins: [],
process: 4,
planStart: this.$t.time.add(startTime, -2, 'day').valueOf(),
},
{
panel: {},
plugins: [],
process: 4,
planStart: this.$t.time.add(startTime, -1, 'day').valueOf(),
},
];
this.setUpTasks(addTasks); this.setUpTasks(addTasks);
} else { } else {
// //
@ -95,35 +73,17 @@ export default {
// //
async handleScrollBottom() { async handleScrollBottom() {
if (!this.tasks || !this.tasks.length) return; if (!this.tasks || !this.tasks.length || this.showSkeleton) return;
const { tasks, timeGranularity } = this; const { tasks, timeGranularity } = this;
const startTime = tasks[tasks.length - 1].planStart - 0; const startTime = tasks[tasks.length - 1].planStart - 0;
if ((tasks[0].plugins && tasks[0].plugins.length === 0) || this.bottomEnd) { if ((tasks[0].plugins && tasks[0].plugins.length === 0) || this.bottomEnd) {
// //
console.warn('滚动到底部没有数据时: '); console.warn('滚动到底部没有数据时: ');
const addTasks = [ const addTasks = this.setTime(startTime, false);
{
panel: {},
plugins: [],
process: 4,
planStart: this.$t.time.add(startTime, 1, timeGranularity).valueOf(),
},
{
panel: {},
plugins: [],
process: 4,
planStart: this.$t.time.add(startTime, 2, timeGranularity).valueOf(),
},
{
panel: {},
plugins: [],
process: 4,
planStart: this.$t.time.add(startTime, 3, timeGranularity).valueOf(),
},
];
this.setDownTasks(addTasks); this.setDownTasks(addTasks);
} else { } else {
// =+ // =+
console.warn('滚动到底部有数据时: ');
const timeNode = this.$t.time.add(startTime, 1, timeGranularity).valueOf(); const timeNode = this.$t.time.add(startTime, 1, timeGranularity).valueOf();
const downQuery = { const downQuery = {
timeNode, timeNode,
@ -134,25 +94,24 @@ export default {
} }
}, },
// //
setDatumPoint() { setScrollPosition() {
const { tasks } = this; const { tasks, timeNode } = this;
if (tasks && tasks.length) { for (let i = 0; i < tasks.length; i++) {
let tasksHeight = 0; const item = tasks[i];
const scrollHeight = document.getElementById('scroll').clientHeight; const show = this.$t.time.isSame(+item.planStart, +timeNode, this.timeGranularity);
let width = document.documentElement.clientWidth; // storagetimeNode,storetimeNode
for (let i = 0; i < 3; i++) { const taskId = this.$t.storage.getStorageSync('taskId');
if (tasks[i].panel && tasks[i].panel.height) { // storage
// + 42 if (taskId) {
tasksHeight += +tasks[i].panel.height + 42; this.setViewId(`a${taskId}`);
} else { this.$t.storage.setStorageSync('taskId', '');
// rem + 42 return;
// u-card h-16 = 4rem }
// += 1rem + 42 = width / 20 + 42 if (show) {
tasksHeight += (width / 20) * 4 + 42; this.setViewId(`a${item.id}`);
} return;
} }
this.top = tasksHeight - scrollHeight / 2;
} }
}, },
}, },

15
src/components/TimeLine/component/TimeBox.vue

@ -2,12 +2,13 @@
<view class="column"> <view class="column">
<!-- v-if="tasks && tasks.length" --> <!-- v-if="tasks && tasks.length" -->
<view> <view>
<view :key="index" v-for="(task, index) in tasks"> <view :key="task.id" v-for="task in tasks" class="ssssss" :id="`a${task.id}`">
<view class="flex"> <view class="flex">
<TimeStatus :task="task" /> <TimeStatus :task="task" />
<view class="flex items-center justify-between flex-1 ml-2 task-column"> <view class="flex items-center justify-between flex-1 ml-2 task-column">
<view v-if="task.process !== 4">{{ $moment(+task.planStart).format(startTimeFormat) }}</view> <view v-if="task.process !== 4">{{ $moment(+task.planStart).format(startTimeFormat) }}</view>
<view v-else>{{ $moment(+task.planStart).format('D日') }}</view> <view v-else>{{ $moment(+task.planStart).format('D日') }}</view>
<!-- 任务功能菜单 --> <!-- 任务功能菜单 -->
<TaskTools v-if="task.process !== 4" /> <TaskTools v-if="task.process !== 4" />
</view> </view>
@ -19,13 +20,11 @@
:show-foot="false" :show-foot="false"
:show-head="false" :show-head="false"
:style="{ height: setHeight(task.panel) }" :style="{ height: setHeight(task.panel) }"
@click="onClickTask(+task.planStart)"
class="h-16" class="h-16"
margin="0" margin="0"
v-if="showSkeleton" v-if="showSkeleton"
> >
<view slot="body"> <view slot="body">
<!-- TODO: 逻辑不完善 -->
<view> <view>
<skeleton :banner="false" :loading="true" :row="4" animate class="mt-2 u-line-2 skeleton"></skeleton> <skeleton :banner="false" :loading="true" :row="4" animate class="mt-2 u-line-2 skeleton"></skeleton>
</view> </view>
@ -36,12 +35,11 @@
:show-foot="false" :show-foot="false"
:show-head="false" :show-head="false"
:style="{ height: setHeight(task.panel) }" :style="{ height: setHeight(task.panel) }"
@click="onClickTask(+task.planStart)"
class="h-16" class="h-16"
margin="0" margin="0"
v-if="tasks && tasks.length && task.process !== 4 && !showSkeleton" v-if="tasks && tasks.length && task.process !== 4 && !showSkeleton"
@click="onClickTask(+task.planStart, task.id)"
> >
<!-- v-if="task.plugins && task.plugins.length" -->
<!-- 任务面板插件 --> <!-- 任务面板插件 -->
<view slot="body"> <view slot="body">
<view class="p-0 u-col-between"> <view class="p-0 u-col-between">
@ -93,7 +91,7 @@ export default {
methods: { methods: {
...mapActions('task', ['getGlobal']), ...mapActions('task', ['getGlobal']),
...mapMutations('task', ['setTipsContent', 'setTipsContent', 'setTimeNode']), ...mapMutations('task', ['setTipsContent', 'setTipsContent']),
// //
setHeight(panel) { setHeight(panel) {
@ -107,10 +105,13 @@ export default {
/** /**
* 点击了定期任务的面板 更新可变的日常任务 * 点击了定期任务的面板 更新可变的日常任务
* @param {number} planStart 任务计划开始时间 * @param {number} planStart 任务计划开始时间
* @param {string} taskId 任务id
*/ */
onClickTask(planStart) { onClickTask(planStart, taskId) {
const param = { roleId: this.roleId, timeNode: planStart, timeUnit: this.timeUnit }; const param = { roleId: this.roleId, timeNode: planStart, timeUnit: this.timeUnit };
this.getGlobal(param); this.getGlobal(param);
this.$t.storage.setStorageSync('taskId', taskId);
this.$t.storage.setStorageSync('roleId', this.roleId);
}, },
// //

38
src/components/TimeLine/component/TimeStatus.vue

@ -5,13 +5,14 @@
:style="{ color: orderStyle.color }" :style="{ color: orderStyle.color }"
@tap="changeStatus($event, task.process)" @tap="changeStatus($event, task.process)"
> >
<!-- 1进行中 2暂停中 3已完成 -->
<u-circle-progress <u-circle-progress
:percent="+orderStyle.persent" :percent="+orderStyle.persent"
:active-color="orderStyle.color" :active-color="orderStyle.color"
bg-color="rgba(255,255,255,0)" bg-color="rgba(255,255,255,0)"
border-width="4" border-width="4"
width="66" :width="task.process !== 4 ? 66 : 50"
v-if="task.process !== 4" v-if="task.process === 1 || task.process === 2 || task.process === 3"
> >
<view class="u-progress-content"> <view class="u-progress-content">
<view class="u-progress-dot"></view> <view class="u-progress-dot"></view>
@ -21,22 +22,19 @@
</view> </view>
</view> </view>
</u-circle-progress> </u-circle-progress>
<!-- 新增任务 --> <!-- 0未开始 4添加任务 -->
<u-circle-progress <view class="progress-box flex justify-center items-center rounded-full" v-else :class="task.process === 4 ? 'progress-box-4' : ''">
:percent="+orderStyle.persent"
:active-color="orderStyle.color"
bg-color="rgba(255,255,255,0)"
border-width="4"
width="50"
v-else
>
<view class="u-progress-content"> <view class="u-progress-content">
<view class="u-progress-dot"></view> <view class="u-progress-dot"></view>
<view class="u-progress-info"> <view class="u-progress-info">
<u-icon :name="orderStyle.icon" size="15px"></u-icon> <span v-if="orderStyle.icon">
<u-icon :name="orderStyle.icon" v-if="task.process !== 4" size="15px"></u-icon>
<u-icon :name="orderStyle.icon" v-else size="15px"></u-icon>
</span>
<template v-else>{{ computeDurationText() }}</template>
</view> </view>
</view> </view>
</u-circle-progress> </view>
</view> </view>
</view> </view>
</template> </template>
@ -120,7 +118,6 @@ export default {
* @param {object} event * @param {object} event
*/ */
changeStatus(event, process) { changeStatus(event, process) {
console.log('event, process: ', event, process);
if (process === 4) { if (process === 4) {
this.addTask(); this.addTask();
return; return;
@ -198,4 +195,17 @@ export default {
height: 33px; height: 33px;
width: 33px; width: 33px;
} }
.progress-box {
background: rgba(255, 255, 255, 0);
width: 33px;
height: 33px;
border: 2px solid #9ca3af;
}
.progress-box-4 {
width: 25px;
height: 25px;
border: 2px solid #60a5fa;
}
</style> </style>

19
src/components/Title/Title.vue

@ -1,7 +1,7 @@
<template> <template>
<view> <view>
<u-navbar :is-back="showBack" class="overflow-hidden"> <u-navbar :custom-back="onBack" class="overflow-hidden">
<view class="flex justify-start flex-1 pr-3 font-bold min-0"> <view class="flex justify-start flex-1 px-3 font-bold min-0">
<view class="truncate">{{ project.name }}</view> <view class="truncate">{{ project.name }}</view>
</view> </view>
<view class="mr-2" slot="right"> <view class="mr-2" slot="right">
@ -26,15 +26,16 @@ export default {
...mapGetters('user', ['userId']), ...mapGetters('user', ['userId']),
}, },
created() {
this.initBackIcon();
},
methods: { methods: {
// //
initBackIcon() { onBack() {
// eslint-disable-next-line no-undef
const pages = getCurrentPages(); // const pages = getCurrentPages(); //
this.showBack = pages.length > 1; if (pages.length > 1) {
uni.navigateBack();
} else {
this.$u.route('/', { u: this.userId });
}
}, },
// LWBS // LWBS

44
src/mixins/timeline.js

@ -0,0 +1,44 @@
import { mapGetters } from 'vuex';
const mixin = {
computed: mapGetters('task', ['timeGranularity']),
methods: {
/**
* 设置时间轴空数据
* @param {*} startTime
* @param {*} show true 向上加载,false 向下加载
*/
setTime(startTime, show) {
let { timeGranularity } = this;
let arr = [];
let str = {};
if (show) {
for (let i = 10; i > 0; i--) {
str = {
id: this.$u.guid(20, false, 10),
panel: {},
plugins: [],
process: 4,
planStart: this.$t.time.add(startTime, `-${i}` - 0, timeGranularity).valueOf(),
};
arr.push(str);
}
} else {
for (let i = 0; i < 10; i++) {
str = {
id: this.$u.guid(20, false, 10),
panel: {},
plugins: [],
process: 4,
planStart: this.$t.time.add(startTime, i + 1, timeGranularity).valueOf(),
};
arr.push(str);
}
}
return arr;
},
},
};
export default mixin;

154
src/pages/project/project.vue

@ -18,8 +18,10 @@
<script> <script>
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'; import { mapState, mapGetters, mapMutations, mapActions } from 'vuex';
import mixin from '@/mixins/timeline';
export default { export default {
mixins: [mixin],
data() { data() {
return { height: '' }; return { height: '' };
}, },
@ -41,11 +43,10 @@ export default {
* 重新根据时间和角色查询普通日常任务 * 重新根据时间和角色查询普通日常任务
* 永久日常任务不发生改变 * 永久日常任务不发生改变
*/ */
timeNode(val) { async timeNode(val) {
if (val && this.roleId) { if (val && this.roleId) {
// //
this.getGlobalData(); await this.initTasks();
this.getInitTasks();
} }
}, },
@ -70,6 +71,7 @@ export default {
onUnload() { onUnload() {
this.clearEndFlag(); this.clearEndFlag();
this.clearTasks();
}, },
methods: { methods: {
@ -80,7 +82,18 @@ export default {
...mapMutations('user', ['setToken']), ...mapMutations('user', ['setToken']),
...mapMutations('project', ['setProject', 'setProjectName']), ...mapMutations('project', ['setProject', 'setProjectName']),
...mapMutations('role', ['setInvisibleRoles', 'setVisibleRoles', 'setRoleId']), ...mapMutations('role', ['setInvisibleRoles', 'setVisibleRoles', 'setRoleId']),
...mapMutations('task', ['setUpTasks', 'setDownTasks', 'setDailyTasks', 'setTimeNode', 'clearEndFlag', 'setShowSkeleton']), ...mapMutations('task', [
'setPermanents',
'setUpTasks',
'setDownTasks',
'setDailyTasks',
'setTimeNode',
'clearTasks',
'clearEndFlag',
'setShowSkeleton',
'setTopEnd',
'setBottomEnd',
]),
/** /**
* 初始化 * 初始化
@ -111,14 +124,44 @@ export default {
// id // id
await this.getRoles({ projectId: options.p }); await this.getRoles({ projectId: options.p });
this.setInitialRoleId(this.visibleRoles); this.setInitialRoleId(this.visibleRoles);
//
// await this.getInitTasks();
} }
} catch (error) { } catch (error) {
console.error('project init function:', error); console.error('project init function:', error);
} }
}, },
//
async initTasks() {
//
this.setPermanents([]);
this.setDailyTasks([]);
//
this.clearTasks();
//
//
this.clearEndFlag();
//
this.getGlobalData();
//
this.setPrevTasks();
// storage
const storageTaskId = this.$t.storage.getStorageSync('taskId');
this.$nextTick(() => {
if (!storageTaskId) {
this.$refs.child.setScrollPosition();
}
});
//
this.setNextTasks();
await this.getInitTasks();
// storage
this.$nextTick(() => {
if (storageTaskId) {
this.$refs.child.setScrollPosition();
}
});
},
// || // ||
async getInitTasks() { async getInitTasks() {
// //
@ -126,28 +169,33 @@ export default {
await this.getTasks({ queryType: 1 }); await this.getTasks({ queryType: 1 });
// //
if (this.tasks && this.tasks.length && this.tasks.plugins && this.tasks.plugins.length) { const detailId = this.tasks.findIndex(task => task.detailId);
this.$nextTick(() => { if (detailId !== -1) {
this.$nextTick(async () => {
const { tasks, timeGranularity } = this; const { tasks, timeGranularity } = this;
this.getTasks({ timeNode: +tasks[0].planStart, queryType: 0, queryNum: 6 }); await this.getTasks({ timeNode: +tasks[0].planStart, queryType: 0, queryNum: 6 }); //
// //
const nextQueryTime = +this.$t.time.add(+tasks[tasks.length - 1].planStart, 1, timeGranularity); const nextQueryTime = +this.$t.time.add(+tasks[tasks.length - 1].planStart, 1, timeGranularity);
this.getTasks({ timeNode: nextQueryTime, queryType: 1, queryNum: 6 }); await this.getTasks({ timeNode: nextQueryTime, queryType: 1, queryNum: 6 }); //
}); });
} else { } else {
//
// //
this.setUpTasks(); this.setPrevTasks();
// //
this.setDownTasks(); this.setNextTasks();
} }
}, },
// //
setInitialRoleId(visibleList) { setInitialRoleId(visibleList) {
const index = visibleList.findIndex(item => item.mine === '1'); const index = visibleList.findIndex(item => +item.mine === 1);
const currentRole = index > 0 ? visibleList[index] : visibleList[0]; const currentRole = index > 0 ? visibleList[index] : visibleList[0];
const currentRoleId = currentRole ? currentRole.id : ''; const storageRoleId = this.$t.storage.getStorageSync('roleId');
const currentRoleId = storageRoleId ? storageRoleId : currentRole ? currentRole.id : '';
this.setRoleId(currentRoleId); this.setRoleId(currentRoleId);
// storage
this.$t.storage.setStorageSync('roleId', '');
}, },
/** /**
@ -170,9 +218,14 @@ export default {
queryNum: query.queryNum || 3, queryNum: query.queryNum || 3,
queryType: query.queryType, queryType: query.queryType,
}; };
const res = await this.getRegulars(params);
await this.getRegulars(params);
this.setShowSkeleton(false); this.setShowSkeleton(false);
// 0 -> 1 ->
if (res && res.length) {
this.replacePrevData(res, params.queryType);
} else {
params.queryType === 0 ? this.setPrevTasks() : this.setNextTasks();
}
} catch (error) { } catch (error) {
this.setShowSkeleton(false); this.setShowSkeleton(false);
console.error('error: ', error); console.error('error: ', error);
@ -185,6 +238,75 @@ export default {
const param = { roleId, timeNode, timeUnit }; const param = { roleId, timeNode, timeUnit };
this.getGlobal(param); this.getGlobal(param);
}, },
//
setPrevTasks() {
this.setTopEnd(true);
let sTime = '';
if (!this.tasks || !this.tasks.length) {
sTime = +new Date().getTime();
} else {
sTime = +this.tasks[0].planStart - 0;
}
const initData = this.setTime(sTime, true);
this.setUpTasks(initData);
},
//
setNextTasks() {
this.setBottomEnd(true);
let sTime = '';
if (!this.tasks || !this.tasks.length) {
sTime = +new Date().getTime();
} else {
sTime = +this.tasks[this.tasks.length - 1].planStart - 0;
}
const initData = this.setTime(sTime, false);
this.setDownTasks(initData);
},
//
replacePrevData(data, type) {
let newTasks = [...this.tasks];
for (let i = 0; i < newTasks.length; i++) {
const task = newTasks[i];
let arr = [];
for (let j = 0; j < data.length; j++) {
const item = data[j];
//
if (+newTasks[0].planStart > +data[0].planStart) {
this.setPrevTasks();
newTasks = [...this.tasks];
i--;
break;
} else if (+data[data.length - 1].planStart > +newTasks[newTasks.length - 1].planStart) {
this.setNextTasks();
newTasks = [...this.tasks];
i--;
break;
} else {
//
const taskItem = this.$t.time.isSame(+task.planStart, +item.planStart, this.timeGranularity);
if (taskItem) {
arr.push(item);
if (task.detailId) {
newTasks.splice(i, 0, item);
} else {
if (arr.length === 1) {
newTasks.splice(i, 1, item);
}
if (arr.length > 1) {
newTasks.splice(i, 0, item);
}
}
i++;
}
}
}
}
this.clearTasks();
type === 0 ? this.setUpTasks(newTasks) : this.setDownTasks(newTasks);
},
}, },
}; };
</script> </script>

50
src/plugins/p-subproject/p-subproject.vue

@ -1,18 +1,58 @@
<template> <template>
<!-- 子项目插件 --> <!-- 子项目插件 -->
<view>子项目插件显示子项目</view> <view>
<view v-for="item in sonProject" :key="item.detailId">
<span class="text-xs text-blue-500" @click="openProject(item)">{{ item.name }}</span>
</view>
</view>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex';
export default { export default {
name: 'p-subproject', name: 'p-subproject',
props: { item: { type: Object, default: null } }, props: {
task: {
type: Object,
default: () => {},
},
},
data() { data() {
return {}; return { sonProject: [] };
}, },
computed: {}, computed: mapGetters('project', ['projectId']),
methods: {},
mounted() {
this.getSonProject();
},
methods: {
async getSonProject() {
try {
const data = await this.$u.api.findSonProject({ projectId: this.task.detailId });
this.sonProject = data;
} catch (error) {
console.error('p-subproject.vue getSonProject error: ', error);
}
},
/**
* 打开项目
* @param {object} project 所点击的项目的信息
*/
openProject(project) {
const { name, id, url } = project;
url && (uni.$t.domain = url);
this.$u.route('pages/project/project', {
u: this.userId,
p: id,
pname: name,
url: encodeURIComponent(url),
});
},
},
watch: {}, watch: {},
}; };
</script> </script>

32
src/plugins/p-subtasks/p-subtasks.vue

@ -1,18 +1,38 @@
<template> <template>
<view>子任务插件显示子任务</view> <view>
<view v-for="item in sonTask" :key="item.detailId">
<span class="text-xs text-gray-500">{{ item.name }}</span>
</view>
</view>
</template> </template>
<script> <script>
export default { export default {
name: 'p-subtasks', name: 'p-subtasks',
props: { item: { type: Object, default: null } }, props: {
task: {
type: Object,
default: () => {},
},
},
data() { data() {
return {}; return { sonTask: [] };
},
created() {
this.getSonTask();
}, },
computed: {}, methods: {
methods: {}, async getSonTask() {
watch: {}, try {
const data = await this.$u.api.findSonTask({ detailId: this.task.detailId });
this.sonTask = data;
} catch (error) {
console.error('p-subtasks.vue getSonTask error: ', error);
}
},
},
}; };
</script> </script>

3
src/plugins/p-wbs-import/p-wbs-import.vue

@ -54,8 +54,7 @@ export default {
// TODO: // TODO:
async handleUpdate() { async handleUpdate() {
try { try {
const data = await this.$u.api.import({ projectId: this.projectId }); await this.$u.api.import({ projectId: this.projectId });
console.log('data: ', data);
// WBS // WBS
// //
this.onUploadSuccess(); this.onUploadSuccess();

5
src/store/socket/actions.js

@ -21,8 +21,9 @@ const actions = {
// 监听ws打开 // 监听ws打开
onSocketOpen({ dispatch, commit, state }) { onSocketOpen({ dispatch, commit, state }) {
// eslint-disable-next-line no-unused-vars
state.socket.onOpen(res => { state.socket.onOpen(res => {
console.log('ws open: ', res); // console.log('ws open: ', res);
commit('setConnected', true); commit('setConnected', true);
prevTime = Date.now(); prevTime = Date.now();
// this.auth(); // this.auth();
@ -101,7 +102,7 @@ const actions = {
// 监听关闭事件 // 监听关闭事件
onSocketClose({ dispatch, commit, state }) { onSocketClose({ dispatch, commit, state }) {
console.log('onSocketClose'); // console.log('onSocketClose');
state.socket.onClose(() => { state.socket.onClose(() => {
commit('setConnected', false); commit('setConnected', false);
if (sendHeartTimer) clearInterval(sendHeartTimer); if (sendHeartTimer) clearInterval(sendHeartTimer);

11
src/store/task/actions.js

@ -33,16 +33,9 @@ const actions = {
* @param {number} param.queryType 必填 0 -> 向上 1 -> 向下 * @param {number} param.queryType 必填 0 -> 向上 1 -> 向下
*/ */
// eslint-disable-next-line // eslint-disable-next-line
async getRegulars({ commit, state }, param) { async getRegulars({ commit }, param) {
try { try {
// 向上查 且 上边没数据了 不查 return await uni.$u.api.getRegularTask(param);
// if (param.queryType === 0) return;
// 向下查 且 下边美术家了 不查
// if (param.queryType === 1) return;
const data = await uni.$u.api.getRegularTask(param);
// 0 -> 向上 1 -> 向下
// data 有无的判断在mutations里
param.queryType === 0 ? commit('setUpTasks', data) : commit('setDownTasks', data);
} catch (error) { } catch (error) {
throw error || '获取定期任务失败'; throw error || '获取定期任务失败';
} }

109
src/store/task/mutations.js

@ -8,6 +8,15 @@ const mutations = {
state.scrollTop = num; state.scrollTop = num;
}, },
/**
* 记录时间轴向上滚动的距离
* @param { object } state
* @param { string } data
*/
setViewId(state, data) {
state.viewId = data;
},
/** /**
* 设置日常任务当前是否应该处于收缩状态 * 设置日常任务当前是否应该处于收缩状态
* @param { object } state * @param { object } state
@ -69,41 +78,10 @@ const mutations = {
* @param {Array} data 服务端返回的模板数组 * @param {Array} data 服务端返回的模板数组
*/ */
setUpTasks(state, data) { setUpTasks(state, data) {
if (!data || !data.length) { if (!state.tasks.length) {
state.topEnd = true; state.tasks = [...data];
let sTime = '';
if (!state.tasks || !state.tasks.length) {
sTime = +new Date().getTime();
} else {
sTime = +state.tasks[0].planStart - 0;
}
const initData = [
{
panel: {},
plugins: [],
process: 4,
planStart: uni.$t.time.add(sTime, -3, 'day').valueOf(),
},
{
panel: {},
plugins: [],
process: 4,
planStart: uni.$t.time.add(sTime, -2, 'day').valueOf(),
},
{
panel: {},
plugins: [],
process: 4,
planStart: uni.$t.time.add(sTime, -1, 'day').valueOf(),
},
];
state.tasks = [...initData.concat(state.tasks)];
} else { } else {
if (!state.tasks && !state.tasks.length) { state.tasks = [...data.concat(state.tasks)];
state.tasks = [...data];
} else {
state.tasks = [...data.concat(state.tasks)];
}
} }
}, },
@ -113,41 +91,10 @@ const mutations = {
* @param {Array} data 服务端返回的模板数组 * @param {Array} data 服务端返回的模板数组
*/ */
setDownTasks(state, data) { setDownTasks(state, data) {
if (!data || !data.length) { if (!state.tasks && !state.tasks.length) {
state.bottomEnd = true; state.tasks = [...data];
let sTime = '';
if (!state.tasks || !state.tasks.length) {
sTime = +new Date().getTime();
} else {
sTime = +state.tasks[state.tasks.length - 1].planStart - 0;
}
const initData = [
{
panel: {},
plugins: [],
process: 4,
planStart: uni.$t.time.add(sTime, 1, 'day').valueOf(),
},
{
panel: {},
plugins: [],
process: 4,
planStart: uni.$t.time.add(sTime, 2, 'day').valueOf(),
},
{
panel: {},
plugins: [],
process: 4,
planStart: uni.$t.time.add(sTime, 3, 'day').valueOf(),
},
];
state.tasks = [...state.tasks.concat(initData)];
} else { } else {
if (!state.tasks && !state.tasks.length) { state.tasks = [...state.tasks.concat(data)];
state.tasks = [...data];
} else {
state.tasks = [...state.tasks.concat(data)];
}
} }
}, },
@ -169,13 +116,35 @@ const mutations = {
state.permanents = tasks || []; state.permanents = tasks || [];
}, },
// 清空标志位 任务 如切换角色等使用 /**
* 设置时间轴是否继续向上查任务
* @param {Object} state
* @param {Boolean} show
*/
setTopEnd(state, show) {
state.topEnd = show;
},
/**
* 设置时间轴是否继续向下查任务
* @param {Object} state
* @param {Boolean} show
*/
setBottomEnd(state, show) {
state.bottomEnd = show;
},
// 清空标志位 如切换角色等使用
clearEndFlag(state) { clearEndFlag(state) {
state.tasks = [];
state.topEnd = false; state.topEnd = false;
state.bottomEnd = false; state.bottomEnd = false;
}, },
// 清空定期任务
clearTasks(state) {
state.tasks = [];
},
/** /**
* 收到消息设置任务状态 * 收到消息设置任务状态
* @param {Object} state * @param {Object} state

1
src/store/task/state.js

@ -1,5 +1,6 @@
const state = { const state = {
scrollTop: 0, scrollTop: 0,
viewId: '', // 时间轴自动滚动的位置
isShrink: false, // true: 收起, false:展开 isShrink: false, // true: 收起, false:展开
tip: { tip: {
taskId: '', // 当前正在修改状态的任务的id taskId: '', // 当前正在修改状态的任务的id

12
src/utils/time.js

@ -100,6 +100,17 @@ const validateTimeIsToday = time => {
return timeDate.getFullYear() === date.getFullYear() && timeDate.getMonth() === date.getMonth() && timeDate.getDate() === date.getDate(); return timeDate.getFullYear() === date.getFullYear() && timeDate.getMonth() === date.getMonth() && timeDate.getDate() === date.getDate();
}; };
/**
* 检测两个日期是否相同
* @param {number | date} time
* @param {number | date} value
* @param {string} cycle 传入 day 将会比较 day month和 year
*/
const isSame = (time, value, cycle) => {
const str = dayjs(time).isSame(value, cycle);
return str;
};
/** /**
* 格式化开始时间 * 格式化开始时间
* @param {Number} timestamp 时间戳 * @param {Number} timestamp 时间戳
@ -344,6 +355,7 @@ export default {
convertTime, convertTime,
secondToMinute, secondToMinute,
setTimestampToStr, setTimestampToStr,
isSame,
formatBeginTime, formatBeginTime,
formatDuration, formatDuration,
formatDurationToObject, formatDurationToObject,

Loading…
Cancel
Save