deepsea 1 år sedan
förälder
incheckning
4953540e28

+ 1 - 1
src/api/bench.js

@@ -24,4 +24,4 @@ export const createProduct = (data) => {
     method: "POST",
     data,
   });
-};
+};

+ 7 - 0
src/api/common.js

@@ -0,0 +1,7 @@
+import { api } from "./API.js";
+
+export const fetchOptionList = () => {
+  return api(`/mantis-test/v1.0.0/mantis/get/common/info`, {
+    method: "GET"
+  });
+};

+ 225 - 102
src/components/TabList/index.vue

@@ -19,11 +19,46 @@
     </div>
     <div class="tab-content" :class="tabClass" v-if="activeTab === 2">
       <div class="panel-container">
-        <div class="list issue-list">
+        <div class="list issue-list" v-if="isShowIssueList">
           <div v-for="(item, index) in activeTabItems" :key="index" class="item">
             <div v-html="issueRender(item)"></div>
           </div>
         </div>
+        <div class="case task-item" v-if="isShowIssueDetail && !isShowIssueList">
+          <div class="go-back">
+            <div class="el-icon-arrow-left" @click="clickBackToIssueList"></div>
+            <div>{{ currentIssue.ticket_title }}</div>
+          </div>
+          <div class="task-title">ID</div>
+          <div class="task-content">{{currentIssue.id}}</div>
+          <div class="task-title">Title</div>
+          <div class="task-content">{{currentIssue.ticket_title}}</div>
+          <div class="task-title">Type</div>
+          <div class="task-content">{{currentIssue.ticket_type}}</div>
+          <div class="task-title">Bench_id</div>
+          <div class="task-content">{{currentIssue.bench_id}}</div>
+          <div class="task-title">Status</div>
+          <div class="task-content">{{currentIssue.ticket_status}}</div>
+          <div class="task-title">Description</div>
+          <div class="task-content">{{currentIssue.ticket_desc}}</div>
+          <div class="task-title">Creator</div>
+          <div class="task-content">{{currentIssue.creator}}</div>
+          <div class="task-title">Difficulty</div>
+          <div class="task-content">{{currentIssue.ticket_difficulty}}</div>
+          <div class="task-title">Complexity</div>
+          <div class="task-content">{{currentIssue.ticket_complexity}}</div>
+          <div class="task-title">Action</div>
+          <div class="task-table">
+                <el-table :data="currentIssue.action" :row-class-name="rowClassName"  style="background-color: transparent;" >
+                    <el-table-column label="Time" prop="time"></el-table-column>
+                    <el-table-column label="Processor" prop="processor"></el-table-column>
+                    <el-table-column label="type" prop="action_type"></el-table-column>
+                    <el-table-column label="Spend Time" prop="spend_time"></el-table-column>
+                    <el-table-column label="comment" prop="comment"></el-table-column>
+                </el-table>
+            </div>
+          <el-button @click="clickBackToIssueList" class="done-button">Done</el-button>
+        </div>
       </div>
       <div class="panel-bottom">
 
@@ -83,109 +118,90 @@
                 </el-table>
             </div>
         </div>
-        <div class="plan task-item" v-if="isShowCaseCommit && isShowTaskList===false">
-            <div style="margin-bottom: 1.85vh">{{caseName}}</div>
-            <el-row :gutter="20">
-                <el-col :span=12>
-                    <el-select v-model="selectedOption" placeholder="请选择" class="select-container">
-                        <el-option
-                        v-for="option in options"
-                        :key="option.value"
-                        :label="option.label"
-                        :value="option.value"
-                        ></el-option>
-                    </el-select>
-                </el-col>
-                <el-col :span=12>
-                    <el-select v-model="selectedOption" placeholder="请选择"  class="select-container">
-                        <el-option
-                        v-for="option in options"
-                        :key="option.value"
-                        :label="option.label"
-                        :value="option.value"
-                        ></el-option>
-                    </el-select>
-                </el-col>
-            </el-row>
-            <el-row :gutter="20">
-                <el-col :span=12>
-                    <el-select v-model="selectedOption" placeholder="请选择" class="select-container">
-                        <el-option
-                        v-for="option in options"
-                        :key="option.value"
-                        :label="option.label"
-                        :value="option.value"
-                        ></el-option>
-                    </el-select>
-                </el-col>
-                <el-col :span=12>
-                    <el-select v-model="selectedOption" placeholder="请选择"  class="select-container">
-                        <el-option
-                        v-for="option in options"
-                        :key="option.value"
-                        :label="option.label"
-                        :value="option.value"
-                        ></el-option>
-                    </el-select>
-                </el-col>
-            </el-row>
-            <el-row :gutter="20">
-                <el-col :span=12>
-                    <el-select v-model="selectedOption" placeholder="请选择" class="select-container">
-                        <el-option
-                        v-for="option in options"
-                        :key="option.value"
-                        :label="option.label"
-                        :value="option.value"
-                        ></el-option>
-                    </el-select>
-                </el-col>
-            </el-row>
+        <div class="plan task-item case-submit" v-if="isShowCaseCommit && isShowTaskList===false">
+          <div class="go-back">
+            <div class="el-icon-arrow-left" @click="clickBackToCaseList"></div>
+            <div>{{ caseName }}</div>
+          </div>
+          <div class="control-panel">
+            <el-col :span=12>
+              <el-select v-model="resultValue" placeholder="Result" class="select-container">
+                <el-option
+                v-for="option in resultOptions"
+                :key="option.value"
+                :label="option.label"
+                :value="option.value"
+                ></el-option>
+            </el-select>
+            </el-col>
+            <el-col :span=12 v-show="resultValue == 'tb'">
+                <el-select v-model="typeValue" placeholder="TB_Type"  class="select-container">
+                    <el-option
+                    v-for="option in TBTypeOptions"
+                    :key="option.value"
+                    :label="option.label"
+                    :value="option.value"
+                    ></el-option>
+                </el-select>
+            </el-col>
+            <el-col :span=12>
+                <el-select v-model="carlineValue" placeholder="Testing Carline" class="select-container">
+                    <el-option
+                    v-for="option in carlineOptions"
+                    :key="option.value"
+                    :label="option.label"
+                    :value="option.value"
+                    ></el-option>
+                </el-select>
+            </el-col>
+            <el-col :span=12>
+                <el-select v-model="variantValue" placeholder="Testing Variant"  class="select-container">
+                    <el-option
+                    v-for="option in variantOptions"
+                    :key="option.value"
+                    :label="option.label"
+                    :value="option.value"
+                    ></el-option>
+                </el-select>
+            </el-col>
+            <el-col :span=12 v-show="resultValue == 'fail'">
+                <el-input v-model="linkValue" placeholder="Ticket Link" class="select-container">
+                </el-input>
+            </el-col>
+          </div>
             <div class="area-container">
-                <el-textarea
-                placeholder="请输入内容"
-                ></el-textarea>
+                <el-input 
+                type="textarea"
+                :rows="20"
+                placeholder="Comment"
+                v-model="comment"
+                ></el-input>
             </div>
-            <el-button class="cancel-button">Cancel</el-button>
-            <el-button class="done-button">Done</el-button>
+            <el-button class="cancel-button" @click="clickBackToCaseList">Cancel</el-button>
+            <el-button class="done-button" @click="doManualCase">Done</el-button>
         </div>
         <div class="case task-item" v-if="isShowCaseDetail && isShowTaskList===false">
           <div class="go-back">
-              <div class="el-icon-arrow-left" @click="clickBackToPlan"></div>
-              <div>{{ caseName }}</div>
-            </div>
-            <div class="task-title">Precondition</div>
-            <!--<div class="task-content">{{caseActive}}</div>
-            <div class="task-title">{{caseFunction}}</div>-->
-            <div class="task-content">{{caseProject}}</div>
-            <div class="task-title">Action</div>
-            <div class="task-content">{{caseFunction}}</div>
-            <div class="task-title">Expectation</div>
-            <div class="task-content">{{caseSubFunction}}</div>
-            <div class="task-title">Market</div>
-            <div class="task-content">{{caseMarket}}</div>
-            <div class="task-title">Language</div>
-            <div class="task-content">{{caseLanguage}}</div>
-                <!--<div>1.Click Global Search App Fromapp Grid</div>
-                <div>2.tap global seaech search tif</div>
-                <div>3.switch to hwt mode and freehwr input character</div>
-                <div>4.tap delete button5.long press delete button</div>-->
-            
-            <!--<div class="task-title">SubFunction</div>
-            <div class="task-content">
-                <div>1.click global seaech app fromapp grid</div>
-                <div>2.tap global seaech search tif</div>
-                <div>3.switch to hwt mode and freehwr input character</div>
-                <div>4.tap delete button5.long press delete button</div>
-            </div>
-            <div class="task-title">Market</div>
-            <div class="task-content">CN</div>
-            <div class="task-title">Langunage</div>
-            <div class="task-content">CN</div>-->
-            <el-button class="done-button">Done</el-button>
+            <div class="el-icon-arrow-left" @click="clickBackToPlan"></div>
+            <div>{{ caseName }}</div>
+          </div>
+          <div class="task-title">Precondition</div>
+          <!--<div class="task-content">{{caseActive}}</div>
+          <div class="task-title">{{caseFunction}}</div>-->
+          <div class="task-content">{{caseProject}}</div>
+          <div class="task-title">Action</div>
+          <div class="task-content">{{caseFunction}}</div>
+          <div class="task-title">Expectation</div>
+          <div class="task-content">{{caseSubFunction}}</div>
+          <div class="task-title">Market</div>
+          <div class="task-content">{{caseMarket}}</div>
+          <div class="task-title">Language</div>
+          <div class="task-content">{{caseLanguage}}</div>
+          <el-button @click="submitManualCase" class="done-button">Done</el-button>
         </div>
+        <div></div>
       </div>
-      <div class="panel-bottom">
+      <div class="panel-bottom" v-show="isShowTaskList">
         <div class="task-left-bottom-btn">+</div>
       </div>
     </div>
@@ -193,6 +209,7 @@
 </template>
 
 <script>
+import { mapState } from 'vuex';
 export default {
   props: {
     tabs: {
@@ -229,12 +246,14 @@ export default {
     tabClass: {
       type: String
     },
+    currentIssue: Object,
     isShowTaskList: Boolean,
     isShowPlanList: Boolean,
     isShowCaseList: Boolean,
     isShowAutoCaseList: Boolean,
     isShowCaseDetail: Boolean,
     isShowCaseCommit: Boolean,
+    isShowIssueDetail: Boolean,
     taskName: String,
     planList: Array,
     planName: String,
@@ -254,13 +273,24 @@ export default {
     selectRowPlan: Function,
     selectRowCase: Function,
     isShowIssueList: Boolean,
-    clickBackToPlan: Function
-
+    clickBackToPlan: Function,
+    submitManualCase: Function,
+    clickBackToCaseList: Function,
+    clickBackToIssueList: Function
   },
   data() {
     return {
       activeTab: 0,
       rowClassName: '',
+      resultValue: '',
+      projectValue: '',
+      carlineValue: '',
+      variantValue: '',
+      clusterValue: '',
+      marketValue: '',
+      typeValue: '',
+      linkValue: '',
+      comment: ''
     };
   },
   computed: {
@@ -269,13 +299,42 @@ export default {
     },
     dots() {
       return this.tabs.map((_, index) => index);
-    }
+    },
+    ...mapState({
+      projectOptions(state) {
+        return state.common.projectOptions
+      },
+      carlineOptions(state) {
+        return state.common.carlineOptions
+      },
+      variantOptions(state) {
+        return state.common.variantOptions
+      },
+      clusterOptions(state) {
+        return state.common.clusterOptions
+      },
+      marketOptions(state) {
+        return state.common.marketOptions
+      },
+      resultOptions(state) {
+        return state.common.resultOptions
+      },
+      TBTypeOptions(state) {
+        return state.common.TBTypeOptions
+      }
+    })
   },
   methods: {
     changeTab(index) {
       console.log('tab 切换 index', index);
       this.activeTab = index;
     },
+    doManualCase() {
+
+    },
+    cancelManualCase() {
+
+    }
   }
 };
 </script>
@@ -637,11 +696,12 @@ export default {
   margin-bottom: 20px;
 }
 
-.done-button {
+
+
+.cancel-button,.done-button {
   width: 11.6vw;
   height: 4.25vh;
   line-height: 4.25vh;
-  background: linear-gradient(180deg, #83cbfb 0%, #2e74b2 100%);
   border-radius: 67px 67px 67px 67px;
   opacity: 1;
   border: 1px solid rgba(255, 255, 255, 0.4);
@@ -649,7 +709,70 @@ export default {
   padding: 0;
   position: absolute;
   bottom: 1.75vh;
+}
+
+.cancel-button {
+  background: rgba(255,255,255,0.5);
+  left: 15px;
+}
+
+.done-button {
+  background: linear-gradient(180deg, #83cbfb 0%, #2e74b2 100%);
   right: 15px;
 }
 
+</style>
+<style lang="less">
+.case-submit {
+  color: #fff;
+  .el-select input.el-input__inner{
+    border-radius: 30px !important;
+    padding-left: 5px;
+    background-color: transparent;
+    height: 30px;
+    font-size: 12px;
+    color: #fff !important;
+  }
+  .el-select-dropdown__empty {
+    background-color: #000;
+    color: #fff;
+  }
+  .el-table .el-table__cell{
+    font-size: 16px;
+  }
+  .el-table__row.row-class {
+    height: 68px !important;
+    border-bottom: 1px solid #fff;
+  }
+  .el-select {
+      width: 90%;
+      // margin-left: 5%;
+      border-radius: 30px;
+      border: 1px solid #fff;
+      height: 30px;
+      margin-bottom: 10px;
+  }
+  .select-container.el-input {
+    width: 90%;
+    // margin-left: 5%;
+    border-radius: 30px;
+    border: 1px solid #fff;
+    background-color: transparent;
+    height: 30px;
+    margin-bottom: 10px;
+  }
+  .el-input__inner {
+    width: 100%;
+    border: 0 none;
+    padding: 0 5px;
+    height: 30px;
+    background-color: transparent;
+  }
+  .el-textarea__inner, .el-textarea {
+    border-radius: 30px;
+    background-color: transparent;
+    color: #fff;
+    outline: none;
+  }
+}
 </style>

+ 3 - 1
src/store/index.js

@@ -3,6 +3,7 @@ import taskModule from "./modules/task/index.js";
 import planModule from "./modules/plan/index.js";
 import caseModule from "./modules/case/index.js";
 import issueModule from "./modules/issue/index.js"
+import commonModule from "./modules/common/index.js"
 
 export default {
   modules: {
@@ -10,6 +11,7 @@ export default {
     taskList: taskModule,
     planList: planModule,
     caseList: caseModule,
-    issueList: issueModule
+    issueList: issueModule,
+    common: commonModule
   },
 }

+ 12 - 0
src/store/modules/common/actions.js

@@ -0,0 +1,12 @@
+import * as commonApi from "../../../api/common.js";
+
+export default {
+  async fetchOptionList({ commit }, data) {
+    try {
+      let optionList = await commonApi.fetchOptionList(data)
+      commit("setOptionList", optionList.data.data);
+    } catch (err) {
+      console.log("error", "服务异常", 1000);
+    }
+  }
+};

+ 23 - 0
src/store/modules/common/getters.js

@@ -0,0 +1,23 @@
+export default {
+  getProjectOptions(state) {
+    return state.projectOptions
+  },
+  getCarlineOptions(state) {
+    return state.carlineOptions
+  },
+  getVariantOptions(state) {
+    return state.variantOptions
+  },
+  getClusterOptions(state) {
+    return state.clusterOptions
+  },
+  getMarketOptions(state) {
+    return state.marketOptions
+  },
+  getResultOptions(state) {
+    return state.resultOptions
+  },
+  getTBTypeOptions(state) {
+    return state.TBTypeOptions
+  }
+};

+ 25 - 0
src/store/modules/common/index.js

@@ -0,0 +1,25 @@
+import mutations from "./mutations.js";
+import actions from "./actions.js";
+import getters from "./getters.js";
+export default {
+  namespaced: true,
+  state() {
+    return {
+      benchMap: {},
+      benchList: [],
+      filterBenchList: [],
+      benchImgList:[],
+      statusOptions:[],
+      projectOptions:[],
+      carlineOptions:[],
+      variantOptions:[],
+      clusterOptions:[],
+      marketOptions:[],
+      resultOptions: [],
+      TBTypeOptions: []
+    };
+  },
+  mutations,
+  actions,
+  getters,
+};

+ 70 - 0
src/store/modules/common/mutations.js

@@ -0,0 +1,70 @@
+export default {
+  setOptionList(state, options) {
+    let cluster = options.mantis_cluster;
+    let carline = options.mantis_carline;
+    let market = options.mantis_market;
+    let result = options.mantis_result;
+    let type = options.mantis_tb_type;
+    let variant = options.mantis_variant;
+
+    for(let key in cluster) {
+      let value = cluster[key];
+      if (!state.clusterOptions.some(s => s.value == value)) {
+        state.clusterOptions.push({
+          value: value,
+          label: value
+        })
+      }
+    }
+
+    for(let key in variant) {
+      let value = variant[key];
+      if (!state.variantOptions.some(s => s.value == value)) {
+        state.variantOptions.push({
+          value: value,
+          label: value
+        })
+      }
+    }
+
+    for(let key in carline) {
+      let value = carline[key];
+      if (!state.carlineOptions.some(s => s.value == value)) {
+        state.carlineOptions.push({
+          value: value,
+          label: value
+        })
+      }
+    }
+
+    for(let key in market) {
+      let value = market[key];
+      if (!state.marketOptions.some(s => s.value == value)) {
+        state.marketOptions.push({
+          value: value,
+          label: value
+        })
+      }
+    }
+
+    for(let key in result) {
+      let value = result[key];
+      if (!state.resultOptions.some(s => s.value == value)) {
+        state.resultOptions.push({
+          value: value,
+          label: value
+        })
+      }
+    }
+
+    for(let key in type) {
+      let value = type[key];
+      if (!state.TBTypeOptions.some(s => s.value == value)) {
+        state.TBTypeOptions.push({
+          value: value,
+          label: value
+        })
+      }
+    }
+  },
+};

+ 33 - 3
src/views/ordinaryPage/index.vue

@@ -225,7 +225,8 @@
             :clickBackToPlanList="clickBackToPlanList" :selectRowPlan="selectRowPlan" :caseProject="caseProject" 
             :caseActive="caseActive" :caseFunction="caseFunction" caseContent="caseContent" 
             :caseSubFunction="caseSubFunction" :caseMarket="caseMarket" :caseLanguage="caseLanguage" v-if="renderBenchList" 
-            :selectRowCase="selectRowCase" :clickBackToAutoPlanList="clickBackToAutoPlanList" :tabClass="tabClass" :planBack="planBack" :clickBackToPlan="clickBackToPlan"></TabList>
+            :selectRowCase="selectRowCase" :clickBackToAutoPlanList="clickBackToAutoPlanList" :tabClass="tabClass" :planBack="planBack" :clickBackToPlan="clickBackToPlan" :submitManualCase="submitManualCase" :clickBackToCaseList="clickBackToCaseList"
+            :isShowIssueList="isShowIssueList" :isShowIssueDetail="isShowIssueDetail" :currentIssue="currentIssue"></TabList>
         </div>
 
         <bench-detail :is-detail-visible="isDetailVisible" :is-remote-btn-visible="isRemoteBtnVisible" :closeDetail="closeDetail" ref="benchdetail" :bench="currentBench"/>
@@ -262,6 +263,8 @@
                 isShowAutoCaseList: false,
                 isShowCaseDetail: false,
                 isShowCaseCommit: false,
+                isShowIssueList: true,
+                isShowIssueDetail: false,
                 taskName: '',
                 planName: '',
                 caseName: '',
@@ -283,6 +286,8 @@
                 selectedBenchList: [],
                 renderBenchList: true,
                 filters: [],
+                currentCase: null,
+                currentIssue: null,
                 tabs: [
                     {
                     title: 'Bench',
@@ -409,6 +414,8 @@
             window.handleListClick = this.handleListClick;
             window.handleClickTask = this.handleClickTask.bind(this)
             window.selectRowPlan = this.selectRowPlan.bind(this)
+            window.selectRowCase = this.selectRowCase.bind(this);
+            window.selectRowIssue = this.selectRowIssue.bind(this)
             window.handleListDbClick = this.handleListDbClick;
             window.showBenchPos = this.showBenchPos;
             let that = this;
@@ -481,6 +488,19 @@
             this.isShowTaskList = true;
             // this.planList = [];
           },
+          clickBackToCaseList() {
+            this.isShowCaseCommit = false;
+            this.isShowCaseList = true;
+          },
+          submitManualCase(item) {
+            console.log(this.currentCase, 'manualcasedetail============');
+            this.isShowCaseCommit = true;
+            this.isShowCaseDetail = false;
+          },
+          clickBackToIssueList() {
+            this.isShowIssueList = true;
+            this.isShowIssueDetail = false;
+          },
           clickBackToPlan() {
             this.isShowCaseDetail = false;
             if (sessionStorage.getItem('autoCase') == 0) {
@@ -506,8 +526,10 @@
               })
               this.isShowAutoCaseList = true;
               sessionStorage.setItem('autoCase', 1)
+              
             }
-            
+            this.$store.dispatch('common/fetchOptionList');
+
             this.isShowPlanList = false;
             
             this.planName = name;
@@ -524,9 +546,17 @@
             this.caseSubFunction = row.expectation;
             this.caseMarket = row.market;
             this.caseLanguage = row.language;
+            this.currentCase = row;
             
             //this.caseContent =,
           },
+          selectRowIssue(id) {
+            let row = this.issueList.find(i => i.id == id);
+            this.isShowIssueList = false;
+            this.isShowIssueDetail = true;
+            this.currentIssue = row;
+            console.log(row, '==============issue============')
+          },
           clickBackToPlanList()
           {
             this.isShowPlanList = true;
@@ -774,7 +804,7 @@
                 </div>`
             },
             issueRender(item) {
-              return `<div class="item-box" style="display:flex;align-items: center;justify-content: space-between;" onClick="handleClickIssue('${item.uuid || item.id}')">
+              return `<div class="item-box" style="display:flex;align-items: center;justify-content: space-between;" onClick="selectRowIssue('${item.uuid || item.id}')">
                     <div class="left">
                         <div style="display:flex;align-items: center;">
                           <div class="item-title">${item.ticket_title}</div>