Browse Source

任务管理修改修改

ysc 1 year ago
parent
commit
f4f87bfdf6

+ 0 - 3
src/views/material/officeSupply.vue

@@ -164,9 +164,6 @@
           </template>
         </el-table-column>
         <el-table-column label="价格" prop="price" width="120px">
-          <template slot="header" slot-scope="scope">
-            <span style="color: red">*</span><span>价格</span>
-          </template>
           <template slot-scope="scope">
             <el-input v-model="scope.row.price" size="mini" placeholder="请输入价格"/>
           </template>

+ 17 - 14
src/views/task/components/taskDetail.vue

@@ -7,31 +7,23 @@
       <el-form-item label="父任务:" v-if="form.parentTaskId">
         <div class="p-task" @click="getParentTask(form.parentTaskId)">{{ form.parentTaskName }}</div>
       </el-form-item>
+
       <el-row :gutter="20">
-        <el-col :span="12">
+        <el-col :span="8">
           <el-form-item label="所属项目:">
             <div>{{ form.projectName }}</div>
           </el-form-item>
         </el-col>
-        <el-col :span="12">
+        <el-col :span="10">
           <el-form-item label="起止时间:">
             <div>{{ form.beginDate + ' 至 ' + form.endDate }}</div>
           </el-form-item>
         </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="主要负责人:">
+        <el-col :span="6">
+          <el-form-item label="执行(负责)人:" label-width="110px">
             <div>{{ form.executorName }}</div>
           </el-form-item>
         </el-col>
-        <el-col :span="12">
-          <el-form-item label="共同执行人:">
-            <template v-for="item in form.coExecutorNames">
-              <el-tag size="mini" style="margin-right: 5px">{{ item }}</el-tag>
-            </template>
-          </el-form-item>
-        </el-col>
       </el-row>
       <el-form-item label="任务描述:">
         <div v-html="form.description"></div>
@@ -65,7 +57,7 @@
       <el-table-column label="反馈备注">
         <template slot-scope="scope">
           <div>
-            <div v-html="scope.row.description"></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>
@@ -74,6 +66,17 @@
           </div>
         </template>
       </el-table-column>
+      <el-table-column label="反馈详情" width="80px">
+        <template slot-scope="scope">
+          <el-popover
+            placement="top"
+            width="600"
+            trigger="hover">
+            <div v-html="scope.row.descriptionDetail"></div>
+            <el-button slot="reference" type="text">详情</el-button>
+          </el-popover>
+        </template>
+      </el-table-column>
     </el-table>
   </div>
 </template>

+ 1 - 1
src/views/task/projectTable.vue

@@ -58,7 +58,7 @@ export default {
   created() {
     let queryProjectId = this.$route.query.projectId;
     if (queryProjectId) {
-      this.queryParams.projectIds.push(parseInt(queryProjectId))
+      this.queryParams.projectIds.push(queryProjectId)
     }
     this.initData()
   },

+ 27 - 8
src/views/task/projectView.vue

@@ -109,6 +109,17 @@
                   </div>
                 </template>
               </el-table-column>
+              <el-table-column label="反馈详情" width="80px">
+                <template slot-scope="scope">
+                  <el-popover
+                    placement="top"
+                    width="600"
+                    trigger="hover">
+                    <div v-html="scope.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">{{ scope.row[item.day].value }}</div>
           </el-popover>
@@ -121,18 +132,26 @@
         <el-form-item label="任务名称">
           <div>{{ form.taskName }}</div>
         </el-form-item>
-        <el-form-item label="所属项目">
-          <div>{{ form.projectName }}</div>
-        </el-form-item>
-        <el-form-item label="反馈时间">
-          <div>{{ form.feedbackDate }}</div>
-        </el-form-item>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="所属项目">
+              <div>{{ form.projectName }}</div>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="反馈时间">
+              <div>{{ form.feedbackDate }}</div>
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-form-item label="附件" prop="fileUrl">
           <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" autosize/>-->
-          <rich-text-editor ref="rtEditor" @getHtml="(val)=>form.description=val"></rich-text-editor>
+          <el-input v-model="form.description" type="textarea" autosize/>
+        </el-form-item>
+        <el-form-item label="描述详情" prop="descriptionDetail">
+          <rich-text-editor ref="rtEditor" @getHtml="(val)=>form.descriptionDetail=val"></rich-text-editor>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">

+ 72 - 50
src/views/task/task.vue

@@ -98,7 +98,7 @@
                          type="text"
                          icon="el-icon-coordinate"
                          @click="handleAudit(scope.row)"
-                         :disabled="scope.row.progressValue!=100||(scope.row.status!='2'&&scope.row.status!='3')||scope.row.createBy!=userId"
+                         :disabled="scope.row.progressValue!=100||(scope.row.status!='2'&&scope.row.status!='3')"
                          v-hasPermi="['task:task:audit']"
               >审核
               </el-button>
@@ -116,7 +116,7 @@
                   >终止
                   </el-dropdown-item>
                   <el-dropdown-item command="handleEdit" icon="el-icon-edit"
-                                    v-if="userId===scope.row.createBy"
+                                    v-if="userId==='1'||userId===scope.row.createBy"
                                     v-hasPermi="['task:task:edit']"
                   >修改
                   </el-dropdown-item>
@@ -147,33 +147,45 @@
 
 
     <!-- 添加或修改任务配置对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="680px" class="add-dialog" append-to-body @close="cancel">
-      <el-form ref="form" :model="form" :rules="rules" size="mini" label-width="110px">
+    <el-dialog :title="title" :visible.sync="open" width="800px" class="add-dialog" append-to-body @close="cancel">
+      <el-form ref="form" :model="form" :rules="rules" size="mini" label-width="115px">
         <el-form-item label="任务名称" prop="taskName">
           <el-input v-model="form.taskName" placeholder="请输入任务名称"/>
         </el-form-item>
-        <el-form-item label="所属项目" prop="projectId" class="mini-treeselect">
-          <treeselect v-model="form.projectId" :options="projectOptions" :normalizer="normalizer"
-                      placeholder="请选择"/>
-        </el-form-item>
-        <el-form-item label="起止时间" prop="rangeDate">
-          <el-date-picker
-            v-model="form.rangeDate"
-            type="daterange"
-            value-format="yyyy-MM-dd"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            style="width: 340px">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="执行(负责)人" prop="executor">
-          <dept-user-tree ref="dut2" :userList="userList"
-                          @selected="(val)=>selectExecutor(val,'form')"/>
-        </el-form-item>
-        <el-form-item label="共同执行人" prop="coExecutor">
-          <dept-user-tree ref="dut3" :userList="userList" :multiple="true" @selected="selectCoExecutor"/>
-        </el-form-item>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="所属项目" prop="projectId" class="mini-treeselect">
+              <treeselect v-model="form.projectId" :options="projectOptions" :normalizer="normalizer"
+                          placeholder="请选择"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="执行(负责)人" prop="executor">
+              <dept-user-tree ref="dut2" :userList="userList"
+                              @selected="(val)=>selectExecutor(val,'form')"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="起止时间" prop="rangeDate">
+              <el-date-picker
+                v-model="form.rangeDate"
+                type="daterange"
+                value-format="yyyy-MM-dd"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+                style="width: 255px">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="计划工时(小时)" prop="planHours">
+              <el-input-number v-model="form.planHours" :min="1" :max="2000"></el-input-number>
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-form-item label="任务附件">
           <file-upload :files="form.fileList" @getFileUrl="getFileUrl" @removeFile="removeFile"></file-upload>
         </el-form-item>
@@ -222,7 +234,7 @@
           <el-button type="text" icon="el-icon-circle-plus-outline"
                      style="float: right; padding: -1px 3px" @click="addChild"></el-button>
         </el-form-item>
-        <div style="display: flex;justify-content: flex-start">
+        <div style="display: flex;justify-content: flex-start;flex-wrap:wrap">
           <el-card shadow="always" v-for="(child,index) in splitForm.children" :key="index" class="split-card">
             <div slot="header" class="clearfix">
               <div class="card-header">
@@ -231,29 +243,39 @@
                            style="float: right;color: red; padding: 3px 0"></el-button>
               </div>
             </div>
-            <el-form ref="splitChild" :model="child" :rules="rules" size="mini" label-width="80px">
-              <el-form-item label="任务名称" prop="taskName">
+            <el-form ref="splitChild" :model="child" :rules="rules" size="mini">
+              <el-form-item label="任务名称" prop="taskName" label-width="80px">
                 <el-input v-model="child.taskName" style="width: 350px"/>
               </el-form-item>
-              <el-form-item label="执行人" prop="executor">
+              <el-row :gutter="20">
+                <el-col :span="14">
+                  <el-form-item label="起止时间" prop="rangeDate" label-width="80px">
+                    <el-date-picker
+                      v-model="child.rangeDate"
+                      type="daterange"
+                      value-format="yyyy-MM-dd"
+                      style="width: 250px"
+                      range-separator="至"
+                      start-placeholder="开始日期"
+                      end-placeholder="结束日期">
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="10">
+                  <el-form-item label="计划工时(小时)" prop="planHours" label-width="115px">
+                    <el-input-number v-model="child.planHours" :min="1" :max="2000"></el-input-number>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-form-item label="执行人" prop="executor" label-width="80px">
                 <dept-user-tree ref="dutSplit" :userList="userList" style="width: 350px"
                                 @selected="(val)=>selectExecutor(val,'splitForm',index)"/>
               </el-form-item>
-              <el-form-item label="起止时间" prop="rangeDate">
-                <el-date-picker
-                  v-model="child.rangeDate"
-                  type="daterange"
-                  value-format="yyyy-MM-dd"
-                  range-separator="至"
-                  start-placeholder="开始日期"
-                  end-placeholder="结束日期">
-                </el-date-picker>
-              </el-form-item>
-              <el-form-item label="任务附件">
+              <el-form-item label="任务附件" label-width="80px">
                 <file-upload @getFileUrl="(val)=>getChildFileUrl(child,val)"
                              @removeFile="(val)=>removeChildFile(child,val)"></file-upload>
               </el-form-item>
-              <el-form-item label="任务描述" prop="description">
+              <el-form-item label="任务描述" prop="description" label-width="80px">
                 <rich-text-editor ref="crtEditor"
                                   @getHtml="(val)=>child.description=val"></rich-text-editor>
               </el-form-item>
@@ -365,6 +387,9 @@ export default {
         rangeDate: [
           {required: true, message: "起止时间不能为空", trigger: "change"}
         ],
+        planHours: [
+          {required: true, message: "计划工时不能为空", trigger: "blur"}
+        ],
         executor: [
           {required: true, message: "执行人不能为空", trigger: 'change'}
         ]
@@ -428,7 +453,6 @@ export default {
     // 取消按钮
     cancel() {
       this.$refs.dut2.clearText()
-      this.$refs.dut3.clearText()
       this.$refs.rtEditor.clear()
       this.reset()
       this.open = false;
@@ -439,7 +463,7 @@ export default {
         taskName: undefined,
         projectId: undefined,
         executor: undefined,
-        coExecutor: undefined,
+        planHours: undefined,
         rangeDate: [],
         description: undefined
       };
@@ -516,7 +540,6 @@ export default {
       await Promise.all(arr)
       this.$set(this.form, 'rangeDate', [row.beginDate, row.endDate])
       this.$refs.dut2.setCheckedNode(this.form.executor)
-      this.$refs.dut3.setCheckedNode(this.form.coExecutor)
     },
     selectExecutor(val, form, index) {
       if (form === 'splitForm') {
@@ -527,9 +550,6 @@ export default {
         this.$set(this.form, 'executor', val)
       }
     },
-    selectCoExecutor(val) {
-      this.form.coExecutor = val.join();
-    },
     getFileUrl(val) {
       this.form['files'] = this.form.files || []
       this.form.files.push(val)
@@ -645,7 +665,6 @@ export default {
       this.splitOpen = false;
       this.confirmOpen = false;
       this.$refs.dut2.clearText()
-      this.$refs.dut3.clearText()
       let dutSplit = this.$refs.dutSplit || [];
       for (let key in dutSplit) {
         dutSplit[key].clearText()
@@ -726,7 +745,9 @@ export default {
       let child = {
         taskName: undefined,
         executor: undefined,
-        rangeDate: []
+        rangeDate: [],
+        planHours: undefined,
+        description: undefined
       }
       this.splitForm.children.push(child)
     },
@@ -782,6 +803,7 @@ export default {
 
 .split-card {
   width: 49%;
+  padding: 10px;
   margin: 5px;
 }
 

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

@@ -97,7 +97,7 @@
               <el-table-column label="反馈备注">
                 <template slot-scope="item">
                   <div>
-                    <span style="margin: 0" v-html="item.row.description"></span>
+                    <span>{{ item.row.description }}</span>
                     <span v-for="(file,index) in item.row.fileList">
                                 <a :href="file.url" style="color: darkgreen">
                                   <span v-html="file.fileName"></span>
@@ -112,6 +112,17 @@
                   </div>
                 </template>
               </el-table-column>
+              <el-table-column label="反馈详情" width="80px">
+                <template slot-scope="item">
+                  <el-popover
+                    placement="top"
+                    width="600"
+                    trigger="hover">
+                    <div v-html="item.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">{{ scope.row[item.day].value }}</div>
           </el-popover>
@@ -159,9 +170,8 @@
         </el-row>
         <el-row :gutter="20">
           <el-col :span="12">
-            <el-form-item label="进度" prop="value">
+            <el-form-item label="进度(%)" prop="value">
               <el-input-number v-model="form.value" controls-position="left" :min="1" :max="100"></el-input-number>
-              <span>%</span>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -172,8 +182,10 @@
         </el-row>
 
         <el-form-item label="反馈描述" prop="description">
-          <!--          <el-input v-model="form.description" type="textarea" autosize/>-->
-          <rich-text-editor ref="rtEditor" @getHtml="(val)=>form.description=val"></rich-text-editor>
+          <el-input v-model="form.description" type="textarea" autosize/>
+        </el-form-item>
+        <el-form-item label="反馈详情" prop="descriptionDetail">
+          <rich-text-editor ref="rtEditor" @getHtml="(val)=>form.descriptionDetail=val"></rich-text-editor>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -234,12 +246,11 @@ export default {
       return callback();
     };
     let validateDescription = (rule, value, callback) => {
-      let text = value.replace('<p>', '').replace('</p>', '').replace('<br>', '').replace('&nbsp;', '')
-      if (text === '') {
+      if (value === '') {
         return callback(new Error('反馈描述不能为空'));
       }
-      if (text.length < 5) {
-        return callback(new Error('反馈描述字符数不足'));
+      if (value.length < 5 || value.length > 500) {
+        return callback(new Error('反馈描述字符数在5到500之间'));
       }
       return callback();
     };