浏览代码

Merge remote-tracking branch 'origin/master'

humingbo 1 年之前
父节点
当前提交
de50f84768
共有 4 个文件被更改,包括 154 次插入41 次删除
  1. 56 0
      src/components/FileUpload/index.vue
  2. 15 2
      src/views/task/components/taskDetail.vue
  3. 46 30
      src/views/task/task.vue
  4. 37 9
      src/views/task/view.vue

+ 56 - 0
src/components/FileUpload/index.vue

@@ -0,0 +1,56 @@
+<template>
+  <div>
+    <el-upload
+      ref="upload"
+      :action="fileAction"
+      :on-remove="handleRemove"
+      :on-success="handleSuccess"
+      :on-error="handleError"
+      name="file">
+      <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
+    </el-upload>
+  </div>
+
+</template>
+
+<script>
+import {uploadFileUrl, deleteFile} from "@/api/file/file";
+
+export default {
+  name: "index",
+  data() {
+    return {
+      fileAction: ''
+    }
+  },
+  created() {
+    this.fileAction = uploadFileUrl()
+  },
+  methods: {
+    handleRemove(file, fileList) {
+      let url = file.response.data.url;
+      deleteFile(url).then(res => {
+        this.$message({
+          message: '操作成功!',
+          type: 'success'
+        });
+      });
+      this.$emit('removeFile', url)
+    },
+    handleSuccess(response, file, fileList) {
+      let fileUrl = response.data.url
+      this.$emit('getFileUrl', fileUrl)
+    },
+    handleError() {
+      this.$message({
+        message: '上传失败,请稍候再试!',
+        type: 'warning'
+      });
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 15 - 2
src/views/task/components/taskDetail.vue

@@ -21,7 +21,13 @@
           <el-tag size="mini">{{ item }}</el-tag>
         </template>
       </el-form-item>
-      <el-form-item label="附件:"></el-form-item>
+      <el-form-item label="附件:">
+        <div v-for="(file,index) in detailForm.fileList">
+          <a :href="file.url" style="color: darkgreen">
+            <span v-html="file.fileName"></span>
+          </a>
+        </div>
+      </el-form-item>
     </el-form>
     <el-table :data="detailForm.feedbacks" border style="font-size: 12px">
       <el-table-column width="70" label="反馈状态">
@@ -38,7 +44,14 @@
       <el-table-column width="140" property="createTime" label="反馈时间"></el-table-column>
       <el-table-column label="反馈备注">
         <template slot-scope="scope">
-          <div>{{ scope.row.description }}</div>
+          <div>
+            <div>{{ scope.row.description }}</div>
+            <span v-for="(file,index) in scope.row.fileList">
+              <a :href="file.url" style="color: darkgreen">
+                <span v-html="file.fileName"></span>
+              </a>
+            </span>
+          </div>
         </template>
       </el-table-column>
     </el-table>

+ 46 - 30
src/views/task/task.vue

@@ -97,6 +97,7 @@
             type="text"
             icon="el-icon-edit"
             @click="handleAudit(scope.row)"
+            :disabled="scope.row.progressValue!=100"
             v-hasPermi="['task:task:audit']"
           >审核
           </el-button>
@@ -179,25 +180,14 @@
             v-model="form.executor"
             :options="userList"
             @change="(val)=>selectExecutor(val,'form')"
-            :props="{ expandTrigger: 'hover',value:'id',label:'label' }"
+            :props="{ expandTrigger: 'hover',value:'id',label:'name' }"
             :show-all-levels="false"></el-cascader>
         </el-form-item>
         <el-form-item label="共同执行人" prop="coExecutor">
           <dept-user-tree :userList="userList" @selected="selectCoExecutor"/>
         </el-form-item>
         <el-form-item label="任务附件">
-          <!--          <el-upload-->
-          <!--            class="upload-demo"-->
-          <!--            action="https://jsonplaceholder.typicode.com/posts/"-->
-          <!--            :on-preview="handlePreview"-->
-          <!--            :on-remove="handleRemove"-->
-          <!--            :before-remove="beforeRemove"-->
-          <!--            multiple-->
-          <!--            :limit="3"-->
-          <!--            :on-exceed="handleExceed"-->
-          <!--            :file-list="fileList">-->
-          <!--            <el-button size="small" type="primary">点击上传</el-button>-->
-          <!--          </el-upload>-->
+          <file-upload @getFileUrl="getFileUrl" @removeFile="removeFile"></file-upload>
         </el-form-item>
         <el-form-item label="任务描述">
           <el-input v-model="form.description" type="textarea" placeholder="请输入内容"></el-input>
@@ -210,11 +200,11 @@
     </el-dialog>
 
     <!-- 详情/审核任务对话框 -->
-    <el-dialog :title="detailTitle" :visible.sync="detailOpen" width="500px" append-to-body>
+    <el-dialog :title="detailTitle" :visible.sync="detailOpen" width="680px" append-to-body>
       <task-detail :detail-form="detailForm"></task-detail>
       <div v-if="detailTitle=='审核任务'" style="margin-top: 10px">
-        <el-form ref="auditForm" :model="auditForm" label-width="100px">
-          <el-form-item label="审核意见">
+        <el-form ref="auditForm" :model="auditForm" :rules="auditRules" label-width="100px">
+          <el-form-item label="审核意见" prop="auditResult">
             <el-radio-group v-model="auditForm.auditResult">
               <el-radio label="1">确认完成</el-radio>
               <el-radio label="0">驳回</el-radio>
@@ -225,7 +215,7 @@
           </el-form-item>
         </el-form>
       </div>
-      <div slot="footer" class="dialog-footer">
+      <div v-if="detailTitle=='审核任务'" slot="footer" class="dialog-footer">
         <el-button type="primary" size="small" @click="submitAudit">确 定</el-button>
         <el-button size="small" @click="detailCancel">取 消</el-button>
       </div>
@@ -242,28 +232,27 @@
           <el-button type="text" size="medium" icon="el-icon-circle-plus-outline"
                      style="float: right; padding: -1px 3px" @click="addChild"></el-button>
         </el-form-item>
-        <el-card shadow="always" v-for="(c,index) in splitForm.children" :key="index">
+        <el-card shadow="always" v-for="(child,index) in splitForm.children" :key="index">
           <div slot="header" class="clearfix">
             <span>子任务{{ index + 1 }}</span>
             <el-button type="text" icon="el-icon-close" @click="delChild(index)"
                        style="float: right; padding: 3px 0"></el-button>
           </div>
-          <el-form label-width="80px">
-            <el-form-item label="任务名称">
-              <el-input v-model="c.taskName" size="small" style="width: 350px"/>
+          <el-form ref="splitChild" :rules="rules" label-width="80px">
+            <el-form-item label="任务名称" prop="taskName">
+              <el-input v-model="child.taskName" size="small" style="width: 350px"/>
             </el-form-item>
             <el-form-item label="执行人" prop="executor">
               <el-cascader
-                ref="dut"
-                v-model="c.executor"
+                v-model="child.executor"
                 :options="userList"
                 @change="(val)=>selectExecutor(val,'splitForm',index)"
-                :props="{ expandTrigger: 'hover',value:'id',label:'label' }"
+                :props="{ expandTrigger: 'hover',value:'id',label:'name' }"
                 :show-all-levels="false"></el-cascader>
             </el-form-item>
             <el-form-item label="起止时间">
               <el-date-picker
-                v-model="c.rangeDate"
+                v-model="child.rangeDate"
                 type="daterange"
                 size="small"
                 value-format="yyyy-MM-dd"
@@ -300,6 +289,7 @@ import {getDeptUserTree} from "@/api/system/user";
 import DateUtil from "@/utils/date"
 import TaskDetail from "./components/taskDetail"
 import DeptUserTree from "@/components/DeptUserTree"
+import FileUpload from "@/components/FileUpload"
 
 const statusMap = {
   '0': {name: '待查看', color: '#E8EBEE'},
@@ -311,7 +301,7 @@ const statusMap = {
 }
 export default {
   name: "Task",
-  components: {TaskDetail, DeptUserTree},
+  components: {TaskDetail, DeptUserTree, FileUpload},
   data() {
     return {
       categoryList: [],
@@ -360,7 +350,12 @@ export default {
         executor: [
           {required: true, message: "执行人不能为空", trigger: "change"}
         ]
-      }
+      },
+      auditRules: {
+        auditResult: [
+          {required: true, message: "审核意见不能为空", trigger: "change"}
+        ]
+      },
     };
   },
   created() {
@@ -461,17 +456,29 @@ export default {
     selectCoExecutor(val) {
       this.form.coExecutor = val.join();
     },
+    getFileUrl(val) {
+      this.form['files'] = this.form.files || []
+      this.form.files.push(val)
+    },
+    removeFile(val) {
+      this.form.files.splice(val)
+    },
     /** 审核按钮操作 */
     handleAudit(row) {
       getTask(row.id).then(res => {
         this.detailForm = res.data;
+        this.auditForm = {
+          taskId: row.id,
+          auditResult: undefined,
+          auditOpinion: undefined
+        }
         this.detailOpen = true;
         this.detailTitle = "审核任务";
       })
     },
     /** 分解按钮操作 */
     handleSplit(row) {
-      getDeptUserTree().then(res => {
+      getDeptUserTree('').then(res => {
         this.userList = res.data
         this.splitForm = {
           parentId: row.id,
@@ -483,16 +490,17 @@ export default {
       })
     },
 
-
     /** 提交按钮 */
     submitForm() {
       this.$refs["form"].validate(valid => {
         if (valid) {
           this.form.beginDate = this.form.rangeDate[0]
           this.form.endDate = this.form.rangeDate[1]
+          this.form.fileUrl = JSON.stringify(this.form.files)
           addTask(this.form).then(res => {
             this.$message.success("新增成功");
             this.open = false;
+            this.reset();
             this.getList();
           });
         }
@@ -501,7 +509,15 @@ export default {
 
     /** 审核提交按钮 */
     submitAudit() {
-
+      this.$refs["auditForm"].validate(valid => {
+        if (valid) {
+          auditTask(this.auditForm).then(res => {
+            this.getList()
+            this.detailOpen = false
+            this.$message.success("操作成功");
+          })
+        }
+      });
     },
     /** 分解任务提交按钮 */
     submitSplit() {

+ 37 - 9
src/views/task/view.vue

@@ -42,15 +42,15 @@
       @row-click="rowClick"
       height="calc(100vh - 140px)"
       border>
-      <el-table-column prop="id" label="编号" align="center" width="50"/>
-      <el-table-column prop="taskName" label="任务名称" align="center" width="180"/>
-      <el-table-column prop="executorName" label="主负责人" align="center" width="80">
+      <el-table-column fixed prop="id" label="编号" align="center" width="50"/>
+      <el-table-column fixed prop="taskName" label="任务名称" align="center" width="180"/>
+      <el-table-column fixed prop="executorName" label="主负责人" align="center" width="80">
         <template slot-scope="scope">
           <div style="line-height: 15px">{{ scope.row.executorName }}</div>
           <el-tag size="mini">{{ scope.row.progressValue + '%' }}</el-tag>
         </template>
       </el-table-column>
-      <el-table-column prop="" label="上月延期" width="50">
+      <el-table-column fixed prop="" label="上月延期" width="50">
         <template slot-scope="scope">
           <span v-if="scope.row.formLastMonth" style="color: red">是</span>
         </template>
@@ -83,7 +83,14 @@
               <el-table-column width="140" property="createTime" label="反馈时间"></el-table-column>
               <el-table-column label="反馈备注">
                 <template slot-scope="scope">
-                  <div>{{ scope.row.description }}</div>
+                  <div>
+                    <div>{{ scope.row.description }}</div>
+                    <span v-for="(file,index) in scope.row.fileList">
+                      <a :href="file.url" style="color: darkgreen">
+                        <span v-html="file.fileName"></span>
+                      </a>
+                    </span>
+                  </div>
                 </template>
               </el-table-column>
             </el-table>
@@ -115,7 +122,9 @@
         <el-form-item label="进度">
           <el-input-number v-model="form.value" :min="1" :max="100"></el-input-number>
         </el-form-item>
-        <el-form-item label="附件"></el-form-item>
+        <el-form-item label="附件">
+          <file-upload @getFileUrl="getFileUrl" @removeFile="removeFile"></file-upload>
+        </el-form-item>
         <el-form-item label="反馈描述" prop="description">
           <el-input v-model="form.description" type="textarea"/>
         </el-form-item>
@@ -138,9 +147,10 @@ import {getTask, listView, addTaskFeedback, getFeedbackList} from "@/api/task/ta
 import {getProjectList} from "@/api/task/project";
 import DateUtil from "@/utils/date"
 import TaskDetail from "./components/taskDetail"
+import FileUpload from "@/components/FileUpload"
 
 export default {
-  components: {TaskDetail},
+  components: {TaskDetail, FileUpload},
   data() {
     return {
       queryParams: {
@@ -192,6 +202,9 @@ export default {
       if (row[column.property]) {
         style.background = this.cellColorMap[row[column.property].color]
       }
+      if (columnIndex === 1) {
+        style.color = '#306FB1'
+      }
       return style
     },
 
@@ -205,16 +218,22 @@ export default {
       })
     },
     cellDbclick(row, column, cell, event) {
-      // this.visible = false
       if (!row[column.property].color || row[column.property].color === 'white') {
         return
       }
+
+      let feedbackDate = this.queryParams.month + '-' + column.property
+      if (DateUtil.unix(feedbackDate) > DateUtil.unix()) {
+        this.$message.warning("反馈时间不能超过:" + DateUtil.day())
+        return;
+      }
+
       this.form = {
         id: undefined,
         taskName: row.taskName,
         taskId: row.id,
         projectName: row.projectName,
-        feedbackDate: this.queryParams.month + '-' + column.property,
+        feedbackDate: feedbackDate,
         feedbackType: '1',
         value: undefined,
         fileUrl: undefined,
@@ -251,10 +270,19 @@ export default {
       };
       this.resetForm("form");
     },
+    getFileUrl(val) {
+      this.form['files'] = this.form.files || []
+      this.form.files.push(val)
+      console.log(this.form.files);
+    },
+    removeFile(val) {
+      this.form.files.splice(val)
+    },
     /** 提交按钮 */
     submitForm() {
       this.$refs["form"].validate(valid => {
         if (valid) {
+          this.form.fileUrl = JSON.stringify(this.form.files)
           addTaskFeedback(this.form).then(res => {
             this.$message.success("反馈成功");
             this.open = false;