diff --git a/.eslintignore b/.eslintignore
index a3f24f7..5c40e6a 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -10,3 +10,4 @@ postcss.config.js
vue.config.js
src/common/styles/index.css
src/pages.json
+src/manifest.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 38b457d..26ee83f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,204 +1,234 @@
-# 0.1.0 (2021-08-18)
+# 0.1.0 (2021-08-31)
### 🌟 新功能
范围|描述|commitId
--|--|--
- 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)
- default plugin | 添加默认插件;项目列表;全局项目最大高度设置 | [ed1d87b](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/ed1d87b)
- - | indexedDB | [687394e](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/687394e)
- pinch | alloy finger实现图片的pinch放大缩小 | [de01343](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/de01343)
- plugin | 插件添加了token及param参数 | [aeb0292](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/aeb0292)
- - | post 封装 | [da52e94](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/da52e94)
- - | tall插件封装 | [1bcb920](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/1bcb920)
- task status | 任务状态切换未完 | [7ffd135](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/7ffd135)
- - | ws storage | [21b3a06](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/21b3a06)
- - | 上传逻辑变化 | [3ff1dc2](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/3ff1dc2)
- - | 任务状态时间显示 | [56f5183](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/56f5183)
- - | 任务进行中状态数字 | [27b7326](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/27b7326)
- - | 全局插件及默认插件位置修改 | [6c80d08](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/6c80d08)
- - | 向右箭头图标变化 | [8e9ca55](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/8e9ca55)
- - | 字体大小更改 | [82cfdd4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/82cfdd4)
- - | 存token | [b8a178d](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b8a178d)
- - | 定期任务面板骨架屏添加 | [b2698c0](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b2698c0)
- 富文本插件 | 富文本插件demo测试 | [ed3d644](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/ed3d644)
- - | 导入wbs | [1224fcb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/1224fcb)
- - | 导入项目,更新项目 | [5e06adf](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5e06adf)
- - | 导入项目后提示并打开项目详情页 | [410f527](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/410f527)
- - | 引入dayjs | [29b8b93](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/29b8b93)
- - | 提交到本地 | [9cbe411](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/9cbe411)
- - | 插件参数处理调整 | [a3e68d3](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a3e68d3)
- - | 插件数据获取 | [5b91bdc](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5b91bdc)
- - | 日历定位;合并 | [ea3f937](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/ea3f937)
- - | 日常任务插件调整 | [c1881f9](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c1881f9)
- - | 时间基准线,默认插件 | [a33ba1e](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a33ba1e)
- - | 时间轴修改状态时提示框增加 | [e841392](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e841392)
- - | 时间轴界面 | [33927e9](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/33927e9)
- - | 标题栏变化 | [3898cfe](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/3898cfe)
- - | 标题栏变化 | [c0fcd9d](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c0fcd9d)
- - | 标题栏角色栏全局任务组件新建 | [0500cb4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0500cb4)
- - | 模拟接口测试 | [69e7931](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/69e7931)
- - | 添加时间轴上下滚动 | [2b81bbc](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/2b81bbc)
- - | 点击日历日期查询项目列表 | [c458385](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c458385)
- - | 角色栏实现 | [94cd671](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/94cd671)
- - | 设置小红点 | [9316bcb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/9316bcb)
- - | 距调整pc端 | [5069aa1](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5069aa1)
- - | 配置默认插件接口 | [f0c177d](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/f0c177d)
- - | 面变化首页变化 | [5e860f1](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5e860f1)
- - | 项目api url设置 | [6cd5245](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/6cd5245)
- - | 项目列表, 项目url | [32e005b](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/32e005b)
- - | 首页项目样式改变 | [8514c85](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/8514c85)
+ - | api封装 | [7d4edfc](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7d4edfc)
+ bind phone | 图形验证码;短信验证码;绑定手机号 | [93ffea2](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/93ffea2)
+ - | cache indexedDB处理 | [3388967](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/3388967)
+ calendar, tall.js | 上下滑动切换日历的模式,tall.js中domain根据环境变量切换 | [364e25d](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/364e25d)
+ - | db store | [6414c4f](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/6414c4f)
+ default plugin | 添加默认插件;项目列表;全局项目最大高度设置 | [ed1d87b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/ed1d87b)
+ - | indexedDB | [687394e](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/687394e)
+ mp | 兼容小程序,去除window,document等 | [9178255](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/9178255)
+ - | network控制本地缓存的使用 | [858429e](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/858429e)
+ phone-bind | 验证码validate | [a427250](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a427250)
+ pinch | alloy finger实现图片的pinch放大缩小 | [de01343](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/de01343)
+ plugin | 插件添加了token及param参数 | [aeb0292](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/aeb0292)
+ - | post 封装 | [da52e94](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/da52e94)
+ - | tall插件封装 | [1bcb920](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/1bcb920)
+ task status | 任务状态切换未完 | [7ffd135](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7ffd135)
+ - | ws storage | [21b3a06](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/21b3a06)
+ - | 上传逻辑变化 | [3ff1dc2](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/3ff1dc2)
+ - | 任务状态时间显示 | [56f5183](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/56f5183)
+ - | 任务进行中状态数字 | [27b7326](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/27b7326)
+ - | 全局插件及默认插件位置修改 | [6c80d08](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/6c80d08)
+ - | 向右箭头图标变化 | [8e9ca55](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/8e9ca55)
+ - | 字体大小更改 | [82cfdd4](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/82cfdd4)
+ - | 存token | [b8a178d](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/b8a178d)
+ - | 定期任务面板骨架屏添加 | [b2698c0](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/b2698c0)
+ 富文本插件 | 富文本插件demo测试 | [ed3d644](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/ed3d644)
+ - | 导入wbs | [1224fcb](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/1224fcb)
+ - | 导入项目,更新项目 | [5e06adf](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5e06adf)
+ - | 导入项目后提示并打开项目详情页 | [410f527](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/410f527)
+ - | 引入dayjs | [29b8b93](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/29b8b93)
+ - | 提交到本地 | [9cbe411](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/9cbe411)
+ - | 插件参数处理调整 | [a3e68d3](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a3e68d3)
+ - | 插件数据获取 | [5b91bdc](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5b91bdc)
+ - | 日历定位;合并 | [ea3f937](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/ea3f937)
+ - | 日常任务插件调整 | [c1881f9](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c1881f9)
+ - | 时间基准线,默认插件 | [a33ba1e](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a33ba1e)
+ - | 时间轴修改状态时提示框增加 | [e841392](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/e841392)
+ - | 时间轴界面 | [33927e9](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/33927e9)
+ - | 标题栏变化 | [3898cfe](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/3898cfe)
+ - | 标题栏变化 | [c0fcd9d](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c0fcd9d)
+ - | 标题栏角色栏全局任务组件新建 | [0500cb4](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/0500cb4)
+ - | 检查交付物 | [9d92be5](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/9d92be5)
+ - | 模拟接口测试 | [69e7931](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/69e7931)
+ - | 添加内置插件-交付物 | [6e0bc46](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/6e0bc46)
+ - | 添加子任务插件 子项目插件 | [7bda7e2](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7bda7e2)
+ - | 添加时间轴上下滚动 | [2b81bbc](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/2b81bbc)
+ - | 添加项目排序 | [a0b491b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a0b491b)
+ - | 点击日历日期查询项目列表 | [c458385](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c458385)
+ - | 细节调整,添加project-webview | [4d9050b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4d9050b)
+ - | 绑定手机号 | [52e0352](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/52e0352)
+ - | 缓存修改 | [63e1f0d](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/63e1f0d)
+ - | 角色栏实现 | [94cd671](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/94cd671)
+ - | 设置小红点 | [9316bcb](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/9316bcb)
+ - | 距调整pc端 | [5069aa1](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5069aa1)
+ - | 适配小程序;小程序登录 | [cefc0eb](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/cefc0eb)
+ - | 配置默认插件接口 | [f0c177d](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/f0c177d)
+ - | 面变化首页变化 | [5e860f1](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5e860f1)
+ - | 项目api url设置 | [6cd5245](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/6cd5245)
+ - | 项目列表, 项目url | [32e005b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/32e005b)
+ - | 首页项目样式改变 | [8514c85](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/8514c85)
### 🎨 代码样式
范围|描述|commitId
--|--|--
- - | calendar注释 | [a2ec112](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a2ec112)
- - | 代码审查 | [d75134c](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/d75134c)
- - | 代码格式细节调整 | [cb2532b](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/cb2532b)
- - | 任务快捷方式图标增加 | [4aba872](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4aba872)
- - | 修改角色样式 | [73e268e](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/73e268e)
- - | 删除calendar中多余的console | [e339eec](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e339eec)
- - | 删除console.log | [5064a38](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5064a38)
- - | 删除index中没用的alert代码 | [9c9eec7](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/9c9eec7)
- - | 删除mock,console;upload添加loading | [99d42e2](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/99d42e2)
- - | 删除多余字段 | [5ae3973](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5ae3973)
- - | 删除插件携带的多余文件 | [0f392bb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0f392bb)
- - | 删除没用代码 | [34b20e1](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/34b20e1)
- - | 图标修改 | [54bca09](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/54bca09)
- - | 无基本变化 | [21ac4bb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/21ac4bb)
- - | 日常任务修改 | [dfa7ee2](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/dfa7ee2)
- - | 更新代码 | [8c27e68](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/8c27e68)
- - | 更新代码 | [1f40a76](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/1f40a76)
- - | 格式细节调整 | [b907a03](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b907a03)
- - | 添加插件数据 | [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)
+ - | calendar注释 | [a2ec112](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a2ec112)
+ - | indexedDB.js格式整理 | [b0d3a36](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/b0d3a36)
+ - | 代码审查 | [d75134c](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/d75134c)
+ - | 代码格式细节调整 | [cb2532b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/cb2532b)
+ - | 任务快捷方式图标增加 | [4aba872](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4aba872)
+ - | 修改角色样式 | [73e268e](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/73e268e)
+ - | 删除calendar中多余的console | [e339eec](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/e339eec)
+ - | 删除console.log | [5064a38](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5064a38)
+ - | 删除index中没用的alert代码 | [9c9eec7](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/9c9eec7)
+ - | 删除mock,console;upload添加loading | [99d42e2](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/99d42e2)
+ - | 删除多余字段 | [5ae3973](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5ae3973)
+ - | 删除插件携带的多余文件 | [0f392bb](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/0f392bb)
+ - | 删除没用代码 | [34b20e1](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/34b20e1)
+ - | 图标修改 | [54bca09](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/54bca09)
+ - | 无基本变化 | [21ac4bb](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/21ac4bb)
+ - | 日常任务修改 | [dfa7ee2](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/dfa7ee2)
+ - | 更新代码 | [8c27e68](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/8c27e68)
+ - | 更新代码 | [1f40a76](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/1f40a76)
+ - | 格式细节调整 | [b907a03](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/b907a03)
+ - | 添加插件数据 | [2f11b42](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/2f11b42)
+ - | 组件新建 | [89c0035](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/89c0035)
+ - | 细节调整 | [2cfc09a](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/2cfc09a)
### 🐛 Bug 修复
范围|描述|commitId
--|--|--
- - | 1.时间轴数据渲染 2.时间基准线 | [d643af2](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/d643af2)
- 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)
- 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)
- 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)
- - | 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)
- - | 上下滚动时间轴 | [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)
- - | 任务开始时间延迟插件 | [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)
- - | 修改定期任务状态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)
- - | 修改报错 | [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)
- - | 修改角色栏组件 | [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)
- - | 切换日历时查询小红点 | [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)
- - | 定期任务插件 | [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)
- - | 定期任务骨架屏修改 | [8ff72dd](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/8ff72dd)
- - | 平车演示临时去掉项目快捷方式的toast提示 | [e0b2c23](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e0b2c23)
- - | 手动展开日常任务 | [0a4a622](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0a4a622)
- - | 提示信息显示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)
- - | 收到消息修改任务状态 | [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)
- - | 日常任务插件遍历时的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)
- - | 时间轴上下滑动 | [4d0ae46](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4d0ae46)
- - | 时间轴上下滚动数据加载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)
- - | 时间轴无任务时时间刻度加载修改 | [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)
- - | 监听时间基本点 | [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)
- - | 角色栏修改 | [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)
- - | 设置时间轴自动滚动到当前位置 | [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)
+ - | 1.时间轴数据渲染 2.时间基准线 | [d643af2](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/d643af2)
+ - | api 存storage | [81032ba](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/81032ba)
+ ID1000343 | 解决向下预加载查询参数时间没+1颗粒度;以及滚动加载颗粒度写死的问题 | [940603a](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/940603a), closes [#ID1000343](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/issues/ID1000343)
+ plugin | 插件解析机制完善 | [0f5a27d](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/0f5a27d)
+ project title | 项目标题修改; 切换角色移除script | [5c20017](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5c20017)
+ roles | 修复默认显示不是我的角色的问题 | [b69f94f](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/b69f94f)
+ role | 切换角色的逻辑修正完善 | [4ae534f](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4ae534f)
+ task任务逻辑完善 | 减少初始global及regular的不必要请求 | [bd4bd38](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/bd4bd38)
+ - | title.vue根据页面栈显示返回按钮;标题文本超出显示... | [0cbacf4](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/0cbacf4)
+ - | 上下滑动加载定期任务 | [4090d89](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4090d89)
+ - | 上下滚动时间轴 | [d533a01](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/d533a01)
+ - | 下拉加载定期任务传参,时间格式化修改 | [0b95a0e](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/0b95a0e)
+ - | 任务开始时间延迟插件 | [992a313](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/992a313)
+ - | 修改main | [749ae9a](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/749ae9a)
+ - | 修改定期任务状态0和4时不加载圆圈 | [30e352f](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/30e352f)
+ - | 修改小红点传参 | [87b20fd](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/87b20fd)
+ - | 修改报错 | [531c14d](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/531c14d)
+ - | 修改接口路径 | [df6acf2](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/df6acf2)
+ - | 修改角色栏组件 | [a54c601](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a54c601)
+ - | 切换到默认项目角色没有激活状态的bug | [438d448](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/438d448)
+ - | 切换日历时查询小红点 | [7091789](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7091789)
+ - | 初始展示角色修改 | [2ac4053](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/2ac4053)
+ - | 定期任务key值修改 | [c6688db](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c6688db)
+ - | 定期任务接口 | [aa4981c](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/aa4981c)
+ - | 定期任务插件 | [92b3254](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/92b3254)
+ - | 定期任务未加载时,显示空的时间轴并能上下滑动 | [ce38093](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/ce38093)
+ - | 定期任务本地缓存和api赋值,未完成 | [5a10856](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5a10856)
+ 定期任务本地缓存和api赋值,未完成 | 定期任务本地缓存和api赋值,未完成 | [b22a366](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/b22a366)
+ - | 定期任务骨架屏修改 | [8ff72dd](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/8ff72dd)
+ - | 平车演示临时去掉项目快捷方式的toast提示 | [e0b2c23](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/e0b2c23)
+ - | 手动展开日常任务 | [0a4a622](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/0a4a622)
+ - | 提示信息显示bug及日常任务收缩问题 | [f2f06c5](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/f2f06c5)
+ - | 插件bug解决 | [41257eb](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/41257eb)
+ - | 收到消息修改任务状态 | [c378063](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c378063)
+ - | 日历无任务时添加小绿点,时间轴刻度无任务不显示时分 | [0f90868](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/0f90868)
+ - | 日常任务html数据查验 | [880ce5c](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/880ce5c)
+ - | 日常任务插件遍历时的key值修改 | [cd26285](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/cd26285)
+ - | 日常任务插件面板高度修改 | [249f9e4](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/249f9e4)
+ - | 时间轴上下滑动 | [4d0ae46](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4d0ae46)
+ - | 时间轴上下滚动数据加载bug修改 | [e82ede4](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/e82ede4)
+ - | 时间轴插件 | [225d3cc](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/225d3cc)
+ - | 时间轴无任务时时间刻度加载修改 | [4921672](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4921672)
+ - | 时间轴滚动位置修改 | [551da63](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/551da63)
+ - | 时间轴骨架屏修改 | [ca78d02](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/ca78d02)
+ - | 检查交付物传参修改 | [ebe0031](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/ebe0031)
+ - | 检查交付物传参修改 | [37b51bc](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/37b51bc)
+ - | 滚动id函数优化 | [b351b67](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/b351b67)
+ - | 监听时间基本点 | [033fca0](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/033fca0)
+ - | 角色显示状态修改 | [7d3b906](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7d3b906)
+ - | 角色栏修改 | [19228d6](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/19228d6)
+ - | 解决时间轴报错 | [da1eece](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/da1eece)
+ - | 设置时间轴自动滚动到当前位置 | [a3474f8](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a3474f8)
+ - | 调试定期任务bug;不能合并使用 | [d641312](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/d641312)
+ - | 跳转详情页返回路径修改 | [c5e17c0](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c5e17c0)
+ - | 骨架屏替换 | [e9fdd71](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/e9fdd71)
### 📝 文档
范围|描述|commitId
--|--|--
- - | README.md | [ab0eb05](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/ab0eb05)
+ - | README.md | [ab0eb05](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/ab0eb05)
### 🔧 测试
范围|描述|commitId
--|--|--
- - | 暂时移除了jest浏览器配置 | [5088d01](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5088d01)
- - | 添加测试,测试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)
+ - | 暂时移除了jest浏览器配置 | [5088d01](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5088d01)
+ - | 添加测试,测试utils/time.js的computeDurationText | [e758010](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/e758010)
+ - | 禁用任务开始操作 | [b5425db](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/b5425db)
### 🔨 代码重构
范围|描述|commitId
--|--|--
- calendar | 日历细节调整 | [1a8d6bf](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/1a8d6bf)
- - | project 代码健壮性完善 | [a3202c5](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a3202c5)
- store/home | 删除store/home | [db8a3b4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/db8a3b4)
- task beginTime | 格式化任务开始时间 | [fbc0301](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/fbc0301)
- template | eslint prettier sass uview tailwindcss | [9c966a1](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/9c966a1)
- tips | 修改任务状态方法重构 | [b57d3ac](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b57d3ac)
- tip | 任务状态显示及tip组件数据的重构 | [78a5750](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/78a5750)
- title.vue | 移除测试的repeat; 样式细节调整 | [c32d2bd](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c32d2bd)
- - | 下滑时间轴添加备注 | [4fd20e3](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4fd20e3)
- - | 任务状态重构 | [4693655](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4693655)
- - | 删除多余的weekmode store里的东西 | [0841fe0](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0841fe0)
- - | 删除多余的技术验证界面 | [542ae5b](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/542ae5b)
- - | 界面样式调整 | [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)
+ calendar | 日历细节调整 | [1a8d6bf](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/1a8d6bf)
+ - | project 代码健壮性完善 | [a3202c5](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a3202c5)
+ - | puppeteer升级v10 | [f02b0e7](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/f02b0e7)
+ store/home | 删除store/home | [db8a3b4](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/db8a3b4)
+ tailwindcss | tailwindcss CDN引入;移除相关配置文件及包;开启treeShaking | [15485a0](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/15485a0)
+ task beginTime | 格式化任务开始时间 | [fbc0301](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/fbc0301)
+ template | eslint prettier sass uview tailwindcss | [9c966a1](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/9c966a1)
+ tips | 修改任务状态方法重构 | [b57d3ac](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/b57d3ac)
+ tip | 任务状态显示及tip组件数据的重构 | [78a5750](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/78a5750)
+ title.vue | 移除测试的repeat; 样式细节调整 | [c32d2bd](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c32d2bd)
+ - | 下滑时间轴添加备注 | [4fd20e3](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4fd20e3)
+ - | 任务状态重构 | [4693655](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4693655)
+ - | 删除多余的weekmode store里的东西 | [0841fe0](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/0841fe0)
+ - | 删除多余的技术验证界面 | [542ae5b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/542ae5b)
+ - | 只保留project内容 | [7781c7b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7781c7b)
+ - | 界面样式调整 | [4367249](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4367249)
+ - | 重构store分层 | [5f6fff8](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5f6fff8)
+ - | 重构时间刻度渲染任务 | [5cf7d08](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5cf7d08)
### 🚀 性能优化
范围|描述|commitId
--|--|--
- - | 1.时间轴筛选相同的时间替换数据 2.整理代码 | [e082ccb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/e082ccb)
- - | 修改代码格式 | [14123d7](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/14123d7)
- - | 修改定期任务骨架屏高度 | [909a734](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/909a734)
- - | 插件查询及展示 | [4dba770](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/4dba770)
- - | 整理代码 | [7a55315](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/7a55315)
- - | 日历的更改 | [7353ac8](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/7353ac8)
- - | 测试接口 | [215e074](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/215e074)
- - | 组件文件夹新建 | [22bfe7b](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/22bfe7b)
- - | 组件文件夹新建 | [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)
+ - | 1.时间轴筛选相同的时间替换数据 2.整理代码 | [e082ccb](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/e082ccb)
+ - | 修改代码格式 | [14123d7](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/14123d7)
+ - | 修改定期任务骨架屏高度 | [909a734](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/909a734)
+ - | 小红点api缓存修改 | [e992343](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/e992343)
+ - | 插件查询及展示 | [4dba770](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4dba770)
+ - | 整理代码 | [7a55315](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7a55315)
+ - | 日历的更改 | [7353ac8](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7353ac8)
+ - | 测试接口 | [215e074](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/215e074)
+ - | 组件文件夹新建 | [22bfe7b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/22bfe7b)
+ - | 组件文件夹新建 | [17bb8c9](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/17bb8c9)
+ - | 组件文件夹新建 | [1421504](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/1421504)
+ - | 角色栏文字颜色修改 | [215c6b3](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/215c6b3)
+ - | 解决警告 | [c932b09](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c932b09)
### chore
范围|描述|commitId
--|--|--
- - | api 封装 | [8dcb8a2](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/8dcb8a2)
- - | env host修改 | [a79a4a5](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/a79a4a5)
- - | merge globals | [b0957cc](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/b0957cc)
- - | merge wrr | [5ccc7a5](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/5ccc7a5)
- - | mock | [51c24a5](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/51c24a5)
- package manifest | 去掉了摇树 | [f7c1dd4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/f7c1dd4)
- pwa 小程序 | 移除了pwa,alloyFinger添加平台判断 | [875fab4](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/875fab4)
- - | 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](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/db5afd5)
- 信息配置 | 配置eslint等配置 | [7421443](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/7421443)
- - | 修复不能build的问题 | [0b7b91e](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/0b7b91e)
- - | 删除多余的构建的命令 | [3f4eb2f](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/3f4eb2f)
+ - | api 封装 | [8dcb8a2](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/8dcb8a2)
+ - | env host修改 | [a79a4a5](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a79a4a5)
+ - | merge globals | [b0957cc](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/b0957cc)
+ - | merge wrr | [5ccc7a5](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5ccc7a5)
+ - | mock | [51c24a5](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/51c24a5)
+ node-sass | 替换node-sass为sass(dart-sass) | [c33169d](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c33169d)
+ package manifest | 去掉了摇树 | [f7c1dd4](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/f7c1dd4)
+ pwa 小程序 | 移除了pwa,alloyFinger添加平台判断 | [875fab4](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/875fab4)
+ - | uview-ui | [a9ea34b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a9ea34b)
+ v3.0.1 | tall api 地址从1.0改成了3.0 | [db5afd5](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/db5afd5)
+ 信息配置 | 配置eslint等配置 | [7421443](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7421443)
+ - | 修复不能build的问题 | [0b7b91e](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/0b7b91e)
+ - | 关掉了treeShaking | [3d9bac5](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/3d9bac5)
+ - | 删除vuedragable及修改运行端口为9000 | [c864f91](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c864f91)
+ - | 删除多余的构建的命令 | [3f4eb2f](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/3f4eb2f)
范围|描述|commitId
--|--|--
- - | 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)
- - | init | [c0f1deb](https://dd.tall.wiki/gitea/ccsens_fe/TALL-MUI-3/commits/c0f1deb)
+ - | style:index | [978f272](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/978f272)
+ - | !2 基础模板v1.1.0 | [f5e61dd](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/f5e61dd)
+ - | init | [c0f1deb](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c0f1deb)
diff --git a/README.md b/README.md
index 83bd0d8..c0ba61e 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@ yarn dev:h5
```
浏览器输入网址:
-127.0.0.1:8080/#/?u=1217647686598135808&p=1420652719055839232
+http://localhost:8080/tall/v3.0.1/#/?u=1217647686598135808&p=1420652719055839232
- u: userId
- p: projectId
- r: roleId
diff --git a/package.json b/package.json
index 5ca43c4..74c1510 100644
--- a/package.json
+++ b/package.json
@@ -29,12 +29,6 @@
"@dcloudio/uni-h5": "^2.0.0-31920210709003",
"@dcloudio/uni-helper-json": "*",
"@dcloudio/uni-i18n": "^2.0.0-31920210709003",
- "@dcloudio/uni-mp-360": "^2.0.0-31920210709003",
- "@dcloudio/uni-mp-alipay": "^2.0.0-31920210709003",
- "@dcloudio/uni-mp-baidu": "^2.0.0-31920210709003",
- "@dcloudio/uni-mp-kuaishou": "^2.0.0-31920210709003",
- "@dcloudio/uni-mp-qq": "^2.0.0-31920210709003",
- "@dcloudio/uni-mp-toutiao": "^2.0.0-31920210709003",
"@dcloudio/uni-mp-vue": "^2.0.0-31920210709003",
"@dcloudio/uni-mp-weixin": "^2.0.0-31920210709003",
"@dcloudio/uni-quickapp-native": "^2.0.0-31920210709003",
@@ -62,7 +56,6 @@
"@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.0-31920210709003",
"@dcloudio/webpack-uni-mp-loader": "^2.0.0-31920210709003",
"@dcloudio/webpack-uni-pages-loader": "^2.0.0-31920210709003",
- "@tailwindcss/postcss7-compat": "^2.2.7",
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
@@ -85,17 +78,14 @@
"lint-staged": "^11.0.0",
"mini-types": "*",
"miniprogram-api-typings": "*",
- "node-sass": "^4.14.1",
"postcss": "^7.0.36",
- "postcss-class-rename": "^1.0.1",
"postcss-comment": "^2.0.0",
"prettier": "^2.2.1",
"puppeteer": "^10.2.0",
"right-pad": "^1.0.1",
+ "sass": "^1.38.2",
"sass-loader": "^8.0.2",
- "tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.2.7",
"vue-cli-plugin-commitlint": "~1.0.12",
- "vue-cli-plugin-eruda": "^1.3.0",
"vue-template-compiler": "^2.6.11"
},
"browserslist": [
diff --git a/postcss.config.js b/postcss.config.js
index a518d40..3e4e185 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -1,38 +1,21 @@
-const path = require('path');
-
-module.exports = {
- parser: require('postcss-comment'),
- plugins: [
- require('postcss-import')({
- resolve(id, basedir, importOptions) {
- if (id.startsWith('~@/')) {
- return path.resolve(process.env.UNI_INPUT_DIR, id.substr(3));
- } else if (id.startsWith('@/')) {
- return path.resolve(process.env.UNI_INPUT_DIR, id.substr(2));
- } else if (id.startsWith('/') && !id.startsWith('//')) {
- return path.resolve(process.env.UNI_INPUT_DIR, id.substr(1));
- }
- return id;
- },
- }),
- // require('autoprefixer')({ remove: process.env.UNI_PLATFORM !== 'h5' }),
- require('@dcloudio/vue-cli-plugin-uni/packages/postcss'),
- require('tailwindcss')({ config: "./tailwind.config.js" }),
- ...(
- process.env.UNI_PLATFORM !== 'h5'
- ? [
- require("postcss-class-rename")({
- "\\\\:": "--",
- "\\\\/": "--",
- "\\\\.": "--",
- ".:": "--",
- "\\\*": "--",
- })
- ] : [
- require("autoprefixer")({
- remove: true,
- }),
- ]
- )
- ],
-};
+const path = require('path');
+
+module.exports = {
+ parser: require('postcss-comment'),
+ plugins: [
+ require('postcss-import')({
+ resolve(id, basedir, importOptions) {
+ if (id.startsWith('~@/')) {
+ return path.resolve(process.env.UNI_INPUT_DIR, id.substr(3));
+ } else if (id.startsWith('@/')) {
+ return path.resolve(process.env.UNI_INPUT_DIR, id.substr(2));
+ } else if (id.startsWith('/') && !id.startsWith('//')) {
+ return path.resolve(process.env.UNI_INPUT_DIR, id.substr(1));
+ }
+ return id;
+ },
+ }),
+ require('autoprefixer')({ remove: process.env.UNI_PLATFORM !== 'h5' }),
+ require('@dcloudio/vue-cli-plugin-uni/packages/postcss'),
+ ],
+};
diff --git a/public/index.html b/public/index.html
index 37ae61b..e776e3a 100644
--- a/public/index.html
+++ b/public/index.html
@@ -14,6 +14,7 @@
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
document.write('')
+
diff --git a/rest/http-client.env.json b/rest/http-client.env.json
new file mode 100644
index 0000000..34ce0f9
--- /dev/null
+++ b/rest/http-client.env.json
@@ -0,0 +1,15 @@
+{
+ "$shared": {
+ "version": "v1",
+ "identifier": "wally",
+ "credential": "111111"
+ },
+ "dev": {
+ "name": "dev",
+ "url": "http://192.168.0.99/gateway"
+ },
+ "local": {
+ "version": "v2",
+ "url": "http://192.168.0.99/gateway"
+ }
+}
diff --git a/rest/project.http b/rest/project.http
new file mode 100644
index 0000000..48179b8
--- /dev/null
+++ b/rest/project.http
@@ -0,0 +1,39 @@
+
+### login
+# @name login
+POST https://test.tall.wiki/gateway/tall/v1.0/users/signin
+content-type: application/json;charset=utf-8
+
+{
+ "client": 1,
+ "data": {
+ "credential": "999999",
+ "identifier": "song"
+ },
+ "scene": 0,
+ "type": 3
+}
+
+
+
+### 导入插件
+# POST http://127.0.0.1:7220/plugin/import
+POST http://test.tall.wiki/gateway/pluginshop/plugin/import
+Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
+Authorization: Bearer {{login.response.body.$.data.token}}
+
+title
+------WebKitFormBoundary7MA4YWxkTrZu0gW
+Content-Disposition: form-data; name="param"; filename="插件导入表格.xlsx"
+Content-Type: xlsx
+
+< E:\ccsens\plugins\插件导入表格.xlsx
+
+------WebKitFormBoundary7MA4YWxkTrZu0gW--
+
+
+
+### 更新redis内的插件信息
+POST http://test.tall.wiki/gateway/pluginshop/plugin/updatePluginOfRedis
+content-type: application/json;charset=utf-8
+Authorization: Bearer {{login.response.body.$.data.token}}
diff --git a/src/.hbuilderx/launch.json b/src/.hbuilderx/launch.json
deleted file mode 100644
index e5aaa3e..0000000
--- a/src/.hbuilderx/launch.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
- // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
- "version": "0.0",
- "configurations": [{
- "type": "uniCloud",
- "default": {
- "launchtype": "local"
- }
- }
- ]
-}
diff --git a/src/App.vue b/src/App.vue
index f78c549..e36ab95 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,8 +1,17 @@
diff --git a/src/apis/plugin.js b/src/apis/plugin.js
index 0899cca..47114ca 100644
--- a/src/apis/plugin.js
+++ b/src/apis/plugin.js
@@ -9,6 +9,12 @@ const install = (Vue, vm) => {
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);
+ // 提交交付物
+ vm.$u.api.saveDeliver = param => vm.$u.post(`${uni.$t.domain}/deliver/save`, param);
+ // 查询任务的交付物历史记录
+ vm.$u.api.queryDeliverOfTask = param => vm.$u.post(`${uni.$t.domain}/deliver/queryDeliverOfTask`, param);
+ // 检查交付物
+ vm.$u.api.checkDeliver = param => vm.$u.post(`${uni.$t.domain}/deliver/checkDeliver`, param);
};
export default { install };
diff --git a/src/apis/role.js b/src/apis/role.js
index 1e1d5be..d0cc264 100644
--- a/src/apis/role.js
+++ b/src/apis/role.js
@@ -1,7 +1,9 @@
const install = (Vue, vm) => {
vm.$u.api = { ...vm.$u.api } || {};
- //根据时间基准点和角色查找定期任务
+ //根据项目id查找角色
vm.$u.api.findShowRole = param => vm.$u.post(`${uni.$t.domain}/role/show`, param);
+ //根据项目id查找所有成员
+ vm.$u.api.queryChecker = param => vm.$u.post(`${uni.$t.domain}/deliver/queryChecker`, param);
};
export default { install };
diff --git a/src/apis/tall.js b/src/apis/tall.js
index 121373b..d21b334 100644
--- a/src/apis/tall.js
+++ b/src/apis/tall.js
@@ -1,10 +1,36 @@
const apiUrl = process.env.VUE_APP_API_URL;
-const tall = `${apiUrl}/tall3/v3.0`;
+export const tall = `${apiUrl}/tall3/v3.0`;
+
+import { mp } from '@/config/user.js';
+
+// 登录
+export const login = {
+ async index(params) {
+ try {
+ /* #ifdef MP-WEIXIN */
+ params = await mp();
+ /* #endif */
+ const data = await uni.$u.http.post(`${tall}/users/signin`, params);
+ return data;
+ } catch (error) {
+ throw new Error(error);
+ }
+ },
+};
const install = (Vue, vm) => {
vm.$u.api = { ...vm.$u.api } || {};
+ // 登录
+ vm.$u.api.signin = params => login.index(params);
+ // 获取图片验证码
+ vm.$u.api.getImageCode = () => vm.$u.get(`${tall}/users/code`);
+ // 获取短信验证码
+ vm.$u.api.getSmsCode = params => vm.$u.get(`${tall}/users/smscode`, params);
// 根据userId获取token
vm.$u.api.getToken = userId => vm.$u.get(`${tall}/users/userId`, { userId });
+ // 绑定手机号
+ vm.$u.api.phoneBind = (phone, smsCode) => vm.$u.http.post(`${tall}/users/binding`, { phone, smsCode });
+
// 获取项目列表
vm.$u.api.getProjects = (startTime, endTime) => vm.$u.post(`${tall}/project/query`, { startTime, endTime });
// 查询日历是否有小红点
diff --git a/src/common/styles/index.css b/src/common/styles/index.css
deleted file mode 100644
index df5a720..0000000
--- a/src/common/styles/index.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/* ./src/common/styles/index.css */
-
-/*! @import */
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
diff --git a/src/components/Calendar/Calendar.vue b/src/components/Calendar/Calendar.vue
deleted file mode 100644
index 57afd47..0000000
--- a/src/components/Calendar/Calendar.vue
+++ /dev/null
@@ -1,473 +0,0 @@
-
-
-
- {{ timeStr }}
-
-
-
-
-
- {{ week }}
-
-
-
-
-
-
-
-
-
-
-
- {{ item.time.getDate() }}
-
-
-
-
-
-
-
-
-
- {{ item.time.getDate() }}
-
-
-
-
-
-
-
- {{ item.time.getDate() }}
-
-
-
-
-
-
-
-
-
-
-
- 今日
-
-
-
-
-
-
diff --git a/src/components/Calendar/generateDates.js b/src/components/Calendar/generateDates.js
deleted file mode 100644
index c08fc6a..0000000
--- a/src/components/Calendar/generateDates.js
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- *此函数的作用是根据传入的一个日期,返回这一周的日期或者这一个月的日期,
- * 如果是月的话注意还包含上个月和下个月的日期,月的话总共数据有 6 * 7 = 42个
- *
- */
-/*
- * 时间格式化函数
- * 重要提示,微信小程序new Date('2020-04-16')在ios中无法获取时间对象
- * 解决方式: 建议将时间都格式化成'2020/04/16 00:00:00'的格式
- * 函数示例: formatDate(new Date(), 'YYYY/MM/dd hh:mm:ss')
- */
-export const formatDate = (date, fmt) => {
- if (/(y+)/.test(fmt)) {
- fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
- }
- let o = {
- 'M+': date.getMonth() + 1,
- 'd+': date.getDate(),
- 'h+': date.getHours(),
- 'm+': date.getMinutes(),
- 's+': date.getSeconds(),
- };
- for (let k in o) {
- if (new RegExp(`(${k})`).test(fmt)) {
- let str = o[k] + '';
- fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : padLeftZero(str));
- }
- }
- return fmt;
-};
-const padLeftZero = str => {
- return ('00' + str).substr(str.length);
-};
-
-// 判断是不是date对象
-export const judgeType = s => {
- // 函数返回数据的具体类型
- return Object.prototype.toString.call(s).slice(8, -1);
-};
-
-export const equalDate = (d1, d2) => {
- let result = false;
- if (d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate()) {
- result = true;
- }
- return result;
-};
-
-/* 比较时间,时间格式为2020-04-04
- */
-export const dateEqual = (before, after) => {
- before = new Date(before.replace('-', '/').replace('-', '/'));
- after = new Date(after.replace('-', '/').replace('-', '/'));
- if (before.getTime() - after.getTime() === 0) {
- return true;
- } else {
- return false;
- }
-};
-
-export const gegerateDates = (date = new Date(), type = 'week') => {
- const result = [];
- if (judgeType(date) === 'Date') {
- // 年,月,日
- const y = date.getFullYear();
- const m = date.getMonth();
- const d = date.getDate();
- const days = new Date(y, m + 1, 0).getDate();
- // 获取日期是星期几
- // let weekIndex = date.getDay() === 0 ? 7 : date.getDay();
- let weekIndex = date.getDay();
- if (type === 'month') {
- const dobj = new Date(y, m, 1);
- // weekIndex = dobj.getDay() === 0 ? 7 : dobj.getDay();
- weekIndex = dobj.getDay();
- }
- if (type === 'week') {
- for (let i = weekIndex; i > 0; i--) {
- const dtemp = new Date(y, m, d);
- dtemp.setDate(dtemp.getDate() - i);
- result.push({
- time: dtemp,
- show: true,
- fullDate: formatDate(dtemp, 'yyyy-MM-dd'),
- isToday: equalDate(new Date(), dtemp),
- });
- }
- for (let i = 0; i <= 7 - weekIndex; i++) {
- const dtemp = new Date(y, m, d);
- dtemp.setDate(dtemp.getDate() + i);
- result.push({
- time: dtemp,
- show: true,
- fullDate: formatDate(dtemp, 'yyyy-MM-dd'),
- isToday: equalDate(new Date(), dtemp),
- });
- }
- } else if (type === 'month') {
- // 上个月
- for (let i = weekIndex; i > 0; i--) {
- const dtemp = new Date(y, m, 1);
- dtemp.setDate(dtemp.getDate() - i);
- result.push({
- time: dtemp,
- show: false,
- fullDate: formatDate(dtemp, 'yyyy-MM-dd'),
- isToday: equalDate(new Date(), dtemp),
- });
- }
- // 这个月的日期
- for (let i = 0; i < days; i++) {
- const dtemp = new Date(y, m, 1);
- dtemp.setDate(dtemp.getDate() + i);
- result.push({
- time: dtemp,
- show: true,
- fullDate: formatDate(dtemp, 'yyyy-MM-dd'),
- isToday: equalDate(new Date(), dtemp),
- });
- }
- const len = 42 - result.length;
- // 下个月的日期
- for (let i = 1; i <= len; i++) {
- const dtemp = new Date(y, m + 1, 0);
- dtemp.setDate(dtemp.getDate() + i);
- result.push({
- time: dtemp,
- show: false,
- fullDate: formatDate(dtemp, 'yyyy-MM-dd'),
- isToday: equalDate(new Date(), dtemp),
- });
- }
- }
- }
- return result;
-};
diff --git a/src/components/Globals/Globals.vue b/src/components/Globals/Globals.vue
index bda592f..6b25305 100644
--- a/src/components/Globals/Globals.vue
+++ b/src/components/Globals/Globals.vue
@@ -12,12 +12,12 @@
-
+
-
+
-
+
-
+
@@ -58,9 +58,6 @@ export default {
methods: {
...mapMutations('task', ['setShrink']),
- getClass(col, row) {
- return [`row-span-${row}`, `col-span-${col}`];
- },
// 手动展开日常任务
openCard() {
diff --git a/src/components/Plugin/Plugin.vue b/src/components/Plugin/Plugin.vue
index 20d7127..b41d05c 100644
--- a/src/components/Plugin/Plugin.vue
+++ b/src/components/Plugin/Plugin.vue
@@ -2,19 +2,19 @@
@@ -26,7 +26,8 @@
-
+
+
@@ -42,10 +43,8 @@
diff --git a/src/components/Projects/Projects.vue b/src/components/Projects/Projects.vue
deleted file mode 100644
index 6338842..0000000
--- a/src/components/Projects/Projects.vue
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
-
- {{ index + 1 }}
-
-
-
-
- {{ project.name }}
-
- 进行中
-
-
-
- {{ $moment(+project.startTime).format('MM-DD HH:mm') }}
- 至
- {{ $moment(+project.endTime).format('MM-DD HH:mm') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/components/Roles/Roles.vue b/src/components/Roles/Roles.vue
index 6bf350f..aedbd69 100644
--- a/src/components/Roles/Roles.vue
+++ b/src/components/Roles/Roles.vue
@@ -3,9 +3,25 @@
-
-
- {{ item.name }}
+
+
+
+ {{ item.name }}
+
@@ -56,24 +72,29 @@ export default {
},
methods: {
- ...mapActions('task', ['handleRegularTask', 'getPermanent']),
+ ...mapActions('task', ['handleRegularTask']),
...mapMutations('role', ['setRoleId']),
...mapMutations('task', ['setPermanents', 'clearEndFlag']),
// 设置滚动位置
setCurrentRole(index) {
- console.log('index: ', index);
- const data = document.getElementsByClassName('tab-children');
- // 获取当前所有子元素 并插入到 tabList 列表中
- data.forEach(item => {
- this.tabList.push({
- width: item.clientWidth,
- left: item.offsetLeft,
- });
- });
- //当前滚动的位置
+ const query = uni.createSelectorQuery().in(this);
+ query
+ .selectAll('.tab-children')
+ .boundingClientRect(data => {
+ data.forEach(item => {
+ this.tabList.push({
+ width: item.width,
+ left: item.left,
+ });
+ });
+ })
+ .exec();
+
+ const system = uni.getSystemInfoSync(); // 获取系统信息
+ // 当前滚动的位置
let left = 0;
- let screenWidth = window.screen.width;
+ let screenWidth = system.windowWidth;
for (let i = 0; i < index; i++) {
left += this.tabList[i].width + this.tabList[i].left * 2;
}
@@ -90,7 +111,7 @@ export default {
this.clearPluginScript();
this.$nextTick(() => {
this.setRoleId(id);
- //改变index 即手动点击切换 我在此时将当前元素赋值给左边距 实现自动滚动
+ // 改变index 即手动点击切换 我在此时将当前元素赋值给左边距 实现自动滚动
this.setCurrentRole(index);
});
} catch (error) {
@@ -110,17 +131,6 @@ export default {
console.error('clearPluginScript error: ', error);
}
},
-
- // 设置文字颜色
- setColor(mine, id) {
- const { roleId } = this;
- // 是 我的角色 && 当前展示
- if (+mine === 1 && roleId === id) return 'default-tab-choice';
- // 是 我的角色 && 当前不展示
- if (+mine === 1 && roleId !== id) return 'default-tab-item';
- // 不是我的 && 当前展示
- if (+mine === 0 && roleId === id) return 'tab-choice';
- },
},
};
diff --git a/src/components/Skeleton/Skeleton.vue b/src/components/Skeleton/Skeleton.vue
index c5e2d59..6be25bb 100644
--- a/src/components/Skeleton/Skeleton.vue
+++ b/src/components/Skeleton/Skeleton.vue
@@ -133,10 +133,11 @@ export default {
width: 100%;
height: 16px;
background-color: #f2f3f5;
+ margin-top: 12px;
}
-.row-class:not(:first-child) {
- margin-top: 12px;
+.row-class:first-child {
+ margin-top: 0;
}
.row {
@@ -147,7 +148,7 @@ export default {
width: calc(100% - 48px);
}
-.row-class:nth-last-child(1) {
+.row-class:last-child {
width: 60%;
}
diff --git a/src/components/Skeleton/view.vue b/src/components/Skeleton/view.vue
deleted file mode 100644
index 4d27e62..0000000
--- a/src/components/Skeleton/view.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
- 基础用法
-
- content1
-
- 显示 title
-
- content2
-
- 显示头像(上面)
-
- content3
-
- 显示头像(左面)
-
- content4
-
- 显示banner
-
- content5
-
-
-
-
-
-
diff --git a/src/components/Skeleton/wisdomcar_mobile b/src/components/Skeleton/wisdomcar_mobile
deleted file mode 160000
index 2603a0b..0000000
--- a/src/components/Skeleton/wisdomcar_mobile
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 2603a0bc8b5036c399a5f28b93586072c4850c4b
diff --git a/src/components/TimeLine/TimeLine.vue b/src/components/TimeLine/TimeLine.vue
index efcc1ff..8896223 100644
--- a/src/components/TimeLine/TimeLine.vue
+++ b/src/components/TimeLine/TimeLine.vue
@@ -6,7 +6,7 @@
:lower-threshold="300"
scroll-y="true"
:upper-threshold="300"
- :scroll-into-view="viewId"
+ :scroll-into-view="scrollToTaskId"
@scroll="scroll"
@scrolltolower="handleScrollBottom"
@scrolltoupper="handleScrollTop"
@@ -22,13 +22,12 @@
@@ -137,11 +132,11 @@ export default {
margin-bottom: 8px;
margin-left: 15px;
}
-/deep/ .ml-2 {
+::deep .ml-2 {
margin-left: 16px;
}
-/deep/ .ml-3 {
+::deep .ml-3 {
margin-left: 20px;
}
diff --git a/src/components/TimeLine/component/TimeStatus.vue b/src/components/TimeLine/component/TimeStatus.vue
index 4042b07..d595e16 100644
--- a/src/components/TimeLine/component/TimeStatus.vue
+++ b/src/components/TimeLine/component/TimeStatus.vue
@@ -3,11 +3,11 @@
-
+
@@ -117,7 +117,7 @@ export default {
* 点击了图标 修改任务状态
* @param {object} event
*/
- changeStatus(event, process) {
+ changeStatus(process, event) {
if (process === 4) {
this.addTask();
return;
diff --git a/src/components/Tips/Tips.vue b/src/components/Tips/Tips.vue
index 36f8ac7..b485f10 100644
--- a/src/components/Tips/Tips.vue
+++ b/src/components/Tips/Tips.vue
@@ -19,12 +19,12 @@
>
{{ tip.text }}
- 取消
- 暂停
- 继续
- 重新开始
- 结束
- 确定
+ 取消
+ 暂停
+ 继续
+ 重新开始
+ 结束
+ 确定
@@ -48,7 +48,8 @@ export default {
},
mounted() {
- this.height = window.screen.height;
+ const system = uni.getSystemInfoSync();
+ this.height = system.windowHeight;
},
methods: {
@@ -65,7 +66,6 @@ export default {
async onChangeStatus(type) {
try {
const param = { id: this.tip.taskId, type };
- // TODO: 发请求
await uni.$u.api.updateTaskType(param);
if (type === 0) {
this.$t.ui.showToast('项目已重新开始');
@@ -77,6 +77,7 @@ export default {
this.$t.ui.showToast('项目结束');
}
this.tip.show = false;
+ // TODO: 更新界面 不要整体刷新
// location.reload();
// this.$router.go(0);
} catch (error) {
diff --git a/src/components/Title/Title.vue b/src/components/Title/Title.vue
index 0cfa13d..9088b61 100644
--- a/src/components/Title/Title.vue
+++ b/src/components/Title/Title.vue
@@ -1,6 +1,6 @@
-
+
{{ project.name }}
@@ -27,17 +27,6 @@ export default {
},
methods: {
- // 点击返回按钮
- onBack() {
- // eslint-disable-next-line no-undef
- const pages = getCurrentPages(); // 获取页面栈数组
- if (pages.length > 1) {
- uni.navigateBack();
- } else {
- this.$u.route('/', { u: this.userId });
- }
- },
-
// LWBS提示
lwbs() {
// this.$t.ui.showToast('LWBS');
@@ -59,7 +48,7 @@ export default {
diff --git a/src/components/Upload/Upload.vue b/src/components/Upload/Upload.vue
index cf3e802..84d8521 100644
--- a/src/components/Upload/Upload.vue
+++ b/src/components/Upload/Upload.vue
@@ -1,6 +1,6 @@
-
+
@@ -41,7 +41,7 @@ export default {
transform: translate3d(0, 50%, 0);
}
-/deep/ .uicon-plus {
+::deep .uicon-plus {
color: theme('colors.blue.500') !important;
}
diff --git a/src/components/ld-select/ld-select.vue b/src/components/ld-select/ld-select.vue
new file mode 100644
index 0000000..c8c2b92
--- /dev/null
+++ b/src/components/ld-select/ld-select.vue
@@ -0,0 +1,335 @@
+
+
+
+
+
+
+
+
+
+ {{ cancelText }}
+ {{ confirmText }}
+
+
+
+ {{ getLabelKeyValue(item) }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/uni-popup/message.js b/src/components/uni-popup/message.js
new file mode 100644
index 0000000..577dd33
--- /dev/null
+++ b/src/components/uni-popup/message.js
@@ -0,0 +1,22 @@
+export default {
+ created() {
+ if (this.type === 'message') {
+ // 不显示遮罩
+ this.maskShow = false;
+ // 获取子组件对象
+ this.childrenMsg = null;
+ }
+ },
+ methods: {
+ customOpen() {
+ if (this.childrenMsg) {
+ this.childrenMsg.open();
+ }
+ },
+ customClose() {
+ if (this.childrenMsg) {
+ this.childrenMsg.close();
+ }
+ },
+ },
+};
diff --git a/src/components/uni-popup/popup.js b/src/components/uni-popup/popup.js
new file mode 100644
index 0000000..b646013
--- /dev/null
+++ b/src/components/uni-popup/popup.js
@@ -0,0 +1,23 @@
+import message from './message.js';
+// 定义 type 类型:弹出类型:top/bottom/center
+const config = {
+ // 顶部弹出
+ top: 'top',
+ // 底部弹出
+ bottom: 'bottom',
+ // 居中弹出
+ center: 'center',
+ // 消息提示
+ message: 'top',
+ // 对话框
+ dialog: 'center',
+ // 分享
+ share: 'bottom',
+};
+
+export default {
+ data() {
+ return { config: config };
+ },
+ mixins: [message],
+};
diff --git a/src/components/uni-popup/uni-popup-dialog.vue b/src/components/uni-popup/uni-popup-dialog.vue
new file mode 100644
index 0000000..9102286
--- /dev/null
+++ b/src/components/uni-popup/uni-popup-dialog.vue
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
diff --git a/src/components/uni-popup/uni-popup-message.vue b/src/components/uni-popup/uni-popup-message.vue
new file mode 100644
index 0000000..fe401a7
--- /dev/null
+++ b/src/components/uni-popup/uni-popup-message.vue
@@ -0,0 +1,115 @@
+
+
+
+
+
+
diff --git a/src/components/uni-popup/uni-popup-share.vue b/src/components/uni-popup/uni-popup-share.vue
new file mode 100644
index 0000000..224a9b7
--- /dev/null
+++ b/src/components/uni-popup/uni-popup-share.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
+
diff --git a/src/components/uni-popup/uni-popup.vue b/src/components/uni-popup/uni-popup.vue
new file mode 100644
index 0000000..4d3b867
--- /dev/null
+++ b/src/components/uni-popup/uni-popup.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+
diff --git a/src/components/uni-transition/uni-transition.vue b/src/components/uni-transition/uni-transition.vue
new file mode 100644
index 0000000..9458e3b
--- /dev/null
+++ b/src/components/uni-transition/uni-transition.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/config/app.js b/src/config/app.js
index d9068ce..21c20e6 100644
--- a/src/config/app.js
+++ b/src/config/app.js
@@ -1,3 +1,4 @@
+// TODO: 环境变量设置
const version = '3.0.0';
export default {
diff --git a/src/config/task.js b/src/config/task.js
new file mode 100644
index 0000000..95327d7
--- /dev/null
+++ b/src/config/task.js
@@ -0,0 +1,2 @@
+// 每页加载颗粒度的个数
+export default { pageCount: 10 };
diff --git a/src/config/user.js b/src/config/user.js
new file mode 100644
index 0000000..a27a905
--- /dev/null
+++ b/src/config/user.js
@@ -0,0 +1,43 @@
+// 用户登录client
+export const clients = { mp: 0, h5: 1, android: 2, ios: 3 };
+
+// 用户登录类型
+export const types = {
+ mp: 0,
+ phone: 1,
+ email: 2,
+ username: 3,
+ wx: 4,
+ wx_web: 5,
+ wb: 6,
+};
+
+// 小程序获取参数
+export const mp = () => {
+ return new Promise((resolve, reject) => {
+ uni.login({
+ provider: 'weixin',
+ success(res) {
+ if (res.code) {
+ const params = {
+ client: uni.$t.user.clients['mp'],
+ type: uni.$t.user.types['mp'],
+ data: { identifier: res.code },
+ };
+ resolve(params);
+ } else {
+ reject(res.errMsg);
+ }
+ },
+ fail() {
+ console.log('fail');
+ reject('微信登录失败');
+ },
+ });
+ });
+};
+
+export default {
+ clients,
+ types,
+};
diff --git a/src/main.js b/src/main.js
index 178ac27..6ace7d3 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,19 +1,25 @@
+import App from './App';
+import Tall from '@/utils/tall';
import Vue from 'vue';
import dayjs from 'dayjs';
-import uView from 'uview-ui';
-import Tall from '@/utils/tall';
-import App from './App';
-import './common/styles/index.css';
+import plugin from '@/apis/plugin.js';
+import project from '@/apis/project.js';
+import request from '@/utils/request.js';
+import role from '@/apis/role.js';
import store from './store';
+import tall from '@/apis/tall.js';
+import task from '@/apis/task.js';
+import uView from 'uview-ui';
+import wbs from '@/apis/wbs.js';
//#ifdef H5
// import './registerServiceWorker';
-import AlloyFinger from 'alloyfinger';
-import AlloyFingerPlugin from 'alloyfinger/vue/alloy_finger_vue';
-Vue.use(AlloyFingerPlugin, { AlloyFinger });
+// import AlloyFinger from 'alloyfinger';
+// import AlloyFingerPlugin from 'alloyfinger/vue/alloy_finger_vue';
+// Vue.use(AlloyFingerPlugin, { AlloyFinger });
// indexedDB
-import indexedDB from '@/utils/indexedDB';
-Vue.use(indexedDB);
+// import indexedDB from '@/utils/indexedDB';
+// Vue.use(indexedDB);
//#endif
Vue.config.productionTip = false;
@@ -21,22 +27,14 @@ Vue.prototype.$moment = dayjs;
Vue.use(uView);
Vue.use(Tall);
+uni.$moment = dayjs;
+
dayjs.locale('zh-cn');
App.mpType = 'app';
const app = new Vue({ ...App, store });
-import request from '@/utils/request.js';
-import tall from '@/apis/tall.js';
-import project from '@/apis/project.js';
-import task from '@/apis/task.js';
-import plugin from '@/apis/plugin.js';
-import role from '@/apis/role.js';
-import wbs from '@/apis/wbs.js';
-
-window.vm = app;
-
Vue.use(request, app);
Vue.use(tall, app);
Vue.use(project, app);
diff --git a/src/manifest.json b/src/manifest.json
index 361b67f..c2a0cdb 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -1,83 +1,13 @@
{
- "name": "",
- "appid": "",
+ "name": "TALL",
+ "appid": "wx356e01c7eb01d55d",
"description": "",
"versionName": "1.0.0",
"versionCode": "100",
"transformPx": false,
- "app-plus": {
- /* 5+App特有相关 */ "usingComponents": true,
- "splashscreen": {
- "alwaysShowBeforeRender": true,
- "waiting": true,
- "autoclose": true,
- "delay": 0
- },
- "modules": {
- /* 模块配置 */
- },
- "distribute": {
- /* 应用发布信息 */
- "android": {
- /* android打包配置 */
- "permissions": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- ""
- ]
- },
- "ios": {
- /* ios打包配置 */
- },
- "sdkConfigs": {
- /* SDK配置 */
- }
- }
- },
- "quickapp": {
- /* 快应用特有相关 */
- },
- "mp-weixin": {
- /* 微信小程序特有相关 */ "appid": "",
- "setting": {
- "urlCheck": false
- },
- "usingComponents": true
- },
- "mp-alipay": {
- "usingComponents": true
- },
- "mp-baidu": {
- "usingComponents": true
- },
- "mp-toutiao": {
- "usingComponents": true
- },
- "mp-qq": {
- "usingComponents": true
- },
"h5": {
"router": {
- "base": "/tall/v3.0.1"
+ "base": "/tall-project/v3.1.0"
},
"title": "时物链条",
"sdkConfigs": {
diff --git a/src/mixins/timeline.js b/src/mixins/timeline.js
deleted file mode 100644
index b61c46a..0000000
--- a/src/mixins/timeline.js
+++ /dev/null
@@ -1,44 +0,0 @@
-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;
diff --git a/src/package.json b/src/package.json
new file mode 100644
index 0000000..743d5c5
--- /dev/null
+++ b/src/package.json
@@ -0,0 +1,37 @@
+{
+ "pages": [
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationStyle": "custom" ,
+ "navigationBarTextStyle": "white"
+ }
+ },
+ {
+ "path": "pages/project/project",
+ "style": {
+ "navigationStyle": "custom" ,
+ "navigationBarTextStyle": "white"
+ }
+ },
+ {
+ "path": "pages/test/test",
+ "style": {
+ "navigationBarTitleText": "测试"
+ }
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "TALL",
+ "navigationBarBackgroundColor": "#F8F8F8",
+ "backgroundColor": "#F8F8F8"
+ },
+ "easycom": {
+ "autoscan": true,
+ "custom": {
+ "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue",
+ "^p-(.*)": "@/plugins/p-$1/p-$1.vue"
+ }
+ }
+}
diff --git a/src/pages.json b/src/pages.json
index 1743688..9647dde 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -1,31 +1,24 @@
{
- "pages": [
- {
- "path": "pages/index/index",
- "style": {
- "navigationStyle": "custom" ,
- "navigationBarTextStyle": "white"
- }
- },
- {
- "path": "pages/project/project",
- "style": {
- "navigationStyle": "custom" ,
- "navigationBarTextStyle": "white"
- }
- }
- ],
- "globalStyle": {
- "navigationBarTextStyle": "black",
- "navigationBarTitleText": "TALL",
- "navigationBarBackgroundColor": "#F8F8F8",
- "backgroundColor": "#F8F8F8"
- },
- "easycom": {
- "autoscan": true,
- "custom": {
- "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue",
- "^p-(.*)": "@/plugins/p-$1/p-$1.vue"
- }
- }
+ "pages": [
+ {
+ "path": "pages/project/project",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTextStyle": "white"
+ }
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "TALL",
+ "navigationBarBackgroundColor": "#F8F8F8",
+ "backgroundColor": "#F8F8F8"
+ },
+ "easycom": {
+ "autoscan": true,
+ "custom": {
+ "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue",
+ "^p-(.*)": "@/plugins/p-$1/p-$1.vue"
+ }
+ }
}
diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue
deleted file mode 100644
index 74dcc1f..0000000
--- a/src/pages/index/index.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/project/project.vue b/src/pages/project/project.vue
index 9ea4c29..d5a4a41 100644
--- a/src/pages/project/project.vue
+++ b/src/pages/project/project.vue
@@ -3,7 +3,7 @@
-
+
@@ -11,26 +11,28 @@
-
+
diff --git a/src/plugins/p-deliver-check/p-deliver-check.vue b/src/plugins/p-deliver-check/p-deliver-check.vue
index 6518d8f..e923be5 100644
--- a/src/plugins/p-deliver-check/p-deliver-check.vue
+++ b/src/plugins/p-deliver-check/p-deliver-check.vue
@@ -1,7 +1,64 @@
- 交付物检查
+
+
+
+ {{ wordNum }}/140
+
+
+
+
+
+
+
+ 提交
+ 取消
+
+
+
+
diff --git a/src/plugins/p-deliverable/p-deliverable.vue b/src/plugins/p-deliverable/p-deliverable.vue
deleted file mode 100644
index 9e186ea..0000000
--- a/src/plugins/p-deliverable/p-deliverable.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- 交付物
-
-
-
-
-
diff --git a/src/plugins/p-delivery-history/p-delivery-history.vue b/src/plugins/p-delivery-history/p-delivery-history.vue
new file mode 100644
index 0000000..68196b6
--- /dev/null
+++ b/src/plugins/p-delivery-history/p-delivery-history.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+ {{ list.name }}
+ {{ $moment(+list.time).format('YYYY-MM-DD HH:mm:ss') }}
+
+
+ {{ list.content }}
+ {{ list.content }}
+
+
+
+
+ {{ checker.checkerName }}
+ (我)
+
+
+ 通过
+ 驳回
+ {{ checker.score }}分
+ 未审核
+
+ 驳回
+ 通过
+
+
+
+ {{ checker.remark }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/plugins/p-task-duration-delay/p-task-duration-delay.vue b/src/plugins/p-task-duration-delay/p-task-duration-delay.vue
index b8bfba5..f435676 100644
--- a/src/plugins/p-task-duration-delay/p-task-duration-delay.vue
+++ b/src/plugins/p-task-duration-delay/p-task-duration-delay.vue
@@ -2,12 +2,12 @@
-
- +{{ $t.time.formatDuration(+realDuration - +planDuration) }}
+
+ +{{ $t.time.formatDuration(realDuration - planDuration) }}
-
- -{{ $t.time.formatDuration(+planDuration - +realDuration) }}
+
+ -{{ $t.time.formatDuration(planDuration - realDuration) }}
diff --git a/src/plugins/p-upload-deliverable/p-upload-deliverable.vue b/src/plugins/p-upload-deliverable/p-upload-deliverable.vue
new file mode 100644
index 0000000..810ff0c
--- /dev/null
+++ b/src/plugins/p-upload-deliverable/p-upload-deliverable.vue
@@ -0,0 +1,104 @@
+
+
+
+
+ {{ wordNum }}/140
+
+
+
+
+ 提交
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/plugins/p-wbs-import/p-wbs-import.vue b/src/plugins/p-wbs-import/p-wbs-import.vue
index 00b9b1b..3ca0ab6 100644
--- a/src/plugins/p-wbs-import/p-wbs-import.vue
+++ b/src/plugins/p-wbs-import/p-wbs-import.vue
@@ -1,7 +1,7 @@
- {{ task.name }}
- {{ task.name }}
+ {{ task.name }}
+ {{ task.name }}
diff --git a/src/static/local_play1.png b/src/static/local_play1.png
deleted file mode 100644
index bb6ac2c..0000000
Binary files a/src/static/local_play1.png and /dev/null differ
diff --git a/src/static/logo.png b/src/static/logo.png
deleted file mode 100644
index b5771e2..0000000
Binary files a/src/static/logo.png and /dev/null differ
diff --git a/src/store/index.js b/src/store/index.js
index 2a18ac1..26bc284 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -1,6 +1,5 @@
import Vue from 'vue';
import Vuex from 'vuex';
-import db from './db/index';
import user from './user/index';
import messages from './messages/index';
import socket from './socket/index';
@@ -8,5 +7,30 @@ import project from './project/index';
import role from './role/index';
import task from './task/index';
+// 不属于具体模块的 应用级的 store内容
+const state = {
+ networkConnected: true, // 网络是否连接
+ forceUseStorage: false, // 强制启用storage
+};
+
+const getters = {
+ // 是否启用本地存储
+ // 设置了强制启用本地存储 或者 没有网络连接的时候
+ useStorage({ networkConnected, forceUseStorage }) {
+ return forceUseStorage || !networkConnected;
+ },
+};
+
+const mutations = {
+ /**
+ * 设置网络是否连接的变量
+ * @param {*} state
+ * @param {boolean} networkConnected
+ */
+ setNetworkConnected(state, networkConnected) {
+ state.networkConnected = networkConnected;
+ },
+};
+
Vue.use(Vuex);
-export default new Vuex.Store({ modules: { db, user, messages, socket, project, role, task } });
+export default new Vuex.Store({ state, getters, mutations, modules: { user, messages, socket, project, role, task } });
diff --git a/src/store/project/actions.js b/src/store/project/actions.js
index 57b1c9b..5dfa3d4 100644
--- a/src/store/project/actions.js
+++ b/src/store/project/actions.js
@@ -1,18 +1,3 @@
-const actions = {
- /**
- * 通过项目id获取项目信息
- * @param {any} commit
- * @param {object} params 提交的参数
- */
- async getProjectById({ commit }, params) {
- try {
- const data = await uni.$u.api.findProjectById(params);
- commit('setProject', data);
- return data;
- } catch (error) {
- throw error || '获取项目信息失败';
- }
- },
-};
+const actions = {};
export default actions;
diff --git a/src/store/role/actions.js b/src/store/role/actions.js
index 7ceb712..6d279b0 100644
--- a/src/store/role/actions.js
+++ b/src/store/role/actions.js
@@ -1,17 +1,15 @@
const actions = {
/**
- * 通过项目id获取角色信息
- * @param {any} commit
- * @param {object} params 提交的参数
+ * 根据项目id查找所有成员信息
+ * @param {*} commit
+ * @param {object} params
*/
- async getRoles({ commit }, params) {
+ async getAllMembers({ commit }, params) {
try {
- const res = await uni.$u.api.findShowRole(params);
- commit('setInvisibleRoles', res.invisibleList);
- commit('setVisibleRoles', res.visibleList);
- return res;
+ const data = await uni.$u.api.queryChecker(params);
+ commit('setMembers', data);
} catch (error) {
- throw error || '获取角色信息失败';
+ uni.$t.ui.showToast(error.msg || '成员查询失败');
}
},
};
diff --git a/src/store/role/getters.js b/src/store/role/getters.js
index 56c8c75..6552b4a 100644
--- a/src/store/role/getters.js
+++ b/src/store/role/getters.js
@@ -1,3 +1,13 @@
-const getters = {};
+const getters = {
+ // 是不是负责人
+ isMine({ roleId, invisibleRoles, visibleRoles }) {
+ if (!visibleRoles || !visibleRoles.length) return false;
+ const visible = visibleRoles.find(visible => visible.id === roleId);
+ if (visible) return visible.mine;
+ const invisible = invisibleRoles.find(invisible => invisible.id === roleId);
+ if (invisible) return visible.mine;
+ return false;
+ },
+};
export default getters;
diff --git a/src/store/role/mutations.js b/src/store/role/mutations.js
index 7593f1b..83bd215 100644
--- a/src/store/role/mutations.js
+++ b/src/store/role/mutations.js
@@ -25,6 +25,15 @@ const mutations = {
setRoleId(state, roleId) {
state.roleId = roleId;
},
+
+ /**
+ * 设置项目下所有成员信息
+ * @param {Object} state
+ * @param {Array} data 服务端返回的模板数组
+ */
+ setMembers(state, data) {
+ state.members = data || [];
+ },
};
export default mutations;
diff --git a/src/store/role/state.js b/src/store/role/state.js
index 31b5774..1117de7 100644
--- a/src/store/role/state.js
+++ b/src/store/role/state.js
@@ -2,6 +2,7 @@ const state = {
invisibleRoles: [], // 不展示的角色信息
visibleRoles: [], // 展示的角色信息
roleId: '', // 当前展示查看的角色id
+ members: [], // 项目下所有成员
};
export default state;
diff --git a/src/store/task/actions.js b/src/store/task/actions.js
index b8dfbfb..40cdb31 100644
--- a/src/store/task/actions.js
+++ b/src/store/task/actions.js
@@ -4,13 +4,14 @@ const actions = {
* @param {*} commit
* @param {string} roleId 角色id
*/
- async getPermanent({ commit }, roleId) {
- try {
- const data = await uni.$u.api.getPermanent({ roleId });
- commit('setPermanents', data);
- } catch (error) {
- console.log('task actions getPermanent error: ', error);
- }
+ getPermanent({ commit }, param) {
+ uni.$t.$q.getPermanent(param, (err, data) => {
+ if (err) {
+ console.error('err: ', err);
+ } else {
+ commit('setPermanents', data);
+ }
+ });
},
/**
@@ -18,27 +19,14 @@ const actions = {
* @param {*} commit
* @param {object} param 请求参数 roleId, timeNode, timeUnit
*/
- async getGlobal({ commit }, param) {
- try {
- const data = await uni.$u.api.getGlobal(param);
- commit('setDailyTasks', data);
- } catch (error) {
- console.log('task actions getGlobal error: ', error);
- }
- },
-
- /**
- * 根据时间基准点和角色查找定期任务
- * @param {object} param 查询参数
- * @param {number} param.queryType 必填 0 -> 向上 1 -> 向下
- */
- // eslint-disable-next-line
- async getRegulars({ commit }, param) {
- try {
- return await uni.$u.api.getRegularTask(param);
- } catch (error) {
- throw error || '获取定期任务失败';
- }
+ getGlobal({ commit }, param) {
+ uni.$t.$q.getGlobal(param, (err, data) => {
+ if (err) {
+ console.error('err: ', err);
+ } else {
+ commit('setDailyTasks', data);
+ }
+ });
},
};
diff --git a/src/store/task/mutations.js b/src/store/task/mutations.js
index e644faa..457352d 100644
--- a/src/store/task/mutations.js
+++ b/src/store/task/mutations.js
@@ -11,10 +11,10 @@ const mutations = {
/**
* 记录时间轴向上滚动的距离
* @param { object } state
- * @param { string } data
+ * @param {string} taskId
*/
- setViewId(state, data) {
- state.viewId = data;
+ setScrollToTaskId(state, taskId) {
+ state.scrollToTaskId = taskId;
},
/**
@@ -79,9 +79,10 @@ const mutations = {
*/
setUpTasks(state, data) {
if (!state.tasks.length) {
- state.tasks = [...data];
+ state.tasks = [...data]; // 原来没有数据
} else {
- state.tasks = [...data.concat(state.tasks)];
+ state.tasks = [...data, ...state.tasks];
+ // state.tasks = [...data.concat(state.tasks)];
}
},
@@ -94,7 +95,8 @@ const mutations = {
if (!state.tasks && !state.tasks.length) {
state.tasks = [...data];
} else {
- state.tasks = [...state.tasks.concat(data)];
+ state.tasks = [...state.tasks, ...data];
+ // state.tasks = [...state.tasks.concat(data)];
}
},
diff --git a/src/store/task/state.js b/src/store/task/state.js
index e8397e0..dedff66 100644
--- a/src/store/task/state.js
+++ b/src/store/task/state.js
@@ -1,6 +1,6 @@
const state = {
scrollTop: 0,
- viewId: '', // 时间轴自动滚动的位置
+ scrollToTaskId: '', // 时间轴自动滚动的位置
isShrink: false, // true: 收起, false:展开
tip: {
taskId: '', // 当前正在修改状态的任务的id
@@ -10,21 +10,13 @@ const state = {
left: 0, // 鼠标点击位置距离左边的距离
top: 0, // 鼠标点击位置距离上边的距离
},
- // client: {
- // left: 0, // 鼠标点击位置距离左边的距离
- // top: 0, // 鼠标点击位置距离上边的距离
- // },
- // showTips: false,
- // status: 0, // 点击了时间轴上的哪种样式,默认点击了开始
- // tipsContent: '', // 提示框内的内容,需要传入
timeNode: new Date().getTime(), // 时间基准点
timeUnit: 4, // 时间颗粒度
topEnd: false, // 时间轴向上查任务到顶了
bottomEnd: false, // 时间轴向下查任务到底了
permanents: [], // 永久日常任务
dailyTasks: [], // 日常任务
- // 定期任务
- tasks: [],
+ tasks: [], // 所有的定期任务
showSkeleton: false, // 定期任务骨架屏
};
diff --git a/src/store/user/actions.js b/src/store/user/actions.js
index 6a3acee..cdb2ca0 100644
--- a/src/store/user/actions.js
+++ b/src/store/user/actions.js
@@ -6,10 +6,10 @@ const actions = {
*/
async getToken({ commit }, userId) {
try {
- const res = await uni.$u.api.getToken(userId);
- commit('setToken', res.token);
- commit('setUser', res);
- return res;
+ const data = await uni.$u.api.getToken(userId);
+ commit('setToken', data.token);
+ commit('setUser', data);
+ return data;
} catch (error) {
uni.$t.ui.showToast(error.msg || '获取个人信息失败');
}
diff --git a/src/store/user/mutations.js b/src/store/user/mutations.js
index 49a8bf3..6073c99 100644
--- a/src/store/user/mutations.js
+++ b/src/store/user/mutations.js
@@ -17,7 +17,7 @@ const mutations = {
setUser(state, user) {
if (!user) return;
state.user = { ...user };
- uni.setStorageSync('user', JSON.stringify(user));
+ uni.$t.storage.setStorageSync('user', JSON.stringify(user));
},
};
diff --git a/src/test/util/task.test.js b/src/test/util/task.test.js
new file mode 100644
index 0000000..75ee94a
--- /dev/null
+++ b/src/test/util/task.test.js
@@ -0,0 +1,24 @@
+import { computeFillPlaceholderTaskCount } from '../../utils/task';
+
+describe('computeFillPlaceholderTaskCount', () => {
+ // 2021/8/17 ~ 2021/8/21
+ const tasks = [
+ { id: '99724910037144221455', panel: {}, plugins: [], process: 4, planStart: 1629169800242 },
+ { id: '65053357415671253512', panel: {}, plugins: [], process: 4, planStart: 1629256200242 },
+ { id: '38735454515347179194', panel: {}, plugins: [], process: 4, planStart: 1629342600242 },
+ { id: '49602681534756706607', panel: {}, plugins: [], process: 4, planStart: 1629429000242 },
+ { id: '98860265376222512018', panel: {}, plugins: [], process: 4, planStart: 1629515400242 },
+ { id: '44419041575700334936', panel: {}, plugins: [], process: 4, planStart: 1629601800242 },
+ ];
+ const timeGranularity = 'day';
+
+ it('超出上限 补齐', () => {
+ const data = [{ planStart: `${new Date('2021/8/10').getTime()}` }, { planStart: `${new Date('2021/8/11').getTime()}` }];
+ expect(computeFillPlaceholderTaskCount({ tasks, data, timeGranularity }).prev.toString()).toMatch(/(7|8)/);
+ });
+
+ it('超出下限 补齐', () => {
+ const data = [{ planStart: `${new Date('2021/8/10').getTime()}` }, { planStart: `${new Date('2021/8/22').getTime()}` }];
+ expect(computeFillPlaceholderTaskCount({ tasks, data, timeGranularity }).next.toString()).toMatch(/(1|2)/);
+ });
+});
diff --git a/src/utils/cache.js b/src/utils/cache.js
new file mode 100644
index 0000000..034580d
--- /dev/null
+++ b/src/utils/cache.js
@@ -0,0 +1,344 @@
+export const filter = {
+ /**
+ * 角色 过滤获取到的数据 根据开始截止时间
+ * @param {object} data 缓存拿到的数据
+ * @returns
+ */
+ roles(data) {
+ if (!data || !data.length) return [];
+ return data;
+ },
+
+ /**
+ * 定期任务 过滤获取到的数据 根据开始截止时间
+ * @param {object} data 缓存拿到的数据
+ * @param {number} timeNode 时间基准点 ms
+ * @param {number} queryNum 颗粒度数量
+ * @param {number} timeUnit 时间颗粒度
+ * @param {number} queryType 0向上查找 1向下查找(默认) 下查包含自己,上查不包含
+ * @returns
+ */
+ planTask(data, timeNode, queryNum, timeUnit, queryType) {
+ if (!data || !data.length) return [];
+ if (queryType === 0) {
+ // 计算颗粒度 对应的 dayjs add 的单位
+ let target = uni.$t.timeConfig.timeUnits.find(item => item.id === timeUnit);
+ // TODO: 缺少通过时间颗粒度筛选数据 任务没有返回时间颗粒度标签
+ let start = uni.$t.time.add(+timeNode, -queryNum, target.granularity).valueOf();
+ let arr = [];
+ arr = data.filter(item => start <= +item.planStart && +timeNode > +item.planEnd);
+
+ if (!arr || !arr.length) {
+ // 开始时间往前推
+ let resultS = [];
+ let againStart = uni.$t.time.add(start, -1, target.granularity).valueOf();
+ let againArr = data.filter(item => againStart >= +item.planStart);
+ if (againArr && againArr.length) {
+ let sTime = uni.$t.time.setTimestampToStr(+againArr[0].planStart);
+ data.forEach(item => {
+ if (uni.$t.time.isSame(uni.$moment(sTime.date).valueOf(), +item.planStart, target.granularity)) {
+ resultS.push(item);
+ }
+ });
+ }
+ return resultS;
+ } else {
+ return arr;
+ }
+ } else {
+ // 计算颗粒度 对应的 dayjs add 的单位
+ let target = uni.$t.timeConfig.timeUnits.find(item => item.id === timeUnit);
+ // TODO: 缺少通过时间颗粒度筛选数据 任务没有返回时间颗粒度标签
+ let end = uni.$t.time.add(timeNode, +queryNum - 1, target.granularity).valueOf();
+ let arr = [];
+ arr = data.filter(item => end >= +item.planEnd && +timeNode <= +item.planStart);
+
+ if (!arr || !arr.length) {
+ // 结束时间往后推
+ let resultE = [];
+ let againEnd = uni.$t.time.add(end, 1, target.granularity).valueOf();
+ let againEndArr = data.filter(item => againEnd <= +item.planStart);
+ if (againEndArr) {
+ let eTime = uni.$t.time.setTimestampToStr(+againEndArr[againEndArr.length - 1].planStart);
+ data.forEach(item => {
+ if (uni.$t.time.isSame(uni.$moment(eTime.date).valueOf(), +item.planEnd, target.granularity)) {
+ resultE.push(item);
+ }
+ });
+ }
+ return resultE;
+ } else {
+ return arr;
+ }
+ }
+ },
+
+ /**
+ * 永久日常任务 过滤获取到的数据 根据开始截止时间
+ * @param {object} data 缓存拿到的数据
+ * @returns
+ */
+ fixedTasks(data) {
+ if (!data || !data.length) return [];
+ return data;
+ },
+
+ /**
+ * 日常任务 过滤获取到的数据 根据开始截止时间
+ * @param {object} data 缓存拿到的数据
+ * @param {number} timeNode 时间基准点 ms
+ * @returns
+ */
+ dailyTask(data, timeNode) {
+ if (!data || !data.length) return [];
+ // TODO: 缺少通过时间颗粒度筛选数据 任务没有返回时间颗粒度标签
+ return data.filter(item => timeNode <= +item.endTime && timeNode >= +item.startTime);
+ },
+
+ /**
+ * 插件 过滤获取到的数据 根据插件id
+ * @param {object} data 缓存拿到的数据
+ * @returns
+ */
+ plugin(data) {
+ if (!data || !data.id) return null;
+ return data;
+ },
+};
+
+export default {
+ /**
+ * 当前显示的角色信息 获取
+ * @param {object} params
+ * @returns
+ */
+ async getShowRole(projectId) {
+ try {
+ const data = await uni.$t.storage.getStorage(`roles_${projectId}`);
+ return filter.roles(JSON.parse(data));
+ } catch (error) {
+ return null;
+ }
+ },
+
+ /**
+ * 当前显示的角色信息 存
+ * @param {array} data
+ */
+ putShowRole(projectId, data) {
+ try {
+ if (!data || !data.visibleList || !data.visibleList.length) return; // 服务端没数据不做操作
+ let value = uni.$t.storage.getStorageSync(`roles_${projectId}`);
+ let locals = value ? JSON.parse(value) : null;
+ if (!locals || !locals.length) {
+ // 本地没数据
+ locals = data || null;
+ } else {
+ // 本地有数据
+ data.invisibleList.forEach(item => {
+ let invisibleListLocalData = locals.invisibleList.find(local => item.id === local.id);
+ if (invisibleListLocalData) {
+ // 有相同数据 就用新的data里的数据
+ invisibleListLocalData = item;
+ } else {
+ // 没有就直接存本地
+ locals.invisibleList.push(item);
+ }
+ });
+ data.visibleList.forEach(item => {
+ let localData = locals.visibleList.find(local => item.id === local.id);
+ if (localData) {
+ // 有相同数据 就用新的data里的数据
+ localData = item;
+ } else {
+ // 没有就直接存本地
+ locals.visibleList.push(item);
+ }
+ });
+ }
+ uni.$t.storage.setStorage(`roles_${projectId}`, locals);
+ } catch (error) {
+ console.error('error: ', error);
+ uni.$t.storage.setStorage(`roles_${projectId}`, []);
+ }
+ },
+
+ /**
+ * 定期任务 获取
+ * @param {number} startTime
+ * @param {number} endTime
+ * @returns
+ */
+ async getStorageRegularTask(params) {
+ try {
+ const data = await uni.$t.storage.getStorage(`plan_task_${params.projectId}_${params.roleId}`);
+ return filter.planTask(JSON.parse(data), params.timeNode, params.queryNum, params.timeUnit, params.queryType);
+ } catch (error) {
+ return [];
+ }
+ },
+
+ /**
+ * 定期任务 存
+ * @param {array} data
+ */
+ putStorageRegularTask(params, data) {
+ try {
+ if (!data || !data.length) return; // 服务端没数据不做操作
+ let value = uni.$t.storage.getStorageSync(`plan_task_${params.projectId}_${params.roleId}`);
+ let locals = value ? JSON.parse(value) : [];
+ if (!locals || !locals.length) {
+ // 本地没数据
+ locals = data || [];
+ } else {
+ // 本地有数据
+ data.forEach(item => {
+ let localData = locals.find(local => item.id === local.id);
+ if (localData) {
+ // 有相同数据 就用新的data里的数据
+ localData = item;
+ } else {
+ // 没有就直接存本地
+ locals.push(item);
+ }
+ });
+ }
+ uni.$t.storage.setStorage(`plan_task_${params.projectId}_${params.roleId}`, locals);
+ } catch (error) {
+ console.error('error: ', error);
+ uni.$t.storage.setStorage(`plan_task_${params.projectId}_${params.roleId}`, []);
+ }
+ },
+
+ /**
+ * 永久的日常任务 获取
+ * @param {number} startTime
+ * @param {number} endTime
+ * @returns
+ */
+ async getStoragePermanent(params) {
+ try {
+ const data = await uni.$t.storage.getStorage(`fixed_tasks_${params.projectId}_${params.roleId}`);
+ return filter.fixedTasks(JSON.parse(data));
+ } catch (error) {
+ return [];
+ }
+ },
+
+ /**
+ * 永久的日常任务 存
+ * @param {array} data
+ */
+ putStoragePermanent(params, data) {
+ try {
+ if (!data || !data.length) return; // 服务端没数据不做操作
+ let value = uni.$t.storage.getStorageSync(`fixed_tasks_${params.projectId}_${params.roleId}`);
+ let locals = value ? JSON.parse(value) : [];
+ if (!locals || !locals.length) {
+ // 本地没数据
+ locals = data || [];
+ } else {
+ // 本地有数据
+ data.forEach((item, index) => {
+ let localData = locals.find(local => item.detailId === local.detailId);
+ if (localData) {
+ // 有相同数据 就用新的data里的数据
+ localData = item;
+ } else {
+ locals.splice(index, 1);
+ // 没有就直接存本地
+ locals.push(item);
+ }
+ });
+ }
+ uni.$t.storage.setStorage(`fixed_tasks_${params.projectId}_${params.roleId}`, locals);
+ } catch (error) {
+ console.error('error: ', error);
+ uni.$t.storage.setStorage(`fixed_tasks_${params.projectId}_${params.roleId}`, []);
+ }
+ },
+
+ /**
+ * 日常任务 获取
+ * @param {number} timeNode
+ * @returns
+ */
+ async getDailyTask(params) {
+ try {
+ const data = await uni.$t.storage.getStorage(`variable_tasks_${params.projectId}_${params.roleId}`);
+ return filter.dailyTask(JSON.parse(data), params.timeNode);
+ } catch (error) {
+ return [];
+ }
+ },
+
+ /**
+ * 日常任务 存
+ * @param {array} data
+ */
+ putDailyTask(params, data) {
+ try {
+ if (!data || !data.length) return; // 服务端没数据不做操作
+ let value = uni.$t.storage.getStorageSync(`variable_tasks_${params.projectId}_${params.roleId}`);
+ let locals = value ? JSON.parse(value) : [];
+ if (!locals || !locals.length) {
+ // 本地没数据
+ locals = data || [];
+ } else {
+ // 本地有数据
+ data.forEach(item => {
+ let localData = locals.find(local => item.detailId === local.detailId);
+ if (localData) {
+ // 有相同数据 就用新的data里的数据
+ localData = item;
+ } else {
+ // 没有就直接存本地
+ locals.push(item);
+ }
+ });
+ }
+ uni.$t.storage.setStorage(`variable_tasks_${params.projectId}_${params.roleId}`, locals);
+ } catch (error) {
+ console.error('error: ', error);
+ uni.$t.storage.setStorage(`variable_tasks_${params.projectId}_${params.roleId}`, []);
+ }
+ },
+
+ /**
+ * 插件信息 获取
+ * @param {string} pluginId
+ * @returns
+ */
+ async getPlugin(pluginId) {
+ try {
+ const data = await uni.$t.storage.getStorage(`plugin_${pluginId}`);
+ return filter.plugin(JSON.parse(data));
+ } catch (error) {
+ return null;
+ }
+ },
+
+ /**
+ * 插件信息 存
+ * @param {string} pluginId
+ * @param {object} data
+ */
+ putPlugin(pluginId, data) {
+ try {
+ if (!data || !data.id) return; // 服务端没数据不做操作
+ let value = uni.$t.storage.getStorageSync(`plugin_${pluginId}`);
+ let locals = value ? JSON.parse(value) : null;
+ if (!locals || !locals.length) {
+ // 本地没数据
+ locals = data || null;
+ } else {
+ // 本地有数据
+ locals = data;
+ }
+ uni.$t.storage.setStorage(`plugin_${pluginId}`, locals);
+ } catch (error) {
+ console.error('error: ', error);
+ uni.$t.storage.setStorage(`plugin_${pluginId}`, null);
+ }
+ },
+};
diff --git a/src/utils/cacheAndRequest.js b/src/utils/cacheAndRequest.js
new file mode 100644
index 0000000..2567955
--- /dev/null
+++ b/src/utils/cacheAndRequest.js
@@ -0,0 +1,165 @@
+import store from '@/store/index';
+
+/**
+ * 等待token执行api
+ * 没有token 就延时执行自己 直到有了token在请求
+ * @param {function} requestFn 执行请求的函数
+ */
+export const waitTokenRequest = requestFn => {
+ if (!requestFn || typeof requestFn !== 'function') throw new Error(`requestFn must be a function`);
+ if (uni.$t.storage.getStorageSync(uni.$t.app.tokenKey)) {
+ requestFn();
+ } else {
+ setTimeout(() => waitTokenRequest(requestFn), 10);
+ }
+};
+
+export default {
+ /**
+ * 通过项目id获取角色信息
+ * @param {object} params 提交的参数
+ */
+ findShowRole(params, fn) {
+ let remote = false;
+ if (store.getters.useStorage) {
+ // 有缓存 且 服务端数据未返回 就先返回缓存
+ uni.$t.cache
+ .getShowRole(params.projectId)
+ .then(data => {
+ !remote && fn(null, data);
+ })
+ .catch(err => !remote && fn(err));
+ }
+ waitTokenRequest(() => {
+ // 拿到api数据后 再用api的数据
+ uni.$u.api
+ .findShowRole(params)
+ .then(data => {
+ remote = true;
+ fn(null, data);
+ // 存api到cache里
+ uni.$t.cache.putShowRole(params.projectId, data);
+ })
+ .catch(err => fn(err));
+ });
+ },
+
+ /**
+ * 根据时间基准点和角色查找定期任务
+ * @param {object} params 提交的参数
+ */
+ getRegularTask(params, fn) {
+ let remote = false;
+ if (store.getters.useStorage) {
+ // 有缓存 且 服务端数据未返回 就先返回缓存
+ uni.$t.cache
+ .getStorageRegularTask(params)
+ .then(data => {
+ console.log('cache data: ', data);
+ !remote && fn(null, data);
+ })
+ .catch(err => !remote && fn(err));
+ }
+ waitTokenRequest(() => {
+ // 拿到api数据后 再用api的数据
+ uni.$u.api
+ .getRegularTask(params)
+ .then(data => {
+ console.log('api data: ', uni.$u.deepClone(data));
+ remote = true;
+
+ fn(null, uni.$u.deepClone(data));
+ // 存api到cache里
+ uni.$t.cache.putStorageRegularTask(params, data);
+ })
+ .catch(err => fn(err));
+ });
+ },
+
+ /**
+ * 根据角色查找永久的日常任务
+ * @param {object} params 提交的参数
+ */
+ getPermanent(params, fn) {
+ let remote = false;
+ if (store.getters.useStorage) {
+ // 有缓存 且 服务端数据未返回 就先返回缓存
+ uni.$t.cache
+ .getStoragePermanent(params)
+ .then(data => {
+ !remote && fn(null, data);
+ })
+ .catch(err => !remote && fn(err));
+ }
+ waitTokenRequest(() => {
+ // 拿到api数据后 再用api的数据
+ uni.$u.api
+ .getPermanent(params)
+ .then(data => {
+ remote = true;
+ fn(null, data);
+ // 存api到cache里
+ uni.$t.cache.putStoragePermanent(params, data);
+ })
+ .catch(err => fn(err));
+ });
+ },
+
+ /**
+ * 根据时间和角色查找日常任务
+ * @param {object} params 提交的参数
+ */
+ getGlobal(params, fn) {
+ let remote = false;
+ if (store.getters.useStorage) {
+ // 有缓存 且 服务端数据未返回 就先返回缓存
+ uni.$t.cache
+ .getDailyTask(params)
+ .then(data => {
+ !remote && fn(null, data);
+ })
+ .catch(err => !remote && fn(err));
+ }
+ waitTokenRequest(() => {
+ // 拿到api数据后 再用api的数据
+ uni.$u.api
+ .getGlobal(params)
+ .then(data => {
+ remote = true;
+ fn(null, data);
+ // 存api到cache里
+ uni.$t.cache.putDailyTask(params, data);
+ })
+ .catch(err => fn(err));
+ });
+ },
+
+ /**
+ * 获取插件信息
+ * @param {object} params 提交的参数
+ */
+ getOtherPlugin(params, fn) {
+ let remote = false;
+ if (store.getters.useStorage) {
+ // 有缓存 且 服务端数据未返回 就先返回缓存
+ uni.$t.cache
+ .getPlugin(params.pluginId)
+ .then(data => {
+ !remote && fn(null, data);
+ })
+ .catch(err => !remote && fn(err));
+ }
+ waitTokenRequest(() => {
+ // 拿到api数据后 再用api的数据
+ uni.$u.api
+ .getOtherPlugin(params)
+ .then(data => {
+ remote = true;
+ fn(null, data);
+ // 存api到cache里
+ uni.$t.cache.putPlugin(params.pluginId, data);
+ })
+ .catch(err => fn(err));
+ });
+ },
+};
diff --git a/src/utils/indexedDB.js b/src/utils/indexedDB.js
index 58329ed..30a0e90 100644
--- a/src/utils/indexedDB.js
+++ b/src/utils/indexedDB.js
@@ -28,17 +28,15 @@ const createCollection = (Vue, db) => {
const create = (db, collection, data) => {
return new Promise((resolve, reject) => {
const request = db.transaction([collection], 'readwrite').objectStore(collection).add(data);
-
- request.onsuccess = event => {
- console.log(event);
- // FIXME:
- resolve(event);
- };
+ request.onsuccess = () => resolve();
request.onerror = event => {
- console.log(event);
- // FIXME:
- reject(event);
+ const { name, message } = event.target.error;
+ if (name === 'ConstraintError') {
+ reject('数据已存在');
+ } else {
+ reject(message);
+ }
};
});
};
@@ -53,16 +51,8 @@ const create = (db, collection, data) => {
const findOne = (db, collection, key) => {
return new Promise((resolve, reject) => {
const request = db.transaction([collection]).objectStore(collection).get(key);
- request.onerror = event => {
- console.log('indexedDB findOne error:', event);
- // FIXME:
- reject(event);
- };
- request.onsuccess = event => {
- console.log('indexedDB findOne success:', event);
- // FIXME:
- resolve(event);
- };
+ request.onerror = event => reject(event.target.error.message);
+ request.onsuccess = event => resolve(event.target.result);
});
};
@@ -75,19 +65,16 @@ const findOne = (db, collection, key) => {
const find = (db, collection) => {
return new Promise((resolve, reject) => {
const request = db.transaction(collection).objectStore(collection).openCursor();
- request.onerror = event => {
- console.log('indexedDB find error:', event);
- reject(event);
- };
+ let result = [];
+
+ request.onerror = event => reject(event.target.error.message);
request.onsuccess = event => {
const cursor = event.target.result;
if (cursor) {
- console.log('indexedDB find success:', cursor);
+ result.push(cursor.value);
cursor.continue();
- // FIXME:
- resolve(event.target.result);
} else {
- console.log('没有更多数据了');
+ resolve(result);
}
};
});
@@ -103,15 +90,8 @@ const find = (db, collection) => {
const update = (db, collection, newData) => {
return new Promise((resolve, reject) => {
const request = db.transaction([collection], 'readwrite').objectStore(collection).put(newData);
- request.onerror = event => {
- console.log('indexedDB UPDATE error:', event);
- reject(event);
- };
- request.onsuccess = event => {
- console.log('indexedDB UPDATE success:', event);
- // FIXME:
- resolve(event);
- };
+ request.onerror = event => reject(event.target.error.message);
+ request.onsuccess = () => resolve(newData);
});
};
@@ -125,14 +105,8 @@ const update = (db, collection, newData) => {
const remove = (db, collection, key) => {
return new Promise((resolve, reject) => {
const request = db.transaction([collection], 'readwrite').objectStore(collection).delete(key);
- request.onerror = event => {
- console.log('indexedDB REMOVE error:', event);
- reject(event);
- };
- request.onsuccess = event => {
- console.log('indexedDB REMOVE success:', event);
- resolve(event);
- };
+ request.onerror = event => reject(event.target.error.message);
+ request.onsuccess = () => resolve();
});
};
@@ -146,11 +120,12 @@ const remove = (db, collection, key) => {
*/
const createIndexAndFind = (db, collection, field, key) => {
return new Promise((resolve, reject) => {
- const index = db.transaction([collection], 'readonly').objectStore(collection).index(field);
+ const store = db.transaction([collection], 'readonly').objectStore(collection);
+ store.createIndex(field, field);
+ const index = store.index(field);
const request = index.get(key);
- // FIXME:
- request.onerror = event => reject(event);
- request.onsuccess = event => resolve(event);
+ request.onerror = event => reject(event.target.error.message);
+ request.onsuccess = event => resolve(event.target.result);
});
};
@@ -162,7 +137,7 @@ export const curriedUpdate = curry(update);
export const curriedIndex = curry(createIndexAndFind);
const install = Vue => {
- Vue.prototype.$db = {};
+ uni.$db = Vue.prototype.$db = {};
Vue.prototype.$db.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
const request = Vue.prototype.$db.indexedDB.open(name, Date.now()); // IDBRequest 对象
request.onerror = error => console.error('打开数据库失败', error);
@@ -175,11 +150,14 @@ const install = Vue => {
Vue.prototype.$db.db = event.target.result;
// 创建表
createCollection(Vue, Vue.prototype.$db.db);
- };
- // create
- // console.log(curriedCreate(Vue.prototype.$db.db));
- Vue.prototype.$db.create = curriedCreate(Vue.prototype.$db.db);
+ Vue.prototype.$db.create = curriedCreate(Vue.prototype.$db.db); // create 新增数据,颗粒化以后就不用再传db数据了
+ Vue.prototype.$db.findOne = curriedFindOne(Vue.prototype.$db.db); // 查一条
+ Vue.prototype.$db.find = curriedFind(Vue.prototype.$db.db); // 查集合里的所有数据
+ Vue.prototype.$db.update = curriedUpdate(Vue.prototype.$db.db); // 更新某条数据
+ Vue.prototype.$db.remove = curriedRemove(Vue.prototype.$db.db); // 删除某条数据
+ // Vue.prototype.$db.createIndex = curriedIndex(Vue.prototype.$db.db); // 创建索引
+ };
};
export default { install };
diff --git a/src/utils/request.js b/src/utils/request.js
index a20b670..2cf5374 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -11,8 +11,9 @@ const install = (Vue, vm) => {
// 请求拦截部分,如配置,每次请求前都会执行
Vue.prototype.$u.http.interceptor.request = config => {
- if (vm.$store.state.user.token) {
- config.header.Authorization = `Bearer ${vm.$store.state.user.token}`;
+ const token = vm.$store.state.user.token || uni.$t.storage.getStorageSync(uni.$t.app.tokenKey);
+ if (token) {
+ config.header.Authorization = `Bearer ${token}`;
}
return config;
diff --git a/src/utils/storage.js b/src/utils/storage.js
index 01d115c..ea672d6 100644
--- a/src/utils/storage.js
+++ b/src/utils/storage.js
@@ -39,6 +39,7 @@ export default {
* @param {*} data
*/
setStorage(key, data) {
+ uni.$t.storage.checkCapacity();
return new Promise((resolve, reject) => {
const value = typeof data === 'string' ? data : JSON.stringify(data);
uni.setStorage({
@@ -67,7 +68,7 @@ export default {
resolve(res.data);
},
fail(error) {
- reject(`数据${key}获取失败, error: ${error}`);
+ reject(`数据${key}获取失败, error: ${error.errMsg}`);
},
});
});
@@ -97,4 +98,15 @@ export default {
clearStorage() {
uni.clearStorage();
},
+
+ // 检测local Storage容量 超出容量清空数据缓存
+ checkCapacity() {
+ /* #ifdef H5 */
+ const capacity = JSON.stringify(localStorage).length;
+ let max = 1024 * 1024 * 4;
+ if (capacity >= max) {
+ uni.$t.storage.clearStorage();
+ }
+ /* #endif */
+ },
};
diff --git a/src/utils/tall.js b/src/utils/tall.js
index 8594b15..19c5b17 100644
--- a/src/utils/tall.js
+++ b/src/utils/tall.js
@@ -1,11 +1,15 @@
import app from '@/config/app.js';
-import timeConfig from '@/config/time';
-import zIndex from '@/config/zIndex.js';
+import cache from '@/utils/cache.js';
+import cacheAndRequest from '@/utils/cacheAndRequest.js';
import plugin from '@/config/plugin.js';
import storage from '@/utils/storage.js';
import time from '@/utils/time.js';
+import timeConfig from '@/config/time';
import ui from '@/utils/ui.js';
import upload from '@/utils/upload.js';
+import user from '@/config/user.js';
+import zIndex from '@/config/zIndex.js';
+import task from '@/config/task.js';
const gateway = process.env.VUE_APP_API_URL;
@@ -19,6 +23,10 @@ const $t = {
ui, // ui界面提示相关
chooseAndUpload: upload.chooseAndUpload, // 选择并上传单个文件相关的封装
domain: `${gateway}/defaultwbs`,
+ cache, // 本地存储相关
+ $q: cacheAndRequest,
+ user, // 用户相关配置
+ task, // 任务相关配置
};
uni.$t = $t;
diff --git a/src/utils/task.js b/src/utils/task.js
new file mode 100644
index 0000000..17dd2f8
--- /dev/null
+++ b/src/utils/task.js
@@ -0,0 +1,53 @@
+import dayjs from 'dayjs';
+
+/**
+ * 设置时间轴空数据
+ * @param {number} startTime
+ * @param {boolean} isUp true 向上加载,false 向下加载
+ * @param {string} timeGranularity 颗粒度
+ * @param {number} pageCount 加载的颗粒度数量 默认值是10
+ */
+export const setPlaceholderTasks = (startTime, isUp, timeGranularity, pageCount) => {
+ let result = [];
+ pageCount = pageCount || uni.$t.task.pageCount;
+ for (let i = 0; i < pageCount; i++) {
+ const delta = isUp ? `-${i + 1}` - 0 : i + 1;
+ let item = {
+ id: uni.$u.guid(20, false, 10),
+ panel: {},
+ plugins: [],
+ process: 4,
+ planStart: uni.$moment(startTime).add(delta, timeGranularity).valueOf(),
+ };
+ // console.log('isup: ', isUp, 'result:', new Date(item.planStart).toLocaleDateString());
+
+ isUp ? result.unshift(item) : result.push(item);
+ }
+ return result;
+};
+
+/**
+ * 超出旧数据上、下限 补齐时间刻度到新数据的起始时间颗粒度
+ * @param {object} option
+ * @param {array} option.tasks 旧的已有的任务书籍
+ * @param {array} option.data 新拿到的任务数据 空值已经过滤过了
+ * @param {string} option.timeGranularity 颗粒度
+ */
+export const computeFillPlaceholderTaskCount = ({ tasks, data, timeGranularity }) => {
+ const result = { prev: 0, next: 0 };
+ // 新数据的开始时间 < 旧数据的开始时间
+ // 超出了上限 补上限的时间刻度
+ // 补上 新数据开始时间 到 旧数据开始时间 的刻度
+ if (+data[0].planStart < +tasks[0].planStart) {
+ // 找出来需要补几组颗粒度
+ result.prev = dayjs(+tasks[0].planStart).diff(+data[0].planStart, timeGranularity) + 1;
+ }
+
+ // 新数据的结束时间 > 旧数据的结束时间
+ // 超出了下线 补下限的时间刻度
+ // 补上 旧数据截止时间 到 新数据截止时间 的刻度
+ if (+data[data.length - 1].planStart > +tasks[tasks.length - 1].planStart) {
+ result.next = dayjs(+data[data.length - 1].planStart).diff(+tasks[tasks.length - 1].planStart, timeGranularity) + 1;
+ }
+ return result;
+};
diff --git a/src/utils/time.js b/src/utils/time.js
index 6f1fae2..5c7fa22 100644
--- a/src/utils/time.js
+++ b/src/utils/time.js
@@ -82,7 +82,7 @@ const setTimestampToStr = timestamp => {
const day = formatNumber(timeObj.getDate());
const hour = formatNumber(timeObj.getHours());
const minute = formatNumber(timeObj.getMinutes());
- const date = `${year}/${month}/${day}`;
+ const date = `${year}-${month}-${day}`;
const time = `${hour}:${minute}`;
return {
date,
@@ -104,12 +104,9 @@ const validateTimeIsToday = time => {
* 检测两个日期是否相同
* @param {number | date} time
* @param {number | date} value
- * @param {string} cycle 传入 day 将会比较 day、 month和 year
+ * @param {string} cycle 传入 day 将会比较 day、 month和 year “一般是时间颗粒度”
*/
-const isSame = (time, value, cycle) => {
- const str = dayjs(time).isSame(value, cycle);
- return str;
-};
+const isSame = (time, value, cycle) => dayjs(time).isSame(value, cycle);
/**
* 格式化开始时间
diff --git a/tailwind.config.js b/tailwind.config.js
deleted file mode 100644
index 4ab9476..0000000
--- a/tailwind.config.js
+++ /dev/null
@@ -1,30 +0,0 @@
-const colors = require('tailwindcss/colors');
-
-module.exports = {
- // purge: ['./public/index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
- darkMode: false, // or 'media' or 'class'
- theme: {
- extend: {},
- colors: {
- blue: colors.sky,
- gray: colors.blueGray,
- red: colors.red,
- orange: colors.orange,
- yellow: colors.yellow,
- green: colors.green,
- pink: colors.rose,
- white: colors.white,
- black: '#333',
- transparent: 'transparent',
- },
- },
- variants: { extend: {} },
- plugins: [],
- corePlugins: {
- space: false,
- divideWidth: false,
- divideColor: false,
- divideStyle: false,
- divideOpacity: false,
- },
-};
diff --git a/vue.config.js b/vue.config.js
index 5a63af9..9506e1a 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -10,6 +10,7 @@ module.exports = {
devServer: {
// open: true,
// host: '127.0.0.1',
+ port: 9000,
overlay: { warnings: false, errors: true },
// proxy: {}
},
@@ -29,9 +30,8 @@ module.exports = {
},
pluginOptions: {
// mock: { entry: './src/mock/mock.js', debug: true, disable: true },
- eruda: {},
- webpackBundleAnalyzer: {
- openAnalyzer: isPro,
- },
+ // webpackBundleAnalyzer: {
+ // openAnalyzer: isPro,
+ // },
},
};