Explorar o código

任务管理修改

ysc hai 1 ano
pai
achega
3a611ab059

+ 34 - 16
src/views/material/myReceive.vue

@@ -1,7 +1,13 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true">
-      <el-form-item label="领用人" prop="receiveUserId" v-hasPermi="['material:asset:add']">
+      <el-form-item prop="receiveUserId" v-hasPermi="['material:asset:add']">
+        <template slot="label">
+          <span>领用人</span>
+          <el-tooltip class="item" effect="dark" content="不选择时,默认展示当前用户的领用" placement="top">
+            <i class="el-icon-info"></i>
+          </el-tooltip>
+        </template>
         <el-autocomplete
           class="my-autocomplete"
           v-model="selectUser"
@@ -56,20 +62,20 @@
           <span>{{ parseTime(scope.row.receiveDate) }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="操作" mini-width="120">
+      <el-table-column label="操作" width="160">
         <template slot-scope="scope">
-          <el-button
-            icon="el-icon-edit"
-            size="mini"
-            type="text"
-            @click="handleTransfer(scope.row)"
-          >流转记录
-          </el-button>
+<!--          <el-button-->
+<!--            icon="el-icon-edit"-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            @click="handleTransfer(scope.row)"-->
+<!--          >流转记录-->
+<!--          </el-button>-->
           <el-button
             icon="el-icon-coordinate"
             size="mini"
             type="text"
-            v-if="scope.row.receiveConfirm==='0'"
+            :disabled="scope.row.receiveConfirm==='1'"
             @click="handleConfirm(scope.row)"
           >领用确认
           </el-button>
@@ -311,12 +317,24 @@ export default {
 
     handleConfirm(row) {
       this.toConfirmTransferId = row.transferId
-      getAsset(row.id).then(res => {
-        this.form = res.data
-        this.title = '物品领用确认'
-        this.confirmDialog = true
-        this.detailOpen = true;
-      })
+      this.form = row
+      if (row.children && row.children.length > 0) {
+        this.form.accessoryList = row.children.map(item => {
+          return {
+            accessoryName: item.assetName,
+            accessoryNumber: item.deptAssetNumber
+          }
+        })
+      }
+      this.title = '物品领用确认'
+      this.confirmDialog = true
+      this.detailOpen = true;
+      // getAsset(row.id).then(res => {
+      //   this.form = res.data
+      //   this.title = '物品领用确认'
+      //   this.confirmDialog = true
+      //   this.detailOpen = true;
+      // })
     },
     submitConfirm() {
       confirmReceive(this.toConfirmTransferId).then(res => {

+ 10 - 1
src/views/mixins/task.js

@@ -40,6 +40,15 @@ export default {
       if (DateUtil.unix(startDate) > DateUtil.unix(endDate)) {
         this.$message.warning("开始时间不能超过结束时间")
       }
-    }
+    },
+    getTaskPriority(priority) {
+      let label = ''
+      this.dict.type.task_priority.forEach(dict => {
+        if (dict.value === priority) {
+          label = dict.label
+        }
+      })
+      return label
+    },
   }
 }

+ 21 - 1
src/views/task/projectView.vue

@@ -69,6 +69,20 @@
           </el-tag>
         </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 fixed prop="" label="上月延期" width="40">-->
       <!--        <template slot-scope="scope">-->
       <!--          <span v-if="scope.row.formLastMonth" style="color: red">是</span>-->
@@ -202,7 +216,7 @@ const statusMap = {
 
 export default {
   components: {TaskDetail, FileUpload, DeptUserTree, RichTextEditor},
-  dicts: ['task_status'],
+  dicts: ['task_status', 'task_priority'],
   mixins: [task],
   data() {
     return {
@@ -268,6 +282,7 @@ export default {
         this.tableData = res.data.data
       })
     },
+
     cellMouseEnter(row, column, cell, event) {
       if (column.property != 'taskName') {
         return
@@ -454,4 +469,9 @@ export default {
 .feed-dialog ::v-deep .el-dialog__body {
   padding: 0 20px 10px 20px;
 }
+
+.el-tag--dark {
+  border-color: white;
+}
+
 </style>

+ 21 - 22
src/views/task/task.vue

@@ -74,8 +74,8 @@
                   :tree-props="{children: 'children'}">
           <el-table-column label="任务编号" prop="id"/>
           <el-table-column label="任务名称" prop="taskName" min-width="150" :show-overflow-tooltip="true"/>
-          <el-table-column label="执行(负责)人" prop="executorName"/>
-          <el-table-column label="进度" prop="progressValue" width="80">
+          <el-table-column label="执行(负责)人" prop="executorName" width="100"/>
+          <el-table-column label="进度" prop="progressValue" width="70">
             <template slot-scope="scope">
               <span>{{ (scope.row.progressValue ? scope.row.progressValue : 0) + '%' }}</span>
             </template>
@@ -90,11 +90,10 @@
           </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>
+              <el-tag v-if="scope.row.priority==='1'" color="#fa8888" effect="dark" :hit="false">{{ getTaskPriority(scope.row.priority) }}</el-tag>
+              <el-tag v-else-if="scope.row.priority==='2'" color="#fb7fb7" effect="dark" :hit="false">{{ getTaskPriority(scope.row.priority) }}</el-tag>
+              <el-tag v-else-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 label="任务起止时间" width="170">
@@ -173,12 +172,14 @@
             <el-form-item label="所属项目" prop="projectId" class="mini-treeselect">
               <treeselect v-model="form.projectId" :options="projectOptions"
                           :normalizer="normalizer"
+                          style="width: 220px"
                           placeholder="请选择"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="执行(负责)人" prop="executor">
               <dept-user-tree ref="dut2" :userList="userList"
+                              style="width: 220px"
                               @selected="(val)=>selectExecutor(val,'form')"/>
             </el-form-item>
           </el-col>
@@ -191,6 +192,7 @@
                 type="date"
                 value-format="yyyy-MM-dd"
                 @change="checkDates(form.beginDate,form.endDate)"
+                style="width: 220px"
                 placeholder="开始日期">
               </el-date-picker>
             </el-form-item>
@@ -202,6 +204,7 @@
                 @change="checkDates(form.beginDate,form.endDate)"
                 type="date"
                 value-format="yyyy-MM-dd"
+                style="width: 220px"
                 placeholder="开始日期">
               </el-date-picker>
             </el-form-item>
@@ -212,16 +215,17 @@
             <el-form-item label="优先级">
               <el-select
                 v-model="form.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: #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 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>
@@ -527,7 +531,8 @@ export default {
         projectId: undefined,
         executor: undefined,
         planHours: undefined,
-        rangeDate: [],
+        beginDate: undefined,
+        endDate: undefined,
         description: undefined
       };
       this.resetForm("form");
@@ -574,16 +579,6 @@ 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();
@@ -906,4 +901,8 @@ export default {
   margin: 5px;
 }
 
+.el-tag--dark {
+  border-color: white;
+}
+
 </style>

+ 212 - 40
src/views/task/view.vue

@@ -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>