Pārlūkot izejas kodu

任务增加优先级;任务增加待审核状态;查看反馈,无反馈详情不显示详情按钮;任务管理模块时间范围选择拆成单独选择框;

ysc 1 gadu atpakaļ
vecāks
revīzija
dccc2037c2

+ 4 - 4
src/utils/date.js

@@ -115,15 +115,15 @@ export default {
     return moment(date).add(1, 'weeks').startOf('week').format(DATE_FORMAT)
   },
 
-  getFeedBackDate(dateRange, day) {
-    let startYear = moment(dateRange[0]).year()
-    let endYear = moment(dateRange[1]).year()
+  getFeedBackDate(startDate,endDate, day) {
+    let startYear = moment(startDate).year()
+    let endYear = moment(endDate).year()
 
     if (startYear == endYear) {
       return startYear + '-' + day
     }
 
-    if (this.unix(startYear + '-' + day) > this.unix(dateRange[1])) {
+    if (this.unix(startYear + '-' + day) > this.unix(endDate)) {
       return startYear + '-' + day
     }
     return endYear + '-' + day

+ 42 - 0
src/views/mixins/task.js

@@ -0,0 +1,42 @@
+import DateUtil from "@/utils/date";
+
+const statusMap = {
+  '0': {name: '待查看', type: 'info'},
+  '1': {name: '未开始', type: 'info'},
+  '2': {name: '进行中', type: ''},
+  '3': {name: '延期', type: 'danger'},
+  '4': {name: '完成', type: 'success'},
+  '5': {name: '终止', type: 'warning'},
+  '6': {name: '待审核', type: 'warning'}
+}
+export default {
+
+  data() {
+    return {
+      statusMap: statusMap,
+      cellColorMap: {
+        '1': '#fefeff',
+        '2': '#a6a9ad',
+        '3': '#f56c6c',
+        '4': '#67c23a',
+        '5': '#e6a23c',
+        '6': '#e1b111'
+      }
+    }
+  },
+
+  methods: {
+    checkRichText(text) {
+      text = text.replaceAll('<p>', '').replaceAll('</p>', '').replaceAll('<br>', '').replaceAll('&nbsp;', '').trim();
+      return text.length > 0 ? true : false
+    },
+    checkDates(startDate, endDate) {
+      if (!startDate || !endDate) {
+        return
+      }
+      if (DateUtil.unix(startDate) > DateUtil.unix(endDate)) {
+        this.$message.warning("开始时间不能超过结束时间")
+      }
+    }
+  }
+}

+ 1 - 0
src/views/task/components/taskDetail.vue

@@ -67,6 +67,7 @@
       <el-table-column label="反馈详情" width="80px">
         <template slot-scope="scope">
           <el-popover
+            v-if="scope.row.descriptionDetail&&scope.row.descriptionDetail.length>0"
             placement="top"
             width="600"
             trigger="hover">

+ 65 - 54
src/views/task/projectView.vue

@@ -9,21 +9,30 @@
           collapse-tags
           :show-all-levels="false" clearable></el-cascader>
       </el-form-item>
-      <el-form-item label="执行(负责人" prop="executors">
+      <el-form-item label="负责人" prop="executors">
         <dept-user-tree ref="dut" :userList="userList" :multiple="true"
                         @selected="selectExecutors"></dept-user-tree>
       </el-form-item>
-      <el-form-item label="日期" prop="month">
+      <el-form-item label="日期" prop="startDate">
         <el-date-picker
-          v-model="queryParams.rangeDate"
-          type="daterange"
+          v-model="queryParams.startDate"
+          type="date"
           value-format="yyyy-MM-dd"
           @change="getList"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
+          placeholder="开始日期"
           :clearable="false"
-          style="width: 220px">
+          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">
@@ -60,48 +69,48 @@
           </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 align="center" v-for="item in tableHeaders" :key="item.day" :prop="item.day" width="42">
-        <template slot="header" slot-scope="scope">
-          <div style="width:32px;font-size: 10px;text-align: center">{{ item.day }}</div>
-          <div v-if="item.week=='周六'" class="view-cell" style="color: #1c84c6">{{ item.week }}</div>
-          <div v-else-if="item.week=='周日'" class="view-cell" style="color: #1c84c6">{{ item.week }}</div>
-          <div v-else-if="item.week=='今日'" class="view-cell" style="color: #008000">{{ item.week }}</div>
-          <div v-else class="view-cell">{{ item.week }}</div>
+      <!--      <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 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>
+          <div v-if="header.week=='周六'" class="view-cell" style="color: #1c84c6">{{ header.week }}</div>
+          <div v-else-if="header.week=='周日'" class="view-cell" style="color: #1c84c6">{{ header.week }}</div>
+          <div v-else-if="header.week=='今日'" class="view-cell" style="color: #008000">{{ header.week }}</div>
+          <div v-else class="view-cell">{{ header.week }}</div>
         </template>
         <template slot-scope="scope">
-          <span v-if="scope.row[item.day].comment" class="comment-badge"></span>
+          <span v-if="scope.row[header.day].comment" class="comment-badge"></span>
           <el-popover
-            v-if="scope.row[item.day].value!=''"
+            v-if="scope.row[header.day].value!=''"
             placement="top"
             width="680"
             trigger="click">
             <el-table :data="feedbacks" border size="mini">
               <el-table-column width="75" label="反馈状态">
-                <template slot-scope="scope">
-                  <div>{{ getFeedbackTypeName(scope.row.feedbackType) }}</div>
+                <template slot-scope="temp">
+                  <div>{{ getFeedbackTypeName(temp.row.feedbackType) }}</div>
                 </template>
               </el-table-column>
               <el-table-column width="60" property="userName" label="反馈人"></el-table-column>
               <el-table-column width="55" label="完成度">
-                <template slot-scope="scope">
-                  <div>{{ scope.row.feedbackType === '4' ? '' : scope.row.value + '%' }}</div>
+                <template slot-scope="temp">
+                  <div>{{ temp.row.feedbackType === '4' ? '' : temp.row.value + '%' }}</div>
                 </template>
               </el-table-column>
               <el-table-column width="110" property="createTime" label="反馈时间">
-                <template slot-scope="scope">
-                  <div>{{ parseTime(scope.row.createTime) }}</div>
+                <template slot-scope="temp">
+                  <div>{{ parseTime(temp.row.createTime) }}</div>
                 </template>
               </el-table-column>
               <el-table-column label="反馈备注">
-                <template slot-scope="scope">
+                <template slot-scope="temp">
                   <div>
-                    <span style="margin-right: 5px">{{ scope.row.description }}</span>
-                    <span v-for="(file,index) in scope.row.fileList">
+                    <span style="margin-right: 5px">{{ temp.row.description }}</span>
+                    <span v-for="(file,index) in temp.row.fileList">
                       <a :href="file.url" style="color: darkgreen">
                                   <span style="margin-left: 5px">{{ file.name }}</span>
                       </a>
@@ -110,18 +119,21 @@
                 </template>
               </el-table-column>
               <el-table-column label="反馈详情" width="80px">
-                <template slot-scope="scope">
+                <template slot-scope="temp">
                   <el-popover
+                    v-if="temp.row.descriptionDetail&&temp.row.descriptionDetail.length>0"
                     placement="top"
                     width="600"
                     trigger="hover">
-                    <div v-html="scope.row.descriptionDetail"></div>
-                    <el-button slot="reference" type="text">详情</el-button>
+                    <div v-html="temp.row.descriptionDetail"></div>
+                    <el-button slot="reference"
+                               type="text">详情
+                    </el-button>
                   </el-popover>
                 </template>
               </el-table-column>
             </el-table>
-            <div slot="reference" style="font-size: 10px;cursor: pointer">{{ scope.row[item.day].value }}</div>
+            <div slot="reference" style="font-size: 10px;cursor: pointer">{{ scope.row[header.day].value }}</div>
           </el-popover>
         </template>
       </el-table-column>
@@ -160,7 +172,7 @@
       </div>
     </el-dialog>
 
-    <el-dialog title="任务详情" :visible.sync="openDetail" width="760px" class="feed-dialog" append-to-body>
+    <el-dialog title="任务详情" :visible.sync="openDetail" width="70%" class="feed-dialog" append-to-body>
       <task-detail :detailForm="detailForm"></task-detail>
     </el-dialog>
 
@@ -176,6 +188,7 @@ import FileUpload from "@/components/FileUpload"
 import DeptUserTree from "@/components/DeptUserTree"
 import RichTextEditor from "@/components/RichTextEditor"
 import {getDeptUserTree} from "@/api/system/user";
+import task from "@/views/mixins/task";
 
 const statusMap = {
   '0': {name: '待查看', type: 'info'},
@@ -183,24 +196,26 @@ const statusMap = {
   '2': {name: '进行中', type: ''},
   '3': {name: '延期', type: 'danger'},
   '4': {name: '完成', type: 'success'},
-  '5': {name: '终止', type: 'warning'}
+  '5': {name: '终止', type: 'warning'},
+  '6': {name: '待审核', type: 'warning'}
 }
 
 export default {
   components: {TaskDetail, FileUpload, DeptUserTree, RichTextEditor},
-  dicts: ['task_status',],
+  dicts: ['task_status'],
+  mixins: [task],
   data() {
     return {
       queryParams: {
         projectId: undefined,
-        month: undefined,
+        startDate: undefined,
+        endDate: undefined,
         status: '0'
       },
       projectTree: [],
       userList: [],
       tableHeaders: [],
       tableData: [],
-      statusMap: statusMap,
       open: false,
       form: {},
       feedbacks: [],
@@ -212,13 +227,6 @@ export default {
       },
       openDetail: false,
       detailForm: {},
-      cellColorMap: {
-        '1': '#fefeff',
-        '2': '#a6a9ad',
-        '3': '#f56c6c',
-        '4': '#67c23a',
-        '5': '#e6a23c',
-      }
     }
   },
   created() {
@@ -226,9 +234,8 @@ export default {
   },
   methods: {
     initData() {
-      let today = new Date();
-      let month = [DateUtil.beforeDay(today, 15), DateUtil.afterDay(today, 15)];
-      this.$set(this.queryParams, 'rangeDate', month)
+      this.$set(this.queryParams, 'startDate', DateUtil.beforeDay(null, 15))
+      this.$set(this.queryParams, 'endDate', DateUtil.afterDay(null, 15))
       this.getList()
       getProjectTree().then(res => {
         this.projectTree = res.data
@@ -247,9 +254,9 @@ export default {
       this.getList()
     },
     getList() {
-      if (this.queryParams.rangeDate && this.queryParams.rangeDate.length === 2) {
-        this.queryParams.startDate = this.queryParams.rangeDate[0]
-        this.queryParams.endDate = this.queryParams.rangeDate[1]
+      if (DateUtil.unix(this.queryParams.startDate) > DateUtil.unix(this.queryParams.endDate)) {
+        this.$message.warning("开始时间不能超过结束时间")
+        return
       }
       let dayDiff = DateUtil.dayDiff(this.queryParams.startDate, this.queryParams.endDate);
       if (dayDiff > 366) {
@@ -303,7 +310,7 @@ export default {
       })
     },
     cellDbClick(row, column, cell, event) {
-      let feedbackDate = DateUtil.getFeedBackDate(this.queryParams.rangeDate, column.property)
+      let feedbackDate = DateUtil.getFeedBackDate(this.queryParams.startDate, this.queryParams.endDate, column.property)
       if (DateUtil.unix(feedbackDate) > DateUtil.unix()) {
         this.$message.warning("评论时间不能超过:" + DateUtil.day())
         return;
@@ -373,6 +380,10 @@ export default {
             let files = this.form.files.map(item => item.name);
             this.form.fileUrl = JSON.stringify(files)
           }
+          let descriptionDetail = _.cloneDeep(this.form.descriptionDetail)
+          if (!this.checkRichText(descriptionDetail)) {
+            this.form.descriptionDetail = null
+          }
           addTaskFeedback(this.form).then(res => {
             this.$message.success("评论成功");
             this.open = false;

+ 66 - 18
src/views/task/task.vue

@@ -88,6 +88,15 @@
               </el-tag>
             </template>
           </el-table-column>
+          <el-table-column label="优先级" prop="priority" width="110">
+            <template slot-scope="scope">
+              <span v-if="dict.value==='1'" style="color: #FF0303">!!!</span>
+              <span v-else-if="dict.value==='2'" style="color: #FF7C48">!!</span>
+              <span v-else-if="dict.value==='3'" style="color: #53a8ff">!</span>
+              <span v-else style="color: #a0cfff">!</span>
+              <span>{{ getTaskPriority(scope.row.priority) }}</span>
+            </template>
+          </el-table-column>
           <el-table-column label="任务起止时间" width="170">
             <template slot-scope="scope">
               <span>{{ scope.row.beginDate + ' 至 ' + scope.row.endDate }}</span>
@@ -105,7 +114,7 @@
                          type="text"
                          icon="el-icon-coordinate"
                          @click="handleAudit(scope.row)"
-                         :disabled="scope.row.progressValue!=100||(scope.row.status!='2'&&scope.row.status!='3')"
+                         :disabled="scope.row.status!='6'"
                          v-hasPermi="['task:task:audit']"
               >审核
               </el-button>
@@ -159,7 +168,7 @@
         <el-form-item label="任务名称" prop="taskName">
           <el-input v-model="form.taskName" placeholder="请输入任务名称"/>
         </el-form-item>
-        <el-row :gutter="20">
+        <el-row>
           <el-col :span="12">
             <el-form-item label="所属项目" prop="projectId" class="mini-treeselect">
               <treeselect v-model="form.projectId" :options="projectOptions"
@@ -174,13 +183,14 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="20">
+        <el-row>
           <el-col :span="12">
             <el-form-item label="开始时间" prop="beginDate">
               <el-date-picker
                 v-model="form.beginDate"
                 type="date"
                 value-format="yyyy-MM-dd"
+                @change="checkDates(form.beginDate,form.endDate)"
                 placeholder="开始日期">
               </el-date-picker>
             </el-form-item>
@@ -189,6 +199,7 @@
             <el-form-item label="结束时间" prop="endDate">
               <el-date-picker
                 v-model="form.endDate"
+                @change="checkDates(form.beginDate,form.endDate)"
                 type="date"
                 value-format="yyyy-MM-dd"
                 placeholder="开始日期">
@@ -196,9 +207,33 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-form-item label="任务附件">
-          <file-upload ref="fu" :files="form.fileList" @getFileUrl="getFileUrl" @removeFile="removeFile"></file-upload>
-        </el-form-item>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="优先级">
+              <el-select
+                v-model="form.priority"
+                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: #FF0303">!!!</span>
+                  <span v-else-if="dict.value==='2'" style="color: #FF7C48">!!</span>
+                  <span v-else-if="dict.value==='3'" style="color: #53a8ff">!</span>
+                  <span v-else style="color: #a0cfff">!</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="fu" :files="form.fileList" @getFileUrl="getFileUrl"
+                           @removeFile="removeFile"></file-upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-form-item label="任务描述" prop="description">
           <rich-text-editor ref="rtEditor" :value="form.description"
                             @getHtml="(val)=>form.description=val"></rich-text-editor>
@@ -277,7 +312,7 @@
                       v-model="child.beginDate"
                       type="date"
                       value-format="yyyy-MM-dd"
-                      style="width: 130px"
+                      @change="checkDates(child.beginDate,child.endDate)"
                       start-placeholder="开始日期">
                     </el-date-picker>
                   </el-form-item>
@@ -288,7 +323,7 @@
                       v-model="child.endDate"
                       type="date"
                       value-format="yyyy-MM-dd"
-                      style="width: 130px"
+                      @change="checkDates(child.beginDate,child.endDate)"
                       start-placeholder="结束日期">
                     </el-date-picker>
                   </el-form-item>
@@ -355,19 +390,14 @@ import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import RichTextEditor from '@/components/RichTextEditor'
 import {mapGetters} from "vuex";
+import task from "@/views/mixins/task";
+import DateUtil from "@/utils/date";
 
-const statusMap = {
-  '0': {name: '待查看', type: 'info'},
-  '1': {name: '未开始', type: 'info'},
-  '2': {name: '进行中', type: ''},
-  '3': {name: '延期', type: 'danger'},
-  '4': {name: '完成', type: 'success'},
-  '5': {name: '终止', type: 'warning'}
-}
 export default {
   name: "Task",
   components: {Project, TaskDetail, DeptUserTree, FileUpload, Treeselect, RichTextEditor},
-  dicts: ['task_status'],
+  dicts: ['task_status', 'task_priority'],
+  mixins: [task],
   computed: {
     ...mapGetters(['userId'])
   },
@@ -380,7 +410,6 @@ export default {
       total: 0,
       // 项目表格数据
       taskList: [],
-      statusMap: statusMap,
       // 弹出层标题
       title: "",
       // 是否显示弹出层
@@ -448,6 +477,10 @@ export default {
     },
     /** 查询项目列表 */
     getList() {
+      if (DateUtil.unix(this.queryParams.startDate) > DateUtil.unix(this.queryParams.endDate)) {
+        this.$message.warning("开始时间不能超过结束时间")
+        return
+      }
       listTask(this.queryParams).then(res => {
           this.taskList = res.data.records;
           this.total = res.data.total;
@@ -540,6 +573,16 @@ export default {
       };
     },
 
+    getTaskPriority(priority) {
+      let label = ''
+      this.dict.type.task_priority.forEach(dict => {
+        if (dict.value === priority) {
+          label = dict.label
+        }
+      })
+      return label
+    },
+
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
@@ -553,6 +596,7 @@ export default {
             this.form.projectId = this.selectProjectId
           }
         }
+        this.$set(this.form, 'priority', '4')
       });
     },
     async handleEdit(row) {
@@ -652,6 +696,10 @@ export default {
           return
         }
       }
+      if (DateUtil.unix(this.form.beginDate) > DateUtil.unix(this.form.endDate)) {
+        this.$message.warning("开始时间不能超过结束时间")
+        return
+      }
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.files) {

+ 55 - 66
src/views/task/view.vue

@@ -1,26 +1,26 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true">
-      <!--      <el-form-item label="所属项目" prop="projectId">-->
-      <!--        <el-cascader-->
-      <!--          v-model="queryParams.projectId"-->
-      <!--          :options="projectTree"-->
-      <!--          @change="selectProjectChange"-->
-      <!--          :props="{ expandTrigger: 'hover',value:'id',label:'name', checkStrictly: true }"-->
-      <!--          collapse-tags-->
-      <!--          :show-all-levels="false"></el-cascader>-->
-      <!--      </el-form-item>-->
-      <el-form-item label="日期" prop="month">
+      <el-form-item label="日期" prop="startDate">
         <el-date-picker
-          v-model="queryParams.month"
-          type="daterange"
+          v-model="queryParams.startDate"
+          type="date"
           value-format="yyyy-MM-dd"
           @change="getList"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
+          placeholder="开始日期"
           :clearable="false"
-          style="width: 220px">
+          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">
@@ -62,44 +62,44 @@
       <!--          <span v-if="scope.row.formLastMonth" style="color: red">是</span>-->
       <!--        </template>-->
       <!--      </el-table-column>-->
-      <el-table-column align="center" v-for="item in tableHeaders" :key="item.day" :prop="item.day" width="42">
+      <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">{{ item.day }}</div>
-          <div v-if="item.week=='周六'" class="view-cell" style="color: #1c84c6">{{ item.week }}</div>
-          <div v-else-if="item.week=='周日'" class="view-cell" style="color: #1c84c6">{{ item.week }}</div>
-          <div v-else-if="item.week=='今日'" class="view-cell" style="color: #008000">{{ item.week }}</div>
-          <div v-else class="view-cell">{{ item.week }}</div>
+          <div style="width: 32px;font-size: 10px;text-align: center">{{ header.day }}</div>
+          <div v-if="header.week=='周六'" class="view-cell" style="color: #1c84c6">{{ header.week }}</div>
+          <div v-else-if="header.week=='周日'" class="view-cell" style="color: #1c84c6">{{ header.week }}</div>
+          <div v-else-if="header.week=='今日'" class="view-cell" style="color: #008000">{{ header.week }}</div>
+          <div v-else class="view-cell">{{ header.week }}</div>
         </template>
         <template slot-scope="scope">
-          <span v-if="scope.row[item.day].comment" class="comment-badge"></span>
-          <span v-if="scope.row[item.day].audit" class="audit-badge"></span>
+          <span v-if="scope.row[header.day].comment" class="comment-badge"></span>
+          <span v-if="scope.row[header.day].audit" class="audit-badge"></span>
           <el-popover
-            v-if="scope.row[item.day].value!=''"
+            v-if="scope.row[header.day].value!=''"
             placement="top"
             width="680"
             trigger="click">
             <el-table :data="feedbacks" border size="mini">
               <el-table-column width="75" label="反馈状态">
-                <template slot-scope="item">
-                  <div>{{ getFeedbackTypeName(item.row.feedbackType) }}</div>
+                <template slot-scope="temp">
+                  <div>{{ getFeedbackTypeName(temp.row.feedbackType) }}</div>
                 </template>
               </el-table-column>
               <el-table-column width="60" property="userName" label="反馈人"></el-table-column>
               <el-table-column width="55" label="完成度">
-                <template slot-scope="item">
-                  <div>{{ item.row.feedbackType === '4' ? '' : item.row.value + '%' }}</div>
+                <template slot-scope="temp">
+                  <div>{{ temp.row.feedbackType === '4' ? '' : temp.row.value + '%' }}</div>
                 </template>
               </el-table-column>
               <el-table-column width="110" property="createTime" label="反馈时间">
-                <template slot-scope="item">
-                  <div>{{ parseTime(item.row.createTime) }}</div>
+                <template slot-scope="temp">
+                  <div>{{ parseTime(temp.row.createTime) }}</div>
                 </template>
               </el-table-column>
               <el-table-column label="反馈备注">
-                <template slot-scope="item">
+                <template slot-scope="temp">
                   <div>
-                    <span>{{ item.row.description }}</span>
-                    <span v-for="(file,index) in item.row.fileList">
+                    <span>{{ temp.row.description }}</span>
+                    <span v-for="(file,index) in temp.row.fileList">
                                 <a :href="file.url" style="color: darkgreen">
                                   <span style="margin-left: 5px">{{ file.name }}</span>
                                 </a>
@@ -108,24 +108,25 @@
                 </template>
               </el-table-column>
               <el-table-column label="反馈详情" width="90px">
-                <template slot-scope="item">
+                <template slot-scope="temp">
                   <el-popover
+                    v-if="temp.row.descriptionDetail&&temp.row.descriptionDetail.length>0"
                     placement="top"
                     width="600"
                     trigger="hover">
-                    <div v-html="item.row.descriptionDetail"></div>
+                    <div v-html="temp.row.descriptionDetail"></div>
                     <el-button slot="reference" type="text">详情</el-button>
                   </el-popover>
                   <span
-                    v-if="(item.row.feedbackType === '4'||item.row.feedbackType === '5')&& scope.row.executor===userId && item.row.commentConfirm!='1'"
+                    v-if="(temp.row.feedbackType === '4'||temp.row.feedbackType === '5')&& scope.row.executor===userId && temp.row.commentConfirm!='1'"
                     style="margin-left: 10px">
                   <el-button type="text" icon="el-icon-thumb" size="mini"
-                             @click="confirmComment(item.row)">确认</el-button>
+                             @click="confirmComment(temp.row)">确认</el-button>
                   </span>
                 </template>
               </el-table-column>
             </el-table>
-            <div slot="reference" style="font-size: 10px;cursor: pointer">{{ scope.row[item.day].value }}</div>
+            <div slot="reference" style="font-size: 10px;cursor: pointer">{{ scope.row[header.day].value }}</div>
           </el-popover>
         </template>
       </el-table-column>
@@ -233,19 +234,13 @@ import FileUpload from "@/components/FileUpload"
 import RichTextEditor from '@/components/RichTextEditor'
 
 import {mapGetters} from 'vuex'
+import task from "@/views/mixins/task";
 
-const statusMap = {
-  '0': {name: '待查看', type: 'info'},
-  '1': {name: '未开始', type: 'info'},
-  '2': {name: '进行中', type: ''},
-  '3': {name: '延期', type: 'danger'},
-  '4': {name: '完成', type: 'success'},
-  '5': {name: '终止', type: 'warning'}
-}
 
 export default {
   components: {TaskDetail, FileUpload, RichTextEditor},
   dicts: ['task_status', 'feedback_type'],
+  mixins: [task],
   computed: {
     ...mapGetters(['userId'])
   },
@@ -282,14 +277,14 @@ export default {
     return {
       queryParams: {
         projectId: undefined,
-        month: [],
+        startDate: undefined,
+        endDate: undefined,
         status: '0',
         userId: undefined
       },
       projectTree: [],
       tableHeaders: [],
       tableData: [],
-      statusMap: statusMap,
       open: false,
       form: {},
       feedbacks: [],
@@ -309,13 +304,7 @@ export default {
       },
       openDetail: false,
       detailForm: {},
-      cellColorMap: {
-        '1': '#fefeff',
-        '2': '#a6a9ad',
-        '3': '#f56c6c',
-        '4': '#67c23a',
-        '5': '#e6a23c',
-      }
+
     }
   },
   created() {
@@ -323,22 +312,18 @@ export default {
   },
   methods: {
     initData() {
-      let today = new Date();
-      let month = [DateUtil.beforeDay(today, 13), DateUtil.afterDay(today, 15)];
-      this.$set(this.queryParams, 'month', month)
+      this.$set(this.queryParams, 'startDate', DateUtil.beforeDay(null, 15))
+      this.$set(this.queryParams, 'endDate', DateUtil.afterDay(null, 15))
       this.getList()
-      // getProjectTree().then(res => {
-      //   this.projectTree = res.data
-      // })
     },
     selectProjectChange(val) {
       this.queryParams.projectId = val[val.length - 1]
       this.getList()
     },
     getList() {
-      if (this.queryParams.month && this.queryParams.month.length === 2) {
-        this.queryParams.startDate = this.queryParams.month[0]
-        this.queryParams.endDate = this.queryParams.month[1]
+      if (DateUtil.unix(this.queryParams.startDate) > DateUtil.unix(this.queryParams.endDate)) {
+        this.$message.warning("开始时间不能超过结束时间")
+        return
       }
       let dayDiff = DateUtil.dayDiff(this.queryParams.startDate, this.queryParams.endDate);
       if (dayDiff > 366) {
@@ -393,7 +378,7 @@ export default {
       })
     },
     cellDbClick(row, column, cell, event) {
-      let feedbackDate = DateUtil.getFeedBackDate(this.queryParams.month, column.property)
+      let feedbackDate = DateUtil.getFeedBackDate(this.queryParams.startDate, this.queryParams.endDate, column.property)
       if (DateUtil.unix(feedbackDate) > DateUtil.unix()) {
         this.$message.warning("反馈时间不能超过:" + DateUtil.day())
         return;
@@ -468,6 +453,10 @@ export default {
             let files = this.form.files.map(item => item.name);
             this.form.fileUrl = JSON.stringify(files)
           }
+          let descriptionDetail = _.cloneDeep(this.form.descriptionDetail)
+          if (!this.checkRichText(descriptionDetail)) {
+            this.form.descriptionDetail = null
+          }
           addTaskFeedback(this.form).then(res => {
             if (res.code === 'S.F-2001') {
               let message = ''