| | |
| | | <!-- 顶部导航栏 --> |
| | | <div class="top-navbar"> |
| | | <div class="welcome-message"> |
| | | <h2>早安,{{ this.$store.state.user.name }}!</h2> |
| | | <h2>{{ getCurrentTimePeriod() }},{{ this.$store.state.user.name }}!</h2> |
| | | <p>今天是{{ currentDate }},祝您工作愉快!</p> |
| | | </div> |
| | | <div class="quick-stats"> |
| | |
| | | <span class="stat-label">今日日程</span> |
| | | </div> |
| | | <div class="stat-item"> |
| | | <span class="stat-number">{{ unreadMessages }}</span> |
| | | <span class="stat-label">未读消息</span> |
| | | <span class="stat-number">{{ totalActiveTasks }}</span> |
| | | <span class="stat-label">今日处理</span> |
| | | </div> |
| | | </div> |
| | | <div class="user-profile"> |
| | |
| | | <el-menu-item |
| | | v-for="project in projects" |
| | | :key="project.id" |
| | | :index="project.id"> |
| | | :index="project.id +''"> |
| | | <i class="el-icon-folder"></i> |
| | | <span slot="title" class="project-name" :title="project.name"> |
| | | {{ project.name }} |
| | | <span slot="title" class="project-name" :title="project.projectName"> |
| | | {{ project.projectName }} |
| | | </span> |
| | | </el-menu-item> |
| | | </el-menu> |
| | | <div class="project-actions"> |
| | | <el-button type="primary" icon="el-icon-plus" size="small">新建项目</el-button> |
| | | <el-button type="primary" icon="el-icon-plus" size="small" @click="addProject">新建项目</el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="task-section"> |
| | | <div class="section-header"> |
| | | <h3>待办任务</h3> |
| | | <el-button type="text" icon="el-icon-refresh">刷新</el-button> |
| | | <el-button type="text" icon="el-icon-refresh" @click="getWaitTaskList()" :disabled="waitTaskRefreshing">刷新</el-button> |
| | | </div> |
| | | <el-table |
| | | :data="tasks" |
| | | border |
| | | style="width: 100%" |
| | | <div> |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="tasks" |
| | | border |
| | | style="width: 100%" |
| | | > |
| | | <el-table-column |
| | | prop="name" |
| | | label="任务名称" |
| | | width="240"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="project" |
| | | label="所属项目" |
| | | show-overflow-tooltip |
| | | width="300"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="startTime" |
| | | label="开始时间" |
| | | align="center" |
| | | width="160"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="deadline" |
| | | label="截止时间" |
| | | align="center" |
| | | width="160"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="status" |
| | | label="状态" |
| | | align="center" |
| | | width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="scope.row.status === '待完成' ? 'success' : 'warning'" size="small"> |
| | | {{ scope.row.status }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="操作" |
| | | fixed="right" |
| | | width="120"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="mini" @click="handleTaskEdit(scope.row)">办理</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-table-column |
| | | prop="taskName" |
| | | label="任务名称" |
| | | width="240"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="checkPointInfo.projectName" |
| | | label="所属项目" |
| | | show-overflow-tooltip |
| | | width="300"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="startTime" |
| | | label="开始时间" |
| | | align="center" |
| | | width="160"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="endTime" |
| | | label="截止时间" |
| | | align="center" |
| | | width="160"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="status" |
| | | label="状态" |
| | | align="center" |
| | | width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="scope.row.taskType === '待完成' ? 'success' : 'warning'" size="small"> |
| | | {{ scope.row.taskType }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="操作" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button size="mini" @click="handleTaskEdit(scope.row)">办理</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | <!-- 项目办理日志 --> |
| | | <div class="log-section"> |
| | | <div class="section-header"> |
| | | <h3>项目办理日志</h3> |
| | | <el-button type="text" icon="el-icon-refresh">刷新</el-button> |
| | | <el-button type="text" icon="el-icon-refresh" @click="getAuditHistoryPage" :disabled="auditHistoryRefreshing">刷新</el-button> |
| | | </div> |
| | | <div class="log-list"> |
| | | <div class="log-list" v-loading="auditHistoryLoading"> |
| | | <div v-for="log in logs" :key="log.id" class="log-item"> |
| | | <div class="log-time">{{ log.time }}</div> |
| | | <div class="log-content"> |
| | | <span class="log-project">{{ log.project }}</span> |
| | | <span class="log-action">{{ log.action }}</span> |
| | | <span class="log-detail">{{ log.detail }}</span> |
| | | <span class="log-project">{{ log.projectName }}</span> |
| | | <span class="log-action">{{ getAuditTypeText(log.auditType) }}</span> |
| | | <span class="log-detail">{{ log.content }}</span> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | <div class="pagination-container"> |
| | | <el-pagination |
| | | @current-change="auditHistoryHandleCurrentChange" |
| | | :current-page="auditHistoryQuery.currentPage" |
| | | :page-size="auditHistoryQuery.pageSize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="auditHistoryTotal" |
| | | > |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <h3>日程列表</h3> |
| | | <div> |
| | | <el-button type="text" icon="el-icon-plus" @click="handleAddSchedule">新增</el-button> |
| | | <el-button type="text" icon="el-icon-refresh">刷新</el-button> |
| | | <el-button type="text" icon="el-icon-refresh" @click="getScheduleList" :disabled="scheduleRefreshing">刷新</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="schedule-list"> |
| | | <el-table |
| | | v-loading="scheduleLoading" |
| | | :data="filteredSchedules" |
| | | style="width: 100%" |
| | | height="250"> |
| | |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <div class="pagination-container"> |
| | | <el-pagination |
| | | @current-change="handleCurrentChange" |
| | | :current-page="waitTaskQuery.currentPage" |
| | | :page-size="waitTaskQuery.pageSize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="waitTaskTotal" |
| | | > |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <el-dialog |
| | | :title="diaLogTitle" |
| | | :visible.sync="scheduleDialogVisible" |
| | | width="500px" |
| | | @close="resetScheduleForm" |
| | | > |
| | | <el-form |
| | | ref="scheduleFormRef" |
| | | :model="scheduleForm" |
| | | :rules="scheduleRules" |
| | | label-width="80px" |
| | | > |
| | | <el-form-item label="选择项目" prop="projectId"> |
| | | <el-select |
| | | v-model="scheduleForm.projectId" |
| | | clearable |
| | | placeholder="选择项目" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="project in allProjects" |
| | | :key="project.id" |
| | | :label="project.name" |
| | | :value="project.id" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <!-- 工作内容 --> |
| | | <el-form-item label="工作内容" prop="content"> |
| | | <el-input |
| | | v-model="scheduleForm.content" |
| | | type="textarea" |
| | | placeholder="请输入工作内容" |
| | | rows="3" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <!-- 完成日期 --> |
| | | <el-form-item label="完成日期" prop="completedTime"> |
| | | <el-date-picker |
| | | v-model="scheduleForm.completedTime" |
| | | type="datetime" |
| | | placeholder="请选择完成日期" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | style="width: 100%;" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | |
| | | </el-form> |
| | | <template v-slot:footer> |
| | | <el-button @click="scheduleDialogVisible = false">取消</el-button> |
| | | <el-button type="primary" @click="submitSaveSchedule">确定</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getCountAchievements, |
| | | getProjectList, |
| | | getWaitTaskList, |
| | | add, |
| | | auditHistoryPage, |
| | | listByDate, |
| | | update, |
| | | del, |
| | | countTodayTask, |
| | | } from "@/api/workbench/workbench" |
| | | import {getTaskIsAuditing} from "@/api/projectProcess/projectProcess"; |
| | | import {getProjectSelectList} from "@/api/index"; |
| | | export default { |
| | | |
| | | data() { |
| | | return { |
| | | |
| | | |
| | | diaLogTitle:"", |
| | | allProjects:[], |
| | | scheduleDialogVisible: false, |
| | | // 新增:新增日程表单数据(对应WorkStationSchedule实体) |
| | | scheduleForm: { |
| | | id:'', |
| | | content: '', // 工作内容 |
| | | completedTime: '', |
| | | projectId:'' |
| | | |
| | | }, |
| | | // 新增:表单校验规则 |
| | | scheduleRules: { |
| | | content: [ |
| | | {required: true, message: '请输入工作内容', trigger: 'blur'}, |
| | | {max: 500, message: '工作内容最多500个字符', trigger: 'blur'} |
| | | ], |
| | | completedTime: [ |
| | | {required: true, message: '请选择完成日期', trigger: 'change'} |
| | | ], |
| | | projectId:[ |
| | | {required:true,message: '请选择项目', trigger: 'change'} |
| | | ] |
| | | }, |
| | | queryParams: { |
| | | taskName: '', |
| | | taskType: 'todo', |
| | | pageSize: 5, |
| | | currentPage: 1, |
| | | projectId: null, |
| | | processDefId: null, |
| | | processInsId: null, |
| | | deployId: null, |
| | | processName: '' // 流程名称 |
| | | }, |
| | | waitTaskRefreshing:false, |
| | | scheduleRefreshing:false, |
| | | auditHistoryRefreshing:false, |
| | | loading:false, |
| | | scheduleLoading:false, |
| | | auditHistoryLoading:false, |
| | | waitTaskQuery:{ |
| | | pageSize:5, |
| | | currentPage:1, |
| | | }, |
| | | auditHistoryQuery:{ |
| | | pageSize:5, |
| | | currentPage:1, |
| | | }, |
| | | waitTaskTotal:0, |
| | | auditHistoryTotal:0, |
| | | projectId:null, |
| | | |
| | | userInfo: { |
| | | name: '张工程师', |
| | | avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png', |
| | | department: '项目部' |
| | | }, |
| | | currentDate: this.formatDate(new Date()), |
| | | todayTasks: 5, |
| | | todaySchedules: 3, |
| | | unreadMessages: 2, |
| | | todayTasks: 0, |
| | | todaySchedules: 0, |
| | | totalActiveTasks: 0, |
| | | activeProject: 'all', |
| | | projects: [ |
| | | { id: '1', name: '射洪市沱牌镇综合水利设施建设项目' }, |
| | | { id: '2', name: '射洪市国家储备林建设项目(一期)' }, |
| | | { id: '3', name: '射洪市白羽肉鸡产业建设项目' }, |
| | | { id: '4', name: '遂宁市射洪2024—2027年度东北片区高标准农田建设项目' }, |
| | | { id: '5', name: '射洪市现代种业示范基地建设项目' }, |
| | | ], |
| | | tasks: [ |
| | | { id: 1, name: '审核施工图纸', project: '射洪市国家储备林建设项目(一期)', startTime: '2025-05-05', deadline: '2025-06-15', status: '待完成' }, |
| | | { id: 2, name: '采购材料清单', project: '射洪市白羽肉鸡产业建设项目', startTime: '2025-05-14', deadline: '2025-06-18', status: '待完成' }, |
| | | { id: 3, name: '现场安全检查', project: '遂宁市射洪2024—2027年度东北片区高标准农田建设项目', startTime: '2025-05-10', deadline: '2025-06-12', status: '容缺中' }, |
| | | { id: 4, name: '项目进度报告', project: '射洪市现代种业示范基地建设项目', startTime: '2025-05-23', deadline: '2025-06-20', status: '待完成' }, |
| | | { id: 5, name: '供应商会议', project: '射洪市沱牌镇综合水利设施建设项目', startTime: '2025-05-14', deadline: '2025-06-14', status: '容缺中' } |
| | | ], |
| | | projects: [], |
| | | tasks: [], |
| | | logs: [ |
| | | { id: 1, time: '09:30', project: '射洪市国家储备林建设项目(一期)', action: '提交', detail: '提交了施工图纸审核申请' }, |
| | | { id: 2, time: '10:15', project: '射洪市白羽肉鸡产业建设项目', action: '更新', detail: '更新了材料采购清单' }, |
| | |
| | | { id: 5, time: '16:45', project: '射洪市沱牌镇综合水利设施建设项目', action: '审批', detail: '审批通过了安全方案' } |
| | | ], |
| | | achievements: { |
| | | completedTasks: 128, |
| | | avgDuration: 3.5, |
| | | totalSchedules: 89, |
| | | completedSchedules: 76 |
| | | completedTasks: 0, |
| | | avgDuration: 0, |
| | | totalSchedules: 0, |
| | | completedSchedules: 0 |
| | | }, |
| | | calendarDate: new Date(), |
| | | schedules: [ |
| | | { id: 1, date: '2025-05-10', time: '09:00', title: '项目启动会议', project: '射洪市国家储备林建设项目(一期)' }, |
| | | { id: 2, date: '2025-05-10', time: '14:00', title: '供应商洽谈', project: '射洪市白羽肉鸡产业建设项目' }, |
| | | { id: 3, date: '2025-05-11', time: '10:30', title: '现场勘察', project: '遂宁市射洪2024—2027年度东北片区高标准农田建设项目' }, |
| | | { id: 4, date: '2025-05-12', time: '09:00', title: '安全培训', project: '射洪市现代种业示范基地建设项目' }, |
| | | { id: 5, date: '2025-05-12', time: '15:00', title: '进度汇报', project: '射洪市沱牌镇综合水利设施建设项目' }, |
| | | { id: 6, date: '2025-05-15', time: '13:00', title: '设备验收', project: '射洪市白羽肉鸡产业建设项目' } |
| | | ] |
| | | schedules: [] |
| | | } |
| | | }, |
| | | computed: { |
| | |
| | | return this.schedules.filter(schedule => schedule.date === selectedDate); |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.initData(); |
| | | this.initSelect(); |
| | | this.getScheduleList(); |
| | | this.countTodayTask(); |
| | | this.getAuditHistoryPage(); |
| | | }, |
| | | methods: { |
| | | getAuditTypeText(auditType) { |
| | | // 映射关系:后端值 → 前端汉字 |
| | | const typeMap = { |
| | | Submit: '提交', |
| | | Review: '审核', |
| | | Reject: '驳回', |
| | | Forward: '转交' |
| | | }; |
| | | // 兜底:未知值返回“未知操作” |
| | | return typeMap[auditType] || '未知操作'; |
| | | }, |
| | | countTodayTask(){ |
| | | countTodayTask().then(res =>{ |
| | | if (res.code === 200){ |
| | | this.todayTasks = res.data.todayTasks; |
| | | this.todaySchedules = res.data.todaySchedules; |
| | | this.totalActiveTasks = res.data.totalActiveTasks; |
| | | } |
| | | }) |
| | | }, |
| | | initSelect(){ |
| | | getProjectSelectList().then(res =>{ |
| | | if (res.code === 200){ |
| | | this.allProjects = Object.entries(res.data).map(([id, name]) => ({ |
| | | id: id, // 项目ID(如"151") |
| | | name: name // 项目名称(如"射洪市万林钢厂片区棚户区改造项目") |
| | | })); |
| | | } |
| | | }) |
| | | }, |
| | | getScheduleList(){ |
| | | if (this.scheduleRefreshing){ |
| | | return |
| | | } |
| | | const form ={ |
| | | completedTime:this.formatDateToFrontend(this.calendarDate), |
| | | projectId:this.activeProject |
| | | } |
| | | this.scheduleLoading = true |
| | | this.scheduleRefreshing = true |
| | | listByDate(form).then(res =>{ |
| | | this.scheduleRefreshing = false |
| | | this.scheduleLoading = false |
| | | if (res.code === 200){ |
| | | this.schedules = res.data; |
| | | } |
| | | }) |
| | | }, |
| | | formatDateToFrontend(date) { |
| | | if (!date) return ''; |
| | | const d = new Date(date); |
| | | const year = d.getFullYear(); |
| | | const month = (d.getMonth() + 1).toString().padStart(2, '0'); |
| | | const day = d.getDate().toString().padStart(2, '0'); |
| | | const hour = d.getHours().toString().padStart(2, '0'); |
| | | const minute = d.getMinutes().toString().padStart(2, '0'); |
| | | const second = d.getSeconds().toString().padStart(2, '0'); |
| | | return `${year}-${month}-${day} ${hour}:${minute}:${second}`; |
| | | }, |
| | | async submitSaveSchedule(){ |
| | | this.$refs.scheduleFormRef.validate((valid, fields) => { |
| | | if (valid) { |
| | | console.log(this.scheduleForm.id) |
| | | if (this.scheduleForm.id === null || this.scheduleForm.id ==='' || this.scheduleForm.id === undefined){ |
| | | const submitData = { |
| | | content: this.scheduleForm.content, |
| | | completedTime: this.formatDateToFrontend(this.scheduleForm.completedTime), |
| | | projectId:this.scheduleForm.projectId |
| | | }; |
| | | this.$message.success('表单提交成功!'); |
| | | add(submitData).then(res =>{ |
| | | if (res.code === 200){ |
| | | this.scheduleDialogVisible = false; |
| | | this.$message.success('新增日程成功') |
| | | //刷新列表 |
| | | this.getScheduleList(); |
| | | } |
| | | }) |
| | | }else { |
| | | const submitData = { |
| | | id:this.scheduleForm.id, |
| | | content: this.scheduleForm.content, |
| | | completedTime: this.formatDateToFrontend(this.scheduleForm.completedTime), |
| | | projectId:this.scheduleForm.projectId |
| | | }; |
| | | this.$message.success('表单提交成功!'); |
| | | update(submitData).then(res =>{ |
| | | if (res.code === 200){ |
| | | this.scheduleDialogVisible = false; |
| | | this.$message.success('编辑日程成功') |
| | | //刷新列表 |
| | | this.getScheduleList(); |
| | | } |
| | | }) |
| | | |
| | | } |
| | | }else { |
| | | const firstError = Object.values(fields)[0][0].message; |
| | | this.$message.error(firstError); |
| | | } |
| | | |
| | | |
| | | }); |
| | | }, |
| | | handleAddSchedule() { |
| | | this.resetScheduleForm(); |
| | | this.scheduleDialogVisible = true; |
| | | this.diaLogTitle = "新增日志" |
| | | }, |
| | | handleEditSchedule(row){ |
| | | this.resetScheduleForm(); |
| | | this.scheduleDialogVisible = true; |
| | | this.diaLogTitle = "编辑日志" |
| | | //赋值 |
| | | this.scheduleForm.id = row.id; |
| | | this.scheduleForm.content = row.title; |
| | | this.scheduleForm.projectId = row.projectId +""; |
| | | this.scheduleForm.completedTime = new Date(row.completedTime); |
| | | console.log(row) |
| | | }, |
| | | // 新增:重置新增表单 |
| | | resetScheduleForm() { |
| | | this.scheduleForm = { |
| | | if:'', |
| | | content: '', |
| | | completedTime: '' |
| | | }; |
| | | // 重置表单校验状态 |
| | | if (this.$refs.scheduleFormRef) { |
| | | this.$refs.scheduleFormRef.resetFields(); |
| | | } |
| | | }, |
| | | addProject(){ |
| | | this.$router.push({path: '/projectEngineering/project/ProjectDetails'}); |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.waitTaskQuery.pageSize = val; |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.waitTaskQuery.currentPage = val; |
| | | this.getWaitTaskList(); |
| | | }, |
| | | auditHistoryHandleCurrentChange(val) { |
| | | this.auditHistoryTotal.currentPage = val; |
| | | this.getAuditHistoryPage(); |
| | | }, |
| | | getAuditHistoryPage(){ |
| | | if (this.auditHistoryRefreshing)return; |
| | | this.auditHistoryLoading = true; |
| | | const form ={ |
| | | pageSize:this.auditHistoryQuery.pageSize, |
| | | currentPage:this.auditHistoryQuery.currentPage, |
| | | projectId:this.activeProject |
| | | } |
| | | this.auditHistoryRefreshing = true |
| | | auditHistoryPage(form).then(res =>{ |
| | | this.auditHistoryLoading = false; |
| | | this.auditHistoryRefreshing = false; |
| | | if (res.code === 200){ |
| | | this.logs = res.data; |
| | | this.auditHistoryTotal = res.total; |
| | | } |
| | | }) |
| | | |
| | | }, |
| | | getWaitTaskList(){ |
| | | if (this.waitTaskRefreshing) return; |
| | | this.waitTaskRefreshing = true; |
| | | const form ={ |
| | | pageSize:this.waitTaskQuery.pageSize, |
| | | currentPage:this.waitTaskQuery.currentPage, |
| | | id:this.activeProject |
| | | } |
| | | this.loading = true; |
| | | getWaitTaskList(form).then(res=>{ |
| | | this.loading = false; |
| | | this.waitTaskRefreshing = false; |
| | | if (res.code === 200){ |
| | | this.tasks = res.data.data; |
| | | this.waitTaskTotal = res.data.total; |
| | | } |
| | | |
| | | }) |
| | | }, |
| | | getProjectList(){ |
| | | getProjectList().then(res =>{ |
| | | if (res.code === 200){ |
| | | this.projects = res.data; |
| | | } |
| | | }) |
| | | }, |
| | | initData() { |
| | | this.getProjectList(); |
| | | this.getWaitTaskList(); |
| | | this.getCountAchievements(); |
| | | }, |
| | | getCountAchievements(){ |
| | | getCountAchievements().then(res =>{ |
| | | // 个人成就 |
| | | if (res.code === 200){ |
| | | this.achievements = res.data; |
| | | } |
| | | }) |
| | | |
| | | }, |
| | | getCurrentTimePeriod() { |
| | | // 获取当前时间的小时和分钟 |
| | | const now = new Date(); |
| | | const hours = now.getHours(); |
| | | |
| | | // 按区间判断 |
| | | if (hours >= 0 && hours < 6) { |
| | | // 0:00 - 5:59 为凌晨 |
| | | return "凌晨好"; |
| | | } else if (hours >= 6 && hours < 12) { |
| | | // 6:00 - 11:59 为早上 |
| | | return "早上好"; |
| | | } else if (hours >= 12 && hours < 14) { |
| | | // 12:00 - 13:59 为中午 |
| | | return "中午好"; |
| | | } else if (hours >= 14 && hours < 18) { |
| | | // 14:00 - 17:59 为下午 |
| | | return "下午好"; |
| | | } else { |
| | | // 18:00 - 23:59 为晚上 |
| | | return "晚上好"; |
| | | } |
| | | }, |
| | | // 截断过长的项目名称 |
| | | truncateProjectName(name) { |
| | | const maxLength = 10; // 最大显示长度 |
| | |
| | | }, |
| | | handleProjectSelect(index) { |
| | | this.activeProject = index; |
| | | console.log(this.activeProject) |
| | | this.getWaitTaskList(); |
| | | // 这里可以添加项目筛选逻辑 |
| | | }, |
| | | getPriorityType(priority) { |
| | |
| | | default: return 'info'; |
| | | } |
| | | }, |
| | | handleTaskEdit(task) { |
| | | console.log('编辑任务:', task); |
| | | this.$message.info(`开始处理任务: ${task.name}`); |
| | | handleTaskEdit(row) { |
| | | console.log(row) |
| | | if (row.taskType === '容缺') { |
| | | this.$router.push({ |
| | | path: '/flowable/task/myProcess/send/index', |
| | | query: { |
| | | deployId: row.checkPointInfo.deployId, |
| | | procDefId: row.checkPointInfo.processDefinitionId, |
| | | procInsId: row.checkPointInfo.processInstanceId, |
| | | processName: row.taskName, |
| | | flowName: row.checkPointInfo.processName, |
| | | projectName: row.checkPointInfo.projectName, |
| | | taskId: row.id, |
| | | showAuditing: false, |
| | | projectId: row.checkPointInfo.id, |
| | | isWait: true, |
| | | goBackParams: this.queryParams |
| | | } |
| | | }) |
| | | } else { |
| | | // 查询该任务是否配置了需要审批 |
| | | let params = { |
| | | processDefId: row.checkPointInfo.processDefinitionId, |
| | | taskId: row.id |
| | | } |
| | | getTaskIsAuditing(params).then(res => { |
| | | console.log("row",row) |
| | | this.$router.push({ |
| | | path: '/flowable/task/myProcess/send/index', |
| | | query: { |
| | | deployId: row.checkPointInfo.deployId, |
| | | procDefId: row.checkPointInfo.processDefinitionId, |
| | | procInsId: row.checkPointInfo.processInstanceId, |
| | | processName: row.taskName, |
| | | flowName: row.checkPointInfo.processName, |
| | | projectName: row.checkPointInfo.projectName, |
| | | taskId: row.id, |
| | | showAuditing: res.data, |
| | | projectId: row.checkPointInfo.id, |
| | | isWait: false, |
| | | goBackParams: this.queryParams |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | }, |
| | | getScheduleCount(date) { |
| | | const dateStr = this.formatCalendarDate(date); |
| | | return this.schedules.filter(s => s.date === dateStr).length; |
| | | }, |
| | | handleAddSchedule() { |
| | | this.$message.info('新增日程'); |
| | | }, |
| | | handleEditSchedule(schedule) { |
| | | this.$message.info(`编辑日程: ${schedule.title}`); |
| | | }, |
| | | handleDeleteSchedule(schedule) { |
| | | this.$confirm('确定删除该日程吗?', '提示', { |
| | |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$message.success('删除成功'); |
| | | del(schedule.id).then(res =>{ |
| | | if (res.code === 200){ |
| | | this.$message.success('删除成功!'); |
| | | } |
| | | this.getScheduleList() |
| | | }) |
| | | }).catch(() => { |
| | | this.$message.info('已取消删除'); |
| | | }); |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .pagination-container { |
| | | margin-top: 20px; |
| | | padding-right: 5px; |
| | | text-align: center; |
| | | width: 100%; |
| | | } |
| | | .dashboard-container { |
| | | font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; |
| | | height: 100vh; |
| | |
| | | } |
| | | |
| | | .center-content { |
| | | |
| | | flex: 1; |
| | | padding: 15px; |
| | | overflow-y: auto; |
| | |
| | | |
| | | .task-section { |
| | | margin-bottom: 20px; |
| | | height: 350px; |
| | | height: 450px; |
| | | } |
| | | |
| | | .log-list { |
| | | border: 1px solid #ebeef5; |
| | | border-radius: 4px; |
| | | padding: 10px; |
| | | min-height: 100px; |
| | | } |
| | | |
| | | .log-item { |
| | |
| | | } |
| | | |
| | | .schedule-count { |
| | | font-size: 12px; |
| | | font-size: 10px; |
| | | color: #1e88e5; |
| | | margin-top: 2px; |
| | | } |
| | |
| | | } |
| | | |
| | | .calendar-section >>> .el-calendar-table .el-calendar-day { |
| | | height: 40px !important; /* 设置每日单元格高度 */ |
| | | height: 45px !important; /* 设置每日单元格高度 */ |
| | | padding: 0 !important; |
| | | } |
| | | .calendar-section >>> .el-calendar__header { |