From 7f14dabe4b42ff15e3d8a6c996a64939b9cea734 Mon Sep 17 00:00:00 2001 From: xuesinan <1404152492@qq.com> Date: Wed, 14 Sep 2022 11:01:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8uniapp=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E6=89=93=E5=8D=A1=E6=8F=92=E4=BB=B6=EF=BC=88=E5=8C=85?= =?UTF-8?q?=E6=8B=AC=E8=AF=A6=E6=83=85=E9=A1=B5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 +- apis/plugin.js | 12 + common/styles/tailwind.scss | 4 + components/Plugin/Plugin.vue | 87 ++- .../PrettyExchange/PrettyExchange - 副本.vue | 731 ------------------ .../PrettyExchange/PrettyExchange222.vue | 693 ----------------- components/SearchPopup/SearchPopup.vue | 234 ++++++ components/TimeLine 复制/TimeLine.vue | 126 --- .../TimeLine 复制/component/Barrier.vue | 38 - .../TimeLine 复制/component/TaskTools.vue | 177 ----- .../TimeLine 复制/component/TimeBox.vue | 132 ---- .../TimeLine 复制/component/TimeStatus.vue | 317 -------- components/TimeLine 复制/component/Title.vue | 0 hooks/project/useGetTasks - 副本 (2).js | 476 ------------ hooks/project/useGetTasks - 副本 (3).js | 343 -------- hooks/project/useGetTasks - 副本.js | 263 ------- hooks/project/useGetTasks222.js | 336 -------- pages.json | 6 + pages/detail/detail.vue | 26 + pages/project/project 复制.vue | 142 ---- pages/submitLog/submitLog - 副本.vue | 66 -- plugins/p-check-work/detail.vue | 395 ++++++++++ plugins/p-check-work/p-check-work.vue | 165 ++++ store/index.js | 1 + 24 files changed, 891 insertions(+), 3882 deletions(-) delete mode 100644 components/PrettyExchange/PrettyExchange - 副本.vue delete mode 100644 components/PrettyExchange/PrettyExchange222.vue create mode 100644 components/SearchPopup/SearchPopup.vue delete mode 100644 components/TimeLine 复制/TimeLine.vue delete mode 100644 components/TimeLine 复制/component/Barrier.vue delete mode 100644 components/TimeLine 复制/component/TaskTools.vue delete mode 100644 components/TimeLine 复制/component/TimeBox.vue delete mode 100644 components/TimeLine 复制/component/TimeStatus.vue delete mode 100644 components/TimeLine 复制/component/Title.vue delete mode 100644 hooks/project/useGetTasks - 副本 (2).js delete mode 100644 hooks/project/useGetTasks - 副本 (3).js delete mode 100644 hooks/project/useGetTasks - 副本.js delete mode 100644 hooks/project/useGetTasks222.js create mode 100644 pages/detail/detail.vue delete mode 100644 pages/project/project 复制.vue delete mode 100644 pages/submitLog/submitLog - 副本.vue create mode 100644 plugins/p-check-work/detail.vue create mode 100644 plugins/p-check-work/p-check-work.vue diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e91122..f2429e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# 1.0.0 (2022-09-09) +# 1.0.0 (2022-09-14) ### 🌟 新功能 范围|描述|commitId @@ -83,6 +83,7 @@ - | 项目列表新 | [88cf48d](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/88cf48d) - | 小红点显示逻辑 | [11923f3](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/11923f3) - | 小绿点隐藏 | [31f3dc7](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/31f3dc7) + - | 修改一些东西 | [5b577b0](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/5b577b0) - | 引导页、广告页 | [4aa76ff](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/4aa76ff) - | 隐藏软键盘 | [919a44e](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/919a44e) - | 域名配置 | [b68272d](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/b68272d) diff --git a/apis/plugin.js b/apis/plugin.js index d352277..3c97571 100644 --- a/apis/plugin.js +++ b/apis/plugin.js @@ -38,4 +38,16 @@ export function setupPlugin(app) { uni.$u.api.checkDeliver = (param, url) => uni.$u.post(`${url || domain.value}/deliver/checkDeliver`, param); // 查看检查记录 uni.$u.api.queryCheckLog = param => uni.$u.post(`${domain.value}/deliver/queryCheckLog`, param); + + /** + * 考勤api + */ + // 批量查询打卡信息 + uni.$u.api.clockQuery = (params, url) => uni.$u.post(`${url ? url : domain.value}/clock/query`, params); + + // 打卡 + uni.$u.api.clockPunch = (params, url) => uni.$u.post(`${url ? url : domain.value}/clock/punch`, params); + + // 审核 + uni.$u.api.clockAudit = (params, url) => uni.$u.post(`${url ? url : domain.value}/clock/audit`, params); } diff --git a/common/styles/tailwind.scss b/common/styles/tailwind.scss index 895ad41..302cc93 100644 --- a/common/styles/tailwind.scss +++ b/common/styles/tailwind.scss @@ -4676,4 +4676,8 @@ .list-outside { list-style-position: outside; +} + +.line-through { + text-decoration: line-through; } \ No newline at end of file diff --git a/components/Plugin/Plugin.vue b/components/Plugin/Plugin.vue index 86587e3..ce530cd 100644 --- a/components/Plugin/Plugin.vue +++ b/components/Plugin/Plugin.vue @@ -1,51 +1,56 @@ - - diff --git a/components/PrettyExchange/PrettyExchange222.vue b/components/PrettyExchange/PrettyExchange222.vue deleted file mode 100644 index 54041d8..0000000 --- a/components/PrettyExchange/PrettyExchange222.vue +++ /dev/null @@ -1,693 +0,0 @@ - - - - - diff --git a/components/SearchPopup/SearchPopup.vue b/components/SearchPopup/SearchPopup.vue new file mode 100644 index 0000000..26adecd --- /dev/null +++ b/components/SearchPopup/SearchPopup.vue @@ -0,0 +1,234 @@ + + + + + diff --git a/components/TimeLine 复制/TimeLine.vue b/components/TimeLine 复制/TimeLine.vue deleted file mode 100644 index 489c680..0000000 --- a/components/TimeLine 复制/TimeLine.vue +++ /dev/null @@ -1,126 +0,0 @@ - - - diff --git a/components/TimeLine 复制/component/Barrier.vue b/components/TimeLine 复制/component/Barrier.vue deleted file mode 100644 index 95f5f9b..0000000 --- a/components/TimeLine 复制/component/Barrier.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - - - diff --git a/components/TimeLine 复制/component/TaskTools.vue b/components/TimeLine 复制/component/TaskTools.vue deleted file mode 100644 index 52f4c3e..0000000 --- a/components/TimeLine 复制/component/TaskTools.vue +++ /dev/null @@ -1,177 +0,0 @@ - - - - - diff --git a/components/TimeLine 复制/component/TimeBox.vue b/components/TimeLine 复制/component/TimeBox.vue deleted file mode 100644 index b40e172..0000000 --- a/components/TimeLine 复制/component/TimeBox.vue +++ /dev/null @@ -1,132 +0,0 @@ - - - - - diff --git a/components/TimeLine 复制/component/TimeStatus.vue b/components/TimeLine 复制/component/TimeStatus.vue deleted file mode 100644 index 1747154..0000000 --- a/components/TimeLine 复制/component/TimeStatus.vue +++ /dev/null @@ -1,317 +0,0 @@ - - - - - diff --git a/components/TimeLine 复制/component/Title.vue b/components/TimeLine 复制/component/Title.vue deleted file mode 100644 index e69de29..0000000 diff --git a/hooks/project/useGetTasks - 副本 (2).js b/hooks/project/useGetTasks - 副本 (2).js deleted file mode 100644 index 136c067..0000000 --- a/hooks/project/useGetTasks - 副本 (2).js +++ /dev/null @@ -1,476 +0,0 @@ -import { computed, nextTick, watch } from 'vue'; -import { useStore } from 'vuex'; -import { flatten } from 'lodash'; -import dayjs from 'dayjs'; - -export default function useGetTasks() { - const store = useStore(); - const tasks = computed(() => store.state.task.tasks); - const timeLineType = computed(() => store.state.task.timeLineType); // 时间轴模式 - const realTasks = computed(() => store.state.task.realTasks); // 真实任务 - const downNextPage = computed(() => store.state.task.downNextPage); // 下一页 - const upNextPage = computed(() => store.state.task.upNextPage); // 下一页 - const currUpTimeNode = computed(() => store.state.task.currUpTimeNode); // 当前查询的时间 - const currDownTimeNode = computed(() => store.state.task.currDownTimeNode); // 当前查询的时间 - const roleId = computed(() => store.state.role.roleId); - const timeNode = computed(() => store.state.task.timeNode); - const timeUnit = computed(() => store.state.task.timeUnit); - const visibleRoles = computed(() => store.state.role.visibleRoles); - const allTasks = computed(() => store.state.task.allTasks); - const roleIndex = computed(() => store.state.role.roleIndex); - - const projectId = computed(() => store.getters['project/projectId']); - const timeGranularity = computed(() => store.getters['task/timeGranularity']); - - const remindData = computed(() => store.state.socket.remindData); // 小红点 - - const currRoleRealTasks = computed(() => store.state.task.currRoleRealTasks); // 当前角色的真实任务数据 - - // 初始化 定期任务 - async function initPlanTasks() { - // timeLineType.value === 1 ? setNextPlaceholderTasks({}) : ''; - await getTasks({}); // 获取初始数据 - // await dataRender({}); - } - - /** - * 生成getTasks所用的参数 - * @param {object} query getTasks传递的参数 - */ - function generateGetTaskParam(query) { - return { - roleId: roleId.value, - timeNode: query.timeNode || timeNode.value, - timeUnit: query.timeUnit || timeUnit.value, - queryType: query.queryType === 0 ? 0 : 1, - pageNum: query.pageNum || 1, - pageSize: query.pageSize || uni.$taskConfig.pageCount, - taskId: query.taskId || '' - }; - } - - /** - * 根据时间基准点和角色查找定期任务 - * @param {object} query - * @param {string} query.roleId 角色id - * @param {string} query.timeNode 时间基准点 默认当前 - * @param {string} query.timeUnit 时间颗粒度 默认天 - * @param {string} query.queryNum 查找颗粒度数量 默认3个 - * @param {number} query.queryType 0向上查找 1向下查找(默认) 下查包含自己,上查不包含 - */ - function getTasks(query) { - store.commit('task/setShowSkeleton', false); - - const params = generateGetTaskParam(query); - uni.$catchReq.getTaskByNum(params, (err, data) => { - store.commit('task/setShowSkeleton', false); - if (err) { - // TODO: 提示错误 - console.error('err: ', err); - } else { - store.commit('task/setShowScrollTo', true); - - params.queryType === 0 ? store.commit('task/setUpRealTasks', data.list) : store.commit('task/setDownRealTasks', data.list); - params.queryType === 0 ? store.commit('task/setUpNextPage', data.nextPage) : store.commit('task/setDownNextPage', data.nextPage); // 下一页 - - const index = visibleRoles.value.findIndex(role => role.id === roleId.value); - const arr = [...allTasks.value]; - arr[index].realTasks = [...realTasks.value]; - store.commit('task/setAllTasks', arr); - store.commit('task/setCurrRoleRealTasks', arr[index].realTasks); // 设置当前角色的真实任务数据 - - // 数据处理 - dataRender(params); - } - }); - } - - function dataRender(params) { - timeLineType.value === 1 ? renderScaleTask(params) : renderConTask(params); - } - - // 任务模式 - async function renderConTask(params) { - let nextPage = params.queryType === 0 ? upNextPage.value : downNextPage.value; // 下一页的值 - let showTasks = tasks.value; - let centerData = await showTaskId(params, showTasks, realTasks.value) || []; - - if (centerData.length < 15 && nextPage > 0) { - getTasks({pageNum: nextPage, queryType: params.queryType}); - } else { - if (params.queryType === 0) { - showTasks = [...centerData, ...showTasks]; - } else { - showTasks = [...showTasks, ...centerData]; - } - } - - if (showTasks.length < 15 && nextPage === 0 && params.queryType === 1) { - getTasks({pageNum: 1, queryType: 0}); - } - - if (showTasks.length > 80) { - showTasks = params.queryType === 0 ? showTasks.slice(0, 80) : showTasks.slice(showTasks.length - 80); - } - - store.commit('task/clearTasks'); - params.queryType === 0 ? store.commit('task/setUpTasks', showTasks) : store.commit('task/setDownTasks', showTasks); - } - - // 刻度模式数据处理 - async function renderScaleTask(params) { - // params.queryType === 0 ? setPrevPlaceholderTasks(params) : setNextPlaceholderTasks(params); - - // let centerData = await showTaskId(params, tasks.value, currRoleRealTasks.value) || []; - let centerData = await showTaskTime(params, tasks.value, currRoleRealTasks.value) || []; - // tasksData(params, centerData, currRoleRealTasks.value); - handleTasksData(params, centerData, currRoleRealTasks.value); - } - - // 已显示的任务第一个时间和最后一个时间 - async function showTaskTime(params, showTasks, realTasks) { - - // 初始值 - let centerData = params.queryType === 0 ? [] : realTasks.slice(0, params.pageSize); - - /** - * 1、判断显示任务中是否有真实任务 - * 1-1、有。根据id查找任务 - * 1-2、无。根据时间查找任务 - * 2、查找15个任务 - */ - const firstDetailIndex = showTasks.findIndex(task => task.detailId); - - if (firstDetailIndex > -1) { - // 显示任务中有真实任务数据 - const firstId = showTasks[firstDetailIndex].id; - let lastDetailIndex = -1; - showTasks.forEach((item, index) => { - if (item.detailId) { - lastDetailIndex = index; - } - }) - const lastId = showTasks[lastDetailIndex].id; - - realTasks.forEach((item, index) => { - if (params.queryType === 1 && item.id === lastId) { - centerData = realTasks.slice(index + 1, index + 1 + params.pageSize) || []; - } else if (params.queryType === 0 && item.id === firstId) { - if (index >= params.pageSize) { - centerData = realTasks.slice(index - params.pageSize, index) || []; - } else { - centerData = realTasks.slice(0, index) || []; - } - } - }) - } else { - // 显示任务中没有真实任务数据 - // 已显示任务的第一个任务时间 - const firstTime = showTasks.length ? showTasks[0].planStart : ''; - // 已显示任务的最后一个任务时间 - const lastTime = showTasks.length ? showTasks[showTasks.length - 1].planStart : ''; - - try { - realTasks.forEach((item, index) => { - if (params.queryType === 1) { - if (dayjs(+lastTime).isSame(+item.planStart, timeGranularity.value) || dayjs(+lastTime).isBefore(+item.planStart, timeGranularity.value)) { - centerData = realTasks.slice(index, index + params.pageSize) || []; - throw Error(); - } - } else { - if (dayjs(+firstTime).isSame(+item.planStart, timeGranularity.value) || dayjs(+firstTime).isAfter(+item.planStart, timeGranularity.value)) { - if (index >= params.pageSize) { - centerData = realTasks.slice(index - params.pageSize, index) || []; - } else { - centerData = realTasks.slice(0, index) || []; - } - } - } - }) - } catch (e) { - console.log('退出循环') - } - } - - console.log('111111111', centerData); - return centerData; - } - - async function handleTasksData(params, centerData, realTasks) { - /** - * 3、查找的任务数量是否>=15 - * 3-1、是。 - * 判断时间跨度是否>=15 - * 3-1-1、是。显示时间刻度范围内的任务 - * 3-1-2、否。显示全部任务并删除多余的刻度 - * 3-2、否。 - * 判断时间跨度是否>=15 - * 3-2-1、是。显示时间刻度范围内的任务 - * 3-2-2、否。 - * 下一页是否为0 - * 3-2-2-1、是。无下一页,显示任务和刻度,之后继续展示刻度 - * 3-2-2-1、否。查找下一页数据并重复上述步骤 - */ - const startTime = centerData.length ? centerData[0].planStart : ''; - const endTime = centerData.length ? centerData[centerData.length - 1].planStart : ''; - let centerTime = dayjs(+startTime).add(params.pageSize, timeGranularity.value);\ - // 时间跨度是否大于等于15 - let isExceed = dayjs(+centerTime).isBefore(+endTime, timeGranularity.value) || dayjs(+centerTime).isSame(+endTime, timeGranularity.value); - - let nextPage = params.queryType === 0 ? upNextPage.value : downNextPage.value; // 下一页的值 - if (isExceed || centerData.length >= params.pageSize || nextPage === 0) { - params.queryType === 0 ? setPrevPlaceholderTasks(params) : setNextPlaceholderTasks(params); - } - - let showTasks = tasks.value; // 显示的数据 - - const firstDetailIndex = showTasks.findIndex(task => task.detailId); // 显示任务中存在真实任务 - const firstId = showTasks[firstDetailIndex].id; - let lastDetailIndex = -1; - showTasks.forEach((item, index) => { - if (item.detailId) { - lastDetailIndex = index; - } - }) - const lastId = showTasks[lastDetailIndex].id; - - showTasks.forEach((task, index) => { - const arr = centerData.filter(item => dayjs(+item.planStart).isSame(+task.planStart, timeGranularity.value)); - if (arr && arr.length) { - if (firstDetailIndex > -1) { - if (params.queryType === 1 && task.id === lastId) { - showTasks.splice(index + 1, 0, [...arr]) - } else (params.queryType === 0 && task.id === firstId) { - showTasks.splice(index, 0, [...arr]) - } - } else { - showTasks.splice(index, 1, [...arr]); - } - } - }) - - showTasks = flatten(showTasks); // 1维拍平 - - if (!isExceed) { - if (centerData.length < params.pageSize && nextPage > 0) { - await getTasks({pageNum: nextPage, queryType: params.queryType}); - return; - } - - let data = params.queryType === 0 ? centerData[0] : centerData[centerData.length - 1]; - showTasks.forEach((item, index) => { - if (item.id === data.id) { - len = index; - } - }) - - showTasks = params.queryType === 0 ? showTasks.slice(len) : showTasks.slice(0, len + 1); - } - - if (showTasks.length > 80) { - showTasks = param.queryType === 0 ? showTasks.slice(0, 80) : showTasks.slice(showTasks.length - 80); - } - - store.commit('task/clearTasks'); - param.queryType === 0 ? store.commit('task/setUpTasks', showTasks) : store.commit('task/setDownTasks', showTasks); - } - - // 已显示的任务第一个id和最后一个id - async function showTaskId(params, showTasks, realTasks) { - const firstDetailIndex = showTasks.findIndex(task => task.detailId); - const firstId = firstDetailIndex === -1 ? 0 : showTasks[firstDetailIndex].id; - let lastDetailIndex = -1; - showTasks.forEach((item, index) => { - if (item.detailId) { - lastDetailIndex = index; - } - }) - const lastId = lastDetailIndex === -1 ? 0 : showTasks[lastDetailIndex].id; - - let centerData = params.queryType === 0 ? [] : realTasks.slice(0, params.pageSize); - let flag = false; - realTasks.forEach((item, index) => { - if (params.queryType === 1 && item.id === lastId) { - flag = true; - centerData = realTasks.slice(index + 1, index + 1 + params.pageSize) || []; - } else if (params.queryType === 0 && item.id === firstId) { - flag = true; - centerData = realTasks.slice(index - params.pageSize, index) || []; - } - }) - - if (!flag) { - centerData = 0 - } - - console.log('111111', centerData, realTasks) - - // 1、数量大于等于15 centerData.length >= 15 - // 2、时间跨度大于等于15 - const startTime = centerData.length ? centerData[0].planStart : ''; - const endTime = centerData.length ? centerData[centerData.length - 1].planStart : ''; - let centerTime = dayjs(+startTime).add(params.pageSize, timeGranularity.value); - let isExceed = dayjs(+centerTime).isBefore(+endTime, timeGranularity.value) || dayjs(+centerTime).isSame(+endTime, timeGranularity.value); - // 3、下一页不为0 nextPage != 0 - let nextPage = params.queryType === 0 ? upNextPage.value : downNextPage.value; // 下一页的值 - - if (centerData.length < 15 && !isExceed && nextPage > 0) { - await getTasks({pageNum: nextPage, queryType: params.queryType}); - // centerData = await showTaskId(params, tasks.value, currRoleRealTasks.value); - } - - return centerData; - } - - /** - * 刻度模式数据处理 - * 大于等于15天,真实数据的时间跨度 - * 或大于等于15条,真实数据的数量 - * 不用重新加载数据 - * @param {Object} params - */ - function tasksData(query, centerData, realTasks) { - let params = generateGetTaskParam(query); - - params.queryType === 0 ? setPrevPlaceholderTasks(params) : setNextPlaceholderTasks(params); - let showTasks = tasks.value; // 显示的数据 - - - - let nextPage = param.queryType === 0 ? upNextPage.value : downNextPage.value; // 下一页的值 - - // 判断条件 - let isAccordTerm1 = false, isAccordTerm2 = false; - if (centerData.length > 0) { - // 1.数据数量>=15条 - isAccordTerm1 = centerData.length >= param.pageSize; - - // 2.数据最后一条数据时间>=当前查询的时间 - if (param.queryType === 0) { - let firstData = dayjs(centerData[0].planStart).add(param.pageSize, timeGranularity.value); - isAccordTerm2 = dayjs(+firstData).isBefore(+currUpTimeNode.value, timeGranularity.value) || dayjs(+firstData).isSame(+currUpTimeNode.value, timeGranularity.value); - } else { - let lastData = dayjs(centerData[centerData.length - 1].planStart).subtract(param.pageSize, timeGranularity.value); - isAccordTerm2 = dayjs(+lastData).isAfter(+currDownTimeNode.value, timeGranularity.value) || dayjs(+lastData).isSame(+currDownTimeNode.value, timeGranularity.value); - } - } - - // 3.下一页===0 - // 不需要添加新数据 - if (!isAccordTerm1 && !isAccordTerm2 && nextPage > 0) { - // getTasks({pageNum: nextPage, queryType: param.queryType}); - } else { - let tasksArr = [], isReplace = false, firstIndex = -1, selctedIndex = -1, replaceTime = 0; - showTasks.forEach((task, index) => { - const arr = centerData.filter(item => dayjs(+item.planStart).isSame(+task.planStart, timeGranularity.value)); - if (arr && arr.length) { - if (task.detailId) { - // 新数据与旧数据时间有重叠 - if (param.queryType === 1) { - selctedIndex = index; - tasksArr = [...arr]; - } else { - firstIndex = showTasks.findIndex(data => dayjs(+data.planStart).isSame(+task.planStart, timeGranularity.value)); - } - } else { - showTasks.splice(index, 1, [...arr]); - } - } - }) - - if (selctedIndex) { - showTasks.splice(selctedIndex + 1, 0, [...tasksArr]) - } - - if (firstIndex) { - showTasks.splice(firstIndex, 0, [...tasksArr]) - } - - showTasks.forEach((task, index) => { - const arr = centerData.filter(item => dayjs(+item.planStart).isSame(+task.planStart, timeGranularity.value)); - if (arr && arr.length) { - if (!task.detailId) { // 新数据与旧数据时间有重叠 - showTasks.splice(index, 1, [...arr]); // 这里加入的数据是array类型的, [{},{},[],[],{}] - } - } - }) - - showTasks = flatten(showTasks); // 1维拍平 - - if (isAccordTerm1 && !isAccordTerm2) { - let len = 0; - let data = param.queryType === 0 ? centerData[0] : centerData[centerData.length - 1]; - showTasks.forEach((item, index) => { - if (item.id === data.id) { - len = index; - } - }) - - showTasks = param.queryType === 0 ? showTasks.slice(len) : showTasks.slice(0, len + 1); - } - - if (showTasks.length > 80) { - showTasks = param.queryType === 0 ? showTasks.slice(0, 80) : showTasks.slice(showTasks.length - 80); - } - } - - store.commit('task/clearTasks'); - param.queryType === 0 ? store.commit('task/setUpTasks', showTasks) : store.commit('task/setDownTasks', showTasks); - } - - // 设置时间轴向上的空数据 - function setPrevPlaceholderTasks() { - store.commit('task/setTopEnd', true); - let startTime = ''; - if (!tasks.value || !tasks.value.length) { - startTime = Date.now(); // 没有任务就应该是时间基准点 - } else { - startTime = tasks.value[0].planStart - 0; // 有任务就是第一个任务的计划开始时间 - } - const placeholderTasks = uni.$task.setPlaceholderTasks(startTime, true, timeGranularity.value); - store.commit('task/setCurrUpTimeNode', startTime); - store.commit('task/setUpTasks', placeholderTasks); - } - - // 设置时间轴向下的空数据 - function setNextPlaceholderTasks(params) { - // store.commit('task/setBottomEnd', true); - console.log('ddddddddd') - let startTime = ''; - if (!tasks.value || !tasks.value.length) { - startTime = Date.now(); - } else { - startTime = dayjs(+tasks.value[tasks.value.length - 1].planStart).add(1, timeGranularity.value).valueOf(); - } - - if (params.taskId) { - realTasks.value.forEach(item => { - if (item.id === params.taskId) { - startTime = Number(item.planStart); - } - }) - } - - const initData = uni.$task.setPlaceholderTasks(startTime, false, timeGranularity.value); - store.commit('task/setCurrDownTimeNode', startTime); - store.commit('task/setDownTasks', initData); - } - - /** - * 当日常任务发生变化时 - * 将新获取到的日常任务放在allTasks里 - */ - watch(tasks, newValue => { - // 添加到allTasks里 - const index = visibleRoles.value.findIndex(role => role.id === roleId.value); - const arr = [...allTasks.value]; - arr[index].task = [...newValue]; - store.commit('task/setAllTasks', arr); - }); - - return { - initPlanTasks, - getTasks, - dataRender - } -} diff --git a/hooks/project/useGetTasks - 副本 (3).js b/hooks/project/useGetTasks - 副本 (3).js deleted file mode 100644 index 8bc439a..0000000 --- a/hooks/project/useGetTasks - 副本 (3).js +++ /dev/null @@ -1,343 +0,0 @@ -import { computed, nextTick, watch } from 'vue'; -import { useStore } from 'vuex'; -import { flatten } from 'lodash'; -import dayjs from 'dayjs'; - -export default function useGetTasks() { - const store = useStore(); - const tasks = computed(() => store.state.task.tasks); - const timeLineType = computed(() => store.state.task.timeLineType); // 时间轴模式 - const realTasks = computed(() => store.state.task.realTasks); // 真实任务 - const downNextPage = computed(() => store.state.task.downNextPage); // 下一页 - const upNextPage = computed(() => store.state.task.upNextPage); // 下一页 - const currUpTimeNode = computed(() => store.state.task.currUpTimeNode); // 当前查询的时间 - const currDownTimeNode = computed(() => store.state.task.currDownTimeNode); // 当前查询的时间 - const roleId = computed(() => store.state.role.roleId); - const timeNode = computed(() => store.state.task.timeNode); - const timeUnit = computed(() => store.state.task.timeUnit); - const visibleRoles = computed(() => store.state.role.visibleRoles); - const allTasks = computed(() => store.state.task.allTasks); - const roleIndex = computed(() => store.state.role.roleIndex); - - const projectId = computed(() => store.getters['project/projectId']); - const timeGranularity = computed(() => store.getters['task/timeGranularity']); - - const remindData = computed(() => store.state.socket.remindData); // 小红点 - - const currRoleRealTasks = computed(() => store.state.task.currRoleRealTasks); // 当前角色的真实任务数据 - - // 初始化 定期任务 - async function initPlanTasks() { - if (timeLineType.value === 1) setNextPlaceholderTasks({}); - await getTasks({}); // 获取初始数据 - // await dataRender({}); - } - - /** - * 生成getTasks所用的参数 - * @param {object} query getTasks传递的参数 - */ - function generateGetTaskParam(query) { - return { - roleId: roleId.value, - timeNode: query.timeNode || timeNode.value, - timeUnit: query.timeUnit || timeUnit.value, - queryType: query.queryType === 0 ? 0 : 1, - pageNum: query.pageNum || 1, - pageSize: query.pageSize || uni.$taskConfig.pageCount, - taskId: query.taskId || '' - }; - } - - /** - * 根据时间基准点和角色查找定期任务 - * @param {object} query - * @param {string} query.roleId 角色id - * @param {string} query.timeNode 时间基准点 默认当前 - * @param {string} query.timeUnit 时间颗粒度 默认天 - * @param {string} query.queryNum 查找颗粒度数量 默认3个 - * @param {number} query.queryType 0向上查找 1向下查找(默认) 下查包含自己,上查不包含 - */ - function getTasks(query) { - store.commit('task/setShowSkeleton', false); - - const params = generateGetTaskParam(query); - uni.$catchReq.getTaskByNum(params, (err, data) => { - store.commit('task/setShowSkeleton', false); - if (err) { - // TODO: 提示错误 - console.error('err: ', err); - } else { - store.commit('task/setShowScrollTo', true); - - params.queryType === 0 ? store.commit('task/setUpRealTasks', data.list) : store.commit('task/setDownRealTasks', data.list); - params.queryType === 0 ? store.commit('task/setUpNextPage', data.nextPage) : store.commit('task/setDownNextPage', data.nextPage); // 下一页 - - const index = visibleRoles.value.findIndex(role => role.id === roleId.value); - const arr = [...allTasks.value]; - arr[index].realTasks = [...realTasks.value]; - store.commit('task/setAllTasks', arr); - store.commit('task/setCurrRoleRealTasks', arr[index].realTasks); // 设置当前角色的真实任务数据 - - // 数据处理 - dataRender(params); - } - }); - } - - function dataRender(params) { - timeLineType.value === 1 ? renderScaleTask(params) : renderConTask(params); - } - - // 刻度模式数据处理 - async function renderScaleTask(query) { - const params = generateGetTaskParam(query); - let centerData = await showTaskTime(params, tasks.value, currRoleRealTasks.value) || []; - await handleTasksData(params, centerData, currRoleRealTasks.value); - } - - // 已显示的任务第一个时间和最后一个时间 - async function showTaskTime(params, showTasks, realTasks) { - - // 初始值 - let centerData = params.queryType === 0 ? [] : realTasks.slice(0, params.pageSize); - - /** - * 1、判断显示任务中是否有真实任务 - * 1-1、有。根据id查找任务 - * 1-2、无。根据时间查找任务 - * 2、查找15个任务 - */ - const firstDetailIndex = showTasks.findIndex(task => task.detailId); - - if (firstDetailIndex > -1) { - // 显示任务中有真实任务数据 - const firstId = showTasks[firstDetailIndex].id; - let lastDetailIndex = -1; - showTasks.forEach((item, index) => { - if (item.detailId) { - lastDetailIndex = index; - } - }) - const lastId = showTasks[lastDetailIndex].id; - - realTasks.forEach((item, index) => { - if (params.queryType === 1 && item.id === lastId) { - centerData = realTasks.slice(index + 1, index + 1 + params.pageSize) || []; - } else if (params.queryType === 0 && item.id === firstId) { - if (index >= params.pageSize) { - centerData = realTasks.slice(index - params.pageSize, index) || []; - } else { - centerData = realTasks.slice(0, index) || []; - } - } - }) - } else { - // 显示任务中没有真实任务数据 - // 已显示任务的第一个任务时间 - const firstTime = showTasks.length ? showTasks[0].planStart : ''; - // 已显示任务的最后一个任务时间 - const lastTime = showTasks.length ? showTasks[showTasks.length - 1].planStart : ''; - - try { - realTasks.forEach((item, index) => { - if (params.queryType === 1) { - if (dayjs(+lastTime).isSame(+item.planStart, timeGranularity.value) || dayjs(+lastTime).isBefore(+item.planStart, timeGranularity.value)) { - centerData = realTasks.slice(index, index + params.pageSize) || []; - throw Error(); - } - } else { - if (dayjs(+firstTime).isSame(+item.planStart, timeGranularity.value) || dayjs(+firstTime).isAfter(+item.planStart, timeGranularity.value)) { - if (index >= params.pageSize) { - centerData = realTasks.slice(index - params.pageSize, index) || []; - } else { - centerData = realTasks.slice(0, index) || []; - } - } - } - }) - } catch (e) { - console.log('退出循环') - } - } - - console.log('111111111', centerData); - return centerData; - } - - async function handleTasksData(params, centerData, realTasks) { - /** - * 3、查找的任务数量是否>=15 - * 3-1、是。 - * 判断时间跨度是否>=15 - * 3-1-1、是。显示时间刻度范围内的任务 - * 3-1-2、否。显示全部任务并删除多余的刻度 - * 3-2、否。 - * 判断时间跨度是否>=15 - * 3-2-1、是。显示时间刻度范围内的任务 - * 3-2-2、否。 - * 下一页是否为0 - * 3-2-2-1、是。无下一页,显示任务和刻度,之后继续展示刻度 - * 3-2-2-1、否。查找下一页数据并重复上述步骤 - */ - const startTime = centerData.length ? centerData[0].planStart : ''; - const endTime = centerData.length ? centerData[centerData.length - 1].planStart : ''; - let centerTime = dayjs(+startTime).add(params.pageSize, timeGranularity.value); - // 时间跨度是否大于等于15 - let isExceed = dayjs(+centerTime).isBefore(+endTime, timeGranularity.value) || dayjs(+centerTime).isSame(+endTime, timeGranularity.value); - - let showTasks = tasks.value; // 显示的数据 - const nextPage = params.queryType === 0 ? upNextPage.value : downNextPage.value; // 下一页的值 - console.log('下一页', nextPage, isExceed, params.pageSize) - if (isExceed || centerData.length >= params.pageSize || nextPage === 0) { - params.queryType === 0 ? setPrevPlaceholderTasks(params) : setNextPlaceholderTasks(params); - showTasks = tasks.value; - console.log('fffffff', showTasks); - } - - if (centerData.length === 0 && nextPage === 0) { - params.queryType === 0 ? setPrevPlaceholderTasks(params) : setNextPlaceholderTasks(params); - showTasks = tasks.value; - console.log('ccccc', showTasks); - } else { - console.log('ttttttttt', showTasks); - const firstDetailIndex = showTasks.findIndex(task => task.detailId); // 显示任务中存在真实任务 - const firstId = firstDetailIndex > -1 ? showTasks[firstDetailIndex].id : ''; - let lastDetailIndex = -1; - showTasks.forEach((item, index) => { - if (item.detailId) { - lastDetailIndex = index; - } - }) - const lastId = lastDetailIndex > -1 ? showTasks[lastDetailIndex].id : ''; - - showTasks.forEach((task, index) => { - const arr = centerData.filter(item => dayjs(+item.planStart).isSame(+task.planStart, timeGranularity.value)); - if (arr && arr.length) { - if (firstDetailIndex > -1) { - if (params.queryType === 1 && task.id === lastId) { - showTasks.splice(index + 1, 0, [...arr]) - } else if (params.queryType === 0 && task.id === firstId) { - showTasks.splice(index, 0, [...arr]) - } - } else { - showTasks.splice(index, 1, [...arr]); - } - } - }) - - showTasks = flatten(showTasks); // 1维拍平 - - if (!isExceed) { - if (centerData.length < params.pageSize && nextPage > 0) { - await getTasks({pageNum: nextPage, queryType: params.queryType}); - console.log('oooooooo', showTasks); - return; - } - - if (centerData.length) { - let len = 0; - let data = params.queryType === 0 ? centerData[0] : centerData[centerData.length - 1]; - showTasks.forEach((item, index) => { - if (item.id === data.id) { - len = index; - } - }) - - showTasks = params.queryType === 0 ? showTasks.slice(len) : showTasks.slice(0, len + 1); - } - } - } - - if (showTasks.length > 80) { - showTasks = params.queryType === 0 ? showTasks.slice(0, 80) : showTasks.slice(showTasks.length - 80); - } - - store.commit('task/clearTasks'); - params.queryType === 0 ? store.commit('task/setUpTasks', showTasks) : store.commit('task/setDownTasks', showTasks); - } - - // 任务模式 - async function renderConTask(params) { - let nextPage = params.queryType === 0 ? upNextPage.value : downNextPage.value; // 下一页的值 - let showTasks = tasks.value; - let centerData = await showTaskId(params, showTasks, realTasks.value) || []; - - if (centerData.length < 15 && nextPage > 0) { - getTasks({pageNum: nextPage, queryType: params.queryType}); - } else { - if (params.queryType === 0) { - showTasks = [...centerData, ...showTasks]; - } else { - showTasks = [...showTasks, ...centerData]; - } - } - - if (showTasks.length < 15 && nextPage === 0 && params.queryType === 1) { - getTasks({pageNum: 1, queryType: 0}); - } - - if (showTasks.length > 80) { - showTasks = params.queryType === 0 ? showTasks.slice(0, 80) : showTasks.slice(showTasks.length - 80); - } - - store.commit('task/clearTasks'); - params.queryType === 0 ? store.commit('task/setUpTasks', showTasks) : store.commit('task/setDownTasks', showTasks); - } - - // 设置时间轴向上的空数据 - function setPrevPlaceholderTasks() { - store.commit('task/setTopEnd', true); - let startTime = ''; - if (!tasks.value || !tasks.value.length) { - startTime = Date.now(); // 没有任务就应该是时间基准点 - } else { - startTime = tasks.value[0].planStart - 0; // 有任务就是第一个任务的计划开始时间 - } - const placeholderTasks = uni.$task.setPlaceholderTasks(startTime, true, timeGranularity.value); - store.commit('task/setCurrUpTimeNode', startTime); - store.commit('task/setUpTasks', placeholderTasks); - } - - // 设置时间轴向下的空数据 - function setNextPlaceholderTasks(params) { - // store.commit('task/setBottomEnd', true); - console.log('ddddddddd') - let startTime = ''; - if (!tasks.value || !tasks.value.length) { - startTime = Date.now(); - } else { - startTime = dayjs(+tasks.value[tasks.value.length - 1].planStart).add(1, timeGranularity.value).valueOf(); - } - - if (params.taskId) { - realTasks.value.forEach(item => { - if (item.id === params.taskId) { - startTime = Number(item.planStart); - } - }) - } - - const initData = uni.$task.setPlaceholderTasks(startTime, false, timeGranularity.value); - store.commit('task/setCurrDownTimeNode', startTime); - store.commit('task/setDownTasks', initData); - } - - /** - * 当日常任务发生变化时 - * 将新获取到的日常任务放在allTasks里 - */ - watch(tasks, newValue => { - // 添加到allTasks里 - const index = visibleRoles.value.findIndex(role => role.id === roleId.value); - const arr = [...allTasks.value]; - arr[index].task = [...newValue]; - store.commit('task/setAllTasks', arr); - }); - - return { - initPlanTasks, - getTasks, - dataRender - } -} diff --git a/hooks/project/useGetTasks - 副本.js b/hooks/project/useGetTasks - 副本.js deleted file mode 100644 index 032d147..0000000 --- a/hooks/project/useGetTasks - 副本.js +++ /dev/null @@ -1,263 +0,0 @@ -import { computed, nextTick, watch } from 'vue'; -import { useStore } from 'vuex'; -import { flatten } from 'lodash'; -import dayjs from 'dayjs'; -export default function useGetTasks() { - const store = useStore(); - const tasks = computed(() => store.state.task.tasks); - const basicTasks = computed(() => store.state.task.basicTasks); - const upBasicTasks = computed(() => store.state.task.upBasicTasks); - const nextPage = computed(() => store.state.task.nextPage); // 下一页 - const upNextPage = computed(() => store.state.task.upNextPage); // 下一页 - // const lastPage = computed(() => store.state.task.lastPage); // 最后一页 - const roleId = computed(() => store.state.role.roleId); - const timeNode = computed(() => store.state.task.timeNode); - const timeUnit = computed(() => store.state.task.timeUnit); - const visibleRoles = computed(() => store.state.role.visibleRoles); - const allTasks = computed(() => store.state.task.allTasks); - const roleIndex = computed(() => store.state.role.roleIndex); - - const projectId = computed(() => store.getters['project/projectId']); - const timeGranularity = computed(() => store.getters['task/timeGranularity']); - - // 初始化 定期任务 - async function initPlanTasks() { - await getTasks({}); // 获取初始数据 - } - - /** - * 根据时间基准点和角色查找定期任务 - * @param {object} query - * @param {string} query.roleId 角色id - * @param {string} query.timeNode 时间基准点 默认当前 - * @param {string} query.timeUnit 时间颗粒度 默认天 - * @param {string} query.queryNum 查找颗粒度数量 默认3个 - * @param {number} query.queryType 0向上查找 1向下查找(默认) 下查包含自己,上查不包含 - */ - function getTasks(query) { - store.commit('task/setShowSkeleton', false); - - const params = { - roleId: roleId.value, - timeUnit: query.timeUnit || timeUnit.value, - queryType: query.queryType === 0 ? 0 : 1, - pageNum: query.pageNum || 1, - pageSize: query.pageSize || uni.$taskConfig.pageCount - } - - uni.$catchReq.getTaskByNum(params, (err, data) => { - store.commit('task/setShowSkeleton', false); - if (err) { - // TODO: 提示错误 - console.error('err: ', err); - } else { - store.commit('task/setShowScrollTo', true); - - if (params.queryType === 0) { - // 将接口返回的数据存储到store - let lists = [...upBasicTasks.value, ...data.list]; - store.commit('task/setUpBasicTask', lists); - store.commit('task/setUpNextPage', data.nextPage); // 下一页 - } else { - let lists = [...basicTasks.value, ...data.list]; - store.commit('task/setBasicTask', lists); - store.commit('task/setNextPage', data.nextPage); // 下一页 - } - - // 刻度模式数据处理 - renderTask(params); - } - }); - } - - // 刻度模式数据处理 - function renderTask(params) { - params.queryType === 0 ? setPrevPlaceholderTasks() : setNextPlaceholderTasks(); - tasksData(params); - } - - /** - * 刻度模式数据处理 - * 大于等于15天,真实数据的时间跨度 - * 或大于等于15条,真实数据的数量 - * 不用重新加载数据 - * @param {Object} params - */ - function tasksData(params) { - let oldTasks = tasks.value; - let realTasks = params.queryType === 0 ? upBasicTasks.value : basicTasks.value; - // 下一页的值 - let next = params.queryType === 0 ? upNextPage.value : nextPage.value; - - // 真实数据是否>=15条 || 是否>=15天 - let term = tremFilter(params); - - if (term || next === 0) { - // 过滤真实数据中在tasks时间段中的数据,并将最后的数据存储到tasksArr数组中 - let tasksArr = [], taskLen = 0, lastIndex = 0; - oldTasks.forEach((task, index) => { - const oldArr = oldTasks.filter(item => dayjs(+item.planStart).isSame(+task.planStart, timeGranularity.value)); - const arr = realTasks.filter(item => dayjs(+item.planStart).isSame(+task.planStart, timeGranularity.value)); - - if (arr && arr.length) { - if (task.detailId) { - tasksArr = [...arr]; - lastIndex = index; - } else { - taskLen += arr.length; // 在时间刻度内的数据量 - oldTasks.splice(index, 1, [...arr]); // 这里加入的数据是array类型的, [{},{},[],[],{}] - } - } - }) - - // 数据与上一页最后一个数据时间节点相同 - if (lastIndex) { - taskLen += tasksArr.length; - oldTasks.splice(lastIndex, 0, [...tasksArr]); - } - - oldTasks = flatten(oldTasks); // 1维拍平 - - if (taskLen === params.pageSize) { - // 如果真实任务所有数据都在tasks时间段中,则将所有任务显示,并且从最后一个真实任务的时间截止,存储到tasks中 - let len = 0; - oldTasks.forEach((item, index) => { - if (item.id === realTasks[realTasks.length - 1].id) { - len = index; - } - }) - - oldTasks = oldTasks.slice(0, len + 1); - params.queryType === 0 ? store.commit('task/setUpBasicTask', []) : store.commit('task/setBasicTask', []); - } else { - // 只有一部分真实数据展示,展示tasks时间段加时间段内的真实数据 - params.queryType === 0 ? store.commit('task/setUpBasicTask', realTasks.slice(taskLen)) : store.commit('task/setBasicTask', realTasks.slice(taskLen)); - } - - store.commit('task/clearTasks'); - params.queryType === 0 ? store.commit('task/setUpTasks', oldTasks) : store.commit('task/setDownTasks', oldTasks); - } else { - if (next > 0) { - getTasks({pageNum: params.pageNum, queryType: params.queryType}); - } - } - } - - /** - * 数据筛选条件 - * 大于等于15天,真实数据的时间跨度,且大于等于15条,真实数据的数量,不用重新加载数据 - */ - function tremFilter(params) { - let time1 = 0, time2 = 0; - let realTasks = basicTasks.value; - - if (realTasks.length > 0) { - // 真实数据第一条数据加上15天后的时间 - time1 = dayjs(+realTasks[0].planStart).add(params.pageSize, timeGranularity.value); - // 真实数据最后一条数据的时间 - time2 = dayjs(realTasks[realTasks.length - 1].planStart, timeGranularity.value); - } - - let result1 = false, result2 = false; - // 判断真实任务的时间跨度是否在15天之内 - if (time1 > 0 && time2 > 0) { - // 两个时间是否相等 - result1 = dayjs(time1).isSame(time2, timeGranularity.value); - // time1是否大于time2 - result2 = dayjs(time1).isAfter(time2, timeGranularity.value); - } - - let term1 = realTasks.length >= params.pageSize; // 大于等于15条,真实数据的数量 - // 大于等于15天,真实数据的时间跨度 - let term2 = result1 || result2; - - return term1 || term2; - } - - /** - * 用拿到的新数据 替换 时间刻度/旧数据 - * 先对比 新旧数据的 始末时间 补齐刻度 - * 再遍历对比 用任务替换刻度 - * @param {array} data 服务端返回的新数据 上边已经处理过空值 - * @param {number} type 0 -> 向上 1->向下 - */ - // function replacePrevData(data, type) { - // const obj = { tasks: tasks.value, data, timeGranularity: timeGranularity.value }; - // let oldTasks = fillPlaceholderTask(obj); // 已经上下补齐时间刻度的 - // console.log('oldTasks', oldTasks) - // // 遍历对比 用任务替换刻度 - // // TODO: tasks越来越多 遍历越来越多 需要优化 - // oldTasks.forEach((taskItem, index) => { - // const arr = data.filter(dataItem => dayjs(+dataItem.planStart).isSame(+taskItem.planStart, timeGranularity.value)); - // if (arr && arr.length) { - // oldTasks.splice(index, 1, [...arr]); // 这里加入的数据是array类型的, [{},{},[],[],{}] - // } - // }); - - // oldTasks = flatten(oldTasks); // 1维拍平 - - // store.commit('task/clearTasks'); - // type === 0 ? store.commit('task/setUpTasks', oldTasks) : store.commit('task/setDownTasks', oldTasks); - // } - - /** - * 超出旧数据上、下限 补齐时间刻度到新数据的起始时间颗粒度 - */ - // function fillPlaceholderTask(obj) { - // const { prev, next } = uni.$task.computeFillPlaceholderTaskCount(obj); - // if (prev) { - // const newTasks = uni.$task.setPlaceholderTasks(+obj.tasks[0].planStart, true, obj.timeGranularity, prev); - // store.commit('task/setUpTasks', newTasks); - // } - // if (next) { - // const newTasks = uni.$task.setPlaceholderTasks(+obj.tasks[obj.tasks.length - 1].planStart, false, obj.timeGranularity, next); - // store.commit('task/setDownTasks', newTasks); - // } - // return tasks.value; - // } - - // 设置时间轴向上的空数据 - function setPrevPlaceholderTasks() { - store.commit('task/setTopEnd', true); - let startTime = ''; - if (!tasks.value || !tasks.value.length) { - startTime = Date.now(); // 没有任务就应该是时间基准点 - } else { - startTime = tasks.value[0].planStart - 0; // 有任务就是第一个任务的计划开始时间 - } - const placeholderTasks = uni.$task.setPlaceholderTasks(startTime, true, timeGranularity.value); - store.commit('task/setUpTasks', placeholderTasks); - } - - // 设置时间轴向下的空数据 - function setNextPlaceholderTasks() { - // store.commit('task/setBottomEnd', true); - let startTime = ''; - if (!tasks.value || !tasks.value.length) { - startTime = Date.now(); - } else { - startTime = dayjs(+tasks.value[tasks.value.length - 1].planStart).add(1, timeGranularity.value); - } - const initData = uni.$task.setPlaceholderTasks(startTime, false, timeGranularity.value); - store.commit('task/setDownTasks', initData); - } - - /** - * 当日常任务发生变化时 - * 将新获取到的日常任务放在allTasks里 - */ - watch(tasks, newValue => { - // console.log('newValue----->tasks: ', tasks.value); - // 添加到allTasks里 - const index = visibleRoles.value.findIndex(role => role.id === roleId.value); - const arr = [...allTasks.value]; - arr[index].task = [...newValue]; - store.commit('task/setAllTasks', arr); - }); - - return { - initPlanTasks, - getTasks, - renderTask - }; -} diff --git a/hooks/project/useGetTasks222.js b/hooks/project/useGetTasks222.js deleted file mode 100644 index a969c59..0000000 --- a/hooks/project/useGetTasks222.js +++ /dev/null @@ -1,336 +0,0 @@ -import { computed, nextTick, watch } from 'vue'; -import { useStore } from 'vuex'; -import { flatten } from 'lodash'; -import dayjs from 'dayjs'; - -export default function useGetTasks() { - const store = useStore(); - const tasks = computed(() => store.state.task.tasks); - const timeLineType = computed(() => store.state.task.timeLineType); // 时间轴模式 - const realTasks = computed(() => store.state.task.realTasks); // 真实任务 - const downNextPage = computed(() => store.state.task.downNextPage); // 下一页 - const upNextPage = computed(() => store.state.task.upNextPage); // 下一页 - const currUpTimeNode = computed(() => store.state.task.currUpTimeNode); // 当前查询的时间 - const currDownTimeNode = computed(() => store.state.task.currDownTimeNode); // 当前查询的时间 - const roleId = computed(() => store.state.role.roleId); - const timeNode = computed(() => store.state.task.timeNode); - const timeUnit = computed(() => store.state.task.timeUnit); - const visibleRoles = computed(() => store.state.role.visibleRoles); - const allTasks = computed(() => store.state.task.allTasks); - const roleIndex = computed(() => store.state.role.roleIndex); - - const projectId = computed(() => store.getters['project/projectId']); - const timeGranularity = computed(() => store.getters['task/timeGranularity']); - - const remindData = computed(() => store.state.socket.remindData); // 小红点 - - const currRoleRealTasks = computed(() => store.state.task.currRoleRealTasks); // 当前角色的真实任务数据 - const currRoleShowTasks = computed(() => store.state.task.currRoleShowTasks); // 当前角色的展示任务数据 - const currLocationTaskId = computed(() => store.state.socket.currLocationTaskId); - - // 初始化 定期任务 - async function initPlanTasks() { - if (timeLineType.value === 1) setNextPlaceholderTasks({}); - console.log('查询定期任务'); - await getTasks({}); // 获取初始数据 - // await dataRender({}); - } - - /** - * 生成getTasks所用的参数 - * @param {object} query getTasks传递的参数 - */ - function generateGetTaskParam(query) { - return { - roleId: roleId.value, - timeNode: query.timeNode || timeNode.value, - timeUnit: query.timeUnit || timeUnit.value, - queryType: query.queryType === 0 ? 0 : 1, - pageNum: query.pageNum || 1, - pageSize: query.pageSize || uni.$taskConfig.pageCount, - taskId: query.taskId || currLocationTaskId.value - }; - } - - /** - * 根据时间基准点和角色查找定期任务 - * @param {object} query - * @param {string} query.roleId 角色id - * @param {string} query.timeNode 时间基准点 默认当前 - * @param {string} query.timeUnit 时间颗粒度 默认天 - * @param {string} query.queryNum 查找颗粒度数量 默认3个 - * @param {number} query.queryType 0向上查找 1向下查找(默认) 下查包含自己,上查不包含 - */ - function getTasks(query) { - store.commit('task/setShowSkeleton', false); - - const params = generateGetTaskParam(query); - console.log('查询定期任务api', params); - uni.$catchReq.getTaskByNum(params, (err, data) => { - store.commit('task/setShowSkeleton', false); - if (err) { - // TODO: 提示错误 - console.error('err: ', err); - } else { - store.commit('task/setShowScrollTo', true); - - params.queryType === 0 ? store.commit('task/setUpRealTasks', data.list) : store.commit('task/setDownRealTasks', data.list); - - console.log('查询到的真实任务', data.list); - const index = visibleRoles.value.findIndex(role => role.id === roleId.value); - console.log('api当前角色id', roleId.value, index); - const arr = [...allTasks.value]; - arr[index].realTasks = [...realTasks.value]; - arr[index].upNextPage = params.queryType === 0 ? data.nextPage : 1; - arr[index].downNextPage = params.queryType === 1 ? data.nextPage : 1; - store.commit('task/setAllTasks', arr); - console.log('设置当前真实任务', arr[index].realTasks); - store.commit('task/setCurrRoleRealTasks', arr[index].realTasks); // 设置当前角色的真实任务数据 - params.queryType === 0 ? store.commit('task/setUpNextPage', arr[index].upNextPage) : store.commit('task/setDownNextPage', arr[index].downNextPage); // 下一页 - - // 如果第一次渲染但没有空数据则加载空数据 - if (!currRoleShowTasks.value || !currRoleShowTasks.value.length && timeLineType.value === 1) { - setNextPlaceholderTasks(params); - } - - // 数据处理 - dataRender(params); - } - }); - } - - function dataRender(params) { - timeLineType.value === 1 ? renderScaleTask(params) : renderConTask(params); - } - - // 刻度模式数据处理 - async function renderScaleTask(query) { - const params = generateGetTaskParam(query); - console.log('当前角色id', roleId.value); - console.log('当前角色的真实任务', currRoleRealTasks.value); - let centerData = await showTaskTime(params, currRoleShowTasks.value, currRoleRealTasks.value) || []; - console.log('需要显示的真实任务', centerData); - await handleTasksData(params, centerData, currRoleRealTasks.value); - } - - // 已显示的任务第一个时间和最后一个时间 - async function showTaskTime(params, showTasks, realTasks) { - /** - * 1、判断显示任务中是否有真实任务 - * 1-1、有。根据id查找任务 - * 1-2、无。根据时间查找任务 - * 2、查找15个任务 - */ - - // 初始值 - // 显示任务中没有真实任务数据 - let centerData = []; - if (realTasks.length > params.pageSize && params.queryType === 0) { - centerData = realTasks.slice(realTasks.length - params.pageSize); - } else { - centerData = realTasks.slice(0, params.pageSize); - } - - const firstDetailIndex = showTasks.findIndex(task => task.detailId); - if (firstDetailIndex > -1) { - // 显示任务中有真实任务数据 - const firstId = showTasks[firstDetailIndex].id; - let lastDetailIndex = -1; - showTasks.forEach((item, index) => { - if (item.detailId) { - lastDetailIndex = index; - } - }) - const lastId = showTasks[lastDetailIndex].id; - - realTasks.forEach((item, index) => { - if (params.queryType === 1 && item.id === lastId) { - centerData = realTasks.slice(index + 1, index + 1 + params.pageSize); - } else if (params.queryType === 0 && item.id === firstId) { - centerData = index >= params.pageSize ? realTasks.slice(index - params.pageSize, index) : realTasks.slice(0, index); - } - }) - } - - return centerData; - } - - async function handleTasksData(params, centerData, realTasks) { - /** - * 3、查找的任务数量是否>=15 - * 3-1、是。 - * 判断时间跨度是否>=15 - * 3-1-1、是。显示时间刻度范围内的任务 - * 3-1-2、否。显示全部任务并删除多余的刻度 - * 3-2、否。 - * 判断时间跨度是否>=15 - * 3-2-1、是。显示时间刻度范围内的任务 - * 3-2-2、否。 - * 下一页是否为0 - * 3-2-2-1、是。无下一页,显示任务和刻度,之后继续展示刻度 - * 3-2-2-1、否。查找下一页数据并重复上述步骤 - */ - let showTasks = currRoleShowTasks.value; // 显示的数据 - const nextPage = params.queryType === 0 ? upNextPage.value : downNextPage.value; // 下一页的值 - if (centerData.length) { - let centerDataTime = '', // 中间数据的时间 - scaleTime = '', // 空时间节点的开始时间 - centerTime = '', // 中间数据+/-15后的数据 - isExceed = false; // 时间跨度是否大于15 - - if (params.queryType) { - centerDataTime = centerData[centerData.length - 1].planStart; - scaleTime = currDownTimeNode.value; - centerTime = dayjs(+centerDataTime).subtract(params.pageSize, timeGranularity.value); - isExceed = dayjs(+centerTime).isSame(+scaleTime, timeGranularity.value) || dayjs(+centerTime).isAfter(+scaleTime, timeGranularity.value) - } else { - centerDataTime = centerData[0].planStart; - scaleTime = currUpTimeNode.value; - centerTime = dayjs(+centerDataTime).add(params.pageSize, timeGranularity.value); - isExceed = dayjs(+centerTime).isSame(+scaleTime, timeGranularity.value) || dayjs(+centerTime).isBefore(+scaleTime, timeGranularity.value) - } - - const firstDetailIndex = showTasks.findIndex(task => task.detailId); // 显示任务中存在真实任务 - const firstId = firstDetailIndex > -1 ? showTasks[firstDetailIndex].id : ''; - let lastDetailIndex = -1; - showTasks.forEach((item, index) => { - if (item.detailId) { - lastDetailIndex = index; - } - }) - const lastId = lastDetailIndex > -1 ? showTasks[lastDetailIndex].id : ''; - - showTasks.forEach((task, index) => { - const arr = centerData.filter(item => dayjs(+item.planStart).isSame(+task.planStart, timeGranularity.value)); - if (arr.length) { - if (params.queryType === 1 && task.id === lastId) { - showTasks.splice(index + 1, 0, [...arr]) - } else if (params.queryType === 0 && task.id === firstId) { - showTasks.splice(index, 0, [...arr]) - } else { - showTasks.splice(index, 1, [...arr]) - } - } - }) - - showTasks = flatten(showTasks); // 1维拍平 - - if (!isExceed) { - if (centerData.length >= params.pageSize) { - let len = -1; - let data = params.queryType === 0 ? centerData[0] : centerData[centerData.length - 1]; - showTasks.forEach((item, index) => { - if (item.id === data.id) { - len = index; - } - }) - - if (len > -1) { - showTasks = params.queryType === 0 ? showTasks.slice(len) : showTasks.slice(0, len + 1); - } - } else if (nextPage > 0) { - console.log('数据不为空,时间跨度小于15') - getTasks({pageNum: nextPage, queryType: params.queryType}); - } - } - } else { - if (nextPage > 0) { - console.log('数据为空') - getTasks({pageNum: nextPage, queryType: params.queryType}); - } else { - params.queryType === 0 ? setPrevPlaceholderTasks(params) : setNextPlaceholderTasks(params); - } - } - - // if (showTasks.length > 30) { - // showTasks = params.queryType === 0 ? showTasks.slice(0, 80) : showTasks.slice(showTasks.length - 80); - // } - - store.commit('task/clearTasks'); - params.queryType === 0 ? store.commit('task/setUpTasks', showTasks) : store.commit('task/setDownTasks', showTasks); - } - - // 任务模式 - async function renderConTask(params) { - let nextPage = params.queryType === 0 ? upNextPage.value : downNextPage.value; // 下一页的值 - let showTasks = currRoleShowTasks.value; - let centerData = await showTaskTime(params, showTasks, currRoleRealTasks.value) || []; - - if (centerData.length < 15 && nextPage > 0) { - getTasks({pageNum: nextPage, queryType: params.queryType}); - } else { - if (params.queryType === 0) { - showTasks = [...centerData, ...showTasks]; - } else { - showTasks = [...showTasks, ...centerData]; - } - } - - if (showTasks.length < 15 && nextPage === 0 && params.queryType === 1) { - getTasks({pageNum: 1, queryType: 0}); - } - - if (showTasks.length > 80) { - showTasks = params.queryType === 0 ? showTasks.slice(0, 80) : showTasks.slice(showTasks.length - 80); - } - - store.commit('task/clearTasks'); - params.queryType === 0 ? store.commit('task/setUpTasks', showTasks) : store.commit('task/setDownTasks', showTasks); - } - - // 设置时间轴向上的空数据 - function setPrevPlaceholderTasks() { - store.commit('task/setTopEnd', true); - let startTime = ''; - if (!currRoleShowTasks.value || !currRoleShowTasks.value.length) { - startTime = Date.now(); // 没有任务就应该是时间基准点 - } else { - startTime = currRoleShowTasks.value[0].planStart - 0; // 有任务就是第一个任务的计划开始时间 - } - const placeholderTasks = uni.$task.setPlaceholderTasks(startTime, true, timeGranularity.value); - store.commit('task/setCurrUpTimeNode', startTime); - store.commit('task/setUpTasks', placeholderTasks); - } - - // 设置时间轴向下的空数据 - function setNextPlaceholderTasks(params) { - // store.commit('task/setBottomEnd', true); - let startTime = ''; - if (!currRoleShowTasks.value || !currRoleShowTasks.value.length) { - startTime = Date.now(); - } else { - startTime = dayjs(+currRoleShowTasks.value[currRoleShowTasks.value.length - 1].planStart).add(1, timeGranularity.value).valueOf(); - } - - if (params.taskId) { - currRoleRealTasks.value.forEach(item => { - if (item.id === params.taskId) { - startTime = Number(item.planStart); - } - }) - } - - const initData = uni.$task.setPlaceholderTasks(startTime, false, timeGranularity.value); - store.commit('task/setCurrDownTimeNode', startTime); - store.commit('task/setDownTasks', initData); - } - - /** - * 当日常任务发生变化时 - * 将新获取到的日常任务放在allTasks里 - */ - watch(tasks, () => { - // 添加到allTasks里 - const index = visibleRoles.value.findIndex(role => role.id === roleId.value); - const arr = [...allTasks.value]; - arr[index].task = [...tasks.value]; - store.commit('task/setAllTasks', arr); - store.commit('task/setCurrRoleShowTasks', arr[index].task); // 设置当前角色的展示任务数据 - }); - - return { - initPlanTasks, - getTasks, - dataRender - } -} diff --git a/pages.json b/pages.json index a241e09..123ce7d 100644 --- a/pages.json +++ b/pages.json @@ -62,6 +62,12 @@ "navigationBarTitleText": "审核记录" } }, + { + "path": "pages/detail/detail", + "style": { + "navigationStyle": "custom" + } + }, { "path": "pages/detailWebview/detailWebview", "style": { diff --git a/pages/detail/detail.vue b/pages/detail/detail.vue new file mode 100644 index 0000000..1ec0820 --- /dev/null +++ b/pages/detail/detail.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/pages/project/project 复制.vue b/pages/project/project 复制.vue deleted file mode 100644 index 8e3e177..0000000 --- a/pages/project/project 复制.vue +++ /dev/null @@ -1,142 +0,0 @@ -