8 changed files with 365 additions and 97 deletions
-
7src/store/getters.js
-
8src/store/index.js
-
29src/store/modules/projectInfo.js
-
95src/store/modules/xm.js
-
29src/store/modules/xmIteration.js
-
29src/store/modules/xmProduct.js
-
69src/views/xm/core/xmTestCasedb/index.vue
-
194src/views/xm/core/xmTestCasedb/top-nav.vue
@ -1,29 +0,0 @@ |
|||
|
|||
var key='xm-project-info'; |
|||
const projectInfo = { |
|||
state: { |
|||
projectInfo: null, |
|||
}, |
|||
mutations: { |
|||
SET_PROJECT_INFO: (state, projectInfo) => { |
|||
state.projectInfo=projectInfo |
|||
if(projectInfo && projectInfo!='null' && projectInfo!='undefined' ){ |
|||
sessionStorage.setItem(key,JSON.stringify(projectInfo)) |
|||
}else{ |
|||
sessionStorage.removeItem(key) |
|||
} |
|||
|
|||
} |
|||
}, |
|||
actions: { |
|||
setProjectInfo({ commit }, projectInfo) { |
|||
commit('SET_PROJECT_INFO', projectInfo) |
|||
} |
|||
} |
|||
} |
|||
var projectStr=sessionStorage.getItem(key) |
|||
if(projectStr && projectStr!='null' && projectStr!='undefined' ){ |
|||
projectInfo.state.projectInfo=JSON.parse(projectStr) |
|||
} |
|||
|
|||
export default projectInfo |
|||
@ -0,0 +1,95 @@ |
|||
|
|||
var iterationKey='xm-iteration-store'; |
|||
var productKey='xm-product-store'; |
|||
var projectKey='xm-project-info-store'; |
|||
var testCasedbKey='xm-test-casedb-store'; |
|||
|
|||
const xm = { |
|||
state: { |
|||
xmIteration: null, |
|||
xmProduct:null, |
|||
projectInfo:null, |
|||
testCasedb:null, |
|||
}, |
|||
mutations: { |
|||
SET_XM_ITERATION: (state, xmIteration) => { |
|||
state.xmIteration=xmIteration |
|||
if(xmIteration && xmIteration!='null' && xmIteration!='undefined' ){ |
|||
sessionStorage.setItem(iterationKey,JSON.stringify(xmIteration)) |
|||
}else{ |
|||
sessionStorage.removeItem(iterationKey) |
|||
} |
|||
|
|||
}, |
|||
|
|||
SET_XM_PRODUCT: (state, xmProduct) => { |
|||
state.xmProduct=xmProduct |
|||
if(xmProduct && xmProduct!='null' && xmProduct!='undefined' ){ |
|||
sessionStorage.setItem(productKey,JSON.stringify(xmProduct)) |
|||
}else{ |
|||
sessionStorage.removeItem(productKey) |
|||
} |
|||
|
|||
}, |
|||
|
|||
|
|||
SET_PROJECT_INFO: (state, projectInfo) => { |
|||
state.projectInfo=projectInfo |
|||
if(projectInfo && projectInfo!='null' && projectInfo!='undefined' ){ |
|||
sessionStorage.setItem(projectKey,JSON.stringify(projectInfo)) |
|||
}else{ |
|||
sessionStorage.removeItem(projectKey) |
|||
} |
|||
|
|||
}, |
|||
|
|||
SET_TEST_CASEDB: (state, testCasedb) => { |
|||
state.testCasedb=testCasedb |
|||
if(testCasedb && testCasedb!='null' && testCasedb!='undefined' ){ |
|||
sessionStorage.setItem(testCasedbKey,JSON.stringify(testCasedb)) |
|||
}else{ |
|||
sessionStorage.removeItem(testCasedbKey) |
|||
} |
|||
|
|||
}, |
|||
|
|||
}, |
|||
actions: { |
|||
setXmIteration({ commit }, xmIteration) { |
|||
commit('SET_XM_ITERATION', xmIteration) |
|||
}, |
|||
|
|||
setXmProduct({ commit }, xmProduct) { |
|||
commit('SET_XM_PRODUCT', xmProduct) |
|||
}, |
|||
|
|||
setProjectInfo({ commit }, projectInfo) { |
|||
commit('SET_PROJECT_INFO', projectInfo) |
|||
}, |
|||
|
|||
setTestCasedb({ commit }, testCasedb) { |
|||
commit('SET_TEST_CASEDB', testCasedb) |
|||
} |
|||
} |
|||
} |
|||
var iterationStr=sessionStorage.getItem(iterationKey) |
|||
if(iterationStr && iterationStr!='null' && iterationStr!='undefined' ){ |
|||
xm.state.xmIteration=JSON.parse(iterationStr) |
|||
} |
|||
|
|||
var xmProductStr=sessionStorage.getItem(productKey) |
|||
if(xmProductStr && xmProductStr!='null' && xmProductStr!='undefined' ){ |
|||
xm.state.xmProduct=JSON.parse(xmProductStr) |
|||
} |
|||
|
|||
var projectStr=sessionStorage.getItem(projectKey) |
|||
if(projectStr && projectStr!='null' && projectStr!='undefined' ){ |
|||
xm.state.projectInfo=JSON.parse(projectStr) |
|||
} |
|||
|
|||
var testCasedbStr=sessionStorage.getItem(testCasedbKey) |
|||
if(testCasedbStr && testCasedbStr!='null' && testCasedbStr!='undefined' ){ |
|||
xm.state.testCasedb=JSON.parse(testCasedbStr) |
|||
} |
|||
|
|||
export default xm |
|||
@ -1,29 +0,0 @@ |
|||
|
|||
var key='xm-iteration'; |
|||
const xmIteration = { |
|||
state: { |
|||
xmIteration: null, |
|||
}, |
|||
mutations: { |
|||
SET_XM_ITERATION: (state, xmIteration) => { |
|||
state.xmIteration=xmIteration |
|||
if(xmIteration && xmIteration!='null' && xmIteration!='undefined' ){ |
|||
sessionStorage.setItem(key,JSON.stringify(xmIteration)) |
|||
}else{ |
|||
sessionStorage.removeItem(key) |
|||
} |
|||
|
|||
} |
|||
}, |
|||
actions: { |
|||
setXmIteration({ commit }, xmIteration) { |
|||
commit('SET_XM_ITERATION', xmIteration) |
|||
} |
|||
} |
|||
} |
|||
var iterationStr=sessionStorage.getItem(key) |
|||
if(iterationStr && iterationStr!='null' && iterationStr!='undefined' ){ |
|||
xmIteration.state.xmIteration=JSON.parse(iterationStr) |
|||
} |
|||
|
|||
export default xmIteration |
|||
@ -1,29 +0,0 @@ |
|||
|
|||
var key='xm-product'; |
|||
const xmProduct = { |
|||
state: { |
|||
xmProduct: null, |
|||
}, |
|||
mutations: { |
|||
SET_XM_PRODUCT: (state, xmProduct) => { |
|||
state.xmProduct=xmProduct |
|||
if(xmProduct && xmProduct!='null' && xmProduct!='undefined' ){ |
|||
sessionStorage.setItem(key,JSON.stringify(xmProduct)) |
|||
}else{ |
|||
sessionStorage.removeItem(key) |
|||
} |
|||
|
|||
} |
|||
}, |
|||
actions: { |
|||
setXmProduct({ commit }, xmProduct) { |
|||
commit('SET_XM_PRODUCT', xmProduct) |
|||
} |
|||
} |
|||
} |
|||
var xmProductStr=sessionStorage.getItem(key) |
|||
if(xmProductStr && xmProductStr!='null' && xmProductStr!='undefined' ){ |
|||
xmProduct.state.xmProduct=JSON.parse(xmProductStr) |
|||
} |
|||
|
|||
export default xmProduct |
|||
@ -0,0 +1,69 @@ |
|||
<template> |
|||
<section> |
|||
<top-nav v-if="testCasedb&&testCasedb.id"/> |
|||
<keep-alive><router-view v-if="testCasedb && testCasedb.id"></router-view></keep-alive> |
|||
</section> |
|||
</template> |
|||
|
|||
<script> |
|||
import util from "@/common/js/util"; //全局公共库 |
|||
//import Sticky from '@/components/Sticky' // 粘性header组件 |
|||
//import { initSimpleDicts } from '@/api/mdp/meta/item';//下拉框数据查询 |
|||
import { mapGetters } from "vuex"; |
|||
import topNav from './top-nav.vue' |
|||
import store from '@/store' |
|||
import { listXmTestCasedb } from '@/api/xm/core/xmTestCasedb'; |
|||
|
|||
export default { |
|||
computed: { |
|||
...mapGetters(["userInfo", "roles","testCasedb"]), |
|||
}, |
|||
watch: {}, |
|||
data() { |
|||
return { |
|||
}; |
|||
}, //end data |
|||
methods: { |
|||
|
|||
}, //end methods |
|||
components: { |
|||
topNav |
|||
//在下面添加其它组件 |
|||
}, |
|||
mounted() { |
|||
|
|||
if(!this.$route.query.casedbId){ |
|||
this.$message.error("地址不合规") |
|||
this.$route.back(-1) |
|||
} |
|||
if(!this.testCasedb||this.testCasedb.id!=this.$route.query.casedbId){ |
|||
listXmTestCasedb({id:this.$route.query.casedbId}).then(res=>{ |
|||
var tips = res.data.tips; |
|||
if(tips.isOk ){ |
|||
if( res.data.data.length==1){ |
|||
store.dispatch('setTestCasedb',res.data.data[0]) |
|||
}else{ |
|||
this.$message.error("测试用例库不存在,请确保测试用例库编号正确") |
|||
this.$router.push({ |
|||
path:'/xm/core/xmTestCasedb/XmTestCasedbMng' |
|||
}) |
|||
} |
|||
|
|||
}else{ |
|||
this.$message.error(tips.msg) |
|||
this.$router.push({ |
|||
path:'/xm/core/xmTestCasedb/XmTestCasedbMng' |
|||
}) |
|||
} |
|||
}) |
|||
} |
|||
}, |
|||
beforeDestroy(){ |
|||
store.dispatch('setTestCasedb',null) |
|||
} |
|||
}; |
|||
</script> |
|||
|
|||
<style rel="stylesheet/scss" lang="scss" scoped> |
|||
|
|||
</style> |
|||
@ -0,0 +1,194 @@ |
|||
<template> |
|||
<section> |
|||
<el-row> |
|||
<el-menu |
|||
:default-active="infotype" |
|||
mode="horizontal" |
|||
@select="setInfotype" |
|||
class="menus" |
|||
background-color="rgb(48, 65, 86)" |
|||
text-color="rgb(191, 203, 217)" |
|||
active-text-color="#409eff" |
|||
:router="true" |
|||
> |
|||
|
|||
<el-menu-item :index="'/xm/core/test/overview?casedbId='+testCasedb.id"> |
|||
<span |
|||
slot="title" |
|||
style="font-size: 18px; color: #409eff" |
|||
class="hidden-md-and-down" |
|||
:title="testCasedb.name" |
|||
> |
|||
<font v-if="testCasedb.name.length >= 15"> |
|||
<strong> |
|||
|
|||
<el-avatar class="top-icon" icon="el-icon-s-opportunity" style="background-color:#409EFF"></el-avatar> {{ testCasedb.name.substring(0, 15) }}</strong |
|||
></font |
|||
> |
|||
<div v-else> |
|||
|
|||
<font type="danger"> |
|||
<strong> <el-avatar class="top-icon" icon="el-icon-s-opportunity" style="background-color:#409EFF"></el-avatar> 产品: {{ testCasedb.name }}</strong></font |
|||
> |
|||
</div> |
|||
</span> |
|||
<span |
|||
slot="title" |
|||
style="color: #409eff" |
|||
class="hidden-lg-and-up" |
|||
:title="testCasedb.name" |
|||
> |
|||
<font v-if="testCasedb.name.length >= 15"> |
|||
<el-avatar class="top-icon" icon="el-icon-s-opportunity" style="background-color:#409EFF"></el-avatar> 产品: {{ testCasedb.name.substring(0, 15) }}</font |
|||
> |
|||
<font type="danger" v-else> |
|||
<el-avatar class="top-icon" icon="el-icon-s-opportunity" style="background-color:#409EFF"></el-avatar> 产品: {{ testCasedb.name }}</font |
|||
> |
|||
</span> |
|||
</el-menu-item> |
|||
<el-menu-item :index="'/xm/core/product/project?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-odometer"></i>项目</span> |
|||
</el-menu-item> |
|||
<el-menu-item label="需求" :index="'/xm/core/product/menu?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-document"></i>需求</span> |
|||
</el-menu-item> |
|||
<el-menu-item :index="'/xm/core/product/iteration?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-connection"></i>迭代</span> |
|||
</el-menu-item> |
|||
|
|||
<el-menu-item :index="'/xm/core/product/plan?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-time"></i>计划</span> |
|||
</el-menu-item> |
|||
|
|||
<el-menu-item :index="'/xm/core/product/task?productId='+testCasedb.id" class="hidden-md-and-down"> |
|||
<span slot="title"><i class="el-icon-s-operation"></i>任务</span> |
|||
</el-menu-item> |
|||
<el-menu-item :index="'/xm/core/product/question?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-question"></i>缺陷</span> |
|||
</el-menu-item> |
|||
<el-menu-item :index="'/xm/core/product/group?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-user-solid"></i>团队</span> |
|||
</el-menu-item> |
|||
<el-submenu index="caiwu" class="hidden-sm-and-down"> |
|||
<template slot="title"><i class="el-icon-coin"></i>财务</template> |
|||
<el-menu-item :index="'/xm/core/product/contract?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-s-data"></i>合同管理</span> |
|||
</el-menu-item> |
|||
<el-menu-item :index="'/xm/core/product/budget?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-coin"></i>预算</span> |
|||
</el-menu-item> |
|||
<el-menu-item :index="'/xm/core/product/cost?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-coin"></i>费用</span> |
|||
</el-menu-item> |
|||
</el-submenu> |
|||
<el-menu-item :index="'/xm/core/product/report?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-s-data"></i>效能</span> |
|||
</el-menu-item> |
|||
<el-submenu index="zhishi" class="hidden-md-and-down"> |
|||
<template slot="title">知识</template> |
|||
<el-menu-item :index="'/xm/core/product/file?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-document"></i>文档</span> |
|||
</el-menu-item> |
|||
<el-menu-item :index="'/xm/core/product/env?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-setting"></i>环境清单</span> |
|||
</el-menu-item> |
|||
<el-menu-item :index="'/xm/core/product/record?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-edit-outline"></i>日志</span> |
|||
</el-menu-item> |
|||
</el-submenu> |
|||
<el-submenu index="更多"> |
|||
<template slot="title">更多 </template> |
|||
<el-menu-item :index="'/xm/core/product/workloadDay?productId='+testCasedb.id"> |
|||
<span slot="title" |
|||
><i class="el-icon-video-camera"></i>每日工时</span |
|||
> |
|||
</el-menu-item> |
|||
<el-menu-item :index="'/xm/core/product/workloadMonth?productId='+testCasedb.id"> |
|||
<span slot="title" |
|||
><i class="el-icon-video-camera"></i>每月工时</span |
|||
> |
|||
</el-menu-item> |
|||
<el-menu-item :index="'/xm/core/product/env?productId='+testCasedb.id"> |
|||
<span slot="title"><i class="el-icon-setting"></i>环境清单</span> |
|||
</el-menu-item> |
|||
<el-menu-item index="/forum"> |
|||
<span slot="title"><i class="el-icon-date"></i>论坛</span> |
|||
</el-menu-item> |
|||
<el-menu-item index="/im"> |
|||
<span slot="title"><i class="el-icon-date"></i>即聊</span> |
|||
</el-menu-item> |
|||
<el-menu-item index="/helpCenter"> |
|||
<span slot="title"><i class="el-icon-date"></i>客服</span> |
|||
</el-menu-item> |
|||
<el-menu-item index="/xm/core/testCasedb/XmProductMng" > |
|||
<span slot="title" |
|||
><i class="el-icon-back"></i>回到产品列表页</span |
|||
> |
|||
</el-menu-item> |
|||
<el-menu-item index="/"> |
|||
<span slot="title" |
|||
><i class="el-icon-s-home"></i>首页</span |
|||
> |
|||
</el-menu-item> |
|||
</el-submenu> |
|||
</el-menu> |
|||
</el-row> |
|||
</section> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
|
|||
import { mapGetters } from 'vuex' |
|||
|
|||
export default { |
|||
props: ["visible"], |
|||
computed: { |
|||
...mapGetters(["userInfo", "roles","testCasedb"]), |
|||
}, |
|||
watch: { |
|||
$route:{ |
|||
handler(newVal,oldValu){ |
|||
this.infotype=newVal.fullPath |
|||
}, |
|||
deep:true, |
|||
immediate:true, |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
infotype:'', |
|||
}; |
|||
}, //end data |
|||
methods: { |
|||
setInfotype(infotype) { |
|||
this.infotype = infotype; |
|||
}, |
|||
|
|||
}, //end methods |
|||
components: { |
|||
|
|||
//在下面添加其它组件 |
|||
}, |
|||
mounted() { |
|||
this.infotype=this.$route.fullPath |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style rel="stylesheet/scss" lang="scss" scoped> |
|||
.menus { |
|||
.el-menu-item { |
|||
padding-left: 0px !important; |
|||
} |
|||
} |
|||
/* 超过宽度则用...代替 */ |
|||
.truncate { |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
white-space: nowrap; |
|||
} |
|||
.step-btn{ |
|||
margin-left:0px;margin-bottom: 5px; |
|||
} |
|||
</style> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue