From c5391f86b6c3f01a21bf00f3db95393d22b14c81 Mon Sep 17 00:00:00 2001 From: WindowBird <13870814+windows-bird@user.noreply.gitee.com> Date: Thu, 6 Nov 2025 14:33:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8pinia=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E5=86=85=E5=AD=98=E5=AD=98=E5=82=A8=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/task-detail/index.vue | 43 ++++++--------------------------- pages/task-list/index.vue | 10 +++++--- store/task.js | 48 +++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 39 deletions(-) create mode 100644 store/task.js diff --git a/pages/task-detail/index.vue b/pages/task-detail/index.vue index 272901c..320b165 100644 --- a/pages/task-detail/index.vue +++ b/pages/task-detail/index.vue @@ -149,6 +149,7 @@ import { ref, onMounted, } from 'vue'; import { onLoad,onShow } from '@dcloudio/uni-app'; import { getStatusFromTagText, getTaskStatusType, getTaskStatusStyle } from '@/utils/taskConfig.js'; +import { useTaskStore } from '@/store/task'; // 当前激活的标签 const activeTab = ref('info'); @@ -174,39 +175,7 @@ const formatTimeToChinese = (date) => { // 任务数据 const task = ref({ - id: null, - name: "待办任务名称", - project: "所属项目", - statusTags: ["已逾期", "紧急"], - deadline: "2025-10-14 18:00", - creator: "张珊珊", - responsible: "张珊珊、李志", - publishTime: "2025-10-17", - content: "任务内容任务。这里是详细的任务描述,可以包含多行文本。根据实际需求,这里可以展示任务的详细要求、步骤说明、注意事项等。任务内容应该清晰明了,便于负责人理解和执行。", - submitRecords: [ - { - userName: "张珊珊", - time: formatTimeToChinese(new Date('2025-10-20 15:20:56')), - content: "任务内容任务。这里是详细的任务描述,可以包含多行文本。根据实际需求,这里可以展示任务的详细要求、步骤说明、注意事项等。任务内容应该清晰明了,便于负责人理解和执行。", - attachments: [ - { type: "image" }, - { type: "image" }, - { type: "image" } - ], - canEdit: true, - showDelayBtn: false - }, - { - userName: "李志", - time: formatTimeToChinese(new Date('2025-10-20 15:20:56')), - content: "任务内容任务。这里是详细的任务描述,可以包含多行文本。根据实际需求,这里可以展示任务的详细要求、步骤说明、注意事项等。任务内容应该清晰明了,便于负责人理解和执行。", - attachments: [ - { type: "file", name: "AA_573_1280.JPG" } - ], - canEdit: false, - showDelayBtn: true - } - ] + }); // 切换标签 @@ -357,14 +326,16 @@ onLoad((options) => { loadTaskData(taskId); } - // 如果通过存储传递数据(类似于 event-detail 的方式) - const storedTask = uni.getStorageSync('taskDetailData'); + // 从 Pinia store 获取任务详情数据 + const taskStore = useTaskStore(); + const storedTask = taskStore.getTaskDetail; if (storedTask) { task.value = { ...task.value, ...storedTask }; - uni.removeStorageSync('taskDetailData'); + // 清除 store 中的数据(因为已经使用完毕) + // taskStore.clearTaskDetail(); } }); diff --git a/pages/task-list/index.vue b/pages/task-list/index.vue index 8cba625..ea83f30 100644 --- a/pages/task-list/index.vue +++ b/pages/task-list/index.vue @@ -33,6 +33,7 @@ {{ task.description }} 负责人: {{ task.owner }} + 创建人: {{ task.createName }} 发布时间: {{ task.releaseTime }} @@ -77,6 +78,7 @@ import { ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import { getStatusText, getTaskStatusType, getTaskStatusStyle } from '@/utils/taskConfig.js'; import { getTaskList } from '@/common/api'; +import { useTaskStore } from '@/store/task'; // 获取页面参数 const statusFilter = ref(''); @@ -147,8 +149,9 @@ const handleTask = (task) => { // 跳转到任务详情页 const goToTaskDetail = (task) => { - // 将任务数据存储到本地,供详情页使用 - uni.setStorageSync('taskDetailData', { + // 使用 Pinia store 存储任务详情数据 + const taskStore = useTaskStore(); + taskStore.setTaskDetail({ id: task.id, name: task.description || '待办任务名称', project: task.project || '所属项目', @@ -157,7 +160,7 @@ const goToTaskDetail = (task) => { task.status === 'pending' ? ['待完成'] : ['已完成'], deadline: task.date || '2025-10-14 18:00', - creator: '张珊珊', + creator: task.createName, responsible: task.owner || '张珊珊、李志', publishTime: task.releaseTime || '2025-10-17', content: task.description || '任务内容任务。这里是详细的任务描述,可以包含多行文本。根据实际需求,这里可以展示任务的详细要求、步骤说明、注意事项等。任务内容应该清晰明了,便于负责人理解和执行。', @@ -231,6 +234,7 @@ const transformTaskData = (item) => { return { id: item.id || '', status: taskStatus, + createName:item.createName, date: formatDate(expireTime) || '', project: item.projectName || item.project_name || '', description: item.description || item.task_name || '', diff --git a/store/task.js b/store/task.js new file mode 100644 index 0000000..80e3c11 --- /dev/null +++ b/store/task.js @@ -0,0 +1,48 @@ +import { defineStore } from 'pinia' + +/** + * 任务信息 Store + * 用于管理任务详情数据 + */ +export const useTaskStore = defineStore('task', { + state: () => { + return { + // 当前任务详情数据 + taskDetailData: null + } + }, + + getters: { + /** + * 获取任务详情数据 + */ + getTaskDetail: (state) => { + return state.taskDetailData + }, + + /** + * 获取任务 ID + */ + getTaskId: (state) => { + return state.taskDetailData?.id || null + } + }, + + actions: { + /** + * 设置任务详情数据 + * @param {object} taskData - 任务详情数据对象 + */ + setTaskDetail(taskData) { + this.taskDetailData = taskData + }, + + /** + * 清除任务详情数据 + */ + clearTaskDetail() { + this.taskDetailData = null + } + } +}) +