调整应用菜单
This commit is contained in:
parent
89fc3ecf74
commit
7eae087cf4
@ -63,11 +63,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed, ref, shallowReactive } from 'vue';
|
import { computed, ref } from 'vue';
|
||||||
import HeaderNav from './components/HeaderNav.vue';
|
import HeaderNav from './components/HeaderNav.vue';
|
||||||
import { useRoute, useRouter } from 'vue-router';
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
import { useWindowSize } from '@vueuse/core'
|
import { useWindowSize } from '@vueuse/core'
|
||||||
import { IconApps, IconBranch, IconLock, IconSettings, IconTags } from '@arco-design/web-vue/es/icon';
|
|
||||||
import token from '@/storage/token'
|
import token from '@/storage/token'
|
||||||
import app from '@/storage/app'
|
import app from '@/storage/app'
|
||||||
import { watch } from 'vue';
|
import { watch } from 'vue';
|
||||||
@ -88,7 +87,7 @@ watch(width, (newWidth) => {
|
|||||||
}, { immediate: true });
|
}, { immediate: true });
|
||||||
|
|
||||||
const currentSelectMenuItem = computed(() => {
|
const currentSelectMenuItem = computed(() => {
|
||||||
return app.value.current_menu[app.value.current_system]?.menu_item || app.value.current_system
|
return app.value.system_menu.find(item => item.key === app.value.current_system)?.current_menu_item || app.value.current_system
|
||||||
})
|
})
|
||||||
|
|
||||||
const handleSystemChange = (system) => {
|
const handleSystemChange = (system) => {
|
||||||
@ -106,13 +105,13 @@ const handleSystemChange = (system) => {
|
|||||||
|
|
||||||
// 菜单被选中
|
// 菜单被选中
|
||||||
const handleMenuClick = (key) => {
|
const handleMenuClick = (key) => {
|
||||||
app.value.current_menu
|
app.value.system_menu.find(item => item.key === app.value.current_system).current_menu_item = key
|
||||||
console.log(key)
|
console.log(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 菜单项被选中
|
// 菜单项被选中
|
||||||
const handleMenuItemClick = (key) => {
|
const handleMenuItemClick = (key) => {
|
||||||
app.value.current_menu[app.value.current_system].menu_item = key
|
app.value.system_menu.find(item => item.key === app.value.current_system).current_menu_item = key
|
||||||
router.push({ name: key })
|
router.push({ name: key })
|
||||||
console.log(route)
|
console.log(route)
|
||||||
}
|
}
|
||||||
@ -134,52 +133,9 @@ const handleUserOption = (option) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const currentMenus = computed(() => {
|
const currentMenus = computed(() => {
|
||||||
return systemMenus[app.value.current_system]
|
return app.value.system_menu.find(item => item.key === app.value.current_system)?.menus || []
|
||||||
})
|
})
|
||||||
|
|
||||||
const systemMenus = shallowReactive({
|
|
||||||
ProjectSystem: [
|
|
||||||
{
|
|
||||||
key: 'ProjectList',
|
|
||||||
icon: IconLock,
|
|
||||||
title: '项目空间'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
DevelopSystem: [
|
|
||||||
{
|
|
||||||
key: 'AppPage',
|
|
||||||
icon: IconApps,
|
|
||||||
title: '应用管理'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: 'VersionIteration',
|
|
||||||
icon: IconTags,
|
|
||||||
title: '版本迭代'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: 'PipelineTemplate',
|
|
||||||
icon: IconSettings,
|
|
||||||
title: '流水线模板'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
ArtifactSystem: [
|
|
||||||
{
|
|
||||||
key: 'RegistryPage',
|
|
||||||
icon: IconTags,
|
|
||||||
title: '制品仓库'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: 'AssetPage',
|
|
||||||
icon: IconBranch,
|
|
||||||
title: '制品管理'
|
|
||||||
},
|
|
||||||
]
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue';
|
import { ref, computed } from 'vue';
|
||||||
import token from '@/storage/token'
|
import token from '@/storage/token'
|
||||||
import app from '@/storage/app'
|
import app from '@/storage/app'
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
@ -37,14 +37,13 @@ import { useRouter } from 'vue-router';
|
|||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const emit = defineEmits(['system-change', 'user-option-click']);
|
const emit = defineEmits(['system-change', 'user-option-click']);
|
||||||
|
|
||||||
const menuItems = ref([
|
const menuItems = computed(() => {
|
||||||
{ key: 'DashBoard', label: '工作台' },
|
const systemMenu = app.value.system_menu || []
|
||||||
{ key: 'ProjectSystem', label: '项目管理' },
|
return systemMenu.map(item => ({
|
||||||
{ key: 'DevelopSystem', label: '研发交付' },
|
key: item.key,
|
||||||
{ key: 'ArtifactSystem', label: '制品库' },
|
label: item.title,
|
||||||
{ key: '5', label: '测试中心' },
|
}))
|
||||||
{ key: '6', label: '运维中心' }
|
})
|
||||||
]);
|
|
||||||
|
|
||||||
const userOptions = ref([
|
const userOptions = ref([
|
||||||
{ key: 'profile', label: '个人中心', handler: () => emit('user-option-click', 'profile') },
|
{ key: 'profile', label: '个人中心', handler: () => emit('user-option-click', 'profile') },
|
||||||
|
@ -8,7 +8,7 @@ const app = createApp(App)
|
|||||||
import ArcoVue from '@arco-design/web-vue'
|
import ArcoVue from '@arco-design/web-vue'
|
||||||
import ArcoVueIcon from '@arco-design/web-vue/es/icon'
|
import ArcoVueIcon from '@arco-design/web-vue/es/icon'
|
||||||
import '@arco-design/web-vue/dist/arco.css'
|
import '@arco-design/web-vue/dist/arco.css'
|
||||||
app.use(ArcoVue)
|
app.use(ArcoVue,)
|
||||||
app.use(ArcoVueIcon)
|
app.use(ArcoVueIcon)
|
||||||
|
|
||||||
// 样式加载
|
// 样式加载
|
||||||
|
@ -7,12 +7,11 @@
|
|||||||
<template #icon><icon-plus /></template>
|
<template #icon><icon-plus /></template>
|
||||||
新建项目空间
|
新建项目空间
|
||||||
</a-button>
|
</a-button>
|
||||||
|
|
||||||
<a-input-search v-model="searchKey" placeholder="搜索项目名称/描述" @search="handleSearch" allow-clear
|
|
||||||
style="width: 300px" />
|
|
||||||
</a-space>
|
</a-space>
|
||||||
|
|
||||||
<a-space :size="18">
|
<a-space :size="18">
|
||||||
|
<a-input-search v-model="searchKey" placeholder="搜索项目名称/描述" @search="handleSearch" allow-clear
|
||||||
|
style="width: 300px" />
|
||||||
<a-select v-model="filterParams.status" placeholder="项目状态" style="width: 120px" allow-clear
|
<a-select v-model="filterParams.status" placeholder="项目状态" style="width: 120px" allow-clear
|
||||||
@change="handleSearch">
|
@change="handleSearch">
|
||||||
<a-option value="active">活跃</a-option>
|
<a-option value="active">活跃</a-option>
|
||||||
|
116
devcloud/web/src/pages/resource/ResourceSearch.vue
Normal file
116
devcloud/web/src/pages/resource/ResourceSearch.vue
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
<template>
|
||||||
|
<a-space direction="vertical" size="large" fill>
|
||||||
|
<div>
|
||||||
|
<span>OnlyCurrent: </span>
|
||||||
|
<a-switch v-model="rowSelection.onlyCurrent" />
|
||||||
|
</div>
|
||||||
|
<a-table row-key="name" :columns="columns" :data="data" :row-selection="rowSelection"
|
||||||
|
v-model:selectedKeys="selectedKeys" :pagination="pagination" />
|
||||||
|
</a-space>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { reactive, ref } from 'vue';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setup() {
|
||||||
|
const selectedKeys = ref(['Jane Doe', 'Alisa Ross']);
|
||||||
|
|
||||||
|
const rowSelection = reactive({
|
||||||
|
type: 'checkbox',
|
||||||
|
showCheckedAll: true,
|
||||||
|
onlyCurrent: false,
|
||||||
|
});
|
||||||
|
const pagination = { pageSize: 5 }
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
title: 'Name',
|
||||||
|
dataIndex: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Salary',
|
||||||
|
dataIndex: 'salary',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Address',
|
||||||
|
dataIndex: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Email',
|
||||||
|
dataIndex: 'email',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
const data = reactive([{
|
||||||
|
key: '1',
|
||||||
|
name: 'Jane Doe',
|
||||||
|
salary: 23000,
|
||||||
|
address: '32 Park Road, London',
|
||||||
|
email: 'jane.doe@example.com'
|
||||||
|
}, {
|
||||||
|
key: '2',
|
||||||
|
name: 'Alisa Ross',
|
||||||
|
salary: 25000,
|
||||||
|
address: '35 Park Road, London',
|
||||||
|
email: 'alisa.ross@example.com'
|
||||||
|
}, {
|
||||||
|
key: '3',
|
||||||
|
name: 'Kevin Sandra',
|
||||||
|
salary: 22000,
|
||||||
|
address: '31 Park Road, London',
|
||||||
|
email: 'kevin.sandra@example.com',
|
||||||
|
disabled: true
|
||||||
|
}, {
|
||||||
|
key: '4',
|
||||||
|
name: 'Ed Hellen',
|
||||||
|
salary: 17000,
|
||||||
|
address: '42 Park Road, London',
|
||||||
|
email: 'ed.hellen@example.com'
|
||||||
|
}, {
|
||||||
|
key: '5',
|
||||||
|
name: 'William Smith',
|
||||||
|
salary: 27000,
|
||||||
|
address: '62 Park Road, London',
|
||||||
|
email: 'william.smith@example.com'
|
||||||
|
}, {
|
||||||
|
key: '6',
|
||||||
|
name: 'Jane Doe 2',
|
||||||
|
salary: 15000,
|
||||||
|
address: '32 Park Road, London',
|
||||||
|
email: 'jane.doe@example.com'
|
||||||
|
}, {
|
||||||
|
key: '7',
|
||||||
|
name: 'Alisa Ross 2',
|
||||||
|
salary: 28000,
|
||||||
|
address: '35 Park Road, London',
|
||||||
|
email: 'alisa.ross@example.com'
|
||||||
|
}, {
|
||||||
|
key: '8',
|
||||||
|
name: 'Kevin Sandra 2',
|
||||||
|
salary: 26000,
|
||||||
|
address: '31 Park Road, London',
|
||||||
|
email: 'kevin.sandra@example.com',
|
||||||
|
}, {
|
||||||
|
key: '9',
|
||||||
|
name: 'Ed Hellen 2',
|
||||||
|
salary: 18000,
|
||||||
|
address: '42 Park Road, London',
|
||||||
|
email: 'ed.hellen@example.com'
|
||||||
|
}, {
|
||||||
|
key: '10',
|
||||||
|
name: 'William Smith 2',
|
||||||
|
salary: 12000,
|
||||||
|
address: '62 Park Road, London',
|
||||||
|
email: 'william.smith@example.com'
|
||||||
|
}]);
|
||||||
|
|
||||||
|
return {
|
||||||
|
rowSelection,
|
||||||
|
columns,
|
||||||
|
data,
|
||||||
|
selectedKeys,
|
||||||
|
pagination
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
@ -59,11 +59,31 @@ const router = createRouter({
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
// 资源管理
|
||||||
|
{
|
||||||
|
path: '/resource',
|
||||||
|
name: 'ResourceSystem',
|
||||||
|
redirect: { name: 'ResourceSearch' },
|
||||||
|
component: MenuLayout,
|
||||||
|
meta: {
|
||||||
|
title: '资源管理',
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'search',
|
||||||
|
name: 'ResourceSearch',
|
||||||
|
component: () => import('@/pages/resource/ResourceSearch.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '资源检索',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
// 研发交付
|
// 研发交付
|
||||||
{
|
{
|
||||||
path: '/develop',
|
path: '/develop',
|
||||||
name: 'DevelopSystem',
|
name: 'DevelopSystem',
|
||||||
redirect: { name: 'SprintPage' },
|
redirect: { name: 'AppPage' },
|
||||||
component: MenuLayout,
|
component: MenuLayout,
|
||||||
meta: {
|
meta: {
|
||||||
title: '研发交付',
|
title: '研发交付',
|
||||||
@ -99,7 +119,7 @@ const router = createRouter({
|
|||||||
{
|
{
|
||||||
path: '/artifact',
|
path: '/artifact',
|
||||||
name: 'ArtifactSystem',
|
name: 'ArtifactSystem',
|
||||||
redirect: { name: 'SprintPage' },
|
redirect: { name: 'RegistryPage' },
|
||||||
component: MenuLayout,
|
component: MenuLayout,
|
||||||
meta: {
|
meta: {
|
||||||
title: '制品库',
|
title: '制品库',
|
||||||
|
@ -4,24 +4,156 @@ export default useStorage(
|
|||||||
'app',
|
'app',
|
||||||
{
|
{
|
||||||
current_system: 'DashBoard',
|
current_system: 'DashBoard',
|
||||||
current_menu: {
|
system_menu: [
|
||||||
DashBoard: {
|
{
|
||||||
sub_menu: '',
|
key: 'DashBoard',
|
||||||
menu_item: '1',
|
current_sub_menu: '',
|
||||||
|
current_menu_item: 'DashboardPage',
|
||||||
|
title: '工作台',
|
||||||
},
|
},
|
||||||
ProjectSystem: {
|
{
|
||||||
sub_menu: '',
|
key: 'ProjectSystem',
|
||||||
menu_item: '1',
|
current_sub_menu: '',
|
||||||
|
current_menu_item: 'ProjectList',
|
||||||
|
title: '项目管理',
|
||||||
|
menus: [
|
||||||
|
{
|
||||||
|
key: 'ProjectList',
|
||||||
|
icon: 'IconLock',
|
||||||
|
title: '项目空间',
|
||||||
},
|
},
|
||||||
DevelopSystem: {
|
],
|
||||||
sub_menu: '',
|
|
||||||
menu_item: '1',
|
|
||||||
},
|
},
|
||||||
ArtifactSystem: {
|
{
|
||||||
sub_menu: '',
|
key: 'ResourceSystem',
|
||||||
menu_item: 'RegistryPage',
|
current_sub_menu: '',
|
||||||
|
current_menu_item: 'ResourceSearch',
|
||||||
|
title: '资源管理',
|
||||||
|
menus: [
|
||||||
|
{
|
||||||
|
key: 'ResourceSearch',
|
||||||
|
icon: 'IconSearch',
|
||||||
|
title: '资源检索',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: 'EnvManage',
|
||||||
|
icon: 'IconLocation',
|
||||||
|
title: '环境管理',
|
||||||
},
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'DevelopSystem',
|
||||||
|
current_sub_menu: '',
|
||||||
|
current_menu_item: 'AppPage',
|
||||||
|
title: '研发交付',
|
||||||
|
menus: [
|
||||||
|
{
|
||||||
|
key: 'AppPage',
|
||||||
|
icon: 'IconApps',
|
||||||
|
title: '应用管理',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'VersionIteration',
|
||||||
|
icon: 'IconTags',
|
||||||
|
title: '版本迭代',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'PipelineTemplate',
|
||||||
|
icon: 'IconSettings',
|
||||||
|
title: '流水线模板',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'ArtifactSystem',
|
||||||
|
current_sub_menu: '',
|
||||||
|
current_menu_item: 'RegistryPage',
|
||||||
|
title: '制品库',
|
||||||
|
menus: [
|
||||||
|
{
|
||||||
|
key: 'RegistryPage',
|
||||||
|
icon: 'IconTags',
|
||||||
|
title: '制品管理',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'AssetPage',
|
||||||
|
icon: 'IconBranch',
|
||||||
|
title: '制品管理',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'TestSystem',
|
||||||
|
current_sub_menu: '',
|
||||||
|
current_menu_item: 'RegistryPage',
|
||||||
|
title: '测试中心',
|
||||||
|
menus: [
|
||||||
|
{
|
||||||
|
key: 'TestApply',
|
||||||
|
icon: 'IconStamp',
|
||||||
|
title: '提测申请',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'TestCase',
|
||||||
|
icon: 'IconExperiment',
|
||||||
|
title: '测试用例',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'TestExecution',
|
||||||
|
icon: 'IconSend',
|
||||||
|
title: '用例执行',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'DefectManage',
|
||||||
|
icon: 'IconBug',
|
||||||
|
title: '缺陷管理',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'TestReport',
|
||||||
|
icon: 'IconDashboard',
|
||||||
|
title: '测试报告',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'SecuritySystem',
|
||||||
|
current_sub_menu: '',
|
||||||
|
current_menu_item: 'RegistryPage',
|
||||||
|
title: '安全合规',
|
||||||
|
menus: [
|
||||||
|
{
|
||||||
|
key: 'VulnerabilityScan',
|
||||||
|
icon: 'IconFindReplace',
|
||||||
|
title: '漏洞扫描',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'OpsSystem',
|
||||||
|
current_sub_menu: '',
|
||||||
|
current_menu_item: 'RegistryPage',
|
||||||
|
title: '运维中心',
|
||||||
|
menus: [
|
||||||
|
{
|
||||||
|
key: 'OnlineApply',
|
||||||
|
icon: 'IconStamp',
|
||||||
|
title: '上线申请',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'DeployManage',
|
||||||
|
icon: 'IconLayers',
|
||||||
|
title: '应用部署',
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
key: 'MonitorAlarm',
|
||||||
|
icon: 'IconNotification',
|
||||||
|
title: '监控告警',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
localStorage,
|
localStorage,
|
||||||
{ mergeDefaults: true },
|
{ mergeDefaults: true },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user