每日任务页面
template div classworktime-container !-- 筛选区域 -- div classsearch-area a-form layoutinline :modelsearchForm a-form-item label任务类型 a-select v-model:valuesearchForm.taskType placeholder请选择任务类型 allowClear stylewidth: 180px :optionstaskTypeOptions / /a-form-item a-form-item label创建时间 a-range-picker v-model:valuesearchForm.dateRange / /a-form-item a-form-item a-button typeprimary clickhandleSearch查询/a-button /a-form-item a-form-item a-button clickhandleReset重置/a-button /a-form-item a-form-item a-button typeprimary clickhandleAdd新增/a-button /a-form-item /a-form /div !-- 表格区域 -- div classtable-area vxe-grid refgridRef v-bindgridOptions template #operation{ row } a-button typelink sizesmall clickhandleEdit(row)编辑/a-button a-popconfirm title确认删除该条记录 confirmhandleDelete(row) a-button typelink sizesmall danger删除/a-button /a-popconfirm /template template #pager vxe-pager :layouts[Sizes, PrevJump, PrevPage, Number, NextPage, NextJump, FullJump, Total] v-model:current-pagepage.pageNo v-model:page-sizepage.pageSize :page-sizes[10, 20, 50, 100] :totalpage.total page-changehandlePageChange / /template /vxe-grid /div !-- 新增/编辑弹窗 -- a-modal :openmodalVisible :titlemodalTitle :width520 cancelhandleModalCancel okhandleModalOk :confirmLoadingconfirmLoading a-form refformRef :modelformData :rulesformRules layoutvertical a-form-item label创建时间 namecreateTime a-date-picker v-model:valueformData.createTime show-time value-formatYYYY-MM-DD HH:mm:ss placeholder请选择创建时间 stylewidth: 100% / /a-form-item a-form-item label任务类型 nametaskType a-select v-model:valueformData.taskType placeholder请选择任务类型 :optionstaskTypeOptions / /a-form-item a-form-item label昨日任务 nameyesterdayTask a-textarea v-model:valueformData.yesterdayTask placeholder请输入昨日任务 :rows3 :maxlength200 show-count / /a-form-item a-form-item label今日任务 nametodayTask a-textarea v-model:valueformData.todayTask placeholder请输入今日任务 :rows3 :maxlength200 show-count / /a-form-item a-form-item label完成任务 namefinishTask a-textarea v-model:valueformData.finishTask placeholder请输入完成任务 :rows3 :maxlength200 show-count / /a-form-item /a-form /a-modal /div /template script setup import { ref, reactive, onMounted } from vue import { message } from ant-design-vue defineOptions({ name: worktime }) const gridRef ref(null) const formRef ref(null) // 任务类型选项 const taskTypeOptions [ { label: 开发任务, value: dev }, { label: 测试任务, value: test }, { label: 运维任务, value: ops }, { label: 设计任务, value: design }, ] // 筛选表单 const searchForm reactive({ taskType: undefined, dateRange: undefined, }) // 分页 const page ref({ pageNo: 1, pageSize: 10, total: 0 }) // 弹窗状态 const modalVisible ref(false) const modalTitle ref(新增) const confirmLoading ref(false) const isEdit ref(false) // 弹窗表单 const formData reactive({ id: null, createTime: undefined, taskType: undefined, yesterdayTask: , todayTask: , finishTask: , }) // 表单校验规则创建时间、任务类型、昨日任务必填 const formRules { createTime: [{ required: true, message: 请选择创建时间, trigger: change }], taskType: [{ required: true, message: 请选择任务类型, trigger: change }], yesterdayTask: [{ required: true, message: 请输入昨日任务, trigger: blur }], } // 列配置 const columns [ { type: seq, title: 序号, width: 70, align: center }, { field: todayTask, title: 今日任务, minWidth: 200, align: center, showOverflow: true }, { field: finishTask, title: 完成任务, minWidth: 200, align: center, showOverflow: true }, { field: createTime, title: 创建时间, width: 180, align: center }, { field: operation, title: 操作, width: 140, align: center, fixed: right, slots: { default: operation }, }, ] // vxe-grid 配置 const gridOptions reactive({ columns, data: [], height: auto, border: true, showOverflow: true, align: center, rowConfig: { isHover: true }, columnConfig: { resizable: true }, }) // 模拟数据 let mockData [] let mockId 1 const generateMockData () { const taskTypes [dev, test, ops, design] const taskContents [ 完成登录模块开发, 修复已知Bug, 编写单元测试, 数据库优化, 接口联调, 代码审查, 文档编写, 环境部署, 需求评审, 性能调优, ] mockData Array.from({ length: 37 }, (_, i) { const month String(Math.floor(Math.random() * 12) 1).padStart(2, 0) const day String(Math.floor(Math.random() * 28) 1).padStart(2, 0) const hour String(Math.floor(Math.random() * 10) 8).padStart(2, 0) const minute String(Math.floor(Math.random() * 60)).padStart(2, 0) return { id: mockId, todayTask: taskContents[Math.floor(Math.random() * taskContents.length)], finishTask: taskContents[Math.floor(Math.random() * taskContents.length)], createTime: 2025-${month}-${day} ${hour}:${minute}:00, taskType: taskTypes[Math.floor(Math.random() * taskTypes.length)], yesterdayTask: taskContents[Math.floor(Math.random() * taskContents.length)], } }) } // 加载数据带筛选分页 const loadData () { let filtered [...mockData] // 筛选任务类型 if (searchForm.taskType) { filtered filtered.filter(item item.taskType searchForm.taskType) } // 筛选日期范围 if (searchForm.dateRange searchForm.dateRange.length 2) { const [start, end] searchForm.dateRange const startStr start.format(YYYY-MM-DD) const endStr end.format(YYYY-MM-DD) filtered filtered.filter(item { const itemDate item.createTime.substring(0, 10) return itemDate startStr itemDate endStr }) } page.value.total filtered.length const startIdx (page.value.pageNo - 1) * page.value.pageSize const endIdx startIdx page.value.pageSize gridOptions.data filtered.slice(startIdx, endIdx) } // 查询 const handleSearch () { page.value.pageNo 1 loadData() } // 重置 const handleReset () { searchForm.taskType undefined searchForm.dateRange undefined page.value.pageNo 1 loadData() } // 分页变化 const handlePageChange ({ currentPage, pageSize }) { page.value.pageNo currentPage page.value.pageSize pageSize loadData() } // 新增 const handleAdd () { isEdit.value false modalTitle.value 新增 Object.assign(formData, { id: null, createTime: undefined, taskType: undefined, yesterdayTask: , todayTask: , finishTask: , }) modalVisible.value true } // 编辑 const handleEdit (row) { isEdit.value true modalTitle.value 编辑 Object.assign(formData, { id: row.id, createTime: row.createTime, taskType: row.taskType, yesterdayTask: row.yesterdayTask || , todayTask: row.todayTask || , finishTask: row.finishTask || , }) modalVisible.value true } // 删除 const handleDelete (row) { const idx mockData.findIndex(item item.id row.id) if (idx ! -1) { mockData.splice(idx, 1) loadData() message.success(删除成功) } } // 弹窗取消 const handleModalCancel () { modalVisible.value false formRef.value?.resetFields() } // 弹窗确认 const handleModalOk async () { try { await formRef.value.validate() confirmLoading.value true if (isEdit.value) { const idx mockData.findIndex(item item.id formData.id) if (idx ! -1) { mockData[idx] { ...mockData[idx], ...formData } } message.success(编辑成功) } else { mockData.unshift({ ...formData, id: mockId }) message.success(新增成功) } modalVisible.value false formRef.value?.resetFields() loadData() } catch (e) { // 校验失败 } finally { confirmLoading.value false } } onMounted(() { generateMockData() loadData() }) /script style scoped langscss .worktime-container { width: 100%; height: 100vh; display: flex; flex-direction: column; padding: 12px; gap: 12px; overflow: hidden; .search-area { background: #fff; padding: 16px 16px 0; border-radius: 6px; } .table-area { flex: 1; overflow: hidden; background: #fff; border-radius: 6px; padding: 8px; } } /style

相关新闻

C++14数字分隔符:提升代码可读性的零开销语法糖

C++14数字分隔符:提升代码可读性的零开销语法糖

1. 项目概述:为什么我们需要数字分隔符?写C代码,尤其是处理金融、图形、嵌入式或者任何需要大量硬编码数字常量的领域时,你肯定遇到过这样的场景:面对一长串数字,比如1000000000,你得在心里默默…

2026/7/13 1:49:57 阅读更多 →
龙魂蚁群引擎 v2.0 · 深度学习与融合报告

龙魂蚁群引擎 v2.0 · 深度学习与融合报告

龙魂蚁群引擎 v2.0 深度学习与融合报告DNA: #龍芯⚡️丙午辛未LACA-v2.0-FUSION-REPORT 时间: 丙午年辛未月 (2026-07-13 01:17) 作者: UID9622 | 诸葛鑫 (Lucky) 源论文: Kimi Agent 龙魂蚁群架构 LACA v1.0 测试结果: 7/7 全部通过 ✅一、论文核心贡献深度学习 1.1 范式转换…

2026/7/13 1:47:57 阅读更多 →
感情中真正的主动权,不是故意不回消息

感情中真正的主动权,不是故意不回消息

很多人理解的“掌握主动权”是:故意晚一点回复;让对方吃醋;忽冷忽热;谁先主动谁就输了;通过冷淡让对方更在意自己。这并不是真正的主动权。这只是把自己的注意力全部放在对方身上,然后不断计算应该几点回复…

2026/7/13 1:45:56 阅读更多 →

最新新闻

Pandas .mask()和.where()高效数据清洗技巧

Pandas .mask()和.where()高效数据清洗技巧

1. 这个Pandas技巧到底在解决什么问题?“This Pandas Trick Will Blow Your Mind As a Data Scientist!”——标题本身没有给出具体操作,但作为从业十年、每天和百万行表格数据打交道的从业者,我一眼就认出:这绝不是又一个.sort_v…

2026/7/13 3:04:27 阅读更多 →
Selenium 4 与 Playwright 1.40 实战对比:Web自动化测试框架选型与 5 大场景迁移指南

Selenium 4 与 Playwright 1.40 实战对比:Web自动化测试框架选型与 5 大场景迁移指南

Selenium 4 与 Playwright 1.40 实战对比:Web自动化测试框架选型与5大场景迁移指南当测试开发工程师面临技术栈升级或新项目选型时,Web自动化测试框架的选择往往成为关键决策点。本文将深入对比当前最热门的两个框架——Selenium 4和Playwright 1.40&…

2026/7/13 3:04:27 阅读更多 →
LLaMAFactory大模型微调实战:从环境配置到生产部署完整指南

LLaMAFactory大模型微调实战:从环境配置到生产部署完整指南

1. 先搞清楚LLaMAFactory到底解决什么实际问题如果你正在接触大模型微调,大概率会遇到这几个典型问题:环境配置复杂、不同模型参数不统一、实验过程难以监控、生产部署麻烦。LLaMAFactory的核心价值就是把100主流大模型的微调流程标准化,让单…

2026/7/13 3:02:26 阅读更多 →
AI Agent开发实战:从聊天机器人到智能任务执行系统

AI Agent开发实战:从聊天机器人到智能任务执行系统

很多刚开始接触 AI 的开发者,可能最早是从类似“豆包”这样的聊天机器人开始的——输入一个问题,得到一个回答。但随着项目复杂度上升,你会发现简单的问答模式远远不够:需要让 AI 自主执行多步任务、调用外部工具、记住上下文、甚…

2026/7/13 3:00:25 阅读更多 →
如何提升网盘下载效率:LinkSwift网盘直链下载助手完整使用指南

如何提升网盘下载效率:LinkSwift网盘直链下载助手完整使用指南

如何提升网盘下载效率:LinkSwift网盘直链下载助手完整使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘…

2026/7/13 2:58:24 阅读更多 →
Knife4j vs Swagger UI:3大核心功能对比与5个微服务场景实测

Knife4j vs Swagger UI:3大核心功能对比与5个微服务场景实测

Knife4j vs Swagger UI:5大核心差异与7个微服务实战场景深度解析1. 技术选型背景与工具定位在微服务架构成为主流的今天,API文档工具的选择直接影响着开发效率。作为Java生态中最常用的两款文档工具,Knife4j和Swagger UI都基于OpenAPI规范&am…

2026/7/13 2:58:24 阅读更多 →

日新闻

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:01:19 阅读更多 →
浦东旧模块回收哪家强?专业评测带你一探究竟

浦东旧模块回收哪家强?专业评测带你一探究竟

于科技迅猛飞速迭代的当下此刻, 旧模块的回收处置, 不但关联着资源的再度利用, 而且更牵扯到数据安全以及环保合规事宜。你是不是也正为那堆积得如同山峦般的旧模块而发愁? 是不是不清楚该怎样安全且高效地去处理它们? 别忧心烦恼, 就在今日, 我会以具备权威影响力的自媒体博…

2026/7/13 0:01:19 阅读更多 →
卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

1 研究背景与现存技术痛点(提出问题)基因工程、蛋白质组学、生物制药研发流程中,蛋白质分离纯化是决定下游实验成败的关键环节。当前实验室常规蛋白质分离纯化工艺存在三类难以标准化的技术瓶颈:传统离子交换、分子筛层析无特异性…

2026/7/13 0:05:20 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

月新闻