wenbobowen 4 tahun lalu
induk
melakukan
829df5a6f5
29 mengubah file dengan 726 tambahan dan 516 penghapusan
  1. 2 1
      .prettierrc
  2. 9 5
      src/components/select/searchPeople.vue
  3. 3 2
      src/views/monthlyReport/childrenPage/editReport/components/Cascader.vue
  4. 6 10
      src/views/monthlyReport/childrenPage/editReport/components/CascaderInfo.vue
  5. 3 2
      src/views/monthlyReport/childrenPage/editReport/components/CascaderSingle.vue
  6. 265 157
      src/views/monthlyReport/childrenPage/editReport/components/MrTable/index.vue
  7. 1 3
      src/views/monthlyReport/childrenPage/editReport/components/MultiplePeopleInfo.vue
  8. 5 3
      src/views/monthlyReport/childrenPage/editReport/components/OverallOverviewOfTheClient/box.vue
  9. 13 6
      src/views/monthlyReport/childrenPage/editReport/components/OverallOverviewOfTheClient/index.vue
  10. 11 17
      src/views/monthlyReport/childrenPage/editReport/components/OverallOverviewOfTheClient/onlineQuestion.vue
  11. 3 17
      src/views/monthlyReport/childrenPage/editReport/components/OverallOverviewOfTheClient/qualityProcess.vue
  12. 13 33
      src/views/monthlyReport/childrenPage/editReport/components/OverallOverviewOfTheServer.vue
  13. 12 5
      src/views/monthlyReport/childrenPage/editReport/components/PushAndBanck.vue
  14. 0 1
      src/views/monthlyReport/childrenPage/editReport/components/Refresh.vue
  15. 3 5
      src/views/monthlyReport/childrenPage/editReport/components/RichText.vue
  16. 1 1
      src/views/monthlyReport/childrenPage/editReport/components/SubTitle.vue
  17. 1 1
      src/views/monthlyReport/childrenPage/editReport/components/TextInfo.vue
  18. 8 4
      src/views/monthlyReport/childrenPage/editReport/components/VarText.vue
  19. 38 58
      src/views/monthlyReport/childrenPage/editReport/components/anchor.vue
  20. 11 17
      src/views/monthlyReport/childrenPage/editReport/components/content.vue
  21. 110 37
      src/views/monthlyReport/childrenPage/editReport/components/core.vue
  22. 6 7
      src/views/monthlyReport/childrenPage/editReport/components/fixedText.vue
  23. 52 49
      src/views/monthlyReport/childrenPage/editReport/components/markingIssues.vue
  24. 0 1
      src/views/monthlyReport/childrenPage/editReport/components/menu.vue
  25. 132 58
      src/views/monthlyReport/childrenPage/editReport/index.vue
  26. 1 1
      src/views/monthlyReport/index.vue
  27. 13 12
      src/views/projectManage/bugList/details/index.vue
  28. 1 0
      src/views/projectManage/requirement/list/create.vue
  29. 3 3
      src/views/quality/components/drawerAll.vue

+ 2 - 1
.prettierrc

@@ -2,8 +2,9 @@
   "eslintIntegration": true,
   "stylelintIntegration": true,
   "tabWidth": 2,
-  "singleQuote": true,
+  "singleQuote": false,
   "semi": false,
+  "printWidth": "never",
   "trailingComma": "none",
   "arrowParens": "always"
 }

+ 9 - 5
src/components/select/searchPeople.vue

@@ -28,7 +28,9 @@
   </el-select>
 </template>
 <script>
-import { memberQueryMemberInfoByIDAPorName } from '@/api/projectIndex'
+// import { memberQueryMemberInfoByIDAPorName } from '@/api/projectIndex'
+import { getListPerson } from '@/api/onlineproblem'
+
 export default {
   props: {
     value: {
@@ -103,15 +105,17 @@ export default {
     },
     initMore(arr) { // 当多人时候,对数组每一个人员进行搜索
       if (this.multiple) {
-        for (const item of arr) {
-          this.getMember(item, true)
-        }
+        // for (const item of arr) {
+        //   this.getMember(item, true)
+        // }
+        this.getMember(arr, true)
       } else {
         this.getMember(arr, true)
       }
     },
     async getMember(query, initMore = false) {
-      const res = await memberQueryMemberInfoByIDAPorName({ memberIDAP: query })
+      // const res = await memberQueryMemberInfoByIDAPorName({ memberIDAP: query })
+      const res = await getListPerson({ memberIDAPs: typeof query === 'string' ? [query] : query })
       if (res.data === null) {
         return
       }

+ 3 - 2
src/views/monthlyReport/childrenPage/editReport/components/Cascader.vue

@@ -8,10 +8,10 @@
     clearable
     collapse-tags
     style="width: 100%"
-    reserve-keyword
     placeholder="请选择"
     :remote-method="remoteMethod"
-    @change="changeCascader">
+    @change="changeCascader"
+  >
     <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
       {{ item.deptPath }}
     </el-option>
@@ -107,6 +107,7 @@ export default {
     },
     changeCascader(value) {
       this.$emit('input', value)
+      this.$emit('change', value)
     }
   }
 }

+ 6 - 10
src/views/monthlyReport/childrenPage/editReport/components/CascaderInfo.vue

@@ -1,21 +1,17 @@
 <template>
   <div v-if="teamData && teamData.length">
-    <span
-      v-for="(item, index) in itemName"
-      :key="index"
-      style="margin-right: 10px"
-      ><span>
+    <span v-for="(item, index) in itemName" :key="index" style="margin-right: 10px">
+      <span>
         <el-tooltip
           class="item"
           effect="dark"
           :content="item.deptPath"
-          placement="top"
-        >
+          placement="top">
           <span>{{ item.label }}</span>
         </el-tooltip>
         <span>{{ !(index >= itemName.length - 1) ? ',' : '' }}</span>
-      </span></span
-    >
+      </span>
+    </span>
   </div>
 </template>
 
@@ -101,4 +97,4 @@ export default {
 }
 </script>
 
-<style scoped lang="less"></style>
+<style scoped lang='less'></style>

+ 3 - 2
src/views/monthlyReport/childrenPage/editReport/components/CascaderSingle.vue

@@ -3,7 +3,8 @@
     v-model="selectValue"
     :options="selectEnum"
     clearable
-    @change="changeCascader" />
+    @change="changeCascader"
+  />
 </template>
 
 <script>
@@ -96,4 +97,4 @@ export default {
 }
 </script>
 
-<style scoped lang="less"></style>
+<style scoped lang='less'></style>

+ 265 - 157
src/views/monthlyReport/childrenPage/editReport/components/MrTable/index.vue

@@ -19,8 +19,6 @@
         size="small"
         show-overflow-tooltip="true"
       >
-        <!-- <el-table-column v-if="index === 0 && tabsActive.indexOf('本月重点问题') > -1
-        && pageType !== 'edit' ? 'expand' : ''" label="展开" type="expand"> -->
         <el-table-column
           v-for="(item, index) in setColumns(columns)"
           :key="item.headerKey"
@@ -42,19 +40,18 @@
             </div>
             <!--    操作列    -->
             <div v-else-if="item.name === '操作'">
+              <!-- 分析反馈 -->
               <div v-if="isExpand">
                 <el-button
                   v-if="isShowButton(scope.row, item)"
                   type="text"
                   @click.stop="btnFun({ value: '分析反馈' }, scope)"
-                  >分析反馈
+                >
+                  分析反馈
                 </el-button>
               </div>
               <span v-else>
-                <span
-                  v-for="(btnItem, btnIndex) in item.defaultValue"
-                  :key="btnIndex"
-                >
+                <span v-for="(btnItem, btnIndex) in item.defaultValue" :key="btnIndex">
                   <!--另存为-->
                   <span v-if="btnItem.value === '另存为' && isShowButton(scope.row, item)" style="margin-right: 10px">
                     <el-dropdown @command="(command) => saveAsRow(command, scope.row, item)">
@@ -63,107 +60,180 @@
                         effect="dark"
                         content="将线上问题另存到其他业务线"
                         placement="top"
-                        >
-                        <el-button type="text">
-                        另存
-                      </el-button>
+                      >
+                        <el-button type="text">另存</el-button>
                       </el-tooltip>
                       <el-dropdown-menu v-if="subReportInfo" slot="dropdown">
-                        <el-dropdown-item v-for="subItem in subReportInfo.filter(subElm => subReportInfoFilter(subElm) )" :key="subItem.id" :command="subItem">
+                        <el-dropdown-item
+                          v-for="subItem in subReportInfo.filter(subElm => subReportInfoFilter(subElm) )"
+                          :key="subItem.id"
+                          :command="subItem">
                           {{ subItem.reportName }}
                         </el-dropdown-item>
                       </el-dropdown-menu>
                     </el-dropdown>
                   </span>
-    <!--链接-->
-        <span v-else-if="btnItem.value === '链接' && isShowButton(scope.row, item)" @click.stop>
-                    <el-popover
-                      v-if="scope.row.operationTarget"
-                      placement="bottom-start"
-                      trigger="hover"
-                    >
+                  <!--链接-->
+                  <span v-else-if="btnItem.value === '链接' && isShowButton(scope.row, item)" @click.stop>
+                    <el-popover v-if="scope.row.operationTarget" placement="bottom-start" trigger="hover">
                       <el-button-group>
-                        <el-button size="small" type="info" plain @click="goto(scope.row.operationTarget)">访问链接</el-button>
+                        <el-button
+                          size="small"
+                          type="info"
+                          plain
+                          @click="goto(scope.row.operationTarget)"
+                        >
+                          访问链接
+                        </el-button>
                         <el-button size="small" type="info" plain @click="btnFun(btnItem, scope)">编辑</el-button>
-                        <el-button size="small" type="info" plain @click="scope.row.operationTarget = ''">取消链接</el-button>
+                        <el-button
+                          size="small"
+                          type="info"
+                          plain
+                          @click="scope.row.operationTarget = ''"
+                        >
+                          取消链接
+                        </el-button>
                       </el-button-group>
-                    <el-button slot="reference" style="margin-right: 10px" type="text">链接</el-button>
+                      <el-button slot="reference" style="margin-right: 10px" type="text">链接</el-button>
                     </el-popover>
                     <el-button
                       v-else
                       style="margin-right: 10px"
                       type="text"
                       @click.stop="btnFun(btnItem, scope)"
-                      >链接</el-button>
+                    >
+                      链接
+                    </el-button>
                   </span>
-    <el-button v-else-if="isShowButton(scope.row, item)" style="margin-right: 10px" type="text" @click.stop="btnFun(btnItem, scope)">{{ btnItem.value }}</el-button>
-    </span>
-    </span>
-  </div>
-  <div v-else class="edit-wrapper" :style="{ cursor: pageDate && pageDate.status < 20 ? 'pointer' : 'auto' }">
-    <!--  <div v-if="editKeys.indexOf(`${scope.row.rowKey}_${index}`) > -1">  -->
-    <div v-if="editKeys.indexOf(domKey) > -1 && !item.defaultValue">
-      <div v-if="item.displayType === 'Select'">
-        <div v-if="item.selectType && item.selectType === 'Time'">
-          <el-date-picker v-model="scope.row[item.headerKey]" type="date" style="width: 90%" value-format="yyyy-MM-dd" size="mini" placeholder="选择日期" />
-        </div>
-        <div v-else-if="item.selectType && item.selectType === 'SinglePeople'">
-          <searchPeople :value.sync="scope.row[item.headerKey]" />
-        </div>
-        <div v-else-if="item.selectType && item.selectType === 'MultiplePeople'">
-          <searchPeople :value.sync="scope.row[item.headerKey]" :multiple="true" />
-        </div>
-        <div v-else-if="item.selectType && item.selectType === 'people'">
-          <searchPeople :value.sync="scope.row[item.headerKey]" :multiple="true" />
-        </div>
-        <el-select v-else v-model="scope.row[item.headerKey]" size="mini" placeholder="请选择" style="width: 80%">
-          <el-option v-for="optionItem in item.selectEnum" :key="optionItem" :label="optionItem" :value="optionItem">{{ optionItem }}
-          </el-option>
-        </el-select>
-      </div>
-      <el-input v-else-if="item.displayType === 'Texterea'" v-model="scope.row[item.headerKey]" type="textarea" placeholder="请输入" :maxlength="item.name.search(/天数/) > -1 ? 10 : ''" :autosize="{ minRows: item.name.search(/天数/) > -1 ? 1 : 2, maxRows: 30 }" show-word-limit />
-      <div v-else-if="item.displayType === 'CascaderSingle'">
-        <CascaderSingle v-model="scope.row[item.headerKey]" />
-      </div>
-      <div v-else-if="item.displayType === 'Cascader'">
-        <Cascader v-model="scope.row[item.headerKey]" />
-      </div>
-      <div v-else-if="item.defaultValue === 'Select'" />
-      <el-input v-else v-model="scope.row[item.headerKey]" size="mini" maxlength="100" show-word-limit placeholder="请输入" />
-    </div>
-    <span v-else-if="item.displayType === 'Text'">{{ item.defaultValue[0].value }}</span>
-    <!--  <div v-else class="edit-cell" @click.stop="editLine(scope.row, index)">  -->
-    <div v-else class="edit-cell" @click.stop="editLine(scope.row, index)">
-      <div v-if="item.displayType === 'Cascader'">
-        <CascaderInfo :team-data="scope.row[item.headerKey]" />
-      </div>
-      <div v-else-if="item.displayType === 'CascaderSingle'">
-        <CascaderSingleInfo :team-data="scope.row[item.headerKey]" />
-      </div>
-      <div v-else-if="item.displayType === 'Select'">
-        <!-- 单个人员选择 -->
-        <div v-if="item.selectType && item.selectType === 'SinglePeople'">
-          <MultiplePeopleInfo :team-data="scope.row[item.headerKey]" />
-        </div>
-        <!-- 多个人员选择 -->
-        <div v-else-if=" item.selectType && item.selectType === 'MultiplePeople'">
-          <!-- <searchPeople :value.sync="scope.row[item.headerKey]"
-                  :multiple="true" disabled />-->
-          <MultiplePeopleInfo :team-data="scope.row[item.headerKey]" />
-        </div>
-        <!-- 多个人员选择 -->
-        <div v-else-if="item.selectType && item.selectType === 'people'">
-          <MultiplePeopleInfo :team-data="scope.row[item.headerKey]" />
-        </div>
-        <div v-else>
-          {{ scope.row[item.headerKey] }}
-        </div>
-      </div>
-      <div v-else-if="item.displayType === 'Texterea'" :style="{cursor: item.name === '问题' && scope.row.operationTarget ? 'pointer' : 'auto'}" @click.stop="item.name === '问题' && pageType.search(/edit/) < 0 && goto(scope.row.operationTarget) || editLine(scope.row, index)">
-        <TextInfo :text-align="item.name" :text="scope.row[item.headerKey]" />
-      </div>
-      <div v-else>
-        <span v-html="scope.row[item.headerKey]" />
+                  <el-button
+                    v-else-if="isShowButton(scope.row, item)"
+                    style="margin-right: 10px"
+                    type="text"
+                    @click.stop="btnFun(btnItem, scope)"
+                  >
+                    {{ btnItem.value }}
+                  </el-button>
+                </span>
+              </span>
+            </div>
+            <!-- 其他操作区域 -->
+            <div v-else class="edit-wrapper" :style="{ cursor: pageDate && pageDate.status < 20 ? 'pointer' : 'auto' }">
+              <!-- 编辑区域 -->
+              <div v-if="editKeys.indexOf(domKey) > -1 && !item.defaultValue">
+                <div v-if="item.displayType === 'Select'">
+                  <!-- 时间 -->
+                  <div v-if="item.selectType && item.selectType === 'Time'">
+                    <el-date-picker
+                      v-model="scope.row[item.headerKey]"
+                      type="date"
+                      style="width: 90%"
+                      value-format="yyyy-MM-dd"
+                      size="mini"
+                      placeholder="选择日期"
+                    />
+                  </div>
+                  <!-- 单选人员 -->
+                  <div v-else-if="item.selectType && item.selectType === 'SinglePeople'">
+                    <searchPeople :value.sync="scope.row[item.headerKey]" />
+                  </div>
+                  <!-- 多选人员 -->
+                  <div v-else-if="item.selectType && item.selectType === 'MultiplePeople'">
+                    <searchPeople
+:ref="`${scope.row.rowKey}_9867`"
+:value.sync="scope.row[item.headerKey]"
+                                  :multiple="true" />
+                  </div>
+                  <!-- 多选人员 -->
+                  <div v-else-if="item.selectType && item.selectType === 'people'">
+                    <searchPeople :value.sync="scope.row[item.headerKey]" :multiple="true" />
+                  </div>
+                  <!-- 下拉选择 -->
+                  <el-select
+                    v-else
+                    v-model="scope.row[item.headerKey]"
+                    size="mini"
+                    placeholder="请选择"
+                    style="width: 80%"
+                  >
+                    <el-option
+                      v-for="optionItem in item.selectEnum"
+                      :key="optionItem"
+                      :label="optionItem"
+                      :value="optionItem">{{ optionItem }}
+                    </el-option>
+                  </el-select>
+                </div>
+                <!-- 文本域 -->
+                <el-input
+                  v-else-if="item.displayType === 'Texterea'"
+                  v-model="scope.row[item.headerKey]"
+                  type="textarea"
+                  placeholder="请输入"
+                  :maxlength="item.name.search(/天数/) > -1 ? 10 : ''"
+                  :autosize="{ minRows: item.name.search(/天数/) > -1 ? 1 : 2, maxRows: 30 }"
+                  show-word-limit
+                />
+                <!-- 团队单选 -->
+                <div v-else-if="item.displayType === 'CascaderSingle'">
+                  <CascaderSingle v-model="scope.row[item.headerKey]" />
+                </div>
+                <!-- 团队多选 -->
+                <div v-else-if="item.displayType === 'Cascader'">
+                  <Cascader v-model="scope.row[item.headerKey]" @change="(value) => cascaderChange(value, scope)" />
+                </div>
+                <!-- 下拉选择 -->
+                <div v-else-if="item.defaultValue === 'Select'" />
+                <!-- 默认输入框 -->
+                <el-input
+                  v-else
+                  v-model="scope.row[item.headerKey]"
+                  size="mini"
+                  maxlength="100"
+                  show-word-limit
+                  placeholder="请输入"
+                />
+              </div>
+              <!-- 文本展示 -->
+              <span v-else-if="item.displayType === 'Text'">{{ item.defaultValue[0].value }}</span>
+              <!--  <div v-else class="edit-cell" @click.stop="editLine(scope.row, index)">  -->
+              <!-- 文本展示 -->
+              <div v-else class="edit-cell" @click.stop="editLine(scope.row, index)">
+                <div v-if="item.displayType === 'Cascader'">
+                  <CascaderInfo :team-data="scope.row[item.headerKey]" />
+                </div>
+                <div v-else-if="item.displayType === 'CascaderSingle'">
+                  <CascaderSingleInfo :team-data="scope.row[item.headerKey]" />
+                </div>
+                <div v-else-if="item.displayType === 'Select'">
+                  <!-- 单个人员选择 -->
+                  <div v-if="item.selectType && item.selectType === 'SinglePeople'">
+                    <MultiplePeopleInfo :team-data="scope.row[item.headerKey]" />
+                  </div>
+                  <!-- 多个人员选择 -->
+                  <div v-else-if=" item.selectType && item.selectType === 'MultiplePeople'">
+                    <MultiplePeopleInfo :team-data="scope.row[item.headerKey]" />
+                  </div>
+                  <!-- 多个人员选择 -->
+                  <div v-else-if="item.selectType && item.selectType === 'people'">
+                    <MultiplePeopleInfo :team-data="scope.row[item.headerKey]" />
+                  </div>
+                  <div v-else>
+                    {{ scope.row[item.headerKey] }}
+                  </div>
+                </div>
+                <div
+                  v-else-if="item.displayType === 'Texterea'"
+                  :style="{
+                    cursor: item.name === '问题' && scope.row.operationTarget ? 'pointer' : 'auto',
+                    color: item.name === '问题' && scope.row.operationTarget ? '#1890ff':'#666'
+                  }"
+                  @click.stop="item.name === '问题' && pageType.search(/edit/) < 0 && goto(scope.row.operationTarget) || editLine(scope.row, index)"
+                >
+                  <TextInfo :text-align="item.name" :text="scope.row[item.headerKey]" />
+                </div>
+                <div v-else>
+                 <span v-html="scope.row[item.headerKey]" />
                 </div>
               </div>
             </div>
@@ -172,19 +242,19 @@
       </el-table>
     </span>
 
-        <div class="plus-table-data" :style="{ marginBottom: plusTableDataBottom }" @click.stop>
-          <el-button v-if="pageDate && pageDate.status < 20" type="text" @click.stop="addTableData">
-            <svg-icon icon-class="data-plus" class="icon" />
-            新增
-          </el-button>
-        </div>
-        <span @click.stop>
+    <div class="plus-table-data" :style="{ marginBottom: plusTableDataBottom }" @click.stop>
+      <el-button v-if="pageDate && pageDate.status < 20" type="text" @click.stop="addTableData">
+        <svg-icon icon-class="data-plus" class="icon" />
+        新增
+      </el-button>
+    </div>
+    <span @click.stop>
       <slot name="fixedText" />
       <markingIssues ref="markingIssues" />
       <Analysis ref="Analysis" @upData="upDataAnalysis" />
       <LinkEdit ref="LinkEdit" @change="linkEditChange" />
     </span>
-      </div>
+  </div>
 </template>
 
 <script>
@@ -201,7 +271,7 @@ import markingIssues from '../markingIssues'
 import CascaderSingle from '../CascaderSingle'
 import CascaderSingleInfo from '../CascaderSingleInfo'
 import searchPeople from '@/components/select/searchPeople' // 人员select
-import { updateAnalyticFeedback } from '@/api/qualityMonthlyReport/edit'
+import { updateAnalyticFeedback, getDeptCharge } from '@/api/qualityMonthlyReport/edit'
 import { reportDataBack } from '@/store/modules/monthlyReport/edit/utils.js'
 // import { getDeptByKeyWord } from '@/api/qualityMonthlyReport'
 
@@ -312,7 +382,8 @@ export default {
     }, 3000)
   },
   methods: {
-    isEdit() {},
+    isEdit() {
+    },
     setMinWidth(item) {
       let width = 80
       if (item.name === '操作') {
@@ -320,14 +391,11 @@ export default {
           width = item.defaultValue.length * (item.defaultValue.length > 2 ? 20 : 30)
         }
         if (this.isExpand) {
-          width = 90
+          width = 50
         }
       }
       if (item.name === '定级') {
         width = 70
-        if (this.$route.query.pageType.search(/read/) > -1) {
-          width = 55
-        }
       }
 
       if (item.name === '原因') {
@@ -337,7 +405,32 @@ export default {
       if (item.name === '影响') {
         width = 100
       }
+      if (item.name.search(/团队/) > -1) {
+        width = 50
+      }
+      if (item.name.search(/问题/) > -1 && ((this.tabsActive.search(/本月重点问题/) > -1 &&
+        this.pageType === 'readAll') ||
+        (this.pageType === 'read' && this.title === '本月重点问题'))) {
+        width = 300
+      }
 
+      if (this.pageType.search(/read/) > -1) {
+        if (item.name.search(/标签|影响/) > -1) {
+          width = 150
+        }
+        if (item.name.search(/定级|天数|类型/) > -1) {
+          width = 35
+        }
+        if (item.name.search(/原因|描述/) > -1) {
+          width = 250
+        }
+        if (item.name.search(/改进项/) > -1) {
+          width = 200
+        }
+        if (item.name.search(/责任人|负责人|模块|团队|是否/) > -1) {
+          width = 40
+        }
+      }
       return `${width}px`
     },
     isFixed(item, index, columns) {
@@ -410,8 +503,23 @@ export default {
       })
       this.editLine()
     },
-    cascaderChange(value, headerKey, row) {
-      console.log(value, headerKey, row)
+    // 监听团队数据变化,动态改变问题负责人名称
+    async cascaderChange(value, scope) {
+      if (this.title === '本月重点问题') {
+        // console.log({ value, scope, columns: this.columns, title: this.title })
+        const peopleHeaderKey = this.columns.filter(elm => elm.name === '责任人')[0].headerKey
+        const resKey = `${scope.row.rowKey}_9867`
+        // console.log(this.$refs[resKey][0], resKey)
+        if (value.length) {
+          this.$refs[resKey][0].firstGetArr = true
+          const res = await getDeptCharge({
+            deptCode: value
+          })
+          scope.row[peopleHeaderKey] = Array.from(new Set(res.data.map(elm => elm.manageName)))
+        } else {
+          scope.row[peopleHeaderKey] = []
+        }
+      }
     },
     // 添加插入
     setColumns(columns) {
@@ -591,73 +699,73 @@ export default {
 }
 </script>
 
-<style scoped lang="less">
-  .edit-wrapper {
-    .edit-cell {
-      min-height: 23px;
-      width: 100%;
-    }
+<style scoped lang='less'>
+.edit-wrapper {
+  .edit-cell {
+    min-height: 23px;
+    width: 100%;
   }
+}
 
-  .plus-table-data {
-    margin-top: 2px;
-  }
+.plus-table-data {
+  margin-top: 2px;
+}
+
+/deep/ .el-table__expand-column {
+  border-right: 0;
 
-  /deep/ .el-table__expand-column {
-    border-right: 0;
+  .el-icon-arrow-right:before {
+    // 这是展开图标
+    border: 1px solid rgba(0, 0, 0, 0.14901960784313725);
+  }
+}
 
+/deep/ .el-table__expand-column .cell {
+  .el-table__expand-icon {
     .el-icon-arrow-right:before {
       // 这是展开图标
-      border: 1px solid rgba(0, 0, 0, 0.14901960784313725);
+      content: '\e6d9';
+      //content: "\e6d8";
     }
   }
 
-  /deep/ .el-table__expand-column .cell {
-    .el-table__expand-icon {
-      .el-icon-arrow-right:before {
-        // 这是展开图标
-        content: '\e6d9';
-        //content: "\e6d8";
-      }
-    }
+  .el-table__expand-icon--expanded {
+    // 这是点击后的旋转角度
+    //transform: rotate(180deg);
+    transform: rotate(0deg);
 
-    .el-table__expand-icon--expanded {
-      // 这是点击后的旋转角度
-      //transform: rotate(180deg);
-      transform: rotate(0deg);
-
-      .el-icon-arrow-right:before {
-        // 这是展开图标
-        //content: "\e6d9";
-        content: '\e6d8' !important;
-      }
+    .el-icon-arrow-right:before {
+      // 这是展开图标
+      //content: "\e6d9";
+      content: '\e6d8' !important;
     }
   }
+}
 
-  /deep/ .svg-icon {
-    width: 1em;
-    height: 1em;
-  }
+/deep/ .svg-icon {
+  width: 1em;
+  height: 1em;
+}
 
-  /deep/ .el-table__expanded-cell {
-    padding-bottom: 0;
-    padding-left: 60px;
-  }
+/deep/ .el-table__expanded-cell {
+  padding-bottom: 0;
+  padding-left: 60px;
+}
 
-  /deep/ .el-button {
-    font-weight: 400;
-  }
+/deep/ .el-button {
+  font-weight: 400;
+}
 
-  /deep/ .red {
-    color: red;
-  }
+/deep/ .red {
+  color: red;
+}
 
-  /deep/ .green {
-    color: green;
-  }
+/deep/ .green {
+  color: green;
+}
 
-  /deep/ .yellow {
-    color: yellow;
-  }
+/deep/ .yellow {
+  color: yellow;
+}
 
 </style>

+ 1 - 3
src/views/monthlyReport/childrenPage/editReport/components/MultiplePeopleInfo.vue

@@ -4,9 +4,7 @@
       v-for="(item, index) in userName"
       :key="index"
       style="margin-right: 10px"
-      >{{ item
-      }}<span>{{ !(index >= userName.length - 1) ? ',' : '' }}</span></span
-    >
+    >{{ item }}<span>{{ !(index >= userName.length - 1) ? ',' : '' }}</span></span>
   </div>
 </template>
 

+ 5 - 3
src/views/monthlyReport/childrenPage/editReport/components/OverallOverviewOfTheClient/box.vue

@@ -45,7 +45,7 @@ export default {
 }
 </script>
 
-<style scoped lang="less">
+<style scoped lang='less'>
 .report-title {
   position: relative;
   padding-bottom: 10px;
@@ -81,11 +81,13 @@ export default {
 /deep/ .el-tabs__nav-wrap::after {
   display: none;
 }
-/deep/.el-tabs__item {
+
+/deep/ .el-tabs__item {
   padding: 0 5px;
   font-weight: 400;
 }
-/deep/.el-card__body{
+
+/deep/ .el-card__body {
   padding: 10px;
 }
 

+ 13 - 6
src/views/monthlyReport/childrenPage/editReport/components/OverallOverviewOfTheClient/index.vue

@@ -1,6 +1,5 @@
 <template>
   <div>
-    <!--<headTitle style="margin-top: 40px; margin-bottom: 10px" :title="title" />-->
     <div class="OverallOverviewOfTheClient">
       <onlineQuestion />
       <qualityProcess />
@@ -8,7 +7,6 @@
   </div>
 </template>
 <script>
-// import headTitle from '@/components/headTitle'
 import onlineQuestion from './onlineQuestion'
 import qualityProcess from './qualityProcess'
 
@@ -38,24 +36,29 @@ export default {
   }
 }
 </script>
-<style lang="less" scoped>
+<style lang='less' scoped>
 .OverallOverviewOfTheClient {
-  padding-top:20px;
+  padding-top: 20px;
   display: flex;
+
   > * {
     flex: 1;
+
     &:nth-child(1) {
       margin-right: 5px;
     }
+
     &:nth-child(2) {
       margin-left: 5px;
     }
   }
+
   .report-title {
     position: relative;
     padding-bottom: 20px;
     line-height: 20px;
     color: #333;
+
     &::before {
       position: absolute;
       bottom: 0;
@@ -64,10 +67,12 @@ export default {
       width: calc(100% + 40px);
       border-bottom: 1px solid #e2e2e2;
     }
+
     .report-title-text {
       position: relative;
       top: -5px;
     }
+
     .report-icon-title {
       color: #333333;
       font-size: 30px;
@@ -75,10 +80,12 @@ export default {
     }
   }
 }
-/deep/.el-tabs__active-bar {
+
+/deep/ .el-tabs__active-bar {
   display: none;
 }
-/deep/.el-tabs__nav-wrap::after {
+
+/deep/ .el-tabs__nav-wrap::after {
   display: none;
 }
 </style>

+ 11 - 17
src/views/monthlyReport/childrenPage/editReport/components/OverallOverviewOfTheClient/onlineQuestion.vue

@@ -12,31 +12,25 @@
             class="pir"
             style="width: 100%; height: 160px"
           />
-
         </div>
         <div class="detail-wrapper">
           <div v-if="tabData && pieData.length">
-          <div style="margin-bottom: 10px;" v-html="tabData.title.replace(/线上问题/,'<strong>线上问题</strong>' ).replace(/为(\d+)/g, `为<strong>$1</strong>`)" />
-          <div
-            v-for="item in tabData.onlineProblemCopywriters.filter((elm) =>
-              reportBizName ? elm.reportBizName === reportBizName : true
-            )"
-            :key="item.reportBizName"
-          >
-            <div v-if="item.problemDetails.length" style="margin-top: 5px"><span class="fontWeight">{{ item.reportBizName }}</span>:<span v-html="item.priorityStr.replace(/\ (\d+)/g, `为<strong>$1</strong>`)" /></div>
-            <div v-for="(pitem, pIndex) in item.problemDetails" :key="pIndex">
-              <div class="fontWeight" style="color: #ED8F41;margin-top: 10px;">{{ pitem.subClientType }}</div>
-              <div v-for="(dItem, dIndex) in pitem.details" :key="dIndex" style="padding-left: 10px">
-                <div style="margin-top: 5px;"><span>{{ dIndex + 1 }}、</span
-                  ><span>{{ dItem.priority }}问题:</span
-                  >{{ dItem.problem }}
+            <div style="margin-bottom: 10px;" v-html="tabData.title.replace(/线上问题/,'<strong>线上问题</strong>' ).replace(/为(\d+)/g, `为<strong>$1</strong>`)" />
+            <div
+              v-for="item in tabData.onlineProblemCopywriters.filter((elm) => reportBizName ? elm.reportBizName === reportBizName : true )"
+              :key="item.reportBizName"
+            >
+              <div v-if="item.problemDetails.length" style="margin-top: 5px"><span class="fontWeight">{{ item.reportBizName }}</span>:<span v-html="item.priorityStr.replace(/\ (\d+)/g, `为<strong>$1</strong>`)" /></div>
+              <div v-for="(pitem, pIndex) in item.problemDetails" :key="pIndex">
+                <div class="fontWeight" style="color: #ED8F41;margin-top: 10px;">{{ pitem.subClientType }}</div>
+                <div v-for="(dItem, dIndex) in pitem.details" :key="dIndex" style="padding-left: 10px">
+                  <div style="margin-top: 5px;"><span>{{ dIndex + 1 }}、</span><span>{{ dItem.priority }}问题:</span>{{ dItem.problem }}</div>
+                  <div v-html="dItem.reason" />
                 </div>
-                <div v-html="dItem.reason" />
               </div>
             </div>
           </div>
         </div>
-</div>
         <div v-if="!pieData.length" class="no-data">各业务线{{ active }}类<strong>线上问题</strong>为<span style="font-size: 16px">0</span>!</div>
       </div>
     </boxCom>

+ 3 - 17
src/views/monthlyReport/childrenPage/editReport/components/OverallOverviewOfTheClient/qualityProcess.vue

@@ -1,14 +1,9 @@
 <template>
   <div>
     <boxCom title="质量流程&研发效率" :page-data="pageData" @change="tabChange">
-      <!-- <div>质量流程&研发效率:{{ active }}{{this.pieData.filter(elm => elm.total).length}}</div> -->
       <div v-if="tabData" class="echarts-wrapper">
         <div class="pie-wrapper">
-          <div class="total-wrapper">
-<!--             总数:<span class="total" @click.stop="reportBizName = ''">{{
-              tabData.total
-            }}</span> -->
-          </div>
+          <div class="total-wrapper" />
           <div
             id="a_oiew_mkds_ppmn_aygs"
             class="pir"
@@ -23,11 +18,7 @@
         <div class="detail-wrapper" :style="{ marginTop : pieData.filter(elm => elm.total).length ? '0' : '0px' }">
           <div v-if="pieData.filter(elm => elm.total).length">
             <div
-              v-for="(
-                item, itemIndex
-              ) in pieData.filter(
-                (elm) => (reportBizName ? elm.name === reportBizName : true)
-              )"
+              v-for="( item, itemIndex ) in pieData.filter( (elm) => (reportBizName ? elm.name === reportBizName : true) )"
               :key="itemIndex"
               style="margin-bottom: 10px"
             >
@@ -49,12 +40,7 @@
                   style="margin-bottom: 5px;padding-left: 10px"
                 >
                   <div v-if="subItem.name" style="margin-top: 0px">
-                    <span>{{ subindex + 1 }}、</span
-                    >{{ subItem.name
-                    }}<span
-  v-if="subItem.description"
-                      >({{ subItem.description }})</span
-                    >
+                    <span>{{ subindex + 1 }}、</span>{{ subItem.name }}<span v-if="subItem.description">({{ subItem.description }})</span>
                   </div>
                 </div>
               </div>

+ 13 - 33
src/views/monthlyReport/childrenPage/editReport/components/OverallOverviewOfTheServer.vue

@@ -1,14 +1,11 @@
 <template>
   <div class="OverallOverviewOfTheServer">
-<!--     <div>
-      <headTitle style="margin-top: 40px; margin-bottom: 10px;" title="整体概览" />
-    </div> -->
     <table>
       <tr>
         <td class="first" colspan="1" rowspan="2">
           <canvas
             ref="myCanvas"
-            style="border:0px solid #d3d3d3;height: max-content;width:inherit; display: block;"
+            style="border:0 solid #d3d3d3;height: max-content;width:inherit; display: block;"
           />
           <span class="title1">指标</span>
           <span class="title2">业务线</span>
@@ -93,7 +90,7 @@ export default {
   }
 }
 </script>
-<style lang="less" scoped>
+<style lang='less' scoped>
 .OverallOverviewOfTheServer {
   margin-top: 20px;
   table {
@@ -112,6 +109,7 @@ export default {
     height: 50px; /*这里需要自己调整,根据自己的需求调整高度*/
     position: relative;
   }
+
   td[class='first'] {
     width: 80px;
     min-width: 80px;
@@ -119,34 +117,7 @@ export default {
     color: #333333;
     font-weight: 500;
   }
-  // td[class='first']:before {
-  //   content: '';
-  //   position: absolute;
-  //   width: 1px;
-  //   height: 104px;
-  //   top: 0;
-  //   left: 0;
-  //   background-color: #000;
-  //   display: block;
-  //   transform: rotate(-75deg);
-  //   transform-origin: top;
-  //   -ms-transform: rotate(-75deg);
-  //   -ms-transform-origin: top;
-  // }
-  // td[class='first']:after {
-  //   content: '';
-  //   position: absolute;
-  //   width: 1px;
-  //   height: 140px;
-  //   top: 0;
-  //   left: 0;
-  //   background-color: #e9e9e9;
-  //   display: block;
-  //   transform: rotate(-34deg);
-  //   transform-origin: top;
-  //   -ms-transform: rotate(-34deg);
-  //   -ms-transform-origin: top;
-  // }
+
   td.col {
     min-width: 40px;
     // height: 67px;
@@ -155,40 +126,49 @@ export default {
     color: #333333;
     font-weight: 500;
   }
+
   .title1 {
     position: absolute;
     top: 12px;
     right: 12px;
   }
+
   .title2 {
     position: absolute;
     bottom: 12px;
     left: 12px;
   }
+
   .color_1 {
     color: #333333;
     font-weight: 500;
     background: rgba(250, 173, 20, 0.15);
   }
+
   .color_1_sub {
     background: rgba(250, 173, 20, 0.08);
   }
+
   .color_2 {
     color: #333333;
     font-weight: 500;
     background: rgba(250, 126, 20, 0.15);
   }
+
   .color_2_sub {
     background: rgba(250, 126, 20, 0.08);
   }
+
   .color_3 {
     color: #333333;
     font-weight: 500;
     background: rgba(98, 217, 170, 0.15);
   }
+
   .color_3_sub {
     background: rgba(98, 217, 170, 0.08);
   }
+
   .col_red {
     color: #f5222d;
   }

+ 12 - 5
src/views/monthlyReport/childrenPage/editReport/components/PushAndBanck.vue

@@ -1,10 +1,16 @@
 <template>
   <div v-if="subTitle" class="subTitle-wrapper">
-    {{ title }}&nbsp;-&nbsp;
+    <span class="fontWeight">{{ title }}</span>&nbsp;-&nbsp;
     <div v-for="(item, index) in subTitle" :key="index" class="item">
-      <div v-if="isShowItem(item.copywriter)">{{ item.copywriter }}<div :class="{ red: isShowColor(item.copywriter, item.label) }"><span class="fontWeight">{{ item.label }}</span><span v-if="isShow(item.copywriter)" class="fontWeight">%</span><span v-if="item.copywriter !== '全量回滚率' && item.copywriter !== '裸奔上线率'">次</span>
-      </div>
-        <div v-if="index < subTitle.length - 1">{{ item.copywriter.search(/发布次数|全量回滚率/) > -1 ? ';' : isComma(item.copywriter) }}</div>
+      <div v-if="isShowItem(item.copywriter)">{{ item.copywriter }}
+        <div :class="{ red: isShowColor(item.copywriter, item.label) }"><span class="fontWeight">{{ item.label }}</span><span
+          v-if="isShow(item.copywriter)"
+          class="fontWeight">%</span><span
+          v-if="item.copywriter !== '全量回滚率' && item.copywriter !== '裸奔上线率'">次</span>
+        </div>
+        <div v-if="index < subTitle.length - 1">
+          {{ item.copywriter.search(/发布次数|全量回滚率/) > -1 ? ';' : isComma(item.copywriter) }}
+        </div>
       </div>
     </div>
   </div>
@@ -77,7 +83,7 @@ export default {
 }
 </script>
 
-<style scoped lang="less">
+<style scoped lang='less'>
 .subTitle-wrapper {
   color: #333;
   display: inline-block;
@@ -95,6 +101,7 @@ export default {
     }
   }
 }
+
 .fontWeight {
   // color: #333;
   font-weight: 600;

+ 0 - 1
src/views/monthlyReport/childrenPage/editReport/components/Refresh.vue

@@ -14,7 +14,6 @@
         此操作会将现有的数据覆盖,确认重新拉取?
       </div>
     </normal-dialog>
-    <!-- v-if="title && pullDataAgainTitle.indexOf(title) > -1" -->
     <span v-if="title && pullDataAgainTitle.indexOf(title) > -1">
       <el-tooltip
         class="item"

+ 3 - 5
src/views/monthlyReport/childrenPage/editReport/components/RichText.vue

@@ -11,10 +11,7 @@
       <div
         v-else
         style="cursor: pointer; color: #333; margin-bottom: 10px"
-        :style="{
-          paddingLeft: pageDate.status > 10 && item.value ? '30px' : '0',
-          marginTop: '10px'
-        }"
+        :style="{ paddingLeft: pageDate.status > 10 && item.value ? '30px' : '0', marginTop: '10px' }"
         @click.stop="editDom"
         v-html="item.value || '请点此处击添加数据!'"
       />
@@ -36,7 +33,8 @@ export default {
     item: {
       type: Object,
       requried: false,
-      default: () => {}
+      default: () => {
+      }
     }
   },
   computed: {

+ 1 - 1
src/views/monthlyReport/childrenPage/editReport/components/SubTitle.vue

@@ -1,5 +1,5 @@
 <template>
-  <span><span class="query-bug">线下缺陷 - </span>
+  <span><span><span class="fontWeight">线下缺陷</span> - </span>
     <span v-for="(item, index) in reportTextList" :key="index">
       <span class="query-bug" @click.stop="query(item, index)">
         <span v-if="index === 0">新增bug<span class="fontWeight">{{ item.label }}</span>个,</span>

+ 1 - 1
src/views/monthlyReport/childrenPage/editReport/components/TextInfo.vue

@@ -18,7 +18,7 @@ export default {
   },
   methods: {
     setTextAlign(name) {
-      if (name.search(/天数|模块/) > -1) {
+      if (name.search(/天数|模块|项目名称/) > -1) {
         return 'center'
       }
       return 'left'

+ 8 - 4
src/views/monthlyReport/childrenPage/editReport/components/VarText.vue

@@ -1,9 +1,5 @@
 <template>
   <div class="fixedText">
-    <!--    <div class="top-title">-->
-    <!--      <div class="top-title-content">top-title-content</div>-->
-    <!--      <div class="handle-box"><el-button type="text">标记</el-button></div>-->
-    <!--    </div>-->
     <div class="content">
       <div class="title">
         {{ name }}:
@@ -19,8 +15,14 @@
         />
         <span
           v-if="pageDate.status > 10 && textValue"
+<<<<<<< HEAD
           style="padding: 10px 0;display: inline-block;"
         >{{ textValue }}</span>
+=======
+          style="padding: 10px 0;display: inline-block;line-height: 1.65;"
+          v-html="textValue.replace(/\n/g, '<br />')"
+          />
+>>>>>>> http_mock
       </div>
     </div>
   </div>
@@ -106,6 +108,8 @@ export default {
     .title {
       padding: 9px 0;
       flex: none;
+      font-weight: 600;
+      color: #333;
       width: 50px;
     }
 

+ 38 - 58
src/views/monthlyReport/childrenPage/editReport/components/anchor.vue

@@ -1,5 +1,6 @@
 <template>
   <div v-if="list && list.length && isLine() > -1" class="anchor-wrapper">
+<<<<<<< HEAD
     <!--
       如果是TAG的话
         循环
@@ -7,8 +8,13 @@
         不符合条件
       正常渲染
     -->
+=======
+    <!-- 如果是TAG的话 -->
+>>>>>>> http_mock
     <div v-if="list[0].type === 'Tag'">
+      <!-- 循环 -->
       <div v-for="item in list" :key="item.domKey" class="title-wrapper">
+        <!-- 判断当前tabs焦点,符合的话,调用当前组件 -->
         <div v-if="item.children && item.children.length && isShowItem(item.isVisible)">
           <Anchor
             v-if="isShow(item) && isShowItem(item.isVisible)"
@@ -22,6 +28,7 @@
         </div>
       </div>
     </div>
+    <!-- 不符合条件:正常渲染 -->
     <div v-else>
       <div v-if="list.length > 0" class="line" />
       <div
@@ -38,32 +45,6 @@
             center: list.length === 1
           }"
         />
-        <!--        <el-tooltip
-                  class="item"
-                  effect="dark"
-                  :enterable="true"
-                  :disabled="tooltip[`anchor_${index}`] && tooltip[`anchor_${index}`].isTooltip"
-                  placement="top-start"
-                >
-                  <template slot="content">
-                    <span v-html="item.headerTitle || item.title" />
-                  </template>
-                  <div
-                    :ref="`anchor_${index}`"
-                    class="mi"
-                    :class="{ hide: !item.isVisible }"
-                    @contextmenu.prevent="openMenu($event, item)"
-                    @click.stop="change(item)"
-                    @mousemove="mouseMoveItem({ event: $event, item })"
-                  >
-                    <span
-                      class="title"
-                      :class="{ active: active === item.domKey, hide: !item.isVisible }"
-                    >
-                      {{ setTitle(item.title) }}</span
-                    >
-                  </div>
-                </el-tooltip>-->
         <div
           v-if="isShowItem(item.isVisible)"
           :ref="`anchor_${index}`"
@@ -92,7 +73,6 @@
 </template>
 
 <script>
-// import _ from 'lodash'
 import { toChinesNum } from '@/utils'
 import _ from 'lodash'
 
@@ -176,31 +156,31 @@ export default {
     // 判断提示内容是否显示
     tooltipShow() {
       this.$nextTick &&
-        this.$nextTick(() => {
-          this.$refs &&
-            Object.keys(this.$refs).forEach((key, index) => {
-              // if (this.$refs[key] && this.$refs[key][0]) {
-              //   const { scrollWidth, offsetWidth } = this.$refs[key][0]
-              //   this.tooltip[key] = {
-              //     isTooltip: true
-              //   }
-              //   if (scrollWidth > offsetWidth) {
-              //     console.log(this.list[index].isTooltip)
-              //     this.tooltip[key].isTooltip = false
-              //   }
-              // }
-              if (this.$refs[key][0]) {
-                const { scrollWidth, offsetWidth } = this.$refs[key][0]
-                this.tooltip[key] = {
-                  isTooltip: true
-                }
-                if (scrollWidth > offsetWidth) {
-                  this.tooltip[key].isTooltip = false
-                }
-              }
-            })
-          this.$forceUpdate()
+      this.$nextTick(() => {
+        this.$refs &&
+        Object.keys(this.$refs).forEach((key, index) => {
+          // if (this.$refs[key] && this.$refs[key][0]) {
+          //   const { scrollWidth, offsetWidth } = this.$refs[key][0]
+          //   this.tooltip[key] = {
+          //     isTooltip: true
+          //   }
+          //   if (scrollWidth > offsetWidth) {
+          //     console.log(this.list[index].isTooltip)
+          //     this.tooltip[key].isTooltip = false
+          //   }
+          // }
+          if (this.$refs[key][0]) {
+            const { scrollWidth, offsetWidth } = this.$refs[key][0]
+            this.tooltip[key] = {
+              isTooltip: true
+            }
+            if (scrollWidth > offsetWidth) {
+              this.tooltip[key].isTooltip = false
+            }
+          }
         })
+        this.$forceUpdate()
+      })
     },
     setTitle(value) {
       let title = `${value}`
@@ -221,12 +201,12 @@ export default {
       }
       let len = -1
       this.list &&
-        this.list.length &&
-        this.list.forEach((elm) => {
-          if (elm.isVisible) {
-            len++
-          }
-        })
+      this.list.length &&
+      this.list.forEach((elm) => {
+        if (elm.isVisible) {
+          len++
+        }
+      })
       // console.log(len)
       // console.log(this.list)
       return len
@@ -235,7 +215,7 @@ export default {
 }
 </script>
 
-<style scoped lang="less">
+<style scoped lang='less'>
 .anchor-wrapper {
   background-color: #ffffff;
   position: relative;

+ 11 - 17
src/views/monthlyReport/childrenPage/editReport/components/content.vue

@@ -1,7 +1,6 @@
 <template>
   <div class="content-wrapper">
     <div v-for="item in baseData" :key="item.domKey">
-<!--      title: {{ title }}-->
       <!--   表格:Table   -->
       <div v-if="item.type === 'Table'">
         <!-- 是否查看页面 -->
@@ -20,12 +19,13 @@
         <div v-else-if="title.search(/问题跟进/) > -1" style="margin-top: 10px;color: #666">上月无重点问题!</div>
         <div v-else-if="title.search(/持续改进/) > -1" style="margin-top: 10px;color: #666">本月无持续改进!</div>
         <div v-else-if="title.search(/重点问题/) > -1" style="margin-top: 10px;color: #666">本月无重点问题!</div>
-        <div v-else-if="title.search(/两轮车|代驾|货运|硬件|中台/) > -1" style="margin-top: 10px;color: #666">{{ setNoDataTitle(title) }}</div>
+        <div v-else-if="title.search(/两轮车|代驾|货运|硬件|中台/) > -1" style="margin-top: 10px;color: #666">
+          {{ setNoDataTitle(title) }}
+        </div>
       </div>
       <div v-else-if="item.type === 'overallOverviewo'">
-         <OverallOverviewOfTheServer v-if="pageType.search(/readAll/) > -1 && tabsActive.search(/服务端/) > -1" />
+        <OverallOverviewOfTheServer v-if="pageType.search(/readAll/) > -1 && tabsActive.search(/服务端/) > -1" />
         <OverallOverviewOfTheClient v-if="pageType.search(/readAll/) > -1 && tabsActive.search(/客户端/) > -1" />
-    <!-- <markingIssues ref="markingIssues" /> -->
       </div>
       <!--   表格和富文本:TableAndRichText   -->
       <div v-else-if="item.type === 'TableAndRichText'">
@@ -64,10 +64,7 @@
           :name="item.name"
           :dom-key="item.domKey"
         />
-        <!--        <div v-else class="no-data">暂无数据!</div>-->
-        <!--        <div v-else class="no-data">暂无{{ title }}数据</div>-->
       </div>
-      <!--   富文本--用户可编辑:RichText   -->
       <div v-else-if="item.type === 'RichText'">
         <RichText
           v-if="pageType.search(/edit/) > -1 || item.value"
@@ -78,12 +75,12 @@
         <div v-else class="no-data" style="padding-left: 20px">暂无数据!</div>
       </div>
       <div v-else>
-        <!--        <fixedText-->
-        <!--          v-model="item.value"-->
-        <!--          :title="item.title"-->
-        <!--          :name="item.name"-->
-        <!--          :dom-key="item.domKey"-->
-        <!--        />-->
+        <fixedText
+          v-model="item.value"
+          :title="item.title"
+          :name="item.name"
+          :dom-key="item.domKey"
+        />
       </div>
     </div>
   </div>
@@ -132,9 +129,6 @@ export default {
   },
   methods: {
     setNoDataTitle(title) {
-      // if (title) {
-      //   return this.tabsActive
-      // }
       if (this.tabsActive.search(/问题跟进/) > -1) {
         return '上月无重点问题!'
       }
@@ -146,7 +140,7 @@ export default {
 }
 </script>
 
-<style scoped lang="less">
+<style scoped lang='less'>
 .content-wrapper {
   //margin-top: 10px;
   //margin-bottom: 15px;

+ 110 - 37
src/views/monthlyReport/childrenPage/editReport/components/core.vue

@@ -6,7 +6,19 @@
         :title="baseData.title"
         @click.native.stop="baseDataShow"
       >
+<<<<<<< HEAD
         <Refresh v-if="pageDate && pageDate.status < 20" slot="refresh" :title="baseData.title" :tab-key="tabKey" :active-name="activeName" :dom-key="baseData.domKey" style="margin-left: 5px" />
+=======
+        <Refresh
+          v-if="pageDate && pageDate.status < 20"
+          slot="refresh"
+          :title="baseData.title"
+          :tab-key="tabKey"
+          :active-name="activeName"
+          :dom-key="baseData.domKey"
+          style="margin-left: 5px"
+        />
+>>>>>>> http_mock
       </headTitle>
     </div>
     <div
@@ -24,7 +36,8 @@
         :style="{
           color: '#333',
           marginBottom: '10px',
-          fontWeight: fontWeightFont.indexOf(baseData.title) > -1 ? 500 : 400
+          fontSize: baseData.type.search(/Head2/) > -1 ? '15px' : '14px',
+          fontWeight: fontWeightFont.indexOf(baseData.title) > -1 ? 600 : 600
         }"
         v-html="headerIndex"
       />
@@ -44,11 +57,23 @@
         :style="{
           color: '#333',
           marginBottom: '10px',
-          fontWeight: fontWeightFont.indexOf(baseData.title) > -1 ? 500 : 400
+          fontSize: baseData.type.search(/Head2/) > -1 ? '14px' : '14px',
+          fontWeight: baseData.type.search(/Head2/) > -1 ? 600 : 400
         }"
-        v-html="headerTitle"
+        v-html="headerTitle.replace(/(延期|提测打回\/准出不通过|提测打回\/发版撤回|增发) -/g,'<hhtsubtitle>$1</hhtsubtitle> -')"
       />
-      <span v-if="baseData.title.search(/延期|发布&回滚/) > -1">。</span><Refresh v-if="pageDate && pageDate.status < 20" slot="refresh" :title="baseData.title" :dom-key="baseData.domKey" :style="{marginLeft: baseData.title.search(/线上问题/) > -1 ? '5px' : '0'}" /><span><el-button v-if="headerTitle.indexOf('线下缺陷') > -1 && pageDate.status < 20" type="text" style="margin-left: 5px;font-weight: 400;" @click.stop="marking">标记</el-button></span>
+      <span v-if="baseData.title.search(/延期|发布&回滚/) > -1">。</span>
+      <Refresh
+        v-if="pageDate && pageDate.status < 20"
+        slot="refresh"
+        :title="baseData.title"
+        :dom-key="baseData.domKey"
+        :style="{marginLeft: baseData.title.search(/线上问题/) > -1 ? '5px' : '0'}" />
+      <span><el-button
+        v-if="headerTitle.indexOf('线下缺陷') > -1 && pageDate.status < 20"
+        type="text"
+        style="margin-left: 5px;font-weight: 400;"
+        @click.stop="marking">标记</el-button></span>
       <span v-if="baseData.title.search(/提测打回|增发/) > -1">。</span>
     </div>
     <div
@@ -63,7 +88,7 @@
     </div>
     <div v-if="baseData.children && baseData.children.length">
       <div v-if="baseData.children[0].type === 'Tag'">
-        <el-tabs v-model="activeName" @tab-click="handleClick">
+        <el-tabs v-model="activeName" :class="{'isBar':baseData.children.filter(elm => elm.title.search(/服务端|客户端/) < 0).length}" @tab-click="handleClick">
           <el-tab-pane
             v-for="(item, index) in baseData.children"
             :key="item.domKey"
@@ -73,10 +98,30 @@
           >
             <span slot="label">
               <span v-if="item.title.search(/服务端|客户端/) > -1">
-                <i class="iconfont icon" :class="{colorActive: item.domKey === activeName}">{{ item.title === '服务端'?'&#xe607;' : '&#xe608;' }}</i>
+                <i
+                  class="iconfont icon"
+                  :class="{colorActive: item.domKey === activeName}">{{ item.title === '服务端' ? '&#xe607;' : '&#xe608;'
+                  }}</i>
               </span>
-            {{ item.title }}</span>
-            <Core :key="item.domKey" v-loading="loading" style="padding-left: 20px;" :tab-key="baseData.domKey" :dom-index="index" :base-data="item" />
+              <span
+                :style="{
+                  fontSize:item.title.search(/服务端|客户端/) > -1 ? '15px' : '14px',
+                  marginLeft:item.title.search(/服务端|客户端/) > -1 ? '5px':'0',
+                  fontSize:item.title.search(/服务端|客户端/) > -1 ? '600' : '400',
+                }"
+              >{{ item.title }}</span>
+            </span>
+            <span :key="domKey">
+              <Core
+                :key="item.domKey"
+                v-loading="loading"
+                style="padding-left: 20px;"
+                :tab-key="baseData.domKey"
+                :dom-index="index"
+                :base-data="item"
+              />
+            </span>
+
           </el-tab-pane>
         </el-tabs>
       </div>
@@ -136,6 +181,7 @@ export default {
       pullDataAgainTitle: ['上月问题跟进', '线上问题', '线下缺陷', '发布&回滚'],
       activeName: '',
       loading: false,
+      domKey: '123456',
       headerTitle: ''
     }
   },
@@ -172,6 +218,7 @@ export default {
     }
   },
   mounted() {
+    console.log(212)
     if (
       this.baseData &&
       this.baseData.children &&
@@ -179,7 +226,9 @@ export default {
       this.baseData.children[0].type === 'Tag'
     ) {
       // this.$store.commit('monthlyReportEdit/SUB_TABS_ACTIVE', this.baseData.children[0].domKey, this.activeName)
-      this.activeName = this.baseData.children[0].domKey
+      this.$nextTick(() => {
+        this.activeName = this.baseData.children[0].domKey
+      })
     }
     this.setHeader()
     this.pushAndBanckheadle()
@@ -189,18 +238,18 @@ export default {
     pushAndBanckheadle() {
       const [elm] = this.baseData.content
       this.baseData.subTitles &&
-        this.baseData.subTitles.length &&
-        this.baseData.subTitles.forEach((item) => {
-          if (item.copywriter === '全量回滚次数') {
-            item.label = `${elm.tableRows.length}`
-          }
-          if (item.copywriter === '全量回滚率') {
-            const label = Number.parseInt(this.baseData.subTitles[0].label)
-            const len = elm.tableRows.length
-            const num = ((len / label) * 100).toFixed(2)
-            item.label = `${_.isNaN(num) ? 0 : num}`
-          }
-        })
+      this.baseData.subTitles.length &&
+      this.baseData.subTitles.forEach((item) => {
+        if (item.copywriter === '全量回滚次数') {
+          item.label = `${elm.tableRows.length}`
+        }
+        if (item.copywriter === '全量回滚率') {
+          const label = Number.parseInt(this.baseData.subTitles[0].label)
+          const len = elm.tableRows.length
+          const num = ((len / label) * 100).toFixed(2)
+          item.label = `${_.isNaN(num) ? 0 : num}`
+        }
+      })
       this.$forceUpdate()
     },
     handleClick(tab, event) {
@@ -211,6 +260,7 @@ export default {
         this.$store.commit('monthlyReportEdit/INIT_EDIT_KEYS')
       })
       setTimeout(() => {
+        this.domKey = new Date().getTime()
         this.loading = false
       }, 650)
       // const { name } = tab
@@ -245,15 +295,15 @@ export default {
       let test1 = 0
       let test2 = 0
       tableRows &&
-        tableRows.length &&
-        tableRows.forEach((elm) => {
-          if (elm[headerKey] && elm[headerKey] === selectEnum[0]) {
-            test1++
-          }
-          if (elm[headerKey] && elm[headerKey] === selectEnum[1]) {
-            test2++
-          }
-        })
+      tableRows.length &&
+      tableRows.forEach((elm) => {
+        if (elm[headerKey] && elm[headerKey] === selectEnum[0]) {
+          test1++
+        }
+        if (elm[headerKey] && elm[headerKey] === selectEnum[1]) {
+          test2++
+        }
+      })
       if (newTitle.search(/提测打回|发版撤回|延期|增发/g) > -1) {
         newTitle = newTitle.replace(
           '{param}',
@@ -311,36 +361,59 @@ export default {
 }
 </script>
 
-<style scoped lang="less">
+<style scoped lang='less'>
 /*elm-tabs 默认样式处理*/
-/deep/ .el-tabs__active-bar,
 /deep/ .el-tabs__nav-wrap::after {
   display: none;
+  //bottom: 5px;
 }
 
+/deep/ .el-tabs__active-bar {
+  //bottom: 5px;
+}
+.isBar{
+  /deep/ .el-tabs__nav-wrap::after {
+    display: initial;
+  }
+  /deep/ .el-tabs__header {
+    margin-bottom: 20px;
+  }
+}
 /deep/ .el-tabs__header {
-  margin-bottom: 0;
+  //margin-bottom: 15px;
 }
 
 /deep/ .el-tabs__item {
-  padding: 0 10px;
+  //padding: 0 10px;
 }
 
 /deep/ .el-tabs__content {
   margin-top: -10px;
 }
-/deep/.el-tabs__item {
-  .iconfont{
+
+/deep/ .el-tabs__item {
+  .iconfont {
     color: #333;
     font-size: 14px;
-    &.colorActive{
+
+    &.colorActive {
       color: #409EFF;
     }
   }
+
   &:hover {
     .iconfont {
       color: #409EFF;
     }
   }
 }
+
+.fontWeight {
+  //color: #333;
+  font-weight: 600;
+}
+
+///deep/.title-left-name{
+//  font-weight: 600;
+//}
 </style>

+ 6 - 7
src/views/monthlyReport/childrenPage/editReport/components/fixedText.vue

@@ -1,9 +1,5 @@
 <template>
   <div class="fixedText">
-<!--    <div class="top-title">-->
-<!--      <div class="top-title-content">top-title-content</div>-->
-<!--      <div class="handle-box"><el-button type="text">标记</el-button></div>-->
-<!--    </div>-->
     <div class="content">
       <div class="title">{{ name }}</div>
       <div class="value">
@@ -65,21 +61,24 @@ export default {
 }
 </script>
 
-<style scoped lang="less">
+<style scoped lang='less'>
 .fixedText {
-  .top-title{
+  .top-title {
     width: 100%;
     display: flex;
+
     &-content {
       flex: 1;
       padding: 10px 0;
     }
-    .handle-box{
+
+    .handle-box {
       flex: none;
       width: 50px;
       text-align: right;
     }
   }
+
   .content {
     width: 100%;
     display: flex;

+ 52 - 49
src/views/monthlyReport/childrenPage/editReport/components/markingIssues.vue

@@ -24,18 +24,10 @@
         </el-form-item>
         <el-form-item label="责任团队">
           <Cascader v-model="cascaderValue" />
-<!--          <el-cascader-->
-<!--            v-model="cascaderValue"-->
-<!--            style="width: 100%"-->
-<!--            :options="selectEnum"-->
-<!--            size="mini"-->
-<!--            collapse-tags-->
-<!--            :props="{ multiple: true }"-->
-<!--            clearable-->
-<!--          />-->
         </el-form-item>
         <el-form-item label="责任人">
           <searchPeople
+            ref="searchPeople"
             style="width: 100%"
             :value.sync="multiplePeople"
             :multiple="true"
@@ -86,6 +78,21 @@ export default {
       return this.$store.state.monthlyReportEdit.selectEnum
     }
   },
+  watch: {
+    cascaderValue: {
+      handler(newV, old) {
+        if (newV.length) {
+          if (this.$refs.searchPeople) {
+            this.$refs.searchPeople.firstGetArr = true
+          }
+          this.setDeptCharge()
+        } else {
+          this.multiplePeople = ''
+        }
+      },
+      deep: true
+    }
+  },
   methods: {
     uuid10,
     openModal(params) {
@@ -108,21 +115,21 @@ export default {
     setDefaultValues() {
       this.normalAreaName = ''
       this.columns &&
-        this.columns.forEach((elm) => {
-          // 线上问题
-          if (elm.name === '定级' && this.headerTitle === '线上问题' && this.normalAreaName.search(/级线上问题/) < 0) {
-            this.normalAreaName = `${this.menuData[elm.headerKey]}级线上问题:${this.normalAreaName}`
-          }
-          if (elm.name === '问题') {
-            this.normalAreaName += this.menuData[elm.headerKey]
-          }
-          if (elm.name.search(/团队/) > -1) {
-            this.cascaderValue = this.menuData[elm.headerKey]
-          }
-          if (elm.name === '负责人') {
-            this.multiplePeople = [this.menuData[elm.headerKey]]
-          }
-        })
+      this.columns.forEach((elm) => {
+        // 线上问题
+        if (elm.name === '定级' && this.headerTitle === '线上问题' && this.normalAreaName.search(/级线上问题/) < 0) {
+          this.normalAreaName = `${this.menuData[elm.headerKey]}级线上问题:${this.normalAreaName}`
+        }
+        if (elm.name === '问题') {
+          this.normalAreaName += this.menuData[elm.headerKey]
+        }
+        if (elm.name.search(/团队/) > -1) {
+          this.cascaderValue = this.menuData[elm.headerKey]
+        }
+        if (elm.name === '负责人') {
+          this.multiplePeople = [this.menuData[elm.headerKey]]
+        }
+      })
       // 延期
       if (this.headerTitle.search(/延期 - |提测打回/) > -1) {
         this.normalAreaName = ''
@@ -135,23 +142,23 @@ export default {
       if (this.headerTitle === '线下缺陷') {
         this.normalAreaName = ''
         this.subTitles &&
-          this.subTitles.forEach((elm, index) => {
-            // this.normalAreaName += `${elm.copywriter}:${elm.label}`
-            if (index < 3) {
-              this.normalAreaName += `${elm.copywriter}:${elm.label}个${
-                index === 2 ? ';' : ','
-              }`
-            }
-            if (index === 3 && elm.label !== '--') {
-              this.normalAreaName += `${elm.copywriter}:${elm.label}h;`
-            }
-            if (index === 4 && elm.label !== '--') {
-              this.normalAreaName += `${elm.copywriter}:${elm.label}%;`
-            }
-            if (index === 5) {
-              this.normalAreaName += `${elm.copywriter}:${elm.label}。`
-            }
-          })
+        this.subTitles.forEach((elm, index) => {
+          // this.normalAreaName += `${elm.copywriter}:${elm.label}`
+          if (index < 3) {
+            this.normalAreaName += `${elm.copywriter}:${elm.label}个${
+              index === 2 ? ';' : ','
+            }`
+          }
+          if (index === 3 && elm.label !== '--') {
+            this.normalAreaName += `${elm.copywriter}:${elm.label}h;`
+          }
+          if (index === 4 && elm.label !== '--') {
+            this.normalAreaName += `${elm.copywriter}:${elm.label}%;`
+          }
+          if (index === 5) {
+            this.normalAreaName += `${elm.copywriter}:${elm.label}。`
+          }
+        })
       }
       // 发布&回滚
       if (this.headerTitle.search(/发布&回滚/) > -1) {
@@ -175,26 +182,22 @@ export default {
       this.modalShow = false
       this.$refs.normalDialog.visible = false
     },
-    // 设置部门数据
+    // 根据部门数据,设置团队负责人
     async setDeptCharge() {
       const res = await getDeptCharge({ deptCode: this.cascaderValue })
       if (res.code === 200) {
         if (!this.multiplePeople) {
           this.multiplePeople = []
         }
-        console.log(this.multiplePeople)
-        console.log(res.data.map(elm => elm.manageName))
-        this.multiplePeople = [...this.multiplePeople, ...res.data.map(elm => elm.manageName)]
-        // console.log(this.multiplePeople)
-        // this.multiplePeople = Array.from(new Set([...this.multiplePeople, ...this.cascaderValue.map(elm => elm.manageName)]))
+        // this.multiplePeople = [...this.multiplePeople, ...res.data.map(elm => elm.manageName)]
+        this.multiplePeople = res.data.map(elm => elm.manageName)
         this.multiplePeople = Array.from(new Set(this.multiplePeople))
-        // console.log(this.multiplePeople)
       }
     }
   }
 }
 </script>
-<style scoped lang="less">
+<style scoped lang='less'>
 /deep/ .el-form-item__label {
   text-align: left !important;
 }

+ 0 - 1
src/views/monthlyReport/childrenPage/editReport/components/menu.vue

@@ -14,7 +14,6 @@
              判断 当前点击元素 是否为用户自定义dom
              menuData.item.fromUser === true  '删除'
              menuData.item.fromUser === false '隐藏'
-
            menuData.item.isVisible === false'显示'
              -->
           {{

+ 132 - 58
src/views/monthlyReport/childrenPage/editReport/index.vue

@@ -8,16 +8,32 @@
   >
     <headerCom :key="subTitle" title="月报" :sub-title="subTitle" :address="address">
       <template v-if="pageDate" slot="content">
-        <el-button v-if="pageDate && pageDate.status < 20 && (roleCode === 100 || roleCode === 50 || roleCode === 0)" type="primary" size="small" @click="upDateReport('cb')">
+        <el-button
+          v-if="pageDate && pageDate.status < 20 && (roleCode === 100 || roleCode === 50 || roleCode === 0)"
+          type="primary"
+          size="small"
+          @click="upDateReport('cb')"
+        >
           保存
         </el-button>
-        <el-button v-if="pageType.search(/All/) < 0 && pageDate && pageDate.status === 10 && (roleCode === 100 || roleCode === 50 || roleCode === 0)" size="small" @click="dialogOpen('dialogConfirm')">
-          月报确认<!-- @click="confirmReport" -->
-        </el-button>
-        <el-button v-if="pageDate && pageDate.status < 10 && (roleCode === 100 || roleCode === 0)" size="small" @click="dialogOpen('dialogSend')">
+        <el-button
+          v-if="pageType.search(/All/) < 0 && pageDate && pageDate.status === 10 && (roleCode === 100 || roleCode === 50 || roleCode === 0)"
+          size="small"
+          @click="dialogOpen('dialogConfirm')">月报确认<!-- @click="confirmReport" --> </el-button>
+        <el-button
+          v-if="pageDate && pageDate.status < 10 && (roleCode === 100 || roleCode === 0)"
+          size="small"
+          @click="dialogOpen('dialogSend')"
+        >
           发送确认
         </el-button>
-        <el-button v-if="$route.query.type === 'create' && pageDate && pageDate.status < 20 && pageDate.isDelete && (roleCode === 100 || roleCode === 0)" slot="reference" plain size="small" @click="dialogOpen('dialogCancel')">
+        <el-button
+          v-if="$route.query.type === 'create' && pageDate && pageDate.status < 20 && pageDate.isDelete && (roleCode === 100 || roleCode === 0)"
+          slot="reference"
+          plain
+          size="small"
+          @click="dialogOpen('dialogCancel')"
+        >
           取消
         </el-button>
         <el-button
@@ -25,15 +41,22 @@
           slot="reference"
           type="primary"
           size="small"
-          @click="dialogOpen('dialogPublishAll')">发布</el-button>
+          @click="dialogOpen('dialogPublishAll')"
+        >
+          发布
+        </el-button>
         <span v-if="pageDate.status === 20 && (roleCode === 100 || roleCode === 0)">
-          <el-button v-if="$route.query.pageType === 'read'" slot="reference" plain size="small" @click="returnReport('only')">
+          <el-button
+            v-if="$route.query.pageType === 'read'"
+            slot="reference"
+            plain
+            size="small"
+            @click="returnReport('only')"
+          >
             回退
           </el-button>
           <el-dropdown v-else @command="returnReport">
-            <el-button size="small">
-              回退<i class="el-icon-arrow-down el-icon--right" />
-            </el-button>
+            <el-button size="small"> 回退<i class="el-icon-arrow-down el-icon--right" /> </el-button>
             <el-dropdown-menu slot="dropdown">
               <el-dropdown-item command="all">全部</el-dropdown-item>
               <el-dropdown-item v-for="item in subReportInfo" :key="item.id" :command="item.id">
@@ -42,16 +65,17 @@
             </el-dropdown-menu>
           </el-dropdown>
         </span>
-        <el-button v-if=" pageType.search(/All/) > -1 && (!$route.query.type || !pageDate.isDelete || $route.query.type !== 'create') && pageDate && pageDate.status < 20 && (roleCode === 100 || roleCode === 0)" slot="reference" type="danger" size="small" @click="dialogOpen('dialogDelete')">
+        <el-button
+          v-if="pageType.search(/All/) > -1 && (!$route.query.type || !pageDate.isDelete || $route.query.type !== 'create') && pageDate && pageDate.status < 20 && (roleCode === 100 || roleCode === 0)"
+          slot="reference"
+          type="danger"
+          size="small"
+          @click="dialogOpen('dialogDelete')"
+        >
           删除
         </el-button>
       </template>
     </headerCom>
-
-    <!--     <div style="position: fixed;z-index: 99; top: 20px">
-          <el-button type="primary" @click="test">test</el-button>
-        </div> -->
-    <!--  content  -->
     <div class="content-wrapper">
       <el-tabs v-if="pageType.search(/All/) > -1" :value="tabsActive" @tab-click="tabClick">
         <el-tab-pane v-for="item in tabsList" :key="item.name" :label="item.label" :name="item.name" />
@@ -59,14 +83,31 @@
       <div v-loading="bodyLoading" class="body-wrapper">
         <div class="left-wrapper">
           <div v-if="tabPageShow">
-            <Core v-for="(item, index) in tabPageData.children" :key="item.domKey" :dom-index="index" :base-data="item" />
+            <Core
+              v-for="(item, index) in tabPageData.children"
+              :key="item.domKey"
+              :dom-index="index"
+              :base-data="item"
+            />
           </div>
           <div v-else style="margin-top: 30px;">暂无数据!</div>
         </div>
         <div class="right-wrapper">
-          <Affix ref="affix" v-clickoutside="$refs.menu && $refs.menu.closeMenu" :listen-time="pageType.search(/read/) ? 5 : 5" :offset-top="134" :target=" () => $refs && $refs.pageWrapper && $refs.pageWrapper.parentNode" @change="userFun">
+          <Affix
+            ref="affix"
+            v-clickoutside="$refs.menu && $refs.menu.closeMenu"
+            :listen-time="pageType.search(/read/) ? 5 : 5"
+            :offset-top="134"
+            :target="() => $refs && $refs.pageWrapper && $refs.pageWrapper.parentNode"
+            @change="userFun"
+          >
             <div class="set_scroll" style="max-height: 570px;overflow-y: scroll;">
-              <Anchor :list="tabPageData && tabPageData.children" :active="anchorActive" @change="anchorChange" @openMenu="openMenu" />
+              <Anchor
+                :list="tabPageData && tabPageData.children"
+                :active="anchorActive"
+                @change="anchorChange"
+                @openMenu="openMenu"
+              />
               <Menu ref="menu" />
             </div>
           </Affix>
@@ -74,32 +115,72 @@
       </div>
     </div>
     <!-- 月报发送确认 -->
-    <normal-dialog ref="dialogDelete" is-succes :show-dialog="false" :title="'删除月报'" width="420px" @succes="deleteReport('删除')" @cancel="deleteReport('取消')">
+    <normal-dialog
+      ref="dialogDelete"
+      is-succes
+      :show-dialog="false"
+      :title="'删除月报'"
+      width="420px"
+      @succes="deleteReport('删除')"
+      @cancel="deleteReport('取消')"
+    >
       <div class="report-delete">
         确认删除当前月报?
       </div>
     </normal-dialog>
     <!-- 月报取消 -->
-    <normal-dialog ref="dialogCancel" is-succes :show-dialog="false" :title="'取消月报'" width="420px" @succes="$router.push({ path: '/monthlyReport/index' });window.log({ c: 'report_edit', d: 'report_edit_cancel' })" @cancel="$refs.dialogCancel.visible = false">
+    <normal-dialog
+      ref="dialogCancel"
+      is-succes
+      :show-dialog="false"
+      :title="'取消月报'"
+      width="420px"
+      @succes="
+        $router.push({ path: '/monthlyReport/index' })
+        window.log({ c: 'report_edit', d: 'report_edit_cancel' })
+      "
+      @cancel="$refs.dialogCancel.visible = false"
+    >
       <div class="report-delete">
         取消后填写的数据将不会保存,是否确认?
       </div>
     </normal-dialog>
     <!-- 月报发送确认 -->
-    <normal-dialog ref="dialogSend" is-succes :show-dialog="false" :title="'发送确认'" width="420px" @succes="sendReport" @cancel="sendReport('取消')">
+    <normal-dialog
+      ref="dialogSend"
+      is-succes
+      :show-dialog="false"
+      :title="'发送确认'"
+      width="420px"
+      @succes="sendReport"
+      @cancel="sendReport('取消')">
       <div class="report-delete">
         确认发送当前月报?
       </div>
     </normal-dialog>
     <!-- 月报发布确认 -->
-    <normal-dialog ref="dialogPublishAll" class="view-report" style="margin-top: 5vh" is-succes :show-dialog="false" :title="'邮件预览'" width="70%" @succes="publishAllReport">
+    <normal-dialog
+      ref="dialogPublishAll"
+      class="view-report"
+      style="margin-top: 5vh"
+      is-succes
+      :show-dialog="false"
+      :title="'邮件预览'"
+      width="70%"
+      @succes="publishAllReport">
       <div class="report-delete" style="text-align: initial;min-height: 30vh;max-height: 70vh;overflow-y: scroll;">
-<!--        月报数据已检查无误,确认发布?-->
+        <!--        月报数据已检查无误,确认发布?-->
         <div v-if="monthlyReportPreView" style="" v-html="monthlyReportPreView.content" />
       </div>
     </normal-dialog>
     <!-- 月报确认 -->
-    <normal-dialog ref="dialogConfirm" is-succes :show-dialog="false" :title="'确认月报'" width="420px" @succes="confirmReport">
+    <normal-dialog
+      ref="dialogConfirm"
+      is-succes
+      :show-dialog="false"
+      :title="'确认月报'"
+      width="420px"
+      @succes="confirmReport">
       <div class="report-delete">
         确认数据已填写无误,进行月报确认吗?
       </div>
@@ -107,7 +188,7 @@
   </div>
 </template>
 
-<script type="text/javascript">
+<script type='text/javascript'>
 import headerCom from '../../components/header'
 import Affix from '@/components/affix/affix'
 import Anchor from './components/anchor'
@@ -140,11 +221,7 @@ export default {
   },
   computed: {
     tabPageShow() {
-      return (
-        this.tabPageData &&
-        this.tabPageData.children &&
-        this.tabPageData.children.length
-      )
+      return this.tabPageData && this.tabPageData.children && this.tabPageData.children.length
     },
     address() {
       let pathName = '/monthlyReport/index'
@@ -215,10 +292,7 @@ export default {
      * editAll:编辑完整月报
      * */
     if (this.$route.query.pageType) {
-      this.$store.commit(
-        'monthlyReportEdit/SET_PAGE_TYPE',
-        this.$route.query.pageType
-      )
+      this.$store.commit('monthlyReportEdit/SET_PAGE_TYPE', this.$route.query.pageType)
     }
     // 获取部门数据;只有查看但业务线时,才需要单独获取部门数据
     // if (
@@ -337,22 +411,17 @@ export default {
     // 月报更新
     upDateReport(key = 'cb', confirmReportBack) {
       this.$store.commit('monthlyReportEdit/SET_LOADING', true)
-      this.$store.dispatch(
-        `monthlyReportEdit/${
-          this.pageType.search(/All/) > -1 ? 'upDateReport' : 'upDateSubReport'
-        }`,
-        () => {
-          confirmReportBack && confirmReportBack()
-          if (!confirmReportBack) {
-            this.$store.commit('monthlyReportEdit/SET_LOADING', false)
-          }
-          if (key === 'cb') {
-            window.log({ c: 'report_edit', d: 'report_edit_save' })
-            this.$message.success('保存成功!')
-            // this.$router.push({ path: '/monthlyReport/index' })
-          }
+      this.$store.dispatch(`monthlyReportEdit/${this.pageType.search(/All/) > -1 ? 'upDateReport' : 'upDateSubReport'}`, () => {
+        confirmReportBack && confirmReportBack()
+        if (!confirmReportBack) {
+          this.$store.commit('monthlyReportEdit/SET_LOADING', false)
+        }
+        if (key === 'cb') {
+          window.log({ c: 'report_edit', d: 'report_edit_save' })
+          this.$message.success('保存成功!')
+          // this.$router.push({ path: '/monthlyReport/index' })
         }
-      )
+      })
     },
     // 月报确认
     confirmReport() {
@@ -479,7 +548,7 @@ export default {
   }
 }
 </script>
-<style scoped lang="less">
+<style scoped lang='less'>
 @import '../../style';
 // setscroll
 .set_scroll {
@@ -498,7 +567,7 @@ export default {
   }
 }
 
-/deep/.report-delete {
+/deep/ .report-delete {
   text-align: center;
 }
 
@@ -539,15 +608,20 @@ export default {
 
 /deep/ hhtsubtitle {
   color: #333;
+  font-weight: 600;
 }
-/deep/.view-report{
+
+/deep/ .view-report {
   //background-color: #0EB400;
 
-  .report-delete{
-    padding: 0 20px;margin: -20px 0;color: #333;
+  .report-delete {
+    padding: 0 20px;
+    margin: -20px 0;
+    color: #333;
   }
-  .el-dialog{
-    margin-top: 5vh!important;
+
+  .el-dialog {
+    margin-top: 5vh !important;
     margin-bottom: 0;
   }
 }

+ 1 - 1
src/views/monthlyReport/index.vue

@@ -6,7 +6,7 @@
         <el-select v-model="reportValue" size="small" style="width: 40%;" placeholder="请选择">
           <el-option v-for="item in reportData.reportList" :key="item.id" :label="item.reportName" :value="item.id" @click.native="getReportStatus(item)">
             <span style="float: left">{{ item.reportName }}</span>
-            <span style="float: right; color: #8492a6; font-size: 13px; padding-left: 20px;">{{ item.statueStr }}</span>
+            <span v-if="item.statueStr && item.statueStr !== '已发布'" style="float: right; color: #8492a6; font-size: 13px; padding-left: 20px;">{{ item.statueStr }}</span>
           </el-option>
         </el-select>
       </template>

+ 13 - 12
src/views/projectManage/bugList/details/index.vue

@@ -349,13 +349,13 @@
           </div>
           <el-divider v-if="type !== 'page'" />
           <div
-            v-if="bugDescribeNoHtml.length == 0 && describeEditorVisible == false"
+            v-if="!bug.bugDescribe && describeEditorVisible == false"
             style="width: 100%;height: 300px;text-align: center;line-height: 300px"
           >
             <span class="bug_describe" @click="describeEditorVisible = true;">点击添加描述</span>
           </div>
           <el-tooltip
-            v-if="bugDescribeNoHtml.length > 0 && describeEditorVisible == false"
+            v-if="bug.bugDescribe && describeEditorVisible == false"
             effect="dark"
             content="点击编辑"
             placement="top"
@@ -1042,11 +1042,11 @@ export default {
     },
     describeConfirm() {
       this.bug.bugDescribe = this.text_content
-      if (this.text_content) {
-        this.bugDescribeNoHtml = this.text_content
-          .replace(/<[^>]+>/g, '')
-          .replace(/&nbsp;/gi, '')
-      }
+      // if (this.text_content) {
+      //   this.bugDescribeNoHtml = this.text_content
+      //     .replace(/<[^>]+>/g, '')
+      //     .replace(/&nbsp;/gi, '')
+      // }
       this.bugUpdate(this.bug, 'describe').then(res => {
         if (res.code === 200) {
           this.describeEditorVisible = false
@@ -1077,11 +1077,12 @@ export default {
           this.bug.assigner = res.data.assigner.split(',')
           this.bugModel = JSON.parse(JSON.stringify(res.data))
           this.bugDescribe = this.bug.bugDescribe
-          if (this.bugDescribe !== null) {
-            this.bugDescribeNoHtml = this.bugDescribe
-              .replace(/<[^>]+>/g, '')
-              .replace(/&nbsp;/gi, '')
-          }
+          // if (this.bugDescribe !== null) {
+          // this.bugDescribeNoHtml = this.bugDescribe
+          //     .replace(/<[^>]+>/g, '')
+          //     .replace(/&nbsp;/gi, '')
+          // }
+          // console.log(this.bugDescribe)
           this.bugNameForm.bugName = this.bug.bugName
           this.bug.networkType = this.bug.networkType
           this.bug.appVersion = this.bug.appVersion

+ 1 - 0
src/views/projectManage/requirement/list/create.vue

@@ -241,6 +241,7 @@ export default {
         }
         this.$emit('cancel', false)
       }
+      this.form = { source: 1, type: 0, dependOnRelease: 0, belongingProject: '-1', bizId: this.bizId }
     },
     bizId: {
       handler(newV) {

+ 3 - 3
src/views/quality/components/drawerAll.vue

@@ -367,15 +367,15 @@ export default {
   color: #333333;
   font-weight: 600;
 }
-.qz-message { color: #444; font-size: 14px;}
 .qz-drawer-grade {
-  @extend .qz-message;
+  color: #444; font-size: 14px;
   position: absolute;
   top: 28px;
   left: 185px;
 }
 .qz-drawer-grade-tow {
-  @extend .qz-message;
+  color: #444;
+  font-size: 14px;
   position: absolute;
   top: 28px;
   left: 150px;