Selaa lähdekoodia

添加优化需求

qinzhipeng_v@didiglobal.com 4 vuotta sitten
vanhempi
sitoutus
53ec2f1439

+ 93 - 0
src/components/commentsAndChanges/index.vue

@@ -0,0 +1,93 @@
+<template>
+  <el-tabs v-model="tabPosition">
+    <el-tab-pane label="评论" name="first">
+      <ul class="comment-main">
+        <li v-for="(item,index) in comments" :key="index">
+          <span>{{ item.commentInfo.name }}</span>
+          <span class="comment-gmtCreater">{{ item.commentInfo.gmtCreater }}</span><br>
+          <span>{{ item.commentInfo.content }}</span>
+        </li>
+      </ul>
+      <el-input v-model="commentContent" type="textarea" placeholder="请输入评论内容" maxlength="300" show-word-limit :autosize="{ minRows: 3, maxRows: 5}" />
+      <div class="comment-btn">
+        <el-button type="primary" size="small" @click="addComment">发表评论</el-button>
+      </div>
+    </el-tab-pane>
+    <el-tab-pane label="变更记录" name="second">
+      <record :id="commentData.id" ref="record" :name="commentData.type" />
+    </el-tab-pane>
+  </el-tabs>
+</template>
+<!-- 项目、需求、任务下评论 -->
+<script>
+import record from '@/components/commentsAndChanges/record.vue'
+import { commentCreate, commentList } from '@/api/taskIndex'
+export default {
+  components: { record },
+  props: {
+    data: { type: Object, required: true }
+  },
+  data() {
+    return {
+      commentData: {}, // 父组件的props
+      tabPosition: 'first',
+      commentContent: null, // 评论内容
+      comments: [] // 评论列表
+    }
+  },
+  watch: {
+    data: {
+      handler(newV) {
+        console.log(newV, '进来了')
+        this.commentData = newV
+        this.getCommentList()
+      },
+      deep: true
+    }
+  },
+  methods: {
+    async getCommentList() { // 获取评论
+      const res = await commentList({ type: this.commentData.type, joinId: this.commentData.id })
+      if (res.code === 200) {
+        this.comments = res.data
+        this.commentContent = ''
+      }
+    },
+    async addComment() { // 发表评论
+      if (this.commentContent.replace(/\s+/g, '') === '' || this.commentContent === null) { // 评论不能都是空格,不是为空
+        this.$message.warning('评论不能为空')
+        return
+      }
+      const commentInfo = { joinId: this.commentData.id, content: this.commentContent, type: this.commentData.type }
+      const res = await commentCreate({ commentInfo })
+      if (res.code === 200) {
+        this.$message({ message: '评论成功', type: 'success', duration: 1000, offset: 150 })
+        this.getCommentList()
+      } else {
+        this.$message.warning(res.msg)
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+  .comment-main {
+    font-size:14px;
+    color:#333;
+    list-style: none;
+    padding: 15px 0 0;
+    li {
+      margin-bottom: 25px;
+    }
+    .comment-gmtCreater {
+      margin-left:20px;
+      color: #666;
+      font-size:12px
+    }
+  }
+  .comment-btn {
+    text-align: right;
+    margin: 20px 10px;
+  }
+</style>

+ 71 - 0
src/components/commentsAndChanges/record.vue

@@ -0,0 +1,71 @@
+<template>
+  <div>
+    <div v-for="(item,index) in changeRecord" :key="index" class="Layout_space_between sign-record">
+      <span>
+        <span class="operatorName">{{ item.operator }} : </span>
+        <span class="remark">{{ item.remark }}</span>
+      </span>
+      <span class="createTime">{{ item.createTime }}</span>
+    </div>
+  </div>
+</template>
+<!-- 项目、需求、任务下变更记录 -->
+<script>
+import '@/styles/PublicStyle/index.scss'
+import { operationLogTask } from '@/api/taskIndex'
+import { operationLogRequire } from '@/api/requirement.js'
+export default {
+  props: {
+    id: { type: [Number, String], default: null },
+    name: { type: Number, default: null }
+  },
+  data() {
+    return {
+      changeRecord: [] // 变更记录
+    }
+  },
+  created() {
+    this.operationLogTask()
+  },
+  methods: {
+    async operationLogTask() {
+      if (this.name === '任务') {
+        const res = await operationLogTask(this.id)
+        this.changeRecord = res.data
+      } else if (this.name === '需求') {
+        const res = await operationLogRequire(this.id)
+        this.changeRecord = res.data
+      } else if (this.name === 7) { // 7 = 项目
+        const res = await operationLogRequire(this.id)
+        this.changeRecord = res.data
+      }
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.sign-record {
+  margin: 20px 0;
+  font-size:14px;
+  line-height:20px;
+  opacity:1;
+  font-family:PingFangSC-Regular;
+
+.createTime {
+  min-width:150px;
+  color:rgba(68,68,68,1);
+}
+
+.remark {
+  min-width:500px;
+  text-align: left;
+  color:#444444;
+}
+.operatorName {
+  min-width: 60px;
+  color:rgba(51,59,74,1);
+  margin-right: 10px;
+}
+}
+</style>

+ 18 - 1
src/views/projectManage/projectList/projectViewDetails.vue

@@ -120,6 +120,16 @@
             <mile-stone :values-list.sync="project_Milepost" @change="get_list" />
           </div>
         </section>
+        <section class="main-section">
+          <div class="el-main-title">
+            <div class="title-left-icon" />
+            <div class="title-left-name">动态</div>
+          </div>
+          <div class="comments-margin">
+            <comments-and-changes v-if="form_query.id" :data="{type: 7, id: form_query.id}" />
+          </div>
+        </section>
+
       </el-container>
       <!-- 概览 -->
       <!-- 需求 -->
@@ -199,6 +209,7 @@ import {
   mileStoneList,
   projectDelete
 } from '@/api/projectIndex'
+import commentsAndChanges from '@/components/commentsAndChanges/index.vue'
 import searchPeople from '@/components/select/searchPeople'
 import textArea from '@/components/input/textArea'
 import mileStone from './components/mileStone'
@@ -227,7 +238,8 @@ export default {
     tasksList,
     needsList,
     modifyProject,
-    bugTableDialog
+    bugTableDialog,
+    commentsAndChanges
   },
   filters: {
     ellipsis(value, num) {
@@ -308,6 +320,8 @@ export default {
     },
     async changeArea(e) { // area修改
       const projectInfo = _.cloneDeep(this.form_query)
+      projectInfo.priority = this.form_query.priorityStr
+      // projectInfo.bizType = this.form_query.projectTypeStr
       const res = await projectUpdate({ projectInfo, user: this.user })
       if (res.code === 200) {
         this.$message({ message: '修改成功', type: 'success', duration: 1000, offset: 150 })
@@ -469,6 +483,9 @@ export default {
     }
   }
 }
+  .comments-margin {
+    margin: 0 30px;
+  }
 >>>.el-input--small {
   font-size: 14px;
 }

+ 1 - 3
src/views/reportManagement/ReleaseReport/components/releaseDetails.vue

@@ -16,9 +16,7 @@
     </el-header>
     <el-container>
       <el-main class="report-main">
-        <div class="title">
-          <div class="blur-column" />报告内容
-        </div>
+        <div class="title"><div class="blur-column" />报告内容</div>
         <el-row>
           <el-col :span="24" class="task-bot">
             <span class="from-names">测试结果:</span>

+ 47 - 43
src/views/reportManagement/Testing/components/deliverDetails.vue

@@ -21,7 +21,6 @@
     <el-container>
       <el-main class="report-main">
         <div class="title"><div class="blur-column" /> 报告内容</div>
-
         <el-row>
           <el-col :span="12" class="Layout_space_between task-bot">
             <span class="from-name"><span class="test-details">计划提测时间:</span>{{ details.deliverTestPlanTime }}</span>
@@ -100,41 +99,56 @@
       </el-main>
       <el-aside width="400px">
         <el-container>
-          <el-header class="report-mains">
+          <div v-if="details.status === 2 " class="report-mains">
+            <div class="title"><div class="blur-column" /> 打回信息</div>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">原因 : </el-col>
+              <el-col :span="19" class="task-name">{{ details.returnReason }}</el-col>
+            </el-row>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">操作人 : </el-col>
+              <el-col :span="19" class="task-name">{{ details.transactorName || '' }}</el-col>
+            </el-row>
+          </div>
+          <div class="report-mains">
             <div class="title"><div class="blur-column" /> 用户信息</div>
-            <div class="Layout_flex_start task-bot">
-              <div class="title-name">报告人 : </div>
-              <div class="task-name">{{ details.reportorObject ? details.reportorObject.name : '' }}</div>
-            </div>
-            <div class="Layout_flex_start">
-              <div class="title-name task-bot">收件人 : </div>
-              <div class="flex_start">
-                <div v-for="(item, index) in details.sendToObject" :key="index" class="task-name">
-                  {{ item.name }}
-                  <span v-if="index < details.sendToObject.length - 1"> , </span>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">报告人 : </el-col>
+              <el-col :span="19" class="task-name">{{ details.reportorObject ? details.reportorObject.name : '' }}</el-col>
+            </el-row>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">收件人 : </el-col>
+              <el-col :span="19">
+                <div class="flex_start">
+                  <div v-for="(item, index) in details.sendToObject" :key="index" class="task-name">
+                    {{ item.name }}
+                    <span v-if="index < details.sendToObject.length - 1"> , </span>
+                  </div>
                 </div>
-              </div>
-            </div>
-            <div class="Layout_flex_start task-bot">
-              <div class="title-name">抄送人 : </div>
-              <div class="flex_start">
-                <div v-for="(item, index) in details.sendCcObject" :key="index" class="task-name">
-                  {{ item.name }}
-                  <span v-if="index < details.sendCcObject.length - 1"> , </span>
+              </el-col>
+            </el-row>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">抄送人 : </el-col>
+              <el-col :span="19">
+                <div class="flex_start">
+                  <div v-for="(item, index) in details.sendCcObject" :key="index" class="task-name">
+                    {{ item.name }}
+                    <span v-if="index < details.sendCcObject.length - 1"> , </span>
+                  </div>
                 </div>
-              </div>
-            </div>
-          </el-header>
+              </el-col>
+            </el-row>
+          </div>
           <el-main class="report-mains">
             <div class="title"><div class="blur-column" /> 时间</div>
-            <div class="Layout_flex_start task-bot">
-              <div class="title-name">创建时间 : </div>
-              <div class="task-name">{{ details.gmtCreate }}</div>
-            </div>
-            <div class="Layout_flex_start task-bot">
-              <div class="title-name">发送时间 : </div>
-              <div class="task-name">{{ details.reportTime }}</div>
-            </div>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">创建时间 : </el-col>
+              <el-col :span="19" class="task-name">{{ details.gmtCreate }}</el-col>
+            </el-row>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">发送时间 : </el-col>
+              <el-col :span="19" class="task-name">{{ details.reportTime || '' }}</el-col>
+            </el-row>
           </el-main>
           <el-footer class="report-mains">
             <div class="title"><div class="blur-column" /> 关联任务</div>
@@ -375,7 +389,7 @@ export default {
   border-radius:4px;
 }
 .report-mains {
-  min-height: 200px;
+  min-height: 100px;
   padding: 20px 30px;
   margin: 10px 10px 0 0;
   background: #FFF;
@@ -384,13 +398,12 @@ export default {
 .title {
   font-size:16px;
   font-family:PingFangSC-Medium;
-  margin-bottom: 10px;
+  margin-bottom: 15px;
   color:rgba(51,59,74,1);
   opacity:1;
 }
 
 .title-name {
-  width:100px;
   font-size:14px;
   font-family:PingFangSC-Regular;
   line-height:20px;
@@ -434,13 +447,4 @@ export default {
 .test-details {
   color: #666666;
 }
-
-.title {
-  font-size:16px;
-  font-family:PingFangSC-Medium;
-  line-height:35px;
-  margin-bottom: 10px;
-  color:rgba(51,59,74,1);
-  opacity:1;
-}
 </style>

+ 45 - 39
src/views/reportManagement/daily/components/dailyDetails.vue

@@ -22,49 +22,57 @@
       </el-main>
       <el-aside width="400px">
         <el-container>
-          <el-header class="report-mains">
+          <div class="report-mains">
             <div class="title"><div class="blur-column" /> 用户信息</div>
-            <div class="Layout_flex_start task-bot">
-              <div class="title-name">报告人 : </div>
-              <div class="task-name">{{ details.reportorObject ? details.reportorObject.name : '' }}</div>
-            </div>
-            <div class="Layout_flex_start task-bot">
-              <div class="title-name">收件人 : </div>
-              <div class="flex_start">
-                <div v-for="(item, index) in details.sendToObject" :key="index" class="task-name">
-                  {{ item.name }}
-                  <span v-if="index < details.sendToObject.length - 1"> , </span>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">报告人 : </el-col>
+              <el-col :span="19" class="task-name">{{ details.reportorObject ? details.reportorObject.name : '' }}</el-col>
+            </el-row>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">收件人 : </el-col>
+              <el-col :span="19">
+                <div class="flex_start">
+                  <div v-for="(item, index) in details.sendToObject" :key="index" class="task-name">
+                    {{ item.name }}
+                    <span v-if="index < details.sendToObject.length - 1"> , </span>
+                  </div>
                 </div>
-              </div>
-            </div>
-            <div class="Layout_flex_start task-bot">
-              <div class="title-name">抄送人 : </div>
-              <div class="flex_start">
-                <div v-for="(item, index) in details.sendCcObject" :key="index" class="task-name">
-                  {{ item.name }}
-                  <span v-if="index < details.sendCcObject.length - 1"> , </span>
+              </el-col>
+            </el-row>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">抄送人 : </el-col>
+              <el-col :span="19">
+                <div class="flex_start">
+                  <div v-for="(item, index) in details.sendCcObject" :key="index" class="task-name">
+                    {{ item.name }}
+                    <span v-if="index < details.sendCcObject.length - 1"> , </span>
+                  </div>
                 </div>
-              </div>
-            </div>
-          </el-header>
+              </el-col>
+            </el-row>
+          </div>
           <el-main class="report-mains">
             <div class="title"><div class="blur-column" /> 时间</div>
-            <div class="Layout_flex_start task-bot">
-              <div class="title-name">创建时间 : </div>
-              <div class="task-name">{{ details.gmtCreate }}</div>
-            </div>
-            <div class="Layout_flex_start task-bot">
-              <div class="title-name">发送时间 : </div>
-              <div class="task-name">{{ details.reportTime }}</div>
-            </div>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">创建时间 : </el-col>
+              <el-col :span="19" class="task-name">{{ details.gmtCreate }}</el-col>
+            </el-row>
+            <el-row class="task-bot">
+              <el-col :span="5" class="title-name">发送时间 : </el-col>
+              <el-col :span="19" class="task-name">{{ details.reportTime }}</el-col>
+            </el-row>
           </el-main>
-          <el-footer class="report-mains">
+          <el-footer class="report-mains" style="height: auto;">
             <div class="title"><div class="blur-column" /> 关联任务</div>
-            <div v-for="(item, index) in details.taskDetailList" :key="index" class="Layout_flex_start task-bot">
-              <div class="task-id">{{ item.taskId }}</div>
-              <el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
-                <div class="task-name didi-hover" @click="goTaskDetails(item.id)">{{ item.name.slice(0,12) + '...' }}</div>
-              </el-tooltip>
+            <div v-for="(item, index) in details.taskDetailList" :key="index">
+              <el-row class="task-bot">
+                <el-col :span="8" class="title-name">{{ item.taskId }}</el-col>
+                <el-col :span="16" class="task-name">
+                  <el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
+                    <div class="task-name didi-hover" @click="goTaskDetails(item.id)">{{ item.name.slice(0,16) + '...' }}</div>
+                  </el-tooltip>
+                </el-col>
+              </el-row>
             </div>
           </el-footer>
         </el-container>
@@ -205,7 +213,7 @@ export default {
   border-radius:4px;
 }
 .report-mains {
-  min-height: 200px;
+  min-height: 100px;
   padding: 20px 30PX;
   margin: 10px 10px 0 0;
   background: #FFF;
@@ -220,7 +228,6 @@ export default {
 }
 
 .title-name {
-  width:100px;
   font-size:14px;
   font-family:PingFangSC-Regular;
   line-height:20px;
@@ -240,7 +247,6 @@ export default {
 .task-name {
   font-size:14px;
   font-family:MicrosoftYaHei;
-  line-height:17px;
   color:rgba(51,51,51,1);
   opacity:1;
 }