|
|
@@ -1,38 +1,53 @@
|
|
|
<template>
|
|
|
<div class="app-container">
|
|
|
<el-form :model="queryParams" ref="queryForm" size="mini" :inline="true">
|
|
|
- <el-form-item label="日期" prop="startDate">
|
|
|
- <el-date-picker
|
|
|
- v-model="queryParams.startDate"
|
|
|
- type="date"
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
- @change="getList"
|
|
|
- placeholder="开始日期"
|
|
|
- :clearable="false"
|
|
|
- style="width: 130px">
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="至" prop="endDate">
|
|
|
- <el-date-picker
|
|
|
- v-model="queryParams.endDate"
|
|
|
- type="date"
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
- @change="getList"
|
|
|
- placeholder="结束日期"
|
|
|
- :clearable="false"
|
|
|
- style="width: 130px">
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="status">
|
|
|
- <el-radio-group v-model="queryParams.status" size="mini" @change="getList">
|
|
|
- <el-radio-button
|
|
|
- v-for="dict in dict.type.task_status"
|
|
|
- :key="dict.value"
|
|
|
- :label="dict.value"
|
|
|
- >{{ dict.label }}
|
|
|
- </el-radio-button>
|
|
|
- </el-radio-group>
|
|
|
- </el-form-item>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="22">
|
|
|
+ <el-form-item label="日期" prop="startDate">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="queryParams.startDate"
|
|
|
+ type="date"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ @change="getList"
|
|
|
+ placeholder="开始日期"
|
|
|
+ :clearable="false"
|
|
|
+ style="width: 130px">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="至" prop="endDate">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="queryParams.endDate"
|
|
|
+ type="date"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ @change="getList"
|
|
|
+ placeholder="结束日期"
|
|
|
+ :clearable="false"
|
|
|
+ style="width: 130px">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="status">
|
|
|
+ <el-radio-group v-model="queryParams.status" size="mini" @change="getList">
|
|
|
+ <el-radio-button
|
|
|
+ v-for="dict in dict.type.task_status"
|
|
|
+ :key="dict.value"
|
|
|
+ :label="dict.value"
|
|
|
+ >{{ dict.label }}
|
|
|
+ </el-radio-button>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="2">
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ plain
|
|
|
+ icon="el-icon-plus"
|
|
|
+ size="mini"
|
|
|
+ @click="handleAdd"
|
|
|
+ >日常任务
|
|
|
+ </el-button>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
</el-form>
|
|
|
|
|
|
<el-table
|
|
|
@@ -57,11 +72,20 @@
|
|
|
</el-tag>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <!-- <el-table-column fixed prop="" label="上月延期" width="40">-->
|
|
|
- <!-- <template slot-scope="scope">-->
|
|
|
- <!-- <span v-if="scope.row.formLastMonth" style="color: red">是</span>-->
|
|
|
- <!-- </template>-->
|
|
|
- <!-- </el-table-column>-->
|
|
|
+ <el-table-column fixed prop="" label="优先级" align="center" width="100">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-tag v-if="scope.row.priority==='1'" color="#fa8888" effect="dark" :hit="false">
|
|
|
+ {{ getTaskPriority(scope.row.priority) }}
|
|
|
+ </el-tag>
|
|
|
+ <el-tag v-if="scope.row.priority==='2'" color="#fb7fb7" effect="dark" :hit="false">
|
|
|
+ {{ getTaskPriority(scope.row.priority) }}
|
|
|
+ </el-tag>
|
|
|
+ <el-tag v-if="scope.row.priority==='3'" color="#40e0c3" effect="dark" :hit="false">
|
|
|
+ {{ getTaskPriority(scope.row.priority) }}
|
|
|
+ </el-tag>
|
|
|
+ <el-tag v-else color="#5dcfff" effect="dark" :hit="false">{{ getTaskPriority(scope.row.priority) }}</el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column align="center" v-for="header in tableHeaders" :key="header.day" :prop="header.day" width="42">
|
|
|
<template slot="header">
|
|
|
<div style="width: 32px;font-size: 10px;text-align: center">{{ header.day }}</div>
|
|
|
@@ -223,11 +247,90 @@
|
|
|
<task-detail :detailForm="detailForm"></task-detail>
|
|
|
</el-dialog>
|
|
|
|
|
|
+ <el-dialog title="新增日常任务" :visible.sync="openAdd" width="800px" class="feed-dialog" append-to-body
|
|
|
+ @close="cancelAddForm">
|
|
|
+ <el-form ref="addForm" :model="addForm" :rules="addRules" size="mini" label-width="115px">
|
|
|
+ <el-form-item label="任务名称" prop="taskName">
|
|
|
+ <el-input v-model="addForm.taskName" placeholder="请输入任务名称"/>
|
|
|
+ </el-form-item>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="开始时间" prop="beginDate">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="addForm.beginDate"
|
|
|
+ type="date"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ @change="checkDates(addForm.beginDate,addForm.endDate)"
|
|
|
+ style="width: 220px"
|
|
|
+ placeholder="开始日期">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="结束时间" prop="endDate">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="addForm.endDate"
|
|
|
+ @change="checkDates(addForm.beginDate,addForm.endDate)"
|
|
|
+ type="date"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ style="width: 220px"
|
|
|
+ placeholder="开始日期">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="优先级">
|
|
|
+ <el-select
|
|
|
+ v-model="addForm.priority"
|
|
|
+ style="width: 220px"
|
|
|
+ placeholder="任务优先级">
|
|
|
+ <el-option
|
|
|
+ v-for="dict in dict.type.task_priority"
|
|
|
+ :key="dict.value"
|
|
|
+ :label="dict.label"
|
|
|
+ :value="dict.value">
|
|
|
+ <span v-if="dict.value==='1'" style="color: #fa8888;margin-right: 5px">!!!</span>
|
|
|
+ <span v-else-if="dict.value==='2'" style="color: #fb7fb7;margin-right: 5px">!!</span>
|
|
|
+ <span v-else-if="dict.value==='3'" style="color: #40e0c3;margin-right: 5px">!</span>
|
|
|
+ <span v-else style="color: #5dcfff;margin-right: 5px">!</span>
|
|
|
+ <span>{{ dict.label }}</span>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="任务附件">
|
|
|
+ <file-upload ref="afu" :files="addForm.fileList" @getFileUrl="getFileUrl"
|
|
|
+ @removeFile="removeFile"></file-upload>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-form-item label="任务描述" prop="description">
|
|
|
+ <rich-text-editor ref="artEditor" :value="addForm.description"
|
|
|
+ @getHtml="(val)=>addForm.description=val"></rich-text-editor>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button type="primary" size="mini" @click="submitAddForm">确 定</el-button>
|
|
|
+ <el-button size="mini" @click="cancelAddForm">取 消</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import {getTask, listView, addTaskFeedback, getFeedbackList, confirmComment} from "@/api/task/task";
|
|
|
+import {
|
|
|
+ getTask,
|
|
|
+ listView,
|
|
|
+ addTaskFeedback,
|
|
|
+ getFeedbackList,
|
|
|
+ confirmComment,
|
|
|
+ addTask,
|
|
|
+ updateTask
|
|
|
+} from "@/api/task/task";
|
|
|
import DateUtil from "@/utils/date"
|
|
|
import TaskDetail from "./components/taskDetail"
|
|
|
import FileUpload from "@/components/FileUpload"
|
|
|
@@ -235,11 +338,12 @@ import RichTextEditor from '@/components/RichTextEditor'
|
|
|
|
|
|
import {mapGetters} from 'vuex'
|
|
|
import task from "@/views/mixins/task";
|
|
|
+import {listProject} from "@/api/task/project";
|
|
|
|
|
|
|
|
|
export default {
|
|
|
components: {TaskDetail, FileUpload, RichTextEditor},
|
|
|
- dicts: ['task_status', 'feedback_type'],
|
|
|
+ dicts: ['task_status', 'feedback_type', 'task_priority'],
|
|
|
mixins: [task],
|
|
|
computed: {
|
|
|
...mapGetters(['userId'])
|
|
|
@@ -304,7 +408,19 @@ export default {
|
|
|
},
|
|
|
openDetail: false,
|
|
|
detailForm: {},
|
|
|
-
|
|
|
+ openAdd: false,
|
|
|
+ addForm: {},
|
|
|
+ addRules: {
|
|
|
+ taskName: [
|
|
|
+ {required: true, message: "任务名称不能为空", trigger: "blur"}
|
|
|
+ ],
|
|
|
+ beginDate: [
|
|
|
+ {required: true, message: "开始时间不能为空", trigger: "change"}
|
|
|
+ ],
|
|
|
+ endDate: [
|
|
|
+ {required: true, message: "结束时间不能为空", trigger: "change"}
|
|
|
+ ]
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
@@ -336,6 +452,7 @@ export default {
|
|
|
this.tableData = res.data.data
|
|
|
})
|
|
|
},
|
|
|
+
|
|
|
cellMouseEnter(row, column, cell, event) {
|
|
|
if (column.property != 'taskName') {
|
|
|
return
|
|
|
@@ -504,6 +621,58 @@ export default {
|
|
|
let percent = (hours + feedbackHours) / planHours * 100;
|
|
|
this.form.value = Number.parseInt(percent > 100 ? 100 : percent)
|
|
|
}
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ handleAdd() {
|
|
|
+ this.resetAdd();
|
|
|
+ this.openAdd = true;
|
|
|
+ this.$set(this.addForm, 'priority', '4')
|
|
|
+ this.$set(this.addForm, 'executor', this.userId)
|
|
|
+ this.$set(this.addForm, 'projectId', 751562823)
|
|
|
+
|
|
|
+ },
|
|
|
+ submitAddForm() {
|
|
|
+ if (DateUtil.unix(this.addForm.beginDate) > DateUtil.unix(this.addForm.endDate)) {
|
|
|
+ this.$message.warning("开始时间不能超过结束时间")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.$refs["addForm"].validate(valid => {
|
|
|
+ if (valid) {
|
|
|
+ if (this.addForm.files) {
|
|
|
+ let tempFiles = this.addForm.files.map(item => item.name);
|
|
|
+ this.addForm.fileUrl = JSON.stringify(tempFiles)
|
|
|
+ }
|
|
|
+ this.addForm.checkTaskConflict = false;
|
|
|
+ addTask(this.addForm).then(res => {
|
|
|
+ this.$message.success("新增成功");
|
|
|
+ this.openAdd = false;
|
|
|
+ this.resetAdd();
|
|
|
+ this.getList();
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ cancelAddForm() {
|
|
|
+ this.$refs.artEditor.clear()
|
|
|
+ this.$refs.afu.clear()
|
|
|
+ this.resetAdd()
|
|
|
+ this.openAdd = false;
|
|
|
+ },
|
|
|
+ resetAdd() {
|
|
|
+ this.addForm = {
|
|
|
+ id: undefined,
|
|
|
+ taskName: undefined,
|
|
|
+ projectId: undefined,
|
|
|
+ executor: undefined,
|
|
|
+ planHours: undefined,
|
|
|
+ beginDate: undefined,
|
|
|
+ endDate: undefined,
|
|
|
+ description: undefined,
|
|
|
+ priority: undefined
|
|
|
+ };
|
|
|
+ this.resetForm("addForm");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -560,5 +729,8 @@ export default {
|
|
|
padding: 0 20px 10px 20px;
|
|
|
}
|
|
|
|
|
|
+.el-tag--dark {
|
|
|
+ border-color: white;
|
|
|
+}
|
|
|
|
|
|
</style>
|